notbank
v2.7.0-alpha
Published
The Notbank for Node.js
Maintainers
Readme
Notbank Node SDK
Installation
To install Notbank use npm
npm install notbankDocumentation
This sdk makes use of the api of Notbank.
Quick start
Rest client
// client
const client = NotbankClient.Factory.createRestClient();
// authentication
await client.authenticateUser({
ApiPublicKey: "my-public-key",
ApiSecretKey: "my-secret-key",
UserId: "xxxx"
});handling errors
try {
const response = await accountService.getAccountPositions({
AccountId: 13,
IncludePending: true,
});
} catch (err) {
const error = err as NotbankError;
// handle error
}Put order at the top of book example
const client = NotbankClient.Factory.createRestClient();
await client.authenticateUser({
ApiPublicKey: "my-public-key",
ApiSecretKey: "my-secret-key",
UserId: "xxxx",
});
var accountId = 235;
// get USDT user balance (also known as position)
var positions = await client
.getAccountService()
.getAccountPositions({ AccountId: accountId });
var productSymbol = "USDT";
var usdtPosition = positions
.filter(position => position.ProductSymbol === productSymbol)
.pop();
if (!usdtPosition) {
throw new Error("no usdt position");
}
// define quantityToSpend (between all usdt_balance and half usdt_balance)
var myUsdtBalance = usdtPosition.Amount;
var randomFraction = Math.random();
var halfMyBalance = myUsdtBalance / 2;
var atLeastHalfMyBalance = myUsdtBalance - randomFraction * halfMyBalance;
var quantityToSpend = atLeastHalfMyBalance;
var marketPair = "BTCUSDT";
// define orderPrice (around market top)
var btcUsdtOrderbook = await client
.getTradingService()
.getOrderBook({ Market_Pair: marketPair, Depth: 5, Level: 2 });
var randomSmallFraction = (Math.random() * 90 + 10) / 1000;
var topBid = btcUsdtOrderbook.bids[0];
var orderPrice = topBid.price + randomSmallFraction;
// TODO: handle tick size
var orderQuantity = quantityToSpend / orderPrice;
// send order
var instruments = await client.getInstrumentService().getInstruments();
var btcUsdtInstrument = instruments.filter(
pair => pair.Symbol === marketPair
)[0];
var orderResult = await client.getTradingService().sendOrder({
InstrumentId: btcUsdtInstrument.InstrumentId,
AccountId: accountId,
TimeInForce: TimeInForce.GTC,
Side: OrderSide.Buy,
OrderType: OrderTypeInt.Limit,
Quantity: orderQuantity,
LimitPrice: orderPrice
});
// handle order result
if (orderResult.Status === "Rejected") {
// order was rejected
console.log("order rejected");
console.log(orderResult.Message);
return;
}
// order was accepted
console.log("orderId,", orderResult.OrderId);
// cancel order
await client.getTradingService().cancelOrder({
AccountId: accountId,
OrderId: orderResult.OrderId
});
return orderResult.OrderId;websocket client
The websocket client can be instanced with auto reconnection active. If done, then the restarting websocket will reconnect forever when the connection goes down unexpectedly, re-authenticating if it was authenticated, and re-subscribing to already stablished subscriptions. While reconnecting, calls to the websocket will throw. For subscriptions, reconnection will call again the snapshot hooks.
client = NotbankClient.Factory.createWebsocketClient({
withReconnect: true
});
await client.connect();
await client.authenticateUser({
ApiPublicKey: "my-public-key",
ApiSecretKey: "my-secret-key",
UserId: "xxxx"
});
// ...
client.close();DevOps
How to build
Run the following npm script
npm run buildThis command will compile the library's code from Typescript to Javascript including its type declarations to be used in NodeJS and a bundle version for Browser.
