@n1xyz/nord-ts 0.0.1 → 0.0.5

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.
Files changed (260) hide show
  1. package/README.md +148 -65
  2. package/dist/bridge/client.d.ts +150 -0
  3. package/dist/bridge/client.js +394 -0
  4. package/dist/bridge/const.d.ts +23 -0
  5. package/dist/bridge/const.js +47 -0
  6. package/dist/bridge/index.d.ts +5 -0
  7. package/dist/bridge/index.js +23 -0
  8. package/dist/bridge/types.d.ts +118 -0
  9. package/dist/bridge/types.js +16 -0
  10. package/dist/bridge/utils.d.ts +64 -0
  11. package/dist/bridge/utils.js +131 -0
  12. package/dist/const.d.ts +2 -5
  13. package/dist/const.js +2 -6
  14. package/dist/gen/common.d.ts +6 -1
  15. package/dist/gen/common.js +19 -9
  16. package/dist/gen/nord.d.ts +76 -21
  17. package/dist/gen/nord.js +987 -423
  18. package/dist/idl/bridge.d.ts +2 -0
  19. package/dist/idl/bridge.js +703 -0
  20. package/dist/index.d.ts +5 -2
  21. package/dist/index.js +18 -2
  22. package/dist/nord/{actions.d.ts → api/actions.d.ts} +6 -6
  23. package/dist/nord/{actions.js → api/actions.js} +6 -10
  24. package/dist/nord/api/core.d.ts +49 -0
  25. package/dist/nord/api/core.js +121 -0
  26. package/dist/nord/api/market.d.ts +36 -0
  27. package/dist/nord/api/market.js +98 -0
  28. package/dist/nord/api/metrics.d.ts +67 -0
  29. package/dist/nord/api/metrics.js +132 -0
  30. package/dist/nord/api/queries.d.ts +81 -0
  31. package/dist/nord/api/queries.js +187 -0
  32. package/dist/nord/client/Nord.d.ts +335 -0
  33. package/dist/nord/client/Nord.js +532 -0
  34. package/dist/nord/client/NordUser.d.ts +320 -0
  35. package/dist/nord/client/NordUser.js +697 -0
  36. package/dist/nord/index.d.ts +9 -2
  37. package/dist/nord/index.js +30 -6
  38. package/dist/nord/models/Subscriber.d.ts +37 -0
  39. package/dist/nord/models/Subscriber.js +25 -0
  40. package/dist/nord/utils/NordError.d.ts +35 -0
  41. package/dist/nord/utils/NordError.js +46 -0
  42. package/dist/types.d.ts +143 -86
  43. package/dist/types.js +12 -1
  44. package/dist/utils.d.ts +9 -0
  45. package/dist/utils.js +20 -1
  46. package/dist/websocket/NordWebSocketClient.d.ts +71 -0
  47. package/dist/websocket/NordWebSocketClient.js +343 -0
  48. package/dist/websocket/events.d.ts +19 -0
  49. package/dist/websocket/events.js +2 -0
  50. package/dist/websocket/index.d.ts +2 -0
  51. package/dist/websocket/index.js +5 -0
  52. package/docs/assets/hierarchy.js +1 -0
  53. package/docs/assets/highlight.css +16 -16
  54. package/docs/assets/icons.js +17 -14
  55. package/docs/assets/icons.svg +1 -1
  56. package/docs/assets/main.js +5 -4
  57. package/docs/assets/navigation.js +1 -1
  58. package/docs/assets/search.js +1 -1
  59. package/docs/assets/style.css +1423 -1227
  60. package/docs/classes/Nord.html +189 -43
  61. package/docs/classes/NordError.html +24 -0
  62. package/docs/classes/NordUser.html +120 -35
  63. package/docs/classes/NordWebSocketClient.html +335 -0
  64. package/docs/classes/SolanaBridgeClient.html +86 -0
  65. package/docs/classes/Subscriber.html +10 -6
  66. package/docs/enums/FillMode.html +5 -5
  67. package/docs/enums/KeyType.html +4 -4
  68. package/docs/enums/MetricPeriod.html +9 -0
  69. package/docs/enums/PdaSeedType.html +9 -0
  70. package/docs/enums/PeakTpsPeriodUnit.html +7 -7
  71. package/docs/enums/Side.html +3 -3
  72. package/docs/enums/WebSocketMessageType.html +7 -0
  73. package/docs/functions/actionQueryRollman.html +6 -0
  74. package/docs/functions/actionsQueryRollman.html +6 -0
  75. package/docs/functions/aggregateMetrics-1.html +7 -0
  76. package/docs/functions/assert.html +1 -1
  77. package/docs/functions/bigIntToProtoU128.html +3 -3
  78. package/docs/functions/blockQueryRollman.html +6 -0
  79. package/docs/functions/blockSummaryQueryRollman.html +6 -0
  80. package/docs/functions/bridgeToBN.html +5 -0
  81. package/docs/functions/bufferToHex.html +4 -0
  82. package/docs/functions/cancelOrder.html +1 -0
  83. package/docs/functions/checkPubKeyLength.html +1 -1
  84. package/docs/functions/checkedFetch.html +4 -4
  85. package/docs/functions/createSession.html +1 -0
  86. package/docs/functions/decodeLengthDelimited.html +7 -6
  87. package/docs/functions/encodeLengthDelimited.html +4 -4
  88. package/docs/functions/fillModeToProtoFillMode.html +4 -4
  89. package/docs/functions/findMarket.html +1 -1
  90. package/docs/functions/findPda.html +6 -0
  91. package/docs/functions/findToken.html +1 -1
  92. package/docs/functions/fromBN.html +5 -0
  93. package/docs/functions/getAccount.html +6 -0
  94. package/docs/functions/getActionNonce.html +5 -0
  95. package/docs/functions/getCurrentTps.html +6 -0
  96. package/docs/functions/getInfo.html +5 -0
  97. package/docs/functions/getMedianLatency.html +6 -0
  98. package/docs/functions/getOrderbook.html +6 -0
  99. package/docs/functions/getPeakTps.html +6 -0
  100. package/docs/functions/getTimestamp.html +5 -0
  101. package/docs/functions/getTotalTransactions.html +5 -0
  102. package/docs/functions/getTrades.html +6 -0
  103. package/docs/functions/getUserAccountIds.html +6 -0
  104. package/docs/functions/hexToBuffer.html +4 -0
  105. package/docs/functions/initWebSocketClient.html +12 -0
  106. package/docs/functions/keypairFromPrivateKey.html +4 -0
  107. package/docs/functions/makeSigningFunction.html +4 -0
  108. package/docs/functions/makeWalletSignFn.html +5 -5
  109. package/docs/functions/marketsStats.html +5 -0
  110. package/docs/functions/optExpect.html +4 -4
  111. package/docs/functions/optMap.html +5 -5
  112. package/docs/functions/optUnwrap.html +2 -2
  113. package/docs/functions/panic.html +1 -1
  114. package/docs/functions/placeOrder.html +1 -0
  115. package/docs/functions/queryAction.html +6 -0
  116. package/docs/functions/queryBlock.html +6 -0
  117. package/docs/functions/queryLastNBlocks.html +5 -0
  118. package/docs/functions/queryPrometheus.html +6 -0
  119. package/docs/functions/queryRecentActions.html +6 -0
  120. package/docs/functions/queryRecentBlocks.html +6 -0
  121. package/docs/functions/revokeSession.html +1 -0
  122. package/docs/functions/shortenPublicKey.html +5 -0
  123. package/docs/functions/signAction.html +2 -2
  124. package/docs/functions/toBN.html +5 -0
  125. package/docs/functions/toScaledU128.html +5 -5
  126. package/docs/functions/toScaledU64.html +5 -5
  127. package/docs/functions/transfer.html +1 -0
  128. package/docs/functions/withdraw.html +1 -0
  129. package/docs/hierarchy.html +1 -0
  130. package/docs/index.html +39 -20
  131. package/docs/interfaces/Account.html +8 -8
  132. package/docs/interfaces/ActionInfo.html +8 -8
  133. package/docs/interfaces/ActionNonceResponse.html +3 -0
  134. package/docs/interfaces/ActionQuery.html +4 -4
  135. package/docs/interfaces/ActionResponse.html +8 -8
  136. package/docs/interfaces/ActionsExtendedInfo.html +10 -10
  137. package/docs/interfaces/ActionsQuery.html +5 -5
  138. package/docs/interfaces/ActionsResponse.html +6 -6
  139. package/docs/interfaces/AggregateMetrics.html +12 -12
  140. package/docs/interfaces/BlockFacts.html +10 -0
  141. package/docs/interfaces/BlockQuery.html +6 -6
  142. package/docs/interfaces/BlockResponse.html +6 -6
  143. package/docs/interfaces/BlockSummary.html +8 -8
  144. package/docs/interfaces/BlockSummaryResponse.html +6 -6
  145. package/docs/interfaces/DeltaEvent.html +6 -6
  146. package/docs/interfaces/DepositSplParams.html +10 -0
  147. package/docs/interfaces/Info.html +3 -3
  148. package/docs/interfaces/Market.html +8 -6
  149. package/docs/interfaces/MarketStats.html +7 -7
  150. package/docs/interfaces/MarketsStatsResponse.html +2 -2
  151. package/docs/interfaces/NordConfig.html +14 -5
  152. package/docs/interfaces/NordWebSocketClientEvents.html +4 -0
  153. package/docs/interfaces/NordWebSocketEvents.html +8 -0
  154. package/docs/interfaces/Order.html +6 -6
  155. package/docs/interfaces/OrderInfo.html +6 -6
  156. package/docs/interfaces/OrderbookEntry.html +4 -0
  157. package/docs/interfaces/OrderbookQuery.html +6 -0
  158. package/docs/interfaces/OrderbookResponse.html +6 -10
  159. package/docs/interfaces/OrderbookSubscription.html +159 -0
  160. package/docs/interfaces/PerpMarketStats.html +5 -5
  161. package/docs/interfaces/RollmanActionExtendedInfo.html +4 -4
  162. package/docs/interfaces/RollmanActionInfo.html +4 -4
  163. package/docs/interfaces/RollmanActionResponse.html +4 -4
  164. package/docs/interfaces/RollmanActionsResponse.html +2 -2
  165. package/docs/interfaces/RollmanBlockResponse.html +3 -3
  166. package/docs/interfaces/SPLTokenInfo.html +10 -0
  167. package/docs/interfaces/SolanaBridgeConfig.html +10 -0
  168. package/docs/interfaces/StateFacts.html +10 -0
  169. package/docs/interfaces/SubscriberConfig.html +3 -3
  170. package/docs/interfaces/TimestampResponse.html +3 -0
  171. package/docs/interfaces/Token.html +5 -5
  172. package/docs/interfaces/TokenInfo.html +5 -0
  173. package/docs/interfaces/Trade.html +5 -5
  174. package/docs/interfaces/TradeSubscription.html +159 -0
  175. package/docs/interfaces/Trades.html +5 -5
  176. package/docs/interfaces/TradesQuery.html +6 -0
  177. package/docs/interfaces/TradesResponse.html +7 -12
  178. package/docs/interfaces/TransferParams.html +8 -0
  179. package/docs/interfaces/UserAccountIdsQuery.html +3 -0
  180. package/docs/interfaces/UserAccountIdsResponse.html +3 -0
  181. package/docs/interfaces/WebSocketDeltaUpdate.html +9 -0
  182. package/docs/interfaces/WebSocketSubscription.html +4 -0
  183. package/docs/interfaces/WebSocketTradeUpdate.html +6 -0
  184. package/docs/interfaces/WebSocketUserUpdate.html +6 -0
  185. package/docs/interfaces/WithdrawalClaim.html +14 -0
  186. package/docs/interfaces/WithdrawalParams.html +8 -0
  187. package/docs/modules.html +1 -77
  188. package/docs/types/BigIntValue.html +2 -2
  189. package/docs/types/WebSocketMessage.html +1 -0
  190. package/docs/variables/DEBUG_KEYS.html +1 -1
  191. package/docs/variables/DEFAULT_FUNDING_AMOUNTS.html +1 -1
  192. package/docs/variables/DEV_TOKEN_INFOS.html +1 -1
  193. package/docs/variables/DEV_URL.html +1 -1
  194. package/docs/variables/MAX_BUFFER_LEN.html +1 -1
  195. package/docs/variables/SESSION_TTL.html +1 -1
  196. package/docs/variables/WEBSERVER_DEV_URL.html +1 -1
  197. package/docs/variables/ZERO_DECIMAL.html +1 -1
  198. package/docs/variables/_private.html +2 -0
  199. package/eslint.config.mjs +66 -0
  200. package/package.json +20 -23
  201. package/src/bridge/client.ts +487 -0
  202. package/src/bridge/const.ts +53 -0
  203. package/src/bridge/index.ts +7 -0
  204. package/src/bridge/types.ts +127 -0
  205. package/src/bridge/utils.ts +140 -0
  206. package/src/const.ts +4 -9
  207. package/src/gen/common.ts +27 -10
  208. package/src/gen/nord.ts +1045 -487
  209. package/src/idl/bridge.ts +702 -0
  210. package/src/index.ts +21 -2
  211. package/src/nord/{actions.ts → api/actions.ts} +12 -16
  212. package/src/nord/api/core.ts +130 -0
  213. package/src/nord/api/market.ts +125 -0
  214. package/src/nord/api/metrics.ts +154 -0
  215. package/src/nord/api/queries.ts +236 -0
  216. package/src/nord/client/Nord.ts +652 -0
  217. package/src/nord/client/NordUser.ts +1101 -0
  218. package/src/nord/index.ts +16 -2
  219. package/src/nord/models/Subscriber.ts +56 -0
  220. package/src/nord/utils/NordError.ts +72 -0
  221. package/src/types.ts +163 -92
  222. package/src/utils.ts +22 -1
  223. package/src/websocket/NordWebSocketClient.ts +432 -0
  224. package/src/websocket/events.ts +31 -0
  225. package/src/websocket/index.ts +2 -0
  226. package/tsconfig.eslint.json +12 -0
  227. package/.eslintignore +0 -1
  228. package/.eslintrc.js +0 -20
  229. package/dist/abis/ERC20_ABI.d.ts +0 -39
  230. package/dist/abis/ERC20_ABI.js +0 -313
  231. package/dist/abis/NORD_GETTERS_FACET_ABI.d.ts +0 -34
  232. package/dist/abis/NORD_GETTERS_FACET_ABI.js +0 -195
  233. package/dist/abis/NORD_RAMP_FACET_ABI.d.ts +0 -35
  234. package/dist/abis/NORD_RAMP_FACET_ABI.js +0 -144
  235. package/dist/abis/index.d.ts +0 -3
  236. package/dist/abis/index.js +0 -9
  237. package/dist/nord/Nord.d.ts +0 -76
  238. package/dist/nord/Nord.js +0 -376
  239. package/dist/nord/NordImpl.d.ts +0 -7
  240. package/dist/nord/NordImpl.js +0 -6
  241. package/dist/nord/NordUser.d.ts +0 -77
  242. package/dist/nord/NordUser.js +0 -249
  243. package/docs/functions/createWebSocketSubscription.html +0 -12
  244. package/docs/interfaces/ERC20TokenInfo.html +0 -5
  245. package/docs/interfaces/OrderbookOrder.html +0 -6
  246. package/docs/interfaces/TradeInfo.html +0 -20
  247. package/docs/interfaces/TradesQueryParams.html +0 -10
  248. package/docs/variables/DEV_CONTRACT_ADDRESS.html +0 -1
  249. package/docs/variables/ERC20_ABI.html +0 -1
  250. package/docs/variables/EVM_DEV_URL.html +0 -1
  251. package/docs/variables/FAUCET_PRIVATE_ADDRESS.html +0 -1
  252. package/docs/variables/NORD_GETTERS_FACET_ABI.html +0 -1
  253. package/docs/variables/NORD_RAMP_FACET_ABI.html +0 -1
  254. package/src/abis/ERC20_ABI.ts +0 -310
  255. package/src/abis/NORD_GETTERS_FACET_ABI.ts +0 -192
  256. package/src/abis/NORD_RAMP_FACET_ABI.ts +0 -141
  257. package/src/abis/index.ts +0 -3
  258. package/src/nord/Nord.ts +0 -504
  259. package/src/nord/NordImpl.ts +0 -8
  260. package/src/nord/NordUser.ts +0 -469
package/src/nord/index.ts CHANGED
@@ -1,2 +1,16 @@
1
- export { NordUser } from "./NordUser";
2
- export { Nord, createWebSocketSubscription, Subscriber } from "./Nord";
1
+ // Export main client classes
2
+ export { Nord } from "./client/Nord";
3
+ export { NordUser } from "./client/NordUser";
4
+
5
+ // Export utility classes
6
+ export { NordError } from "./utils/NordError";
7
+
8
+ // Export API modules
9
+ export * from "./api/core";
10
+ export * from "./api/metrics";
11
+ export * from "./api/queries";
12
+ export * from "./api/market";
13
+ export * from "./api/actions";
14
+
15
+ // Export models
16
+ export * from "./models/Subscriber";
@@ -0,0 +1,56 @@
1
+ import { EventEmitter } from "events";
2
+ import {
3
+ Account,
4
+ DeltaEvent,
5
+ OrderbookResponse,
6
+ SubscriberConfig,
7
+ Trade,
8
+ Trades,
9
+ } from "../../types";
10
+ import { MAX_BUFFER_LEN } from "../../utils";
11
+
12
+ /**
13
+ * Subscriber class for handling WebSocket subscriptions
14
+ */
15
+ export class Subscriber {
16
+ streamURL: string;
17
+ buffer: (DeltaEvent | Trades | Account)[];
18
+ maxBufferLen: number;
19
+
20
+ /**
21
+ * Create a new Subscriber instance
22
+ * @param config Subscriber configuration
23
+ */
24
+ constructor(config: SubscriberConfig) {
25
+ this.streamURL = config.streamURL;
26
+ this.buffer = [];
27
+ this.maxBufferLen = config.maxBufferLen ?? MAX_BUFFER_LEN;
28
+ }
29
+
30
+ /**
31
+ * Subscribe to WebSocket events
32
+ */
33
+ subscribe(): void {
34
+ // TODO: Implement subscription logic
35
+ }
36
+ }
37
+
38
+ /**
39
+ * Interface for orderbook subscription
40
+ */
41
+ export interface OrderbookSubscription extends EventEmitter {
42
+ on(event: "message", listener: (data: OrderbookResponse) => void): this;
43
+ on(event: "error", listener: (error: Error) => void): this;
44
+ close(): void;
45
+ removeAllListeners(event?: string): this;
46
+ }
47
+
48
+ /**
49
+ * Interface for trade subscription
50
+ */
51
+ export interface TradeSubscription extends EventEmitter {
52
+ on(event: "message", listener: (data: Trade[]) => void): this;
53
+ on(event: "error", listener: (error: Error) => void): this;
54
+ close(): void;
55
+ removeAllListeners(event?: string): this;
56
+ }
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Options for creating a NordError
3
+ */
4
+ export interface NordErrorOptions {
5
+ /** The original error that caused this error */
6
+ cause?: unknown;
7
+
8
+ /** HTTP status code (if applicable) */
9
+ statusCode?: number;
10
+
11
+ /** Additional error details */
12
+ details?: Record<string, unknown>;
13
+ }
14
+
15
+ /**
16
+ * Custom error class for Nord-related errors
17
+ */
18
+ export class NordError extends Error {
19
+ /** The original error that caused this error */
20
+ public readonly cause?: unknown;
21
+
22
+ /** HTTP status code (if applicable) */
23
+ public readonly statusCode?: number;
24
+
25
+ /** Additional error details */
26
+ public readonly details?: Record<string, unknown>;
27
+
28
+ /**
29
+ * Create a new NordError
30
+ *
31
+ * @param message - Error message
32
+ * @param options - Error options
33
+ */
34
+ constructor(message: string, options: NordErrorOptions = {}) {
35
+ super(message);
36
+
37
+ this.name = "NordError";
38
+ this.cause = options.cause;
39
+ this.statusCode = options.statusCode;
40
+ this.details = options.details;
41
+
42
+ // Capture stack trace
43
+ if (Error.captureStackTrace) {
44
+ Error.captureStackTrace(this, NordError);
45
+ }
46
+
47
+ // Handle nested errors
48
+ if (this.cause instanceof Error) {
49
+ this.stack =
50
+ this.stack + "\nCaused by: " + (this.cause.stack || this.cause.message);
51
+ }
52
+ }
53
+
54
+ /**
55
+ * Convert the error to a string representation
56
+ *
57
+ * @returns String representation of the error
58
+ */
59
+ toString(): string {
60
+ let result = `${this.name}: ${this.message}`;
61
+
62
+ if (this.statusCode) {
63
+ result += ` (Status: ${this.statusCode})`;
64
+ }
65
+
66
+ if (this.details && Object.keys(this.details).length > 0) {
67
+ result += `\nDetails: ${JSON.stringify(this.details, null, 2)}`;
68
+ }
69
+
70
+ return result;
71
+ }
72
+ }
package/src/types.ts CHANGED
@@ -17,14 +17,25 @@ export enum PeakTpsPeriodUnit {
17
17
  Year = "y",
18
18
  }
19
19
 
20
+ /**
21
+ * Configuration options for the Nord client
22
+ */
20
23
  export interface NordConfig {
21
- evmUrl: string;
24
+ /** Base URL for the Nord web server */
22
25
  webServerUrl: string;
23
- contractAddress: string;
24
- tokenInfos: ERC20TokenInfo[];
25
- }
26
-
27
- export interface ERC20TokenInfo {
26
+ /** Solana program ID */
27
+ solanaProgramId: string;
28
+ /** Solana cluster URL */
29
+ solanaUrl: string;
30
+ /** Whether to initialize WebSockets on creation, defaults to true */
31
+ initWebSockets?: boolean;
32
+ /** Initial subscriptions for the trades WebSocket (e.g., ["trades@BTCUSDC"]) */
33
+ tradesSubscriptions?: string[];
34
+ /** Initial subscriptions for the deltas WebSocket (e.g., ["deltas@BTCUSDC"]) */
35
+ deltasSubscriptions?: string[];
36
+ }
37
+
38
+ export interface TokenInfo {
28
39
  address: string;
29
40
  precision: number;
30
41
  tokenId: number;
@@ -63,18 +74,20 @@ export interface SubscriberConfig {
63
74
  }
64
75
 
65
76
  export interface Market {
77
+ marketId: number;
66
78
  symbol: string;
67
- baseTokenId: number;
68
- quoteTokenId: number;
69
79
  priceDecimals: number;
70
80
  sizeDecimals: number;
81
+ baseTokenId: number;
82
+ quoteTokenId: number;
83
+ frozen: boolean;
71
84
  }
72
85
 
73
86
  export interface Token {
87
+ tokenId: number;
74
88
  symbol: string;
75
- ethAddr: string;
76
89
  decimals: number;
77
- tokenId: number;
90
+ mintAddr: string;
78
91
  }
79
92
 
80
93
  export interface Info {
@@ -86,8 +99,8 @@ export interface DeltaEvent {
86
99
  last_update_id: number;
87
100
  update_id: number;
88
101
  market_symbol: string;
89
- asks: [number, number];
90
- bids: [number, number];
102
+ asks: OrderbookEntry[];
103
+ bids: OrderbookEntry[];
91
104
  }
92
105
 
93
106
  export interface Trade {
@@ -107,7 +120,7 @@ export interface Trades {
107
120
  export interface OrderInfo {
108
121
  id: number;
109
122
  reduce_only: boolean;
110
- imit_price: number;
123
+ limit_price: number;
111
124
  size: number;
112
125
  account_id: number;
113
126
  }
@@ -120,7 +133,7 @@ export interface Account {
120
133
  last_update_id: number;
121
134
  update_id: number;
122
135
  account_id: number;
123
- fills: HashMap<FillMode>;
136
+ fills: HashMap<number>;
124
137
  places: HashMap<OrderInfo>;
125
138
  cancels: HashMap<OrderInfo>;
126
139
  balances: HashMap<number>;
@@ -249,84 +262,6 @@ export interface AggregateMetrics {
249
262
  request_latency_average: number;
250
263
  }
251
264
 
252
- /**
253
- * Parameters for querying trades
254
- * @field {number} accountId - ID of target account
255
- * @field {string} [since] - Start with this timestamp (RFC3339); defaults to UNIX epoch start
256
- * @field {string} [until] - End with this timestamp (RFC3339); defaults to current date-time
257
- * @field {string} [pageId] - Fetch results starting with this page
258
- */
259
- export interface TradesQueryParams {
260
- accountId: number;
261
- since?: string;
262
- until?: string;
263
- pageId?: string;
264
- }
265
-
266
- /**
267
- * Trade information
268
- * @field {string} id - Trade ID
269
- * @field {string} timestamp - Trade timestamp (RFC3339)
270
- * @field {string} symbol - Market symbol
271
- * @field {string} side - Trade side (buy/sell)
272
- * @field {number} price - Trade price
273
- * @field {number} size - Trade size
274
- * @field {number} fee - Trade fee
275
- * @field {string} feeCurrency - Fee currency
276
- * @field {number} orderId - Order ID
277
- */
278
- export interface TradeInfo {
279
- id: string;
280
- timestamp: string;
281
- symbol: string;
282
- side: string;
283
- price: number;
284
- size: number;
285
- fee: number;
286
- feeCurrency: string;
287
- orderId: number;
288
- }
289
-
290
- /**
291
- * Response for trades query
292
- * @field {number} accountId - Account ID
293
- * @field {string} since - Start timestamp (RFC3339)
294
- * @field {string} until - End timestamp (RFC3339)
295
- * @field {string} [nextPageId] - ID for the next page of results
296
- * @field {TradeInfo[]} trades - Array of trades
297
- */
298
- export interface TradesResponse {
299
- accountId: number;
300
- since: string;
301
- until: string;
302
- nextPageId?: string;
303
- trades: TradeInfo[];
304
- }
305
-
306
- /**
307
- * Order in the orderbook
308
- * @field {number} price - Order price
309
- * @field {number} size - Order size
310
- */
311
- export interface OrderbookOrder {
312
- price: number;
313
- size: number;
314
- }
315
-
316
- /**
317
- * Response for orderbook query
318
- * @field {string} symbol - Market symbol
319
- * @field {number} timestamp - Orderbook timestamp
320
- * @field {OrderbookOrder[]} bids - Array of bid orders
321
- * @field {OrderbookOrder[]} asks - Array of ask orders
322
- */
323
- export interface OrderbookResponse {
324
- symbol: string;
325
- timestamp: number;
326
- bids: OrderbookOrder[];
327
- asks: OrderbookOrder[];
328
- }
329
-
330
265
  // The JSON types returned by rollman, that need to be translated to TS format.
331
266
  export interface RollmanBlockResponse {
332
267
  block_number: number;
@@ -391,3 +326,139 @@ export function fillModeToProtoFillMode(x: FillMode): proto.FillMode {
391
326
  if (x === FillMode.FillOrKill) return proto.FillMode.FILL_OR_KILL;
392
327
  throw new Error("Invalid fill mode");
393
328
  }
329
+
330
+ /**
331
+ * Response for trades query with pagination support
332
+ */
333
+ export interface TradesResponse {
334
+ trades: Trade[];
335
+ accountId: number;
336
+ since?: string; // RFC3339 timestamp
337
+ until?: string; // RFC3339 timestamp
338
+ nextPageId?: string;
339
+ }
340
+
341
+ /**
342
+ * Query parameters for trades endpoint
343
+ */
344
+ export interface TradesQuery {
345
+ accountId: number;
346
+ since?: string; // RFC3339 timestamp
347
+ until?: string; // RFC3339 timestamp
348
+ pageId?: string;
349
+ }
350
+
351
+ /**
352
+ * Response for user account IDs query
353
+ */
354
+ export interface UserAccountIdsResponse {
355
+ accountIds: number[];
356
+ }
357
+
358
+ /**
359
+ * Query parameters for user account IDs
360
+ */
361
+ export interface UserAccountIdsQuery {
362
+ pubkey: string; // secp256k1 public key in hex format
363
+ }
364
+
365
+ /**
366
+ * Orderbook entry representing price and size
367
+ */
368
+ export interface OrderbookEntry {
369
+ price: number;
370
+ size: number;
371
+ }
372
+
373
+ /**
374
+ * Response for orderbook query
375
+ */
376
+ export interface OrderbookResponse {
377
+ symbol: string;
378
+ asks: OrderbookEntry[];
379
+ bids: OrderbookEntry[];
380
+ timestamp: number;
381
+ }
382
+
383
+ /**
384
+ * Query parameters for orderbook
385
+ *
386
+ * Note: While you can provide either symbol or market_id, the API endpoint only accepts market_id.
387
+ * If you provide a symbol, it will be converted to a market_id internally.
388
+ */
389
+ export interface OrderbookQuery {
390
+ symbol?: string;
391
+ market_id?: number;
392
+ }
393
+
394
+ /**
395
+ * Response for timestamp query
396
+ */
397
+ export interface TimestampResponse {
398
+ timestamp: number; // engine's current logical timestamp
399
+ }
400
+
401
+ /**
402
+ * Response for action nonce query
403
+ */
404
+ export interface ActionNonceResponse {
405
+ nonce: number; // next expected action nonce
406
+ }
407
+
408
+ /**
409
+ * WebSocket message types
410
+ */
411
+ export enum WebSocketMessageType {
412
+ Subscribe = "subscribe",
413
+ Unsubscribe = "unsubscribe",
414
+ TradeUpdate = "trade",
415
+ DeltaUpdate = "delta",
416
+ UserUpdate = "user",
417
+ }
418
+
419
+ /**
420
+ * WebSocket subscription request
421
+ */
422
+ export interface WebSocketSubscription {
423
+ type: WebSocketMessageType;
424
+ streams: string[]; // Array of streams to subscribe/unsubscribe (e.g. ["trades@BTCUSDC", "deltas@BTCUSDC"])
425
+ }
426
+
427
+ /**
428
+ * WebSocket trade update message
429
+ */
430
+ export interface WebSocketTradeUpdate {
431
+ type: WebSocketMessageType.TradeUpdate;
432
+ symbol: string;
433
+ trades: Trade[];
434
+ timestamp: number;
435
+ }
436
+
437
+ /**
438
+ * WebSocket delta update message
439
+ */
440
+ export interface WebSocketDeltaUpdate {
441
+ type: WebSocketMessageType.DeltaUpdate;
442
+ last_update_id: number;
443
+ update_id: number;
444
+ market_symbol: string;
445
+ asks: OrderbookEntry[];
446
+ bids: OrderbookEntry[];
447
+ timestamp: number;
448
+ }
449
+
450
+ /**
451
+ * WebSocket user update message
452
+ */
453
+ export interface WebSocketUserUpdate {
454
+ type: WebSocketMessageType.UserUpdate;
455
+ userId: number;
456
+ account: Account;
457
+ timestamp: number;
458
+ }
459
+
460
+ export type WebSocketMessage =
461
+ | WebSocketSubscription
462
+ | WebSocketTradeUpdate
463
+ | WebSocketDeltaUpdate
464
+ | WebSocketUserUpdate;
package/src/utils.ts CHANGED
@@ -9,8 +9,9 @@ import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire";
9
9
  import { ethers } from "ethers";
10
10
  import fetch from "node-fetch";
11
11
  import { RequestInfo, RequestInit, Response } from "node-fetch";
12
+ import { BN } from "@coral-xyz/anchor";
12
13
 
13
- export const SESSION_TTL: bigint = 10n * 60n * 1000n * 10000n;
14
+ export const SESSION_TTL: bigint = 60n * 60n * 24n * 30n;
14
15
  export const ZERO_DECIMAL = new Decimal(0);
15
16
  export const MAX_BUFFER_LEN = 10_000;
16
17
 
@@ -298,3 +299,23 @@ export function findToken(tokens: Token[], tokenId: number): Token {
298
299
  }
299
300
  return tokens[tokenId];
300
301
  }
302
+
303
+ /**
304
+ * Convert a number to a BN with the specified number of decimals
305
+ *
306
+ * @param amount Amount as a number
307
+ * @param decimals Number of decimal places
308
+ * @returns Amount as a BN
309
+ */
310
+ export function toBN(amount: number, decimals: number): BN {
311
+ const amountString = amount.toFixed(decimals);
312
+ const [whole, fraction] = amountString.split(".");
313
+
314
+ // Convert to smallest units (no decimals)
315
+ const wholeBN = new BN(whole).mul(new BN(10).pow(new BN(decimals)));
316
+ const fractionBN = fraction
317
+ ? new BN(fraction.padEnd(decimals, "0").slice(0, decimals))
318
+ : new BN(0);
319
+
320
+ return wholeBN.add(fractionBN);
321
+ }