@solana/web3.js 2.0.0-experimental.cc545f9 → 2.0.0-experimental.ce179f2

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.
@@ -4,8 +4,8 @@ var addresses = require('@solana/addresses');
4
4
  var instructions = require('@solana/instructions');
5
5
  var keys = require('@solana/keys');
6
6
  var transactions = require('@solana/transactions');
7
- var functional = require('@solana/functional');
8
7
  var rpcCore = require('@solana/rpc-core');
8
+ var functional = require('@solana/functional');
9
9
  var rpcTransport = require('@solana/rpc-transport');
10
10
  var fastStableStringify = require('fast-stable-stringify');
11
11
  var umiSerializers = require('@metaplex-foundation/umi-serializers');
@@ -17,6 +17,159 @@ var fastStableStringify__default = /*#__PURE__*/_interopDefault(fastStableString
17
17
  // ../build-scripts/env-shim.ts
18
18
  var __DEV__ = /* @__PURE__ */ (() => process["env"].NODE_ENV === "development")();
19
19
 
20
+ // src/transaction-confirmation-strategy-racer.ts
21
+ async function raceStrategies(signature, config, getSpecificStrategiesForRace) {
22
+ const { abortSignal: callerAbortSignal, commitment, getRecentSignatureConfirmationPromise } = config;
23
+ callerAbortSignal.throwIfAborted();
24
+ const abortController = new AbortController();
25
+ function handleAbort() {
26
+ abortController.abort();
27
+ }
28
+ callerAbortSignal.addEventListener("abort", handleAbort, { signal: abortController.signal });
29
+ try {
30
+ const specificStrategies = getSpecificStrategiesForRace({
31
+ ...config,
32
+ abortSignal: abortController.signal
33
+ });
34
+ return await Promise.race([
35
+ getRecentSignatureConfirmationPromise({
36
+ abortSignal: abortController.signal,
37
+ commitment,
38
+ signature
39
+ }),
40
+ ...specificStrategies
41
+ ]);
42
+ } finally {
43
+ abortController.abort();
44
+ }
45
+ }
46
+ function createRecentSignatureConfirmationPromiseFactory(rpc, rpcSubscriptions) {
47
+ return async function getRecentSignatureConfirmationPromise({
48
+ abortSignal: callerAbortSignal,
49
+ commitment,
50
+ signature
51
+ }) {
52
+ const abortController = new AbortController();
53
+ function handleAbort() {
54
+ abortController.abort();
55
+ }
56
+ callerAbortSignal.addEventListener("abort", handleAbort, { signal: abortController.signal });
57
+ const signatureStatusNotifications = await rpcSubscriptions.signatureNotifications(signature, { commitment }).subscribe({ abortSignal: abortController.signal });
58
+ const signatureDidCommitPromise = (async () => {
59
+ for await (const signatureStatusNotification of signatureStatusNotifications) {
60
+ if (signatureStatusNotification.value.err) {
61
+ throw new Error(`The transaction with signature \`${signature}\` failed.`, {
62
+ cause: signatureStatusNotification.value.err
63
+ });
64
+ } else {
65
+ return;
66
+ }
67
+ }
68
+ })();
69
+ const signatureStatusLookupPromise = (async () => {
70
+ const { value: signatureStatusResults } = await rpc.getSignatureStatuses([signature]).send({ abortSignal: abortController.signal });
71
+ const signatureStatus = signatureStatusResults[0];
72
+ if (signatureStatus && signatureStatus.confirmationStatus && rpcCore.commitmentComparator(signatureStatus.confirmationStatus, commitment) >= 0) {
73
+ return;
74
+ } else {
75
+ await new Promise(() => {
76
+ });
77
+ }
78
+ })();
79
+ try {
80
+ return await Promise.race([signatureDidCommitPromise, signatureStatusLookupPromise]);
81
+ } finally {
82
+ abortController.abort();
83
+ }
84
+ };
85
+ }
86
+
87
+ // src/transaction-confirmation-strategy-timeout.ts
88
+ async function getTimeoutPromise({ abortSignal: callerAbortSignal, commitment }) {
89
+ return await new Promise((_, reject) => {
90
+ const handleAbort = (e) => {
91
+ clearTimeout(timeoutId);
92
+ const abortError = new DOMException(e.target.reason, "AbortError");
93
+ reject(abortError);
94
+ };
95
+ callerAbortSignal.addEventListener("abort", handleAbort);
96
+ const timeoutMs = commitment === "processed" ? 3e4 : 6e4;
97
+ const startMs = performance.now();
98
+ const timeoutId = (
99
+ // We use `setTimeout` instead of `AbortSignal.timeout()` because we want to measure
100
+ // elapsed time instead of active time.
101
+ // See https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/timeout_static
102
+ setTimeout(() => {
103
+ const elapsedMs = performance.now() - startMs;
104
+ reject(new DOMException(`Timeout elapsed after ${elapsedMs} ms`, "TimeoutError"));
105
+ }, timeoutMs)
106
+ );
107
+ });
108
+ }
109
+
110
+ // src/airdrop-confirmer.ts
111
+ function createDefaultSignatureOnlyRecentTransactionConfirmer({
112
+ rpc,
113
+ rpcSubscriptions
114
+ }) {
115
+ const getRecentSignatureConfirmationPromise = createRecentSignatureConfirmationPromiseFactory(
116
+ rpc,
117
+ rpcSubscriptions
118
+ );
119
+ return async function confirmSignatureOnlyRecentTransaction(config) {
120
+ await waitForRecentTransactionConfirmationUntilTimeout({
121
+ ...config,
122
+ getRecentSignatureConfirmationPromise,
123
+ getTimeoutPromise
124
+ });
125
+ };
126
+ }
127
+ async function waitForRecentTransactionConfirmationUntilTimeout(config) {
128
+ await raceStrategies(
129
+ config.signature,
130
+ config,
131
+ function getSpecificStrategiesForRace({ abortSignal, commitment, getTimeoutPromise: getTimeoutPromise2 }) {
132
+ return [
133
+ getTimeoutPromise2({
134
+ abortSignal,
135
+ commitment
136
+ })
137
+ ];
138
+ }
139
+ );
140
+ }
141
+
142
+ // src/airdrop.ts
143
+ function createDefaultAirdropRequester({ rpc, rpcSubscriptions }) {
144
+ const confirmSignatureOnlyTransaction = createDefaultSignatureOnlyRecentTransactionConfirmer({
145
+ rpc,
146
+ rpcSubscriptions
147
+ });
148
+ return async function requestAirdrop(config) {
149
+ return await requestAndConfirmAirdrop({
150
+ ...config,
151
+ confirmSignatureOnlyTransaction,
152
+ rpc
153
+ });
154
+ };
155
+ }
156
+ async function requestAndConfirmAirdrop({
157
+ abortSignal,
158
+ commitment,
159
+ confirmSignatureOnlyTransaction,
160
+ lamports,
161
+ recipientAddress,
162
+ rpc
163
+ }) {
164
+ const airdropTransactionSignature = await rpc.requestAirdrop(recipientAddress, lamports, { commitment }).send({ abortSignal });
165
+ await confirmSignatureOnlyTransaction({
166
+ abortSignal,
167
+ commitment,
168
+ signature: airdropTransactionSignature
169
+ });
170
+ return airdropTransactionSignature;
171
+ }
172
+
20
173
  // src/rpc-integer-overflow-error.ts
21
174
  var SolanaJsonRpcIntegerOverflowError = class extends Error {
22
175
  constructor(methodName, keyPath, value) {
@@ -536,97 +689,45 @@ function createNonceInvalidationPromiseFactory(rpc, rpcSubscriptions) {
536
689
  }
537
690
  };
538
691
  }
539
- function createSignatureConfirmationPromiseFactory(rpc, rpcSubscriptions) {
540
- return async function getSignatureConfirmationPromise({ abortSignal: callerAbortSignal, commitment, signature }) {
541
- const abortController = new AbortController();
542
- function handleAbort() {
543
- abortController.abort();
544
- }
545
- callerAbortSignal.addEventListener("abort", handleAbort, { signal: abortController.signal });
546
- const signatureStatusNotifications = await rpcSubscriptions.signatureNotifications(signature, { commitment }).subscribe({ abortSignal: abortController.signal });
547
- const signatureDidCommitPromise = (async () => {
548
- for await (const signatureStatusNotification of signatureStatusNotifications) {
549
- if (signatureStatusNotification.value.err) {
550
- throw new Error(`The transaction with signature \`${signature}\` failed.`, {
551
- cause: signatureStatusNotification.value.err
552
- });
553
- } else {
554
- return;
555
- }
556
- }
557
- })();
558
- const signatureStatusLookupPromise = (async () => {
559
- const { value: signatureStatusResults } = await rpc.getSignatureStatuses([signature]).send({ abortSignal: abortController.signal });
560
- const signatureStatus = signatureStatusResults[0];
561
- if (signatureStatus && signatureStatus.confirmationStatus && rpcCore.commitmentComparator(signatureStatus.confirmationStatus, commitment) >= 0) {
562
- return;
563
- } else {
564
- await new Promise(() => {
565
- });
566
- }
567
- })();
568
- try {
569
- return await Promise.race([signatureDidCommitPromise, signatureStatusLookupPromise]);
570
- } finally {
571
- abortController.abort();
572
- }
573
- };
574
- }
575
692
 
576
693
  // src/transaction-confirmation.ts
577
- async function raceStrategies(config, getSpecificStrategiesForRace) {
578
- const { abortSignal: callerAbortSignal, commitment, getSignatureConfirmationPromise, transaction } = config;
579
- callerAbortSignal.throwIfAborted();
580
- const signature = transactions.getSignatureFromTransaction(transaction);
581
- const abortController = new AbortController();
582
- function handleAbort() {
583
- abortController.abort();
584
- }
585
- callerAbortSignal.addEventListener("abort", handleAbort, { signal: abortController.signal });
586
- try {
587
- const specificStrategies = getSpecificStrategiesForRace({
588
- ...config,
589
- abortSignal: abortController.signal
590
- });
591
- return await Promise.race([
592
- getSignatureConfirmationPromise({
593
- abortSignal: abortController.signal,
594
- commitment,
595
- signature
596
- }),
597
- ...specificStrategies
598
- ]);
599
- } finally {
600
- abortController.abort();
601
- }
602
- }
603
694
  function createDefaultDurableNonceTransactionConfirmer({
604
695
  rpc,
605
696
  rpcSubscriptions
606
697
  }) {
607
698
  const getNonceInvalidationPromise = createNonceInvalidationPromiseFactory(rpc, rpcSubscriptions);
608
- const getSignatureConfirmationPromise = createSignatureConfirmationPromiseFactory(rpc, rpcSubscriptions);
609
- return async function confirmTransaction(config) {
699
+ const getRecentSignatureConfirmationPromise = createRecentSignatureConfirmationPromiseFactory(
700
+ rpc,
701
+ rpcSubscriptions
702
+ );
703
+ return async function confirmDurableNonceTransaction(config) {
610
704
  await waitForDurableNonceTransactionConfirmation({
611
705
  ...config,
612
706
  getNonceInvalidationPromise,
613
- getSignatureConfirmationPromise
707
+ getRecentSignatureConfirmationPromise
614
708
  });
615
709
  };
616
710
  }
617
- function createDefaultTransactionConfirmer({ rpc, rpcSubscriptions }) {
711
+ function createDefaultRecentTransactionConfirmer({
712
+ rpc,
713
+ rpcSubscriptions
714
+ }) {
618
715
  const getBlockHeightExceedencePromise = createBlockHeightExceedencePromiseFactory(rpcSubscriptions);
619
- const getSignatureConfirmationPromise = createSignatureConfirmationPromiseFactory(rpc, rpcSubscriptions);
620
- return async function confirmTransaction(config) {
621
- await waitForTransactionConfirmation({
716
+ const getRecentSignatureConfirmationPromise = createRecentSignatureConfirmationPromiseFactory(
717
+ rpc,
718
+ rpcSubscriptions
719
+ );
720
+ return async function confirmRecentTransaction(config) {
721
+ await waitForRecentTransactionConfirmation({
622
722
  ...config,
623
723
  getBlockHeightExceedencePromise,
624
- getSignatureConfirmationPromise
724
+ getRecentSignatureConfirmationPromise
625
725
  });
626
726
  };
627
727
  }
628
728
  async function waitForDurableNonceTransactionConfirmation(config) {
629
729
  await raceStrategies(
730
+ transactions.getSignatureFromTransaction(config.transaction),
630
731
  config,
631
732
  function getSpecificStrategiesForRace({ abortSignal, commitment, getNonceInvalidationPromise, transaction }) {
632
733
  return [
@@ -640,8 +741,9 @@ async function waitForDurableNonceTransactionConfirmation(config) {
640
741
  }
641
742
  );
642
743
  }
643
- async function waitForTransactionConfirmation(config) {
744
+ async function waitForRecentTransactionConfirmation(config) {
644
745
  await raceStrategies(
746
+ transactions.getSignatureFromTransaction(config.transaction),
645
747
  config,
646
748
  function getSpecificStrategiesForRace({ abortSignal, getBlockHeightExceedencePromise, transaction }) {
647
749
  return [
@@ -654,18 +756,135 @@ async function waitForTransactionConfirmation(config) {
654
756
  );
655
757
  }
656
758
 
759
+ // src/send-transaction.ts
760
+ function getSendTransactionConfigWithAdjustedPreflightCommitment(commitment, config) {
761
+ if (
762
+ // The developer has supplied no value for `preflightCommitment`.
763
+ !config?.preflightCommitment && // The value of `commitment` is lower than the server default of `preflightCommitment`.
764
+ rpcCore.commitmentComparator(
765
+ commitment,
766
+ "finalized"
767
+ /* default value of `preflightCommitment` */
768
+ ) < 0
769
+ ) {
770
+ return {
771
+ ...config,
772
+ // In the common case, it is unlikely that you want to simulate a transaction at
773
+ // `finalized` commitment when your standard of commitment for confirming the
774
+ // transaction is lower. Cap the simulation commitment level to the level of the
775
+ // confirmation commitment.
776
+ preflightCommitment: commitment
777
+ };
778
+ }
779
+ return config;
780
+ }
781
+ async function sendTransaction_INTERNAL({
782
+ abortSignal,
783
+ commitment,
784
+ rpc,
785
+ transaction,
786
+ sendTransactionConfig
787
+ }) {
788
+ const base64EncodedWireTransaction = transactions.getBase64EncodedWireTransaction(transaction);
789
+ return await rpc.sendTransaction(base64EncodedWireTransaction, {
790
+ ...getSendTransactionConfigWithAdjustedPreflightCommitment(commitment, sendTransactionConfig),
791
+ encoding: "base64"
792
+ }).send({ abortSignal });
793
+ }
794
+ function createDefaultDurableNonceTransactionSender({
795
+ rpc,
796
+ rpcSubscriptions
797
+ }) {
798
+ const confirmDurableNonceTransaction = createDefaultDurableNonceTransactionConfirmer({
799
+ rpc,
800
+ rpcSubscriptions
801
+ });
802
+ return async function sendDurableNonceTransaction(transaction, config) {
803
+ await sendAndConfirmDurableNonceTransaction({
804
+ ...config,
805
+ confirmDurableNonceTransaction,
806
+ rpc,
807
+ transaction
808
+ });
809
+ };
810
+ }
811
+ function createDefaultTransactionSender({ rpc, rpcSubscriptions }) {
812
+ const confirmRecentTransaction = createDefaultRecentTransactionConfirmer({
813
+ rpc,
814
+ rpcSubscriptions
815
+ });
816
+ return async function sendTransaction(transaction, config) {
817
+ await sendAndConfirmTransaction({
818
+ ...config,
819
+ confirmRecentTransaction,
820
+ rpc,
821
+ transaction
822
+ });
823
+ };
824
+ }
825
+ async function sendAndConfirmDurableNonceTransaction({
826
+ abortSignal,
827
+ commitment,
828
+ confirmDurableNonceTransaction,
829
+ rpc,
830
+ transaction,
831
+ ...sendTransactionConfig
832
+ }) {
833
+ const transactionSignature = await sendTransaction_INTERNAL({
834
+ abortSignal,
835
+ commitment,
836
+ rpc,
837
+ sendTransactionConfig,
838
+ transaction
839
+ });
840
+ await confirmDurableNonceTransaction({
841
+ abortSignal,
842
+ commitment,
843
+ transaction
844
+ });
845
+ return transactionSignature;
846
+ }
847
+ async function sendAndConfirmTransaction({
848
+ abortSignal,
849
+ commitment,
850
+ confirmRecentTransaction,
851
+ rpc,
852
+ transaction,
853
+ ...sendTransactionConfig
854
+ }) {
855
+ const transactionSignature = await sendTransaction_INTERNAL({
856
+ abortSignal,
857
+ commitment,
858
+ rpc,
859
+ sendTransactionConfig,
860
+ transaction
861
+ });
862
+ await confirmRecentTransaction({
863
+ abortSignal,
864
+ commitment,
865
+ transaction
866
+ });
867
+ return transactionSignature;
868
+ }
869
+
657
870
  exports.createBlockHeightExceedencePromiseFactory = createBlockHeightExceedencePromiseFactory;
871
+ exports.createDefaultAirdropRequester = createDefaultAirdropRequester;
658
872
  exports.createDefaultDurableNonceTransactionConfirmer = createDefaultDurableNonceTransactionConfirmer;
873
+ exports.createDefaultDurableNonceTransactionSender = createDefaultDurableNonceTransactionSender;
874
+ exports.createDefaultRecentTransactionConfirmer = createDefaultRecentTransactionConfirmer;
659
875
  exports.createDefaultRpcSubscriptionsTransport = createDefaultRpcSubscriptionsTransport;
660
876
  exports.createDefaultRpcTransport = createDefaultRpcTransport;
661
- exports.createDefaultTransactionConfirmer = createDefaultTransactionConfirmer;
877
+ exports.createDefaultTransactionSender = createDefaultTransactionSender;
662
878
  exports.createNonceInvalidationPromiseFactory = createNonceInvalidationPromiseFactory;
663
- exports.createSignatureConfirmationPromiseFactory = createSignatureConfirmationPromiseFactory;
879
+ exports.createRecentSignatureConfirmationPromiseFactory = createRecentSignatureConfirmationPromiseFactory;
664
880
  exports.createSolanaRpc = createSolanaRpc;
665
881
  exports.createSolanaRpcSubscriptions = createSolanaRpcSubscriptions;
666
882
  exports.createSolanaRpcSubscriptions_UNSTABLE = createSolanaRpcSubscriptions_UNSTABLE;
883
+ exports.requestAndConfirmAirdrop = requestAndConfirmAirdrop;
884
+ exports.sendAndConfirmDurableNonceTransaction = sendAndConfirmDurableNonceTransaction;
885
+ exports.sendAndConfirmTransaction = sendAndConfirmTransaction;
667
886
  exports.waitForDurableNonceTransactionConfirmation = waitForDurableNonceTransactionConfirmation;
668
- exports.waitForTransactionConfirmation = waitForTransactionConfirmation;
887
+ exports.waitForRecentTransactionConfirmation = waitForRecentTransactionConfirmation;
669
888
  Object.keys(addresses).forEach(function (k) {
670
889
  if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
671
890
  enumerable: true,
@@ -690,5 +909,3 @@ Object.keys(transactions).forEach(function (k) {
690
909
  get: function () { return transactions[k]; }
691
910
  });
692
911
  });
693
- //# sourceMappingURL=out.js.map
694
- //# sourceMappingURL=index.browser.cjs.map