@n1xyz/nord-ts 0.0.1 → 0.0.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.
Files changed (237) hide show
  1. package/.eslintrc.js +11 -0
  2. package/README.md +148 -65
  3. package/dist/bridge/NordUser.d.ts +78 -0
  4. package/dist/bridge/NordUser.js +196 -0
  5. package/dist/bridge/client.d.ts +150 -0
  6. package/dist/bridge/client.js +394 -0
  7. package/dist/bridge/const.d.ts +23 -0
  8. package/dist/bridge/const.js +47 -0
  9. package/dist/bridge/index.d.ts +5 -0
  10. package/dist/bridge/index.js +23 -0
  11. package/dist/bridge/types.d.ts +118 -0
  12. package/dist/bridge/types.js +16 -0
  13. package/dist/bridge/utils.d.ts +64 -0
  14. package/dist/bridge/utils.js +131 -0
  15. package/dist/client.d.ts +70 -0
  16. package/dist/client.js +129 -0
  17. package/dist/const.d.ts +2 -5
  18. package/dist/const.js +18 -22
  19. package/dist/constants/endpoints.d.ts +65 -0
  20. package/dist/constants/endpoints.js +68 -0
  21. package/dist/gen/common.d.ts +6 -1
  22. package/dist/gen/common.js +19 -9
  23. package/dist/gen/nord.d.ts +75 -17
  24. package/dist/gen/nord.js +987 -423
  25. package/dist/idl/bridge.d.ts +2 -0
  26. package/dist/idl/bridge.js +703 -0
  27. package/dist/index.d.ts +8 -5
  28. package/dist/index.js +18 -2
  29. package/dist/models/account.d.ts +58 -0
  30. package/dist/models/account.js +6 -0
  31. package/dist/models/index.d.ts +8 -0
  32. package/dist/models/index.js +28 -0
  33. package/dist/models/market.d.ts +137 -0
  34. package/dist/models/market.js +6 -0
  35. package/dist/models/order.d.ts +211 -0
  36. package/dist/models/order.js +6 -0
  37. package/dist/models/token.d.ts +50 -0
  38. package/dist/models/token.js +6 -0
  39. package/dist/nord/Nord.d.ts +222 -49
  40. package/dist/nord/Nord.js +290 -278
  41. package/dist/nord/NordError.d.ts +23 -0
  42. package/dist/nord/NordError.js +48 -0
  43. package/dist/nord/NordImpl.d.ts +6 -2
  44. package/dist/nord/NordImpl.js +21 -1
  45. package/dist/nord/NordUser.d.ts +208 -42
  46. package/dist/nord/NordUser.js +389 -157
  47. package/dist/nord/Subscriber.d.ts +37 -0
  48. package/dist/nord/Subscriber.js +29 -0
  49. package/dist/nord/api/actions.d.ts +101 -0
  50. package/dist/nord/api/actions.js +250 -0
  51. package/dist/nord/api/core.d.ts +49 -0
  52. package/dist/nord/api/core.js +121 -0
  53. package/dist/nord/api/index.d.ts +1 -0
  54. package/dist/nord/api/index.js +17 -0
  55. package/dist/nord/api/market.d.ts +36 -0
  56. package/dist/nord/api/market.js +98 -0
  57. package/dist/nord/api/metrics.d.ts +67 -0
  58. package/dist/nord/api/metrics.js +132 -0
  59. package/dist/nord/api/orderFunctions.d.ts +168 -0
  60. package/dist/nord/api/orderFunctions.js +133 -0
  61. package/dist/nord/api/queries.d.ts +81 -0
  62. package/dist/nord/api/queries.js +187 -0
  63. package/dist/nord/client/Nord.d.ts +335 -0
  64. package/dist/nord/client/Nord.js +532 -0
  65. package/dist/nord/client/NordUser.d.ts +320 -0
  66. package/dist/nord/client/NordUser.js +701 -0
  67. package/dist/nord/core.d.ts +48 -0
  68. package/dist/nord/core.js +97 -0
  69. package/dist/nord/index.d.ts +9 -2
  70. package/dist/nord/index.js +30 -6
  71. package/dist/nord/market.d.ts +36 -0
  72. package/dist/nord/market.js +90 -0
  73. package/dist/nord/metrics.d.ts +67 -0
  74. package/dist/nord/metrics.js +124 -0
  75. package/dist/nord/models/Subscriber.d.ts +37 -0
  76. package/dist/nord/models/Subscriber.js +29 -0
  77. package/dist/nord/queries.d.ts +81 -0
  78. package/dist/nord/queries.js +181 -0
  79. package/dist/nord/types.d.ts +88 -0
  80. package/dist/nord/types.js +2 -0
  81. package/dist/nord/utils/NordError.d.ts +35 -0
  82. package/dist/nord/utils/NordError.js +46 -0
  83. package/dist/nord/websocket.d.ts +49 -0
  84. package/dist/nord/websocket.js +107 -0
  85. package/dist/operations/account.d.ts +58 -0
  86. package/dist/operations/account.js +112 -0
  87. package/dist/operations/market.d.ts +65 -0
  88. package/dist/operations/market.js +131 -0
  89. package/dist/operations/orders.d.ts +57 -0
  90. package/dist/operations/orders.js +129 -0
  91. package/dist/solana/NordUser.d.ts +78 -0
  92. package/dist/solana/NordUser.js +196 -0
  93. package/dist/solana/client.d.ts +139 -0
  94. package/dist/solana/client.js +360 -0
  95. package/dist/solana/const.d.ts +23 -0
  96. package/dist/solana/const.js +47 -0
  97. package/dist/solana/index.d.ts +5 -0
  98. package/dist/solana/index.js +23 -0
  99. package/dist/solana/types.d.ts +118 -0
  100. package/dist/solana/types.js +16 -0
  101. package/dist/solana/utils.d.ts +64 -0
  102. package/dist/solana/utils.js +131 -0
  103. package/dist/types/api.d.ts +152 -0
  104. package/dist/types/api.js +6 -0
  105. package/dist/types/config.d.ts +34 -0
  106. package/dist/types/config.js +6 -0
  107. package/dist/types.d.ts +144 -87
  108. package/dist/types.js +13 -2
  109. package/dist/utils/errors.d.ts +96 -0
  110. package/dist/utils/errors.js +132 -0
  111. package/dist/utils/http.d.ts +35 -0
  112. package/dist/utils/http.js +105 -0
  113. package/dist/utils.d.ts +14 -5
  114. package/dist/utils.js +26 -7
  115. package/dist/websocket/NordWebSocketClient.d.ts +71 -0
  116. package/dist/websocket/NordWebSocketClient.js +343 -0
  117. package/dist/websocket/client.d.ts +93 -0
  118. package/dist/websocket/client.js +222 -0
  119. package/dist/websocket/events.d.ts +19 -0
  120. package/dist/websocket/events.js +2 -0
  121. package/dist/websocket/index.d.ts +2 -0
  122. package/dist/websocket/index.js +5 -0
  123. package/dist/websocket.d.ts +55 -0
  124. package/dist/websocket.js +211 -0
  125. package/docs/assets/navigation.js +1 -1
  126. package/docs/assets/search.js +1 -1
  127. package/docs/classes/Nord.html +2 -15
  128. package/docs/classes/NordUser.html +4 -4
  129. package/docs/enums/FillMode.html +2 -2
  130. package/docs/enums/KeyType.html +2 -2
  131. package/docs/enums/PeakTpsPeriodUnit.html +2 -2
  132. package/docs/enums/Side.html +2 -2
  133. package/docs/functions/assert.html +1 -1
  134. package/docs/functions/bigIntToProtoU128.html +1 -1
  135. package/docs/functions/checkPubKeyLength.html +1 -1
  136. package/docs/functions/checkedFetch.html +1 -1
  137. package/docs/functions/decodeLengthDelimited.html +1 -1
  138. package/docs/functions/encodeLengthDelimited.html +1 -1
  139. package/docs/functions/fillModeToProtoFillMode.html +1 -1
  140. package/docs/functions/findMarket.html +1 -1
  141. package/docs/functions/findToken.html +1 -1
  142. package/docs/functions/makeWalletSignFn.html +1 -1
  143. package/docs/functions/optExpect.html +1 -1
  144. package/docs/functions/optMap.html +1 -1
  145. package/docs/functions/optUnwrap.html +1 -1
  146. package/docs/functions/panic.html +1 -1
  147. package/docs/functions/signAction.html +1 -1
  148. package/docs/functions/toScaledU128.html +1 -1
  149. package/docs/functions/toScaledU64.html +1 -1
  150. package/docs/interfaces/Account.html +2 -2
  151. package/docs/interfaces/ActionInfo.html +2 -2
  152. package/docs/interfaces/ActionQuery.html +2 -2
  153. package/docs/interfaces/ActionResponse.html +2 -2
  154. package/docs/interfaces/ActionsExtendedInfo.html +2 -2
  155. package/docs/interfaces/ActionsQuery.html +2 -2
  156. package/docs/interfaces/ActionsResponse.html +2 -2
  157. package/docs/interfaces/AggregateMetrics.html +2 -2
  158. package/docs/interfaces/BlockQuery.html +2 -2
  159. package/docs/interfaces/BlockResponse.html +2 -2
  160. package/docs/interfaces/BlockSummary.html +2 -2
  161. package/docs/interfaces/BlockSummaryResponse.html +2 -2
  162. package/docs/interfaces/DeltaEvent.html +2 -2
  163. package/docs/interfaces/ERC20TokenInfo.html +2 -2
  164. package/docs/interfaces/Info.html +2 -2
  165. package/docs/interfaces/Market.html +2 -2
  166. package/docs/interfaces/MarketStats.html +2 -2
  167. package/docs/interfaces/MarketsStatsResponse.html +2 -2
  168. package/docs/interfaces/NordConfig.html +2 -2
  169. package/docs/interfaces/Order.html +2 -2
  170. package/docs/interfaces/OrderInfo.html +2 -2
  171. package/docs/interfaces/PerpMarketStats.html +2 -2
  172. package/docs/interfaces/RollmanActionExtendedInfo.html +2 -2
  173. package/docs/interfaces/RollmanActionInfo.html +2 -2
  174. package/docs/interfaces/RollmanActionResponse.html +2 -2
  175. package/docs/interfaces/RollmanActionsResponse.html +2 -2
  176. package/docs/interfaces/RollmanBlockResponse.html +2 -2
  177. package/docs/interfaces/SubscriberConfig.html +2 -2
  178. package/docs/interfaces/Token.html +2 -2
  179. package/docs/interfaces/Trade.html +2 -2
  180. package/docs/interfaces/Trades.html +2 -2
  181. package/docs/modules.html +0 -7
  182. package/docs/types/BigIntValue.html +1 -1
  183. package/docs/variables/DEBUG_KEYS.html +1 -1
  184. package/docs/variables/DEFAULT_FUNDING_AMOUNTS.html +1 -1
  185. package/docs/variables/DEV_CONTRACT_ADDRESS.html +1 -1
  186. package/docs/variables/DEV_TOKEN_INFOS.html +1 -1
  187. package/docs/variables/DEV_URL.html +1 -1
  188. package/docs/variables/ERC20_ABI.html +1 -1
  189. package/docs/variables/EVM_DEV_URL.html +1 -1
  190. package/docs/variables/FAUCET_PRIVATE_ADDRESS.html +1 -1
  191. package/docs/variables/MAX_BUFFER_LEN.html +1 -1
  192. package/docs/variables/NORD_GETTERS_FACET_ABI.html +1 -1
  193. package/docs/variables/NORD_RAMP_FACET_ABI.html +1 -1
  194. package/docs/variables/SESSION_TTL.html +1 -1
  195. package/docs/variables/WEBSERVER_DEV_URL.html +1 -1
  196. package/docs/variables/ZERO_DECIMAL.html +1 -1
  197. package/package.json +10 -12
  198. package/src/bridge/client.ts +487 -0
  199. package/src/bridge/const.ts +53 -0
  200. package/src/bridge/index.ts +7 -0
  201. package/src/bridge/types.ts +127 -0
  202. package/src/bridge/utils.ts +140 -0
  203. package/src/const.ts +20 -25
  204. package/src/gen/common.ts +27 -10
  205. package/src/gen/nord.ts +1044 -483
  206. package/src/idl/bridge.ts +702 -0
  207. package/src/index.ts +24 -5
  208. package/src/nord/{actions.ts → api/actions.ts} +33 -37
  209. package/src/nord/api/core.ts +130 -0
  210. package/src/nord/api/market.ts +125 -0
  211. package/src/nord/api/metrics.ts +154 -0
  212. package/src/nord/api/queries.ts +236 -0
  213. package/src/nord/client/Nord.ts +652 -0
  214. package/src/nord/client/NordUser.ts +1105 -0
  215. package/src/nord/index.ts +16 -2
  216. package/src/nord/models/Subscriber.ts +57 -0
  217. package/src/nord/utils/NordError.ts +72 -0
  218. package/src/types.ts +170 -99
  219. package/src/utils.ts +40 -19
  220. package/src/websocket/NordWebSocketClient.ts +432 -0
  221. package/src/websocket/events.ts +31 -0
  222. package/src/websocket/index.ts +2 -0
  223. package/tests/utils.spec.ts +24 -24
  224. package/docs/classes/Subscriber.html +0 -6
  225. package/docs/functions/createWebSocketSubscription.html +0 -12
  226. package/docs/interfaces/OrderbookOrder.html +0 -6
  227. package/docs/interfaces/OrderbookResponse.html +0 -10
  228. package/docs/interfaces/TradeInfo.html +0 -20
  229. package/docs/interfaces/TradesQueryParams.html +0 -10
  230. package/docs/interfaces/TradesResponse.html +0 -12
  231. package/src/abis/ERC20_ABI.ts +0 -310
  232. package/src/abis/NORD_GETTERS_FACET_ABI.ts +0 -192
  233. package/src/abis/NORD_RAMP_FACET_ABI.ts +0 -141
  234. package/src/abis/index.ts +0 -3
  235. package/src/nord/Nord.ts +0 -504
  236. package/src/nord/NordImpl.ts +0 -8
  237. package/src/nord/NordUser.ts +0 -469
@@ -0,0 +1,532 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.Nord = void 0;
37
+ const events_1 = require("events");
38
+ const types_1 = require("../../types");
39
+ const core = __importStar(require("../api/core"));
40
+ const market = __importStar(require("../api/market"));
41
+ const metrics = __importStar(require("../api/metrics"));
42
+ const queries = __importStar(require("../api/queries"));
43
+ const NordError_1 = require("../utils/NordError");
44
+ /**
45
+ * Main Nord client class for interacting with the Nord API
46
+ */
47
+ class Nord {
48
+ /**
49
+ * Create a new Nord client
50
+ *
51
+ * @param config - Configuration options for the Nord client
52
+ * @param config.webServerUrl - Base URL for the Nord web server
53
+ * @param config.solanaProgramId - Solana program ID
54
+ * @param config.solanaUrl - Solana cluster URL
55
+ * @param config.initWebSockets - Whether to initialize WebSockets on creation, defaults to true
56
+ * @param config.tradesSubscriptions - Optional array of trades subscriptions to initialize with (e.g., ["trades@BTCUSDC"])
57
+ * @param config.deltasSubscriptions - Optional array of deltas subscriptions to initialize with (e.g., ["deltas@BTCUSDC"])
58
+ * @throws {Error} If required configuration is missing
59
+ */
60
+ constructor({ webServerUrl, solanaProgramId, solanaUrl, initWebSockets = true, tradesSubscriptions, deltasSubscriptions, }) {
61
+ /** Available markets */
62
+ this.markets = [];
63
+ /** Available tokens */
64
+ this.tokens = [];
65
+ /** Map of symbol to market_id */
66
+ this.symbolToMarketId = new Map();
67
+ /**
68
+ * WebSocket client for trades
69
+ * @private
70
+ */
71
+ this.tradesWs = null;
72
+ /**
73
+ * WebSocket client for orderbook deltas
74
+ * @private
75
+ */
76
+ this.deltasWs = null;
77
+ /**
78
+ * WebSocket client for user updates
79
+ * @private
80
+ */
81
+ this.userWs = null;
82
+ if (!webServerUrl) {
83
+ throw new NordError_1.NordError('webServerUrl is required');
84
+ }
85
+ if (!solanaProgramId) {
86
+ throw new NordError_1.NordError('solanaProgramId is required');
87
+ }
88
+ if (!solanaUrl) {
89
+ throw new NordError_1.NordError('solanaUrl is required');
90
+ }
91
+ this.webServerUrl = webServerUrl;
92
+ this.solanaProgramId = solanaProgramId;
93
+ this.solanaUrl = solanaUrl;
94
+ // Store subscription parameters
95
+ this.tradesSubscriptions = tradesSubscriptions;
96
+ this.deltasSubscriptions = deltasSubscriptions;
97
+ // Initialize WebSocket clients only if initWebSockets is true
98
+ if (initWebSockets) {
99
+ this.initializeWebSockets();
100
+ }
101
+ }
102
+ /**
103
+ * Initialize WebSocket clients for trades and deltas
104
+ *
105
+ * This method can be called manually if websockets were not initialized during construction
106
+ * (i.e., if initWebSockets was set to false in the constructor).
107
+ *
108
+ * It initializes the trades and deltas WebSocket clients. The user WebSocket client
109
+ * is initialized on demand when needed.
110
+ *
111
+ * @param tradesSubscriptions - Optional array of trades subscriptions to initialize with
112
+ * @param deltasSubscriptions - Optional array of deltas subscriptions to initialize with
113
+ */
114
+ initializeWebSockets(tradesSubscriptions, deltasSubscriptions) {
115
+ // Use provided subscriptions or fall back to stored ones
116
+ const trades = tradesSubscriptions || this.tradesSubscriptions;
117
+ const deltas = deltasSubscriptions || this.deltasSubscriptions;
118
+ // Initialize WebSocket clients for each endpoint with subscriptions
119
+ this.tradesWs = core.initWebSocketClient(this.webServerUrl, 'trades', trades);
120
+ this.deltasWs = core.initWebSocketClient(this.webServerUrl, 'deltas', deltas);
121
+ }
122
+ /**
123
+ * Get the current timestamp from the Nord server
124
+ *
125
+ * @returns Current timestamp as a bigint
126
+ * @throws {NordError} If the request fails
127
+ */
128
+ async getTimestamp() {
129
+ return core.getTimestamp(this.webServerUrl);
130
+ }
131
+ /**
132
+ * Get the next action nonce from the Nord server
133
+ *
134
+ * @returns Next action nonce
135
+ * @throws {NordError} If the request fails
136
+ */
137
+ async getActionNonce() {
138
+ return core.getActionNonce(this.webServerUrl);
139
+ }
140
+ /**
141
+ * Fetch information about Nord markets and tokens
142
+ *
143
+ * @throws {NordError} If the request fails
144
+ */
145
+ async fetchNordInfo() {
146
+ try {
147
+ const info = await core.getInfo(this.webServerUrl);
148
+ this.markets = info.markets;
149
+ this.tokens = info.tokens;
150
+ // Populate the symbolToMarketId map
151
+ this.symbolToMarketId.clear();
152
+ info.markets.forEach((market) => {
153
+ this.symbolToMarketId.set(market.symbol, market.marketId);
154
+ });
155
+ }
156
+ catch (error) {
157
+ throw new NordError_1.NordError('Failed to fetch Nord info', { cause: error });
158
+ }
159
+ }
160
+ /**
161
+ * Initialize a new Nord client
162
+ *
163
+ * @param nordConfig - Configuration options for the Nord client
164
+ * @param nordConfig.webServerUrl - Base URL for the Nord web server
165
+ * @param nordConfig.solanaProgramId - Solana program ID
166
+ * @param nordConfig.solanaUrl - Solana cluster URL
167
+ * @param nordConfig.initWebSockets - Whether to initialize WebSockets on creation, defaults to true
168
+ * @param nordConfig.tradesSubscriptions - Optional array of trades subscriptions (e.g., ["trades@BTCUSDC"])
169
+ * @param nordConfig.deltasSubscriptions - Optional array of deltas subscriptions (e.g., ["deltas@BTCUSDC"])
170
+ * @returns Initialized Nord client
171
+ * @throws {NordError} If initialization fails
172
+ */
173
+ static async initNord(nordConfig) {
174
+ const nord = new Nord(nordConfig);
175
+ await nord.fetchNordInfo();
176
+ return nord;
177
+ }
178
+ /**
179
+ * Get market statistics
180
+ *
181
+ * @returns Market statistics response
182
+ * @throws {NordError} If the request fails
183
+ */
184
+ async marketsStats() {
185
+ return market.marketsStats(this.webServerUrl);
186
+ }
187
+ /**
188
+ * Query a specific block
189
+ *
190
+ * @param query - Block query parameters
191
+ * @returns Block response
192
+ * @throws {NordError} If the request fails
193
+ */
194
+ async queryBlock(query) {
195
+ return queries.queryBlock(this.webServerUrl, query);
196
+ }
197
+ /**
198
+ * Query the last N blocks
199
+ *
200
+ * @returns Block response for the last N blocks
201
+ * @throws {NordError} If the request fails
202
+ */
203
+ async queryLastNBlocks() {
204
+ return queries.queryLastNBlocks(this.webServerUrl);
205
+ }
206
+ /**
207
+ * Query recent blocks
208
+ *
209
+ * @param last_n - Number of recent blocks to query
210
+ * @returns Block summary response
211
+ * @throws {NordError} If the request fails
212
+ */
213
+ async queryRecentBlocks(last_n) {
214
+ return queries.queryRecentBlocks(this.webServerUrl, last_n);
215
+ }
216
+ /**
217
+ * Query a specific action
218
+ *
219
+ * @param query - Action query parameters
220
+ * @returns Action response
221
+ * @throws {NordError} If the request fails
222
+ */
223
+ async queryAction(query) {
224
+ return queries.queryAction(this.webServerUrl, query);
225
+ }
226
+ /**
227
+ * Query recent actions
228
+ *
229
+ * @param last_n - Number of recent actions to query
230
+ * @returns Actions response
231
+ * @throws {NordError} If the request fails
232
+ */
233
+ async queryRecentActions(last_n) {
234
+ return queries.queryRecentActions(this.webServerUrl, last_n);
235
+ }
236
+ /**
237
+ * Fetch aggregate metrics from the Nord API
238
+ *
239
+ * @param txPeakTpsPeriod - Period for peak TPS calculation
240
+ * @param txPeakTpsPeriodUnit - Unit for peak TPS period
241
+ * @returns Aggregate metrics
242
+ * @throws {NordError} If the request fails
243
+ */
244
+ async aggregateMetrics(txPeakTpsPeriod = 1, txPeakTpsPeriodUnit = types_1.PeakTpsPeriodUnit.Day) {
245
+ return metrics.aggregateMetrics(this.webServerUrl, txPeakTpsPeriod, txPeakTpsPeriodUnit);
246
+ }
247
+ /**
248
+ * Get current transactions per second
249
+ *
250
+ * @param period - Time period for the query
251
+ * @returns Current TPS value
252
+ * @throws {NordError} If the request fails
253
+ */
254
+ async getCurrentTps(period = '1m') {
255
+ return metrics.getCurrentTps(this.webServerUrl, period);
256
+ }
257
+ /**
258
+ * Get peak transactions per second
259
+ *
260
+ * @param period - Time period for the query
261
+ * @returns Peak TPS value
262
+ * @throws {NordError} If the request fails
263
+ */
264
+ async getPeakTps(period = '24h') {
265
+ return metrics.getPeakTps(this.webServerUrl, period);
266
+ }
267
+ /**
268
+ * Get median transaction latency
269
+ *
270
+ * @param period - Time period for the query
271
+ * @returns Median latency in milliseconds
272
+ * @throws {NordError} If the request fails
273
+ */
274
+ async getMedianLatency(period = '1m') {
275
+ return metrics.getMedianLatency(this.webServerUrl, period);
276
+ }
277
+ /**
278
+ * Get total transaction count
279
+ *
280
+ * @returns Total transaction count
281
+ * @throws {NordError} If the request fails
282
+ */
283
+ async getTotalTransactions() {
284
+ return metrics.getTotalTransactions(this.webServerUrl);
285
+ }
286
+ /**
287
+ * Query a block from Rollman
288
+ *
289
+ * @param query - Block query parameters
290
+ * @returns Rollman block response
291
+ * @throws {NordError} If the request fails
292
+ */
293
+ async blockQueryRollman(query) {
294
+ return queries.blockQueryRollman(this.webServerUrl, query);
295
+ }
296
+ /**
297
+ * Query block summaries from Rollman
298
+ *
299
+ * @param last_n - Number of recent blocks to query
300
+ * @returns Block summary response
301
+ * @throws {NordError} If the request fails
302
+ */
303
+ async blockSummaryQueryRollman(last_n) {
304
+ return queries.blockSummaryQueryRollman(this.webServerUrl, last_n);
305
+ }
306
+ /**
307
+ * Query an action from Rollman
308
+ *
309
+ * @param query - Action query parameters
310
+ * @returns Rollman action response
311
+ * @throws {NordError} If the request fails
312
+ */
313
+ async actionQueryRollman(query) {
314
+ return queries.actionQueryRollman(this.webServerUrl, query);
315
+ }
316
+ /**
317
+ * Query actions from Rollman
318
+ *
319
+ * @param last_n - Number of recent actions to query
320
+ * @returns Rollman actions response
321
+ * @throws {NordError} If the request fails
322
+ */
323
+ async actionsQueryRollman(last_n) {
324
+ return queries.actionsQueryRollman(this.webServerUrl, last_n);
325
+ }
326
+ /**
327
+ * Query Prometheus metrics
328
+ *
329
+ * @param params - Prometheus query parameters
330
+ * @returns Query result as a number
331
+ * @throws {NordError} If the request fails
332
+ */
333
+ async queryPrometheus(params) {
334
+ return metrics.queryPrometheus(this.webServerUrl, params);
335
+ }
336
+ /**
337
+ * Get the trades WebSocket client (default)
338
+ * If not already initialized, it will be created
339
+ *
340
+ * @returns WebSocket client for trades
341
+ */
342
+ getWebSocketClient() {
343
+ if (!this.tradesWs) {
344
+ this.initializeWebSockets();
345
+ }
346
+ return this.tradesWs;
347
+ }
348
+ /**
349
+ * Get the trades WebSocket client
350
+ * If not already initialized, it will be created
351
+ *
352
+ * @returns WebSocket client for trades
353
+ */
354
+ getTradesWebSocketClient() {
355
+ if (!this.tradesWs) {
356
+ this.initializeWebSockets();
357
+ }
358
+ return this.tradesWs;
359
+ }
360
+ /**
361
+ * Get the deltas WebSocket client
362
+ * If not already initialized, it will be created
363
+ *
364
+ * @returns WebSocket client for orderbook deltas
365
+ */
366
+ getDeltasWebSocketClient() {
367
+ if (!this.deltasWs) {
368
+ this.initializeWebSockets();
369
+ }
370
+ return this.deltasWs;
371
+ }
372
+ /**
373
+ * Get the user WebSocket client
374
+ * If not already initialized, it will be created
375
+ *
376
+ * @returns WebSocket client for user updates
377
+ */
378
+ getUserWebSocketClient() {
379
+ if (!this.userWs) {
380
+ // Initialize user WebSocket client on demand
381
+ this.userWs = core.initWebSocketClient(this.webServerUrl, 'user');
382
+ return this.userWs;
383
+ }
384
+ return this.userWs;
385
+ }
386
+ /**
387
+ * Subscribe to orderbook updates for a market
388
+ *
389
+ * @param symbol - Market symbol
390
+ * @returns Orderbook subscription
391
+ */
392
+ subscribeOrderbook(symbol) {
393
+ const subscription = new events_1.EventEmitter();
394
+ const handleDelta = (update) => {
395
+ if (update.symbol !== symbol) {
396
+ return;
397
+ }
398
+ subscription.emit('message', update);
399
+ };
400
+ // Initialize deltas websocket if it doesn't exist
401
+ if (!this.deltasWs) {
402
+ this.initializeWebSockets();
403
+ }
404
+ this.deltasWs.on('delta', handleDelta);
405
+ this.deltasWs.subscribe([`deltas@${symbol}`]);
406
+ subscription.close = () => {
407
+ this.deltasWs.unsubscribe([`deltas@${symbol}`]);
408
+ this.deltasWs.removeListener('delta', handleDelta);
409
+ subscription.removeAllListeners();
410
+ };
411
+ return subscription;
412
+ }
413
+ /**
414
+ * Subscribe to trade updates for a market
415
+ *
416
+ * @param symbol - Market symbol
417
+ * @returns Trade subscription
418
+ */
419
+ subscribeTrades(symbol) {
420
+ const subscription = new events_1.EventEmitter();
421
+ const handleTrade = (update) => {
422
+ if (update.symbol !== symbol) {
423
+ return;
424
+ }
425
+ subscription.emit('message', update);
426
+ };
427
+ // Initialize trades websocket if it doesn't exist
428
+ if (!this.tradesWs) {
429
+ this.initializeWebSockets();
430
+ }
431
+ this.tradesWs.on('trade', handleTrade);
432
+ this.tradesWs.subscribe([`trades@${symbol}`]);
433
+ subscription.close = () => {
434
+ this.tradesWs.unsubscribe([`trades@${symbol}`]);
435
+ this.tradesWs.removeListener('trade', handleTrade);
436
+ subscription.removeAllListeners();
437
+ };
438
+ return subscription;
439
+ }
440
+ /**
441
+ * Get trades for a market
442
+ *
443
+ * @param query - Trades query parameters
444
+ * @returns Trades response
445
+ * @throws {NordError} If the request fails
446
+ */
447
+ async getTrades(query) {
448
+ return market.getTrades(this.webServerUrl, query);
449
+ }
450
+ /**
451
+ * Get user account IDs
452
+ *
453
+ * @param query - User account IDs query parameters
454
+ * @returns User account IDs response
455
+ * @throws {NordError} If the request fails
456
+ */
457
+ async getUserAccountIds(query) {
458
+ return market.getUserAccountIds(this.webServerUrl, query);
459
+ }
460
+ /**
461
+ * Get orderbook for a market
462
+ *
463
+ * @param query - Orderbook query parameters (either market_id or symbol must be provided)
464
+ * @returns Orderbook response
465
+ * @throws {NordError} If the request fails or if the market symbol is unknown
466
+ * @remarks It's recommended to initialize the Nord client using the static `initNord` method
467
+ * to ensure market information is properly loaded before calling this method.
468
+ */
469
+ async getOrderbook(query) {
470
+ // If only symbol is provided, convert it to market_id
471
+ if (query.symbol && query.market_id === undefined) {
472
+ // If the map is empty, try to fetch market information first
473
+ if (this.symbolToMarketId.size === 0) {
474
+ await this.fetchNordInfo();
475
+ }
476
+ const marketId = this.symbolToMarketId.get(query.symbol);
477
+ if (marketId === undefined) {
478
+ throw new NordError_1.NordError(`Unknown market symbol: ${query.symbol}`);
479
+ }
480
+ query = { market_id: marketId };
481
+ }
482
+ // Ensure market_id is provided
483
+ if (query.market_id === undefined) {
484
+ throw new NordError_1.NordError('market_id is required for orderbook query');
485
+ }
486
+ return market.getOrderbook(this.webServerUrl, query);
487
+ }
488
+ /**
489
+ * Get information about the Nord server
490
+ *
491
+ * @returns Information about markets and tokens
492
+ * @throws {NordError} If the request fails
493
+ */
494
+ async getInfo() {
495
+ return core.getInfo(this.webServerUrl);
496
+ }
497
+ /**
498
+ * Get account information
499
+ *
500
+ * @param accountId - Account ID to get information for
501
+ * @returns Account information
502
+ * @throws {NordError} If the request fails
503
+ */
504
+ async getAccount(accountId) {
505
+ return core.getAccount(this.webServerUrl, accountId);
506
+ }
507
+ /**
508
+ * Get market statistics (alias for marketsStats for backward compatibility)
509
+ *
510
+ * @deprecated Use marketsStats instead
511
+ * @returns Market statistics response
512
+ */
513
+ async getMarketStats() {
514
+ return this.marketsStats();
515
+ }
516
+ /**
517
+ * Check if an account exists for the given address
518
+ *
519
+ * @param address - The public key address to check
520
+ * @returns True if the account exists, false otherwise
521
+ */
522
+ async accountExists(address) {
523
+ try {
524
+ await market.getUserAccountIds(this.webServerUrl, { pubkey: address });
525
+ return true;
526
+ }
527
+ catch (error) {
528
+ return false;
529
+ }
530
+ }
531
+ }
532
+ exports.Nord = Nord;