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