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