@secretkeylabs/stacks-tools 0.4.0-98de979 → 0.4.0-a49971c
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 +234 -32
- package/dist/index.d.cts +182 -98
- package/dist/index.d.ts +182 -98
- package/dist/index.js +232 -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,94 @@ 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 = JSON.stringify(
|
|
1155
|
+
args.mapKey.startsWith("0x") ? args.mapKey : `0x${args.mapKey}`
|
|
1156
|
+
);
|
|
1157
|
+
init.headers = { ...init.headers, "Content-Type": "application/json" };
|
|
1158
|
+
const endpoint = `${args.baseUrl}/v2/map_entry/${args.contractAddress}/${args.contractName}/${args.mapName}?${search}`;
|
|
1159
|
+
const res = await fetch(endpoint, init);
|
|
1160
|
+
if (!res.ok) {
|
|
1161
|
+
return error({
|
|
1162
|
+
name: "FetchMapEntryError",
|
|
1163
|
+
message: "Failed to fetch map entry.",
|
|
1164
|
+
data: {
|
|
1165
|
+
init,
|
|
1166
|
+
status: res.status,
|
|
1167
|
+
statusText: res.statusText,
|
|
1168
|
+
endpoint,
|
|
1169
|
+
bodyParseResult: await safePromise(res.text())
|
|
1170
|
+
}
|
|
1171
|
+
});
|
|
1172
|
+
}
|
|
1173
|
+
const [jsonError, data] = await safePromise(res.json());
|
|
1174
|
+
if (jsonError) {
|
|
1175
|
+
return error({
|
|
1176
|
+
name: "ParseBodyError",
|
|
1177
|
+
message: "Failed to parse response body as JSON.",
|
|
1178
|
+
data: jsonError
|
|
1179
|
+
});
|
|
1180
|
+
}
|
|
1181
|
+
const validationResult = v17.safeParse(mapEntryResponseSchema, data);
|
|
1182
|
+
if (!validationResult.success) {
|
|
1183
|
+
return error({
|
|
1184
|
+
name: "ValidateDataError",
|
|
1185
|
+
message: "Failed to validate response data.",
|
|
1186
|
+
data: validationResult
|
|
1187
|
+
});
|
|
1188
|
+
}
|
|
1189
|
+
return success(validationResult.output);
|
|
1190
|
+
}
|
|
1191
|
+
|
|
1192
|
+
// src/stacks-rpc-api/smart-contracts/index.ts
|
|
1193
|
+
var smartContracts2 = {
|
|
1194
|
+
mapEntry
|
|
1195
|
+
};
|
|
1196
|
+
|
|
1197
|
+
// src/stacks-rpc-api/index.ts
|
|
1198
|
+
var stacksRpcApi = {
|
|
1199
|
+
smartContracts: smartContracts2
|
|
1046
1200
|
};
|
|
1047
|
-
var smartContracts = { readOnly };
|
|
1048
|
-
var stackingPool = { members };
|
|
1049
|
-
var transactions = { addressTransactions, getTransaction };
|
|
1050
1201
|
|
|
1051
1202
|
// src/utils/call-rate-limited-api.ts
|
|
1052
1203
|
var import_exponential_backoff = require("exponential-backoff");
|
|
@@ -1084,23 +1235,74 @@ async function safeCallRateLimitedApi(fn, options) {
|
|
|
1084
1235
|
}
|
|
1085
1236
|
}
|
|
1086
1237
|
|
|
1087
|
-
// src/
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1238
|
+
// src/queries/get-signer-stacked-amount.ts
|
|
1239
|
+
async function getSignerStackedAmount(args) {
|
|
1240
|
+
let totalLocked = 0n;
|
|
1241
|
+
const { identifier, ...rest } = args;
|
|
1242
|
+
let hasMore = true;
|
|
1243
|
+
let offset = 0;
|
|
1244
|
+
let found = false;
|
|
1245
|
+
const limit = 200;
|
|
1246
|
+
while (hasMore && !found) {
|
|
1247
|
+
const [error2, data] = await safeCallRateLimitedApi(
|
|
1248
|
+
() => signersInCycle({
|
|
1249
|
+
...rest,
|
|
1250
|
+
limit
|
|
1251
|
+
})
|
|
1252
|
+
);
|
|
1253
|
+
if (error2) {
|
|
1254
|
+
return error({
|
|
1255
|
+
name: "GetSignerTotalLockedError",
|
|
1256
|
+
message: "Failed to get signer total locked.",
|
|
1257
|
+
data: {
|
|
1258
|
+
error: error2
|
|
1259
|
+
}
|
|
1260
|
+
});
|
|
1261
|
+
}
|
|
1262
|
+
for (const signer of data.results) {
|
|
1263
|
+
if (identifier.type === "address") {
|
|
1264
|
+
if (signer.signer_address === identifier.signerAddress) {
|
|
1265
|
+
totalLocked = BigInt(signer.stacked_amount);
|
|
1266
|
+
found = true;
|
|
1267
|
+
break;
|
|
1268
|
+
}
|
|
1269
|
+
} else {
|
|
1270
|
+
if (signer.signing_key === identifier.signerPublicKey) {
|
|
1271
|
+
totalLocked = BigInt(signer.stacked_amount);
|
|
1272
|
+
found = true;
|
|
1273
|
+
break;
|
|
1274
|
+
}
|
|
1275
|
+
}
|
|
1276
|
+
}
|
|
1277
|
+
offset += data.results.length;
|
|
1278
|
+
hasMore = offset < data.total;
|
|
1279
|
+
}
|
|
1280
|
+
if (!found) {
|
|
1281
|
+
return error({
|
|
1282
|
+
name: "SignerNotFound",
|
|
1283
|
+
message: "Signer not found.",
|
|
1284
|
+
data: {
|
|
1285
|
+
identifier,
|
|
1286
|
+
cycle: args.cycleNumber
|
|
1287
|
+
}
|
|
1288
|
+
});
|
|
1289
|
+
}
|
|
1290
|
+
return success(totalLocked);
|
|
1291
|
+
}
|
|
1292
|
+
|
|
1293
|
+
// src/queries/index.ts
|
|
1294
|
+
var queries = {
|
|
1295
|
+
getSignerStackedAmount
|
|
1096
1296
|
};
|
|
1097
1297
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1098
1298
|
0 && (module.exports = {
|
|
1099
1299
|
callRateLimitedApi,
|
|
1100
1300
|
error,
|
|
1301
|
+
queries,
|
|
1101
1302
|
safeCall,
|
|
1102
1303
|
safeCallRateLimitedApi,
|
|
1103
1304
|
safePromise,
|
|
1104
1305
|
stacksApi,
|
|
1306
|
+
stacksRpcApi,
|
|
1105
1307
|
success
|
|
1106
1308
|
});
|