@secretkeylabs/stacks-tools 0.4.0 → 0.5.0
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 +391 -194
- package/dist/index.d.cts +202 -127
- package/dist/index.d.ts +202 -127
- package/dist/index.js +389 -194
- 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,100 +766,45 @@ async function stackersForSignerInCycle(opts) {
|
|
|
706
766
|
return success(validationResult.output);
|
|
707
767
|
}
|
|
708
768
|
|
|
709
|
-
// src/stacks-api/
|
|
710
|
-
var
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
result: v12.string()
|
|
718
|
-
}),
|
|
719
|
-
v12.object({
|
|
720
|
-
okay: v12.literal(false),
|
|
721
|
-
cause: v12.unknown()
|
|
722
|
-
})
|
|
723
|
-
]);
|
|
724
|
-
async function readOnly(args) {
|
|
725
|
-
const headers = {
|
|
726
|
-
"Content-Type": "application/json"
|
|
727
|
-
};
|
|
728
|
-
if (args.apiKeyConfig) {
|
|
729
|
-
headers[args.apiKeyConfig.header] = args.apiKeyConfig.key;
|
|
730
|
-
}
|
|
731
|
-
const init = {
|
|
732
|
-
method: "POST",
|
|
733
|
-
body: JSON.stringify({
|
|
734
|
-
sender: args.sender,
|
|
735
|
-
arguments: args.arguments
|
|
736
|
-
}),
|
|
737
|
-
headers
|
|
738
|
-
};
|
|
739
|
-
const endpoint = `${args.baseUrl}/v2/contracts/call-read/${args.contractAddress}/${args.contractName}/${args.functionName}`;
|
|
740
|
-
const res = await fetch(endpoint, init);
|
|
741
|
-
if (!res.ok) {
|
|
742
|
-
return error({
|
|
743
|
-
name: "FetchReadOnlyError",
|
|
744
|
-
message: "Failed to fetch.",
|
|
745
|
-
data: {
|
|
746
|
-
status: res.status,
|
|
747
|
-
statusText: res.statusText,
|
|
748
|
-
bodyParseResult: await safePromise(res.json())
|
|
749
|
-
}
|
|
750
|
-
});
|
|
751
|
-
}
|
|
752
|
-
const [jsonError, data] = await safePromise(res.json());
|
|
753
|
-
if (jsonError) {
|
|
754
|
-
return error({
|
|
755
|
-
name: "ParseBodyError",
|
|
756
|
-
message: "Failed to parse response body as JSON.",
|
|
757
|
-
data: error
|
|
758
|
-
});
|
|
759
|
-
}
|
|
760
|
-
const validationResult = v12.safeParse(readOnlyResponseSchema, data);
|
|
761
|
-
if (!validationResult.success) {
|
|
762
|
-
return error({
|
|
763
|
-
name: "ValidateDataError",
|
|
764
|
-
message: "Failed to validate data.",
|
|
765
|
-
data: validationResult
|
|
766
|
-
});
|
|
767
|
-
}
|
|
768
|
-
return success(validationResult.output);
|
|
769
|
-
}
|
|
769
|
+
// src/stacks-api/proof-of-transfer/index.ts
|
|
770
|
+
var proofOfTransfer = {
|
|
771
|
+
cycle,
|
|
772
|
+
cycles,
|
|
773
|
+
signerInCycle,
|
|
774
|
+
signersInCycle,
|
|
775
|
+
stackersForSignerInCycle
|
|
776
|
+
};
|
|
770
777
|
|
|
771
778
|
// src/stacks-api/stacking-pool/members.ts
|
|
772
|
-
var
|
|
773
|
-
var memberSchema =
|
|
774
|
-
stacker:
|
|
775
|
-
pox_addr:
|
|
776
|
-
amount_ustx:
|
|
777
|
-
burn_block_unlock_height:
|
|
778
|
-
block_height:
|
|
779
|
-
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()
|
|
780
787
|
});
|
|
781
|
-
var membersResponseSchema =
|
|
782
|
-
limit:
|
|
783
|
-
offset:
|
|
784
|
-
total:
|
|
785
|
-
results:
|
|
788
|
+
var membersResponseSchema = v12.object({
|
|
789
|
+
limit: v12.number(),
|
|
790
|
+
offset: v12.number(),
|
|
791
|
+
total: v12.number(),
|
|
792
|
+
results: v12.array(memberSchema)
|
|
786
793
|
});
|
|
787
|
-
async function members(
|
|
794
|
+
async function members(args) {
|
|
788
795
|
const search = new URLSearchParams();
|
|
789
|
-
if (
|
|
790
|
-
if (
|
|
791
|
-
if (
|
|
792
|
-
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());
|
|
793
800
|
const init = {};
|
|
794
|
-
if (
|
|
801
|
+
if (args.apiKeyConfig) {
|
|
795
802
|
init.headers = {
|
|
796
|
-
[
|
|
803
|
+
[args.apiKeyConfig.header]: args.apiKeyConfig.key
|
|
797
804
|
};
|
|
798
805
|
}
|
|
799
|
-
const
|
|
800
|
-
|
|
801
|
-
init
|
|
802
|
-
);
|
|
806
|
+
const endpoint = `${args.baseUrl}/extended/v1/pox4/${args.poolPrincipal}/delegations?${search}`;
|
|
807
|
+
const res = await fetch(endpoint, init);
|
|
803
808
|
if (!res.ok) {
|
|
804
809
|
return error({
|
|
805
810
|
name: "FetchMembersError",
|
|
@@ -819,7 +824,7 @@ async function members(opts, apiOpts) {
|
|
|
819
824
|
data: jsonParseError
|
|
820
825
|
});
|
|
821
826
|
}
|
|
822
|
-
const validationResult =
|
|
827
|
+
const validationResult = v12.safeParse(membersResponseSchema, data);
|
|
823
828
|
if (!validationResult.success) {
|
|
824
829
|
return error({
|
|
825
830
|
name: "ValidateDataError",
|
|
@@ -830,121 +835,126 @@ async function members(opts, apiOpts) {
|
|
|
830
835
|
return success(validationResult.output);
|
|
831
836
|
}
|
|
832
837
|
|
|
838
|
+
// src/stacks-api/stacking-pool/index.ts
|
|
839
|
+
var stackingPool = {
|
|
840
|
+
members
|
|
841
|
+
};
|
|
842
|
+
|
|
833
843
|
// src/stacks-api/transactions/schemas.ts
|
|
834
|
-
var
|
|
835
|
-
var baseTransactionSchema =
|
|
836
|
-
tx_id:
|
|
837
|
-
nonce:
|
|
838
|
-
fee_rate:
|
|
839
|
-
sender_address:
|
|
840
|
-
sponsored:
|
|
841
|
-
post_condition_mode:
|
|
842
|
-
post_conditions:
|
|
843
|
-
anchor_mode:
|
|
844
|
-
is_unanchored:
|
|
845
|
-
block_hash:
|
|
846
|
-
parent_block_hash:
|
|
847
|
-
block_height:
|
|
848
|
-
block_time:
|
|
849
|
-
block_time_iso:
|
|
850
|
-
burn_block_height:
|
|
851
|
-
burn_block_time:
|
|
852
|
-
burn_block_time_iso:
|
|
853
|
-
parent_burn_block_time:
|
|
854
|
-
parent_burn_block_time_iso:
|
|
855
|
-
canonical:
|
|
856
|
-
tx_index:
|
|
857
|
-
tx_status:
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
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")
|
|
861
871
|
]),
|
|
862
|
-
tx_result:
|
|
863
|
-
hex:
|
|
864
|
-
repr:
|
|
872
|
+
tx_result: v13.object({
|
|
873
|
+
hex: v13.string(),
|
|
874
|
+
repr: v13.string()
|
|
865
875
|
}),
|
|
866
|
-
microblock_hash:
|
|
867
|
-
microblock_sequence:
|
|
868
|
-
microblock_canonical:
|
|
869
|
-
event_count:
|
|
870
|
-
events:
|
|
871
|
-
execution_cost_read_count:
|
|
872
|
-
execution_cost_read_length:
|
|
873
|
-
execution_cost_runtime:
|
|
874
|
-
execution_cost_write_count:
|
|
875
|
-
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()
|
|
876
886
|
});
|
|
877
|
-
var contractCallTransactionSchema =
|
|
878
|
-
tx_type:
|
|
879
|
-
contract_call:
|
|
880
|
-
contract_id:
|
|
881
|
-
function_name:
|
|
882
|
-
function_signature:
|
|
883
|
-
function_args:
|
|
884
|
-
|
|
885
|
-
hex:
|
|
886
|
-
repr:
|
|
887
|
-
name:
|
|
888
|
-
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()
|
|
889
899
|
})
|
|
890
900
|
)
|
|
891
901
|
}),
|
|
892
902
|
...baseTransactionSchema.entries
|
|
893
903
|
});
|
|
894
|
-
var smartContractTransactionSchema =
|
|
895
|
-
tx_type:
|
|
896
|
-
smart_contract:
|
|
904
|
+
var smartContractTransactionSchema = v13.object({
|
|
905
|
+
tx_type: v13.literal("smart_contract"),
|
|
906
|
+
smart_contract: v13.object({
|
|
897
907
|
/**
|
|
898
908
|
* NOTE: The types may be wrong, not sure what type of value is used when
|
|
899
909
|
* the version is not `null`.
|
|
900
910
|
*/
|
|
901
|
-
clarity_version:
|
|
902
|
-
contract_id:
|
|
903
|
-
source_code:
|
|
911
|
+
clarity_version: v13.union([v13.null(), v13.number()]),
|
|
912
|
+
contract_id: v13.string(),
|
|
913
|
+
source_code: v13.string()
|
|
904
914
|
}),
|
|
905
915
|
...baseTransactionSchema.entries
|
|
906
916
|
});
|
|
907
|
-
var tokenTransferSchema =
|
|
908
|
-
tx_type:
|
|
909
|
-
token_transfer:
|
|
910
|
-
recipient_address:
|
|
911
|
-
amount:
|
|
912
|
-
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()
|
|
913
923
|
}),
|
|
914
924
|
...baseTransactionSchema.entries
|
|
915
925
|
});
|
|
916
|
-
var transactionSchema =
|
|
926
|
+
var transactionSchema = v13.variant("tx_type", [
|
|
917
927
|
contractCallTransactionSchema,
|
|
918
928
|
smartContractTransactionSchema,
|
|
919
929
|
tokenTransferSchema
|
|
920
930
|
]);
|
|
921
931
|
|
|
922
932
|
// src/stacks-api/transactions/address-transactions.ts
|
|
923
|
-
var
|
|
924
|
-
var resultSchema =
|
|
933
|
+
var v14 = __toESM(require("valibot"), 1);
|
|
934
|
+
var resultSchema = v14.object({
|
|
925
935
|
tx: transactionSchema,
|
|
926
|
-
stx_sent:
|
|
927
|
-
stx_received:
|
|
928
|
-
events:
|
|
929
|
-
stx:
|
|
930
|
-
transfer:
|
|
931
|
-
mint:
|
|
932
|
-
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()
|
|
933
943
|
}),
|
|
934
|
-
ft:
|
|
935
|
-
transfer:
|
|
936
|
-
mint:
|
|
937
|
-
burn:
|
|
944
|
+
ft: v14.object({
|
|
945
|
+
transfer: v14.number(),
|
|
946
|
+
mint: v14.number(),
|
|
947
|
+
burn: v14.number()
|
|
938
948
|
}),
|
|
939
|
-
nft:
|
|
940
|
-
transfer:
|
|
941
|
-
mint:
|
|
942
|
-
burn:
|
|
949
|
+
nft: v14.object({
|
|
950
|
+
transfer: v14.number(),
|
|
951
|
+
mint: v14.number(),
|
|
952
|
+
burn: v14.number()
|
|
943
953
|
})
|
|
944
954
|
})
|
|
945
955
|
});
|
|
946
|
-
var resultsSchema4 =
|
|
947
|
-
var addressTransactionsResponseSchema =
|
|
956
|
+
var resultsSchema4 = v14.array(resultSchema);
|
|
957
|
+
var addressTransactionsResponseSchema = v14.object({
|
|
948
958
|
...baseListResponseSchema.entries,
|
|
949
959
|
results: resultsSchema4
|
|
950
960
|
});
|
|
@@ -981,7 +991,7 @@ async function addressTransactions(args) {
|
|
|
981
991
|
data: jsonParseError
|
|
982
992
|
});
|
|
983
993
|
}
|
|
984
|
-
const validationResult =
|
|
994
|
+
const validationResult = v14.safeParse(addressTransactionsResponseSchema, data);
|
|
985
995
|
if (!validationResult.success) {
|
|
986
996
|
return error({
|
|
987
997
|
name: "ValidateDataError",
|
|
@@ -993,7 +1003,7 @@ async function addressTransactions(args) {
|
|
|
993
1003
|
}
|
|
994
1004
|
|
|
995
1005
|
// src/stacks-api/transactions/get-transaction.ts
|
|
996
|
-
var
|
|
1006
|
+
var v15 = __toESM(require("valibot"), 1);
|
|
997
1007
|
async function getTransaction(args) {
|
|
998
1008
|
const init = {};
|
|
999
1009
|
if (args.apiKeyConfig) {
|
|
@@ -1022,7 +1032,7 @@ async function getTransaction(args) {
|
|
|
1022
1032
|
error: jsonParseError
|
|
1023
1033
|
});
|
|
1024
1034
|
}
|
|
1025
|
-
const validationResult =
|
|
1035
|
+
const validationResult = v15.safeParse(transactionSchema, data);
|
|
1026
1036
|
if (!validationResult.success) {
|
|
1027
1037
|
return error({
|
|
1028
1038
|
name: "ValidateDataError",
|
|
@@ -1033,20 +1043,156 @@ async function getTransaction(args) {
|
|
|
1033
1043
|
return success(validationResult.output);
|
|
1034
1044
|
}
|
|
1035
1045
|
|
|
1046
|
+
// src/stacks-api/transactions/index.ts
|
|
1047
|
+
var transactions = {
|
|
1048
|
+
addressTransactions,
|
|
1049
|
+
getTransaction
|
|
1050
|
+
};
|
|
1051
|
+
|
|
1036
1052
|
// src/stacks-api/index.ts
|
|
1037
|
-
var
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
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
|
|
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
|
});
|