@secretkeylabs/stacks-tools 0.4.0-afcaa14 → 0.4.0-da98468

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
@@ -32,10 +32,12 @@ var src_exports = {};
32
32
  __export(src_exports, {
33
33
  callRateLimitedApi: () => callRateLimitedApi,
34
34
  error: () => error,
35
+ queries: () => queries,
35
36
  safeCall: () => safeCall,
36
37
  safeCallRateLimitedApi: () => safeCallRateLimitedApi,
37
38
  safePromise: () => safePromise,
38
39
  stacksApi: () => stacksApi,
40
+ stacksRpcApi: () => stacksRpcApi,
39
41
  success: () => success
40
42
  });
41
43
  module.exports = __toCommonJS(src_exports);
@@ -144,37 +146,92 @@ async function balances(opts) {
144
146
  return success(validationResult.output);
145
147
  }
146
148
 
147
- // src/stacks-api/types.ts
149
+ // src/stacks-api/accounts/latest-nonce.ts
148
150
  var v2 = __toESM(require("valibot"), 1);
149
- var baseListResponseSchema = v2.object({
150
- limit: v2.number(),
151
- offset: v2.number(),
152
- total: v2.number(),
153
- results: v2.array(v2.unknown())
151
+ var responseSchema2 = v2.object({
152
+ last_mempool_tx_nonce: v2.nullable(v2.number()),
153
+ last_executed_tx_nonce: v2.nullable(v2.number()),
154
+ possible_next_nonce: v2.number(),
155
+ detected_missing_nonces: v2.array(v2.number()),
156
+ detected_mempool_nonces: v2.array(v2.number())
157
+ });
158
+ async function latestNonce(opts) {
159
+ const init = {};
160
+ if (opts.apiKeyConfig) {
161
+ init.headers = {
162
+ [opts.apiKeyConfig.header]: opts.apiKeyConfig.key
163
+ };
164
+ }
165
+ const endpoint = `${opts.baseUrl}/extended/v1/address/${opts.principal}/nonces`;
166
+ const res = await fetch(endpoint, init);
167
+ if (!res.ok) {
168
+ return error({
169
+ name: "FetchLatestNonceError",
170
+ message: "Failed to fetch latest nonce.",
171
+ data: {
172
+ endpoint,
173
+ status: res.status,
174
+ statusText: res.statusText,
175
+ bodyParseResult: await safePromise(res.json())
176
+ }
177
+ });
178
+ }
179
+ const [jsonError, data] = await safePromise(res.json());
180
+ if (jsonError) {
181
+ return error({
182
+ name: "ParseBodyError",
183
+ message: "Failed to parse response body as JSON.",
184
+ data: jsonError
185
+ });
186
+ }
187
+ const validationResult = v2.safeParse(responseSchema2, data);
188
+ if (!validationResult.success) {
189
+ return error({
190
+ name: "ValidateDataError",
191
+ message: "Failed to validate data.",
192
+ data: validationResult
193
+ });
194
+ }
195
+ return success(validationResult.output);
196
+ }
197
+
198
+ // src/stacks-api/accounts/index.ts
199
+ var accounts = {
200
+ balances,
201
+ latestNonce
202
+ };
203
+
204
+ // src/stacks-api/types.ts
205
+ var v3 = __toESM(require("valibot"), 1);
206
+ var baseListResponseSchema = v3.object({
207
+ limit: v3.number(),
208
+ offset: v3.number(),
209
+ total: v3.number(),
210
+ results: v3.array(v3.unknown())
154
211
  });
155
212
 
156
213
  // src/stacks-api/blocks/get-block.ts
157
- var v3 = __toESM(require("valibot"), 1);
158
- var responseSchema2 = v3.object({
159
- canonical: v3.boolean(),
160
- height: v3.number(),
161
- hash: v3.string(),
162
- block_time: v3.number(),
163
- block_time_iso: v3.string(),
164
- index_block_hash: v3.string(),
165
- parent_block_hash: v3.string(),
166
- parent_index_block_hash: v3.string(),
167
- burn_block_time: v3.number(),
168
- burn_block_time_iso: v3.string(),
169
- burn_block_hash: v3.string(),
170
- burn_block_height: v3.number(),
171
- miner_txid: v3.string(),
172
- tx_count: v3.number(),
173
- execution_cost_read_count: v3.number(),
174
- execution_cost_read_length: v3.number(),
175
- execution_cost_runtime: v3.number(),
176
- execution_cost_write_count: v3.number(),
177
- execution_cost_write_length: v3.number()
214
+ var v4 = __toESM(require("valibot"), 1);
215
+ var responseSchema3 = v4.object({
216
+ canonical: v4.boolean(),
217
+ height: v4.number(),
218
+ hash: v4.string(),
219
+ block_time: v4.number(),
220
+ block_time_iso: v4.string(),
221
+ index_block_hash: v4.string(),
222
+ parent_block_hash: v4.string(),
223
+ parent_index_block_hash: v4.string(),
224
+ burn_block_time: v4.number(),
225
+ burn_block_time_iso: v4.string(),
226
+ burn_block_hash: v4.string(),
227
+ burn_block_height: v4.number(),
228
+ miner_txid: v4.string(),
229
+ tx_count: v4.number(),
230
+ execution_cost_read_count: v4.number(),
231
+ execution_cost_read_length: v4.number(),
232
+ execution_cost_runtime: v4.number(),
233
+ execution_cost_write_count: v4.number(),
234
+ execution_cost_write_length: v4.number()
178
235
  });
179
236
  async function getBlock(opts) {
180
237
  const init = {};
@@ -206,7 +263,7 @@ async function getBlock(opts) {
206
263
  data: jsonError
207
264
  });
208
265
  }
209
- const validationResult = v3.safeParse(responseSchema2, data);
266
+ const validationResult = v4.safeParse(responseSchema3, data);
210
267
  if (!validationResult.success) {
211
268
  return error({
212
269
  name: "ValidateDataError",
@@ -217,22 +274,69 @@ async function getBlock(opts) {
217
274
  return success(validationResult.output);
218
275
  }
219
276
 
277
+ // src/stacks-api/blocks/index.ts
278
+ var blocks = {
279
+ getBlock
280
+ };
281
+
282
+ // src/stacks-api/faucets/stx.ts
283
+ async function stx(opts) {
284
+ const search = new URLSearchParams();
285
+ search.append("address", opts.address);
286
+ if (opts.stacking) search.append("stacking", "true");
287
+ const init = {};
288
+ if (opts.apiKeyConfig) {
289
+ init.headers = {
290
+ [opts.apiKeyConfig.header]: opts.apiKeyConfig.key
291
+ };
292
+ }
293
+ init.method = "POST";
294
+ const endpoint = `${opts.baseUrl}/extended/v1/faucets/stx?${search}`;
295
+ const res = await fetch(endpoint, init);
296
+ if (!res.ok) {
297
+ return error({
298
+ name: "FetchStxError",
299
+ message: "Failed to fetch STX.",
300
+ data: {
301
+ status: res.status,
302
+ statusText: res.statusText,
303
+ bodyParseResult: await safePromise(res.json())
304
+ }
305
+ });
306
+ }
307
+ const [jsonError, data] = await safePromise(res.json());
308
+ if (jsonError) {
309
+ return error({
310
+ name: "ParseBodyError",
311
+ message: "Failed to parse response body as JSON.",
312
+ data: jsonError
313
+ });
314
+ }
315
+ return success(data);
316
+ }
317
+
318
+ // src/stacks-api/faucets/index.ts
319
+ var faucets = {
320
+ stx
321
+ };
322
+
220
323
  // src/stacks-api/info/core-api.ts
221
- var v4 = __toESM(require("valibot"), 1);
222
- var CoreApiResponseSchema = v4.object({
223
- peer_version: v4.number(),
224
- pox_consensus: v4.string(),
225
- burn_block_height: v4.number(),
226
- stable_pox_consensus: v4.string(),
227
- stable_burn_block_height: v4.number(),
228
- server_version: v4.string(),
229
- network_id: v4.number(),
230
- parent_network_id: v4.number(),
231
- stacks_tip_height: v4.number(),
232
- stacks_tip: v4.string(),
233
- stacks_tip_consensus_hash: v4.string(),
234
- unanchored_tip: v4.string(),
235
- exit_at_block_height: v4.number()
324
+ var v5 = __toESM(require("valibot"), 1);
325
+ var CoreApiResponseSchema = v5.object({
326
+ peer_version: v5.number(),
327
+ pox_consensus: v5.string(),
328
+ burn_block_height: v5.number(),
329
+ stable_pox_consensus: v5.string(),
330
+ stable_burn_block_height: v5.number(),
331
+ server_version: v5.string(),
332
+ network_id: v5.number(),
333
+ parent_network_id: v5.number(),
334
+ stacks_tip_height: v5.number(),
335
+ stacks_tip: v5.string(),
336
+ stacks_tip_consensus_hash: v5.string(),
337
+ unanchored_tip: v5.nullable(v5.string()),
338
+ unanchored_seq: v5.nullable(v5.string()),
339
+ exit_at_block_height: v5.nullable(v5.number())
236
340
  });
237
341
  async function coreApi(apiOpts) {
238
342
  const init = {};
@@ -261,7 +365,7 @@ async function coreApi(apiOpts) {
261
365
  data: parseBodyError
262
366
  });
263
367
  }
264
- const validationResult = v4.safeParse(CoreApiResponseSchema, data);
368
+ const validationResult = v5.safeParse(CoreApiResponseSchema, data);
265
369
  if (!validationResult.success) {
266
370
  return error({
267
371
  name: "ValidateDataError",
@@ -273,60 +377,60 @@ async function coreApi(apiOpts) {
273
377
  }
274
378
 
275
379
  // src/stacks-api/info/pox-details.ts
276
- var v5 = __toESM(require("valibot"), 1);
277
- var poxDetailsResponseSchema = v5.object({
278
- contract_id: v5.string(),
279
- pox_activation_threshold_ustx: v5.number(),
280
- first_burnchain_block_height: v5.number(),
281
- current_burnchain_block_height: v5.number(),
282
- prepare_phase_block_length: v5.number(),
283
- reward_phase_block_length: v5.number(),
284
- reward_slots: v5.number(),
285
- rejection_fraction: v5.null(),
286
- total_liquid_supply_ustx: v5.number(),
287
- current_cycle: v5.object({
288
- id: v5.number(),
289
- min_threshold_ustx: v5.number(),
290
- stacked_ustx: v5.number(),
291
- is_pox_active: v5.boolean()
380
+ var v6 = __toESM(require("valibot"), 1);
381
+ var poxDetailsResponseSchema = v6.object({
382
+ contract_id: v6.string(),
383
+ pox_activation_threshold_ustx: v6.number(),
384
+ first_burnchain_block_height: v6.number(),
385
+ current_burnchain_block_height: v6.number(),
386
+ prepare_phase_block_length: v6.number(),
387
+ reward_phase_block_length: v6.number(),
388
+ reward_slots: v6.number(),
389
+ rejection_fraction: v6.null(),
390
+ total_liquid_supply_ustx: v6.number(),
391
+ current_cycle: v6.object({
392
+ id: v6.number(),
393
+ min_threshold_ustx: v6.number(),
394
+ stacked_ustx: v6.number(),
395
+ is_pox_active: v6.boolean()
292
396
  }),
293
- next_cycle: v5.object({
294
- id: v5.number(),
295
- min_threshold_ustx: v5.number(),
296
- min_increment_ustx: v5.number(),
297
- stacked_ustx: v5.number(),
298
- prepare_phase_start_block_height: v5.number(),
299
- blocks_until_prepare_phase: v5.number(),
300
- reward_phase_start_block_height: v5.number(),
301
- blocks_until_reward_phase: v5.number(),
302
- ustx_until_pox_rejection: v5.null()
397
+ next_cycle: v6.object({
398
+ id: v6.number(),
399
+ min_threshold_ustx: v6.number(),
400
+ min_increment_ustx: v6.number(),
401
+ stacked_ustx: v6.number(),
402
+ prepare_phase_start_block_height: v6.number(),
403
+ blocks_until_prepare_phase: v6.number(),
404
+ reward_phase_start_block_height: v6.number(),
405
+ blocks_until_reward_phase: v6.number(),
406
+ ustx_until_pox_rejection: v6.null()
303
407
  }),
304
- epochs: v5.array(
305
- v5.object({
306
- epoch_id: v5.string(),
307
- start_height: v5.number(),
308
- end_height: v5.number(),
309
- block_limit: v5.object({
310
- write_length: v5.number(),
311
- write_count: v5.number(),
312
- read_length: v5.number(),
313
- read_count: v5.number(),
314
- runtime: v5.number()
408
+ epochs: v6.array(
409
+ v6.object({
410
+ epoch_id: v6.string(),
411
+ start_height: v6.number(),
412
+ end_height: v6.number(),
413
+ block_limit: v6.object({
414
+ write_length: v6.number(),
415
+ write_count: v6.number(),
416
+ read_length: v6.number(),
417
+ read_count: v6.number(),
418
+ runtime: v6.number()
315
419
  }),
316
- network_epoch: v5.number()
420
+ network_epoch: v6.number()
317
421
  })
318
422
  ),
319
- min_amount_ustx: v5.number(),
320
- prepare_cycle_length: v5.number(),
321
- reward_cycle_id: v5.number(),
322
- reward_cycle_length: v5.number(),
323
- rejection_votes_left_required: v5.null(),
324
- next_reward_cycle_in: v5.number(),
325
- contract_versions: v5.array(
326
- v5.object({
327
- contract_id: v5.string(),
328
- activation_burnchain_block_height: v5.number(),
329
- first_reward_cycle_id: v5.number()
423
+ min_amount_ustx: v6.number(),
424
+ prepare_cycle_length: v6.number(),
425
+ reward_cycle_id: v6.number(),
426
+ reward_cycle_length: v6.number(),
427
+ rejection_votes_left_required: v6.null(),
428
+ next_reward_cycle_in: v6.number(),
429
+ contract_versions: v6.array(
430
+ v6.object({
431
+ contract_id: v6.string(),
432
+ activation_burnchain_block_height: v6.number(),
433
+ first_reward_cycle_id: v6.number()
330
434
  })
331
435
  )
332
436
  });
@@ -357,7 +461,7 @@ async function poxDetails(args) {
357
461
  data: jsonParseError
358
462
  });
359
463
  }
360
- const validationResult = v5.safeParse(poxDetailsResponseSchema, data);
464
+ const validationResult = v6.safeParse(poxDetailsResponseSchema, data);
361
465
  if (!validationResult.success) {
362
466
  return error({
363
467
  name: "ValidateDataError",
@@ -368,15 +472,21 @@ async function poxDetails(args) {
368
472
  return success(validationResult.output);
369
473
  }
370
474
 
475
+ // src/stacks-api/info/index.ts
476
+ var info = {
477
+ coreApi,
478
+ poxDetails
479
+ };
480
+
371
481
  // 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()
482
+ var v7 = __toESM(require("valibot"), 1);
483
+ var responseSchema4 = v7.object({
484
+ block_height: v7.number(),
485
+ index_block_hash: v7.string(),
486
+ cycle_number: v7.number(),
487
+ total_weight: v7.number(),
488
+ total_stacked_amount: v7.string(),
489
+ total_signers: v7.number()
380
490
  });
381
491
  async function cycle(opts) {
382
492
  const init = {};
@@ -407,7 +517,7 @@ async function cycle(opts) {
407
517
  data: jsonError
408
518
  });
409
519
  }
410
- const validationResult = v6.safeParse(responseSchema3, data);
520
+ const validationResult = v7.safeParse(responseSchema4, data);
411
521
  if (!validationResult.success) {
412
522
  return error({
413
523
  name: "ValidateDataError",
@@ -419,17 +529,17 @@ async function cycle(opts) {
419
529
  }
420
530
 
421
531
  // 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()
532
+ var v8 = __toESM(require("valibot"), 1);
533
+ var cycleInfoSchema = v8.object({
534
+ block_height: v8.number(),
535
+ index_block_hash: v8.string(),
536
+ cycle_number: v8.number(),
537
+ total_weight: v8.number(),
538
+ total_stacked_amount: v8.string(),
539
+ total_signers: v8.number()
430
540
  });
431
- var resultsSchema = v7.array(cycleInfoSchema);
432
- var cyclesResponseSchema = v7.object({
541
+ var resultsSchema = v8.array(cycleInfoSchema);
542
+ var cyclesResponseSchema = v8.object({
433
543
  ...baseListResponseSchema.entries,
434
544
  results: resultsSchema
435
545
  });
@@ -465,7 +575,7 @@ async function cycles(args) {
465
575
  data: jsonError
466
576
  });
467
577
  }
468
- const validationResult = v7.safeParse(cyclesResponseSchema, data);
578
+ const validationResult = v8.safeParse(cyclesResponseSchema, data);
469
579
  if (!validationResult.success) {
470
580
  return error({
471
581
  name: "ValidateDataError",
@@ -477,16 +587,16 @@ async function cycles(args) {
477
587
  }
478
588
 
479
589
  // 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()
590
+ var v9 = __toESM(require("valibot"), 1);
591
+ var signerInCycleResponseSchema = v9.object({
592
+ signing_key: v9.string(),
593
+ signer_address: v9.string(),
594
+ weight: v9.number(),
595
+ stacked_amount: v9.string(),
596
+ weight_percent: v9.number(),
597
+ stacked_amount_percent: v9.number(),
598
+ solo_stacker_count: v9.number(),
599
+ pooled_stacker_count: v9.number()
490
600
  });
491
601
  async function signerInCycle(args) {
492
602
  const init = {};
@@ -522,7 +632,7 @@ async function signerInCycle(args) {
522
632
  }
523
633
  });
524
634
  }
525
- const validationResult = v8.safeParse(signerInCycleResponseSchema, data);
635
+ const validationResult = v9.safeParse(signerInCycleResponseSchema, data);
526
636
  if (!validationResult.success) {
527
637
  return error({
528
638
  name: "ValidateDataError",
@@ -534,19 +644,19 @@ async function signerInCycle(args) {
534
644
  }
535
645
 
536
646
  // 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()
647
+ var v10 = __toESM(require("valibot"), 1);
648
+ var signerSchema = v10.object({
649
+ signing_key: v10.string(),
650
+ signer_address: v10.string(),
651
+ weight: v10.number(),
652
+ stacked_amount: v10.string(),
653
+ weight_percent: v10.number(),
654
+ stacked_amount_percent: v10.number(),
655
+ pooled_stacker_count: v10.number(),
656
+ solo_stacker_count: v10.number()
547
657
  });
548
- var resultsSchema2 = v9.array(signerSchema);
549
- var signersResponseSchema = v9.object({
658
+ var resultsSchema2 = v10.array(signerSchema);
659
+ var signersResponseSchema = v10.object({
550
660
  ...baseListResponseSchema.entries,
551
661
  results: resultsSchema2
552
662
  });
@@ -585,7 +695,7 @@ async function signersInCycle(args) {
585
695
  }
586
696
  });
587
697
  }
588
- const validationResult = v9.safeParse(signersResponseSchema, data);
698
+ const validationResult = v10.safeParse(signersResponseSchema, data);
589
699
  if (!validationResult.success) {
590
700
  return error({
591
701
  name: "ValidateDataError",
@@ -597,15 +707,15 @@ async function signersInCycle(args) {
597
707
  }
598
708
 
599
709
  // 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")])
710
+ var v11 = __toESM(require("valibot"), 1);
711
+ var stackerInfoSchema = v11.object({
712
+ stacker_address: v11.string(),
713
+ stacked_amount: v11.string(),
714
+ pox_address: v11.string(),
715
+ stacker_type: v11.union([v11.literal("pooled"), v11.literal("solo")])
606
716
  });
607
- var resultsSchema3 = v10.array(stackerInfoSchema);
608
- var stackersForSignerInCycleResponseSchema = v10.object({
717
+ var resultsSchema3 = v11.array(stackerInfoSchema);
718
+ var stackersForSignerInCycleResponseSchema = v11.object({
609
719
  ...baseListResponseSchema.entries,
610
720
  results: resultsSchema3
611
721
  });
@@ -619,7 +729,8 @@ async function stackersForSignerInCycle(opts) {
619
729
  [opts.apiKeyConfig.header]: opts.apiKeyConfig.key
620
730
  };
621
731
  }
622
- const endpoint = `${opts.baseUrl}/extended/v2/pox/cycles/${opts.cycleNumber}/signers/${opts.signerPublicKey}/stackers?${search}`;
732
+ const signerPublicKeyPathParam = opts.signerPublicKey.startsWith("0x") ? opts.signerPublicKey : `0x${opts.signerPublicKey}`;
733
+ const endpoint = `${opts.baseUrl}/extended/v2/pox/cycles/${opts.cycleNumber}/signers/${signerPublicKeyPathParam}/stackers?${search}`;
623
734
  const res = await fetch(endpoint, init);
624
735
  if (!res.ok) {
625
736
  return error({
@@ -641,7 +752,7 @@ async function stackersForSignerInCycle(opts) {
641
752
  data: jsonError
642
753
  });
643
754
  }
644
- const validationResult = v10.safeParse(
755
+ const validationResult = v11.safeParse(
645
756
  stackersForSignerInCycleResponseSchema,
646
757
  data
647
758
  );
@@ -655,29 +766,47 @@ async function stackersForSignerInCycle(opts) {
655
766
  return success(validationResult.output);
656
767
  }
657
768
 
769
+ // src/stacks-api/proof-of-transfer/index.ts
770
+ var proofOfTransfer = {
771
+ cycle,
772
+ cycles,
773
+ signerInCycle,
774
+ signersInCycle,
775
+ stackersForSignerInCycle
776
+ };
777
+
658
778
  // src/stacks-api/smart-contracts/read-only.ts
659
- var v11 = __toESM(require("valibot"), 1);
660
- var readOnlyResponseSchema = v11.variant("okay", [
661
- v11.object({
662
- okay: v11.literal(true),
663
- result: v11.string()
779
+ var v12 = __toESM(require("valibot"), 1);
780
+ var readOnlyResponseSchema = v12.variant("okay", [
781
+ v12.object({
782
+ okay: v12.literal(true),
783
+ /**
784
+ * A Clarity value as a hex-encoded string.
785
+ */
786
+ result: v12.string()
664
787
  }),
665
- v11.object({
666
- okay: v11.literal(false),
667
- cause: v11.unknown()
788
+ v12.object({
789
+ okay: v12.literal(false),
790
+ cause: v12.unknown()
668
791
  })
669
792
  ]);
670
- async function readOnly(opts, apiOpts) {
671
- const init = {};
672
- if (apiOpts.apiKeyConfig) {
673
- init.headers = {
674
- [apiOpts.apiKeyConfig.header]: apiOpts.apiKeyConfig.key
675
- };
793
+ async function readOnly(args) {
794
+ const headers = {
795
+ "Content-Type": "application/json"
796
+ };
797
+ if (args.apiKeyConfig) {
798
+ headers[args.apiKeyConfig.header] = args.apiKeyConfig.key;
676
799
  }
677
- const res = await fetch(
678
- `${apiOpts.baseUrl}/v2/contracts/call-read/${opts.contractAddress}/${opts.contractName}/${opts.functionName}`,
679
- init
680
- );
800
+ const init = {
801
+ method: "POST",
802
+ body: JSON.stringify({
803
+ sender: args.sender,
804
+ arguments: args.arguments
805
+ }),
806
+ headers
807
+ };
808
+ const endpoint = `${args.baseUrl}/v2/contracts/call-read/${args.contractAddress}/${args.contractName}/${args.functionName}`;
809
+ const res = await fetch(endpoint, init);
681
810
  if (!res.ok) {
682
811
  return error({
683
812
  name: "FetchReadOnlyError",
@@ -697,7 +826,7 @@ async function readOnly(opts, apiOpts) {
697
826
  data: error
698
827
  });
699
828
  }
700
- const validationResult = v11.safeParse(readOnlyResponseSchema, data);
829
+ const validationResult = v12.safeParse(readOnlyResponseSchema, data);
701
830
  if (!validationResult.success) {
702
831
  return error({
703
832
  name: "ValidateDataError",
@@ -708,38 +837,41 @@ async function readOnly(opts, apiOpts) {
708
837
  return success(validationResult.output);
709
838
  }
710
839
 
840
+ // src/stacks-api/smart-contracts/index.ts
841
+ var smartContracts = {
842
+ readOnly
843
+ };
844
+
711
845
  // src/stacks-api/stacking-pool/members.ts
712
- var v12 = __toESM(require("valibot"), 1);
713
- var memberSchema = v12.object({
714
- stacker: v12.string(),
715
- pox_addr: v12.optional(v12.string()),
716
- amount_ustx: v12.string(),
717
- burn_block_unlock_height: v12.optional(v12.number()),
718
- block_height: v12.number(),
719
- tx_id: v12.string()
846
+ var v13 = __toESM(require("valibot"), 1);
847
+ var memberSchema = v13.object({
848
+ stacker: v13.string(),
849
+ pox_addr: v13.optional(v13.string()),
850
+ amount_ustx: v13.string(),
851
+ burn_block_unlock_height: v13.optional(v13.number()),
852
+ block_height: v13.number(),
853
+ tx_id: v13.string()
720
854
  });
721
- var membersResponseSchema = v12.object({
722
- limit: v12.number(),
723
- offset: v12.number(),
724
- total: v12.number(),
725
- results: v12.array(memberSchema)
855
+ var membersResponseSchema = v13.object({
856
+ limit: v13.number(),
857
+ offset: v13.number(),
858
+ total: v13.number(),
859
+ results: v13.array(memberSchema)
726
860
  });
727
- async function members(opts, apiOpts) {
861
+ async function members(args) {
728
862
  const search = new URLSearchParams();
729
- if (opts.afterBlock) search.append("after_block", opts.afterBlock.toString());
730
- if (opts.unanchored) search.append("unanchored", "true");
731
- if (opts.limit) search.append("limit", opts.limit.toString());
732
- if (opts.offset) search.append("offset", opts.offset.toString());
863
+ if (args.afterBlock) search.append("after_block", args.afterBlock.toString());
864
+ if (args.unanchored) search.append("unanchored", "true");
865
+ if (args.limit) search.append("limit", args.limit.toString());
866
+ if (args.offset) search.append("offset", args.offset.toString());
733
867
  const init = {};
734
- if (apiOpts.apiKeyConfig) {
868
+ if (args.apiKeyConfig) {
735
869
  init.headers = {
736
- [apiOpts.apiKeyConfig.header]: apiOpts.apiKeyConfig.key
870
+ [args.apiKeyConfig.header]: args.apiKeyConfig.key
737
871
  };
738
872
  }
739
- const res = await fetch(
740
- `${apiOpts.baseUrl}/extended/beta/stacking/${opts.poolPrincipal}/delegations?${search}`,
741
- init
742
- );
873
+ const endpoint = `${args.baseUrl}/extended/v1/pox4/${args.poolPrincipal}/delegations?${search}`;
874
+ const res = await fetch(endpoint, init);
743
875
  if (!res.ok) {
744
876
  return error({
745
877
  name: "FetchMembersError",
@@ -759,7 +891,7 @@ async function members(opts, apiOpts) {
759
891
  data: jsonParseError
760
892
  });
761
893
  }
762
- const validationResult = v12.safeParse(membersResponseSchema, data);
894
+ const validationResult = v13.safeParse(membersResponseSchema, data);
763
895
  if (!validationResult.success) {
764
896
  return error({
765
897
  name: "ValidateDataError",
@@ -770,117 +902,126 @@ async function members(opts, apiOpts) {
770
902
  return success(validationResult.output);
771
903
  }
772
904
 
905
+ // src/stacks-api/stacking-pool/index.ts
906
+ var stackingPool = {
907
+ members
908
+ };
909
+
773
910
  // src/stacks-api/transactions/schemas.ts
774
- var v13 = __toESM(require("valibot"), 1);
775
- var baseTransactionSchema = v13.object({
776
- tx_id: v13.string(),
777
- nonce: v13.number(),
778
- fee_rate: v13.string(),
779
- sender_address: v13.string(),
780
- sponsored: v13.boolean(),
781
- post_condition_mode: v13.string(),
782
- post_conditions: v13.array(v13.unknown()),
783
- anchor_mode: v13.string(),
784
- is_unanchored: v13.boolean(),
785
- block_hash: v13.string(),
786
- parent_block_hash: v13.string(),
787
- block_height: v13.number(),
788
- block_time: v13.number(),
789
- block_time_iso: v13.string(),
790
- burn_block_height: v13.number(),
791
- burn_block_time: v13.number(),
792
- burn_block_time_iso: v13.string(),
793
- parent_burn_block_time: v13.number(),
794
- parent_burn_block_time_iso: v13.string(),
795
- canonical: v13.boolean(),
796
- tx_index: v13.number(),
797
- tx_status: v13.string(),
798
- tx_result: v13.object({
799
- hex: v13.string(),
800
- repr: v13.string()
911
+ var v14 = __toESM(require("valibot"), 1);
912
+ var baseTransactionSchema = v14.object({
913
+ tx_id: v14.string(),
914
+ nonce: v14.number(),
915
+ fee_rate: v14.string(),
916
+ sender_address: v14.string(),
917
+ sponsored: v14.boolean(),
918
+ post_condition_mode: v14.string(),
919
+ post_conditions: v14.array(v14.unknown()),
920
+ anchor_mode: v14.string(),
921
+ is_unanchored: v14.boolean(),
922
+ block_hash: v14.string(),
923
+ parent_block_hash: v14.string(),
924
+ block_height: v14.number(),
925
+ block_time: v14.number(),
926
+ block_time_iso: v14.string(),
927
+ burn_block_height: v14.number(),
928
+ burn_block_time: v14.number(),
929
+ burn_block_time_iso: v14.string(),
930
+ parent_burn_block_time: v14.number(),
931
+ parent_burn_block_time_iso: v14.string(),
932
+ canonical: v14.boolean(),
933
+ tx_index: v14.number(),
934
+ tx_status: v14.union([
935
+ v14.literal("success"),
936
+ v14.literal("abort_by_response"),
937
+ v14.literal("abort_by_post_condition")
938
+ ]),
939
+ tx_result: v14.object({
940
+ hex: v14.string(),
941
+ repr: v14.string()
801
942
  }),
802
- microblock_hash: v13.string(),
803
- microblock_sequence: v13.number(),
804
- microblock_canonical: v13.boolean(),
805
- event_count: v13.number(),
806
- events: v13.array(v13.unknown()),
807
- execution_cost_read_count: v13.number(),
808
- execution_cost_read_length: v13.number(),
809
- execution_cost_runtime: v13.number(),
810
- execution_cost_write_count: v13.number(),
811
- execution_cost_write_length: v13.number()
943
+ microblock_hash: v14.string(),
944
+ microblock_sequence: v14.number(),
945
+ microblock_canonical: v14.boolean(),
946
+ event_count: v14.number(),
947
+ events: v14.array(v14.unknown()),
948
+ execution_cost_read_count: v14.number(),
949
+ execution_cost_read_length: v14.number(),
950
+ execution_cost_runtime: v14.number(),
951
+ execution_cost_write_count: v14.number(),
952
+ execution_cost_write_length: v14.number()
812
953
  });
813
- var contractCallTransactionSchema = v13.object({
814
- tx_type: v13.literal("contract_call"),
815
- contract_call: v13.object({
816
- contract_id: v13.string(),
817
- function_name: v13.string(),
818
- function_signature: v13.string(),
819
- function_args: v13.array(
820
- v13.object({
821
- hex: v13.string(),
822
- repr: v13.string(),
823
- name: v13.string(),
824
- type: v13.string()
954
+ var contractCallTransactionSchema = v14.object({
955
+ tx_type: v14.literal("contract_call"),
956
+ contract_call: v14.object({
957
+ contract_id: v14.string(),
958
+ function_name: v14.string(),
959
+ function_signature: v14.string(),
960
+ function_args: v14.array(
961
+ v14.object({
962
+ hex: v14.string(),
963
+ repr: v14.string(),
964
+ name: v14.string(),
965
+ type: v14.string()
825
966
  })
826
967
  )
827
968
  }),
828
969
  ...baseTransactionSchema.entries
829
970
  });
830
- var smartContractTransactionSchema = v13.object({
831
- tx_type: v13.literal("smart_contract"),
832
- smart_contract: v13.object({
971
+ var smartContractTransactionSchema = v14.object({
972
+ tx_type: v14.literal("smart_contract"),
973
+ smart_contract: v14.object({
833
974
  /**
834
975
  * NOTE: The types may be wrong, not sure what type of value is used when
835
976
  * the version is not `null`.
836
977
  */
837
- clarity_version: v13.union([v13.null(), v13.number()]),
838
- contract_id: v13.string(),
839
- source_code: v13.string()
978
+ clarity_version: v14.union([v14.null(), v14.number()]),
979
+ contract_id: v14.string(),
980
+ source_code: v14.string()
840
981
  }),
841
982
  ...baseTransactionSchema.entries
842
983
  });
843
- var tokenTransferSchema = v13.object({
844
- tx_type: v13.literal("token_transfer"),
845
- token_transfer: v13.object({
846
- recipient_address: v13.string(),
847
- amount: v13.string(),
848
- memo: v13.string()
984
+ var tokenTransferSchema = v14.object({
985
+ tx_type: v14.literal("token_transfer"),
986
+ token_transfer: v14.object({
987
+ recipient_address: v14.string(),
988
+ amount: v14.string(),
989
+ memo: v14.string()
849
990
  }),
850
991
  ...baseTransactionSchema.entries
851
992
  });
852
- var transactionSchema = v13.variant("tx_type", [
993
+ var transactionSchema = v14.variant("tx_type", [
853
994
  contractCallTransactionSchema,
854
995
  smartContractTransactionSchema,
855
996
  tokenTransferSchema
856
997
  ]);
857
998
 
858
999
  // src/stacks-api/transactions/address-transactions.ts
859
- var v14 = __toESM(require("valibot"), 1);
860
- var resultSchema = v14.object({
1000
+ var v15 = __toESM(require("valibot"), 1);
1001
+ var resultSchema = v15.object({
861
1002
  tx: transactionSchema,
862
- stx_sent: v14.string(),
863
- stx_received: v14.string(),
864
- events: v14.object({
865
- stx: v14.object({
866
- transfer: v14.number(),
867
- mint: v14.number(),
868
- burn: v14.number()
1003
+ stx_sent: v15.string(),
1004
+ stx_received: v15.string(),
1005
+ events: v15.object({
1006
+ stx: v15.object({
1007
+ transfer: v15.number(),
1008
+ mint: v15.number(),
1009
+ burn: v15.number()
869
1010
  }),
870
- ft: v14.object({
871
- transfer: v14.number(),
872
- mint: v14.number(),
873
- burn: v14.number()
1011
+ ft: v15.object({
1012
+ transfer: v15.number(),
1013
+ mint: v15.number(),
1014
+ burn: v15.number()
874
1015
  }),
875
- nft: v14.object({
876
- transfer: v14.number(),
877
- mint: v14.number(),
878
- burn: v14.number()
1016
+ nft: v15.object({
1017
+ transfer: v15.number(),
1018
+ mint: v15.number(),
1019
+ burn: v15.number()
879
1020
  })
880
1021
  })
881
1022
  });
882
- var resultsSchema4 = v14.array(resultSchema);
883
- var addressTransactionsResponseSchema = v14.object({
1023
+ var resultsSchema4 = v15.array(resultSchema);
1024
+ var addressTransactionsResponseSchema = v15.object({
884
1025
  ...baseListResponseSchema.entries,
885
1026
  results: resultsSchema4
886
1027
  });
@@ -917,7 +1058,7 @@ async function addressTransactions(args) {
917
1058
  data: jsonParseError
918
1059
  });
919
1060
  }
920
- const validationResult = v14.safeParse(addressTransactionsResponseSchema, data);
1061
+ const validationResult = v15.safeParse(addressTransactionsResponseSchema, data);
921
1062
  if (!validationResult.success) {
922
1063
  return error({
923
1064
  name: "ValidateDataError",
@@ -929,7 +1070,7 @@ async function addressTransactions(args) {
929
1070
  }
930
1071
 
931
1072
  // src/stacks-api/transactions/get-transaction.ts
932
- var v15 = __toESM(require("valibot"), 1);
1073
+ var v16 = __toESM(require("valibot"), 1);
933
1074
  async function getTransaction(args) {
934
1075
  const init = {};
935
1076
  if (args.apiKeyConfig) {
@@ -958,7 +1099,7 @@ async function getTransaction(args) {
958
1099
  error: jsonParseError
959
1100
  });
960
1101
  }
961
- const validationResult = v15.safeParse(transactionSchema, data);
1102
+ const validationResult = v16.safeParse(transactionSchema, data);
962
1103
  if (!validationResult.success) {
963
1104
  return error({
964
1105
  name: "ValidateDataError",
@@ -969,20 +1110,94 @@ async function getTransaction(args) {
969
1110
  return success(validationResult.output);
970
1111
  }
971
1112
 
1113
+ // src/stacks-api/transactions/index.ts
1114
+ var transactions = {
1115
+ addressTransactions,
1116
+ getTransaction
1117
+ };
1118
+
972
1119
  // src/stacks-api/index.ts
973
- var accounts = { balances };
974
- var blocks = { getBlock };
975
- var info = { coreApi, poxDetails };
976
- var proofOfTransfer = {
977
- cycle,
978
- cycles,
979
- signerInCycle,
980
- signersInCycle,
981
- stackersForSignerInCycle
1120
+ var stacksApi = {
1121
+ accounts,
1122
+ blocks,
1123
+ faucets,
1124
+ info,
1125
+ proofOfTransfer,
1126
+ smartContracts,
1127
+ stackingPool,
1128
+ transactions
1129
+ };
1130
+
1131
+ // src/stacks-rpc-api/smart-contracts/map-entry.ts
1132
+ var v17 = __toESM(require("valibot"), 1);
1133
+ var mapEntryResponseSchema = v17.object({
1134
+ /**
1135
+ * Hex-encoded string of clarity value. It is always an optional tuple.
1136
+ */
1137
+ data: v17.string(),
1138
+ /**
1139
+ * Hex-encoded string of the MARF proof for the data
1140
+ */
1141
+ proof: v17.optional(v17.string())
1142
+ });
1143
+ async function mapEntry(args) {
1144
+ const search = new URLSearchParams();
1145
+ if (args.proof === 0) search.append("proof", "0");
1146
+ if (args.tip) search.append("tip", args.tip);
1147
+ const init = {};
1148
+ if (args.apiKeyConfig) {
1149
+ init.headers = {
1150
+ [args.apiKeyConfig.header]: args.apiKeyConfig.key
1151
+ };
1152
+ }
1153
+ init.method = "POST";
1154
+ init.body = JSON.stringify(
1155
+ args.mapKey.startsWith("0x") ? args.mapKey : `0x${args.mapKey}`
1156
+ );
1157
+ init.headers = { ...init.headers, "Content-Type": "application/json" };
1158
+ const endpoint = `${args.baseUrl}/v2/map_entry/${args.contractAddress}/${args.contractName}/${args.mapName}?${search}`;
1159
+ const res = await fetch(endpoint, init);
1160
+ if (!res.ok) {
1161
+ return error({
1162
+ name: "FetchMapEntryError",
1163
+ message: "Failed to fetch map entry.",
1164
+ data: {
1165
+ init,
1166
+ status: res.status,
1167
+ statusText: res.statusText,
1168
+ endpoint,
1169
+ bodyParseResult: await safePromise(res.text())
1170
+ }
1171
+ });
1172
+ }
1173
+ const [jsonError, data] = await safePromise(res.json());
1174
+ if (jsonError) {
1175
+ return error({
1176
+ name: "ParseBodyError",
1177
+ message: "Failed to parse response body as JSON.",
1178
+ data: jsonError
1179
+ });
1180
+ }
1181
+ const validationResult = v17.safeParse(mapEntryResponseSchema, data);
1182
+ if (!validationResult.success) {
1183
+ return error({
1184
+ name: "ValidateDataError",
1185
+ message: "Failed to validate response data.",
1186
+ data: validationResult
1187
+ });
1188
+ }
1189
+ return success(validationResult.output);
1190
+ }
1191
+
1192
+ // src/stacks-rpc-api/smart-contracts/index.ts
1193
+ var smartContracts2 = {
1194
+ mapEntry
1195
+ };
1196
+
1197
+ // src/stacks-rpc-api/index.ts
1198
+ var stacksRpcApi = {
1199
+ smartContracts: smartContracts2
982
1200
  };
983
- var smartContracts = { readOnly };
984
- var stackingPool = { members };
985
- var transactions = { addressTransactions, getTransaction };
986
1201
 
987
1202
  // src/utils/call-rate-limited-api.ts
988
1203
  var import_exponential_backoff = require("exponential-backoff");
@@ -996,10 +1211,19 @@ function callRateLimitedApi(fn, options) {
996
1211
  }
997
1212
  async function safeCallRateLimitedApi(fn, options) {
998
1213
  try {
999
- return await (0, import_exponential_backoff.backOff)(() => fn(), {
1000
- startingDelay: options?.startingDelay ?? 15e3,
1001
- numOfAttempts: options?.numOfAttempts ?? 5
1002
- });
1214
+ return await (0, import_exponential_backoff.backOff)(
1215
+ async () => {
1216
+ const [error2, data] = await fn();
1217
+ if (error2) {
1218
+ throw error2;
1219
+ }
1220
+ return success(data);
1221
+ },
1222
+ {
1223
+ startingDelay: options?.startingDelay ?? 15e3,
1224
+ numOfAttempts: options?.numOfAttempts ?? 5
1225
+ }
1226
+ );
1003
1227
  } catch (error2) {
1004
1228
  return error({
1005
1229
  name: "MaxRetriesExceeded",
@@ -1011,23 +1235,74 @@ async function safeCallRateLimitedApi(fn, options) {
1011
1235
  }
1012
1236
  }
1013
1237
 
1014
- // src/index.ts
1015
- var stacksApi = {
1016
- accounts,
1017
- blocks,
1018
- info,
1019
- proofOfTransfer,
1020
- smartContracts,
1021
- stackingPool,
1022
- transactions
1238
+ // src/queries/get-signer-stacked-amount.ts
1239
+ async function getSignerStackedAmount(args) {
1240
+ let totalLocked = 0n;
1241
+ const { identifier, ...rest } = args;
1242
+ let hasMore = true;
1243
+ let offset = 0;
1244
+ let found = false;
1245
+ const limit = 200;
1246
+ while (hasMore && !found) {
1247
+ const [error2, data] = await safeCallRateLimitedApi(
1248
+ () => signersInCycle({
1249
+ ...rest,
1250
+ limit
1251
+ })
1252
+ );
1253
+ if (error2) {
1254
+ return error({
1255
+ name: "GetSignerTotalLockedError",
1256
+ message: "Failed to get signer total locked.",
1257
+ data: {
1258
+ error: error2
1259
+ }
1260
+ });
1261
+ }
1262
+ for (const signer of data.results) {
1263
+ if (identifier.type === "address") {
1264
+ if (signer.signer_address === identifier.signerAddress) {
1265
+ totalLocked = BigInt(signer.stacked_amount);
1266
+ found = true;
1267
+ break;
1268
+ }
1269
+ } else {
1270
+ if (signer.signing_key === identifier.signerPublicKey) {
1271
+ totalLocked = BigInt(signer.stacked_amount);
1272
+ found = true;
1273
+ break;
1274
+ }
1275
+ }
1276
+ }
1277
+ offset += data.results.length;
1278
+ hasMore = offset < data.total;
1279
+ }
1280
+ if (!found) {
1281
+ return error({
1282
+ name: "SignerNotFound",
1283
+ message: "Signer not found.",
1284
+ data: {
1285
+ identifier,
1286
+ cycle: args.cycleNumber
1287
+ }
1288
+ });
1289
+ }
1290
+ return success(totalLocked);
1291
+ }
1292
+
1293
+ // src/queries/index.ts
1294
+ var queries = {
1295
+ getSignerStackedAmount
1023
1296
  };
1024
1297
  // Annotate the CommonJS export names for ESM import in node:
1025
1298
  0 && (module.exports = {
1026
1299
  callRateLimitedApi,
1027
1300
  error,
1301
+ queries,
1028
1302
  safeCall,
1029
1303
  safeCallRateLimitedApi,
1030
1304
  safePromise,
1031
1305
  stacksApi,
1306
+ stacksRpcApi,
1032
1307
  success
1033
1308
  });