@secretkeylabs/stacks-tools 0.2.0 → 0.3.0-6a691d3

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 (96) hide show
  1. package/dist/index.cjs +681 -0
  2. package/dist/index.d.cts +400 -0
  3. package/dist/index.d.ts +400 -2
  4. package/dist/index.js +650 -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-total-locked.d.ts +0 -18
  20. package/dist/queries/get-signer-total-locked.js +0 -59
  21. package/dist/queries/get-signer-total-locked.js.map +0 -1
  22. package/dist/queries/index.d.ts +0 -4
  23. package/dist/queries/index.js +0 -5
  24. package/dist/queries/index.js.map +0 -1
  25. package/dist/stacks-api/accounts/balances.d.ts +0 -34
  26. package/dist/stacks-api/accounts/balances.js +0 -70
  27. package/dist/stacks-api/accounts/balances.js.map +0 -1
  28. package/dist/stacks-api/accounts/index.d.ts +0 -4
  29. package/dist/stacks-api/accounts/index.js +0 -5
  30. package/dist/stacks-api/accounts/index.js.map +0 -1
  31. package/dist/stacks-api/blocks/get-block.d.ts +0 -29
  32. package/dist/stacks-api/blocks/get-block.js +0 -62
  33. package/dist/stacks-api/blocks/get-block.js.map +0 -1
  34. package/dist/stacks-api/blocks/index.d.ts +0 -4
  35. package/dist/stacks-api/blocks/index.js +0 -5
  36. package/dist/stacks-api/blocks/index.js.map +0 -1
  37. package/dist/stacks-api/index.d.ts +0 -28
  38. package/dist/stacks-api/index.js +0 -17
  39. package/dist/stacks-api/index.js.map +0 -1
  40. package/dist/stacks-api/info/core-api.d.ts +0 -21
  41. package/dist/stacks-api/info/core-api.js +0 -55
  42. package/dist/stacks-api/info/core-api.js.map +0 -1
  43. package/dist/stacks-api/info/index.d.ts +0 -6
  44. package/dist/stacks-api/info/index.js +0 -7
  45. package/dist/stacks-api/info/index.js.map +0 -1
  46. package/dist/stacks-api/info/pox-details.d.ts +0 -59
  47. package/dist/stacks-api/info/pox-details.js +0 -92
  48. package/dist/stacks-api/info/pox-details.js.map +0 -1
  49. package/dist/stacks-api/proof-of-transfer/cycle.d.ts +0 -16
  50. package/dist/stacks-api/proof-of-transfer/cycle.js +0 -50
  51. package/dist/stacks-api/proof-of-transfer/cycle.js.map +0 -1
  52. package/dist/stacks-api/proof-of-transfer/cycles.d.ts +0 -37
  53. package/dist/stacks-api/proof-of-transfer/cycles.js +0 -61
  54. package/dist/stacks-api/proof-of-transfer/cycles.js.map +0 -1
  55. package/dist/stacks-api/proof-of-transfer/index.d.ts +0 -10
  56. package/dist/stacks-api/proof-of-transfer/index.js +0 -11
  57. package/dist/stacks-api/proof-of-transfer/index.js.map +0 -1
  58. package/dist/stacks-api/proof-of-transfer/signers-in-cycle.d.ts +0 -45
  59. package/dist/stacks-api/proof-of-transfer/signers-in-cycle.js +0 -66
  60. package/dist/stacks-api/proof-of-transfer/signers-in-cycle.js.map +0 -1
  61. package/dist/stacks-api/proof-of-transfer/stackers-for-signer-in-cycle.d.ts +0 -34
  62. package/dist/stacks-api/proof-of-transfer/stackers-for-signer-in-cycle.js +0 -59
  63. package/dist/stacks-api/proof-of-transfer/stackers-for-signer-in-cycle.js.map +0 -1
  64. package/dist/stacks-api/smart-contracts/index.d.ts +0 -4
  65. package/dist/stacks-api/smart-contracts/index.js +0 -5
  66. package/dist/stacks-api/smart-contracts/index.js.map +0 -1
  67. package/dist/stacks-api/smart-contracts/read-only.d.ts +0 -19
  68. package/dist/stacks-api/smart-contracts/read-only.js +0 -50
  69. package/dist/stacks-api/smart-contracts/read-only.js.map +0 -1
  70. package/dist/stacks-api/stacking-pool/index.d.ts +0 -4
  71. package/dist/stacks-api/stacking-pool/index.js +0 -5
  72. package/dist/stacks-api/stacking-pool/index.js.map +0 -1
  73. package/dist/stacks-api/stacking-pool/members.d.ts +0 -34
  74. package/dist/stacks-api/stacking-pool/members.js +0 -64
  75. package/dist/stacks-api/stacking-pool/members.js.map +0 -1
  76. package/dist/stacks-api/transactions/address-transactions.d.ts +0 -487
  77. package/dist/stacks-api/transactions/address-transactions.js +0 -75
  78. package/dist/stacks-api/transactions/address-transactions.js.map +0 -1
  79. package/dist/stacks-api/transactions/get-transaction.d.ts +0 -8
  80. package/dist/stacks-api/transactions/get-transaction.js +0 -42
  81. package/dist/stacks-api/transactions/get-transaction.js.map +0 -1
  82. package/dist/stacks-api/transactions/index.d.ts +0 -6
  83. package/dist/stacks-api/transactions/index.js +0 -7
  84. package/dist/stacks-api/transactions/index.js.map +0 -1
  85. package/dist/stacks-api/transactions/schemas.d.ts +0 -327
  86. package/dist/stacks-api/transactions/schemas.js +0 -85
  87. package/dist/stacks-api/transactions/schemas.js.map +0 -1
  88. package/dist/stacks-api/types.d.ts +0 -26
  89. package/dist/stacks-api/types.js +0 -8
  90. package/dist/stacks-api/types.js.map +0 -1
  91. package/dist/utils/call-rate-limited-api.d.ts +0 -8
  92. package/dist/utils/call-rate-limited-api.js +0 -28
  93. package/dist/utils/call-rate-limited-api.js.map +0 -1
  94. package/dist/utils/safe.d.ts +0 -10
  95. package/dist/utils/safe.js +0 -31
  96. package/dist/utils/safe.js.map +0 -1
package/dist/index.cjs ADDED
@@ -0,0 +1,681 @@
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
+ stacksApi: () => stacks_api_exports
34
+ });
35
+ module.exports = __toCommonJS(src_exports);
36
+
37
+ // src/stacks-api/index.ts
38
+ var stacks_api_exports = {};
39
+ __export(stacks_api_exports, {
40
+ accounts: () => accounts_exports,
41
+ blocks: () => blocks_exports,
42
+ info: () => info_exports,
43
+ proofOfTransfer: () => proof_of_transfer_exports
44
+ });
45
+
46
+ // src/stacks-api/accounts/index.ts
47
+ var accounts_exports = {};
48
+ __export(accounts_exports, {
49
+ balances: () => balances
50
+ });
51
+
52
+ // src/utils/safe.ts
53
+ function success(data) {
54
+ return [null, data];
55
+ }
56
+ function error(error2) {
57
+ return [error2, null];
58
+ }
59
+ async function safePromise(promise) {
60
+ try {
61
+ return success(await promise);
62
+ } catch (e) {
63
+ return error({
64
+ name: "SafePromiseError",
65
+ message: "Safe promise rejected.",
66
+ data: e
67
+ });
68
+ }
69
+ }
70
+
71
+ // src/stacks-api/accounts/balances.ts
72
+ var v = __toESM(require("valibot"), 1);
73
+ var responseSchema = v.object({
74
+ stx: v.object({
75
+ balance: v.string(),
76
+ total_sent: v.string(),
77
+ total_received: v.string(),
78
+ total_fees_sent: v.string(),
79
+ total_miner_rewards_received: v.string(),
80
+ lock_tx_id: v.string(),
81
+ locked: v.string(),
82
+ lock_height: v.number(),
83
+ burnchain_lock_height: v.number(),
84
+ burnchain_unlock_height: v.number()
85
+ }),
86
+ fungible_tokens: v.record(
87
+ v.string(),
88
+ v.object({
89
+ balance: v.string(),
90
+ total_sent: v.string(),
91
+ total_received: v.string()
92
+ })
93
+ ),
94
+ non_fungible_tokens: v.record(
95
+ v.string(),
96
+ v.object({
97
+ count: v.string(),
98
+ total_sent: v.string(),
99
+ total_received: v.string()
100
+ })
101
+ )
102
+ });
103
+ async function balances(opts) {
104
+ const search = new URLSearchParams();
105
+ if (opts.unanchored) search.append("unanchored", "true");
106
+ if (opts.untilBlock) search.append("until_block", opts.untilBlock.toString());
107
+ const init = {};
108
+ if (opts.apiKeyConfig) {
109
+ init.headers = {
110
+ [opts.apiKeyConfig.header]: opts.apiKeyConfig.key
111
+ };
112
+ }
113
+ const endpoint = `${opts.baseUrl}/extended/v1/address/${opts.principal}/balances?${search}`;
114
+ const res = await fetch(endpoint, init);
115
+ if (!res.ok) {
116
+ return error({
117
+ name: "FetchBalancesError",
118
+ message: "Failed to fetch balances.",
119
+ data: {
120
+ status: res.status,
121
+ statusText: res.statusText,
122
+ bodyParseResult: await safePromise(res.json())
123
+ }
124
+ });
125
+ }
126
+ const [jsonError, data] = await safePromise(res.json());
127
+ if (jsonError) {
128
+ return error({
129
+ name: "ParseBodyError",
130
+ message: "Failed to parse response body as JSON.",
131
+ data: jsonError
132
+ });
133
+ }
134
+ const validationResult = v.safeParse(responseSchema, data);
135
+ if (!validationResult.success) {
136
+ return error({
137
+ name: "ValidateDataError",
138
+ message: "Failed to validate data.",
139
+ data: validationResult
140
+ });
141
+ }
142
+ return success(validationResult.output);
143
+ }
144
+
145
+ // src/stacks-api/blocks/index.ts
146
+ var blocks_exports = {};
147
+ __export(blocks_exports, {
148
+ getBlock: () => getBlock
149
+ });
150
+
151
+ // src/stacks-api/types.ts
152
+ var v2 = __toESM(require("valibot"), 1);
153
+ var baseListResponseSchema = v2.object({
154
+ limit: v2.number(),
155
+ offset: v2.number(),
156
+ total: v2.number(),
157
+ results: v2.array(v2.unknown())
158
+ });
159
+
160
+ // src/stacks-api/blocks/get-block.ts
161
+ var v3 = __toESM(require("valibot"), 1);
162
+ var responseSchema2 = v3.object({
163
+ canonical: v3.boolean(),
164
+ height: v3.number(),
165
+ hash: v3.string(),
166
+ block_time: v3.number(),
167
+ block_time_iso: v3.string(),
168
+ index_block_hash: v3.string(),
169
+ parent_block_hash: v3.string(),
170
+ parent_index_block_hash: v3.string(),
171
+ burn_block_time: v3.number(),
172
+ burn_block_time_iso: v3.string(),
173
+ burn_block_hash: v3.string(),
174
+ burn_block_height: v3.number(),
175
+ miner_txid: v3.string(),
176
+ tx_count: v3.number(),
177
+ execution_cost_read_count: v3.number(),
178
+ execution_cost_read_length: v3.number(),
179
+ execution_cost_runtime: v3.number(),
180
+ execution_cost_write_count: v3.number(),
181
+ execution_cost_write_length: v3.number()
182
+ });
183
+ async function getBlock(opts) {
184
+ const init = {};
185
+ if (opts.apiKeyConfig) {
186
+ init.headers = {
187
+ [opts.apiKeyConfig.header]: opts.apiKeyConfig.key
188
+ };
189
+ }
190
+ const res = await fetch(
191
+ `${opts.baseUrl}/extended/v2/blocks/${opts.heightOrHash}`,
192
+ init
193
+ );
194
+ if (!res.ok) {
195
+ return error({
196
+ name: "FetchBlockError",
197
+ message: "Failed to fetch block.",
198
+ data: {
199
+ status: res.status,
200
+ statusText: res.statusText,
201
+ bodyParseResult: await safePromise(res.json())
202
+ }
203
+ });
204
+ }
205
+ const [jsonError, data] = await safePromise(res.json());
206
+ if (jsonError) {
207
+ return error({
208
+ name: "ParseBodyError",
209
+ message: "Failed to parse body.",
210
+ data: jsonError
211
+ });
212
+ }
213
+ const validationResult = v3.safeParse(responseSchema2, data);
214
+ if (!validationResult.success) {
215
+ return error({
216
+ name: "ValidateDataError",
217
+ message: "Failed to validate data.",
218
+ data: validationResult
219
+ });
220
+ }
221
+ return success(validationResult.output);
222
+ }
223
+
224
+ // src/stacks-api/info/index.ts
225
+ var info_exports = {};
226
+ __export(info_exports, {
227
+ coreApi: () => coreApi,
228
+ poxDetails: () => poxDetails
229
+ });
230
+
231
+ // src/stacks-api/info/core-api.ts
232
+ var v4 = __toESM(require("valibot"), 1);
233
+ var CoreApiResponseSchema = v4.object({
234
+ peer_version: v4.number(),
235
+ pox_consensus: v4.string(),
236
+ burn_block_height: v4.number(),
237
+ stable_pox_consensus: v4.string(),
238
+ stable_burn_block_height: v4.number(),
239
+ server_version: v4.string(),
240
+ network_id: v4.number(),
241
+ parent_network_id: v4.number(),
242
+ stacks_tip_height: v4.number(),
243
+ stacks_tip: v4.string(),
244
+ stacks_tip_consensus_hash: v4.string(),
245
+ unanchored_tip: v4.string(),
246
+ exit_at_block_height: v4.number()
247
+ });
248
+ async function coreApi(apiOpts) {
249
+ const init = {};
250
+ if (apiOpts.apiKeyConfig) {
251
+ init.headers = {
252
+ [apiOpts.apiKeyConfig.header]: apiOpts.apiKeyConfig.key
253
+ };
254
+ }
255
+ const res = await fetch(`${apiOpts.baseUrl}/v2/info`, init);
256
+ if (!res.ok) {
257
+ return error({
258
+ name: "FetchCoreApiError",
259
+ message: "Failed to fetch.",
260
+ data: {
261
+ status: res.status,
262
+ statusText: res.statusText,
263
+ bodyParseResult: await safePromise(res.json())
264
+ }
265
+ });
266
+ }
267
+ const [parseBodyError, data] = await safePromise(res.json());
268
+ if (parseBodyError) {
269
+ return error({
270
+ name: "ParseBodyError",
271
+ message: "Failed to parse response body as JSON.",
272
+ data: parseBodyError
273
+ });
274
+ }
275
+ const validationResult = v4.safeParse(CoreApiResponseSchema, data);
276
+ if (!validationResult.success) {
277
+ return error({
278
+ name: "ValidateDataError",
279
+ message: "Failed to validate data.",
280
+ data: validationResult
281
+ });
282
+ }
283
+ return success(validationResult.output);
284
+ }
285
+
286
+ // src/stacks-api/info/pox-details.ts
287
+ var v5 = __toESM(require("valibot"), 1);
288
+ var poxDetailsResponseSchema = v5.object({
289
+ contract_id: v5.string(),
290
+ pox_activation_threshold_ustx: v5.number(),
291
+ first_burnchain_block_height: v5.number(),
292
+ current_burnchain_block_height: v5.number(),
293
+ prepare_phase_block_length: v5.number(),
294
+ reward_phase_block_length: v5.number(),
295
+ reward_slots: v5.number(),
296
+ rejection_fraction: v5.null(),
297
+ total_liquid_supply_ustx: v5.number(),
298
+ current_cycle: v5.object({
299
+ id: v5.number(),
300
+ min_threshold_ustx: v5.number(),
301
+ stacked_ustx: v5.number(),
302
+ is_pox_active: v5.boolean()
303
+ }),
304
+ next_cycle: v5.object({
305
+ id: v5.number(),
306
+ min_threshold_ustx: v5.number(),
307
+ min_increment_ustx: v5.number(),
308
+ stacked_ustx: v5.number(),
309
+ prepare_phase_start_block_height: v5.number(),
310
+ blocks_until_prepare_phase: v5.number(),
311
+ reward_phase_start_block_height: v5.number(),
312
+ blocks_until_reward_phase: v5.number(),
313
+ ustx_until_pox_rejection: v5.null()
314
+ }),
315
+ epochs: v5.array(
316
+ v5.object({
317
+ epoch_id: v5.string(),
318
+ start_height: v5.number(),
319
+ end_height: v5.number(),
320
+ block_limit: v5.object({
321
+ write_length: v5.number(),
322
+ write_count: v5.number(),
323
+ read_length: v5.number(),
324
+ read_count: v5.number(),
325
+ runtime: v5.number()
326
+ }),
327
+ network_epoch: v5.number()
328
+ })
329
+ ),
330
+ min_amount_ustx: v5.number(),
331
+ prepare_cycle_length: v5.number(),
332
+ reward_cycle_id: v5.number(),
333
+ reward_cycle_length: v5.number(),
334
+ rejection_votes_left_required: v5.null(),
335
+ next_reward_cycle_in: v5.number(),
336
+ contract_versions: v5.array(
337
+ v5.object({
338
+ contract_id: v5.string(),
339
+ activation_burnchain_block_height: v5.number(),
340
+ first_reward_cycle_id: v5.number()
341
+ })
342
+ )
343
+ });
344
+ async function poxDetails(args) {
345
+ const init = {};
346
+ if (args.apiKeyConfig) {
347
+ init.headers = {
348
+ [args.apiKeyConfig.header]: args.apiKeyConfig.key
349
+ };
350
+ }
351
+ const res = await fetch(`${args.baseUrl}/v2/pox`, init);
352
+ if (!res.ok) {
353
+ return error({
354
+ name: "FetchPoxDetailsError",
355
+ message: "Failed to fetch pox details.",
356
+ data: {
357
+ status: res.status,
358
+ statusText: res.statusText,
359
+ bodyParseResult: await safePromise(res.json())
360
+ }
361
+ });
362
+ }
363
+ const [jsonParseError, data] = await safePromise(res.json());
364
+ if (jsonParseError) {
365
+ return error({
366
+ name: "ParseBodyError",
367
+ message: "Failed to parse pox details response.",
368
+ data: jsonParseError
369
+ });
370
+ }
371
+ const validationResult = v5.safeParse(poxDetailsResponseSchema, data);
372
+ if (!validationResult.success) {
373
+ return error({
374
+ name: "ValidateDataError",
375
+ message: "Failed to parse pox details response.",
376
+ data: validationResult
377
+ });
378
+ }
379
+ return success(validationResult.output);
380
+ }
381
+
382
+ // src/stacks-api/proof-of-transfer/index.ts
383
+ var proof_of_transfer_exports = {};
384
+ __export(proof_of_transfer_exports, {
385
+ cycle: () => cycle,
386
+ cycles: () => cycles,
387
+ signerInCycle: () => signerInCycle,
388
+ signersInCycle: () => signersInCycle,
389
+ stackersForSignerInCycle: () => stackersForSignerInCycle
390
+ });
391
+
392
+ // src/stacks-api/proof-of-transfer/cycle.ts
393
+ var v6 = __toESM(require("valibot"), 1);
394
+ var responseSchema3 = v6.object({
395
+ block_height: v6.number(),
396
+ index_block_hash: v6.string(),
397
+ cycle_number: v6.number(),
398
+ total_weight: v6.number(),
399
+ total_stacked_amount: v6.string(),
400
+ total_signers: v6.number()
401
+ });
402
+ async function cycle(opts) {
403
+ const init = {};
404
+ if (opts.apiKeyConfig) {
405
+ init.headers = {
406
+ [opts.apiKeyConfig.header]: opts.apiKeyConfig.key
407
+ };
408
+ }
409
+ const endpoint = `${opts.baseUrl}/extended/v2/pox/cycles/${opts.cycleNumber}`;
410
+ const res = await fetch(endpoint, init);
411
+ if (!res.ok) {
412
+ return error({
413
+ name: "FetchCycleError",
414
+ message: "Failed to fetch cycle.",
415
+ data: {
416
+ endpoint,
417
+ status: res.status,
418
+ statusText: res.statusText,
419
+ bodyParseResult: await safePromise(res.json())
420
+ }
421
+ });
422
+ }
423
+ const [jsonError, data] = await safePromise(res.json());
424
+ if (jsonError) {
425
+ return error({
426
+ name: "ParseBodyError",
427
+ message: "Failed to parse response body as JSON.",
428
+ data: jsonError
429
+ });
430
+ }
431
+ const validationResult = v6.safeParse(responseSchema3, data);
432
+ if (!validationResult.success) {
433
+ return error({
434
+ name: "ValidateDataError",
435
+ message: "Failed to validate data.",
436
+ data: validationResult
437
+ });
438
+ }
439
+ return success(validationResult.output);
440
+ }
441
+
442
+ // src/stacks-api/proof-of-transfer/cycles.ts
443
+ var v7 = __toESM(require("valibot"), 1);
444
+ var cycleInfoSchema = v7.object({
445
+ block_height: v7.number(),
446
+ index_block_hash: v7.string(),
447
+ cycle_number: v7.number(),
448
+ total_weight: v7.number(),
449
+ total_stacked_amount: v7.string(),
450
+ total_signers: v7.number()
451
+ });
452
+ var resultsSchema = v7.array(cycleInfoSchema);
453
+ var cyclesResponseSchema = v7.object({
454
+ ...baseListResponseSchema.entries,
455
+ results: resultsSchema
456
+ });
457
+ async function cycles(args) {
458
+ const search = new URLSearchParams();
459
+ if (args.limit) search.append("limit", args.limit.toString());
460
+ if (args.offset) search.append("offset", args.offset.toString());
461
+ const init = {};
462
+ if (args.apiKeyConfig) {
463
+ init.headers = {
464
+ [args.apiKeyConfig.header]: args.apiKeyConfig.key
465
+ };
466
+ }
467
+ const endpoint = `${args.baseUrl}/extended/v2/pox/cycles`;
468
+ const res = await fetch(endpoint, init);
469
+ if (!res.ok) {
470
+ return error({
471
+ name: "FetchCyclesError",
472
+ message: "Failed to fetch cycles.",
473
+ data: {
474
+ endpoint,
475
+ status: res.status,
476
+ statusText: res.statusText,
477
+ bodyParseResult: await safePromise(res.json())
478
+ }
479
+ });
480
+ }
481
+ const [jsonError, data] = await safePromise(res.json());
482
+ if (jsonError) {
483
+ return error({
484
+ name: "ParseBodyError",
485
+ message: "Failed to parse response body as JSON.",
486
+ data: jsonError
487
+ });
488
+ }
489
+ const validationResult = v7.safeParse(cyclesResponseSchema, data);
490
+ if (!validationResult.success) {
491
+ return error({
492
+ name: "ValidateDataError",
493
+ message: "Failed to validate response data.",
494
+ data: validationResult
495
+ });
496
+ }
497
+ return success(validationResult.output);
498
+ }
499
+
500
+ // src/stacks-api/proof-of-transfer/signer-in-cycle.ts
501
+ var v8 = __toESM(require("valibot"), 1);
502
+ var signerInCycleResponseSchema = v8.object({
503
+ signing_key: v8.string(),
504
+ signer_address: v8.string(),
505
+ weight: v8.number(),
506
+ stacked_amount: v8.string(),
507
+ weight_percent: v8.number(),
508
+ stacked_amount_percent: v8.number(),
509
+ solo_stacker_count: v8.number(),
510
+ pooled_stacker_count: v8.number()
511
+ });
512
+ async function signerInCycle(args) {
513
+ const init = {};
514
+ if (args.apiKeyConfig) {
515
+ init.headers = {
516
+ [args.apiKeyConfig.header]: args.apiKeyConfig.key
517
+ };
518
+ }
519
+ const signerPublicKey = args.signerPublicKey.startsWith("0x") ? args.signerPublicKey : `0x${args.signerPublicKey}`;
520
+ const endpoint = `${args.baseUrl}/extended/v2/pox/cycles/${args.cycleId}/signers/${signerPublicKey}`;
521
+ const res = await fetch(endpoint, init);
522
+ if (!res.ok) {
523
+ return error({
524
+ name: "FetchSignerInCycleError",
525
+ message: "Failed to fetch signer in cycle.",
526
+ data: {
527
+ ...args,
528
+ endpoint,
529
+ status: res.status,
530
+ statusText: res.statusText
531
+ }
532
+ });
533
+ }
534
+ const [jsonError, data] = await safePromise(res.json());
535
+ if (jsonError) {
536
+ return error({
537
+ name: "ParseBodyError",
538
+ message: "Failed to parse response body.",
539
+ data: {
540
+ signerPublicKey: args.signerPublicKey,
541
+ cycleId: args.cycleId,
542
+ jsonError
543
+ }
544
+ });
545
+ }
546
+ const validationResult = v8.safeParse(signerInCycleResponseSchema, data);
547
+ if (!validationResult.success) {
548
+ return error({
549
+ name: "ValidateDataError",
550
+ message: "Failed to validate response data.",
551
+ data: validationResult.issues
552
+ });
553
+ }
554
+ return success(validationResult.output);
555
+ }
556
+
557
+ // src/stacks-api/proof-of-transfer/signers-in-cycle.ts
558
+ var v9 = __toESM(require("valibot"), 1);
559
+ var signerSchema = v9.object({
560
+ signing_key: v9.string(),
561
+ signer_address: v9.string(),
562
+ weight: v9.number(),
563
+ stacked_amount: v9.string(),
564
+ weight_percent: v9.number(),
565
+ stacked_amount_percent: v9.number(),
566
+ pooled_stacker_count: v9.number(),
567
+ solo_stacker_count: v9.number()
568
+ });
569
+ var resultsSchema2 = v9.array(signerSchema);
570
+ var signersResponseSchema = v9.object({
571
+ ...baseListResponseSchema.entries,
572
+ results: resultsSchema2
573
+ });
574
+ async function signersInCycle(args) {
575
+ const search = new URLSearchParams();
576
+ if (args.limit) search.append("limit", args.limit.toString());
577
+ if (args.offset) search.append("offset", args.offset.toString());
578
+ const init = {};
579
+ if (args.apiKeyConfig) {
580
+ init.headers = {
581
+ [args.apiKeyConfig.header]: args.apiKeyConfig.key
582
+ };
583
+ }
584
+ const endpoint = `${args.baseUrl}/extended/v2/pox/cycles/${args.cycleNumber}/signers`;
585
+ const res = await fetch(endpoint, init);
586
+ if (!res.ok) {
587
+ return error({
588
+ name: "FetchSignersError",
589
+ message: "Failed to fetch signers.",
590
+ data: {
591
+ endpoint,
592
+ status: res.status,
593
+ statusText: res.statusText,
594
+ bodyParseResult: await safePromise(res.json())
595
+ }
596
+ });
597
+ }
598
+ const [jsonError, data] = await safePromise(res.json());
599
+ if (jsonError) {
600
+ return error({
601
+ name: "ParseBodyError",
602
+ message: "Failed to parse response body as JSON.",
603
+ data: {
604
+ endpoint,
605
+ bodyParseResult: data
606
+ }
607
+ });
608
+ }
609
+ const validationResult = v9.safeParse(signersResponseSchema, data);
610
+ if (!validationResult.success) {
611
+ return error({
612
+ name: "ValidateDataError",
613
+ message: "Failed to validate response data.",
614
+ data: validationResult
615
+ });
616
+ }
617
+ return success(validationResult.output);
618
+ }
619
+
620
+ // src/stacks-api/proof-of-transfer/stackers-for-signer-in-cycle.ts
621
+ var v10 = __toESM(require("valibot"), 1);
622
+ var stackerInfoSchema = v10.object({
623
+ stacker_address: v10.string(),
624
+ stacked_amount: v10.string(),
625
+ pox_address: v10.string(),
626
+ stacker_type: v10.union([v10.literal("pooled"), v10.literal("solo")])
627
+ });
628
+ var resultsSchema3 = v10.array(stackerInfoSchema);
629
+ var stackersForSignerInCycleResponseSchema = v10.object({
630
+ ...baseListResponseSchema.entries,
631
+ results: resultsSchema3
632
+ });
633
+ async function stackersForSignerInCycle(opts) {
634
+ const search = new URLSearchParams();
635
+ if (opts.limit) search.append("limit", opts.limit.toString());
636
+ if (opts.offset) search.append("offset", opts.offset.toString());
637
+ const init = {};
638
+ if (opts.apiKeyConfig) {
639
+ init.headers = {
640
+ [opts.apiKeyConfig.header]: opts.apiKeyConfig.key
641
+ };
642
+ }
643
+ const endpoint = `${opts.baseUrl}/extended/v2/pox/cycles/${opts.cycleNumber}/signers/${opts.signerPublicKey}/stackers?${search}`;
644
+ const res = await fetch(endpoint, init);
645
+ if (!res.ok) {
646
+ return error({
647
+ name: "FetchStackersForSignerInCycleError",
648
+ message: "Failed to fetch stackers for signer in cycle.",
649
+ data: {
650
+ endpoint,
651
+ status: res.status,
652
+ statusText: res.statusText,
653
+ bodyParseResult: await safePromise(res.json())
654
+ }
655
+ });
656
+ }
657
+ const [jsonError, data] = await safePromise(res.json());
658
+ if (jsonError) {
659
+ return error({
660
+ name: "ParseBodyError",
661
+ message: "Failed to parse response body as JSON.",
662
+ data: jsonError
663
+ });
664
+ }
665
+ const validationResult = v10.safeParse(
666
+ stackersForSignerInCycleResponseSchema,
667
+ data
668
+ );
669
+ if (!validationResult.success) {
670
+ return error({
671
+ name: "ValidateDataError",
672
+ message: "Failed to validate response data.",
673
+ data: validationResult
674
+ });
675
+ }
676
+ return success(validationResult.output);
677
+ }
678
+ // Annotate the CommonJS export names for ESM import in node:
679
+ 0 && (module.exports = {
680
+ stacksApi
681
+ });