A strongly typed library to operate with the Kraken Crypto Exchange
Quick-Start β’ About β’ Usage β’ Documentation β’ Acknowledgments
1.- Add the dependency to your js/ts project: npm i ts-kraken
2.- Optionally add KRAKEN_API_KEY
and KRAKEN_API_SECRET
to your .env (only
if you intend to use private methods, i.e. add orders or fetch balances)
3.- Test the repl-cli with npx ts-kraken
or find code-snippets examples for the methods you want to import in
the documentation.
import {
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 π)
Get IDE code-suggestions for any REST or WS request you need
cd dependant/project/path && npm i ts-kraken
(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