@secretkeylabs/stacks-tools 0.4.0-0fe567d → 0.4.0-13a5f23
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 +229 -32
- package/dist/index.d.cts +179 -98
- package/dist/index.d.ts +179 -98
- package/dist/index.js +227 -32
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -32,10 +32,12 @@ var src_exports = {};
|
|
|
32
32
|
__export(src_exports, {
|
|
33
33
|
callRateLimitedApi: () => callRateLimitedApi,
|
|
34
34
|
error: () => error,
|
|
35
|
+
queries: () => queries,
|
|
35
36
|
safeCall: () => safeCall,
|
|
36
37
|
safeCallRateLimitedApi: () => safeCallRateLimitedApi,
|
|
37
38
|
safePromise: () => safePromise,
|
|
38
39
|
stacksApi: () => stacksApi,
|
|
40
|
+
stacksRpcApi: () => stacksRpcApi,
|
|
39
41
|
success: () => success
|
|
40
42
|
});
|
|
41
43
|
module.exports = __toCommonJS(src_exports);
|
|
@@ -193,6 +195,12 @@ async function latestNonce(opts) {
|
|
|
193
195
|
return success(validationResult.output);
|
|
194
196
|
}
|
|
195
197
|
|
|
198
|
+
// src/stacks-api/accounts/index.ts
|
|
199
|
+
var accounts = {
|
|
200
|
+
balances,
|
|
201
|
+
latestNonce
|
|
202
|
+
};
|
|
203
|
+
|
|
196
204
|
// src/stacks-api/types.ts
|
|
197
205
|
var v3 = __toESM(require("valibot"), 1);
|
|
198
206
|
var baseListResponseSchema = v3.object({
|
|
@@ -266,6 +274,52 @@ async function getBlock(opts) {
|
|
|
266
274
|
return success(validationResult.output);
|
|
267
275
|
}
|
|
268
276
|
|
|
277
|
+
// src/stacks-api/blocks/index.ts
|
|
278
|
+
var blocks = {
|
|
279
|
+
getBlock
|
|
280
|
+
};
|
|
281
|
+
|
|
282
|
+
// src/stacks-api/faucets/stx.ts
|
|
283
|
+
async function stx(opts) {
|
|
284
|
+
const search = new URLSearchParams();
|
|
285
|
+
search.append("address", opts.address);
|
|
286
|
+
if (opts.stacking) search.append("stacking", "true");
|
|
287
|
+
const init = {};
|
|
288
|
+
if (opts.apiKeyConfig) {
|
|
289
|
+
init.headers = {
|
|
290
|
+
[opts.apiKeyConfig.header]: opts.apiKeyConfig.key
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
init.method = "POST";
|
|
294
|
+
const endpoint = `${opts.baseUrl}/extended/v1/faucets/stx?${search}`;
|
|
295
|
+
const res = await fetch(endpoint, init);
|
|
296
|
+
if (!res.ok) {
|
|
297
|
+
return error({
|
|
298
|
+
name: "FetchStxError",
|
|
299
|
+
message: "Failed to fetch STX.",
|
|
300
|
+
data: {
|
|
301
|
+
status: res.status,
|
|
302
|
+
statusText: res.statusText,
|
|
303
|
+
bodyParseResult: await safePromise(res.json())
|
|
304
|
+
}
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
const [jsonError, data] = await safePromise(res.json());
|
|
308
|
+
if (jsonError) {
|
|
309
|
+
return error({
|
|
310
|
+
name: "ParseBodyError",
|
|
311
|
+
message: "Failed to parse response body as JSON.",
|
|
312
|
+
data: jsonError
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
return success(data);
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
// src/stacks-api/faucets/index.ts
|
|
319
|
+
var faucets = {
|
|
320
|
+
stx
|
|
321
|
+
};
|
|
322
|
+
|
|
269
323
|
// src/stacks-api/info/core-api.ts
|
|
270
324
|
var v5 = __toESM(require("valibot"), 1);
|
|
271
325
|
var CoreApiResponseSchema = v5.object({
|
|
@@ -418,6 +472,12 @@ async function poxDetails(args) {
|
|
|
418
472
|
return success(validationResult.output);
|
|
419
473
|
}
|
|
420
474
|
|
|
475
|
+
// src/stacks-api/info/index.ts
|
|
476
|
+
var info = {
|
|
477
|
+
coreApi,
|
|
478
|
+
poxDetails
|
|
479
|
+
};
|
|
480
|
+
|
|
421
481
|
// src/stacks-api/proof-of-transfer/cycle.ts
|
|
422
482
|
var v7 = __toESM(require("valibot"), 1);
|
|
423
483
|
var responseSchema4 = v7.object({
|
|
@@ -706,6 +766,15 @@ async function stackersForSignerInCycle(opts) {
|
|
|
706
766
|
return success(validationResult.output);
|
|
707
767
|
}
|
|
708
768
|
|
|
769
|
+
// src/stacks-api/proof-of-transfer/index.ts
|
|
770
|
+
var proofOfTransfer = {
|
|
771
|
+
cycle,
|
|
772
|
+
cycles,
|
|
773
|
+
signerInCycle,
|
|
774
|
+
signersInCycle,
|
|
775
|
+
stackersForSignerInCycle
|
|
776
|
+
};
|
|
777
|
+
|
|
709
778
|
// src/stacks-api/smart-contracts/read-only.ts
|
|
710
779
|
var v12 = __toESM(require("valibot"), 1);
|
|
711
780
|
var readOnlyResponseSchema = v12.variant("okay", [
|
|
@@ -768,6 +837,11 @@ async function readOnly(args) {
|
|
|
768
837
|
return success(validationResult.output);
|
|
769
838
|
}
|
|
770
839
|
|
|
840
|
+
// src/stacks-api/smart-contracts/index.ts
|
|
841
|
+
var smartContracts = {
|
|
842
|
+
readOnly
|
|
843
|
+
};
|
|
844
|
+
|
|
771
845
|
// src/stacks-api/stacking-pool/members.ts
|
|
772
846
|
var v13 = __toESM(require("valibot"), 1);
|
|
773
847
|
var memberSchema = v13.object({
|
|
@@ -784,22 +858,20 @@ var membersResponseSchema = v13.object({
|
|
|
784
858
|
total: v13.number(),
|
|
785
859
|
results: v13.array(memberSchema)
|
|
786
860
|
});
|
|
787
|
-
async function members(
|
|
861
|
+
async function members(args) {
|
|
788
862
|
const search = new URLSearchParams();
|
|
789
|
-
if (
|
|
790
|
-
if (
|
|
791
|
-
if (
|
|
792
|
-
if (
|
|
863
|
+
if (args.afterBlock) search.append("after_block", args.afterBlock.toString());
|
|
864
|
+
if (args.unanchored) search.append("unanchored", "true");
|
|
865
|
+
if (args.limit) search.append("limit", args.limit.toString());
|
|
866
|
+
if (args.offset) search.append("offset", args.offset.toString());
|
|
793
867
|
const init = {};
|
|
794
|
-
if (
|
|
868
|
+
if (args.apiKeyConfig) {
|
|
795
869
|
init.headers = {
|
|
796
|
-
[
|
|
870
|
+
[args.apiKeyConfig.header]: args.apiKeyConfig.key
|
|
797
871
|
};
|
|
798
872
|
}
|
|
799
|
-
const
|
|
800
|
-
|
|
801
|
-
init
|
|
802
|
-
);
|
|
873
|
+
const endpoint = `${args.baseUrl}/extended/v1/pox4/${args.poolPrincipal}/delegations?${search}`;
|
|
874
|
+
const res = await fetch(endpoint, init);
|
|
803
875
|
if (!res.ok) {
|
|
804
876
|
return error({
|
|
805
877
|
name: "FetchMembersError",
|
|
@@ -830,6 +902,11 @@ async function members(opts, apiOpts) {
|
|
|
830
902
|
return success(validationResult.output);
|
|
831
903
|
}
|
|
832
904
|
|
|
905
|
+
// src/stacks-api/stacking-pool/index.ts
|
|
906
|
+
var stackingPool = {
|
|
907
|
+
members
|
|
908
|
+
};
|
|
909
|
+
|
|
833
910
|
// src/stacks-api/transactions/schemas.ts
|
|
834
911
|
var v14 = __toESM(require("valibot"), 1);
|
|
835
912
|
var baseTransactionSchema = v14.object({
|
|
@@ -1033,20 +1110,89 @@ async function getTransaction(args) {
|
|
|
1033
1110
|
return success(validationResult.output);
|
|
1034
1111
|
}
|
|
1035
1112
|
|
|
1113
|
+
// src/stacks-api/transactions/index.ts
|
|
1114
|
+
var transactions = {
|
|
1115
|
+
addressTransactions,
|
|
1116
|
+
getTransaction
|
|
1117
|
+
};
|
|
1118
|
+
|
|
1036
1119
|
// src/stacks-api/index.ts
|
|
1037
|
-
var
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1120
|
+
var stacksApi = {
|
|
1121
|
+
accounts,
|
|
1122
|
+
blocks,
|
|
1123
|
+
faucets,
|
|
1124
|
+
info,
|
|
1125
|
+
proofOfTransfer,
|
|
1126
|
+
smartContracts,
|
|
1127
|
+
stackingPool,
|
|
1128
|
+
transactions
|
|
1129
|
+
};
|
|
1130
|
+
|
|
1131
|
+
// src/stacks-rpc-api/smart-contracts/map-entry.ts
|
|
1132
|
+
var v17 = __toESM(require("valibot"), 1);
|
|
1133
|
+
var mapEntryResponseSchema = v17.object({
|
|
1134
|
+
/**
|
|
1135
|
+
* Hex-encoded string of clarity value. It is always an optional tuple.
|
|
1136
|
+
*/
|
|
1137
|
+
data: v17.string(),
|
|
1138
|
+
/**
|
|
1139
|
+
* Hex-encoded string of the MARF proof for the data
|
|
1140
|
+
*/
|
|
1141
|
+
proof: v17.optional(v17.string())
|
|
1142
|
+
});
|
|
1143
|
+
async function mapEntry(args) {
|
|
1144
|
+
const search = new URLSearchParams();
|
|
1145
|
+
if (args.proof === 0) search.append("proof", "0");
|
|
1146
|
+
if (args.tip) search.append("tip", args.tip);
|
|
1147
|
+
const init = {};
|
|
1148
|
+
if (args.apiKeyConfig) {
|
|
1149
|
+
init.headers = {
|
|
1150
|
+
[args.apiKeyConfig.header]: args.apiKeyConfig.key
|
|
1151
|
+
};
|
|
1152
|
+
}
|
|
1153
|
+
init.method = "POST";
|
|
1154
|
+
init.body = args.mapKey;
|
|
1155
|
+
const endpoint = `${args.baseUrl}/v2/map_entry/${args.contractAddress}/${args.contractName}/${args.mapName}?${search}`;
|
|
1156
|
+
const res = await fetch(endpoint, init);
|
|
1157
|
+
if (!res.ok) {
|
|
1158
|
+
return error({
|
|
1159
|
+
name: "FetchMapEntryError",
|
|
1160
|
+
message: "Failed to fetch map entry.",
|
|
1161
|
+
data: {
|
|
1162
|
+
status: res.status,
|
|
1163
|
+
statusText: res.statusText,
|
|
1164
|
+
bodyParseResult: await safePromise(res.json())
|
|
1165
|
+
}
|
|
1166
|
+
});
|
|
1167
|
+
}
|
|
1168
|
+
const [jsonError, data] = await safePromise(res.json());
|
|
1169
|
+
if (jsonError) {
|
|
1170
|
+
return error({
|
|
1171
|
+
name: "ParseBodyError",
|
|
1172
|
+
message: "Failed to parse response body as JSON.",
|
|
1173
|
+
data: jsonError
|
|
1174
|
+
});
|
|
1175
|
+
}
|
|
1176
|
+
const validationResult = v17.safeParse(mapEntryResponseSchema, data);
|
|
1177
|
+
if (!validationResult.success) {
|
|
1178
|
+
return error({
|
|
1179
|
+
name: "ValidateDataError",
|
|
1180
|
+
message: "Failed to validate response data.",
|
|
1181
|
+
data: validationResult
|
|
1182
|
+
});
|
|
1183
|
+
}
|
|
1184
|
+
return success(validationResult.output);
|
|
1185
|
+
}
|
|
1186
|
+
|
|
1187
|
+
// src/stacks-rpc-api/smart-contracts/index.ts
|
|
1188
|
+
var smartContracts2 = {
|
|
1189
|
+
mapEntry
|
|
1190
|
+
};
|
|
1191
|
+
|
|
1192
|
+
// src/stacks-rpc-api/index.ts
|
|
1193
|
+
var stacksRpcApi = {
|
|
1194
|
+
smartContracts: smartContracts2
|
|
1046
1195
|
};
|
|
1047
|
-
var smartContracts = { readOnly };
|
|
1048
|
-
var stackingPool = { members };
|
|
1049
|
-
var transactions = { addressTransactions, getTransaction };
|
|
1050
1196
|
|
|
1051
1197
|
// src/utils/call-rate-limited-api.ts
|
|
1052
1198
|
var import_exponential_backoff = require("exponential-backoff");
|
|
@@ -1084,23 +1230,74 @@ async function safeCallRateLimitedApi(fn, options) {
|
|
|
1084
1230
|
}
|
|
1085
1231
|
}
|
|
1086
1232
|
|
|
1087
|
-
// src/
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1233
|
+
// src/queries/get-signer-stacked-amount.ts
|
|
1234
|
+
async function getSignerStackedAmount(args) {
|
|
1235
|
+
let totalLocked = 0n;
|
|
1236
|
+
const { identifier, ...rest } = args;
|
|
1237
|
+
let hasMore = true;
|
|
1238
|
+
let offset = 0;
|
|
1239
|
+
let found = false;
|
|
1240
|
+
const limit = 200;
|
|
1241
|
+
while (hasMore && !found) {
|
|
1242
|
+
const [error2, data] = await safeCallRateLimitedApi(
|
|
1243
|
+
() => signersInCycle({
|
|
1244
|
+
...rest,
|
|
1245
|
+
limit
|
|
1246
|
+
})
|
|
1247
|
+
);
|
|
1248
|
+
if (error2) {
|
|
1249
|
+
return error({
|
|
1250
|
+
name: "GetSignerTotalLockedError",
|
|
1251
|
+
message: "Failed to get signer total locked.",
|
|
1252
|
+
data: {
|
|
1253
|
+
error: error2
|
|
1254
|
+
}
|
|
1255
|
+
});
|
|
1256
|
+
}
|
|
1257
|
+
for (const signer of data.results) {
|
|
1258
|
+
if (identifier.type === "address") {
|
|
1259
|
+
if (signer.signer_address === identifier.signerAddress) {
|
|
1260
|
+
totalLocked = BigInt(signer.stacked_amount);
|
|
1261
|
+
found = true;
|
|
1262
|
+
break;
|
|
1263
|
+
}
|
|
1264
|
+
} else {
|
|
1265
|
+
if (signer.signing_key === identifier.signerPublicKey) {
|
|
1266
|
+
totalLocked = BigInt(signer.stacked_amount);
|
|
1267
|
+
found = true;
|
|
1268
|
+
break;
|
|
1269
|
+
}
|
|
1270
|
+
}
|
|
1271
|
+
}
|
|
1272
|
+
offset += data.results.length;
|
|
1273
|
+
hasMore = offset < data.total;
|
|
1274
|
+
}
|
|
1275
|
+
if (!found) {
|
|
1276
|
+
return error({
|
|
1277
|
+
name: "SignerNotFound",
|
|
1278
|
+
message: "Signer not found.",
|
|
1279
|
+
data: {
|
|
1280
|
+
identifier,
|
|
1281
|
+
cycle: args.cycleNumber
|
|
1282
|
+
}
|
|
1283
|
+
});
|
|
1284
|
+
}
|
|
1285
|
+
return success(totalLocked);
|
|
1286
|
+
}
|
|
1287
|
+
|
|
1288
|
+
// src/queries/index.ts
|
|
1289
|
+
var queries = {
|
|
1290
|
+
getSignerStackedAmount
|
|
1096
1291
|
};
|
|
1097
1292
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1098
1293
|
0 && (module.exports = {
|
|
1099
1294
|
callRateLimitedApi,
|
|
1100
1295
|
error,
|
|
1296
|
+
queries,
|
|
1101
1297
|
safeCall,
|
|
1102
1298
|
safeCallRateLimitedApi,
|
|
1103
1299
|
safePromise,
|
|
1104
1300
|
stacksApi,
|
|
1301
|
+
stacksRpcApi,
|
|
1105
1302
|
success
|
|
1106
1303
|
});
|