@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 CHANGED
@@ -30,8 +30,13 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
30
30
  // src/index.ts
31
31
  var src_exports = {};
32
32
  __export(src_exports, {
33
- queries: () => queries,
34
- stacksApi: () => stacksApi
33
+ callRateLimitedApi: () => callRateLimitedApi,
34
+ error: () => error,
35
+ safeCall: () => safeCall,
36
+ safeCallRateLimitedApi: () => safeCallRateLimitedApi,
37
+ safePromise: () => safePromise,
38
+ stacksApi: () => stacksApi,
39
+ success: () => success
35
40
  });
36
41
  module.exports = __toCommonJS(src_exports);
37
42
 
@@ -53,6 +58,17 @@ async function safePromise(promise) {
53
58
  });
54
59
  }
55
60
  }
61
+ function safeCall(fn) {
62
+ try {
63
+ return success(fn());
64
+ } catch (e) {
65
+ return error({
66
+ name: "SafeCallError",
67
+ message: "Safe call failed.",
68
+ data: e
69
+ });
70
+ }
71
+ }
56
72
 
57
73
  // src/stacks-api/accounts/balances.ts
58
74
  var v = __toESM(require("valibot"), 1);
@@ -128,42 +144,86 @@ async function balances(opts) {
128
144
  return success(validationResult.output);
129
145
  }
130
146
 
131
- // src/stacks-api/accounts/index.ts
132
- var accounts = {
133
- balances
134
- };
147
+ // src/stacks-api/accounts/latest-nonce.ts
148
+ var v2 = __toESM(require("valibot"), 1);
149
+ var responseSchema2 = v2.object({
150
+ last_mempool_tx_nonce: v2.nullable(v2.number()),
151
+ last_executed_tx_nonce: v2.nullable(v2.number()),
152
+ possible_next_nonce: v2.number(),
153
+ detected_missing_nonces: v2.array(v2.number()),
154
+ detected_mempool_nonces: v2.array(v2.number())
155
+ });
156
+ async function latestNonce(opts) {
157
+ const init = {};
158
+ if (opts.apiKeyConfig) {
159
+ init.headers = {
160
+ [opts.apiKeyConfig.header]: opts.apiKeyConfig.key
161
+ };
162
+ }
163
+ const endpoint = `${opts.baseUrl}/extended/v1/address/${opts.principal}/nonces`;
164
+ const res = await fetch(endpoint, init);
165
+ if (!res.ok) {
166
+ return error({
167
+ name: "FetchLatestNonceError",
168
+ message: "Failed to fetch latest nonce.",
169
+ data: {
170
+ endpoint,
171
+ status: res.status,
172
+ statusText: res.statusText,
173
+ bodyParseResult: await safePromise(res.json())
174
+ }
175
+ });
176
+ }
177
+ const [jsonError, data] = await safePromise(res.json());
178
+ if (jsonError) {
179
+ return error({
180
+ name: "ParseBodyError",
181
+ message: "Failed to parse response body as JSON.",
182
+ data: jsonError
183
+ });
184
+ }
185
+ const validationResult = v2.safeParse(responseSchema2, data);
186
+ if (!validationResult.success) {
187
+ return error({
188
+ name: "ValidateDataError",
189
+ message: "Failed to validate data.",
190
+ data: validationResult
191
+ });
192
+ }
193
+ return success(validationResult.output);
194
+ }
135
195
 
136
196
  // src/stacks-api/types.ts
137
- var v2 = __toESM(require("valibot"), 1);
138
- var baseListResponseSchema = v2.object({
139
- limit: v2.number(),
140
- offset: v2.number(),
141
- total: v2.number(),
142
- results: v2.array(v2.unknown())
197
+ var v3 = __toESM(require("valibot"), 1);
198
+ var baseListResponseSchema = v3.object({
199
+ limit: v3.number(),
200
+ offset: v3.number(),
201
+ total: v3.number(),
202
+ results: v3.array(v3.unknown())
143
203
  });
144
204
 
145
205
  // src/stacks-api/blocks/get-block.ts
146
- var v3 = __toESM(require("valibot"), 1);
147
- var responseSchema2 = v3.object({
148
- canonical: v3.boolean(),
149
- height: v3.number(),
150
- hash: v3.string(),
151
- block_time: v3.number(),
152
- block_time_iso: v3.string(),
153
- index_block_hash: v3.string(),
154
- parent_block_hash: v3.string(),
155
- parent_index_block_hash: v3.string(),
156
- burn_block_time: v3.number(),
157
- burn_block_time_iso: v3.string(),
158
- burn_block_hash: v3.string(),
159
- burn_block_height: v3.number(),
160
- miner_txid: v3.string(),
161
- tx_count: v3.number(),
162
- execution_cost_read_count: v3.number(),
163
- execution_cost_read_length: v3.number(),
164
- execution_cost_runtime: v3.number(),
165
- execution_cost_write_count: v3.number(),
166
- execution_cost_write_length: v3.number()
206
+ var v4 = __toESM(require("valibot"), 1);
207
+ var responseSchema3 = v4.object({
208
+ canonical: v4.boolean(),
209
+ height: v4.number(),
210
+ hash: v4.string(),
211
+ block_time: v4.number(),
212
+ block_time_iso: v4.string(),
213
+ index_block_hash: v4.string(),
214
+ parent_block_hash: v4.string(),
215
+ parent_index_block_hash: v4.string(),
216
+ burn_block_time: v4.number(),
217
+ burn_block_time_iso: v4.string(),
218
+ burn_block_hash: v4.string(),
219
+ burn_block_height: v4.number(),
220
+ miner_txid: v4.string(),
221
+ tx_count: v4.number(),
222
+ execution_cost_read_count: v4.number(),
223
+ execution_cost_read_length: v4.number(),
224
+ execution_cost_runtime: v4.number(),
225
+ execution_cost_write_count: v4.number(),
226
+ execution_cost_write_length: v4.number()
167
227
  });
168
228
  async function getBlock(opts) {
169
229
  const init = {};
@@ -195,7 +255,7 @@ async function getBlock(opts) {
195
255
  data: jsonError
196
256
  });
197
257
  }
198
- const validationResult = v3.safeParse(responseSchema2, data);
258
+ const validationResult = v4.safeParse(responseSchema3, data);
199
259
  if (!validationResult.success) {
200
260
  return error({
201
261
  name: "ValidateDataError",
@@ -206,27 +266,23 @@ async function getBlock(opts) {
206
266
  return success(validationResult.output);
207
267
  }
208
268
 
209
- // src/stacks-api/blocks/index.ts
210
- var blocks = {
211
- getBlock
212
- };
213
-
214
269
  // src/stacks-api/info/core-api.ts
215
- var v4 = __toESM(require("valibot"), 1);
216
- var CoreApiResponseSchema = v4.object({
217
- peer_version: v4.number(),
218
- pox_consensus: v4.string(),
219
- burn_block_height: v4.number(),
220
- stable_pox_consensus: v4.string(),
221
- stable_burn_block_height: v4.number(),
222
- server_version: v4.string(),
223
- network_id: v4.number(),
224
- parent_network_id: v4.number(),
225
- stacks_tip_height: v4.number(),
226
- stacks_tip: v4.string(),
227
- stacks_tip_consensus_hash: v4.string(),
228
- unanchored_tip: v4.string(),
229
- exit_at_block_height: v4.number()
270
+ var v5 = __toESM(require("valibot"), 1);
271
+ var CoreApiResponseSchema = v5.object({
272
+ peer_version: v5.number(),
273
+ pox_consensus: v5.string(),
274
+ burn_block_height: v5.number(),
275
+ stable_pox_consensus: v5.string(),
276
+ stable_burn_block_height: v5.number(),
277
+ server_version: v5.string(),
278
+ network_id: v5.number(),
279
+ parent_network_id: v5.number(),
280
+ stacks_tip_height: v5.number(),
281
+ stacks_tip: v5.string(),
282
+ stacks_tip_consensus_hash: v5.string(),
283
+ unanchored_tip: v5.nullable(v5.string()),
284
+ unanchored_seq: v5.nullable(v5.string()),
285
+ exit_at_block_height: v5.nullable(v5.number())
230
286
  });
231
287
  async function coreApi(apiOpts) {
232
288
  const init = {};
@@ -255,7 +311,7 @@ async function coreApi(apiOpts) {
255
311
  data: parseBodyError
256
312
  });
257
313
  }
258
- const validationResult = v4.safeParse(CoreApiResponseSchema, data);
314
+ const validationResult = v5.safeParse(CoreApiResponseSchema, data);
259
315
  if (!validationResult.success) {
260
316
  return error({
261
317
  name: "ValidateDataError",
@@ -267,60 +323,60 @@ async function coreApi(apiOpts) {
267
323
  }
268
324
 
269
325
  // src/stacks-api/info/pox-details.ts
270
- var v5 = __toESM(require("valibot"), 1);
271
- var poxDetailsResponseSchema = v5.object({
272
- contract_id: v5.string(),
273
- pox_activation_threshold_ustx: v5.number(),
274
- first_burnchain_block_height: v5.number(),
275
- current_burnchain_block_height: v5.number(),
276
- prepare_phase_block_length: v5.number(),
277
- reward_phase_block_length: v5.number(),
278
- reward_slots: v5.number(),
279
- rejection_fraction: v5.null(),
280
- total_liquid_supply_ustx: v5.number(),
281
- current_cycle: v5.object({
282
- id: v5.number(),
283
- min_threshold_ustx: v5.number(),
284
- stacked_ustx: v5.number(),
285
- is_pox_active: v5.boolean()
326
+ var v6 = __toESM(require("valibot"), 1);
327
+ var poxDetailsResponseSchema = v6.object({
328
+ contract_id: v6.string(),
329
+ pox_activation_threshold_ustx: v6.number(),
330
+ first_burnchain_block_height: v6.number(),
331
+ current_burnchain_block_height: v6.number(),
332
+ prepare_phase_block_length: v6.number(),
333
+ reward_phase_block_length: v6.number(),
334
+ reward_slots: v6.number(),
335
+ rejection_fraction: v6.null(),
336
+ total_liquid_supply_ustx: v6.number(),
337
+ current_cycle: v6.object({
338
+ id: v6.number(),
339
+ min_threshold_ustx: v6.number(),
340
+ stacked_ustx: v6.number(),
341
+ is_pox_active: v6.boolean()
286
342
  }),
287
- next_cycle: v5.object({
288
- id: v5.number(),
289
- min_threshold_ustx: v5.number(),
290
- min_increment_ustx: v5.number(),
291
- stacked_ustx: v5.number(),
292
- prepare_phase_start_block_height: v5.number(),
293
- blocks_until_prepare_phase: v5.number(),
294
- reward_phase_start_block_height: v5.number(),
295
- blocks_until_reward_phase: v5.number(),
296
- ustx_until_pox_rejection: v5.null()
343
+ next_cycle: v6.object({
344
+ id: v6.number(),
345
+ min_threshold_ustx: v6.number(),
346
+ min_increment_ustx: v6.number(),
347
+ stacked_ustx: v6.number(),
348
+ prepare_phase_start_block_height: v6.number(),
349
+ blocks_until_prepare_phase: v6.number(),
350
+ reward_phase_start_block_height: v6.number(),
351
+ blocks_until_reward_phase: v6.number(),
352
+ ustx_until_pox_rejection: v6.null()
297
353
  }),
298
- epochs: v5.array(
299
- v5.object({
300
- epoch_id: v5.string(),
301
- start_height: v5.number(),
302
- end_height: v5.number(),
303
- block_limit: v5.object({
304
- write_length: v5.number(),
305
- write_count: v5.number(),
306
- read_length: v5.number(),
307
- read_count: v5.number(),
308
- runtime: v5.number()
354
+ epochs: v6.array(
355
+ v6.object({
356
+ epoch_id: v6.string(),
357
+ start_height: v6.number(),
358
+ end_height: v6.number(),
359
+ block_limit: v6.object({
360
+ write_length: v6.number(),
361
+ write_count: v6.number(),
362
+ read_length: v6.number(),
363
+ read_count: v6.number(),
364
+ runtime: v6.number()
309
365
  }),
310
- network_epoch: v5.number()
366
+ network_epoch: v6.number()
311
367
  })
312
368
  ),
313
- min_amount_ustx: v5.number(),
314
- prepare_cycle_length: v5.number(),
315
- reward_cycle_id: v5.number(),
316
- reward_cycle_length: v5.number(),
317
- rejection_votes_left_required: v5.null(),
318
- next_reward_cycle_in: v5.number(),
319
- contract_versions: v5.array(
320
- v5.object({
321
- contract_id: v5.string(),
322
- activation_burnchain_block_height: v5.number(),
323
- first_reward_cycle_id: v5.number()
369
+ min_amount_ustx: v6.number(),
370
+ prepare_cycle_length: v6.number(),
371
+ reward_cycle_id: v6.number(),
372
+ reward_cycle_length: v6.number(),
373
+ rejection_votes_left_required: v6.null(),
374
+ next_reward_cycle_in: v6.number(),
375
+ contract_versions: v6.array(
376
+ v6.object({
377
+ contract_id: v6.string(),
378
+ activation_burnchain_block_height: v6.number(),
379
+ first_reward_cycle_id: v6.number()
324
380
  })
325
381
  )
326
382
  });
@@ -351,7 +407,7 @@ async function poxDetails(args) {
351
407
  data: jsonParseError
352
408
  });
353
409
  }
354
- const validationResult = v5.safeParse(poxDetailsResponseSchema, data);
410
+ const validationResult = v6.safeParse(poxDetailsResponseSchema, data);
355
411
  if (!validationResult.success) {
356
412
  return error({
357
413
  name: "ValidateDataError",
@@ -362,21 +418,15 @@ async function poxDetails(args) {
362
418
  return success(validationResult.output);
363
419
  }
364
420
 
365
- // src/stacks-api/info/index.ts
366
- var info = {
367
- coreApi,
368
- poxDetails
369
- };
370
-
371
421
  // src/stacks-api/proof-of-transfer/cycle.ts
372
- var v6 = __toESM(require("valibot"), 1);
373
- var responseSchema3 = v6.object({
374
- block_height: v6.number(),
375
- index_block_hash: v6.string(),
376
- cycle_number: v6.number(),
377
- total_weight: v6.number(),
378
- total_stacked_amount: v6.string(),
379
- total_signers: v6.number()
422
+ var v7 = __toESM(require("valibot"), 1);
423
+ var responseSchema4 = v7.object({
424
+ block_height: v7.number(),
425
+ index_block_hash: v7.string(),
426
+ cycle_number: v7.number(),
427
+ total_weight: v7.number(),
428
+ total_stacked_amount: v7.string(),
429
+ total_signers: v7.number()
380
430
  });
381
431
  async function cycle(opts) {
382
432
  const init = {};
@@ -407,7 +457,7 @@ async function cycle(opts) {
407
457
  data: jsonError
408
458
  });
409
459
  }
410
- const validationResult = v6.safeParse(responseSchema3, data);
460
+ const validationResult = v7.safeParse(responseSchema4, data);
411
461
  if (!validationResult.success) {
412
462
  return error({
413
463
  name: "ValidateDataError",
@@ -419,17 +469,17 @@ async function cycle(opts) {
419
469
  }
420
470
 
421
471
  // src/stacks-api/proof-of-transfer/cycles.ts
422
- var v7 = __toESM(require("valibot"), 1);
423
- var cycleInfoSchema = v7.object({
424
- block_height: v7.number(),
425
- index_block_hash: v7.string(),
426
- cycle_number: v7.number(),
427
- total_weight: v7.number(),
428
- total_stacked_amount: v7.string(),
429
- total_signers: v7.number()
472
+ var v8 = __toESM(require("valibot"), 1);
473
+ var cycleInfoSchema = v8.object({
474
+ block_height: v8.number(),
475
+ index_block_hash: v8.string(),
476
+ cycle_number: v8.number(),
477
+ total_weight: v8.number(),
478
+ total_stacked_amount: v8.string(),
479
+ total_signers: v8.number()
430
480
  });
431
- var resultsSchema = v7.array(cycleInfoSchema);
432
- var cyclesResponseSchema = v7.object({
481
+ var resultsSchema = v8.array(cycleInfoSchema);
482
+ var cyclesResponseSchema = v8.object({
433
483
  ...baseListResponseSchema.entries,
434
484
  results: resultsSchema
435
485
  });
@@ -465,7 +515,7 @@ async function cycles(args) {
465
515
  data: jsonError
466
516
  });
467
517
  }
468
- const validationResult = v7.safeParse(cyclesResponseSchema, data);
518
+ const validationResult = v8.safeParse(cyclesResponseSchema, data);
469
519
  if (!validationResult.success) {
470
520
  return error({
471
521
  name: "ValidateDataError",
@@ -477,16 +527,16 @@ async function cycles(args) {
477
527
  }
478
528
 
479
529
  // src/stacks-api/proof-of-transfer/signer-in-cycle.ts
480
- var v8 = __toESM(require("valibot"), 1);
481
- var signerInCycleResponseSchema = v8.object({
482
- signing_key: v8.string(),
483
- signer_address: v8.string(),
484
- weight: v8.number(),
485
- stacked_amount: v8.string(),
486
- weight_percent: v8.number(),
487
- stacked_amount_percent: v8.number(),
488
- solo_stacker_count: v8.number(),
489
- pooled_stacker_count: v8.number()
530
+ var v9 = __toESM(require("valibot"), 1);
531
+ var signerInCycleResponseSchema = v9.object({
532
+ signing_key: v9.string(),
533
+ signer_address: v9.string(),
534
+ weight: v9.number(),
535
+ stacked_amount: v9.string(),
536
+ weight_percent: v9.number(),
537
+ stacked_amount_percent: v9.number(),
538
+ solo_stacker_count: v9.number(),
539
+ pooled_stacker_count: v9.number()
490
540
  });
491
541
  async function signerInCycle(args) {
492
542
  const init = {};
@@ -522,7 +572,7 @@ async function signerInCycle(args) {
522
572
  }
523
573
  });
524
574
  }
525
- const validationResult = v8.safeParse(signerInCycleResponseSchema, data);
575
+ const validationResult = v9.safeParse(signerInCycleResponseSchema, data);
526
576
  if (!validationResult.success) {
527
577
  return error({
528
578
  name: "ValidateDataError",
@@ -534,19 +584,19 @@ async function signerInCycle(args) {
534
584
  }
535
585
 
536
586
  // src/stacks-api/proof-of-transfer/signers-in-cycle.ts
537
- var v9 = __toESM(require("valibot"), 1);
538
- var signerSchema = v9.object({
539
- signing_key: v9.string(),
540
- signer_address: v9.string(),
541
- weight: v9.number(),
542
- stacked_amount: v9.string(),
543
- weight_percent: v9.number(),
544
- stacked_amount_percent: v9.number(),
545
- pooled_stacker_count: v9.number(),
546
- solo_stacker_count: v9.number()
587
+ var v10 = __toESM(require("valibot"), 1);
588
+ var signerSchema = v10.object({
589
+ signing_key: v10.string(),
590
+ signer_address: v10.string(),
591
+ weight: v10.number(),
592
+ stacked_amount: v10.string(),
593
+ weight_percent: v10.number(),
594
+ stacked_amount_percent: v10.number(),
595
+ pooled_stacker_count: v10.number(),
596
+ solo_stacker_count: v10.number()
547
597
  });
548
- var resultsSchema2 = v9.array(signerSchema);
549
- var signersResponseSchema = v9.object({
598
+ var resultsSchema2 = v10.array(signerSchema);
599
+ var signersResponseSchema = v10.object({
550
600
  ...baseListResponseSchema.entries,
551
601
  results: resultsSchema2
552
602
  });
@@ -585,7 +635,7 @@ async function signersInCycle(args) {
585
635
  }
586
636
  });
587
637
  }
588
- const validationResult = v9.safeParse(signersResponseSchema, data);
638
+ const validationResult = v10.safeParse(signersResponseSchema, data);
589
639
  if (!validationResult.success) {
590
640
  return error({
591
641
  name: "ValidateDataError",
@@ -597,15 +647,15 @@ async function signersInCycle(args) {
597
647
  }
598
648
 
599
649
  // src/stacks-api/proof-of-transfer/stackers-for-signer-in-cycle.ts
600
- var v10 = __toESM(require("valibot"), 1);
601
- var stackerInfoSchema = v10.object({
602
- stacker_address: v10.string(),
603
- stacked_amount: v10.string(),
604
- pox_address: v10.string(),
605
- stacker_type: v10.union([v10.literal("pooled"), v10.literal("solo")])
650
+ var v11 = __toESM(require("valibot"), 1);
651
+ var stackerInfoSchema = v11.object({
652
+ stacker_address: v11.string(),
653
+ stacked_amount: v11.string(),
654
+ pox_address: v11.string(),
655
+ stacker_type: v11.union([v11.literal("pooled"), v11.literal("solo")])
606
656
  });
607
- var resultsSchema3 = v10.array(stackerInfoSchema);
608
- var stackersForSignerInCycleResponseSchema = v10.object({
657
+ var resultsSchema3 = v11.array(stackerInfoSchema);
658
+ var stackersForSignerInCycleResponseSchema = v11.object({
609
659
  ...baseListResponseSchema.entries,
610
660
  results: resultsSchema3
611
661
  });
@@ -619,7 +669,8 @@ async function stackersForSignerInCycle(opts) {
619
669
  [opts.apiKeyConfig.header]: opts.apiKeyConfig.key
620
670
  };
621
671
  }
622
- const endpoint = `${opts.baseUrl}/extended/v2/pox/cycles/${opts.cycleNumber}/signers/${opts.signerPublicKey}/stackers?${search}`;
672
+ const signerPublicKeyPathParam = opts.signerPublicKey.startsWith("0x") ? opts.signerPublicKey : `0x${opts.signerPublicKey}`;
673
+ const endpoint = `${opts.baseUrl}/extended/v2/pox/cycles/${opts.cycleNumber}/signers/${signerPublicKeyPathParam}/stackers?${search}`;
623
674
  const res = await fetch(endpoint, init);
624
675
  if (!res.ok) {
625
676
  return error({
@@ -641,7 +692,7 @@ async function stackersForSignerInCycle(opts) {
641
692
  data: jsonError
642
693
  });
643
694
  }
644
- const validationResult = v10.safeParse(
695
+ const validationResult = v11.safeParse(
645
696
  stackersForSignerInCycleResponseSchema,
646
697
  data
647
698
  );
@@ -655,38 +706,38 @@ async function stackersForSignerInCycle(opts) {
655
706
  return success(validationResult.output);
656
707
  }
657
708
 
658
- // src/stacks-api/proof-of-transfer/index.ts
659
- var proofOfTransfer = {
660
- cycle,
661
- cycles,
662
- signerInCycle,
663
- signersInCycle,
664
- stackersForSignerInCycle
665
- };
666
-
667
709
  // src/stacks-api/smart-contracts/read-only.ts
668
- var v11 = __toESM(require("valibot"), 1);
669
- var readOnlyResponseSchema = v11.variant("okay", [
670
- v11.object({
671
- okay: v11.literal(true),
672
- result: v11.string()
710
+ var v12 = __toESM(require("valibot"), 1);
711
+ var readOnlyResponseSchema = v12.variant("okay", [
712
+ v12.object({
713
+ okay: v12.literal(true),
714
+ /**
715
+ * A Clarity value as a hex-encoded string.
716
+ */
717
+ result: v12.string()
673
718
  }),
674
- v11.object({
675
- okay: v11.literal(false),
676
- cause: v11.unknown()
719
+ v12.object({
720
+ okay: v12.literal(false),
721
+ cause: v12.unknown()
677
722
  })
678
723
  ]);
679
- async function readOnly(opts, apiOpts) {
680
- const init = {};
681
- if (apiOpts.apiKeyConfig) {
682
- init.headers = {
683
- [apiOpts.apiKeyConfig.header]: apiOpts.apiKeyConfig.key
684
- };
724
+ async function readOnly(args) {
725
+ const headers = {
726
+ "Content-Type": "application/json"
727
+ };
728
+ if (args.apiKeyConfig) {
729
+ headers[args.apiKeyConfig.header] = args.apiKeyConfig.key;
685
730
  }
686
- const res = await fetch(
687
- `${apiOpts.baseUrl}/v2/contracts/call-read/${opts.contractAddress}/${opts.contractName}/${opts.functionName}`,
688
- init
689
- );
731
+ const init = {
732
+ method: "POST",
733
+ body: JSON.stringify({
734
+ sender: args.sender,
735
+ arguments: args.arguments
736
+ }),
737
+ headers
738
+ };
739
+ const endpoint = `${args.baseUrl}/v2/contracts/call-read/${args.contractAddress}/${args.contractName}/${args.functionName}`;
740
+ const res = await fetch(endpoint, init);
690
741
  if (!res.ok) {
691
742
  return error({
692
743
  name: "FetchReadOnlyError",
@@ -706,7 +757,7 @@ async function readOnly(opts, apiOpts) {
706
757
  data: error
707
758
  });
708
759
  }
709
- const validationResult = v11.safeParse(readOnlyResponseSchema, data);
760
+ const validationResult = v12.safeParse(readOnlyResponseSchema, data);
710
761
  if (!validationResult.success) {
711
762
  return error({
712
763
  name: "ValidateDataError",
@@ -717,26 +768,21 @@ async function readOnly(opts, apiOpts) {
717
768
  return success(validationResult.output);
718
769
  }
719
770
 
720
- // src/stacks-api/smart-contracts/index.ts
721
- var smartContracts = {
722
- readOnly
723
- };
724
-
725
771
  // src/stacks-api/stacking-pool/members.ts
726
- var v12 = __toESM(require("valibot"), 1);
727
- var memberSchema = v12.object({
728
- stacker: v12.string(),
729
- pox_addr: v12.optional(v12.string()),
730
- amount_ustx: v12.string(),
731
- burn_block_unlock_height: v12.optional(v12.number()),
732
- block_height: v12.number(),
733
- tx_id: v12.string()
772
+ var v13 = __toESM(require("valibot"), 1);
773
+ var memberSchema = v13.object({
774
+ stacker: v13.string(),
775
+ pox_addr: v13.optional(v13.string()),
776
+ amount_ustx: v13.string(),
777
+ burn_block_unlock_height: v13.optional(v13.number()),
778
+ block_height: v13.number(),
779
+ tx_id: v13.string()
734
780
  });
735
- var membersResponseSchema = v12.object({
736
- limit: v12.number(),
737
- offset: v12.number(),
738
- total: v12.number(),
739
- results: v12.array(memberSchema)
781
+ var membersResponseSchema = v13.object({
782
+ limit: v13.number(),
783
+ offset: v13.number(),
784
+ total: v13.number(),
785
+ results: v13.array(memberSchema)
740
786
  });
741
787
  async function members(opts, apiOpts) {
742
788
  const search = new URLSearchParams();
@@ -773,7 +819,7 @@ async function members(opts, apiOpts) {
773
819
  data: jsonParseError
774
820
  });
775
821
  }
776
- const validationResult = v12.safeParse(membersResponseSchema, data);
822
+ const validationResult = v13.safeParse(membersResponseSchema, data);
777
823
  if (!validationResult.success) {
778
824
  return error({
779
825
  name: "ValidateDataError",
@@ -784,122 +830,121 @@ async function members(opts, apiOpts) {
784
830
  return success(validationResult.output);
785
831
  }
786
832
 
787
- // src/stacks-api/stacking-pool/index.ts
788
- var stackingPool = {
789
- members
790
- };
791
-
792
833
  // src/stacks-api/transactions/schemas.ts
793
- var v13 = __toESM(require("valibot"), 1);
794
- var baseTransactionSchema = v13.object({
795
- tx_id: v13.string(),
796
- nonce: v13.number(),
797
- fee_rate: v13.string(),
798
- sender_address: v13.string(),
799
- sponsored: v13.boolean(),
800
- post_condition_mode: v13.string(),
801
- post_conditions: v13.array(v13.unknown()),
802
- anchor_mode: v13.string(),
803
- is_unanchored: v13.boolean(),
804
- block_hash: v13.string(),
805
- parent_block_hash: v13.string(),
806
- block_height: v13.number(),
807
- block_time: v13.number(),
808
- block_time_iso: v13.string(),
809
- burn_block_height: v13.number(),
810
- burn_block_time: v13.number(),
811
- burn_block_time_iso: v13.string(),
812
- parent_burn_block_time: v13.number(),
813
- parent_burn_block_time_iso: v13.string(),
814
- canonical: v13.boolean(),
815
- tx_index: v13.number(),
816
- tx_status: v13.string(),
817
- tx_result: v13.object({
818
- hex: v13.string(),
819
- repr: v13.string()
834
+ var v14 = __toESM(require("valibot"), 1);
835
+ var baseTransactionSchema = v14.object({
836
+ tx_id: v14.string(),
837
+ nonce: v14.number(),
838
+ fee_rate: v14.string(),
839
+ sender_address: v14.string(),
840
+ sponsored: v14.boolean(),
841
+ post_condition_mode: v14.string(),
842
+ post_conditions: v14.array(v14.unknown()),
843
+ anchor_mode: v14.string(),
844
+ is_unanchored: v14.boolean(),
845
+ block_hash: v14.string(),
846
+ parent_block_hash: v14.string(),
847
+ block_height: v14.number(),
848
+ block_time: v14.number(),
849
+ block_time_iso: v14.string(),
850
+ burn_block_height: v14.number(),
851
+ burn_block_time: v14.number(),
852
+ burn_block_time_iso: v14.string(),
853
+ parent_burn_block_time: v14.number(),
854
+ parent_burn_block_time_iso: v14.string(),
855
+ canonical: v14.boolean(),
856
+ tx_index: v14.number(),
857
+ tx_status: v14.union([
858
+ v14.literal("success"),
859
+ v14.literal("abort_by_response"),
860
+ v14.literal("abort_by_post_condition")
861
+ ]),
862
+ tx_result: v14.object({
863
+ hex: v14.string(),
864
+ repr: v14.string()
820
865
  }),
821
- microblock_hash: v13.string(),
822
- microblock_sequence: v13.number(),
823
- microblock_canonical: v13.boolean(),
824
- event_count: v13.number(),
825
- events: v13.array(v13.unknown()),
826
- execution_cost_read_count: v13.number(),
827
- execution_cost_read_length: v13.number(),
828
- execution_cost_runtime: v13.number(),
829
- execution_cost_write_count: v13.number(),
830
- execution_cost_write_length: v13.number()
866
+ microblock_hash: v14.string(),
867
+ microblock_sequence: v14.number(),
868
+ microblock_canonical: v14.boolean(),
869
+ event_count: v14.number(),
870
+ events: v14.array(v14.unknown()),
871
+ execution_cost_read_count: v14.number(),
872
+ execution_cost_read_length: v14.number(),
873
+ execution_cost_runtime: v14.number(),
874
+ execution_cost_write_count: v14.number(),
875
+ execution_cost_write_length: v14.number()
831
876
  });
832
- var contractCallTransactionSchema = v13.object({
833
- tx_type: v13.literal("contract_call"),
834
- contract_call: v13.object({
835
- contract_id: v13.string(),
836
- function_name: v13.string(),
837
- function_signature: v13.string(),
838
- function_args: v13.array(
839
- v13.object({
840
- hex: v13.string(),
841
- repr: v13.string(),
842
- name: v13.string(),
843
- type: v13.string()
877
+ var contractCallTransactionSchema = v14.object({
878
+ tx_type: v14.literal("contract_call"),
879
+ contract_call: v14.object({
880
+ contract_id: v14.string(),
881
+ function_name: v14.string(),
882
+ function_signature: v14.string(),
883
+ function_args: v14.array(
884
+ v14.object({
885
+ hex: v14.string(),
886
+ repr: v14.string(),
887
+ name: v14.string(),
888
+ type: v14.string()
844
889
  })
845
890
  )
846
891
  }),
847
892
  ...baseTransactionSchema.entries
848
893
  });
849
- var smartContractTransactionSchema = v13.object({
850
- tx_type: v13.literal("smart_contract"),
851
- smart_contract: v13.object({
894
+ var smartContractTransactionSchema = v14.object({
895
+ tx_type: v14.literal("smart_contract"),
896
+ smart_contract: v14.object({
852
897
  /**
853
898
  * NOTE: The types may be wrong, not sure what type of value is used when
854
899
  * the version is not `null`.
855
900
  */
856
- clarity_version: v13.union([v13.null(), v13.number()]),
857
- contract_id: v13.string(),
858
- source_code: v13.string()
901
+ clarity_version: v14.union([v14.null(), v14.number()]),
902
+ contract_id: v14.string(),
903
+ source_code: v14.string()
859
904
  }),
860
905
  ...baseTransactionSchema.entries
861
906
  });
862
- var tokenTransferSchema = v13.object({
863
- tx_type: v13.literal("token_transfer"),
864
- token_transfer: v13.object({
865
- recipient_address: v13.string(),
866
- amount: v13.string(),
867
- memo: v13.string()
907
+ var tokenTransferSchema = v14.object({
908
+ tx_type: v14.literal("token_transfer"),
909
+ token_transfer: v14.object({
910
+ recipient_address: v14.string(),
911
+ amount: v14.string(),
912
+ memo: v14.string()
868
913
  }),
869
914
  ...baseTransactionSchema.entries
870
915
  });
871
- var transactionSchema = v13.variant("tx_type", [
916
+ var transactionSchema = v14.variant("tx_type", [
872
917
  contractCallTransactionSchema,
873
918
  smartContractTransactionSchema,
874
919
  tokenTransferSchema
875
920
  ]);
876
921
 
877
922
  // src/stacks-api/transactions/address-transactions.ts
878
- var v14 = __toESM(require("valibot"), 1);
879
- var resultSchema = v14.object({
923
+ var v15 = __toESM(require("valibot"), 1);
924
+ var resultSchema = v15.object({
880
925
  tx: transactionSchema,
881
- stx_sent: v14.string(),
882
- stx_received: v14.string(),
883
- events: v14.object({
884
- stx: v14.object({
885
- transfer: v14.number(),
886
- mint: v14.number(),
887
- burn: v14.number()
926
+ stx_sent: v15.string(),
927
+ stx_received: v15.string(),
928
+ events: v15.object({
929
+ stx: v15.object({
930
+ transfer: v15.number(),
931
+ mint: v15.number(),
932
+ burn: v15.number()
888
933
  }),
889
- ft: v14.object({
890
- transfer: v14.number(),
891
- mint: v14.number(),
892
- burn: v14.number()
934
+ ft: v15.object({
935
+ transfer: v15.number(),
936
+ mint: v15.number(),
937
+ burn: v15.number()
893
938
  }),
894
- nft: v14.object({
895
- transfer: v14.number(),
896
- mint: v14.number(),
897
- burn: v14.number()
939
+ nft: v15.object({
940
+ transfer: v15.number(),
941
+ mint: v15.number(),
942
+ burn: v15.number()
898
943
  })
899
944
  })
900
945
  });
901
- var resultsSchema4 = v14.array(resultSchema);
902
- var addressTransactionsResponseSchema = v14.object({
946
+ var resultsSchema4 = v15.array(resultSchema);
947
+ var addressTransactionsResponseSchema = v15.object({
903
948
  ...baseListResponseSchema.entries,
904
949
  results: resultsSchema4
905
950
  });
@@ -936,7 +981,7 @@ async function addressTransactions(args) {
936
981
  data: jsonParseError
937
982
  });
938
983
  }
939
- const validationResult = v14.safeParse(addressTransactionsResponseSchema, data);
984
+ const validationResult = v15.safeParse(addressTransactionsResponseSchema, data);
940
985
  if (!validationResult.success) {
941
986
  return error({
942
987
  name: "ValidateDataError",
@@ -948,7 +993,7 @@ async function addressTransactions(args) {
948
993
  }
949
994
 
950
995
  // src/stacks-api/transactions/get-transaction.ts
951
- var v15 = __toESM(require("valibot"), 1);
996
+ var v16 = __toESM(require("valibot"), 1);
952
997
  async function getTransaction(args) {
953
998
  const init = {};
954
999
  if (args.apiKeyConfig) {
@@ -977,7 +1022,7 @@ async function getTransaction(args) {
977
1022
  error: jsonParseError
978
1023
  });
979
1024
  }
980
- const validationResult = v15.safeParse(transactionSchema, data);
1025
+ const validationResult = v16.safeParse(transactionSchema, data);
981
1026
  if (!validationResult.success) {
982
1027
  return error({
983
1028
  name: "ValidateDataError",
@@ -988,31 +1033,46 @@ async function getTransaction(args) {
988
1033
  return success(validationResult.output);
989
1034
  }
990
1035
 
991
- // src/stacks-api/transactions/index.ts
992
- var transactions = {
993
- addressTransactions,
994
- getTransaction
995
- };
996
-
997
1036
  // src/stacks-api/index.ts
998
- var stacksApi = {
999
- accounts,
1000
- blocks,
1001
- info,
1002
- proofOfTransfer,
1003
- smartContracts,
1004
- stackingPool,
1005
- transactions
1037
+ var accounts = { balances, latestNonce };
1038
+ var blocks = { getBlock };
1039
+ var info = { coreApi, poxDetails };
1040
+ var proofOfTransfer = {
1041
+ cycle,
1042
+ cycles,
1043
+ signerInCycle,
1044
+ signersInCycle,
1045
+ stackersForSignerInCycle
1006
1046
  };
1047
+ var smartContracts = { readOnly };
1048
+ var stackingPool = { members };
1049
+ var transactions = { addressTransactions, getTransaction };
1007
1050
 
1008
1051
  // src/utils/call-rate-limited-api.ts
1009
1052
  var import_exponential_backoff = require("exponential-backoff");
1053
+ var defaultStartingDelay = 15e3;
1054
+ var defaultNumOfAttempts = 5;
1055
+ function callRateLimitedApi(fn, options) {
1056
+ return (0, import_exponential_backoff.backOff)(fn, {
1057
+ startingDelay: options?.startingDelay ?? defaultStartingDelay,
1058
+ numOfAttempts: options?.numOfAttempts ?? defaultNumOfAttempts
1059
+ });
1060
+ }
1010
1061
  async function safeCallRateLimitedApi(fn, options) {
1011
1062
  try {
1012
- return await (0, import_exponential_backoff.backOff)(() => fn(), {
1013
- startingDelay: options?.startingDelay ?? 15e3,
1014
- numOfAttempts: options?.numOfAttempts ?? 5
1015
- });
1063
+ return await (0, import_exponential_backoff.backOff)(
1064
+ async () => {
1065
+ const [error2, data] = await fn();
1066
+ if (error2) {
1067
+ throw error2;
1068
+ }
1069
+ return success(data);
1070
+ },
1071
+ {
1072
+ startingDelay: options?.startingDelay ?? 15e3,
1073
+ numOfAttempts: options?.numOfAttempts ?? 5
1074
+ }
1075
+ );
1016
1076
  } catch (error2) {
1017
1077
  return error({
1018
1078
  name: "MaxRetriesExceeded",
@@ -1024,67 +1084,23 @@ async function safeCallRateLimitedApi(fn, options) {
1024
1084
  }
1025
1085
  }
1026
1086
 
1027
- // src/queries/get-signer-stacked-amount.ts
1028
- async function getSignerStackedAmount(args) {
1029
- let totalLocked = 0n;
1030
- const { identifier, ...rest } = args;
1031
- let hasMore = true;
1032
- let offset = 0;
1033
- let found = false;
1034
- const limit = 200;
1035
- while (hasMore && !found) {
1036
- const [error2, data] = await safeCallRateLimitedApi(
1037
- () => signersInCycle({
1038
- ...rest,
1039
- limit
1040
- })
1041
- );
1042
- if (error2) {
1043
- return error({
1044
- name: "GetSignerTotalLockedError",
1045
- message: "Failed to get signer total locked.",
1046
- data: {
1047
- error: error2
1048
- }
1049
- });
1050
- }
1051
- for (const signer of data.results) {
1052
- if (identifier.type === "address") {
1053
- if (signer.signer_address === identifier.signerAddress) {
1054
- totalLocked = BigInt(signer.stacked_amount);
1055
- found = true;
1056
- break;
1057
- }
1058
- } else {
1059
- if (signer.signing_key === identifier.signerPublicKey) {
1060
- totalLocked = BigInt(signer.stacked_amount);
1061
- found = true;
1062
- break;
1063
- }
1064
- }
1065
- }
1066
- offset += limit + data.results.length;
1067
- hasMore = offset < data.total;
1068
- }
1069
- if (!found) {
1070
- return error({
1071
- name: "SignerNotFound",
1072
- message: "Signer not found.",
1073
- data: {
1074
- identifier,
1075
- cycle: args.cycleNumber
1076
- }
1077
- });
1078
- }
1079
- return success(totalLocked);
1080
- }
1081
-
1082
- // src/queries/index.ts
1083
- var queries = {
1084
- getSignerStackedAmount
1087
+ // src/index.ts
1088
+ var stacksApi = {
1089
+ accounts,
1090
+ blocks,
1091
+ info,
1092
+ proofOfTransfer,
1093
+ smartContracts,
1094
+ stackingPool,
1095
+ transactions
1085
1096
  };
1086
1097
  // Annotate the CommonJS export names for ESM import in node:
1087
1098
  0 && (module.exports = {
1088
- queries,
1089
- stacksApi
1099
+ callRateLimitedApi,
1100
+ error,
1101
+ safeCall,
1102
+ safeCallRateLimitedApi,
1103
+ safePromise,
1104
+ stacksApi,
1105
+ success
1090
1106
  });