@secretkeylabs/stacks-tools 0.4.0 → 0.5.0-21a2301
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 +679 -428
- package/dist/index.d.cts +523 -221
- package/dist/index.d.ts +523 -221
- package/dist/index.js +687 -428
- package/package.json +3 -1
package/dist/index.cjs
CHANGED
|
@@ -32,10 +32,13 @@ var src_exports = {};
|
|
|
32
32
|
__export(src_exports, {
|
|
33
33
|
callRateLimitedApi: () => callRateLimitedApi,
|
|
34
34
|
error: () => error,
|
|
35
|
+
pox4Api: () => pox4Api,
|
|
36
|
+
queries: () => queries,
|
|
35
37
|
safeCall: () => safeCall,
|
|
36
38
|
safeCallRateLimitedApi: () => safeCallRateLimitedApi,
|
|
37
39
|
safePromise: () => safePromise,
|
|
38
40
|
stacksApi: () => stacksApi,
|
|
41
|
+
stacksRpcApi: () => stacksRpcApi,
|
|
39
42
|
success: () => success
|
|
40
43
|
});
|
|
41
44
|
module.exports = __toCommonJS(src_exports);
|
|
@@ -71,37 +74,6 @@ function safeCall(fn) {
|
|
|
71
74
|
}
|
|
72
75
|
|
|
73
76
|
// src/stacks-api/accounts/balances.ts
|
|
74
|
-
var v = __toESM(require("valibot"), 1);
|
|
75
|
-
var responseSchema = v.object({
|
|
76
|
-
stx: v.object({
|
|
77
|
-
balance: v.string(),
|
|
78
|
-
total_sent: v.string(),
|
|
79
|
-
total_received: v.string(),
|
|
80
|
-
total_fees_sent: v.string(),
|
|
81
|
-
total_miner_rewards_received: v.string(),
|
|
82
|
-
lock_tx_id: v.string(),
|
|
83
|
-
locked: v.string(),
|
|
84
|
-
lock_height: v.number(),
|
|
85
|
-
burnchain_lock_height: v.number(),
|
|
86
|
-
burnchain_unlock_height: v.number()
|
|
87
|
-
}),
|
|
88
|
-
fungible_tokens: v.record(
|
|
89
|
-
v.string(),
|
|
90
|
-
v.object({
|
|
91
|
-
balance: v.string(),
|
|
92
|
-
total_sent: v.string(),
|
|
93
|
-
total_received: v.string()
|
|
94
|
-
})
|
|
95
|
-
),
|
|
96
|
-
non_fungible_tokens: v.record(
|
|
97
|
-
v.string(),
|
|
98
|
-
v.object({
|
|
99
|
-
count: v.string(),
|
|
100
|
-
total_sent: v.string(),
|
|
101
|
-
total_received: v.string()
|
|
102
|
-
})
|
|
103
|
-
)
|
|
104
|
-
});
|
|
105
77
|
async function balances(opts) {
|
|
106
78
|
const search = new URLSearchParams();
|
|
107
79
|
if (opts.unanchored) search.append("unanchored", "true");
|
|
@@ -133,25 +105,17 @@ async function balances(opts) {
|
|
|
133
105
|
data: jsonError
|
|
134
106
|
});
|
|
135
107
|
}
|
|
136
|
-
|
|
137
|
-
if (!validationResult.success) {
|
|
138
|
-
return error({
|
|
139
|
-
name: "ValidateDataError",
|
|
140
|
-
message: "Failed to validate data.",
|
|
141
|
-
data: validationResult
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
return success(validationResult.output);
|
|
108
|
+
return success(data);
|
|
145
109
|
}
|
|
146
110
|
|
|
147
111
|
// src/stacks-api/accounts/latest-nonce.ts
|
|
148
|
-
var
|
|
149
|
-
var
|
|
150
|
-
last_mempool_tx_nonce:
|
|
151
|
-
last_executed_tx_nonce:
|
|
152
|
-
possible_next_nonce:
|
|
153
|
-
detected_missing_nonces:
|
|
154
|
-
detected_mempool_nonces:
|
|
112
|
+
var v = __toESM(require("valibot"), 1);
|
|
113
|
+
var responseSchema = v.object({
|
|
114
|
+
last_mempool_tx_nonce: v.nullable(v.number()),
|
|
115
|
+
last_executed_tx_nonce: v.nullable(v.number()),
|
|
116
|
+
possible_next_nonce: v.number(),
|
|
117
|
+
detected_missing_nonces: v.array(v.number()),
|
|
118
|
+
detected_mempool_nonces: v.array(v.number())
|
|
155
119
|
});
|
|
156
120
|
async function latestNonce(opts) {
|
|
157
121
|
const init = {};
|
|
@@ -182,7 +146,7 @@ async function latestNonce(opts) {
|
|
|
182
146
|
data: jsonError
|
|
183
147
|
});
|
|
184
148
|
}
|
|
185
|
-
const validationResult =
|
|
149
|
+
const validationResult = v.safeParse(responseSchema, data);
|
|
186
150
|
if (!validationResult.success) {
|
|
187
151
|
return error({
|
|
188
152
|
name: "ValidateDataError",
|
|
@@ -193,37 +157,43 @@ async function latestNonce(opts) {
|
|
|
193
157
|
return success(validationResult.output);
|
|
194
158
|
}
|
|
195
159
|
|
|
160
|
+
// src/stacks-api/accounts/index.ts
|
|
161
|
+
var accounts = {
|
|
162
|
+
balances,
|
|
163
|
+
latestNonce
|
|
164
|
+
};
|
|
165
|
+
|
|
196
166
|
// src/stacks-api/types.ts
|
|
197
|
-
var
|
|
198
|
-
var baseListResponseSchema =
|
|
199
|
-
limit:
|
|
200
|
-
offset:
|
|
201
|
-
total:
|
|
202
|
-
results:
|
|
167
|
+
var v2 = __toESM(require("valibot"), 1);
|
|
168
|
+
var baseListResponseSchema = v2.object({
|
|
169
|
+
limit: v2.number(),
|
|
170
|
+
offset: v2.number(),
|
|
171
|
+
total: v2.number(),
|
|
172
|
+
results: v2.array(v2.unknown())
|
|
203
173
|
});
|
|
204
174
|
|
|
205
175
|
// src/stacks-api/blocks/get-block.ts
|
|
206
|
-
var
|
|
207
|
-
var
|
|
208
|
-
canonical:
|
|
209
|
-
height:
|
|
210
|
-
hash:
|
|
211
|
-
block_time:
|
|
212
|
-
block_time_iso:
|
|
213
|
-
index_block_hash:
|
|
214
|
-
parent_block_hash:
|
|
215
|
-
parent_index_block_hash:
|
|
216
|
-
burn_block_time:
|
|
217
|
-
burn_block_time_iso:
|
|
218
|
-
burn_block_hash:
|
|
219
|
-
burn_block_height:
|
|
220
|
-
miner_txid:
|
|
221
|
-
tx_count:
|
|
222
|
-
execution_cost_read_count:
|
|
223
|
-
execution_cost_read_length:
|
|
224
|
-
execution_cost_runtime:
|
|
225
|
-
execution_cost_write_count:
|
|
226
|
-
execution_cost_write_length:
|
|
176
|
+
var v3 = __toESM(require("valibot"), 1);
|
|
177
|
+
var responseSchema2 = v3.object({
|
|
178
|
+
canonical: v3.boolean(),
|
|
179
|
+
height: v3.number(),
|
|
180
|
+
hash: v3.string(),
|
|
181
|
+
block_time: v3.number(),
|
|
182
|
+
block_time_iso: v3.string(),
|
|
183
|
+
index_block_hash: v3.string(),
|
|
184
|
+
parent_block_hash: v3.string(),
|
|
185
|
+
parent_index_block_hash: v3.string(),
|
|
186
|
+
burn_block_time: v3.number(),
|
|
187
|
+
burn_block_time_iso: v3.string(),
|
|
188
|
+
burn_block_hash: v3.string(),
|
|
189
|
+
burn_block_height: v3.number(),
|
|
190
|
+
miner_txid: v3.string(),
|
|
191
|
+
tx_count: v3.number(),
|
|
192
|
+
execution_cost_read_count: v3.number(),
|
|
193
|
+
execution_cost_read_length: v3.number(),
|
|
194
|
+
execution_cost_runtime: v3.number(),
|
|
195
|
+
execution_cost_write_count: v3.number(),
|
|
196
|
+
execution_cost_write_length: v3.number()
|
|
227
197
|
});
|
|
228
198
|
async function getBlock(opts) {
|
|
229
199
|
const init = {};
|
|
@@ -255,7 +225,7 @@ async function getBlock(opts) {
|
|
|
255
225
|
data: jsonError
|
|
256
226
|
});
|
|
257
227
|
}
|
|
258
|
-
const validationResult =
|
|
228
|
+
const validationResult = v3.safeParse(responseSchema2, data);
|
|
259
229
|
if (!validationResult.success) {
|
|
260
230
|
return error({
|
|
261
231
|
name: "ValidateDataError",
|
|
@@ -266,36 +236,29 @@ async function getBlock(opts) {
|
|
|
266
236
|
return success(validationResult.output);
|
|
267
237
|
}
|
|
268
238
|
|
|
269
|
-
// src/stacks-api/
|
|
270
|
-
var
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
parent_network_id: v5.number(),
|
|
280
|
-
stacks_tip_height: v5.number(),
|
|
281
|
-
stacks_tip: v5.string(),
|
|
282
|
-
stacks_tip_consensus_hash: v5.string(),
|
|
283
|
-
unanchored_tip: v5.nullable(v5.string()),
|
|
284
|
-
unanchored_seq: v5.nullable(v5.string()),
|
|
285
|
-
exit_at_block_height: v5.nullable(v5.number())
|
|
286
|
-
});
|
|
287
|
-
async function coreApi(apiOpts) {
|
|
239
|
+
// src/stacks-api/blocks/index.ts
|
|
240
|
+
var blocks = {
|
|
241
|
+
getBlock
|
|
242
|
+
};
|
|
243
|
+
|
|
244
|
+
// src/stacks-api/faucets/stx.ts
|
|
245
|
+
async function stx(opts) {
|
|
246
|
+
const search = new URLSearchParams();
|
|
247
|
+
search.append("address", opts.address);
|
|
248
|
+
if (opts.stacking) search.append("stacking", "true");
|
|
288
249
|
const init = {};
|
|
289
|
-
if (
|
|
250
|
+
if (opts.apiKeyConfig) {
|
|
290
251
|
init.headers = {
|
|
291
|
-
[
|
|
252
|
+
[opts.apiKeyConfig.header]: opts.apiKeyConfig.key
|
|
292
253
|
};
|
|
293
254
|
}
|
|
294
|
-
|
|
255
|
+
init.method = "POST";
|
|
256
|
+
const endpoint = `${opts.baseUrl}/extended/v1/faucets/stx?${search}`;
|
|
257
|
+
const res = await fetch(endpoint, init);
|
|
295
258
|
if (!res.ok) {
|
|
296
259
|
return error({
|
|
297
|
-
name: "
|
|
298
|
-
message: "Failed to fetch.",
|
|
260
|
+
name: "FetchStxError",
|
|
261
|
+
message: "Failed to fetch STX.",
|
|
299
262
|
data: {
|
|
300
263
|
status: res.status,
|
|
301
264
|
statusText: res.statusText,
|
|
@@ -303,95 +266,52 @@ async function coreApi(apiOpts) {
|
|
|
303
266
|
}
|
|
304
267
|
});
|
|
305
268
|
}
|
|
306
|
-
const [
|
|
307
|
-
if (
|
|
269
|
+
const [jsonError, data] = await safePromise(res.json());
|
|
270
|
+
if (jsonError) {
|
|
308
271
|
return error({
|
|
309
272
|
name: "ParseBodyError",
|
|
310
273
|
message: "Failed to parse response body as JSON.",
|
|
311
|
-
data:
|
|
312
|
-
});
|
|
313
|
-
}
|
|
314
|
-
const validationResult = v5.safeParse(CoreApiResponseSchema, data);
|
|
315
|
-
if (!validationResult.success) {
|
|
316
|
-
return error({
|
|
317
|
-
name: "ValidateDataError",
|
|
318
|
-
message: "Failed to validate data.",
|
|
319
|
-
data: validationResult
|
|
274
|
+
data: jsonError
|
|
320
275
|
});
|
|
321
276
|
}
|
|
322
|
-
return success(
|
|
277
|
+
return success(data);
|
|
323
278
|
}
|
|
324
279
|
|
|
325
|
-
// src/stacks-api/
|
|
326
|
-
var
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
stacked_ustx: v6.number(),
|
|
348
|
-
prepare_phase_start_block_height: v6.number(),
|
|
349
|
-
blocks_until_prepare_phase: v6.number(),
|
|
350
|
-
reward_phase_start_block_height: v6.number(),
|
|
351
|
-
blocks_until_reward_phase: v6.number(),
|
|
352
|
-
ustx_until_pox_rejection: v6.null()
|
|
353
|
-
}),
|
|
354
|
-
epochs: v6.array(
|
|
355
|
-
v6.object({
|
|
356
|
-
epoch_id: v6.string(),
|
|
357
|
-
start_height: v6.number(),
|
|
358
|
-
end_height: v6.number(),
|
|
359
|
-
block_limit: v6.object({
|
|
360
|
-
write_length: v6.number(),
|
|
361
|
-
write_count: v6.number(),
|
|
362
|
-
read_length: v6.number(),
|
|
363
|
-
read_count: v6.number(),
|
|
364
|
-
runtime: v6.number()
|
|
365
|
-
}),
|
|
366
|
-
network_epoch: v6.number()
|
|
367
|
-
})
|
|
368
|
-
),
|
|
369
|
-
min_amount_ustx: v6.number(),
|
|
370
|
-
prepare_cycle_length: v6.number(),
|
|
371
|
-
reward_cycle_id: v6.number(),
|
|
372
|
-
reward_cycle_length: v6.number(),
|
|
373
|
-
rejection_votes_left_required: v6.null(),
|
|
374
|
-
next_reward_cycle_in: v6.number(),
|
|
375
|
-
contract_versions: v6.array(
|
|
376
|
-
v6.object({
|
|
377
|
-
contract_id: v6.string(),
|
|
378
|
-
activation_burnchain_block_height: v6.number(),
|
|
379
|
-
first_reward_cycle_id: v6.number()
|
|
380
|
-
})
|
|
381
|
-
)
|
|
280
|
+
// src/stacks-api/faucets/index.ts
|
|
281
|
+
var faucets = {
|
|
282
|
+
stx
|
|
283
|
+
};
|
|
284
|
+
|
|
285
|
+
// src/stacks-api/info/core-api.ts
|
|
286
|
+
var v4 = __toESM(require("valibot"), 1);
|
|
287
|
+
var CoreApiResponseSchema = v4.object({
|
|
288
|
+
peer_version: v4.number(),
|
|
289
|
+
pox_consensus: v4.string(),
|
|
290
|
+
burn_block_height: v4.number(),
|
|
291
|
+
stable_pox_consensus: v4.string(),
|
|
292
|
+
stable_burn_block_height: v4.number(),
|
|
293
|
+
server_version: v4.string(),
|
|
294
|
+
network_id: v4.number(),
|
|
295
|
+
parent_network_id: v4.number(),
|
|
296
|
+
stacks_tip_height: v4.number(),
|
|
297
|
+
stacks_tip: v4.string(),
|
|
298
|
+
stacks_tip_consensus_hash: v4.string(),
|
|
299
|
+
unanchored_tip: v4.nullable(v4.string()),
|
|
300
|
+
unanchored_seq: v4.nullable(v4.string()),
|
|
301
|
+
exit_at_block_height: v4.nullable(v4.number())
|
|
382
302
|
});
|
|
383
|
-
async function
|
|
303
|
+
async function coreApi(apiOpts) {
|
|
384
304
|
const init = {};
|
|
385
|
-
if (
|
|
305
|
+
if (apiOpts.apiKeyConfig) {
|
|
386
306
|
init.headers = {
|
|
387
|
-
[
|
|
307
|
+
[apiOpts.apiKeyConfig.header]: apiOpts.apiKeyConfig.key
|
|
388
308
|
};
|
|
389
309
|
}
|
|
390
|
-
const res = await fetch(`${
|
|
310
|
+
const res = await fetch(`${apiOpts.baseUrl}/v2/info`, init);
|
|
391
311
|
if (!res.ok) {
|
|
392
312
|
return error({
|
|
393
|
-
name: "
|
|
394
|
-
message: "Failed to fetch
|
|
313
|
+
name: "FetchCoreApiError",
|
|
314
|
+
message: "Failed to fetch.",
|
|
395
315
|
data: {
|
|
396
316
|
status: res.status,
|
|
397
317
|
statusText: res.statusText,
|
|
@@ -399,34 +319,39 @@ async function poxDetails(args) {
|
|
|
399
319
|
}
|
|
400
320
|
});
|
|
401
321
|
}
|
|
402
|
-
const [
|
|
403
|
-
if (
|
|
322
|
+
const [parseBodyError, data] = await safePromise(res.json());
|
|
323
|
+
if (parseBodyError) {
|
|
404
324
|
return error({
|
|
405
325
|
name: "ParseBodyError",
|
|
406
|
-
message: "Failed to parse
|
|
407
|
-
data:
|
|
326
|
+
message: "Failed to parse response body as JSON.",
|
|
327
|
+
data: parseBodyError
|
|
408
328
|
});
|
|
409
329
|
}
|
|
410
|
-
const validationResult =
|
|
330
|
+
const validationResult = v4.safeParse(CoreApiResponseSchema, data);
|
|
411
331
|
if (!validationResult.success) {
|
|
412
332
|
return error({
|
|
413
333
|
name: "ValidateDataError",
|
|
414
|
-
message: "Failed to
|
|
334
|
+
message: "Failed to validate data.",
|
|
415
335
|
data: validationResult
|
|
416
336
|
});
|
|
417
337
|
}
|
|
418
338
|
return success(validationResult.output);
|
|
419
339
|
}
|
|
420
340
|
|
|
341
|
+
// src/stacks-api/info/index.ts
|
|
342
|
+
var info = {
|
|
343
|
+
coreApi
|
|
344
|
+
};
|
|
345
|
+
|
|
421
346
|
// src/stacks-api/proof-of-transfer/cycle.ts
|
|
422
|
-
var
|
|
423
|
-
var
|
|
424
|
-
block_height:
|
|
425
|
-
index_block_hash:
|
|
426
|
-
cycle_number:
|
|
427
|
-
total_weight:
|
|
428
|
-
total_stacked_amount:
|
|
429
|
-
total_signers:
|
|
347
|
+
var v5 = __toESM(require("valibot"), 1);
|
|
348
|
+
var responseSchema3 = v5.object({
|
|
349
|
+
block_height: v5.number(),
|
|
350
|
+
index_block_hash: v5.string(),
|
|
351
|
+
cycle_number: v5.number(),
|
|
352
|
+
total_weight: v5.number(),
|
|
353
|
+
total_stacked_amount: v5.string(),
|
|
354
|
+
total_signers: v5.number()
|
|
430
355
|
});
|
|
431
356
|
async function cycle(opts) {
|
|
432
357
|
const init = {};
|
|
@@ -457,7 +382,7 @@ async function cycle(opts) {
|
|
|
457
382
|
data: jsonError
|
|
458
383
|
});
|
|
459
384
|
}
|
|
460
|
-
const validationResult =
|
|
385
|
+
const validationResult = v5.safeParse(responseSchema3, data);
|
|
461
386
|
if (!validationResult.success) {
|
|
462
387
|
return error({
|
|
463
388
|
name: "ValidateDataError",
|
|
@@ -469,17 +394,17 @@ async function cycle(opts) {
|
|
|
469
394
|
}
|
|
470
395
|
|
|
471
396
|
// src/stacks-api/proof-of-transfer/cycles.ts
|
|
472
|
-
var
|
|
473
|
-
var cycleInfoSchema =
|
|
474
|
-
block_height:
|
|
475
|
-
index_block_hash:
|
|
476
|
-
cycle_number:
|
|
477
|
-
total_weight:
|
|
478
|
-
total_stacked_amount:
|
|
479
|
-
total_signers:
|
|
397
|
+
var v6 = __toESM(require("valibot"), 1);
|
|
398
|
+
var cycleInfoSchema = v6.object({
|
|
399
|
+
block_height: v6.number(),
|
|
400
|
+
index_block_hash: v6.string(),
|
|
401
|
+
cycle_number: v6.number(),
|
|
402
|
+
total_weight: v6.number(),
|
|
403
|
+
total_stacked_amount: v6.string(),
|
|
404
|
+
total_signers: v6.number()
|
|
480
405
|
});
|
|
481
|
-
var resultsSchema =
|
|
482
|
-
var cyclesResponseSchema =
|
|
406
|
+
var resultsSchema = v6.array(cycleInfoSchema);
|
|
407
|
+
var cyclesResponseSchema = v6.object({
|
|
483
408
|
...baseListResponseSchema.entries,
|
|
484
409
|
results: resultsSchema
|
|
485
410
|
});
|
|
@@ -515,7 +440,7 @@ async function cycles(args) {
|
|
|
515
440
|
data: jsonError
|
|
516
441
|
});
|
|
517
442
|
}
|
|
518
|
-
const validationResult =
|
|
443
|
+
const validationResult = v6.safeParse(cyclesResponseSchema, data);
|
|
519
444
|
if (!validationResult.success) {
|
|
520
445
|
return error({
|
|
521
446
|
name: "ValidateDataError",
|
|
@@ -527,16 +452,16 @@ async function cycles(args) {
|
|
|
527
452
|
}
|
|
528
453
|
|
|
529
454
|
// src/stacks-api/proof-of-transfer/signer-in-cycle.ts
|
|
530
|
-
var
|
|
531
|
-
var signerInCycleResponseSchema =
|
|
532
|
-
signing_key:
|
|
533
|
-
signer_address:
|
|
534
|
-
weight:
|
|
535
|
-
stacked_amount:
|
|
536
|
-
weight_percent:
|
|
537
|
-
stacked_amount_percent:
|
|
538
|
-
solo_stacker_count:
|
|
539
|
-
pooled_stacker_count:
|
|
455
|
+
var v7 = __toESM(require("valibot"), 1);
|
|
456
|
+
var signerInCycleResponseSchema = v7.object({
|
|
457
|
+
signing_key: v7.string(),
|
|
458
|
+
signer_address: v7.string(),
|
|
459
|
+
weight: v7.number(),
|
|
460
|
+
stacked_amount: v7.string(),
|
|
461
|
+
weight_percent: v7.number(),
|
|
462
|
+
stacked_amount_percent: v7.number(),
|
|
463
|
+
solo_stacker_count: v7.number(),
|
|
464
|
+
pooled_stacker_count: v7.number()
|
|
540
465
|
});
|
|
541
466
|
async function signerInCycle(args) {
|
|
542
467
|
const init = {};
|
|
@@ -572,7 +497,7 @@ async function signerInCycle(args) {
|
|
|
572
497
|
}
|
|
573
498
|
});
|
|
574
499
|
}
|
|
575
|
-
const validationResult =
|
|
500
|
+
const validationResult = v7.safeParse(signerInCycleResponseSchema, data);
|
|
576
501
|
if (!validationResult.success) {
|
|
577
502
|
return error({
|
|
578
503
|
name: "ValidateDataError",
|
|
@@ -584,19 +509,19 @@ async function signerInCycle(args) {
|
|
|
584
509
|
}
|
|
585
510
|
|
|
586
511
|
// src/stacks-api/proof-of-transfer/signers-in-cycle.ts
|
|
587
|
-
var
|
|
588
|
-
var signerSchema =
|
|
589
|
-
signing_key:
|
|
590
|
-
signer_address:
|
|
591
|
-
weight:
|
|
592
|
-
stacked_amount:
|
|
593
|
-
weight_percent:
|
|
594
|
-
stacked_amount_percent:
|
|
595
|
-
pooled_stacker_count:
|
|
596
|
-
solo_stacker_count:
|
|
512
|
+
var v8 = __toESM(require("valibot"), 1);
|
|
513
|
+
var signerSchema = v8.object({
|
|
514
|
+
signing_key: v8.string(),
|
|
515
|
+
signer_address: v8.string(),
|
|
516
|
+
weight: v8.number(),
|
|
517
|
+
stacked_amount: v8.string(),
|
|
518
|
+
weight_percent: v8.number(),
|
|
519
|
+
stacked_amount_percent: v8.number(),
|
|
520
|
+
pooled_stacker_count: v8.number(),
|
|
521
|
+
solo_stacker_count: v8.number()
|
|
597
522
|
});
|
|
598
|
-
var resultsSchema2 =
|
|
599
|
-
var signersResponseSchema =
|
|
523
|
+
var resultsSchema2 = v8.array(signerSchema);
|
|
524
|
+
var signersResponseSchema = v8.object({
|
|
600
525
|
...baseListResponseSchema.entries,
|
|
601
526
|
results: resultsSchema2
|
|
602
527
|
});
|
|
@@ -635,7 +560,7 @@ async function signersInCycle(args) {
|
|
|
635
560
|
}
|
|
636
561
|
});
|
|
637
562
|
}
|
|
638
|
-
const validationResult =
|
|
563
|
+
const validationResult = v8.safeParse(signersResponseSchema, data);
|
|
639
564
|
if (!validationResult.success) {
|
|
640
565
|
return error({
|
|
641
566
|
name: "ValidateDataError",
|
|
@@ -647,15 +572,15 @@ async function signersInCycle(args) {
|
|
|
647
572
|
}
|
|
648
573
|
|
|
649
574
|
// src/stacks-api/proof-of-transfer/stackers-for-signer-in-cycle.ts
|
|
650
|
-
var
|
|
651
|
-
var stackerInfoSchema =
|
|
652
|
-
stacker_address:
|
|
653
|
-
stacked_amount:
|
|
654
|
-
pox_address:
|
|
655
|
-
stacker_type:
|
|
575
|
+
var v9 = __toESM(require("valibot"), 1);
|
|
576
|
+
var stackerInfoSchema = v9.object({
|
|
577
|
+
stacker_address: v9.string(),
|
|
578
|
+
stacked_amount: v9.string(),
|
|
579
|
+
pox_address: v9.string(),
|
|
580
|
+
stacker_type: v9.union([v9.literal("pooled"), v9.literal("solo")])
|
|
656
581
|
});
|
|
657
|
-
var resultsSchema3 =
|
|
658
|
-
var stackersForSignerInCycleResponseSchema =
|
|
582
|
+
var resultsSchema3 = v9.array(stackerInfoSchema);
|
|
583
|
+
var stackersForSignerInCycleResponseSchema = v9.object({
|
|
659
584
|
...baseListResponseSchema.entries,
|
|
660
585
|
results: resultsSchema3
|
|
661
586
|
});
|
|
@@ -692,7 +617,7 @@ async function stackersForSignerInCycle(opts) {
|
|
|
692
617
|
data: jsonError
|
|
693
618
|
});
|
|
694
619
|
}
|
|
695
|
-
const validationResult =
|
|
620
|
+
const validationResult = v9.safeParse(
|
|
696
621
|
stackersForSignerInCycleResponseSchema,
|
|
697
622
|
data
|
|
698
623
|
);
|
|
@@ -706,100 +631,45 @@ async function stackersForSignerInCycle(opts) {
|
|
|
706
631
|
return success(validationResult.output);
|
|
707
632
|
}
|
|
708
633
|
|
|
709
|
-
// src/stacks-api/
|
|
710
|
-
var
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
result: v12.string()
|
|
718
|
-
}),
|
|
719
|
-
v12.object({
|
|
720
|
-
okay: v12.literal(false),
|
|
721
|
-
cause: v12.unknown()
|
|
722
|
-
})
|
|
723
|
-
]);
|
|
724
|
-
async function readOnly(args) {
|
|
725
|
-
const headers = {
|
|
726
|
-
"Content-Type": "application/json"
|
|
727
|
-
};
|
|
728
|
-
if (args.apiKeyConfig) {
|
|
729
|
-
headers[args.apiKeyConfig.header] = args.apiKeyConfig.key;
|
|
730
|
-
}
|
|
731
|
-
const init = {
|
|
732
|
-
method: "POST",
|
|
733
|
-
body: JSON.stringify({
|
|
734
|
-
sender: args.sender,
|
|
735
|
-
arguments: args.arguments
|
|
736
|
-
}),
|
|
737
|
-
headers
|
|
738
|
-
};
|
|
739
|
-
const endpoint = `${args.baseUrl}/v2/contracts/call-read/${args.contractAddress}/${args.contractName}/${args.functionName}`;
|
|
740
|
-
const res = await fetch(endpoint, init);
|
|
741
|
-
if (!res.ok) {
|
|
742
|
-
return error({
|
|
743
|
-
name: "FetchReadOnlyError",
|
|
744
|
-
message: "Failed to fetch.",
|
|
745
|
-
data: {
|
|
746
|
-
status: res.status,
|
|
747
|
-
statusText: res.statusText,
|
|
748
|
-
bodyParseResult: await safePromise(res.json())
|
|
749
|
-
}
|
|
750
|
-
});
|
|
751
|
-
}
|
|
752
|
-
const [jsonError, data] = await safePromise(res.json());
|
|
753
|
-
if (jsonError) {
|
|
754
|
-
return error({
|
|
755
|
-
name: "ParseBodyError",
|
|
756
|
-
message: "Failed to parse response body as JSON.",
|
|
757
|
-
data: error
|
|
758
|
-
});
|
|
759
|
-
}
|
|
760
|
-
const validationResult = v12.safeParse(readOnlyResponseSchema, data);
|
|
761
|
-
if (!validationResult.success) {
|
|
762
|
-
return error({
|
|
763
|
-
name: "ValidateDataError",
|
|
764
|
-
message: "Failed to validate data.",
|
|
765
|
-
data: validationResult
|
|
766
|
-
});
|
|
767
|
-
}
|
|
768
|
-
return success(validationResult.output);
|
|
769
|
-
}
|
|
634
|
+
// src/stacks-api/proof-of-transfer/index.ts
|
|
635
|
+
var proofOfTransfer = {
|
|
636
|
+
cycle,
|
|
637
|
+
cycles,
|
|
638
|
+
signerInCycle,
|
|
639
|
+
signersInCycle,
|
|
640
|
+
stackersForSignerInCycle
|
|
641
|
+
};
|
|
770
642
|
|
|
771
643
|
// src/stacks-api/stacking-pool/members.ts
|
|
772
|
-
var
|
|
773
|
-
var memberSchema =
|
|
774
|
-
stacker:
|
|
775
|
-
pox_addr:
|
|
776
|
-
amount_ustx:
|
|
777
|
-
burn_block_unlock_height:
|
|
778
|
-
block_height:
|
|
779
|
-
tx_id:
|
|
644
|
+
var v10 = __toESM(require("valibot"), 1);
|
|
645
|
+
var memberSchema = v10.object({
|
|
646
|
+
stacker: v10.string(),
|
|
647
|
+
pox_addr: v10.optional(v10.string()),
|
|
648
|
+
amount_ustx: v10.string(),
|
|
649
|
+
burn_block_unlock_height: v10.optional(v10.number()),
|
|
650
|
+
block_height: v10.number(),
|
|
651
|
+
tx_id: v10.string()
|
|
780
652
|
});
|
|
781
|
-
var membersResponseSchema =
|
|
782
|
-
limit:
|
|
783
|
-
offset:
|
|
784
|
-
total:
|
|
785
|
-
results:
|
|
653
|
+
var membersResponseSchema = v10.object({
|
|
654
|
+
limit: v10.number(),
|
|
655
|
+
offset: v10.number(),
|
|
656
|
+
total: v10.number(),
|
|
657
|
+
results: v10.array(memberSchema)
|
|
786
658
|
});
|
|
787
|
-
async function members(
|
|
659
|
+
async function members(args) {
|
|
788
660
|
const search = new URLSearchParams();
|
|
789
|
-
if (
|
|
790
|
-
if (
|
|
791
|
-
if (
|
|
792
|
-
if (
|
|
661
|
+
if (args.afterBlock) search.append("after_block", args.afterBlock.toString());
|
|
662
|
+
if (args.unanchored) search.append("unanchored", "true");
|
|
663
|
+
if (args.limit) search.append("limit", args.limit.toString());
|
|
664
|
+
if (args.offset) search.append("offset", args.offset.toString());
|
|
793
665
|
const init = {};
|
|
794
|
-
if (
|
|
666
|
+
if (args.apiKeyConfig) {
|
|
795
667
|
init.headers = {
|
|
796
|
-
[
|
|
668
|
+
[args.apiKeyConfig.header]: args.apiKeyConfig.key
|
|
797
669
|
};
|
|
798
670
|
}
|
|
799
|
-
const
|
|
800
|
-
|
|
801
|
-
init
|
|
802
|
-
);
|
|
671
|
+
const endpoint = `${args.baseUrl}/extended/v1/pox4/${args.poolPrincipal}/delegations?${search}`;
|
|
672
|
+
const res = await fetch(endpoint, init);
|
|
803
673
|
if (!res.ok) {
|
|
804
674
|
return error({
|
|
805
675
|
name: "FetchMembersError",
|
|
@@ -819,7 +689,7 @@ async function members(opts, apiOpts) {
|
|
|
819
689
|
data: jsonParseError
|
|
820
690
|
});
|
|
821
691
|
}
|
|
822
|
-
const validationResult =
|
|
692
|
+
const validationResult = v10.safeParse(membersResponseSchema, data);
|
|
823
693
|
if (!validationResult.success) {
|
|
824
694
|
return error({
|
|
825
695
|
name: "ValidateDataError",
|
|
@@ -830,121 +700,126 @@ async function members(opts, apiOpts) {
|
|
|
830
700
|
return success(validationResult.output);
|
|
831
701
|
}
|
|
832
702
|
|
|
703
|
+
// src/stacks-api/stacking-pool/index.ts
|
|
704
|
+
var stackingPool = {
|
|
705
|
+
members
|
|
706
|
+
};
|
|
707
|
+
|
|
833
708
|
// src/stacks-api/transactions/schemas.ts
|
|
834
|
-
var
|
|
835
|
-
var baseTransactionSchema =
|
|
836
|
-
tx_id:
|
|
837
|
-
nonce:
|
|
838
|
-
fee_rate:
|
|
839
|
-
sender_address:
|
|
840
|
-
sponsored:
|
|
841
|
-
post_condition_mode:
|
|
842
|
-
post_conditions:
|
|
843
|
-
anchor_mode:
|
|
844
|
-
is_unanchored:
|
|
845
|
-
block_hash:
|
|
846
|
-
parent_block_hash:
|
|
847
|
-
block_height:
|
|
848
|
-
block_time:
|
|
849
|
-
block_time_iso:
|
|
850
|
-
burn_block_height:
|
|
851
|
-
burn_block_time:
|
|
852
|
-
burn_block_time_iso:
|
|
853
|
-
parent_burn_block_time:
|
|
854
|
-
parent_burn_block_time_iso:
|
|
855
|
-
canonical:
|
|
856
|
-
tx_index:
|
|
857
|
-
tx_status:
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
709
|
+
var v11 = __toESM(require("valibot"), 1);
|
|
710
|
+
var baseTransactionSchema = v11.object({
|
|
711
|
+
tx_id: v11.string(),
|
|
712
|
+
nonce: v11.number(),
|
|
713
|
+
fee_rate: v11.string(),
|
|
714
|
+
sender_address: v11.string(),
|
|
715
|
+
sponsored: v11.boolean(),
|
|
716
|
+
post_condition_mode: v11.string(),
|
|
717
|
+
post_conditions: v11.array(v11.unknown()),
|
|
718
|
+
anchor_mode: v11.string(),
|
|
719
|
+
is_unanchored: v11.boolean(),
|
|
720
|
+
block_hash: v11.string(),
|
|
721
|
+
parent_block_hash: v11.string(),
|
|
722
|
+
block_height: v11.number(),
|
|
723
|
+
block_time: v11.number(),
|
|
724
|
+
block_time_iso: v11.string(),
|
|
725
|
+
burn_block_height: v11.number(),
|
|
726
|
+
burn_block_time: v11.number(),
|
|
727
|
+
burn_block_time_iso: v11.string(),
|
|
728
|
+
parent_burn_block_time: v11.number(),
|
|
729
|
+
parent_burn_block_time_iso: v11.string(),
|
|
730
|
+
canonical: v11.boolean(),
|
|
731
|
+
tx_index: v11.number(),
|
|
732
|
+
tx_status: v11.union([
|
|
733
|
+
v11.literal("success"),
|
|
734
|
+
v11.literal("abort_by_response"),
|
|
735
|
+
v11.literal("abort_by_post_condition")
|
|
861
736
|
]),
|
|
862
|
-
tx_result:
|
|
863
|
-
hex:
|
|
864
|
-
repr:
|
|
737
|
+
tx_result: v11.object({
|
|
738
|
+
hex: v11.string(),
|
|
739
|
+
repr: v11.string()
|
|
865
740
|
}),
|
|
866
|
-
microblock_hash:
|
|
867
|
-
microblock_sequence:
|
|
868
|
-
microblock_canonical:
|
|
869
|
-
event_count:
|
|
870
|
-
events:
|
|
871
|
-
execution_cost_read_count:
|
|
872
|
-
execution_cost_read_length:
|
|
873
|
-
execution_cost_runtime:
|
|
874
|
-
execution_cost_write_count:
|
|
875
|
-
execution_cost_write_length:
|
|
741
|
+
microblock_hash: v11.string(),
|
|
742
|
+
microblock_sequence: v11.number(),
|
|
743
|
+
microblock_canonical: v11.boolean(),
|
|
744
|
+
event_count: v11.number(),
|
|
745
|
+
events: v11.array(v11.unknown()),
|
|
746
|
+
execution_cost_read_count: v11.number(),
|
|
747
|
+
execution_cost_read_length: v11.number(),
|
|
748
|
+
execution_cost_runtime: v11.number(),
|
|
749
|
+
execution_cost_write_count: v11.number(),
|
|
750
|
+
execution_cost_write_length: v11.number()
|
|
876
751
|
});
|
|
877
|
-
var contractCallTransactionSchema =
|
|
878
|
-
tx_type:
|
|
879
|
-
contract_call:
|
|
880
|
-
contract_id:
|
|
881
|
-
function_name:
|
|
882
|
-
function_signature:
|
|
883
|
-
function_args:
|
|
884
|
-
|
|
885
|
-
hex:
|
|
886
|
-
repr:
|
|
887
|
-
name:
|
|
888
|
-
type:
|
|
752
|
+
var contractCallTransactionSchema = v11.object({
|
|
753
|
+
tx_type: v11.literal("contract_call"),
|
|
754
|
+
contract_call: v11.object({
|
|
755
|
+
contract_id: v11.string(),
|
|
756
|
+
function_name: v11.string(),
|
|
757
|
+
function_signature: v11.string(),
|
|
758
|
+
function_args: v11.array(
|
|
759
|
+
v11.object({
|
|
760
|
+
hex: v11.string(),
|
|
761
|
+
repr: v11.string(),
|
|
762
|
+
name: v11.string(),
|
|
763
|
+
type: v11.string()
|
|
889
764
|
})
|
|
890
765
|
)
|
|
891
766
|
}),
|
|
892
767
|
...baseTransactionSchema.entries
|
|
893
768
|
});
|
|
894
|
-
var smartContractTransactionSchema =
|
|
895
|
-
tx_type:
|
|
896
|
-
smart_contract:
|
|
769
|
+
var smartContractTransactionSchema = v11.object({
|
|
770
|
+
tx_type: v11.literal("smart_contract"),
|
|
771
|
+
smart_contract: v11.object({
|
|
897
772
|
/**
|
|
898
773
|
* NOTE: The types may be wrong, not sure what type of value is used when
|
|
899
774
|
* the version is not `null`.
|
|
900
775
|
*/
|
|
901
|
-
clarity_version:
|
|
902
|
-
contract_id:
|
|
903
|
-
source_code:
|
|
776
|
+
clarity_version: v11.union([v11.null(), v11.number()]),
|
|
777
|
+
contract_id: v11.string(),
|
|
778
|
+
source_code: v11.string()
|
|
904
779
|
}),
|
|
905
780
|
...baseTransactionSchema.entries
|
|
906
781
|
});
|
|
907
|
-
var tokenTransferSchema =
|
|
908
|
-
tx_type:
|
|
909
|
-
token_transfer:
|
|
910
|
-
recipient_address:
|
|
911
|
-
amount:
|
|
912
|
-
memo:
|
|
782
|
+
var tokenTransferSchema = v11.object({
|
|
783
|
+
tx_type: v11.literal("token_transfer"),
|
|
784
|
+
token_transfer: v11.object({
|
|
785
|
+
recipient_address: v11.string(),
|
|
786
|
+
amount: v11.string(),
|
|
787
|
+
memo: v11.string()
|
|
913
788
|
}),
|
|
914
789
|
...baseTransactionSchema.entries
|
|
915
790
|
});
|
|
916
|
-
var transactionSchema =
|
|
791
|
+
var transactionSchema = v11.variant("tx_type", [
|
|
917
792
|
contractCallTransactionSchema,
|
|
918
793
|
smartContractTransactionSchema,
|
|
919
794
|
tokenTransferSchema
|
|
920
795
|
]);
|
|
921
796
|
|
|
922
797
|
// src/stacks-api/transactions/address-transactions.ts
|
|
923
|
-
var
|
|
924
|
-
var resultSchema =
|
|
798
|
+
var v12 = __toESM(require("valibot"), 1);
|
|
799
|
+
var resultSchema = v12.object({
|
|
925
800
|
tx: transactionSchema,
|
|
926
|
-
stx_sent:
|
|
927
|
-
stx_received:
|
|
928
|
-
events:
|
|
929
|
-
stx:
|
|
930
|
-
transfer:
|
|
931
|
-
mint:
|
|
932
|
-
burn:
|
|
801
|
+
stx_sent: v12.string(),
|
|
802
|
+
stx_received: v12.string(),
|
|
803
|
+
events: v12.object({
|
|
804
|
+
stx: v12.object({
|
|
805
|
+
transfer: v12.number(),
|
|
806
|
+
mint: v12.number(),
|
|
807
|
+
burn: v12.number()
|
|
933
808
|
}),
|
|
934
|
-
ft:
|
|
935
|
-
transfer:
|
|
936
|
-
mint:
|
|
937
|
-
burn:
|
|
809
|
+
ft: v12.object({
|
|
810
|
+
transfer: v12.number(),
|
|
811
|
+
mint: v12.number(),
|
|
812
|
+
burn: v12.number()
|
|
938
813
|
}),
|
|
939
|
-
nft:
|
|
940
|
-
transfer:
|
|
941
|
-
mint:
|
|
942
|
-
burn:
|
|
814
|
+
nft: v12.object({
|
|
815
|
+
transfer: v12.number(),
|
|
816
|
+
mint: v12.number(),
|
|
817
|
+
burn: v12.number()
|
|
943
818
|
})
|
|
944
819
|
})
|
|
945
820
|
});
|
|
946
|
-
var resultsSchema4 =
|
|
947
|
-
var addressTransactionsResponseSchema =
|
|
821
|
+
var resultsSchema4 = v12.array(resultSchema);
|
|
822
|
+
var addressTransactionsResponseSchema = v12.object({
|
|
948
823
|
...baseListResponseSchema.entries,
|
|
949
824
|
results: resultsSchema4
|
|
950
825
|
});
|
|
@@ -981,7 +856,7 @@ async function addressTransactions(args) {
|
|
|
981
856
|
data: jsonParseError
|
|
982
857
|
});
|
|
983
858
|
}
|
|
984
|
-
const validationResult =
|
|
859
|
+
const validationResult = v12.safeParse(addressTransactionsResponseSchema, data);
|
|
985
860
|
if (!validationResult.success) {
|
|
986
861
|
return error({
|
|
987
862
|
name: "ValidateDataError",
|
|
@@ -993,7 +868,7 @@ async function addressTransactions(args) {
|
|
|
993
868
|
}
|
|
994
869
|
|
|
995
870
|
// src/stacks-api/transactions/get-transaction.ts
|
|
996
|
-
var
|
|
871
|
+
var v13 = __toESM(require("valibot"), 1);
|
|
997
872
|
async function getTransaction(args) {
|
|
998
873
|
const init = {};
|
|
999
874
|
if (args.apiKeyConfig) {
|
|
@@ -1022,7 +897,7 @@ async function getTransaction(args) {
|
|
|
1022
897
|
error: jsonParseError
|
|
1023
898
|
});
|
|
1024
899
|
}
|
|
1025
|
-
const validationResult =
|
|
900
|
+
const validationResult = v13.safeParse(transactionSchema, data);
|
|
1026
901
|
if (!validationResult.success) {
|
|
1027
902
|
return error({
|
|
1028
903
|
name: "ValidateDataError",
|
|
@@ -1033,20 +908,215 @@ async function getTransaction(args) {
|
|
|
1033
908
|
return success(validationResult.output);
|
|
1034
909
|
}
|
|
1035
910
|
|
|
911
|
+
// src/stacks-api/transactions/mempool-transactions.ts
|
|
912
|
+
async function mempoolTransactions(args) {
|
|
913
|
+
const search = new URLSearchParams();
|
|
914
|
+
if (args.limit) search.append("limit", args.limit.toString());
|
|
915
|
+
if (args.offset) search.append("offset", args.offset.toString());
|
|
916
|
+
if (args.senderAddress) search.append("sender_address", args.senderAddress);
|
|
917
|
+
if (args.recipientAddress)
|
|
918
|
+
search.append("recipient_address", args.recipientAddress);
|
|
919
|
+
if (args.address) search.append("address", args.address);
|
|
920
|
+
if (args.orderBy) search.append("order_by", args.orderBy);
|
|
921
|
+
if (args.order) search.append("order", args.order);
|
|
922
|
+
const init = {};
|
|
923
|
+
if (args.apiKeyConfig) {
|
|
924
|
+
init.headers = {
|
|
925
|
+
[args.apiKeyConfig.header]: args.apiKeyConfig.key
|
|
926
|
+
};
|
|
927
|
+
}
|
|
928
|
+
const res = await fetch(
|
|
929
|
+
`${args.baseUrl}/extended/v1/tx/mempool?${search}`,
|
|
930
|
+
init
|
|
931
|
+
);
|
|
932
|
+
if (!res.ok) {
|
|
933
|
+
return error({
|
|
934
|
+
name: "FetchMempoolTransactionsError",
|
|
935
|
+
message: "Failed to fetch mempool transactions.",
|
|
936
|
+
data: {
|
|
937
|
+
status: res.status,
|
|
938
|
+
statusText: res.statusText,
|
|
939
|
+
bodyParseResult: await safePromise(res.json())
|
|
940
|
+
}
|
|
941
|
+
});
|
|
942
|
+
}
|
|
943
|
+
const [jsonParseError, data] = await safePromise(res.json());
|
|
944
|
+
if (jsonParseError) {
|
|
945
|
+
return error({
|
|
946
|
+
name: "ParseBodyError",
|
|
947
|
+
message: "Failed to parse response body.",
|
|
948
|
+
data: jsonParseError
|
|
949
|
+
});
|
|
950
|
+
}
|
|
951
|
+
return success(data);
|
|
952
|
+
}
|
|
953
|
+
|
|
954
|
+
// src/stacks-api/transactions/index.ts
|
|
955
|
+
var transactions = {
|
|
956
|
+
addressTransactions,
|
|
957
|
+
getTransaction,
|
|
958
|
+
mempoolTransactions
|
|
959
|
+
};
|
|
960
|
+
|
|
1036
961
|
// src/stacks-api/index.ts
|
|
1037
|
-
var
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
962
|
+
var stacksApi = {
|
|
963
|
+
accounts,
|
|
964
|
+
blocks,
|
|
965
|
+
faucets,
|
|
966
|
+
info,
|
|
967
|
+
proofOfTransfer,
|
|
968
|
+
stackingPool,
|
|
969
|
+
transactions
|
|
970
|
+
};
|
|
971
|
+
|
|
972
|
+
// src/stacks-rpc-api/smart-contracts/map-entry.ts
|
|
973
|
+
var v14 = __toESM(require("valibot"), 1);
|
|
974
|
+
var mapEntryResponseSchema = v14.object({
|
|
975
|
+
/**
|
|
976
|
+
* Hex-encoded string of clarity value. It is always an optional tuple.
|
|
977
|
+
*/
|
|
978
|
+
data: v14.string(),
|
|
979
|
+
/**
|
|
980
|
+
* Hex-encoded string of the MARF proof for the data
|
|
981
|
+
*/
|
|
982
|
+
proof: v14.optional(v14.string())
|
|
983
|
+
});
|
|
984
|
+
async function mapEntry(args) {
|
|
985
|
+
const search = new URLSearchParams();
|
|
986
|
+
if (args.proof === 0) search.append("proof", "0");
|
|
987
|
+
if (args.tip) search.append("tip", args.tip);
|
|
988
|
+
const init = {};
|
|
989
|
+
if (args.apiKeyConfig) {
|
|
990
|
+
init.headers = {
|
|
991
|
+
[args.apiKeyConfig.header]: args.apiKeyConfig.key
|
|
992
|
+
};
|
|
993
|
+
}
|
|
994
|
+
init.method = "POST";
|
|
995
|
+
init.body = JSON.stringify(
|
|
996
|
+
args.mapKey.startsWith("0x") ? args.mapKey : `0x${args.mapKey}`
|
|
997
|
+
);
|
|
998
|
+
init.headers = { ...init.headers, "Content-Type": "application/json" };
|
|
999
|
+
const endpoint = `${args.baseUrl}/v2/map_entry/${args.contractAddress}/${args.contractName}/${args.mapName}?${search}`;
|
|
1000
|
+
const res = await fetch(endpoint, init);
|
|
1001
|
+
if (!res.ok) {
|
|
1002
|
+
return error({
|
|
1003
|
+
name: "FetchMapEntryError",
|
|
1004
|
+
message: "Failed to fetch map entry.",
|
|
1005
|
+
data: {
|
|
1006
|
+
init,
|
|
1007
|
+
status: res.status,
|
|
1008
|
+
statusText: res.statusText,
|
|
1009
|
+
endpoint,
|
|
1010
|
+
bodyParseResult: await safePromise(res.text())
|
|
1011
|
+
}
|
|
1012
|
+
});
|
|
1013
|
+
}
|
|
1014
|
+
const [jsonError, data] = await safePromise(res.json());
|
|
1015
|
+
if (jsonError) {
|
|
1016
|
+
return error({
|
|
1017
|
+
name: "ParseBodyError",
|
|
1018
|
+
message: "Failed to parse response body as JSON.",
|
|
1019
|
+
data: jsonError
|
|
1020
|
+
});
|
|
1021
|
+
}
|
|
1022
|
+
const validationResult = v14.safeParse(mapEntryResponseSchema, data);
|
|
1023
|
+
if (!validationResult.success) {
|
|
1024
|
+
return error({
|
|
1025
|
+
name: "ValidateDataError",
|
|
1026
|
+
message: "Failed to validate response data.",
|
|
1027
|
+
data: validationResult
|
|
1028
|
+
});
|
|
1029
|
+
}
|
|
1030
|
+
return success(validationResult.output);
|
|
1031
|
+
}
|
|
1032
|
+
|
|
1033
|
+
// src/stacks-rpc-api/smart-contracts/read-only.ts
|
|
1034
|
+
async function readOnly(args) {
|
|
1035
|
+
const headers = {
|
|
1036
|
+
"Content-Type": "application/json"
|
|
1037
|
+
};
|
|
1038
|
+
if (args.apiKeyConfig) {
|
|
1039
|
+
headers[args.apiKeyConfig.header] = args.apiKeyConfig.key;
|
|
1040
|
+
}
|
|
1041
|
+
const init = {
|
|
1042
|
+
method: "POST",
|
|
1043
|
+
body: JSON.stringify({
|
|
1044
|
+
sender: args.sender,
|
|
1045
|
+
arguments: args.arguments
|
|
1046
|
+
}),
|
|
1047
|
+
headers
|
|
1048
|
+
};
|
|
1049
|
+
const endpoint = `${args.baseUrl}/v2/contracts/call-read/${args.contractAddress}/${args.contractName}/${args.functionName}`;
|
|
1050
|
+
const res = await fetch(endpoint, init);
|
|
1051
|
+
if (!res.ok) {
|
|
1052
|
+
return error({
|
|
1053
|
+
name: "FetchReadOnlyError",
|
|
1054
|
+
message: "Failed to fetch.",
|
|
1055
|
+
data: {
|
|
1056
|
+
status: res.status,
|
|
1057
|
+
statusText: res.statusText,
|
|
1058
|
+
bodyParseResult: await safePromise(res.json())
|
|
1059
|
+
}
|
|
1060
|
+
});
|
|
1061
|
+
}
|
|
1062
|
+
const [jsonError, data] = await safePromise(res.json());
|
|
1063
|
+
if (jsonError) {
|
|
1064
|
+
return error({
|
|
1065
|
+
name: "ParseBodyError",
|
|
1066
|
+
message: "Failed to parse response body as JSON.",
|
|
1067
|
+
data: error
|
|
1068
|
+
});
|
|
1069
|
+
}
|
|
1070
|
+
return success(data);
|
|
1071
|
+
}
|
|
1072
|
+
|
|
1073
|
+
// src/stacks-rpc-api/smart-contracts/index.ts
|
|
1074
|
+
var smartContracts = {
|
|
1075
|
+
mapEntry,
|
|
1076
|
+
readOnly
|
|
1077
|
+
};
|
|
1078
|
+
|
|
1079
|
+
// src/stacks-rpc-api/pox/pox-details.ts
|
|
1080
|
+
async function poxDetails(args) {
|
|
1081
|
+
const init = {};
|
|
1082
|
+
if (args.apiKeyConfig) {
|
|
1083
|
+
init.headers = {
|
|
1084
|
+
[args.apiKeyConfig.header]: args.apiKeyConfig.key
|
|
1085
|
+
};
|
|
1086
|
+
}
|
|
1087
|
+
const res = await fetch(`${args.baseUrl}/v2/pox`, init);
|
|
1088
|
+
if (!res.ok) {
|
|
1089
|
+
return error({
|
|
1090
|
+
name: "FetchPoxDetailsError",
|
|
1091
|
+
message: "Failed to fetch pox details.",
|
|
1092
|
+
data: {
|
|
1093
|
+
status: res.status,
|
|
1094
|
+
statusText: res.statusText,
|
|
1095
|
+
bodyParseResult: await safePromise(res.json())
|
|
1096
|
+
}
|
|
1097
|
+
});
|
|
1098
|
+
}
|
|
1099
|
+
const [jsonParseError, data] = await safePromise(res.json());
|
|
1100
|
+
if (jsonParseError) {
|
|
1101
|
+
return error({
|
|
1102
|
+
name: "ParseBodyError",
|
|
1103
|
+
message: "Failed to parse pox details response.",
|
|
1104
|
+
data: jsonParseError
|
|
1105
|
+
});
|
|
1106
|
+
}
|
|
1107
|
+
return success(data);
|
|
1108
|
+
}
|
|
1109
|
+
|
|
1110
|
+
// src/stacks-rpc-api/pox/index.ts
|
|
1111
|
+
var pox = {
|
|
1112
|
+
poxDetails
|
|
1113
|
+
};
|
|
1114
|
+
|
|
1115
|
+
// src/stacks-rpc-api/index.ts
|
|
1116
|
+
var stacksRpcApi = {
|
|
1117
|
+
pox,
|
|
1118
|
+
smartContracts
|
|
1046
1119
|
};
|
|
1047
|
-
var smartContracts = { readOnly };
|
|
1048
|
-
var stackingPool = { members };
|
|
1049
|
-
var transactions = { addressTransactions, getTransaction };
|
|
1050
1120
|
|
|
1051
1121
|
// src/utils/call-rate-limited-api.ts
|
|
1052
1122
|
var import_exponential_backoff = require("exponential-backoff");
|
|
@@ -1084,23 +1154,204 @@ async function safeCallRateLimitedApi(fn, options) {
|
|
|
1084
1154
|
}
|
|
1085
1155
|
}
|
|
1086
1156
|
|
|
1087
|
-
// src/
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1157
|
+
// src/queries/get-signer-stacked-amount.ts
|
|
1158
|
+
async function getSignerStackedAmount(args) {
|
|
1159
|
+
let totalLocked = 0n;
|
|
1160
|
+
const { identifier, ...rest } = args;
|
|
1161
|
+
let hasMore = true;
|
|
1162
|
+
let offset = 0;
|
|
1163
|
+
let found = false;
|
|
1164
|
+
const limit = 200;
|
|
1165
|
+
while (hasMore && !found) {
|
|
1166
|
+
const [error2, data] = await safeCallRateLimitedApi(
|
|
1167
|
+
() => signersInCycle({
|
|
1168
|
+
...rest,
|
|
1169
|
+
limit
|
|
1170
|
+
})
|
|
1171
|
+
);
|
|
1172
|
+
if (error2) {
|
|
1173
|
+
return error({
|
|
1174
|
+
name: "GetSignerTotalLockedError",
|
|
1175
|
+
message: "Failed to get signer total locked.",
|
|
1176
|
+
data: {
|
|
1177
|
+
error: error2
|
|
1178
|
+
}
|
|
1179
|
+
});
|
|
1180
|
+
}
|
|
1181
|
+
for (const signer of data.results) {
|
|
1182
|
+
if (identifier.type === "address") {
|
|
1183
|
+
if (signer.signer_address === identifier.signerAddress) {
|
|
1184
|
+
totalLocked = BigInt(signer.stacked_amount);
|
|
1185
|
+
found = true;
|
|
1186
|
+
break;
|
|
1187
|
+
}
|
|
1188
|
+
} else {
|
|
1189
|
+
if (signer.signing_key === identifier.signerPublicKey) {
|
|
1190
|
+
totalLocked = BigInt(signer.stacked_amount);
|
|
1191
|
+
found = true;
|
|
1192
|
+
break;
|
|
1193
|
+
}
|
|
1194
|
+
}
|
|
1195
|
+
}
|
|
1196
|
+
offset += data.results.length;
|
|
1197
|
+
hasMore = offset < data.total;
|
|
1198
|
+
}
|
|
1199
|
+
if (!found) {
|
|
1200
|
+
return error({
|
|
1201
|
+
name: "SignerNotFound",
|
|
1202
|
+
message: "Signer not found.",
|
|
1203
|
+
data: {
|
|
1204
|
+
identifier,
|
|
1205
|
+
cycle: args.cycleNumber
|
|
1206
|
+
}
|
|
1207
|
+
});
|
|
1208
|
+
}
|
|
1209
|
+
return success(totalLocked);
|
|
1210
|
+
}
|
|
1211
|
+
|
|
1212
|
+
// src/queries/index.ts
|
|
1213
|
+
var queries = {
|
|
1214
|
+
getSignerStackedAmount
|
|
1215
|
+
};
|
|
1216
|
+
|
|
1217
|
+
// src/pox4-api/maps/stacking-state.ts
|
|
1218
|
+
var import_transactions2 = require("@stacks/transactions");
|
|
1219
|
+
|
|
1220
|
+
// src/pox4-api/constants.ts
|
|
1221
|
+
var netValueMap = {
|
|
1222
|
+
mainnet: {
|
|
1223
|
+
pox4ContractAddress: "SP000000000000000000002Q6VF78",
|
|
1224
|
+
pox4ContractName: "pox-4"
|
|
1225
|
+
},
|
|
1226
|
+
testnet: {
|
|
1227
|
+
pox4ContractAddress: "ST000000000000000000002AMW42H",
|
|
1228
|
+
pox4ContractName: "pox-4"
|
|
1229
|
+
}
|
|
1096
1230
|
};
|
|
1231
|
+
function networkDependentValues(network) {
|
|
1232
|
+
return netValueMap[network];
|
|
1233
|
+
}
|
|
1234
|
+
|
|
1235
|
+
// src/pox4-api/maps/stacking-state.ts
|
|
1236
|
+
async function stackingState({
|
|
1237
|
+
key,
|
|
1238
|
+
network,
|
|
1239
|
+
baseUrl,
|
|
1240
|
+
apiKeyConfig,
|
|
1241
|
+
proof,
|
|
1242
|
+
tip
|
|
1243
|
+
}) {
|
|
1244
|
+
const [mapEntryError, mapEntryData] = await mapEntry({
|
|
1245
|
+
contractAddress: networkDependentValues(network).pox4ContractAddress,
|
|
1246
|
+
contractName: networkDependentValues(network).pox4ContractName,
|
|
1247
|
+
mapKey: (0, import_transactions2.cvToHex)(key),
|
|
1248
|
+
mapName: "stacking-state",
|
|
1249
|
+
apiKeyConfig,
|
|
1250
|
+
proof,
|
|
1251
|
+
tip,
|
|
1252
|
+
baseUrl
|
|
1253
|
+
});
|
|
1254
|
+
if (mapEntryError)
|
|
1255
|
+
return error({
|
|
1256
|
+
name: "FetchStackingStateError",
|
|
1257
|
+
message: "Failed to fetch stacking state.",
|
|
1258
|
+
data: mapEntryError
|
|
1259
|
+
});
|
|
1260
|
+
return success({
|
|
1261
|
+
data: (0, import_transactions2.hexToCV)(mapEntryData.data),
|
|
1262
|
+
proof: mapEntryData.proof
|
|
1263
|
+
});
|
|
1264
|
+
}
|
|
1265
|
+
|
|
1266
|
+
// src/pox4-api/maps/index.ts
|
|
1267
|
+
var maps = { stackingState };
|
|
1268
|
+
|
|
1269
|
+
// src/pox4-api/read-only/get-stacker-info.ts
|
|
1270
|
+
var import_transactions3 = require("@stacks/transactions");
|
|
1271
|
+
async function getStackerInfo({
|
|
1272
|
+
principal,
|
|
1273
|
+
network,
|
|
1274
|
+
baseUrl,
|
|
1275
|
+
apiKeyConfig
|
|
1276
|
+
}) {
|
|
1277
|
+
const [readOnlyError, readOnlyData] = await stacksRpcApi.smartContracts.readOnly({
|
|
1278
|
+
contractAddress: networkDependentValues(network).pox4ContractAddress,
|
|
1279
|
+
contractName: networkDependentValues(network).pox4ContractName,
|
|
1280
|
+
functionName: "get-stacker-info",
|
|
1281
|
+
arguments: [(0, import_transactions3.cvToHex)((0, import_transactions3.principalCV)(principal))],
|
|
1282
|
+
baseUrl,
|
|
1283
|
+
apiKeyConfig,
|
|
1284
|
+
sender: principal
|
|
1285
|
+
});
|
|
1286
|
+
if (readOnlyError) {
|
|
1287
|
+
return error({
|
|
1288
|
+
name: "GetStackerInfoError",
|
|
1289
|
+
message: "Failed to get stacker info.",
|
|
1290
|
+
data: readOnlyError
|
|
1291
|
+
});
|
|
1292
|
+
}
|
|
1293
|
+
if (!readOnlyData.okay) {
|
|
1294
|
+
return error({
|
|
1295
|
+
name: "GetStackerInfoFunctionCallError",
|
|
1296
|
+
message: "Call to `get-stacker-info` failed.",
|
|
1297
|
+
data: readOnlyData
|
|
1298
|
+
});
|
|
1299
|
+
}
|
|
1300
|
+
return success((0, import_transactions3.hexToCV)(readOnlyData.result));
|
|
1301
|
+
}
|
|
1302
|
+
|
|
1303
|
+
// src/pox4-api/read-only/get-check-delegation.ts
|
|
1304
|
+
var import_transactions4 = require("@stacks/transactions");
|
|
1305
|
+
async function getCheckDelegation({
|
|
1306
|
+
principal,
|
|
1307
|
+
network,
|
|
1308
|
+
baseUrl,
|
|
1309
|
+
apiKeyConfig
|
|
1310
|
+
}) {
|
|
1311
|
+
const [readOnlyError, readOnlyData] = await stacksRpcApi.smartContracts.readOnly({
|
|
1312
|
+
contractAddress: networkDependentValues(network).pox4ContractAddress,
|
|
1313
|
+
contractName: networkDependentValues(network).pox4ContractName,
|
|
1314
|
+
functionName: "get-check-delegation",
|
|
1315
|
+
arguments: [(0, import_transactions4.cvToHex)((0, import_transactions4.principalCV)(principal))],
|
|
1316
|
+
baseUrl,
|
|
1317
|
+
apiKeyConfig,
|
|
1318
|
+
sender: principal
|
|
1319
|
+
});
|
|
1320
|
+
if (readOnlyError) {
|
|
1321
|
+
return error({
|
|
1322
|
+
name: "GetCheckDelegationError",
|
|
1323
|
+
message: "Failed to get check delegation.",
|
|
1324
|
+
data: readOnlyError
|
|
1325
|
+
});
|
|
1326
|
+
}
|
|
1327
|
+
if (!readOnlyData.okay) {
|
|
1328
|
+
return error({
|
|
1329
|
+
name: "GetCheckDelegationFunctionCallError",
|
|
1330
|
+
message: "Call to `get-check-delegation` failed.",
|
|
1331
|
+
data: readOnlyData
|
|
1332
|
+
});
|
|
1333
|
+
}
|
|
1334
|
+
return success((0, import_transactions4.hexToCV)(readOnlyData.result));
|
|
1335
|
+
}
|
|
1336
|
+
|
|
1337
|
+
// src/pox4-api/read-only/index.ts
|
|
1338
|
+
var readOnly2 = {
|
|
1339
|
+
getStackerInfo,
|
|
1340
|
+
getCheckDelegation
|
|
1341
|
+
};
|
|
1342
|
+
|
|
1343
|
+
// src/pox4-api/index.ts
|
|
1344
|
+
var pox4Api = { maps, readOnly: readOnly2 };
|
|
1097
1345
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1098
1346
|
0 && (module.exports = {
|
|
1099
1347
|
callRateLimitedApi,
|
|
1100
1348
|
error,
|
|
1349
|
+
pox4Api,
|
|
1350
|
+
queries,
|
|
1101
1351
|
safeCall,
|
|
1102
1352
|
safeCallRateLimitedApi,
|
|
1103
1353
|
safePromise,
|
|
1104
1354
|
stacksApi,
|
|
1355
|
+
stacksRpcApi,
|
|
1105
1356
|
success
|
|
1106
1357
|
});
|