@solana/web3.js 2.0.0-experimental.ba21818 → 2.0.0-experimental.ba9b4c7

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) {
@@ -525,97 +678,45 @@ function createNonceInvalidationPromiseFactory(rpc, rpcSubscriptions) {
525
678
  }
526
679
  };
527
680
  }
528
- function createSignatureConfirmationPromiseFactory(rpc, rpcSubscriptions) {
529
- return async function getSignatureConfirmationPromise({ abortSignal: callerAbortSignal, commitment, signature }) {
530
- const abortController = new AbortController();
531
- function handleAbort() {
532
- abortController.abort();
533
- }
534
- callerAbortSignal.addEventListener("abort", handleAbort, { signal: abortController.signal });
535
- const signatureStatusNotifications = await rpcSubscriptions.signatureNotifications(signature, { commitment }).subscribe({ abortSignal: abortController.signal });
536
- const signatureDidCommitPromise = (async () => {
537
- for await (const signatureStatusNotification of signatureStatusNotifications) {
538
- if (signatureStatusNotification.value.err) {
539
- throw new Error(`The transaction with signature \`${signature}\` failed.`, {
540
- cause: signatureStatusNotification.value.err
541
- });
542
- } else {
543
- return;
544
- }
545
- }
546
- })();
547
- const signatureStatusLookupPromise = (async () => {
548
- const { value: signatureStatusResults } = await rpc.getSignatureStatuses([signature]).send({ abortSignal: abortController.signal });
549
- const signatureStatus = signatureStatusResults[0];
550
- if (signatureStatus && signatureStatus.confirmationStatus && rpcCore.commitmentComparator(signatureStatus.confirmationStatus, commitment) >= 0) {
551
- return;
552
- } else {
553
- await new Promise(() => {
554
- });
555
- }
556
- })();
557
- try {
558
- return await Promise.race([signatureDidCommitPromise, signatureStatusLookupPromise]);
559
- } finally {
560
- abortController.abort();
561
- }
562
- };
563
- }
564
681
 
565
682
  // src/transaction-confirmation.ts
566
- async function raceStrategies(config, getSpecificStrategiesForRace) {
567
- const { abortSignal: callerAbortSignal, commitment, getSignatureConfirmationPromise, transaction } = config;
568
- callerAbortSignal.throwIfAborted();
569
- const signature = transactions.getSignatureFromTransaction(transaction);
570
- const abortController = new AbortController();
571
- function handleAbort() {
572
- abortController.abort();
573
- }
574
- callerAbortSignal.addEventListener("abort", handleAbort, { signal: abortController.signal });
575
- try {
576
- const specificStrategies = getSpecificStrategiesForRace({
577
- ...config,
578
- abortSignal: abortController.signal
579
- });
580
- return await Promise.race([
581
- getSignatureConfirmationPromise({
582
- abortSignal: abortController.signal,
583
- commitment,
584
- signature
585
- }),
586
- ...specificStrategies
587
- ]);
588
- } finally {
589
- abortController.abort();
590
- }
591
- }
592
683
  function createDefaultDurableNonceTransactionConfirmer({
593
684
  rpc,
594
685
  rpcSubscriptions
595
686
  }) {
596
687
  const getNonceInvalidationPromise = createNonceInvalidationPromiseFactory(rpc, rpcSubscriptions);
597
- const getSignatureConfirmationPromise = createSignatureConfirmationPromiseFactory(rpc, rpcSubscriptions);
598
- return async function confirmTransaction(config) {
688
+ const getRecentSignatureConfirmationPromise = createRecentSignatureConfirmationPromiseFactory(
689
+ rpc,
690
+ rpcSubscriptions
691
+ );
692
+ return async function confirmDurableNonceTransaction(config) {
599
693
  await waitForDurableNonceTransactionConfirmation({
600
694
  ...config,
601
695
  getNonceInvalidationPromise,
602
- getSignatureConfirmationPromise
696
+ getRecentSignatureConfirmationPromise
603
697
  });
604
698
  };
605
699
  }
606
- function createDefaultTransactionConfirmer({ rpc, rpcSubscriptions }) {
700
+ function createDefaultRecentTransactionConfirmer({
701
+ rpc,
702
+ rpcSubscriptions
703
+ }) {
607
704
  const getBlockHeightExceedencePromise = createBlockHeightExceedencePromiseFactory(rpcSubscriptions);
608
- const getSignatureConfirmationPromise = createSignatureConfirmationPromiseFactory(rpc, rpcSubscriptions);
609
- return async function confirmTransaction(config) {
610
- await waitForTransactionConfirmation({
705
+ const getRecentSignatureConfirmationPromise = createRecentSignatureConfirmationPromiseFactory(
706
+ rpc,
707
+ rpcSubscriptions
708
+ );
709
+ return async function confirmRecentTransaction(config) {
710
+ await waitForRecentTransactionConfirmation({
611
711
  ...config,
612
712
  getBlockHeightExceedencePromise,
613
- getSignatureConfirmationPromise
713
+ getRecentSignatureConfirmationPromise
614
714
  });
615
715
  };
616
716
  }
617
717
  async function waitForDurableNonceTransactionConfirmation(config) {
618
718
  await raceStrategies(
719
+ transactions.getSignatureFromTransaction(config.transaction),
619
720
  config,
620
721
  function getSpecificStrategiesForRace({ abortSignal, commitment, getNonceInvalidationPromise, transaction }) {
621
722
  return [
@@ -629,8 +730,9 @@ async function waitForDurableNonceTransactionConfirmation(config) {
629
730
  }
630
731
  );
631
732
  }
632
- async function waitForTransactionConfirmation(config) {
733
+ async function waitForRecentTransactionConfirmation(config) {
633
734
  await raceStrategies(
735
+ transactions.getSignatureFromTransaction(config.transaction),
634
736
  config,
635
737
  function getSpecificStrategiesForRace({ abortSignal, getBlockHeightExceedencePromise, transaction }) {
636
738
  return [
@@ -643,18 +745,135 @@ async function waitForTransactionConfirmation(config) {
643
745
  );
644
746
  }
645
747
 
748
+ // src/send-transaction.ts
749
+ function getSendTransactionConfigWithAdjustedPreflightCommitment(commitment, config) {
750
+ if (
751
+ // The developer has supplied no value for `preflightCommitment`.
752
+ !config?.preflightCommitment && // The value of `commitment` is lower than the server default of `preflightCommitment`.
753
+ rpcCore.commitmentComparator(
754
+ commitment,
755
+ "finalized"
756
+ /* default value of `preflightCommitment` */
757
+ ) < 0
758
+ ) {
759
+ return {
760
+ ...config,
761
+ // In the common case, it is unlikely that you want to simulate a transaction at
762
+ // `finalized` commitment when your standard of commitment for confirming the
763
+ // transaction is lower. Cap the simulation commitment level to the level of the
764
+ // confirmation commitment.
765
+ preflightCommitment: commitment
766
+ };
767
+ }
768
+ return config;
769
+ }
770
+ async function sendTransaction_INTERNAL({
771
+ abortSignal,
772
+ commitment,
773
+ rpc,
774
+ transaction,
775
+ sendTransactionConfig
776
+ }) {
777
+ const base64EncodedWireTransaction = transactions.getBase64EncodedWireTransaction(transaction);
778
+ return await rpc.sendTransaction(base64EncodedWireTransaction, {
779
+ ...getSendTransactionConfigWithAdjustedPreflightCommitment(commitment, sendTransactionConfig),
780
+ encoding: "base64"
781
+ }).send({ abortSignal });
782
+ }
783
+ function createDefaultDurableNonceTransactionSender({
784
+ rpc,
785
+ rpcSubscriptions
786
+ }) {
787
+ const confirmDurableNonceTransaction = createDefaultDurableNonceTransactionConfirmer({
788
+ rpc,
789
+ rpcSubscriptions
790
+ });
791
+ return async function sendDurableNonceTransaction(transaction, config) {
792
+ await sendAndConfirmDurableNonceTransaction({
793
+ ...config,
794
+ confirmDurableNonceTransaction,
795
+ rpc,
796
+ transaction
797
+ });
798
+ };
799
+ }
800
+ function createDefaultTransactionSender({ rpc, rpcSubscriptions }) {
801
+ const confirmRecentTransaction = createDefaultRecentTransactionConfirmer({
802
+ rpc,
803
+ rpcSubscriptions
804
+ });
805
+ return async function sendTransaction(transaction, config) {
806
+ await sendAndConfirmTransaction({
807
+ ...config,
808
+ confirmRecentTransaction,
809
+ rpc,
810
+ transaction
811
+ });
812
+ };
813
+ }
814
+ async function sendAndConfirmDurableNonceTransaction({
815
+ abortSignal,
816
+ commitment,
817
+ confirmDurableNonceTransaction,
818
+ rpc,
819
+ transaction,
820
+ ...sendTransactionConfig
821
+ }) {
822
+ const transactionSignature = await sendTransaction_INTERNAL({
823
+ abortSignal,
824
+ commitment,
825
+ rpc,
826
+ sendTransactionConfig,
827
+ transaction
828
+ });
829
+ await confirmDurableNonceTransaction({
830
+ abortSignal,
831
+ commitment,
832
+ transaction
833
+ });
834
+ return transactionSignature;
835
+ }
836
+ async function sendAndConfirmTransaction({
837
+ abortSignal,
838
+ commitment,
839
+ confirmRecentTransaction,
840
+ rpc,
841
+ transaction,
842
+ ...sendTransactionConfig
843
+ }) {
844
+ const transactionSignature = await sendTransaction_INTERNAL({
845
+ abortSignal,
846
+ commitment,
847
+ rpc,
848
+ sendTransactionConfig,
849
+ transaction
850
+ });
851
+ await confirmRecentTransaction({
852
+ abortSignal,
853
+ commitment,
854
+ transaction
855
+ });
856
+ return transactionSignature;
857
+ }
858
+
646
859
  exports.createBlockHeightExceedencePromiseFactory = createBlockHeightExceedencePromiseFactory;
860
+ exports.createDefaultAirdropRequester = createDefaultAirdropRequester;
647
861
  exports.createDefaultDurableNonceTransactionConfirmer = createDefaultDurableNonceTransactionConfirmer;
862
+ exports.createDefaultDurableNonceTransactionSender = createDefaultDurableNonceTransactionSender;
863
+ exports.createDefaultRecentTransactionConfirmer = createDefaultRecentTransactionConfirmer;
648
864
  exports.createDefaultRpcSubscriptionsTransport = createDefaultRpcSubscriptionsTransport;
649
865
  exports.createDefaultRpcTransport = createDefaultRpcTransport;
650
- exports.createDefaultTransactionConfirmer = createDefaultTransactionConfirmer;
866
+ exports.createDefaultTransactionSender = createDefaultTransactionSender;
651
867
  exports.createNonceInvalidationPromiseFactory = createNonceInvalidationPromiseFactory;
652
- exports.createSignatureConfirmationPromiseFactory = createSignatureConfirmationPromiseFactory;
868
+ exports.createRecentSignatureConfirmationPromiseFactory = createRecentSignatureConfirmationPromiseFactory;
653
869
  exports.createSolanaRpc = createSolanaRpc;
654
870
  exports.createSolanaRpcSubscriptions = createSolanaRpcSubscriptions;
655
871
  exports.createSolanaRpcSubscriptions_UNSTABLE = createSolanaRpcSubscriptions_UNSTABLE;
872
+ exports.requestAndConfirmAirdrop = requestAndConfirmAirdrop;
873
+ exports.sendAndConfirmDurableNonceTransaction = sendAndConfirmDurableNonceTransaction;
874
+ exports.sendAndConfirmTransaction = sendAndConfirmTransaction;
656
875
  exports.waitForDurableNonceTransactionConfirmation = waitForDurableNonceTransactionConfirmation;
657
- exports.waitForTransactionConfirmation = waitForTransactionConfirmation;
876
+ exports.waitForRecentTransactionConfirmation = waitForRecentTransactionConfirmation;
658
877
  Object.keys(addresses).forEach(function (k) {
659
878
  if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
660
879
  enumerable: true,
@@ -679,3 +898,5 @@ Object.keys(transactions).forEach(function (k) {
679
898
  get: function () { return transactions[k]; }
680
899
  });
681
900
  });
901
+ //# sourceMappingURL=out.js.map
902
+ //# sourceMappingURL=index.node.cjs.map