@solana-mobile/wallet-adapter-mobile 2.2.8 → 2.2.9
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/lib/cjs/index.browser.js +4 -8
- package/lib/cjs/index.browser.js.map +1 -1
- package/lib/cjs/index.js +4 -8
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/index.native.js +4 -4
- package/lib/cjs/index.native.js.map +1 -1
- package/lib/esm/index.browser.js +4 -8
- package/lib/esm/index.browser.js.map +1 -1
- package/lib/esm/index.js +4 -8
- package/lib/esm/index.js.map +1 -1
- package/lib/types/index.d.ts.map +1 -1
- package/package.json +4 -6
package/lib/cjs/index.browser.js
CHANGED
|
@@ -2,13 +2,9 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
2
2
|
let _solana_wallet_adapter_base = require("@solana/wallet-adapter-base");
|
|
3
3
|
let _solana_wallet_standard_features = require("@solana/wallet-standard-features");
|
|
4
4
|
let _solana_web3_js = require("@solana/web3.js");
|
|
5
|
+
let _solana_mobile_mobile_wallet_adapter_protocol_encoding = require("@solana-mobile/mobile-wallet-adapter-protocol/encoding");
|
|
5
6
|
let _solana_mobile_wallet_standard_mobile = require("@solana-mobile/wallet-standard-mobile");
|
|
6
7
|
let _wallet_standard_core = require("@wallet-standard/core");
|
|
7
|
-
//#region src/base64Utils.ts
|
|
8
|
-
function fromUint8Array(byteArray) {
|
|
9
|
-
return window.btoa(String.fromCharCode.call(null, ...byteArray));
|
|
10
|
-
}
|
|
11
|
-
//#endregion
|
|
12
8
|
//#region src/getIsSupported.ts
|
|
13
9
|
function getIsSupported() {
|
|
14
10
|
return typeof window !== "undefined" && window.isSecureContext && typeof document !== "undefined" && /android/i.test(navigator.userAgent);
|
|
@@ -57,8 +53,8 @@ var BaseSolanaMobileWalletAdapter = class extends _solana_wallet_adapter_base.Ba
|
|
|
57
53
|
constructor(wallet, config) {
|
|
58
54
|
super();
|
|
59
55
|
this.#accountSelector = async (accounts) => {
|
|
60
|
-
const selectedBase64EncodedAddress = await config.addressSelector.select(accounts.map(({ publicKey }) =>
|
|
61
|
-
return accounts.find(({ publicKey }) =>
|
|
56
|
+
const selectedBase64EncodedAddress = await config.addressSelector.select(accounts.map(({ publicKey }) => (0, _solana_mobile_mobile_wallet_adapter_protocol_encoding.base64FromUint8Array)(new Uint8Array(publicKey))));
|
|
57
|
+
return accounts.find(({ publicKey }) => (0, _solana_mobile_mobile_wallet_adapter_protocol_encoding.base64FromUint8Array)(new Uint8Array(publicKey)) === selectedBase64EncodedAddress) ?? accounts[0];
|
|
62
58
|
};
|
|
63
59
|
this.#wallet = wallet;
|
|
64
60
|
this.#wallet.features[_wallet_standard_core.StandardEvents].on("change", this.#handleChangeEvent);
|
|
@@ -201,7 +197,7 @@ var BaseSolanaMobileWalletAdapter = class extends _solana_wallet_adapter_base.Ba
|
|
|
201
197
|
maxRetries: options.maxRetries
|
|
202
198
|
} : void 0
|
|
203
199
|
})).map((output) => {
|
|
204
|
-
return
|
|
200
|
+
return (0, _solana_mobile_mobile_wallet_adapter_protocol_encoding.base64FromUint8Array)(output.signature);
|
|
205
201
|
});
|
|
206
202
|
return signature;
|
|
207
203
|
} else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.browser.js","names":["WalletStandardWalletName","WalletStandardRemoteWalletName","BaseSignInMessageSignerWalletAdapter","WalletReadyState","#declareWalletAsInstalled","#accountSelector","#selectedAccount","#publicKey","#wallet","StandardEvents","#handleChangeEvent","PublicKey","WalletPublicKeyError","#connecting","#readyState","#connect","#runWithGuard","WalletNotReadyError","StandardConnect","WalletConnectionError","SolanaSignIn","StandardDisconnect","#assertIsAuthorized","SolanaSignMessage","WalletSignMessageError","SolanaSignAndSendTransaction","#performSignTransactions","WalletSendTransactionError","WalletNotConnectedError","SolanaSignTransaction","VersionedMessage","Transaction","VersionedTransaction","WalletSignTransactionError","WalletError","LocalSolanaMobileWalletAdapterWallet","RemoteSolanaMobileWalletAdapterWallet"],"sources":["../../src/base64Utils.ts","../../src/getIsSupported.ts","../../src/adapter.ts","../../src/createDefaultAddressSelector.ts","../../src/createDefaultAuthorizationResultCache.ts","../../src/createDefaultWalletNotFoundHandler.ts"],"sourcesContent":["export function fromUint8Array(byteArray: Uint8Array): string {\n return window.btoa(String.fromCharCode.call(null, ...byteArray));\n}\n\nexport function toUint8Array(base64EncodedByteArray: string): Uint8Array {\n return new Uint8Array(\n window\n .atob(base64EncodedByteArray)\n .split('')\n .map((c) => c.charCodeAt(0)),\n );\n}\n","export default function getIsSupported() {\n return (\n typeof window !== 'undefined' &&\n window.isSecureContext &&\n typeof document !== 'undefined' &&\n /android/i.test(navigator.userAgent)\n );\n}\n","import {\n BaseSignInMessageSignerWalletAdapter,\n WalletConnectionError,\n WalletError,\n WalletName,\n WalletNotConnectedError,\n WalletNotReadyError,\n WalletPublicKeyError,\n WalletReadyState,\n WalletSendTransactionError,\n WalletSignMessageError,\n WalletSignTransactionError,\n} from '@solana/wallet-adapter-base';\nimport {\n SolanaSignAndSendTransaction,\n SolanaSignIn,\n SolanaSignInInput,\n SolanaSignInOutput,\n SolanaSignMessage,\n SolanaSignTransaction,\n SolanaSignTransactionOutput,\n} from '@solana/wallet-standard-features';\nimport {\n Connection,\n PublicKey,\n SendOptions,\n Transaction as LegacyTransaction,\n Transaction,\n TransactionSignature,\n TransactionVersion,\n VersionedMessage,\n VersionedTransaction,\n} from '@solana/web3.js';\nimport {\n AppIdentity,\n AuthorizationResult,\n Base64EncodedAddress,\n Chain,\n Cluster,\n Finality,\n SignInPayload,\n} from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport {\n Authorization,\n createDefaultChainSelector,\n LocalSolanaMobileWalletAdapterWallet,\n RemoteSolanaMobileWalletAdapterWallet,\n SolanaMobileWalletAdapterRemoteWalletName as WalletStandardRemoteWalletName,\n SolanaMobileWalletAdapterWalletName as WalletStandardWalletName,\n} from '@solana-mobile/wallet-standard-mobile';\nimport {\n IdentifierString,\n StandardConnect,\n StandardDisconnect,\n StandardEvents,\n StandardEventsChangeProperties,\n WalletAccount,\n} from '@wallet-standard/core';\n\nimport { fromUint8Array } from './base64Utils.js';\nimport getIsSupported from './getIsSupported.js';\n\nexport interface AuthorizationResultCache {\n clear(): Promise<void>;\n get(): Promise<AuthorizationResult | Authorization | undefined>;\n set(authorizationResult: AuthorizationResult | Authorization): Promise<void>;\n}\n\nexport interface AddressSelector {\n select(addresses: Base64EncodedAddress[]): Promise<Base64EncodedAddress>;\n}\n\nexport const SolanaMobileWalletAdapterWalletName = WalletStandardWalletName as WalletName;\nexport const SolanaMobileWalletAdapterRemoteWalletName = WalletStandardRemoteWalletName as WalletName;\n\nconst SIGNATURE_LENGTH_IN_BYTES = 64;\n\nfunction isVersionedTransaction(\n transaction: LegacyTransaction | VersionedTransaction,\n): transaction is VersionedTransaction {\n return 'version' in transaction;\n}\n\nfunction chainOrClusterToChainId(chain: Cluster | Chain): IdentifierString {\n switch (chain) {\n case 'mainnet-beta':\n return 'solana:mainnet';\n case 'testnet':\n return 'solana:testnet';\n case 'devnet':\n return 'solana:devnet';\n default:\n return chain;\n }\n}\n\nfunction getErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : 'Unknown error';\n}\n\nabstract class BaseSolanaMobileWalletAdapter extends BaseSignInMessageSignerWalletAdapter {\n readonly supportedTransactionVersions: Set<TransactionVersion> = new Set(\n // FIXME(#244): We can't actually know what versions are supported until we know which wallet we're talking to.\n ['legacy', 0],\n );\n name;\n icon;\n url;\n #wallet: LocalSolanaMobileWalletAdapterWallet | RemoteSolanaMobileWalletAdapterWallet;\n #connecting = false;\n #readyState: WalletReadyState = getIsSupported() ? WalletReadyState.Loadable : WalletReadyState.Unsupported;\n #accountSelector: (accounts: readonly WalletAccount[]) => Promise<WalletAccount>;\n #selectedAccount: WalletAccount | undefined;\n #publicKey: PublicKey | undefined;\n\n #handleChangeEvent = async (properties: StandardEventsChangeProperties) => {\n if (properties.accounts && properties.accounts.length > 0) {\n this.#declareWalletAsInstalled();\n const nextSelectedAccount = await this.#accountSelector(properties.accounts);\n if (nextSelectedAccount !== this.#selectedAccount) {\n this.#selectedAccount = nextSelectedAccount;\n this.#publicKey = undefined;\n this.emit(\n 'connect',\n // Having just set `this.#selectedAccount`, `this.publicKey` is definitely non-null\n\n this.publicKey!,\n );\n }\n }\n };\n\n protected constructor(\n wallet: LocalSolanaMobileWalletAdapterWallet | RemoteSolanaMobileWalletAdapterWallet,\n config: {\n addressSelector: AddressSelector;\n chain: Chain;\n },\n ) {\n super();\n // this.#chain = chainOrClusterToChainId(config.chain);\n this.#accountSelector = async (accounts: readonly WalletAccount[]) => {\n const selectedBase64EncodedAddress = await config.addressSelector.select(\n accounts.map(({ publicKey }) => fromUint8Array(new Uint8Array(publicKey))),\n );\n return (\n accounts.find(\n ({ publicKey }) => fromUint8Array(new Uint8Array(publicKey)) === selectedBase64EncodedAddress,\n ) ?? accounts[0]\n );\n };\n this.#wallet = wallet;\n this.#wallet.features[StandardEvents].on('change', this.#handleChangeEvent);\n this.name = this.#wallet.name as WalletName;\n this.icon = this.#wallet.icon;\n this.url = this.#wallet.url;\n // TODO: evaluate if this logic should be kept - it seems to create a nasty bug where\n // the wallet tries to auto connect on page load and gets blocked by the popup blocker\n // if (this.#readyState !== WalletReadyState.Unsupported) {\n // config.authorizationResultCache.get().then((authorizationResult) => {\n // if (authorizationResult) {\n // // Having a prior authorization result is, right now, the best\n // // indication that a mobile wallet is installed. There is no API\n // // we can use to test for whether the association URI is supported.\n // this.#declareWalletAsInstalled();\n // }\n // });\n // }\n }\n\n get publicKey(): PublicKey | null {\n if (!this.#publicKey && this.#selectedAccount) {\n try {\n this.#publicKey = new PublicKey(this.#selectedAccount.publicKey);\n } catch (e) {\n throw new WalletPublicKeyError((e instanceof Error && e?.message) || 'Unknown error', e);\n }\n }\n return this.#publicKey ?? null;\n }\n\n get connected(): boolean {\n return this.#wallet.connected;\n }\n\n get connecting(): boolean {\n return this.#connecting;\n }\n\n get readyState(): WalletReadyState {\n return this.#readyState;\n }\n\n /** @deprecated Use `autoConnect()` instead. */\n async autoConnect_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(): Promise<void> {\n return await this.autoConnect();\n }\n\n async autoConnect(): Promise<void> {\n this.#connect(true);\n }\n\n async connect(): Promise<void> {\n this.#connect();\n }\n\n async #connect(autoConnect: boolean = false): Promise<void> {\n if (this.connecting || this.connected) {\n return;\n }\n return await this.#runWithGuard(async () => {\n if (this.#readyState !== WalletReadyState.Installed && this.#readyState !== WalletReadyState.Loadable) {\n throw new WalletNotReadyError();\n }\n this.#connecting = true;\n try {\n await this.#wallet.features[StandardConnect].connect({ silent: autoConnect });\n } catch (e) {\n throw new WalletConnectionError((e instanceof Error && e.message) || 'Unknown error', e);\n } finally {\n this.#connecting = false;\n }\n });\n }\n\n /** @deprecated Use `connect()` or `autoConnect()` instead. */\n async performAuthorization(signInPayload?: SignInPayload): Promise<AuthorizationResult> {\n try {\n const cachedAuthorizationResult = await this.#wallet.cachedAuthorizationResult;\n if (cachedAuthorizationResult) {\n await this.#wallet.features[StandardConnect].connect({ silent: true });\n return cachedAuthorizationResult;\n }\n\n if (signInPayload) {\n await this.#wallet.features[SolanaSignIn].signIn(signInPayload);\n } else await this.#wallet.features[StandardConnect].connect();\n const authorizationResult = await await this.#wallet.cachedAuthorizationResult;\n return authorizationResult!;\n } catch (e) {\n throw new WalletConnectionError((e instanceof Error && e.message) || 'Unknown error', e);\n }\n }\n\n async disconnect(): Promise<void> {\n // return await this.#runWithGuard(this.#wallet.features[StandardDisconnect].disconnect);\n return await this.#runWithGuard(async () => {\n this.#connecting = false;\n this.#publicKey = undefined;\n this.#selectedAccount = undefined;\n await this.#wallet.features[StandardDisconnect].disconnect();\n this.emit('disconnect');\n });\n }\n\n async signIn(input?: SolanaSignInInput): Promise<SolanaSignInOutput> {\n return this.#runWithGuard(async () => {\n if (this.#readyState !== WalletReadyState.Installed && this.#readyState !== WalletReadyState.Loadable) {\n throw new WalletNotReadyError();\n }\n this.#connecting = true;\n try {\n const outputs = await this.#wallet.features[SolanaSignIn].signIn({\n ...input,\n domain: input?.domain ?? window.location.host,\n });\n if (outputs.length > 0) {\n return outputs[0];\n } else {\n throw new Error('Sign in failed, no sign in result returned by wallet');\n }\n } catch (e) {\n throw new WalletConnectionError((e instanceof Error && e.message) || 'Unknown error', e);\n } finally {\n this.#connecting = false;\n }\n });\n }\n\n async signMessage(message: Uint8Array): Promise<Uint8Array> {\n return await this.#runWithGuard(async () => {\n const account = this.#assertIsAuthorized();\n try {\n const outputs = await this.#wallet.features[SolanaSignMessage].signMessage({\n account,\n message: message,\n });\n return outputs[0].signature;\n } catch (error: unknown) {\n throw new WalletSignMessageError(getErrorMessage(error), error);\n }\n });\n }\n\n async sendTransaction<T extends LegacyTransaction | VersionedTransaction>(\n transaction: T,\n connection: Connection,\n options?: SendOptions,\n ): Promise<TransactionSignature> {\n return await this.#runWithGuard(async () => {\n const account = this.#assertIsAuthorized();\n try {\n function getTargetCommitment() {\n let targetCommitment: Finality;\n switch (connection.commitment) {\n case 'confirmed':\n case 'finalized':\n case 'processed':\n targetCommitment = connection.commitment;\n break;\n default:\n targetCommitment = 'finalized';\n }\n let targetPreflightCommitment: Finality;\n switch (options?.preflightCommitment) {\n case 'confirmed':\n case 'finalized':\n case 'processed':\n targetPreflightCommitment = options.preflightCommitment;\n break;\n case undefined:\n targetPreflightCommitment = targetCommitment;\n break;\n default:\n targetPreflightCommitment = 'finalized';\n }\n const preflightCommitmentScore =\n targetPreflightCommitment === 'finalized'\n ? 2\n : targetPreflightCommitment === 'confirmed'\n ? 1\n : 0;\n const targetCommitmentScore =\n targetCommitment === 'finalized' ? 2 : targetCommitment === 'confirmed' ? 1 : 0;\n return preflightCommitmentScore < targetCommitmentScore\n ? targetPreflightCommitment\n : targetCommitment;\n }\n if (SolanaSignAndSendTransaction in this.#wallet.features) {\n const chain = chainOrClusterToChainId(this.#wallet.currentAuthorization!.chain);\n const [signature] = (\n await this.#wallet.features[SolanaSignAndSendTransaction].signAndSendTransaction({\n account,\n transaction: transaction.serialize(),\n chain: chain,\n options: options\n ? {\n skipPreflight: options.skipPreflight,\n maxRetries: options.maxRetries,\n }\n : undefined,\n })\n ).map((output) => {\n return fromUint8Array(output.signature);\n });\n\n return signature;\n } else {\n const [signedTransaction] = await this.#performSignTransactions([transaction]);\n if (isVersionedTransaction(signedTransaction)) {\n return await connection.sendTransaction(signedTransaction);\n } else {\n const serializedTransaction = signedTransaction.serialize();\n return await connection.sendRawTransaction(serializedTransaction, {\n ...options,\n preflightCommitment: getTargetCommitment(),\n });\n }\n }\n } catch (error: unknown) {\n throw new WalletSendTransactionError(getErrorMessage(error), error);\n }\n });\n }\n\n async signTransaction<T extends LegacyTransaction | VersionedTransaction>(transaction: T): Promise<T> {\n return await this.#runWithGuard(async () => {\n const [signedTransaction] = await this.#performSignTransactions([transaction]);\n return signedTransaction;\n });\n }\n\n async signAllTransactions<T extends LegacyTransaction | VersionedTransaction>(transactions: T[]): Promise<T[]> {\n return await this.#runWithGuard(async () => {\n const signedTransactions = await this.#performSignTransactions(transactions);\n return signedTransactions;\n });\n }\n\n #declareWalletAsInstalled(): void {\n if (this.#readyState !== WalletReadyState.Installed) {\n this.emit('readyStateChange', (this.#readyState = WalletReadyState.Installed));\n }\n }\n\n #assertIsAuthorized() {\n if (!this.#wallet.isAuthorized || !this.#selectedAccount) throw new WalletNotConnectedError();\n return this.#selectedAccount;\n }\n\n async #performSignTransactions<T extends LegacyTransaction | VersionedTransaction>(\n transactions: T[],\n ): Promise<T[]> {\n const account = this.#assertIsAuthorized();\n try {\n if (SolanaSignTransaction in this.#wallet.features) {\n return this.#wallet.features[SolanaSignTransaction].signTransaction(\n ...transactions.map((value) => {\n return { account, transaction: value.serialize() };\n }),\n ).then((outputs) => {\n return outputs.map((output: SolanaSignTransactionOutput) => {\n const byteArray = output.signedTransaction;\n const numSignatures = byteArray[0];\n const messageOffset = numSignatures * SIGNATURE_LENGTH_IN_BYTES + 1;\n const version = VersionedMessage.deserializeMessageVersion(\n byteArray.slice(messageOffset, byteArray.length),\n );\n if (version === 'legacy') {\n return Transaction.from(byteArray) as T;\n } else {\n return VersionedTransaction.deserialize(byteArray) as T;\n }\n });\n });\n } else {\n throw new Error('Connected wallet does not support signing transactions');\n }\n } catch (error: unknown) {\n throw new WalletSignTransactionError(getErrorMessage(error), error);\n }\n }\n\n async #runWithGuard<TReturn>(callback: () => Promise<TReturn>) {\n try {\n return await callback();\n } catch (e: unknown) {\n this.emit('error', e instanceof WalletError ? e : new WalletError(getErrorMessage(e), e));\n throw e;\n }\n }\n}\n\nexport class LocalSolanaMobileWalletAdapter extends BaseSolanaMobileWalletAdapter {\n /**\n * @deprecated @param cluster config paramter is deprecated, use @param chain instead\n */\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n cluster: Cluster;\n onWalletNotFound: (mobileWalletAdapter: LocalSolanaMobileWalletAdapter) => Promise<void>;\n });\n\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n chain: Chain;\n onWalletNotFound: (mobileWalletAdapter: LocalSolanaMobileWalletAdapter) => Promise<void>;\n });\n\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n chain: Chain;\n cluster: Cluster;\n onWalletNotFound: (mobileWalletAdapter: LocalSolanaMobileWalletAdapter) => Promise<void>;\n }) {\n const chain = chainOrClusterToChainId(config.chain ?? config.cluster);\n super(\n new LocalSolanaMobileWalletAdapterWallet({\n appIdentity: config.appIdentity,\n authorizationCache: {\n set: config.authorizationResultCache.set,\n get: async () => {\n return (await config.authorizationResultCache.get()) as Authorization | undefined;\n },\n clear: config.authorizationResultCache.clear,\n },\n chains: [chain],\n chainSelector: createDefaultChainSelector(),\n onWalletNotFound: async () => {\n config.onWalletNotFound(this);\n },\n }),\n {\n addressSelector: config.addressSelector,\n chain: chain,\n },\n );\n }\n}\n\nexport class RemoteSolanaMobileWalletAdapter extends BaseSolanaMobileWalletAdapter {\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n chain: Chain;\n remoteHostAuthority: string;\n onWalletNotFound: (mobileWalletAdapter: RemoteSolanaMobileWalletAdapter) => Promise<void>;\n }) {\n const chain = chainOrClusterToChainId(config.chain);\n super(\n new RemoteSolanaMobileWalletAdapterWallet({\n appIdentity: config.appIdentity,\n authorizationCache: {\n set: config.authorizationResultCache.set,\n get: async () => {\n return (await config.authorizationResultCache.get()) as Authorization | undefined;\n },\n clear: config.authorizationResultCache.clear,\n },\n chains: [chain],\n chainSelector: createDefaultChainSelector(),\n remoteHostAuthority: config.remoteHostAuthority,\n onWalletNotFound: async () => {\n config.onWalletNotFound(this);\n },\n }),\n {\n addressSelector: config.addressSelector,\n chain: chain,\n },\n );\n }\n}\n\nexport class SolanaMobileWalletAdapter extends LocalSolanaMobileWalletAdapter {}\n","import { AddressSelector } from './adapter.js';\n\nexport default function createDefaultAddressSelector(): AddressSelector {\n return {\n async select(addresses) {\n return addresses[0];\n },\n };\n}\n","import { createDefaultAuthorizationCache as baseCreateDefaultAuthorizationCache } from '@solana-mobile/wallet-standard-mobile';\n\nimport { AuthorizationResultCache } from './adapter.js';\n\nexport default function createDefaultAuthorizationResultCache(): AuthorizationResultCache {\n return baseCreateDefaultAuthorizationCache();\n}\n","import { defaultErrorModalWalletNotFoundHandler } from '@solana-mobile/wallet-standard-mobile';\n\nimport { SolanaMobileWalletAdapter } from './adapter.js';\n\nasync function defaultWalletNotFoundHandler(_mobileWalletAdapter: SolanaMobileWalletAdapter) {\n return defaultErrorModalWalletNotFoundHandler();\n}\n\nexport default function createDefaultWalletNotFoundHandler(): (\n mobileWalletAdapter: SolanaMobileWalletAdapter,\n) => Promise<void> {\n return defaultWalletNotFoundHandler;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.browser.js","names":["WalletStandardWalletName","WalletStandardRemoteWalletName","BaseSignInMessageSignerWalletAdapter","WalletReadyState","#declareWalletAsInstalled","#accountSelector","#selectedAccount","#publicKey","#wallet","StandardEvents","#handleChangeEvent","PublicKey","WalletPublicKeyError","#connecting","#readyState","#connect","#runWithGuard","WalletNotReadyError","StandardConnect","WalletConnectionError","SolanaSignIn","StandardDisconnect","#assertIsAuthorized","SolanaSignMessage","WalletSignMessageError","SolanaSignAndSendTransaction","#performSignTransactions","WalletSendTransactionError","WalletNotConnectedError","SolanaSignTransaction","VersionedMessage","Transaction","VersionedTransaction","WalletSignTransactionError","WalletError","LocalSolanaMobileWalletAdapterWallet","RemoteSolanaMobileWalletAdapterWallet"],"sources":["../../src/getIsSupported.ts","../../src/adapter.ts","../../src/createDefaultAddressSelector.ts","../../src/createDefaultAuthorizationResultCache.ts","../../src/createDefaultWalletNotFoundHandler.ts"],"sourcesContent":["export function getIsSupported() {\n return (\n typeof window !== 'undefined' &&\n window.isSecureContext &&\n typeof document !== 'undefined' &&\n /android/i.test(navigator.userAgent)\n );\n}\n\n/**\n * @deprecated Use {@link getIsSupported} instead.\n */\nexport default getIsSupported;\n","import {\n BaseSignInMessageSignerWalletAdapter,\n WalletConnectionError,\n WalletError,\n WalletName,\n WalletNotConnectedError,\n WalletNotReadyError,\n WalletPublicKeyError,\n WalletReadyState,\n WalletSendTransactionError,\n WalletSignMessageError,\n WalletSignTransactionError,\n} from '@solana/wallet-adapter-base';\nimport {\n SolanaSignAndSendTransaction,\n SolanaSignIn,\n SolanaSignInInput,\n SolanaSignInOutput,\n SolanaSignMessage,\n SolanaSignTransaction,\n SolanaSignTransactionOutput,\n} from '@solana/wallet-standard-features';\nimport {\n Connection,\n PublicKey,\n SendOptions,\n Transaction as LegacyTransaction,\n Transaction,\n TransactionSignature,\n TransactionVersion,\n VersionedMessage,\n VersionedTransaction,\n} from '@solana/web3.js';\nimport {\n AppIdentity,\n AuthorizationResult,\n Base64EncodedAddress,\n Chain,\n Cluster,\n Finality,\n SignInPayload,\n} from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { base64FromUint8Array } from '@solana-mobile/mobile-wallet-adapter-protocol/encoding';\nimport {\n Authorization,\n createDefaultChainSelector,\n LocalSolanaMobileWalletAdapterWallet,\n RemoteSolanaMobileWalletAdapterWallet,\n SolanaMobileWalletAdapterRemoteWalletName as WalletStandardRemoteWalletName,\n SolanaMobileWalletAdapterWalletName as WalletStandardWalletName,\n} from '@solana-mobile/wallet-standard-mobile';\nimport {\n IdentifierString,\n StandardConnect,\n StandardDisconnect,\n StandardEvents,\n StandardEventsChangeProperties,\n WalletAccount,\n} from '@wallet-standard/core';\n\nimport { getIsSupported } from './getIsSupported.js';\n\nexport interface AuthorizationResultCache {\n clear(): Promise<void>;\n get(): Promise<AuthorizationResult | Authorization | undefined>;\n set(authorizationResult: AuthorizationResult | Authorization): Promise<void>;\n}\n\nexport interface AddressSelector {\n select(addresses: Base64EncodedAddress[]): Promise<Base64EncodedAddress>;\n}\n\nexport const SolanaMobileWalletAdapterWalletName = WalletStandardWalletName as WalletName;\nexport const SolanaMobileWalletAdapterRemoteWalletName = WalletStandardRemoteWalletName as WalletName;\n\nconst SIGNATURE_LENGTH_IN_BYTES = 64;\n\nfunction isVersionedTransaction(\n transaction: LegacyTransaction | VersionedTransaction,\n): transaction is VersionedTransaction {\n return 'version' in transaction;\n}\n\nfunction chainOrClusterToChainId(chain: Cluster | Chain): IdentifierString {\n switch (chain) {\n case 'mainnet-beta':\n return 'solana:mainnet';\n case 'testnet':\n return 'solana:testnet';\n case 'devnet':\n return 'solana:devnet';\n default:\n return chain;\n }\n}\n\nfunction getErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : 'Unknown error';\n}\n\nabstract class BaseSolanaMobileWalletAdapter extends BaseSignInMessageSignerWalletAdapter {\n readonly supportedTransactionVersions: Set<TransactionVersion> = new Set(\n // FIXME(#244): We can't actually know what versions are supported until we know which wallet we're talking to.\n ['legacy', 0],\n );\n name;\n icon;\n url;\n #wallet: LocalSolanaMobileWalletAdapterWallet | RemoteSolanaMobileWalletAdapterWallet;\n #connecting = false;\n #readyState: WalletReadyState = getIsSupported() ? WalletReadyState.Loadable : WalletReadyState.Unsupported;\n #accountSelector: (accounts: readonly WalletAccount[]) => Promise<WalletAccount>;\n #selectedAccount: WalletAccount | undefined;\n #publicKey: PublicKey | undefined;\n\n #handleChangeEvent = async (properties: StandardEventsChangeProperties) => {\n if (properties.accounts && properties.accounts.length > 0) {\n this.#declareWalletAsInstalled();\n const nextSelectedAccount = await this.#accountSelector(properties.accounts);\n if (nextSelectedAccount !== this.#selectedAccount) {\n this.#selectedAccount = nextSelectedAccount;\n this.#publicKey = undefined;\n this.emit(\n 'connect',\n // Having just set `this.#selectedAccount`, `this.publicKey` is definitely non-null\n\n this.publicKey!,\n );\n }\n }\n };\n\n protected constructor(\n wallet: LocalSolanaMobileWalletAdapterWallet | RemoteSolanaMobileWalletAdapterWallet,\n config: {\n addressSelector: AddressSelector;\n chain: Chain;\n },\n ) {\n super();\n // this.#chain = chainOrClusterToChainId(config.chain);\n this.#accountSelector = async (accounts: readonly WalletAccount[]) => {\n const selectedBase64EncodedAddress = await config.addressSelector.select(\n accounts.map(({ publicKey }) => base64FromUint8Array(new Uint8Array(publicKey))),\n );\n return (\n accounts.find(\n ({ publicKey }) => base64FromUint8Array(new Uint8Array(publicKey)) === selectedBase64EncodedAddress,\n ) ?? accounts[0]\n );\n };\n this.#wallet = wallet;\n this.#wallet.features[StandardEvents].on('change', this.#handleChangeEvent);\n this.name = this.#wallet.name as WalletName;\n this.icon = this.#wallet.icon;\n this.url = this.#wallet.url;\n // TODO: evaluate if this logic should be kept - it seems to create a nasty bug where\n // the wallet tries to auto connect on page load and gets blocked by the popup blocker\n // if (this.#readyState !== WalletReadyState.Unsupported) {\n // config.authorizationResultCache.get().then((authorizationResult) => {\n // if (authorizationResult) {\n // // Having a prior authorization result is, right now, the best\n // // indication that a mobile wallet is installed. There is no API\n // // we can use to test for whether the association URI is supported.\n // this.#declareWalletAsInstalled();\n // }\n // });\n // }\n }\n\n get publicKey(): PublicKey | null {\n if (!this.#publicKey && this.#selectedAccount) {\n try {\n this.#publicKey = new PublicKey(this.#selectedAccount.publicKey);\n } catch (e) {\n throw new WalletPublicKeyError((e instanceof Error && e?.message) || 'Unknown error', e);\n }\n }\n return this.#publicKey ?? null;\n }\n\n get connected(): boolean {\n return this.#wallet.connected;\n }\n\n get connecting(): boolean {\n return this.#connecting;\n }\n\n get readyState(): WalletReadyState {\n return this.#readyState;\n }\n\n /** @deprecated Use `autoConnect()` instead. */\n async autoConnect_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(): Promise<void> {\n return await this.autoConnect();\n }\n\n async autoConnect(): Promise<void> {\n this.#connect(true);\n }\n\n async connect(): Promise<void> {\n this.#connect();\n }\n\n async #connect(autoConnect: boolean = false): Promise<void> {\n if (this.connecting || this.connected) {\n return;\n }\n return await this.#runWithGuard(async () => {\n if (this.#readyState !== WalletReadyState.Installed && this.#readyState !== WalletReadyState.Loadable) {\n throw new WalletNotReadyError();\n }\n this.#connecting = true;\n try {\n await this.#wallet.features[StandardConnect].connect({ silent: autoConnect });\n } catch (e) {\n throw new WalletConnectionError((e instanceof Error && e.message) || 'Unknown error', e);\n } finally {\n this.#connecting = false;\n }\n });\n }\n\n /** @deprecated Use `connect()` or `autoConnect()` instead. */\n async performAuthorization(signInPayload?: SignInPayload): Promise<AuthorizationResult> {\n try {\n const cachedAuthorizationResult = await this.#wallet.cachedAuthorizationResult;\n if (cachedAuthorizationResult) {\n await this.#wallet.features[StandardConnect].connect({ silent: true });\n return cachedAuthorizationResult;\n }\n\n if (signInPayload) {\n await this.#wallet.features[SolanaSignIn].signIn(signInPayload);\n } else await this.#wallet.features[StandardConnect].connect();\n const authorizationResult = await await this.#wallet.cachedAuthorizationResult;\n return authorizationResult!;\n } catch (e) {\n throw new WalletConnectionError((e instanceof Error && e.message) || 'Unknown error', e);\n }\n }\n\n async disconnect(): Promise<void> {\n // return await this.#runWithGuard(this.#wallet.features[StandardDisconnect].disconnect);\n return await this.#runWithGuard(async () => {\n this.#connecting = false;\n this.#publicKey = undefined;\n this.#selectedAccount = undefined;\n await this.#wallet.features[StandardDisconnect].disconnect();\n this.emit('disconnect');\n });\n }\n\n async signIn(input?: SolanaSignInInput): Promise<SolanaSignInOutput> {\n return this.#runWithGuard(async () => {\n if (this.#readyState !== WalletReadyState.Installed && this.#readyState !== WalletReadyState.Loadable) {\n throw new WalletNotReadyError();\n }\n this.#connecting = true;\n try {\n const outputs = await this.#wallet.features[SolanaSignIn].signIn({\n ...input,\n domain: input?.domain ?? window.location.host,\n });\n if (outputs.length > 0) {\n return outputs[0];\n } else {\n throw new Error('Sign in failed, no sign in result returned by wallet');\n }\n } catch (e) {\n throw new WalletConnectionError((e instanceof Error && e.message) || 'Unknown error', e);\n } finally {\n this.#connecting = false;\n }\n });\n }\n\n async signMessage(message: Uint8Array): Promise<Uint8Array> {\n return await this.#runWithGuard(async () => {\n const account = this.#assertIsAuthorized();\n try {\n const outputs = await this.#wallet.features[SolanaSignMessage].signMessage({\n account,\n message: message,\n });\n return outputs[0].signature;\n } catch (error: unknown) {\n throw new WalletSignMessageError(getErrorMessage(error), error);\n }\n });\n }\n\n async sendTransaction<T extends LegacyTransaction | VersionedTransaction>(\n transaction: T,\n connection: Connection,\n options?: SendOptions,\n ): Promise<TransactionSignature> {\n return await this.#runWithGuard(async () => {\n const account = this.#assertIsAuthorized();\n try {\n function getTargetCommitment() {\n let targetCommitment: Finality;\n switch (connection.commitment) {\n case 'confirmed':\n case 'finalized':\n case 'processed':\n targetCommitment = connection.commitment;\n break;\n default:\n targetCommitment = 'finalized';\n }\n let targetPreflightCommitment: Finality;\n switch (options?.preflightCommitment) {\n case 'confirmed':\n case 'finalized':\n case 'processed':\n targetPreflightCommitment = options.preflightCommitment;\n break;\n case undefined:\n targetPreflightCommitment = targetCommitment;\n break;\n default:\n targetPreflightCommitment = 'finalized';\n }\n const preflightCommitmentScore =\n targetPreflightCommitment === 'finalized'\n ? 2\n : targetPreflightCommitment === 'confirmed'\n ? 1\n : 0;\n const targetCommitmentScore =\n targetCommitment === 'finalized' ? 2 : targetCommitment === 'confirmed' ? 1 : 0;\n return preflightCommitmentScore < targetCommitmentScore\n ? targetPreflightCommitment\n : targetCommitment;\n }\n if (SolanaSignAndSendTransaction in this.#wallet.features) {\n const chain = chainOrClusterToChainId(this.#wallet.currentAuthorization!.chain);\n const [signature] = (\n await this.#wallet.features[SolanaSignAndSendTransaction].signAndSendTransaction({\n account,\n transaction: transaction.serialize(),\n chain: chain,\n options: options\n ? {\n skipPreflight: options.skipPreflight,\n maxRetries: options.maxRetries,\n }\n : undefined,\n })\n ).map((output) => {\n return base64FromUint8Array(output.signature);\n });\n\n return signature;\n } else {\n const [signedTransaction] = await this.#performSignTransactions([transaction]);\n if (isVersionedTransaction(signedTransaction)) {\n return await connection.sendTransaction(signedTransaction);\n } else {\n const serializedTransaction = signedTransaction.serialize();\n return await connection.sendRawTransaction(serializedTransaction, {\n ...options,\n preflightCommitment: getTargetCommitment(),\n });\n }\n }\n } catch (error: unknown) {\n throw new WalletSendTransactionError(getErrorMessage(error), error);\n }\n });\n }\n\n async signTransaction<T extends LegacyTransaction | VersionedTransaction>(transaction: T): Promise<T> {\n return await this.#runWithGuard(async () => {\n const [signedTransaction] = await this.#performSignTransactions([transaction]);\n return signedTransaction;\n });\n }\n\n async signAllTransactions<T extends LegacyTransaction | VersionedTransaction>(transactions: T[]): Promise<T[]> {\n return await this.#runWithGuard(async () => {\n const signedTransactions = await this.#performSignTransactions(transactions);\n return signedTransactions;\n });\n }\n\n #declareWalletAsInstalled(): void {\n if (this.#readyState !== WalletReadyState.Installed) {\n this.emit('readyStateChange', (this.#readyState = WalletReadyState.Installed));\n }\n }\n\n #assertIsAuthorized() {\n if (!this.#wallet.isAuthorized || !this.#selectedAccount) throw new WalletNotConnectedError();\n return this.#selectedAccount;\n }\n\n async #performSignTransactions<T extends LegacyTransaction | VersionedTransaction>(\n transactions: T[],\n ): Promise<T[]> {\n const account = this.#assertIsAuthorized();\n try {\n if (SolanaSignTransaction in this.#wallet.features) {\n return this.#wallet.features[SolanaSignTransaction].signTransaction(\n ...transactions.map((value) => {\n return { account, transaction: value.serialize() };\n }),\n ).then((outputs) => {\n return outputs.map((output: SolanaSignTransactionOutput) => {\n const byteArray = output.signedTransaction;\n const numSignatures = byteArray[0];\n const messageOffset = numSignatures * SIGNATURE_LENGTH_IN_BYTES + 1;\n const version = VersionedMessage.deserializeMessageVersion(\n byteArray.slice(messageOffset, byteArray.length),\n );\n if (version === 'legacy') {\n return Transaction.from(byteArray) as T;\n } else {\n return VersionedTransaction.deserialize(byteArray) as T;\n }\n });\n });\n } else {\n throw new Error('Connected wallet does not support signing transactions');\n }\n } catch (error: unknown) {\n throw new WalletSignTransactionError(getErrorMessage(error), error);\n }\n }\n\n async #runWithGuard<TReturn>(callback: () => Promise<TReturn>) {\n try {\n return await callback();\n } catch (e: unknown) {\n this.emit('error', e instanceof WalletError ? e : new WalletError(getErrorMessage(e), e));\n throw e;\n }\n }\n}\n\nexport class LocalSolanaMobileWalletAdapter extends BaseSolanaMobileWalletAdapter {\n /**\n * @deprecated @param cluster config paramter is deprecated, use @param chain instead\n */\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n cluster: Cluster;\n onWalletNotFound: (mobileWalletAdapter: LocalSolanaMobileWalletAdapter) => Promise<void>;\n });\n\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n chain: Chain;\n onWalletNotFound: (mobileWalletAdapter: LocalSolanaMobileWalletAdapter) => Promise<void>;\n });\n\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n chain: Chain;\n cluster: Cluster;\n onWalletNotFound: (mobileWalletAdapter: LocalSolanaMobileWalletAdapter) => Promise<void>;\n }) {\n const chain = chainOrClusterToChainId(config.chain ?? config.cluster);\n super(\n new LocalSolanaMobileWalletAdapterWallet({\n appIdentity: config.appIdentity,\n authorizationCache: {\n set: config.authorizationResultCache.set,\n get: async () => {\n return (await config.authorizationResultCache.get()) as Authorization | undefined;\n },\n clear: config.authorizationResultCache.clear,\n },\n chains: [chain],\n chainSelector: createDefaultChainSelector(),\n onWalletNotFound: async () => {\n config.onWalletNotFound(this);\n },\n }),\n {\n addressSelector: config.addressSelector,\n chain: chain,\n },\n );\n }\n}\n\nexport class RemoteSolanaMobileWalletAdapter extends BaseSolanaMobileWalletAdapter {\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n chain: Chain;\n remoteHostAuthority: string;\n onWalletNotFound: (mobileWalletAdapter: RemoteSolanaMobileWalletAdapter) => Promise<void>;\n }) {\n const chain = chainOrClusterToChainId(config.chain);\n super(\n new RemoteSolanaMobileWalletAdapterWallet({\n appIdentity: config.appIdentity,\n authorizationCache: {\n set: config.authorizationResultCache.set,\n get: async () => {\n return (await config.authorizationResultCache.get()) as Authorization | undefined;\n },\n clear: config.authorizationResultCache.clear,\n },\n chains: [chain],\n chainSelector: createDefaultChainSelector(),\n remoteHostAuthority: config.remoteHostAuthority,\n onWalletNotFound: async () => {\n config.onWalletNotFound(this);\n },\n }),\n {\n addressSelector: config.addressSelector,\n chain: chain,\n },\n );\n }\n}\n\nexport class SolanaMobileWalletAdapter extends LocalSolanaMobileWalletAdapter {}\n","import { AddressSelector } from './adapter.js';\n\nexport function createDefaultAddressSelector(): AddressSelector {\n return {\n async select(addresses) {\n return addresses[0];\n },\n };\n}\n\n/**\n * @deprecated Use {@link createDefaultAddressSelector} instead.\n */\nexport default createDefaultAddressSelector;\n","import { createDefaultAuthorizationCache as baseCreateDefaultAuthorizationCache } from '@solana-mobile/wallet-standard-mobile';\n\nimport { AuthorizationResultCache } from './adapter.js';\n\nexport function createDefaultAuthorizationResultCache(): AuthorizationResultCache {\n return baseCreateDefaultAuthorizationCache();\n}\n\n/**\n * @deprecated Use {@link createDefaultAuthorizationResultCache} instead.\n */\nexport default createDefaultAuthorizationResultCache;\n","import { defaultErrorModalWalletNotFoundHandler } from '@solana-mobile/wallet-standard-mobile';\n\nimport { SolanaMobileWalletAdapter } from './adapter.js';\n\nasync function defaultWalletNotFoundHandler(_mobileWalletAdapter: SolanaMobileWalletAdapter) {\n return defaultErrorModalWalletNotFoundHandler();\n}\n\nexport function createDefaultWalletNotFoundHandler(): (\n mobileWalletAdapter: SolanaMobileWalletAdapter,\n) => Promise<void> {\n return defaultWalletNotFoundHandler;\n}\n\n/**\n * @deprecated Use {@link createDefaultWalletNotFoundHandler} instead.\n */\nexport default createDefaultWalletNotFoundHandler;\n"],"mappings":"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"}
|
package/lib/cjs/index.js
CHANGED
|
@@ -2,13 +2,9 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
2
2
|
let _solana_wallet_adapter_base = require("@solana/wallet-adapter-base");
|
|
3
3
|
let _solana_wallet_standard_features = require("@solana/wallet-standard-features");
|
|
4
4
|
let _solana_web3_js = require("@solana/web3.js");
|
|
5
|
+
let _solana_mobile_mobile_wallet_adapter_protocol_encoding = require("@solana-mobile/mobile-wallet-adapter-protocol/encoding");
|
|
5
6
|
let _solana_mobile_wallet_standard_mobile = require("@solana-mobile/wallet-standard-mobile");
|
|
6
7
|
let _wallet_standard_core = require("@wallet-standard/core");
|
|
7
|
-
//#region src/base64Utils.ts
|
|
8
|
-
function fromUint8Array(byteArray) {
|
|
9
|
-
return window.btoa(String.fromCharCode.call(null, ...byteArray));
|
|
10
|
-
}
|
|
11
|
-
//#endregion
|
|
12
8
|
//#region src/getIsSupported.ts
|
|
13
9
|
function getIsSupported() {
|
|
14
10
|
return typeof window !== "undefined" && window.isSecureContext && typeof document !== "undefined" && /android/i.test(navigator.userAgent);
|
|
@@ -57,8 +53,8 @@ var BaseSolanaMobileWalletAdapter = class extends _solana_wallet_adapter_base.Ba
|
|
|
57
53
|
constructor(wallet, config) {
|
|
58
54
|
super();
|
|
59
55
|
this.#accountSelector = async (accounts) => {
|
|
60
|
-
const selectedBase64EncodedAddress = await config.addressSelector.select(accounts.map(({ publicKey }) =>
|
|
61
|
-
return accounts.find(({ publicKey }) =>
|
|
56
|
+
const selectedBase64EncodedAddress = await config.addressSelector.select(accounts.map(({ publicKey }) => (0, _solana_mobile_mobile_wallet_adapter_protocol_encoding.base64FromUint8Array)(new Uint8Array(publicKey))));
|
|
57
|
+
return accounts.find(({ publicKey }) => (0, _solana_mobile_mobile_wallet_adapter_protocol_encoding.base64FromUint8Array)(new Uint8Array(publicKey)) === selectedBase64EncodedAddress) ?? accounts[0];
|
|
62
58
|
};
|
|
63
59
|
this.#wallet = wallet;
|
|
64
60
|
this.#wallet.features[_wallet_standard_core.StandardEvents].on("change", this.#handleChangeEvent);
|
|
@@ -201,7 +197,7 @@ var BaseSolanaMobileWalletAdapter = class extends _solana_wallet_adapter_base.Ba
|
|
|
201
197
|
maxRetries: options.maxRetries
|
|
202
198
|
} : void 0
|
|
203
199
|
})).map((output) => {
|
|
204
|
-
return
|
|
200
|
+
return (0, _solana_mobile_mobile_wallet_adapter_protocol_encoding.base64FromUint8Array)(output.signature);
|
|
205
201
|
});
|
|
206
202
|
return signature;
|
|
207
203
|
} else {
|
package/lib/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["WalletStandardWalletName","WalletStandardRemoteWalletName","BaseSignInMessageSignerWalletAdapter","WalletReadyState","#declareWalletAsInstalled","#accountSelector","#selectedAccount","#publicKey","#wallet","StandardEvents","#handleChangeEvent","PublicKey","WalletPublicKeyError","#connecting","#readyState","#connect","#runWithGuard","WalletNotReadyError","StandardConnect","WalletConnectionError","SolanaSignIn","StandardDisconnect","#assertIsAuthorized","SolanaSignMessage","WalletSignMessageError","SolanaSignAndSendTransaction","#performSignTransactions","WalletSendTransactionError","WalletNotConnectedError","SolanaSignTransaction","VersionedMessage","Transaction","VersionedTransaction","WalletSignTransactionError","WalletError","LocalSolanaMobileWalletAdapterWallet","RemoteSolanaMobileWalletAdapterWallet"],"sources":["../../src/base64Utils.ts","../../src/getIsSupported.ts","../../src/adapter.ts","../../src/createDefaultAddressSelector.ts","../../src/createDefaultAuthorizationResultCache.ts","../../src/createDefaultWalletNotFoundHandler.ts"],"sourcesContent":["export function fromUint8Array(byteArray: Uint8Array): string {\n return window.btoa(String.fromCharCode.call(null, ...byteArray));\n}\n\nexport function toUint8Array(base64EncodedByteArray: string): Uint8Array {\n return new Uint8Array(\n window\n .atob(base64EncodedByteArray)\n .split('')\n .map((c) => c.charCodeAt(0)),\n );\n}\n","export default function getIsSupported() {\n return (\n typeof window !== 'undefined' &&\n window.isSecureContext &&\n typeof document !== 'undefined' &&\n /android/i.test(navigator.userAgent)\n );\n}\n","import {\n BaseSignInMessageSignerWalletAdapter,\n WalletConnectionError,\n WalletError,\n WalletName,\n WalletNotConnectedError,\n WalletNotReadyError,\n WalletPublicKeyError,\n WalletReadyState,\n WalletSendTransactionError,\n WalletSignMessageError,\n WalletSignTransactionError,\n} from '@solana/wallet-adapter-base';\nimport {\n SolanaSignAndSendTransaction,\n SolanaSignIn,\n SolanaSignInInput,\n SolanaSignInOutput,\n SolanaSignMessage,\n SolanaSignTransaction,\n SolanaSignTransactionOutput,\n} from '@solana/wallet-standard-features';\nimport {\n Connection,\n PublicKey,\n SendOptions,\n Transaction as LegacyTransaction,\n Transaction,\n TransactionSignature,\n TransactionVersion,\n VersionedMessage,\n VersionedTransaction,\n} from '@solana/web3.js';\nimport {\n AppIdentity,\n AuthorizationResult,\n Base64EncodedAddress,\n Chain,\n Cluster,\n Finality,\n SignInPayload,\n} from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport {\n Authorization,\n createDefaultChainSelector,\n LocalSolanaMobileWalletAdapterWallet,\n RemoteSolanaMobileWalletAdapterWallet,\n SolanaMobileWalletAdapterRemoteWalletName as WalletStandardRemoteWalletName,\n SolanaMobileWalletAdapterWalletName as WalletStandardWalletName,\n} from '@solana-mobile/wallet-standard-mobile';\nimport {\n IdentifierString,\n StandardConnect,\n StandardDisconnect,\n StandardEvents,\n StandardEventsChangeProperties,\n WalletAccount,\n} from '@wallet-standard/core';\n\nimport { fromUint8Array } from './base64Utils.js';\nimport getIsSupported from './getIsSupported.js';\n\nexport interface AuthorizationResultCache {\n clear(): Promise<void>;\n get(): Promise<AuthorizationResult | Authorization | undefined>;\n set(authorizationResult: AuthorizationResult | Authorization): Promise<void>;\n}\n\nexport interface AddressSelector {\n select(addresses: Base64EncodedAddress[]): Promise<Base64EncodedAddress>;\n}\n\nexport const SolanaMobileWalletAdapterWalletName = WalletStandardWalletName as WalletName;\nexport const SolanaMobileWalletAdapterRemoteWalletName = WalletStandardRemoteWalletName as WalletName;\n\nconst SIGNATURE_LENGTH_IN_BYTES = 64;\n\nfunction isVersionedTransaction(\n transaction: LegacyTransaction | VersionedTransaction,\n): transaction is VersionedTransaction {\n return 'version' in transaction;\n}\n\nfunction chainOrClusterToChainId(chain: Cluster | Chain): IdentifierString {\n switch (chain) {\n case 'mainnet-beta':\n return 'solana:mainnet';\n case 'testnet':\n return 'solana:testnet';\n case 'devnet':\n return 'solana:devnet';\n default:\n return chain;\n }\n}\n\nfunction getErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : 'Unknown error';\n}\n\nabstract class BaseSolanaMobileWalletAdapter extends BaseSignInMessageSignerWalletAdapter {\n readonly supportedTransactionVersions: Set<TransactionVersion> = new Set(\n // FIXME(#244): We can't actually know what versions are supported until we know which wallet we're talking to.\n ['legacy', 0],\n );\n name;\n icon;\n url;\n #wallet: LocalSolanaMobileWalletAdapterWallet | RemoteSolanaMobileWalletAdapterWallet;\n #connecting = false;\n #readyState: WalletReadyState = getIsSupported() ? WalletReadyState.Loadable : WalletReadyState.Unsupported;\n #accountSelector: (accounts: readonly WalletAccount[]) => Promise<WalletAccount>;\n #selectedAccount: WalletAccount | undefined;\n #publicKey: PublicKey | undefined;\n\n #handleChangeEvent = async (properties: StandardEventsChangeProperties) => {\n if (properties.accounts && properties.accounts.length > 0) {\n this.#declareWalletAsInstalled();\n const nextSelectedAccount = await this.#accountSelector(properties.accounts);\n if (nextSelectedAccount !== this.#selectedAccount) {\n this.#selectedAccount = nextSelectedAccount;\n this.#publicKey = undefined;\n this.emit(\n 'connect',\n // Having just set `this.#selectedAccount`, `this.publicKey` is definitely non-null\n\n this.publicKey!,\n );\n }\n }\n };\n\n protected constructor(\n wallet: LocalSolanaMobileWalletAdapterWallet | RemoteSolanaMobileWalletAdapterWallet,\n config: {\n addressSelector: AddressSelector;\n chain: Chain;\n },\n ) {\n super();\n // this.#chain = chainOrClusterToChainId(config.chain);\n this.#accountSelector = async (accounts: readonly WalletAccount[]) => {\n const selectedBase64EncodedAddress = await config.addressSelector.select(\n accounts.map(({ publicKey }) => fromUint8Array(new Uint8Array(publicKey))),\n );\n return (\n accounts.find(\n ({ publicKey }) => fromUint8Array(new Uint8Array(publicKey)) === selectedBase64EncodedAddress,\n ) ?? accounts[0]\n );\n };\n this.#wallet = wallet;\n this.#wallet.features[StandardEvents].on('change', this.#handleChangeEvent);\n this.name = this.#wallet.name as WalletName;\n this.icon = this.#wallet.icon;\n this.url = this.#wallet.url;\n // TODO: evaluate if this logic should be kept - it seems to create a nasty bug where\n // the wallet tries to auto connect on page load and gets blocked by the popup blocker\n // if (this.#readyState !== WalletReadyState.Unsupported) {\n // config.authorizationResultCache.get().then((authorizationResult) => {\n // if (authorizationResult) {\n // // Having a prior authorization result is, right now, the best\n // // indication that a mobile wallet is installed. There is no API\n // // we can use to test for whether the association URI is supported.\n // this.#declareWalletAsInstalled();\n // }\n // });\n // }\n }\n\n get publicKey(): PublicKey | null {\n if (!this.#publicKey && this.#selectedAccount) {\n try {\n this.#publicKey = new PublicKey(this.#selectedAccount.publicKey);\n } catch (e) {\n throw new WalletPublicKeyError((e instanceof Error && e?.message) || 'Unknown error', e);\n }\n }\n return this.#publicKey ?? null;\n }\n\n get connected(): boolean {\n return this.#wallet.connected;\n }\n\n get connecting(): boolean {\n return this.#connecting;\n }\n\n get readyState(): WalletReadyState {\n return this.#readyState;\n }\n\n /** @deprecated Use `autoConnect()` instead. */\n async autoConnect_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(): Promise<void> {\n return await this.autoConnect();\n }\n\n async autoConnect(): Promise<void> {\n this.#connect(true);\n }\n\n async connect(): Promise<void> {\n this.#connect();\n }\n\n async #connect(autoConnect: boolean = false): Promise<void> {\n if (this.connecting || this.connected) {\n return;\n }\n return await this.#runWithGuard(async () => {\n if (this.#readyState !== WalletReadyState.Installed && this.#readyState !== WalletReadyState.Loadable) {\n throw new WalletNotReadyError();\n }\n this.#connecting = true;\n try {\n await this.#wallet.features[StandardConnect].connect({ silent: autoConnect });\n } catch (e) {\n throw new WalletConnectionError((e instanceof Error && e.message) || 'Unknown error', e);\n } finally {\n this.#connecting = false;\n }\n });\n }\n\n /** @deprecated Use `connect()` or `autoConnect()` instead. */\n async performAuthorization(signInPayload?: SignInPayload): Promise<AuthorizationResult> {\n try {\n const cachedAuthorizationResult = await this.#wallet.cachedAuthorizationResult;\n if (cachedAuthorizationResult) {\n await this.#wallet.features[StandardConnect].connect({ silent: true });\n return cachedAuthorizationResult;\n }\n\n if (signInPayload) {\n await this.#wallet.features[SolanaSignIn].signIn(signInPayload);\n } else await this.#wallet.features[StandardConnect].connect();\n const authorizationResult = await await this.#wallet.cachedAuthorizationResult;\n return authorizationResult!;\n } catch (e) {\n throw new WalletConnectionError((e instanceof Error && e.message) || 'Unknown error', e);\n }\n }\n\n async disconnect(): Promise<void> {\n // return await this.#runWithGuard(this.#wallet.features[StandardDisconnect].disconnect);\n return await this.#runWithGuard(async () => {\n this.#connecting = false;\n this.#publicKey = undefined;\n this.#selectedAccount = undefined;\n await this.#wallet.features[StandardDisconnect].disconnect();\n this.emit('disconnect');\n });\n }\n\n async signIn(input?: SolanaSignInInput): Promise<SolanaSignInOutput> {\n return this.#runWithGuard(async () => {\n if (this.#readyState !== WalletReadyState.Installed && this.#readyState !== WalletReadyState.Loadable) {\n throw new WalletNotReadyError();\n }\n this.#connecting = true;\n try {\n const outputs = await this.#wallet.features[SolanaSignIn].signIn({\n ...input,\n domain: input?.domain ?? window.location.host,\n });\n if (outputs.length > 0) {\n return outputs[0];\n } else {\n throw new Error('Sign in failed, no sign in result returned by wallet');\n }\n } catch (e) {\n throw new WalletConnectionError((e instanceof Error && e.message) || 'Unknown error', e);\n } finally {\n this.#connecting = false;\n }\n });\n }\n\n async signMessage(message: Uint8Array): Promise<Uint8Array> {\n return await this.#runWithGuard(async () => {\n const account = this.#assertIsAuthorized();\n try {\n const outputs = await this.#wallet.features[SolanaSignMessage].signMessage({\n account,\n message: message,\n });\n return outputs[0].signature;\n } catch (error: unknown) {\n throw new WalletSignMessageError(getErrorMessage(error), error);\n }\n });\n }\n\n async sendTransaction<T extends LegacyTransaction | VersionedTransaction>(\n transaction: T,\n connection: Connection,\n options?: SendOptions,\n ): Promise<TransactionSignature> {\n return await this.#runWithGuard(async () => {\n const account = this.#assertIsAuthorized();\n try {\n function getTargetCommitment() {\n let targetCommitment: Finality;\n switch (connection.commitment) {\n case 'confirmed':\n case 'finalized':\n case 'processed':\n targetCommitment = connection.commitment;\n break;\n default:\n targetCommitment = 'finalized';\n }\n let targetPreflightCommitment: Finality;\n switch (options?.preflightCommitment) {\n case 'confirmed':\n case 'finalized':\n case 'processed':\n targetPreflightCommitment = options.preflightCommitment;\n break;\n case undefined:\n targetPreflightCommitment = targetCommitment;\n break;\n default:\n targetPreflightCommitment = 'finalized';\n }\n const preflightCommitmentScore =\n targetPreflightCommitment === 'finalized'\n ? 2\n : targetPreflightCommitment === 'confirmed'\n ? 1\n : 0;\n const targetCommitmentScore =\n targetCommitment === 'finalized' ? 2 : targetCommitment === 'confirmed' ? 1 : 0;\n return preflightCommitmentScore < targetCommitmentScore\n ? targetPreflightCommitment\n : targetCommitment;\n }\n if (SolanaSignAndSendTransaction in this.#wallet.features) {\n const chain = chainOrClusterToChainId(this.#wallet.currentAuthorization!.chain);\n const [signature] = (\n await this.#wallet.features[SolanaSignAndSendTransaction].signAndSendTransaction({\n account,\n transaction: transaction.serialize(),\n chain: chain,\n options: options\n ? {\n skipPreflight: options.skipPreflight,\n maxRetries: options.maxRetries,\n }\n : undefined,\n })\n ).map((output) => {\n return fromUint8Array(output.signature);\n });\n\n return signature;\n } else {\n const [signedTransaction] = await this.#performSignTransactions([transaction]);\n if (isVersionedTransaction(signedTransaction)) {\n return await connection.sendTransaction(signedTransaction);\n } else {\n const serializedTransaction = signedTransaction.serialize();\n return await connection.sendRawTransaction(serializedTransaction, {\n ...options,\n preflightCommitment: getTargetCommitment(),\n });\n }\n }\n } catch (error: unknown) {\n throw new WalletSendTransactionError(getErrorMessage(error), error);\n }\n });\n }\n\n async signTransaction<T extends LegacyTransaction | VersionedTransaction>(transaction: T): Promise<T> {\n return await this.#runWithGuard(async () => {\n const [signedTransaction] = await this.#performSignTransactions([transaction]);\n return signedTransaction;\n });\n }\n\n async signAllTransactions<T extends LegacyTransaction | VersionedTransaction>(transactions: T[]): Promise<T[]> {\n return await this.#runWithGuard(async () => {\n const signedTransactions = await this.#performSignTransactions(transactions);\n return signedTransactions;\n });\n }\n\n #declareWalletAsInstalled(): void {\n if (this.#readyState !== WalletReadyState.Installed) {\n this.emit('readyStateChange', (this.#readyState = WalletReadyState.Installed));\n }\n }\n\n #assertIsAuthorized() {\n if (!this.#wallet.isAuthorized || !this.#selectedAccount) throw new WalletNotConnectedError();\n return this.#selectedAccount;\n }\n\n async #performSignTransactions<T extends LegacyTransaction | VersionedTransaction>(\n transactions: T[],\n ): Promise<T[]> {\n const account = this.#assertIsAuthorized();\n try {\n if (SolanaSignTransaction in this.#wallet.features) {\n return this.#wallet.features[SolanaSignTransaction].signTransaction(\n ...transactions.map((value) => {\n return { account, transaction: value.serialize() };\n }),\n ).then((outputs) => {\n return outputs.map((output: SolanaSignTransactionOutput) => {\n const byteArray = output.signedTransaction;\n const numSignatures = byteArray[0];\n const messageOffset = numSignatures * SIGNATURE_LENGTH_IN_BYTES + 1;\n const version = VersionedMessage.deserializeMessageVersion(\n byteArray.slice(messageOffset, byteArray.length),\n );\n if (version === 'legacy') {\n return Transaction.from(byteArray) as T;\n } else {\n return VersionedTransaction.deserialize(byteArray) as T;\n }\n });\n });\n } else {\n throw new Error('Connected wallet does not support signing transactions');\n }\n } catch (error: unknown) {\n throw new WalletSignTransactionError(getErrorMessage(error), error);\n }\n }\n\n async #runWithGuard<TReturn>(callback: () => Promise<TReturn>) {\n try {\n return await callback();\n } catch (e: unknown) {\n this.emit('error', e instanceof WalletError ? e : new WalletError(getErrorMessage(e), e));\n throw e;\n }\n }\n}\n\nexport class LocalSolanaMobileWalletAdapter extends BaseSolanaMobileWalletAdapter {\n /**\n * @deprecated @param cluster config paramter is deprecated, use @param chain instead\n */\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n cluster: Cluster;\n onWalletNotFound: (mobileWalletAdapter: LocalSolanaMobileWalletAdapter) => Promise<void>;\n });\n\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n chain: Chain;\n onWalletNotFound: (mobileWalletAdapter: LocalSolanaMobileWalletAdapter) => Promise<void>;\n });\n\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n chain: Chain;\n cluster: Cluster;\n onWalletNotFound: (mobileWalletAdapter: LocalSolanaMobileWalletAdapter) => Promise<void>;\n }) {\n const chain = chainOrClusterToChainId(config.chain ?? config.cluster);\n super(\n new LocalSolanaMobileWalletAdapterWallet({\n appIdentity: config.appIdentity,\n authorizationCache: {\n set: config.authorizationResultCache.set,\n get: async () => {\n return (await config.authorizationResultCache.get()) as Authorization | undefined;\n },\n clear: config.authorizationResultCache.clear,\n },\n chains: [chain],\n chainSelector: createDefaultChainSelector(),\n onWalletNotFound: async () => {\n config.onWalletNotFound(this);\n },\n }),\n {\n addressSelector: config.addressSelector,\n chain: chain,\n },\n );\n }\n}\n\nexport class RemoteSolanaMobileWalletAdapter extends BaseSolanaMobileWalletAdapter {\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n chain: Chain;\n remoteHostAuthority: string;\n onWalletNotFound: (mobileWalletAdapter: RemoteSolanaMobileWalletAdapter) => Promise<void>;\n }) {\n const chain = chainOrClusterToChainId(config.chain);\n super(\n new RemoteSolanaMobileWalletAdapterWallet({\n appIdentity: config.appIdentity,\n authorizationCache: {\n set: config.authorizationResultCache.set,\n get: async () => {\n return (await config.authorizationResultCache.get()) as Authorization | undefined;\n },\n clear: config.authorizationResultCache.clear,\n },\n chains: [chain],\n chainSelector: createDefaultChainSelector(),\n remoteHostAuthority: config.remoteHostAuthority,\n onWalletNotFound: async () => {\n config.onWalletNotFound(this);\n },\n }),\n {\n addressSelector: config.addressSelector,\n chain: chain,\n },\n );\n }\n}\n\nexport class SolanaMobileWalletAdapter extends LocalSolanaMobileWalletAdapter {}\n","import { AddressSelector } from './adapter.js';\n\nexport default function createDefaultAddressSelector(): AddressSelector {\n return {\n async select(addresses) {\n return addresses[0];\n },\n };\n}\n","import { createDefaultAuthorizationCache as baseCreateDefaultAuthorizationCache } from '@solana-mobile/wallet-standard-mobile';\n\nimport { AuthorizationResultCache } from './adapter.js';\n\nexport default function createDefaultAuthorizationResultCache(): AuthorizationResultCache {\n return baseCreateDefaultAuthorizationCache();\n}\n","import { defaultErrorModalWalletNotFoundHandler } from '@solana-mobile/wallet-standard-mobile';\n\nimport { SolanaMobileWalletAdapter } from './adapter.js';\n\nasync function defaultWalletNotFoundHandler(_mobileWalletAdapter: SolanaMobileWalletAdapter) {\n return defaultErrorModalWalletNotFoundHandler();\n}\n\nexport default function createDefaultWalletNotFoundHandler(): (\n mobileWalletAdapter: SolanaMobileWalletAdapter,\n) => Promise<void> {\n return defaultWalletNotFoundHandler;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["WalletStandardWalletName","WalletStandardRemoteWalletName","BaseSignInMessageSignerWalletAdapter","WalletReadyState","#declareWalletAsInstalled","#accountSelector","#selectedAccount","#publicKey","#wallet","StandardEvents","#handleChangeEvent","PublicKey","WalletPublicKeyError","#connecting","#readyState","#connect","#runWithGuard","WalletNotReadyError","StandardConnect","WalletConnectionError","SolanaSignIn","StandardDisconnect","#assertIsAuthorized","SolanaSignMessage","WalletSignMessageError","SolanaSignAndSendTransaction","#performSignTransactions","WalletSendTransactionError","WalletNotConnectedError","SolanaSignTransaction","VersionedMessage","Transaction","VersionedTransaction","WalletSignTransactionError","WalletError","LocalSolanaMobileWalletAdapterWallet","RemoteSolanaMobileWalletAdapterWallet"],"sources":["../../src/getIsSupported.ts","../../src/adapter.ts","../../src/createDefaultAddressSelector.ts","../../src/createDefaultAuthorizationResultCache.ts","../../src/createDefaultWalletNotFoundHandler.ts"],"sourcesContent":["export function getIsSupported() {\n return (\n typeof window !== 'undefined' &&\n window.isSecureContext &&\n typeof document !== 'undefined' &&\n /android/i.test(navigator.userAgent)\n );\n}\n\n/**\n * @deprecated Use {@link getIsSupported} instead.\n */\nexport default getIsSupported;\n","import {\n BaseSignInMessageSignerWalletAdapter,\n WalletConnectionError,\n WalletError,\n WalletName,\n WalletNotConnectedError,\n WalletNotReadyError,\n WalletPublicKeyError,\n WalletReadyState,\n WalletSendTransactionError,\n WalletSignMessageError,\n WalletSignTransactionError,\n} from '@solana/wallet-adapter-base';\nimport {\n SolanaSignAndSendTransaction,\n SolanaSignIn,\n SolanaSignInInput,\n SolanaSignInOutput,\n SolanaSignMessage,\n SolanaSignTransaction,\n SolanaSignTransactionOutput,\n} from '@solana/wallet-standard-features';\nimport {\n Connection,\n PublicKey,\n SendOptions,\n Transaction as LegacyTransaction,\n Transaction,\n TransactionSignature,\n TransactionVersion,\n VersionedMessage,\n VersionedTransaction,\n} from '@solana/web3.js';\nimport {\n AppIdentity,\n AuthorizationResult,\n Base64EncodedAddress,\n Chain,\n Cluster,\n Finality,\n SignInPayload,\n} from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { base64FromUint8Array } from '@solana-mobile/mobile-wallet-adapter-protocol/encoding';\nimport {\n Authorization,\n createDefaultChainSelector,\n LocalSolanaMobileWalletAdapterWallet,\n RemoteSolanaMobileWalletAdapterWallet,\n SolanaMobileWalletAdapterRemoteWalletName as WalletStandardRemoteWalletName,\n SolanaMobileWalletAdapterWalletName as WalletStandardWalletName,\n} from '@solana-mobile/wallet-standard-mobile';\nimport {\n IdentifierString,\n StandardConnect,\n StandardDisconnect,\n StandardEvents,\n StandardEventsChangeProperties,\n WalletAccount,\n} from '@wallet-standard/core';\n\nimport { getIsSupported } from './getIsSupported.js';\n\nexport interface AuthorizationResultCache {\n clear(): Promise<void>;\n get(): Promise<AuthorizationResult | Authorization | undefined>;\n set(authorizationResult: AuthorizationResult | Authorization): Promise<void>;\n}\n\nexport interface AddressSelector {\n select(addresses: Base64EncodedAddress[]): Promise<Base64EncodedAddress>;\n}\n\nexport const SolanaMobileWalletAdapterWalletName = WalletStandardWalletName as WalletName;\nexport const SolanaMobileWalletAdapterRemoteWalletName = WalletStandardRemoteWalletName as WalletName;\n\nconst SIGNATURE_LENGTH_IN_BYTES = 64;\n\nfunction isVersionedTransaction(\n transaction: LegacyTransaction | VersionedTransaction,\n): transaction is VersionedTransaction {\n return 'version' in transaction;\n}\n\nfunction chainOrClusterToChainId(chain: Cluster | Chain): IdentifierString {\n switch (chain) {\n case 'mainnet-beta':\n return 'solana:mainnet';\n case 'testnet':\n return 'solana:testnet';\n case 'devnet':\n return 'solana:devnet';\n default:\n return chain;\n }\n}\n\nfunction getErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : 'Unknown error';\n}\n\nabstract class BaseSolanaMobileWalletAdapter extends BaseSignInMessageSignerWalletAdapter {\n readonly supportedTransactionVersions: Set<TransactionVersion> = new Set(\n // FIXME(#244): We can't actually know what versions are supported until we know which wallet we're talking to.\n ['legacy', 0],\n );\n name;\n icon;\n url;\n #wallet: LocalSolanaMobileWalletAdapterWallet | RemoteSolanaMobileWalletAdapterWallet;\n #connecting = false;\n #readyState: WalletReadyState = getIsSupported() ? WalletReadyState.Loadable : WalletReadyState.Unsupported;\n #accountSelector: (accounts: readonly WalletAccount[]) => Promise<WalletAccount>;\n #selectedAccount: WalletAccount | undefined;\n #publicKey: PublicKey | undefined;\n\n #handleChangeEvent = async (properties: StandardEventsChangeProperties) => {\n if (properties.accounts && properties.accounts.length > 0) {\n this.#declareWalletAsInstalled();\n const nextSelectedAccount = await this.#accountSelector(properties.accounts);\n if (nextSelectedAccount !== this.#selectedAccount) {\n this.#selectedAccount = nextSelectedAccount;\n this.#publicKey = undefined;\n this.emit(\n 'connect',\n // Having just set `this.#selectedAccount`, `this.publicKey` is definitely non-null\n\n this.publicKey!,\n );\n }\n }\n };\n\n protected constructor(\n wallet: LocalSolanaMobileWalletAdapterWallet | RemoteSolanaMobileWalletAdapterWallet,\n config: {\n addressSelector: AddressSelector;\n chain: Chain;\n },\n ) {\n super();\n // this.#chain = chainOrClusterToChainId(config.chain);\n this.#accountSelector = async (accounts: readonly WalletAccount[]) => {\n const selectedBase64EncodedAddress = await config.addressSelector.select(\n accounts.map(({ publicKey }) => base64FromUint8Array(new Uint8Array(publicKey))),\n );\n return (\n accounts.find(\n ({ publicKey }) => base64FromUint8Array(new Uint8Array(publicKey)) === selectedBase64EncodedAddress,\n ) ?? accounts[0]\n );\n };\n this.#wallet = wallet;\n this.#wallet.features[StandardEvents].on('change', this.#handleChangeEvent);\n this.name = this.#wallet.name as WalletName;\n this.icon = this.#wallet.icon;\n this.url = this.#wallet.url;\n // TODO: evaluate if this logic should be kept - it seems to create a nasty bug where\n // the wallet tries to auto connect on page load and gets blocked by the popup blocker\n // if (this.#readyState !== WalletReadyState.Unsupported) {\n // config.authorizationResultCache.get().then((authorizationResult) => {\n // if (authorizationResult) {\n // // Having a prior authorization result is, right now, the best\n // // indication that a mobile wallet is installed. There is no API\n // // we can use to test for whether the association URI is supported.\n // this.#declareWalletAsInstalled();\n // }\n // });\n // }\n }\n\n get publicKey(): PublicKey | null {\n if (!this.#publicKey && this.#selectedAccount) {\n try {\n this.#publicKey = new PublicKey(this.#selectedAccount.publicKey);\n } catch (e) {\n throw new WalletPublicKeyError((e instanceof Error && e?.message) || 'Unknown error', e);\n }\n }\n return this.#publicKey ?? null;\n }\n\n get connected(): boolean {\n return this.#wallet.connected;\n }\n\n get connecting(): boolean {\n return this.#connecting;\n }\n\n get readyState(): WalletReadyState {\n return this.#readyState;\n }\n\n /** @deprecated Use `autoConnect()` instead. */\n async autoConnect_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(): Promise<void> {\n return await this.autoConnect();\n }\n\n async autoConnect(): Promise<void> {\n this.#connect(true);\n }\n\n async connect(): Promise<void> {\n this.#connect();\n }\n\n async #connect(autoConnect: boolean = false): Promise<void> {\n if (this.connecting || this.connected) {\n return;\n }\n return await this.#runWithGuard(async () => {\n if (this.#readyState !== WalletReadyState.Installed && this.#readyState !== WalletReadyState.Loadable) {\n throw new WalletNotReadyError();\n }\n this.#connecting = true;\n try {\n await this.#wallet.features[StandardConnect].connect({ silent: autoConnect });\n } catch (e) {\n throw new WalletConnectionError((e instanceof Error && e.message) || 'Unknown error', e);\n } finally {\n this.#connecting = false;\n }\n });\n }\n\n /** @deprecated Use `connect()` or `autoConnect()` instead. */\n async performAuthorization(signInPayload?: SignInPayload): Promise<AuthorizationResult> {\n try {\n const cachedAuthorizationResult = await this.#wallet.cachedAuthorizationResult;\n if (cachedAuthorizationResult) {\n await this.#wallet.features[StandardConnect].connect({ silent: true });\n return cachedAuthorizationResult;\n }\n\n if (signInPayload) {\n await this.#wallet.features[SolanaSignIn].signIn(signInPayload);\n } else await this.#wallet.features[StandardConnect].connect();\n const authorizationResult = await await this.#wallet.cachedAuthorizationResult;\n return authorizationResult!;\n } catch (e) {\n throw new WalletConnectionError((e instanceof Error && e.message) || 'Unknown error', e);\n }\n }\n\n async disconnect(): Promise<void> {\n // return await this.#runWithGuard(this.#wallet.features[StandardDisconnect].disconnect);\n return await this.#runWithGuard(async () => {\n this.#connecting = false;\n this.#publicKey = undefined;\n this.#selectedAccount = undefined;\n await this.#wallet.features[StandardDisconnect].disconnect();\n this.emit('disconnect');\n });\n }\n\n async signIn(input?: SolanaSignInInput): Promise<SolanaSignInOutput> {\n return this.#runWithGuard(async () => {\n if (this.#readyState !== WalletReadyState.Installed && this.#readyState !== WalletReadyState.Loadable) {\n throw new WalletNotReadyError();\n }\n this.#connecting = true;\n try {\n const outputs = await this.#wallet.features[SolanaSignIn].signIn({\n ...input,\n domain: input?.domain ?? window.location.host,\n });\n if (outputs.length > 0) {\n return outputs[0];\n } else {\n throw new Error('Sign in failed, no sign in result returned by wallet');\n }\n } catch (e) {\n throw new WalletConnectionError((e instanceof Error && e.message) || 'Unknown error', e);\n } finally {\n this.#connecting = false;\n }\n });\n }\n\n async signMessage(message: Uint8Array): Promise<Uint8Array> {\n return await this.#runWithGuard(async () => {\n const account = this.#assertIsAuthorized();\n try {\n const outputs = await this.#wallet.features[SolanaSignMessage].signMessage({\n account,\n message: message,\n });\n return outputs[0].signature;\n } catch (error: unknown) {\n throw new WalletSignMessageError(getErrorMessage(error), error);\n }\n });\n }\n\n async sendTransaction<T extends LegacyTransaction | VersionedTransaction>(\n transaction: T,\n connection: Connection,\n options?: SendOptions,\n ): Promise<TransactionSignature> {\n return await this.#runWithGuard(async () => {\n const account = this.#assertIsAuthorized();\n try {\n function getTargetCommitment() {\n let targetCommitment: Finality;\n switch (connection.commitment) {\n case 'confirmed':\n case 'finalized':\n case 'processed':\n targetCommitment = connection.commitment;\n break;\n default:\n targetCommitment = 'finalized';\n }\n let targetPreflightCommitment: Finality;\n switch (options?.preflightCommitment) {\n case 'confirmed':\n case 'finalized':\n case 'processed':\n targetPreflightCommitment = options.preflightCommitment;\n break;\n case undefined:\n targetPreflightCommitment = targetCommitment;\n break;\n default:\n targetPreflightCommitment = 'finalized';\n }\n const preflightCommitmentScore =\n targetPreflightCommitment === 'finalized'\n ? 2\n : targetPreflightCommitment === 'confirmed'\n ? 1\n : 0;\n const targetCommitmentScore =\n targetCommitment === 'finalized' ? 2 : targetCommitment === 'confirmed' ? 1 : 0;\n return preflightCommitmentScore < targetCommitmentScore\n ? targetPreflightCommitment\n : targetCommitment;\n }\n if (SolanaSignAndSendTransaction in this.#wallet.features) {\n const chain = chainOrClusterToChainId(this.#wallet.currentAuthorization!.chain);\n const [signature] = (\n await this.#wallet.features[SolanaSignAndSendTransaction].signAndSendTransaction({\n account,\n transaction: transaction.serialize(),\n chain: chain,\n options: options\n ? {\n skipPreflight: options.skipPreflight,\n maxRetries: options.maxRetries,\n }\n : undefined,\n })\n ).map((output) => {\n return base64FromUint8Array(output.signature);\n });\n\n return signature;\n } else {\n const [signedTransaction] = await this.#performSignTransactions([transaction]);\n if (isVersionedTransaction(signedTransaction)) {\n return await connection.sendTransaction(signedTransaction);\n } else {\n const serializedTransaction = signedTransaction.serialize();\n return await connection.sendRawTransaction(serializedTransaction, {\n ...options,\n preflightCommitment: getTargetCommitment(),\n });\n }\n }\n } catch (error: unknown) {\n throw new WalletSendTransactionError(getErrorMessage(error), error);\n }\n });\n }\n\n async signTransaction<T extends LegacyTransaction | VersionedTransaction>(transaction: T): Promise<T> {\n return await this.#runWithGuard(async () => {\n const [signedTransaction] = await this.#performSignTransactions([transaction]);\n return signedTransaction;\n });\n }\n\n async signAllTransactions<T extends LegacyTransaction | VersionedTransaction>(transactions: T[]): Promise<T[]> {\n return await this.#runWithGuard(async () => {\n const signedTransactions = await this.#performSignTransactions(transactions);\n return signedTransactions;\n });\n }\n\n #declareWalletAsInstalled(): void {\n if (this.#readyState !== WalletReadyState.Installed) {\n this.emit('readyStateChange', (this.#readyState = WalletReadyState.Installed));\n }\n }\n\n #assertIsAuthorized() {\n if (!this.#wallet.isAuthorized || !this.#selectedAccount) throw new WalletNotConnectedError();\n return this.#selectedAccount;\n }\n\n async #performSignTransactions<T extends LegacyTransaction | VersionedTransaction>(\n transactions: T[],\n ): Promise<T[]> {\n const account = this.#assertIsAuthorized();\n try {\n if (SolanaSignTransaction in this.#wallet.features) {\n return this.#wallet.features[SolanaSignTransaction].signTransaction(\n ...transactions.map((value) => {\n return { account, transaction: value.serialize() };\n }),\n ).then((outputs) => {\n return outputs.map((output: SolanaSignTransactionOutput) => {\n const byteArray = output.signedTransaction;\n const numSignatures = byteArray[0];\n const messageOffset = numSignatures * SIGNATURE_LENGTH_IN_BYTES + 1;\n const version = VersionedMessage.deserializeMessageVersion(\n byteArray.slice(messageOffset, byteArray.length),\n );\n if (version === 'legacy') {\n return Transaction.from(byteArray) as T;\n } else {\n return VersionedTransaction.deserialize(byteArray) as T;\n }\n });\n });\n } else {\n throw new Error('Connected wallet does not support signing transactions');\n }\n } catch (error: unknown) {\n throw new WalletSignTransactionError(getErrorMessage(error), error);\n }\n }\n\n async #runWithGuard<TReturn>(callback: () => Promise<TReturn>) {\n try {\n return await callback();\n } catch (e: unknown) {\n this.emit('error', e instanceof WalletError ? e : new WalletError(getErrorMessage(e), e));\n throw e;\n }\n }\n}\n\nexport class LocalSolanaMobileWalletAdapter extends BaseSolanaMobileWalletAdapter {\n /**\n * @deprecated @param cluster config paramter is deprecated, use @param chain instead\n */\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n cluster: Cluster;\n onWalletNotFound: (mobileWalletAdapter: LocalSolanaMobileWalletAdapter) => Promise<void>;\n });\n\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n chain: Chain;\n onWalletNotFound: (mobileWalletAdapter: LocalSolanaMobileWalletAdapter) => Promise<void>;\n });\n\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n chain: Chain;\n cluster: Cluster;\n onWalletNotFound: (mobileWalletAdapter: LocalSolanaMobileWalletAdapter) => Promise<void>;\n }) {\n const chain = chainOrClusterToChainId(config.chain ?? config.cluster);\n super(\n new LocalSolanaMobileWalletAdapterWallet({\n appIdentity: config.appIdentity,\n authorizationCache: {\n set: config.authorizationResultCache.set,\n get: async () => {\n return (await config.authorizationResultCache.get()) as Authorization | undefined;\n },\n clear: config.authorizationResultCache.clear,\n },\n chains: [chain],\n chainSelector: createDefaultChainSelector(),\n onWalletNotFound: async () => {\n config.onWalletNotFound(this);\n },\n }),\n {\n addressSelector: config.addressSelector,\n chain: chain,\n },\n );\n }\n}\n\nexport class RemoteSolanaMobileWalletAdapter extends BaseSolanaMobileWalletAdapter {\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n chain: Chain;\n remoteHostAuthority: string;\n onWalletNotFound: (mobileWalletAdapter: RemoteSolanaMobileWalletAdapter) => Promise<void>;\n }) {\n const chain = chainOrClusterToChainId(config.chain);\n super(\n new RemoteSolanaMobileWalletAdapterWallet({\n appIdentity: config.appIdentity,\n authorizationCache: {\n set: config.authorizationResultCache.set,\n get: async () => {\n return (await config.authorizationResultCache.get()) as Authorization | undefined;\n },\n clear: config.authorizationResultCache.clear,\n },\n chains: [chain],\n chainSelector: createDefaultChainSelector(),\n remoteHostAuthority: config.remoteHostAuthority,\n onWalletNotFound: async () => {\n config.onWalletNotFound(this);\n },\n }),\n {\n addressSelector: config.addressSelector,\n chain: chain,\n },\n );\n }\n}\n\nexport class SolanaMobileWalletAdapter extends LocalSolanaMobileWalletAdapter {}\n","import { AddressSelector } from './adapter.js';\n\nexport function createDefaultAddressSelector(): AddressSelector {\n return {\n async select(addresses) {\n return addresses[0];\n },\n };\n}\n\n/**\n * @deprecated Use {@link createDefaultAddressSelector} instead.\n */\nexport default createDefaultAddressSelector;\n","import { createDefaultAuthorizationCache as baseCreateDefaultAuthorizationCache } from '@solana-mobile/wallet-standard-mobile';\n\nimport { AuthorizationResultCache } from './adapter.js';\n\nexport function createDefaultAuthorizationResultCache(): AuthorizationResultCache {\n return baseCreateDefaultAuthorizationCache();\n}\n\n/**\n * @deprecated Use {@link createDefaultAuthorizationResultCache} instead.\n */\nexport default createDefaultAuthorizationResultCache;\n","import { defaultErrorModalWalletNotFoundHandler } from '@solana-mobile/wallet-standard-mobile';\n\nimport { SolanaMobileWalletAdapter } from './adapter.js';\n\nasync function defaultWalletNotFoundHandler(_mobileWalletAdapter: SolanaMobileWalletAdapter) {\n return defaultErrorModalWalletNotFoundHandler();\n}\n\nexport function createDefaultWalletNotFoundHandler(): (\n mobileWalletAdapter: SolanaMobileWalletAdapter,\n) => Promise<void> {\n return defaultWalletNotFoundHandler;\n}\n\n/**\n * @deprecated Use {@link createDefaultWalletNotFoundHandler} instead.\n */\nexport default createDefaultWalletNotFoundHandler;\n"],"mappings":"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"}
|
package/lib/cjs/index.native.js
CHANGED
|
@@ -24,9 +24,9 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
24
24
|
let _solana_wallet_adapter_base = require("@solana/wallet-adapter-base");
|
|
25
25
|
let _solana_wallet_standard_features = require("@solana/wallet-standard-features");
|
|
26
26
|
let _solana_web3_js = require("@solana/web3.js");
|
|
27
|
+
let _solana_mobile_mobile_wallet_adapter_protocol_encoding = require("@solana-mobile/mobile-wallet-adapter-protocol/encoding");
|
|
27
28
|
let _solana_mobile_wallet_standard_mobile = require("@solana-mobile/wallet-standard-mobile");
|
|
28
29
|
let _wallet_standard_core = require("@wallet-standard/core");
|
|
29
|
-
let js_base64 = require("js-base64");
|
|
30
30
|
let react_native = require("react-native");
|
|
31
31
|
let _react_native_async_storage_async_storage = require("@react-native-async-storage/async-storage");
|
|
32
32
|
_react_native_async_storage_async_storage = __toESM(_react_native_async_storage_async_storage);
|
|
@@ -78,8 +78,8 @@ var BaseSolanaMobileWalletAdapter = class extends _solana_wallet_adapter_base.Ba
|
|
|
78
78
|
constructor(wallet, config) {
|
|
79
79
|
super();
|
|
80
80
|
this.#accountSelector = async (accounts) => {
|
|
81
|
-
const selectedBase64EncodedAddress = await config.addressSelector.select(accounts.map(({ publicKey }) => (0,
|
|
82
|
-
return accounts.find(({ publicKey }) => (0,
|
|
81
|
+
const selectedBase64EncodedAddress = await config.addressSelector.select(accounts.map(({ publicKey }) => (0, _solana_mobile_mobile_wallet_adapter_protocol_encoding.base64FromUint8Array)(new Uint8Array(publicKey))));
|
|
82
|
+
return accounts.find(({ publicKey }) => (0, _solana_mobile_mobile_wallet_adapter_protocol_encoding.base64FromUint8Array)(new Uint8Array(publicKey)) === selectedBase64EncodedAddress) ?? accounts[0];
|
|
83
83
|
};
|
|
84
84
|
this.#wallet = wallet;
|
|
85
85
|
this.#wallet.features[_wallet_standard_core.StandardEvents].on("change", this.#handleChangeEvent);
|
|
@@ -222,7 +222,7 @@ var BaseSolanaMobileWalletAdapter = class extends _solana_wallet_adapter_base.Ba
|
|
|
222
222
|
maxRetries: options.maxRetries
|
|
223
223
|
} : void 0
|
|
224
224
|
})).map((output) => {
|
|
225
|
-
return (0,
|
|
225
|
+
return (0, _solana_mobile_mobile_wallet_adapter_protocol_encoding.base64FromUint8Array)(output.signature);
|
|
226
226
|
});
|
|
227
227
|
return signature;
|
|
228
228
|
} else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.native.js","names":["Platform","WalletStandardWalletName","WalletStandardRemoteWalletName","BaseSignInMessageSignerWalletAdapter","WalletReadyState","#declareWalletAsInstalled","#accountSelector","#selectedAccount","#publicKey","#wallet","StandardEvents","#handleChangeEvent","PublicKey","WalletPublicKeyError","#connecting","#readyState","#connect","#runWithGuard","WalletNotReadyError","StandardConnect","WalletConnectionError","SolanaSignIn","StandardDisconnect","#assertIsAuthorized","SolanaSignMessage","WalletSignMessageError","SolanaSignAndSendTransaction","#performSignTransactions","WalletSendTransactionError","WalletNotConnectedError","SolanaSignTransaction","VersionedMessage","Transaction","VersionedTransaction","WalletSignTransactionError","WalletError","LocalSolanaMobileWalletAdapterWallet","RemoteSolanaMobileWalletAdapterWallet","AsyncStorage"],"sources":["../../src/__forks__/react-native/getIsSupported.ts","../../src/adapter.ts","../../src/createDefaultAddressSelector.ts","../../src/__forks__/react-native/createDefaultAuthorizationResultCache.ts","../../src/createDefaultWalletNotFoundHandler.ts"],"sourcesContent":["import { Platform } from 'react-native';\n\nexport default function getIsSupported() {\n return Platform.OS === 'android';\n}\n","import {\n BaseSignInMessageSignerWalletAdapter,\n WalletConnectionError,\n WalletError,\n WalletName,\n WalletNotConnectedError,\n WalletNotReadyError,\n WalletPublicKeyError,\n WalletReadyState,\n WalletSendTransactionError,\n WalletSignMessageError,\n WalletSignTransactionError,\n} from '@solana/wallet-adapter-base';\nimport {\n SolanaSignAndSendTransaction,\n SolanaSignIn,\n SolanaSignInInput,\n SolanaSignInOutput,\n SolanaSignMessage,\n SolanaSignTransaction,\n SolanaSignTransactionOutput,\n} from '@solana/wallet-standard-features';\nimport {\n Connection,\n PublicKey,\n SendOptions,\n Transaction as LegacyTransaction,\n Transaction,\n TransactionSignature,\n TransactionVersion,\n VersionedMessage,\n VersionedTransaction,\n} from '@solana/web3.js';\nimport {\n AppIdentity,\n AuthorizationResult,\n Base64EncodedAddress,\n Chain,\n Cluster,\n Finality,\n SignInPayload,\n} from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport {\n Authorization,\n createDefaultChainSelector,\n LocalSolanaMobileWalletAdapterWallet,\n RemoteSolanaMobileWalletAdapterWallet,\n SolanaMobileWalletAdapterRemoteWalletName as WalletStandardRemoteWalletName,\n SolanaMobileWalletAdapterWalletName as WalletStandardWalletName,\n} from '@solana-mobile/wallet-standard-mobile';\nimport {\n IdentifierString,\n StandardConnect,\n StandardDisconnect,\n StandardEvents,\n StandardEventsChangeProperties,\n WalletAccount,\n} from '@wallet-standard/core';\n\nimport { fromUint8Array } from './base64Utils.js';\nimport getIsSupported from './getIsSupported.js';\n\nexport interface AuthorizationResultCache {\n clear(): Promise<void>;\n get(): Promise<AuthorizationResult | Authorization | undefined>;\n set(authorizationResult: AuthorizationResult | Authorization): Promise<void>;\n}\n\nexport interface AddressSelector {\n select(addresses: Base64EncodedAddress[]): Promise<Base64EncodedAddress>;\n}\n\nexport const SolanaMobileWalletAdapterWalletName = WalletStandardWalletName as WalletName;\nexport const SolanaMobileWalletAdapterRemoteWalletName = WalletStandardRemoteWalletName as WalletName;\n\nconst SIGNATURE_LENGTH_IN_BYTES = 64;\n\nfunction isVersionedTransaction(\n transaction: LegacyTransaction | VersionedTransaction,\n): transaction is VersionedTransaction {\n return 'version' in transaction;\n}\n\nfunction chainOrClusterToChainId(chain: Cluster | Chain): IdentifierString {\n switch (chain) {\n case 'mainnet-beta':\n return 'solana:mainnet';\n case 'testnet':\n return 'solana:testnet';\n case 'devnet':\n return 'solana:devnet';\n default:\n return chain;\n }\n}\n\nfunction getErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : 'Unknown error';\n}\n\nabstract class BaseSolanaMobileWalletAdapter extends BaseSignInMessageSignerWalletAdapter {\n readonly supportedTransactionVersions: Set<TransactionVersion> = new Set(\n // FIXME(#244): We can't actually know what versions are supported until we know which wallet we're talking to.\n ['legacy', 0],\n );\n name;\n icon;\n url;\n #wallet: LocalSolanaMobileWalletAdapterWallet | RemoteSolanaMobileWalletAdapterWallet;\n #connecting = false;\n #readyState: WalletReadyState = getIsSupported() ? WalletReadyState.Loadable : WalletReadyState.Unsupported;\n #accountSelector: (accounts: readonly WalletAccount[]) => Promise<WalletAccount>;\n #selectedAccount: WalletAccount | undefined;\n #publicKey: PublicKey | undefined;\n\n #handleChangeEvent = async (properties: StandardEventsChangeProperties) => {\n if (properties.accounts && properties.accounts.length > 0) {\n this.#declareWalletAsInstalled();\n const nextSelectedAccount = await this.#accountSelector(properties.accounts);\n if (nextSelectedAccount !== this.#selectedAccount) {\n this.#selectedAccount = nextSelectedAccount;\n this.#publicKey = undefined;\n this.emit(\n 'connect',\n // Having just set `this.#selectedAccount`, `this.publicKey` is definitely non-null\n\n this.publicKey!,\n );\n }\n }\n };\n\n protected constructor(\n wallet: LocalSolanaMobileWalletAdapterWallet | RemoteSolanaMobileWalletAdapterWallet,\n config: {\n addressSelector: AddressSelector;\n chain: Chain;\n },\n ) {\n super();\n // this.#chain = chainOrClusterToChainId(config.chain);\n this.#accountSelector = async (accounts: readonly WalletAccount[]) => {\n const selectedBase64EncodedAddress = await config.addressSelector.select(\n accounts.map(({ publicKey }) => fromUint8Array(new Uint8Array(publicKey))),\n );\n return (\n accounts.find(\n ({ publicKey }) => fromUint8Array(new Uint8Array(publicKey)) === selectedBase64EncodedAddress,\n ) ?? accounts[0]\n );\n };\n this.#wallet = wallet;\n this.#wallet.features[StandardEvents].on('change', this.#handleChangeEvent);\n this.name = this.#wallet.name as WalletName;\n this.icon = this.#wallet.icon;\n this.url = this.#wallet.url;\n // TODO: evaluate if this logic should be kept - it seems to create a nasty bug where\n // the wallet tries to auto connect on page load and gets blocked by the popup blocker\n // if (this.#readyState !== WalletReadyState.Unsupported) {\n // config.authorizationResultCache.get().then((authorizationResult) => {\n // if (authorizationResult) {\n // // Having a prior authorization result is, right now, the best\n // // indication that a mobile wallet is installed. There is no API\n // // we can use to test for whether the association URI is supported.\n // this.#declareWalletAsInstalled();\n // }\n // });\n // }\n }\n\n get publicKey(): PublicKey | null {\n if (!this.#publicKey && this.#selectedAccount) {\n try {\n this.#publicKey = new PublicKey(this.#selectedAccount.publicKey);\n } catch (e) {\n throw new WalletPublicKeyError((e instanceof Error && e?.message) || 'Unknown error', e);\n }\n }\n return this.#publicKey ?? null;\n }\n\n get connected(): boolean {\n return this.#wallet.connected;\n }\n\n get connecting(): boolean {\n return this.#connecting;\n }\n\n get readyState(): WalletReadyState {\n return this.#readyState;\n }\n\n /** @deprecated Use `autoConnect()` instead. */\n async autoConnect_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(): Promise<void> {\n return await this.autoConnect();\n }\n\n async autoConnect(): Promise<void> {\n this.#connect(true);\n }\n\n async connect(): Promise<void> {\n this.#connect();\n }\n\n async #connect(autoConnect: boolean = false): Promise<void> {\n if (this.connecting || this.connected) {\n return;\n }\n return await this.#runWithGuard(async () => {\n if (this.#readyState !== WalletReadyState.Installed && this.#readyState !== WalletReadyState.Loadable) {\n throw new WalletNotReadyError();\n }\n this.#connecting = true;\n try {\n await this.#wallet.features[StandardConnect].connect({ silent: autoConnect });\n } catch (e) {\n throw new WalletConnectionError((e instanceof Error && e.message) || 'Unknown error', e);\n } finally {\n this.#connecting = false;\n }\n });\n }\n\n /** @deprecated Use `connect()` or `autoConnect()` instead. */\n async performAuthorization(signInPayload?: SignInPayload): Promise<AuthorizationResult> {\n try {\n const cachedAuthorizationResult = await this.#wallet.cachedAuthorizationResult;\n if (cachedAuthorizationResult) {\n await this.#wallet.features[StandardConnect].connect({ silent: true });\n return cachedAuthorizationResult;\n }\n\n if (signInPayload) {\n await this.#wallet.features[SolanaSignIn].signIn(signInPayload);\n } else await this.#wallet.features[StandardConnect].connect();\n const authorizationResult = await await this.#wallet.cachedAuthorizationResult;\n return authorizationResult!;\n } catch (e) {\n throw new WalletConnectionError((e instanceof Error && e.message) || 'Unknown error', e);\n }\n }\n\n async disconnect(): Promise<void> {\n // return await this.#runWithGuard(this.#wallet.features[StandardDisconnect].disconnect);\n return await this.#runWithGuard(async () => {\n this.#connecting = false;\n this.#publicKey = undefined;\n this.#selectedAccount = undefined;\n await this.#wallet.features[StandardDisconnect].disconnect();\n this.emit('disconnect');\n });\n }\n\n async signIn(input?: SolanaSignInInput): Promise<SolanaSignInOutput> {\n return this.#runWithGuard(async () => {\n if (this.#readyState !== WalletReadyState.Installed && this.#readyState !== WalletReadyState.Loadable) {\n throw new WalletNotReadyError();\n }\n this.#connecting = true;\n try {\n const outputs = await this.#wallet.features[SolanaSignIn].signIn({\n ...input,\n domain: input?.domain ?? window.location.host,\n });\n if (outputs.length > 0) {\n return outputs[0];\n } else {\n throw new Error('Sign in failed, no sign in result returned by wallet');\n }\n } catch (e) {\n throw new WalletConnectionError((e instanceof Error && e.message) || 'Unknown error', e);\n } finally {\n this.#connecting = false;\n }\n });\n }\n\n async signMessage(message: Uint8Array): Promise<Uint8Array> {\n return await this.#runWithGuard(async () => {\n const account = this.#assertIsAuthorized();\n try {\n const outputs = await this.#wallet.features[SolanaSignMessage].signMessage({\n account,\n message: message,\n });\n return outputs[0].signature;\n } catch (error: unknown) {\n throw new WalletSignMessageError(getErrorMessage(error), error);\n }\n });\n }\n\n async sendTransaction<T extends LegacyTransaction | VersionedTransaction>(\n transaction: T,\n connection: Connection,\n options?: SendOptions,\n ): Promise<TransactionSignature> {\n return await this.#runWithGuard(async () => {\n const account = this.#assertIsAuthorized();\n try {\n function getTargetCommitment() {\n let targetCommitment: Finality;\n switch (connection.commitment) {\n case 'confirmed':\n case 'finalized':\n case 'processed':\n targetCommitment = connection.commitment;\n break;\n default:\n targetCommitment = 'finalized';\n }\n let targetPreflightCommitment: Finality;\n switch (options?.preflightCommitment) {\n case 'confirmed':\n case 'finalized':\n case 'processed':\n targetPreflightCommitment = options.preflightCommitment;\n break;\n case undefined:\n targetPreflightCommitment = targetCommitment;\n break;\n default:\n targetPreflightCommitment = 'finalized';\n }\n const preflightCommitmentScore =\n targetPreflightCommitment === 'finalized'\n ? 2\n : targetPreflightCommitment === 'confirmed'\n ? 1\n : 0;\n const targetCommitmentScore =\n targetCommitment === 'finalized' ? 2 : targetCommitment === 'confirmed' ? 1 : 0;\n return preflightCommitmentScore < targetCommitmentScore\n ? targetPreflightCommitment\n : targetCommitment;\n }\n if (SolanaSignAndSendTransaction in this.#wallet.features) {\n const chain = chainOrClusterToChainId(this.#wallet.currentAuthorization!.chain);\n const [signature] = (\n await this.#wallet.features[SolanaSignAndSendTransaction].signAndSendTransaction({\n account,\n transaction: transaction.serialize(),\n chain: chain,\n options: options\n ? {\n skipPreflight: options.skipPreflight,\n maxRetries: options.maxRetries,\n }\n : undefined,\n })\n ).map((output) => {\n return fromUint8Array(output.signature);\n });\n\n return signature;\n } else {\n const [signedTransaction] = await this.#performSignTransactions([transaction]);\n if (isVersionedTransaction(signedTransaction)) {\n return await connection.sendTransaction(signedTransaction);\n } else {\n const serializedTransaction = signedTransaction.serialize();\n return await connection.sendRawTransaction(serializedTransaction, {\n ...options,\n preflightCommitment: getTargetCommitment(),\n });\n }\n }\n } catch (error: unknown) {\n throw new WalletSendTransactionError(getErrorMessage(error), error);\n }\n });\n }\n\n async signTransaction<T extends LegacyTransaction | VersionedTransaction>(transaction: T): Promise<T> {\n return await this.#runWithGuard(async () => {\n const [signedTransaction] = await this.#performSignTransactions([transaction]);\n return signedTransaction;\n });\n }\n\n async signAllTransactions<T extends LegacyTransaction | VersionedTransaction>(transactions: T[]): Promise<T[]> {\n return await this.#runWithGuard(async () => {\n const signedTransactions = await this.#performSignTransactions(transactions);\n return signedTransactions;\n });\n }\n\n #declareWalletAsInstalled(): void {\n if (this.#readyState !== WalletReadyState.Installed) {\n this.emit('readyStateChange', (this.#readyState = WalletReadyState.Installed));\n }\n }\n\n #assertIsAuthorized() {\n if (!this.#wallet.isAuthorized || !this.#selectedAccount) throw new WalletNotConnectedError();\n return this.#selectedAccount;\n }\n\n async #performSignTransactions<T extends LegacyTransaction | VersionedTransaction>(\n transactions: T[],\n ): Promise<T[]> {\n const account = this.#assertIsAuthorized();\n try {\n if (SolanaSignTransaction in this.#wallet.features) {\n return this.#wallet.features[SolanaSignTransaction].signTransaction(\n ...transactions.map((value) => {\n return { account, transaction: value.serialize() };\n }),\n ).then((outputs) => {\n return outputs.map((output: SolanaSignTransactionOutput) => {\n const byteArray = output.signedTransaction;\n const numSignatures = byteArray[0];\n const messageOffset = numSignatures * SIGNATURE_LENGTH_IN_BYTES + 1;\n const version = VersionedMessage.deserializeMessageVersion(\n byteArray.slice(messageOffset, byteArray.length),\n );\n if (version === 'legacy') {\n return Transaction.from(byteArray) as T;\n } else {\n return VersionedTransaction.deserialize(byteArray) as T;\n }\n });\n });\n } else {\n throw new Error('Connected wallet does not support signing transactions');\n }\n } catch (error: unknown) {\n throw new WalletSignTransactionError(getErrorMessage(error), error);\n }\n }\n\n async #runWithGuard<TReturn>(callback: () => Promise<TReturn>) {\n try {\n return await callback();\n } catch (e: unknown) {\n this.emit('error', e instanceof WalletError ? e : new WalletError(getErrorMessage(e), e));\n throw e;\n }\n }\n}\n\nexport class LocalSolanaMobileWalletAdapter extends BaseSolanaMobileWalletAdapter {\n /**\n * @deprecated @param cluster config paramter is deprecated, use @param chain instead\n */\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n cluster: Cluster;\n onWalletNotFound: (mobileWalletAdapter: LocalSolanaMobileWalletAdapter) => Promise<void>;\n });\n\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n chain: Chain;\n onWalletNotFound: (mobileWalletAdapter: LocalSolanaMobileWalletAdapter) => Promise<void>;\n });\n\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n chain: Chain;\n cluster: Cluster;\n onWalletNotFound: (mobileWalletAdapter: LocalSolanaMobileWalletAdapter) => Promise<void>;\n }) {\n const chain = chainOrClusterToChainId(config.chain ?? config.cluster);\n super(\n new LocalSolanaMobileWalletAdapterWallet({\n appIdentity: config.appIdentity,\n authorizationCache: {\n set: config.authorizationResultCache.set,\n get: async () => {\n return (await config.authorizationResultCache.get()) as Authorization | undefined;\n },\n clear: config.authorizationResultCache.clear,\n },\n chains: [chain],\n chainSelector: createDefaultChainSelector(),\n onWalletNotFound: async () => {\n config.onWalletNotFound(this);\n },\n }),\n {\n addressSelector: config.addressSelector,\n chain: chain,\n },\n );\n }\n}\n\nexport class RemoteSolanaMobileWalletAdapter extends BaseSolanaMobileWalletAdapter {\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n chain: Chain;\n remoteHostAuthority: string;\n onWalletNotFound: (mobileWalletAdapter: RemoteSolanaMobileWalletAdapter) => Promise<void>;\n }) {\n const chain = chainOrClusterToChainId(config.chain);\n super(\n new RemoteSolanaMobileWalletAdapterWallet({\n appIdentity: config.appIdentity,\n authorizationCache: {\n set: config.authorizationResultCache.set,\n get: async () => {\n return (await config.authorizationResultCache.get()) as Authorization | undefined;\n },\n clear: config.authorizationResultCache.clear,\n },\n chains: [chain],\n chainSelector: createDefaultChainSelector(),\n remoteHostAuthority: config.remoteHostAuthority,\n onWalletNotFound: async () => {\n config.onWalletNotFound(this);\n },\n }),\n {\n addressSelector: config.addressSelector,\n chain: chain,\n },\n );\n }\n}\n\nexport class SolanaMobileWalletAdapter extends LocalSolanaMobileWalletAdapter {}\n","import { AddressSelector } from './adapter.js';\n\nexport default function createDefaultAddressSelector(): AddressSelector {\n return {\n async select(addresses) {\n return addresses[0];\n },\n };\n}\n","import AsyncStorage from '@react-native-async-storage/async-storage';\nimport { AuthorizationResult } from '@solana-mobile/mobile-wallet-adapter-protocol';\n\nimport { AuthorizationResultCache } from '../../adapter.js';\n\nconst CACHE_KEY = 'SolanaMobileWalletAdapterDefaultAuthorizationCache';\n\nexport default function createDefaultAuthorizationResultCache(): AuthorizationResultCache {\n return {\n async clear() {\n try {\n await AsyncStorage.removeItem(CACHE_KEY);\n // eslint-disable-next-line no-empty\n } catch {}\n },\n async get() {\n try {\n return (\n (JSON.parse((await AsyncStorage.getItem(CACHE_KEY)) as string) as AuthorizationResult) || undefined\n );\n // eslint-disable-next-line no-empty\n } catch {}\n },\n async set(authorizationResult: AuthorizationResult) {\n try {\n await AsyncStorage.setItem(CACHE_KEY, JSON.stringify(authorizationResult));\n // eslint-disable-next-line no-empty\n } catch {}\n },\n };\n}\n","import { defaultErrorModalWalletNotFoundHandler } from '@solana-mobile/wallet-standard-mobile';\n\nimport { SolanaMobileWalletAdapter } from './adapter.js';\n\nasync function defaultWalletNotFoundHandler(_mobileWalletAdapter: SolanaMobileWalletAdapter) {\n return defaultErrorModalWalletNotFoundHandler();\n}\n\nexport default function createDefaultWalletNotFoundHandler(): (\n mobileWalletAdapter: SolanaMobileWalletAdapter,\n) => Promise<void> {\n return defaultWalletNotFoundHandler;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.native.js","names":["Platform","WalletStandardWalletName","WalletStandardRemoteWalletName","BaseSignInMessageSignerWalletAdapter","WalletReadyState","#declareWalletAsInstalled","#accountSelector","#selectedAccount","#publicKey","#wallet","StandardEvents","#handleChangeEvent","PublicKey","WalletPublicKeyError","#connecting","#readyState","#connect","#runWithGuard","WalletNotReadyError","StandardConnect","WalletConnectionError","SolanaSignIn","StandardDisconnect","#assertIsAuthorized","SolanaSignMessage","WalletSignMessageError","SolanaSignAndSendTransaction","#performSignTransactions","WalletSendTransactionError","WalletNotConnectedError","SolanaSignTransaction","VersionedMessage","Transaction","VersionedTransaction","WalletSignTransactionError","WalletError","LocalSolanaMobileWalletAdapterWallet","RemoteSolanaMobileWalletAdapterWallet","AsyncStorage"],"sources":["../../src/__forks__/react-native/getIsSupported.ts","../../src/adapter.ts","../../src/createDefaultAddressSelector.ts","../../src/__forks__/react-native/createDefaultAuthorizationResultCache.ts","../../src/createDefaultWalletNotFoundHandler.ts"],"sourcesContent":["import { Platform } from 'react-native';\n\nexport function getIsSupported() {\n return Platform.OS === 'android';\n}\n\n/**\n * @deprecated Use {@link getIsSupported} instead.\n */\nexport default getIsSupported;\n","import {\n BaseSignInMessageSignerWalletAdapter,\n WalletConnectionError,\n WalletError,\n WalletName,\n WalletNotConnectedError,\n WalletNotReadyError,\n WalletPublicKeyError,\n WalletReadyState,\n WalletSendTransactionError,\n WalletSignMessageError,\n WalletSignTransactionError,\n} from '@solana/wallet-adapter-base';\nimport {\n SolanaSignAndSendTransaction,\n SolanaSignIn,\n SolanaSignInInput,\n SolanaSignInOutput,\n SolanaSignMessage,\n SolanaSignTransaction,\n SolanaSignTransactionOutput,\n} from '@solana/wallet-standard-features';\nimport {\n Connection,\n PublicKey,\n SendOptions,\n Transaction as LegacyTransaction,\n Transaction,\n TransactionSignature,\n TransactionVersion,\n VersionedMessage,\n VersionedTransaction,\n} from '@solana/web3.js';\nimport {\n AppIdentity,\n AuthorizationResult,\n Base64EncodedAddress,\n Chain,\n Cluster,\n Finality,\n SignInPayload,\n} from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { base64FromUint8Array } from '@solana-mobile/mobile-wallet-adapter-protocol/encoding';\nimport {\n Authorization,\n createDefaultChainSelector,\n LocalSolanaMobileWalletAdapterWallet,\n RemoteSolanaMobileWalletAdapterWallet,\n SolanaMobileWalletAdapterRemoteWalletName as WalletStandardRemoteWalletName,\n SolanaMobileWalletAdapterWalletName as WalletStandardWalletName,\n} from '@solana-mobile/wallet-standard-mobile';\nimport {\n IdentifierString,\n StandardConnect,\n StandardDisconnect,\n StandardEvents,\n StandardEventsChangeProperties,\n WalletAccount,\n} from '@wallet-standard/core';\n\nimport { getIsSupported } from './getIsSupported.js';\n\nexport interface AuthorizationResultCache {\n clear(): Promise<void>;\n get(): Promise<AuthorizationResult | Authorization | undefined>;\n set(authorizationResult: AuthorizationResult | Authorization): Promise<void>;\n}\n\nexport interface AddressSelector {\n select(addresses: Base64EncodedAddress[]): Promise<Base64EncodedAddress>;\n}\n\nexport const SolanaMobileWalletAdapterWalletName = WalletStandardWalletName as WalletName;\nexport const SolanaMobileWalletAdapterRemoteWalletName = WalletStandardRemoteWalletName as WalletName;\n\nconst SIGNATURE_LENGTH_IN_BYTES = 64;\n\nfunction isVersionedTransaction(\n transaction: LegacyTransaction | VersionedTransaction,\n): transaction is VersionedTransaction {\n return 'version' in transaction;\n}\n\nfunction chainOrClusterToChainId(chain: Cluster | Chain): IdentifierString {\n switch (chain) {\n case 'mainnet-beta':\n return 'solana:mainnet';\n case 'testnet':\n return 'solana:testnet';\n case 'devnet':\n return 'solana:devnet';\n default:\n return chain;\n }\n}\n\nfunction getErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : 'Unknown error';\n}\n\nabstract class BaseSolanaMobileWalletAdapter extends BaseSignInMessageSignerWalletAdapter {\n readonly supportedTransactionVersions: Set<TransactionVersion> = new Set(\n // FIXME(#244): We can't actually know what versions are supported until we know which wallet we're talking to.\n ['legacy', 0],\n );\n name;\n icon;\n url;\n #wallet: LocalSolanaMobileWalletAdapterWallet | RemoteSolanaMobileWalletAdapterWallet;\n #connecting = false;\n #readyState: WalletReadyState = getIsSupported() ? WalletReadyState.Loadable : WalletReadyState.Unsupported;\n #accountSelector: (accounts: readonly WalletAccount[]) => Promise<WalletAccount>;\n #selectedAccount: WalletAccount | undefined;\n #publicKey: PublicKey | undefined;\n\n #handleChangeEvent = async (properties: StandardEventsChangeProperties) => {\n if (properties.accounts && properties.accounts.length > 0) {\n this.#declareWalletAsInstalled();\n const nextSelectedAccount = await this.#accountSelector(properties.accounts);\n if (nextSelectedAccount !== this.#selectedAccount) {\n this.#selectedAccount = nextSelectedAccount;\n this.#publicKey = undefined;\n this.emit(\n 'connect',\n // Having just set `this.#selectedAccount`, `this.publicKey` is definitely non-null\n\n this.publicKey!,\n );\n }\n }\n };\n\n protected constructor(\n wallet: LocalSolanaMobileWalletAdapterWallet | RemoteSolanaMobileWalletAdapterWallet,\n config: {\n addressSelector: AddressSelector;\n chain: Chain;\n },\n ) {\n super();\n // this.#chain = chainOrClusterToChainId(config.chain);\n this.#accountSelector = async (accounts: readonly WalletAccount[]) => {\n const selectedBase64EncodedAddress = await config.addressSelector.select(\n accounts.map(({ publicKey }) => base64FromUint8Array(new Uint8Array(publicKey))),\n );\n return (\n accounts.find(\n ({ publicKey }) => base64FromUint8Array(new Uint8Array(publicKey)) === selectedBase64EncodedAddress,\n ) ?? accounts[0]\n );\n };\n this.#wallet = wallet;\n this.#wallet.features[StandardEvents].on('change', this.#handleChangeEvent);\n this.name = this.#wallet.name as WalletName;\n this.icon = this.#wallet.icon;\n this.url = this.#wallet.url;\n // TODO: evaluate if this logic should be kept - it seems to create a nasty bug where\n // the wallet tries to auto connect on page load and gets blocked by the popup blocker\n // if (this.#readyState !== WalletReadyState.Unsupported) {\n // config.authorizationResultCache.get().then((authorizationResult) => {\n // if (authorizationResult) {\n // // Having a prior authorization result is, right now, the best\n // // indication that a mobile wallet is installed. There is no API\n // // we can use to test for whether the association URI is supported.\n // this.#declareWalletAsInstalled();\n // }\n // });\n // }\n }\n\n get publicKey(): PublicKey | null {\n if (!this.#publicKey && this.#selectedAccount) {\n try {\n this.#publicKey = new PublicKey(this.#selectedAccount.publicKey);\n } catch (e) {\n throw new WalletPublicKeyError((e instanceof Error && e?.message) || 'Unknown error', e);\n }\n }\n return this.#publicKey ?? null;\n }\n\n get connected(): boolean {\n return this.#wallet.connected;\n }\n\n get connecting(): boolean {\n return this.#connecting;\n }\n\n get readyState(): WalletReadyState {\n return this.#readyState;\n }\n\n /** @deprecated Use `autoConnect()` instead. */\n async autoConnect_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(): Promise<void> {\n return await this.autoConnect();\n }\n\n async autoConnect(): Promise<void> {\n this.#connect(true);\n }\n\n async connect(): Promise<void> {\n this.#connect();\n }\n\n async #connect(autoConnect: boolean = false): Promise<void> {\n if (this.connecting || this.connected) {\n return;\n }\n return await this.#runWithGuard(async () => {\n if (this.#readyState !== WalletReadyState.Installed && this.#readyState !== WalletReadyState.Loadable) {\n throw new WalletNotReadyError();\n }\n this.#connecting = true;\n try {\n await this.#wallet.features[StandardConnect].connect({ silent: autoConnect });\n } catch (e) {\n throw new WalletConnectionError((e instanceof Error && e.message) || 'Unknown error', e);\n } finally {\n this.#connecting = false;\n }\n });\n }\n\n /** @deprecated Use `connect()` or `autoConnect()` instead. */\n async performAuthorization(signInPayload?: SignInPayload): Promise<AuthorizationResult> {\n try {\n const cachedAuthorizationResult = await this.#wallet.cachedAuthorizationResult;\n if (cachedAuthorizationResult) {\n await this.#wallet.features[StandardConnect].connect({ silent: true });\n return cachedAuthorizationResult;\n }\n\n if (signInPayload) {\n await this.#wallet.features[SolanaSignIn].signIn(signInPayload);\n } else await this.#wallet.features[StandardConnect].connect();\n const authorizationResult = await await this.#wallet.cachedAuthorizationResult;\n return authorizationResult!;\n } catch (e) {\n throw new WalletConnectionError((e instanceof Error && e.message) || 'Unknown error', e);\n }\n }\n\n async disconnect(): Promise<void> {\n // return await this.#runWithGuard(this.#wallet.features[StandardDisconnect].disconnect);\n return await this.#runWithGuard(async () => {\n this.#connecting = false;\n this.#publicKey = undefined;\n this.#selectedAccount = undefined;\n await this.#wallet.features[StandardDisconnect].disconnect();\n this.emit('disconnect');\n });\n }\n\n async signIn(input?: SolanaSignInInput): Promise<SolanaSignInOutput> {\n return this.#runWithGuard(async () => {\n if (this.#readyState !== WalletReadyState.Installed && this.#readyState !== WalletReadyState.Loadable) {\n throw new WalletNotReadyError();\n }\n this.#connecting = true;\n try {\n const outputs = await this.#wallet.features[SolanaSignIn].signIn({\n ...input,\n domain: input?.domain ?? window.location.host,\n });\n if (outputs.length > 0) {\n return outputs[0];\n } else {\n throw new Error('Sign in failed, no sign in result returned by wallet');\n }\n } catch (e) {\n throw new WalletConnectionError((e instanceof Error && e.message) || 'Unknown error', e);\n } finally {\n this.#connecting = false;\n }\n });\n }\n\n async signMessage(message: Uint8Array): Promise<Uint8Array> {\n return await this.#runWithGuard(async () => {\n const account = this.#assertIsAuthorized();\n try {\n const outputs = await this.#wallet.features[SolanaSignMessage].signMessage({\n account,\n message: message,\n });\n return outputs[0].signature;\n } catch (error: unknown) {\n throw new WalletSignMessageError(getErrorMessage(error), error);\n }\n });\n }\n\n async sendTransaction<T extends LegacyTransaction | VersionedTransaction>(\n transaction: T,\n connection: Connection,\n options?: SendOptions,\n ): Promise<TransactionSignature> {\n return await this.#runWithGuard(async () => {\n const account = this.#assertIsAuthorized();\n try {\n function getTargetCommitment() {\n let targetCommitment: Finality;\n switch (connection.commitment) {\n case 'confirmed':\n case 'finalized':\n case 'processed':\n targetCommitment = connection.commitment;\n break;\n default:\n targetCommitment = 'finalized';\n }\n let targetPreflightCommitment: Finality;\n switch (options?.preflightCommitment) {\n case 'confirmed':\n case 'finalized':\n case 'processed':\n targetPreflightCommitment = options.preflightCommitment;\n break;\n case undefined:\n targetPreflightCommitment = targetCommitment;\n break;\n default:\n targetPreflightCommitment = 'finalized';\n }\n const preflightCommitmentScore =\n targetPreflightCommitment === 'finalized'\n ? 2\n : targetPreflightCommitment === 'confirmed'\n ? 1\n : 0;\n const targetCommitmentScore =\n targetCommitment === 'finalized' ? 2 : targetCommitment === 'confirmed' ? 1 : 0;\n return preflightCommitmentScore < targetCommitmentScore\n ? targetPreflightCommitment\n : targetCommitment;\n }\n if (SolanaSignAndSendTransaction in this.#wallet.features) {\n const chain = chainOrClusterToChainId(this.#wallet.currentAuthorization!.chain);\n const [signature] = (\n await this.#wallet.features[SolanaSignAndSendTransaction].signAndSendTransaction({\n account,\n transaction: transaction.serialize(),\n chain: chain,\n options: options\n ? {\n skipPreflight: options.skipPreflight,\n maxRetries: options.maxRetries,\n }\n : undefined,\n })\n ).map((output) => {\n return base64FromUint8Array(output.signature);\n });\n\n return signature;\n } else {\n const [signedTransaction] = await this.#performSignTransactions([transaction]);\n if (isVersionedTransaction(signedTransaction)) {\n return await connection.sendTransaction(signedTransaction);\n } else {\n const serializedTransaction = signedTransaction.serialize();\n return await connection.sendRawTransaction(serializedTransaction, {\n ...options,\n preflightCommitment: getTargetCommitment(),\n });\n }\n }\n } catch (error: unknown) {\n throw new WalletSendTransactionError(getErrorMessage(error), error);\n }\n });\n }\n\n async signTransaction<T extends LegacyTransaction | VersionedTransaction>(transaction: T): Promise<T> {\n return await this.#runWithGuard(async () => {\n const [signedTransaction] = await this.#performSignTransactions([transaction]);\n return signedTransaction;\n });\n }\n\n async signAllTransactions<T extends LegacyTransaction | VersionedTransaction>(transactions: T[]): Promise<T[]> {\n return await this.#runWithGuard(async () => {\n const signedTransactions = await this.#performSignTransactions(transactions);\n return signedTransactions;\n });\n }\n\n #declareWalletAsInstalled(): void {\n if (this.#readyState !== WalletReadyState.Installed) {\n this.emit('readyStateChange', (this.#readyState = WalletReadyState.Installed));\n }\n }\n\n #assertIsAuthorized() {\n if (!this.#wallet.isAuthorized || !this.#selectedAccount) throw new WalletNotConnectedError();\n return this.#selectedAccount;\n }\n\n async #performSignTransactions<T extends LegacyTransaction | VersionedTransaction>(\n transactions: T[],\n ): Promise<T[]> {\n const account = this.#assertIsAuthorized();\n try {\n if (SolanaSignTransaction in this.#wallet.features) {\n return this.#wallet.features[SolanaSignTransaction].signTransaction(\n ...transactions.map((value) => {\n return { account, transaction: value.serialize() };\n }),\n ).then((outputs) => {\n return outputs.map((output: SolanaSignTransactionOutput) => {\n const byteArray = output.signedTransaction;\n const numSignatures = byteArray[0];\n const messageOffset = numSignatures * SIGNATURE_LENGTH_IN_BYTES + 1;\n const version = VersionedMessage.deserializeMessageVersion(\n byteArray.slice(messageOffset, byteArray.length),\n );\n if (version === 'legacy') {\n return Transaction.from(byteArray) as T;\n } else {\n return VersionedTransaction.deserialize(byteArray) as T;\n }\n });\n });\n } else {\n throw new Error('Connected wallet does not support signing transactions');\n }\n } catch (error: unknown) {\n throw new WalletSignTransactionError(getErrorMessage(error), error);\n }\n }\n\n async #runWithGuard<TReturn>(callback: () => Promise<TReturn>) {\n try {\n return await callback();\n } catch (e: unknown) {\n this.emit('error', e instanceof WalletError ? e : new WalletError(getErrorMessage(e), e));\n throw e;\n }\n }\n}\n\nexport class LocalSolanaMobileWalletAdapter extends BaseSolanaMobileWalletAdapter {\n /**\n * @deprecated @param cluster config paramter is deprecated, use @param chain instead\n */\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n cluster: Cluster;\n onWalletNotFound: (mobileWalletAdapter: LocalSolanaMobileWalletAdapter) => Promise<void>;\n });\n\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n chain: Chain;\n onWalletNotFound: (mobileWalletAdapter: LocalSolanaMobileWalletAdapter) => Promise<void>;\n });\n\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n chain: Chain;\n cluster: Cluster;\n onWalletNotFound: (mobileWalletAdapter: LocalSolanaMobileWalletAdapter) => Promise<void>;\n }) {\n const chain = chainOrClusterToChainId(config.chain ?? config.cluster);\n super(\n new LocalSolanaMobileWalletAdapterWallet({\n appIdentity: config.appIdentity,\n authorizationCache: {\n set: config.authorizationResultCache.set,\n get: async () => {\n return (await config.authorizationResultCache.get()) as Authorization | undefined;\n },\n clear: config.authorizationResultCache.clear,\n },\n chains: [chain],\n chainSelector: createDefaultChainSelector(),\n onWalletNotFound: async () => {\n config.onWalletNotFound(this);\n },\n }),\n {\n addressSelector: config.addressSelector,\n chain: chain,\n },\n );\n }\n}\n\nexport class RemoteSolanaMobileWalletAdapter extends BaseSolanaMobileWalletAdapter {\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n chain: Chain;\n remoteHostAuthority: string;\n onWalletNotFound: (mobileWalletAdapter: RemoteSolanaMobileWalletAdapter) => Promise<void>;\n }) {\n const chain = chainOrClusterToChainId(config.chain);\n super(\n new RemoteSolanaMobileWalletAdapterWallet({\n appIdentity: config.appIdentity,\n authorizationCache: {\n set: config.authorizationResultCache.set,\n get: async () => {\n return (await config.authorizationResultCache.get()) as Authorization | undefined;\n },\n clear: config.authorizationResultCache.clear,\n },\n chains: [chain],\n chainSelector: createDefaultChainSelector(),\n remoteHostAuthority: config.remoteHostAuthority,\n onWalletNotFound: async () => {\n config.onWalletNotFound(this);\n },\n }),\n {\n addressSelector: config.addressSelector,\n chain: chain,\n },\n );\n }\n}\n\nexport class SolanaMobileWalletAdapter extends LocalSolanaMobileWalletAdapter {}\n","import { AddressSelector } from './adapter.js';\n\nexport function createDefaultAddressSelector(): AddressSelector {\n return {\n async select(addresses) {\n return addresses[0];\n },\n };\n}\n\n/**\n * @deprecated Use {@link createDefaultAddressSelector} instead.\n */\nexport default createDefaultAddressSelector;\n","import AsyncStorage from '@react-native-async-storage/async-storage';\nimport { AuthorizationResult } from '@solana-mobile/mobile-wallet-adapter-protocol';\n\nimport { AuthorizationResultCache } from '../../adapter.js';\n\nconst CACHE_KEY = 'SolanaMobileWalletAdapterDefaultAuthorizationCache';\n\nexport function createDefaultAuthorizationResultCache(): AuthorizationResultCache {\n return {\n async clear() {\n try {\n await AsyncStorage.removeItem(CACHE_KEY);\n // eslint-disable-next-line no-empty\n } catch {}\n },\n async get() {\n try {\n return (\n (JSON.parse((await AsyncStorage.getItem(CACHE_KEY)) as string) as AuthorizationResult) || undefined\n );\n // eslint-disable-next-line no-empty\n } catch {}\n },\n async set(authorizationResult: AuthorizationResult) {\n try {\n await AsyncStorage.setItem(CACHE_KEY, JSON.stringify(authorizationResult));\n // eslint-disable-next-line no-empty\n } catch {}\n },\n };\n}\n\n/**\n * @deprecated Use {@link createDefaultAuthorizationResultCache} instead.\n */\nexport default createDefaultAuthorizationResultCache;\n","import { defaultErrorModalWalletNotFoundHandler } from '@solana-mobile/wallet-standard-mobile';\n\nimport { SolanaMobileWalletAdapter } from './adapter.js';\n\nasync function defaultWalletNotFoundHandler(_mobileWalletAdapter: SolanaMobileWalletAdapter) {\n return defaultErrorModalWalletNotFoundHandler();\n}\n\nexport function createDefaultWalletNotFoundHandler(): (\n mobileWalletAdapter: SolanaMobileWalletAdapter,\n) => Promise<void> {\n return defaultWalletNotFoundHandler;\n}\n\n/**\n * @deprecated Use {@link createDefaultWalletNotFoundHandler} instead.\n */\nexport default createDefaultWalletNotFoundHandler;\n"],"mappings":"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"}
|
package/lib/esm/index.browser.js
CHANGED
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
import { BaseSignInMessageSignerWalletAdapter, WalletConnectionError, WalletError, WalletNotConnectedError, WalletNotReadyError, WalletPublicKeyError, WalletReadyState, WalletSendTransactionError, WalletSignMessageError, WalletSignTransactionError } from "@solana/wallet-adapter-base";
|
|
2
2
|
import { SolanaSignAndSendTransaction, SolanaSignIn, SolanaSignMessage, SolanaSignTransaction } from "@solana/wallet-standard-features";
|
|
3
3
|
import { PublicKey, Transaction, VersionedMessage, VersionedTransaction } from "@solana/web3.js";
|
|
4
|
+
import { base64FromUint8Array } from "@solana-mobile/mobile-wallet-adapter-protocol/encoding";
|
|
4
5
|
import { LocalSolanaMobileWalletAdapterWallet, RemoteSolanaMobileWalletAdapterWallet, SolanaMobileWalletAdapterRemoteWalletName as SolanaMobileWalletAdapterRemoteWalletName$1, SolanaMobileWalletAdapterWalletName as SolanaMobileWalletAdapterWalletName$1, createDefaultAuthorizationCache, createDefaultChainSelector, defaultErrorModalWalletNotFoundHandler } from "@solana-mobile/wallet-standard-mobile";
|
|
5
6
|
import { StandardConnect, StandardDisconnect, StandardEvents } from "@wallet-standard/core";
|
|
6
|
-
//#region src/base64Utils.ts
|
|
7
|
-
function fromUint8Array(byteArray) {
|
|
8
|
-
return window.btoa(String.fromCharCode.call(null, ...byteArray));
|
|
9
|
-
}
|
|
10
|
-
//#endregion
|
|
11
7
|
//#region src/getIsSupported.ts
|
|
12
8
|
function getIsSupported() {
|
|
13
9
|
return typeof window !== "undefined" && window.isSecureContext && typeof document !== "undefined" && /android/i.test(navigator.userAgent);
|
|
@@ -56,8 +52,8 @@ var BaseSolanaMobileWalletAdapter = class extends BaseSignInMessageSignerWalletA
|
|
|
56
52
|
constructor(wallet, config) {
|
|
57
53
|
super();
|
|
58
54
|
this.#accountSelector = async (accounts) => {
|
|
59
|
-
const selectedBase64EncodedAddress = await config.addressSelector.select(accounts.map(({ publicKey }) =>
|
|
60
|
-
return accounts.find(({ publicKey }) =>
|
|
55
|
+
const selectedBase64EncodedAddress = await config.addressSelector.select(accounts.map(({ publicKey }) => base64FromUint8Array(new Uint8Array(publicKey))));
|
|
56
|
+
return accounts.find(({ publicKey }) => base64FromUint8Array(new Uint8Array(publicKey)) === selectedBase64EncodedAddress) ?? accounts[0];
|
|
61
57
|
};
|
|
62
58
|
this.#wallet = wallet;
|
|
63
59
|
this.#wallet.features[StandardEvents].on("change", this.#handleChangeEvent);
|
|
@@ -200,7 +196,7 @@ var BaseSolanaMobileWalletAdapter = class extends BaseSignInMessageSignerWalletA
|
|
|
200
196
|
maxRetries: options.maxRetries
|
|
201
197
|
} : void 0
|
|
202
198
|
})).map((output) => {
|
|
203
|
-
return
|
|
199
|
+
return base64FromUint8Array(output.signature);
|
|
204
200
|
});
|
|
205
201
|
return signature;
|
|
206
202
|
} else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.browser.js","names":["WalletStandardWalletName","WalletStandardRemoteWalletName","#declareWalletAsInstalled","#accountSelector","#selectedAccount","#publicKey","#wallet","#handleChangeEvent","#connecting","#readyState","#connect","#runWithGuard","#assertIsAuthorized","#performSignTransactions","baseCreateDefaultAuthorizationCache"],"sources":["../../src/base64Utils.ts","../../src/getIsSupported.ts","../../src/adapter.ts","../../src/createDefaultAddressSelector.ts","../../src/createDefaultAuthorizationResultCache.ts","../../src/createDefaultWalletNotFoundHandler.ts"],"sourcesContent":["export function fromUint8Array(byteArray: Uint8Array): string {\n return window.btoa(String.fromCharCode.call(null, ...byteArray));\n}\n\nexport function toUint8Array(base64EncodedByteArray: string): Uint8Array {\n return new Uint8Array(\n window\n .atob(base64EncodedByteArray)\n .split('')\n .map((c) => c.charCodeAt(0)),\n );\n}\n","export default function getIsSupported() {\n return (\n typeof window !== 'undefined' &&\n window.isSecureContext &&\n typeof document !== 'undefined' &&\n /android/i.test(navigator.userAgent)\n );\n}\n","import {\n BaseSignInMessageSignerWalletAdapter,\n WalletConnectionError,\n WalletError,\n WalletName,\n WalletNotConnectedError,\n WalletNotReadyError,\n WalletPublicKeyError,\n WalletReadyState,\n WalletSendTransactionError,\n WalletSignMessageError,\n WalletSignTransactionError,\n} from '@solana/wallet-adapter-base';\nimport {\n SolanaSignAndSendTransaction,\n SolanaSignIn,\n SolanaSignInInput,\n SolanaSignInOutput,\n SolanaSignMessage,\n SolanaSignTransaction,\n SolanaSignTransactionOutput,\n} from '@solana/wallet-standard-features';\nimport {\n Connection,\n PublicKey,\n SendOptions,\n Transaction as LegacyTransaction,\n Transaction,\n TransactionSignature,\n TransactionVersion,\n VersionedMessage,\n VersionedTransaction,\n} from '@solana/web3.js';\nimport {\n AppIdentity,\n AuthorizationResult,\n Base64EncodedAddress,\n Chain,\n Cluster,\n Finality,\n SignInPayload,\n} from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport {\n Authorization,\n createDefaultChainSelector,\n LocalSolanaMobileWalletAdapterWallet,\n RemoteSolanaMobileWalletAdapterWallet,\n SolanaMobileWalletAdapterRemoteWalletName as WalletStandardRemoteWalletName,\n SolanaMobileWalletAdapterWalletName as WalletStandardWalletName,\n} from '@solana-mobile/wallet-standard-mobile';\nimport {\n IdentifierString,\n StandardConnect,\n StandardDisconnect,\n StandardEvents,\n StandardEventsChangeProperties,\n WalletAccount,\n} from '@wallet-standard/core';\n\nimport { fromUint8Array } from './base64Utils.js';\nimport getIsSupported from './getIsSupported.js';\n\nexport interface AuthorizationResultCache {\n clear(): Promise<void>;\n get(): Promise<AuthorizationResult | Authorization | undefined>;\n set(authorizationResult: AuthorizationResult | Authorization): Promise<void>;\n}\n\nexport interface AddressSelector {\n select(addresses: Base64EncodedAddress[]): Promise<Base64EncodedAddress>;\n}\n\nexport const SolanaMobileWalletAdapterWalletName = WalletStandardWalletName as WalletName;\nexport const SolanaMobileWalletAdapterRemoteWalletName = WalletStandardRemoteWalletName as WalletName;\n\nconst SIGNATURE_LENGTH_IN_BYTES = 64;\n\nfunction isVersionedTransaction(\n transaction: LegacyTransaction | VersionedTransaction,\n): transaction is VersionedTransaction {\n return 'version' in transaction;\n}\n\nfunction chainOrClusterToChainId(chain: Cluster | Chain): IdentifierString {\n switch (chain) {\n case 'mainnet-beta':\n return 'solana:mainnet';\n case 'testnet':\n return 'solana:testnet';\n case 'devnet':\n return 'solana:devnet';\n default:\n return chain;\n }\n}\n\nfunction getErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : 'Unknown error';\n}\n\nabstract class BaseSolanaMobileWalletAdapter extends BaseSignInMessageSignerWalletAdapter {\n readonly supportedTransactionVersions: Set<TransactionVersion> = new Set(\n // FIXME(#244): We can't actually know what versions are supported until we know which wallet we're talking to.\n ['legacy', 0],\n );\n name;\n icon;\n url;\n #wallet: LocalSolanaMobileWalletAdapterWallet | RemoteSolanaMobileWalletAdapterWallet;\n #connecting = false;\n #readyState: WalletReadyState = getIsSupported() ? WalletReadyState.Loadable : WalletReadyState.Unsupported;\n #accountSelector: (accounts: readonly WalletAccount[]) => Promise<WalletAccount>;\n #selectedAccount: WalletAccount | undefined;\n #publicKey: PublicKey | undefined;\n\n #handleChangeEvent = async (properties: StandardEventsChangeProperties) => {\n if (properties.accounts && properties.accounts.length > 0) {\n this.#declareWalletAsInstalled();\n const nextSelectedAccount = await this.#accountSelector(properties.accounts);\n if (nextSelectedAccount !== this.#selectedAccount) {\n this.#selectedAccount = nextSelectedAccount;\n this.#publicKey = undefined;\n this.emit(\n 'connect',\n // Having just set `this.#selectedAccount`, `this.publicKey` is definitely non-null\n\n this.publicKey!,\n );\n }\n }\n };\n\n protected constructor(\n wallet: LocalSolanaMobileWalletAdapterWallet | RemoteSolanaMobileWalletAdapterWallet,\n config: {\n addressSelector: AddressSelector;\n chain: Chain;\n },\n ) {\n super();\n // this.#chain = chainOrClusterToChainId(config.chain);\n this.#accountSelector = async (accounts: readonly WalletAccount[]) => {\n const selectedBase64EncodedAddress = await config.addressSelector.select(\n accounts.map(({ publicKey }) => fromUint8Array(new Uint8Array(publicKey))),\n );\n return (\n accounts.find(\n ({ publicKey }) => fromUint8Array(new Uint8Array(publicKey)) === selectedBase64EncodedAddress,\n ) ?? accounts[0]\n );\n };\n this.#wallet = wallet;\n this.#wallet.features[StandardEvents].on('change', this.#handleChangeEvent);\n this.name = this.#wallet.name as WalletName;\n this.icon = this.#wallet.icon;\n this.url = this.#wallet.url;\n // TODO: evaluate if this logic should be kept - it seems to create a nasty bug where\n // the wallet tries to auto connect on page load and gets blocked by the popup blocker\n // if (this.#readyState !== WalletReadyState.Unsupported) {\n // config.authorizationResultCache.get().then((authorizationResult) => {\n // if (authorizationResult) {\n // // Having a prior authorization result is, right now, the best\n // // indication that a mobile wallet is installed. There is no API\n // // we can use to test for whether the association URI is supported.\n // this.#declareWalletAsInstalled();\n // }\n // });\n // }\n }\n\n get publicKey(): PublicKey | null {\n if (!this.#publicKey && this.#selectedAccount) {\n try {\n this.#publicKey = new PublicKey(this.#selectedAccount.publicKey);\n } catch (e) {\n throw new WalletPublicKeyError((e instanceof Error && e?.message) || 'Unknown error', e);\n }\n }\n return this.#publicKey ?? null;\n }\n\n get connected(): boolean {\n return this.#wallet.connected;\n }\n\n get connecting(): boolean {\n return this.#connecting;\n }\n\n get readyState(): WalletReadyState {\n return this.#readyState;\n }\n\n /** @deprecated Use `autoConnect()` instead. */\n async autoConnect_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(): Promise<void> {\n return await this.autoConnect();\n }\n\n async autoConnect(): Promise<void> {\n this.#connect(true);\n }\n\n async connect(): Promise<void> {\n this.#connect();\n }\n\n async #connect(autoConnect: boolean = false): Promise<void> {\n if (this.connecting || this.connected) {\n return;\n }\n return await this.#runWithGuard(async () => {\n if (this.#readyState !== WalletReadyState.Installed && this.#readyState !== WalletReadyState.Loadable) {\n throw new WalletNotReadyError();\n }\n this.#connecting = true;\n try {\n await this.#wallet.features[StandardConnect].connect({ silent: autoConnect });\n } catch (e) {\n throw new WalletConnectionError((e instanceof Error && e.message) || 'Unknown error', e);\n } finally {\n this.#connecting = false;\n }\n });\n }\n\n /** @deprecated Use `connect()` or `autoConnect()` instead. */\n async performAuthorization(signInPayload?: SignInPayload): Promise<AuthorizationResult> {\n try {\n const cachedAuthorizationResult = await this.#wallet.cachedAuthorizationResult;\n if (cachedAuthorizationResult) {\n await this.#wallet.features[StandardConnect].connect({ silent: true });\n return cachedAuthorizationResult;\n }\n\n if (signInPayload) {\n await this.#wallet.features[SolanaSignIn].signIn(signInPayload);\n } else await this.#wallet.features[StandardConnect].connect();\n const authorizationResult = await await this.#wallet.cachedAuthorizationResult;\n return authorizationResult!;\n } catch (e) {\n throw new WalletConnectionError((e instanceof Error && e.message) || 'Unknown error', e);\n }\n }\n\n async disconnect(): Promise<void> {\n // return await this.#runWithGuard(this.#wallet.features[StandardDisconnect].disconnect);\n return await this.#runWithGuard(async () => {\n this.#connecting = false;\n this.#publicKey = undefined;\n this.#selectedAccount = undefined;\n await this.#wallet.features[StandardDisconnect].disconnect();\n this.emit('disconnect');\n });\n }\n\n async signIn(input?: SolanaSignInInput): Promise<SolanaSignInOutput> {\n return this.#runWithGuard(async () => {\n if (this.#readyState !== WalletReadyState.Installed && this.#readyState !== WalletReadyState.Loadable) {\n throw new WalletNotReadyError();\n }\n this.#connecting = true;\n try {\n const outputs = await this.#wallet.features[SolanaSignIn].signIn({\n ...input,\n domain: input?.domain ?? window.location.host,\n });\n if (outputs.length > 0) {\n return outputs[0];\n } else {\n throw new Error('Sign in failed, no sign in result returned by wallet');\n }\n } catch (e) {\n throw new WalletConnectionError((e instanceof Error && e.message) || 'Unknown error', e);\n } finally {\n this.#connecting = false;\n }\n });\n }\n\n async signMessage(message: Uint8Array): Promise<Uint8Array> {\n return await this.#runWithGuard(async () => {\n const account = this.#assertIsAuthorized();\n try {\n const outputs = await this.#wallet.features[SolanaSignMessage].signMessage({\n account,\n message: message,\n });\n return outputs[0].signature;\n } catch (error: unknown) {\n throw new WalletSignMessageError(getErrorMessage(error), error);\n }\n });\n }\n\n async sendTransaction<T extends LegacyTransaction | VersionedTransaction>(\n transaction: T,\n connection: Connection,\n options?: SendOptions,\n ): Promise<TransactionSignature> {\n return await this.#runWithGuard(async () => {\n const account = this.#assertIsAuthorized();\n try {\n function getTargetCommitment() {\n let targetCommitment: Finality;\n switch (connection.commitment) {\n case 'confirmed':\n case 'finalized':\n case 'processed':\n targetCommitment = connection.commitment;\n break;\n default:\n targetCommitment = 'finalized';\n }\n let targetPreflightCommitment: Finality;\n switch (options?.preflightCommitment) {\n case 'confirmed':\n case 'finalized':\n case 'processed':\n targetPreflightCommitment = options.preflightCommitment;\n break;\n case undefined:\n targetPreflightCommitment = targetCommitment;\n break;\n default:\n targetPreflightCommitment = 'finalized';\n }\n const preflightCommitmentScore =\n targetPreflightCommitment === 'finalized'\n ? 2\n : targetPreflightCommitment === 'confirmed'\n ? 1\n : 0;\n const targetCommitmentScore =\n targetCommitment === 'finalized' ? 2 : targetCommitment === 'confirmed' ? 1 : 0;\n return preflightCommitmentScore < targetCommitmentScore\n ? targetPreflightCommitment\n : targetCommitment;\n }\n if (SolanaSignAndSendTransaction in this.#wallet.features) {\n const chain = chainOrClusterToChainId(this.#wallet.currentAuthorization!.chain);\n const [signature] = (\n await this.#wallet.features[SolanaSignAndSendTransaction].signAndSendTransaction({\n account,\n transaction: transaction.serialize(),\n chain: chain,\n options: options\n ? {\n skipPreflight: options.skipPreflight,\n maxRetries: options.maxRetries,\n }\n : undefined,\n })\n ).map((output) => {\n return fromUint8Array(output.signature);\n });\n\n return signature;\n } else {\n const [signedTransaction] = await this.#performSignTransactions([transaction]);\n if (isVersionedTransaction(signedTransaction)) {\n return await connection.sendTransaction(signedTransaction);\n } else {\n const serializedTransaction = signedTransaction.serialize();\n return await connection.sendRawTransaction(serializedTransaction, {\n ...options,\n preflightCommitment: getTargetCommitment(),\n });\n }\n }\n } catch (error: unknown) {\n throw new WalletSendTransactionError(getErrorMessage(error), error);\n }\n });\n }\n\n async signTransaction<T extends LegacyTransaction | VersionedTransaction>(transaction: T): Promise<T> {\n return await this.#runWithGuard(async () => {\n const [signedTransaction] = await this.#performSignTransactions([transaction]);\n return signedTransaction;\n });\n }\n\n async signAllTransactions<T extends LegacyTransaction | VersionedTransaction>(transactions: T[]): Promise<T[]> {\n return await this.#runWithGuard(async () => {\n const signedTransactions = await this.#performSignTransactions(transactions);\n return signedTransactions;\n });\n }\n\n #declareWalletAsInstalled(): void {\n if (this.#readyState !== WalletReadyState.Installed) {\n this.emit('readyStateChange', (this.#readyState = WalletReadyState.Installed));\n }\n }\n\n #assertIsAuthorized() {\n if (!this.#wallet.isAuthorized || !this.#selectedAccount) throw new WalletNotConnectedError();\n return this.#selectedAccount;\n }\n\n async #performSignTransactions<T extends LegacyTransaction | VersionedTransaction>(\n transactions: T[],\n ): Promise<T[]> {\n const account = this.#assertIsAuthorized();\n try {\n if (SolanaSignTransaction in this.#wallet.features) {\n return this.#wallet.features[SolanaSignTransaction].signTransaction(\n ...transactions.map((value) => {\n return { account, transaction: value.serialize() };\n }),\n ).then((outputs) => {\n return outputs.map((output: SolanaSignTransactionOutput) => {\n const byteArray = output.signedTransaction;\n const numSignatures = byteArray[0];\n const messageOffset = numSignatures * SIGNATURE_LENGTH_IN_BYTES + 1;\n const version = VersionedMessage.deserializeMessageVersion(\n byteArray.slice(messageOffset, byteArray.length),\n );\n if (version === 'legacy') {\n return Transaction.from(byteArray) as T;\n } else {\n return VersionedTransaction.deserialize(byteArray) as T;\n }\n });\n });\n } else {\n throw new Error('Connected wallet does not support signing transactions');\n }\n } catch (error: unknown) {\n throw new WalletSignTransactionError(getErrorMessage(error), error);\n }\n }\n\n async #runWithGuard<TReturn>(callback: () => Promise<TReturn>) {\n try {\n return await callback();\n } catch (e: unknown) {\n this.emit('error', e instanceof WalletError ? e : new WalletError(getErrorMessage(e), e));\n throw e;\n }\n }\n}\n\nexport class LocalSolanaMobileWalletAdapter extends BaseSolanaMobileWalletAdapter {\n /**\n * @deprecated @param cluster config paramter is deprecated, use @param chain instead\n */\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n cluster: Cluster;\n onWalletNotFound: (mobileWalletAdapter: LocalSolanaMobileWalletAdapter) => Promise<void>;\n });\n\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n chain: Chain;\n onWalletNotFound: (mobileWalletAdapter: LocalSolanaMobileWalletAdapter) => Promise<void>;\n });\n\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n chain: Chain;\n cluster: Cluster;\n onWalletNotFound: (mobileWalletAdapter: LocalSolanaMobileWalletAdapter) => Promise<void>;\n }) {\n const chain = chainOrClusterToChainId(config.chain ?? config.cluster);\n super(\n new LocalSolanaMobileWalletAdapterWallet({\n appIdentity: config.appIdentity,\n authorizationCache: {\n set: config.authorizationResultCache.set,\n get: async () => {\n return (await config.authorizationResultCache.get()) as Authorization | undefined;\n },\n clear: config.authorizationResultCache.clear,\n },\n chains: [chain],\n chainSelector: createDefaultChainSelector(),\n onWalletNotFound: async () => {\n config.onWalletNotFound(this);\n },\n }),\n {\n addressSelector: config.addressSelector,\n chain: chain,\n },\n );\n }\n}\n\nexport class RemoteSolanaMobileWalletAdapter extends BaseSolanaMobileWalletAdapter {\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n chain: Chain;\n remoteHostAuthority: string;\n onWalletNotFound: (mobileWalletAdapter: RemoteSolanaMobileWalletAdapter) => Promise<void>;\n }) {\n const chain = chainOrClusterToChainId(config.chain);\n super(\n new RemoteSolanaMobileWalletAdapterWallet({\n appIdentity: config.appIdentity,\n authorizationCache: {\n set: config.authorizationResultCache.set,\n get: async () => {\n return (await config.authorizationResultCache.get()) as Authorization | undefined;\n },\n clear: config.authorizationResultCache.clear,\n },\n chains: [chain],\n chainSelector: createDefaultChainSelector(),\n remoteHostAuthority: config.remoteHostAuthority,\n onWalletNotFound: async () => {\n config.onWalletNotFound(this);\n },\n }),\n {\n addressSelector: config.addressSelector,\n chain: chain,\n },\n );\n }\n}\n\nexport class SolanaMobileWalletAdapter extends LocalSolanaMobileWalletAdapter {}\n","import { AddressSelector } from './adapter.js';\n\nexport default function createDefaultAddressSelector(): AddressSelector {\n return {\n async select(addresses) {\n return addresses[0];\n },\n };\n}\n","import { createDefaultAuthorizationCache as baseCreateDefaultAuthorizationCache } from '@solana-mobile/wallet-standard-mobile';\n\nimport { AuthorizationResultCache } from './adapter.js';\n\nexport default function createDefaultAuthorizationResultCache(): AuthorizationResultCache {\n return baseCreateDefaultAuthorizationCache();\n}\n","import { defaultErrorModalWalletNotFoundHandler } from '@solana-mobile/wallet-standard-mobile';\n\nimport { SolanaMobileWalletAdapter } from './adapter.js';\n\nasync function defaultWalletNotFoundHandler(_mobileWalletAdapter: SolanaMobileWalletAdapter) {\n return defaultErrorModalWalletNotFoundHandler();\n}\n\nexport default function createDefaultWalletNotFoundHandler(): (\n mobileWalletAdapter: SolanaMobileWalletAdapter,\n) => Promise<void> {\n return defaultWalletNotFoundHandler;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.browser.js","names":["WalletStandardWalletName","WalletStandardRemoteWalletName","#declareWalletAsInstalled","#accountSelector","#selectedAccount","#publicKey","#wallet","#handleChangeEvent","#connecting","#readyState","#connect","#runWithGuard","#assertIsAuthorized","#performSignTransactions","baseCreateDefaultAuthorizationCache"],"sources":["../../src/getIsSupported.ts","../../src/adapter.ts","../../src/createDefaultAddressSelector.ts","../../src/createDefaultAuthorizationResultCache.ts","../../src/createDefaultWalletNotFoundHandler.ts"],"sourcesContent":["export function getIsSupported() {\n return (\n typeof window !== 'undefined' &&\n window.isSecureContext &&\n typeof document !== 'undefined' &&\n /android/i.test(navigator.userAgent)\n );\n}\n\n/**\n * @deprecated Use {@link getIsSupported} instead.\n */\nexport default getIsSupported;\n","import {\n BaseSignInMessageSignerWalletAdapter,\n WalletConnectionError,\n WalletError,\n WalletName,\n WalletNotConnectedError,\n WalletNotReadyError,\n WalletPublicKeyError,\n WalletReadyState,\n WalletSendTransactionError,\n WalletSignMessageError,\n WalletSignTransactionError,\n} from '@solana/wallet-adapter-base';\nimport {\n SolanaSignAndSendTransaction,\n SolanaSignIn,\n SolanaSignInInput,\n SolanaSignInOutput,\n SolanaSignMessage,\n SolanaSignTransaction,\n SolanaSignTransactionOutput,\n} from '@solana/wallet-standard-features';\nimport {\n Connection,\n PublicKey,\n SendOptions,\n Transaction as LegacyTransaction,\n Transaction,\n TransactionSignature,\n TransactionVersion,\n VersionedMessage,\n VersionedTransaction,\n} from '@solana/web3.js';\nimport {\n AppIdentity,\n AuthorizationResult,\n Base64EncodedAddress,\n Chain,\n Cluster,\n Finality,\n SignInPayload,\n} from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { base64FromUint8Array } from '@solana-mobile/mobile-wallet-adapter-protocol/encoding';\nimport {\n Authorization,\n createDefaultChainSelector,\n LocalSolanaMobileWalletAdapterWallet,\n RemoteSolanaMobileWalletAdapterWallet,\n SolanaMobileWalletAdapterRemoteWalletName as WalletStandardRemoteWalletName,\n SolanaMobileWalletAdapterWalletName as WalletStandardWalletName,\n} from '@solana-mobile/wallet-standard-mobile';\nimport {\n IdentifierString,\n StandardConnect,\n StandardDisconnect,\n StandardEvents,\n StandardEventsChangeProperties,\n WalletAccount,\n} from '@wallet-standard/core';\n\nimport { getIsSupported } from './getIsSupported.js';\n\nexport interface AuthorizationResultCache {\n clear(): Promise<void>;\n get(): Promise<AuthorizationResult | Authorization | undefined>;\n set(authorizationResult: AuthorizationResult | Authorization): Promise<void>;\n}\n\nexport interface AddressSelector {\n select(addresses: Base64EncodedAddress[]): Promise<Base64EncodedAddress>;\n}\n\nexport const SolanaMobileWalletAdapterWalletName = WalletStandardWalletName as WalletName;\nexport const SolanaMobileWalletAdapterRemoteWalletName = WalletStandardRemoteWalletName as WalletName;\n\nconst SIGNATURE_LENGTH_IN_BYTES = 64;\n\nfunction isVersionedTransaction(\n transaction: LegacyTransaction | VersionedTransaction,\n): transaction is VersionedTransaction {\n return 'version' in transaction;\n}\n\nfunction chainOrClusterToChainId(chain: Cluster | Chain): IdentifierString {\n switch (chain) {\n case 'mainnet-beta':\n return 'solana:mainnet';\n case 'testnet':\n return 'solana:testnet';\n case 'devnet':\n return 'solana:devnet';\n default:\n return chain;\n }\n}\n\nfunction getErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : 'Unknown error';\n}\n\nabstract class BaseSolanaMobileWalletAdapter extends BaseSignInMessageSignerWalletAdapter {\n readonly supportedTransactionVersions: Set<TransactionVersion> = new Set(\n // FIXME(#244): We can't actually know what versions are supported until we know which wallet we're talking to.\n ['legacy', 0],\n );\n name;\n icon;\n url;\n #wallet: LocalSolanaMobileWalletAdapterWallet | RemoteSolanaMobileWalletAdapterWallet;\n #connecting = false;\n #readyState: WalletReadyState = getIsSupported() ? WalletReadyState.Loadable : WalletReadyState.Unsupported;\n #accountSelector: (accounts: readonly WalletAccount[]) => Promise<WalletAccount>;\n #selectedAccount: WalletAccount | undefined;\n #publicKey: PublicKey | undefined;\n\n #handleChangeEvent = async (properties: StandardEventsChangeProperties) => {\n if (properties.accounts && properties.accounts.length > 0) {\n this.#declareWalletAsInstalled();\n const nextSelectedAccount = await this.#accountSelector(properties.accounts);\n if (nextSelectedAccount !== this.#selectedAccount) {\n this.#selectedAccount = nextSelectedAccount;\n this.#publicKey = undefined;\n this.emit(\n 'connect',\n // Having just set `this.#selectedAccount`, `this.publicKey` is definitely non-null\n\n this.publicKey!,\n );\n }\n }\n };\n\n protected constructor(\n wallet: LocalSolanaMobileWalletAdapterWallet | RemoteSolanaMobileWalletAdapterWallet,\n config: {\n addressSelector: AddressSelector;\n chain: Chain;\n },\n ) {\n super();\n // this.#chain = chainOrClusterToChainId(config.chain);\n this.#accountSelector = async (accounts: readonly WalletAccount[]) => {\n const selectedBase64EncodedAddress = await config.addressSelector.select(\n accounts.map(({ publicKey }) => base64FromUint8Array(new Uint8Array(publicKey))),\n );\n return (\n accounts.find(\n ({ publicKey }) => base64FromUint8Array(new Uint8Array(publicKey)) === selectedBase64EncodedAddress,\n ) ?? accounts[0]\n );\n };\n this.#wallet = wallet;\n this.#wallet.features[StandardEvents].on('change', this.#handleChangeEvent);\n this.name = this.#wallet.name as WalletName;\n this.icon = this.#wallet.icon;\n this.url = this.#wallet.url;\n // TODO: evaluate if this logic should be kept - it seems to create a nasty bug where\n // the wallet tries to auto connect on page load and gets blocked by the popup blocker\n // if (this.#readyState !== WalletReadyState.Unsupported) {\n // config.authorizationResultCache.get().then((authorizationResult) => {\n // if (authorizationResult) {\n // // Having a prior authorization result is, right now, the best\n // // indication that a mobile wallet is installed. There is no API\n // // we can use to test for whether the association URI is supported.\n // this.#declareWalletAsInstalled();\n // }\n // });\n // }\n }\n\n get publicKey(): PublicKey | null {\n if (!this.#publicKey && this.#selectedAccount) {\n try {\n this.#publicKey = new PublicKey(this.#selectedAccount.publicKey);\n } catch (e) {\n throw new WalletPublicKeyError((e instanceof Error && e?.message) || 'Unknown error', e);\n }\n }\n return this.#publicKey ?? null;\n }\n\n get connected(): boolean {\n return this.#wallet.connected;\n }\n\n get connecting(): boolean {\n return this.#connecting;\n }\n\n get readyState(): WalletReadyState {\n return this.#readyState;\n }\n\n /** @deprecated Use `autoConnect()` instead. */\n async autoConnect_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(): Promise<void> {\n return await this.autoConnect();\n }\n\n async autoConnect(): Promise<void> {\n this.#connect(true);\n }\n\n async connect(): Promise<void> {\n this.#connect();\n }\n\n async #connect(autoConnect: boolean = false): Promise<void> {\n if (this.connecting || this.connected) {\n return;\n }\n return await this.#runWithGuard(async () => {\n if (this.#readyState !== WalletReadyState.Installed && this.#readyState !== WalletReadyState.Loadable) {\n throw new WalletNotReadyError();\n }\n this.#connecting = true;\n try {\n await this.#wallet.features[StandardConnect].connect({ silent: autoConnect });\n } catch (e) {\n throw new WalletConnectionError((e instanceof Error && e.message) || 'Unknown error', e);\n } finally {\n this.#connecting = false;\n }\n });\n }\n\n /** @deprecated Use `connect()` or `autoConnect()` instead. */\n async performAuthorization(signInPayload?: SignInPayload): Promise<AuthorizationResult> {\n try {\n const cachedAuthorizationResult = await this.#wallet.cachedAuthorizationResult;\n if (cachedAuthorizationResult) {\n await this.#wallet.features[StandardConnect].connect({ silent: true });\n return cachedAuthorizationResult;\n }\n\n if (signInPayload) {\n await this.#wallet.features[SolanaSignIn].signIn(signInPayload);\n } else await this.#wallet.features[StandardConnect].connect();\n const authorizationResult = await await this.#wallet.cachedAuthorizationResult;\n return authorizationResult!;\n } catch (e) {\n throw new WalletConnectionError((e instanceof Error && e.message) || 'Unknown error', e);\n }\n }\n\n async disconnect(): Promise<void> {\n // return await this.#runWithGuard(this.#wallet.features[StandardDisconnect].disconnect);\n return await this.#runWithGuard(async () => {\n this.#connecting = false;\n this.#publicKey = undefined;\n this.#selectedAccount = undefined;\n await this.#wallet.features[StandardDisconnect].disconnect();\n this.emit('disconnect');\n });\n }\n\n async signIn(input?: SolanaSignInInput): Promise<SolanaSignInOutput> {\n return this.#runWithGuard(async () => {\n if (this.#readyState !== WalletReadyState.Installed && this.#readyState !== WalletReadyState.Loadable) {\n throw new WalletNotReadyError();\n }\n this.#connecting = true;\n try {\n const outputs = await this.#wallet.features[SolanaSignIn].signIn({\n ...input,\n domain: input?.domain ?? window.location.host,\n });\n if (outputs.length > 0) {\n return outputs[0];\n } else {\n throw new Error('Sign in failed, no sign in result returned by wallet');\n }\n } catch (e) {\n throw new WalletConnectionError((e instanceof Error && e.message) || 'Unknown error', e);\n } finally {\n this.#connecting = false;\n }\n });\n }\n\n async signMessage(message: Uint8Array): Promise<Uint8Array> {\n return await this.#runWithGuard(async () => {\n const account = this.#assertIsAuthorized();\n try {\n const outputs = await this.#wallet.features[SolanaSignMessage].signMessage({\n account,\n message: message,\n });\n return outputs[0].signature;\n } catch (error: unknown) {\n throw new WalletSignMessageError(getErrorMessage(error), error);\n }\n });\n }\n\n async sendTransaction<T extends LegacyTransaction | VersionedTransaction>(\n transaction: T,\n connection: Connection,\n options?: SendOptions,\n ): Promise<TransactionSignature> {\n return await this.#runWithGuard(async () => {\n const account = this.#assertIsAuthorized();\n try {\n function getTargetCommitment() {\n let targetCommitment: Finality;\n switch (connection.commitment) {\n case 'confirmed':\n case 'finalized':\n case 'processed':\n targetCommitment = connection.commitment;\n break;\n default:\n targetCommitment = 'finalized';\n }\n let targetPreflightCommitment: Finality;\n switch (options?.preflightCommitment) {\n case 'confirmed':\n case 'finalized':\n case 'processed':\n targetPreflightCommitment = options.preflightCommitment;\n break;\n case undefined:\n targetPreflightCommitment = targetCommitment;\n break;\n default:\n targetPreflightCommitment = 'finalized';\n }\n const preflightCommitmentScore =\n targetPreflightCommitment === 'finalized'\n ? 2\n : targetPreflightCommitment === 'confirmed'\n ? 1\n : 0;\n const targetCommitmentScore =\n targetCommitment === 'finalized' ? 2 : targetCommitment === 'confirmed' ? 1 : 0;\n return preflightCommitmentScore < targetCommitmentScore\n ? targetPreflightCommitment\n : targetCommitment;\n }\n if (SolanaSignAndSendTransaction in this.#wallet.features) {\n const chain = chainOrClusterToChainId(this.#wallet.currentAuthorization!.chain);\n const [signature] = (\n await this.#wallet.features[SolanaSignAndSendTransaction].signAndSendTransaction({\n account,\n transaction: transaction.serialize(),\n chain: chain,\n options: options\n ? {\n skipPreflight: options.skipPreflight,\n maxRetries: options.maxRetries,\n }\n : undefined,\n })\n ).map((output) => {\n return base64FromUint8Array(output.signature);\n });\n\n return signature;\n } else {\n const [signedTransaction] = await this.#performSignTransactions([transaction]);\n if (isVersionedTransaction(signedTransaction)) {\n return await connection.sendTransaction(signedTransaction);\n } else {\n const serializedTransaction = signedTransaction.serialize();\n return await connection.sendRawTransaction(serializedTransaction, {\n ...options,\n preflightCommitment: getTargetCommitment(),\n });\n }\n }\n } catch (error: unknown) {\n throw new WalletSendTransactionError(getErrorMessage(error), error);\n }\n });\n }\n\n async signTransaction<T extends LegacyTransaction | VersionedTransaction>(transaction: T): Promise<T> {\n return await this.#runWithGuard(async () => {\n const [signedTransaction] = await this.#performSignTransactions([transaction]);\n return signedTransaction;\n });\n }\n\n async signAllTransactions<T extends LegacyTransaction | VersionedTransaction>(transactions: T[]): Promise<T[]> {\n return await this.#runWithGuard(async () => {\n const signedTransactions = await this.#performSignTransactions(transactions);\n return signedTransactions;\n });\n }\n\n #declareWalletAsInstalled(): void {\n if (this.#readyState !== WalletReadyState.Installed) {\n this.emit('readyStateChange', (this.#readyState = WalletReadyState.Installed));\n }\n }\n\n #assertIsAuthorized() {\n if (!this.#wallet.isAuthorized || !this.#selectedAccount) throw new WalletNotConnectedError();\n return this.#selectedAccount;\n }\n\n async #performSignTransactions<T extends LegacyTransaction | VersionedTransaction>(\n transactions: T[],\n ): Promise<T[]> {\n const account = this.#assertIsAuthorized();\n try {\n if (SolanaSignTransaction in this.#wallet.features) {\n return this.#wallet.features[SolanaSignTransaction].signTransaction(\n ...transactions.map((value) => {\n return { account, transaction: value.serialize() };\n }),\n ).then((outputs) => {\n return outputs.map((output: SolanaSignTransactionOutput) => {\n const byteArray = output.signedTransaction;\n const numSignatures = byteArray[0];\n const messageOffset = numSignatures * SIGNATURE_LENGTH_IN_BYTES + 1;\n const version = VersionedMessage.deserializeMessageVersion(\n byteArray.slice(messageOffset, byteArray.length),\n );\n if (version === 'legacy') {\n return Transaction.from(byteArray) as T;\n } else {\n return VersionedTransaction.deserialize(byteArray) as T;\n }\n });\n });\n } else {\n throw new Error('Connected wallet does not support signing transactions');\n }\n } catch (error: unknown) {\n throw new WalletSignTransactionError(getErrorMessage(error), error);\n }\n }\n\n async #runWithGuard<TReturn>(callback: () => Promise<TReturn>) {\n try {\n return await callback();\n } catch (e: unknown) {\n this.emit('error', e instanceof WalletError ? e : new WalletError(getErrorMessage(e), e));\n throw e;\n }\n }\n}\n\nexport class LocalSolanaMobileWalletAdapter extends BaseSolanaMobileWalletAdapter {\n /**\n * @deprecated @param cluster config paramter is deprecated, use @param chain instead\n */\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n cluster: Cluster;\n onWalletNotFound: (mobileWalletAdapter: LocalSolanaMobileWalletAdapter) => Promise<void>;\n });\n\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n chain: Chain;\n onWalletNotFound: (mobileWalletAdapter: LocalSolanaMobileWalletAdapter) => Promise<void>;\n });\n\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n chain: Chain;\n cluster: Cluster;\n onWalletNotFound: (mobileWalletAdapter: LocalSolanaMobileWalletAdapter) => Promise<void>;\n }) {\n const chain = chainOrClusterToChainId(config.chain ?? config.cluster);\n super(\n new LocalSolanaMobileWalletAdapterWallet({\n appIdentity: config.appIdentity,\n authorizationCache: {\n set: config.authorizationResultCache.set,\n get: async () => {\n return (await config.authorizationResultCache.get()) as Authorization | undefined;\n },\n clear: config.authorizationResultCache.clear,\n },\n chains: [chain],\n chainSelector: createDefaultChainSelector(),\n onWalletNotFound: async () => {\n config.onWalletNotFound(this);\n },\n }),\n {\n addressSelector: config.addressSelector,\n chain: chain,\n },\n );\n }\n}\n\nexport class RemoteSolanaMobileWalletAdapter extends BaseSolanaMobileWalletAdapter {\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n chain: Chain;\n remoteHostAuthority: string;\n onWalletNotFound: (mobileWalletAdapter: RemoteSolanaMobileWalletAdapter) => Promise<void>;\n }) {\n const chain = chainOrClusterToChainId(config.chain);\n super(\n new RemoteSolanaMobileWalletAdapterWallet({\n appIdentity: config.appIdentity,\n authorizationCache: {\n set: config.authorizationResultCache.set,\n get: async () => {\n return (await config.authorizationResultCache.get()) as Authorization | undefined;\n },\n clear: config.authorizationResultCache.clear,\n },\n chains: [chain],\n chainSelector: createDefaultChainSelector(),\n remoteHostAuthority: config.remoteHostAuthority,\n onWalletNotFound: async () => {\n config.onWalletNotFound(this);\n },\n }),\n {\n addressSelector: config.addressSelector,\n chain: chain,\n },\n );\n }\n}\n\nexport class SolanaMobileWalletAdapter extends LocalSolanaMobileWalletAdapter {}\n","import { AddressSelector } from './adapter.js';\n\nexport function createDefaultAddressSelector(): AddressSelector {\n return {\n async select(addresses) {\n return addresses[0];\n },\n };\n}\n\n/**\n * @deprecated Use {@link createDefaultAddressSelector} instead.\n */\nexport default createDefaultAddressSelector;\n","import { createDefaultAuthorizationCache as baseCreateDefaultAuthorizationCache } from '@solana-mobile/wallet-standard-mobile';\n\nimport { AuthorizationResultCache } from './adapter.js';\n\nexport function createDefaultAuthorizationResultCache(): AuthorizationResultCache {\n return baseCreateDefaultAuthorizationCache();\n}\n\n/**\n * @deprecated Use {@link createDefaultAuthorizationResultCache} instead.\n */\nexport default createDefaultAuthorizationResultCache;\n","import { defaultErrorModalWalletNotFoundHandler } from '@solana-mobile/wallet-standard-mobile';\n\nimport { SolanaMobileWalletAdapter } from './adapter.js';\n\nasync function defaultWalletNotFoundHandler(_mobileWalletAdapter: SolanaMobileWalletAdapter) {\n return defaultErrorModalWalletNotFoundHandler();\n}\n\nexport function createDefaultWalletNotFoundHandler(): (\n mobileWalletAdapter: SolanaMobileWalletAdapter,\n) => Promise<void> {\n return defaultWalletNotFoundHandler;\n}\n\n/**\n * @deprecated Use {@link createDefaultWalletNotFoundHandler} instead.\n */\nexport default createDefaultWalletNotFoundHandler;\n"],"mappings":"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"}
|
package/lib/esm/index.js
CHANGED
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
import { BaseSignInMessageSignerWalletAdapter, WalletConnectionError, WalletError, WalletNotConnectedError, WalletNotReadyError, WalletPublicKeyError, WalletReadyState, WalletSendTransactionError, WalletSignMessageError, WalletSignTransactionError } from "@solana/wallet-adapter-base";
|
|
2
2
|
import { SolanaSignAndSendTransaction, SolanaSignIn, SolanaSignMessage, SolanaSignTransaction } from "@solana/wallet-standard-features";
|
|
3
3
|
import { PublicKey, Transaction, VersionedMessage, VersionedTransaction } from "@solana/web3.js";
|
|
4
|
+
import { base64FromUint8Array } from "@solana-mobile/mobile-wallet-adapter-protocol/encoding";
|
|
4
5
|
import { LocalSolanaMobileWalletAdapterWallet, RemoteSolanaMobileWalletAdapterWallet, SolanaMobileWalletAdapterRemoteWalletName as SolanaMobileWalletAdapterRemoteWalletName$1, SolanaMobileWalletAdapterWalletName as SolanaMobileWalletAdapterWalletName$1, createDefaultAuthorizationCache, createDefaultChainSelector, defaultErrorModalWalletNotFoundHandler } from "@solana-mobile/wallet-standard-mobile";
|
|
5
6
|
import { StandardConnect, StandardDisconnect, StandardEvents } from "@wallet-standard/core";
|
|
6
|
-
//#region src/base64Utils.ts
|
|
7
|
-
function fromUint8Array(byteArray) {
|
|
8
|
-
return window.btoa(String.fromCharCode.call(null, ...byteArray));
|
|
9
|
-
}
|
|
10
|
-
//#endregion
|
|
11
7
|
//#region src/getIsSupported.ts
|
|
12
8
|
function getIsSupported() {
|
|
13
9
|
return typeof window !== "undefined" && window.isSecureContext && typeof document !== "undefined" && /android/i.test(navigator.userAgent);
|
|
@@ -56,8 +52,8 @@ var BaseSolanaMobileWalletAdapter = class extends BaseSignInMessageSignerWalletA
|
|
|
56
52
|
constructor(wallet, config) {
|
|
57
53
|
super();
|
|
58
54
|
this.#accountSelector = async (accounts) => {
|
|
59
|
-
const selectedBase64EncodedAddress = await config.addressSelector.select(accounts.map(({ publicKey }) =>
|
|
60
|
-
return accounts.find(({ publicKey }) =>
|
|
55
|
+
const selectedBase64EncodedAddress = await config.addressSelector.select(accounts.map(({ publicKey }) => base64FromUint8Array(new Uint8Array(publicKey))));
|
|
56
|
+
return accounts.find(({ publicKey }) => base64FromUint8Array(new Uint8Array(publicKey)) === selectedBase64EncodedAddress) ?? accounts[0];
|
|
61
57
|
};
|
|
62
58
|
this.#wallet = wallet;
|
|
63
59
|
this.#wallet.features[StandardEvents].on("change", this.#handleChangeEvent);
|
|
@@ -200,7 +196,7 @@ var BaseSolanaMobileWalletAdapter = class extends BaseSignInMessageSignerWalletA
|
|
|
200
196
|
maxRetries: options.maxRetries
|
|
201
197
|
} : void 0
|
|
202
198
|
})).map((output) => {
|
|
203
|
-
return
|
|
199
|
+
return base64FromUint8Array(output.signature);
|
|
204
200
|
});
|
|
205
201
|
return signature;
|
|
206
202
|
} else {
|
package/lib/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["WalletStandardWalletName","WalletStandardRemoteWalletName","#declareWalletAsInstalled","#accountSelector","#selectedAccount","#publicKey","#wallet","#handleChangeEvent","#connecting","#readyState","#connect","#runWithGuard","#assertIsAuthorized","#performSignTransactions","baseCreateDefaultAuthorizationCache"],"sources":["../../src/base64Utils.ts","../../src/getIsSupported.ts","../../src/adapter.ts","../../src/createDefaultAddressSelector.ts","../../src/createDefaultAuthorizationResultCache.ts","../../src/createDefaultWalletNotFoundHandler.ts"],"sourcesContent":["export function fromUint8Array(byteArray: Uint8Array): string {\n return window.btoa(String.fromCharCode.call(null, ...byteArray));\n}\n\nexport function toUint8Array(base64EncodedByteArray: string): Uint8Array {\n return new Uint8Array(\n window\n .atob(base64EncodedByteArray)\n .split('')\n .map((c) => c.charCodeAt(0)),\n );\n}\n","export default function getIsSupported() {\n return (\n typeof window !== 'undefined' &&\n window.isSecureContext &&\n typeof document !== 'undefined' &&\n /android/i.test(navigator.userAgent)\n );\n}\n","import {\n BaseSignInMessageSignerWalletAdapter,\n WalletConnectionError,\n WalletError,\n WalletName,\n WalletNotConnectedError,\n WalletNotReadyError,\n WalletPublicKeyError,\n WalletReadyState,\n WalletSendTransactionError,\n WalletSignMessageError,\n WalletSignTransactionError,\n} from '@solana/wallet-adapter-base';\nimport {\n SolanaSignAndSendTransaction,\n SolanaSignIn,\n SolanaSignInInput,\n SolanaSignInOutput,\n SolanaSignMessage,\n SolanaSignTransaction,\n SolanaSignTransactionOutput,\n} from '@solana/wallet-standard-features';\nimport {\n Connection,\n PublicKey,\n SendOptions,\n Transaction as LegacyTransaction,\n Transaction,\n TransactionSignature,\n TransactionVersion,\n VersionedMessage,\n VersionedTransaction,\n} from '@solana/web3.js';\nimport {\n AppIdentity,\n AuthorizationResult,\n Base64EncodedAddress,\n Chain,\n Cluster,\n Finality,\n SignInPayload,\n} from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport {\n Authorization,\n createDefaultChainSelector,\n LocalSolanaMobileWalletAdapterWallet,\n RemoteSolanaMobileWalletAdapterWallet,\n SolanaMobileWalletAdapterRemoteWalletName as WalletStandardRemoteWalletName,\n SolanaMobileWalletAdapterWalletName as WalletStandardWalletName,\n} from '@solana-mobile/wallet-standard-mobile';\nimport {\n IdentifierString,\n StandardConnect,\n StandardDisconnect,\n StandardEvents,\n StandardEventsChangeProperties,\n WalletAccount,\n} from '@wallet-standard/core';\n\nimport { fromUint8Array } from './base64Utils.js';\nimport getIsSupported from './getIsSupported.js';\n\nexport interface AuthorizationResultCache {\n clear(): Promise<void>;\n get(): Promise<AuthorizationResult | Authorization | undefined>;\n set(authorizationResult: AuthorizationResult | Authorization): Promise<void>;\n}\n\nexport interface AddressSelector {\n select(addresses: Base64EncodedAddress[]): Promise<Base64EncodedAddress>;\n}\n\nexport const SolanaMobileWalletAdapterWalletName = WalletStandardWalletName as WalletName;\nexport const SolanaMobileWalletAdapterRemoteWalletName = WalletStandardRemoteWalletName as WalletName;\n\nconst SIGNATURE_LENGTH_IN_BYTES = 64;\n\nfunction isVersionedTransaction(\n transaction: LegacyTransaction | VersionedTransaction,\n): transaction is VersionedTransaction {\n return 'version' in transaction;\n}\n\nfunction chainOrClusterToChainId(chain: Cluster | Chain): IdentifierString {\n switch (chain) {\n case 'mainnet-beta':\n return 'solana:mainnet';\n case 'testnet':\n return 'solana:testnet';\n case 'devnet':\n return 'solana:devnet';\n default:\n return chain;\n }\n}\n\nfunction getErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : 'Unknown error';\n}\n\nabstract class BaseSolanaMobileWalletAdapter extends BaseSignInMessageSignerWalletAdapter {\n readonly supportedTransactionVersions: Set<TransactionVersion> = new Set(\n // FIXME(#244): We can't actually know what versions are supported until we know which wallet we're talking to.\n ['legacy', 0],\n );\n name;\n icon;\n url;\n #wallet: LocalSolanaMobileWalletAdapterWallet | RemoteSolanaMobileWalletAdapterWallet;\n #connecting = false;\n #readyState: WalletReadyState = getIsSupported() ? WalletReadyState.Loadable : WalletReadyState.Unsupported;\n #accountSelector: (accounts: readonly WalletAccount[]) => Promise<WalletAccount>;\n #selectedAccount: WalletAccount | undefined;\n #publicKey: PublicKey | undefined;\n\n #handleChangeEvent = async (properties: StandardEventsChangeProperties) => {\n if (properties.accounts && properties.accounts.length > 0) {\n this.#declareWalletAsInstalled();\n const nextSelectedAccount = await this.#accountSelector(properties.accounts);\n if (nextSelectedAccount !== this.#selectedAccount) {\n this.#selectedAccount = nextSelectedAccount;\n this.#publicKey = undefined;\n this.emit(\n 'connect',\n // Having just set `this.#selectedAccount`, `this.publicKey` is definitely non-null\n\n this.publicKey!,\n );\n }\n }\n };\n\n protected constructor(\n wallet: LocalSolanaMobileWalletAdapterWallet | RemoteSolanaMobileWalletAdapterWallet,\n config: {\n addressSelector: AddressSelector;\n chain: Chain;\n },\n ) {\n super();\n // this.#chain = chainOrClusterToChainId(config.chain);\n this.#accountSelector = async (accounts: readonly WalletAccount[]) => {\n const selectedBase64EncodedAddress = await config.addressSelector.select(\n accounts.map(({ publicKey }) => fromUint8Array(new Uint8Array(publicKey))),\n );\n return (\n accounts.find(\n ({ publicKey }) => fromUint8Array(new Uint8Array(publicKey)) === selectedBase64EncodedAddress,\n ) ?? accounts[0]\n );\n };\n this.#wallet = wallet;\n this.#wallet.features[StandardEvents].on('change', this.#handleChangeEvent);\n this.name = this.#wallet.name as WalletName;\n this.icon = this.#wallet.icon;\n this.url = this.#wallet.url;\n // TODO: evaluate if this logic should be kept - it seems to create a nasty bug where\n // the wallet tries to auto connect on page load and gets blocked by the popup blocker\n // if (this.#readyState !== WalletReadyState.Unsupported) {\n // config.authorizationResultCache.get().then((authorizationResult) => {\n // if (authorizationResult) {\n // // Having a prior authorization result is, right now, the best\n // // indication that a mobile wallet is installed. There is no API\n // // we can use to test for whether the association URI is supported.\n // this.#declareWalletAsInstalled();\n // }\n // });\n // }\n }\n\n get publicKey(): PublicKey | null {\n if (!this.#publicKey && this.#selectedAccount) {\n try {\n this.#publicKey = new PublicKey(this.#selectedAccount.publicKey);\n } catch (e) {\n throw new WalletPublicKeyError((e instanceof Error && e?.message) || 'Unknown error', e);\n }\n }\n return this.#publicKey ?? null;\n }\n\n get connected(): boolean {\n return this.#wallet.connected;\n }\n\n get connecting(): boolean {\n return this.#connecting;\n }\n\n get readyState(): WalletReadyState {\n return this.#readyState;\n }\n\n /** @deprecated Use `autoConnect()` instead. */\n async autoConnect_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(): Promise<void> {\n return await this.autoConnect();\n }\n\n async autoConnect(): Promise<void> {\n this.#connect(true);\n }\n\n async connect(): Promise<void> {\n this.#connect();\n }\n\n async #connect(autoConnect: boolean = false): Promise<void> {\n if (this.connecting || this.connected) {\n return;\n }\n return await this.#runWithGuard(async () => {\n if (this.#readyState !== WalletReadyState.Installed && this.#readyState !== WalletReadyState.Loadable) {\n throw new WalletNotReadyError();\n }\n this.#connecting = true;\n try {\n await this.#wallet.features[StandardConnect].connect({ silent: autoConnect });\n } catch (e) {\n throw new WalletConnectionError((e instanceof Error && e.message) || 'Unknown error', e);\n } finally {\n this.#connecting = false;\n }\n });\n }\n\n /** @deprecated Use `connect()` or `autoConnect()` instead. */\n async performAuthorization(signInPayload?: SignInPayload): Promise<AuthorizationResult> {\n try {\n const cachedAuthorizationResult = await this.#wallet.cachedAuthorizationResult;\n if (cachedAuthorizationResult) {\n await this.#wallet.features[StandardConnect].connect({ silent: true });\n return cachedAuthorizationResult;\n }\n\n if (signInPayload) {\n await this.#wallet.features[SolanaSignIn].signIn(signInPayload);\n } else await this.#wallet.features[StandardConnect].connect();\n const authorizationResult = await await this.#wallet.cachedAuthorizationResult;\n return authorizationResult!;\n } catch (e) {\n throw new WalletConnectionError((e instanceof Error && e.message) || 'Unknown error', e);\n }\n }\n\n async disconnect(): Promise<void> {\n // return await this.#runWithGuard(this.#wallet.features[StandardDisconnect].disconnect);\n return await this.#runWithGuard(async () => {\n this.#connecting = false;\n this.#publicKey = undefined;\n this.#selectedAccount = undefined;\n await this.#wallet.features[StandardDisconnect].disconnect();\n this.emit('disconnect');\n });\n }\n\n async signIn(input?: SolanaSignInInput): Promise<SolanaSignInOutput> {\n return this.#runWithGuard(async () => {\n if (this.#readyState !== WalletReadyState.Installed && this.#readyState !== WalletReadyState.Loadable) {\n throw new WalletNotReadyError();\n }\n this.#connecting = true;\n try {\n const outputs = await this.#wallet.features[SolanaSignIn].signIn({\n ...input,\n domain: input?.domain ?? window.location.host,\n });\n if (outputs.length > 0) {\n return outputs[0];\n } else {\n throw new Error('Sign in failed, no sign in result returned by wallet');\n }\n } catch (e) {\n throw new WalletConnectionError((e instanceof Error && e.message) || 'Unknown error', e);\n } finally {\n this.#connecting = false;\n }\n });\n }\n\n async signMessage(message: Uint8Array): Promise<Uint8Array> {\n return await this.#runWithGuard(async () => {\n const account = this.#assertIsAuthorized();\n try {\n const outputs = await this.#wallet.features[SolanaSignMessage].signMessage({\n account,\n message: message,\n });\n return outputs[0].signature;\n } catch (error: unknown) {\n throw new WalletSignMessageError(getErrorMessage(error), error);\n }\n });\n }\n\n async sendTransaction<T extends LegacyTransaction | VersionedTransaction>(\n transaction: T,\n connection: Connection,\n options?: SendOptions,\n ): Promise<TransactionSignature> {\n return await this.#runWithGuard(async () => {\n const account = this.#assertIsAuthorized();\n try {\n function getTargetCommitment() {\n let targetCommitment: Finality;\n switch (connection.commitment) {\n case 'confirmed':\n case 'finalized':\n case 'processed':\n targetCommitment = connection.commitment;\n break;\n default:\n targetCommitment = 'finalized';\n }\n let targetPreflightCommitment: Finality;\n switch (options?.preflightCommitment) {\n case 'confirmed':\n case 'finalized':\n case 'processed':\n targetPreflightCommitment = options.preflightCommitment;\n break;\n case undefined:\n targetPreflightCommitment = targetCommitment;\n break;\n default:\n targetPreflightCommitment = 'finalized';\n }\n const preflightCommitmentScore =\n targetPreflightCommitment === 'finalized'\n ? 2\n : targetPreflightCommitment === 'confirmed'\n ? 1\n : 0;\n const targetCommitmentScore =\n targetCommitment === 'finalized' ? 2 : targetCommitment === 'confirmed' ? 1 : 0;\n return preflightCommitmentScore < targetCommitmentScore\n ? targetPreflightCommitment\n : targetCommitment;\n }\n if (SolanaSignAndSendTransaction in this.#wallet.features) {\n const chain = chainOrClusterToChainId(this.#wallet.currentAuthorization!.chain);\n const [signature] = (\n await this.#wallet.features[SolanaSignAndSendTransaction].signAndSendTransaction({\n account,\n transaction: transaction.serialize(),\n chain: chain,\n options: options\n ? {\n skipPreflight: options.skipPreflight,\n maxRetries: options.maxRetries,\n }\n : undefined,\n })\n ).map((output) => {\n return fromUint8Array(output.signature);\n });\n\n return signature;\n } else {\n const [signedTransaction] = await this.#performSignTransactions([transaction]);\n if (isVersionedTransaction(signedTransaction)) {\n return await connection.sendTransaction(signedTransaction);\n } else {\n const serializedTransaction = signedTransaction.serialize();\n return await connection.sendRawTransaction(serializedTransaction, {\n ...options,\n preflightCommitment: getTargetCommitment(),\n });\n }\n }\n } catch (error: unknown) {\n throw new WalletSendTransactionError(getErrorMessage(error), error);\n }\n });\n }\n\n async signTransaction<T extends LegacyTransaction | VersionedTransaction>(transaction: T): Promise<T> {\n return await this.#runWithGuard(async () => {\n const [signedTransaction] = await this.#performSignTransactions([transaction]);\n return signedTransaction;\n });\n }\n\n async signAllTransactions<T extends LegacyTransaction | VersionedTransaction>(transactions: T[]): Promise<T[]> {\n return await this.#runWithGuard(async () => {\n const signedTransactions = await this.#performSignTransactions(transactions);\n return signedTransactions;\n });\n }\n\n #declareWalletAsInstalled(): void {\n if (this.#readyState !== WalletReadyState.Installed) {\n this.emit('readyStateChange', (this.#readyState = WalletReadyState.Installed));\n }\n }\n\n #assertIsAuthorized() {\n if (!this.#wallet.isAuthorized || !this.#selectedAccount) throw new WalletNotConnectedError();\n return this.#selectedAccount;\n }\n\n async #performSignTransactions<T extends LegacyTransaction | VersionedTransaction>(\n transactions: T[],\n ): Promise<T[]> {\n const account = this.#assertIsAuthorized();\n try {\n if (SolanaSignTransaction in this.#wallet.features) {\n return this.#wallet.features[SolanaSignTransaction].signTransaction(\n ...transactions.map((value) => {\n return { account, transaction: value.serialize() };\n }),\n ).then((outputs) => {\n return outputs.map((output: SolanaSignTransactionOutput) => {\n const byteArray = output.signedTransaction;\n const numSignatures = byteArray[0];\n const messageOffset = numSignatures * SIGNATURE_LENGTH_IN_BYTES + 1;\n const version = VersionedMessage.deserializeMessageVersion(\n byteArray.slice(messageOffset, byteArray.length),\n );\n if (version === 'legacy') {\n return Transaction.from(byteArray) as T;\n } else {\n return VersionedTransaction.deserialize(byteArray) as T;\n }\n });\n });\n } else {\n throw new Error('Connected wallet does not support signing transactions');\n }\n } catch (error: unknown) {\n throw new WalletSignTransactionError(getErrorMessage(error), error);\n }\n }\n\n async #runWithGuard<TReturn>(callback: () => Promise<TReturn>) {\n try {\n return await callback();\n } catch (e: unknown) {\n this.emit('error', e instanceof WalletError ? e : new WalletError(getErrorMessage(e), e));\n throw e;\n }\n }\n}\n\nexport class LocalSolanaMobileWalletAdapter extends BaseSolanaMobileWalletAdapter {\n /**\n * @deprecated @param cluster config paramter is deprecated, use @param chain instead\n */\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n cluster: Cluster;\n onWalletNotFound: (mobileWalletAdapter: LocalSolanaMobileWalletAdapter) => Promise<void>;\n });\n\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n chain: Chain;\n onWalletNotFound: (mobileWalletAdapter: LocalSolanaMobileWalletAdapter) => Promise<void>;\n });\n\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n chain: Chain;\n cluster: Cluster;\n onWalletNotFound: (mobileWalletAdapter: LocalSolanaMobileWalletAdapter) => Promise<void>;\n }) {\n const chain = chainOrClusterToChainId(config.chain ?? config.cluster);\n super(\n new LocalSolanaMobileWalletAdapterWallet({\n appIdentity: config.appIdentity,\n authorizationCache: {\n set: config.authorizationResultCache.set,\n get: async () => {\n return (await config.authorizationResultCache.get()) as Authorization | undefined;\n },\n clear: config.authorizationResultCache.clear,\n },\n chains: [chain],\n chainSelector: createDefaultChainSelector(),\n onWalletNotFound: async () => {\n config.onWalletNotFound(this);\n },\n }),\n {\n addressSelector: config.addressSelector,\n chain: chain,\n },\n );\n }\n}\n\nexport class RemoteSolanaMobileWalletAdapter extends BaseSolanaMobileWalletAdapter {\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n chain: Chain;\n remoteHostAuthority: string;\n onWalletNotFound: (mobileWalletAdapter: RemoteSolanaMobileWalletAdapter) => Promise<void>;\n }) {\n const chain = chainOrClusterToChainId(config.chain);\n super(\n new RemoteSolanaMobileWalletAdapterWallet({\n appIdentity: config.appIdentity,\n authorizationCache: {\n set: config.authorizationResultCache.set,\n get: async () => {\n return (await config.authorizationResultCache.get()) as Authorization | undefined;\n },\n clear: config.authorizationResultCache.clear,\n },\n chains: [chain],\n chainSelector: createDefaultChainSelector(),\n remoteHostAuthority: config.remoteHostAuthority,\n onWalletNotFound: async () => {\n config.onWalletNotFound(this);\n },\n }),\n {\n addressSelector: config.addressSelector,\n chain: chain,\n },\n );\n }\n}\n\nexport class SolanaMobileWalletAdapter extends LocalSolanaMobileWalletAdapter {}\n","import { AddressSelector } from './adapter.js';\n\nexport default function createDefaultAddressSelector(): AddressSelector {\n return {\n async select(addresses) {\n return addresses[0];\n },\n };\n}\n","import { createDefaultAuthorizationCache as baseCreateDefaultAuthorizationCache } from '@solana-mobile/wallet-standard-mobile';\n\nimport { AuthorizationResultCache } from './adapter.js';\n\nexport default function createDefaultAuthorizationResultCache(): AuthorizationResultCache {\n return baseCreateDefaultAuthorizationCache();\n}\n","import { defaultErrorModalWalletNotFoundHandler } from '@solana-mobile/wallet-standard-mobile';\n\nimport { SolanaMobileWalletAdapter } from './adapter.js';\n\nasync function defaultWalletNotFoundHandler(_mobileWalletAdapter: SolanaMobileWalletAdapter) {\n return defaultErrorModalWalletNotFoundHandler();\n}\n\nexport default function createDefaultWalletNotFoundHandler(): (\n mobileWalletAdapter: SolanaMobileWalletAdapter,\n) => Promise<void> {\n return defaultWalletNotFoundHandler;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["WalletStandardWalletName","WalletStandardRemoteWalletName","#declareWalletAsInstalled","#accountSelector","#selectedAccount","#publicKey","#wallet","#handleChangeEvent","#connecting","#readyState","#connect","#runWithGuard","#assertIsAuthorized","#performSignTransactions","baseCreateDefaultAuthorizationCache"],"sources":["../../src/getIsSupported.ts","../../src/adapter.ts","../../src/createDefaultAddressSelector.ts","../../src/createDefaultAuthorizationResultCache.ts","../../src/createDefaultWalletNotFoundHandler.ts"],"sourcesContent":["export function getIsSupported() {\n return (\n typeof window !== 'undefined' &&\n window.isSecureContext &&\n typeof document !== 'undefined' &&\n /android/i.test(navigator.userAgent)\n );\n}\n\n/**\n * @deprecated Use {@link getIsSupported} instead.\n */\nexport default getIsSupported;\n","import {\n BaseSignInMessageSignerWalletAdapter,\n WalletConnectionError,\n WalletError,\n WalletName,\n WalletNotConnectedError,\n WalletNotReadyError,\n WalletPublicKeyError,\n WalletReadyState,\n WalletSendTransactionError,\n WalletSignMessageError,\n WalletSignTransactionError,\n} from '@solana/wallet-adapter-base';\nimport {\n SolanaSignAndSendTransaction,\n SolanaSignIn,\n SolanaSignInInput,\n SolanaSignInOutput,\n SolanaSignMessage,\n SolanaSignTransaction,\n SolanaSignTransactionOutput,\n} from '@solana/wallet-standard-features';\nimport {\n Connection,\n PublicKey,\n SendOptions,\n Transaction as LegacyTransaction,\n Transaction,\n TransactionSignature,\n TransactionVersion,\n VersionedMessage,\n VersionedTransaction,\n} from '@solana/web3.js';\nimport {\n AppIdentity,\n AuthorizationResult,\n Base64EncodedAddress,\n Chain,\n Cluster,\n Finality,\n SignInPayload,\n} from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { base64FromUint8Array } from '@solana-mobile/mobile-wallet-adapter-protocol/encoding';\nimport {\n Authorization,\n createDefaultChainSelector,\n LocalSolanaMobileWalletAdapterWallet,\n RemoteSolanaMobileWalletAdapterWallet,\n SolanaMobileWalletAdapterRemoteWalletName as WalletStandardRemoteWalletName,\n SolanaMobileWalletAdapterWalletName as WalletStandardWalletName,\n} from '@solana-mobile/wallet-standard-mobile';\nimport {\n IdentifierString,\n StandardConnect,\n StandardDisconnect,\n StandardEvents,\n StandardEventsChangeProperties,\n WalletAccount,\n} from '@wallet-standard/core';\n\nimport { getIsSupported } from './getIsSupported.js';\n\nexport interface AuthorizationResultCache {\n clear(): Promise<void>;\n get(): Promise<AuthorizationResult | Authorization | undefined>;\n set(authorizationResult: AuthorizationResult | Authorization): Promise<void>;\n}\n\nexport interface AddressSelector {\n select(addresses: Base64EncodedAddress[]): Promise<Base64EncodedAddress>;\n}\n\nexport const SolanaMobileWalletAdapterWalletName = WalletStandardWalletName as WalletName;\nexport const SolanaMobileWalletAdapterRemoteWalletName = WalletStandardRemoteWalletName as WalletName;\n\nconst SIGNATURE_LENGTH_IN_BYTES = 64;\n\nfunction isVersionedTransaction(\n transaction: LegacyTransaction | VersionedTransaction,\n): transaction is VersionedTransaction {\n return 'version' in transaction;\n}\n\nfunction chainOrClusterToChainId(chain: Cluster | Chain): IdentifierString {\n switch (chain) {\n case 'mainnet-beta':\n return 'solana:mainnet';\n case 'testnet':\n return 'solana:testnet';\n case 'devnet':\n return 'solana:devnet';\n default:\n return chain;\n }\n}\n\nfunction getErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : 'Unknown error';\n}\n\nabstract class BaseSolanaMobileWalletAdapter extends BaseSignInMessageSignerWalletAdapter {\n readonly supportedTransactionVersions: Set<TransactionVersion> = new Set(\n // FIXME(#244): We can't actually know what versions are supported until we know which wallet we're talking to.\n ['legacy', 0],\n );\n name;\n icon;\n url;\n #wallet: LocalSolanaMobileWalletAdapterWallet | RemoteSolanaMobileWalletAdapterWallet;\n #connecting = false;\n #readyState: WalletReadyState = getIsSupported() ? WalletReadyState.Loadable : WalletReadyState.Unsupported;\n #accountSelector: (accounts: readonly WalletAccount[]) => Promise<WalletAccount>;\n #selectedAccount: WalletAccount | undefined;\n #publicKey: PublicKey | undefined;\n\n #handleChangeEvent = async (properties: StandardEventsChangeProperties) => {\n if (properties.accounts && properties.accounts.length > 0) {\n this.#declareWalletAsInstalled();\n const nextSelectedAccount = await this.#accountSelector(properties.accounts);\n if (nextSelectedAccount !== this.#selectedAccount) {\n this.#selectedAccount = nextSelectedAccount;\n this.#publicKey = undefined;\n this.emit(\n 'connect',\n // Having just set `this.#selectedAccount`, `this.publicKey` is definitely non-null\n\n this.publicKey!,\n );\n }\n }\n };\n\n protected constructor(\n wallet: LocalSolanaMobileWalletAdapterWallet | RemoteSolanaMobileWalletAdapterWallet,\n config: {\n addressSelector: AddressSelector;\n chain: Chain;\n },\n ) {\n super();\n // this.#chain = chainOrClusterToChainId(config.chain);\n this.#accountSelector = async (accounts: readonly WalletAccount[]) => {\n const selectedBase64EncodedAddress = await config.addressSelector.select(\n accounts.map(({ publicKey }) => base64FromUint8Array(new Uint8Array(publicKey))),\n );\n return (\n accounts.find(\n ({ publicKey }) => base64FromUint8Array(new Uint8Array(publicKey)) === selectedBase64EncodedAddress,\n ) ?? accounts[0]\n );\n };\n this.#wallet = wallet;\n this.#wallet.features[StandardEvents].on('change', this.#handleChangeEvent);\n this.name = this.#wallet.name as WalletName;\n this.icon = this.#wallet.icon;\n this.url = this.#wallet.url;\n // TODO: evaluate if this logic should be kept - it seems to create a nasty bug where\n // the wallet tries to auto connect on page load and gets blocked by the popup blocker\n // if (this.#readyState !== WalletReadyState.Unsupported) {\n // config.authorizationResultCache.get().then((authorizationResult) => {\n // if (authorizationResult) {\n // // Having a prior authorization result is, right now, the best\n // // indication that a mobile wallet is installed. There is no API\n // // we can use to test for whether the association URI is supported.\n // this.#declareWalletAsInstalled();\n // }\n // });\n // }\n }\n\n get publicKey(): PublicKey | null {\n if (!this.#publicKey && this.#selectedAccount) {\n try {\n this.#publicKey = new PublicKey(this.#selectedAccount.publicKey);\n } catch (e) {\n throw new WalletPublicKeyError((e instanceof Error && e?.message) || 'Unknown error', e);\n }\n }\n return this.#publicKey ?? null;\n }\n\n get connected(): boolean {\n return this.#wallet.connected;\n }\n\n get connecting(): boolean {\n return this.#connecting;\n }\n\n get readyState(): WalletReadyState {\n return this.#readyState;\n }\n\n /** @deprecated Use `autoConnect()` instead. */\n async autoConnect_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(): Promise<void> {\n return await this.autoConnect();\n }\n\n async autoConnect(): Promise<void> {\n this.#connect(true);\n }\n\n async connect(): Promise<void> {\n this.#connect();\n }\n\n async #connect(autoConnect: boolean = false): Promise<void> {\n if (this.connecting || this.connected) {\n return;\n }\n return await this.#runWithGuard(async () => {\n if (this.#readyState !== WalletReadyState.Installed && this.#readyState !== WalletReadyState.Loadable) {\n throw new WalletNotReadyError();\n }\n this.#connecting = true;\n try {\n await this.#wallet.features[StandardConnect].connect({ silent: autoConnect });\n } catch (e) {\n throw new WalletConnectionError((e instanceof Error && e.message) || 'Unknown error', e);\n } finally {\n this.#connecting = false;\n }\n });\n }\n\n /** @deprecated Use `connect()` or `autoConnect()` instead. */\n async performAuthorization(signInPayload?: SignInPayload): Promise<AuthorizationResult> {\n try {\n const cachedAuthorizationResult = await this.#wallet.cachedAuthorizationResult;\n if (cachedAuthorizationResult) {\n await this.#wallet.features[StandardConnect].connect({ silent: true });\n return cachedAuthorizationResult;\n }\n\n if (signInPayload) {\n await this.#wallet.features[SolanaSignIn].signIn(signInPayload);\n } else await this.#wallet.features[StandardConnect].connect();\n const authorizationResult = await await this.#wallet.cachedAuthorizationResult;\n return authorizationResult!;\n } catch (e) {\n throw new WalletConnectionError((e instanceof Error && e.message) || 'Unknown error', e);\n }\n }\n\n async disconnect(): Promise<void> {\n // return await this.#runWithGuard(this.#wallet.features[StandardDisconnect].disconnect);\n return await this.#runWithGuard(async () => {\n this.#connecting = false;\n this.#publicKey = undefined;\n this.#selectedAccount = undefined;\n await this.#wallet.features[StandardDisconnect].disconnect();\n this.emit('disconnect');\n });\n }\n\n async signIn(input?: SolanaSignInInput): Promise<SolanaSignInOutput> {\n return this.#runWithGuard(async () => {\n if (this.#readyState !== WalletReadyState.Installed && this.#readyState !== WalletReadyState.Loadable) {\n throw new WalletNotReadyError();\n }\n this.#connecting = true;\n try {\n const outputs = await this.#wallet.features[SolanaSignIn].signIn({\n ...input,\n domain: input?.domain ?? window.location.host,\n });\n if (outputs.length > 0) {\n return outputs[0];\n } else {\n throw new Error('Sign in failed, no sign in result returned by wallet');\n }\n } catch (e) {\n throw new WalletConnectionError((e instanceof Error && e.message) || 'Unknown error', e);\n } finally {\n this.#connecting = false;\n }\n });\n }\n\n async signMessage(message: Uint8Array): Promise<Uint8Array> {\n return await this.#runWithGuard(async () => {\n const account = this.#assertIsAuthorized();\n try {\n const outputs = await this.#wallet.features[SolanaSignMessage].signMessage({\n account,\n message: message,\n });\n return outputs[0].signature;\n } catch (error: unknown) {\n throw new WalletSignMessageError(getErrorMessage(error), error);\n }\n });\n }\n\n async sendTransaction<T extends LegacyTransaction | VersionedTransaction>(\n transaction: T,\n connection: Connection,\n options?: SendOptions,\n ): Promise<TransactionSignature> {\n return await this.#runWithGuard(async () => {\n const account = this.#assertIsAuthorized();\n try {\n function getTargetCommitment() {\n let targetCommitment: Finality;\n switch (connection.commitment) {\n case 'confirmed':\n case 'finalized':\n case 'processed':\n targetCommitment = connection.commitment;\n break;\n default:\n targetCommitment = 'finalized';\n }\n let targetPreflightCommitment: Finality;\n switch (options?.preflightCommitment) {\n case 'confirmed':\n case 'finalized':\n case 'processed':\n targetPreflightCommitment = options.preflightCommitment;\n break;\n case undefined:\n targetPreflightCommitment = targetCommitment;\n break;\n default:\n targetPreflightCommitment = 'finalized';\n }\n const preflightCommitmentScore =\n targetPreflightCommitment === 'finalized'\n ? 2\n : targetPreflightCommitment === 'confirmed'\n ? 1\n : 0;\n const targetCommitmentScore =\n targetCommitment === 'finalized' ? 2 : targetCommitment === 'confirmed' ? 1 : 0;\n return preflightCommitmentScore < targetCommitmentScore\n ? targetPreflightCommitment\n : targetCommitment;\n }\n if (SolanaSignAndSendTransaction in this.#wallet.features) {\n const chain = chainOrClusterToChainId(this.#wallet.currentAuthorization!.chain);\n const [signature] = (\n await this.#wallet.features[SolanaSignAndSendTransaction].signAndSendTransaction({\n account,\n transaction: transaction.serialize(),\n chain: chain,\n options: options\n ? {\n skipPreflight: options.skipPreflight,\n maxRetries: options.maxRetries,\n }\n : undefined,\n })\n ).map((output) => {\n return base64FromUint8Array(output.signature);\n });\n\n return signature;\n } else {\n const [signedTransaction] = await this.#performSignTransactions([transaction]);\n if (isVersionedTransaction(signedTransaction)) {\n return await connection.sendTransaction(signedTransaction);\n } else {\n const serializedTransaction = signedTransaction.serialize();\n return await connection.sendRawTransaction(serializedTransaction, {\n ...options,\n preflightCommitment: getTargetCommitment(),\n });\n }\n }\n } catch (error: unknown) {\n throw new WalletSendTransactionError(getErrorMessage(error), error);\n }\n });\n }\n\n async signTransaction<T extends LegacyTransaction | VersionedTransaction>(transaction: T): Promise<T> {\n return await this.#runWithGuard(async () => {\n const [signedTransaction] = await this.#performSignTransactions([transaction]);\n return signedTransaction;\n });\n }\n\n async signAllTransactions<T extends LegacyTransaction | VersionedTransaction>(transactions: T[]): Promise<T[]> {\n return await this.#runWithGuard(async () => {\n const signedTransactions = await this.#performSignTransactions(transactions);\n return signedTransactions;\n });\n }\n\n #declareWalletAsInstalled(): void {\n if (this.#readyState !== WalletReadyState.Installed) {\n this.emit('readyStateChange', (this.#readyState = WalletReadyState.Installed));\n }\n }\n\n #assertIsAuthorized() {\n if (!this.#wallet.isAuthorized || !this.#selectedAccount) throw new WalletNotConnectedError();\n return this.#selectedAccount;\n }\n\n async #performSignTransactions<T extends LegacyTransaction | VersionedTransaction>(\n transactions: T[],\n ): Promise<T[]> {\n const account = this.#assertIsAuthorized();\n try {\n if (SolanaSignTransaction in this.#wallet.features) {\n return this.#wallet.features[SolanaSignTransaction].signTransaction(\n ...transactions.map((value) => {\n return { account, transaction: value.serialize() };\n }),\n ).then((outputs) => {\n return outputs.map((output: SolanaSignTransactionOutput) => {\n const byteArray = output.signedTransaction;\n const numSignatures = byteArray[0];\n const messageOffset = numSignatures * SIGNATURE_LENGTH_IN_BYTES + 1;\n const version = VersionedMessage.deserializeMessageVersion(\n byteArray.slice(messageOffset, byteArray.length),\n );\n if (version === 'legacy') {\n return Transaction.from(byteArray) as T;\n } else {\n return VersionedTransaction.deserialize(byteArray) as T;\n }\n });\n });\n } else {\n throw new Error('Connected wallet does not support signing transactions');\n }\n } catch (error: unknown) {\n throw new WalletSignTransactionError(getErrorMessage(error), error);\n }\n }\n\n async #runWithGuard<TReturn>(callback: () => Promise<TReturn>) {\n try {\n return await callback();\n } catch (e: unknown) {\n this.emit('error', e instanceof WalletError ? e : new WalletError(getErrorMessage(e), e));\n throw e;\n }\n }\n}\n\nexport class LocalSolanaMobileWalletAdapter extends BaseSolanaMobileWalletAdapter {\n /**\n * @deprecated @param cluster config paramter is deprecated, use @param chain instead\n */\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n cluster: Cluster;\n onWalletNotFound: (mobileWalletAdapter: LocalSolanaMobileWalletAdapter) => Promise<void>;\n });\n\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n chain: Chain;\n onWalletNotFound: (mobileWalletAdapter: LocalSolanaMobileWalletAdapter) => Promise<void>;\n });\n\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n chain: Chain;\n cluster: Cluster;\n onWalletNotFound: (mobileWalletAdapter: LocalSolanaMobileWalletAdapter) => Promise<void>;\n }) {\n const chain = chainOrClusterToChainId(config.chain ?? config.cluster);\n super(\n new LocalSolanaMobileWalletAdapterWallet({\n appIdentity: config.appIdentity,\n authorizationCache: {\n set: config.authorizationResultCache.set,\n get: async () => {\n return (await config.authorizationResultCache.get()) as Authorization | undefined;\n },\n clear: config.authorizationResultCache.clear,\n },\n chains: [chain],\n chainSelector: createDefaultChainSelector(),\n onWalletNotFound: async () => {\n config.onWalletNotFound(this);\n },\n }),\n {\n addressSelector: config.addressSelector,\n chain: chain,\n },\n );\n }\n}\n\nexport class RemoteSolanaMobileWalletAdapter extends BaseSolanaMobileWalletAdapter {\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n chain: Chain;\n remoteHostAuthority: string;\n onWalletNotFound: (mobileWalletAdapter: RemoteSolanaMobileWalletAdapter) => Promise<void>;\n }) {\n const chain = chainOrClusterToChainId(config.chain);\n super(\n new RemoteSolanaMobileWalletAdapterWallet({\n appIdentity: config.appIdentity,\n authorizationCache: {\n set: config.authorizationResultCache.set,\n get: async () => {\n return (await config.authorizationResultCache.get()) as Authorization | undefined;\n },\n clear: config.authorizationResultCache.clear,\n },\n chains: [chain],\n chainSelector: createDefaultChainSelector(),\n remoteHostAuthority: config.remoteHostAuthority,\n onWalletNotFound: async () => {\n config.onWalletNotFound(this);\n },\n }),\n {\n addressSelector: config.addressSelector,\n chain: chain,\n },\n );\n }\n}\n\nexport class SolanaMobileWalletAdapter extends LocalSolanaMobileWalletAdapter {}\n","import { AddressSelector } from './adapter.js';\n\nexport function createDefaultAddressSelector(): AddressSelector {\n return {\n async select(addresses) {\n return addresses[0];\n },\n };\n}\n\n/**\n * @deprecated Use {@link createDefaultAddressSelector} instead.\n */\nexport default createDefaultAddressSelector;\n","import { createDefaultAuthorizationCache as baseCreateDefaultAuthorizationCache } from '@solana-mobile/wallet-standard-mobile';\n\nimport { AuthorizationResultCache } from './adapter.js';\n\nexport function createDefaultAuthorizationResultCache(): AuthorizationResultCache {\n return baseCreateDefaultAuthorizationCache();\n}\n\n/**\n * @deprecated Use {@link createDefaultAuthorizationResultCache} instead.\n */\nexport default createDefaultAuthorizationResultCache;\n","import { defaultErrorModalWalletNotFoundHandler } from '@solana-mobile/wallet-standard-mobile';\n\nimport { SolanaMobileWalletAdapter } from './adapter.js';\n\nasync function defaultWalletNotFoundHandler(_mobileWalletAdapter: SolanaMobileWalletAdapter) {\n return defaultErrorModalWalletNotFoundHandler();\n}\n\nexport function createDefaultWalletNotFoundHandler(): (\n mobileWalletAdapter: SolanaMobileWalletAdapter,\n) => Promise<void> {\n return defaultWalletNotFoundHandler;\n}\n\n/**\n * @deprecated Use {@link createDefaultWalletNotFoundHandler} instead.\n */\nexport default createDefaultWalletNotFoundHandler;\n"],"mappings":"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"}
|
package/lib/types/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/adapter.ts","../../src/createDefaultAddressSelector.ts","../../src/createDefaultAuthorizationResultCache.ts","../../src/createDefaultWalletNotFoundHandler.ts"],"mappings":";;;;;;;UA8DiB,wBAAA;EACb,KAAA,IAAS,OAAA;EACT,GAAA,IAAO,OAAA,CAAQ,mBAAA,GAAsB,aAAA;EACrC,GAAA,CAAI,mBAAA,EAAqB,mBAAA,GAAsB,aAAA,GAAgB,OAAA;AAAA;AAAA,UAGlD,eAAA;EACb,MAAA,CAAO,SAAA,EAAW,oBAAA,KAAyB,OAAA,CAAQ,oBAAA;AAAA;AAAA,cAG1C,mCAAA,EAAkE,UAAA;AAAA,cAClE,yCAAA,EAA8E,UAAA;AAAA,uBA2B5E,6BAAA,SAAsC,oCAAA;EAAA;WACxC,4BAAA,EAA8B,GAAA,CAAI,kBAAA;EAI3C,IAAA,EAAI,UAAA;EACJ,IAAA;EACA,GAAA;EAAA,UAyBS,WAAA,CACL,MAAA,EAAQ,oCAAA,GAAuC,qCAAA,EAC/C,MAAA;IACI,eAAA,EAAiB,eAAA;IACjB,KAAA,EAAO,KAAA;EAAA;EAAA,IAkCX,SAAA,CAAA,GAAa,SAAA;EAAA,IAWb,SAAA,CAAA;EAAA,IAIA,UAAA,CAAA;EAAA,IAIA,UAAA,CAAA,GAAc,gBAAA;EA5H6C;EAiIzD,2CAAA,CAAA,GAA+C,OAAA;EAI/C,WAAA,CAAA,GAAe,OAAA;EAIf,OAAA,CAAA,GAAW,OAAA;EAtIW;EA8JtB,oBAAA,CAAqB,aAAA,GAAgB,aAAA,GAAgB,OAAA,CAAQ,mBAAA;EAkB7D,UAAA,CAAA,GAAc,OAAA;EAWd,MAAA,CAAO,KAAA,GAAQ,iBAAA,GAAoB,OAAA,CAAQ,kBAAA;EAwB3C,WAAA,CAAY,OAAA,EAAS,UAAA,GAAa,OAAA,CAAQ,UAAA;EAe1C,eAAA,WAA0B,WAAA,GAAoB,oBAAA,CAAA,CAChD,WAAA,EAAa,CAAA,EACb,UAAA,EAAY,UAAA,EACZ,OAAA,GAAU,WAAA,GACX,OAAA,CAAQ,oBAAA;EA6EL,eAAA,WAA0B,WAAA,GAAoB,oBAAA,CAAA,CAAsB,WAAA,EAAa,CAAA,GAAI,OAAA,CAAQ,CAAA;EAO7F,mBAAA,WAA8B,WAAA,GAAoB,oBAAA,CAAA,CAAsB,YAAA,EAAc,CAAA,KAAM,OAAA,CAAQ,CAAA;AAAA;AAAA,cA6DjG,8BAAA,SAAuC,6BAAA;EAtXL;;;cA0X/B,MAAA;IACR,eAAA,EAAiB,eAAA;IACjB,WAAA,EAAa,WAAA;IACb,wBAAA,EAA0B,wBAAA;IAC1B,OAAA,EAAS,OAAA;IACT,gBAAA,GAAmB,mBAAA,EAAqB,8BAAA,KAAmC,OAAA;EAAA;cAGnE,MAAA;IACR,eAAA,EAAiB,eAAA;IACjB,WAAA,EAAa,WAAA;IACb,wBAAA,EAA0B,wBAAA;IAC1B,KAAA,EAAO,KAAA;IACP,gBAAA,GAAmB,mBAAA,EAAqB,8BAAA,KAAmC,OAAA;EAAA;AAAA;AAAA,cAoCtE,+BAAA,SAAwC,6BAAA;cACrC,MAAA;IACR,eAAA,EAAiB,eAAA;IACjB,WAAA,EAAa,WAAA;IACb,wBAAA,EAA0B,wBAAA;IAC1B,KAAA,EAAO,KAAA;IACP,mBAAA;IACA,gBAAA,GAAmB,mBAAA,EAAqB,+BAAA,KAAoC,OAAA;EAAA;AAAA;AAAA,cA4BvE,yBAAA,SAAkC,8BAAA;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/adapter.ts","../../src/createDefaultAddressSelector.ts","../../src/createDefaultAuthorizationResultCache.ts","../../src/createDefaultWalletNotFoundHandler.ts"],"mappings":";;;;;;;UA8DiB,wBAAA;EACb,KAAA,IAAS,OAAA;EACT,GAAA,IAAO,OAAA,CAAQ,mBAAA,GAAsB,aAAA;EACrC,GAAA,CAAI,mBAAA,EAAqB,mBAAA,GAAsB,aAAA,GAAgB,OAAA;AAAA;AAAA,UAGlD,eAAA;EACb,MAAA,CAAO,SAAA,EAAW,oBAAA,KAAyB,OAAA,CAAQ,oBAAA;AAAA;AAAA,cAG1C,mCAAA,EAAkE,UAAA;AAAA,cAClE,yCAAA,EAA8E,UAAA;AAAA,uBA2B5E,6BAAA,SAAsC,oCAAA;EAAA;WACxC,4BAAA,EAA8B,GAAA,CAAI,kBAAA;EAI3C,IAAA,EAAI,UAAA;EACJ,IAAA;EACA,GAAA;EAAA,UAyBS,WAAA,CACL,MAAA,EAAQ,oCAAA,GAAuC,qCAAA,EAC/C,MAAA;IACI,eAAA,EAAiB,eAAA;IACjB,KAAA,EAAO,KAAA;EAAA;EAAA,IAkCX,SAAA,CAAA,GAAa,SAAA;EAAA,IAWb,SAAA,CAAA;EAAA,IAIA,UAAA,CAAA;EAAA,IAIA,UAAA,CAAA,GAAc,gBAAA;EA5H6C;EAiIzD,2CAAA,CAAA,GAA+C,OAAA;EAI/C,WAAA,CAAA,GAAe,OAAA;EAIf,OAAA,CAAA,GAAW,OAAA;EAtIW;EA8JtB,oBAAA,CAAqB,aAAA,GAAgB,aAAA,GAAgB,OAAA,CAAQ,mBAAA;EAkB7D,UAAA,CAAA,GAAc,OAAA;EAWd,MAAA,CAAO,KAAA,GAAQ,iBAAA,GAAoB,OAAA,CAAQ,kBAAA;EAwB3C,WAAA,CAAY,OAAA,EAAS,UAAA,GAAa,OAAA,CAAQ,UAAA;EAe1C,eAAA,WAA0B,WAAA,GAAoB,oBAAA,CAAA,CAChD,WAAA,EAAa,CAAA,EACb,UAAA,EAAY,UAAA,EACZ,OAAA,GAAU,WAAA,GACX,OAAA,CAAQ,oBAAA;EA6EL,eAAA,WAA0B,WAAA,GAAoB,oBAAA,CAAA,CAAsB,WAAA,EAAa,CAAA,GAAI,OAAA,CAAQ,CAAA;EAO7F,mBAAA,WAA8B,WAAA,GAAoB,oBAAA,CAAA,CAAsB,YAAA,EAAc,CAAA,KAAM,OAAA,CAAQ,CAAA;AAAA;AAAA,cA6DjG,8BAAA,SAAuC,6BAAA;EAtXL;;;cA0X/B,MAAA;IACR,eAAA,EAAiB,eAAA;IACjB,WAAA,EAAa,WAAA;IACb,wBAAA,EAA0B,wBAAA;IAC1B,OAAA,EAAS,OAAA;IACT,gBAAA,GAAmB,mBAAA,EAAqB,8BAAA,KAAmC,OAAA;EAAA;cAGnE,MAAA;IACR,eAAA,EAAiB,eAAA;IACjB,WAAA,EAAa,WAAA;IACb,wBAAA,EAA0B,wBAAA;IAC1B,KAAA,EAAO,KAAA;IACP,gBAAA,GAAmB,mBAAA,EAAqB,8BAAA,KAAmC,OAAA;EAAA;AAAA;AAAA,cAoCtE,+BAAA,SAAwC,6BAAA;cACrC,MAAA;IACR,eAAA,EAAiB,eAAA;IACjB,WAAA,EAAa,WAAA;IACb,wBAAA,EAA0B,wBAAA;IAC1B,KAAA,EAAO,KAAA;IACP,mBAAA;IACA,gBAAA,GAAmB,mBAAA,EAAqB,+BAAA,KAAoC,OAAA;EAAA;AAAA;AAAA,cA4BvE,yBAAA,SAAkC,8BAAA;;;iBCjhB/B,4BAAA,CAAA,GAAgC,eAAA;;;iBCEhC,qCAAA,CAAA,GAAyC,wBAAA;;;iBCIzC,kCAAA,CAAA,IACZ,mBAAA,EAAqB,yBAAA,KACpB,OAAA"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@solana-mobile/wallet-adapter-mobile",
|
|
3
3
|
"description": "An adapter for mobile wallet apps that conform to the Solana Mobile Wallet Adapter protocol",
|
|
4
|
-
"version": "2.2.
|
|
4
|
+
"version": "2.2.9",
|
|
5
5
|
"author": "Steven Luscher <steven.luscher@solanamobile.com>",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -53,12 +53,10 @@
|
|
|
53
53
|
"@solana/wallet-adapter-base": "^0.9.27",
|
|
54
54
|
"@solana/wallet-standard-features": "^1.3.0",
|
|
55
55
|
"@wallet-standard/core": "^1.1.1",
|
|
56
|
-
"bs58": "^6.0.0",
|
|
57
|
-
"js-base64": "^3.7.5",
|
|
58
56
|
"tslib": "^2.8.1",
|
|
59
|
-
"@solana-mobile/mobile-wallet-adapter-protocol": "^2.2.
|
|
60
|
-
"@solana-mobile/mobile-wallet-adapter-protocol-web3js": "^2.2.
|
|
61
|
-
"@solana-mobile/wallet-standard-mobile": "^0.5.
|
|
57
|
+
"@solana-mobile/mobile-wallet-adapter-protocol": "^2.2.9",
|
|
58
|
+
"@solana-mobile/mobile-wallet-adapter-protocol-web3js": "^2.2.9",
|
|
59
|
+
"@solana-mobile/wallet-standard-mobile": "^0.5.3"
|
|
62
60
|
},
|
|
63
61
|
"optionalDependencies": {
|
|
64
62
|
"@react-native-async-storage/async-storage": "^1.17.7"
|