@nktkas/hyperliquid 0.23.1 → 0.24.0
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/CONTRIBUTING.md +3 -2
- package/README.md +154 -170
- package/esm/mod.d.ts +1 -1
- package/esm/mod.d.ts.map +1 -1
- package/esm/src/base.d.ts +0 -5
- package/esm/src/base.d.ts.map +1 -1
- package/esm/src/clients/exchange.d.ts +430 -393
- package/esm/src/clients/exchange.d.ts.map +1 -1
- package/esm/src/clients/exchange.js +467 -927
- package/esm/src/clients/info.d.ts +228 -203
- package/esm/src/clients/info.d.ts.map +1 -1
- package/esm/src/clients/info.js +236 -368
- package/esm/src/clients/multiSign.d.ts +14 -1184
- package/esm/src/clients/multiSign.d.ts.map +1 -1
- package/esm/src/clients/multiSign.js +37 -2004
- package/esm/src/clients/subscription.d.ts +95 -93
- package/esm/src/clients/subscription.d.ts.map +1 -1
- package/esm/src/clients/subscription.js +101 -146
- package/esm/src/signing/_signTypedData/ethers.d.ts +16 -4
- package/esm/src/signing/_signTypedData/ethers.d.ts.map +1 -1
- package/esm/src/signing/_signTypedData/ethers.js +1 -1
- package/esm/src/signing/_signTypedData/mod.d.ts +12 -12
- package/esm/src/signing/_signTypedData/mod.d.ts.map +1 -1
- package/esm/src/signing/_signTypedData/mod.js +52 -24
- package/esm/src/signing/_signTypedData/private_key.d.ts +6 -5
- package/esm/src/signing/_signTypedData/private_key.d.ts.map +1 -1
- package/esm/src/signing/_signTypedData/private_key.js +40 -19
- package/esm/src/signing/_signTypedData/viem.d.ts +27 -6
- package/esm/src/signing/_signTypedData/viem.d.ts.map +1 -1
- package/esm/src/signing/_signTypedData/viem.js +1 -1
- package/esm/src/signing/_sorter.d.ts +12 -21
- package/esm/src/signing/_sorter.d.ts.map +1 -1
- package/esm/src/signing/_sorter.js +30 -63
- package/esm/src/signing/mod.d.ts +177 -127
- package/esm/src/signing/mod.d.ts.map +1 -1
- package/esm/src/signing/mod.js +182 -130
- package/esm/src/transports/base.d.ts +2 -1
- package/esm/src/transports/base.d.ts.map +1 -1
- package/esm/src/transports/http/http_transport.d.ts +3 -2
- package/esm/src/transports/http/http_transport.d.ts.map +1 -1
- package/esm/src/transports/http/http_transport.js +4 -4
- package/esm/src/transports/websocket/_hyperliquid_event_target.d.ts +14 -6
- package/esm/src/transports/websocket/_hyperliquid_event_target.d.ts.map +1 -1
- package/esm/src/transports/websocket/_hyperliquid_event_target.js +1 -2
- package/esm/src/transports/websocket/_reconnecting_websocket.d.ts +2 -1
- package/esm/src/transports/websocket/_reconnecting_websocket.d.ts.map +1 -1
- package/esm/src/transports/websocket/_reconnecting_websocket.js +1 -0
- package/esm/src/transports/websocket/_websocket_async_request.d.ts.map +1 -1
- package/esm/src/transports/websocket/_websocket_async_request.js +17 -21
- package/esm/src/transports/websocket/websocket_transport.d.ts +4 -4
- package/esm/src/transports/websocket/websocket_transport.d.ts.map +1 -1
- package/esm/src/transports/websocket/websocket_transport.js +6 -6
- package/esm/src/types/exchange/requests.d.ts +492 -306
- package/esm/src/types/exchange/requests.d.ts.map +1 -1
- package/esm/src/types/exchange/responses.d.ts +105 -25
- package/esm/src/types/exchange/responses.d.ts.map +1 -1
- package/esm/src/types/explorer/requests.d.ts +3 -3
- package/esm/src/types/explorer/requests.d.ts.map +1 -1
- package/esm/src/types/explorer/responses.d.ts +1 -1
- package/esm/src/types/explorer/responses.d.ts.map +1 -1
- package/esm/src/types/info/accounts.d.ts +403 -98
- package/esm/src/types/info/accounts.d.ts.map +1 -1
- package/esm/src/types/info/assets.d.ts +131 -35
- package/esm/src/types/info/assets.d.ts.map +1 -1
- package/esm/src/types/info/markets.d.ts +29 -8
- package/esm/src/types/info/markets.d.ts.map +1 -1
- package/esm/src/types/info/orders.d.ts +62 -17
- package/esm/src/types/info/orders.d.ts.map +1 -1
- package/esm/src/types/info/requests.d.ts +117 -51
- package/esm/src/types/info/requests.d.ts.map +1 -1
- package/esm/src/types/info/validators.d.ts +44 -14
- package/esm/src/types/info/validators.d.ts.map +1 -1
- package/esm/src/types/info/vaults.d.ts +25 -10
- package/esm/src/types/info/vaults.d.ts.map +1 -1
- package/esm/src/types/mod.d.ts +1 -1
- package/esm/src/types/mod.d.ts.map +1 -1
- package/esm/src/types/subscriptions/requests.d.ts +21 -66
- package/esm/src/types/subscriptions/requests.d.ts.map +1 -1
- package/esm/src/types/subscriptions/responses.d.ts +46 -55
- package/esm/src/types/subscriptions/responses.d.ts.map +1 -1
- package/package.json +2 -3
- package/script/mod.d.ts +1 -1
- package/script/mod.d.ts.map +1 -1
- package/script/src/base.d.ts +0 -5
- package/script/src/base.d.ts.map +1 -1
- package/script/src/clients/exchange.d.ts +430 -393
- package/script/src/clients/exchange.d.ts.map +1 -1
- package/script/src/clients/exchange.js +466 -926
- package/script/src/clients/info.d.ts +228 -203
- package/script/src/clients/info.d.ts.map +1 -1
- package/script/src/clients/info.js +236 -368
- package/script/src/clients/multiSign.d.ts +14 -1184
- package/script/src/clients/multiSign.d.ts.map +1 -1
- package/script/src/clients/multiSign.js +38 -2005
- package/script/src/clients/subscription.d.ts +95 -93
- package/script/src/clients/subscription.d.ts.map +1 -1
- package/script/src/clients/subscription.js +101 -146
- package/script/src/signing/_signTypedData/ethers.d.ts +16 -4
- package/script/src/signing/_signTypedData/ethers.d.ts.map +1 -1
- package/script/src/signing/_signTypedData/ethers.js +2 -2
- package/script/src/signing/_signTypedData/mod.d.ts +12 -12
- package/script/src/signing/_signTypedData/mod.d.ts.map +1 -1
- package/script/src/signing/_signTypedData/mod.js +51 -26
- package/script/src/signing/_signTypedData/private_key.d.ts +6 -5
- package/script/src/signing/_signTypedData/private_key.d.ts.map +1 -1
- package/script/src/signing/_signTypedData/private_key.js +40 -18
- package/script/src/signing/_signTypedData/viem.d.ts +27 -6
- package/script/src/signing/_signTypedData/viem.d.ts.map +1 -1
- package/script/src/signing/_signTypedData/viem.js +2 -2
- package/script/src/signing/_sorter.d.ts +12 -21
- package/script/src/signing/_sorter.d.ts.map +1 -1
- package/script/src/signing/_sorter.js +30 -63
- package/script/src/signing/mod.d.ts +177 -127
- package/script/src/signing/mod.d.ts.map +1 -1
- package/script/src/signing/mod.js +185 -148
- package/script/src/transports/base.d.ts +2 -1
- package/script/src/transports/base.d.ts.map +1 -1
- package/script/src/transports/http/http_transport.d.ts +3 -2
- package/script/src/transports/http/http_transport.d.ts.map +1 -1
- package/script/src/transports/http/http_transport.js +4 -4
- package/script/src/transports/websocket/_hyperliquid_event_target.d.ts +14 -6
- package/script/src/transports/websocket/_hyperliquid_event_target.d.ts.map +1 -1
- package/script/src/transports/websocket/_hyperliquid_event_target.js +1 -2
- package/script/src/transports/websocket/_reconnecting_websocket.d.ts +2 -1
- package/script/src/transports/websocket/_reconnecting_websocket.d.ts.map +1 -1
- package/script/src/transports/websocket/_reconnecting_websocket.js +1 -0
- package/script/src/transports/websocket/_websocket_async_request.d.ts.map +1 -1
- package/script/src/transports/websocket/_websocket_async_request.js +17 -21
- package/script/src/transports/websocket/websocket_transport.d.ts +4 -4
- package/script/src/transports/websocket/websocket_transport.d.ts.map +1 -1
- package/script/src/transports/websocket/websocket_transport.js +6 -6
- package/script/src/types/exchange/requests.d.ts +492 -306
- package/script/src/types/exchange/requests.d.ts.map +1 -1
- package/script/src/types/exchange/responses.d.ts +105 -25
- package/script/src/types/exchange/responses.d.ts.map +1 -1
- package/script/src/types/explorer/requests.d.ts +3 -3
- package/script/src/types/explorer/requests.d.ts.map +1 -1
- package/script/src/types/explorer/responses.d.ts +1 -1
- package/script/src/types/explorer/responses.d.ts.map +1 -1
- package/script/src/types/info/accounts.d.ts +403 -98
- package/script/src/types/info/accounts.d.ts.map +1 -1
- package/script/src/types/info/assets.d.ts +131 -35
- package/script/src/types/info/assets.d.ts.map +1 -1
- package/script/src/types/info/markets.d.ts +29 -8
- package/script/src/types/info/markets.d.ts.map +1 -1
- package/script/src/types/info/orders.d.ts +62 -17
- package/script/src/types/info/orders.d.ts.map +1 -1
- package/script/src/types/info/requests.d.ts +117 -51
- package/script/src/types/info/requests.d.ts.map +1 -1
- package/script/src/types/info/validators.d.ts +44 -14
- package/script/src/types/info/validators.d.ts.map +1 -1
- package/script/src/types/info/vaults.d.ts +25 -10
- package/script/src/types/info/vaults.d.ts.map +1 -1
- package/script/src/types/mod.d.ts +1 -1
- package/script/src/types/mod.d.ts.map +1 -1
- package/script/src/types/subscriptions/requests.d.ts +21 -66
- package/script/src/types/subscriptions/requests.d.ts.map +1 -1
- package/script/src/types/subscriptions/responses.d.ts +46 -55
- package/script/src/types/subscriptions/responses.d.ts.map +1 -1
- package/esm/src/signing/_signTypedData/window.d.ts +0 -29
- package/esm/src/signing/_signTypedData/window.d.ts.map +0 -1
- package/esm/src/signing/_signTypedData/window.js +0 -30
- package/script/src/signing/_signTypedData/window.d.ts +0 -29
- package/script/src/signing/_signTypedData/window.d.ts.map +0 -1
- package/script/src/signing/_signTypedData/window.js +0 -34
|
@@ -21,9 +21,9 @@ export class SubscriptionClient {
|
|
|
21
21
|
}
|
|
22
22
|
/**
|
|
23
23
|
* Subscribe to context updates for a specific perpetual asset.
|
|
24
|
-
* @param
|
|
25
|
-
* @param listener -
|
|
26
|
-
* @returns A promise that resolves with a {@link Subscription} object to manage the subscription lifecycle.
|
|
24
|
+
* @param params - Subscription-specific parameters.
|
|
25
|
+
* @param listener - A callback function to be called when the event is received.
|
|
26
|
+
* @returns A request-promise that resolves with a {@link Subscription} object to manage the subscription lifecycle.
|
|
27
27
|
*
|
|
28
28
|
* @throws {TransportError} When the transport layer throws an error.
|
|
29
29
|
*
|
|
@@ -40,23 +40,20 @@ export class SubscriptionClient {
|
|
|
40
40
|
* });
|
|
41
41
|
* ```
|
|
42
42
|
*/
|
|
43
|
-
activeAssetCtx(
|
|
44
|
-
const channel =
|
|
45
|
-
const payload = {
|
|
46
|
-
type: "activeAssetCtx",
|
|
47
|
-
coin: args.coin,
|
|
48
|
-
};
|
|
43
|
+
activeAssetCtx(params, listener) {
|
|
44
|
+
const channel = params.coin.startsWith("@") ? "activeSpotAssetCtx" : "activeAssetCtx";
|
|
45
|
+
const payload = { type: "activeAssetCtx", ...params };
|
|
49
46
|
return this.transport.subscribe(channel, payload, (e) => {
|
|
50
|
-
if (e.detail.coin ===
|
|
47
|
+
if (e.detail.coin === params.coin) {
|
|
51
48
|
listener(e.detail);
|
|
52
49
|
}
|
|
53
50
|
});
|
|
54
51
|
}
|
|
55
52
|
/**
|
|
56
53
|
* Subscribe to trading data updates for a specific asset and user.
|
|
57
|
-
* @param
|
|
58
|
-
* @param listener -
|
|
59
|
-
* @returns A promise that resolves with a {@link Subscription} object to manage the subscription lifecycle.
|
|
54
|
+
* @param params - Subscription-specific parameters.
|
|
55
|
+
* @param listener - A callback function to be called when the event is received.
|
|
56
|
+
* @returns A request-promise that resolves with a {@link Subscription} object to manage the subscription lifecycle.
|
|
60
57
|
*
|
|
61
58
|
* @throws {TransportError} When the transport layer throws an error.
|
|
62
59
|
*
|
|
@@ -73,34 +70,27 @@ export class SubscriptionClient {
|
|
|
73
70
|
* });
|
|
74
71
|
* ```
|
|
75
72
|
*/
|
|
76
|
-
activeAssetData(
|
|
77
|
-
const payload = {
|
|
78
|
-
type: "activeAssetData",
|
|
79
|
-
coin: args.coin,
|
|
80
|
-
user: args.user,
|
|
81
|
-
};
|
|
73
|
+
activeAssetData(params, listener) {
|
|
74
|
+
const payload = { type: "activeAssetData", ...params };
|
|
82
75
|
return this.transport.subscribe(payload.type, payload, (e) => {
|
|
83
|
-
if (e.detail.coin ===
|
|
76
|
+
if (e.detail.coin === params.coin && e.detail.user === params.user.toLowerCase()) {
|
|
84
77
|
listener(e.detail);
|
|
85
78
|
}
|
|
86
79
|
});
|
|
87
80
|
}
|
|
88
|
-
allMids(
|
|
89
|
-
const
|
|
90
|
-
const listener = typeof
|
|
91
|
-
const payload = {
|
|
92
|
-
type: "allMids",
|
|
93
|
-
dex: args.dex,
|
|
94
|
-
};
|
|
81
|
+
allMids(params_or_listener, maybeListener) {
|
|
82
|
+
const params = typeof params_or_listener === "function" ? {} : params_or_listener;
|
|
83
|
+
const listener = typeof params_or_listener === "function" ? params_or_listener : maybeListener;
|
|
84
|
+
const payload = { type: "allMids", ...params };
|
|
95
85
|
return this.transport.subscribe(payload.type, payload, (e) => {
|
|
96
86
|
listener(e.detail);
|
|
97
87
|
});
|
|
98
88
|
}
|
|
99
89
|
/**
|
|
100
90
|
* Subscribe to best bid and offer updates for a specific asset.
|
|
101
|
-
* @param
|
|
102
|
-
* @param listener -
|
|
103
|
-
* @returns A promise that resolves with a {@link Subscription} object to manage the subscription lifecycle.
|
|
91
|
+
* @param params - Subscription-specific parameters.
|
|
92
|
+
* @param listener - A callback function to be called when the event is received.
|
|
93
|
+
* @returns A request-promise that resolves with a {@link Subscription} object to manage the subscription lifecycle.
|
|
104
94
|
*
|
|
105
95
|
* @throws {TransportError} When the transport layer throws an error.
|
|
106
96
|
*
|
|
@@ -117,22 +107,19 @@ export class SubscriptionClient {
|
|
|
117
107
|
* });
|
|
118
108
|
* ```
|
|
119
109
|
*/
|
|
120
|
-
bbo(
|
|
121
|
-
const payload = {
|
|
122
|
-
type: "bbo",
|
|
123
|
-
coin: args.coin,
|
|
124
|
-
};
|
|
110
|
+
bbo(params, listener) {
|
|
111
|
+
const payload = { type: "bbo", ...params };
|
|
125
112
|
return this.transport.subscribe(payload.type, payload, (e) => {
|
|
126
|
-
if (e.detail.coin ===
|
|
113
|
+
if (e.detail.coin === params.coin) {
|
|
127
114
|
listener(e.detail);
|
|
128
115
|
}
|
|
129
116
|
});
|
|
130
117
|
}
|
|
131
118
|
/**
|
|
132
119
|
* Subscribe to candlestick data updates for a specific asset.
|
|
133
|
-
* @param
|
|
134
|
-
* @param listener -
|
|
135
|
-
* @returns A promise that resolves with a {@link Subscription} object to manage the subscription lifecycle.
|
|
120
|
+
* @param params - Subscription-specific parameters.
|
|
121
|
+
* @param listener - A callback function to be called when the event is received.
|
|
122
|
+
* @returns A request-promise that resolves with a {@link Subscription} object to manage the subscription lifecycle.
|
|
136
123
|
*
|
|
137
124
|
* @throws {TransportError} When the transport layer throws an error.
|
|
138
125
|
*
|
|
@@ -149,22 +136,18 @@ export class SubscriptionClient {
|
|
|
149
136
|
* });
|
|
150
137
|
* ```
|
|
151
138
|
*/
|
|
152
|
-
candle(
|
|
153
|
-
const payload = {
|
|
154
|
-
type: "candle",
|
|
155
|
-
coin: args.coin,
|
|
156
|
-
interval: args.interval,
|
|
157
|
-
};
|
|
139
|
+
candle(params, listener) {
|
|
140
|
+
const payload = { type: "candle", ...params };
|
|
158
141
|
return this.transport.subscribe(payload.type, payload, (e) => {
|
|
159
|
-
if (e.detail.s ===
|
|
142
|
+
if (e.detail.s === params.coin && e.detail.i === params.interval) {
|
|
160
143
|
listener(e.detail);
|
|
161
144
|
}
|
|
162
145
|
});
|
|
163
146
|
}
|
|
164
147
|
/**
|
|
165
148
|
* Subscribe to explorer block updates.
|
|
166
|
-
* @param listener -
|
|
167
|
-
* @returns A promise that resolves with a {@link Subscription} object to manage the subscription lifecycle.
|
|
149
|
+
* @param listener - A callback function to be called when the event is received.
|
|
150
|
+
* @returns A request-promise that resolves with a {@link Subscription} object to manage the subscription lifecycle.
|
|
168
151
|
* @note Make sure the endpoint in the {@link transport} supports this method.
|
|
169
152
|
*
|
|
170
153
|
* @throws {TransportError} When the transport layer throws an error.
|
|
@@ -183,17 +166,15 @@ export class SubscriptionClient {
|
|
|
183
166
|
* ```
|
|
184
167
|
*/
|
|
185
168
|
explorerBlock(listener) {
|
|
186
|
-
const payload = {
|
|
187
|
-
type: "explorerBlock",
|
|
188
|
-
};
|
|
169
|
+
const payload = { type: "explorerBlock" };
|
|
189
170
|
return this.transport.subscribe("_explorerBlock", payload, (e) => {
|
|
190
171
|
listener(e.detail);
|
|
191
172
|
});
|
|
192
173
|
}
|
|
193
174
|
/**
|
|
194
175
|
* Subscribe to explorer transaction updates.
|
|
195
|
-
* @param listener -
|
|
196
|
-
* @returns A promise that resolves with a {@link Subscription} object to manage the subscription lifecycle.
|
|
176
|
+
* @param listener - A callback function to be called when the event is received.
|
|
177
|
+
* @returns A request-promise that resolves with a {@link Subscription} object to manage the subscription lifecycle.
|
|
197
178
|
* @note Make sure the endpoint in the {@link transport} supports this method.
|
|
198
179
|
*
|
|
199
180
|
* @throws {TransportError} When the transport layer throws an error.
|
|
@@ -212,18 +193,16 @@ export class SubscriptionClient {
|
|
|
212
193
|
* ```
|
|
213
194
|
*/
|
|
214
195
|
explorerTxs(listener) {
|
|
215
|
-
const payload = {
|
|
216
|
-
type: "explorerTxs",
|
|
217
|
-
};
|
|
196
|
+
const payload = { type: "explorerTxs" };
|
|
218
197
|
return this.transport.subscribe("_explorerTxs", payload, (e) => {
|
|
219
198
|
listener(e.detail);
|
|
220
199
|
});
|
|
221
200
|
}
|
|
222
201
|
/**
|
|
223
202
|
* Subscribe to L2 order book updates for a specific asset.
|
|
224
|
-
* @param
|
|
225
|
-
* @param listener -
|
|
226
|
-
* @returns A promise that resolves with a {@link Subscription} object to manage the subscription lifecycle.
|
|
203
|
+
* @param params - Subscription-specific parameters.
|
|
204
|
+
* @param listener - A callback function to be called when the event is received.
|
|
205
|
+
* @returns A request-promise that resolves with a {@link Subscription} object to manage the subscription lifecycle.
|
|
227
206
|
*
|
|
228
207
|
* @throws {TransportError} When the transport layer throws an error.
|
|
229
208
|
*
|
|
@@ -240,24 +219,24 @@ export class SubscriptionClient {
|
|
|
240
219
|
* });
|
|
241
220
|
* ```
|
|
242
221
|
*/
|
|
243
|
-
l2Book(
|
|
222
|
+
l2Book(params, listener) {
|
|
244
223
|
const payload = {
|
|
245
224
|
type: "l2Book",
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
225
|
+
nSigFigs: params.nSigFigs ?? null,
|
|
226
|
+
mantissa: params.mantissa ?? null,
|
|
227
|
+
...params,
|
|
249
228
|
};
|
|
250
229
|
return this.transport.subscribe(payload.type, payload, (e) => {
|
|
251
|
-
if (e.detail.coin ===
|
|
230
|
+
if (e.detail.coin === params.coin) {
|
|
252
231
|
listener(e.detail);
|
|
253
232
|
}
|
|
254
233
|
});
|
|
255
234
|
}
|
|
256
235
|
/**
|
|
257
236
|
* Subscribe to notification updates for a specific user.
|
|
258
|
-
* @param
|
|
259
|
-
* @param listener -
|
|
260
|
-
* @returns A promise that resolves with a {@link Subscription} object to manage the subscription lifecycle.
|
|
237
|
+
* @param params - Subscription-specific parameters.
|
|
238
|
+
* @param listener - A callback function to be called when the event is received.
|
|
239
|
+
* @returns A request-promise that resolves with a {@link Subscription} object to manage the subscription lifecycle.
|
|
261
240
|
*
|
|
262
241
|
* @throws {TransportError} When the transport layer throws an error.
|
|
263
242
|
*
|
|
@@ -274,20 +253,17 @@ export class SubscriptionClient {
|
|
|
274
253
|
* });
|
|
275
254
|
* ```
|
|
276
255
|
*/
|
|
277
|
-
notification(
|
|
278
|
-
const payload = {
|
|
279
|
-
type: "notification",
|
|
280
|
-
user: args.user,
|
|
281
|
-
};
|
|
256
|
+
notification(params, listener) {
|
|
257
|
+
const payload = { type: "notification", ...params };
|
|
282
258
|
return this.transport.subscribe(payload.type, payload, (e) => {
|
|
283
259
|
listener(e.detail);
|
|
284
260
|
});
|
|
285
261
|
}
|
|
286
262
|
/**
|
|
287
263
|
* Subscribe to order status updates for a specific user.
|
|
288
|
-
* @param
|
|
289
|
-
* @param listener -
|
|
290
|
-
* @returns A promise that resolves with a {@link Subscription} object to manage the subscription lifecycle.
|
|
264
|
+
* @param params - Subscription-specific parameters.
|
|
265
|
+
* @param listener - A callback function to be called when the event is received.
|
|
266
|
+
* @returns A request-promise that resolves with a {@link Subscription} object to manage the subscription lifecycle.
|
|
291
267
|
*
|
|
292
268
|
* @throws {TransportError} When the transport layer throws an error.
|
|
293
269
|
*
|
|
@@ -304,20 +280,17 @@ export class SubscriptionClient {
|
|
|
304
280
|
* });
|
|
305
281
|
* ```
|
|
306
282
|
*/
|
|
307
|
-
orderUpdates(
|
|
308
|
-
const payload = {
|
|
309
|
-
type: "orderUpdates",
|
|
310
|
-
user: args.user,
|
|
311
|
-
};
|
|
283
|
+
orderUpdates(params, listener) {
|
|
284
|
+
const payload = { type: "orderUpdates", ...params };
|
|
312
285
|
return this.transport.subscribe(payload.type, payload, (e) => {
|
|
313
286
|
listener(e.detail);
|
|
314
287
|
});
|
|
315
288
|
}
|
|
316
289
|
/**
|
|
317
290
|
* Subscribe to real-time trade updates for a specific asset.
|
|
318
|
-
* @param
|
|
319
|
-
* @param listener -
|
|
320
|
-
* @returns A promise that resolves with a {@link Subscription} object to manage the subscription lifecycle.
|
|
291
|
+
* @param params - Subscription-specific parameters.
|
|
292
|
+
* @param listener - A callback function to be called when the event is received.
|
|
293
|
+
* @returns A request-promise that resolves with a {@link Subscription} object to manage the subscription lifecycle.
|
|
321
294
|
*
|
|
322
295
|
* @throws {TransportError} When the transport layer throws an error.
|
|
323
296
|
*
|
|
@@ -334,22 +307,19 @@ export class SubscriptionClient {
|
|
|
334
307
|
* });
|
|
335
308
|
* ```
|
|
336
309
|
*/
|
|
337
|
-
trades(
|
|
338
|
-
const payload = {
|
|
339
|
-
type: "trades",
|
|
340
|
-
coin: args.coin,
|
|
341
|
-
};
|
|
310
|
+
trades(params, listener) {
|
|
311
|
+
const payload = { type: "trades", ...params };
|
|
342
312
|
return this.transport.subscribe(payload.type, payload, (e) => {
|
|
343
|
-
if (e.detail[0]?.coin ===
|
|
313
|
+
if (e.detail[0]?.coin === params.coin) {
|
|
344
314
|
listener(e.detail);
|
|
345
315
|
}
|
|
346
316
|
});
|
|
347
317
|
}
|
|
348
318
|
/**
|
|
349
319
|
* Subscribe to non-order events for a specific user.
|
|
350
|
-
* @param
|
|
351
|
-
* @param listener -
|
|
352
|
-
* @returns A promise that resolves with a {@link Subscription} object to manage the subscription lifecycle.
|
|
320
|
+
* @param params - Subscription-specific parameters.
|
|
321
|
+
* @param listener - A callback function to be called when the event is received.
|
|
322
|
+
* @returns A request-promise that resolves with a {@link Subscription} object to manage the subscription lifecycle.
|
|
353
323
|
* @note Different subscriptions cannot be distinguished from each other.
|
|
354
324
|
*
|
|
355
325
|
* @throws {TransportError} When the transport layer throws an error.
|
|
@@ -367,20 +337,17 @@ export class SubscriptionClient {
|
|
|
367
337
|
* });
|
|
368
338
|
* ```
|
|
369
339
|
*/
|
|
370
|
-
userEvents(
|
|
371
|
-
const payload = {
|
|
372
|
-
type: "userEvents",
|
|
373
|
-
user: args.user,
|
|
374
|
-
};
|
|
340
|
+
userEvents(params, listener) {
|
|
341
|
+
const payload = { type: "userEvents", ...params };
|
|
375
342
|
return this.transport.subscribe("user", payload, (e) => {
|
|
376
343
|
listener(e.detail);
|
|
377
344
|
});
|
|
378
345
|
}
|
|
379
346
|
/**
|
|
380
347
|
* Subscribe to trade fill updates for a specific user.
|
|
381
|
-
* @param
|
|
382
|
-
* @param listener -
|
|
383
|
-
* @returns A promise that resolves with a {@link Subscription} object to manage the subscription lifecycle.
|
|
348
|
+
* @param params - Subscription-specific parameters.
|
|
349
|
+
* @param listener - A callback function to be called when the event is received.
|
|
350
|
+
* @returns A request-promise that resolves with a {@link Subscription} object to manage the subscription lifecycle.
|
|
384
351
|
*
|
|
385
352
|
* @throws {TransportError} When the transport layer throws an error.
|
|
386
353
|
*
|
|
@@ -397,23 +364,23 @@ export class SubscriptionClient {
|
|
|
397
364
|
* });
|
|
398
365
|
* ```
|
|
399
366
|
*/
|
|
400
|
-
userFills(
|
|
367
|
+
userFills(params, listener) {
|
|
401
368
|
const payload = {
|
|
402
369
|
type: "userFills",
|
|
403
|
-
|
|
404
|
-
|
|
370
|
+
aggregateByTime: params.aggregateByTime ?? false,
|
|
371
|
+
...params,
|
|
405
372
|
};
|
|
406
373
|
return this.transport.subscribe(payload.type, payload, (e) => {
|
|
407
|
-
if (e.detail.user ===
|
|
374
|
+
if (e.detail.user === params.user.toLowerCase()) {
|
|
408
375
|
listener(e.detail);
|
|
409
376
|
}
|
|
410
377
|
});
|
|
411
378
|
}
|
|
412
379
|
/**
|
|
413
380
|
* Subscribe to funding payment updates for a specific user.
|
|
414
|
-
* @param
|
|
415
|
-
* @param listener -
|
|
416
|
-
* @returns A promise that resolves with a {@link Subscription} object to manage the subscription lifecycle.
|
|
381
|
+
* @param params - Subscription-specific parameters.
|
|
382
|
+
* @param listener - A callback function to be called when the event is received.
|
|
383
|
+
* @returns A request-promise that resolves with a {@link Subscription} object to manage the subscription lifecycle.
|
|
417
384
|
*
|
|
418
385
|
* @throws {TransportError} When the transport layer throws an error.
|
|
419
386
|
*
|
|
@@ -430,22 +397,19 @@ export class SubscriptionClient {
|
|
|
430
397
|
* });
|
|
431
398
|
* ```
|
|
432
399
|
*/
|
|
433
|
-
userFundings(
|
|
434
|
-
const payload = {
|
|
435
|
-
type: "userFundings",
|
|
436
|
-
user: args.user,
|
|
437
|
-
};
|
|
400
|
+
userFundings(params, listener) {
|
|
401
|
+
const payload = { type: "userFundings", ...params };
|
|
438
402
|
return this.transport.subscribe(payload.type, payload, (e) => {
|
|
439
|
-
if (e.detail.user ===
|
|
403
|
+
if (e.detail.user === params.user.toLowerCase()) {
|
|
440
404
|
listener(e.detail);
|
|
441
405
|
}
|
|
442
406
|
});
|
|
443
407
|
}
|
|
444
408
|
/**
|
|
445
409
|
* Subscribe to non-funding ledger updates for a specific user.
|
|
446
|
-
* @param
|
|
447
|
-
* @param listener -
|
|
448
|
-
* @returns A promise that resolves with a {@link Subscription} object to manage the subscription lifecycle.
|
|
410
|
+
* @param params - Subscription-specific parameters.
|
|
411
|
+
* @param listener - A callback function to be called when the event is received.
|
|
412
|
+
* @returns A request-promise that resolves with a {@link Subscription} object to manage the subscription lifecycle.
|
|
449
413
|
*
|
|
450
414
|
* @throws {TransportError} When the transport layer throws an error.
|
|
451
415
|
*
|
|
@@ -462,22 +426,22 @@ export class SubscriptionClient {
|
|
|
462
426
|
* });
|
|
463
427
|
* ```
|
|
464
428
|
*/
|
|
465
|
-
userNonFundingLedgerUpdates(
|
|
429
|
+
userNonFundingLedgerUpdates(params, listener) {
|
|
466
430
|
const payload = {
|
|
467
431
|
type: "userNonFundingLedgerUpdates",
|
|
468
|
-
|
|
432
|
+
...params,
|
|
469
433
|
};
|
|
470
434
|
return this.transport.subscribe(payload.type, payload, (e) => {
|
|
471
|
-
if (e.detail.user ===
|
|
435
|
+
if (e.detail.user === params.user.toLowerCase()) {
|
|
472
436
|
listener(e.detail);
|
|
473
437
|
}
|
|
474
438
|
});
|
|
475
439
|
}
|
|
476
440
|
/**
|
|
477
441
|
* Subscribe to TWAP order history updates for a specific user.
|
|
478
|
-
* @param
|
|
479
|
-
* @param listener -
|
|
480
|
-
* @returns A promise that resolves with a {@link Subscription} object to manage the subscription lifecycle.
|
|
442
|
+
* @param params - Subscription-specific parameters.
|
|
443
|
+
* @param listener - A callback function to be called when the event is received.
|
|
444
|
+
* @returns A request-promise that resolves with a {@link Subscription} object to manage the subscription lifecycle.
|
|
481
445
|
*
|
|
482
446
|
* @throws {TransportError} When the transport layer throws an error.
|
|
483
447
|
*
|
|
@@ -494,22 +458,19 @@ export class SubscriptionClient {
|
|
|
494
458
|
* });
|
|
495
459
|
* ```
|
|
496
460
|
*/
|
|
497
|
-
userTwapHistory(
|
|
498
|
-
const payload = {
|
|
499
|
-
type: "userTwapHistory",
|
|
500
|
-
user: args.user,
|
|
501
|
-
};
|
|
461
|
+
userTwapHistory(params, listener) {
|
|
462
|
+
const payload = { type: "userTwapHistory", ...params };
|
|
502
463
|
return this.transport.subscribe(payload.type, payload, (e) => {
|
|
503
|
-
if (e.detail.user ===
|
|
464
|
+
if (e.detail.user === params.user.toLowerCase()) {
|
|
504
465
|
listener(e.detail);
|
|
505
466
|
}
|
|
506
467
|
});
|
|
507
468
|
}
|
|
508
469
|
/**
|
|
509
470
|
* Subscribe to TWAP execution updates for a specific user.
|
|
510
|
-
* @param
|
|
511
|
-
* @param listener -
|
|
512
|
-
* @returns A promise that resolves with a {@link Subscription} object to manage the subscription lifecycle.
|
|
471
|
+
* @param params - Subscription-specific parameters.
|
|
472
|
+
* @param listener - A callback function to be called when the event is received.
|
|
473
|
+
* @returns A request-promise that resolves with a {@link Subscription} object to manage the subscription lifecycle.
|
|
513
474
|
*
|
|
514
475
|
* @throws {TransportError} When the transport layer throws an error.
|
|
515
476
|
*
|
|
@@ -526,22 +487,19 @@ export class SubscriptionClient {
|
|
|
526
487
|
* });
|
|
527
488
|
* ```
|
|
528
489
|
*/
|
|
529
|
-
userTwapSliceFills(
|
|
530
|
-
const payload = {
|
|
531
|
-
type: "userTwapSliceFills",
|
|
532
|
-
user: args.user,
|
|
533
|
-
};
|
|
490
|
+
userTwapSliceFills(params, listener) {
|
|
491
|
+
const payload = { type: "userTwapSliceFills", ...params };
|
|
534
492
|
return this.transport.subscribe(payload.type, payload, (e) => {
|
|
535
|
-
if (e.detail.user ===
|
|
493
|
+
if (e.detail.user === params.user.toLowerCase()) {
|
|
536
494
|
listener(e.detail);
|
|
537
495
|
}
|
|
538
496
|
});
|
|
539
497
|
}
|
|
540
498
|
/**
|
|
541
499
|
* Subscribe to comprehensive user and market data updates.
|
|
542
|
-
* @param
|
|
543
|
-
* @param listener -
|
|
544
|
-
* @returns A promise that resolves with a {@link Subscription} object to manage the subscription lifecycle.
|
|
500
|
+
* @param params - Subscription-specific parameters.
|
|
501
|
+
* @param listener - A callback function to be called when the event is received.
|
|
502
|
+
* @returns A request-promise that resolves with a {@link Subscription} object to manage the subscription lifecycle.
|
|
545
503
|
*
|
|
546
504
|
* @throws {TransportError} When the transport layer throws an error.
|
|
547
505
|
*
|
|
@@ -558,13 +516,10 @@ export class SubscriptionClient {
|
|
|
558
516
|
* });
|
|
559
517
|
* ```
|
|
560
518
|
*/
|
|
561
|
-
webData2(
|
|
562
|
-
const payload = {
|
|
563
|
-
type: "webData2",
|
|
564
|
-
user: args.user,
|
|
565
|
-
};
|
|
519
|
+
webData2(params, listener) {
|
|
520
|
+
const payload = { type: "webData2", ...params };
|
|
566
521
|
return this.transport.subscribe(payload.type, payload, (e) => {
|
|
567
|
-
if (e.detail.user ===
|
|
522
|
+
if (e.detail.user === params.user.toLowerCase()) {
|
|
568
523
|
listener(e.detail);
|
|
569
524
|
}
|
|
570
525
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/** Abstract interface for an
|
|
2
|
-
export interface
|
|
1
|
+
/** Abstract interface for an {@link https://docs.ethers.org/v6/api/providers/#Signer | ethers.js signer}. */
|
|
2
|
+
export interface AbstractEthersV6Signer {
|
|
3
3
|
signTypedData(domain: {
|
|
4
4
|
name: string;
|
|
5
5
|
version: string;
|
|
@@ -11,8 +11,14 @@ export interface AbstractEthersSigner {
|
|
|
11
11
|
type: string;
|
|
12
12
|
}[];
|
|
13
13
|
}, value: Record<string, unknown>): Promise<string>;
|
|
14
|
+
getAddress?(): Promise<string>;
|
|
15
|
+
provider?: {
|
|
16
|
+
getNetwork(): Promise<{
|
|
17
|
+
chainId: number | bigint;
|
|
18
|
+
}>;
|
|
19
|
+
} | null;
|
|
14
20
|
}
|
|
15
|
-
/** Abstract interface for an
|
|
21
|
+
/** Abstract interface for an {@link https://docs.ethers.org/v5/api/signer/ | ethers.js v5 signer}. */
|
|
16
22
|
export interface AbstractEthersV5Signer {
|
|
17
23
|
_signTypedData(domain: {
|
|
18
24
|
name: string;
|
|
@@ -25,9 +31,15 @@ export interface AbstractEthersV5Signer {
|
|
|
25
31
|
type: string;
|
|
26
32
|
}[];
|
|
27
33
|
}, value: Record<string, unknown>): Promise<string>;
|
|
34
|
+
getAddress?(): Promise<string>;
|
|
35
|
+
provider?: {
|
|
36
|
+
getNetwork(): Promise<{
|
|
37
|
+
chainId: number | bigint;
|
|
38
|
+
}>;
|
|
39
|
+
} | null;
|
|
28
40
|
}
|
|
29
41
|
/** Checks if the given value is an abstract ethers signer. */
|
|
30
|
-
export declare function
|
|
42
|
+
export declare function isAbstractEthersV6Signer(client: unknown): client is AbstractEthersV6Signer;
|
|
31
43
|
/** Checks if the given value is an abstract ethers v5 signer. */
|
|
32
44
|
export declare function isAbstractEthersV5Signer(client: unknown): client is AbstractEthersV5Signer;
|
|
33
45
|
//# sourceMappingURL=ethers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ethers.d.ts","sourceRoot":"","sources":["../../../../src/src/signing/_signTypedData/ethers.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"ethers.d.ts","sourceRoot":"","sources":["../../../../src/src/signing/_signTypedData/ethers.ts"],"names":[],"mappings":"AAAA,6GAA6G;AAC7G,MAAM,WAAW,sBAAsB;IACnC,aAAa,CACT,MAAM,EAAE;QACJ,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,iBAAiB,EAAE,MAAM,CAAC;KAC7B,EACD,KAAK,EAAE;QACH,CAAC,GAAG,EAAE,MAAM,GAAG;YACX,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,EAAE,MAAM,CAAC;SAChB,EAAE,CAAC;KACP,EACD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,MAAM,CAAC,CAAC;IACnB,UAAU,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/B,QAAQ,CAAC,EACH;QAAE,UAAU,IAAI,OAAO,CAAC;YAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,GACvD,IAAI,CAAC;CACd;AAED,sGAAsG;AACtG,MAAM,WAAW,sBAAsB;IACnC,cAAc,CACV,MAAM,EAAE;QACJ,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,iBAAiB,EAAE,MAAM,CAAC;KAC7B,EACD,KAAK,EAAE;QACH,CAAC,GAAG,EAAE,MAAM,GAAG;YACX,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,EAAE,MAAM,CAAC;SAChB,EAAE,CAAC;KACP,EACD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,MAAM,CAAC,CAAC;IACnB,UAAU,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/B,QAAQ,CAAC,EACH;QAAE,UAAU,IAAI,OAAO,CAAC;YAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,GACvD,IAAI,CAAC;CACd;AAED,8DAA8D;AAC9D,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,sBAAsB,CAI1F;AAED,iEAAiE;AACjE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,sBAAsB,CAI1F"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** Checks if the given value is an abstract ethers signer. */
|
|
2
|
-
export function
|
|
2
|
+
export function isAbstractEthersV6Signer(client) {
|
|
3
3
|
return typeof client === "object" && client !== null &&
|
|
4
4
|
"signTypedData" in client && typeof client.signTypedData === "function" &&
|
|
5
5
|
client.signTypedData.length === 3;
|
|
@@ -1,19 +1,15 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import { type
|
|
3
|
-
import { isValidPrivateKey } from "./private_key.js";
|
|
4
|
-
import { type AbstractViemWalletClient, isAbstractViemWalletClient } from "./viem.js";
|
|
5
|
-
import { type AbstractWindowEthereum, isAbstractWindowEthereum } from "./window.js";
|
|
6
|
-
export { type AbstractEthersSigner, type AbstractEthersV5Signer, type AbstractViemWalletClient, type AbstractWindowEthereum, isAbstractEthersSigner, isAbstractEthersV5Signer, isAbstractViemWalletClient, isAbstractWindowEthereum, isValidPrivateKey, };
|
|
1
|
+
import { type AbstractEthersV5Signer, type AbstractEthersV6Signer } from "./ethers.js";
|
|
2
|
+
import { type AbstractViemJsonRpcAccount, type AbstractViemLocalAccount } from "./viem.js";
|
|
7
3
|
/** Abstract interface for a wallet that can sign typed data. */
|
|
8
|
-
export type AbstractWallet =
|
|
4
|
+
export type AbstractWallet = `0x${string}` | AbstractViemJsonRpcAccount | AbstractViemLocalAccount | AbstractEthersV6Signer | AbstractEthersV5Signer;
|
|
9
5
|
/** ECDSA signature components for Ethereum transactions and typed data. */
|
|
10
6
|
export interface Signature {
|
|
11
7
|
/** First 32-byte component of ECDSA signature */
|
|
12
|
-
r:
|
|
8
|
+
r: `0x${string}`;
|
|
13
9
|
/** Second 32-byte component of ECDSA signature */
|
|
14
|
-
s:
|
|
15
|
-
/** Recovery identifier
|
|
16
|
-
v:
|
|
10
|
+
s: `0x${string}`;
|
|
11
|
+
/** Recovery identifier */
|
|
12
|
+
v: 27 | 28;
|
|
17
13
|
}
|
|
18
14
|
export declare function signTypedData(args: {
|
|
19
15
|
wallet: AbstractWallet;
|
|
@@ -21,7 +17,7 @@ export declare function signTypedData(args: {
|
|
|
21
17
|
name: string;
|
|
22
18
|
version: string;
|
|
23
19
|
chainId: number;
|
|
24
|
-
verifyingContract:
|
|
20
|
+
verifyingContract: `0x${string}`;
|
|
25
21
|
};
|
|
26
22
|
types: {
|
|
27
23
|
[key: string]: {
|
|
@@ -32,4 +28,8 @@ export declare function signTypedData(args: {
|
|
|
32
28
|
primaryType: string;
|
|
33
29
|
message: Record<string, unknown>;
|
|
34
30
|
}): Promise<Signature>;
|
|
31
|
+
/** Get the chain ID of the wallet. */
|
|
32
|
+
export declare function getWalletChainId(wallet: AbstractWallet): Promise<`0x${string}`>;
|
|
33
|
+
/** Get the wallet address from various wallet types. */
|
|
34
|
+
export declare function getWalletAddress(wallet: AbstractWallet): Promise<`0x${string}`>;
|
|
35
35
|
//# sourceMappingURL=mod.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../../../src/src/signing/_signTypedData/mod.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../../../src/src/signing/_signTypedData/mod.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAG9B,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,KAAK,0BAA0B,EAAE,KAAK,wBAAwB,EAAwB,MAAM,WAAW,CAAC;AAEjH,gEAAgE;AAChE,MAAM,MAAM,cAAc,GACpB,KAAK,MAAM,EAAE,GACb,0BAA0B,GAC1B,wBAAwB,GACxB,sBAAsB,GACtB,sBAAsB,CAAC;AAE7B,2EAA2E;AAC3E,MAAM,WAAW,SAAS;IACtB,iDAAiD;IACjD,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IACjB,kDAAkD;IAClD,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IACjB,0BAA0B;IAC1B,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC;CACd;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE;IACtC,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,EAAE;QACJ,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,iBAAiB,EAAE,KAAK,MAAM,EAAE,CAAC;KACpC,CAAC;IACF,KAAK,EAAE;QACH,CAAC,GAAG,EAAE,MAAM,GAAG;YACX,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,EAAE,MAAM,CAAC;SAChB,EAAE,CAAC;KACP,CAAC;IACF,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,GAAG,OAAO,CAAC,SAAS,CAAC,CA8BrB;AASD,sCAAsC;AACtC,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,KAAK,MAAM,EAAE,CAAC,CAkBrF;AAED,wDAAwD;AACxD,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,KAAK,MAAM,EAAE,CAAC,CAgBrF"}
|