-
Notifications
You must be signed in to change notification settings - Fork 0
/
firi.js
78 lines (67 loc) · 1.93 KB
/
firi.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import BigNumber from 'bignumber.js';
import got from 'got';
import getPackageUserAgent from 'package-user-agent';
import {z} from 'zod';
import config from './config.js';
import {sendDiscordErrorMessage} from './discord-messaging.js';
const baseApiUrl = 'https://api.firi.com';
const {apiKey} = config;
const packageUserAgent = await getPackageUserAgent();
const balanceSchema = z.object({
currency: z.string(),
balance: z.coerce.number(),
hold: z.string(),
available: z.coerce.number(),
});
async function getBalances() {
const response = await got(`${baseApiUrl}/v2/balances`, {
headers: {
'firi-access-key': apiKey,
...packageUserAgent,
},
});
return JSON.parse(response.body);
}
export async function checkIfSufficientBalance(neededBalance) {
const balances = await getBalances();
if (!Array.isArray(balances)) {
await sendDiscordErrorMessage('Failed to get balances');
throw new Error('Failed to get balances');
}
const nokBalance = balances.find(balance => balance.currency === 'NOK');
const parsedNokBalance = balanceSchema.parse(nokBalance);
return parsedNokBalance.available >= neededBalance;
}
const marketTickerSchema = z.object({
bid: z.coerce.number(),
ask: z.coerce.number(),
spread: z.coerce.number(),
});
const orderSchema = z.object({
id: z.number(),
});
export async function createOrder(market, nokPrice) {
const response = await got(`${baseApiUrl}/v2/markets/${market}/ticker`, {
headers: {
'firi-access-key': apiKey,
...packageUserAgent,
},
});
const buyPrice = marketTickerSchema.parse(JSON.parse(response.body)).ask;
const buyAmount = BigNumber(nokPrice).div(buyPrice);
const buyResponse = await got(`${baseApiUrl}/v2/orders`, {
headers: {
'firi-access-key': apiKey,
...packageUserAgent,
},
method: 'POST',
json: {
market,
type: 'bid',
price: `${buyPrice}`,
amount: `${buyAmount}`,
},
});
const order = JSON.parse(buyResponse.body);
orderSchema.parse(order);
}