@secretkeylabs/stacks-tools 0.3.0-05c5288 → 0.3.0-6a691d3

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
@@ -30,11 +30,25 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
30
30
  // src/index.ts
31
31
  var src_exports = {};
32
32
  __export(src_exports, {
33
- queries: () => queries,
34
- stacksApi: () => stacksApi
33
+ stacksApi: () => stacks_api_exports
35
34
  });
36
35
  module.exports = __toCommonJS(src_exports);
37
36
 
37
+ // src/stacks-api/index.ts
38
+ var stacks_api_exports = {};
39
+ __export(stacks_api_exports, {
40
+ accounts: () => accounts_exports,
41
+ blocks: () => blocks_exports,
42
+ info: () => info_exports,
43
+ proofOfTransfer: () => proof_of_transfer_exports
44
+ });
45
+
46
+ // src/stacks-api/accounts/index.ts
47
+ var accounts_exports = {};
48
+ __export(accounts_exports, {
49
+ balances: () => balances
50
+ });
51
+
38
52
  // src/utils/safe.ts
39
53
  function success(data) {
40
54
  return [null, data];
@@ -128,10 +142,11 @@ async function balances(opts) {
128
142
  return success(validationResult.output);
129
143
  }
130
144
 
131
- // src/stacks-api/accounts/index.ts
132
- var accounts = {
133
- balances
134
- };
145
+ // src/stacks-api/blocks/index.ts
146
+ var blocks_exports = {};
147
+ __export(blocks_exports, {
148
+ getBlock: () => getBlock
149
+ });
135
150
 
136
151
  // src/stacks-api/types.ts
137
152
  var v2 = __toESM(require("valibot"), 1);
@@ -206,10 +221,12 @@ async function getBlock(opts) {
206
221
  return success(validationResult.output);
207
222
  }
208
223
 
209
- // src/stacks-api/blocks/index.ts
210
- var blocks = {
211
- getBlock
212
- };
224
+ // src/stacks-api/info/index.ts
225
+ var info_exports = {};
226
+ __export(info_exports, {
227
+ coreApi: () => coreApi,
228
+ poxDetails: () => poxDetails
229
+ });
213
230
 
214
231
  // src/stacks-api/info/core-api.ts
215
232
  var v4 = __toESM(require("valibot"), 1);
@@ -362,11 +379,15 @@ async function poxDetails(args) {
362
379
  return success(validationResult.output);
363
380
  }
364
381
 
365
- // src/stacks-api/info/index.ts
366
- var info = {
367
- coreApi,
368
- poxDetails
369
- };
382
+ // src/stacks-api/proof-of-transfer/index.ts
383
+ var proof_of_transfer_exports = {};
384
+ __export(proof_of_transfer_exports, {
385
+ cycle: () => cycle,
386
+ cycles: () => cycles,
387
+ signerInCycle: () => signerInCycle,
388
+ signersInCycle: () => signersInCycle,
389
+ stackersForSignerInCycle: () => stackersForSignerInCycle
390
+ });
370
391
 
371
392
  // src/stacks-api/proof-of-transfer/cycle.ts
372
393
  var v6 = __toESM(require("valibot"), 1);
@@ -654,437 +675,7 @@ async function stackersForSignerInCycle(opts) {
654
675
  }
655
676
  return success(validationResult.output);
656
677
  }
657
-
658
- // src/stacks-api/proof-of-transfer/index.ts
659
- var proofOfTransfer = {
660
- cycle,
661
- cycles,
662
- signerInCycle,
663
- signersInCycle,
664
- stackersForSignerInCycle
665
- };
666
-
667
- // src/stacks-api/smart-contracts/read-only.ts
668
- var v11 = __toESM(require("valibot"), 1);
669
- var readOnlyResponseSchema = v11.variant("okay", [
670
- v11.object({
671
- okay: v11.literal(true),
672
- result: v11.string()
673
- }),
674
- v11.object({
675
- okay: v11.literal(false),
676
- cause: v11.unknown()
677
- })
678
- ]);
679
- async function readOnly(opts, apiOpts) {
680
- const init = {};
681
- if (apiOpts.apiKeyConfig) {
682
- init.headers = {
683
- [apiOpts.apiKeyConfig.header]: apiOpts.apiKeyConfig.key
684
- };
685
- }
686
- const res = await fetch(
687
- `${apiOpts.baseUrl}/v2/contracts/call-read/${opts.contractAddress}/${opts.contractName}/${opts.functionName}`,
688
- init
689
- );
690
- if (!res.ok) {
691
- return error({
692
- name: "FetchReadOnlyError",
693
- message: "Failed to fetch.",
694
- data: {
695
- status: res.status,
696
- statusText: res.statusText,
697
- bodyParseResult: await safePromise(res.json())
698
- }
699
- });
700
- }
701
- const [jsonError, data] = await safePromise(res.json());
702
- if (jsonError) {
703
- return error({
704
- name: "ParseBodyError",
705
- message: "Failed to parse response body as JSON.",
706
- data: error
707
- });
708
- }
709
- const validationResult = v11.safeParse(readOnlyResponseSchema, data);
710
- if (!validationResult.success) {
711
- return error({
712
- name: "ValidateDataError",
713
- message: "Failed to validate data.",
714
- data: validationResult
715
- });
716
- }
717
- return success(validationResult.output);
718
- }
719
-
720
- // src/stacks-api/smart-contracts/index.ts
721
- var smartContracts = {
722
- readOnly
723
- };
724
-
725
- // src/stacks-api/stacking-pool/members.ts
726
- var v12 = __toESM(require("valibot"), 1);
727
- var memberSchema = v12.object({
728
- stacker: v12.string(),
729
- pox_addr: v12.optional(v12.string()),
730
- amount_ustx: v12.string(),
731
- burn_block_unlock_height: v12.optional(v12.number()),
732
- block_height: v12.number(),
733
- tx_id: v12.string()
734
- });
735
- var membersResponseSchema = v12.object({
736
- limit: v12.number(),
737
- offset: v12.number(),
738
- total: v12.number(),
739
- results: v12.array(memberSchema)
740
- });
741
- async function members(opts, apiOpts) {
742
- const search = new URLSearchParams();
743
- if (opts.afterBlock) search.append("after_block", opts.afterBlock.toString());
744
- if (opts.unanchored) search.append("unanchored", "true");
745
- if (opts.limit) search.append("limit", opts.limit.toString());
746
- if (opts.offset) search.append("offset", opts.offset.toString());
747
- const init = {};
748
- if (apiOpts.apiKeyConfig) {
749
- init.headers = {
750
- [apiOpts.apiKeyConfig.header]: apiOpts.apiKeyConfig.key
751
- };
752
- }
753
- const res = await fetch(
754
- `${apiOpts.baseUrl}/extended/beta/stacking/${opts.poolPrincipal}/delegations?${search}`,
755
- init
756
- );
757
- if (!res.ok) {
758
- return error({
759
- name: "FetchMembersError",
760
- message: "Failed to fetch members.",
761
- data: {
762
- status: res.status,
763
- statusText: res.statusText,
764
- bodyParseResult: await safePromise(res.json())
765
- }
766
- });
767
- }
768
- const [jsonParseError, data] = await safePromise(res.json());
769
- if (jsonParseError) {
770
- return error({
771
- name: "ParseBodyError",
772
- message: "Failed to parse response body as JSON.",
773
- data: jsonParseError
774
- });
775
- }
776
- const validationResult = v12.safeParse(membersResponseSchema, data);
777
- if (!validationResult.success) {
778
- return error({
779
- name: "ValidateDataError",
780
- message: "Failed to validate data.",
781
- data: validationResult
782
- });
783
- }
784
- return success(validationResult.output);
785
- }
786
-
787
- // src/stacks-api/stacking-pool/index.ts
788
- var stackingPool = {
789
- members
790
- };
791
-
792
- // src/stacks-api/transactions/schemas.ts
793
- var v13 = __toESM(require("valibot"), 1);
794
- var baseTransactionSchema = v13.object({
795
- tx_id: v13.string(),
796
- nonce: v13.number(),
797
- fee_rate: v13.string(),
798
- sender_address: v13.string(),
799
- sponsored: v13.boolean(),
800
- post_condition_mode: v13.string(),
801
- post_conditions: v13.array(v13.unknown()),
802
- anchor_mode: v13.string(),
803
- is_unanchored: v13.boolean(),
804
- block_hash: v13.string(),
805
- parent_block_hash: v13.string(),
806
- block_height: v13.number(),
807
- block_time: v13.number(),
808
- block_time_iso: v13.string(),
809
- burn_block_height: v13.number(),
810
- burn_block_time: v13.number(),
811
- burn_block_time_iso: v13.string(),
812
- parent_burn_block_time: v13.number(),
813
- parent_burn_block_time_iso: v13.string(),
814
- canonical: v13.boolean(),
815
- tx_index: v13.number(),
816
- tx_status: v13.string(),
817
- tx_result: v13.object({
818
- hex: v13.string(),
819
- repr: v13.string()
820
- }),
821
- microblock_hash: v13.string(),
822
- microblock_sequence: v13.number(),
823
- microblock_canonical: v13.boolean(),
824
- event_count: v13.number(),
825
- events: v13.array(v13.unknown()),
826
- execution_cost_read_count: v13.number(),
827
- execution_cost_read_length: v13.number(),
828
- execution_cost_runtime: v13.number(),
829
- execution_cost_write_count: v13.number(),
830
- execution_cost_write_length: v13.number()
831
- });
832
- var contractCallTransactionSchema = v13.object({
833
- tx_type: v13.literal("contract_call"),
834
- contract_call: v13.object({
835
- contract_id: v13.string(),
836
- function_name: v13.string(),
837
- function_signature: v13.string(),
838
- function_args: v13.array(
839
- v13.object({
840
- hex: v13.string(),
841
- repr: v13.string(),
842
- name: v13.string(),
843
- type: v13.string()
844
- })
845
- )
846
- }),
847
- ...baseTransactionSchema.entries
848
- });
849
- var smartContractTransactionSchema = v13.object({
850
- tx_type: v13.literal("smart_contract"),
851
- smart_contract: v13.object({
852
- /**
853
- * NOTE: The types may be wrong, not sure what type of value is used when
854
- * the version is not `null`.
855
- */
856
- clarity_version: v13.union([v13.null(), v13.number()]),
857
- contract_id: v13.string(),
858
- source_code: v13.string()
859
- }),
860
- ...baseTransactionSchema.entries
861
- });
862
- var tokenTransferSchema = v13.object({
863
- tx_type: v13.literal("token_transfer"),
864
- token_transfer: v13.object({
865
- recipient_address: v13.string(),
866
- amount: v13.string(),
867
- memo: v13.string()
868
- }),
869
- ...baseTransactionSchema.entries
870
- });
871
- var transactionSchema = v13.variant("tx_type", [
872
- contractCallTransactionSchema,
873
- smartContractTransactionSchema,
874
- tokenTransferSchema
875
- ]);
876
-
877
- // src/stacks-api/transactions/address-transactions.ts
878
- var v14 = __toESM(require("valibot"), 1);
879
- var resultSchema = v14.object({
880
- tx: transactionSchema,
881
- stx_sent: v14.string(),
882
- stx_received: v14.string(),
883
- events: v14.object({
884
- stx: v14.object({
885
- transfer: v14.number(),
886
- mint: v14.number(),
887
- burn: v14.number()
888
- }),
889
- ft: v14.object({
890
- transfer: v14.number(),
891
- mint: v14.number(),
892
- burn: v14.number()
893
- }),
894
- nft: v14.object({
895
- transfer: v14.number(),
896
- mint: v14.number(),
897
- burn: v14.number()
898
- })
899
- })
900
- });
901
- var resultsSchema4 = v14.array(resultSchema);
902
- var addressTransactionsResponseSchema = v14.object({
903
- ...baseListResponseSchema.entries,
904
- results: resultsSchema4
905
- });
906
- async function addressTransactions(args) {
907
- const search = new URLSearchParams();
908
- if (args.limit) search.append("limit", args.limit.toString());
909
- if (args.offset) search.append("offset", args.offset.toString());
910
- const init = {};
911
- if (args.apiKeyConfig) {
912
- init.headers = {
913
- [args.apiKeyConfig.header]: args.apiKeyConfig.key
914
- };
915
- }
916
- const res = await fetch(
917
- `${args.baseUrl}/extended/v2/addresses/${args.address}/transactions?${search}`,
918
- init
919
- );
920
- if (!res.ok) {
921
- return error({
922
- name: "FetchAddressTransactionsError",
923
- message: "Failed to fetch address transactions.",
924
- data: {
925
- status: res.status,
926
- statusText: res.statusText,
927
- bodyParseResult: await safePromise(res.json())
928
- }
929
- });
930
- }
931
- const [jsonParseError, data] = await safePromise(res.json());
932
- if (jsonParseError) {
933
- return error({
934
- name: "ParseBodyError",
935
- message: "Failed to parse response body as JSON.",
936
- data: jsonParseError
937
- });
938
- }
939
- const validationResult = v14.safeParse(addressTransactionsResponseSchema, data);
940
- if (!validationResult.success) {
941
- return error({
942
- name: "ValidateDataError",
943
- message: "Failed to validate data.",
944
- data: validationResult
945
- });
946
- }
947
- return success(validationResult.output);
948
- }
949
-
950
- // src/stacks-api/transactions/get-transaction.ts
951
- var v15 = __toESM(require("valibot"), 1);
952
- async function getTransaction(args) {
953
- const init = {};
954
- if (args.apiKeyConfig) {
955
- init.headers = {
956
- [args.apiKeyConfig.header]: args.apiKeyConfig.key
957
- };
958
- }
959
- const endpoint = `${args.baseUrl}/extended/v1/tx/${args.transactionId}`;
960
- const res = await fetch(endpoint, init);
961
- if (!res.ok) {
962
- return error({
963
- name: "FetchTransactionError",
964
- message: `Failed to fetch transaction ${args.transactionId}`,
965
- response: {
966
- status: res.status,
967
- statusText: res.statusText,
968
- body: await safePromise(res.json())
969
- }
970
- });
971
- }
972
- const [jsonParseError, data] = await safePromise(res.json());
973
- if (jsonParseError) {
974
- return error({
975
- name: "ParseBodyError",
976
- message: "Failed to parse response body as JSON.",
977
- error: jsonParseError
978
- });
979
- }
980
- const validationResult = v15.safeParse(transactionSchema, data);
981
- if (!validationResult.success) {
982
- return error({
983
- name: "ValidateDataError",
984
- message: "Failed to validate data.",
985
- error: validationResult
986
- });
987
- }
988
- return success(validationResult.output);
989
- }
990
-
991
- // src/stacks-api/transactions/index.ts
992
- var transactions = {
993
- addressTransactions,
994
- getTransaction
995
- };
996
-
997
- // src/stacks-api/index.ts
998
- var stacksApi = {
999
- accounts,
1000
- blocks,
1001
- info,
1002
- proofOfTransfer,
1003
- smartContracts,
1004
- stackingPool,
1005
- transactions
1006
- };
1007
-
1008
- // src/utils/call-rate-limited-api.ts
1009
- var import_exponential_backoff = require("exponential-backoff");
1010
- async function safeCallRateLimitedApi(fn, options) {
1011
- try {
1012
- return await (0, import_exponential_backoff.backOff)(() => fn(), {
1013
- startingDelay: options?.startingDelay ?? 15e3,
1014
- numOfAttempts: options?.numOfAttempts ?? 5
1015
- });
1016
- } catch (error2) {
1017
- return error({
1018
- name: "MaxRetriesExceeded",
1019
- message: "Failed to call rate limited API.",
1020
- data: {
1021
- error: error2
1022
- }
1023
- });
1024
- }
1025
- }
1026
-
1027
- // src/queries/get-signer-stacked-amount.ts
1028
- async function getSignerStackedAmount(args) {
1029
- let totalLocked = 0n;
1030
- const { identifier, ...rest } = args;
1031
- let hasMore = true;
1032
- let offset = 0;
1033
- let found = false;
1034
- const limit = 200;
1035
- while (hasMore && !found) {
1036
- const [error2, data] = await safeCallRateLimitedApi(
1037
- () => signersInCycle({
1038
- ...rest,
1039
- limit
1040
- })
1041
- );
1042
- if (error2) {
1043
- return error({
1044
- name: "GetSignerTotalLockedError",
1045
- message: "Failed to get signer total locked.",
1046
- data: {
1047
- error: error2
1048
- }
1049
- });
1050
- }
1051
- for (const signer of data.results) {
1052
- if (identifier.type === "address") {
1053
- if (signer.signer_address === identifier.signerAddress) {
1054
- totalLocked = BigInt(signer.stacked_amount);
1055
- found = true;
1056
- break;
1057
- }
1058
- } else {
1059
- if (signer.signing_key === identifier.signerPublicKey) {
1060
- totalLocked = BigInt(signer.stacked_amount);
1061
- found = true;
1062
- break;
1063
- }
1064
- }
1065
- }
1066
- offset += limit + data.results.length;
1067
- hasMore = offset < data.total;
1068
- }
1069
- if (!found) {
1070
- return error({
1071
- name: "SignerNotFound",
1072
- message: "Signer not found.",
1073
- data: {
1074
- identifier,
1075
- cycle: args.cycleNumber
1076
- }
1077
- });
1078
- }
1079
- return success(totalLocked);
1080
- }
1081
-
1082
- // src/queries/index.ts
1083
- var queries = {
1084
- getSignerStackedAmount
1085
- };
1086
678
  // Annotate the CommonJS export names for ESM import in node:
1087
679
  0 && (module.exports = {
1088
- queries,
1089
680
  stacksApi
1090
681
  });