@secretkeylabs/stacks-tools 0.4.0-afcaa14 → 0.4.0-de2b6d9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +343 -270
- package/dist/index.d.cts +274 -51
- package/dist/index.d.ts +274 -51
- package/dist/index.js +343 -270
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -102,37 +102,86 @@ async function balances(opts) {
|
|
|
102
102
|
return success(validationResult.output);
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
-
// src/stacks-api/
|
|
105
|
+
// src/stacks-api/accounts/latest-nonce.ts
|
|
106
106
|
import * as v2 from "valibot";
|
|
107
|
-
var
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
107
|
+
var responseSchema2 = v2.object({
|
|
108
|
+
last_mempool_tx_nonce: v2.nullable(v2.number()),
|
|
109
|
+
last_executed_tx_nonce: v2.nullable(v2.number()),
|
|
110
|
+
possible_next_nonce: v2.number(),
|
|
111
|
+
detected_missing_nonces: v2.array(v2.number()),
|
|
112
|
+
detected_mempool_nonces: v2.array(v2.number())
|
|
112
113
|
});
|
|
114
|
+
async function latestNonce(opts) {
|
|
115
|
+
const init = {};
|
|
116
|
+
if (opts.apiKeyConfig) {
|
|
117
|
+
init.headers = {
|
|
118
|
+
[opts.apiKeyConfig.header]: opts.apiKeyConfig.key
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
const endpoint = `${opts.baseUrl}/extended/v1/address/${opts.principal}/nonces`;
|
|
122
|
+
const res = await fetch(endpoint, init);
|
|
123
|
+
if (!res.ok) {
|
|
124
|
+
return error({
|
|
125
|
+
name: "FetchLatestNonceError",
|
|
126
|
+
message: "Failed to fetch latest nonce.",
|
|
127
|
+
data: {
|
|
128
|
+
endpoint,
|
|
129
|
+
status: res.status,
|
|
130
|
+
statusText: res.statusText,
|
|
131
|
+
bodyParseResult: await safePromise(res.json())
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
const [jsonError, data] = await safePromise(res.json());
|
|
136
|
+
if (jsonError) {
|
|
137
|
+
return error({
|
|
138
|
+
name: "ParseBodyError",
|
|
139
|
+
message: "Failed to parse response body as JSON.",
|
|
140
|
+
data: jsonError
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
const validationResult = v2.safeParse(responseSchema2, data);
|
|
144
|
+
if (!validationResult.success) {
|
|
145
|
+
return error({
|
|
146
|
+
name: "ValidateDataError",
|
|
147
|
+
message: "Failed to validate data.",
|
|
148
|
+
data: validationResult
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
return success(validationResult.output);
|
|
152
|
+
}
|
|
113
153
|
|
|
114
|
-
// src/stacks-api/
|
|
154
|
+
// src/stacks-api/types.ts
|
|
115
155
|
import * as v3 from "valibot";
|
|
116
|
-
var
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
156
|
+
var baseListResponseSchema = v3.object({
|
|
157
|
+
limit: v3.number(),
|
|
158
|
+
offset: v3.number(),
|
|
159
|
+
total: v3.number(),
|
|
160
|
+
results: v3.array(v3.unknown())
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
// src/stacks-api/blocks/get-block.ts
|
|
164
|
+
import * as v4 from "valibot";
|
|
165
|
+
var responseSchema3 = v4.object({
|
|
166
|
+
canonical: v4.boolean(),
|
|
167
|
+
height: v4.number(),
|
|
168
|
+
hash: v4.string(),
|
|
169
|
+
block_time: v4.number(),
|
|
170
|
+
block_time_iso: v4.string(),
|
|
171
|
+
index_block_hash: v4.string(),
|
|
172
|
+
parent_block_hash: v4.string(),
|
|
173
|
+
parent_index_block_hash: v4.string(),
|
|
174
|
+
burn_block_time: v4.number(),
|
|
175
|
+
burn_block_time_iso: v4.string(),
|
|
176
|
+
burn_block_hash: v4.string(),
|
|
177
|
+
burn_block_height: v4.number(),
|
|
178
|
+
miner_txid: v4.string(),
|
|
179
|
+
tx_count: v4.number(),
|
|
180
|
+
execution_cost_read_count: v4.number(),
|
|
181
|
+
execution_cost_read_length: v4.number(),
|
|
182
|
+
execution_cost_runtime: v4.number(),
|
|
183
|
+
execution_cost_write_count: v4.number(),
|
|
184
|
+
execution_cost_write_length: v4.number()
|
|
136
185
|
});
|
|
137
186
|
async function getBlock(opts) {
|
|
138
187
|
const init = {};
|
|
@@ -164,7 +213,7 @@ async function getBlock(opts) {
|
|
|
164
213
|
data: jsonError
|
|
165
214
|
});
|
|
166
215
|
}
|
|
167
|
-
const validationResult =
|
|
216
|
+
const validationResult = v4.safeParse(responseSchema3, data);
|
|
168
217
|
if (!validationResult.success) {
|
|
169
218
|
return error({
|
|
170
219
|
name: "ValidateDataError",
|
|
@@ -176,21 +225,22 @@ async function getBlock(opts) {
|
|
|
176
225
|
}
|
|
177
226
|
|
|
178
227
|
// src/stacks-api/info/core-api.ts
|
|
179
|
-
import * as
|
|
180
|
-
var CoreApiResponseSchema =
|
|
181
|
-
peer_version:
|
|
182
|
-
pox_consensus:
|
|
183
|
-
burn_block_height:
|
|
184
|
-
stable_pox_consensus:
|
|
185
|
-
stable_burn_block_height:
|
|
186
|
-
server_version:
|
|
187
|
-
network_id:
|
|
188
|
-
parent_network_id:
|
|
189
|
-
stacks_tip_height:
|
|
190
|
-
stacks_tip:
|
|
191
|
-
stacks_tip_consensus_hash:
|
|
192
|
-
unanchored_tip:
|
|
193
|
-
|
|
228
|
+
import * as v5 from "valibot";
|
|
229
|
+
var CoreApiResponseSchema = v5.object({
|
|
230
|
+
peer_version: v5.number(),
|
|
231
|
+
pox_consensus: v5.string(),
|
|
232
|
+
burn_block_height: v5.number(),
|
|
233
|
+
stable_pox_consensus: v5.string(),
|
|
234
|
+
stable_burn_block_height: v5.number(),
|
|
235
|
+
server_version: v5.string(),
|
|
236
|
+
network_id: v5.number(),
|
|
237
|
+
parent_network_id: v5.number(),
|
|
238
|
+
stacks_tip_height: v5.number(),
|
|
239
|
+
stacks_tip: v5.string(),
|
|
240
|
+
stacks_tip_consensus_hash: v5.string(),
|
|
241
|
+
unanchored_tip: v5.nullable(v5.string()),
|
|
242
|
+
unanchored_seq: v5.nullable(v5.string()),
|
|
243
|
+
exit_at_block_height: v5.nullable(v5.number())
|
|
194
244
|
});
|
|
195
245
|
async function coreApi(apiOpts) {
|
|
196
246
|
const init = {};
|
|
@@ -219,7 +269,7 @@ async function coreApi(apiOpts) {
|
|
|
219
269
|
data: parseBodyError
|
|
220
270
|
});
|
|
221
271
|
}
|
|
222
|
-
const validationResult =
|
|
272
|
+
const validationResult = v5.safeParse(CoreApiResponseSchema, data);
|
|
223
273
|
if (!validationResult.success) {
|
|
224
274
|
return error({
|
|
225
275
|
name: "ValidateDataError",
|
|
@@ -231,60 +281,60 @@ async function coreApi(apiOpts) {
|
|
|
231
281
|
}
|
|
232
282
|
|
|
233
283
|
// src/stacks-api/info/pox-details.ts
|
|
234
|
-
import * as
|
|
235
|
-
var poxDetailsResponseSchema =
|
|
236
|
-
contract_id:
|
|
237
|
-
pox_activation_threshold_ustx:
|
|
238
|
-
first_burnchain_block_height:
|
|
239
|
-
current_burnchain_block_height:
|
|
240
|
-
prepare_phase_block_length:
|
|
241
|
-
reward_phase_block_length:
|
|
242
|
-
reward_slots:
|
|
243
|
-
rejection_fraction:
|
|
244
|
-
total_liquid_supply_ustx:
|
|
245
|
-
current_cycle:
|
|
246
|
-
id:
|
|
247
|
-
min_threshold_ustx:
|
|
248
|
-
stacked_ustx:
|
|
249
|
-
is_pox_active:
|
|
284
|
+
import * as v6 from "valibot";
|
|
285
|
+
var poxDetailsResponseSchema = v6.object({
|
|
286
|
+
contract_id: v6.string(),
|
|
287
|
+
pox_activation_threshold_ustx: v6.number(),
|
|
288
|
+
first_burnchain_block_height: v6.number(),
|
|
289
|
+
current_burnchain_block_height: v6.number(),
|
|
290
|
+
prepare_phase_block_length: v6.number(),
|
|
291
|
+
reward_phase_block_length: v6.number(),
|
|
292
|
+
reward_slots: v6.number(),
|
|
293
|
+
rejection_fraction: v6.null(),
|
|
294
|
+
total_liquid_supply_ustx: v6.number(),
|
|
295
|
+
current_cycle: v6.object({
|
|
296
|
+
id: v6.number(),
|
|
297
|
+
min_threshold_ustx: v6.number(),
|
|
298
|
+
stacked_ustx: v6.number(),
|
|
299
|
+
is_pox_active: v6.boolean()
|
|
250
300
|
}),
|
|
251
|
-
next_cycle:
|
|
252
|
-
id:
|
|
253
|
-
min_threshold_ustx:
|
|
254
|
-
min_increment_ustx:
|
|
255
|
-
stacked_ustx:
|
|
256
|
-
prepare_phase_start_block_height:
|
|
257
|
-
blocks_until_prepare_phase:
|
|
258
|
-
reward_phase_start_block_height:
|
|
259
|
-
blocks_until_reward_phase:
|
|
260
|
-
ustx_until_pox_rejection:
|
|
301
|
+
next_cycle: v6.object({
|
|
302
|
+
id: v6.number(),
|
|
303
|
+
min_threshold_ustx: v6.number(),
|
|
304
|
+
min_increment_ustx: v6.number(),
|
|
305
|
+
stacked_ustx: v6.number(),
|
|
306
|
+
prepare_phase_start_block_height: v6.number(),
|
|
307
|
+
blocks_until_prepare_phase: v6.number(),
|
|
308
|
+
reward_phase_start_block_height: v6.number(),
|
|
309
|
+
blocks_until_reward_phase: v6.number(),
|
|
310
|
+
ustx_until_pox_rejection: v6.null()
|
|
261
311
|
}),
|
|
262
|
-
epochs:
|
|
263
|
-
|
|
264
|
-
epoch_id:
|
|
265
|
-
start_height:
|
|
266
|
-
end_height:
|
|
267
|
-
block_limit:
|
|
268
|
-
write_length:
|
|
269
|
-
write_count:
|
|
270
|
-
read_length:
|
|
271
|
-
read_count:
|
|
272
|
-
runtime:
|
|
312
|
+
epochs: v6.array(
|
|
313
|
+
v6.object({
|
|
314
|
+
epoch_id: v6.string(),
|
|
315
|
+
start_height: v6.number(),
|
|
316
|
+
end_height: v6.number(),
|
|
317
|
+
block_limit: v6.object({
|
|
318
|
+
write_length: v6.number(),
|
|
319
|
+
write_count: v6.number(),
|
|
320
|
+
read_length: v6.number(),
|
|
321
|
+
read_count: v6.number(),
|
|
322
|
+
runtime: v6.number()
|
|
273
323
|
}),
|
|
274
|
-
network_epoch:
|
|
324
|
+
network_epoch: v6.number()
|
|
275
325
|
})
|
|
276
326
|
),
|
|
277
|
-
min_amount_ustx:
|
|
278
|
-
prepare_cycle_length:
|
|
279
|
-
reward_cycle_id:
|
|
280
|
-
reward_cycle_length:
|
|
281
|
-
rejection_votes_left_required:
|
|
282
|
-
next_reward_cycle_in:
|
|
283
|
-
contract_versions:
|
|
284
|
-
|
|
285
|
-
contract_id:
|
|
286
|
-
activation_burnchain_block_height:
|
|
287
|
-
first_reward_cycle_id:
|
|
327
|
+
min_amount_ustx: v6.number(),
|
|
328
|
+
prepare_cycle_length: v6.number(),
|
|
329
|
+
reward_cycle_id: v6.number(),
|
|
330
|
+
reward_cycle_length: v6.number(),
|
|
331
|
+
rejection_votes_left_required: v6.null(),
|
|
332
|
+
next_reward_cycle_in: v6.number(),
|
|
333
|
+
contract_versions: v6.array(
|
|
334
|
+
v6.object({
|
|
335
|
+
contract_id: v6.string(),
|
|
336
|
+
activation_burnchain_block_height: v6.number(),
|
|
337
|
+
first_reward_cycle_id: v6.number()
|
|
288
338
|
})
|
|
289
339
|
)
|
|
290
340
|
});
|
|
@@ -315,7 +365,7 @@ async function poxDetails(args) {
|
|
|
315
365
|
data: jsonParseError
|
|
316
366
|
});
|
|
317
367
|
}
|
|
318
|
-
const validationResult =
|
|
368
|
+
const validationResult = v6.safeParse(poxDetailsResponseSchema, data);
|
|
319
369
|
if (!validationResult.success) {
|
|
320
370
|
return error({
|
|
321
371
|
name: "ValidateDataError",
|
|
@@ -327,14 +377,14 @@ async function poxDetails(args) {
|
|
|
327
377
|
}
|
|
328
378
|
|
|
329
379
|
// src/stacks-api/proof-of-transfer/cycle.ts
|
|
330
|
-
import * as
|
|
331
|
-
var
|
|
332
|
-
block_height:
|
|
333
|
-
index_block_hash:
|
|
334
|
-
cycle_number:
|
|
335
|
-
total_weight:
|
|
336
|
-
total_stacked_amount:
|
|
337
|
-
total_signers:
|
|
380
|
+
import * as v7 from "valibot";
|
|
381
|
+
var responseSchema4 = v7.object({
|
|
382
|
+
block_height: v7.number(),
|
|
383
|
+
index_block_hash: v7.string(),
|
|
384
|
+
cycle_number: v7.number(),
|
|
385
|
+
total_weight: v7.number(),
|
|
386
|
+
total_stacked_amount: v7.string(),
|
|
387
|
+
total_signers: v7.number()
|
|
338
388
|
});
|
|
339
389
|
async function cycle(opts) {
|
|
340
390
|
const init = {};
|
|
@@ -365,7 +415,7 @@ async function cycle(opts) {
|
|
|
365
415
|
data: jsonError
|
|
366
416
|
});
|
|
367
417
|
}
|
|
368
|
-
const validationResult =
|
|
418
|
+
const validationResult = v7.safeParse(responseSchema4, data);
|
|
369
419
|
if (!validationResult.success) {
|
|
370
420
|
return error({
|
|
371
421
|
name: "ValidateDataError",
|
|
@@ -377,17 +427,17 @@ async function cycle(opts) {
|
|
|
377
427
|
}
|
|
378
428
|
|
|
379
429
|
// src/stacks-api/proof-of-transfer/cycles.ts
|
|
380
|
-
import * as
|
|
381
|
-
var cycleInfoSchema =
|
|
382
|
-
block_height:
|
|
383
|
-
index_block_hash:
|
|
384
|
-
cycle_number:
|
|
385
|
-
total_weight:
|
|
386
|
-
total_stacked_amount:
|
|
387
|
-
total_signers:
|
|
430
|
+
import * as v8 from "valibot";
|
|
431
|
+
var cycleInfoSchema = v8.object({
|
|
432
|
+
block_height: v8.number(),
|
|
433
|
+
index_block_hash: v8.string(),
|
|
434
|
+
cycle_number: v8.number(),
|
|
435
|
+
total_weight: v8.number(),
|
|
436
|
+
total_stacked_amount: v8.string(),
|
|
437
|
+
total_signers: v8.number()
|
|
388
438
|
});
|
|
389
|
-
var resultsSchema =
|
|
390
|
-
var cyclesResponseSchema =
|
|
439
|
+
var resultsSchema = v8.array(cycleInfoSchema);
|
|
440
|
+
var cyclesResponseSchema = v8.object({
|
|
391
441
|
...baseListResponseSchema.entries,
|
|
392
442
|
results: resultsSchema
|
|
393
443
|
});
|
|
@@ -423,7 +473,7 @@ async function cycles(args) {
|
|
|
423
473
|
data: jsonError
|
|
424
474
|
});
|
|
425
475
|
}
|
|
426
|
-
const validationResult =
|
|
476
|
+
const validationResult = v8.safeParse(cyclesResponseSchema, data);
|
|
427
477
|
if (!validationResult.success) {
|
|
428
478
|
return error({
|
|
429
479
|
name: "ValidateDataError",
|
|
@@ -435,16 +485,16 @@ async function cycles(args) {
|
|
|
435
485
|
}
|
|
436
486
|
|
|
437
487
|
// src/stacks-api/proof-of-transfer/signer-in-cycle.ts
|
|
438
|
-
import * as
|
|
439
|
-
var signerInCycleResponseSchema =
|
|
440
|
-
signing_key:
|
|
441
|
-
signer_address:
|
|
442
|
-
weight:
|
|
443
|
-
stacked_amount:
|
|
444
|
-
weight_percent:
|
|
445
|
-
stacked_amount_percent:
|
|
446
|
-
solo_stacker_count:
|
|
447
|
-
pooled_stacker_count:
|
|
488
|
+
import * as v9 from "valibot";
|
|
489
|
+
var signerInCycleResponseSchema = v9.object({
|
|
490
|
+
signing_key: v9.string(),
|
|
491
|
+
signer_address: v9.string(),
|
|
492
|
+
weight: v9.number(),
|
|
493
|
+
stacked_amount: v9.string(),
|
|
494
|
+
weight_percent: v9.number(),
|
|
495
|
+
stacked_amount_percent: v9.number(),
|
|
496
|
+
solo_stacker_count: v9.number(),
|
|
497
|
+
pooled_stacker_count: v9.number()
|
|
448
498
|
});
|
|
449
499
|
async function signerInCycle(args) {
|
|
450
500
|
const init = {};
|
|
@@ -480,7 +530,7 @@ async function signerInCycle(args) {
|
|
|
480
530
|
}
|
|
481
531
|
});
|
|
482
532
|
}
|
|
483
|
-
const validationResult =
|
|
533
|
+
const validationResult = v9.safeParse(signerInCycleResponseSchema, data);
|
|
484
534
|
if (!validationResult.success) {
|
|
485
535
|
return error({
|
|
486
536
|
name: "ValidateDataError",
|
|
@@ -492,19 +542,19 @@ async function signerInCycle(args) {
|
|
|
492
542
|
}
|
|
493
543
|
|
|
494
544
|
// src/stacks-api/proof-of-transfer/signers-in-cycle.ts
|
|
495
|
-
import * as
|
|
496
|
-
var signerSchema =
|
|
497
|
-
signing_key:
|
|
498
|
-
signer_address:
|
|
499
|
-
weight:
|
|
500
|
-
stacked_amount:
|
|
501
|
-
weight_percent:
|
|
502
|
-
stacked_amount_percent:
|
|
503
|
-
pooled_stacker_count:
|
|
504
|
-
solo_stacker_count:
|
|
545
|
+
import * as v10 from "valibot";
|
|
546
|
+
var signerSchema = v10.object({
|
|
547
|
+
signing_key: v10.string(),
|
|
548
|
+
signer_address: v10.string(),
|
|
549
|
+
weight: v10.number(),
|
|
550
|
+
stacked_amount: v10.string(),
|
|
551
|
+
weight_percent: v10.number(),
|
|
552
|
+
stacked_amount_percent: v10.number(),
|
|
553
|
+
pooled_stacker_count: v10.number(),
|
|
554
|
+
solo_stacker_count: v10.number()
|
|
505
555
|
});
|
|
506
|
-
var resultsSchema2 =
|
|
507
|
-
var signersResponseSchema =
|
|
556
|
+
var resultsSchema2 = v10.array(signerSchema);
|
|
557
|
+
var signersResponseSchema = v10.object({
|
|
508
558
|
...baseListResponseSchema.entries,
|
|
509
559
|
results: resultsSchema2
|
|
510
560
|
});
|
|
@@ -543,7 +593,7 @@ async function signersInCycle(args) {
|
|
|
543
593
|
}
|
|
544
594
|
});
|
|
545
595
|
}
|
|
546
|
-
const validationResult =
|
|
596
|
+
const validationResult = v10.safeParse(signersResponseSchema, data);
|
|
547
597
|
if (!validationResult.success) {
|
|
548
598
|
return error({
|
|
549
599
|
name: "ValidateDataError",
|
|
@@ -555,15 +605,15 @@ async function signersInCycle(args) {
|
|
|
555
605
|
}
|
|
556
606
|
|
|
557
607
|
// src/stacks-api/proof-of-transfer/stackers-for-signer-in-cycle.ts
|
|
558
|
-
import * as
|
|
559
|
-
var stackerInfoSchema =
|
|
560
|
-
stacker_address:
|
|
561
|
-
stacked_amount:
|
|
562
|
-
pox_address:
|
|
563
|
-
stacker_type:
|
|
608
|
+
import * as v11 from "valibot";
|
|
609
|
+
var stackerInfoSchema = v11.object({
|
|
610
|
+
stacker_address: v11.string(),
|
|
611
|
+
stacked_amount: v11.string(),
|
|
612
|
+
pox_address: v11.string(),
|
|
613
|
+
stacker_type: v11.union([v11.literal("pooled"), v11.literal("solo")])
|
|
564
614
|
});
|
|
565
|
-
var resultsSchema3 =
|
|
566
|
-
var stackersForSignerInCycleResponseSchema =
|
|
615
|
+
var resultsSchema3 = v11.array(stackerInfoSchema);
|
|
616
|
+
var stackersForSignerInCycleResponseSchema = v11.object({
|
|
567
617
|
...baseListResponseSchema.entries,
|
|
568
618
|
results: resultsSchema3
|
|
569
619
|
});
|
|
@@ -577,7 +627,8 @@ async function stackersForSignerInCycle(opts) {
|
|
|
577
627
|
[opts.apiKeyConfig.header]: opts.apiKeyConfig.key
|
|
578
628
|
};
|
|
579
629
|
}
|
|
580
|
-
const
|
|
630
|
+
const signerPublicKeyPathParam = opts.signerPublicKey.startsWith("0x") ? opts.signerPublicKey : `0x${opts.signerPublicKey}`;
|
|
631
|
+
const endpoint = `${opts.baseUrl}/extended/v2/pox/cycles/${opts.cycleNumber}/signers/${signerPublicKeyPathParam}/stackers?${search}`;
|
|
581
632
|
const res = await fetch(endpoint, init);
|
|
582
633
|
if (!res.ok) {
|
|
583
634
|
return error({
|
|
@@ -599,7 +650,7 @@ async function stackersForSignerInCycle(opts) {
|
|
|
599
650
|
data: jsonError
|
|
600
651
|
});
|
|
601
652
|
}
|
|
602
|
-
const validationResult =
|
|
653
|
+
const validationResult = v11.safeParse(
|
|
603
654
|
stackersForSignerInCycleResponseSchema,
|
|
604
655
|
data
|
|
605
656
|
);
|
|
@@ -614,28 +665,37 @@ async function stackersForSignerInCycle(opts) {
|
|
|
614
665
|
}
|
|
615
666
|
|
|
616
667
|
// src/stacks-api/smart-contracts/read-only.ts
|
|
617
|
-
import * as
|
|
618
|
-
var readOnlyResponseSchema =
|
|
619
|
-
|
|
620
|
-
okay:
|
|
621
|
-
|
|
668
|
+
import * as v12 from "valibot";
|
|
669
|
+
var readOnlyResponseSchema = v12.variant("okay", [
|
|
670
|
+
v12.object({
|
|
671
|
+
okay: v12.literal(true),
|
|
672
|
+
/**
|
|
673
|
+
* A Clarity value as a hex-encoded string.
|
|
674
|
+
*/
|
|
675
|
+
result: v12.string()
|
|
622
676
|
}),
|
|
623
|
-
|
|
624
|
-
okay:
|
|
625
|
-
cause:
|
|
677
|
+
v12.object({
|
|
678
|
+
okay: v12.literal(false),
|
|
679
|
+
cause: v12.unknown()
|
|
626
680
|
})
|
|
627
681
|
]);
|
|
628
|
-
async function readOnly(
|
|
629
|
-
const
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
682
|
+
async function readOnly(args) {
|
|
683
|
+
const headers = {
|
|
684
|
+
"Content-Type": "application/json"
|
|
685
|
+
};
|
|
686
|
+
if (args.apiKeyConfig) {
|
|
687
|
+
headers[args.apiKeyConfig.header] = args.apiKeyConfig.key;
|
|
634
688
|
}
|
|
635
|
-
const
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
689
|
+
const init = {
|
|
690
|
+
method: "POST",
|
|
691
|
+
body: JSON.stringify({
|
|
692
|
+
sender: args.sender,
|
|
693
|
+
arguments: args.arguments
|
|
694
|
+
}),
|
|
695
|
+
headers
|
|
696
|
+
};
|
|
697
|
+
const endpoint = `${args.baseUrl}/v2/contracts/call-read/${args.contractAddress}/${args.contractName}/${args.functionName}`;
|
|
698
|
+
const res = await fetch(endpoint, init);
|
|
639
699
|
if (!res.ok) {
|
|
640
700
|
return error({
|
|
641
701
|
name: "FetchReadOnlyError",
|
|
@@ -655,7 +715,7 @@ async function readOnly(opts, apiOpts) {
|
|
|
655
715
|
data: error
|
|
656
716
|
});
|
|
657
717
|
}
|
|
658
|
-
const validationResult =
|
|
718
|
+
const validationResult = v12.safeParse(readOnlyResponseSchema, data);
|
|
659
719
|
if (!validationResult.success) {
|
|
660
720
|
return error({
|
|
661
721
|
name: "ValidateDataError",
|
|
@@ -667,20 +727,20 @@ async function readOnly(opts, apiOpts) {
|
|
|
667
727
|
}
|
|
668
728
|
|
|
669
729
|
// src/stacks-api/stacking-pool/members.ts
|
|
670
|
-
import * as
|
|
671
|
-
var memberSchema =
|
|
672
|
-
stacker:
|
|
673
|
-
pox_addr:
|
|
674
|
-
amount_ustx:
|
|
675
|
-
burn_block_unlock_height:
|
|
676
|
-
block_height:
|
|
677
|
-
tx_id:
|
|
730
|
+
import * as v13 from "valibot";
|
|
731
|
+
var memberSchema = v13.object({
|
|
732
|
+
stacker: v13.string(),
|
|
733
|
+
pox_addr: v13.optional(v13.string()),
|
|
734
|
+
amount_ustx: v13.string(),
|
|
735
|
+
burn_block_unlock_height: v13.optional(v13.number()),
|
|
736
|
+
block_height: v13.number(),
|
|
737
|
+
tx_id: v13.string()
|
|
678
738
|
});
|
|
679
|
-
var membersResponseSchema =
|
|
680
|
-
limit:
|
|
681
|
-
offset:
|
|
682
|
-
total:
|
|
683
|
-
results:
|
|
739
|
+
var membersResponseSchema = v13.object({
|
|
740
|
+
limit: v13.number(),
|
|
741
|
+
offset: v13.number(),
|
|
742
|
+
total: v13.number(),
|
|
743
|
+
results: v13.array(memberSchema)
|
|
684
744
|
});
|
|
685
745
|
async function members(opts, apiOpts) {
|
|
686
746
|
const search = new URLSearchParams();
|
|
@@ -717,7 +777,7 @@ async function members(opts, apiOpts) {
|
|
|
717
777
|
data: jsonParseError
|
|
718
778
|
});
|
|
719
779
|
}
|
|
720
|
-
const validationResult =
|
|
780
|
+
const validationResult = v13.safeParse(membersResponseSchema, data);
|
|
721
781
|
if (!validationResult.success) {
|
|
722
782
|
return error({
|
|
723
783
|
name: "ValidateDataError",
|
|
@@ -729,116 +789,120 @@ async function members(opts, apiOpts) {
|
|
|
729
789
|
}
|
|
730
790
|
|
|
731
791
|
// src/stacks-api/transactions/schemas.ts
|
|
732
|
-
import * as
|
|
733
|
-
var baseTransactionSchema =
|
|
734
|
-
tx_id:
|
|
735
|
-
nonce:
|
|
736
|
-
fee_rate:
|
|
737
|
-
sender_address:
|
|
738
|
-
sponsored:
|
|
739
|
-
post_condition_mode:
|
|
740
|
-
post_conditions:
|
|
741
|
-
anchor_mode:
|
|
742
|
-
is_unanchored:
|
|
743
|
-
block_hash:
|
|
744
|
-
parent_block_hash:
|
|
745
|
-
block_height:
|
|
746
|
-
block_time:
|
|
747
|
-
block_time_iso:
|
|
748
|
-
burn_block_height:
|
|
749
|
-
burn_block_time:
|
|
750
|
-
burn_block_time_iso:
|
|
751
|
-
parent_burn_block_time:
|
|
752
|
-
parent_burn_block_time_iso:
|
|
753
|
-
canonical:
|
|
754
|
-
tx_index:
|
|
755
|
-
tx_status:
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
792
|
+
import * as v14 from "valibot";
|
|
793
|
+
var baseTransactionSchema = v14.object({
|
|
794
|
+
tx_id: v14.string(),
|
|
795
|
+
nonce: v14.number(),
|
|
796
|
+
fee_rate: v14.string(),
|
|
797
|
+
sender_address: v14.string(),
|
|
798
|
+
sponsored: v14.boolean(),
|
|
799
|
+
post_condition_mode: v14.string(),
|
|
800
|
+
post_conditions: v14.array(v14.unknown()),
|
|
801
|
+
anchor_mode: v14.string(),
|
|
802
|
+
is_unanchored: v14.boolean(),
|
|
803
|
+
block_hash: v14.string(),
|
|
804
|
+
parent_block_hash: v14.string(),
|
|
805
|
+
block_height: v14.number(),
|
|
806
|
+
block_time: v14.number(),
|
|
807
|
+
block_time_iso: v14.string(),
|
|
808
|
+
burn_block_height: v14.number(),
|
|
809
|
+
burn_block_time: v14.number(),
|
|
810
|
+
burn_block_time_iso: v14.string(),
|
|
811
|
+
parent_burn_block_time: v14.number(),
|
|
812
|
+
parent_burn_block_time_iso: v14.string(),
|
|
813
|
+
canonical: v14.boolean(),
|
|
814
|
+
tx_index: v14.number(),
|
|
815
|
+
tx_status: v14.union([
|
|
816
|
+
v14.literal("success"),
|
|
817
|
+
v14.literal("abort_by_response"),
|
|
818
|
+
v14.literal("abort_by_post_condition")
|
|
819
|
+
]),
|
|
820
|
+
tx_result: v14.object({
|
|
821
|
+
hex: v14.string(),
|
|
822
|
+
repr: v14.string()
|
|
759
823
|
}),
|
|
760
|
-
microblock_hash:
|
|
761
|
-
microblock_sequence:
|
|
762
|
-
microblock_canonical:
|
|
763
|
-
event_count:
|
|
764
|
-
events:
|
|
765
|
-
execution_cost_read_count:
|
|
766
|
-
execution_cost_read_length:
|
|
767
|
-
execution_cost_runtime:
|
|
768
|
-
execution_cost_write_count:
|
|
769
|
-
execution_cost_write_length:
|
|
824
|
+
microblock_hash: v14.string(),
|
|
825
|
+
microblock_sequence: v14.number(),
|
|
826
|
+
microblock_canonical: v14.boolean(),
|
|
827
|
+
event_count: v14.number(),
|
|
828
|
+
events: v14.array(v14.unknown()),
|
|
829
|
+
execution_cost_read_count: v14.number(),
|
|
830
|
+
execution_cost_read_length: v14.number(),
|
|
831
|
+
execution_cost_runtime: v14.number(),
|
|
832
|
+
execution_cost_write_count: v14.number(),
|
|
833
|
+
execution_cost_write_length: v14.number()
|
|
770
834
|
});
|
|
771
|
-
var contractCallTransactionSchema =
|
|
772
|
-
tx_type:
|
|
773
|
-
contract_call:
|
|
774
|
-
contract_id:
|
|
775
|
-
function_name:
|
|
776
|
-
function_signature:
|
|
777
|
-
function_args:
|
|
778
|
-
|
|
779
|
-
hex:
|
|
780
|
-
repr:
|
|
781
|
-
name:
|
|
782
|
-
type:
|
|
835
|
+
var contractCallTransactionSchema = v14.object({
|
|
836
|
+
tx_type: v14.literal("contract_call"),
|
|
837
|
+
contract_call: v14.object({
|
|
838
|
+
contract_id: v14.string(),
|
|
839
|
+
function_name: v14.string(),
|
|
840
|
+
function_signature: v14.string(),
|
|
841
|
+
function_args: v14.array(
|
|
842
|
+
v14.object({
|
|
843
|
+
hex: v14.string(),
|
|
844
|
+
repr: v14.string(),
|
|
845
|
+
name: v14.string(),
|
|
846
|
+
type: v14.string()
|
|
783
847
|
})
|
|
784
848
|
)
|
|
785
849
|
}),
|
|
786
850
|
...baseTransactionSchema.entries
|
|
787
851
|
});
|
|
788
|
-
var smartContractTransactionSchema =
|
|
789
|
-
tx_type:
|
|
790
|
-
smart_contract:
|
|
852
|
+
var smartContractTransactionSchema = v14.object({
|
|
853
|
+
tx_type: v14.literal("smart_contract"),
|
|
854
|
+
smart_contract: v14.object({
|
|
791
855
|
/**
|
|
792
856
|
* NOTE: The types may be wrong, not sure what type of value is used when
|
|
793
857
|
* the version is not `null`.
|
|
794
858
|
*/
|
|
795
|
-
clarity_version:
|
|
796
|
-
contract_id:
|
|
797
|
-
source_code:
|
|
859
|
+
clarity_version: v14.union([v14.null(), v14.number()]),
|
|
860
|
+
contract_id: v14.string(),
|
|
861
|
+
source_code: v14.string()
|
|
798
862
|
}),
|
|
799
863
|
...baseTransactionSchema.entries
|
|
800
864
|
});
|
|
801
|
-
var tokenTransferSchema =
|
|
802
|
-
tx_type:
|
|
803
|
-
token_transfer:
|
|
804
|
-
recipient_address:
|
|
805
|
-
amount:
|
|
806
|
-
memo:
|
|
865
|
+
var tokenTransferSchema = v14.object({
|
|
866
|
+
tx_type: v14.literal("token_transfer"),
|
|
867
|
+
token_transfer: v14.object({
|
|
868
|
+
recipient_address: v14.string(),
|
|
869
|
+
amount: v14.string(),
|
|
870
|
+
memo: v14.string()
|
|
807
871
|
}),
|
|
808
872
|
...baseTransactionSchema.entries
|
|
809
873
|
});
|
|
810
|
-
var transactionSchema =
|
|
874
|
+
var transactionSchema = v14.variant("tx_type", [
|
|
811
875
|
contractCallTransactionSchema,
|
|
812
876
|
smartContractTransactionSchema,
|
|
813
877
|
tokenTransferSchema
|
|
814
878
|
]);
|
|
815
879
|
|
|
816
880
|
// src/stacks-api/transactions/address-transactions.ts
|
|
817
|
-
import * as
|
|
818
|
-
var resultSchema =
|
|
881
|
+
import * as v15 from "valibot";
|
|
882
|
+
var resultSchema = v15.object({
|
|
819
883
|
tx: transactionSchema,
|
|
820
|
-
stx_sent:
|
|
821
|
-
stx_received:
|
|
822
|
-
events:
|
|
823
|
-
stx:
|
|
824
|
-
transfer:
|
|
825
|
-
mint:
|
|
826
|
-
burn:
|
|
884
|
+
stx_sent: v15.string(),
|
|
885
|
+
stx_received: v15.string(),
|
|
886
|
+
events: v15.object({
|
|
887
|
+
stx: v15.object({
|
|
888
|
+
transfer: v15.number(),
|
|
889
|
+
mint: v15.number(),
|
|
890
|
+
burn: v15.number()
|
|
827
891
|
}),
|
|
828
|
-
ft:
|
|
829
|
-
transfer:
|
|
830
|
-
mint:
|
|
831
|
-
burn:
|
|
892
|
+
ft: v15.object({
|
|
893
|
+
transfer: v15.number(),
|
|
894
|
+
mint: v15.number(),
|
|
895
|
+
burn: v15.number()
|
|
832
896
|
}),
|
|
833
|
-
nft:
|
|
834
|
-
transfer:
|
|
835
|
-
mint:
|
|
836
|
-
burn:
|
|
897
|
+
nft: v15.object({
|
|
898
|
+
transfer: v15.number(),
|
|
899
|
+
mint: v15.number(),
|
|
900
|
+
burn: v15.number()
|
|
837
901
|
})
|
|
838
902
|
})
|
|
839
903
|
});
|
|
840
|
-
var resultsSchema4 =
|
|
841
|
-
var addressTransactionsResponseSchema =
|
|
904
|
+
var resultsSchema4 = v15.array(resultSchema);
|
|
905
|
+
var addressTransactionsResponseSchema = v15.object({
|
|
842
906
|
...baseListResponseSchema.entries,
|
|
843
907
|
results: resultsSchema4
|
|
844
908
|
});
|
|
@@ -875,7 +939,7 @@ async function addressTransactions(args) {
|
|
|
875
939
|
data: jsonParseError
|
|
876
940
|
});
|
|
877
941
|
}
|
|
878
|
-
const validationResult =
|
|
942
|
+
const validationResult = v15.safeParse(addressTransactionsResponseSchema, data);
|
|
879
943
|
if (!validationResult.success) {
|
|
880
944
|
return error({
|
|
881
945
|
name: "ValidateDataError",
|
|
@@ -887,7 +951,7 @@ async function addressTransactions(args) {
|
|
|
887
951
|
}
|
|
888
952
|
|
|
889
953
|
// src/stacks-api/transactions/get-transaction.ts
|
|
890
|
-
import * as
|
|
954
|
+
import * as v16 from "valibot";
|
|
891
955
|
async function getTransaction(args) {
|
|
892
956
|
const init = {};
|
|
893
957
|
if (args.apiKeyConfig) {
|
|
@@ -916,7 +980,7 @@ async function getTransaction(args) {
|
|
|
916
980
|
error: jsonParseError
|
|
917
981
|
});
|
|
918
982
|
}
|
|
919
|
-
const validationResult =
|
|
983
|
+
const validationResult = v16.safeParse(transactionSchema, data);
|
|
920
984
|
if (!validationResult.success) {
|
|
921
985
|
return error({
|
|
922
986
|
name: "ValidateDataError",
|
|
@@ -928,7 +992,7 @@ async function getTransaction(args) {
|
|
|
928
992
|
}
|
|
929
993
|
|
|
930
994
|
// src/stacks-api/index.ts
|
|
931
|
-
var accounts = { balances };
|
|
995
|
+
var accounts = { balances, latestNonce };
|
|
932
996
|
var blocks = { getBlock };
|
|
933
997
|
var info = { coreApi, poxDetails };
|
|
934
998
|
var proofOfTransfer = {
|
|
@@ -954,10 +1018,19 @@ function callRateLimitedApi(fn, options) {
|
|
|
954
1018
|
}
|
|
955
1019
|
async function safeCallRateLimitedApi(fn, options) {
|
|
956
1020
|
try {
|
|
957
|
-
return await backOff(
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
1021
|
+
return await backOff(
|
|
1022
|
+
async () => {
|
|
1023
|
+
const [error2, data] = await fn();
|
|
1024
|
+
if (error2) {
|
|
1025
|
+
throw error2;
|
|
1026
|
+
}
|
|
1027
|
+
return success(data);
|
|
1028
|
+
},
|
|
1029
|
+
{
|
|
1030
|
+
startingDelay: options?.startingDelay ?? 15e3,
|
|
1031
|
+
numOfAttempts: options?.numOfAttempts ?? 5
|
|
1032
|
+
}
|
|
1033
|
+
);
|
|
961
1034
|
} catch (error2) {
|
|
962
1035
|
return error({
|
|
963
1036
|
name: "MaxRetriesExceeded",
|