@secretkeylabs/stacks-tools 0.4.0-47d10ad → 0.4.0-56be0c9

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())
154
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
+ }
155
197
 
156
- // src/stacks-api/blocks/get-block.ts
198
+ // src/stacks-api/accounts/index.ts
199
+ var accounts = {
200
+ balances,
201
+ latestNonce
202
+ };
203
+
204
+ // src/stacks-api/types.ts
157
205
  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()
206
+ var baseListResponseSchema = v3.object({
207
+ limit: v3.number(),
208
+ offset: v3.number(),
209
+ total: v3.number(),
210
+ results: v3.array(v3.unknown())
211
+ });
212
+
213
+ // src/stacks-api/blocks/get-block.ts
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
793
  async function readOnly(args) {
671
- const init = { method: "POST" };
794
+ const headers = {
795
+ "Content-Type": "application/json"
796
+ };
672
797
  if (args.apiKeyConfig) {
673
- init.headers = {
674
- [args.apiKeyConfig.header]: args.apiKeyConfig.key
675
- };
798
+ headers[args.apiKeyConfig.header] = args.apiKeyConfig.key;
676
799
  }
677
- const res = await fetch(
678
- `${args.baseUrl}/v2/contracts/call-read/${args.contractAddress}/${args.contractName}/${args.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(args) {
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(args) {
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,121 +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.union([
798
- v13.literal("success"),
799
- v13.literal("abort_by_response"),
800
- v13.literal("abort_by_post_condition")
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")
801
938
  ]),
802
- tx_result: v13.object({
803
- hex: v13.string(),
804
- repr: v13.string()
939
+ tx_result: v14.object({
940
+ hex: v14.string(),
941
+ repr: v14.string()
805
942
  }),
806
- microblock_hash: v13.string(),
807
- microblock_sequence: v13.number(),
808
- microblock_canonical: v13.boolean(),
809
- event_count: v13.number(),
810
- events: v13.array(v13.unknown()),
811
- execution_cost_read_count: v13.number(),
812
- execution_cost_read_length: v13.number(),
813
- execution_cost_runtime: v13.number(),
814
- execution_cost_write_count: v13.number(),
815
- 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()
816
953
  });
817
- var contractCallTransactionSchema = v13.object({
818
- tx_type: v13.literal("contract_call"),
819
- contract_call: v13.object({
820
- contract_id: v13.string(),
821
- function_name: v13.string(),
822
- function_signature: v13.string(),
823
- function_args: v13.array(
824
- v13.object({
825
- hex: v13.string(),
826
- repr: v13.string(),
827
- name: v13.string(),
828
- 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()
829
966
  })
830
967
  )
831
968
  }),
832
969
  ...baseTransactionSchema.entries
833
970
  });
834
- var smartContractTransactionSchema = v13.object({
835
- tx_type: v13.literal("smart_contract"),
836
- smart_contract: v13.object({
971
+ var smartContractTransactionSchema = v14.object({
972
+ tx_type: v14.literal("smart_contract"),
973
+ smart_contract: v14.object({
837
974
  /**
838
975
  * NOTE: The types may be wrong, not sure what type of value is used when
839
976
  * the version is not `null`.
840
977
  */
841
- clarity_version: v13.union([v13.null(), v13.number()]),
842
- contract_id: v13.string(),
843
- source_code: v13.string()
978
+ clarity_version: v14.union([v14.null(), v14.number()]),
979
+ contract_id: v14.string(),
980
+ source_code: v14.string()
844
981
  }),
845
982
  ...baseTransactionSchema.entries
846
983
  });
847
- var tokenTransferSchema = v13.object({
848
- tx_type: v13.literal("token_transfer"),
849
- token_transfer: v13.object({
850
- recipient_address: v13.string(),
851
- amount: v13.string(),
852
- 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()
853
990
  }),
854
991
  ...baseTransactionSchema.entries
855
992
  });
856
- var transactionSchema = v13.variant("tx_type", [
993
+ var transactionSchema = v14.variant("tx_type", [
857
994
  contractCallTransactionSchema,
858
995
  smartContractTransactionSchema,
859
996
  tokenTransferSchema
860
997
  ]);
861
998
 
862
999
  // src/stacks-api/transactions/address-transactions.ts
863
- var v14 = __toESM(require("valibot"), 1);
864
- var resultSchema = v14.object({
1000
+ var v15 = __toESM(require("valibot"), 1);
1001
+ var resultSchema = v15.object({
865
1002
  tx: transactionSchema,
866
- stx_sent: v14.string(),
867
- stx_received: v14.string(),
868
- events: v14.object({
869
- stx: v14.object({
870
- transfer: v14.number(),
871
- mint: v14.number(),
872
- 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()
873
1010
  }),
874
- ft: v14.object({
875
- transfer: v14.number(),
876
- mint: v14.number(),
877
- burn: v14.number()
1011
+ ft: v15.object({
1012
+ transfer: v15.number(),
1013
+ mint: v15.number(),
1014
+ burn: v15.number()
878
1015
  }),
879
- nft: v14.object({
880
- transfer: v14.number(),
881
- mint: v14.number(),
882
- burn: v14.number()
1016
+ nft: v15.object({
1017
+ transfer: v15.number(),
1018
+ mint: v15.number(),
1019
+ burn: v15.number()
883
1020
  })
884
1021
  })
885
1022
  });
886
- var resultsSchema4 = v14.array(resultSchema);
887
- var addressTransactionsResponseSchema = v14.object({
1023
+ var resultsSchema4 = v15.array(resultSchema);
1024
+ var addressTransactionsResponseSchema = v15.object({
888
1025
  ...baseListResponseSchema.entries,
889
1026
  results: resultsSchema4
890
1027
  });
@@ -921,7 +1058,7 @@ async function addressTransactions(args) {
921
1058
  data: jsonParseError
922
1059
  });
923
1060
  }
924
- const validationResult = v14.safeParse(addressTransactionsResponseSchema, data);
1061
+ const validationResult = v15.safeParse(addressTransactionsResponseSchema, data);
925
1062
  if (!validationResult.success) {
926
1063
  return error({
927
1064
  name: "ValidateDataError",
@@ -933,7 +1070,7 @@ async function addressTransactions(args) {
933
1070
  }
934
1071
 
935
1072
  // src/stacks-api/transactions/get-transaction.ts
936
- var v15 = __toESM(require("valibot"), 1);
1073
+ var v16 = __toESM(require("valibot"), 1);
937
1074
  async function getTransaction(args) {
938
1075
  const init = {};
939
1076
  if (args.apiKeyConfig) {
@@ -962,7 +1099,7 @@ async function getTransaction(args) {
962
1099
  error: jsonParseError
963
1100
  });
964
1101
  }
965
- const validationResult = v15.safeParse(transactionSchema, data);
1102
+ const validationResult = v16.safeParse(transactionSchema, data);
966
1103
  if (!validationResult.success) {
967
1104
  return error({
968
1105
  name: "ValidateDataError",
@@ -973,20 +1110,90 @@ async function getTransaction(args) {
973
1110
  return success(validationResult.output);
974
1111
  }
975
1112
 
1113
+ // src/stacks-api/transactions/index.ts
1114
+ var transactions = {
1115
+ addressTransactions,
1116
+ getTransaction
1117
+ };
1118
+
976
1119
  // src/stacks-api/index.ts
977
- var accounts = { balances };
978
- var blocks = { getBlock };
979
- var info = { coreApi, poxDetails };
980
- var proofOfTransfer = {
981
- cycle,
982
- cycles,
983
- signerInCycle,
984
- signersInCycle,
985
- 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 = args.mapKey.startsWith("0x") ? args.mapKey : `0x${args.mapKey}`;
1155
+ const endpoint = `${args.baseUrl}/v2/map_entry/${args.contractAddress}/${args.contractName}/${args.mapName}?${search}`;
1156
+ const res = await fetch(endpoint, init);
1157
+ if (!res.ok) {
1158
+ return error({
1159
+ name: "FetchMapEntryError",
1160
+ message: "Failed to fetch map entry.",
1161
+ data: {
1162
+ status: res.status,
1163
+ statusText: res.statusText,
1164
+ endpoint,
1165
+ bodyParseResult: await safePromise(res.json())
1166
+ }
1167
+ });
1168
+ }
1169
+ const [jsonError, data] = await safePromise(res.json());
1170
+ if (jsonError) {
1171
+ return error({
1172
+ name: "ParseBodyError",
1173
+ message: "Failed to parse response body as JSON.",
1174
+ data: jsonError
1175
+ });
1176
+ }
1177
+ const validationResult = v17.safeParse(mapEntryResponseSchema, data);
1178
+ if (!validationResult.success) {
1179
+ return error({
1180
+ name: "ValidateDataError",
1181
+ message: "Failed to validate response data.",
1182
+ data: validationResult
1183
+ });
1184
+ }
1185
+ return success(validationResult.output);
1186
+ }
1187
+
1188
+ // src/stacks-rpc-api/smart-contracts/index.ts
1189
+ var smartContracts2 = {
1190
+ mapEntry
1191
+ };
1192
+
1193
+ // src/stacks-rpc-api/index.ts
1194
+ var stacksRpcApi = {
1195
+ smartContracts: smartContracts2
986
1196
  };
987
- var smartContracts = { readOnly };
988
- var stackingPool = { members };
989
- var transactions = { addressTransactions, getTransaction };
990
1197
 
991
1198
  // src/utils/call-rate-limited-api.ts
992
1199
  var import_exponential_backoff = require("exponential-backoff");
@@ -1000,10 +1207,19 @@ function callRateLimitedApi(fn, options) {
1000
1207
  }
1001
1208
  async function safeCallRateLimitedApi(fn, options) {
1002
1209
  try {
1003
- return await (0, import_exponential_backoff.backOff)(() => fn(), {
1004
- startingDelay: options?.startingDelay ?? 15e3,
1005
- numOfAttempts: options?.numOfAttempts ?? 5
1006
- });
1210
+ return await (0, import_exponential_backoff.backOff)(
1211
+ async () => {
1212
+ const [error2, data] = await fn();
1213
+ if (error2) {
1214
+ throw error2;
1215
+ }
1216
+ return success(data);
1217
+ },
1218
+ {
1219
+ startingDelay: options?.startingDelay ?? 15e3,
1220
+ numOfAttempts: options?.numOfAttempts ?? 5
1221
+ }
1222
+ );
1007
1223
  } catch (error2) {
1008
1224
  return error({
1009
1225
  name: "MaxRetriesExceeded",
@@ -1015,23 +1231,74 @@ async function safeCallRateLimitedApi(fn, options) {
1015
1231
  }
1016
1232
  }
1017
1233
 
1018
- // src/index.ts
1019
- var stacksApi = {
1020
- accounts,
1021
- blocks,
1022
- info,
1023
- proofOfTransfer,
1024
- smartContracts,
1025
- stackingPool,
1026
- transactions
1234
+ // src/queries/get-signer-stacked-amount.ts
1235
+ async function getSignerStackedAmount(args) {
1236
+ let totalLocked = 0n;
1237
+ const { identifier, ...rest } = args;
1238
+ let hasMore = true;
1239
+ let offset = 0;
1240
+ let found = false;
1241
+ const limit = 200;
1242
+ while (hasMore && !found) {
1243
+ const [error2, data] = await safeCallRateLimitedApi(
1244
+ () => signersInCycle({
1245
+ ...rest,
1246
+ limit
1247
+ })
1248
+ );
1249
+ if (error2) {
1250
+ return error({
1251
+ name: "GetSignerTotalLockedError",
1252
+ message: "Failed to get signer total locked.",
1253
+ data: {
1254
+ error: error2
1255
+ }
1256
+ });
1257
+ }
1258
+ for (const signer of data.results) {
1259
+ if (identifier.type === "address") {
1260
+ if (signer.signer_address === identifier.signerAddress) {
1261
+ totalLocked = BigInt(signer.stacked_amount);
1262
+ found = true;
1263
+ break;
1264
+ }
1265
+ } else {
1266
+ if (signer.signing_key === identifier.signerPublicKey) {
1267
+ totalLocked = BigInt(signer.stacked_amount);
1268
+ found = true;
1269
+ break;
1270
+ }
1271
+ }
1272
+ }
1273
+ offset += data.results.length;
1274
+ hasMore = offset < data.total;
1275
+ }
1276
+ if (!found) {
1277
+ return error({
1278
+ name: "SignerNotFound",
1279
+ message: "Signer not found.",
1280
+ data: {
1281
+ identifier,
1282
+ cycle: args.cycleNumber
1283
+ }
1284
+ });
1285
+ }
1286
+ return success(totalLocked);
1287
+ }
1288
+
1289
+ // src/queries/index.ts
1290
+ var queries = {
1291
+ getSignerStackedAmount
1027
1292
  };
1028
1293
  // Annotate the CommonJS export names for ESM import in node:
1029
1294
  0 && (module.exports = {
1030
1295
  callRateLimitedApi,
1031
1296
  error,
1297
+ queries,
1032
1298
  safeCall,
1033
1299
  safeCallRateLimitedApi,
1034
1300
  safePromise,
1035
1301
  stacksApi,
1302
+ stacksRpcApi,
1036
1303
  success
1037
1304
  });