@solana/web3.js 2.0.0-experimental.819a6f7 → 2.0.0-experimental.8245fa6

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.
Files changed (31) hide show
  1. package/README.md +1155 -43
  2. package/dist/index.browser.cjs +287 -72
  3. package/dist/index.browser.cjs.map +1 -1
  4. package/dist/index.browser.js +279 -75
  5. package/dist/index.browser.js.map +1 -1
  6. package/dist/index.development.js +1113 -947
  7. package/dist/index.development.js.map +1 -1
  8. package/dist/index.native.js +279 -73
  9. package/dist/index.native.js.map +1 -1
  10. package/dist/index.node.cjs +287 -70
  11. package/dist/index.node.cjs.map +1 -1
  12. package/dist/index.node.js +281 -73
  13. package/dist/index.node.js.map +1 -1
  14. package/dist/index.production.min.js +74 -51
  15. package/dist/types/airdrop-confirmer.d.ts +20 -0
  16. package/dist/types/airdrop-confirmer.d.ts.map +1 -0
  17. package/dist/types/airdrop.d.ts +23 -0
  18. package/dist/types/airdrop.d.ts.map +1 -0
  19. package/dist/types/index.d.ts +3 -0
  20. package/dist/types/index.d.ts.map +1 -1
  21. package/dist/types/send-transaction.d.ts +37 -0
  22. package/dist/types/send-transaction.d.ts.map +1 -0
  23. package/dist/types/transaction-confirmation-strategy-nonce.d.ts +3 -3
  24. package/dist/types/transaction-confirmation-strategy-nonce.d.ts.map +1 -1
  25. package/dist/types/transaction-confirmation-strategy-racer.d.ts +7 -3
  26. package/dist/types/transaction-confirmation-strategy-racer.d.ts.map +1 -1
  27. package/dist/types/transaction-confirmation-strategy-recent-signature.d.ts +1 -1
  28. package/dist/types/transaction-confirmation-strategy-recent-signature.d.ts.map +1 -1
  29. package/dist/types/transaction-confirmation-strategy-timeout.d.ts +8 -0
  30. package/dist/types/transaction-confirmation-strategy-timeout.d.ts.map +1 -0
  31. package/package.json +17 -16
@@ -3,12 +3,13 @@
3
3
  var addresses = require('@solana/addresses');
4
4
  var instructions = require('@solana/instructions');
5
5
  var keys = require('@solana/keys');
6
+ var rpcTypes = require('@solana/rpc-types');
6
7
  var transactions = require('@solana/transactions');
7
8
  var functional = require('@solana/functional');
8
9
  var rpcCore = require('@solana/rpc-core');
9
10
  var rpcTransport = require('@solana/rpc-transport');
10
11
  var fastStableStringify = require('fast-stable-stringify');
11
- var umiSerializers = require('@metaplex-foundation/umi-serializers');
12
+ var codecsStrings = require('@solana/codecs-strings');
12
13
 
13
14
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
14
15
 
@@ -17,6 +18,161 @@ var fastStableStringify__default = /*#__PURE__*/_interopDefault(fastStableString
17
18
  // ../build-scripts/env-shim.ts
18
19
  var __DEV__ = /* @__PURE__ */ (() => process["env"].NODE_ENV === "development")();
19
20
 
21
+ // src/transaction-confirmation-strategy-racer.ts
22
+ async function raceStrategies(signature, config, getSpecificStrategiesForRace) {
23
+ const { abortSignal: callerAbortSignal, commitment, getRecentSignatureConfirmationPromise } = config;
24
+ callerAbortSignal?.throwIfAborted();
25
+ const abortController = new AbortController();
26
+ if (callerAbortSignal) {
27
+ const handleAbort = () => {
28
+ abortController.abort();
29
+ };
30
+ callerAbortSignal.addEventListener("abort", handleAbort, { signal: abortController.signal });
31
+ }
32
+ try {
33
+ const specificStrategies = getSpecificStrategiesForRace({
34
+ ...config,
35
+ abortSignal: abortController.signal
36
+ });
37
+ return await Promise.race([
38
+ getRecentSignatureConfirmationPromise({
39
+ abortSignal: abortController.signal,
40
+ commitment,
41
+ signature
42
+ }),
43
+ ...specificStrategies
44
+ ]);
45
+ } finally {
46
+ abortController.abort();
47
+ }
48
+ }
49
+ function createRecentSignatureConfirmationPromiseFactory(rpc, rpcSubscriptions) {
50
+ return async function getRecentSignatureConfirmationPromise({
51
+ abortSignal: callerAbortSignal,
52
+ commitment,
53
+ signature
54
+ }) {
55
+ const abortController = new AbortController();
56
+ function handleAbort() {
57
+ abortController.abort();
58
+ }
59
+ callerAbortSignal.addEventListener("abort", handleAbort, { signal: abortController.signal });
60
+ const signatureStatusNotifications = await rpcSubscriptions.signatureNotifications(signature, { commitment }).subscribe({ abortSignal: abortController.signal });
61
+ const signatureDidCommitPromise = (async () => {
62
+ for await (const signatureStatusNotification of signatureStatusNotifications) {
63
+ if (signatureStatusNotification.value.err) {
64
+ throw new Error(`The transaction with signature \`${signature}\` failed.`, {
65
+ cause: signatureStatusNotification.value.err
66
+ });
67
+ } else {
68
+ return;
69
+ }
70
+ }
71
+ })();
72
+ const signatureStatusLookupPromise = (async () => {
73
+ const { value: signatureStatusResults } = await rpc.getSignatureStatuses([signature]).send({ abortSignal: abortController.signal });
74
+ const signatureStatus = signatureStatusResults[0];
75
+ if (signatureStatus && signatureStatus.confirmationStatus && rpcTypes.commitmentComparator(signatureStatus.confirmationStatus, commitment) >= 0) {
76
+ return;
77
+ } else {
78
+ await new Promise(() => {
79
+ });
80
+ }
81
+ })();
82
+ try {
83
+ return await Promise.race([signatureDidCommitPromise, signatureStatusLookupPromise]);
84
+ } finally {
85
+ abortController.abort();
86
+ }
87
+ };
88
+ }
89
+
90
+ // src/transaction-confirmation-strategy-timeout.ts
91
+ async function getTimeoutPromise({ abortSignal: callerAbortSignal, commitment }) {
92
+ return await new Promise((_, reject) => {
93
+ const handleAbort = (e) => {
94
+ clearTimeout(timeoutId);
95
+ const abortError = new DOMException(e.target.reason, "AbortError");
96
+ reject(abortError);
97
+ };
98
+ callerAbortSignal.addEventListener("abort", handleAbort);
99
+ const timeoutMs = commitment === "processed" ? 3e4 : 6e4;
100
+ const startMs = performance.now();
101
+ const timeoutId = (
102
+ // We use `setTimeout` instead of `AbortSignal.timeout()` because we want to measure
103
+ // elapsed time instead of active time.
104
+ // See https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/timeout_static
105
+ setTimeout(() => {
106
+ const elapsedMs = performance.now() - startMs;
107
+ reject(new DOMException(`Timeout elapsed after ${elapsedMs} ms`, "TimeoutError"));
108
+ }, timeoutMs)
109
+ );
110
+ });
111
+ }
112
+
113
+ // src/airdrop-confirmer.ts
114
+ function createDefaultSignatureOnlyRecentTransactionConfirmer({
115
+ rpc,
116
+ rpcSubscriptions
117
+ }) {
118
+ const getRecentSignatureConfirmationPromise = createRecentSignatureConfirmationPromiseFactory(
119
+ rpc,
120
+ rpcSubscriptions
121
+ );
122
+ return async function confirmSignatureOnlyRecentTransaction(config) {
123
+ await waitForRecentTransactionConfirmationUntilTimeout({
124
+ ...config,
125
+ getRecentSignatureConfirmationPromise,
126
+ getTimeoutPromise
127
+ });
128
+ };
129
+ }
130
+ async function waitForRecentTransactionConfirmationUntilTimeout(config) {
131
+ await raceStrategies(
132
+ config.signature,
133
+ config,
134
+ function getSpecificStrategiesForRace({ abortSignal, commitment, getTimeoutPromise: getTimeoutPromise2 }) {
135
+ return [
136
+ getTimeoutPromise2({
137
+ abortSignal,
138
+ commitment
139
+ })
140
+ ];
141
+ }
142
+ );
143
+ }
144
+
145
+ // src/airdrop.ts
146
+ function createDefaultAirdropRequester({ rpc, rpcSubscriptions }) {
147
+ const confirmSignatureOnlyTransaction = createDefaultSignatureOnlyRecentTransactionConfirmer({
148
+ rpc,
149
+ rpcSubscriptions
150
+ });
151
+ return async function requestAirdrop(config) {
152
+ return await requestAndConfirmAirdrop({
153
+ ...config,
154
+ confirmSignatureOnlyTransaction,
155
+ rpc
156
+ });
157
+ };
158
+ }
159
+ async function requestAndConfirmAirdrop({
160
+ abortSignal,
161
+ commitment,
162
+ confirmSignatureOnlyTransaction,
163
+ lamports,
164
+ recipientAddress,
165
+ rpc
166
+ }) {
167
+ const airdropTransactionSignature = await rpc.requestAirdrop(recipientAddress, lamports, { commitment }).send({ abortSignal });
168
+ await confirmSignatureOnlyTransaction({
169
+ abortSignal,
170
+ commitment,
171
+ signature: airdropTransactionSignature
172
+ });
173
+ return airdropTransactionSignature;
174
+ }
175
+
20
176
  // src/rpc-integer-overflow-error.ts
21
177
  var SolanaJsonRpcIntegerOverflowError = class extends Error {
22
178
  constructor(methodName, keyPath, value) {
@@ -491,10 +647,12 @@ function createNonceInvalidationPromiseFactory(rpc, rpcSubscriptions) {
491
647
  }
492
648
  callerAbortSignal.addEventListener("abort", handleAbort, { signal: abortController.signal });
493
649
  const accountNotifications = await rpcSubscriptions.accountNotifications(nonceAccountAddress, { commitment, encoding: "base64" }).subscribe({ abortSignal: abortController.signal });
650
+ const base58Decoder = codecsStrings.getBase58Decoder();
651
+ const base64Encoder = codecsStrings.getBase64Encoder();
494
652
  function getNonceFromAccountData([base64EncodedBytes]) {
495
- const data = umiSerializers.base64.serialize(base64EncodedBytes);
653
+ const data = base64Encoder.encode(base64EncodedBytes);
496
654
  const nonceValueBytes = data.slice(NONCE_VALUE_OFFSET, NONCE_VALUE_OFFSET + 32);
497
- return umiSerializers.base58.deserialize(nonceValueBytes)[0];
655
+ return base58Decoder.decode(nonceValueBytes)[0];
498
656
  }
499
657
  const nonceAccountDidAdvancePromise = (async () => {
500
658
  for await (const accountNotification of accountNotifications) {
@@ -537,73 +695,6 @@ function createNonceInvalidationPromiseFactory(rpc, rpcSubscriptions) {
537
695
  };
538
696
  }
539
697
 
540
- // src/transaction-confirmation-strategy-racer.ts
541
- async function raceStrategies(signature, config, getSpecificStrategiesForRace) {
542
- const { abortSignal: callerAbortSignal, commitment, getRecentSignatureConfirmationPromise } = config;
543
- callerAbortSignal.throwIfAborted();
544
- const abortController = new AbortController();
545
- function handleAbort() {
546
- abortController.abort();
547
- }
548
- callerAbortSignal.addEventListener("abort", handleAbort, { signal: abortController.signal });
549
- try {
550
- const specificStrategies = getSpecificStrategiesForRace({
551
- ...config,
552
- abortSignal: abortController.signal
553
- });
554
- return await Promise.race([
555
- getRecentSignatureConfirmationPromise({
556
- abortSignal: abortController.signal,
557
- commitment,
558
- signature
559
- }),
560
- ...specificStrategies
561
- ]);
562
- } finally {
563
- abortController.abort();
564
- }
565
- }
566
- function createRecentSignatureConfirmationPromiseFactory(rpc, rpcSubscriptions) {
567
- return async function getRecentSignatureConfirmationPromise({
568
- abortSignal: callerAbortSignal,
569
- commitment,
570
- signature
571
- }) {
572
- const abortController = new AbortController();
573
- function handleAbort() {
574
- abortController.abort();
575
- }
576
- callerAbortSignal.addEventListener("abort", handleAbort, { signal: abortController.signal });
577
- const signatureStatusNotifications = await rpcSubscriptions.signatureNotifications(signature, { commitment }).subscribe({ abortSignal: abortController.signal });
578
- const signatureDidCommitPromise = (async () => {
579
- for await (const signatureStatusNotification of signatureStatusNotifications) {
580
- if (signatureStatusNotification.value.err) {
581
- throw new Error(`The transaction with signature \`${signature}\` failed.`, {
582
- cause: signatureStatusNotification.value.err
583
- });
584
- } else {
585
- return;
586
- }
587
- }
588
- })();
589
- const signatureStatusLookupPromise = (async () => {
590
- const { value: signatureStatusResults } = await rpc.getSignatureStatuses([signature]).send({ abortSignal: abortController.signal });
591
- const signatureStatus = signatureStatusResults[0];
592
- if (signatureStatus && signatureStatus.confirmationStatus && rpcCore.commitmentComparator(signatureStatus.confirmationStatus, commitment) >= 0) {
593
- return;
594
- } else {
595
- await new Promise(() => {
596
- });
597
- }
598
- })();
599
- try {
600
- return await Promise.race([signatureDidCommitPromise, signatureStatusLookupPromise]);
601
- } finally {
602
- abortController.abort();
603
- }
604
- };
605
- }
606
-
607
698
  // src/transaction-confirmation.ts
608
699
  function createDefaultDurableNonceTransactionConfirmer({
609
700
  rpc,
@@ -670,16 +761,136 @@ async function waitForRecentTransactionConfirmation(config) {
670
761
  );
671
762
  }
672
763
 
764
+ // src/send-transaction.ts
765
+ function getSendTransactionConfigWithAdjustedPreflightCommitment(commitment, config) {
766
+ if (
767
+ // The developer has supplied no value for `preflightCommitment`.
768
+ !config?.preflightCommitment && // The value of `commitment` is lower than the server default of `preflightCommitment`.
769
+ rpcTypes.commitmentComparator(
770
+ commitment,
771
+ "finalized"
772
+ /* default value of `preflightCommitment` */
773
+ ) < 0
774
+ ) {
775
+ return {
776
+ ...config,
777
+ // In the common case, it is unlikely that you want to simulate a transaction at
778
+ // `finalized` commitment when your standard of commitment for confirming the
779
+ // transaction is lower. Cap the simulation commitment level to the level of the
780
+ // confirmation commitment.
781
+ preflightCommitment: commitment
782
+ };
783
+ }
784
+ return config;
785
+ }
786
+ async function sendTransaction_INTERNAL({
787
+ abortSignal,
788
+ commitment,
789
+ rpc,
790
+ transaction,
791
+ ...sendTransactionConfig
792
+ }) {
793
+ const base64EncodedWireTransaction = transactions.getBase64EncodedWireTransaction(transaction);
794
+ return await rpc.sendTransaction(base64EncodedWireTransaction, {
795
+ ...getSendTransactionConfigWithAdjustedPreflightCommitment(commitment, sendTransactionConfig),
796
+ encoding: "base64"
797
+ }).send({ abortSignal });
798
+ }
799
+ function createDefaultDurableNonceTransactionSender({
800
+ rpc,
801
+ rpcSubscriptions
802
+ }) {
803
+ const confirmDurableNonceTransaction = createDefaultDurableNonceTransactionConfirmer({
804
+ rpc,
805
+ rpcSubscriptions
806
+ });
807
+ return async function sendDurableNonceTransaction(transaction, config) {
808
+ await sendAndConfirmDurableNonceTransaction({
809
+ ...config,
810
+ confirmDurableNonceTransaction,
811
+ rpc,
812
+ transaction
813
+ });
814
+ };
815
+ }
816
+ function createDefaultTransactionSender({
817
+ rpc,
818
+ rpcSubscriptions
819
+ }) {
820
+ const confirmRecentTransaction = createDefaultRecentTransactionConfirmer({
821
+ rpc,
822
+ rpcSubscriptions
823
+ });
824
+ return async function sendTransaction(transaction, config) {
825
+ await sendAndConfirmTransaction({
826
+ ...config,
827
+ confirmRecentTransaction,
828
+ rpc,
829
+ transaction
830
+ });
831
+ };
832
+ }
833
+ async function sendAndConfirmDurableNonceTransaction({
834
+ abortSignal,
835
+ commitment,
836
+ confirmDurableNonceTransaction,
837
+ rpc,
838
+ transaction,
839
+ ...sendTransactionConfig
840
+ }) {
841
+ const transactionSignature = await sendTransaction_INTERNAL({
842
+ ...sendTransactionConfig,
843
+ abortSignal,
844
+ commitment,
845
+ rpc,
846
+ transaction
847
+ });
848
+ await confirmDurableNonceTransaction({
849
+ abortSignal,
850
+ commitment,
851
+ transaction
852
+ });
853
+ return transactionSignature;
854
+ }
855
+ async function sendAndConfirmTransaction({
856
+ abortSignal,
857
+ commitment,
858
+ confirmRecentTransaction,
859
+ rpc,
860
+ transaction,
861
+ ...sendTransactionConfig
862
+ }) {
863
+ const transactionSignature = await sendTransaction_INTERNAL({
864
+ ...sendTransactionConfig,
865
+ abortSignal,
866
+ commitment,
867
+ rpc,
868
+ transaction
869
+ });
870
+ await confirmRecentTransaction({
871
+ abortSignal,
872
+ commitment,
873
+ transaction
874
+ });
875
+ return transactionSignature;
876
+ }
877
+
673
878
  exports.createBlockHeightExceedencePromiseFactory = createBlockHeightExceedencePromiseFactory;
879
+ exports.createDefaultAirdropRequester = createDefaultAirdropRequester;
674
880
  exports.createDefaultDurableNonceTransactionConfirmer = createDefaultDurableNonceTransactionConfirmer;
881
+ exports.createDefaultDurableNonceTransactionSender = createDefaultDurableNonceTransactionSender;
675
882
  exports.createDefaultRecentTransactionConfirmer = createDefaultRecentTransactionConfirmer;
676
883
  exports.createDefaultRpcSubscriptionsTransport = createDefaultRpcSubscriptionsTransport;
677
884
  exports.createDefaultRpcTransport = createDefaultRpcTransport;
885
+ exports.createDefaultTransactionSender = createDefaultTransactionSender;
678
886
  exports.createNonceInvalidationPromiseFactory = createNonceInvalidationPromiseFactory;
679
887
  exports.createRecentSignatureConfirmationPromiseFactory = createRecentSignatureConfirmationPromiseFactory;
680
888
  exports.createSolanaRpc = createSolanaRpc;
681
889
  exports.createSolanaRpcSubscriptions = createSolanaRpcSubscriptions;
682
890
  exports.createSolanaRpcSubscriptions_UNSTABLE = createSolanaRpcSubscriptions_UNSTABLE;
891
+ exports.requestAndConfirmAirdrop = requestAndConfirmAirdrop;
892
+ exports.sendAndConfirmDurableNonceTransaction = sendAndConfirmDurableNonceTransaction;
893
+ exports.sendAndConfirmTransaction = sendAndConfirmTransaction;
683
894
  exports.waitForDurableNonceTransactionConfirmation = waitForDurableNonceTransactionConfirmation;
684
895
  exports.waitForRecentTransactionConfirmation = waitForRecentTransactionConfirmation;
685
896
  Object.keys(addresses).forEach(function (k) {
@@ -700,11 +911,15 @@ Object.keys(keys).forEach(function (k) {
700
911
  get: function () { return keys[k]; }
701
912
  });
702
913
  });
914
+ Object.keys(rpcTypes).forEach(function (k) {
915
+ if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
916
+ enumerable: true,
917
+ get: function () { return rpcTypes[k]; }
918
+ });
919
+ });
703
920
  Object.keys(transactions).forEach(function (k) {
704
921
  if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
705
922
  enumerable: true,
706
923
  get: function () { return transactions[k]; }
707
924
  });
708
925
  });
709
- //# sourceMappingURL=out.js.map
710
- //# sourceMappingURL=index.browser.cjs.map