@solana-mobile/wallet-adapter-mobile 2.2.7 → 2.2.8
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 +10 -7
- package/lib/cjs/index.browser.js.map +1 -1
- package/lib/cjs/index.js +10 -7
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/index.native.js +10 -7
- package/lib/cjs/index.native.js.map +1 -1
- package/lib/esm/index.browser.js +11 -8
- package/lib/esm/index.browser.js.map +1 -1
- package/lib/esm/index.js +11 -8
- package/lib/esm/index.js.map +1 -1
- package/lib/types/index.d.ts +1 -1
- package/lib/types/index.d.ts.map +1 -1
- package/package.json +4 -4
package/lib/cjs/index.browser.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
let _solana_wallet_adapter_base = require("@solana/wallet-adapter-base");
|
|
3
|
-
let _solana_web3_js = require("@solana/web3.js");
|
|
4
3
|
let _solana_wallet_standard_features = require("@solana/wallet-standard-features");
|
|
5
|
-
let
|
|
4
|
+
let _solana_web3_js = require("@solana/web3.js");
|
|
6
5
|
let _solana_mobile_wallet_standard_mobile = require("@solana-mobile/wallet-standard-mobile");
|
|
6
|
+
let _wallet_standard_core = require("@wallet-standard/core");
|
|
7
7
|
//#region src/base64Utils.ts
|
|
8
8
|
function fromUint8Array(byteArray) {
|
|
9
9
|
return window.btoa(String.fromCharCode.call(null, ...byteArray));
|
|
@@ -29,6 +29,9 @@ function chainOrClusterToChainId(chain) {
|
|
|
29
29
|
default: return chain;
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
|
+
function getErrorMessage(error) {
|
|
33
|
+
return error instanceof Error ? error.message : "Unknown error";
|
|
34
|
+
}
|
|
32
35
|
var BaseSolanaMobileWalletAdapter = class extends _solana_wallet_adapter_base.BaseSignInMessageSignerWalletAdapter {
|
|
33
36
|
supportedTransactionVersions = new Set(["legacy", 0]);
|
|
34
37
|
name;
|
|
@@ -155,7 +158,7 @@ var BaseSolanaMobileWalletAdapter = class extends _solana_wallet_adapter_base.Ba
|
|
|
155
158
|
message
|
|
156
159
|
}))[0].signature;
|
|
157
160
|
} catch (error) {
|
|
158
|
-
throw new _solana_wallet_adapter_base.WalletSignMessageError(error
|
|
161
|
+
throw new _solana_wallet_adapter_base.WalletSignMessageError(getErrorMessage(error), error);
|
|
159
162
|
}
|
|
160
163
|
});
|
|
161
164
|
}
|
|
@@ -213,7 +216,7 @@ var BaseSolanaMobileWalletAdapter = class extends _solana_wallet_adapter_base.Ba
|
|
|
213
216
|
}
|
|
214
217
|
}
|
|
215
218
|
} catch (error) {
|
|
216
|
-
throw new _solana_wallet_adapter_base.WalletSendTransactionError(error
|
|
219
|
+
throw new _solana_wallet_adapter_base.WalletSendTransactionError(getErrorMessage(error), error);
|
|
217
220
|
}
|
|
218
221
|
});
|
|
219
222
|
}
|
|
@@ -253,14 +256,14 @@ var BaseSolanaMobileWalletAdapter = class extends _solana_wallet_adapter_base.Ba
|
|
|
253
256
|
});
|
|
254
257
|
else throw new Error("Connected wallet does not support signing transactions");
|
|
255
258
|
} catch (error) {
|
|
256
|
-
throw new _solana_wallet_adapter_base.WalletSignTransactionError(error
|
|
259
|
+
throw new _solana_wallet_adapter_base.WalletSignTransactionError(getErrorMessage(error), error);
|
|
257
260
|
}
|
|
258
261
|
}
|
|
259
262
|
async #runWithGuard(callback) {
|
|
260
263
|
try {
|
|
261
264
|
return await callback();
|
|
262
265
|
} catch (e) {
|
|
263
|
-
this.emit("error", e);
|
|
266
|
+
this.emit("error", e instanceof _solana_wallet_adapter_base.WalletError ? e : new _solana_wallet_adapter_base.WalletError(getErrorMessage(e), e));
|
|
264
267
|
throw e;
|
|
265
268
|
}
|
|
266
269
|
}
|
|
@@ -327,7 +330,7 @@ function createDefaultAuthorizationResultCache() {
|
|
|
327
330
|
}
|
|
328
331
|
//#endregion
|
|
329
332
|
//#region src/createDefaultWalletNotFoundHandler.ts
|
|
330
|
-
async function defaultWalletNotFoundHandler(
|
|
333
|
+
async function defaultWalletNotFoundHandler(_mobileWalletAdapter) {
|
|
331
334
|
return (0, _solana_mobile_wallet_standard_mobile.defaultErrorModalWalletNotFoundHandler)();
|
|
332
335
|
}
|
|
333
336
|
function createDefaultWalletNotFoundHandler() {
|
|
@@ -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","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 WalletName,\n WalletNotConnectedError,\n WalletNotReadyError,\n WalletPublicKeyError,\n WalletReadyState,\n WalletSendTransactionError,\n WalletSignMessageError,\n WalletSignTransactionError,\n} from '@solana/wallet-adapter-base';\nimport {\n Connection,\n PublicKey,\n SendOptions,\n Transaction as LegacyTransaction,\n TransactionSignature,\n TransactionVersion,\n VersionedTransaction,\n VersionedMessage,\n Transaction,\n} from '@solana/web3.js';\nimport {\n AppIdentity,\n AuthorizationResult,\n Base64EncodedAddress,\n Finality,\n Chain,\n Cluster,\n SignInPayload,\n} from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport {\n SolanaSignAndSendTransaction,\n SolanaSignIn,\n SolanaSignInInput,\n SolanaSignInOutput,\n SolanaSignMessage,\n SolanaSignTransaction,\n SolanaSignTransactionOutput,\n} from '@solana/wallet-standard-features';\nimport {\n IdentifierString,\n StandardConnect,\n StandardDisconnect,\n StandardEvents,\n StandardEventsChangeProperties,\n WalletAccount,\n} from '@wallet-standard/core';\nimport {\n Authorization,\n createDefaultChainSelector,\n LocalSolanaMobileWalletAdapterWallet,\n RemoteSolanaMobileWalletAdapterWallet,\n SolanaMobileWalletAdapterWalletName as WalletStandardWalletName,\n SolanaMobileWalletAdapterRemoteWalletName as WalletStandardRemoteWalletName,\n} from '@solana-mobile/wallet-standard-mobile';\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\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 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\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: any) {\n throw new WalletSignMessageError(error?.message, 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: any) {\n throw new WalletSendTransactionError(error?.message, 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: any) {\n throw new WalletSignTransactionError(error?.message, error);\n }\n }\n\n async #runWithGuard<TReturn>(callback: () => Promise<TReturn>) {\n try {\n return await callback();\n } catch (e: any) {\n this.emit('error', 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 { AuthorizationResultCache } from './adapter.js';\nimport { createDefaultAuthorizationCache as baseCreateDefaultAuthorizationCache } from '@solana-mobile/wallet-standard-mobile';\n\nexport default function createDefaultAuthorizationResultCache(): AuthorizationResultCache {\n return baseCreateDefaultAuthorizationCache();\n}\n","import { SolanaMobileWalletAdapter } from './adapter.js';\nimport { defaultErrorModalWalletNotFoundHandler } from '@solana-mobile/wallet-standard-mobile';\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/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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"}
|
package/lib/cjs/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
let _solana_wallet_adapter_base = require("@solana/wallet-adapter-base");
|
|
3
|
-
let _solana_web3_js = require("@solana/web3.js");
|
|
4
3
|
let _solana_wallet_standard_features = require("@solana/wallet-standard-features");
|
|
5
|
-
let
|
|
4
|
+
let _solana_web3_js = require("@solana/web3.js");
|
|
6
5
|
let _solana_mobile_wallet_standard_mobile = require("@solana-mobile/wallet-standard-mobile");
|
|
6
|
+
let _wallet_standard_core = require("@wallet-standard/core");
|
|
7
7
|
//#region src/base64Utils.ts
|
|
8
8
|
function fromUint8Array(byteArray) {
|
|
9
9
|
return window.btoa(String.fromCharCode.call(null, ...byteArray));
|
|
@@ -29,6 +29,9 @@ function chainOrClusterToChainId(chain) {
|
|
|
29
29
|
default: return chain;
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
|
+
function getErrorMessage(error) {
|
|
33
|
+
return error instanceof Error ? error.message : "Unknown error";
|
|
34
|
+
}
|
|
32
35
|
var BaseSolanaMobileWalletAdapter = class extends _solana_wallet_adapter_base.BaseSignInMessageSignerWalletAdapter {
|
|
33
36
|
supportedTransactionVersions = new Set(["legacy", 0]);
|
|
34
37
|
name;
|
|
@@ -155,7 +158,7 @@ var BaseSolanaMobileWalletAdapter = class extends _solana_wallet_adapter_base.Ba
|
|
|
155
158
|
message
|
|
156
159
|
}))[0].signature;
|
|
157
160
|
} catch (error) {
|
|
158
|
-
throw new _solana_wallet_adapter_base.WalletSignMessageError(error
|
|
161
|
+
throw new _solana_wallet_adapter_base.WalletSignMessageError(getErrorMessage(error), error);
|
|
159
162
|
}
|
|
160
163
|
});
|
|
161
164
|
}
|
|
@@ -213,7 +216,7 @@ var BaseSolanaMobileWalletAdapter = class extends _solana_wallet_adapter_base.Ba
|
|
|
213
216
|
}
|
|
214
217
|
}
|
|
215
218
|
} catch (error) {
|
|
216
|
-
throw new _solana_wallet_adapter_base.WalletSendTransactionError(error
|
|
219
|
+
throw new _solana_wallet_adapter_base.WalletSendTransactionError(getErrorMessage(error), error);
|
|
217
220
|
}
|
|
218
221
|
});
|
|
219
222
|
}
|
|
@@ -253,14 +256,14 @@ var BaseSolanaMobileWalletAdapter = class extends _solana_wallet_adapter_base.Ba
|
|
|
253
256
|
});
|
|
254
257
|
else throw new Error("Connected wallet does not support signing transactions");
|
|
255
258
|
} catch (error) {
|
|
256
|
-
throw new _solana_wallet_adapter_base.WalletSignTransactionError(error
|
|
259
|
+
throw new _solana_wallet_adapter_base.WalletSignTransactionError(getErrorMessage(error), error);
|
|
257
260
|
}
|
|
258
261
|
}
|
|
259
262
|
async #runWithGuard(callback) {
|
|
260
263
|
try {
|
|
261
264
|
return await callback();
|
|
262
265
|
} catch (e) {
|
|
263
|
-
this.emit("error", e);
|
|
266
|
+
this.emit("error", e instanceof _solana_wallet_adapter_base.WalletError ? e : new _solana_wallet_adapter_base.WalletError(getErrorMessage(e), e));
|
|
264
267
|
throw e;
|
|
265
268
|
}
|
|
266
269
|
}
|
|
@@ -327,7 +330,7 @@ function createDefaultAuthorizationResultCache() {
|
|
|
327
330
|
}
|
|
328
331
|
//#endregion
|
|
329
332
|
//#region src/createDefaultWalletNotFoundHandler.ts
|
|
330
|
-
async function defaultWalletNotFoundHandler(
|
|
333
|
+
async function defaultWalletNotFoundHandler(_mobileWalletAdapter) {
|
|
331
334
|
return (0, _solana_mobile_wallet_standard_mobile.defaultErrorModalWalletNotFoundHandler)();
|
|
332
335
|
}
|
|
333
336
|
function createDefaultWalletNotFoundHandler() {
|
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","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 WalletName,\n WalletNotConnectedError,\n WalletNotReadyError,\n WalletPublicKeyError,\n WalletReadyState,\n WalletSendTransactionError,\n WalletSignMessageError,\n WalletSignTransactionError,\n} from '@solana/wallet-adapter-base';\nimport {\n Connection,\n PublicKey,\n SendOptions,\n Transaction as LegacyTransaction,\n TransactionSignature,\n TransactionVersion,\n VersionedTransaction,\n VersionedMessage,\n Transaction,\n} from '@solana/web3.js';\nimport {\n AppIdentity,\n AuthorizationResult,\n Base64EncodedAddress,\n Finality,\n Chain,\n Cluster,\n SignInPayload,\n} from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport {\n SolanaSignAndSendTransaction,\n SolanaSignIn,\n SolanaSignInInput,\n SolanaSignInOutput,\n SolanaSignMessage,\n SolanaSignTransaction,\n SolanaSignTransactionOutput,\n} from '@solana/wallet-standard-features';\nimport {\n IdentifierString,\n StandardConnect,\n StandardDisconnect,\n StandardEvents,\n StandardEventsChangeProperties,\n WalletAccount,\n} from '@wallet-standard/core';\nimport {\n Authorization,\n createDefaultChainSelector,\n LocalSolanaMobileWalletAdapterWallet,\n RemoteSolanaMobileWalletAdapterWallet,\n SolanaMobileWalletAdapterWalletName as WalletStandardWalletName,\n SolanaMobileWalletAdapterRemoteWalletName as WalletStandardRemoteWalletName,\n} from '@solana-mobile/wallet-standard-mobile';\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\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 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\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: any) {\n throw new WalletSignMessageError(error?.message, 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: any) {\n throw new WalletSendTransactionError(error?.message, 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: any) {\n throw new WalletSignTransactionError(error?.message, error);\n }\n }\n\n async #runWithGuard<TReturn>(callback: () => Promise<TReturn>) {\n try {\n return await callback();\n } catch (e: any) {\n this.emit('error', 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 { AuthorizationResultCache } from './adapter.js';\nimport { createDefaultAuthorizationCache as baseCreateDefaultAuthorizationCache } from '@solana-mobile/wallet-standard-mobile';\n\nexport default function createDefaultAuthorizationResultCache(): AuthorizationResultCache {\n return baseCreateDefaultAuthorizationCache();\n}\n","import { SolanaMobileWalletAdapter } from './adapter.js';\nimport { defaultErrorModalWalletNotFoundHandler } from '@solana-mobile/wallet-standard-mobile';\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/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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"}
|
package/lib/cjs/index.native.js
CHANGED
|
@@ -22,10 +22,10 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
22
22
|
}) : target, mod));
|
|
23
23
|
//#endregion
|
|
24
24
|
let _solana_wallet_adapter_base = require("@solana/wallet-adapter-base");
|
|
25
|
-
let _solana_web3_js = require("@solana/web3.js");
|
|
26
25
|
let _solana_wallet_standard_features = require("@solana/wallet-standard-features");
|
|
27
|
-
let
|
|
26
|
+
let _solana_web3_js = require("@solana/web3.js");
|
|
28
27
|
let _solana_mobile_wallet_standard_mobile = require("@solana-mobile/wallet-standard-mobile");
|
|
28
|
+
let _wallet_standard_core = require("@wallet-standard/core");
|
|
29
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");
|
|
@@ -50,6 +50,9 @@ function chainOrClusterToChainId(chain) {
|
|
|
50
50
|
default: return chain;
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
|
+
function getErrorMessage(error) {
|
|
54
|
+
return error instanceof Error ? error.message : "Unknown error";
|
|
55
|
+
}
|
|
53
56
|
var BaseSolanaMobileWalletAdapter = class extends _solana_wallet_adapter_base.BaseSignInMessageSignerWalletAdapter {
|
|
54
57
|
supportedTransactionVersions = new Set(["legacy", 0]);
|
|
55
58
|
name;
|
|
@@ -176,7 +179,7 @@ var BaseSolanaMobileWalletAdapter = class extends _solana_wallet_adapter_base.Ba
|
|
|
176
179
|
message
|
|
177
180
|
}))[0].signature;
|
|
178
181
|
} catch (error) {
|
|
179
|
-
throw new _solana_wallet_adapter_base.WalletSignMessageError(error
|
|
182
|
+
throw new _solana_wallet_adapter_base.WalletSignMessageError(getErrorMessage(error), error);
|
|
180
183
|
}
|
|
181
184
|
});
|
|
182
185
|
}
|
|
@@ -234,7 +237,7 @@ var BaseSolanaMobileWalletAdapter = class extends _solana_wallet_adapter_base.Ba
|
|
|
234
237
|
}
|
|
235
238
|
}
|
|
236
239
|
} catch (error) {
|
|
237
|
-
throw new _solana_wallet_adapter_base.WalletSendTransactionError(error
|
|
240
|
+
throw new _solana_wallet_adapter_base.WalletSendTransactionError(getErrorMessage(error), error);
|
|
238
241
|
}
|
|
239
242
|
});
|
|
240
243
|
}
|
|
@@ -274,14 +277,14 @@ var BaseSolanaMobileWalletAdapter = class extends _solana_wallet_adapter_base.Ba
|
|
|
274
277
|
});
|
|
275
278
|
else throw new Error("Connected wallet does not support signing transactions");
|
|
276
279
|
} catch (error) {
|
|
277
|
-
throw new _solana_wallet_adapter_base.WalletSignTransactionError(error
|
|
280
|
+
throw new _solana_wallet_adapter_base.WalletSignTransactionError(getErrorMessage(error), error);
|
|
278
281
|
}
|
|
279
282
|
}
|
|
280
283
|
async #runWithGuard(callback) {
|
|
281
284
|
try {
|
|
282
285
|
return await callback();
|
|
283
286
|
} catch (e) {
|
|
284
|
-
this.emit("error", e);
|
|
287
|
+
this.emit("error", e instanceof _solana_wallet_adapter_base.WalletError ? e : new _solana_wallet_adapter_base.WalletError(getErrorMessage(e), e));
|
|
285
288
|
throw e;
|
|
286
289
|
}
|
|
287
290
|
}
|
|
@@ -365,7 +368,7 @@ function createDefaultAuthorizationResultCache() {
|
|
|
365
368
|
}
|
|
366
369
|
//#endregion
|
|
367
370
|
//#region src/createDefaultWalletNotFoundHandler.ts
|
|
368
|
-
async function defaultWalletNotFoundHandler(
|
|
371
|
+
async function defaultWalletNotFoundHandler(_mobileWalletAdapter) {
|
|
369
372
|
return (0, _solana_mobile_wallet_standard_mobile.defaultErrorModalWalletNotFoundHandler)();
|
|
370
373
|
}
|
|
371
374
|
function createDefaultWalletNotFoundHandler() {
|
|
@@ -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","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 WalletName,\n WalletNotConnectedError,\n WalletNotReadyError,\n WalletPublicKeyError,\n WalletReadyState,\n WalletSendTransactionError,\n WalletSignMessageError,\n WalletSignTransactionError,\n} from '@solana/wallet-adapter-base';\nimport {\n Connection,\n PublicKey,\n SendOptions,\n Transaction as LegacyTransaction,\n TransactionSignature,\n TransactionVersion,\n VersionedTransaction,\n VersionedMessage,\n Transaction,\n} from '@solana/web3.js';\nimport {\n AppIdentity,\n AuthorizationResult,\n Base64EncodedAddress,\n Finality,\n Chain,\n Cluster,\n SignInPayload,\n} from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport {\n SolanaSignAndSendTransaction,\n SolanaSignIn,\n SolanaSignInInput,\n SolanaSignInOutput,\n SolanaSignMessage,\n SolanaSignTransaction,\n SolanaSignTransactionOutput,\n} from '@solana/wallet-standard-features';\nimport {\n IdentifierString,\n StandardConnect,\n StandardDisconnect,\n StandardEvents,\n StandardEventsChangeProperties,\n WalletAccount,\n} from '@wallet-standard/core';\nimport {\n Authorization,\n createDefaultChainSelector,\n LocalSolanaMobileWalletAdapterWallet,\n RemoteSolanaMobileWalletAdapterWallet,\n SolanaMobileWalletAdapterWalletName as WalletStandardWalletName,\n SolanaMobileWalletAdapterRemoteWalletName as WalletStandardRemoteWalletName,\n} from '@solana-mobile/wallet-standard-mobile';\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\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 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\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: any) {\n throw new WalletSignMessageError(error?.message, 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: any) {\n throw new WalletSendTransactionError(error?.message, 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: any) {\n throw new WalletSignTransactionError(error?.message, error);\n }\n }\n\n async #runWithGuard<TReturn>(callback: () => Promise<TReturn>) {\n try {\n return await callback();\n } catch (e: any) {\n this.emit('error', 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 { SolanaMobileWalletAdapter } from './adapter.js';\nimport { defaultErrorModalWalletNotFoundHandler } from '@solana-mobile/wallet-standard-mobile';\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 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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"}
|
package/lib/esm/index.browser.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { BaseSignInMessageSignerWalletAdapter, WalletConnectionError, WalletNotConnectedError, WalletNotReadyError, WalletPublicKeyError, WalletReadyState, WalletSendTransactionError, WalletSignMessageError, WalletSignTransactionError } from "@solana/wallet-adapter-base";
|
|
2
|
-
import { PublicKey, Transaction, VersionedMessage, VersionedTransaction } from "@solana/web3.js";
|
|
1
|
+
import { BaseSignInMessageSignerWalletAdapter, WalletConnectionError, WalletError, WalletNotConnectedError, WalletNotReadyError, WalletPublicKeyError, WalletReadyState, WalletSendTransactionError, WalletSignMessageError, WalletSignTransactionError } from "@solana/wallet-adapter-base";
|
|
3
2
|
import { SolanaSignAndSendTransaction, SolanaSignIn, SolanaSignMessage, SolanaSignTransaction } from "@solana/wallet-standard-features";
|
|
4
|
-
import {
|
|
3
|
+
import { PublicKey, Transaction, VersionedMessage, VersionedTransaction } from "@solana/web3.js";
|
|
5
4
|
import { LocalSolanaMobileWalletAdapterWallet, RemoteSolanaMobileWalletAdapterWallet, SolanaMobileWalletAdapterRemoteWalletName as SolanaMobileWalletAdapterRemoteWalletName$1, SolanaMobileWalletAdapterWalletName as SolanaMobileWalletAdapterWalletName$1, createDefaultAuthorizationCache, createDefaultChainSelector, defaultErrorModalWalletNotFoundHandler } from "@solana-mobile/wallet-standard-mobile";
|
|
5
|
+
import { StandardConnect, StandardDisconnect, StandardEvents } from "@wallet-standard/core";
|
|
6
6
|
//#region src/base64Utils.ts
|
|
7
7
|
function fromUint8Array(byteArray) {
|
|
8
8
|
return window.btoa(String.fromCharCode.call(null, ...byteArray));
|
|
@@ -28,6 +28,9 @@ function chainOrClusterToChainId(chain) {
|
|
|
28
28
|
default: return chain;
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
|
+
function getErrorMessage(error) {
|
|
32
|
+
return error instanceof Error ? error.message : "Unknown error";
|
|
33
|
+
}
|
|
31
34
|
var BaseSolanaMobileWalletAdapter = class extends BaseSignInMessageSignerWalletAdapter {
|
|
32
35
|
supportedTransactionVersions = new Set(["legacy", 0]);
|
|
33
36
|
name;
|
|
@@ -154,7 +157,7 @@ var BaseSolanaMobileWalletAdapter = class extends BaseSignInMessageSignerWalletA
|
|
|
154
157
|
message
|
|
155
158
|
}))[0].signature;
|
|
156
159
|
} catch (error) {
|
|
157
|
-
throw new WalletSignMessageError(error
|
|
160
|
+
throw new WalletSignMessageError(getErrorMessage(error), error);
|
|
158
161
|
}
|
|
159
162
|
});
|
|
160
163
|
}
|
|
@@ -212,7 +215,7 @@ var BaseSolanaMobileWalletAdapter = class extends BaseSignInMessageSignerWalletA
|
|
|
212
215
|
}
|
|
213
216
|
}
|
|
214
217
|
} catch (error) {
|
|
215
|
-
throw new WalletSendTransactionError(error
|
|
218
|
+
throw new WalletSendTransactionError(getErrorMessage(error), error);
|
|
216
219
|
}
|
|
217
220
|
});
|
|
218
221
|
}
|
|
@@ -252,14 +255,14 @@ var BaseSolanaMobileWalletAdapter = class extends BaseSignInMessageSignerWalletA
|
|
|
252
255
|
});
|
|
253
256
|
else throw new Error("Connected wallet does not support signing transactions");
|
|
254
257
|
} catch (error) {
|
|
255
|
-
throw new WalletSignTransactionError(error
|
|
258
|
+
throw new WalletSignTransactionError(getErrorMessage(error), error);
|
|
256
259
|
}
|
|
257
260
|
}
|
|
258
261
|
async #runWithGuard(callback) {
|
|
259
262
|
try {
|
|
260
263
|
return await callback();
|
|
261
264
|
} catch (e) {
|
|
262
|
-
this.emit("error", e);
|
|
265
|
+
this.emit("error", e instanceof WalletError ? e : new WalletError(getErrorMessage(e), e));
|
|
263
266
|
throw e;
|
|
264
267
|
}
|
|
265
268
|
}
|
|
@@ -326,7 +329,7 @@ function createDefaultAuthorizationResultCache() {
|
|
|
326
329
|
}
|
|
327
330
|
//#endregion
|
|
328
331
|
//#region src/createDefaultWalletNotFoundHandler.ts
|
|
329
|
-
async function defaultWalletNotFoundHandler(
|
|
332
|
+
async function defaultWalletNotFoundHandler(_mobileWalletAdapter) {
|
|
330
333
|
return defaultErrorModalWalletNotFoundHandler();
|
|
331
334
|
}
|
|
332
335
|
function createDefaultWalletNotFoundHandler() {
|
|
@@ -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 WalletName,\n WalletNotConnectedError,\n WalletNotReadyError,\n WalletPublicKeyError,\n WalletReadyState,\n WalletSendTransactionError,\n WalletSignMessageError,\n WalletSignTransactionError,\n} from '@solana/wallet-adapter-base';\nimport {\n Connection,\n PublicKey,\n SendOptions,\n Transaction as LegacyTransaction,\n TransactionSignature,\n TransactionVersion,\n VersionedTransaction,\n VersionedMessage,\n Transaction,\n} from '@solana/web3.js';\nimport {\n AppIdentity,\n AuthorizationResult,\n Base64EncodedAddress,\n Finality,\n Chain,\n Cluster,\n SignInPayload,\n} from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport {\n SolanaSignAndSendTransaction,\n SolanaSignIn,\n SolanaSignInInput,\n SolanaSignInOutput,\n SolanaSignMessage,\n SolanaSignTransaction,\n SolanaSignTransactionOutput,\n} from '@solana/wallet-standard-features';\nimport {\n IdentifierString,\n StandardConnect,\n StandardDisconnect,\n StandardEvents,\n StandardEventsChangeProperties,\n WalletAccount,\n} from '@wallet-standard/core';\nimport {\n Authorization,\n createDefaultChainSelector,\n LocalSolanaMobileWalletAdapterWallet,\n RemoteSolanaMobileWalletAdapterWallet,\n SolanaMobileWalletAdapterWalletName as WalletStandardWalletName,\n SolanaMobileWalletAdapterRemoteWalletName as WalletStandardRemoteWalletName,\n} from '@solana-mobile/wallet-standard-mobile';\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\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 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\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: any) {\n throw new WalletSignMessageError(error?.message, 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: any) {\n throw new WalletSendTransactionError(error?.message, 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: any) {\n throw new WalletSignTransactionError(error?.message, error);\n }\n }\n\n async #runWithGuard<TReturn>(callback: () => Promise<TReturn>) {\n try {\n return await callback();\n } catch (e: any) {\n this.emit('error', 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 { AuthorizationResultCache } from './adapter.js';\nimport { createDefaultAuthorizationCache as baseCreateDefaultAuthorizationCache } from '@solana-mobile/wallet-standard-mobile';\n\nexport default function createDefaultAuthorizationResultCache(): AuthorizationResultCache {\n return baseCreateDefaultAuthorizationCache();\n}\n","import { SolanaMobileWalletAdapter } from './adapter.js';\nimport { defaultErrorModalWalletNotFoundHandler } from '@solana-mobile/wallet-standard-mobile';\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":";;;;;;AAAA,SAAgB,eAAe,WAA+B;AAC1D,QAAO,OAAO,KAAK,OAAO,aAAa,KAAK,MAAM,GAAG,UAAU,CAAC;;;;ACDpE,SAAwB,iBAAiB;AACrC,QACI,OAAO,WAAW,eAClB,OAAO,mBACP,OAAO,aAAa,eACpB,WAAW,KAAK,UAAU,UAAU;;;;ACiE5C,MAAa,sCAAsCA;AACnD,MAAa,4CAA4CC;AAEzD,MAAM,4BAA4B;AAElC,SAAS,uBACL,aACmC;AACnC,QAAO,aAAa;;AAGxB,SAAS,wBAAwB,OAA0C;AACvE,SAAQ,OAAR;EACI,KAAK,eACD,QAAO;EACX,KAAK,UACD,QAAO;EACX,KAAK,SACD,QAAO;EACX,QACI,QAAO;;;AAInB,IAAe,gCAAf,cAAqD,qCAAqC;CACtF,+BAAiE,IAAI,IAEjE,CAAC,UAAU,EAAE,CAChB;CACD;CACA;CACA;CACA;CACA,cAAc;CACd,cAAgC,gBAAgB,GAAG,iBAAiB,WAAW,iBAAiB;CAChG;CACA;CACA;CAEA,qBAAqB,OAAO,eAA+C;AACvE,MAAI,WAAW,YAAY,WAAW,SAAS,SAAS,GAAG;AACvD,SAAA,0BAAgC;GAChC,MAAM,sBAAsB,MAAM,MAAA,gBAAsB,WAAW,SAAS;AAC5E,OAAI,wBAAwB,MAAA,iBAAuB;AAC/C,UAAA,kBAAwB;AACxB,UAAA,YAAkB,KAAA;AAClB,SAAK,KACD,WAGA,KAAK,UACR;;;;CAKb,YACI,QACA,QAIF;AACE,SAAO;AAEP,QAAA,kBAAwB,OAAO,aAAuC;GAClE,MAAM,+BAA+B,MAAM,OAAO,gBAAgB,OAC9D,SAAS,KAAK,EAAE,gBAAgB,eAAe,IAAI,WAAW,UAAU,CAAC,CAAC,CAC7E;AACD,UACI,SAAS,MACJ,EAAE,gBAAgB,eAAe,IAAI,WAAW,UAAU,CAAC,KAAK,6BACpE,IAAI,SAAS;;AAGtB,QAAA,SAAe;AACf,QAAA,OAAa,SAAS,gBAAgB,GAAG,UAAU,MAAA,kBAAwB;AAC3E,OAAK,OAAO,MAAA,OAAa;AACzB,OAAK,OAAO,MAAA,OAAa;AACzB,OAAK,MAAM,MAAA,OAAa;;CAe5B,IAAI,YAA8B;AAC9B,MAAI,CAAC,MAAA,aAAmB,MAAA,gBACpB,KAAI;AACA,SAAA,YAAkB,IAAI,UAAU,MAAA,gBAAsB,UAAU;WAC3D,GAAG;AACR,SAAM,IAAI,qBAAsB,aAAa,SAAS,GAAG,WAAY,iBAAiB,EAAE;;AAGhG,SAAO,MAAA,aAAmB;;CAG9B,IAAI,YAAqB;AACrB,SAAO,MAAA,OAAa;;CAGxB,IAAI,aAAsB;AACtB,SAAO,MAAA;;CAGX,IAAI,aAA+B;AAC/B,SAAO,MAAA;;;CAIX,MAAM,8CAA6D;AAC/D,SAAO,MAAM,KAAK,aAAa;;CAGnC,MAAM,cAA6B;AAC/B,QAAA,QAAc,KAAK;;CAGvB,MAAM,UAAyB;AAC3B,QAAA,SAAe;;CAGnB,OAAA,QAAe,cAAuB,OAAsB;AACxD,MAAI,KAAK,cAAc,KAAK,UACxB;AAEJ,SAAO,MAAM,MAAA,aAAmB,YAAY;AACxC,OAAI,MAAA,eAAqB,iBAAiB,aAAa,MAAA,eAAqB,iBAAiB,SACzF,OAAM,IAAI,qBAAqB;AAEnC,SAAA,aAAmB;AACnB,OAAI;AACA,UAAM,MAAA,OAAa,SAAS,iBAAiB,QAAQ,EAAE,QAAQ,aAAa,CAAC;YACxE,GAAG;AACR,UAAM,IAAI,sBAAuB,aAAa,SAAS,EAAE,WAAY,iBAAiB,EAAE;aAClF;AACN,UAAA,aAAmB;;IAEzB;;;CAIN,MAAM,qBAAqB,eAA6D;AACpF,MAAI;GACA,MAAM,4BAA4B,MAAM,MAAA,OAAa;AACrD,OAAI,2BAA2B;AAC3B,UAAM,MAAA,OAAa,SAAS,iBAAiB,QAAQ,EAAE,QAAQ,MAAM,CAAC;AACtE,WAAO;;AAGX,OAAI,cACA,OAAM,MAAA,OAAa,SAAS,cAAc,OAAO,cAAc;OAC5D,OAAM,MAAA,OAAa,SAAS,iBAAiB,SAAS;AAE7D,UAD4B,MAAM,MAAM,MAAA,OAAa;WAEhD,GAAG;AACR,SAAM,IAAI,sBAAuB,aAAa,SAAS,EAAE,WAAY,iBAAiB,EAAE;;;CAIhG,MAAM,aAA4B;AAE9B,SAAO,MAAM,MAAA,aAAmB,YAAY;AACxC,SAAA,aAAmB;AACnB,SAAA,YAAkB,KAAA;AAClB,SAAA,kBAAwB,KAAA;AACxB,SAAM,MAAA,OAAa,SAAS,oBAAoB,YAAY;AAC5D,QAAK,KAAK,aAAa;IACzB;;CAGN,MAAM,OAAO,OAAwD;AACjE,SAAO,MAAA,aAAmB,YAAY;AAClC,OAAI,MAAA,eAAqB,iBAAiB,aAAa,MAAA,eAAqB,iBAAiB,SACzF,OAAM,IAAI,qBAAqB;AAEnC,SAAA,aAAmB;AACnB,OAAI;IACA,MAAM,UAAU,MAAM,MAAA,OAAa,SAAS,cAAc,OAAO;KAC7D,GAAG;KACH,QAAQ,OAAO,UAAU,OAAO,SAAS;KAC5C,CAAC;AACF,QAAI,QAAQ,SAAS,EACjB,QAAO,QAAQ;QAEf,OAAM,IAAI,MAAM,uDAAuD;YAEtE,GAAG;AACR,UAAM,IAAI,sBAAuB,aAAa,SAAS,EAAE,WAAY,iBAAiB,EAAE;aAClF;AACN,UAAA,aAAmB;;IAEzB;;CAGN,MAAM,YAAY,SAA0C;AACxD,SAAO,MAAM,MAAA,aAAmB,YAAY;GACxC,MAAM,UAAU,MAAA,oBAA0B;AAC1C,OAAI;AAKA,YAJgB,MAAM,MAAA,OAAa,SAAS,mBAAmB,YAAY;KACvE;KACS;KACZ,CAAC,EACa,GAAG;YACb,OAAY;AACjB,UAAM,IAAI,uBAAuB,OAAO,SAAS,MAAM;;IAE7D;;CAGN,MAAM,gBACF,aACA,YACA,SAC6B;AAC7B,SAAO,MAAM,MAAA,aAAmB,YAAY;GACxC,MAAM,UAAU,MAAA,oBAA0B;AAC1C,OAAI;IACA,SAAS,sBAAsB;KAC3B,IAAI;AACJ,aAAQ,WAAW,YAAnB;MACI,KAAK;MACL,KAAK;MACL,KAAK;AACD,0BAAmB,WAAW;AAC9B;MACJ,QACI,oBAAmB;;KAE3B,IAAI;AACJ,aAAQ,SAAS,qBAAjB;MACI,KAAK;MACL,KAAK;MACL,KAAK;AACD,mCAA4B,QAAQ;AACpC;MACJ,KAAK,KAAA;AACD,mCAA4B;AAC5B;MACJ,QACI,6BAA4B;;AAUpC,aAPI,8BAA8B,cACxB,IACA,8BAA8B,cAC5B,IACA,MAER,qBAAqB,cAAc,IAAI,qBAAqB,cAAc,IAAI,KAE5E,4BACA;;AAEV,QAAI,gCAAgC,MAAA,OAAa,UAAU;KACvD,MAAM,QAAQ,wBAAwB,MAAA,OAAa,qBAAsB,MAAM;KAC/E,MAAM,CAAC,cACH,MAAM,MAAA,OAAa,SAAS,8BAA8B,uBAAuB;MAC7E;MACA,aAAa,YAAY,WAAW;MAC7B;MACP,SAAS,UACH;OACI,eAAe,QAAQ;OACvB,YAAY,QAAQ;OACvB,GACD,KAAA;MACT,CAAC,EACJ,KAAK,WAAW;AACd,aAAO,eAAe,OAAO,UAAU;OACzC;AAEF,YAAO;WACJ;KACH,MAAM,CAAC,qBAAqB,MAAM,MAAA,wBAA8B,CAAC,YAAY,CAAC;AAC9E,SAAI,uBAAuB,kBAAkB,CACzC,QAAO,MAAM,WAAW,gBAAgB,kBAAkB;UACvD;MACH,MAAM,wBAAwB,kBAAkB,WAAW;AAC3D,aAAO,MAAM,WAAW,mBAAmB,uBAAuB;OAC9D,GAAG;OACH,qBAAqB,qBAAqB;OAC7C,CAAC;;;YAGL,OAAY;AACjB,UAAM,IAAI,2BAA2B,OAAO,SAAS,MAAM;;IAEjE;;CAGN,MAAM,gBAAoE,aAA4B;AAClG,SAAO,MAAM,MAAA,aAAmB,YAAY;GACxC,MAAM,CAAC,qBAAqB,MAAM,MAAA,wBAA8B,CAAC,YAAY,CAAC;AAC9E,UAAO;IACT;;CAGN,MAAM,oBAAwE,cAAiC;AAC3G,SAAO,MAAM,MAAA,aAAmB,YAAY;AAExC,UAD2B,MAAM,MAAA,wBAA8B,aAAa;IAE9E;;CAGN,4BAAkC;AAC9B,MAAI,MAAA,eAAqB,iBAAiB,UACtC,MAAK,KAAK,oBAAqB,MAAA,aAAmB,iBAAiB,UAAW;;CAItF,sBAAsB;AAClB,MAAI,CAAC,MAAA,OAAa,gBAAgB,CAAC,MAAA,gBAAuB,OAAM,IAAI,yBAAyB;AAC7F,SAAO,MAAA;;CAGX,OAAA,wBACI,cACY;EACZ,MAAM,UAAU,MAAA,oBAA0B;AAC1C,MAAI;AACA,OAAI,yBAAyB,MAAA,OAAa,SACtC,QAAO,MAAA,OAAa,SAAS,uBAAuB,gBAChD,GAAG,aAAa,KAAK,UAAU;AAC3B,WAAO;KAAE;KAAS,aAAa,MAAM,WAAW;KAAE;KACpD,CACL,CAAC,MAAM,YAAY;AAChB,WAAO,QAAQ,KAAK,WAAwC;KACxD,MAAM,YAAY,OAAO;KAEzB,MAAM,gBADgB,UAAU,KACM,4BAA4B;AAIlE,SAHgB,iBAAiB,0BAC7B,UAAU,MAAM,eAAe,UAAU,OAAO,CACnD,KACe,SACZ,QAAO,YAAY,KAAK,UAAU;SAElC,QAAO,qBAAqB,YAAY,UAAU;MAExD;KACJ;OAEF,OAAM,IAAI,MAAM,yDAAyD;WAExE,OAAY;AACjB,SAAM,IAAI,2BAA2B,OAAO,SAAS,MAAM;;;CAInE,OAAA,aAA6B,UAAkC;AAC3D,MAAI;AACA,UAAO,MAAM,UAAU;WAClB,GAAQ;AACb,QAAK,KAAK,SAAS,EAAE;AACrB,SAAM;;;;AAKlB,IAAa,iCAAb,cAAoD,8BAA8B;CAoB9E,YAAY,QAOT;EACC,MAAM,QAAQ,wBAAwB,OAAO,SAAS,OAAO,QAAQ;AACrE,QACI,IAAI,qCAAqC;GACrC,aAAa,OAAO;GACpB,oBAAoB;IAChB,KAAK,OAAO,yBAAyB;IACrC,KAAK,YAAY;AACb,YAAQ,MAAM,OAAO,yBAAyB,KAAK;;IAEvD,OAAO,OAAO,yBAAyB;IAC1C;GACD,QAAQ,CAAC,MAAM;GACf,eAAe,4BAA4B;GAC3C,kBAAkB,YAAY;AAC1B,WAAO,iBAAiB,KAAK;;GAEpC,CAAC,EACF;GACI,iBAAiB,OAAO;GACjB;GACV,CACJ;;;AAIT,IAAa,kCAAb,cAAqD,8BAA8B;CAC/E,YAAY,QAOT;EACC,MAAM,QAAQ,wBAAwB,OAAO,MAAM;AACnD,QACI,IAAI,sCAAsC;GACtC,aAAa,OAAO;GACpB,oBAAoB;IAChB,KAAK,OAAO,yBAAyB;IACrC,KAAK,YAAY;AACb,YAAQ,MAAM,OAAO,yBAAyB,KAAK;;IAEvD,OAAO,OAAO,yBAAyB;IAC1C;GACD,QAAQ,CAAC,MAAM;GACf,eAAe,4BAA4B;GAC3C,qBAAqB,OAAO;GAC5B,kBAAkB,YAAY;AAC1B,WAAO,iBAAiB,KAAK;;GAEpC,CAAC,EACF;GACI,iBAAiB,OAAO;GACjB;GACV,CACJ;;;AAIT,IAAa,4BAAb,cAA+C,+BAA+B;;;AC3gB9E,SAAwB,+BAAgD;AACpE,QAAO,EACH,MAAM,OAAO,WAAW;AACpB,SAAO,UAAU;IAExB;;;;ACJL,SAAwB,wCAAkE;AACtF,QAAOa,iCAAqC;;;;ACDhD,eAAe,6BAA6B,qBAAgD;AACxF,QAAO,wCAAwC;;AAGnD,SAAwB,qCAEL;AACf,QAAO"}
|
|
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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"}
|
package/lib/esm/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { BaseSignInMessageSignerWalletAdapter, WalletConnectionError, WalletNotConnectedError, WalletNotReadyError, WalletPublicKeyError, WalletReadyState, WalletSendTransactionError, WalletSignMessageError, WalletSignTransactionError } from "@solana/wallet-adapter-base";
|
|
2
|
-
import { PublicKey, Transaction, VersionedMessage, VersionedTransaction } from "@solana/web3.js";
|
|
1
|
+
import { BaseSignInMessageSignerWalletAdapter, WalletConnectionError, WalletError, WalletNotConnectedError, WalletNotReadyError, WalletPublicKeyError, WalletReadyState, WalletSendTransactionError, WalletSignMessageError, WalletSignTransactionError } from "@solana/wallet-adapter-base";
|
|
3
2
|
import { SolanaSignAndSendTransaction, SolanaSignIn, SolanaSignMessage, SolanaSignTransaction } from "@solana/wallet-standard-features";
|
|
4
|
-
import {
|
|
3
|
+
import { PublicKey, Transaction, VersionedMessage, VersionedTransaction } from "@solana/web3.js";
|
|
5
4
|
import { LocalSolanaMobileWalletAdapterWallet, RemoteSolanaMobileWalletAdapterWallet, SolanaMobileWalletAdapterRemoteWalletName as SolanaMobileWalletAdapterRemoteWalletName$1, SolanaMobileWalletAdapterWalletName as SolanaMobileWalletAdapterWalletName$1, createDefaultAuthorizationCache, createDefaultChainSelector, defaultErrorModalWalletNotFoundHandler } from "@solana-mobile/wallet-standard-mobile";
|
|
5
|
+
import { StandardConnect, StandardDisconnect, StandardEvents } from "@wallet-standard/core";
|
|
6
6
|
//#region src/base64Utils.ts
|
|
7
7
|
function fromUint8Array(byteArray) {
|
|
8
8
|
return window.btoa(String.fromCharCode.call(null, ...byteArray));
|
|
@@ -28,6 +28,9 @@ function chainOrClusterToChainId(chain) {
|
|
|
28
28
|
default: return chain;
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
|
+
function getErrorMessage(error) {
|
|
32
|
+
return error instanceof Error ? error.message : "Unknown error";
|
|
33
|
+
}
|
|
31
34
|
var BaseSolanaMobileWalletAdapter = class extends BaseSignInMessageSignerWalletAdapter {
|
|
32
35
|
supportedTransactionVersions = new Set(["legacy", 0]);
|
|
33
36
|
name;
|
|
@@ -154,7 +157,7 @@ var BaseSolanaMobileWalletAdapter = class extends BaseSignInMessageSignerWalletA
|
|
|
154
157
|
message
|
|
155
158
|
}))[0].signature;
|
|
156
159
|
} catch (error) {
|
|
157
|
-
throw new WalletSignMessageError(error
|
|
160
|
+
throw new WalletSignMessageError(getErrorMessage(error), error);
|
|
158
161
|
}
|
|
159
162
|
});
|
|
160
163
|
}
|
|
@@ -212,7 +215,7 @@ var BaseSolanaMobileWalletAdapter = class extends BaseSignInMessageSignerWalletA
|
|
|
212
215
|
}
|
|
213
216
|
}
|
|
214
217
|
} catch (error) {
|
|
215
|
-
throw new WalletSendTransactionError(error
|
|
218
|
+
throw new WalletSendTransactionError(getErrorMessage(error), error);
|
|
216
219
|
}
|
|
217
220
|
});
|
|
218
221
|
}
|
|
@@ -252,14 +255,14 @@ var BaseSolanaMobileWalletAdapter = class extends BaseSignInMessageSignerWalletA
|
|
|
252
255
|
});
|
|
253
256
|
else throw new Error("Connected wallet does not support signing transactions");
|
|
254
257
|
} catch (error) {
|
|
255
|
-
throw new WalletSignTransactionError(error
|
|
258
|
+
throw new WalletSignTransactionError(getErrorMessage(error), error);
|
|
256
259
|
}
|
|
257
260
|
}
|
|
258
261
|
async #runWithGuard(callback) {
|
|
259
262
|
try {
|
|
260
263
|
return await callback();
|
|
261
264
|
} catch (e) {
|
|
262
|
-
this.emit("error", e);
|
|
265
|
+
this.emit("error", e instanceof WalletError ? e : new WalletError(getErrorMessage(e), e));
|
|
263
266
|
throw e;
|
|
264
267
|
}
|
|
265
268
|
}
|
|
@@ -326,7 +329,7 @@ function createDefaultAuthorizationResultCache() {
|
|
|
326
329
|
}
|
|
327
330
|
//#endregion
|
|
328
331
|
//#region src/createDefaultWalletNotFoundHandler.ts
|
|
329
|
-
async function defaultWalletNotFoundHandler(
|
|
332
|
+
async function defaultWalletNotFoundHandler(_mobileWalletAdapter) {
|
|
330
333
|
return defaultErrorModalWalletNotFoundHandler();
|
|
331
334
|
}
|
|
332
335
|
function createDefaultWalletNotFoundHandler() {
|
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 WalletName,\n WalletNotConnectedError,\n WalletNotReadyError,\n WalletPublicKeyError,\n WalletReadyState,\n WalletSendTransactionError,\n WalletSignMessageError,\n WalletSignTransactionError,\n} from '@solana/wallet-adapter-base';\nimport {\n Connection,\n PublicKey,\n SendOptions,\n Transaction as LegacyTransaction,\n TransactionSignature,\n TransactionVersion,\n VersionedTransaction,\n VersionedMessage,\n Transaction,\n} from '@solana/web3.js';\nimport {\n AppIdentity,\n AuthorizationResult,\n Base64EncodedAddress,\n Finality,\n Chain,\n Cluster,\n SignInPayload,\n} from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport {\n SolanaSignAndSendTransaction,\n SolanaSignIn,\n SolanaSignInInput,\n SolanaSignInOutput,\n SolanaSignMessage,\n SolanaSignTransaction,\n SolanaSignTransactionOutput,\n} from '@solana/wallet-standard-features';\nimport {\n IdentifierString,\n StandardConnect,\n StandardDisconnect,\n StandardEvents,\n StandardEventsChangeProperties,\n WalletAccount,\n} from '@wallet-standard/core';\nimport {\n Authorization,\n createDefaultChainSelector,\n LocalSolanaMobileWalletAdapterWallet,\n RemoteSolanaMobileWalletAdapterWallet,\n SolanaMobileWalletAdapterWalletName as WalletStandardWalletName,\n SolanaMobileWalletAdapterRemoteWalletName as WalletStandardRemoteWalletName,\n} from '@solana-mobile/wallet-standard-mobile';\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\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 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\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: any) {\n throw new WalletSignMessageError(error?.message, 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: any) {\n throw new WalletSendTransactionError(error?.message, 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: any) {\n throw new WalletSignTransactionError(error?.message, error);\n }\n }\n\n async #runWithGuard<TReturn>(callback: () => Promise<TReturn>) {\n try {\n return await callback();\n } catch (e: any) {\n this.emit('error', 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 { AuthorizationResultCache } from './adapter.js';\nimport { createDefaultAuthorizationCache as baseCreateDefaultAuthorizationCache } from '@solana-mobile/wallet-standard-mobile';\n\nexport default function createDefaultAuthorizationResultCache(): AuthorizationResultCache {\n return baseCreateDefaultAuthorizationCache();\n}\n","import { SolanaMobileWalletAdapter } from './adapter.js';\nimport { defaultErrorModalWalletNotFoundHandler } from '@solana-mobile/wallet-standard-mobile';\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":";;;;;;AAAA,SAAgB,eAAe,WAA+B;AAC1D,QAAO,OAAO,KAAK,OAAO,aAAa,KAAK,MAAM,GAAG,UAAU,CAAC;;;;ACDpE,SAAwB,iBAAiB;AACrC,QACI,OAAO,WAAW,eAClB,OAAO,mBACP,OAAO,aAAa,eACpB,WAAW,KAAK,UAAU,UAAU;;;;ACiE5C,MAAa,sCAAsCA;AACnD,MAAa,4CAA4CC;AAEzD,MAAM,4BAA4B;AAElC,SAAS,uBACL,aACmC;AACnC,QAAO,aAAa;;AAGxB,SAAS,wBAAwB,OAA0C;AACvE,SAAQ,OAAR;EACI,KAAK,eACD,QAAO;EACX,KAAK,UACD,QAAO;EACX,KAAK,SACD,QAAO;EACX,QACI,QAAO;;;AAInB,IAAe,gCAAf,cAAqD,qCAAqC;CACtF,+BAAiE,IAAI,IAEjE,CAAC,UAAU,EAAE,CAChB;CACD;CACA;CACA;CACA;CACA,cAAc;CACd,cAAgC,gBAAgB,GAAG,iBAAiB,WAAW,iBAAiB;CAChG;CACA;CACA;CAEA,qBAAqB,OAAO,eAA+C;AACvE,MAAI,WAAW,YAAY,WAAW,SAAS,SAAS,GAAG;AACvD,SAAA,0BAAgC;GAChC,MAAM,sBAAsB,MAAM,MAAA,gBAAsB,WAAW,SAAS;AAC5E,OAAI,wBAAwB,MAAA,iBAAuB;AAC/C,UAAA,kBAAwB;AACxB,UAAA,YAAkB,KAAA;AAClB,SAAK,KACD,WAGA,KAAK,UACR;;;;CAKb,YACI,QACA,QAIF;AACE,SAAO;AAEP,QAAA,kBAAwB,OAAO,aAAuC;GAClE,MAAM,+BAA+B,MAAM,OAAO,gBAAgB,OAC9D,SAAS,KAAK,EAAE,gBAAgB,eAAe,IAAI,WAAW,UAAU,CAAC,CAAC,CAC7E;AACD,UACI,SAAS,MACJ,EAAE,gBAAgB,eAAe,IAAI,WAAW,UAAU,CAAC,KAAK,6BACpE,IAAI,SAAS;;AAGtB,QAAA,SAAe;AACf,QAAA,OAAa,SAAS,gBAAgB,GAAG,UAAU,MAAA,kBAAwB;AAC3E,OAAK,OAAO,MAAA,OAAa;AACzB,OAAK,OAAO,MAAA,OAAa;AACzB,OAAK,MAAM,MAAA,OAAa;;CAe5B,IAAI,YAA8B;AAC9B,MAAI,CAAC,MAAA,aAAmB,MAAA,gBACpB,KAAI;AACA,SAAA,YAAkB,IAAI,UAAU,MAAA,gBAAsB,UAAU;WAC3D,GAAG;AACR,SAAM,IAAI,qBAAsB,aAAa,SAAS,GAAG,WAAY,iBAAiB,EAAE;;AAGhG,SAAO,MAAA,aAAmB;;CAG9B,IAAI,YAAqB;AACrB,SAAO,MAAA,OAAa;;CAGxB,IAAI,aAAsB;AACtB,SAAO,MAAA;;CAGX,IAAI,aAA+B;AAC/B,SAAO,MAAA;;;CAIX,MAAM,8CAA6D;AAC/D,SAAO,MAAM,KAAK,aAAa;;CAGnC,MAAM,cAA6B;AAC/B,QAAA,QAAc,KAAK;;CAGvB,MAAM,UAAyB;AAC3B,QAAA,SAAe;;CAGnB,OAAA,QAAe,cAAuB,OAAsB;AACxD,MAAI,KAAK,cAAc,KAAK,UACxB;AAEJ,SAAO,MAAM,MAAA,aAAmB,YAAY;AACxC,OAAI,MAAA,eAAqB,iBAAiB,aAAa,MAAA,eAAqB,iBAAiB,SACzF,OAAM,IAAI,qBAAqB;AAEnC,SAAA,aAAmB;AACnB,OAAI;AACA,UAAM,MAAA,OAAa,SAAS,iBAAiB,QAAQ,EAAE,QAAQ,aAAa,CAAC;YACxE,GAAG;AACR,UAAM,IAAI,sBAAuB,aAAa,SAAS,EAAE,WAAY,iBAAiB,EAAE;aAClF;AACN,UAAA,aAAmB;;IAEzB;;;CAIN,MAAM,qBAAqB,eAA6D;AACpF,MAAI;GACA,MAAM,4BAA4B,MAAM,MAAA,OAAa;AACrD,OAAI,2BAA2B;AAC3B,UAAM,MAAA,OAAa,SAAS,iBAAiB,QAAQ,EAAE,QAAQ,MAAM,CAAC;AACtE,WAAO;;AAGX,OAAI,cACA,OAAM,MAAA,OAAa,SAAS,cAAc,OAAO,cAAc;OAC5D,OAAM,MAAA,OAAa,SAAS,iBAAiB,SAAS;AAE7D,UAD4B,MAAM,MAAM,MAAA,OAAa;WAEhD,GAAG;AACR,SAAM,IAAI,sBAAuB,aAAa,SAAS,EAAE,WAAY,iBAAiB,EAAE;;;CAIhG,MAAM,aAA4B;AAE9B,SAAO,MAAM,MAAA,aAAmB,YAAY;AACxC,SAAA,aAAmB;AACnB,SAAA,YAAkB,KAAA;AAClB,SAAA,kBAAwB,KAAA;AACxB,SAAM,MAAA,OAAa,SAAS,oBAAoB,YAAY;AAC5D,QAAK,KAAK,aAAa;IACzB;;CAGN,MAAM,OAAO,OAAwD;AACjE,SAAO,MAAA,aAAmB,YAAY;AAClC,OAAI,MAAA,eAAqB,iBAAiB,aAAa,MAAA,eAAqB,iBAAiB,SACzF,OAAM,IAAI,qBAAqB;AAEnC,SAAA,aAAmB;AACnB,OAAI;IACA,MAAM,UAAU,MAAM,MAAA,OAAa,SAAS,cAAc,OAAO;KAC7D,GAAG;KACH,QAAQ,OAAO,UAAU,OAAO,SAAS;KAC5C,CAAC;AACF,QAAI,QAAQ,SAAS,EACjB,QAAO,QAAQ;QAEf,OAAM,IAAI,MAAM,uDAAuD;YAEtE,GAAG;AACR,UAAM,IAAI,sBAAuB,aAAa,SAAS,EAAE,WAAY,iBAAiB,EAAE;aAClF;AACN,UAAA,aAAmB;;IAEzB;;CAGN,MAAM,YAAY,SAA0C;AACxD,SAAO,MAAM,MAAA,aAAmB,YAAY;GACxC,MAAM,UAAU,MAAA,oBAA0B;AAC1C,OAAI;AAKA,YAJgB,MAAM,MAAA,OAAa,SAAS,mBAAmB,YAAY;KACvE;KACS;KACZ,CAAC,EACa,GAAG;YACb,OAAY;AACjB,UAAM,IAAI,uBAAuB,OAAO,SAAS,MAAM;;IAE7D;;CAGN,MAAM,gBACF,aACA,YACA,SAC6B;AAC7B,SAAO,MAAM,MAAA,aAAmB,YAAY;GACxC,MAAM,UAAU,MAAA,oBAA0B;AAC1C,OAAI;IACA,SAAS,sBAAsB;KAC3B,IAAI;AACJ,aAAQ,WAAW,YAAnB;MACI,KAAK;MACL,KAAK;MACL,KAAK;AACD,0BAAmB,WAAW;AAC9B;MACJ,QACI,oBAAmB;;KAE3B,IAAI;AACJ,aAAQ,SAAS,qBAAjB;MACI,KAAK;MACL,KAAK;MACL,KAAK;AACD,mCAA4B,QAAQ;AACpC;MACJ,KAAK,KAAA;AACD,mCAA4B;AAC5B;MACJ,QACI,6BAA4B;;AAUpC,aAPI,8BAA8B,cACxB,IACA,8BAA8B,cAC5B,IACA,MAER,qBAAqB,cAAc,IAAI,qBAAqB,cAAc,IAAI,KAE5E,4BACA;;AAEV,QAAI,gCAAgC,MAAA,OAAa,UAAU;KACvD,MAAM,QAAQ,wBAAwB,MAAA,OAAa,qBAAsB,MAAM;KAC/E,MAAM,CAAC,cACH,MAAM,MAAA,OAAa,SAAS,8BAA8B,uBAAuB;MAC7E;MACA,aAAa,YAAY,WAAW;MAC7B;MACP,SAAS,UACH;OACI,eAAe,QAAQ;OACvB,YAAY,QAAQ;OACvB,GACD,KAAA;MACT,CAAC,EACJ,KAAK,WAAW;AACd,aAAO,eAAe,OAAO,UAAU;OACzC;AAEF,YAAO;WACJ;KACH,MAAM,CAAC,qBAAqB,MAAM,MAAA,wBAA8B,CAAC,YAAY,CAAC;AAC9E,SAAI,uBAAuB,kBAAkB,CACzC,QAAO,MAAM,WAAW,gBAAgB,kBAAkB;UACvD;MACH,MAAM,wBAAwB,kBAAkB,WAAW;AAC3D,aAAO,MAAM,WAAW,mBAAmB,uBAAuB;OAC9D,GAAG;OACH,qBAAqB,qBAAqB;OAC7C,CAAC;;;YAGL,OAAY;AACjB,UAAM,IAAI,2BAA2B,OAAO,SAAS,MAAM;;IAEjE;;CAGN,MAAM,gBAAoE,aAA4B;AAClG,SAAO,MAAM,MAAA,aAAmB,YAAY;GACxC,MAAM,CAAC,qBAAqB,MAAM,MAAA,wBAA8B,CAAC,YAAY,CAAC;AAC9E,UAAO;IACT;;CAGN,MAAM,oBAAwE,cAAiC;AAC3G,SAAO,MAAM,MAAA,aAAmB,YAAY;AAExC,UAD2B,MAAM,MAAA,wBAA8B,aAAa;IAE9E;;CAGN,4BAAkC;AAC9B,MAAI,MAAA,eAAqB,iBAAiB,UACtC,MAAK,KAAK,oBAAqB,MAAA,aAAmB,iBAAiB,UAAW;;CAItF,sBAAsB;AAClB,MAAI,CAAC,MAAA,OAAa,gBAAgB,CAAC,MAAA,gBAAuB,OAAM,IAAI,yBAAyB;AAC7F,SAAO,MAAA;;CAGX,OAAA,wBACI,cACY;EACZ,MAAM,UAAU,MAAA,oBAA0B;AAC1C,MAAI;AACA,OAAI,yBAAyB,MAAA,OAAa,SACtC,QAAO,MAAA,OAAa,SAAS,uBAAuB,gBAChD,GAAG,aAAa,KAAK,UAAU;AAC3B,WAAO;KAAE;KAAS,aAAa,MAAM,WAAW;KAAE;KACpD,CACL,CAAC,MAAM,YAAY;AAChB,WAAO,QAAQ,KAAK,WAAwC;KACxD,MAAM,YAAY,OAAO;KAEzB,MAAM,gBADgB,UAAU,KACM,4BAA4B;AAIlE,SAHgB,iBAAiB,0BAC7B,UAAU,MAAM,eAAe,UAAU,OAAO,CACnD,KACe,SACZ,QAAO,YAAY,KAAK,UAAU;SAElC,QAAO,qBAAqB,YAAY,UAAU;MAExD;KACJ;OAEF,OAAM,IAAI,MAAM,yDAAyD;WAExE,OAAY;AACjB,SAAM,IAAI,2BAA2B,OAAO,SAAS,MAAM;;;CAInE,OAAA,aAA6B,UAAkC;AAC3D,MAAI;AACA,UAAO,MAAM,UAAU;WAClB,GAAQ;AACb,QAAK,KAAK,SAAS,EAAE;AACrB,SAAM;;;;AAKlB,IAAa,iCAAb,cAAoD,8BAA8B;CAoB9E,YAAY,QAOT;EACC,MAAM,QAAQ,wBAAwB,OAAO,SAAS,OAAO,QAAQ;AACrE,QACI,IAAI,qCAAqC;GACrC,aAAa,OAAO;GACpB,oBAAoB;IAChB,KAAK,OAAO,yBAAyB;IACrC,KAAK,YAAY;AACb,YAAQ,MAAM,OAAO,yBAAyB,KAAK;;IAEvD,OAAO,OAAO,yBAAyB;IAC1C;GACD,QAAQ,CAAC,MAAM;GACf,eAAe,4BAA4B;GAC3C,kBAAkB,YAAY;AAC1B,WAAO,iBAAiB,KAAK;;GAEpC,CAAC,EACF;GACI,iBAAiB,OAAO;GACjB;GACV,CACJ;;;AAIT,IAAa,kCAAb,cAAqD,8BAA8B;CAC/E,YAAY,QAOT;EACC,MAAM,QAAQ,wBAAwB,OAAO,MAAM;AACnD,QACI,IAAI,sCAAsC;GACtC,aAAa,OAAO;GACpB,oBAAoB;IAChB,KAAK,OAAO,yBAAyB;IACrC,KAAK,YAAY;AACb,YAAQ,MAAM,OAAO,yBAAyB,KAAK;;IAEvD,OAAO,OAAO,yBAAyB;IAC1C;GACD,QAAQ,CAAC,MAAM;GACf,eAAe,4BAA4B;GAC3C,qBAAqB,OAAO;GAC5B,kBAAkB,YAAY;AAC1B,WAAO,iBAAiB,KAAK;;GAEpC,CAAC,EACF;GACI,iBAAiB,OAAO;GACjB;GACV,CACJ;;;AAIT,IAAa,4BAAb,cAA+C,+BAA+B;;;AC3gB9E,SAAwB,+BAAgD;AACpE,QAAO,EACH,MAAM,OAAO,WAAW;AACpB,SAAO,UAAU;IAExB;;;;ACJL,SAAwB,wCAAkE;AACtF,QAAOa,iCAAqC;;;;ACDhD,eAAe,6BAA6B,qBAAgD;AACxF,QAAO,wCAAwC;;AAGnD,SAAwB,qCAEL;AACf,QAAO"}
|
|
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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"}
|
package/lib/types/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { BaseSignInMessageSignerWalletAdapter, WalletName, WalletReadyState } from "@solana/wallet-adapter-base";
|
|
2
|
+
import { SolanaSignInInput, SolanaSignInOutput } from "@solana/wallet-standard-features";
|
|
2
3
|
import { Connection, PublicKey, SendOptions, Transaction, TransactionSignature, TransactionVersion, VersionedTransaction } from "@solana/web3.js";
|
|
3
4
|
import { AppIdentity, AuthorizationResult, Base64EncodedAddress, Chain, Cluster, SignInPayload } from "@solana-mobile/mobile-wallet-adapter-protocol";
|
|
4
|
-
import { SolanaSignInInput, SolanaSignInOutput } from "@solana/wallet-standard-features";
|
|
5
5
|
import { Authorization, LocalSolanaMobileWalletAdapterWallet, RemoteSolanaMobileWalletAdapterWallet } from "@solana-mobile/wallet-standard-mobile";
|
|
6
6
|
|
|
7
7
|
//#region src/adapter.d.ts
|
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":";;;;;;;
|
|
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;;;iBCjhBvB,4BAAA,CAAA,GAAgC,eAAA;;;iBCEhC,qCAAA,CAAA,GAAyC,wBAAA;;;iBCIzC,kCAAA,CAAA,IACpB,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.8",
|
|
5
5
|
"author": "Steven Luscher <steven.luscher@solanamobile.com>",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -56,9 +56,9 @@
|
|
|
56
56
|
"bs58": "^6.0.0",
|
|
57
57
|
"js-base64": "^3.7.5",
|
|
58
58
|
"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.
|
|
59
|
+
"@solana-mobile/mobile-wallet-adapter-protocol": "^2.2.8",
|
|
60
|
+
"@solana-mobile/mobile-wallet-adapter-protocol-web3js": "^2.2.8",
|
|
61
|
+
"@solana-mobile/wallet-standard-mobile": "^0.5.2"
|
|
62
62
|
},
|
|
63
63
|
"optionalDependencies": {
|
|
64
64
|
"@react-native-async-storage/async-storage": "^1.17.7"
|