@secretkeylabs/stacks-tools 0.4.0-fdbbd5e → 0.5.0-94148cb
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 +394 -196
- package/dist/index.d.cts +205 -129
- package/dist/index.d.ts +205 -129
- package/dist/index.js +392 -196
- 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({
|
|
@@ -280,8 +334,9 @@ var CoreApiResponseSchema = v5.object({
|
|
|
280
334
|
stacks_tip_height: v5.number(),
|
|
281
335
|
stacks_tip: v5.string(),
|
|
282
336
|
stacks_tip_consensus_hash: v5.string(),
|
|
283
|
-
unanchored_tip: v5.string(),
|
|
284
|
-
|
|
337
|
+
unanchored_tip: v5.nullable(v5.string()),
|
|
338
|
+
unanchored_seq: v5.nullable(v5.string()),
|
|
339
|
+
exit_at_block_height: v5.nullable(v5.number())
|
|
285
340
|
});
|
|
286
341
|
async function coreApi(apiOpts) {
|
|
287
342
|
const init = {};
|
|
@@ -417,6 +472,12 @@ async function poxDetails(args) {
|
|
|
417
472
|
return success(validationResult.output);
|
|
418
473
|
}
|
|
419
474
|
|
|
475
|
+
// src/stacks-api/info/index.ts
|
|
476
|
+
var info = {
|
|
477
|
+
coreApi,
|
|
478
|
+
poxDetails
|
|
479
|
+
};
|
|
480
|
+
|
|
420
481
|
// src/stacks-api/proof-of-transfer/cycle.ts
|
|
421
482
|
var v7 = __toESM(require("valibot"), 1);
|
|
422
483
|
var responseSchema4 = v7.object({
|
|
@@ -705,100 +766,45 @@ async function stackersForSignerInCycle(opts) {
|
|
|
705
766
|
return success(validationResult.output);
|
|
706
767
|
}
|
|
707
768
|
|
|
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
|
-
}
|
|
769
|
+
// src/stacks-api/proof-of-transfer/index.ts
|
|
770
|
+
var proofOfTransfer = {
|
|
771
|
+
cycle,
|
|
772
|
+
cycles,
|
|
773
|
+
signerInCycle,
|
|
774
|
+
signersInCycle,
|
|
775
|
+
stackersForSignerInCycle
|
|
776
|
+
};
|
|
769
777
|
|
|
770
778
|
// 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:
|
|
779
|
+
var v12 = __toESM(require("valibot"), 1);
|
|
780
|
+
var memberSchema = v12.object({
|
|
781
|
+
stacker: v12.string(),
|
|
782
|
+
pox_addr: v12.optional(v12.string()),
|
|
783
|
+
amount_ustx: v12.string(),
|
|
784
|
+
burn_block_unlock_height: v12.optional(v12.number()),
|
|
785
|
+
block_height: v12.number(),
|
|
786
|
+
tx_id: v12.string()
|
|
779
787
|
});
|
|
780
|
-
var membersResponseSchema =
|
|
781
|
-
limit:
|
|
782
|
-
offset:
|
|
783
|
-
total:
|
|
784
|
-
results:
|
|
788
|
+
var membersResponseSchema = v12.object({
|
|
789
|
+
limit: v12.number(),
|
|
790
|
+
offset: v12.number(),
|
|
791
|
+
total: v12.number(),
|
|
792
|
+
results: v12.array(memberSchema)
|
|
785
793
|
});
|
|
786
|
-
async function members(
|
|
794
|
+
async function members(args) {
|
|
787
795
|
const search = new URLSearchParams();
|
|
788
|
-
if (
|
|
789
|
-
if (
|
|
790
|
-
if (
|
|
791
|
-
if (
|
|
796
|
+
if (args.afterBlock) search.append("after_block", args.afterBlock.toString());
|
|
797
|
+
if (args.unanchored) search.append("unanchored", "true");
|
|
798
|
+
if (args.limit) search.append("limit", args.limit.toString());
|
|
799
|
+
if (args.offset) search.append("offset", args.offset.toString());
|
|
792
800
|
const init = {};
|
|
793
|
-
if (
|
|
801
|
+
if (args.apiKeyConfig) {
|
|
794
802
|
init.headers = {
|
|
795
|
-
[
|
|
803
|
+
[args.apiKeyConfig.header]: args.apiKeyConfig.key
|
|
796
804
|
};
|
|
797
805
|
}
|
|
798
|
-
const
|
|
799
|
-
|
|
800
|
-
init
|
|
801
|
-
);
|
|
806
|
+
const endpoint = `${args.baseUrl}/extended/v1/pox4/${args.poolPrincipal}/delegations?${search}`;
|
|
807
|
+
const res = await fetch(endpoint, init);
|
|
802
808
|
if (!res.ok) {
|
|
803
809
|
return error({
|
|
804
810
|
name: "FetchMembersError",
|
|
@@ -818,7 +824,7 @@ async function members(opts, apiOpts) {
|
|
|
818
824
|
data: jsonParseError
|
|
819
825
|
});
|
|
820
826
|
}
|
|
821
|
-
const validationResult =
|
|
827
|
+
const validationResult = v12.safeParse(membersResponseSchema, data);
|
|
822
828
|
if (!validationResult.success) {
|
|
823
829
|
return error({
|
|
824
830
|
name: "ValidateDataError",
|
|
@@ -829,121 +835,126 @@ async function members(opts, apiOpts) {
|
|
|
829
835
|
return success(validationResult.output);
|
|
830
836
|
}
|
|
831
837
|
|
|
838
|
+
// src/stacks-api/stacking-pool/index.ts
|
|
839
|
+
var stackingPool = {
|
|
840
|
+
members
|
|
841
|
+
};
|
|
842
|
+
|
|
832
843
|
// 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
|
-
|
|
844
|
+
var v13 = __toESM(require("valibot"), 1);
|
|
845
|
+
var baseTransactionSchema = v13.object({
|
|
846
|
+
tx_id: v13.string(),
|
|
847
|
+
nonce: v13.number(),
|
|
848
|
+
fee_rate: v13.string(),
|
|
849
|
+
sender_address: v13.string(),
|
|
850
|
+
sponsored: v13.boolean(),
|
|
851
|
+
post_condition_mode: v13.string(),
|
|
852
|
+
post_conditions: v13.array(v13.unknown()),
|
|
853
|
+
anchor_mode: v13.string(),
|
|
854
|
+
is_unanchored: v13.boolean(),
|
|
855
|
+
block_hash: v13.string(),
|
|
856
|
+
parent_block_hash: v13.string(),
|
|
857
|
+
block_height: v13.number(),
|
|
858
|
+
block_time: v13.number(),
|
|
859
|
+
block_time_iso: v13.string(),
|
|
860
|
+
burn_block_height: v13.number(),
|
|
861
|
+
burn_block_time: v13.number(),
|
|
862
|
+
burn_block_time_iso: v13.string(),
|
|
863
|
+
parent_burn_block_time: v13.number(),
|
|
864
|
+
parent_burn_block_time_iso: v13.string(),
|
|
865
|
+
canonical: v13.boolean(),
|
|
866
|
+
tx_index: v13.number(),
|
|
867
|
+
tx_status: v13.union([
|
|
868
|
+
v13.literal("success"),
|
|
869
|
+
v13.literal("abort_by_response"),
|
|
870
|
+
v13.literal("abort_by_post_condition")
|
|
860
871
|
]),
|
|
861
|
-
tx_result:
|
|
862
|
-
hex:
|
|
863
|
-
repr:
|
|
872
|
+
tx_result: v13.object({
|
|
873
|
+
hex: v13.string(),
|
|
874
|
+
repr: v13.string()
|
|
864
875
|
}),
|
|
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:
|
|
876
|
+
microblock_hash: v13.string(),
|
|
877
|
+
microblock_sequence: v13.number(),
|
|
878
|
+
microblock_canonical: v13.boolean(),
|
|
879
|
+
event_count: v13.number(),
|
|
880
|
+
events: v13.array(v13.unknown()),
|
|
881
|
+
execution_cost_read_count: v13.number(),
|
|
882
|
+
execution_cost_read_length: v13.number(),
|
|
883
|
+
execution_cost_runtime: v13.number(),
|
|
884
|
+
execution_cost_write_count: v13.number(),
|
|
885
|
+
execution_cost_write_length: v13.number()
|
|
875
886
|
});
|
|
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:
|
|
887
|
+
var contractCallTransactionSchema = v13.object({
|
|
888
|
+
tx_type: v13.literal("contract_call"),
|
|
889
|
+
contract_call: v13.object({
|
|
890
|
+
contract_id: v13.string(),
|
|
891
|
+
function_name: v13.string(),
|
|
892
|
+
function_signature: v13.string(),
|
|
893
|
+
function_args: v13.array(
|
|
894
|
+
v13.object({
|
|
895
|
+
hex: v13.string(),
|
|
896
|
+
repr: v13.string(),
|
|
897
|
+
name: v13.string(),
|
|
898
|
+
type: v13.string()
|
|
888
899
|
})
|
|
889
900
|
)
|
|
890
901
|
}),
|
|
891
902
|
...baseTransactionSchema.entries
|
|
892
903
|
});
|
|
893
|
-
var smartContractTransactionSchema =
|
|
894
|
-
tx_type:
|
|
895
|
-
smart_contract:
|
|
904
|
+
var smartContractTransactionSchema = v13.object({
|
|
905
|
+
tx_type: v13.literal("smart_contract"),
|
|
906
|
+
smart_contract: v13.object({
|
|
896
907
|
/**
|
|
897
908
|
* NOTE: The types may be wrong, not sure what type of value is used when
|
|
898
909
|
* the version is not `null`.
|
|
899
910
|
*/
|
|
900
|
-
clarity_version:
|
|
901
|
-
contract_id:
|
|
902
|
-
source_code:
|
|
911
|
+
clarity_version: v13.union([v13.null(), v13.number()]),
|
|
912
|
+
contract_id: v13.string(),
|
|
913
|
+
source_code: v13.string()
|
|
903
914
|
}),
|
|
904
915
|
...baseTransactionSchema.entries
|
|
905
916
|
});
|
|
906
|
-
var tokenTransferSchema =
|
|
907
|
-
tx_type:
|
|
908
|
-
token_transfer:
|
|
909
|
-
recipient_address:
|
|
910
|
-
amount:
|
|
911
|
-
memo:
|
|
917
|
+
var tokenTransferSchema = v13.object({
|
|
918
|
+
tx_type: v13.literal("token_transfer"),
|
|
919
|
+
token_transfer: v13.object({
|
|
920
|
+
recipient_address: v13.string(),
|
|
921
|
+
amount: v13.string(),
|
|
922
|
+
memo: v13.string()
|
|
912
923
|
}),
|
|
913
924
|
...baseTransactionSchema.entries
|
|
914
925
|
});
|
|
915
|
-
var transactionSchema =
|
|
926
|
+
var transactionSchema = v13.variant("tx_type", [
|
|
916
927
|
contractCallTransactionSchema,
|
|
917
928
|
smartContractTransactionSchema,
|
|
918
929
|
tokenTransferSchema
|
|
919
930
|
]);
|
|
920
931
|
|
|
921
932
|
// src/stacks-api/transactions/address-transactions.ts
|
|
922
|
-
var
|
|
923
|
-
var resultSchema =
|
|
933
|
+
var v14 = __toESM(require("valibot"), 1);
|
|
934
|
+
var resultSchema = v14.object({
|
|
924
935
|
tx: transactionSchema,
|
|
925
|
-
stx_sent:
|
|
926
|
-
stx_received:
|
|
927
|
-
events:
|
|
928
|
-
stx:
|
|
929
|
-
transfer:
|
|
930
|
-
mint:
|
|
931
|
-
burn:
|
|
936
|
+
stx_sent: v14.string(),
|
|
937
|
+
stx_received: v14.string(),
|
|
938
|
+
events: v14.object({
|
|
939
|
+
stx: v14.object({
|
|
940
|
+
transfer: v14.number(),
|
|
941
|
+
mint: v14.number(),
|
|
942
|
+
burn: v14.number()
|
|
932
943
|
}),
|
|
933
|
-
ft:
|
|
934
|
-
transfer:
|
|
935
|
-
mint:
|
|
936
|
-
burn:
|
|
944
|
+
ft: v14.object({
|
|
945
|
+
transfer: v14.number(),
|
|
946
|
+
mint: v14.number(),
|
|
947
|
+
burn: v14.number()
|
|
937
948
|
}),
|
|
938
|
-
nft:
|
|
939
|
-
transfer:
|
|
940
|
-
mint:
|
|
941
|
-
burn:
|
|
949
|
+
nft: v14.object({
|
|
950
|
+
transfer: v14.number(),
|
|
951
|
+
mint: v14.number(),
|
|
952
|
+
burn: v14.number()
|
|
942
953
|
})
|
|
943
954
|
})
|
|
944
955
|
});
|
|
945
|
-
var resultsSchema4 =
|
|
946
|
-
var addressTransactionsResponseSchema =
|
|
956
|
+
var resultsSchema4 = v14.array(resultSchema);
|
|
957
|
+
var addressTransactionsResponseSchema = v14.object({
|
|
947
958
|
...baseListResponseSchema.entries,
|
|
948
959
|
results: resultsSchema4
|
|
949
960
|
});
|
|
@@ -980,7 +991,7 @@ async function addressTransactions(args) {
|
|
|
980
991
|
data: jsonParseError
|
|
981
992
|
});
|
|
982
993
|
}
|
|
983
|
-
const validationResult =
|
|
994
|
+
const validationResult = v14.safeParse(addressTransactionsResponseSchema, data);
|
|
984
995
|
if (!validationResult.success) {
|
|
985
996
|
return error({
|
|
986
997
|
name: "ValidateDataError",
|
|
@@ -992,7 +1003,7 @@ async function addressTransactions(args) {
|
|
|
992
1003
|
}
|
|
993
1004
|
|
|
994
1005
|
// src/stacks-api/transactions/get-transaction.ts
|
|
995
|
-
var
|
|
1006
|
+
var v15 = __toESM(require("valibot"), 1);
|
|
996
1007
|
async function getTransaction(args) {
|
|
997
1008
|
const init = {};
|
|
998
1009
|
if (args.apiKeyConfig) {
|
|
@@ -1021,7 +1032,7 @@ async function getTransaction(args) {
|
|
|
1021
1032
|
error: jsonParseError
|
|
1022
1033
|
});
|
|
1023
1034
|
}
|
|
1024
|
-
const validationResult =
|
|
1035
|
+
const validationResult = v15.safeParse(transactionSchema, data);
|
|
1025
1036
|
if (!validationResult.success) {
|
|
1026
1037
|
return error({
|
|
1027
1038
|
name: "ValidateDataError",
|
|
@@ -1032,20 +1043,156 @@ async function getTransaction(args) {
|
|
|
1032
1043
|
return success(validationResult.output);
|
|
1033
1044
|
}
|
|
1034
1045
|
|
|
1046
|
+
// src/stacks-api/transactions/index.ts
|
|
1047
|
+
var transactions = {
|
|
1048
|
+
addressTransactions,
|
|
1049
|
+
getTransaction
|
|
1050
|
+
};
|
|
1051
|
+
|
|
1035
1052
|
// src/stacks-api/index.ts
|
|
1036
|
-
var
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1053
|
+
var stacksApi = {
|
|
1054
|
+
accounts,
|
|
1055
|
+
blocks,
|
|
1056
|
+
faucets,
|
|
1057
|
+
info,
|
|
1058
|
+
proofOfTransfer,
|
|
1059
|
+
stackingPool,
|
|
1060
|
+
transactions
|
|
1061
|
+
};
|
|
1062
|
+
|
|
1063
|
+
// src/stacks-rpc-api/smart-contracts/map-entry.ts
|
|
1064
|
+
var v16 = __toESM(require("valibot"), 1);
|
|
1065
|
+
var mapEntryResponseSchema = v16.object({
|
|
1066
|
+
/**
|
|
1067
|
+
* Hex-encoded string of clarity value. It is always an optional tuple.
|
|
1068
|
+
*/
|
|
1069
|
+
data: v16.string(),
|
|
1070
|
+
/**
|
|
1071
|
+
* Hex-encoded string of the MARF proof for the data
|
|
1072
|
+
*/
|
|
1073
|
+
proof: v16.optional(v16.string())
|
|
1074
|
+
});
|
|
1075
|
+
async function mapEntry(args) {
|
|
1076
|
+
const search = new URLSearchParams();
|
|
1077
|
+
if (args.proof === 0) search.append("proof", "0");
|
|
1078
|
+
if (args.tip) search.append("tip", args.tip);
|
|
1079
|
+
const init = {};
|
|
1080
|
+
if (args.apiKeyConfig) {
|
|
1081
|
+
init.headers = {
|
|
1082
|
+
[args.apiKeyConfig.header]: args.apiKeyConfig.key
|
|
1083
|
+
};
|
|
1084
|
+
}
|
|
1085
|
+
init.method = "POST";
|
|
1086
|
+
init.body = JSON.stringify(
|
|
1087
|
+
args.mapKey.startsWith("0x") ? args.mapKey : `0x${args.mapKey}`
|
|
1088
|
+
);
|
|
1089
|
+
init.headers = { ...init.headers, "Content-Type": "application/json" };
|
|
1090
|
+
const endpoint = `${args.baseUrl}/v2/map_entry/${args.contractAddress}/${args.contractName}/${args.mapName}?${search}`;
|
|
1091
|
+
const res = await fetch(endpoint, init);
|
|
1092
|
+
if (!res.ok) {
|
|
1093
|
+
return error({
|
|
1094
|
+
name: "FetchMapEntryError",
|
|
1095
|
+
message: "Failed to fetch map entry.",
|
|
1096
|
+
data: {
|
|
1097
|
+
init,
|
|
1098
|
+
status: res.status,
|
|
1099
|
+
statusText: res.statusText,
|
|
1100
|
+
endpoint,
|
|
1101
|
+
bodyParseResult: await safePromise(res.text())
|
|
1102
|
+
}
|
|
1103
|
+
});
|
|
1104
|
+
}
|
|
1105
|
+
const [jsonError, data] = await safePromise(res.json());
|
|
1106
|
+
if (jsonError) {
|
|
1107
|
+
return error({
|
|
1108
|
+
name: "ParseBodyError",
|
|
1109
|
+
message: "Failed to parse response body as JSON.",
|
|
1110
|
+
data: jsonError
|
|
1111
|
+
});
|
|
1112
|
+
}
|
|
1113
|
+
const validationResult = v16.safeParse(mapEntryResponseSchema, data);
|
|
1114
|
+
if (!validationResult.success) {
|
|
1115
|
+
return error({
|
|
1116
|
+
name: "ValidateDataError",
|
|
1117
|
+
message: "Failed to validate response data.",
|
|
1118
|
+
data: validationResult
|
|
1119
|
+
});
|
|
1120
|
+
}
|
|
1121
|
+
return success(validationResult.output);
|
|
1122
|
+
}
|
|
1123
|
+
|
|
1124
|
+
// src/stacks-rpc-api/smart-contracts/read-only.ts
|
|
1125
|
+
var v17 = __toESM(require("valibot"), 1);
|
|
1126
|
+
var readOnlyResponseSchema = v17.variant("okay", [
|
|
1127
|
+
v17.object({
|
|
1128
|
+
okay: v17.literal(true),
|
|
1129
|
+
/**
|
|
1130
|
+
* A Clarity value as a hex-encoded string.
|
|
1131
|
+
*/
|
|
1132
|
+
result: v17.string()
|
|
1133
|
+
}),
|
|
1134
|
+
v17.object({
|
|
1135
|
+
okay: v17.literal(false),
|
|
1136
|
+
cause: v17.unknown()
|
|
1137
|
+
})
|
|
1138
|
+
]);
|
|
1139
|
+
async function readOnly(args) {
|
|
1140
|
+
const headers = {
|
|
1141
|
+
"Content-Type": "application/json"
|
|
1142
|
+
};
|
|
1143
|
+
if (args.apiKeyConfig) {
|
|
1144
|
+
headers[args.apiKeyConfig.header] = args.apiKeyConfig.key;
|
|
1145
|
+
}
|
|
1146
|
+
const init = {
|
|
1147
|
+
method: "POST",
|
|
1148
|
+
body: JSON.stringify({
|
|
1149
|
+
sender: args.sender,
|
|
1150
|
+
arguments: args.arguments
|
|
1151
|
+
}),
|
|
1152
|
+
headers
|
|
1153
|
+
};
|
|
1154
|
+
const endpoint = `${args.baseUrl}/v2/contracts/call-read/${args.contractAddress}/${args.contractName}/${args.functionName}`;
|
|
1155
|
+
const res = await fetch(endpoint, init);
|
|
1156
|
+
if (!res.ok) {
|
|
1157
|
+
return error({
|
|
1158
|
+
name: "FetchReadOnlyError",
|
|
1159
|
+
message: "Failed to fetch.",
|
|
1160
|
+
data: {
|
|
1161
|
+
status: res.status,
|
|
1162
|
+
statusText: res.statusText,
|
|
1163
|
+
bodyParseResult: await safePromise(res.json())
|
|
1164
|
+
}
|
|
1165
|
+
});
|
|
1166
|
+
}
|
|
1167
|
+
const [jsonError, data] = await safePromise(res.json());
|
|
1168
|
+
if (jsonError) {
|
|
1169
|
+
return error({
|
|
1170
|
+
name: "ParseBodyError",
|
|
1171
|
+
message: "Failed to parse response body as JSON.",
|
|
1172
|
+
data: error
|
|
1173
|
+
});
|
|
1174
|
+
}
|
|
1175
|
+
const validationResult = v17.safeParse(readOnlyResponseSchema, data);
|
|
1176
|
+
if (!validationResult.success) {
|
|
1177
|
+
return error({
|
|
1178
|
+
name: "ValidateDataError",
|
|
1179
|
+
message: "Failed to validate data.",
|
|
1180
|
+
data: validationResult
|
|
1181
|
+
});
|
|
1182
|
+
}
|
|
1183
|
+
return success(validationResult.output);
|
|
1184
|
+
}
|
|
1185
|
+
|
|
1186
|
+
// src/stacks-rpc-api/smart-contracts/index.ts
|
|
1187
|
+
var smartContracts = {
|
|
1188
|
+
mapEntry,
|
|
1189
|
+
readOnly
|
|
1190
|
+
};
|
|
1191
|
+
|
|
1192
|
+
// src/stacks-rpc-api/index.ts
|
|
1193
|
+
var stacksRpcApi = {
|
|
1194
|
+
smartContracts
|
|
1045
1195
|
};
|
|
1046
|
-
var smartContracts = { readOnly };
|
|
1047
|
-
var stackingPool = { members };
|
|
1048
|
-
var transactions = { addressTransactions, getTransaction };
|
|
1049
1196
|
|
|
1050
1197
|
// src/utils/call-rate-limited-api.ts
|
|
1051
1198
|
var import_exponential_backoff = require("exponential-backoff");
|
|
@@ -1083,23 +1230,74 @@ async function safeCallRateLimitedApi(fn, options) {
|
|
|
1083
1230
|
}
|
|
1084
1231
|
}
|
|
1085
1232
|
|
|
1086
|
-
// src/
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
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
|
|
1095
1291
|
};
|
|
1096
1292
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1097
1293
|
0 && (module.exports = {
|
|
1098
1294
|
callRateLimitedApi,
|
|
1099
1295
|
error,
|
|
1296
|
+
queries,
|
|
1100
1297
|
safeCall,
|
|
1101
1298
|
safeCallRateLimitedApi,
|
|
1102
1299
|
safePromise,
|
|
1103
1300
|
stacksApi,
|
|
1301
|
+
stacksRpcApi,
|
|
1104
1302
|
success
|
|
1105
1303
|
});
|