@dynamic-labs-sdk/solana 0.1.2 → 0.2.3
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/SolanaNetworkProvider.types.d.ts.map +1 -0
- package/dist/SolanaWalletAccount.types.d.ts.map +1 -0
- package/dist/SolanaWalletProvider.types.d.ts.map +1 -0
- package/{src → dist}/addSolanaExtension/addSolanaExtension.d.ts +1 -1
- package/dist/addSolanaExtension/addSolanaExtension.d.ts.map +1 -0
- package/dist/addSolanaExtension/index.d.ts.map +1 -0
- package/dist/addSolanaWalletStandardExtension-BToyMUc9.cjs.js +231 -0
- package/dist/addSolanaWalletStandardExtension-BToyMUc9.cjs.js.map +1 -0
- package/dist/addSolanaWalletStandardExtension-nZhmVofg.esm.js +192 -0
- package/dist/addSolanaWalletStandardExtension-nZhmVofg.esm.js.map +1 -0
- package/dist/addWaasSolanaExtension-CUJHPuv5.esm.js +145 -0
- package/dist/addWaasSolanaExtension-CUJHPuv5.esm.js.map +1 -0
- package/dist/addWaasSolanaExtension-DB0ZNIuG.cjs.js +157 -0
- package/dist/addWaasSolanaExtension-DB0ZNIuG.cjs.js.map +1 -0
- package/dist/errors/NotSolanaProviderError/NotSolanaProviderError.d.ts.map +1 -0
- package/dist/errors/NotSolanaProviderError/index.d.ts.map +1 -0
- package/dist/exports/index.d.ts.map +1 -0
- package/dist/exports/waas.d.ts.map +1 -0
- package/dist/exports/walletStandard.d.ts.map +1 -0
- package/dist/getSolanaConnection/getSolanaConnection.d.ts.map +1 -0
- package/dist/getSolanaConnection/index.d.ts.map +1 -0
- package/dist/index.cjs.js +132 -0
- package/dist/index.cjs.js.map +1 -0
- package/dist/index.esm.js +125 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/isSolanaNetworkProvider/index.d.ts.map +1 -0
- package/dist/isSolanaNetworkProvider/isSolanaNetworkProvider.d.ts.map +1 -0
- package/dist/isSolanaWalletAccount/index.d.ts.map +1 -0
- package/dist/isSolanaWalletAccount/isSolanaWalletAccount.d.ts.map +1 -0
- package/dist/isSolanaWalletProvider/index.d.ts.map +1 -0
- package/dist/isSolanaWalletProvider/isSolanaWalletProvider.d.ts.map +1 -0
- package/dist/isVersionedTransaction-B-yrMKci.esm.js +48 -0
- package/dist/isVersionedTransaction-B-yrMKci.esm.js.map +1 -0
- package/dist/isVersionedTransaction-BAaz3ONI.cjs.js +72 -0
- package/dist/isVersionedTransaction-BAaz3ONI.cjs.js.map +1 -0
- package/dist/registerSolanaNetworkProviderBuilder/index.d.ts.map +1 -0
- package/dist/registerSolanaNetworkProviderBuilder/registerSolanaNetworkProviderBuilder.d.ts.map +1 -0
- package/dist/signAllTransactions/index.d.ts.map +1 -0
- package/{src → dist}/signAllTransactions/signAllTransactions.d.ts +1 -1
- package/dist/signAllTransactions/signAllTransactions.d.ts.map +1 -0
- package/dist/signAndSendTransaction/index.d.ts.map +1 -0
- package/{src → dist}/signAndSendTransaction/signAndSendTransaction.d.ts +1 -1
- package/dist/signAndSendTransaction/signAndSendTransaction.d.ts.map +1 -0
- package/dist/signTransaction/index.d.ts.map +1 -0
- package/{src → dist}/signTransaction/signTransaction.d.ts +1 -1
- package/dist/signTransaction/signTransaction.d.ts.map +1 -0
- package/dist/tsconfig.lib.tsbuildinfo +1 -0
- package/dist/utils/createEmptyEventEmitter/createEmptyEventEmitter.d.ts.map +1 -0
- package/dist/utils/createEmptyEventEmitter/index.d.ts.map +1 -0
- package/dist/utils/createSolanaNetworkProvider/createSolanaNetworkProvider.d.ts.map +1 -0
- package/dist/utils/createSolanaNetworkProvider/index.d.ts.map +1 -0
- package/dist/utils/fetchSolBalance/fetchSolBalance.d.ts.map +1 -0
- package/dist/utils/fetchSolBalance/index.d.ts.map +1 -0
- package/dist/utils/isVersionedTransaction/index.d.ts.map +1 -0
- package/dist/utils/isVersionedTransaction/isVersionedTransaction.d.ts.map +1 -0
- package/dist/waas/WaasSolanaWalletProvider.types.d.ts.map +1 -0
- package/{src → dist}/waas/addWaasSolanaExtension/addWaasSolanaExtension.d.ts +1 -1
- package/dist/waas/addWaasSolanaExtension/addWaasSolanaExtension.d.ts.map +1 -0
- package/dist/waas/addWaasSolanaExtension/index.d.ts.map +1 -0
- package/dist/waas/utils/createWalletProviderForWaasSolana/createWalletProviderForWaasSolana.d.ts.map +1 -0
- package/dist/waas/utils/createWalletProviderForWaasSolana/index.d.ts.map +1 -0
- package/dist/waas.cjs.js +11 -0
- package/dist/waas.cjs.js.map +1 -0
- package/dist/waas.esm.js +10 -0
- package/dist/waas.esm.js.map +1 -0
- package/{src → dist}/walletStandard/addSolanaWalletStandardExtension/addSolanaWalletStandardExtension.d.ts +1 -1
- package/dist/walletStandard/addSolanaWalletStandardExtension/addSolanaWalletStandardExtension.d.ts.map +1 -0
- package/dist/walletStandard/addSolanaWalletStandardExtension/index.d.ts.map +1 -0
- package/dist/walletStandard/utils/createWalletProviderFromSolanaStandardWallet/createWalletProviderFromSolanaStandardWallet.d.ts.map +1 -0
- package/dist/walletStandard/utils/createWalletProviderFromSolanaStandardWallet/getActiveNetworkId/getActiveNetworkId.d.ts.map +1 -0
- package/dist/walletStandard/utils/createWalletProviderFromSolanaStandardWallet/getActiveNetworkId/index.d.ts.map +1 -0
- package/dist/walletStandard/utils/createWalletProviderFromSolanaStandardWallet/index.d.ts.map +1 -0
- package/dist/walletStandard/utils/getActiveNetworkCluster/getActiveNetworkCluster.d.ts.map +1 -0
- package/dist/walletStandard/utils/getActiveNetworkCluster/index.d.ts.map +1 -0
- package/{src → dist}/walletStandard/utils/getFeaturesForSolanaStandardWallet/getFeaturesForSolanaStandardWallet.d.ts +1 -1
- package/dist/walletStandard/utils/getFeaturesForSolanaStandardWallet/getFeaturesForSolanaStandardWallet.d.ts.map +1 -0
- package/dist/walletStandard/utils/getFeaturesForSolanaStandardWallet/index.d.ts.map +1 -0
- package/dist/walletStandard/utils/hasAllRequiredFeatures/hasAllRequiredFeatures.d.ts.map +1 -0
- package/dist/walletStandard/utils/hasAllRequiredFeatures/index.d.ts.map +1 -0
- package/dist/walletStandard.cjs.js +10 -0
- package/dist/walletStandard.cjs.js.map +1 -0
- package/dist/walletStandard.esm.js +10 -0
- package/dist/walletStandard.esm.js.map +1 -0
- package/package.json +31 -17
- package/CHANGELOG.md +0 -606
- package/addSolanaWalletStandardExtension.cjs.js +0 -268
- package/addSolanaWalletStandardExtension.esm.js +0 -266
- package/addWaasSolanaExtension.cjs.js +0 -163
- package/addWaasSolanaExtension.esm.js +0 -160
- package/index.cjs.d.ts +0 -1
- package/index.cjs.js +0 -131
- package/index.esm.d.ts +0 -1
- package/index.esm.js +0 -123
- package/isVersionedTransaction.cjs.js +0 -64
- package/isVersionedTransaction.esm.js +0 -58
- package/src/SolanaNetworkProvider.types.d.ts.map +0 -1
- package/src/SolanaWalletAccount.types.d.ts.map +0 -1
- package/src/SolanaWalletProvider.types.d.ts.map +0 -1
- package/src/addSolanaExtension/addSolanaExtension.d.ts.map +0 -1
- package/src/addSolanaExtension/index.d.ts.map +0 -1
- package/src/errors/NotSolanaProviderError/NotSolanaProviderError.d.ts.map +0 -1
- package/src/errors/NotSolanaProviderError/index.d.ts.map +0 -1
- package/src/exports/index.d.ts.map +0 -1
- package/src/exports/waas.d.ts.map +0 -1
- package/src/exports/walletStandard.d.ts.map +0 -1
- package/src/getSolanaConnection/getSolanaConnection.d.ts.map +0 -1
- package/src/getSolanaConnection/index.d.ts.map +0 -1
- package/src/isSolanaNetworkProvider/index.d.ts.map +0 -1
- package/src/isSolanaNetworkProvider/isSolanaNetworkProvider.d.ts.map +0 -1
- package/src/isSolanaWalletAccount/index.d.ts.map +0 -1
- package/src/isSolanaWalletAccount/isSolanaWalletAccount.d.ts.map +0 -1
- package/src/isSolanaWalletProvider/index.d.ts.map +0 -1
- package/src/isSolanaWalletProvider/isSolanaWalletProvider.d.ts.map +0 -1
- package/src/registerSolanaNetworkProviderBuilder/index.d.ts.map +0 -1
- package/src/registerSolanaNetworkProviderBuilder/registerSolanaNetworkProviderBuilder.d.ts.map +0 -1
- package/src/signAllTransactions/index.d.ts.map +0 -1
- package/src/signAllTransactions/signAllTransactions.d.ts.map +0 -1
- package/src/signAndSendTransaction/index.d.ts.map +0 -1
- package/src/signAndSendTransaction/signAndSendTransaction.d.ts.map +0 -1
- package/src/signTransaction/index.d.ts.map +0 -1
- package/src/signTransaction/signTransaction.d.ts.map +0 -1
- package/src/utils/createEmptyEventEmitter/createEmptyEventEmitter.d.ts.map +0 -1
- package/src/utils/createEmptyEventEmitter/index.d.ts.map +0 -1
- package/src/utils/createSolanaNetworkProvider/createSolanaNetworkProvider.d.ts.map +0 -1
- package/src/utils/createSolanaNetworkProvider/index.d.ts.map +0 -1
- package/src/utils/fetchSolBalance/fetchSolBalance.d.ts.map +0 -1
- package/src/utils/fetchSolBalance/index.d.ts.map +0 -1
- package/src/utils/isVersionedTransaction/index.d.ts.map +0 -1
- package/src/utils/isVersionedTransaction/isVersionedTransaction.d.ts.map +0 -1
- package/src/waas/WaasSolanaWalletProvider.types.d.ts.map +0 -1
- package/src/waas/addWaasSolanaExtension/addWaasSolanaExtension.d.ts.map +0 -1
- package/src/waas/addWaasSolanaExtension/index.d.ts.map +0 -1
- package/src/waas/utils/createWalletProviderForWaasSolana/createWalletProviderForWaasSolana.d.ts.map +0 -1
- package/src/waas/utils/createWalletProviderForWaasSolana/index.d.ts.map +0 -1
- package/src/walletStandard/addSolanaWalletStandardExtension/addSolanaWalletStandardExtension.d.ts.map +0 -1
- package/src/walletStandard/addSolanaWalletStandardExtension/index.d.ts.map +0 -1
- package/src/walletStandard/utils/createWalletProviderFromSolanaStandardWallet/createWalletProviderFromSolanaStandardWallet.d.ts.map +0 -1
- package/src/walletStandard/utils/createWalletProviderFromSolanaStandardWallet/getActiveNetworkId/getActiveNetworkId.d.ts.map +0 -1
- package/src/walletStandard/utils/createWalletProviderFromSolanaStandardWallet/getActiveNetworkId/index.d.ts.map +0 -1
- package/src/walletStandard/utils/createWalletProviderFromSolanaStandardWallet/index.d.ts.map +0 -1
- package/src/walletStandard/utils/getActiveNetworkCluster/getActiveNetworkCluster.d.ts.map +0 -1
- package/src/walletStandard/utils/getActiveNetworkCluster/index.d.ts.map +0 -1
- package/src/walletStandard/utils/getFeaturesForSolanaStandardWallet/getFeaturesForSolanaStandardWallet.d.ts.map +0 -1
- package/src/walletStandard/utils/getFeaturesForSolanaStandardWallet/index.d.ts.map +0 -1
- package/src/walletStandard/utils/hasAllRequiredFeatures/hasAllRequiredFeatures.d.ts.map +0 -1
- package/src/walletStandard/utils/hasAllRequiredFeatures/index.d.ts.map +0 -1
- package/waas.cjs.d.ts +0 -1
- package/waas.cjs.js +0 -14
- package/waas.esm.d.ts +0 -1
- package/waas.esm.js +0 -10
- package/walletStandard.cjs.d.ts +0 -1
- package/walletStandard.cjs.js +0 -15
- package/walletStandard.esm.d.ts +0 -1
- package/walletStandard.esm.js +0 -11
- /package/{src → dist}/SolanaNetworkProvider.types.d.ts +0 -0
- /package/{src → dist}/SolanaWalletAccount.types.d.ts +0 -0
- /package/{src → dist}/SolanaWalletProvider.types.d.ts +0 -0
- /package/{src → dist}/addSolanaExtension/index.d.ts +0 -0
- /package/{src → dist}/errors/NotSolanaProviderError/NotSolanaProviderError.d.ts +0 -0
- /package/{src → dist}/errors/NotSolanaProviderError/index.d.ts +0 -0
- /package/{src → dist}/exports/index.d.ts +0 -0
- /package/{src → dist}/exports/waas.d.ts +0 -0
- /package/{src → dist}/exports/walletStandard.d.ts +0 -0
- /package/{src → dist}/getSolanaConnection/getSolanaConnection.d.ts +0 -0
- /package/{src → dist}/getSolanaConnection/index.d.ts +0 -0
- /package/{src → dist}/isSolanaNetworkProvider/index.d.ts +0 -0
- /package/{src → dist}/isSolanaNetworkProvider/isSolanaNetworkProvider.d.ts +0 -0
- /package/{src → dist}/isSolanaWalletAccount/index.d.ts +0 -0
- /package/{src → dist}/isSolanaWalletAccount/isSolanaWalletAccount.d.ts +0 -0
- /package/{src → dist}/isSolanaWalletProvider/index.d.ts +0 -0
- /package/{src → dist}/isSolanaWalletProvider/isSolanaWalletProvider.d.ts +0 -0
- /package/{src → dist}/registerSolanaNetworkProviderBuilder/index.d.ts +0 -0
- /package/{src → dist}/registerSolanaNetworkProviderBuilder/registerSolanaNetworkProviderBuilder.d.ts +0 -0
- /package/{src → dist}/signAllTransactions/index.d.ts +0 -0
- /package/{src → dist}/signAndSendTransaction/index.d.ts +0 -0
- /package/{src → dist}/signTransaction/index.d.ts +0 -0
- /package/{src → dist}/utils/createEmptyEventEmitter/createEmptyEventEmitter.d.ts +0 -0
- /package/{src → dist}/utils/createEmptyEventEmitter/index.d.ts +0 -0
- /package/{src → dist}/utils/createSolanaNetworkProvider/createSolanaNetworkProvider.d.ts +0 -0
- /package/{src → dist}/utils/createSolanaNetworkProvider/index.d.ts +0 -0
- /package/{src → dist}/utils/fetchSolBalance/fetchSolBalance.d.ts +0 -0
- /package/{src → dist}/utils/fetchSolBalance/index.d.ts +0 -0
- /package/{src → dist}/utils/isVersionedTransaction/index.d.ts +0 -0
- /package/{src → dist}/utils/isVersionedTransaction/isVersionedTransaction.d.ts +0 -0
- /package/{src → dist}/waas/WaasSolanaWalletProvider.types.d.ts +0 -0
- /package/{src → dist}/waas/addWaasSolanaExtension/index.d.ts +0 -0
- /package/{src → dist}/waas/utils/createWalletProviderForWaasSolana/createWalletProviderForWaasSolana.d.ts +0 -0
- /package/{src → dist}/waas/utils/createWalletProviderForWaasSolana/index.d.ts +0 -0
- /package/{src → dist}/walletStandard/addSolanaWalletStandardExtension/index.d.ts +0 -0
- /package/{src → dist}/walletStandard/utils/createWalletProviderFromSolanaStandardWallet/createWalletProviderFromSolanaStandardWallet.d.ts +0 -0
- /package/{src → dist}/walletStandard/utils/createWalletProviderFromSolanaStandardWallet/getActiveNetworkId/getActiveNetworkId.d.ts +0 -0
- /package/{src → dist}/walletStandard/utils/createWalletProviderFromSolanaStandardWallet/getActiveNetworkId/index.d.ts +0 -0
- /package/{src → dist}/walletStandard/utils/createWalletProviderFromSolanaStandardWallet/index.d.ts +0 -0
- /package/{src → dist}/walletStandard/utils/getActiveNetworkCluster/getActiveNetworkCluster.d.ts +0 -0
- /package/{src → dist}/walletStandard/utils/getActiveNetworkCluster/index.d.ts +0 -0
- /package/{src → dist}/walletStandard/utils/getFeaturesForSolanaStandardWallet/index.d.ts +0 -0
- /package/{src → dist}/walletStandard/utils/hasAllRequiredFeatures/hasAllRequiredFeatures.d.ts +0 -0
- /package/{src → dist}/walletStandard/utils/hasAllRequiredFeatures/index.d.ts +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SolanaNetworkProvider.types.d.ts","sourceRoot":"","sources":["../src/SolanaNetworkProvider.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,MAAM,MAAM,qBAAqB,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;AAE/D,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,kBAAkB;QAC1B,GAAG,EAAE,qBAAqB,CAAC;KAC5B;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SolanaWalletAccount.types.d.ts","sourceRoot":"","sources":["../src/SolanaWalletAccount.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,MAAM,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAE3D,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,gBAAgB;QACxB,GAAG,EAAE,mBAAmB,CAAC;KAC1B;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SolanaWalletProvider.types.d.ts","sourceRoot":"","sources":["../src/SolanaWalletProvider.types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,oBAAoB,EACrB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAEvE,MAAM,MAAM,oBAAoB,GAAG,cAAc,GAAG;IAClD,KAAK,EAAE,KAAK,CAAC;IACb,mBAAmB,CAAC,CAAC,SAAS,WAAW,GAAG,oBAAoB,EAAE,EAChE,YAAY,EACZ,aAAa,GACd,EAAE;QACD,YAAY,EAAE,CAAC,EAAE,CAAC;QAClB,aAAa,EAAE,mBAAmB,CAAC;KACpC,GAAG,OAAO,CAAC;QAAE,kBAAkB,EAAE,CAAC,EAAE,CAAA;KAAE,CAAC,CAAC;IACzC,sBAAsB,CAAC,CAAC,SAAS,WAAW,GAAG,oBAAoB,EAAE,EACnE,WAAW,EACX,OAAO,EACP,aAAa,GACd,EAAE;QACD,OAAO,CAAC,EAAE,WAAW,CAAC;QACtB,WAAW,EAAE,CAAC,CAAC;QACf,aAAa,EAAE,mBAAmB,CAAC;KACpC,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnC,eAAe,CAAC,CAAC,SAAS,WAAW,GAAG,oBAAoB,EAAE,EAC5D,WAAW,EACX,aAAa,GACd,EAAE;QACD,WAAW,EAAE,CAAC,CAAC;QACf,aAAa,EAAE,mBAAmB,CAAC;KACpC,GAAG,OAAO,CAAC;QAAE,iBAAiB,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC;CACvC,CAAC"}
|
|
@@ -7,5 +7,5 @@
|
|
|
7
7
|
*
|
|
8
8
|
* @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
|
|
9
9
|
*/
|
|
10
|
-
export declare const addSolanaExtension: (client?:
|
|
10
|
+
export declare const addSolanaExtension: (client?: import("@dynamic-labs-sdk/client").DynamicClient) => void;
|
|
11
11
|
//# sourceMappingURL=addSolanaExtension.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addSolanaExtension.d.ts","sourceRoot":"","sources":["../../src/addSolanaExtension/addSolanaExtension.ts"],"names":[],"mappings":"AAKA;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,iEAAkC,IAGhE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/addSolanaExtension/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
//#region rolldown:runtime
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __copyProps = (to, from, except, desc) => {
|
|
9
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
10
|
+
for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
|
|
11
|
+
key = keys[i];
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except) {
|
|
13
|
+
__defProp(to, key, {
|
|
14
|
+
get: ((k) => from[k]).bind(null, key),
|
|
15
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return to;
|
|
21
|
+
};
|
|
22
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
23
|
+
value: mod,
|
|
24
|
+
enumerable: true
|
|
25
|
+
}) : target, mod));
|
|
26
|
+
|
|
27
|
+
//#endregion
|
|
28
|
+
const require_isVersionedTransaction = require('./isVersionedTransaction-BAaz3ONI.cjs.js');
|
|
29
|
+
let _dynamic_labs_sdk_client_core = require("@dynamic-labs-sdk/client/core");
|
|
30
|
+
let _solana_web3_js = require("@solana/web3.js");
|
|
31
|
+
let _dynamic_labs_sdk_client = require("@dynamic-labs-sdk/client");
|
|
32
|
+
let _dynamic_labs_sdk_api_core = require("@dynamic-labs/sdk-api-core");
|
|
33
|
+
let _wallet_standard_app = require("@wallet-standard/app");
|
|
34
|
+
let bs58 = require("bs58");
|
|
35
|
+
bs58 = __toESM(bs58);
|
|
36
|
+
|
|
37
|
+
//#region src/walletStandard/utils/getActiveNetworkCluster/getActiveNetworkCluster.ts
|
|
38
|
+
const getActiveNetworkCluster = async ({ walletAccount }, client) => {
|
|
39
|
+
const { networkData } = await (0, _dynamic_labs_sdk_client.getActiveNetworkData)({ walletAccount }, client);
|
|
40
|
+
if (!networkData?.cluster) return;
|
|
41
|
+
return `solana:${networkData.cluster}`;
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
//#endregion
|
|
45
|
+
//#region src/walletStandard/utils/getFeaturesForSolanaStandardWallet/getFeaturesForSolanaStandardWallet.ts
|
|
46
|
+
const getFeaturesForSolanaStandardWallet = (wallet) => {
|
|
47
|
+
return wallet.features;
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
//#endregion
|
|
51
|
+
//#region src/walletStandard/utils/createWalletProviderFromSolanaStandardWallet/createWalletProviderFromSolanaStandardWallet.ts
|
|
52
|
+
const createWalletProviderFromSolanaStandardWallet = ({ dynamicClient, walletStandardWallet }) => {
|
|
53
|
+
const features = getFeaturesForSolanaStandardWallet(walletStandardWallet);
|
|
54
|
+
const walletProviderType = _dynamic_labs_sdk_api_core.WalletProviderEnum.BrowserExtension;
|
|
55
|
+
const key = (0, _dynamic_labs_sdk_client_core.formatWalletProviderKey)({
|
|
56
|
+
chain: "SOL",
|
|
57
|
+
displayName: walletStandardWallet.name,
|
|
58
|
+
walletProviderType
|
|
59
|
+
});
|
|
60
|
+
const connect = async () => {
|
|
61
|
+
const autoConnectedAccounts = walletStandardWallet.accounts;
|
|
62
|
+
if (autoConnectedAccounts?.length && autoConnectedAccounts[0].publicKey && autoConnectedAccounts[0].address) return { addresses: [{
|
|
63
|
+
address: autoConnectedAccounts[0].address,
|
|
64
|
+
publicKey: autoConnectedAccounts[0].publicKey.toString()
|
|
65
|
+
}] };
|
|
66
|
+
const connectMethod = features["standard:connect"]?.connect;
|
|
67
|
+
(0, _dynamic_labs_sdk_client_core.assertDefined)(connectMethod, "connect method not found in wallet features");
|
|
68
|
+
return { addresses: (await connectMethod({ silent: false })).accounts?.map((account) => ({
|
|
69
|
+
address: account.address,
|
|
70
|
+
publicKey: account.publicKey?.toString()
|
|
71
|
+
})) };
|
|
72
|
+
};
|
|
73
|
+
const disconnectFeature = features["standard:disconnect"]?.disconnect;
|
|
74
|
+
const getActiveNetworkId = async () => (0, _dynamic_labs_sdk_client_core.getActiveNetworkIdFromLastKnownRegistry)({
|
|
75
|
+
client: dynamicClient,
|
|
76
|
+
walletProviderKey: key
|
|
77
|
+
});
|
|
78
|
+
const getCurrentAccount = async () => {
|
|
79
|
+
if (!isConnected() && connect) await connect();
|
|
80
|
+
const account = walletStandardWallet.accounts?.[0];
|
|
81
|
+
(0, _dynamic_labs_sdk_client_core.assertDefined)(account, "No connected accounts found");
|
|
82
|
+
return account;
|
|
83
|
+
};
|
|
84
|
+
const isConnected = () => {
|
|
85
|
+
return walletStandardWallet.accounts?.length > 0;
|
|
86
|
+
};
|
|
87
|
+
const getConnectedAddresses = async () => {
|
|
88
|
+
if (!isConnected() && connect) await connect();
|
|
89
|
+
return { addresses: walletStandardWallet.accounts.map((account) => account.address) };
|
|
90
|
+
};
|
|
91
|
+
const signAllTransactions = async ({ transactions, walletAccount }) => {
|
|
92
|
+
const signTransactionMethod = features["solana:signTransaction"]?.signTransaction;
|
|
93
|
+
(0, _dynamic_labs_sdk_client_core.assertDefined)(signTransactionMethod, "signTransaction method not found in wallet features");
|
|
94
|
+
await (0, _dynamic_labs_sdk_client.assertWalletAccountSigningAvailability)({ walletAccount }, dynamicClient);
|
|
95
|
+
const account = await getCurrentAccount();
|
|
96
|
+
const chain = await getActiveNetworkCluster({ walletAccount }, dynamicClient);
|
|
97
|
+
(0, _dynamic_labs_sdk_client_core.assertDefined)(chain, "Could not get active chain for wallet account");
|
|
98
|
+
return { signedTransactions: (await signTransactionMethod(...transactions.map((transaction) => ({
|
|
99
|
+
account,
|
|
100
|
+
chain,
|
|
101
|
+
transaction: transaction.serialize({ requireAllSignatures: false })
|
|
102
|
+
})))).map(({ signedTransaction }, index) => {
|
|
103
|
+
const inputTransaction = transactions[index];
|
|
104
|
+
if (require_isVersionedTransaction.isVersionedTransaction(inputTransaction)) return _solana_web3_js.VersionedTransaction.deserialize(signedTransaction);
|
|
105
|
+
return _solana_web3_js.Transaction.from(signedTransaction);
|
|
106
|
+
}) };
|
|
107
|
+
};
|
|
108
|
+
const signAndSendTransaction = async ({ transaction, walletAccount }) => {
|
|
109
|
+
await (0, _dynamic_labs_sdk_client.assertWalletAccountSigningAvailability)({ walletAccount }, dynamicClient);
|
|
110
|
+
const signAndSendTransactionMethod = features["solana:signAndSendTransaction"]?.signAndSendTransaction;
|
|
111
|
+
(0, _dynamic_labs_sdk_client_core.assertDefined)(signAndSendTransactionMethod, "signAndSendTransaction method not found in wallet features");
|
|
112
|
+
const account = await getCurrentAccount();
|
|
113
|
+
const chain = await getActiveNetworkCluster({ walletAccount }, dynamicClient);
|
|
114
|
+
(0, _dynamic_labs_sdk_client_core.assertDefined)(chain, "Could not get active chain for wallet account");
|
|
115
|
+
const [{ signature }] = await signAndSendTransactionMethod({
|
|
116
|
+
account,
|
|
117
|
+
chain,
|
|
118
|
+
transaction: transaction.serialize({ requireAllSignatures: false })
|
|
119
|
+
});
|
|
120
|
+
return { signature: bs58.default.encode(signature) };
|
|
121
|
+
};
|
|
122
|
+
const signMessage = async ({ message, walletAccount }) => {
|
|
123
|
+
const signMessageMethod = features["solana:signMessage"]?.signMessage;
|
|
124
|
+
(0, _dynamic_labs_sdk_client_core.assertDefined)(signMessageMethod, "signMessage method not found in wallet features");
|
|
125
|
+
(0, _dynamic_labs_sdk_client_core.assertDefined)(walletAccount, "Wallet account not found");
|
|
126
|
+
await (0, _dynamic_labs_sdk_client.assertWalletAccountSigningAvailability)({ walletAccount }, dynamicClient);
|
|
127
|
+
const encodedMessage = new TextEncoder().encode(message);
|
|
128
|
+
return { signature: (0, _dynamic_labs_sdk_client_core.bufferToBase64)((await signMessageMethod({
|
|
129
|
+
account: await getCurrentAccount(),
|
|
130
|
+
message: encodedMessage
|
|
131
|
+
}))[0].signature) };
|
|
132
|
+
};
|
|
133
|
+
const signTransaction = async ({ transaction, walletAccount }) => {
|
|
134
|
+
return { signedTransaction: (await signAllTransactions({
|
|
135
|
+
transactions: [transaction],
|
|
136
|
+
walletAccount
|
|
137
|
+
})).signedTransactions[0] };
|
|
138
|
+
};
|
|
139
|
+
const switchActiveNetwork = async ({ networkId }) => (0, _dynamic_labs_sdk_client_core.switchActiveNetworkInLastKnownRegistry)({
|
|
140
|
+
client: dynamicClient,
|
|
141
|
+
networkId,
|
|
142
|
+
walletProviderKey: key
|
|
143
|
+
});
|
|
144
|
+
const { getEventEmitter, cleanupEventEmitter } = (0, _dynamic_labs_sdk_client_core.createWalletProviderEventEmitter)({
|
|
145
|
+
removeEventListeners: ({ setupReturnValue }) => {
|
|
146
|
+
(0, _dynamic_labs_sdk_client_core.assertDefined)(setupReturnValue, "Setup return value not defined");
|
|
147
|
+
setupReturnValue();
|
|
148
|
+
},
|
|
149
|
+
setupEventListeners: ({ handleAccountsChanged }) => {
|
|
150
|
+
return features["standard:events"].on("change", ({ accounts }) => {
|
|
151
|
+
handleAccountsChanged({ addresses: accounts?.map((account) => account.address) ?? [] });
|
|
152
|
+
});
|
|
153
|
+
},
|
|
154
|
+
supportedEvents: ["accountsChanged"]
|
|
155
|
+
});
|
|
156
|
+
const terminate = async () => {
|
|
157
|
+
cleanupEventEmitter();
|
|
158
|
+
};
|
|
159
|
+
return {
|
|
160
|
+
chain: "SOL",
|
|
161
|
+
connect,
|
|
162
|
+
disconnect: disconnectFeature,
|
|
163
|
+
get events() {
|
|
164
|
+
return getEventEmitter();
|
|
165
|
+
},
|
|
166
|
+
getActiveNetworkId,
|
|
167
|
+
getConnectedAddresses,
|
|
168
|
+
groupKey: (0, _dynamic_labs_sdk_client_core.formatWalletProviderGroupKey)(walletStandardWallet.name),
|
|
169
|
+
key,
|
|
170
|
+
metadata: {
|
|
171
|
+
displayName: walletStandardWallet.name,
|
|
172
|
+
icon: walletStandardWallet.icon
|
|
173
|
+
},
|
|
174
|
+
signAllTransactions,
|
|
175
|
+
signAndSendTransaction,
|
|
176
|
+
signMessage,
|
|
177
|
+
signTransaction,
|
|
178
|
+
switchActiveNetwork,
|
|
179
|
+
terminate,
|
|
180
|
+
walletProviderType
|
|
181
|
+
};
|
|
182
|
+
};
|
|
183
|
+
|
|
184
|
+
//#endregion
|
|
185
|
+
//#region src/walletStandard/utils/hasAllRequiredFeatures/hasAllRequiredFeatures.ts
|
|
186
|
+
const hasAllRequiredFeatures = (wallet) => {
|
|
187
|
+
return Boolean(wallet.features?.["standard:events"] && wallet.features?.["standard:connect"] && wallet.features?.["solana:signTransaction"] && wallet.features?.["solana:signMessage"]);
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
//#endregion
|
|
191
|
+
//#region src/walletStandard/addSolanaWalletStandardExtension/addSolanaWalletStandardExtension.ts
|
|
192
|
+
const SOLANA_WALLET_STANDARD_EXTENSION_KEY = "solanaWalletStandard";
|
|
193
|
+
/**
|
|
194
|
+
* Adds the Solana Wallet Standard extension to the Dynamic client.
|
|
195
|
+
*
|
|
196
|
+
* This extension enables integration with wallets that implement the Solana Wallet Standard,
|
|
197
|
+
* automatically detecting and registering compatible wallets for use with the Dynamic SDK.
|
|
198
|
+
*
|
|
199
|
+
* @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
|
|
200
|
+
*/
|
|
201
|
+
const addSolanaWalletStandardExtension = (client = (0, _dynamic_labs_sdk_client_core.getDefaultClient)()) => {
|
|
202
|
+
if ((0, _dynamic_labs_sdk_client_core.hasExtension)({ extensionKey: SOLANA_WALLET_STANDARD_EXTENSION_KEY }, client)) return;
|
|
203
|
+
(0, _dynamic_labs_sdk_client_core.registerExtension)({ extensionKey: SOLANA_WALLET_STANDARD_EXTENSION_KEY }, client);
|
|
204
|
+
require_isVersionedTransaction.registerSolanaNetworkProviderBuilder(client);
|
|
205
|
+
const walletProviderRegistry = (0, _dynamic_labs_sdk_client_core.getWalletProviderRegistry)(client);
|
|
206
|
+
(0, _wallet_standard_app.getWallets)().get().filter(hasAllRequiredFeatures).forEach((walletStandardWallet) => {
|
|
207
|
+
const walletProvider = createWalletProviderFromSolanaStandardWallet({
|
|
208
|
+
dynamicClient: client,
|
|
209
|
+
walletStandardWallet
|
|
210
|
+
});
|
|
211
|
+
walletProviderRegistry.register({
|
|
212
|
+
priority: _dynamic_labs_sdk_client_core.WalletProviderPriority.WALLET_SELF_ANNOUNCEMENT_STANDARD,
|
|
213
|
+
walletProvider
|
|
214
|
+
});
|
|
215
|
+
});
|
|
216
|
+
};
|
|
217
|
+
|
|
218
|
+
//#endregion
|
|
219
|
+
Object.defineProperty(exports, '__toESM', {
|
|
220
|
+
enumerable: true,
|
|
221
|
+
get: function () {
|
|
222
|
+
return __toESM;
|
|
223
|
+
}
|
|
224
|
+
});
|
|
225
|
+
Object.defineProperty(exports, 'addSolanaWalletStandardExtension', {
|
|
226
|
+
enumerable: true,
|
|
227
|
+
get: function () {
|
|
228
|
+
return addSolanaWalletStandardExtension;
|
|
229
|
+
}
|
|
230
|
+
});
|
|
231
|
+
//# sourceMappingURL=addSolanaWalletStandardExtension-BToyMUc9.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addSolanaWalletStandardExtension-BToyMUc9.cjs.js","names":["WalletProviderEnum","connect: SolanaWalletProvider['connect']","getActiveNetworkId: SolanaWalletProvider['getActiveNetworkId']","getConnectedAddresses: SolanaWalletProvider['getConnectedAddresses']","signAllTransactions: SolanaWalletProvider['signAllTransactions']","isVersionedTransaction","VersionedTransaction","Transaction","signAndSendTransaction: SolanaWalletProvider['signAndSendTransaction']","signMessage: SolanaWalletProvider['signMessage']","signTransaction: SolanaWalletProvider['signTransaction']","switchActiveNetwork: SolanaWalletProvider['switchActiveNetwork']","terminate: SolanaWalletProvider['terminate']","WalletProviderPriority"],"sources":["../src/walletStandard/utils/getActiveNetworkCluster/getActiveNetworkCluster.ts","../src/walletStandard/utils/getFeaturesForSolanaStandardWallet/getFeaturesForSolanaStandardWallet.ts","../src/walletStandard/utils/createWalletProviderFromSolanaStandardWallet/createWalletProviderFromSolanaStandardWallet.ts","../src/walletStandard/utils/hasAllRequiredFeatures/hasAllRequiredFeatures.ts","../src/walletStandard/addSolanaWalletStandardExtension/addSolanaWalletStandardExtension.ts"],"sourcesContent":["import type { DynamicClient, WalletAccount } from '@dynamic-labs-sdk/client';\nimport { getActiveNetworkData } from '@dynamic-labs-sdk/client';\n\ntype GetActiveNetworkClusterParams = {\n walletAccount: WalletAccount;\n};\n\nexport const getActiveNetworkCluster = async (\n { walletAccount }: GetActiveNetworkClusterParams,\n client: DynamicClient\n): Promise<`solana:${string}` | undefined> => {\n const { networkData } = await getActiveNetworkData({ walletAccount }, client);\n\n if (!networkData?.cluster) {\n return;\n }\n\n return `solana:${networkData.cluster}`;\n};\n","import type { Wallet } from '@wallet-standard/base';\nimport type {\n SignAndSendTransactionFeature,\n SignMessageFeature,\n SignTransactionFeature,\n} from '@wallet-standard/experimental-features';\nimport type {\n StandardConnectFeature,\n StandardDisconnectFeature,\n StandardEventsFeature,\n} from '@wallet-standard/features';\n\ntype WalletStandardFeatures = {\n 'solana:signAndSendTransaction': SignAndSendTransactionFeature['experimental:signAndSendTransaction'];\n 'solana:signMessage': SignMessageFeature['experimental:signMessage'];\n 'solana:signTransaction': SignTransactionFeature['experimental:signTransaction'];\n} & StandardConnectFeature &\n Partial<StandardDisconnectFeature> &\n StandardEventsFeature;\n\nexport const getFeaturesForSolanaStandardWallet = (wallet: Wallet) => {\n return wallet.features as WalletStandardFeatures;\n};\n","import {\n type DynamicClient,\n assertWalletAccountSigningAvailability,\n} from '@dynamic-labs-sdk/client';\nimport {\n assertDefined,\n bufferToBase64,\n createWalletProviderEventEmitter,\n formatWalletProviderGroupKey,\n formatWalletProviderKey,\n getActiveNetworkIdFromLastKnownRegistry,\n switchActiveNetworkInLastKnownRegistry,\n} from '@dynamic-labs-sdk/client/core';\nimport { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\nimport { Transaction, VersionedTransaction } from '@solana/web3.js';\nimport type { Wallet as WalletStandardWallet } from '@wallet-standard/base';\nimport type { SignTransactionInput } from '@wallet-standard/experimental-features';\nimport bs58 from 'bs58';\n\nimport type { SolanaWalletProvider } from '../../../SolanaWalletProvider.types';\nimport { isVersionedTransaction } from '../../../utils/isVersionedTransaction';\nimport { getActiveNetworkCluster } from '../getActiveNetworkCluster';\nimport { getFeaturesForSolanaStandardWallet } from '../getFeaturesForSolanaStandardWallet';\n\ntype CreateWalletProviderFromSolanaStandardWalletParams = {\n dynamicClient: DynamicClient;\n walletStandardWallet: WalletStandardWallet;\n};\n\nexport const createWalletProviderFromSolanaStandardWallet = ({\n dynamicClient,\n walletStandardWallet,\n}: CreateWalletProviderFromSolanaStandardWalletParams): SolanaWalletProvider => {\n const features = getFeaturesForSolanaStandardWallet(walletStandardWallet);\n\n const walletProviderType = WalletProviderEnum.BrowserExtension;\n\n const key = formatWalletProviderKey({\n chain: 'SOL',\n displayName: walletStandardWallet.name,\n walletProviderType,\n });\n\n const connect: SolanaWalletProvider['connect'] = async () => {\n const autoConnectedAccounts = walletStandardWallet.accounts;\n\n // some wallets like Farcaster will auto inject the account into the wallet object\n // instead of returning it from the connect method\n // so we need to check for that first\n if (\n autoConnectedAccounts?.length &&\n autoConnectedAccounts[0].publicKey &&\n autoConnectedAccounts[0].address\n ) {\n return {\n addresses: [\n {\n address: autoConnectedAccounts[0].address,\n publicKey: autoConnectedAccounts[0].publicKey.toString(),\n },\n ],\n };\n }\n\n const connectMethod = features['standard:connect']?.connect;\n\n assertDefined(connectMethod, 'connect method not found in wallet features');\n\n const result = await connectMethod({ silent: false });\n\n return {\n addresses: result.accounts?.map((account) => ({\n address: account.address,\n publicKey: account.publicKey?.toString(),\n })),\n };\n };\n const disconnectFeature = features['standard:disconnect']?.disconnect;\n\n const getActiveNetworkId: SolanaWalletProvider['getActiveNetworkId'] =\n async () =>\n getActiveNetworkIdFromLastKnownRegistry({\n client: dynamicClient,\n walletProviderKey: key,\n });\n\n const getCurrentAccount = async () => {\n if (!isConnected() && connect) {\n await connect();\n }\n\n const account = walletStandardWallet.accounts?.[0];\n\n assertDefined(account, 'No connected accounts found');\n\n return account;\n };\n\n const isConnected = (): boolean => {\n return walletStandardWallet.accounts?.length > 0;\n };\n\n const getConnectedAddresses: SolanaWalletProvider['getConnectedAddresses'] =\n async () => {\n if (!isConnected() && connect) {\n await connect();\n }\n\n return {\n addresses: walletStandardWallet.accounts.map(\n (account) => account.address\n ),\n };\n };\n\n const signAllTransactions: SolanaWalletProvider['signAllTransactions'] =\n async ({ transactions, walletAccount }) => {\n const signTransactionMethod =\n features['solana:signTransaction']?.signTransaction;\n\n assertDefined(\n signTransactionMethod,\n 'signTransaction method not found in wallet features'\n );\n\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n const account = await getCurrentAccount();\n\n const chain = await getActiveNetworkCluster(\n { walletAccount },\n dynamicClient\n );\n assertDefined(chain, 'Could not get active chain for wallet account');\n\n const transactionsInput: SignTransactionInput[] = transactions.map(\n (transaction) => ({\n account,\n chain,\n transaction: transaction.serialize({\n requireAllSignatures: false,\n }) as Uint8Array<ArrayBufferLike>,\n })\n );\n\n const signTransactionResult = await signTransactionMethod(\n ...transactionsInput\n );\n\n const signedTransactions = signTransactionResult.map(\n ({ signedTransaction }, index) => {\n const inputTransaction = transactions[index];\n type T = typeof inputTransaction;\n\n if (isVersionedTransaction(inputTransaction)) {\n return VersionedTransaction.deserialize(signedTransaction) as T;\n }\n return Transaction.from(signedTransaction) as T;\n }\n );\n\n return { signedTransactions };\n };\n\n const signAndSendTransaction: SolanaWalletProvider['signAndSendTransaction'] =\n async ({ transaction, walletAccount }) => {\n await assertWalletAccountSigningAvailability(\n {\n walletAccount,\n },\n dynamicClient\n );\n\n const signAndSendTransactionMethod =\n features['solana:signAndSendTransaction']?.signAndSendTransaction;\n\n assertDefined(\n signAndSendTransactionMethod,\n 'signAndSendTransaction method not found in wallet features'\n );\n\n const account = await getCurrentAccount();\n\n const chain = await getActiveNetworkCluster(\n { walletAccount },\n dynamicClient\n );\n assertDefined(chain, 'Could not get active chain for wallet account');\n\n const signedTransactions = await signAndSendTransactionMethod({\n account,\n chain,\n transaction: transaction.serialize({\n requireAllSignatures: false,\n }) as Uint8Array<ArrayBufferLike>,\n });\n\n const [{ signature }] = signedTransactions;\n\n return { signature: bs58.encode(signature) };\n };\n\n const signMessage: SolanaWalletProvider['signMessage'] = async ({\n message,\n walletAccount,\n }) => {\n const signMessageMethod = features['solana:signMessage']?.signMessage;\n\n assertDefined(\n signMessageMethod,\n 'signMessage method not found in wallet features'\n );\n\n assertDefined(walletAccount, 'Wallet account not found');\n\n await assertWalletAccountSigningAvailability(\n {\n walletAccount,\n },\n dynamicClient\n );\n\n const encodedMessage = new TextEncoder().encode(message);\n\n const account = await getCurrentAccount();\n\n const messages = await signMessageMethod({\n account,\n message: encodedMessage,\n });\n\n return { signature: bufferToBase64(messages[0].signature) };\n };\n\n const signTransaction: SolanaWalletProvider['signTransaction'] = async ({\n transaction,\n walletAccount,\n }) => {\n const signedTransactions = await signAllTransactions({\n transactions: [transaction],\n walletAccount,\n });\n\n return { signedTransaction: signedTransactions.signedTransactions[0] };\n };\n\n const switchActiveNetwork: SolanaWalletProvider['switchActiveNetwork'] =\n async ({ networkId }) =>\n switchActiveNetworkInLastKnownRegistry({\n client: dynamicClient,\n networkId,\n walletProviderKey: key,\n });\n\n const { getEventEmitter, cleanupEventEmitter } =\n createWalletProviderEventEmitter<VoidFunction>({\n removeEventListeners: ({ setupReturnValue }) => {\n assertDefined(setupReturnValue, 'Setup return value not defined');\n\n setupReturnValue();\n },\n\n setupEventListeners: ({ handleAccountsChanged }) => {\n const eventsFeature = features['standard:events'];\n\n return eventsFeature.on('change', ({ accounts }) => {\n handleAccountsChanged({\n addresses: accounts?.map((account) => account.address) ?? [],\n });\n });\n },\n\n supportedEvents: ['accountsChanged'],\n });\n\n const terminate: SolanaWalletProvider['terminate'] = async () => {\n cleanupEventEmitter();\n };\n\n const walletProvider: SolanaWalletProvider = {\n chain: 'SOL',\n connect,\n disconnect: disconnectFeature,\n get events() {\n return getEventEmitter();\n },\n getActiveNetworkId,\n getConnectedAddresses,\n groupKey: formatWalletProviderGroupKey(walletStandardWallet.name),\n key,\n metadata: {\n displayName: walletStandardWallet.name,\n icon: walletStandardWallet.icon,\n },\n signAllTransactions,\n signAndSendTransaction,\n signMessage,\n signTransaction,\n switchActiveNetwork,\n terminate,\n walletProviderType,\n };\n\n return walletProvider;\n};\n","import type { Wallet } from '@wallet-standard/base';\n\nexport const hasAllRequiredFeatures = (wallet: Wallet): boolean => {\n return Boolean(\n wallet.features?.['standard:events'] &&\n wallet.features?.['standard:connect'] &&\n wallet.features?.['solana:signTransaction'] &&\n wallet.features?.['solana:signMessage']\n );\n};\n","import {\n WalletProviderPriority,\n getDefaultClient,\n getWalletProviderRegistry,\n hasExtension,\n registerExtension,\n} from '@dynamic-labs-sdk/client/core';\nimport { getWallets } from '@wallet-standard/app';\n\nimport { registerSolanaNetworkProviderBuilder } from '../../registerSolanaNetworkProviderBuilder';\nimport { createWalletProviderFromSolanaStandardWallet } from '../utils/createWalletProviderFromSolanaStandardWallet';\nimport { hasAllRequiredFeatures } from '../utils/hasAllRequiredFeatures';\n\nexport const SOLANA_WALLET_STANDARD_EXTENSION_KEY = 'solanaWalletStandard';\n\n/**\n * Adds the Solana Wallet Standard extension to the Dynamic client.\n *\n * This extension enables integration with wallets that implement the Solana Wallet Standard,\n * automatically detecting and registering compatible wallets for use with the Dynamic SDK.\n *\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n */\nexport const addSolanaWalletStandardExtension = (\n client = getDefaultClient()\n): void => {\n if (\n hasExtension({ extensionKey: SOLANA_WALLET_STANDARD_EXTENSION_KEY }, client)\n ) {\n return;\n }\n\n registerExtension(\n { extensionKey: SOLANA_WALLET_STANDARD_EXTENSION_KEY },\n client\n );\n\n registerSolanaNetworkProviderBuilder(client);\n\n const walletProviderRegistry = getWalletProviderRegistry(client);\n\n const walletStandardWallets = getWallets()\n .get()\n .filter(hasAllRequiredFeatures);\n\n walletStandardWallets.forEach((walletStandardWallet) => {\n const walletProvider = createWalletProviderFromSolanaStandardWallet({\n dynamicClient: client,\n walletStandardWallet,\n });\n\n walletProviderRegistry.register({\n priority: WalletProviderPriority.WALLET_SELF_ANNOUNCEMENT_STANDARD,\n walletProvider,\n });\n });\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { n as registerSolanaNetworkProviderBuilder, t as isVersionedTransaction } from "./isVersionedTransaction-B-yrMKci.esm.js";
|
|
2
|
+
import { WalletProviderPriority, assertDefined, bufferToBase64, createWalletProviderEventEmitter, formatWalletProviderGroupKey, formatWalletProviderKey, getActiveNetworkIdFromLastKnownRegistry, getDefaultClient, getWalletProviderRegistry, hasExtension, registerExtension, switchActiveNetworkInLastKnownRegistry } from "@dynamic-labs-sdk/client/core";
|
|
3
|
+
import { Transaction, VersionedTransaction } from "@solana/web3.js";
|
|
4
|
+
import { assertWalletAccountSigningAvailability, getActiveNetworkData } from "@dynamic-labs-sdk/client";
|
|
5
|
+
import { WalletProviderEnum } from "@dynamic-labs/sdk-api-core";
|
|
6
|
+
import { getWallets } from "@wallet-standard/app";
|
|
7
|
+
import bs58 from "bs58";
|
|
8
|
+
|
|
9
|
+
//#region src/walletStandard/utils/getActiveNetworkCluster/getActiveNetworkCluster.ts
|
|
10
|
+
const getActiveNetworkCluster = async ({ walletAccount }, client) => {
|
|
11
|
+
const { networkData } = await getActiveNetworkData({ walletAccount }, client);
|
|
12
|
+
if (!networkData?.cluster) return;
|
|
13
|
+
return `solana:${networkData.cluster}`;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
//#endregion
|
|
17
|
+
//#region src/walletStandard/utils/getFeaturesForSolanaStandardWallet/getFeaturesForSolanaStandardWallet.ts
|
|
18
|
+
const getFeaturesForSolanaStandardWallet = (wallet) => {
|
|
19
|
+
return wallet.features;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
//#endregion
|
|
23
|
+
//#region src/walletStandard/utils/createWalletProviderFromSolanaStandardWallet/createWalletProviderFromSolanaStandardWallet.ts
|
|
24
|
+
const createWalletProviderFromSolanaStandardWallet = ({ dynamicClient, walletStandardWallet }) => {
|
|
25
|
+
const features = getFeaturesForSolanaStandardWallet(walletStandardWallet);
|
|
26
|
+
const walletProviderType = WalletProviderEnum.BrowserExtension;
|
|
27
|
+
const key = formatWalletProviderKey({
|
|
28
|
+
chain: "SOL",
|
|
29
|
+
displayName: walletStandardWallet.name,
|
|
30
|
+
walletProviderType
|
|
31
|
+
});
|
|
32
|
+
const connect = async () => {
|
|
33
|
+
const autoConnectedAccounts = walletStandardWallet.accounts;
|
|
34
|
+
if (autoConnectedAccounts?.length && autoConnectedAccounts[0].publicKey && autoConnectedAccounts[0].address) return { addresses: [{
|
|
35
|
+
address: autoConnectedAccounts[0].address,
|
|
36
|
+
publicKey: autoConnectedAccounts[0].publicKey.toString()
|
|
37
|
+
}] };
|
|
38
|
+
const connectMethod = features["standard:connect"]?.connect;
|
|
39
|
+
assertDefined(connectMethod, "connect method not found in wallet features");
|
|
40
|
+
return { addresses: (await connectMethod({ silent: false })).accounts?.map((account) => ({
|
|
41
|
+
address: account.address,
|
|
42
|
+
publicKey: account.publicKey?.toString()
|
|
43
|
+
})) };
|
|
44
|
+
};
|
|
45
|
+
const disconnectFeature = features["standard:disconnect"]?.disconnect;
|
|
46
|
+
const getActiveNetworkId = async () => getActiveNetworkIdFromLastKnownRegistry({
|
|
47
|
+
client: dynamicClient,
|
|
48
|
+
walletProviderKey: key
|
|
49
|
+
});
|
|
50
|
+
const getCurrentAccount = async () => {
|
|
51
|
+
if (!isConnected() && connect) await connect();
|
|
52
|
+
const account = walletStandardWallet.accounts?.[0];
|
|
53
|
+
assertDefined(account, "No connected accounts found");
|
|
54
|
+
return account;
|
|
55
|
+
};
|
|
56
|
+
const isConnected = () => {
|
|
57
|
+
return walletStandardWallet.accounts?.length > 0;
|
|
58
|
+
};
|
|
59
|
+
const getConnectedAddresses = async () => {
|
|
60
|
+
if (!isConnected() && connect) await connect();
|
|
61
|
+
return { addresses: walletStandardWallet.accounts.map((account) => account.address) };
|
|
62
|
+
};
|
|
63
|
+
const signAllTransactions = async ({ transactions, walletAccount }) => {
|
|
64
|
+
const signTransactionMethod = features["solana:signTransaction"]?.signTransaction;
|
|
65
|
+
assertDefined(signTransactionMethod, "signTransaction method not found in wallet features");
|
|
66
|
+
await assertWalletAccountSigningAvailability({ walletAccount }, dynamicClient);
|
|
67
|
+
const account = await getCurrentAccount();
|
|
68
|
+
const chain = await getActiveNetworkCluster({ walletAccount }, dynamicClient);
|
|
69
|
+
assertDefined(chain, "Could not get active chain for wallet account");
|
|
70
|
+
return { signedTransactions: (await signTransactionMethod(...transactions.map((transaction) => ({
|
|
71
|
+
account,
|
|
72
|
+
chain,
|
|
73
|
+
transaction: transaction.serialize({ requireAllSignatures: false })
|
|
74
|
+
})))).map(({ signedTransaction }, index) => {
|
|
75
|
+
const inputTransaction = transactions[index];
|
|
76
|
+
if (isVersionedTransaction(inputTransaction)) return VersionedTransaction.deserialize(signedTransaction);
|
|
77
|
+
return Transaction.from(signedTransaction);
|
|
78
|
+
}) };
|
|
79
|
+
};
|
|
80
|
+
const signAndSendTransaction = async ({ transaction, walletAccount }) => {
|
|
81
|
+
await assertWalletAccountSigningAvailability({ walletAccount }, dynamicClient);
|
|
82
|
+
const signAndSendTransactionMethod = features["solana:signAndSendTransaction"]?.signAndSendTransaction;
|
|
83
|
+
assertDefined(signAndSendTransactionMethod, "signAndSendTransaction method not found in wallet features");
|
|
84
|
+
const account = await getCurrentAccount();
|
|
85
|
+
const chain = await getActiveNetworkCluster({ walletAccount }, dynamicClient);
|
|
86
|
+
assertDefined(chain, "Could not get active chain for wallet account");
|
|
87
|
+
const [{ signature }] = await signAndSendTransactionMethod({
|
|
88
|
+
account,
|
|
89
|
+
chain,
|
|
90
|
+
transaction: transaction.serialize({ requireAllSignatures: false })
|
|
91
|
+
});
|
|
92
|
+
return { signature: bs58.encode(signature) };
|
|
93
|
+
};
|
|
94
|
+
const signMessage = async ({ message, walletAccount }) => {
|
|
95
|
+
const signMessageMethod = features["solana:signMessage"]?.signMessage;
|
|
96
|
+
assertDefined(signMessageMethod, "signMessage method not found in wallet features");
|
|
97
|
+
assertDefined(walletAccount, "Wallet account not found");
|
|
98
|
+
await assertWalletAccountSigningAvailability({ walletAccount }, dynamicClient);
|
|
99
|
+
const encodedMessage = new TextEncoder().encode(message);
|
|
100
|
+
return { signature: bufferToBase64((await signMessageMethod({
|
|
101
|
+
account: await getCurrentAccount(),
|
|
102
|
+
message: encodedMessage
|
|
103
|
+
}))[0].signature) };
|
|
104
|
+
};
|
|
105
|
+
const signTransaction = async ({ transaction, walletAccount }) => {
|
|
106
|
+
return { signedTransaction: (await signAllTransactions({
|
|
107
|
+
transactions: [transaction],
|
|
108
|
+
walletAccount
|
|
109
|
+
})).signedTransactions[0] };
|
|
110
|
+
};
|
|
111
|
+
const switchActiveNetwork = async ({ networkId }) => switchActiveNetworkInLastKnownRegistry({
|
|
112
|
+
client: dynamicClient,
|
|
113
|
+
networkId,
|
|
114
|
+
walletProviderKey: key
|
|
115
|
+
});
|
|
116
|
+
const { getEventEmitter, cleanupEventEmitter } = createWalletProviderEventEmitter({
|
|
117
|
+
removeEventListeners: ({ setupReturnValue }) => {
|
|
118
|
+
assertDefined(setupReturnValue, "Setup return value not defined");
|
|
119
|
+
setupReturnValue();
|
|
120
|
+
},
|
|
121
|
+
setupEventListeners: ({ handleAccountsChanged }) => {
|
|
122
|
+
return features["standard:events"].on("change", ({ accounts }) => {
|
|
123
|
+
handleAccountsChanged({ addresses: accounts?.map((account) => account.address) ?? [] });
|
|
124
|
+
});
|
|
125
|
+
},
|
|
126
|
+
supportedEvents: ["accountsChanged"]
|
|
127
|
+
});
|
|
128
|
+
const terminate = async () => {
|
|
129
|
+
cleanupEventEmitter();
|
|
130
|
+
};
|
|
131
|
+
return {
|
|
132
|
+
chain: "SOL",
|
|
133
|
+
connect,
|
|
134
|
+
disconnect: disconnectFeature,
|
|
135
|
+
get events() {
|
|
136
|
+
return getEventEmitter();
|
|
137
|
+
},
|
|
138
|
+
getActiveNetworkId,
|
|
139
|
+
getConnectedAddresses,
|
|
140
|
+
groupKey: formatWalletProviderGroupKey(walletStandardWallet.name),
|
|
141
|
+
key,
|
|
142
|
+
metadata: {
|
|
143
|
+
displayName: walletStandardWallet.name,
|
|
144
|
+
icon: walletStandardWallet.icon
|
|
145
|
+
},
|
|
146
|
+
signAllTransactions,
|
|
147
|
+
signAndSendTransaction,
|
|
148
|
+
signMessage,
|
|
149
|
+
signTransaction,
|
|
150
|
+
switchActiveNetwork,
|
|
151
|
+
terminate,
|
|
152
|
+
walletProviderType
|
|
153
|
+
};
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
//#endregion
|
|
157
|
+
//#region src/walletStandard/utils/hasAllRequiredFeatures/hasAllRequiredFeatures.ts
|
|
158
|
+
const hasAllRequiredFeatures = (wallet) => {
|
|
159
|
+
return Boolean(wallet.features?.["standard:events"] && wallet.features?.["standard:connect"] && wallet.features?.["solana:signTransaction"] && wallet.features?.["solana:signMessage"]);
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
//#endregion
|
|
163
|
+
//#region src/walletStandard/addSolanaWalletStandardExtension/addSolanaWalletStandardExtension.ts
|
|
164
|
+
const SOLANA_WALLET_STANDARD_EXTENSION_KEY = "solanaWalletStandard";
|
|
165
|
+
/**
|
|
166
|
+
* Adds the Solana Wallet Standard extension to the Dynamic client.
|
|
167
|
+
*
|
|
168
|
+
* This extension enables integration with wallets that implement the Solana Wallet Standard,
|
|
169
|
+
* automatically detecting and registering compatible wallets for use with the Dynamic SDK.
|
|
170
|
+
*
|
|
171
|
+
* @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
|
|
172
|
+
*/
|
|
173
|
+
const addSolanaWalletStandardExtension = (client = getDefaultClient()) => {
|
|
174
|
+
if (hasExtension({ extensionKey: SOLANA_WALLET_STANDARD_EXTENSION_KEY }, client)) return;
|
|
175
|
+
registerExtension({ extensionKey: SOLANA_WALLET_STANDARD_EXTENSION_KEY }, client);
|
|
176
|
+
registerSolanaNetworkProviderBuilder(client);
|
|
177
|
+
const walletProviderRegistry = getWalletProviderRegistry(client);
|
|
178
|
+
getWallets().get().filter(hasAllRequiredFeatures).forEach((walletStandardWallet) => {
|
|
179
|
+
const walletProvider = createWalletProviderFromSolanaStandardWallet({
|
|
180
|
+
dynamicClient: client,
|
|
181
|
+
walletStandardWallet
|
|
182
|
+
});
|
|
183
|
+
walletProviderRegistry.register({
|
|
184
|
+
priority: WalletProviderPriority.WALLET_SELF_ANNOUNCEMENT_STANDARD,
|
|
185
|
+
walletProvider
|
|
186
|
+
});
|
|
187
|
+
});
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
//#endregion
|
|
191
|
+
export { addSolanaWalletStandardExtension as t };
|
|
192
|
+
//# sourceMappingURL=addSolanaWalletStandardExtension-nZhmVofg.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addSolanaWalletStandardExtension-nZhmVofg.esm.js","names":["connect: SolanaWalletProvider['connect']","getActiveNetworkId: SolanaWalletProvider['getActiveNetworkId']","getConnectedAddresses: SolanaWalletProvider['getConnectedAddresses']","signAllTransactions: SolanaWalletProvider['signAllTransactions']","signAndSendTransaction: SolanaWalletProvider['signAndSendTransaction']","signMessage: SolanaWalletProvider['signMessage']","signTransaction: SolanaWalletProvider['signTransaction']","switchActiveNetwork: SolanaWalletProvider['switchActiveNetwork']","terminate: SolanaWalletProvider['terminate']"],"sources":["../src/walletStandard/utils/getActiveNetworkCluster/getActiveNetworkCluster.ts","../src/walletStandard/utils/getFeaturesForSolanaStandardWallet/getFeaturesForSolanaStandardWallet.ts","../src/walletStandard/utils/createWalletProviderFromSolanaStandardWallet/createWalletProviderFromSolanaStandardWallet.ts","../src/walletStandard/utils/hasAllRequiredFeatures/hasAllRequiredFeatures.ts","../src/walletStandard/addSolanaWalletStandardExtension/addSolanaWalletStandardExtension.ts"],"sourcesContent":["import type { DynamicClient, WalletAccount } from '@dynamic-labs-sdk/client';\nimport { getActiveNetworkData } from '@dynamic-labs-sdk/client';\n\ntype GetActiveNetworkClusterParams = {\n walletAccount: WalletAccount;\n};\n\nexport const getActiveNetworkCluster = async (\n { walletAccount }: GetActiveNetworkClusterParams,\n client: DynamicClient\n): Promise<`solana:${string}` | undefined> => {\n const { networkData } = await getActiveNetworkData({ walletAccount }, client);\n\n if (!networkData?.cluster) {\n return;\n }\n\n return `solana:${networkData.cluster}`;\n};\n","import type { Wallet } from '@wallet-standard/base';\nimport type {\n SignAndSendTransactionFeature,\n SignMessageFeature,\n SignTransactionFeature,\n} from '@wallet-standard/experimental-features';\nimport type {\n StandardConnectFeature,\n StandardDisconnectFeature,\n StandardEventsFeature,\n} from '@wallet-standard/features';\n\ntype WalletStandardFeatures = {\n 'solana:signAndSendTransaction': SignAndSendTransactionFeature['experimental:signAndSendTransaction'];\n 'solana:signMessage': SignMessageFeature['experimental:signMessage'];\n 'solana:signTransaction': SignTransactionFeature['experimental:signTransaction'];\n} & StandardConnectFeature &\n Partial<StandardDisconnectFeature> &\n StandardEventsFeature;\n\nexport const getFeaturesForSolanaStandardWallet = (wallet: Wallet) => {\n return wallet.features as WalletStandardFeatures;\n};\n","import {\n type DynamicClient,\n assertWalletAccountSigningAvailability,\n} from '@dynamic-labs-sdk/client';\nimport {\n assertDefined,\n bufferToBase64,\n createWalletProviderEventEmitter,\n formatWalletProviderGroupKey,\n formatWalletProviderKey,\n getActiveNetworkIdFromLastKnownRegistry,\n switchActiveNetworkInLastKnownRegistry,\n} from '@dynamic-labs-sdk/client/core';\nimport { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\nimport { Transaction, VersionedTransaction } from '@solana/web3.js';\nimport type { Wallet as WalletStandardWallet } from '@wallet-standard/base';\nimport type { SignTransactionInput } from '@wallet-standard/experimental-features';\nimport bs58 from 'bs58';\n\nimport type { SolanaWalletProvider } from '../../../SolanaWalletProvider.types';\nimport { isVersionedTransaction } from '../../../utils/isVersionedTransaction';\nimport { getActiveNetworkCluster } from '../getActiveNetworkCluster';\nimport { getFeaturesForSolanaStandardWallet } from '../getFeaturesForSolanaStandardWallet';\n\ntype CreateWalletProviderFromSolanaStandardWalletParams = {\n dynamicClient: DynamicClient;\n walletStandardWallet: WalletStandardWallet;\n};\n\nexport const createWalletProviderFromSolanaStandardWallet = ({\n dynamicClient,\n walletStandardWallet,\n}: CreateWalletProviderFromSolanaStandardWalletParams): SolanaWalletProvider => {\n const features = getFeaturesForSolanaStandardWallet(walletStandardWallet);\n\n const walletProviderType = WalletProviderEnum.BrowserExtension;\n\n const key = formatWalletProviderKey({\n chain: 'SOL',\n displayName: walletStandardWallet.name,\n walletProviderType,\n });\n\n const connect: SolanaWalletProvider['connect'] = async () => {\n const autoConnectedAccounts = walletStandardWallet.accounts;\n\n // some wallets like Farcaster will auto inject the account into the wallet object\n // instead of returning it from the connect method\n // so we need to check for that first\n if (\n autoConnectedAccounts?.length &&\n autoConnectedAccounts[0].publicKey &&\n autoConnectedAccounts[0].address\n ) {\n return {\n addresses: [\n {\n address: autoConnectedAccounts[0].address,\n publicKey: autoConnectedAccounts[0].publicKey.toString(),\n },\n ],\n };\n }\n\n const connectMethod = features['standard:connect']?.connect;\n\n assertDefined(connectMethod, 'connect method not found in wallet features');\n\n const result = await connectMethod({ silent: false });\n\n return {\n addresses: result.accounts?.map((account) => ({\n address: account.address,\n publicKey: account.publicKey?.toString(),\n })),\n };\n };\n const disconnectFeature = features['standard:disconnect']?.disconnect;\n\n const getActiveNetworkId: SolanaWalletProvider['getActiveNetworkId'] =\n async () =>\n getActiveNetworkIdFromLastKnownRegistry({\n client: dynamicClient,\n walletProviderKey: key,\n });\n\n const getCurrentAccount = async () => {\n if (!isConnected() && connect) {\n await connect();\n }\n\n const account = walletStandardWallet.accounts?.[0];\n\n assertDefined(account, 'No connected accounts found');\n\n return account;\n };\n\n const isConnected = (): boolean => {\n return walletStandardWallet.accounts?.length > 0;\n };\n\n const getConnectedAddresses: SolanaWalletProvider['getConnectedAddresses'] =\n async () => {\n if (!isConnected() && connect) {\n await connect();\n }\n\n return {\n addresses: walletStandardWallet.accounts.map(\n (account) => account.address\n ),\n };\n };\n\n const signAllTransactions: SolanaWalletProvider['signAllTransactions'] =\n async ({ transactions, walletAccount }) => {\n const signTransactionMethod =\n features['solana:signTransaction']?.signTransaction;\n\n assertDefined(\n signTransactionMethod,\n 'signTransaction method not found in wallet features'\n );\n\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n const account = await getCurrentAccount();\n\n const chain = await getActiveNetworkCluster(\n { walletAccount },\n dynamicClient\n );\n assertDefined(chain, 'Could not get active chain for wallet account');\n\n const transactionsInput: SignTransactionInput[] = transactions.map(\n (transaction) => ({\n account,\n chain,\n transaction: transaction.serialize({\n requireAllSignatures: false,\n }) as Uint8Array<ArrayBufferLike>,\n })\n );\n\n const signTransactionResult = await signTransactionMethod(\n ...transactionsInput\n );\n\n const signedTransactions = signTransactionResult.map(\n ({ signedTransaction }, index) => {\n const inputTransaction = transactions[index];\n type T = typeof inputTransaction;\n\n if (isVersionedTransaction(inputTransaction)) {\n return VersionedTransaction.deserialize(signedTransaction) as T;\n }\n return Transaction.from(signedTransaction) as T;\n }\n );\n\n return { signedTransactions };\n };\n\n const signAndSendTransaction: SolanaWalletProvider['signAndSendTransaction'] =\n async ({ transaction, walletAccount }) => {\n await assertWalletAccountSigningAvailability(\n {\n walletAccount,\n },\n dynamicClient\n );\n\n const signAndSendTransactionMethod =\n features['solana:signAndSendTransaction']?.signAndSendTransaction;\n\n assertDefined(\n signAndSendTransactionMethod,\n 'signAndSendTransaction method not found in wallet features'\n );\n\n const account = await getCurrentAccount();\n\n const chain = await getActiveNetworkCluster(\n { walletAccount },\n dynamicClient\n );\n assertDefined(chain, 'Could not get active chain for wallet account');\n\n const signedTransactions = await signAndSendTransactionMethod({\n account,\n chain,\n transaction: transaction.serialize({\n requireAllSignatures: false,\n }) as Uint8Array<ArrayBufferLike>,\n });\n\n const [{ signature }] = signedTransactions;\n\n return { signature: bs58.encode(signature) };\n };\n\n const signMessage: SolanaWalletProvider['signMessage'] = async ({\n message,\n walletAccount,\n }) => {\n const signMessageMethod = features['solana:signMessage']?.signMessage;\n\n assertDefined(\n signMessageMethod,\n 'signMessage method not found in wallet features'\n );\n\n assertDefined(walletAccount, 'Wallet account not found');\n\n await assertWalletAccountSigningAvailability(\n {\n walletAccount,\n },\n dynamicClient\n );\n\n const encodedMessage = new TextEncoder().encode(message);\n\n const account = await getCurrentAccount();\n\n const messages = await signMessageMethod({\n account,\n message: encodedMessage,\n });\n\n return { signature: bufferToBase64(messages[0].signature) };\n };\n\n const signTransaction: SolanaWalletProvider['signTransaction'] = async ({\n transaction,\n walletAccount,\n }) => {\n const signedTransactions = await signAllTransactions({\n transactions: [transaction],\n walletAccount,\n });\n\n return { signedTransaction: signedTransactions.signedTransactions[0] };\n };\n\n const switchActiveNetwork: SolanaWalletProvider['switchActiveNetwork'] =\n async ({ networkId }) =>\n switchActiveNetworkInLastKnownRegistry({\n client: dynamicClient,\n networkId,\n walletProviderKey: key,\n });\n\n const { getEventEmitter, cleanupEventEmitter } =\n createWalletProviderEventEmitter<VoidFunction>({\n removeEventListeners: ({ setupReturnValue }) => {\n assertDefined(setupReturnValue, 'Setup return value not defined');\n\n setupReturnValue();\n },\n\n setupEventListeners: ({ handleAccountsChanged }) => {\n const eventsFeature = features['standard:events'];\n\n return eventsFeature.on('change', ({ accounts }) => {\n handleAccountsChanged({\n addresses: accounts?.map((account) => account.address) ?? [],\n });\n });\n },\n\n supportedEvents: ['accountsChanged'],\n });\n\n const terminate: SolanaWalletProvider['terminate'] = async () => {\n cleanupEventEmitter();\n };\n\n const walletProvider: SolanaWalletProvider = {\n chain: 'SOL',\n connect,\n disconnect: disconnectFeature,\n get events() {\n return getEventEmitter();\n },\n getActiveNetworkId,\n getConnectedAddresses,\n groupKey: formatWalletProviderGroupKey(walletStandardWallet.name),\n key,\n metadata: {\n displayName: walletStandardWallet.name,\n icon: walletStandardWallet.icon,\n },\n signAllTransactions,\n signAndSendTransaction,\n signMessage,\n signTransaction,\n switchActiveNetwork,\n terminate,\n walletProviderType,\n };\n\n return walletProvider;\n};\n","import type { Wallet } from '@wallet-standard/base';\n\nexport const hasAllRequiredFeatures = (wallet: Wallet): boolean => {\n return Boolean(\n wallet.features?.['standard:events'] &&\n wallet.features?.['standard:connect'] &&\n wallet.features?.['solana:signTransaction'] &&\n wallet.features?.['solana:signMessage']\n );\n};\n","import {\n WalletProviderPriority,\n getDefaultClient,\n getWalletProviderRegistry,\n hasExtension,\n registerExtension,\n} from '@dynamic-labs-sdk/client/core';\nimport { getWallets } from '@wallet-standard/app';\n\nimport { registerSolanaNetworkProviderBuilder } from '../../registerSolanaNetworkProviderBuilder';\nimport { createWalletProviderFromSolanaStandardWallet } from '../utils/createWalletProviderFromSolanaStandardWallet';\nimport { hasAllRequiredFeatures } from '../utils/hasAllRequiredFeatures';\n\nexport const SOLANA_WALLET_STANDARD_EXTENSION_KEY = 'solanaWalletStandard';\n\n/**\n * Adds the Solana Wallet Standard extension to the Dynamic client.\n *\n * This extension enables integration with wallets that implement the Solana Wallet Standard,\n * automatically detecting and registering compatible wallets for use with the Dynamic SDK.\n *\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n */\nexport const addSolanaWalletStandardExtension = (\n client = getDefaultClient()\n): void => {\n if (\n hasExtension({ extensionKey: SOLANA_WALLET_STANDARD_EXTENSION_KEY }, client)\n ) {\n return;\n }\n\n registerExtension(\n { extensionKey: SOLANA_WALLET_STANDARD_EXTENSION_KEY },\n client\n );\n\n registerSolanaNetworkProviderBuilder(client);\n\n const walletProviderRegistry = getWalletProviderRegistry(client);\n\n const walletStandardWallets = getWallets()\n .get()\n .filter(hasAllRequiredFeatures);\n\n walletStandardWallets.forEach((walletStandardWallet) => {\n const walletProvider = createWalletProviderFromSolanaStandardWallet({\n dynamicClient: client,\n walletStandardWallet,\n });\n\n walletProviderRegistry.register({\n priority: WalletProviderPriority.WALLET_SELF_ANNOUNCEMENT_STANDARD,\n walletProvider,\n });\n });\n};\n"],"mappings":"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"}
|