@secretkeylabs/stacks-tools 0.3.0 → 0.4.0-13a5f23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -30,8 +30,15 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
30
30
  // src/index.ts
31
31
  var src_exports = {};
32
32
  __export(src_exports, {
33
+ callRateLimitedApi: () => callRateLimitedApi,
34
+ error: () => error,
33
35
  queries: () => queries,
34
- stacksApi: () => stacksApi
36
+ safeCall: () => safeCall,
37
+ safeCallRateLimitedApi: () => safeCallRateLimitedApi,
38
+ safePromise: () => safePromise,
39
+ stacksApi: () => stacksApi,
40
+ stacksRpcApi: () => stacksRpcApi,
41
+ success: () => success
35
42
  });
36
43
  module.exports = __toCommonJS(src_exports);
37
44
 
@@ -53,6 +60,17 @@ async function safePromise(promise) {
53
60
  });
54
61
  }
55
62
  }
63
+ function safeCall(fn) {
64
+ try {
65
+ return success(fn());
66
+ } catch (e) {
67
+ return error({
68
+ name: "SafeCallError",
69
+ message: "Safe call failed.",
70
+ data: e
71
+ });
72
+ }
73
+ }
56
74
 
57
75
  // src/stacks-api/accounts/balances.ts
58
76
  var v = __toESM(require("valibot"), 1);
@@ -128,42 +146,92 @@ async function balances(opts) {
128
146
  return success(validationResult.output);
129
147
  }
130
148
 
149
+ // src/stacks-api/accounts/latest-nonce.ts
150
+ var v2 = __toESM(require("valibot"), 1);
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
+
131
198
  // src/stacks-api/accounts/index.ts
132
199
  var accounts = {
133
- balances
200
+ balances,
201
+ latestNonce
134
202
  };
135
203
 
136
204
  // src/stacks-api/types.ts
137
- var v2 = __toESM(require("valibot"), 1);
138
- var baseListResponseSchema = v2.object({
139
- limit: v2.number(),
140
- offset: v2.number(),
141
- total: v2.number(),
142
- results: v2.array(v2.unknown())
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())
143
211
  });
144
212
 
145
213
  // src/stacks-api/blocks/get-block.ts
146
- var v3 = __toESM(require("valibot"), 1);
147
- var responseSchema2 = v3.object({
148
- canonical: v3.boolean(),
149
- height: v3.number(),
150
- hash: v3.string(),
151
- block_time: v3.number(),
152
- block_time_iso: v3.string(),
153
- index_block_hash: v3.string(),
154
- parent_block_hash: v3.string(),
155
- parent_index_block_hash: v3.string(),
156
- burn_block_time: v3.number(),
157
- burn_block_time_iso: v3.string(),
158
- burn_block_hash: v3.string(),
159
- burn_block_height: v3.number(),
160
- miner_txid: v3.string(),
161
- tx_count: v3.number(),
162
- execution_cost_read_count: v3.number(),
163
- execution_cost_read_length: v3.number(),
164
- execution_cost_runtime: v3.number(),
165
- execution_cost_write_count: v3.number(),
166
- execution_cost_write_length: v3.number()
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()
167
235
  });
168
236
  async function getBlock(opts) {
169
237
  const init = {};
@@ -195,7 +263,7 @@ async function getBlock(opts) {
195
263
  data: jsonError
196
264
  });
197
265
  }
198
- const validationResult = v3.safeParse(responseSchema2, data);
266
+ const validationResult = v4.safeParse(responseSchema3, data);
199
267
  if (!validationResult.success) {
200
268
  return error({
201
269
  name: "ValidateDataError",
@@ -211,22 +279,64 @@ var blocks = {
211
279
  getBlock
212
280
  };
213
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
+
214
323
  // src/stacks-api/info/core-api.ts
215
- var v4 = __toESM(require("valibot"), 1);
216
- var CoreApiResponseSchema = v4.object({
217
- peer_version: v4.number(),
218
- pox_consensus: v4.string(),
219
- burn_block_height: v4.number(),
220
- stable_pox_consensus: v4.string(),
221
- stable_burn_block_height: v4.number(),
222
- server_version: v4.string(),
223
- network_id: v4.number(),
224
- parent_network_id: v4.number(),
225
- stacks_tip_height: v4.number(),
226
- stacks_tip: v4.string(),
227
- stacks_tip_consensus_hash: v4.string(),
228
- unanchored_tip: v4.string(),
229
- exit_at_block_height: v4.number()
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())
230
340
  });
231
341
  async function coreApi(apiOpts) {
232
342
  const init = {};
@@ -255,7 +365,7 @@ async function coreApi(apiOpts) {
255
365
  data: parseBodyError
256
366
  });
257
367
  }
258
- const validationResult = v4.safeParse(CoreApiResponseSchema, data);
368
+ const validationResult = v5.safeParse(CoreApiResponseSchema, data);
259
369
  if (!validationResult.success) {
260
370
  return error({
261
371
  name: "ValidateDataError",
@@ -267,60 +377,60 @@ async function coreApi(apiOpts) {
267
377
  }
268
378
 
269
379
  // src/stacks-api/info/pox-details.ts
270
- var v5 = __toESM(require("valibot"), 1);
271
- var poxDetailsResponseSchema = v5.object({
272
- contract_id: v5.string(),
273
- pox_activation_threshold_ustx: v5.number(),
274
- first_burnchain_block_height: v5.number(),
275
- current_burnchain_block_height: v5.number(),
276
- prepare_phase_block_length: v5.number(),
277
- reward_phase_block_length: v5.number(),
278
- reward_slots: v5.number(),
279
- rejection_fraction: v5.null(),
280
- total_liquid_supply_ustx: v5.number(),
281
- current_cycle: v5.object({
282
- id: v5.number(),
283
- min_threshold_ustx: v5.number(),
284
- stacked_ustx: v5.number(),
285
- is_pox_active: v5.boolean()
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()
286
396
  }),
287
- next_cycle: v5.object({
288
- id: v5.number(),
289
- min_threshold_ustx: v5.number(),
290
- min_increment_ustx: v5.number(),
291
- stacked_ustx: v5.number(),
292
- prepare_phase_start_block_height: v5.number(),
293
- blocks_until_prepare_phase: v5.number(),
294
- reward_phase_start_block_height: v5.number(),
295
- blocks_until_reward_phase: v5.number(),
296
- ustx_until_pox_rejection: v5.null()
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()
297
407
  }),
298
- epochs: v5.array(
299
- v5.object({
300
- epoch_id: v5.string(),
301
- start_height: v5.number(),
302
- end_height: v5.number(),
303
- block_limit: v5.object({
304
- write_length: v5.number(),
305
- write_count: v5.number(),
306
- read_length: v5.number(),
307
- read_count: v5.number(),
308
- runtime: v5.number()
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()
309
419
  }),
310
- network_epoch: v5.number()
420
+ network_epoch: v6.number()
311
421
  })
312
422
  ),
313
- min_amount_ustx: v5.number(),
314
- prepare_cycle_length: v5.number(),
315
- reward_cycle_id: v5.number(),
316
- reward_cycle_length: v5.number(),
317
- rejection_votes_left_required: v5.null(),
318
- next_reward_cycle_in: v5.number(),
319
- contract_versions: v5.array(
320
- v5.object({
321
- contract_id: v5.string(),
322
- activation_burnchain_block_height: v5.number(),
323
- first_reward_cycle_id: v5.number()
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()
324
434
  })
325
435
  )
326
436
  });
@@ -351,7 +461,7 @@ async function poxDetails(args) {
351
461
  data: jsonParseError
352
462
  });
353
463
  }
354
- const validationResult = v5.safeParse(poxDetailsResponseSchema, data);
464
+ const validationResult = v6.safeParse(poxDetailsResponseSchema, data);
355
465
  if (!validationResult.success) {
356
466
  return error({
357
467
  name: "ValidateDataError",
@@ -369,14 +479,14 @@ var info = {
369
479
  };
370
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
  );
@@ -665,28 +776,37 @@ var proofOfTransfer = {
665
776
  };
666
777
 
667
778
  // src/stacks-api/smart-contracts/read-only.ts
668
- var v11 = __toESM(require("valibot"), 1);
669
- var readOnlyResponseSchema = v11.variant("okay", [
670
- v11.object({
671
- okay: v11.literal(true),
672
- result: v11.string()
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()
673
787
  }),
674
- v11.object({
675
- okay: v11.literal(false),
676
- cause: v11.unknown()
788
+ v12.object({
789
+ okay: v12.literal(false),
790
+ cause: v12.unknown()
677
791
  })
678
792
  ]);
679
- async function readOnly(opts, apiOpts) {
680
- const init = {};
681
- if (apiOpts.apiKeyConfig) {
682
- init.headers = {
683
- [apiOpts.apiKeyConfig.header]: apiOpts.apiKeyConfig.key
684
- };
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;
685
799
  }
686
- const res = await fetch(
687
- `${apiOpts.baseUrl}/v2/contracts/call-read/${opts.contractAddress}/${opts.contractName}/${opts.functionName}`,
688
- init
689
- );
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);
690
810
  if (!res.ok) {
691
811
  return error({
692
812
  name: "FetchReadOnlyError",
@@ -706,7 +826,7 @@ async function readOnly(opts, apiOpts) {
706
826
  data: error
707
827
  });
708
828
  }
709
- const validationResult = v11.safeParse(readOnlyResponseSchema, data);
829
+ const validationResult = v12.safeParse(readOnlyResponseSchema, data);
710
830
  if (!validationResult.success) {
711
831
  return error({
712
832
  name: "ValidateDataError",
@@ -723,37 +843,35 @@ var smartContracts = {
723
843
  };
724
844
 
725
845
  // src/stacks-api/stacking-pool/members.ts
726
- var v12 = __toESM(require("valibot"), 1);
727
- var memberSchema = v12.object({
728
- stacker: v12.string(),
729
- pox_addr: v12.optional(v12.string()),
730
- amount_ustx: v12.string(),
731
- burn_block_unlock_height: v12.optional(v12.number()),
732
- block_height: v12.number(),
733
- tx_id: v12.string()
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()
734
854
  });
735
- var membersResponseSchema = v12.object({
736
- limit: v12.number(),
737
- offset: v12.number(),
738
- total: v12.number(),
739
- 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)
740
860
  });
741
- async function members(opts, apiOpts) {
861
+ async function members(args) {
742
862
  const search = new URLSearchParams();
743
- if (opts.afterBlock) search.append("after_block", opts.afterBlock.toString());
744
- if (opts.unanchored) search.append("unanchored", "true");
745
- if (opts.limit) search.append("limit", opts.limit.toString());
746
- 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());
747
867
  const init = {};
748
- if (apiOpts.apiKeyConfig) {
868
+ if (args.apiKeyConfig) {
749
869
  init.headers = {
750
- [apiOpts.apiKeyConfig.header]: apiOpts.apiKeyConfig.key
870
+ [args.apiKeyConfig.header]: args.apiKeyConfig.key
751
871
  };
752
872
  }
753
- const res = await fetch(
754
- `${apiOpts.baseUrl}/extended/beta/stacking/${opts.poolPrincipal}/delegations?${search}`,
755
- init
756
- );
873
+ const endpoint = `${args.baseUrl}/extended/v1/pox4/${args.poolPrincipal}/delegations?${search}`;
874
+ const res = await fetch(endpoint, init);
757
875
  if (!res.ok) {
758
876
  return error({
759
877
  name: "FetchMembersError",
@@ -773,7 +891,7 @@ async function members(opts, apiOpts) {
773
891
  data: jsonParseError
774
892
  });
775
893
  }
776
- const validationResult = v12.safeParse(membersResponseSchema, data);
894
+ const validationResult = v13.safeParse(membersResponseSchema, data);
777
895
  if (!validationResult.success) {
778
896
  return error({
779
897
  name: "ValidateDataError",
@@ -790,116 +908,120 @@ var stackingPool = {
790
908
  };
791
909
 
792
910
  // src/stacks-api/transactions/schemas.ts
793
- var v13 = __toESM(require("valibot"), 1);
794
- var baseTransactionSchema = v13.object({
795
- tx_id: v13.string(),
796
- nonce: v13.number(),
797
- fee_rate: v13.string(),
798
- sender_address: v13.string(),
799
- sponsored: v13.boolean(),
800
- post_condition_mode: v13.string(),
801
- post_conditions: v13.array(v13.unknown()),
802
- anchor_mode: v13.string(),
803
- is_unanchored: v13.boolean(),
804
- block_hash: v13.string(),
805
- parent_block_hash: v13.string(),
806
- block_height: v13.number(),
807
- block_time: v13.number(),
808
- block_time_iso: v13.string(),
809
- burn_block_height: v13.number(),
810
- burn_block_time: v13.number(),
811
- burn_block_time_iso: v13.string(),
812
- parent_burn_block_time: v13.number(),
813
- parent_burn_block_time_iso: v13.string(),
814
- canonical: v13.boolean(),
815
- tx_index: v13.number(),
816
- tx_status: v13.string(),
817
- tx_result: v13.object({
818
- hex: v13.string(),
819
- repr: v13.string()
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()
820
942
  }),
821
- microblock_hash: v13.string(),
822
- microblock_sequence: v13.number(),
823
- microblock_canonical: v13.boolean(),
824
- event_count: v13.number(),
825
- events: v13.array(v13.unknown()),
826
- execution_cost_read_count: v13.number(),
827
- execution_cost_read_length: v13.number(),
828
- execution_cost_runtime: v13.number(),
829
- execution_cost_write_count: v13.number(),
830
- execution_cost_write_length: v13.number()
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()
831
953
  });
832
- var contractCallTransactionSchema = v13.object({
833
- tx_type: v13.literal("contract_call"),
834
- contract_call: v13.object({
835
- contract_id: v13.string(),
836
- function_name: v13.string(),
837
- function_signature: v13.string(),
838
- function_args: v13.array(
839
- v13.object({
840
- hex: v13.string(),
841
- repr: v13.string(),
842
- name: v13.string(),
843
- type: v13.string()
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()
844
966
  })
845
967
  )
846
968
  }),
847
969
  ...baseTransactionSchema.entries
848
970
  });
849
- var smartContractTransactionSchema = v13.object({
850
- tx_type: v13.literal("smart_contract"),
851
- smart_contract: v13.object({
971
+ var smartContractTransactionSchema = v14.object({
972
+ tx_type: v14.literal("smart_contract"),
973
+ smart_contract: v14.object({
852
974
  /**
853
975
  * NOTE: The types may be wrong, not sure what type of value is used when
854
976
  * the version is not `null`.
855
977
  */
856
- clarity_version: v13.union([v13.null(), v13.number()]),
857
- contract_id: v13.string(),
858
- source_code: v13.string()
978
+ clarity_version: v14.union([v14.null(), v14.number()]),
979
+ contract_id: v14.string(),
980
+ source_code: v14.string()
859
981
  }),
860
982
  ...baseTransactionSchema.entries
861
983
  });
862
- var tokenTransferSchema = v13.object({
863
- tx_type: v13.literal("token_transfer"),
864
- token_transfer: v13.object({
865
- recipient_address: v13.string(),
866
- amount: v13.string(),
867
- memo: v13.string()
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()
868
990
  }),
869
991
  ...baseTransactionSchema.entries
870
992
  });
871
- var transactionSchema = v13.variant("tx_type", [
993
+ var transactionSchema = v14.variant("tx_type", [
872
994
  contractCallTransactionSchema,
873
995
  smartContractTransactionSchema,
874
996
  tokenTransferSchema
875
997
  ]);
876
998
 
877
999
  // src/stacks-api/transactions/address-transactions.ts
878
- var v14 = __toESM(require("valibot"), 1);
879
- var resultSchema = v14.object({
1000
+ var v15 = __toESM(require("valibot"), 1);
1001
+ var resultSchema = v15.object({
880
1002
  tx: transactionSchema,
881
- stx_sent: v14.string(),
882
- stx_received: v14.string(),
883
- events: v14.object({
884
- stx: v14.object({
885
- transfer: v14.number(),
886
- mint: v14.number(),
887
- burn: v14.number()
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()
888
1010
  }),
889
- ft: v14.object({
890
- transfer: v14.number(),
891
- mint: v14.number(),
892
- burn: v14.number()
1011
+ ft: v15.object({
1012
+ transfer: v15.number(),
1013
+ mint: v15.number(),
1014
+ burn: v15.number()
893
1015
  }),
894
- nft: v14.object({
895
- transfer: v14.number(),
896
- mint: v14.number(),
897
- burn: v14.number()
1016
+ nft: v15.object({
1017
+ transfer: v15.number(),
1018
+ mint: v15.number(),
1019
+ burn: v15.number()
898
1020
  })
899
1021
  })
900
1022
  });
901
- var resultsSchema4 = v14.array(resultSchema);
902
- var addressTransactionsResponseSchema = v14.object({
1023
+ var resultsSchema4 = v15.array(resultSchema);
1024
+ var addressTransactionsResponseSchema = v15.object({
903
1025
  ...baseListResponseSchema.entries,
904
1026
  results: resultsSchema4
905
1027
  });
@@ -936,7 +1058,7 @@ async function addressTransactions(args) {
936
1058
  data: jsonParseError
937
1059
  });
938
1060
  }
939
- const validationResult = v14.safeParse(addressTransactionsResponseSchema, data);
1061
+ const validationResult = v15.safeParse(addressTransactionsResponseSchema, data);
940
1062
  if (!validationResult.success) {
941
1063
  return error({
942
1064
  name: "ValidateDataError",
@@ -948,7 +1070,7 @@ async function addressTransactions(args) {
948
1070
  }
949
1071
 
950
1072
  // src/stacks-api/transactions/get-transaction.ts
951
- var v15 = __toESM(require("valibot"), 1);
1073
+ var v16 = __toESM(require("valibot"), 1);
952
1074
  async function getTransaction(args) {
953
1075
  const init = {};
954
1076
  if (args.apiKeyConfig) {
@@ -977,7 +1099,7 @@ async function getTransaction(args) {
977
1099
  error: jsonParseError
978
1100
  });
979
1101
  }
980
- const validationResult = v15.safeParse(transactionSchema, data);
1102
+ const validationResult = v16.safeParse(transactionSchema, data);
981
1103
  if (!validationResult.success) {
982
1104
  return error({
983
1105
  name: "ValidateDataError",
@@ -998,6 +1120,7 @@ var transactions = {
998
1120
  var stacksApi = {
999
1121
  accounts,
1000
1122
  blocks,
1123
+ faucets,
1001
1124
  info,
1002
1125
  proofOfTransfer,
1003
1126
  smartContracts,
@@ -1005,14 +1128,97 @@ var stacksApi = {
1005
1128
  transactions
1006
1129
  };
1007
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;
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
+ bodyParseResult: await safePromise(res.json())
1165
+ }
1166
+ });
1167
+ }
1168
+ const [jsonError, data] = await safePromise(res.json());
1169
+ if (jsonError) {
1170
+ return error({
1171
+ name: "ParseBodyError",
1172
+ message: "Failed to parse response body as JSON.",
1173
+ data: jsonError
1174
+ });
1175
+ }
1176
+ const validationResult = v17.safeParse(mapEntryResponseSchema, data);
1177
+ if (!validationResult.success) {
1178
+ return error({
1179
+ name: "ValidateDataError",
1180
+ message: "Failed to validate response data.",
1181
+ data: validationResult
1182
+ });
1183
+ }
1184
+ return success(validationResult.output);
1185
+ }
1186
+
1187
+ // src/stacks-rpc-api/smart-contracts/index.ts
1188
+ var smartContracts2 = {
1189
+ mapEntry
1190
+ };
1191
+
1192
+ // src/stacks-rpc-api/index.ts
1193
+ var stacksRpcApi = {
1194
+ smartContracts: smartContracts2
1195
+ };
1196
+
1008
1197
  // src/utils/call-rate-limited-api.ts
1009
1198
  var import_exponential_backoff = require("exponential-backoff");
1199
+ var defaultStartingDelay = 15e3;
1200
+ var defaultNumOfAttempts = 5;
1201
+ function callRateLimitedApi(fn, options) {
1202
+ return (0, import_exponential_backoff.backOff)(fn, {
1203
+ startingDelay: options?.startingDelay ?? defaultStartingDelay,
1204
+ numOfAttempts: options?.numOfAttempts ?? defaultNumOfAttempts
1205
+ });
1206
+ }
1010
1207
  async function safeCallRateLimitedApi(fn, options) {
1011
1208
  try {
1012
- return await (0, import_exponential_backoff.backOff)(() => fn(), {
1013
- startingDelay: options?.startingDelay ?? 15e3,
1014
- numOfAttempts: options?.numOfAttempts ?? 5
1015
- });
1209
+ return await (0, import_exponential_backoff.backOff)(
1210
+ async () => {
1211
+ const [error2, data] = await fn();
1212
+ if (error2) {
1213
+ throw error2;
1214
+ }
1215
+ return success(data);
1216
+ },
1217
+ {
1218
+ startingDelay: options?.startingDelay ?? 15e3,
1219
+ numOfAttempts: options?.numOfAttempts ?? 5
1220
+ }
1221
+ );
1016
1222
  } catch (error2) {
1017
1223
  return error({
1018
1224
  name: "MaxRetriesExceeded",
@@ -1063,7 +1269,7 @@ async function getSignerStackedAmount(args) {
1063
1269
  }
1064
1270
  }
1065
1271
  }
1066
- offset += limit + data.results.length;
1272
+ offset += data.results.length;
1067
1273
  hasMore = offset < data.total;
1068
1274
  }
1069
1275
  if (!found) {
@@ -1085,6 +1291,13 @@ var queries = {
1085
1291
  };
1086
1292
  // Annotate the CommonJS export names for ESM import in node:
1087
1293
  0 && (module.exports = {
1294
+ callRateLimitedApi,
1295
+ error,
1088
1296
  queries,
1089
- stacksApi
1297
+ safeCall,
1298
+ safeCallRateLimitedApi,
1299
+ safePromise,
1300
+ stacksApi,
1301
+ stacksRpcApi,
1302
+ success
1090
1303
  });