@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 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/smart-contracts/read-only.ts
710
- var v12 = __toESM(require("valibot"), 1);
711
- var readOnlyResponseSchema = v12.variant("okay", [
712
- v12.object({
713
- okay: v12.literal(true),
714
- /**
715
- * A Clarity value as a hex-encoded string.
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 v13 = __toESM(require("valibot"), 1);
773
- var memberSchema = v13.object({
774
- stacker: v13.string(),
775
- pox_addr: v13.optional(v13.string()),
776
- amount_ustx: v13.string(),
777
- burn_block_unlock_height: v13.optional(v13.number()),
778
- block_height: v13.number(),
779
- tx_id: v13.string()
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 = v13.object({
782
- limit: v13.number(),
783
- offset: v13.number(),
784
- total: v13.number(),
785
- results: v13.array(memberSchema)
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(opts, apiOpts) {
794
+ async function members(args) {
788
795
  const search = new URLSearchParams();
789
- if (opts.afterBlock) search.append("after_block", opts.afterBlock.toString());
790
- if (opts.unanchored) search.append("unanchored", "true");
791
- if (opts.limit) search.append("limit", opts.limit.toString());
792
- if (opts.offset) search.append("offset", opts.offset.toString());
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 (apiOpts.apiKeyConfig) {
801
+ if (args.apiKeyConfig) {
795
802
  init.headers = {
796
- [apiOpts.apiKeyConfig.header]: apiOpts.apiKeyConfig.key
803
+ [args.apiKeyConfig.header]: args.apiKeyConfig.key
797
804
  };
798
805
  }
799
- const res = await fetch(
800
- `${apiOpts.baseUrl}/extended/beta/stacking/${opts.poolPrincipal}/delegations?${search}`,
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 = v13.safeParse(membersResponseSchema, data);
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 v14 = __toESM(require("valibot"), 1);
835
- var baseTransactionSchema = v14.object({
836
- tx_id: v14.string(),
837
- nonce: v14.number(),
838
- fee_rate: v14.string(),
839
- sender_address: v14.string(),
840
- sponsored: v14.boolean(),
841
- post_condition_mode: v14.string(),
842
- post_conditions: v14.array(v14.unknown()),
843
- anchor_mode: v14.string(),
844
- is_unanchored: v14.boolean(),
845
- block_hash: v14.string(),
846
- parent_block_hash: v14.string(),
847
- block_height: v14.number(),
848
- block_time: v14.number(),
849
- block_time_iso: v14.string(),
850
- burn_block_height: v14.number(),
851
- burn_block_time: v14.number(),
852
- burn_block_time_iso: v14.string(),
853
- parent_burn_block_time: v14.number(),
854
- parent_burn_block_time_iso: v14.string(),
855
- canonical: v14.boolean(),
856
- tx_index: v14.number(),
857
- tx_status: v14.union([
858
- v14.literal("success"),
859
- v14.literal("abort_by_response"),
860
- v14.literal("abort_by_post_condition")
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: v14.object({
863
- hex: v14.string(),
864
- repr: v14.string()
872
+ tx_result: v13.object({
873
+ hex: v13.string(),
874
+ repr: v13.string()
865
875
  }),
866
- microblock_hash: v14.string(),
867
- microblock_sequence: v14.number(),
868
- microblock_canonical: v14.boolean(),
869
- event_count: v14.number(),
870
- events: v14.array(v14.unknown()),
871
- execution_cost_read_count: v14.number(),
872
- execution_cost_read_length: v14.number(),
873
- execution_cost_runtime: v14.number(),
874
- execution_cost_write_count: v14.number(),
875
- execution_cost_write_length: v14.number()
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 = v14.object({
878
- tx_type: v14.literal("contract_call"),
879
- contract_call: v14.object({
880
- contract_id: v14.string(),
881
- function_name: v14.string(),
882
- function_signature: v14.string(),
883
- function_args: v14.array(
884
- v14.object({
885
- hex: v14.string(),
886
- repr: v14.string(),
887
- name: v14.string(),
888
- type: v14.string()
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 = v14.object({
895
- tx_type: v14.literal("smart_contract"),
896
- smart_contract: v14.object({
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: v14.union([v14.null(), v14.number()]),
902
- contract_id: v14.string(),
903
- source_code: v14.string()
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 = v14.object({
908
- tx_type: v14.literal("token_transfer"),
909
- token_transfer: v14.object({
910
- recipient_address: v14.string(),
911
- amount: v14.string(),
912
- memo: v14.string()
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 = v14.variant("tx_type", [
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 v15 = __toESM(require("valibot"), 1);
924
- var resultSchema = v15.object({
933
+ var v14 = __toESM(require("valibot"), 1);
934
+ var resultSchema = v14.object({
925
935
  tx: transactionSchema,
926
- stx_sent: v15.string(),
927
- stx_received: v15.string(),
928
- events: v15.object({
929
- stx: v15.object({
930
- transfer: v15.number(),
931
- mint: v15.number(),
932
- burn: v15.number()
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: v15.object({
935
- transfer: v15.number(),
936
- mint: v15.number(),
937
- burn: v15.number()
944
+ ft: v14.object({
945
+ transfer: v14.number(),
946
+ mint: v14.number(),
947
+ burn: v14.number()
938
948
  }),
939
- nft: v15.object({
940
- transfer: v15.number(),
941
- mint: v15.number(),
942
- burn: v15.number()
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 = v15.array(resultSchema);
947
- var addressTransactionsResponseSchema = v15.object({
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 = v15.safeParse(addressTransactionsResponseSchema, data);
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 v16 = __toESM(require("valibot"), 1);
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 = v16.safeParse(transactionSchema, data);
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 accounts = { balances, latestNonce };
1038
- var blocks = { getBlock };
1039
- var info = { coreApi, poxDetails };
1040
- var proofOfTransfer = {
1041
- cycle,
1042
- cycles,
1043
- signerInCycle,
1044
- signersInCycle,
1045
- stackersForSignerInCycle
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/index.ts
1088
- var stacksApi = {
1089
- accounts,
1090
- blocks,
1091
- info,
1092
- proofOfTransfer,
1093
- smartContracts,
1094
- stackingPool,
1095
- transactions
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
  });