ts-kraken
v4.0.4
Published
A strongly typed library to operate with the Kraken Crypto Exchange
Downloads
238
Maintainers
Readme
🚀 Quick-Start
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 })
})
ℹ️ About this project
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 botsSubscribe 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
🛠️ Usage
Use the library in your TypeScript/JS project:
cd dependant/project/path && npm i ts-kraken
Get IDE code-suggestions for any REST or WS request you need
Use the REPL-cli
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
Launch the REPL directly on your terminal with npx
:
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
Set it up in a standalone directory:
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!
REPL commands
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
🔖 Documentation
🙏 Acknowledgments
- @trasherdk | Contributor