@dynamic-labs-sdk/solana 0.14.0 → 0.16.1
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/{addSolanaWalletStandardExtension-Bv39eDZc.cjs.js → addSolanaWalletStandardExtension-0JyyakfO.cjs.js} +6 -4
- package/dist/addSolanaWalletStandardExtension-0JyyakfO.cjs.js.map +1 -0
- package/dist/{addSolanaWalletStandardExtension-B7GpGFx3.esm.js → addSolanaWalletStandardExtension-CPT-KI29.esm.js} +4 -2
- package/dist/addSolanaWalletStandardExtension-CPT-KI29.esm.js.map +1 -0
- package/dist/{addWaasSolanaExtension-ofYQDYyc.esm.js → addWaasSolanaExtension-CLhieXpF.esm.js} +8 -29
- package/dist/addWaasSolanaExtension-CLhieXpF.esm.js.map +1 -0
- package/dist/{addWaasSolanaExtension-BaxzWnYL.cjs.js → addWaasSolanaExtension-s5RmA285.cjs.js} +12 -39
- package/dist/addWaasSolanaExtension-s5RmA285.cjs.js.map +1 -0
- package/dist/checkoutTransaction.types.d.ts +6 -0
- package/dist/checkoutTransaction.types.d.ts.map +1 -0
- package/dist/exports/index.d.ts +2 -1
- package/dist/exports/index.d.ts.map +1 -1
- package/dist/index.cjs.js +75 -92
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +61 -79
- package/dist/index.esm.js.map +1 -1
- package/dist/isSolanaGasSponsorshipEnabled/index.d.ts +2 -0
- package/dist/isSolanaGasSponsorshipEnabled/index.d.ts.map +1 -0
- package/dist/isSolanaGasSponsorshipEnabled/isSolanaGasSponsorshipEnabled.d.ts +8 -0
- package/dist/isSolanaGasSponsorshipEnabled/isSolanaGasSponsorshipEnabled.d.ts.map +1 -0
- package/dist/phantomRedirect/addPhantomRedirectSolanaExtension/addPhantomRedirectSolanaExtension.d.ts.map +1 -1
- package/dist/phantomRedirect/completePhantomRedirect/completePhantomRedirect.d.ts.map +1 -1
- package/dist/phantomRedirect/createPhantomRedirectWalletProvider/createPhantomRedirectWalletProvider.d.ts.map +1 -1
- package/dist/phantomRedirect/detectPhantomRedirect/detectPhantomRedirect.d.ts +10 -0
- package/dist/phantomRedirect/detectPhantomRedirect/detectPhantomRedirect.d.ts.map +1 -1
- package/dist/phantomRedirect/utils/getPhantomCluster/getPhantomCluster.d.ts.map +1 -1
- package/dist/solanaTransferAmount-Bd39IUO-.esm.js +221 -0
- package/dist/solanaTransferAmount-Bd39IUO-.esm.js.map +1 -0
- package/dist/solanaTransferAmount-DQusACZn.cjs.js +287 -0
- package/dist/solanaTransferAmount-DQusACZn.cjs.js.map +1 -0
- package/dist/tsconfig.lib.tsbuildinfo +1 -1
- package/dist/utils/solanaExecuteCheckoutTransaction/index.d.ts +2 -0
- package/dist/utils/solanaExecuteCheckoutTransaction/index.d.ts.map +1 -0
- package/dist/utils/solanaExecuteCheckoutTransaction/solanaExecuteCheckoutTransaction.d.ts +19 -0
- package/dist/utils/solanaExecuteCheckoutTransaction/solanaExecuteCheckoutTransaction.d.ts.map +1 -0
- package/dist/utils/solanaTransferAmount/index.d.ts +2 -0
- package/dist/utils/solanaTransferAmount/index.d.ts.map +1 -0
- package/dist/utils/solanaTransferAmount/solanaTransferAmount.d.ts +14 -0
- package/dist/utils/solanaTransferAmount/solanaTransferAmount.d.ts.map +1 -0
- package/dist/waas/utils/createWalletProviderForWaasSolana/createWalletProviderForWaasSolana.d.ts.map +1 -1
- package/dist/waas.cjs.js +4 -4
- package/dist/waas.cjs.js.map +1 -1
- package/dist/waas.esm.js +2 -2
- package/dist/walletConnect/createWalletProviderFromWalletConnectSolanaSession/createWalletProviderFromWalletConnectSolanaSession.d.ts.map +1 -1
- package/dist/walletStandard/utils/createWalletProviderFromSolanaStandardWallet/createWalletProviderFromSolanaStandardWallet.d.ts.map +1 -1
- package/dist/walletStandard.cjs.js +3 -3
- package/dist/walletStandard.cjs.js.map +1 -1
- package/dist/walletStandard.esm.js +2 -2
- package/package.json +6 -5
- package/dist/addSolanaWalletStandardExtension-B7GpGFx3.esm.js.map +0 -1
- package/dist/addSolanaWalletStandardExtension-Bv39eDZc.cjs.js.map +0 -1
- package/dist/addWaasSolanaExtension-BaxzWnYL.cjs.js.map +0 -1
- package/dist/addWaasSolanaExtension-ofYQDYyc.esm.js.map +0 -1
- package/dist/isVersionedTransaction-CecentWi.esm.js +0 -48
- package/dist/isVersionedTransaction-CecentWi.esm.js.map +0 -1
- package/dist/isVersionedTransaction-DW-V1tUS.cjs.js +0 -72
- package/dist/isVersionedTransaction-DW-V1tUS.cjs.js.map +0 -1
package/dist/index.esm.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { n as SponsorTransactionError,
|
|
3
|
-
import { t as addSolanaWalletStandardExtension } from "./addSolanaWalletStandardExtension-
|
|
1
|
+
import { a as isSolanaWalletProvider, c as getSolanaConnection, d as version, i as solanaExecuteCheckoutTransaction, l as registerSolanaNetworkProviderBuilder, n as isSolanaGasSponsorshipEnabled, o as isSolanaWalletAccount, r as NotSolanaProviderError, s as isVersionedTransaction, t as solanaTransferAmount, u as name } from "./solanaTransferAmount-Bd39IUO-.esm.js";
|
|
2
|
+
import { n as SponsorTransactionError, t as addWaasSolanaExtension } from "./addWaasSolanaExtension-CLhieXpF.esm.js";
|
|
3
|
+
import { t as addSolanaWalletStandardExtension } from "./addSolanaWalletStandardExtension-CPT-KI29.esm.js";
|
|
4
4
|
import { assertPackageVersion } from "@dynamic-labs-sdk/assert-package-version";
|
|
5
|
-
import { MethodNotImplementedError, WalletProviderPriority, assertDefined, createApiClient, createDeferredPromise, createRuntimeServiceAccessKey, createStorageKeySchema, emitEvent, formatWalletProviderGroupKey, formatWalletProviderKey, getActiveNetworkIdFromLastKnownRegistry, getBuffer, getCore, getDefaultClient, getNetworkProviders, getWalletProviderFromWalletAccount, getWalletProviderRegistry, hasExtension, registerExtension } from "@dynamic-labs-sdk/client/core";
|
|
5
|
+
import { MethodNotImplementedError, WalletProviderPriority, assertDefined, createApiClient, createDeferredPromise, createRuntimeServiceAccessKey, createStorageKeySchema, emitEvent, formatWalletProviderGroupKey, formatWalletProviderKey, getActiveNetworkIdFromLastKnownRegistry, getBuffer, getCore, getDefaultClient, getNetworkProviders, getWalletProviderFromWalletAccount, getWalletProviderRegistry, hasExtension, randomString, registerExtension } from "@dynamic-labs-sdk/client/core";
|
|
6
6
|
import { Connection, LAMPORTS_PER_SOL, PublicKey, Transaction, VersionedTransaction } from "@solana/web3.js";
|
|
7
|
-
import { BaseError, FeeEstimationFailedError, InvalidParamError, SimulationFailedError, getActiveNetworkData, getDefaultClient as getDefaultClient$1, onceEvent } from "@dynamic-labs-sdk/client";
|
|
7
|
+
import { BaseError, FeeEstimationFailedError, InvalidParamError, SimulationFailedError, getActiveNetworkData, getDefaultClient as getDefaultClient$1, onEvent, onceEvent } from "@dynamic-labs-sdk/client";
|
|
8
8
|
import { WalletProviderEnum } from "@dynamic-labs/sdk-api-core";
|
|
9
9
|
import bs58 from "bs58";
|
|
10
10
|
import * as z from "zod/mini";
|
|
@@ -25,22 +25,6 @@ const addSolanaExtension = (client = getDefaultClient()) => {
|
|
|
25
25
|
addWaasSolanaExtension(client);
|
|
26
26
|
};
|
|
27
27
|
|
|
28
|
-
//#endregion
|
|
29
|
-
//#region src/errors/NotSolanaProviderError/NotSolanaProviderError.ts
|
|
30
|
-
var NotSolanaProviderError = class extends BaseError {
|
|
31
|
-
providerKey;
|
|
32
|
-
constructor(params) {
|
|
33
|
-
super({
|
|
34
|
-
cause: null,
|
|
35
|
-
code: "not_solana_provider_error",
|
|
36
|
-
docsUrl: null,
|
|
37
|
-
name: "NotSolanaProviderError",
|
|
38
|
-
shortMessage: "Provider is not a Solana wallet provider"
|
|
39
|
-
});
|
|
40
|
-
this.providerKey = params.providerKey;
|
|
41
|
-
}
|
|
42
|
-
};
|
|
43
|
-
|
|
44
28
|
//#endregion
|
|
45
29
|
//#region src/isSolanaNetworkProvider/isSolanaNetworkProvider.ts
|
|
46
30
|
/**
|
|
@@ -51,16 +35,6 @@ var NotSolanaProviderError = class extends BaseError {
|
|
|
51
35
|
*/
|
|
52
36
|
const isSolanaNetworkProvider = (networkProvider) => networkProvider.chain === "SOL";
|
|
53
37
|
|
|
54
|
-
//#endregion
|
|
55
|
-
//#region src/isSolanaWalletAccount/isSolanaWalletAccount.ts
|
|
56
|
-
/**
|
|
57
|
-
* Type guard function to check if a wallet account is a Solana wallet account.
|
|
58
|
-
*
|
|
59
|
-
* @param walletAccount - The wallet account to check.
|
|
60
|
-
* @returns True if the wallet account is a Solana wallet account, false otherwise.
|
|
61
|
-
*/
|
|
62
|
-
const isSolanaWalletAccount = (walletAccount) => walletAccount.chain === "SOL";
|
|
63
|
-
|
|
64
38
|
//#endregion
|
|
65
39
|
//#region src/utils/calculateSolanaTransactionFee/calculateSolanaTransactionFee.ts
|
|
66
40
|
const MAX_RETRIES = 5;
|
|
@@ -485,12 +459,7 @@ const isCloneTab = (client) => !getPhantomOriginTab(client).isOriginTab;
|
|
|
485
459
|
const completeAndEmitPhantomRedirectEvent = async ({ args, event }, client) => {
|
|
486
460
|
const core = getCore(client);
|
|
487
461
|
const cloneTab = isCloneTab(client);
|
|
488
|
-
core.logger.debug("[PHANTOM] completeAndEmitPhantomRedirectEvent: start", {
|
|
489
|
-
event,
|
|
490
|
-
isCloneTab: cloneTab
|
|
491
|
-
});
|
|
492
462
|
await core.storage.removeItem(pendingRequestStorageKeySchema);
|
|
493
|
-
core.logger.debug("[PHANTOM] completeAndEmitPhantomRedirectEvent: emitting event locally", { event });
|
|
494
463
|
emitEvent({
|
|
495
464
|
args,
|
|
496
465
|
event
|
|
@@ -536,13 +505,8 @@ const completeAndEmitPhantomRedirectEvent = async ({ args, event }, client) => {
|
|
|
536
505
|
*/
|
|
537
506
|
const completePhantomRedirect = async ({ url }, client = getDefaultClient()) => {
|
|
538
507
|
const core = getCore(client);
|
|
539
|
-
core.logger.debug("[PHANTOM] completePhantomRedirect: start", { search: url.search });
|
|
540
508
|
const params = parsePhantomRedirectParams({ url });
|
|
541
509
|
const pendingRequest = await core.storage.getItem(pendingRequestStorageKeySchema);
|
|
542
|
-
core.logger.debug("[PHANTOM] completePhantomRedirect: pendingRequest", {
|
|
543
|
-
found: !!pendingRequest,
|
|
544
|
-
method: pendingRequest?.method
|
|
545
|
-
});
|
|
546
510
|
if (!pendingRequest) throw new NoPendingPhantomRequestError();
|
|
547
511
|
if (params.errorCode) {
|
|
548
512
|
const error = new PhantomRedirectRejectedError({
|
|
@@ -687,6 +651,14 @@ const generateNaClKeyPair = () => {
|
|
|
687
651
|
//#endregion
|
|
688
652
|
//#region src/phantomRedirect/utils/getPhantomCluster/getPhantomCluster.ts
|
|
689
653
|
/**
|
|
654
|
+
* Normalizes a cluster string to the value expected by Phantom's deep link protocol.
|
|
655
|
+
* Our API returns "mainnet" but Phantom expects "mainnet-beta".
|
|
656
|
+
*/
|
|
657
|
+
const normalizeCluster = (cluster) => {
|
|
658
|
+
if (cluster === "mainnet") return "mainnet-beta";
|
|
659
|
+
return cluster;
|
|
660
|
+
};
|
|
661
|
+
/**
|
|
690
662
|
* Returns the Solana cluster name expected by Phantom's deep link protocol
|
|
691
663
|
* (e.g. "mainnet-beta", "devnet", "testnet").
|
|
692
664
|
*
|
|
@@ -701,9 +673,9 @@ const generateNaClKeyPair = () => {
|
|
|
701
673
|
const getPhantomCluster = async ({ dynamicClient, walletAccount }) => {
|
|
702
674
|
if (walletAccount) {
|
|
703
675
|
const { networkData } = await getActiveNetworkData({ walletAccount }, dynamicClient);
|
|
704
|
-
return networkData?.cluster
|
|
676
|
+
return normalizeCluster(networkData?.cluster);
|
|
705
677
|
}
|
|
706
|
-
return getNetworkProviders(dynamicClient).find((p) => p.chain === "SOL")?.cluster
|
|
678
|
+
return normalizeCluster(getNetworkProviders(dynamicClient).find((p) => p.chain === "SOL")?.cluster);
|
|
707
679
|
};
|
|
708
680
|
|
|
709
681
|
//#endregion
|
|
@@ -741,14 +713,6 @@ const listenForPhantomBroadcast = (listeners, client) => {
|
|
|
741
713
|
//#endregion
|
|
742
714
|
//#region src/phantomRedirect/createPhantomRedirectWalletProvider/createPhantomRedirectWalletProvider.ts
|
|
743
715
|
/**
|
|
744
|
-
* Generates a random alphanumeric string of specified length.
|
|
745
|
-
*/
|
|
746
|
-
const randomString = (length) => {
|
|
747
|
-
const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
|
|
748
|
-
const bytes = crypto.getRandomValues(new Uint8Array(length));
|
|
749
|
-
return Array.from(bytes, (byte) => chars[byte % 62]).join("");
|
|
750
|
-
};
|
|
751
|
-
/**
|
|
752
716
|
* Extracts the dApp URL from a redirect URL.
|
|
753
717
|
*/
|
|
754
718
|
const extractDappUrl = (redirectUrl) => {
|
|
@@ -775,7 +739,7 @@ const createPhantomRedirectWalletProvider = ({ baseRedirectUrl, dynamicClient })
|
|
|
775
739
|
const groupKey = formatWalletProviderGroupKey("Phantom");
|
|
776
740
|
const metadata = {
|
|
777
741
|
displayName: "Phantom",
|
|
778
|
-
icon: "
|
|
742
|
+
icon: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMDgiIGhlaWdodD0iMTA4IiB2aWV3Qm94PSIwIDAgMTA4IDEwOCIgZmlsbD0ibm9uZSI+CjxyZWN0IHdpZHRoPSIxMDgiIGhlaWdodD0iMTA4IiByeD0iMjYiIGZpbGw9IiNBQjlGRjIiLz4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00Ni41MjY3IDY5LjkyMjlDNDIuMDA1NCA3Ni44NTA5IDM0LjQyOTIgODUuNjE4MiAyNC4zNDggODUuNjE4MkMxOS41ODI0IDg1LjYxODIgMTUgODMuNjU2MyAxNSA3NS4xMzQyQzE1IDUzLjQzMDUgNDQuNjMyNiAxOS44MzI3IDcyLjEyNjggMTkuODMyN0M4Ny43NjggMTkuODMyNyA5NCAzMC42ODQ2IDk0IDQzLjAwNzlDOTQgNTguODI1OCA4My43MzU1IDc2LjkxMjIgNzMuNTMyMSA3Ni45MTIyQzcwLjI5MzkgNzYuOTEyMiA2OC43MDUzIDc1LjEzNDIgNjguNzA1MyA3Mi4zMTRDNjguNzA1MyA3MS41NzgzIDY4LjgyNzUgNzAuNzgxMiA2OS4wNzE5IDY5LjkyMjlDNjUuNTg5MyA3NS44Njk5IDU4Ljg2ODUgODEuMzg3OCA1Mi41NzU0IDgxLjM4NzhDNDcuOTkzIDgxLjM4NzggNDUuNjcxMyA3OC41MDYzIDQ1LjY3MTMgNzQuNDU5OEM0NS42NzEzIDcyLjk4ODQgNDUuOTc2OCA3MS40NTU2IDQ2LjUyNjcgNjkuOTIyOVpNODMuNjc2MSA0Mi41Nzk0QzgzLjY3NjEgNDYuMTcwNCA4MS41NTc1IDQ3Ljk2NTggNzkuMTg3NSA0Ny45NjU4Qzc2Ljc4MTYgNDcuOTY1OCA3NC42OTg5IDQ2LjE3MDQgNzQuNjk4OSA0Mi41Nzk0Qzc0LjY5ODkgMzguOTg4NSA3Ni43ODE2IDM3LjE5MzEgNzkuMTg3NSAzNy4xOTMxQzgxLjU1NzUgMzcuMTkzMSA4My42NzYxIDM4Ljk4ODUgODMuNjc2MSA0Mi41Nzk0Wk03MC4yMTAzIDQyLjU3OTVDNzAuMjEwMyA0Ni4xNzA0IDY4LjA5MTYgNDcuOTY1OCA2NS43MjE2IDQ3Ljk2NThDNjMuMzE1NyA0Ny45NjU4IDYxLjIzMyA0Ni4xNzA0IDYxLjIzMyA0Mi41Nzk1QzYxLjIzMyAzOC45ODg1IDYzLjMxNTcgMzcuMTkzMSA2NS43MjE2IDM3LjE5MzFDNjguMDkxNiAzNy4xOTMxIDcwLjIxMDMgMzguOTg4NSA3MC4yMTAzIDQyLjU3OTVaIiBmaWxsPSIjRkZGREY4Ii8+Cjwvc3ZnPg=="
|
|
779
743
|
};
|
|
780
744
|
const getSession = async () => {
|
|
781
745
|
const session = await core.storage.getItem(phantomSessionStorageKeySchema);
|
|
@@ -795,10 +759,6 @@ const createPhantomRedirectWalletProvider = ({ baseRedirectUrl, dynamicClient })
|
|
|
795
759
|
*/
|
|
796
760
|
const setupPhantomListeners = ({ completeEvent, deferredPromise, errorEvent, onComplete, onError }) => {
|
|
797
761
|
getPhantomOriginTab(dynamicClient).isOriginTab = true;
|
|
798
|
-
core.logger.debug("[PHANTOM] setupPhantomListeners: isOriginTab=true, registering listeners", {
|
|
799
|
-
completeEvent,
|
|
800
|
-
errorEvent
|
|
801
|
-
});
|
|
802
762
|
onceEvent({
|
|
803
763
|
event: completeEvent,
|
|
804
764
|
listener: onComplete
|
|
@@ -817,17 +777,15 @@ const createPhantomRedirectWalletProvider = ({ baseRedirectUrl, dynamicClient })
|
|
|
817
777
|
}).catch(() => {});
|
|
818
778
|
};
|
|
819
779
|
const connect = async () => {
|
|
820
|
-
core.logger.debug("[PHANTOM] connect: start");
|
|
821
780
|
const redirectUrl = baseRedirectUrl;
|
|
822
781
|
const { publicKey: dappPublicKey, secretKey: dappSecretKey } = generateNaClKeyPair();
|
|
823
782
|
await setPendingRequest({
|
|
824
783
|
dappPublicKey,
|
|
825
784
|
dappSecretKey,
|
|
826
785
|
method: "connect",
|
|
827
|
-
requestId: randomString(32),
|
|
786
|
+
requestId: randomString({ length: 32 }),
|
|
828
787
|
timestamp: Date.now()
|
|
829
788
|
});
|
|
830
|
-
core.logger.debug("[PHANTOM] connect: pending request stored, setting up listeners");
|
|
831
789
|
const deferredPromise = createDeferredPromise();
|
|
832
790
|
setupPhantomListeners({
|
|
833
791
|
completeEvent: "phantomRedirectConnectionComplete",
|
|
@@ -855,7 +813,6 @@ const createPhantomRedirectWalletProvider = ({ baseRedirectUrl, dynamicClient })
|
|
|
855
813
|
});
|
|
856
814
|
core.logger.debug("[PHANTOM] connect: opening deeplink", { redirectUrl });
|
|
857
815
|
await core.openDeeplink(deepLinkUrl.toString());
|
|
858
|
-
core.logger.debug("[PHANTOM] connect: deeplink opened, awaiting deferred promise");
|
|
859
816
|
return deferredPromise.promise;
|
|
860
817
|
};
|
|
861
818
|
const disconnect = async () => {
|
|
@@ -865,7 +822,7 @@ const createPhantomRedirectWalletProvider = ({ baseRedirectUrl, dynamicClient })
|
|
|
865
822
|
payload: { session: session.sessionToken },
|
|
866
823
|
sharedSecret: session.sharedSecret
|
|
867
824
|
});
|
|
868
|
-
const requestId = randomString(32);
|
|
825
|
+
const requestId = randomString({ length: 32 });
|
|
869
826
|
await setPendingRequest({
|
|
870
827
|
dappPublicKey: session.dappPublicKey,
|
|
871
828
|
dappSecretKey: session.dappSecretKey,
|
|
@@ -915,7 +872,7 @@ const createPhantomRedirectWalletProvider = ({ baseRedirectUrl, dynamicClient })
|
|
|
915
872
|
},
|
|
916
873
|
sharedSecret: session.sharedSecret
|
|
917
874
|
});
|
|
918
|
-
const requestId = randomString(32);
|
|
875
|
+
const requestId = randomString({ length: 32 });
|
|
919
876
|
await setPendingRequest({
|
|
920
877
|
dappPublicKey: session.dappPublicKey,
|
|
921
878
|
dappSecretKey: session.dappSecretKey,
|
|
@@ -969,7 +926,7 @@ const createPhantomRedirectWalletProvider = ({ baseRedirectUrl, dynamicClient })
|
|
|
969
926
|
},
|
|
970
927
|
sharedSecret: session.sharedSecret
|
|
971
928
|
});
|
|
972
|
-
const requestId = randomString(32);
|
|
929
|
+
const requestId = randomString({ length: 32 });
|
|
973
930
|
await setPendingRequest({
|
|
974
931
|
dappPublicKey: session.dappPublicKey,
|
|
975
932
|
dappSecretKey: session.dappSecretKey,
|
|
@@ -1024,7 +981,7 @@ const createPhantomRedirectWalletProvider = ({ baseRedirectUrl, dynamicClient })
|
|
|
1024
981
|
},
|
|
1025
982
|
sharedSecret: session.sharedSecret
|
|
1026
983
|
});
|
|
1027
|
-
const requestId = randomString(32);
|
|
984
|
+
const requestId = randomString({ length: 32 });
|
|
1028
985
|
await setPendingRequest({
|
|
1029
986
|
dappPublicKey: session.dappPublicKey,
|
|
1030
987
|
dappSecretKey: session.dappSecretKey,
|
|
@@ -1081,6 +1038,7 @@ const createPhantomRedirectWalletProvider = ({ baseRedirectUrl, dynamicClient })
|
|
|
1081
1038
|
chain: "SOL",
|
|
1082
1039
|
connect,
|
|
1083
1040
|
disconnect,
|
|
1041
|
+
executeCheckoutTransaction: (args) => solanaExecuteCheckoutTransaction(args, dynamicClient),
|
|
1084
1042
|
getActiveNetworkId,
|
|
1085
1043
|
getConnectedAddresses,
|
|
1086
1044
|
groupKey,
|
|
@@ -1090,6 +1048,7 @@ const createPhantomRedirectWalletProvider = ({ baseRedirectUrl, dynamicClient })
|
|
|
1090
1048
|
signAndSendTransaction: signAndSendTransaction$1,
|
|
1091
1049
|
signMessage,
|
|
1092
1050
|
signTransaction: signTransaction$1,
|
|
1051
|
+
transferAmount: (args) => solanaTransferAmount(args, dynamicClient),
|
|
1093
1052
|
walletProviderType
|
|
1094
1053
|
};
|
|
1095
1054
|
};
|
|
@@ -1103,16 +1062,28 @@ const createPhantomRedirectWalletProvider = ({ baseRedirectUrl, dynamicClient })
|
|
|
1103
1062
|
* redirect data from a Phantom wallet deep link operation, and validates
|
|
1104
1063
|
* that there is a corresponding pending request in storage.
|
|
1105
1064
|
*
|
|
1065
|
+
* Most Phantom callbacks include recognizable query parameters:
|
|
1066
|
+
* - **Connect**: `phantom_encryption_public_key`
|
|
1067
|
+
* - **Sign** (signMessage, signTransaction, etc.): `nonce` + `data`
|
|
1068
|
+
* - **Error** (any method): `errorCode`
|
|
1069
|
+
*
|
|
1070
|
+
* **Disconnect is the exception**: on success, Phantom redirects back to the
|
|
1071
|
+
* bare `redirect_link` with NO query parameters at all. To detect this case,
|
|
1072
|
+
* we fall back to checking whether a pending disconnect request exists in
|
|
1073
|
+
* storage.
|
|
1074
|
+
*
|
|
1106
1075
|
* @param params.url - The URL to check for Phantom redirect parameters
|
|
1107
1076
|
* @param client - The Dynamic client instance
|
|
1108
1077
|
* @returns A promise that resolves to true if the URL is a valid Phantom redirect, false otherwise
|
|
1109
1078
|
*/
|
|
1110
1079
|
const detectPhantomRedirect = async ({ url }, client = getDefaultClient()) => {
|
|
1111
1080
|
const core = getCore(client);
|
|
1112
|
-
|
|
1081
|
+
const hasPhantomParams = url.searchParams.has("phantom_encryption_public_key") || url.searchParams.has("errorCode") || url.searchParams.has("nonce") && url.searchParams.has("data");
|
|
1113
1082
|
await core.initTrack.waitForAll();
|
|
1114
1083
|
const pendingRequest = await core.storage.getItem(pendingRequestStorageKeySchema);
|
|
1115
|
-
|
|
1084
|
+
if (!pendingRequest) return false;
|
|
1085
|
+
if (hasPhantomParams) return true;
|
|
1086
|
+
return pendingRequest.method === "disconnect";
|
|
1116
1087
|
};
|
|
1117
1088
|
|
|
1118
1089
|
//#endregion
|
|
@@ -1162,15 +1133,15 @@ const PHANTOM_REDIRECT_SOLANA_EXTENSION_KEY = "phantomRedirectSolana";
|
|
|
1162
1133
|
* @param [client] - The Dynamic client. Only required for multiple clients.
|
|
1163
1134
|
*/
|
|
1164
1135
|
const addPhantomRedirectSolanaExtension = async ({ disableAutoRedirectCompletion, onCloseTab, url }, client = getDefaultClient()) => {
|
|
1165
|
-
if (hasExtension({ extensionKey: PHANTOM_REDIRECT_SOLANA_EXTENSION_KEY }, client))
|
|
1136
|
+
if (hasExtension({ extensionKey: PHANTOM_REDIRECT_SOLANA_EXTENSION_KEY }, client)) {
|
|
1137
|
+
getCore(client).logger.debug("[PHANTOM] addPhantomRedirectSolanaExtension: already registered, skipping");
|
|
1138
|
+
return;
|
|
1139
|
+
}
|
|
1166
1140
|
registerExtension({ extensionKey: PHANTOM_REDIRECT_SOLANA_EXTENSION_KEY }, client);
|
|
1167
1141
|
registerSolanaNetworkProviderBuilder(client);
|
|
1168
1142
|
const core = getCore(client);
|
|
1169
1143
|
if (!disableAutoRedirectCompletion) {
|
|
1170
|
-
|
|
1171
|
-
const isRedirect = await detectPhantomRedirect({ url }, client);
|
|
1172
|
-
core.logger.debug("[PHANTOM] addPhantomRedirectSolanaExtension: isRedirect", { isRedirect });
|
|
1173
|
-
if (isRedirect) {
|
|
1144
|
+
if (await detectPhantomRedirect({ url }, client)) {
|
|
1174
1145
|
onceEvent({
|
|
1175
1146
|
event: "phantomRedirectCloseTab",
|
|
1176
1147
|
listener: onCloseTab
|
|
@@ -1188,16 +1159,27 @@ const addPhantomRedirectSolanaExtension = async ({ disableAutoRedirectCompletion
|
|
|
1188
1159
|
baseRedirectUrl: `${url.protocol}//${url.host}${url.pathname}`,
|
|
1189
1160
|
dynamicClient: client
|
|
1190
1161
|
});
|
|
1191
|
-
getWalletProviderRegistry(client)
|
|
1162
|
+
const walletProviderRegistry = getWalletProviderRegistry(client);
|
|
1163
|
+
const isConflictingProvider = (provider) => provider.chain === walletProvider.chain && provider.groupKey === walletProvider.groupKey && provider.key !== walletProvider.key;
|
|
1164
|
+
const existingConflict = walletProviderRegistry.listProviders().find(isConflictingProvider);
|
|
1165
|
+
if (existingConflict) {
|
|
1166
|
+
core.logger.debug("[PHANTOM] addPhantomRedirectSolanaExtension: skipping registration, conflicting provider exists", { conflictingKey: existingConflict.key });
|
|
1167
|
+
return;
|
|
1168
|
+
}
|
|
1169
|
+
walletProviderRegistry.register({
|
|
1192
1170
|
priority: WalletProviderPriority.WINDOW_INJECT,
|
|
1193
1171
|
walletProvider
|
|
1194
1172
|
});
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1173
|
+
const removeListener = onEvent({
|
|
1174
|
+
event: "walletProviderRegistered",
|
|
1175
|
+
listener: ({ walletProvider: newProvider }) => {
|
|
1176
|
+
if (isConflictingProvider(newProvider)) {
|
|
1177
|
+
core.logger.debug("[PHANTOM] addPhantomRedirectSolanaExtension: unregistering, conflicting provider registered", { conflictingKey: newProvider.key });
|
|
1178
|
+
walletProviderRegistry.unregister(walletProvider.key);
|
|
1179
|
+
removeListener();
|
|
1180
|
+
}
|
|
1181
|
+
}
|
|
1182
|
+
}, client);
|
|
1201
1183
|
};
|
|
1202
1184
|
|
|
1203
1185
|
//#endregion
|
|
@@ -1284,5 +1266,5 @@ const signTransaction = async ({ walletAccount, transaction }, client = getDefau
|
|
|
1284
1266
|
assertPackageVersion(name, version);
|
|
1285
1267
|
|
|
1286
1268
|
//#endregion
|
|
1287
|
-
export { NotSolanaProviderError, SponsorTransactionError, addPhantomRedirectSolanaExtension, addSolanaExtension, calculateSolanaTransactionFee, completePhantomRedirect, detectPhantomRedirect, getSolanaConnection, isSolanaNetworkProvider, isSolanaWalletAccount, signAllTransactions, signAndSendSponsoredTransaction, signAndSendTransaction, signTransaction, simulateSolanaTransaction };
|
|
1269
|
+
export { NotSolanaProviderError, SponsorTransactionError, addPhantomRedirectSolanaExtension, addSolanaExtension, calculateSolanaTransactionFee, completePhantomRedirect, detectPhantomRedirect, getSolanaConnection, isSolanaGasSponsorshipEnabled, isSolanaNetworkProvider, isSolanaWalletAccount, signAllTransactions, signAndSendSponsoredTransaction, signAndSendTransaction, signTransaction, simulateSolanaTransaction };
|
|
1288
1270
|
//# sourceMappingURL=index.esm.js.map
|