A strongly typed library to operate with the Kraken Crypto Exchange
Quick-Start • About • Usage • Documentation • Acknowledgments
-
Add the dependency to your js/ts project:
npm i ts-kraken
-
Optionally add
KRAKEN_API_KEY
andKRAKEN_API_SECRET
to your .env (only if you intend to use private methods, i.e. add orders or fetch balances) -
Test the repl-cli with
npx ts-kraken
or find code-snippets examples for the methods you want to import in the documentation.
import {
getClosedOrders,
getWsAuthToken,
privateWsSubscription,
publicWsSubscription
} from 'ts-kraken'
getWsAuthToken()
.then(async token => {
console.log({ token })
/* Fetch latest 50 closed orders and logs them */
getClosedOrders().then(lastClosedOrdersArr => {
const closedOrders = lastClosedOrdersArr.map(
({ orderid, descr: { order } }) => ({ orderid, order })
)
console.table(closedOrders)
})
/* Print any updates in the private `balances` channel */
const balances$ = await privateWsSubscription(
{
channel: 'balances',
params: { snapshot: true }
},
token
) // Pass token here to save time as the library won't need to fetch one internally!
balances$.subscribe(({ data }) => {
console.table(data)
})
/* Track 5m candles updates */
const fiveMinsBtcUsdCandles$ = publicWsSubscription({
channel: 'ohlc',
params: { symbol: ['BTC/USD'], interval: 5, snapshot: false }
})
fiveMinsBtcUsdCandles$.subscribe(
({ data: [{ open, high, low, close }] }) => {
console.log({ open, high, low, close })
}
)
})
.catch(error => {
console.log({ error })
})
ts-kraken is a strongly-typed Typescript Library that will help you operating via code or shell with the Kraken Crypto Exchange
-
Easily operate with Kraken REST and WebSocketV2 APIs
-
Use
ts-kraken
helper methods to build your own trading bots -
Subscribe to custom streams of data combining the RxJS Observables returned by the WebsocketV2 methods
-
Get advantage of modern IDEs Typescript integrations (code autocompletion, suggested imports, etc.)
It also features an interactive node REPL-cli to operate via command-shell or leave a socket open printing all updates to the terminal with a nice jq format 🤓
-
Kraken UI down durig high traffic or maintenance? You can still use the APIs!
-
Use any of the available REST methods directly from your terminal
-
Print nicely formatted data updates coming directly from WebsocketV2 subscriptions
(click to extend 👇)
cd dependant/project/path && npm i ts-kraken
![ts_kraken_ide](/yeikiu/ts-kraken/raw/master/.github/ts_kraken_IDE_2.png)
Get IDE code-suggestions for any REST or WS request you need
![ts_kraken_ide](/yeikiu/ts-kraken/raw/master/.github/ts_kraken_IDE.png)
(click to extend 👇)
You can create a
.env
file that the repl-cli will try to read fromcwd
(current working directory):
touch .env
Use the following format:
# .env's file content holding your API key/secret
KRAKEN_API_KEY=yourApiKey
KRAKEN_API_SECRET=yourApiSecret
Quickest way to test it! 🚀 (will automatically download the library as a global npm package if you don't run
npm i ts-kraken
first)
npx ts-kraken
Recommended if planning to use regularly and/or modify core functionality
-
git clone https://github.com/yeikiu/ts-kraken
-
cd ts-kraken
-
npm i
-
npm run kraken-repl
Open a PR with any addition/change proposal you have!
(click to extend 👇)
The following list includes only a subset sample of all possible commands you could generate for the .get and .post methods:
.exit 👉 Exit the REPL
-----------------------------------------------------------------------------------------------------------------------------------------------------
.help 👉 Print this help message
-----------------------------------------------------------------------------------------------------------------------------------------------------
.get 👉 Fetch PUBLIC REST data.
Usage >> .get <PublicEndpoint>! <paramA=valueA¶m_list[]=value1¶m_list[]=value2>? <jqFilter>? <-table>?
i.e. >> .get Time .rfc1123
>> .get AssetPairs . as $base|keys|map($base[.])|map({wsname,tick_size,pair_decimals,ordermin}) -table
>> .get AssetPairs pair=BTC/EUR . as $base|keys[0]|$base[.]|{wsname,tick_size,pair_decimals,ordermin}
-----------------------------------------------------------------------------------------------------------------------------------------------------
.post 👉 Fetch PRIVATE REST data.
Usage >> .post <PrivateEndpoint>! <paramA=valueA¶m_list[]=value1¶m_list[]=value2>? <jqFilter>? <-table>?
i.e. >> .post OpenOrders .open as $open|.open|keys|map($open[.].descr.order)
>> .post OpenOrders .open as $open|.open|keys|map($open[.].descr) -table
>> .post AddOrder ordertype=market&type=sell&volume=0.002&pair=ETHEUR
>> .post CancelAll
-----------------------------------------------------------------------------------------------------------------------------------------------------
.privsub 👉 Subscribe to PRIVATE WS stream.
Usage >> .privsub <subscriptionName>! <paramA=valueA¶m_list[]=value1¶m_list[]=value2>? <jqFilter>? <-table>?
i.e. >> .privsub balances snap_orders=true .data|map({ asset, balance }) -table
>> .privsub executions snap_orders=true .data|map({order_id,side,order_qty,symbol,order_type,limit_price}) -table
.pubsub 👉 Subscribe to PUBLIC WS stream.
Usage >> .pubsub <subscriptionName>! <paramA=valueA¶m_list[]=value1¶m_list[]=value2>? <jqFilter>? <-table>?
i.e. >> .pubsub ticker symbol[]=BTC/EUR .data[0].last
>> .pubsub ticker symbol[]=BTC/EUR&symbol[]=ADA/BTC&symbol[]=USDT/USD .data[0]|{symbol,last} -table
-----------------------------------------------------------------------------------------------------------------------------------------------------
.setkeys 👉 Load API key/secret (non-persistent, use a .env file to reuse persistent keys)
.showkeys 👉 Display current API key/secret in use
-----------------------------------------------------------------------------------------------------------------------------------------------------
.unsub 👉 Closes WebSocket stream for GIVEN subscriptionName.
i.e. >> .unsub ticker
>> .unsub executions
.unsuball 👉 Closes WebSocket stream for ALL subscriptions.
i.e. >> .unsuball
- @trasherdk | Contributor