@secretkeylabs/stacks-tools 0.4.0-fdbbd5e → 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 -427
- package/dist/index.d.cts +526 -223
- package/dist/index.d.ts +526 -223
- package/dist/index.js +687 -427
- 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,35 +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.string(),
|
|
284
|
-
exit_at_block_height: v5.number()
|
|
285
|
-
});
|
|
286
|
-
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");
|
|
287
249
|
const init = {};
|
|
288
|
-
if (
|
|
250
|
+
if (opts.apiKeyConfig) {
|
|
289
251
|
init.headers = {
|
|
290
|
-
[
|
|
252
|
+
[opts.apiKeyConfig.header]: opts.apiKeyConfig.key
|
|
291
253
|
};
|
|
292
254
|
}
|
|
293
|
-
|
|
255
|
+
init.method = "POST";
|
|
256
|
+
const endpoint = `${opts.baseUrl}/extended/v1/faucets/stx?${search}`;
|
|
257
|
+
const res = await fetch(endpoint, init);
|
|
294
258
|
if (!res.ok) {
|
|
295
259
|
return error({
|
|
296
|
-
name: "
|
|
297
|
-
message: "Failed to fetch.",
|
|
260
|
+
name: "FetchStxError",
|
|
261
|
+
message: "Failed to fetch STX.",
|
|
298
262
|
data: {
|
|
299
263
|
status: res.status,
|
|
300
264
|
statusText: res.statusText,
|
|
@@ -302,95 +266,52 @@ async function coreApi(apiOpts) {
|
|
|
302
266
|
}
|
|
303
267
|
});
|
|
304
268
|
}
|
|
305
|
-
const [
|
|
306
|
-
if (
|
|
269
|
+
const [jsonError, data] = await safePromise(res.json());
|
|
270
|
+
if (jsonError) {
|
|
307
271
|
return error({
|
|
308
272
|
name: "ParseBodyError",
|
|
309
273
|
message: "Failed to parse response body as JSON.",
|
|
310
|
-
data:
|
|
311
|
-
});
|
|
312
|
-
}
|
|
313
|
-
const validationResult = v5.safeParse(CoreApiResponseSchema, data);
|
|
314
|
-
if (!validationResult.success) {
|
|
315
|
-
return error({
|
|
316
|
-
name: "ValidateDataError",
|
|
317
|
-
message: "Failed to validate data.",
|
|
318
|
-
data: validationResult
|
|
274
|
+
data: jsonError
|
|
319
275
|
});
|
|
320
276
|
}
|
|
321
|
-
return success(
|
|
277
|
+
return success(data);
|
|
322
278
|
}
|
|
323
279
|
|
|
324
|
-
// src/stacks-api/
|
|
325
|
-
var
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
stacked_ustx: v6.number(),
|
|
347
|
-
prepare_phase_start_block_height: v6.number(),
|
|
348
|
-
blocks_until_prepare_phase: v6.number(),
|
|
349
|
-
reward_phase_start_block_height: v6.number(),
|
|
350
|
-
blocks_until_reward_phase: v6.number(),
|
|
351
|
-
ustx_until_pox_rejection: v6.null()
|
|
352
|
-
}),
|
|
353
|
-
epochs: v6.array(
|
|
354
|
-
v6.object({
|
|
355
|
-
epoch_id: v6.string(),
|
|
356
|
-
start_height: v6.number(),
|
|
357
|
-
end_height: v6.number(),
|
|
358
|
-
block_limit: v6.object({
|
|
359
|
-
write_length: v6.number(),
|
|
360
|
-
write_count: v6.number(),
|
|
361
|
-
read_length: v6.number(),
|
|
362
|
-
read_count: v6.number(),
|
|
363
|
-
runtime: v6.number()
|
|
364
|
-
}),
|
|
365
|
-
network_epoch: v6.number()
|
|
366
|
-
})
|
|
367
|
-
),
|
|
368
|
-
min_amount_ustx: v6.number(),
|
|
369
|
-
prepare_cycle_length: v6.number(),
|
|
370
|
-
reward_cycle_id: v6.number(),
|
|
371
|
-
reward_cycle_length: v6.number(),
|
|
372
|
-
rejection_votes_left_required: v6.null(),
|
|
373
|
-
next_reward_cycle_in: v6.number(),
|
|
374
|
-
contract_versions: v6.array(
|
|
375
|
-
v6.object({
|
|
376
|
-
contract_id: v6.string(),
|
|
377
|
-
activation_burnchain_block_height: v6.number(),
|
|
378
|
-
first_reward_cycle_id: v6.number()
|
|
379
|
-
})
|
|
380
|
-
)
|
|
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())
|
|
381
302
|
});
|
|
382
|
-
async function
|
|
303
|
+
async function coreApi(apiOpts) {
|
|
383
304
|
const init = {};
|
|
384
|
-
if (
|
|
305
|
+
if (apiOpts.apiKeyConfig) {
|
|
385
306
|
init.headers = {
|
|
386
|
-
[
|
|
307
|
+
[apiOpts.apiKeyConfig.header]: apiOpts.apiKeyConfig.key
|
|
387
308
|
};
|
|
388
309
|
}
|
|
389
|
-
const res = await fetch(`${
|
|
310
|
+
const res = await fetch(`${apiOpts.baseUrl}/v2/info`, init);
|
|
390
311
|
if (!res.ok) {
|
|
391
312
|
return error({
|
|
392
|
-
name: "
|
|
393
|
-
message: "Failed to fetch
|
|
313
|
+
name: "FetchCoreApiError",
|
|
314
|
+
message: "Failed to fetch.",
|
|
394
315
|
data: {
|
|
395
316
|
status: res.status,
|
|
396
317
|
statusText: res.statusText,
|
|
@@ -398,34 +319,39 @@ async function poxDetails(args) {
|
|
|
398
319
|
}
|
|
399
320
|
});
|
|
400
321
|
}
|
|
401
|
-
const [
|
|
402
|
-
if (
|
|
322
|
+
const [parseBodyError, data] = await safePromise(res.json());
|
|
323
|
+
if (parseBodyError) {
|
|
403
324
|
return error({
|
|
404
325
|
name: "ParseBodyError",
|
|
405
|
-
message: "Failed to parse
|
|
406
|
-
data:
|
|
326
|
+
message: "Failed to parse response body as JSON.",
|
|
327
|
+
data: parseBodyError
|
|
407
328
|
});
|
|
408
329
|
}
|
|
409
|
-
const validationResult =
|
|
330
|
+
const validationResult = v4.safeParse(CoreApiResponseSchema, data);
|
|
410
331
|
if (!validationResult.success) {
|
|
411
332
|
return error({
|
|
412
333
|
name: "ValidateDataError",
|
|
413
|
-
message: "Failed to
|
|
334
|
+
message: "Failed to validate data.",
|
|
414
335
|
data: validationResult
|
|
415
336
|
});
|
|
416
337
|
}
|
|
417
338
|
return success(validationResult.output);
|
|
418
339
|
}
|
|
419
340
|
|
|
341
|
+
// src/stacks-api/info/index.ts
|
|
342
|
+
var info = {
|
|
343
|
+
coreApi
|
|
344
|
+
};
|
|
345
|
+
|
|
420
346
|
// src/stacks-api/proof-of-transfer/cycle.ts
|
|
421
|
-
var
|
|
422
|
-
var
|
|
423
|
-
block_height:
|
|
424
|
-
index_block_hash:
|
|
425
|
-
cycle_number:
|
|
426
|
-
total_weight:
|
|
427
|
-
total_stacked_amount:
|
|
428
|
-
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()
|
|
429
355
|
});
|
|
430
356
|
async function cycle(opts) {
|
|
431
357
|
const init = {};
|
|
@@ -456,7 +382,7 @@ async function cycle(opts) {
|
|
|
456
382
|
data: jsonError
|
|
457
383
|
});
|
|
458
384
|
}
|
|
459
|
-
const validationResult =
|
|
385
|
+
const validationResult = v5.safeParse(responseSchema3, data);
|
|
460
386
|
if (!validationResult.success) {
|
|
461
387
|
return error({
|
|
462
388
|
name: "ValidateDataError",
|
|
@@ -468,17 +394,17 @@ async function cycle(opts) {
|
|
|
468
394
|
}
|
|
469
395
|
|
|
470
396
|
// src/stacks-api/proof-of-transfer/cycles.ts
|
|
471
|
-
var
|
|
472
|
-
var cycleInfoSchema =
|
|
473
|
-
block_height:
|
|
474
|
-
index_block_hash:
|
|
475
|
-
cycle_number:
|
|
476
|
-
total_weight:
|
|
477
|
-
total_stacked_amount:
|
|
478
|
-
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()
|
|
479
405
|
});
|
|
480
|
-
var resultsSchema =
|
|
481
|
-
var cyclesResponseSchema =
|
|
406
|
+
var resultsSchema = v6.array(cycleInfoSchema);
|
|
407
|
+
var cyclesResponseSchema = v6.object({
|
|
482
408
|
...baseListResponseSchema.entries,
|
|
483
409
|
results: resultsSchema
|
|
484
410
|
});
|
|
@@ -514,7 +440,7 @@ async function cycles(args) {
|
|
|
514
440
|
data: jsonError
|
|
515
441
|
});
|
|
516
442
|
}
|
|
517
|
-
const validationResult =
|
|
443
|
+
const validationResult = v6.safeParse(cyclesResponseSchema, data);
|
|
518
444
|
if (!validationResult.success) {
|
|
519
445
|
return error({
|
|
520
446
|
name: "ValidateDataError",
|
|
@@ -526,16 +452,16 @@ async function cycles(args) {
|
|
|
526
452
|
}
|
|
527
453
|
|
|
528
454
|
// src/stacks-api/proof-of-transfer/signer-in-cycle.ts
|
|
529
|
-
var
|
|
530
|
-
var signerInCycleResponseSchema =
|
|
531
|
-
signing_key:
|
|
532
|
-
signer_address:
|
|
533
|
-
weight:
|
|
534
|
-
stacked_amount:
|
|
535
|
-
weight_percent:
|
|
536
|
-
stacked_amount_percent:
|
|
537
|
-
solo_stacker_count:
|
|
538
|
-
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()
|
|
539
465
|
});
|
|
540
466
|
async function signerInCycle(args) {
|
|
541
467
|
const init = {};
|
|
@@ -571,7 +497,7 @@ async function signerInCycle(args) {
|
|
|
571
497
|
}
|
|
572
498
|
});
|
|
573
499
|
}
|
|
574
|
-
const validationResult =
|
|
500
|
+
const validationResult = v7.safeParse(signerInCycleResponseSchema, data);
|
|
575
501
|
if (!validationResult.success) {
|
|
576
502
|
return error({
|
|
577
503
|
name: "ValidateDataError",
|
|
@@ -583,19 +509,19 @@ async function signerInCycle(args) {
|
|
|
583
509
|
}
|
|
584
510
|
|
|
585
511
|
// src/stacks-api/proof-of-transfer/signers-in-cycle.ts
|
|
586
|
-
var
|
|
587
|
-
var signerSchema =
|
|
588
|
-
signing_key:
|
|
589
|
-
signer_address:
|
|
590
|
-
weight:
|
|
591
|
-
stacked_amount:
|
|
592
|
-
weight_percent:
|
|
593
|
-
stacked_amount_percent:
|
|
594
|
-
pooled_stacker_count:
|
|
595
|
-
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()
|
|
596
522
|
});
|
|
597
|
-
var resultsSchema2 =
|
|
598
|
-
var signersResponseSchema =
|
|
523
|
+
var resultsSchema2 = v8.array(signerSchema);
|
|
524
|
+
var signersResponseSchema = v8.object({
|
|
599
525
|
...baseListResponseSchema.entries,
|
|
600
526
|
results: resultsSchema2
|
|
601
527
|
});
|
|
@@ -634,7 +560,7 @@ async function signersInCycle(args) {
|
|
|
634
560
|
}
|
|
635
561
|
});
|
|
636
562
|
}
|
|
637
|
-
const validationResult =
|
|
563
|
+
const validationResult = v8.safeParse(signersResponseSchema, data);
|
|
638
564
|
if (!validationResult.success) {
|
|
639
565
|
return error({
|
|
640
566
|
name: "ValidateDataError",
|
|
@@ -646,15 +572,15 @@ async function signersInCycle(args) {
|
|
|
646
572
|
}
|
|
647
573
|
|
|
648
574
|
// src/stacks-api/proof-of-transfer/stackers-for-signer-in-cycle.ts
|
|
649
|
-
var
|
|
650
|
-
var stackerInfoSchema =
|
|
651
|
-
stacker_address:
|
|
652
|
-
stacked_amount:
|
|
653
|
-
pox_address:
|
|
654
|
-
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")])
|
|
655
581
|
});
|
|
656
|
-
var resultsSchema3 =
|
|
657
|
-
var stackersForSignerInCycleResponseSchema =
|
|
582
|
+
var resultsSchema3 = v9.array(stackerInfoSchema);
|
|
583
|
+
var stackersForSignerInCycleResponseSchema = v9.object({
|
|
658
584
|
...baseListResponseSchema.entries,
|
|
659
585
|
results: resultsSchema3
|
|
660
586
|
});
|
|
@@ -691,7 +617,7 @@ async function stackersForSignerInCycle(opts) {
|
|
|
691
617
|
data: jsonError
|
|
692
618
|
});
|
|
693
619
|
}
|
|
694
|
-
const validationResult =
|
|
620
|
+
const validationResult = v9.safeParse(
|
|
695
621
|
stackersForSignerInCycleResponseSchema,
|
|
696
622
|
data
|
|
697
623
|
);
|
|
@@ -705,100 +631,45 @@ async function stackersForSignerInCycle(opts) {
|
|
|
705
631
|
return success(validationResult.output);
|
|
706
632
|
}
|
|
707
633
|
|
|
708
|
-
// src/stacks-api/
|
|
709
|
-
var
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
result: v12.string()
|
|
717
|
-
}),
|
|
718
|
-
v12.object({
|
|
719
|
-
okay: v12.literal(false),
|
|
720
|
-
cause: v12.unknown()
|
|
721
|
-
})
|
|
722
|
-
]);
|
|
723
|
-
async function readOnly(args) {
|
|
724
|
-
const headers = {
|
|
725
|
-
"Content-Type": "application/json"
|
|
726
|
-
};
|
|
727
|
-
if (args.apiKeyConfig) {
|
|
728
|
-
headers[args.apiKeyConfig.header] = args.apiKeyConfig.key;
|
|
729
|
-
}
|
|
730
|
-
const init = {
|
|
731
|
-
method: "POST",
|
|
732
|
-
body: JSON.stringify({
|
|
733
|
-
sender: args.sender,
|
|
734
|
-
arguments: args.arguments
|
|
735
|
-
}),
|
|
736
|
-
headers
|
|
737
|
-
};
|
|
738
|
-
const endpoint = `${args.baseUrl}/v2/contracts/call-read/${args.contractAddress}/${args.contractName}/${args.functionName}`;
|
|
739
|
-
const res = await fetch(endpoint, init);
|
|
740
|
-
if (!res.ok) {
|
|
741
|
-
return error({
|
|
742
|
-
name: "FetchReadOnlyError",
|
|
743
|
-
message: "Failed to fetch.",
|
|
744
|
-
data: {
|
|
745
|
-
status: res.status,
|
|
746
|
-
statusText: res.statusText,
|
|
747
|
-
bodyParseResult: await safePromise(res.json())
|
|
748
|
-
}
|
|
749
|
-
});
|
|
750
|
-
}
|
|
751
|
-
const [jsonError, data] = await safePromise(res.json());
|
|
752
|
-
if (jsonError) {
|
|
753
|
-
return error({
|
|
754
|
-
name: "ParseBodyError",
|
|
755
|
-
message: "Failed to parse response body as JSON.",
|
|
756
|
-
data: error
|
|
757
|
-
});
|
|
758
|
-
}
|
|
759
|
-
const validationResult = v12.safeParse(readOnlyResponseSchema, data);
|
|
760
|
-
if (!validationResult.success) {
|
|
761
|
-
return error({
|
|
762
|
-
name: "ValidateDataError",
|
|
763
|
-
message: "Failed to validate data.",
|
|
764
|
-
data: validationResult
|
|
765
|
-
});
|
|
766
|
-
}
|
|
767
|
-
return success(validationResult.output);
|
|
768
|
-
}
|
|
634
|
+
// src/stacks-api/proof-of-transfer/index.ts
|
|
635
|
+
var proofOfTransfer = {
|
|
636
|
+
cycle,
|
|
637
|
+
cycles,
|
|
638
|
+
signerInCycle,
|
|
639
|
+
signersInCycle,
|
|
640
|
+
stackersForSignerInCycle
|
|
641
|
+
};
|
|
769
642
|
|
|
770
643
|
// src/stacks-api/stacking-pool/members.ts
|
|
771
|
-
var
|
|
772
|
-
var memberSchema =
|
|
773
|
-
stacker:
|
|
774
|
-
pox_addr:
|
|
775
|
-
amount_ustx:
|
|
776
|
-
burn_block_unlock_height:
|
|
777
|
-
block_height:
|
|
778
|
-
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()
|
|
779
652
|
});
|
|
780
|
-
var membersResponseSchema =
|
|
781
|
-
limit:
|
|
782
|
-
offset:
|
|
783
|
-
total:
|
|
784
|
-
results:
|
|
653
|
+
var membersResponseSchema = v10.object({
|
|
654
|
+
limit: v10.number(),
|
|
655
|
+
offset: v10.number(),
|
|
656
|
+
total: v10.number(),
|
|
657
|
+
results: v10.array(memberSchema)
|
|
785
658
|
});
|
|
786
|
-
async function members(
|
|
659
|
+
async function members(args) {
|
|
787
660
|
const search = new URLSearchParams();
|
|
788
|
-
if (
|
|
789
|
-
if (
|
|
790
|
-
if (
|
|
791
|
-
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());
|
|
792
665
|
const init = {};
|
|
793
|
-
if (
|
|
666
|
+
if (args.apiKeyConfig) {
|
|
794
667
|
init.headers = {
|
|
795
|
-
[
|
|
668
|
+
[args.apiKeyConfig.header]: args.apiKeyConfig.key
|
|
796
669
|
};
|
|
797
670
|
}
|
|
798
|
-
const
|
|
799
|
-
|
|
800
|
-
init
|
|
801
|
-
);
|
|
671
|
+
const endpoint = `${args.baseUrl}/extended/v1/pox4/${args.poolPrincipal}/delegations?${search}`;
|
|
672
|
+
const res = await fetch(endpoint, init);
|
|
802
673
|
if (!res.ok) {
|
|
803
674
|
return error({
|
|
804
675
|
name: "FetchMembersError",
|
|
@@ -818,7 +689,7 @@ async function members(opts, apiOpts) {
|
|
|
818
689
|
data: jsonParseError
|
|
819
690
|
});
|
|
820
691
|
}
|
|
821
|
-
const validationResult =
|
|
692
|
+
const validationResult = v10.safeParse(membersResponseSchema, data);
|
|
822
693
|
if (!validationResult.success) {
|
|
823
694
|
return error({
|
|
824
695
|
name: "ValidateDataError",
|
|
@@ -829,121 +700,126 @@ async function members(opts, apiOpts) {
|
|
|
829
700
|
return success(validationResult.output);
|
|
830
701
|
}
|
|
831
702
|
|
|
703
|
+
// src/stacks-api/stacking-pool/index.ts
|
|
704
|
+
var stackingPool = {
|
|
705
|
+
members
|
|
706
|
+
};
|
|
707
|
+
|
|
832
708
|
// src/stacks-api/transactions/schemas.ts
|
|
833
|
-
var
|
|
834
|
-
var baseTransactionSchema =
|
|
835
|
-
tx_id:
|
|
836
|
-
nonce:
|
|
837
|
-
fee_rate:
|
|
838
|
-
sender_address:
|
|
839
|
-
sponsored:
|
|
840
|
-
post_condition_mode:
|
|
841
|
-
post_conditions:
|
|
842
|
-
anchor_mode:
|
|
843
|
-
is_unanchored:
|
|
844
|
-
block_hash:
|
|
845
|
-
parent_block_hash:
|
|
846
|
-
block_height:
|
|
847
|
-
block_time:
|
|
848
|
-
block_time_iso:
|
|
849
|
-
burn_block_height:
|
|
850
|
-
burn_block_time:
|
|
851
|
-
burn_block_time_iso:
|
|
852
|
-
parent_burn_block_time:
|
|
853
|
-
parent_burn_block_time_iso:
|
|
854
|
-
canonical:
|
|
855
|
-
tx_index:
|
|
856
|
-
tx_status:
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
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")
|
|
860
736
|
]),
|
|
861
|
-
tx_result:
|
|
862
|
-
hex:
|
|
863
|
-
repr:
|
|
737
|
+
tx_result: v11.object({
|
|
738
|
+
hex: v11.string(),
|
|
739
|
+
repr: v11.string()
|
|
864
740
|
}),
|
|
865
|
-
microblock_hash:
|
|
866
|
-
microblock_sequence:
|
|
867
|
-
microblock_canonical:
|
|
868
|
-
event_count:
|
|
869
|
-
events:
|
|
870
|
-
execution_cost_read_count:
|
|
871
|
-
execution_cost_read_length:
|
|
872
|
-
execution_cost_runtime:
|
|
873
|
-
execution_cost_write_count:
|
|
874
|
-
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()
|
|
875
751
|
});
|
|
876
|
-
var contractCallTransactionSchema =
|
|
877
|
-
tx_type:
|
|
878
|
-
contract_call:
|
|
879
|
-
contract_id:
|
|
880
|
-
function_name:
|
|
881
|
-
function_signature:
|
|
882
|
-
function_args:
|
|
883
|
-
|
|
884
|
-
hex:
|
|
885
|
-
repr:
|
|
886
|
-
name:
|
|
887
|
-
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()
|
|
888
764
|
})
|
|
889
765
|
)
|
|
890
766
|
}),
|
|
891
767
|
...baseTransactionSchema.entries
|
|
892
768
|
});
|
|
893
|
-
var smartContractTransactionSchema =
|
|
894
|
-
tx_type:
|
|
895
|
-
smart_contract:
|
|
769
|
+
var smartContractTransactionSchema = v11.object({
|
|
770
|
+
tx_type: v11.literal("smart_contract"),
|
|
771
|
+
smart_contract: v11.object({
|
|
896
772
|
/**
|
|
897
773
|
* NOTE: The types may be wrong, not sure what type of value is used when
|
|
898
774
|
* the version is not `null`.
|
|
899
775
|
*/
|
|
900
|
-
clarity_version:
|
|
901
|
-
contract_id:
|
|
902
|
-
source_code:
|
|
776
|
+
clarity_version: v11.union([v11.null(), v11.number()]),
|
|
777
|
+
contract_id: v11.string(),
|
|
778
|
+
source_code: v11.string()
|
|
903
779
|
}),
|
|
904
780
|
...baseTransactionSchema.entries
|
|
905
781
|
});
|
|
906
|
-
var tokenTransferSchema =
|
|
907
|
-
tx_type:
|
|
908
|
-
token_transfer:
|
|
909
|
-
recipient_address:
|
|
910
|
-
amount:
|
|
911
|
-
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()
|
|
912
788
|
}),
|
|
913
789
|
...baseTransactionSchema.entries
|
|
914
790
|
});
|
|
915
|
-
var transactionSchema =
|
|
791
|
+
var transactionSchema = v11.variant("tx_type", [
|
|
916
792
|
contractCallTransactionSchema,
|
|
917
793
|
smartContractTransactionSchema,
|
|
918
794
|
tokenTransferSchema
|
|
919
795
|
]);
|
|
920
796
|
|
|
921
797
|
// src/stacks-api/transactions/address-transactions.ts
|
|
922
|
-
var
|
|
923
|
-
var resultSchema =
|
|
798
|
+
var v12 = __toESM(require("valibot"), 1);
|
|
799
|
+
var resultSchema = v12.object({
|
|
924
800
|
tx: transactionSchema,
|
|
925
|
-
stx_sent:
|
|
926
|
-
stx_received:
|
|
927
|
-
events:
|
|
928
|
-
stx:
|
|
929
|
-
transfer:
|
|
930
|
-
mint:
|
|
931
|
-
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()
|
|
932
808
|
}),
|
|
933
|
-
ft:
|
|
934
|
-
transfer:
|
|
935
|
-
mint:
|
|
936
|
-
burn:
|
|
809
|
+
ft: v12.object({
|
|
810
|
+
transfer: v12.number(),
|
|
811
|
+
mint: v12.number(),
|
|
812
|
+
burn: v12.number()
|
|
937
813
|
}),
|
|
938
|
-
nft:
|
|
939
|
-
transfer:
|
|
940
|
-
mint:
|
|
941
|
-
burn:
|
|
814
|
+
nft: v12.object({
|
|
815
|
+
transfer: v12.number(),
|
|
816
|
+
mint: v12.number(),
|
|
817
|
+
burn: v12.number()
|
|
942
818
|
})
|
|
943
819
|
})
|
|
944
820
|
});
|
|
945
|
-
var resultsSchema4 =
|
|
946
|
-
var addressTransactionsResponseSchema =
|
|
821
|
+
var resultsSchema4 = v12.array(resultSchema);
|
|
822
|
+
var addressTransactionsResponseSchema = v12.object({
|
|
947
823
|
...baseListResponseSchema.entries,
|
|
948
824
|
results: resultsSchema4
|
|
949
825
|
});
|
|
@@ -980,7 +856,7 @@ async function addressTransactions(args) {
|
|
|
980
856
|
data: jsonParseError
|
|
981
857
|
});
|
|
982
858
|
}
|
|
983
|
-
const validationResult =
|
|
859
|
+
const validationResult = v12.safeParse(addressTransactionsResponseSchema, data);
|
|
984
860
|
if (!validationResult.success) {
|
|
985
861
|
return error({
|
|
986
862
|
name: "ValidateDataError",
|
|
@@ -992,7 +868,7 @@ async function addressTransactions(args) {
|
|
|
992
868
|
}
|
|
993
869
|
|
|
994
870
|
// src/stacks-api/transactions/get-transaction.ts
|
|
995
|
-
var
|
|
871
|
+
var v13 = __toESM(require("valibot"), 1);
|
|
996
872
|
async function getTransaction(args) {
|
|
997
873
|
const init = {};
|
|
998
874
|
if (args.apiKeyConfig) {
|
|
@@ -1021,7 +897,7 @@ async function getTransaction(args) {
|
|
|
1021
897
|
error: jsonParseError
|
|
1022
898
|
});
|
|
1023
899
|
}
|
|
1024
|
-
const validationResult =
|
|
900
|
+
const validationResult = v13.safeParse(transactionSchema, data);
|
|
1025
901
|
if (!validationResult.success) {
|
|
1026
902
|
return error({
|
|
1027
903
|
name: "ValidateDataError",
|
|
@@ -1032,20 +908,215 @@ async function getTransaction(args) {
|
|
|
1032
908
|
return success(validationResult.output);
|
|
1033
909
|
}
|
|
1034
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
|
+
|
|
1035
961
|
// src/stacks-api/index.ts
|
|
1036
|
-
var
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
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
|
|
1045
1119
|
};
|
|
1046
|
-
var smartContracts = { readOnly };
|
|
1047
|
-
var stackingPool = { members };
|
|
1048
|
-
var transactions = { addressTransactions, getTransaction };
|
|
1049
1120
|
|
|
1050
1121
|
// src/utils/call-rate-limited-api.ts
|
|
1051
1122
|
var import_exponential_backoff = require("exponential-backoff");
|
|
@@ -1083,23 +1154,204 @@ async function safeCallRateLimitedApi(fn, options) {
|
|
|
1083
1154
|
}
|
|
1084
1155
|
}
|
|
1085
1156
|
|
|
1086
|
-
// src/
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
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
|
+
}
|
|
1095
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 };
|
|
1096
1345
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1097
1346
|
0 && (module.exports = {
|
|
1098
1347
|
callRateLimitedApi,
|
|
1099
1348
|
error,
|
|
1349
|
+
pox4Api,
|
|
1350
|
+
queries,
|
|
1100
1351
|
safeCall,
|
|
1101
1352
|
safeCallRateLimitedApi,
|
|
1102
1353
|
safePromise,
|
|
1103
1354
|
stacksApi,
|
|
1355
|
+
stacksRpcApi,
|
|
1104
1356
|
success
|
|
1105
1357
|
});
|