JOYSO API client library for trading.
v0.3.0 has breaking changes. Please see CHANGELOG v0.3.0
You can use this command to install:
npm install joyso
Setup and connect to JOYSO
const Joyso = require('joyso');
async function start() {
const joyso = new Joyso({
// your private key
key: '0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef'
});
await joyso.connect();
}
Subscribe order book, notify if change.
const subscription = joyso.subscribeOrderBook('JOY_ETH', orderBook => {
console.log(JSON.stringify(orderBook));
});
Result:
{
"buy":[
{
"price":0.000123456,
"amount":"8.5"
},
{
"price":0.000123455,
"amount":"98.5"
}
],
"sell":[
{
"price":0.00012346,
"amount":"100"
},
{
"price":0.00012347,
"amount":"500"
}
]
}
- amount is BigNumber object.
Subscribe market trades, notify if change, return last 100 records.
const subscription = joyso.subscribeTrades('JOY_ETH', trades => {
console.log(JSON.stringify(trades.slice(0, 2)));
});
Result
[
{
"id":317,
"side":"sell",
"price":0.000123456,
"amount":"2",
"pair":"JOY_ETH"
},
{
"id":315,
"side":"buy",
"price":0.00012347,
"amount":"1",
"pair":"JOY_ETH"
}
]
- amount is BigNumber object.
Subscribe balances, notify if change.
const subscription = joyso.subscribeBalances(balances => {
console.log(JSON.stringify(balances));
});
Result
{
"JOY":{
"inOrder":"0",
"available":"4.5"
},
"ETH":{
"inOrder":"0.001447757819",
"available":"0.097815997145"
}
}
- inOrder and available are BigNumber objects.
Subscribe open orders, notify if change.
const subscription = joyso.subscribeOrders(orders => {
console.log(JSON.stringify(orders));
});
Result
[
{
"id":353,
"status":"active",
"side":"buy",
"price":0.000123481,
"amount":"1",
"fill":"0",
"pair":"T00_ETH"
},
{
"id":326,
"status":"partial",
"side":"buy",
"price":0.000123456,
"amount":"12",
"fill":"3.5",
"pair":"JOY_ETH"
}
]
- amount and fill are BigNumber objects.
- status could be
active
orpartial
Subscribe my trades, notify if change, return last 100 records.
const subscription = joyso.subscribeMyTrades(trades => {
console.log(JSON.stringify(trades.slice(0, 2)));
});
Result
[
{
"id":317,
"status":"done",
"txHash":"0xcf0aeb815200951559a38650a84f8eefa46411224e5e4076d6313ab47c7f9bb5",
"side":"sell",
"price":0.000123456,
"amount":"2",
"pair":"JOY_ETH",
"fee":"ETH",
"gasFee":"0",
"txFee":"2.46912e-7"
},
{
"id":316,
"status":"done",
"txHash":"0x582cc7a84e8aa7e28e44b11e22f24169a34776915ebbc95a88fa0e77c44faf4c",
"side":"sell",
"price":0.00012347,
"amount":"1",
"pair":"JOY_ETH",
"fee":"ETH",
"gasFee":"0.000105",
"txFee":"2.4694e-7"
}
]
- amount, gasFee and txFee are BigNumber objects.
Subscribe funds, notify if change, return last 100 records.
const subscription = joyso.subscribeFunds(funds => {
console.log(JSON.stringify(funds));
});
Result
[
{
"id":192,
"status":"done",
"txHash":"0x4dbc49ae4735b1c230244d41377cf6aeccd70c5181df048e3be8306af8a487e6",
"type":"withdraw",
"amount":"0.0099",
"token":"ETH",
"fee":"ETH",
"withdrawFee":"0.0001",
"timestamp":1537434044,
"blockId":null
},
{
"id":191,
"status":"done",
"txHash":"0x8435bf9f69dd908373d50353ebab343b625527cd8ea44532eb01c8b0a5642879",
"type":"withdraw",
"amount":"0.001",
"token":"ETH",
"fee":"JOY",
"withdrawFee":"0.809841",
"timestamp":1537433888,
"blockId":null
}
]
- amount and withdrawFee are BigNumber objects.
- status could be
pending
,processing
,done
orfailed
- type could be
deposit
,withdraw
ortransfer
Place buying order
try {
let order = await joyso.buy({
pair: 'JOY_ETH',
price: '0.000123481',
amount: 1,
feeByJoy: true
});
console.log(JSON.stringify(order));
} catch (e) {
if (e.statusCode === 400) {
console.log(e.error.error);
} else {
console.log(e.message);
}
}
Options
Name | Required | Description |
---|---|---|
pair | O | Pair to trade, format is ${base}_${quote} , eg: JOY_ETH |
price | O | Order price, minimum is 0.000000001 |
amount | O | Quote amount |
feeByJoy | Specify how to pay fee. true will pay by JOY. false will pay by quote token(ETH if pair XXX_ETH). Default is false |
Result
{
"id":361,
"status":"complete",
"side":"buy",
"price":0.000123481,
"amount":"1",
"fill":"1",
"pair":"JOY_ETH"
}
- amount and fill are BigNumber objects.
- status could be
active
,partial
orcomplete
Place selling order
let order = await joyso.sell({
pair: 'JOY_ETH',
price: '0.000123481',
amount: 100
});
Options and result are same with buy.
Place order
let order = await joyso.trade({
side: 'buy',
pair: 'JOY_ETH',
price: '0.000123481',
amount: 100
});
Options and result are same with buy. One extra options
Name | Required | Description |
---|---|---|
side | O | buy or sell |
Withdraw
await joyso.withdraw({
token: 'ETH',
amount: 0.01,
fee: 'eth'
});
Options
Name | Required | Description |
---|---|---|
token | O | Token to withdraw |
amount | O | Amount to withdraw |
fee | O | Specify how to pay fee. eth , joy or token . token can only be used when token is quote token. |
Get my trades
await joyso.getMyTrades({
quote: 'ETH',
base: 'JOY',
side: 'sell',
from: 1539129600,
to: 1539216000,
before: 123,
limit: 10
});
Options
Name | Required | Description |
---|---|---|
quote | Quote token | |
base | Base token | |
side | Specify side. buy , sell or blank. Blank means both. |
|
from | From time (included). Unix timestamp | |
to | To time (excluded). Unix timestamp | |
before | Only return Trade ID before this. (excluded) | |
limit | Specify size of records to return. Default 100, max 1000 |
Results are same with subscribeMyTrades.
Disconnect from JOYSO.
Unsubscribe
subscription.unsubscribe();
The project is released under the MIT license.
The project's website is located at https://github.com/Joyso-io/joyso-api