@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.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/index.ts
95
- var accounts = {
96
- balances
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 v2 from "valibot";
101
- var baseListResponseSchema = v2.object({
102
- limit: v2.number(),
103
- offset: v2.number(),
104
- total: v2.number(),
105
- results: v2.array(v2.unknown())
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 v3 from "valibot";
110
- var responseSchema2 = v3.object({
111
- canonical: v3.boolean(),
112
- height: v3.number(),
113
- hash: v3.string(),
114
- block_time: v3.number(),
115
- block_time_iso: v3.string(),
116
- index_block_hash: v3.string(),
117
- parent_block_hash: v3.string(),
118
- parent_index_block_hash: v3.string(),
119
- burn_block_time: v3.number(),
120
- burn_block_time_iso: v3.string(),
121
- burn_block_hash: v3.string(),
122
- burn_block_height: v3.number(),
123
- miner_txid: v3.string(),
124
- tx_count: v3.number(),
125
- execution_cost_read_count: v3.number(),
126
- execution_cost_read_length: v3.number(),
127
- execution_cost_runtime: v3.number(),
128
- execution_cost_write_count: v3.number(),
129
- execution_cost_write_length: v3.number()
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 = v3.safeParse(responseSchema2, data);
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 v4 from "valibot";
179
- var CoreApiResponseSchema = v4.object({
180
- peer_version: v4.number(),
181
- pox_consensus: v4.string(),
182
- burn_block_height: v4.number(),
183
- stable_pox_consensus: v4.string(),
184
- stable_burn_block_height: v4.number(),
185
- server_version: v4.string(),
186
- network_id: v4.number(),
187
- parent_network_id: v4.number(),
188
- stacks_tip_height: v4.number(),
189
- stacks_tip: v4.string(),
190
- stacks_tip_consensus_hash: v4.string(),
191
- unanchored_tip: v4.string(),
192
- exit_at_block_height: v4.number()
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 = v4.safeParse(CoreApiResponseSchema, data);
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 v5 from "valibot";
234
- var poxDetailsResponseSchema = v5.object({
235
- contract_id: v5.string(),
236
- pox_activation_threshold_ustx: v5.number(),
237
- first_burnchain_block_height: v5.number(),
238
- current_burnchain_block_height: v5.number(),
239
- prepare_phase_block_length: v5.number(),
240
- reward_phase_block_length: v5.number(),
241
- reward_slots: v5.number(),
242
- rejection_fraction: v5.null(),
243
- total_liquid_supply_ustx: v5.number(),
244
- current_cycle: v5.object({
245
- id: v5.number(),
246
- min_threshold_ustx: v5.number(),
247
- stacked_ustx: v5.number(),
248
- is_pox_active: v5.boolean()
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: v5.object({
251
- id: v5.number(),
252
- min_threshold_ustx: v5.number(),
253
- min_increment_ustx: v5.number(),
254
- stacked_ustx: v5.number(),
255
- prepare_phase_start_block_height: v5.number(),
256
- blocks_until_prepare_phase: v5.number(),
257
- reward_phase_start_block_height: v5.number(),
258
- blocks_until_reward_phase: v5.number(),
259
- ustx_until_pox_rejection: v5.null()
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: v5.array(
262
- v5.object({
263
- epoch_id: v5.string(),
264
- start_height: v5.number(),
265
- end_height: v5.number(),
266
- block_limit: v5.object({
267
- write_length: v5.number(),
268
- write_count: v5.number(),
269
- read_length: v5.number(),
270
- read_count: v5.number(),
271
- runtime: v5.number()
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: v5.number()
324
+ network_epoch: v6.number()
274
325
  })
275
326
  ),
276
- min_amount_ustx: v5.number(),
277
- prepare_cycle_length: v5.number(),
278
- reward_cycle_id: v5.number(),
279
- reward_cycle_length: v5.number(),
280
- rejection_votes_left_required: v5.null(),
281
- next_reward_cycle_in: v5.number(),
282
- contract_versions: v5.array(
283
- v5.object({
284
- contract_id: v5.string(),
285
- activation_burnchain_block_height: v5.number(),
286
- first_reward_cycle_id: v5.number()
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 = v5.safeParse(poxDetailsResponseSchema, data);
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 v6 from "valibot";
336
- var responseSchema3 = v6.object({
337
- block_height: v6.number(),
338
- index_block_hash: v6.string(),
339
- cycle_number: v6.number(),
340
- total_weight: v6.number(),
341
- total_stacked_amount: v6.string(),
342
- total_signers: v6.number()
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 = v6.safeParse(responseSchema3, data);
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 v7 from "valibot";
386
- var cycleInfoSchema = v7.object({
387
- block_height: v7.number(),
388
- index_block_hash: v7.string(),
389
- cycle_number: v7.number(),
390
- total_weight: v7.number(),
391
- total_stacked_amount: v7.string(),
392
- total_signers: v7.number()
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 = v7.array(cycleInfoSchema);
395
- var cyclesResponseSchema = v7.object({
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 = v7.safeParse(cyclesResponseSchema, data);
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 v8 from "valibot";
444
- var signerInCycleResponseSchema = v8.object({
445
- signing_key: v8.string(),
446
- signer_address: v8.string(),
447
- weight: v8.number(),
448
- stacked_amount: v8.string(),
449
- weight_percent: v8.number(),
450
- stacked_amount_percent: v8.number(),
451
- solo_stacker_count: v8.number(),
452
- pooled_stacker_count: v8.number()
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 = v8.safeParse(signerInCycleResponseSchema, data);
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 v9 from "valibot";
501
- var signerSchema = v9.object({
502
- signing_key: v9.string(),
503
- signer_address: v9.string(),
504
- weight: v9.number(),
505
- stacked_amount: v9.string(),
506
- weight_percent: v9.number(),
507
- stacked_amount_percent: v9.number(),
508
- pooled_stacker_count: v9.number(),
509
- solo_stacker_count: v9.number()
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 = v9.array(signerSchema);
512
- var signersResponseSchema = v9.object({
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 = v9.safeParse(signersResponseSchema, data);
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 v10 from "valibot";
564
- var stackerInfoSchema = v10.object({
565
- stacker_address: v10.string(),
566
- stacked_amount: v10.string(),
567
- pox_address: v10.string(),
568
- stacker_type: v10.union([v10.literal("pooled"), v10.literal("solo")])
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 = v10.array(stackerInfoSchema);
571
- var stackersForSignerInCycleResponseSchema = v10.object({
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 endpoint = `${opts.baseUrl}/extended/v2/pox/cycles/${opts.cycleNumber}/signers/${opts.signerPublicKey}/stackers?${search}`;
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 = v10.safeParse(
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 v11 from "valibot";
632
- var readOnlyResponseSchema = v11.variant("okay", [
633
- v11.object({
634
- okay: v11.literal(true),
635
- result: v11.string()
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
- v11.object({
638
- okay: v11.literal(false),
639
- cause: v11.unknown()
677
+ v12.object({
678
+ okay: v12.literal(false),
679
+ cause: v12.unknown()
640
680
  })
641
681
  ]);
642
- async function readOnly(opts, apiOpts) {
643
- const init = {};
644
- if (apiOpts.apiKeyConfig) {
645
- init.headers = {
646
- [apiOpts.apiKeyConfig.header]: apiOpts.apiKeyConfig.key
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 res = await fetch(
650
- `${apiOpts.baseUrl}/v2/contracts/call-read/${opts.contractAddress}/${opts.contractName}/${opts.functionName}`,
651
- init
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 = v11.safeParse(readOnlyResponseSchema, data);
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 v12 from "valibot";
690
- var memberSchema = v12.object({
691
- stacker: v12.string(),
692
- pox_addr: v12.optional(v12.string()),
693
- amount_ustx: v12.string(),
694
- burn_block_unlock_height: v12.optional(v12.number()),
695
- block_height: v12.number(),
696
- tx_id: v12.string()
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 = v12.object({
699
- limit: v12.number(),
700
- offset: v12.number(),
701
- total: v12.number(),
702
- results: v12.array(memberSchema)
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 = v12.safeParse(membersResponseSchema, data);
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 v13 from "valibot";
757
- var baseTransactionSchema = v13.object({
758
- tx_id: v13.string(),
759
- nonce: v13.number(),
760
- fee_rate: v13.string(),
761
- sender_address: v13.string(),
762
- sponsored: v13.boolean(),
763
- post_condition_mode: v13.string(),
764
- post_conditions: v13.array(v13.unknown()),
765
- anchor_mode: v13.string(),
766
- is_unanchored: v13.boolean(),
767
- block_hash: v13.string(),
768
- parent_block_hash: v13.string(),
769
- block_height: v13.number(),
770
- block_time: v13.number(),
771
- block_time_iso: v13.string(),
772
- burn_block_height: v13.number(),
773
- burn_block_time: v13.number(),
774
- burn_block_time_iso: v13.string(),
775
- parent_burn_block_time: v13.number(),
776
- parent_burn_block_time_iso: v13.string(),
777
- canonical: v13.boolean(),
778
- tx_index: v13.number(),
779
- tx_status: v13.string(),
780
- tx_result: v13.object({
781
- hex: v13.string(),
782
- repr: v13.string()
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: v13.string(),
785
- microblock_sequence: v13.number(),
786
- microblock_canonical: v13.boolean(),
787
- event_count: v13.number(),
788
- events: v13.array(v13.unknown()),
789
- execution_cost_read_count: v13.number(),
790
- execution_cost_read_length: v13.number(),
791
- execution_cost_runtime: v13.number(),
792
- execution_cost_write_count: v13.number(),
793
- execution_cost_write_length: v13.number()
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 = v13.object({
796
- tx_type: v13.literal("contract_call"),
797
- contract_call: v13.object({
798
- contract_id: v13.string(),
799
- function_name: v13.string(),
800
- function_signature: v13.string(),
801
- function_args: v13.array(
802
- v13.object({
803
- hex: v13.string(),
804
- repr: v13.string(),
805
- name: v13.string(),
806
- type: v13.string()
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 = v13.object({
813
- tx_type: v13.literal("smart_contract"),
814
- smart_contract: v13.object({
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: v13.union([v13.null(), v13.number()]),
820
- contract_id: v13.string(),
821
- source_code: v13.string()
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 = v13.object({
826
- tx_type: v13.literal("token_transfer"),
827
- token_transfer: v13.object({
828
- recipient_address: v13.string(),
829
- amount: v13.string(),
830
- memo: v13.string()
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 = v13.variant("tx_type", [
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 v14 from "valibot";
842
- var resultSchema = v14.object({
881
+ import * as v15 from "valibot";
882
+ var resultSchema = v15.object({
843
883
  tx: transactionSchema,
844
- stx_sent: v14.string(),
845
- stx_received: v14.string(),
846
- events: v14.object({
847
- stx: v14.object({
848
- transfer: v14.number(),
849
- mint: v14.number(),
850
- burn: v14.number()
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: v14.object({
853
- transfer: v14.number(),
854
- mint: v14.number(),
855
- burn: v14.number()
892
+ ft: v15.object({
893
+ transfer: v15.number(),
894
+ mint: v15.number(),
895
+ burn: v15.number()
856
896
  }),
857
- nft: v14.object({
858
- transfer: v14.number(),
859
- mint: v14.number(),
860
- burn: v14.number()
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 = v14.array(resultSchema);
865
- var addressTransactionsResponseSchema = v14.object({
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 = v14.safeParse(addressTransactionsResponseSchema, data);
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 v15 from "valibot";
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 = v15.safeParse(transactionSchema, data);
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 stacksApi = {
962
- accounts,
963
- blocks,
964
- info,
965
- proofOfTransfer,
966
- smartContracts,
967
- stackingPool,
968
- transactions
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(() => fn(), {
976
- startingDelay: options?.startingDelay ?? 15e3,
977
- numOfAttempts: options?.numOfAttempts ?? 5
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/queries/get-signer-stacked-amount.ts
991
- async function getSignerStackedAmount(args) {
992
- let totalLocked = 0n;
993
- const { identifier, ...rest } = args;
994
- let hasMore = true;
995
- let offset = 0;
996
- let found = false;
997
- const limit = 200;
998
- while (hasMore && !found) {
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
- queries,
1051
- stacksApi
1056
+ callRateLimitedApi,
1057
+ error,
1058
+ safeCall,
1059
+ safeCallRateLimitedApi,
1060
+ safePromise,
1061
+ stacksApi,
1062
+ success
1052
1063
  };