@secretkeylabs/stacks-tools 0.3.0 → 0.4.0-0fe567d
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/dist/index.cjs +395 -379
- package/dist/index.d.cts +823 -52
- package/dist/index.d.ts +823 -52
- package/dist/index.js +388 -377
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -16,6 +16,17 @@ async function safePromise(promise) {
|
|
|
16
16
|
});
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
|
+
function safeCall(fn) {
|
|
20
|
+
try {
|
|
21
|
+
return success(fn());
|
|
22
|
+
} catch (e) {
|
|
23
|
+
return error({
|
|
24
|
+
name: "SafeCallError",
|
|
25
|
+
message: "Safe call failed.",
|
|
26
|
+
data: e
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
}
|
|
19
30
|
|
|
20
31
|
// src/stacks-api/accounts/balances.ts
|
|
21
32
|
import * as v from "valibot";
|
|
@@ -91,42 +102,86 @@ async function balances(opts) {
|
|
|
91
102
|
return success(validationResult.output);
|
|
92
103
|
}
|
|
93
104
|
|
|
94
|
-
// src/stacks-api/accounts/
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
105
|
+
// src/stacks-api/accounts/latest-nonce.ts
|
|
106
|
+
import * as v2 from "valibot";
|
|
107
|
+
var responseSchema2 = v2.object({
|
|
108
|
+
last_mempool_tx_nonce: v2.nullable(v2.number()),
|
|
109
|
+
last_executed_tx_nonce: v2.nullable(v2.number()),
|
|
110
|
+
possible_next_nonce: v2.number(),
|
|
111
|
+
detected_missing_nonces: v2.array(v2.number()),
|
|
112
|
+
detected_mempool_nonces: v2.array(v2.number())
|
|
113
|
+
});
|
|
114
|
+
async function latestNonce(opts) {
|
|
115
|
+
const init = {};
|
|
116
|
+
if (opts.apiKeyConfig) {
|
|
117
|
+
init.headers = {
|
|
118
|
+
[opts.apiKeyConfig.header]: opts.apiKeyConfig.key
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
const endpoint = `${opts.baseUrl}/extended/v1/address/${opts.principal}/nonces`;
|
|
122
|
+
const res = await fetch(endpoint, init);
|
|
123
|
+
if (!res.ok) {
|
|
124
|
+
return error({
|
|
125
|
+
name: "FetchLatestNonceError",
|
|
126
|
+
message: "Failed to fetch latest nonce.",
|
|
127
|
+
data: {
|
|
128
|
+
endpoint,
|
|
129
|
+
status: res.status,
|
|
130
|
+
statusText: res.statusText,
|
|
131
|
+
bodyParseResult: await safePromise(res.json())
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
const [jsonError, data] = await safePromise(res.json());
|
|
136
|
+
if (jsonError) {
|
|
137
|
+
return error({
|
|
138
|
+
name: "ParseBodyError",
|
|
139
|
+
message: "Failed to parse response body as JSON.",
|
|
140
|
+
data: jsonError
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
const validationResult = v2.safeParse(responseSchema2, data);
|
|
144
|
+
if (!validationResult.success) {
|
|
145
|
+
return error({
|
|
146
|
+
name: "ValidateDataError",
|
|
147
|
+
message: "Failed to validate data.",
|
|
148
|
+
data: validationResult
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
return success(validationResult.output);
|
|
152
|
+
}
|
|
98
153
|
|
|
99
154
|
// src/stacks-api/types.ts
|
|
100
|
-
import * as
|
|
101
|
-
var baseListResponseSchema =
|
|
102
|
-
limit:
|
|
103
|
-
offset:
|
|
104
|
-
total:
|
|
105
|
-
results:
|
|
155
|
+
import * as v3 from "valibot";
|
|
156
|
+
var baseListResponseSchema = v3.object({
|
|
157
|
+
limit: v3.number(),
|
|
158
|
+
offset: v3.number(),
|
|
159
|
+
total: v3.number(),
|
|
160
|
+
results: v3.array(v3.unknown())
|
|
106
161
|
});
|
|
107
162
|
|
|
108
163
|
// src/stacks-api/blocks/get-block.ts
|
|
109
|
-
import * as
|
|
110
|
-
var
|
|
111
|
-
canonical:
|
|
112
|
-
height:
|
|
113
|
-
hash:
|
|
114
|
-
block_time:
|
|
115
|
-
block_time_iso:
|
|
116
|
-
index_block_hash:
|
|
117
|
-
parent_block_hash:
|
|
118
|
-
parent_index_block_hash:
|
|
119
|
-
burn_block_time:
|
|
120
|
-
burn_block_time_iso:
|
|
121
|
-
burn_block_hash:
|
|
122
|
-
burn_block_height:
|
|
123
|
-
miner_txid:
|
|
124
|
-
tx_count:
|
|
125
|
-
execution_cost_read_count:
|
|
126
|
-
execution_cost_read_length:
|
|
127
|
-
execution_cost_runtime:
|
|
128
|
-
execution_cost_write_count:
|
|
129
|
-
execution_cost_write_length:
|
|
164
|
+
import * as v4 from "valibot";
|
|
165
|
+
var responseSchema3 = v4.object({
|
|
166
|
+
canonical: v4.boolean(),
|
|
167
|
+
height: v4.number(),
|
|
168
|
+
hash: v4.string(),
|
|
169
|
+
block_time: v4.number(),
|
|
170
|
+
block_time_iso: v4.string(),
|
|
171
|
+
index_block_hash: v4.string(),
|
|
172
|
+
parent_block_hash: v4.string(),
|
|
173
|
+
parent_index_block_hash: v4.string(),
|
|
174
|
+
burn_block_time: v4.number(),
|
|
175
|
+
burn_block_time_iso: v4.string(),
|
|
176
|
+
burn_block_hash: v4.string(),
|
|
177
|
+
burn_block_height: v4.number(),
|
|
178
|
+
miner_txid: v4.string(),
|
|
179
|
+
tx_count: v4.number(),
|
|
180
|
+
execution_cost_read_count: v4.number(),
|
|
181
|
+
execution_cost_read_length: v4.number(),
|
|
182
|
+
execution_cost_runtime: v4.number(),
|
|
183
|
+
execution_cost_write_count: v4.number(),
|
|
184
|
+
execution_cost_write_length: v4.number()
|
|
130
185
|
});
|
|
131
186
|
async function getBlock(opts) {
|
|
132
187
|
const init = {};
|
|
@@ -158,7 +213,7 @@ async function getBlock(opts) {
|
|
|
158
213
|
data: jsonError
|
|
159
214
|
});
|
|
160
215
|
}
|
|
161
|
-
const validationResult =
|
|
216
|
+
const validationResult = v4.safeParse(responseSchema3, data);
|
|
162
217
|
if (!validationResult.success) {
|
|
163
218
|
return error({
|
|
164
219
|
name: "ValidateDataError",
|
|
@@ -169,27 +224,23 @@ async function getBlock(opts) {
|
|
|
169
224
|
return success(validationResult.output);
|
|
170
225
|
}
|
|
171
226
|
|
|
172
|
-
// src/stacks-api/blocks/index.ts
|
|
173
|
-
var blocks = {
|
|
174
|
-
getBlock
|
|
175
|
-
};
|
|
176
|
-
|
|
177
227
|
// src/stacks-api/info/core-api.ts
|
|
178
|
-
import * as
|
|
179
|
-
var CoreApiResponseSchema =
|
|
180
|
-
peer_version:
|
|
181
|
-
pox_consensus:
|
|
182
|
-
burn_block_height:
|
|
183
|
-
stable_pox_consensus:
|
|
184
|
-
stable_burn_block_height:
|
|
185
|
-
server_version:
|
|
186
|
-
network_id:
|
|
187
|
-
parent_network_id:
|
|
188
|
-
stacks_tip_height:
|
|
189
|
-
stacks_tip:
|
|
190
|
-
stacks_tip_consensus_hash:
|
|
191
|
-
unanchored_tip:
|
|
192
|
-
|
|
228
|
+
import * as v5 from "valibot";
|
|
229
|
+
var CoreApiResponseSchema = v5.object({
|
|
230
|
+
peer_version: v5.number(),
|
|
231
|
+
pox_consensus: v5.string(),
|
|
232
|
+
burn_block_height: v5.number(),
|
|
233
|
+
stable_pox_consensus: v5.string(),
|
|
234
|
+
stable_burn_block_height: v5.number(),
|
|
235
|
+
server_version: v5.string(),
|
|
236
|
+
network_id: v5.number(),
|
|
237
|
+
parent_network_id: v5.number(),
|
|
238
|
+
stacks_tip_height: v5.number(),
|
|
239
|
+
stacks_tip: v5.string(),
|
|
240
|
+
stacks_tip_consensus_hash: v5.string(),
|
|
241
|
+
unanchored_tip: v5.nullable(v5.string()),
|
|
242
|
+
unanchored_seq: v5.nullable(v5.string()),
|
|
243
|
+
exit_at_block_height: v5.nullable(v5.number())
|
|
193
244
|
});
|
|
194
245
|
async function coreApi(apiOpts) {
|
|
195
246
|
const init = {};
|
|
@@ -218,7 +269,7 @@ async function coreApi(apiOpts) {
|
|
|
218
269
|
data: parseBodyError
|
|
219
270
|
});
|
|
220
271
|
}
|
|
221
|
-
const validationResult =
|
|
272
|
+
const validationResult = v5.safeParse(CoreApiResponseSchema, data);
|
|
222
273
|
if (!validationResult.success) {
|
|
223
274
|
return error({
|
|
224
275
|
name: "ValidateDataError",
|
|
@@ -230,60 +281,60 @@ async function coreApi(apiOpts) {
|
|
|
230
281
|
}
|
|
231
282
|
|
|
232
283
|
// src/stacks-api/info/pox-details.ts
|
|
233
|
-
import * as
|
|
234
|
-
var poxDetailsResponseSchema =
|
|
235
|
-
contract_id:
|
|
236
|
-
pox_activation_threshold_ustx:
|
|
237
|
-
first_burnchain_block_height:
|
|
238
|
-
current_burnchain_block_height:
|
|
239
|
-
prepare_phase_block_length:
|
|
240
|
-
reward_phase_block_length:
|
|
241
|
-
reward_slots:
|
|
242
|
-
rejection_fraction:
|
|
243
|
-
total_liquid_supply_ustx:
|
|
244
|
-
current_cycle:
|
|
245
|
-
id:
|
|
246
|
-
min_threshold_ustx:
|
|
247
|
-
stacked_ustx:
|
|
248
|
-
is_pox_active:
|
|
284
|
+
import * as v6 from "valibot";
|
|
285
|
+
var poxDetailsResponseSchema = v6.object({
|
|
286
|
+
contract_id: v6.string(),
|
|
287
|
+
pox_activation_threshold_ustx: v6.number(),
|
|
288
|
+
first_burnchain_block_height: v6.number(),
|
|
289
|
+
current_burnchain_block_height: v6.number(),
|
|
290
|
+
prepare_phase_block_length: v6.number(),
|
|
291
|
+
reward_phase_block_length: v6.number(),
|
|
292
|
+
reward_slots: v6.number(),
|
|
293
|
+
rejection_fraction: v6.null(),
|
|
294
|
+
total_liquid_supply_ustx: v6.number(),
|
|
295
|
+
current_cycle: v6.object({
|
|
296
|
+
id: v6.number(),
|
|
297
|
+
min_threshold_ustx: v6.number(),
|
|
298
|
+
stacked_ustx: v6.number(),
|
|
299
|
+
is_pox_active: v6.boolean()
|
|
249
300
|
}),
|
|
250
|
-
next_cycle:
|
|
251
|
-
id:
|
|
252
|
-
min_threshold_ustx:
|
|
253
|
-
min_increment_ustx:
|
|
254
|
-
stacked_ustx:
|
|
255
|
-
prepare_phase_start_block_height:
|
|
256
|
-
blocks_until_prepare_phase:
|
|
257
|
-
reward_phase_start_block_height:
|
|
258
|
-
blocks_until_reward_phase:
|
|
259
|
-
ustx_until_pox_rejection:
|
|
301
|
+
next_cycle: v6.object({
|
|
302
|
+
id: v6.number(),
|
|
303
|
+
min_threshold_ustx: v6.number(),
|
|
304
|
+
min_increment_ustx: v6.number(),
|
|
305
|
+
stacked_ustx: v6.number(),
|
|
306
|
+
prepare_phase_start_block_height: v6.number(),
|
|
307
|
+
blocks_until_prepare_phase: v6.number(),
|
|
308
|
+
reward_phase_start_block_height: v6.number(),
|
|
309
|
+
blocks_until_reward_phase: v6.number(),
|
|
310
|
+
ustx_until_pox_rejection: v6.null()
|
|
260
311
|
}),
|
|
261
|
-
epochs:
|
|
262
|
-
|
|
263
|
-
epoch_id:
|
|
264
|
-
start_height:
|
|
265
|
-
end_height:
|
|
266
|
-
block_limit:
|
|
267
|
-
write_length:
|
|
268
|
-
write_count:
|
|
269
|
-
read_length:
|
|
270
|
-
read_count:
|
|
271
|
-
runtime:
|
|
312
|
+
epochs: v6.array(
|
|
313
|
+
v6.object({
|
|
314
|
+
epoch_id: v6.string(),
|
|
315
|
+
start_height: v6.number(),
|
|
316
|
+
end_height: v6.number(),
|
|
317
|
+
block_limit: v6.object({
|
|
318
|
+
write_length: v6.number(),
|
|
319
|
+
write_count: v6.number(),
|
|
320
|
+
read_length: v6.number(),
|
|
321
|
+
read_count: v6.number(),
|
|
322
|
+
runtime: v6.number()
|
|
272
323
|
}),
|
|
273
|
-
network_epoch:
|
|
324
|
+
network_epoch: v6.number()
|
|
274
325
|
})
|
|
275
326
|
),
|
|
276
|
-
min_amount_ustx:
|
|
277
|
-
prepare_cycle_length:
|
|
278
|
-
reward_cycle_id:
|
|
279
|
-
reward_cycle_length:
|
|
280
|
-
rejection_votes_left_required:
|
|
281
|
-
next_reward_cycle_in:
|
|
282
|
-
contract_versions:
|
|
283
|
-
|
|
284
|
-
contract_id:
|
|
285
|
-
activation_burnchain_block_height:
|
|
286
|
-
first_reward_cycle_id:
|
|
327
|
+
min_amount_ustx: v6.number(),
|
|
328
|
+
prepare_cycle_length: v6.number(),
|
|
329
|
+
reward_cycle_id: v6.number(),
|
|
330
|
+
reward_cycle_length: v6.number(),
|
|
331
|
+
rejection_votes_left_required: v6.null(),
|
|
332
|
+
next_reward_cycle_in: v6.number(),
|
|
333
|
+
contract_versions: v6.array(
|
|
334
|
+
v6.object({
|
|
335
|
+
contract_id: v6.string(),
|
|
336
|
+
activation_burnchain_block_height: v6.number(),
|
|
337
|
+
first_reward_cycle_id: v6.number()
|
|
287
338
|
})
|
|
288
339
|
)
|
|
289
340
|
});
|
|
@@ -314,7 +365,7 @@ async function poxDetails(args) {
|
|
|
314
365
|
data: jsonParseError
|
|
315
366
|
});
|
|
316
367
|
}
|
|
317
|
-
const validationResult =
|
|
368
|
+
const validationResult = v6.safeParse(poxDetailsResponseSchema, data);
|
|
318
369
|
if (!validationResult.success) {
|
|
319
370
|
return error({
|
|
320
371
|
name: "ValidateDataError",
|
|
@@ -325,21 +376,15 @@ async function poxDetails(args) {
|
|
|
325
376
|
return success(validationResult.output);
|
|
326
377
|
}
|
|
327
378
|
|
|
328
|
-
// src/stacks-api/info/index.ts
|
|
329
|
-
var info = {
|
|
330
|
-
coreApi,
|
|
331
|
-
poxDetails
|
|
332
|
-
};
|
|
333
|
-
|
|
334
379
|
// src/stacks-api/proof-of-transfer/cycle.ts
|
|
335
|
-
import * as
|
|
336
|
-
var
|
|
337
|
-
block_height:
|
|
338
|
-
index_block_hash:
|
|
339
|
-
cycle_number:
|
|
340
|
-
total_weight:
|
|
341
|
-
total_stacked_amount:
|
|
342
|
-
total_signers:
|
|
380
|
+
import * as v7 from "valibot";
|
|
381
|
+
var responseSchema4 = v7.object({
|
|
382
|
+
block_height: v7.number(),
|
|
383
|
+
index_block_hash: v7.string(),
|
|
384
|
+
cycle_number: v7.number(),
|
|
385
|
+
total_weight: v7.number(),
|
|
386
|
+
total_stacked_amount: v7.string(),
|
|
387
|
+
total_signers: v7.number()
|
|
343
388
|
});
|
|
344
389
|
async function cycle(opts) {
|
|
345
390
|
const init = {};
|
|
@@ -370,7 +415,7 @@ async function cycle(opts) {
|
|
|
370
415
|
data: jsonError
|
|
371
416
|
});
|
|
372
417
|
}
|
|
373
|
-
const validationResult =
|
|
418
|
+
const validationResult = v7.safeParse(responseSchema4, data);
|
|
374
419
|
if (!validationResult.success) {
|
|
375
420
|
return error({
|
|
376
421
|
name: "ValidateDataError",
|
|
@@ -382,17 +427,17 @@ async function cycle(opts) {
|
|
|
382
427
|
}
|
|
383
428
|
|
|
384
429
|
// src/stacks-api/proof-of-transfer/cycles.ts
|
|
385
|
-
import * as
|
|
386
|
-
var cycleInfoSchema =
|
|
387
|
-
block_height:
|
|
388
|
-
index_block_hash:
|
|
389
|
-
cycle_number:
|
|
390
|
-
total_weight:
|
|
391
|
-
total_stacked_amount:
|
|
392
|
-
total_signers:
|
|
430
|
+
import * as v8 from "valibot";
|
|
431
|
+
var cycleInfoSchema = v8.object({
|
|
432
|
+
block_height: v8.number(),
|
|
433
|
+
index_block_hash: v8.string(),
|
|
434
|
+
cycle_number: v8.number(),
|
|
435
|
+
total_weight: v8.number(),
|
|
436
|
+
total_stacked_amount: v8.string(),
|
|
437
|
+
total_signers: v8.number()
|
|
393
438
|
});
|
|
394
|
-
var resultsSchema =
|
|
395
|
-
var cyclesResponseSchema =
|
|
439
|
+
var resultsSchema = v8.array(cycleInfoSchema);
|
|
440
|
+
var cyclesResponseSchema = v8.object({
|
|
396
441
|
...baseListResponseSchema.entries,
|
|
397
442
|
results: resultsSchema
|
|
398
443
|
});
|
|
@@ -428,7 +473,7 @@ async function cycles(args) {
|
|
|
428
473
|
data: jsonError
|
|
429
474
|
});
|
|
430
475
|
}
|
|
431
|
-
const validationResult =
|
|
476
|
+
const validationResult = v8.safeParse(cyclesResponseSchema, data);
|
|
432
477
|
if (!validationResult.success) {
|
|
433
478
|
return error({
|
|
434
479
|
name: "ValidateDataError",
|
|
@@ -440,16 +485,16 @@ async function cycles(args) {
|
|
|
440
485
|
}
|
|
441
486
|
|
|
442
487
|
// src/stacks-api/proof-of-transfer/signer-in-cycle.ts
|
|
443
|
-
import * as
|
|
444
|
-
var signerInCycleResponseSchema =
|
|
445
|
-
signing_key:
|
|
446
|
-
signer_address:
|
|
447
|
-
weight:
|
|
448
|
-
stacked_amount:
|
|
449
|
-
weight_percent:
|
|
450
|
-
stacked_amount_percent:
|
|
451
|
-
solo_stacker_count:
|
|
452
|
-
pooled_stacker_count:
|
|
488
|
+
import * as v9 from "valibot";
|
|
489
|
+
var signerInCycleResponseSchema = v9.object({
|
|
490
|
+
signing_key: v9.string(),
|
|
491
|
+
signer_address: v9.string(),
|
|
492
|
+
weight: v9.number(),
|
|
493
|
+
stacked_amount: v9.string(),
|
|
494
|
+
weight_percent: v9.number(),
|
|
495
|
+
stacked_amount_percent: v9.number(),
|
|
496
|
+
solo_stacker_count: v9.number(),
|
|
497
|
+
pooled_stacker_count: v9.number()
|
|
453
498
|
});
|
|
454
499
|
async function signerInCycle(args) {
|
|
455
500
|
const init = {};
|
|
@@ -485,7 +530,7 @@ async function signerInCycle(args) {
|
|
|
485
530
|
}
|
|
486
531
|
});
|
|
487
532
|
}
|
|
488
|
-
const validationResult =
|
|
533
|
+
const validationResult = v9.safeParse(signerInCycleResponseSchema, data);
|
|
489
534
|
if (!validationResult.success) {
|
|
490
535
|
return error({
|
|
491
536
|
name: "ValidateDataError",
|
|
@@ -497,19 +542,19 @@ async function signerInCycle(args) {
|
|
|
497
542
|
}
|
|
498
543
|
|
|
499
544
|
// src/stacks-api/proof-of-transfer/signers-in-cycle.ts
|
|
500
|
-
import * as
|
|
501
|
-
var signerSchema =
|
|
502
|
-
signing_key:
|
|
503
|
-
signer_address:
|
|
504
|
-
weight:
|
|
505
|
-
stacked_amount:
|
|
506
|
-
weight_percent:
|
|
507
|
-
stacked_amount_percent:
|
|
508
|
-
pooled_stacker_count:
|
|
509
|
-
solo_stacker_count:
|
|
545
|
+
import * as v10 from "valibot";
|
|
546
|
+
var signerSchema = v10.object({
|
|
547
|
+
signing_key: v10.string(),
|
|
548
|
+
signer_address: v10.string(),
|
|
549
|
+
weight: v10.number(),
|
|
550
|
+
stacked_amount: v10.string(),
|
|
551
|
+
weight_percent: v10.number(),
|
|
552
|
+
stacked_amount_percent: v10.number(),
|
|
553
|
+
pooled_stacker_count: v10.number(),
|
|
554
|
+
solo_stacker_count: v10.number()
|
|
510
555
|
});
|
|
511
|
-
var resultsSchema2 =
|
|
512
|
-
var signersResponseSchema =
|
|
556
|
+
var resultsSchema2 = v10.array(signerSchema);
|
|
557
|
+
var signersResponseSchema = v10.object({
|
|
513
558
|
...baseListResponseSchema.entries,
|
|
514
559
|
results: resultsSchema2
|
|
515
560
|
});
|
|
@@ -548,7 +593,7 @@ async function signersInCycle(args) {
|
|
|
548
593
|
}
|
|
549
594
|
});
|
|
550
595
|
}
|
|
551
|
-
const validationResult =
|
|
596
|
+
const validationResult = v10.safeParse(signersResponseSchema, data);
|
|
552
597
|
if (!validationResult.success) {
|
|
553
598
|
return error({
|
|
554
599
|
name: "ValidateDataError",
|
|
@@ -560,15 +605,15 @@ async function signersInCycle(args) {
|
|
|
560
605
|
}
|
|
561
606
|
|
|
562
607
|
// src/stacks-api/proof-of-transfer/stackers-for-signer-in-cycle.ts
|
|
563
|
-
import * as
|
|
564
|
-
var stackerInfoSchema =
|
|
565
|
-
stacker_address:
|
|
566
|
-
stacked_amount:
|
|
567
|
-
pox_address:
|
|
568
|
-
stacker_type:
|
|
608
|
+
import * as v11 from "valibot";
|
|
609
|
+
var stackerInfoSchema = v11.object({
|
|
610
|
+
stacker_address: v11.string(),
|
|
611
|
+
stacked_amount: v11.string(),
|
|
612
|
+
pox_address: v11.string(),
|
|
613
|
+
stacker_type: v11.union([v11.literal("pooled"), v11.literal("solo")])
|
|
569
614
|
});
|
|
570
|
-
var resultsSchema3 =
|
|
571
|
-
var stackersForSignerInCycleResponseSchema =
|
|
615
|
+
var resultsSchema3 = v11.array(stackerInfoSchema);
|
|
616
|
+
var stackersForSignerInCycleResponseSchema = v11.object({
|
|
572
617
|
...baseListResponseSchema.entries,
|
|
573
618
|
results: resultsSchema3
|
|
574
619
|
});
|
|
@@ -582,7 +627,8 @@ async function stackersForSignerInCycle(opts) {
|
|
|
582
627
|
[opts.apiKeyConfig.header]: opts.apiKeyConfig.key
|
|
583
628
|
};
|
|
584
629
|
}
|
|
585
|
-
const
|
|
630
|
+
const signerPublicKeyPathParam = opts.signerPublicKey.startsWith("0x") ? opts.signerPublicKey : `0x${opts.signerPublicKey}`;
|
|
631
|
+
const endpoint = `${opts.baseUrl}/extended/v2/pox/cycles/${opts.cycleNumber}/signers/${signerPublicKeyPathParam}/stackers?${search}`;
|
|
586
632
|
const res = await fetch(endpoint, init);
|
|
587
633
|
if (!res.ok) {
|
|
588
634
|
return error({
|
|
@@ -604,7 +650,7 @@ async function stackersForSignerInCycle(opts) {
|
|
|
604
650
|
data: jsonError
|
|
605
651
|
});
|
|
606
652
|
}
|
|
607
|
-
const validationResult =
|
|
653
|
+
const validationResult = v11.safeParse(
|
|
608
654
|
stackersForSignerInCycleResponseSchema,
|
|
609
655
|
data
|
|
610
656
|
);
|
|
@@ -618,38 +664,38 @@ async function stackersForSignerInCycle(opts) {
|
|
|
618
664
|
return success(validationResult.output);
|
|
619
665
|
}
|
|
620
666
|
|
|
621
|
-
// src/stacks-api/proof-of-transfer/index.ts
|
|
622
|
-
var proofOfTransfer = {
|
|
623
|
-
cycle,
|
|
624
|
-
cycles,
|
|
625
|
-
signerInCycle,
|
|
626
|
-
signersInCycle,
|
|
627
|
-
stackersForSignerInCycle
|
|
628
|
-
};
|
|
629
|
-
|
|
630
667
|
// src/stacks-api/smart-contracts/read-only.ts
|
|
631
|
-
import * as
|
|
632
|
-
var readOnlyResponseSchema =
|
|
633
|
-
|
|
634
|
-
okay:
|
|
635
|
-
|
|
668
|
+
import * as v12 from "valibot";
|
|
669
|
+
var readOnlyResponseSchema = v12.variant("okay", [
|
|
670
|
+
v12.object({
|
|
671
|
+
okay: v12.literal(true),
|
|
672
|
+
/**
|
|
673
|
+
* A Clarity value as a hex-encoded string.
|
|
674
|
+
*/
|
|
675
|
+
result: v12.string()
|
|
636
676
|
}),
|
|
637
|
-
|
|
638
|
-
okay:
|
|
639
|
-
cause:
|
|
677
|
+
v12.object({
|
|
678
|
+
okay: v12.literal(false),
|
|
679
|
+
cause: v12.unknown()
|
|
640
680
|
})
|
|
641
681
|
]);
|
|
642
|
-
async function readOnly(
|
|
643
|
-
const
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
682
|
+
async function readOnly(args) {
|
|
683
|
+
const headers = {
|
|
684
|
+
"Content-Type": "application/json"
|
|
685
|
+
};
|
|
686
|
+
if (args.apiKeyConfig) {
|
|
687
|
+
headers[args.apiKeyConfig.header] = args.apiKeyConfig.key;
|
|
648
688
|
}
|
|
649
|
-
const
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
689
|
+
const init = {
|
|
690
|
+
method: "POST",
|
|
691
|
+
body: JSON.stringify({
|
|
692
|
+
sender: args.sender,
|
|
693
|
+
arguments: args.arguments
|
|
694
|
+
}),
|
|
695
|
+
headers
|
|
696
|
+
};
|
|
697
|
+
const endpoint = `${args.baseUrl}/v2/contracts/call-read/${args.contractAddress}/${args.contractName}/${args.functionName}`;
|
|
698
|
+
const res = await fetch(endpoint, init);
|
|
653
699
|
if (!res.ok) {
|
|
654
700
|
return error({
|
|
655
701
|
name: "FetchReadOnlyError",
|
|
@@ -669,7 +715,7 @@ async function readOnly(opts, apiOpts) {
|
|
|
669
715
|
data: error
|
|
670
716
|
});
|
|
671
717
|
}
|
|
672
|
-
const validationResult =
|
|
718
|
+
const validationResult = v12.safeParse(readOnlyResponseSchema, data);
|
|
673
719
|
if (!validationResult.success) {
|
|
674
720
|
return error({
|
|
675
721
|
name: "ValidateDataError",
|
|
@@ -680,26 +726,21 @@ async function readOnly(opts, apiOpts) {
|
|
|
680
726
|
return success(validationResult.output);
|
|
681
727
|
}
|
|
682
728
|
|
|
683
|
-
// src/stacks-api/smart-contracts/index.ts
|
|
684
|
-
var smartContracts = {
|
|
685
|
-
readOnly
|
|
686
|
-
};
|
|
687
|
-
|
|
688
729
|
// src/stacks-api/stacking-pool/members.ts
|
|
689
|
-
import * as
|
|
690
|
-
var memberSchema =
|
|
691
|
-
stacker:
|
|
692
|
-
pox_addr:
|
|
693
|
-
amount_ustx:
|
|
694
|
-
burn_block_unlock_height:
|
|
695
|
-
block_height:
|
|
696
|
-
tx_id:
|
|
730
|
+
import * as v13 from "valibot";
|
|
731
|
+
var memberSchema = v13.object({
|
|
732
|
+
stacker: v13.string(),
|
|
733
|
+
pox_addr: v13.optional(v13.string()),
|
|
734
|
+
amount_ustx: v13.string(),
|
|
735
|
+
burn_block_unlock_height: v13.optional(v13.number()),
|
|
736
|
+
block_height: v13.number(),
|
|
737
|
+
tx_id: v13.string()
|
|
697
738
|
});
|
|
698
|
-
var membersResponseSchema =
|
|
699
|
-
limit:
|
|
700
|
-
offset:
|
|
701
|
-
total:
|
|
702
|
-
results:
|
|
739
|
+
var membersResponseSchema = v13.object({
|
|
740
|
+
limit: v13.number(),
|
|
741
|
+
offset: v13.number(),
|
|
742
|
+
total: v13.number(),
|
|
743
|
+
results: v13.array(memberSchema)
|
|
703
744
|
});
|
|
704
745
|
async function members(opts, apiOpts) {
|
|
705
746
|
const search = new URLSearchParams();
|
|
@@ -736,7 +777,7 @@ async function members(opts, apiOpts) {
|
|
|
736
777
|
data: jsonParseError
|
|
737
778
|
});
|
|
738
779
|
}
|
|
739
|
-
const validationResult =
|
|
780
|
+
const validationResult = v13.safeParse(membersResponseSchema, data);
|
|
740
781
|
if (!validationResult.success) {
|
|
741
782
|
return error({
|
|
742
783
|
name: "ValidateDataError",
|
|
@@ -747,122 +788,121 @@ async function members(opts, apiOpts) {
|
|
|
747
788
|
return success(validationResult.output);
|
|
748
789
|
}
|
|
749
790
|
|
|
750
|
-
// src/stacks-api/stacking-pool/index.ts
|
|
751
|
-
var stackingPool = {
|
|
752
|
-
members
|
|
753
|
-
};
|
|
754
|
-
|
|
755
791
|
// src/stacks-api/transactions/schemas.ts
|
|
756
|
-
import * as
|
|
757
|
-
var baseTransactionSchema =
|
|
758
|
-
tx_id:
|
|
759
|
-
nonce:
|
|
760
|
-
fee_rate:
|
|
761
|
-
sender_address:
|
|
762
|
-
sponsored:
|
|
763
|
-
post_condition_mode:
|
|
764
|
-
post_conditions:
|
|
765
|
-
anchor_mode:
|
|
766
|
-
is_unanchored:
|
|
767
|
-
block_hash:
|
|
768
|
-
parent_block_hash:
|
|
769
|
-
block_height:
|
|
770
|
-
block_time:
|
|
771
|
-
block_time_iso:
|
|
772
|
-
burn_block_height:
|
|
773
|
-
burn_block_time:
|
|
774
|
-
burn_block_time_iso:
|
|
775
|
-
parent_burn_block_time:
|
|
776
|
-
parent_burn_block_time_iso:
|
|
777
|
-
canonical:
|
|
778
|
-
tx_index:
|
|
779
|
-
tx_status:
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
792
|
+
import * as v14 from "valibot";
|
|
793
|
+
var baseTransactionSchema = v14.object({
|
|
794
|
+
tx_id: v14.string(),
|
|
795
|
+
nonce: v14.number(),
|
|
796
|
+
fee_rate: v14.string(),
|
|
797
|
+
sender_address: v14.string(),
|
|
798
|
+
sponsored: v14.boolean(),
|
|
799
|
+
post_condition_mode: v14.string(),
|
|
800
|
+
post_conditions: v14.array(v14.unknown()),
|
|
801
|
+
anchor_mode: v14.string(),
|
|
802
|
+
is_unanchored: v14.boolean(),
|
|
803
|
+
block_hash: v14.string(),
|
|
804
|
+
parent_block_hash: v14.string(),
|
|
805
|
+
block_height: v14.number(),
|
|
806
|
+
block_time: v14.number(),
|
|
807
|
+
block_time_iso: v14.string(),
|
|
808
|
+
burn_block_height: v14.number(),
|
|
809
|
+
burn_block_time: v14.number(),
|
|
810
|
+
burn_block_time_iso: v14.string(),
|
|
811
|
+
parent_burn_block_time: v14.number(),
|
|
812
|
+
parent_burn_block_time_iso: v14.string(),
|
|
813
|
+
canonical: v14.boolean(),
|
|
814
|
+
tx_index: v14.number(),
|
|
815
|
+
tx_status: v14.union([
|
|
816
|
+
v14.literal("success"),
|
|
817
|
+
v14.literal("abort_by_response"),
|
|
818
|
+
v14.literal("abort_by_post_condition")
|
|
819
|
+
]),
|
|
820
|
+
tx_result: v14.object({
|
|
821
|
+
hex: v14.string(),
|
|
822
|
+
repr: v14.string()
|
|
783
823
|
}),
|
|
784
|
-
microblock_hash:
|
|
785
|
-
microblock_sequence:
|
|
786
|
-
microblock_canonical:
|
|
787
|
-
event_count:
|
|
788
|
-
events:
|
|
789
|
-
execution_cost_read_count:
|
|
790
|
-
execution_cost_read_length:
|
|
791
|
-
execution_cost_runtime:
|
|
792
|
-
execution_cost_write_count:
|
|
793
|
-
execution_cost_write_length:
|
|
824
|
+
microblock_hash: v14.string(),
|
|
825
|
+
microblock_sequence: v14.number(),
|
|
826
|
+
microblock_canonical: v14.boolean(),
|
|
827
|
+
event_count: v14.number(),
|
|
828
|
+
events: v14.array(v14.unknown()),
|
|
829
|
+
execution_cost_read_count: v14.number(),
|
|
830
|
+
execution_cost_read_length: v14.number(),
|
|
831
|
+
execution_cost_runtime: v14.number(),
|
|
832
|
+
execution_cost_write_count: v14.number(),
|
|
833
|
+
execution_cost_write_length: v14.number()
|
|
794
834
|
});
|
|
795
|
-
var contractCallTransactionSchema =
|
|
796
|
-
tx_type:
|
|
797
|
-
contract_call:
|
|
798
|
-
contract_id:
|
|
799
|
-
function_name:
|
|
800
|
-
function_signature:
|
|
801
|
-
function_args:
|
|
802
|
-
|
|
803
|
-
hex:
|
|
804
|
-
repr:
|
|
805
|
-
name:
|
|
806
|
-
type:
|
|
835
|
+
var contractCallTransactionSchema = v14.object({
|
|
836
|
+
tx_type: v14.literal("contract_call"),
|
|
837
|
+
contract_call: v14.object({
|
|
838
|
+
contract_id: v14.string(),
|
|
839
|
+
function_name: v14.string(),
|
|
840
|
+
function_signature: v14.string(),
|
|
841
|
+
function_args: v14.array(
|
|
842
|
+
v14.object({
|
|
843
|
+
hex: v14.string(),
|
|
844
|
+
repr: v14.string(),
|
|
845
|
+
name: v14.string(),
|
|
846
|
+
type: v14.string()
|
|
807
847
|
})
|
|
808
848
|
)
|
|
809
849
|
}),
|
|
810
850
|
...baseTransactionSchema.entries
|
|
811
851
|
});
|
|
812
|
-
var smartContractTransactionSchema =
|
|
813
|
-
tx_type:
|
|
814
|
-
smart_contract:
|
|
852
|
+
var smartContractTransactionSchema = v14.object({
|
|
853
|
+
tx_type: v14.literal("smart_contract"),
|
|
854
|
+
smart_contract: v14.object({
|
|
815
855
|
/**
|
|
816
856
|
* NOTE: The types may be wrong, not sure what type of value is used when
|
|
817
857
|
* the version is not `null`.
|
|
818
858
|
*/
|
|
819
|
-
clarity_version:
|
|
820
|
-
contract_id:
|
|
821
|
-
source_code:
|
|
859
|
+
clarity_version: v14.union([v14.null(), v14.number()]),
|
|
860
|
+
contract_id: v14.string(),
|
|
861
|
+
source_code: v14.string()
|
|
822
862
|
}),
|
|
823
863
|
...baseTransactionSchema.entries
|
|
824
864
|
});
|
|
825
|
-
var tokenTransferSchema =
|
|
826
|
-
tx_type:
|
|
827
|
-
token_transfer:
|
|
828
|
-
recipient_address:
|
|
829
|
-
amount:
|
|
830
|
-
memo:
|
|
865
|
+
var tokenTransferSchema = v14.object({
|
|
866
|
+
tx_type: v14.literal("token_transfer"),
|
|
867
|
+
token_transfer: v14.object({
|
|
868
|
+
recipient_address: v14.string(),
|
|
869
|
+
amount: v14.string(),
|
|
870
|
+
memo: v14.string()
|
|
831
871
|
}),
|
|
832
872
|
...baseTransactionSchema.entries
|
|
833
873
|
});
|
|
834
|
-
var transactionSchema =
|
|
874
|
+
var transactionSchema = v14.variant("tx_type", [
|
|
835
875
|
contractCallTransactionSchema,
|
|
836
876
|
smartContractTransactionSchema,
|
|
837
877
|
tokenTransferSchema
|
|
838
878
|
]);
|
|
839
879
|
|
|
840
880
|
// src/stacks-api/transactions/address-transactions.ts
|
|
841
|
-
import * as
|
|
842
|
-
var resultSchema =
|
|
881
|
+
import * as v15 from "valibot";
|
|
882
|
+
var resultSchema = v15.object({
|
|
843
883
|
tx: transactionSchema,
|
|
844
|
-
stx_sent:
|
|
845
|
-
stx_received:
|
|
846
|
-
events:
|
|
847
|
-
stx:
|
|
848
|
-
transfer:
|
|
849
|
-
mint:
|
|
850
|
-
burn:
|
|
884
|
+
stx_sent: v15.string(),
|
|
885
|
+
stx_received: v15.string(),
|
|
886
|
+
events: v15.object({
|
|
887
|
+
stx: v15.object({
|
|
888
|
+
transfer: v15.number(),
|
|
889
|
+
mint: v15.number(),
|
|
890
|
+
burn: v15.number()
|
|
851
891
|
}),
|
|
852
|
-
ft:
|
|
853
|
-
transfer:
|
|
854
|
-
mint:
|
|
855
|
-
burn:
|
|
892
|
+
ft: v15.object({
|
|
893
|
+
transfer: v15.number(),
|
|
894
|
+
mint: v15.number(),
|
|
895
|
+
burn: v15.number()
|
|
856
896
|
}),
|
|
857
|
-
nft:
|
|
858
|
-
transfer:
|
|
859
|
-
mint:
|
|
860
|
-
burn:
|
|
897
|
+
nft: v15.object({
|
|
898
|
+
transfer: v15.number(),
|
|
899
|
+
mint: v15.number(),
|
|
900
|
+
burn: v15.number()
|
|
861
901
|
})
|
|
862
902
|
})
|
|
863
903
|
});
|
|
864
|
-
var resultsSchema4 =
|
|
865
|
-
var addressTransactionsResponseSchema =
|
|
904
|
+
var resultsSchema4 = v15.array(resultSchema);
|
|
905
|
+
var addressTransactionsResponseSchema = v15.object({
|
|
866
906
|
...baseListResponseSchema.entries,
|
|
867
907
|
results: resultsSchema4
|
|
868
908
|
});
|
|
@@ -899,7 +939,7 @@ async function addressTransactions(args) {
|
|
|
899
939
|
data: jsonParseError
|
|
900
940
|
});
|
|
901
941
|
}
|
|
902
|
-
const validationResult =
|
|
942
|
+
const validationResult = v15.safeParse(addressTransactionsResponseSchema, data);
|
|
903
943
|
if (!validationResult.success) {
|
|
904
944
|
return error({
|
|
905
945
|
name: "ValidateDataError",
|
|
@@ -911,7 +951,7 @@ async function addressTransactions(args) {
|
|
|
911
951
|
}
|
|
912
952
|
|
|
913
953
|
// src/stacks-api/transactions/get-transaction.ts
|
|
914
|
-
import * as
|
|
954
|
+
import * as v16 from "valibot";
|
|
915
955
|
async function getTransaction(args) {
|
|
916
956
|
const init = {};
|
|
917
957
|
if (args.apiKeyConfig) {
|
|
@@ -940,7 +980,7 @@ async function getTransaction(args) {
|
|
|
940
980
|
error: jsonParseError
|
|
941
981
|
});
|
|
942
982
|
}
|
|
943
|
-
const validationResult =
|
|
983
|
+
const validationResult = v16.safeParse(transactionSchema, data);
|
|
944
984
|
if (!validationResult.success) {
|
|
945
985
|
return error({
|
|
946
986
|
name: "ValidateDataError",
|
|
@@ -951,31 +991,46 @@ async function getTransaction(args) {
|
|
|
951
991
|
return success(validationResult.output);
|
|
952
992
|
}
|
|
953
993
|
|
|
954
|
-
// src/stacks-api/transactions/index.ts
|
|
955
|
-
var transactions = {
|
|
956
|
-
addressTransactions,
|
|
957
|
-
getTransaction
|
|
958
|
-
};
|
|
959
|
-
|
|
960
994
|
// src/stacks-api/index.ts
|
|
961
|
-
var
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
995
|
+
var accounts = { balances, latestNonce };
|
|
996
|
+
var blocks = { getBlock };
|
|
997
|
+
var info = { coreApi, poxDetails };
|
|
998
|
+
var proofOfTransfer = {
|
|
999
|
+
cycle,
|
|
1000
|
+
cycles,
|
|
1001
|
+
signerInCycle,
|
|
1002
|
+
signersInCycle,
|
|
1003
|
+
stackersForSignerInCycle
|
|
969
1004
|
};
|
|
1005
|
+
var smartContracts = { readOnly };
|
|
1006
|
+
var stackingPool = { members };
|
|
1007
|
+
var transactions = { addressTransactions, getTransaction };
|
|
970
1008
|
|
|
971
1009
|
// src/utils/call-rate-limited-api.ts
|
|
972
1010
|
import { backOff } from "exponential-backoff";
|
|
1011
|
+
var defaultStartingDelay = 15e3;
|
|
1012
|
+
var defaultNumOfAttempts = 5;
|
|
1013
|
+
function callRateLimitedApi(fn, options) {
|
|
1014
|
+
return backOff(fn, {
|
|
1015
|
+
startingDelay: options?.startingDelay ?? defaultStartingDelay,
|
|
1016
|
+
numOfAttempts: options?.numOfAttempts ?? defaultNumOfAttempts
|
|
1017
|
+
});
|
|
1018
|
+
}
|
|
973
1019
|
async function safeCallRateLimitedApi(fn, options) {
|
|
974
1020
|
try {
|
|
975
|
-
return await backOff(
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
1021
|
+
return await backOff(
|
|
1022
|
+
async () => {
|
|
1023
|
+
const [error2, data] = await fn();
|
|
1024
|
+
if (error2) {
|
|
1025
|
+
throw error2;
|
|
1026
|
+
}
|
|
1027
|
+
return success(data);
|
|
1028
|
+
},
|
|
1029
|
+
{
|
|
1030
|
+
startingDelay: options?.startingDelay ?? 15e3,
|
|
1031
|
+
numOfAttempts: options?.numOfAttempts ?? 5
|
|
1032
|
+
}
|
|
1033
|
+
);
|
|
979
1034
|
} catch (error2) {
|
|
980
1035
|
return error({
|
|
981
1036
|
name: "MaxRetriesExceeded",
|
|
@@ -987,66 +1042,22 @@ async function safeCallRateLimitedApi(fn, options) {
|
|
|
987
1042
|
}
|
|
988
1043
|
}
|
|
989
1044
|
|
|
990
|
-
// src/
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
const [error2, data] = await safeCallRateLimitedApi(
|
|
1000
|
-
() => signersInCycle({
|
|
1001
|
-
...rest,
|
|
1002
|
-
limit
|
|
1003
|
-
})
|
|
1004
|
-
);
|
|
1005
|
-
if (error2) {
|
|
1006
|
-
return error({
|
|
1007
|
-
name: "GetSignerTotalLockedError",
|
|
1008
|
-
message: "Failed to get signer total locked.",
|
|
1009
|
-
data: {
|
|
1010
|
-
error: error2
|
|
1011
|
-
}
|
|
1012
|
-
});
|
|
1013
|
-
}
|
|
1014
|
-
for (const signer of data.results) {
|
|
1015
|
-
if (identifier.type === "address") {
|
|
1016
|
-
if (signer.signer_address === identifier.signerAddress) {
|
|
1017
|
-
totalLocked = BigInt(signer.stacked_amount);
|
|
1018
|
-
found = true;
|
|
1019
|
-
break;
|
|
1020
|
-
}
|
|
1021
|
-
} else {
|
|
1022
|
-
if (signer.signing_key === identifier.signerPublicKey) {
|
|
1023
|
-
totalLocked = BigInt(signer.stacked_amount);
|
|
1024
|
-
found = true;
|
|
1025
|
-
break;
|
|
1026
|
-
}
|
|
1027
|
-
}
|
|
1028
|
-
}
|
|
1029
|
-
offset += limit + data.results.length;
|
|
1030
|
-
hasMore = offset < data.total;
|
|
1031
|
-
}
|
|
1032
|
-
if (!found) {
|
|
1033
|
-
return error({
|
|
1034
|
-
name: "SignerNotFound",
|
|
1035
|
-
message: "Signer not found.",
|
|
1036
|
-
data: {
|
|
1037
|
-
identifier,
|
|
1038
|
-
cycle: args.cycleNumber
|
|
1039
|
-
}
|
|
1040
|
-
});
|
|
1041
|
-
}
|
|
1042
|
-
return success(totalLocked);
|
|
1043
|
-
}
|
|
1044
|
-
|
|
1045
|
-
// src/queries/index.ts
|
|
1046
|
-
var queries = {
|
|
1047
|
-
getSignerStackedAmount
|
|
1045
|
+
// src/index.ts
|
|
1046
|
+
var stacksApi = {
|
|
1047
|
+
accounts,
|
|
1048
|
+
blocks,
|
|
1049
|
+
info,
|
|
1050
|
+
proofOfTransfer,
|
|
1051
|
+
smartContracts,
|
|
1052
|
+
stackingPool,
|
|
1053
|
+
transactions
|
|
1048
1054
|
};
|
|
1049
1055
|
export {
|
|
1050
|
-
|
|
1051
|
-
|
|
1056
|
+
callRateLimitedApi,
|
|
1057
|
+
error,
|
|
1058
|
+
safeCall,
|
|
1059
|
+
safeCallRateLimitedApi,
|
|
1060
|
+
safePromise,
|
|
1061
|
+
stacksApi,
|
|
1062
|
+
success
|
|
1052
1063
|
};
|