@secretkeylabs/stacks-tools 0.3.0-6f23618 → 0.3.0-9a0fdf3

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.
Files changed (102) hide show
  1. package/dist/index.cjs +1199 -0
  2. package/dist/index.d.cts +721 -0
  3. package/dist/index.d.ts +721 -2
  4. package/dist/index.js +1160 -3
  5. package/package.json +13 -5
  6. package/dist/index.js.map +0 -1
  7. package/dist/pox4-api/burn-height-to-reward-cycle.d.ts +0 -7
  8. package/dist/pox4-api/burn-height-to-reward-cycle.js +0 -6
  9. package/dist/pox4-api/burn-height-to-reward-cycle.js.map +0 -1
  10. package/dist/pox4-api/current-pox-reward-cycle.d.ts +0 -1
  11. package/dist/pox4-api/current-pox-reward-cycle.js +0 -3
  12. package/dist/pox4-api/current-pox-reward-cycle.js.map +0 -1
  13. package/dist/pox4-api/get-stacker-info.d.ts +0 -1
  14. package/dist/pox4-api/get-stacker-info.js +0 -3
  15. package/dist/pox4-api/get-stacker-info.js.map +0 -1
  16. package/dist/pox4-api/reward-cycle-to-burn-height.d.ts +0 -1
  17. package/dist/pox4-api/reward-cycle-to-burn-height.js +0 -3
  18. package/dist/pox4-api/reward-cycle-to-burn-height.js.map +0 -1
  19. package/dist/queries/get-signer-stacked-amount.d.ts +0 -18
  20. package/dist/queries/get-signer-stacked-amount.js +0 -59
  21. package/dist/queries/get-signer-stacked-amount.js.map +0 -1
  22. package/dist/queries/get-signer-total-locked.d.ts +0 -18
  23. package/dist/queries/get-signer-total-locked.js +0 -59
  24. package/dist/queries/get-signer-total-locked.js.map +0 -1
  25. package/dist/queries/index.d.ts +0 -4
  26. package/dist/queries/index.js +0 -5
  27. package/dist/queries/index.js.map +0 -1
  28. package/dist/stacks-api/accounts/balances.d.ts +0 -34
  29. package/dist/stacks-api/accounts/balances.js +0 -70
  30. package/dist/stacks-api/accounts/balances.js.map +0 -1
  31. package/dist/stacks-api/accounts/index.d.ts +0 -4
  32. package/dist/stacks-api/accounts/index.js +0 -5
  33. package/dist/stacks-api/accounts/index.js.map +0 -1
  34. package/dist/stacks-api/blocks/get-block.d.ts +0 -29
  35. package/dist/stacks-api/blocks/get-block.js +0 -62
  36. package/dist/stacks-api/blocks/get-block.js.map +0 -1
  37. package/dist/stacks-api/blocks/index.d.ts +0 -4
  38. package/dist/stacks-api/blocks/index.js +0 -5
  39. package/dist/stacks-api/blocks/index.js.map +0 -1
  40. package/dist/stacks-api/index.d.ts +0 -29
  41. package/dist/stacks-api/index.js +0 -17
  42. package/dist/stacks-api/index.js.map +0 -1
  43. package/dist/stacks-api/info/core-api.d.ts +0 -21
  44. package/dist/stacks-api/info/core-api.js +0 -55
  45. package/dist/stacks-api/info/core-api.js.map +0 -1
  46. package/dist/stacks-api/info/index.d.ts +0 -6
  47. package/dist/stacks-api/info/index.js +0 -7
  48. package/dist/stacks-api/info/index.js.map +0 -1
  49. package/dist/stacks-api/info/pox-details.d.ts +0 -59
  50. package/dist/stacks-api/info/pox-details.js +0 -92
  51. package/dist/stacks-api/info/pox-details.js.map +0 -1
  52. package/dist/stacks-api/proof-of-transfer/cycle.d.ts +0 -16
  53. package/dist/stacks-api/proof-of-transfer/cycle.js +0 -50
  54. package/dist/stacks-api/proof-of-transfer/cycle.js.map +0 -1
  55. package/dist/stacks-api/proof-of-transfer/cycles.d.ts +0 -37
  56. package/dist/stacks-api/proof-of-transfer/cycles.js +0 -61
  57. package/dist/stacks-api/proof-of-transfer/cycles.js.map +0 -1
  58. package/dist/stacks-api/proof-of-transfer/index.d.ts +0 -12
  59. package/dist/stacks-api/proof-of-transfer/index.js +0 -13
  60. package/dist/stacks-api/proof-of-transfer/index.js.map +0 -1
  61. package/dist/stacks-api/proof-of-transfer/signer-in-cycle.d.ts +0 -22
  62. package/dist/stacks-api/proof-of-transfer/signer-in-cycle.js +0 -57
  63. package/dist/stacks-api/proof-of-transfer/signer-in-cycle.js.map +0 -1
  64. package/dist/stacks-api/proof-of-transfer/signers-in-cycle.d.ts +0 -45
  65. package/dist/stacks-api/proof-of-transfer/signers-in-cycle.js +0 -66
  66. package/dist/stacks-api/proof-of-transfer/signers-in-cycle.js.map +0 -1
  67. package/dist/stacks-api/proof-of-transfer/stackers-for-signer-in-cycle.d.ts +0 -34
  68. package/dist/stacks-api/proof-of-transfer/stackers-for-signer-in-cycle.js +0 -59
  69. package/dist/stacks-api/proof-of-transfer/stackers-for-signer-in-cycle.js.map +0 -1
  70. package/dist/stacks-api/smart-contracts/index.d.ts +0 -4
  71. package/dist/stacks-api/smart-contracts/index.js +0 -5
  72. package/dist/stacks-api/smart-contracts/index.js.map +0 -1
  73. package/dist/stacks-api/smart-contracts/read-only.d.ts +0 -19
  74. package/dist/stacks-api/smart-contracts/read-only.js +0 -50
  75. package/dist/stacks-api/smart-contracts/read-only.js.map +0 -1
  76. package/dist/stacks-api/stacking-pool/index.d.ts +0 -4
  77. package/dist/stacks-api/stacking-pool/index.js +0 -5
  78. package/dist/stacks-api/stacking-pool/index.js.map +0 -1
  79. package/dist/stacks-api/stacking-pool/members.d.ts +0 -34
  80. package/dist/stacks-api/stacking-pool/members.js +0 -64
  81. package/dist/stacks-api/stacking-pool/members.js.map +0 -1
  82. package/dist/stacks-api/transactions/address-transactions.d.ts +0 -487
  83. package/dist/stacks-api/transactions/address-transactions.js +0 -75
  84. package/dist/stacks-api/transactions/address-transactions.js.map +0 -1
  85. package/dist/stacks-api/transactions/get-transaction.d.ts +0 -8
  86. package/dist/stacks-api/transactions/get-transaction.js +0 -42
  87. package/dist/stacks-api/transactions/get-transaction.js.map +0 -1
  88. package/dist/stacks-api/transactions/index.d.ts +0 -6
  89. package/dist/stacks-api/transactions/index.js +0 -7
  90. package/dist/stacks-api/transactions/index.js.map +0 -1
  91. package/dist/stacks-api/transactions/schemas.d.ts +0 -327
  92. package/dist/stacks-api/transactions/schemas.js +0 -85
  93. package/dist/stacks-api/transactions/schemas.js.map +0 -1
  94. package/dist/stacks-api/types.d.ts +0 -26
  95. package/dist/stacks-api/types.js +0 -8
  96. package/dist/stacks-api/types.js.map +0 -1
  97. package/dist/utils/call-rate-limited-api.d.ts +0 -8
  98. package/dist/utils/call-rate-limited-api.js +0 -28
  99. package/dist/utils/call-rate-limited-api.js.map +0 -1
  100. package/dist/utils/safe.d.ts +0 -10
  101. package/dist/utils/safe.js +0 -31
  102. package/dist/utils/safe.js.map +0 -1
package/dist/index.cjs ADDED
@@ -0,0 +1,1199 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/index.ts
31
+ var src_exports = {};
32
+ __export(src_exports, {
33
+ queries: () => queries,
34
+ stacksApi: () => stacksApi,
35
+ stacksRpcApi: () => stacksRpcApi
36
+ });
37
+ module.exports = __toCommonJS(src_exports);
38
+
39
+ // src/utils/safe.ts
40
+ function success(data) {
41
+ return [null, data];
42
+ }
43
+ function error(error2) {
44
+ return [error2, null];
45
+ }
46
+ async function safePromise(promise) {
47
+ try {
48
+ return success(await promise);
49
+ } catch (e) {
50
+ return error({
51
+ name: "SafePromiseError",
52
+ message: "Safe promise rejected.",
53
+ data: e
54
+ });
55
+ }
56
+ }
57
+
58
+ // src/stacks-api/accounts/balances.ts
59
+ var v = __toESM(require("valibot"), 1);
60
+ var responseSchema = v.object({
61
+ stx: v.object({
62
+ balance: v.string(),
63
+ total_sent: v.string(),
64
+ total_received: v.string(),
65
+ total_fees_sent: v.string(),
66
+ total_miner_rewards_received: v.string(),
67
+ lock_tx_id: v.string(),
68
+ locked: v.string(),
69
+ lock_height: v.number(),
70
+ burnchain_lock_height: v.number(),
71
+ burnchain_unlock_height: v.number()
72
+ }),
73
+ fungible_tokens: v.record(
74
+ v.string(),
75
+ v.object({
76
+ balance: v.string(),
77
+ total_sent: v.string(),
78
+ total_received: v.string()
79
+ })
80
+ ),
81
+ non_fungible_tokens: v.record(
82
+ v.string(),
83
+ v.object({
84
+ count: v.string(),
85
+ total_sent: v.string(),
86
+ total_received: v.string()
87
+ })
88
+ )
89
+ });
90
+ async function balances(opts) {
91
+ const search = new URLSearchParams();
92
+ if (opts.unanchored) search.append("unanchored", "true");
93
+ if (opts.untilBlock) search.append("until_block", opts.untilBlock.toString());
94
+ const init = {};
95
+ if (opts.apiKeyConfig) {
96
+ init.headers = {
97
+ [opts.apiKeyConfig.header]: opts.apiKeyConfig.key
98
+ };
99
+ }
100
+ const endpoint = `${opts.baseUrl}/extended/v1/address/${opts.principal}/balances?${search}`;
101
+ const res = await fetch(endpoint, init);
102
+ if (!res.ok) {
103
+ return error({
104
+ name: "FetchBalancesError",
105
+ message: "Failed to fetch balances.",
106
+ data: {
107
+ status: res.status,
108
+ statusText: res.statusText,
109
+ bodyParseResult: await safePromise(res.json())
110
+ }
111
+ });
112
+ }
113
+ const [jsonError, data] = await safePromise(res.json());
114
+ if (jsonError) {
115
+ return error({
116
+ name: "ParseBodyError",
117
+ message: "Failed to parse response body as JSON.",
118
+ data: jsonError
119
+ });
120
+ }
121
+ const validationResult = v.safeParse(responseSchema, data);
122
+ if (!validationResult.success) {
123
+ return error({
124
+ name: "ValidateDataError",
125
+ message: "Failed to validate data.",
126
+ data: validationResult
127
+ });
128
+ }
129
+ return success(validationResult.output);
130
+ }
131
+
132
+ // src/stacks-api/accounts/index.ts
133
+ var accounts = {
134
+ balances
135
+ };
136
+
137
+ // src/stacks-api/types.ts
138
+ var v2 = __toESM(require("valibot"), 1);
139
+ var baseListResponseSchema = v2.object({
140
+ limit: v2.number(),
141
+ offset: v2.number(),
142
+ total: v2.number(),
143
+ results: v2.array(v2.unknown())
144
+ });
145
+
146
+ // src/stacks-api/blocks/get-block.ts
147
+ var v3 = __toESM(require("valibot"), 1);
148
+ var responseSchema2 = v3.object({
149
+ canonical: v3.boolean(),
150
+ height: v3.number(),
151
+ hash: v3.string(),
152
+ block_time: v3.number(),
153
+ block_time_iso: v3.string(),
154
+ index_block_hash: v3.string(),
155
+ parent_block_hash: v3.string(),
156
+ parent_index_block_hash: v3.string(),
157
+ burn_block_time: v3.number(),
158
+ burn_block_time_iso: v3.string(),
159
+ burn_block_hash: v3.string(),
160
+ burn_block_height: v3.number(),
161
+ miner_txid: v3.string(),
162
+ tx_count: v3.number(),
163
+ execution_cost_read_count: v3.number(),
164
+ execution_cost_read_length: v3.number(),
165
+ execution_cost_runtime: v3.number(),
166
+ execution_cost_write_count: v3.number(),
167
+ execution_cost_write_length: v3.number()
168
+ });
169
+ async function getBlock(opts) {
170
+ const init = {};
171
+ if (opts.apiKeyConfig) {
172
+ init.headers = {
173
+ [opts.apiKeyConfig.header]: opts.apiKeyConfig.key
174
+ };
175
+ }
176
+ const res = await fetch(
177
+ `${opts.baseUrl}/extended/v2/blocks/${opts.heightOrHash}`,
178
+ init
179
+ );
180
+ if (!res.ok) {
181
+ return error({
182
+ name: "FetchBlockError",
183
+ message: "Failed to fetch block.",
184
+ data: {
185
+ status: res.status,
186
+ statusText: res.statusText,
187
+ bodyParseResult: await safePromise(res.json())
188
+ }
189
+ });
190
+ }
191
+ const [jsonError, data] = await safePromise(res.json());
192
+ if (jsonError) {
193
+ return error({
194
+ name: "ParseBodyError",
195
+ message: "Failed to parse body.",
196
+ data: jsonError
197
+ });
198
+ }
199
+ const validationResult = v3.safeParse(responseSchema2, data);
200
+ if (!validationResult.success) {
201
+ return error({
202
+ name: "ValidateDataError",
203
+ message: "Failed to validate data.",
204
+ data: validationResult
205
+ });
206
+ }
207
+ return success(validationResult.output);
208
+ }
209
+
210
+ // src/stacks-api/blocks/index.ts
211
+ var blocks = {
212
+ getBlock
213
+ };
214
+
215
+ // src/stacks-api/info/core-api.ts
216
+ var v4 = __toESM(require("valibot"), 1);
217
+ var CoreApiResponseSchema = v4.object({
218
+ peer_version: v4.number(),
219
+ pox_consensus: v4.string(),
220
+ burn_block_height: v4.number(),
221
+ stable_pox_consensus: v4.string(),
222
+ stable_burn_block_height: v4.number(),
223
+ server_version: v4.string(),
224
+ network_id: v4.number(),
225
+ parent_network_id: v4.number(),
226
+ stacks_tip_height: v4.number(),
227
+ stacks_tip: v4.string(),
228
+ stacks_tip_consensus_hash: v4.string(),
229
+ unanchored_tip: v4.string(),
230
+ exit_at_block_height: v4.number()
231
+ });
232
+ async function coreApi(apiOpts) {
233
+ const init = {};
234
+ if (apiOpts.apiKeyConfig) {
235
+ init.headers = {
236
+ [apiOpts.apiKeyConfig.header]: apiOpts.apiKeyConfig.key
237
+ };
238
+ }
239
+ const res = await fetch(`${apiOpts.baseUrl}/v2/info`, init);
240
+ if (!res.ok) {
241
+ return error({
242
+ name: "FetchCoreApiError",
243
+ message: "Failed to fetch.",
244
+ data: {
245
+ status: res.status,
246
+ statusText: res.statusText,
247
+ bodyParseResult: await safePromise(res.json())
248
+ }
249
+ });
250
+ }
251
+ const [parseBodyError, data] = await safePromise(res.json());
252
+ if (parseBodyError) {
253
+ return error({
254
+ name: "ParseBodyError",
255
+ message: "Failed to parse response body as JSON.",
256
+ data: parseBodyError
257
+ });
258
+ }
259
+ const validationResult = v4.safeParse(CoreApiResponseSchema, data);
260
+ if (!validationResult.success) {
261
+ return error({
262
+ name: "ValidateDataError",
263
+ message: "Failed to validate data.",
264
+ data: validationResult
265
+ });
266
+ }
267
+ return success(validationResult.output);
268
+ }
269
+
270
+ // src/stacks-api/info/pox-details.ts
271
+ var v5 = __toESM(require("valibot"), 1);
272
+ var poxDetailsResponseSchema = v5.object({
273
+ contract_id: v5.string(),
274
+ pox_activation_threshold_ustx: v5.number(),
275
+ first_burnchain_block_height: v5.number(),
276
+ current_burnchain_block_height: v5.number(),
277
+ prepare_phase_block_length: v5.number(),
278
+ reward_phase_block_length: v5.number(),
279
+ reward_slots: v5.number(),
280
+ rejection_fraction: v5.null(),
281
+ total_liquid_supply_ustx: v5.number(),
282
+ current_cycle: v5.object({
283
+ id: v5.number(),
284
+ min_threshold_ustx: v5.number(),
285
+ stacked_ustx: v5.number(),
286
+ is_pox_active: v5.boolean()
287
+ }),
288
+ next_cycle: v5.object({
289
+ id: v5.number(),
290
+ min_threshold_ustx: v5.number(),
291
+ min_increment_ustx: v5.number(),
292
+ stacked_ustx: v5.number(),
293
+ prepare_phase_start_block_height: v5.number(),
294
+ blocks_until_prepare_phase: v5.number(),
295
+ reward_phase_start_block_height: v5.number(),
296
+ blocks_until_reward_phase: v5.number(),
297
+ ustx_until_pox_rejection: v5.null()
298
+ }),
299
+ epochs: v5.array(
300
+ v5.object({
301
+ epoch_id: v5.string(),
302
+ start_height: v5.number(),
303
+ end_height: v5.number(),
304
+ block_limit: v5.object({
305
+ write_length: v5.number(),
306
+ write_count: v5.number(),
307
+ read_length: v5.number(),
308
+ read_count: v5.number(),
309
+ runtime: v5.number()
310
+ }),
311
+ network_epoch: v5.number()
312
+ })
313
+ ),
314
+ min_amount_ustx: v5.number(),
315
+ prepare_cycle_length: v5.number(),
316
+ reward_cycle_id: v5.number(),
317
+ reward_cycle_length: v5.number(),
318
+ rejection_votes_left_required: v5.null(),
319
+ next_reward_cycle_in: v5.number(),
320
+ contract_versions: v5.array(
321
+ v5.object({
322
+ contract_id: v5.string(),
323
+ activation_burnchain_block_height: v5.number(),
324
+ first_reward_cycle_id: v5.number()
325
+ })
326
+ )
327
+ });
328
+ async function poxDetails(args) {
329
+ const init = {};
330
+ if (args.apiKeyConfig) {
331
+ init.headers = {
332
+ [args.apiKeyConfig.header]: args.apiKeyConfig.key
333
+ };
334
+ }
335
+ const res = await fetch(`${args.baseUrl}/v2/pox`, init);
336
+ if (!res.ok) {
337
+ return error({
338
+ name: "FetchPoxDetailsError",
339
+ message: "Failed to fetch pox details.",
340
+ data: {
341
+ status: res.status,
342
+ statusText: res.statusText,
343
+ bodyParseResult: await safePromise(res.json())
344
+ }
345
+ });
346
+ }
347
+ const [jsonParseError, data] = await safePromise(res.json());
348
+ if (jsonParseError) {
349
+ return error({
350
+ name: "ParseBodyError",
351
+ message: "Failed to parse pox details response.",
352
+ data: jsonParseError
353
+ });
354
+ }
355
+ const validationResult = v5.safeParse(poxDetailsResponseSchema, data);
356
+ if (!validationResult.success) {
357
+ return error({
358
+ name: "ValidateDataError",
359
+ message: "Failed to parse pox details response.",
360
+ data: validationResult
361
+ });
362
+ }
363
+ return success(validationResult.output);
364
+ }
365
+
366
+ // src/stacks-api/info/index.ts
367
+ var info = {
368
+ coreApi,
369
+ poxDetails
370
+ };
371
+
372
+ // src/stacks-api/proof-of-transfer/cycle.ts
373
+ var v6 = __toESM(require("valibot"), 1);
374
+ var responseSchema3 = v6.object({
375
+ block_height: v6.number(),
376
+ index_block_hash: v6.string(),
377
+ cycle_number: v6.number(),
378
+ total_weight: v6.number(),
379
+ total_stacked_amount: v6.string(),
380
+ total_signers: v6.number()
381
+ });
382
+ async function cycle(opts) {
383
+ const init = {};
384
+ if (opts.apiKeyConfig) {
385
+ init.headers = {
386
+ [opts.apiKeyConfig.header]: opts.apiKeyConfig.key
387
+ };
388
+ }
389
+ const endpoint = `${opts.baseUrl}/extended/v2/pox/cycles/${opts.cycleNumber}`;
390
+ const res = await fetch(endpoint, init);
391
+ if (!res.ok) {
392
+ return error({
393
+ name: "FetchCycleError",
394
+ message: "Failed to fetch cycle.",
395
+ data: {
396
+ endpoint,
397
+ status: res.status,
398
+ statusText: res.statusText,
399
+ bodyParseResult: await safePromise(res.json())
400
+ }
401
+ });
402
+ }
403
+ const [jsonError, data] = await safePromise(res.json());
404
+ if (jsonError) {
405
+ return error({
406
+ name: "ParseBodyError",
407
+ message: "Failed to parse response body as JSON.",
408
+ data: jsonError
409
+ });
410
+ }
411
+ const validationResult = v6.safeParse(responseSchema3, data);
412
+ if (!validationResult.success) {
413
+ return error({
414
+ name: "ValidateDataError",
415
+ message: "Failed to validate data.",
416
+ data: validationResult
417
+ });
418
+ }
419
+ return success(validationResult.output);
420
+ }
421
+
422
+ // src/stacks-api/proof-of-transfer/cycles.ts
423
+ var v7 = __toESM(require("valibot"), 1);
424
+ var cycleInfoSchema = v7.object({
425
+ block_height: v7.number(),
426
+ index_block_hash: v7.string(),
427
+ cycle_number: v7.number(),
428
+ total_weight: v7.number(),
429
+ total_stacked_amount: v7.string(),
430
+ total_signers: v7.number()
431
+ });
432
+ var resultsSchema = v7.array(cycleInfoSchema);
433
+ var cyclesResponseSchema = v7.object({
434
+ ...baseListResponseSchema.entries,
435
+ results: resultsSchema
436
+ });
437
+ async function cycles(args) {
438
+ const search = new URLSearchParams();
439
+ if (args.limit) search.append("limit", args.limit.toString());
440
+ if (args.offset) search.append("offset", args.offset.toString());
441
+ const init = {};
442
+ if (args.apiKeyConfig) {
443
+ init.headers = {
444
+ [args.apiKeyConfig.header]: args.apiKeyConfig.key
445
+ };
446
+ }
447
+ const endpoint = `${args.baseUrl}/extended/v2/pox/cycles`;
448
+ const res = await fetch(endpoint, init);
449
+ if (!res.ok) {
450
+ return error({
451
+ name: "FetchCyclesError",
452
+ message: "Failed to fetch cycles.",
453
+ data: {
454
+ endpoint,
455
+ status: res.status,
456
+ statusText: res.statusText,
457
+ bodyParseResult: await safePromise(res.json())
458
+ }
459
+ });
460
+ }
461
+ const [jsonError, data] = await safePromise(res.json());
462
+ if (jsonError) {
463
+ return error({
464
+ name: "ParseBodyError",
465
+ message: "Failed to parse response body as JSON.",
466
+ data: jsonError
467
+ });
468
+ }
469
+ const validationResult = v7.safeParse(cyclesResponseSchema, data);
470
+ if (!validationResult.success) {
471
+ return error({
472
+ name: "ValidateDataError",
473
+ message: "Failed to validate response data.",
474
+ data: validationResult
475
+ });
476
+ }
477
+ return success(validationResult.output);
478
+ }
479
+
480
+ // src/stacks-api/proof-of-transfer/signer-in-cycle.ts
481
+ var v8 = __toESM(require("valibot"), 1);
482
+ var signerInCycleResponseSchema = v8.object({
483
+ signing_key: v8.string(),
484
+ signer_address: v8.string(),
485
+ weight: v8.number(),
486
+ stacked_amount: v8.string(),
487
+ weight_percent: v8.number(),
488
+ stacked_amount_percent: v8.number(),
489
+ solo_stacker_count: v8.number(),
490
+ pooled_stacker_count: v8.number()
491
+ });
492
+ async function signerInCycle(args) {
493
+ const init = {};
494
+ if (args.apiKeyConfig) {
495
+ init.headers = {
496
+ [args.apiKeyConfig.header]: args.apiKeyConfig.key
497
+ };
498
+ }
499
+ const signerPublicKey = args.signerPublicKey.startsWith("0x") ? args.signerPublicKey : `0x${args.signerPublicKey}`;
500
+ const endpoint = `${args.baseUrl}/extended/v2/pox/cycles/${args.cycleId}/signers/${signerPublicKey}`;
501
+ const res = await fetch(endpoint, init);
502
+ if (!res.ok) {
503
+ return error({
504
+ name: "FetchSignerInCycleError",
505
+ message: "Failed to fetch signer in cycle.",
506
+ data: {
507
+ ...args,
508
+ endpoint,
509
+ status: res.status,
510
+ statusText: res.statusText
511
+ }
512
+ });
513
+ }
514
+ const [jsonError, data] = await safePromise(res.json());
515
+ if (jsonError) {
516
+ return error({
517
+ name: "ParseBodyError",
518
+ message: "Failed to parse response body.",
519
+ data: {
520
+ signerPublicKey: args.signerPublicKey,
521
+ cycleId: args.cycleId,
522
+ jsonError
523
+ }
524
+ });
525
+ }
526
+ const validationResult = v8.safeParse(signerInCycleResponseSchema, data);
527
+ if (!validationResult.success) {
528
+ return error({
529
+ name: "ValidateDataError",
530
+ message: "Failed to validate response data.",
531
+ data: validationResult.issues
532
+ });
533
+ }
534
+ return success(validationResult.output);
535
+ }
536
+
537
+ // src/stacks-api/proof-of-transfer/signers-in-cycle.ts
538
+ var v9 = __toESM(require("valibot"), 1);
539
+ var signerSchema = v9.object({
540
+ signing_key: v9.string(),
541
+ signer_address: v9.string(),
542
+ weight: v9.number(),
543
+ stacked_amount: v9.string(),
544
+ weight_percent: v9.number(),
545
+ stacked_amount_percent: v9.number(),
546
+ pooled_stacker_count: v9.number(),
547
+ solo_stacker_count: v9.number()
548
+ });
549
+ var resultsSchema2 = v9.array(signerSchema);
550
+ var signersResponseSchema = v9.object({
551
+ ...baseListResponseSchema.entries,
552
+ results: resultsSchema2
553
+ });
554
+ async function signersInCycle(args) {
555
+ const search = new URLSearchParams();
556
+ if (args.limit) search.append("limit", args.limit.toString());
557
+ if (args.offset) search.append("offset", args.offset.toString());
558
+ const init = {};
559
+ if (args.apiKeyConfig) {
560
+ init.headers = {
561
+ [args.apiKeyConfig.header]: args.apiKeyConfig.key
562
+ };
563
+ }
564
+ const endpoint = `${args.baseUrl}/extended/v2/pox/cycles/${args.cycleNumber}/signers`;
565
+ const res = await fetch(endpoint, init);
566
+ if (!res.ok) {
567
+ return error({
568
+ name: "FetchSignersError",
569
+ message: "Failed to fetch signers.",
570
+ data: {
571
+ endpoint,
572
+ status: res.status,
573
+ statusText: res.statusText,
574
+ bodyParseResult: await safePromise(res.json())
575
+ }
576
+ });
577
+ }
578
+ const [jsonError, data] = await safePromise(res.json());
579
+ if (jsonError) {
580
+ return error({
581
+ name: "ParseBodyError",
582
+ message: "Failed to parse response body as JSON.",
583
+ data: {
584
+ endpoint,
585
+ bodyParseResult: data
586
+ }
587
+ });
588
+ }
589
+ const validationResult = v9.safeParse(signersResponseSchema, data);
590
+ if (!validationResult.success) {
591
+ return error({
592
+ name: "ValidateDataError",
593
+ message: "Failed to validate response data.",
594
+ data: validationResult
595
+ });
596
+ }
597
+ return success(validationResult.output);
598
+ }
599
+
600
+ // src/stacks-api/proof-of-transfer/stackers-for-signer-in-cycle.ts
601
+ var v10 = __toESM(require("valibot"), 1);
602
+ var stackerInfoSchema = v10.object({
603
+ stacker_address: v10.string(),
604
+ stacked_amount: v10.string(),
605
+ pox_address: v10.string(),
606
+ stacker_type: v10.union([v10.literal("pooled"), v10.literal("solo")])
607
+ });
608
+ var resultsSchema3 = v10.array(stackerInfoSchema);
609
+ var stackersForSignerInCycleResponseSchema = v10.object({
610
+ ...baseListResponseSchema.entries,
611
+ results: resultsSchema3
612
+ });
613
+ async function stackersForSignerInCycle(opts) {
614
+ const search = new URLSearchParams();
615
+ if (opts.limit) search.append("limit", opts.limit.toString());
616
+ if (opts.offset) search.append("offset", opts.offset.toString());
617
+ const init = {};
618
+ if (opts.apiKeyConfig) {
619
+ init.headers = {
620
+ [opts.apiKeyConfig.header]: opts.apiKeyConfig.key
621
+ };
622
+ }
623
+ const signerPublicKey = opts.signerPublicKey.startsWith("0x") ? opts.signerPublicKey : `0x${opts.signerPublicKey}`;
624
+ const endpoint = `${opts.baseUrl}/extended/v2/pox/cycles/${opts.cycleNumber}/signers/${signerPublicKey}/stackers?${search}`;
625
+ const res = await fetch(endpoint, init);
626
+ if (!res.ok) {
627
+ return error({
628
+ name: "FetchStackersForSignerInCycleError",
629
+ message: "Failed to fetch stackers for signer in cycle.",
630
+ data: {
631
+ endpoint,
632
+ status: res.status,
633
+ statusText: res.statusText,
634
+ bodyParseResult: await safePromise(res.json())
635
+ }
636
+ });
637
+ }
638
+ const [jsonError, data] = await safePromise(res.json());
639
+ if (jsonError) {
640
+ return error({
641
+ name: "ParseBodyError",
642
+ message: "Failed to parse response body as JSON.",
643
+ data: jsonError
644
+ });
645
+ }
646
+ const validationResult = v10.safeParse(
647
+ stackersForSignerInCycleResponseSchema,
648
+ data
649
+ );
650
+ if (!validationResult.success) {
651
+ return error({
652
+ name: "ValidateDataError",
653
+ message: "Failed to validate response data.",
654
+ data: validationResult
655
+ });
656
+ }
657
+ return success(validationResult.output);
658
+ }
659
+
660
+ // src/stacks-api/proof-of-transfer/index.ts
661
+ var proofOfTransfer = {
662
+ cycle,
663
+ cycles,
664
+ signerInCycle,
665
+ signersInCycle,
666
+ stackersForSignerInCycle
667
+ };
668
+
669
+ // src/stacks-api/smart-contracts/read-only.ts
670
+ var v11 = __toESM(require("valibot"), 1);
671
+ var readOnlyResponseSchema = v11.variant("okay", [
672
+ v11.object({
673
+ okay: v11.literal(true),
674
+ result: v11.string()
675
+ }),
676
+ v11.object({
677
+ okay: v11.literal(false),
678
+ cause: v11.unknown()
679
+ })
680
+ ]);
681
+ async function readOnly(args) {
682
+ const init = {};
683
+ if (args.apiKeyConfig) {
684
+ init.headers = {
685
+ [args.apiKeyConfig.header]: args.apiKeyConfig.key
686
+ };
687
+ }
688
+ const res = await fetch(
689
+ `${args.baseUrl}/v2/contracts/call-read/${args.contractAddress}/${args.contractName}/${args.functionName}`,
690
+ init
691
+ );
692
+ if (!res.ok) {
693
+ return error({
694
+ name: "FetchReadOnlyError",
695
+ message: "Failed to fetch.",
696
+ data: {
697
+ status: res.status,
698
+ statusText: res.statusText,
699
+ bodyParseResult: await safePromise(res.json())
700
+ }
701
+ });
702
+ }
703
+ const [jsonError, data] = await safePromise(res.json());
704
+ if (jsonError) {
705
+ return error({
706
+ name: "ParseBodyError",
707
+ message: "Failed to parse response body as JSON.",
708
+ data: error
709
+ });
710
+ }
711
+ const validationResult = v11.safeParse(readOnlyResponseSchema, data);
712
+ if (!validationResult.success) {
713
+ return error({
714
+ name: "ValidateDataError",
715
+ message: "Failed to validate data.",
716
+ data: validationResult
717
+ });
718
+ }
719
+ return success(validationResult.output);
720
+ }
721
+
722
+ // src/stacks-api/smart-contracts/index.ts
723
+ var smartContracts = {
724
+ readOnly
725
+ };
726
+
727
+ // src/stacks-api/stacking-pool/members.ts
728
+ var v12 = __toESM(require("valibot"), 1);
729
+ var memberSchema = v12.object({
730
+ stacker: v12.string(),
731
+ pox_addr: v12.optional(v12.string()),
732
+ amount_ustx: v12.string(),
733
+ burn_block_unlock_height: v12.optional(v12.number()),
734
+ block_height: v12.number(),
735
+ tx_id: v12.string()
736
+ });
737
+ var membersResponseSchema = v12.object({
738
+ limit: v12.number(),
739
+ offset: v12.number(),
740
+ total: v12.number(),
741
+ results: v12.array(memberSchema)
742
+ });
743
+ async function members(args) {
744
+ const search = new URLSearchParams();
745
+ if (args.afterBlock) search.append("after_block", args.afterBlock.toString());
746
+ if (args.unanchored) search.append("unanchored", "true");
747
+ if (args.limit) search.append("limit", args.limit.toString());
748
+ if (args.offset) search.append("offset", args.offset.toString());
749
+ const init = {};
750
+ if (args.apiKeyConfig) {
751
+ init.headers = {
752
+ [args.apiKeyConfig.header]: args.apiKeyConfig.key
753
+ };
754
+ }
755
+ const endpoint = `${args.baseUrl}/extended/v1/pox4/${args.poolPrincipal}/delegations?${search}`;
756
+ const res = await fetch(endpoint, init);
757
+ if (!res.ok) {
758
+ return error({
759
+ name: "FetchMembersError",
760
+ message: "Failed to fetch members.",
761
+ data: {
762
+ status: res.status,
763
+ statusText: res.statusText,
764
+ bodyParseResult: await safePromise(res.json())
765
+ }
766
+ });
767
+ }
768
+ const [jsonParseError, data] = await safePromise(res.json());
769
+ if (jsonParseError) {
770
+ return error({
771
+ name: "ParseBodyError",
772
+ message: "Failed to parse response body as JSON.",
773
+ data: jsonParseError
774
+ });
775
+ }
776
+ const validationResult = v12.safeParse(membersResponseSchema, data);
777
+ if (!validationResult.success) {
778
+ return error({
779
+ name: "ValidateDataError",
780
+ message: "Failed to validate data.",
781
+ data: validationResult
782
+ });
783
+ }
784
+ return success(validationResult.output);
785
+ }
786
+
787
+ // src/stacks-api/stacking-pool/index.ts
788
+ var stackingPool = {
789
+ members
790
+ };
791
+
792
+ // 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()
820
+ }),
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()
831
+ });
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()
844
+ })
845
+ )
846
+ }),
847
+ ...baseTransactionSchema.entries
848
+ });
849
+ var smartContractTransactionSchema = v13.object({
850
+ tx_type: v13.literal("smart_contract"),
851
+ smart_contract: v13.object({
852
+ /**
853
+ * NOTE: The types may be wrong, not sure what type of value is used when
854
+ * the version is not `null`.
855
+ */
856
+ clarity_version: v13.union([v13.null(), v13.number()]),
857
+ contract_id: v13.string(),
858
+ source_code: v13.string()
859
+ }),
860
+ ...baseTransactionSchema.entries
861
+ });
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()
868
+ }),
869
+ ...baseTransactionSchema.entries
870
+ });
871
+ var transactionSchema = v13.variant("tx_type", [
872
+ contractCallTransactionSchema,
873
+ smartContractTransactionSchema,
874
+ tokenTransferSchema
875
+ ]);
876
+
877
+ // src/stacks-api/transactions/address-transactions.ts
878
+ var v14 = __toESM(require("valibot"), 1);
879
+ var resultSchema = v14.object({
880
+ 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()
888
+ }),
889
+ ft: v14.object({
890
+ transfer: v14.number(),
891
+ mint: v14.number(),
892
+ burn: v14.number()
893
+ }),
894
+ nft: v14.object({
895
+ transfer: v14.number(),
896
+ mint: v14.number(),
897
+ burn: v14.number()
898
+ })
899
+ })
900
+ });
901
+ var resultsSchema4 = v14.array(resultSchema);
902
+ var addressTransactionsResponseSchema = v14.object({
903
+ ...baseListResponseSchema.entries,
904
+ results: resultsSchema4
905
+ });
906
+ async function addressTransactions(args) {
907
+ const search = new URLSearchParams();
908
+ if (args.limit) search.append("limit", args.limit.toString());
909
+ if (args.offset) search.append("offset", args.offset.toString());
910
+ const init = {};
911
+ if (args.apiKeyConfig) {
912
+ init.headers = {
913
+ [args.apiKeyConfig.header]: args.apiKeyConfig.key
914
+ };
915
+ }
916
+ const res = await fetch(
917
+ `${args.baseUrl}/extended/v2/addresses/${args.address}/transactions?${search}`,
918
+ init
919
+ );
920
+ if (!res.ok) {
921
+ return error({
922
+ name: "FetchAddressTransactionsError",
923
+ message: "Failed to fetch address transactions.",
924
+ data: {
925
+ status: res.status,
926
+ statusText: res.statusText,
927
+ bodyParseResult: await safePromise(res.json())
928
+ }
929
+ });
930
+ }
931
+ const [jsonParseError, data] = await safePromise(res.json());
932
+ if (jsonParseError) {
933
+ return error({
934
+ name: "ParseBodyError",
935
+ message: "Failed to parse response body as JSON.",
936
+ data: jsonParseError
937
+ });
938
+ }
939
+ const validationResult = v14.safeParse(addressTransactionsResponseSchema, data);
940
+ if (!validationResult.success) {
941
+ return error({
942
+ name: "ValidateDataError",
943
+ message: "Failed to validate data.",
944
+ data: validationResult
945
+ });
946
+ }
947
+ return success(validationResult.output);
948
+ }
949
+
950
+ // src/stacks-api/transactions/get-transaction.ts
951
+ var v15 = __toESM(require("valibot"), 1);
952
+ async function getTransaction(args) {
953
+ const init = {};
954
+ if (args.apiKeyConfig) {
955
+ init.headers = {
956
+ [args.apiKeyConfig.header]: args.apiKeyConfig.key
957
+ };
958
+ }
959
+ const endpoint = `${args.baseUrl}/extended/v1/tx/${args.transactionId}`;
960
+ const res = await fetch(endpoint, init);
961
+ if (!res.ok) {
962
+ return error({
963
+ name: "FetchTransactionError",
964
+ message: `Failed to fetch transaction ${args.transactionId}`,
965
+ response: {
966
+ status: res.status,
967
+ statusText: res.statusText,
968
+ body: await safePromise(res.json())
969
+ }
970
+ });
971
+ }
972
+ const [jsonParseError, data] = await safePromise(res.json());
973
+ if (jsonParseError) {
974
+ return error({
975
+ name: "ParseBodyError",
976
+ message: "Failed to parse response body as JSON.",
977
+ error: jsonParseError
978
+ });
979
+ }
980
+ const validationResult = v15.safeParse(transactionSchema, data);
981
+ if (!validationResult.success) {
982
+ return error({
983
+ name: "ValidateDataError",
984
+ message: "Failed to validate data.",
985
+ error: validationResult
986
+ });
987
+ }
988
+ return success(validationResult.output);
989
+ }
990
+
991
+ // src/stacks-api/transactions/index.ts
992
+ var transactions = {
993
+ addressTransactions,
994
+ getTransaction
995
+ };
996
+
997
+ // src/stacks-api/faucets/stx.ts
998
+ async function stx(opts) {
999
+ const search = new URLSearchParams();
1000
+ search.append("address", opts.address);
1001
+ if (opts.stacking) search.append("stacking", "true");
1002
+ const init = {};
1003
+ if (opts.apiKeyConfig) {
1004
+ init.headers = {
1005
+ [opts.apiKeyConfig.header]: opts.apiKeyConfig.key
1006
+ };
1007
+ }
1008
+ init.method = "POST";
1009
+ const endpoint = `${opts.baseUrl}/extended/v1/faucets/stx?${search}`;
1010
+ const res = await fetch(endpoint, init);
1011
+ if (!res.ok) {
1012
+ return error({
1013
+ name: "FetchStxError",
1014
+ message: "Failed to fetch STX.",
1015
+ data: {
1016
+ status: res.status,
1017
+ statusText: res.statusText,
1018
+ bodyParseResult: await safePromise(res.json())
1019
+ }
1020
+ });
1021
+ }
1022
+ const [jsonError, data] = await safePromise(res.json());
1023
+ if (jsonError) {
1024
+ return error({
1025
+ name: "ParseBodyError",
1026
+ message: "Failed to parse response body as JSON.",
1027
+ data: jsonError
1028
+ });
1029
+ }
1030
+ return success(data);
1031
+ }
1032
+
1033
+ // src/stacks-api/faucets/index.ts
1034
+ var faucets = {
1035
+ stx
1036
+ };
1037
+
1038
+ // src/stacks-api/index.ts
1039
+ var stacksApi = {
1040
+ accounts,
1041
+ blocks,
1042
+ faucets,
1043
+ info,
1044
+ proofOfTransfer,
1045
+ smartContracts,
1046
+ stackingPool,
1047
+ transactions
1048
+ };
1049
+
1050
+ // src/stacks-rpc-api/smart-contracts/map-entry.ts
1051
+ var v16 = __toESM(require("valibot"), 1);
1052
+ var mapEntryResponseSchema = v16.object({
1053
+ /**
1054
+ * Hex-encoded string of clarity value. It is always an optional tuple.
1055
+ */
1056
+ data: v16.string(),
1057
+ /**
1058
+ * Hex-encoded string of the MARF proof for the data
1059
+ */
1060
+ proof: v16.optional(v16.string())
1061
+ });
1062
+ async function mapEntry(args) {
1063
+ const search = new URLSearchParams();
1064
+ if (args.proof === 0) search.append("proof", "0");
1065
+ if (args.tip) search.append("tip", args.tip);
1066
+ const init = {};
1067
+ if (args.apiKeyConfig) {
1068
+ init.headers = {
1069
+ [args.apiKeyConfig.header]: args.apiKeyConfig.key
1070
+ };
1071
+ }
1072
+ init.method = "POST";
1073
+ init.body = args.mapKey;
1074
+ const endpoint = `${args.baseUrl}/v2/map_entry/${args.contractAddress}/${args.contractName}/${args.mapName}?${search}`;
1075
+ const res = await fetch(endpoint, init);
1076
+ if (!res.ok) {
1077
+ return error({
1078
+ name: "FetchMapEntryError",
1079
+ message: "Failed to fetch map entry.",
1080
+ data: {
1081
+ status: res.status,
1082
+ statusText: res.statusText,
1083
+ bodyParseResult: await safePromise(res.json())
1084
+ }
1085
+ });
1086
+ }
1087
+ const [jsonError, data] = await safePromise(res.json());
1088
+ if (jsonError) {
1089
+ return error({
1090
+ name: "ParseBodyError",
1091
+ message: "Failed to parse response body as JSON.",
1092
+ data: jsonError
1093
+ });
1094
+ }
1095
+ const validationResult = v16.safeParse(mapEntryResponseSchema, data);
1096
+ if (!validationResult.success) {
1097
+ return error({
1098
+ name: "ValidateDataError",
1099
+ message: "Failed to validate response data.",
1100
+ data: validationResult
1101
+ });
1102
+ }
1103
+ return success(validationResult.output);
1104
+ }
1105
+
1106
+ // src/stacks-rpc-api/smart-contracts/index.ts
1107
+ var smartContracts2 = {
1108
+ mapEntry
1109
+ };
1110
+
1111
+ // src/stacks-rpc-api/index.ts
1112
+ var stacksRpcApi = {
1113
+ smartContracts: smartContracts2
1114
+ };
1115
+
1116
+ // src/utils/call-rate-limited-api.ts
1117
+ var import_exponential_backoff = require("exponential-backoff");
1118
+ async function safeCallRateLimitedApi(fn, options) {
1119
+ try {
1120
+ return await (0, import_exponential_backoff.backOff)(() => fn(), {
1121
+ startingDelay: options?.startingDelay ?? 15e3,
1122
+ numOfAttempts: options?.numOfAttempts ?? 5
1123
+ });
1124
+ } catch (error2) {
1125
+ return error({
1126
+ name: "MaxRetriesExceeded",
1127
+ message: "Failed to call rate limited API.",
1128
+ data: {
1129
+ error: error2
1130
+ }
1131
+ });
1132
+ }
1133
+ }
1134
+
1135
+ // src/queries/get-signer-stacked-amount.ts
1136
+ async function getSignerStackedAmount(args) {
1137
+ let totalLocked = 0n;
1138
+ const { identifier, ...rest } = args;
1139
+ let hasMore = true;
1140
+ let offset = 0;
1141
+ let found = false;
1142
+ const limit = 200;
1143
+ while (hasMore && !found) {
1144
+ const [error2, data] = await safeCallRateLimitedApi(
1145
+ () => signersInCycle({
1146
+ ...rest,
1147
+ limit
1148
+ })
1149
+ );
1150
+ if (error2) {
1151
+ return error({
1152
+ name: "GetSignerTotalLockedError",
1153
+ message: "Failed to get signer total locked.",
1154
+ data: {
1155
+ error: error2
1156
+ }
1157
+ });
1158
+ }
1159
+ for (const signer of data.results) {
1160
+ if (identifier.type === "address") {
1161
+ if (signer.signer_address === identifier.signerAddress) {
1162
+ totalLocked = BigInt(signer.stacked_amount);
1163
+ found = true;
1164
+ break;
1165
+ }
1166
+ } else {
1167
+ if (signer.signing_key === identifier.signerPublicKey) {
1168
+ totalLocked = BigInt(signer.stacked_amount);
1169
+ found = true;
1170
+ break;
1171
+ }
1172
+ }
1173
+ }
1174
+ offset += limit + data.results.length;
1175
+ hasMore = offset < data.total;
1176
+ }
1177
+ if (!found) {
1178
+ return error({
1179
+ name: "SignerNotFound",
1180
+ message: "Signer not found.",
1181
+ data: {
1182
+ identifier,
1183
+ cycle: args.cycleNumber
1184
+ }
1185
+ });
1186
+ }
1187
+ return success(totalLocked);
1188
+ }
1189
+
1190
+ // src/queries/index.ts
1191
+ var queries = {
1192
+ getSignerStackedAmount
1193
+ };
1194
+ // Annotate the CommonJS export names for ESM import in node:
1195
+ 0 && (module.exports = {
1196
+ queries,
1197
+ stacksApi,
1198
+ stacksRpcApi
1199
+ });