@raintree-technology/perps 0.1.2 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -1
- package/README.md +42 -4
- package/dist/adapters/aevo.d.ts +1 -6
- package/dist/adapters/aevo.js +0 -21
- package/dist/adapters/certification.js +55 -9
- package/dist/adapters/decibel/order-manager.d.ts +41 -0
- package/dist/adapters/decibel/order-manager.js +216 -0
- package/dist/adapters/decibel/rest-client.d.ts +21 -0
- package/dist/adapters/decibel/rest-client.js +15 -8
- package/dist/adapters/decibel/ws-feed.js +19 -4
- package/dist/adapters/decibel.d.ts +15 -10
- package/dist/adapters/decibel.js +371 -50
- package/dist/adapters/hyperliquid.d.ts +1 -6
- package/dist/adapters/hyperliquid.js +0 -18
- package/dist/adapters/interface.d.ts +15 -14
- package/dist/adapters/orderly.d.ts +1 -9
- package/dist/adapters/orderly.js +0 -33
- package/dist/adapters/paradex.d.ts +1 -9
- package/dist/adapters/paradex.js +1 -34
- package/dist/cli/experience.js +0 -1
- package/dist/cli/program.js +28 -5
- package/dist/commands/arb/alert.d.ts +0 -4
- package/dist/commands/arb/alert.js +4 -14
- package/dist/commands/markets/index.js +2 -0
- package/dist/commands/markets/read-simple.d.ts +2 -0
- package/dist/commands/markets/read-simple.js +130 -0
- package/dist/commands/order/advanced-simple.d.ts +2 -0
- package/dist/commands/order/advanced-simple.js +820 -0
- package/dist/commands/order/index.js +2 -0
- package/dist/index.js +35 -1
- package/dist/lib/exit-codes.js +5 -1
- package/dist/lib/prompts.d.ts +0 -18
- package/dist/lib/prompts.js +1 -22
- package/dist/lib/schema.d.ts +8 -8
- package/dist/lib/schema.js +47 -8
- package/package.json +5 -2
|
@@ -32,16 +32,16 @@ export class DecibelRestClient {
|
|
|
32
32
|
return this.unwrapRows(payload);
|
|
33
33
|
}
|
|
34
34
|
async getOpenOrders(accountAddr) {
|
|
35
|
-
const payload = await this.fetchApi("api/v1/open_orders", {
|
|
35
|
+
const payload = await this.fetchApi("api/v1/open_orders", { account: accountAddr }, true);
|
|
36
36
|
return this.unwrapRows(payload);
|
|
37
37
|
}
|
|
38
38
|
async getOrderHistory(accountAddr, limit = 200, offset = 0) {
|
|
39
|
-
const payload = await this.fetchApi("api/v1/order_history", {
|
|
39
|
+
const payload = await this.fetchApi("api/v1/order_history", { account: accountAddr, limit, offset }, true);
|
|
40
40
|
return this.unwrapRows(payload);
|
|
41
41
|
}
|
|
42
42
|
async getTradeHistory(accountAddr, marketAddr, limit = 200, offset = 0) {
|
|
43
43
|
const params = {
|
|
44
|
-
|
|
44
|
+
account: accountAddr,
|
|
45
45
|
limit,
|
|
46
46
|
offset,
|
|
47
47
|
};
|
|
@@ -74,6 +74,14 @@ export class DecibelRestClient {
|
|
|
74
74
|
const payload = await this.fetchApi("api/v1/funding_rate_history", { account: accountAddr, limit, offset }, true);
|
|
75
75
|
return this.unwrapRows(payload);
|
|
76
76
|
}
|
|
77
|
+
async getActiveTwaps(accountAddr, limit = 200) {
|
|
78
|
+
const payload = await this.fetchApi("api/v1/active_twaps", { account: accountAddr, limit }, true);
|
|
79
|
+
return this.unwrapRows(payload);
|
|
80
|
+
}
|
|
81
|
+
async getTwapHistory(accountAddr, limit = 200, offset = 0) {
|
|
82
|
+
const payload = await this.fetchApi("api/v1/twap_history", { account: accountAddr, limit, offset }, true);
|
|
83
|
+
return this.unwrapRows(payload);
|
|
84
|
+
}
|
|
77
85
|
async getOrderById(accountAddr, marketAddr, orderId, clientOrderId) {
|
|
78
86
|
const params = {
|
|
79
87
|
account: accountAddr,
|
|
@@ -93,11 +101,11 @@ export class DecibelRestClient {
|
|
|
93
101
|
};
|
|
94
102
|
if (orderId)
|
|
95
103
|
params.order_id = orderId;
|
|
96
|
-
const payload = await this.fetchApi("api/v1/trades", params);
|
|
104
|
+
const payload = await this.fetchApi("api/v1/trades", params, true);
|
|
97
105
|
return this.unwrapRows(payload);
|
|
98
106
|
}
|
|
99
107
|
async getFundHistory(accountAddr, limit = 200, offset = 0) {
|
|
100
|
-
const payload = await this.fetchApi("api/v1/
|
|
108
|
+
const payload = await this.fetchApi("api/v1/account_fund_history", { account: accountAddr, limit, offset }, true);
|
|
101
109
|
return this.unwrapRows(payload);
|
|
102
110
|
}
|
|
103
111
|
async fetchApi(path, params, requiresAuth = false) {
|
|
@@ -116,9 +124,6 @@ export class DecibelRestClient {
|
|
|
116
124
|
}
|
|
117
125
|
headers.Authorization = `Bearer ${this.bearerToken}`;
|
|
118
126
|
}
|
|
119
|
-
else if (this.bearerToken) {
|
|
120
|
-
headers.Authorization = `Bearer ${this.bearerToken}`;
|
|
121
|
-
}
|
|
122
127
|
log.debug(`GET ${url.pathname}${url.search}`);
|
|
123
128
|
const json = await fetchWithTimeout(url.toString(), {
|
|
124
129
|
headers,
|
|
@@ -138,8 +143,10 @@ export class DecibelRestClient {
|
|
|
138
143
|
}
|
|
139
144
|
if (isRecord(payload)) {
|
|
140
145
|
const candidates = [
|
|
146
|
+
payload.items,
|
|
141
147
|
payload.results,
|
|
142
148
|
payload.data,
|
|
149
|
+
isRecord(payload.data) ? payload.data.items : undefined,
|
|
143
150
|
isRecord(payload.data) ? payload.data.rows : undefined,
|
|
144
151
|
isRecord(payload.data) ? payload.data.orders : undefined,
|
|
145
152
|
isRecord(payload.data) ? payload.data.trades : undefined,
|
|
@@ -65,10 +65,9 @@ export class DecibelWsFeed extends EventEmitter {
|
|
|
65
65
|
return;
|
|
66
66
|
}
|
|
67
67
|
log.info(`WebSocket connecting: ${this.wsUrl}`);
|
|
68
|
-
|
|
69
|
-
?
|
|
70
|
-
:
|
|
71
|
-
this.ws = options ? new WebSocket(this.wsUrl, options) : new WebSocket(this.wsUrl);
|
|
68
|
+
this.ws = this.bearerToken
|
|
69
|
+
? new WebSocket(this.wsUrl, ["decibel", this.bearerToken])
|
|
70
|
+
: new WebSocket(this.wsUrl);
|
|
72
71
|
this.ws.on("open", () => {
|
|
73
72
|
log.info("WebSocket connected");
|
|
74
73
|
this.startPing();
|
|
@@ -157,18 +156,34 @@ export class DecibelWsFeed extends EventEmitter {
|
|
|
157
156
|
this.emit("account_positions", { accountAddr: topic.split(":")[1], data: payload });
|
|
158
157
|
return;
|
|
159
158
|
}
|
|
159
|
+
if (topic.startsWith("user_positions:")) {
|
|
160
|
+
this.emit("account_positions", { accountAddr: topic.split(":")[1], data: payload });
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
160
163
|
if (topic.startsWith("account_open_orders:")) {
|
|
161
164
|
this.emit("account_open_orders", { accountAddr: topic.split(":")[1], data: payload });
|
|
162
165
|
return;
|
|
163
166
|
}
|
|
167
|
+
if (topic.startsWith("user_open_orders:")) {
|
|
168
|
+
this.emit("account_open_orders", { accountAddr: topic.split(":")[1], data: payload });
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
164
171
|
if (topic.startsWith("order_updates:")) {
|
|
165
172
|
this.emit("order_updates", { accountAddr: topic.split(":")[1], data: payload });
|
|
166
173
|
return;
|
|
167
174
|
}
|
|
175
|
+
if (topic.startsWith("user_order_history:")) {
|
|
176
|
+
this.emit("order_updates", { accountAddr: topic.split(":")[1], data: payload });
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
168
179
|
if (topic.startsWith("user_trades:")) {
|
|
169
180
|
this.emit("user_trades", { accountAddr: topic.split(":")[1], data: payload });
|
|
170
181
|
return;
|
|
171
182
|
}
|
|
183
|
+
if (topic.startsWith("user_active_twaps:")) {
|
|
184
|
+
this.emit("user_active_twaps", { accountAddr: topic.split(":")[1], data: payload });
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
172
187
|
if (topic.startsWith("notifications:")) {
|
|
173
188
|
this.emit("notifications", { accountAddr: topic.split(":")[1], data: payload });
|
|
174
189
|
return;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Decibel Adapter
|
|
3
3
|
* Implements PerpDEXAdapter interface for Decibel (Aptos)
|
|
4
4
|
*/
|
|
5
|
-
import { type Balance, type CancelOrderParams, type ExchangeConfig, type ExchangeInfo, type FundingPayment, type FundingRate, type MarginType, type Market, type ModifyOrderParams, type Order, type OrderBook, type OrderParams, type PerpDEXAdapter, type Position, type PublicTrade, type SubscriptionCallbacks, type Ticker, type Trade, type Unsubscribe, type
|
|
5
|
+
import { type Balance, type CancelOrderParams, type ExchangeConfig, type ExchangeInfo, type FundingPayment, type FundingRate, type MarginType, type Market, type ModifyOrderParams, type Order, type OrderBook, type OrderParams, type PerpDEXAdapter, type Position, type PublicTrade, type SubscriptionCallbacks, type Ticker, type Trade, type Unsubscribe, type TWAPParams, type TWAPStatus } from "./interface.js";
|
|
6
6
|
export declare class DecibelAdapter implements PerpDEXAdapter {
|
|
7
7
|
readonly info: ExchangeInfo;
|
|
8
8
|
private config;
|
|
@@ -19,6 +19,8 @@ export declare class DecibelAdapter implements PerpDEXAdapter {
|
|
|
19
19
|
private readonly assetContextsByMarketAddr;
|
|
20
20
|
private assetContextsTimestamp;
|
|
21
21
|
private readonly trackedMarketAddrs;
|
|
22
|
+
private readonly depthAggregationSize;
|
|
23
|
+
private readonly twapStatusById;
|
|
22
24
|
private readonly tickerSubscribers;
|
|
23
25
|
private readonly orderBookSubscribers;
|
|
24
26
|
private readonly globalSubscribers;
|
|
@@ -45,19 +47,15 @@ export declare class DecibelAdapter implements PerpDEXAdapter {
|
|
|
45
47
|
cancelAllOrders(market?: string): Promise<number>;
|
|
46
48
|
setLeverage(market: string, leverage: number): Promise<void>;
|
|
47
49
|
setMarginType(market: string, type: MarginType): Promise<void>;
|
|
48
|
-
modifyOrder(
|
|
50
|
+
modifyOrder(params: ModifyOrderParams): Promise<Order>;
|
|
49
51
|
batchPlaceOrders(paramsList: OrderParams[]): Promise<Order[]>;
|
|
50
52
|
batchCancelOrders(paramsList: CancelOrderParams[]): Promise<boolean[]>;
|
|
51
|
-
cancelAllAfter(_timeoutMs: number): Promise<void>;
|
|
52
53
|
getOrderHistory(market?: string, limit?: number): Promise<Order[]>;
|
|
53
|
-
getFundingHistory(
|
|
54
|
+
getFundingHistory(market?: string, limit?: number): Promise<FundingPayment[]>;
|
|
54
55
|
getPublicTrades(market: string, limit?: number): Promise<PublicTrade[]>;
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
placeTWAP(_params: TWAPParams): Promise<TWAPStatus>;
|
|
59
|
-
cancelTWAP(_twapId: string): Promise<boolean>;
|
|
60
|
-
getTWAPStatus(_twapId: string): Promise<TWAPStatus | null>;
|
|
56
|
+
placeTWAP(params: TWAPParams): Promise<TWAPStatus>;
|
|
57
|
+
cancelTWAP(twapId: string): Promise<boolean>;
|
|
58
|
+
getTWAPStatus(twapId: string): Promise<TWAPStatus | null>;
|
|
61
59
|
updateIsolatedMargin(_market: string, _amount: string): Promise<void>;
|
|
62
60
|
subscribe(callbacks: SubscriptionCallbacks): Unsubscribe;
|
|
63
61
|
subscribeOrderBook(market: string, callback: (book: OrderBook) => void): Unsubscribe;
|
|
@@ -70,6 +68,7 @@ export declare class DecibelAdapter implements PerpDEXAdapter {
|
|
|
70
68
|
private handleWsAccountOpenOrders;
|
|
71
69
|
private handleWsUserTrades;
|
|
72
70
|
private handleWsOrderUpdate;
|
|
71
|
+
private handleWsActiveTwaps;
|
|
73
72
|
private handleWsNotification;
|
|
74
73
|
private resolveNetwork;
|
|
75
74
|
private loadMarkets;
|
|
@@ -83,6 +82,12 @@ export declare class DecibelAdapter implements PerpDEXAdapter {
|
|
|
83
82
|
private toPosition;
|
|
84
83
|
private toOrder;
|
|
85
84
|
private toTrade;
|
|
85
|
+
private toTwapStatus;
|
|
86
|
+
private mapTwapState;
|
|
87
|
+
private cacheTwapStatus;
|
|
88
|
+
private findAndCacheTwap;
|
|
89
|
+
private normalizeTwapLookupId;
|
|
90
|
+
private isMatchingTwapLookupId;
|
|
86
91
|
private resolveMarketSymbol;
|
|
87
92
|
private mapOrderStatus;
|
|
88
93
|
private mapOrderType;
|