@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.
- package/.eslintrc.js +11 -0
- package/README.md +148 -65
- package/dist/bridge/NordUser.d.ts +78 -0
- package/dist/bridge/NordUser.js +196 -0
- package/dist/bridge/client.d.ts +150 -0
- package/dist/bridge/client.js +394 -0
- package/dist/bridge/const.d.ts +23 -0
- package/dist/bridge/const.js +47 -0
- package/dist/bridge/index.d.ts +5 -0
- package/dist/bridge/index.js +23 -0
- package/dist/bridge/types.d.ts +118 -0
- package/dist/bridge/types.js +16 -0
- package/dist/bridge/utils.d.ts +64 -0
- package/dist/bridge/utils.js +131 -0
- package/dist/client.d.ts +70 -0
- package/dist/client.js +129 -0
- package/dist/const.d.ts +2 -5
- package/dist/const.js +18 -22
- package/dist/constants/endpoints.d.ts +65 -0
- package/dist/constants/endpoints.js +68 -0
- package/dist/gen/common.d.ts +6 -1
- package/dist/gen/common.js +19 -9
- package/dist/gen/nord.d.ts +75 -17
- package/dist/gen/nord.js +987 -423
- package/dist/idl/bridge.d.ts +2 -0
- package/dist/idl/bridge.js +703 -0
- package/dist/index.d.ts +8 -5
- package/dist/index.js +18 -2
- package/dist/models/account.d.ts +58 -0
- package/dist/models/account.js +6 -0
- package/dist/models/index.d.ts +8 -0
- package/dist/models/index.js +28 -0
- package/dist/models/market.d.ts +137 -0
- package/dist/models/market.js +6 -0
- package/dist/models/order.d.ts +211 -0
- package/dist/models/order.js +6 -0
- package/dist/models/token.d.ts +50 -0
- package/dist/models/token.js +6 -0
- package/dist/nord/Nord.d.ts +222 -49
- package/dist/nord/Nord.js +290 -278
- package/dist/nord/NordError.d.ts +23 -0
- package/dist/nord/NordError.js +48 -0
- package/dist/nord/NordImpl.d.ts +6 -2
- package/dist/nord/NordImpl.js +21 -1
- package/dist/nord/NordUser.d.ts +208 -42
- package/dist/nord/NordUser.js +389 -157
- package/dist/nord/Subscriber.d.ts +37 -0
- package/dist/nord/Subscriber.js +29 -0
- package/dist/nord/api/actions.d.ts +101 -0
- package/dist/nord/api/actions.js +250 -0
- package/dist/nord/api/core.d.ts +49 -0
- package/dist/nord/api/core.js +121 -0
- package/dist/nord/api/index.d.ts +1 -0
- package/dist/nord/api/index.js +17 -0
- package/dist/nord/api/market.d.ts +36 -0
- package/dist/nord/api/market.js +98 -0
- package/dist/nord/api/metrics.d.ts +67 -0
- package/dist/nord/api/metrics.js +132 -0
- package/dist/nord/api/orderFunctions.d.ts +168 -0
- package/dist/nord/api/orderFunctions.js +133 -0
- package/dist/nord/api/queries.d.ts +81 -0
- package/dist/nord/api/queries.js +187 -0
- package/dist/nord/client/Nord.d.ts +335 -0
- package/dist/nord/client/Nord.js +532 -0
- package/dist/nord/client/NordUser.d.ts +320 -0
- package/dist/nord/client/NordUser.js +701 -0
- package/dist/nord/core.d.ts +48 -0
- package/dist/nord/core.js +97 -0
- package/dist/nord/index.d.ts +9 -2
- package/dist/nord/index.js +30 -6
- package/dist/nord/market.d.ts +36 -0
- package/dist/nord/market.js +90 -0
- package/dist/nord/metrics.d.ts +67 -0
- package/dist/nord/metrics.js +124 -0
- package/dist/nord/models/Subscriber.d.ts +37 -0
- package/dist/nord/models/Subscriber.js +29 -0
- package/dist/nord/queries.d.ts +81 -0
- package/dist/nord/queries.js +181 -0
- package/dist/nord/types.d.ts +88 -0
- package/dist/nord/types.js +2 -0
- package/dist/nord/utils/NordError.d.ts +35 -0
- package/dist/nord/utils/NordError.js +46 -0
- package/dist/nord/websocket.d.ts +49 -0
- package/dist/nord/websocket.js +107 -0
- package/dist/operations/account.d.ts +58 -0
- package/dist/operations/account.js +112 -0
- package/dist/operations/market.d.ts +65 -0
- package/dist/operations/market.js +131 -0
- package/dist/operations/orders.d.ts +57 -0
- package/dist/operations/orders.js +129 -0
- package/dist/solana/NordUser.d.ts +78 -0
- package/dist/solana/NordUser.js +196 -0
- package/dist/solana/client.d.ts +139 -0
- package/dist/solana/client.js +360 -0
- package/dist/solana/const.d.ts +23 -0
- package/dist/solana/const.js +47 -0
- package/dist/solana/index.d.ts +5 -0
- package/dist/solana/index.js +23 -0
- package/dist/solana/types.d.ts +118 -0
- package/dist/solana/types.js +16 -0
- package/dist/solana/utils.d.ts +64 -0
- package/dist/solana/utils.js +131 -0
- package/dist/types/api.d.ts +152 -0
- package/dist/types/api.js +6 -0
- package/dist/types/config.d.ts +34 -0
- package/dist/types/config.js +6 -0
- package/dist/types.d.ts +144 -87
- package/dist/types.js +13 -2
- package/dist/utils/errors.d.ts +96 -0
- package/dist/utils/errors.js +132 -0
- package/dist/utils/http.d.ts +35 -0
- package/dist/utils/http.js +105 -0
- package/dist/utils.d.ts +14 -5
- package/dist/utils.js +26 -7
- package/dist/websocket/NordWebSocketClient.d.ts +71 -0
- package/dist/websocket/NordWebSocketClient.js +343 -0
- package/dist/websocket/client.d.ts +93 -0
- package/dist/websocket/client.js +222 -0
- package/dist/websocket/events.d.ts +19 -0
- package/dist/websocket/events.js +2 -0
- package/dist/websocket/index.d.ts +2 -0
- package/dist/websocket/index.js +5 -0
- package/dist/websocket.d.ts +55 -0
- package/dist/websocket.js +211 -0
- package/docs/assets/navigation.js +1 -1
- package/docs/assets/search.js +1 -1
- package/docs/classes/Nord.html +2 -15
- package/docs/classes/NordUser.html +4 -4
- package/docs/enums/FillMode.html +2 -2
- package/docs/enums/KeyType.html +2 -2
- package/docs/enums/PeakTpsPeriodUnit.html +2 -2
- package/docs/enums/Side.html +2 -2
- package/docs/functions/assert.html +1 -1
- package/docs/functions/bigIntToProtoU128.html +1 -1
- package/docs/functions/checkPubKeyLength.html +1 -1
- package/docs/functions/checkedFetch.html +1 -1
- package/docs/functions/decodeLengthDelimited.html +1 -1
- package/docs/functions/encodeLengthDelimited.html +1 -1
- package/docs/functions/fillModeToProtoFillMode.html +1 -1
- package/docs/functions/findMarket.html +1 -1
- package/docs/functions/findToken.html +1 -1
- package/docs/functions/makeWalletSignFn.html +1 -1
- package/docs/functions/optExpect.html +1 -1
- package/docs/functions/optMap.html +1 -1
- package/docs/functions/optUnwrap.html +1 -1
- package/docs/functions/panic.html +1 -1
- package/docs/functions/signAction.html +1 -1
- package/docs/functions/toScaledU128.html +1 -1
- package/docs/functions/toScaledU64.html +1 -1
- package/docs/interfaces/Account.html +2 -2
- package/docs/interfaces/ActionInfo.html +2 -2
- package/docs/interfaces/ActionQuery.html +2 -2
- package/docs/interfaces/ActionResponse.html +2 -2
- package/docs/interfaces/ActionsExtendedInfo.html +2 -2
- package/docs/interfaces/ActionsQuery.html +2 -2
- package/docs/interfaces/ActionsResponse.html +2 -2
- package/docs/interfaces/AggregateMetrics.html +2 -2
- package/docs/interfaces/BlockQuery.html +2 -2
- package/docs/interfaces/BlockResponse.html +2 -2
- package/docs/interfaces/BlockSummary.html +2 -2
- package/docs/interfaces/BlockSummaryResponse.html +2 -2
- package/docs/interfaces/DeltaEvent.html +2 -2
- package/docs/interfaces/ERC20TokenInfo.html +2 -2
- package/docs/interfaces/Info.html +2 -2
- package/docs/interfaces/Market.html +2 -2
- package/docs/interfaces/MarketStats.html +2 -2
- package/docs/interfaces/MarketsStatsResponse.html +2 -2
- package/docs/interfaces/NordConfig.html +2 -2
- package/docs/interfaces/Order.html +2 -2
- package/docs/interfaces/OrderInfo.html +2 -2
- package/docs/interfaces/PerpMarketStats.html +2 -2
- package/docs/interfaces/RollmanActionExtendedInfo.html +2 -2
- package/docs/interfaces/RollmanActionInfo.html +2 -2
- package/docs/interfaces/RollmanActionResponse.html +2 -2
- package/docs/interfaces/RollmanActionsResponse.html +2 -2
- package/docs/interfaces/RollmanBlockResponse.html +2 -2
- package/docs/interfaces/SubscriberConfig.html +2 -2
- package/docs/interfaces/Token.html +2 -2
- package/docs/interfaces/Trade.html +2 -2
- package/docs/interfaces/Trades.html +2 -2
- package/docs/modules.html +0 -7
- package/docs/types/BigIntValue.html +1 -1
- package/docs/variables/DEBUG_KEYS.html +1 -1
- package/docs/variables/DEFAULT_FUNDING_AMOUNTS.html +1 -1
- package/docs/variables/DEV_CONTRACT_ADDRESS.html +1 -1
- package/docs/variables/DEV_TOKEN_INFOS.html +1 -1
- package/docs/variables/DEV_URL.html +1 -1
- package/docs/variables/ERC20_ABI.html +1 -1
- package/docs/variables/EVM_DEV_URL.html +1 -1
- package/docs/variables/FAUCET_PRIVATE_ADDRESS.html +1 -1
- package/docs/variables/MAX_BUFFER_LEN.html +1 -1
- package/docs/variables/NORD_GETTERS_FACET_ABI.html +1 -1
- package/docs/variables/NORD_RAMP_FACET_ABI.html +1 -1
- package/docs/variables/SESSION_TTL.html +1 -1
- package/docs/variables/WEBSERVER_DEV_URL.html +1 -1
- package/docs/variables/ZERO_DECIMAL.html +1 -1
- package/package.json +10 -12
- package/src/bridge/client.ts +487 -0
- package/src/bridge/const.ts +53 -0
- package/src/bridge/index.ts +7 -0
- package/src/bridge/types.ts +127 -0
- package/src/bridge/utils.ts +140 -0
- package/src/const.ts +20 -25
- package/src/gen/common.ts +27 -10
- package/src/gen/nord.ts +1044 -483
- package/src/idl/bridge.ts +702 -0
- package/src/index.ts +24 -5
- package/src/nord/{actions.ts → api/actions.ts} +33 -37
- package/src/nord/api/core.ts +130 -0
- package/src/nord/api/market.ts +125 -0
- package/src/nord/api/metrics.ts +154 -0
- package/src/nord/api/queries.ts +236 -0
- package/src/nord/client/Nord.ts +652 -0
- package/src/nord/client/NordUser.ts +1105 -0
- package/src/nord/index.ts +16 -2
- package/src/nord/models/Subscriber.ts +57 -0
- package/src/nord/utils/NordError.ts +72 -0
- package/src/types.ts +170 -99
- package/src/utils.ts +40 -19
- package/src/websocket/NordWebSocketClient.ts +432 -0
- package/src/websocket/events.ts +31 -0
- package/src/websocket/index.ts +2 -0
- package/tests/utils.spec.ts +24 -24
- package/docs/classes/Subscriber.html +0 -6
- package/docs/functions/createWebSocketSubscription.html +0 -12
- package/docs/interfaces/OrderbookOrder.html +0 -6
- package/docs/interfaces/OrderbookResponse.html +0 -10
- package/docs/interfaces/TradeInfo.html +0 -20
- package/docs/interfaces/TradesQueryParams.html +0 -10
- package/docs/interfaces/TradesResponse.html +0 -12
- package/src/abis/ERC20_ABI.ts +0 -310
- package/src/abis/NORD_GETTERS_FACET_ABI.ts +0 -192
- package/src/abis/NORD_RAMP_FACET_ABI.ts +0 -141
- package/src/abis/index.ts +0 -3
- package/src/nord/Nord.ts +0 -504
- package/src/nord/NordImpl.ts +0 -8
- 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;
|