@solana-mobile/wallet-adapter-mobile 2.2.7 → 2.2.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,14 +1,10 @@
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 _wallet_standard_core = require("@wallet-standard/core");
4
+ let _solana_web3_js = require("@solana/web3.js");
5
+ let _solana_mobile_mobile_wallet_adapter_protocol_encoding = require("@solana-mobile/mobile-wallet-adapter-protocol/encoding");
6
6
  let _solana_mobile_wallet_standard_mobile = require("@solana-mobile/wallet-standard-mobile");
7
- //#region src/base64Utils.ts
8
- function fromUint8Array(byteArray) {
9
- return window.btoa(String.fromCharCode.call(null, ...byteArray));
10
- }
11
- //#endregion
7
+ let _wallet_standard_core = require("@wallet-standard/core");
12
8
  //#region src/getIsSupported.ts
13
9
  function getIsSupported() {
14
10
  return typeof window !== "undefined" && window.isSecureContext && typeof document !== "undefined" && /android/i.test(navigator.userAgent);
@@ -29,6 +25,9 @@ function chainOrClusterToChainId(chain) {
29
25
  default: return chain;
30
26
  }
31
27
  }
28
+ function getErrorMessage(error) {
29
+ return error instanceof Error ? error.message : "Unknown error";
30
+ }
32
31
  var BaseSolanaMobileWalletAdapter = class extends _solana_wallet_adapter_base.BaseSignInMessageSignerWalletAdapter {
33
32
  supportedTransactionVersions = new Set(["legacy", 0]);
34
33
  name;
@@ -54,8 +53,8 @@ var BaseSolanaMobileWalletAdapter = class extends _solana_wallet_adapter_base.Ba
54
53
  constructor(wallet, config) {
55
54
  super();
56
55
  this.#accountSelector = async (accounts) => {
57
- const selectedBase64EncodedAddress = await config.addressSelector.select(accounts.map(({ publicKey }) => fromUint8Array(new Uint8Array(publicKey))));
58
- return accounts.find(({ publicKey }) => fromUint8Array(new Uint8Array(publicKey)) === selectedBase64EncodedAddress) ?? accounts[0];
56
+ const selectedBase64EncodedAddress = await config.addressSelector.select(accounts.map(({ publicKey }) => (0, _solana_mobile_mobile_wallet_adapter_protocol_encoding.base64FromUint8Array)(new Uint8Array(publicKey))));
57
+ return accounts.find(({ publicKey }) => (0, _solana_mobile_mobile_wallet_adapter_protocol_encoding.base64FromUint8Array)(new Uint8Array(publicKey)) === selectedBase64EncodedAddress) ?? accounts[0];
59
58
  };
60
59
  this.#wallet = wallet;
61
60
  this.#wallet.features[_wallet_standard_core.StandardEvents].on("change", this.#handleChangeEvent);
@@ -155,7 +154,7 @@ var BaseSolanaMobileWalletAdapter = class extends _solana_wallet_adapter_base.Ba
155
154
  message
156
155
  }))[0].signature;
157
156
  } catch (error) {
158
- throw new _solana_wallet_adapter_base.WalletSignMessageError(error?.message, error);
157
+ throw new _solana_wallet_adapter_base.WalletSignMessageError(getErrorMessage(error), error);
159
158
  }
160
159
  });
161
160
  }
@@ -198,7 +197,7 @@ var BaseSolanaMobileWalletAdapter = class extends _solana_wallet_adapter_base.Ba
198
197
  maxRetries: options.maxRetries
199
198
  } : void 0
200
199
  })).map((output) => {
201
- return fromUint8Array(output.signature);
200
+ return (0, _solana_mobile_mobile_wallet_adapter_protocol_encoding.base64FromUint8Array)(output.signature);
202
201
  });
203
202
  return signature;
204
203
  } else {
@@ -213,7 +212,7 @@ var BaseSolanaMobileWalletAdapter = class extends _solana_wallet_adapter_base.Ba
213
212
  }
214
213
  }
215
214
  } catch (error) {
216
- throw new _solana_wallet_adapter_base.WalletSendTransactionError(error?.message, error);
215
+ throw new _solana_wallet_adapter_base.WalletSendTransactionError(getErrorMessage(error), error);
217
216
  }
218
217
  });
219
218
  }
@@ -253,14 +252,14 @@ var BaseSolanaMobileWalletAdapter = class extends _solana_wallet_adapter_base.Ba
253
252
  });
254
253
  else throw new Error("Connected wallet does not support signing transactions");
255
254
  } catch (error) {
256
- throw new _solana_wallet_adapter_base.WalletSignTransactionError(error?.message, error);
255
+ throw new _solana_wallet_adapter_base.WalletSignTransactionError(getErrorMessage(error), error);
257
256
  }
258
257
  }
259
258
  async #runWithGuard(callback) {
260
259
  try {
261
260
  return await callback();
262
261
  } catch (e) {
263
- this.emit("error", e);
262
+ this.emit("error", e instanceof _solana_wallet_adapter_base.WalletError ? e : new _solana_wallet_adapter_base.WalletError(getErrorMessage(e), e));
264
263
  throw e;
265
264
  }
266
265
  }
@@ -327,7 +326,7 @@ function createDefaultAuthorizationResultCache() {
327
326
  }
328
327
  //#endregion
329
328
  //#region src/createDefaultWalletNotFoundHandler.ts
330
- async function defaultWalletNotFoundHandler(mobileWalletAdapter) {
329
+ async function defaultWalletNotFoundHandler(_mobileWalletAdapter) {
331
330
  return (0, _solana_mobile_wallet_standard_mobile.defaultErrorModalWalletNotFoundHandler)();
332
331
  }
333
332
  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/getIsSupported.ts","../../src/adapter.ts","../../src/createDefaultAddressSelector.ts","../../src/createDefaultAuthorizationResultCache.ts","../../src/createDefaultWalletNotFoundHandler.ts"],"sourcesContent":["export function getIsSupported() {\n return (\n typeof window !== 'undefined' &&\n window.isSecureContext &&\n typeof document !== 'undefined' &&\n /android/i.test(navigator.userAgent)\n );\n}\n\n/**\n * @deprecated Use {@link getIsSupported} instead.\n */\nexport default getIsSupported;\n","import {\n BaseSignInMessageSignerWalletAdapter,\n WalletConnectionError,\n WalletError,\n WalletName,\n WalletNotConnectedError,\n WalletNotReadyError,\n WalletPublicKeyError,\n WalletReadyState,\n WalletSendTransactionError,\n WalletSignMessageError,\n WalletSignTransactionError,\n} from '@solana/wallet-adapter-base';\nimport {\n SolanaSignAndSendTransaction,\n SolanaSignIn,\n SolanaSignInInput,\n SolanaSignInOutput,\n SolanaSignMessage,\n SolanaSignTransaction,\n SolanaSignTransactionOutput,\n} from '@solana/wallet-standard-features';\nimport {\n Connection,\n PublicKey,\n SendOptions,\n Transaction as LegacyTransaction,\n Transaction,\n TransactionSignature,\n TransactionVersion,\n VersionedMessage,\n VersionedTransaction,\n} from '@solana/web3.js';\nimport {\n AppIdentity,\n AuthorizationResult,\n Base64EncodedAddress,\n Chain,\n Cluster,\n Finality,\n SignInPayload,\n} from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { base64FromUint8Array } from '@solana-mobile/mobile-wallet-adapter-protocol/encoding';\nimport {\n Authorization,\n createDefaultChainSelector,\n LocalSolanaMobileWalletAdapterWallet,\n RemoteSolanaMobileWalletAdapterWallet,\n SolanaMobileWalletAdapterRemoteWalletName as WalletStandardRemoteWalletName,\n SolanaMobileWalletAdapterWalletName as WalletStandardWalletName,\n} from '@solana-mobile/wallet-standard-mobile';\nimport {\n IdentifierString,\n StandardConnect,\n StandardDisconnect,\n StandardEvents,\n StandardEventsChangeProperties,\n WalletAccount,\n} from '@wallet-standard/core';\n\nimport { getIsSupported } from './getIsSupported.js';\n\nexport interface AuthorizationResultCache {\n clear(): Promise<void>;\n get(): Promise<AuthorizationResult | Authorization | undefined>;\n set(authorizationResult: AuthorizationResult | Authorization): Promise<void>;\n}\n\nexport interface AddressSelector {\n select(addresses: Base64EncodedAddress[]): Promise<Base64EncodedAddress>;\n}\n\nexport const SolanaMobileWalletAdapterWalletName = WalletStandardWalletName as WalletName;\nexport const SolanaMobileWalletAdapterRemoteWalletName = WalletStandardRemoteWalletName as WalletName;\n\nconst SIGNATURE_LENGTH_IN_BYTES = 64;\n\nfunction isVersionedTransaction(\n transaction: LegacyTransaction | VersionedTransaction,\n): transaction is VersionedTransaction {\n return 'version' in transaction;\n}\n\nfunction chainOrClusterToChainId(chain: Cluster | Chain): IdentifierString {\n switch (chain) {\n case 'mainnet-beta':\n return 'solana:mainnet';\n case 'testnet':\n return 'solana:testnet';\n case 'devnet':\n return 'solana:devnet';\n default:\n return chain;\n }\n}\n\nfunction getErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : 'Unknown error';\n}\n\nabstract class BaseSolanaMobileWalletAdapter extends BaseSignInMessageSignerWalletAdapter {\n readonly supportedTransactionVersions: Set<TransactionVersion> = new Set(\n // FIXME(#244): We can't actually know what versions are supported until we know which wallet we're talking to.\n ['legacy', 0],\n );\n name;\n icon;\n url;\n #wallet: LocalSolanaMobileWalletAdapterWallet | RemoteSolanaMobileWalletAdapterWallet;\n #connecting = false;\n #readyState: WalletReadyState = getIsSupported() ? WalletReadyState.Loadable : WalletReadyState.Unsupported;\n #accountSelector: (accounts: readonly WalletAccount[]) => Promise<WalletAccount>;\n #selectedAccount: WalletAccount | undefined;\n #publicKey: PublicKey | undefined;\n\n #handleChangeEvent = async (properties: StandardEventsChangeProperties) => {\n if (properties.accounts && properties.accounts.length > 0) {\n this.#declareWalletAsInstalled();\n const nextSelectedAccount = await this.#accountSelector(properties.accounts);\n if (nextSelectedAccount !== this.#selectedAccount) {\n this.#selectedAccount = nextSelectedAccount;\n this.#publicKey = undefined;\n this.emit(\n 'connect',\n // Having just set `this.#selectedAccount`, `this.publicKey` is definitely non-null\n\n this.publicKey!,\n );\n }\n }\n };\n\n protected constructor(\n wallet: LocalSolanaMobileWalletAdapterWallet | RemoteSolanaMobileWalletAdapterWallet,\n config: {\n addressSelector: AddressSelector;\n chain: Chain;\n },\n ) {\n super();\n // this.#chain = chainOrClusterToChainId(config.chain);\n this.#accountSelector = async (accounts: readonly WalletAccount[]) => {\n const selectedBase64EncodedAddress = await config.addressSelector.select(\n accounts.map(({ publicKey }) => base64FromUint8Array(new Uint8Array(publicKey))),\n );\n return (\n accounts.find(\n ({ publicKey }) => base64FromUint8Array(new Uint8Array(publicKey)) === selectedBase64EncodedAddress,\n ) ?? accounts[0]\n );\n };\n this.#wallet = wallet;\n this.#wallet.features[StandardEvents].on('change', this.#handleChangeEvent);\n this.name = this.#wallet.name as WalletName;\n this.icon = this.#wallet.icon;\n this.url = this.#wallet.url;\n // TODO: evaluate if this logic should be kept - it seems to create a nasty bug where\n // the wallet tries to auto connect on page load and gets blocked by the popup blocker\n // if (this.#readyState !== WalletReadyState.Unsupported) {\n // config.authorizationResultCache.get().then((authorizationResult) => {\n // if (authorizationResult) {\n // // Having a prior authorization result is, right now, the best\n // // indication that a mobile wallet is installed. There is no API\n // // we can use to test for whether the association URI is supported.\n // this.#declareWalletAsInstalled();\n // }\n // });\n // }\n }\n\n get publicKey(): PublicKey | null {\n if (!this.#publicKey && this.#selectedAccount) {\n try {\n this.#publicKey = new PublicKey(this.#selectedAccount.publicKey);\n } catch (e) {\n throw new WalletPublicKeyError((e instanceof Error && e?.message) || 'Unknown error', e);\n }\n }\n return this.#publicKey ?? null;\n }\n\n get connected(): boolean {\n return this.#wallet.connected;\n }\n\n get connecting(): boolean {\n return this.#connecting;\n }\n\n get readyState(): WalletReadyState {\n return this.#readyState;\n }\n\n /** @deprecated Use `autoConnect()` instead. */\n async autoConnect_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(): Promise<void> {\n return await this.autoConnect();\n }\n\n async autoConnect(): Promise<void> {\n this.#connect(true);\n }\n\n async connect(): Promise<void> {\n this.#connect();\n }\n\n async #connect(autoConnect: boolean = false): Promise<void> {\n if (this.connecting || this.connected) {\n return;\n }\n return await this.#runWithGuard(async () => {\n if (this.#readyState !== WalletReadyState.Installed && this.#readyState !== WalletReadyState.Loadable) {\n throw new WalletNotReadyError();\n }\n this.#connecting = true;\n try {\n await this.#wallet.features[StandardConnect].connect({ silent: autoConnect });\n } catch (e) {\n throw new WalletConnectionError((e instanceof Error && e.message) || 'Unknown error', e);\n } finally {\n this.#connecting = false;\n }\n });\n }\n\n /** @deprecated Use `connect()` or `autoConnect()` instead. */\n async performAuthorization(signInPayload?: SignInPayload): Promise<AuthorizationResult> {\n try {\n const cachedAuthorizationResult = await this.#wallet.cachedAuthorizationResult;\n if (cachedAuthorizationResult) {\n await this.#wallet.features[StandardConnect].connect({ silent: true });\n return cachedAuthorizationResult;\n }\n\n if (signInPayload) {\n await this.#wallet.features[SolanaSignIn].signIn(signInPayload);\n } else await this.#wallet.features[StandardConnect].connect();\n const authorizationResult = await await this.#wallet.cachedAuthorizationResult;\n return authorizationResult!;\n } catch (e) {\n throw new WalletConnectionError((e instanceof Error && e.message) || 'Unknown error', e);\n }\n }\n\n async disconnect(): Promise<void> {\n // return await this.#runWithGuard(this.#wallet.features[StandardDisconnect].disconnect);\n return await this.#runWithGuard(async () => {\n this.#connecting = false;\n this.#publicKey = undefined;\n this.#selectedAccount = undefined;\n await this.#wallet.features[StandardDisconnect].disconnect();\n this.emit('disconnect');\n });\n }\n\n async signIn(input?: SolanaSignInInput): Promise<SolanaSignInOutput> {\n return this.#runWithGuard(async () => {\n if (this.#readyState !== WalletReadyState.Installed && this.#readyState !== WalletReadyState.Loadable) {\n throw new WalletNotReadyError();\n }\n this.#connecting = true;\n try {\n const outputs = await this.#wallet.features[SolanaSignIn].signIn({\n ...input,\n domain: input?.domain ?? window.location.host,\n });\n if (outputs.length > 0) {\n return outputs[0];\n } else {\n throw new Error('Sign in failed, no sign in result returned by wallet');\n }\n } catch (e) {\n throw new WalletConnectionError((e instanceof Error && e.message) || 'Unknown error', e);\n } finally {\n this.#connecting = false;\n }\n });\n }\n\n async signMessage(message: Uint8Array): Promise<Uint8Array> {\n return await this.#runWithGuard(async () => {\n const account = this.#assertIsAuthorized();\n try {\n const outputs = await this.#wallet.features[SolanaSignMessage].signMessage({\n account,\n message: message,\n });\n return outputs[0].signature;\n } catch (error: unknown) {\n throw new WalletSignMessageError(getErrorMessage(error), error);\n }\n });\n }\n\n async sendTransaction<T extends LegacyTransaction | VersionedTransaction>(\n transaction: T,\n connection: Connection,\n options?: SendOptions,\n ): Promise<TransactionSignature> {\n return await this.#runWithGuard(async () => {\n const account = this.#assertIsAuthorized();\n try {\n function getTargetCommitment() {\n let targetCommitment: Finality;\n switch (connection.commitment) {\n case 'confirmed':\n case 'finalized':\n case 'processed':\n targetCommitment = connection.commitment;\n break;\n default:\n targetCommitment = 'finalized';\n }\n let targetPreflightCommitment: Finality;\n switch (options?.preflightCommitment) {\n case 'confirmed':\n case 'finalized':\n case 'processed':\n targetPreflightCommitment = options.preflightCommitment;\n break;\n case undefined:\n targetPreflightCommitment = targetCommitment;\n break;\n default:\n targetPreflightCommitment = 'finalized';\n }\n const preflightCommitmentScore =\n targetPreflightCommitment === 'finalized'\n ? 2\n : targetPreflightCommitment === 'confirmed'\n ? 1\n : 0;\n const targetCommitmentScore =\n targetCommitment === 'finalized' ? 2 : targetCommitment === 'confirmed' ? 1 : 0;\n return preflightCommitmentScore < targetCommitmentScore\n ? targetPreflightCommitment\n : targetCommitment;\n }\n if (SolanaSignAndSendTransaction in this.#wallet.features) {\n const chain = chainOrClusterToChainId(this.#wallet.currentAuthorization!.chain);\n const [signature] = (\n await this.#wallet.features[SolanaSignAndSendTransaction].signAndSendTransaction({\n account,\n transaction: transaction.serialize(),\n chain: chain,\n options: options\n ? {\n skipPreflight: options.skipPreflight,\n maxRetries: options.maxRetries,\n }\n : undefined,\n })\n ).map((output) => {\n return base64FromUint8Array(output.signature);\n });\n\n return signature;\n } else {\n const [signedTransaction] = await this.#performSignTransactions([transaction]);\n if (isVersionedTransaction(signedTransaction)) {\n return await connection.sendTransaction(signedTransaction);\n } else {\n const serializedTransaction = signedTransaction.serialize();\n return await connection.sendRawTransaction(serializedTransaction, {\n ...options,\n preflightCommitment: getTargetCommitment(),\n });\n }\n }\n } catch (error: unknown) {\n throw new WalletSendTransactionError(getErrorMessage(error), error);\n }\n });\n }\n\n async signTransaction<T extends LegacyTransaction | VersionedTransaction>(transaction: T): Promise<T> {\n return await this.#runWithGuard(async () => {\n const [signedTransaction] = await this.#performSignTransactions([transaction]);\n return signedTransaction;\n });\n }\n\n async signAllTransactions<T extends LegacyTransaction | VersionedTransaction>(transactions: T[]): Promise<T[]> {\n return await this.#runWithGuard(async () => {\n const signedTransactions = await this.#performSignTransactions(transactions);\n return signedTransactions;\n });\n }\n\n #declareWalletAsInstalled(): void {\n if (this.#readyState !== WalletReadyState.Installed) {\n this.emit('readyStateChange', (this.#readyState = WalletReadyState.Installed));\n }\n }\n\n #assertIsAuthorized() {\n if (!this.#wallet.isAuthorized || !this.#selectedAccount) throw new WalletNotConnectedError();\n return this.#selectedAccount;\n }\n\n async #performSignTransactions<T extends LegacyTransaction | VersionedTransaction>(\n transactions: T[],\n ): Promise<T[]> {\n const account = this.#assertIsAuthorized();\n try {\n if (SolanaSignTransaction in this.#wallet.features) {\n return this.#wallet.features[SolanaSignTransaction].signTransaction(\n ...transactions.map((value) => {\n return { account, transaction: value.serialize() };\n }),\n ).then((outputs) => {\n return outputs.map((output: SolanaSignTransactionOutput) => {\n const byteArray = output.signedTransaction;\n const numSignatures = byteArray[0];\n const messageOffset = numSignatures * SIGNATURE_LENGTH_IN_BYTES + 1;\n const version = VersionedMessage.deserializeMessageVersion(\n byteArray.slice(messageOffset, byteArray.length),\n );\n if (version === 'legacy') {\n return Transaction.from(byteArray) as T;\n } else {\n return VersionedTransaction.deserialize(byteArray) as T;\n }\n });\n });\n } else {\n throw new Error('Connected wallet does not support signing transactions');\n }\n } catch (error: unknown) {\n throw new WalletSignTransactionError(getErrorMessage(error), error);\n }\n }\n\n async #runWithGuard<TReturn>(callback: () => Promise<TReturn>) {\n try {\n return await callback();\n } catch (e: unknown) {\n this.emit('error', e instanceof WalletError ? e : new WalletError(getErrorMessage(e), e));\n throw e;\n }\n }\n}\n\nexport class LocalSolanaMobileWalletAdapter extends BaseSolanaMobileWalletAdapter {\n /**\n * @deprecated @param cluster config paramter is deprecated, use @param chain instead\n */\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n cluster: Cluster;\n onWalletNotFound: (mobileWalletAdapter: LocalSolanaMobileWalletAdapter) => Promise<void>;\n });\n\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n chain: Chain;\n onWalletNotFound: (mobileWalletAdapter: LocalSolanaMobileWalletAdapter) => Promise<void>;\n });\n\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n chain: Chain;\n cluster: Cluster;\n onWalletNotFound: (mobileWalletAdapter: LocalSolanaMobileWalletAdapter) => Promise<void>;\n }) {\n const chain = chainOrClusterToChainId(config.chain ?? config.cluster);\n super(\n new LocalSolanaMobileWalletAdapterWallet({\n appIdentity: config.appIdentity,\n authorizationCache: {\n set: config.authorizationResultCache.set,\n get: async () => {\n return (await config.authorizationResultCache.get()) as Authorization | undefined;\n },\n clear: config.authorizationResultCache.clear,\n },\n chains: [chain],\n chainSelector: createDefaultChainSelector(),\n onWalletNotFound: async () => {\n config.onWalletNotFound(this);\n },\n }),\n {\n addressSelector: config.addressSelector,\n chain: chain,\n },\n );\n }\n}\n\nexport class RemoteSolanaMobileWalletAdapter extends BaseSolanaMobileWalletAdapter {\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n chain: Chain;\n remoteHostAuthority: string;\n onWalletNotFound: (mobileWalletAdapter: RemoteSolanaMobileWalletAdapter) => Promise<void>;\n }) {\n const chain = chainOrClusterToChainId(config.chain);\n super(\n new RemoteSolanaMobileWalletAdapterWallet({\n appIdentity: config.appIdentity,\n authorizationCache: {\n set: config.authorizationResultCache.set,\n get: async () => {\n return (await config.authorizationResultCache.get()) as Authorization | undefined;\n },\n clear: config.authorizationResultCache.clear,\n },\n chains: [chain],\n chainSelector: createDefaultChainSelector(),\n remoteHostAuthority: config.remoteHostAuthority,\n onWalletNotFound: async () => {\n config.onWalletNotFound(this);\n },\n }),\n {\n addressSelector: config.addressSelector,\n chain: chain,\n },\n );\n }\n}\n\nexport class SolanaMobileWalletAdapter extends LocalSolanaMobileWalletAdapter {}\n","import { AddressSelector } from './adapter.js';\n\nexport function createDefaultAddressSelector(): AddressSelector {\n return {\n async select(addresses) {\n return addresses[0];\n },\n };\n}\n\n/**\n * @deprecated Use {@link createDefaultAddressSelector} instead.\n */\nexport default createDefaultAddressSelector;\n","import { createDefaultAuthorizationCache as baseCreateDefaultAuthorizationCache } from '@solana-mobile/wallet-standard-mobile';\n\nimport { AuthorizationResultCache } from './adapter.js';\n\nexport function createDefaultAuthorizationResultCache(): AuthorizationResultCache {\n return baseCreateDefaultAuthorizationCache();\n}\n\n/**\n * @deprecated Use {@link createDefaultAuthorizationResultCache} instead.\n */\nexport default createDefaultAuthorizationResultCache;\n","import { defaultErrorModalWalletNotFoundHandler } from '@solana-mobile/wallet-standard-mobile';\n\nimport { SolanaMobileWalletAdapter } from './adapter.js';\n\nasync function defaultWalletNotFoundHandler(_mobileWalletAdapter: SolanaMobileWalletAdapter) {\n return defaultErrorModalWalletNotFoundHandler();\n}\n\nexport function createDefaultWalletNotFoundHandler(): (\n mobileWalletAdapter: SolanaMobileWalletAdapter,\n) => Promise<void> {\n return defaultWalletNotFoundHandler;\n}\n\n/**\n * @deprecated Use {@link createDefaultWalletNotFoundHandler} instead.\n */\nexport default createDefaultWalletNotFoundHandler;\n"],"mappings":"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"}
package/lib/cjs/index.js CHANGED
@@ -1,14 +1,10 @@
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 _wallet_standard_core = require("@wallet-standard/core");
4
+ let _solana_web3_js = require("@solana/web3.js");
5
+ let _solana_mobile_mobile_wallet_adapter_protocol_encoding = require("@solana-mobile/mobile-wallet-adapter-protocol/encoding");
6
6
  let _solana_mobile_wallet_standard_mobile = require("@solana-mobile/wallet-standard-mobile");
7
- //#region src/base64Utils.ts
8
- function fromUint8Array(byteArray) {
9
- return window.btoa(String.fromCharCode.call(null, ...byteArray));
10
- }
11
- //#endregion
7
+ let _wallet_standard_core = require("@wallet-standard/core");
12
8
  //#region src/getIsSupported.ts
13
9
  function getIsSupported() {
14
10
  return typeof window !== "undefined" && window.isSecureContext && typeof document !== "undefined" && /android/i.test(navigator.userAgent);
@@ -29,6 +25,9 @@ function chainOrClusterToChainId(chain) {
29
25
  default: return chain;
30
26
  }
31
27
  }
28
+ function getErrorMessage(error) {
29
+ return error instanceof Error ? error.message : "Unknown error";
30
+ }
32
31
  var BaseSolanaMobileWalletAdapter = class extends _solana_wallet_adapter_base.BaseSignInMessageSignerWalletAdapter {
33
32
  supportedTransactionVersions = new Set(["legacy", 0]);
34
33
  name;
@@ -54,8 +53,8 @@ var BaseSolanaMobileWalletAdapter = class extends _solana_wallet_adapter_base.Ba
54
53
  constructor(wallet, config) {
55
54
  super();
56
55
  this.#accountSelector = async (accounts) => {
57
- const selectedBase64EncodedAddress = await config.addressSelector.select(accounts.map(({ publicKey }) => fromUint8Array(new Uint8Array(publicKey))));
58
- return accounts.find(({ publicKey }) => fromUint8Array(new Uint8Array(publicKey)) === selectedBase64EncodedAddress) ?? accounts[0];
56
+ const selectedBase64EncodedAddress = await config.addressSelector.select(accounts.map(({ publicKey }) => (0, _solana_mobile_mobile_wallet_adapter_protocol_encoding.base64FromUint8Array)(new Uint8Array(publicKey))));
57
+ return accounts.find(({ publicKey }) => (0, _solana_mobile_mobile_wallet_adapter_protocol_encoding.base64FromUint8Array)(new Uint8Array(publicKey)) === selectedBase64EncodedAddress) ?? accounts[0];
59
58
  };
60
59
  this.#wallet = wallet;
61
60
  this.#wallet.features[_wallet_standard_core.StandardEvents].on("change", this.#handleChangeEvent);
@@ -155,7 +154,7 @@ var BaseSolanaMobileWalletAdapter = class extends _solana_wallet_adapter_base.Ba
155
154
  message
156
155
  }))[0].signature;
157
156
  } catch (error) {
158
- throw new _solana_wallet_adapter_base.WalletSignMessageError(error?.message, error);
157
+ throw new _solana_wallet_adapter_base.WalletSignMessageError(getErrorMessage(error), error);
159
158
  }
160
159
  });
161
160
  }
@@ -198,7 +197,7 @@ var BaseSolanaMobileWalletAdapter = class extends _solana_wallet_adapter_base.Ba
198
197
  maxRetries: options.maxRetries
199
198
  } : void 0
200
199
  })).map((output) => {
201
- return fromUint8Array(output.signature);
200
+ return (0, _solana_mobile_mobile_wallet_adapter_protocol_encoding.base64FromUint8Array)(output.signature);
202
201
  });
203
202
  return signature;
204
203
  } else {
@@ -213,7 +212,7 @@ var BaseSolanaMobileWalletAdapter = class extends _solana_wallet_adapter_base.Ba
213
212
  }
214
213
  }
215
214
  } catch (error) {
216
- throw new _solana_wallet_adapter_base.WalletSendTransactionError(error?.message, error);
215
+ throw new _solana_wallet_adapter_base.WalletSendTransactionError(getErrorMessage(error), error);
217
216
  }
218
217
  });
219
218
  }
@@ -253,14 +252,14 @@ var BaseSolanaMobileWalletAdapter = class extends _solana_wallet_adapter_base.Ba
253
252
  });
254
253
  else throw new Error("Connected wallet does not support signing transactions");
255
254
  } catch (error) {
256
- throw new _solana_wallet_adapter_base.WalletSignTransactionError(error?.message, error);
255
+ throw new _solana_wallet_adapter_base.WalletSignTransactionError(getErrorMessage(error), error);
257
256
  }
258
257
  }
259
258
  async #runWithGuard(callback) {
260
259
  try {
261
260
  return await callback();
262
261
  } catch (e) {
263
- this.emit("error", e);
262
+ this.emit("error", e instanceof _solana_wallet_adapter_base.WalletError ? e : new _solana_wallet_adapter_base.WalletError(getErrorMessage(e), e));
264
263
  throw e;
265
264
  }
266
265
  }
@@ -327,7 +326,7 @@ function createDefaultAuthorizationResultCache() {
327
326
  }
328
327
  //#endregion
329
328
  //#region src/createDefaultWalletNotFoundHandler.ts
330
- async function defaultWalletNotFoundHandler(mobileWalletAdapter) {
329
+ async function defaultWalletNotFoundHandler(_mobileWalletAdapter) {
331
330
  return (0, _solana_mobile_wallet_standard_mobile.defaultErrorModalWalletNotFoundHandler)();
332
331
  }
333
332
  function createDefaultWalletNotFoundHandler() {
@@ -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/getIsSupported.ts","../../src/adapter.ts","../../src/createDefaultAddressSelector.ts","../../src/createDefaultAuthorizationResultCache.ts","../../src/createDefaultWalletNotFoundHandler.ts"],"sourcesContent":["export function getIsSupported() {\n return (\n typeof window !== 'undefined' &&\n window.isSecureContext &&\n typeof document !== 'undefined' &&\n /android/i.test(navigator.userAgent)\n );\n}\n\n/**\n * @deprecated Use {@link getIsSupported} instead.\n */\nexport default getIsSupported;\n","import {\n BaseSignInMessageSignerWalletAdapter,\n WalletConnectionError,\n WalletError,\n WalletName,\n WalletNotConnectedError,\n WalletNotReadyError,\n WalletPublicKeyError,\n WalletReadyState,\n WalletSendTransactionError,\n WalletSignMessageError,\n WalletSignTransactionError,\n} from '@solana/wallet-adapter-base';\nimport {\n SolanaSignAndSendTransaction,\n SolanaSignIn,\n SolanaSignInInput,\n SolanaSignInOutput,\n SolanaSignMessage,\n SolanaSignTransaction,\n SolanaSignTransactionOutput,\n} from '@solana/wallet-standard-features';\nimport {\n Connection,\n PublicKey,\n SendOptions,\n Transaction as LegacyTransaction,\n Transaction,\n TransactionSignature,\n TransactionVersion,\n VersionedMessage,\n VersionedTransaction,\n} from '@solana/web3.js';\nimport {\n AppIdentity,\n AuthorizationResult,\n Base64EncodedAddress,\n Chain,\n Cluster,\n Finality,\n SignInPayload,\n} from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { base64FromUint8Array } from '@solana-mobile/mobile-wallet-adapter-protocol/encoding';\nimport {\n Authorization,\n createDefaultChainSelector,\n LocalSolanaMobileWalletAdapterWallet,\n RemoteSolanaMobileWalletAdapterWallet,\n SolanaMobileWalletAdapterRemoteWalletName as WalletStandardRemoteWalletName,\n SolanaMobileWalletAdapterWalletName as WalletStandardWalletName,\n} from '@solana-mobile/wallet-standard-mobile';\nimport {\n IdentifierString,\n StandardConnect,\n StandardDisconnect,\n StandardEvents,\n StandardEventsChangeProperties,\n WalletAccount,\n} from '@wallet-standard/core';\n\nimport { getIsSupported } from './getIsSupported.js';\n\nexport interface AuthorizationResultCache {\n clear(): Promise<void>;\n get(): Promise<AuthorizationResult | Authorization | undefined>;\n set(authorizationResult: AuthorizationResult | Authorization): Promise<void>;\n}\n\nexport interface AddressSelector {\n select(addresses: Base64EncodedAddress[]): Promise<Base64EncodedAddress>;\n}\n\nexport const SolanaMobileWalletAdapterWalletName = WalletStandardWalletName as WalletName;\nexport const SolanaMobileWalletAdapterRemoteWalletName = WalletStandardRemoteWalletName as WalletName;\n\nconst SIGNATURE_LENGTH_IN_BYTES = 64;\n\nfunction isVersionedTransaction(\n transaction: LegacyTransaction | VersionedTransaction,\n): transaction is VersionedTransaction {\n return 'version' in transaction;\n}\n\nfunction chainOrClusterToChainId(chain: Cluster | Chain): IdentifierString {\n switch (chain) {\n case 'mainnet-beta':\n return 'solana:mainnet';\n case 'testnet':\n return 'solana:testnet';\n case 'devnet':\n return 'solana:devnet';\n default:\n return chain;\n }\n}\n\nfunction getErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : 'Unknown error';\n}\n\nabstract class BaseSolanaMobileWalletAdapter extends BaseSignInMessageSignerWalletAdapter {\n readonly supportedTransactionVersions: Set<TransactionVersion> = new Set(\n // FIXME(#244): We can't actually know what versions are supported until we know which wallet we're talking to.\n ['legacy', 0],\n );\n name;\n icon;\n url;\n #wallet: LocalSolanaMobileWalletAdapterWallet | RemoteSolanaMobileWalletAdapterWallet;\n #connecting = false;\n #readyState: WalletReadyState = getIsSupported() ? WalletReadyState.Loadable : WalletReadyState.Unsupported;\n #accountSelector: (accounts: readonly WalletAccount[]) => Promise<WalletAccount>;\n #selectedAccount: WalletAccount | undefined;\n #publicKey: PublicKey | undefined;\n\n #handleChangeEvent = async (properties: StandardEventsChangeProperties) => {\n if (properties.accounts && properties.accounts.length > 0) {\n this.#declareWalletAsInstalled();\n const nextSelectedAccount = await this.#accountSelector(properties.accounts);\n if (nextSelectedAccount !== this.#selectedAccount) {\n this.#selectedAccount = nextSelectedAccount;\n this.#publicKey = undefined;\n this.emit(\n 'connect',\n // Having just set `this.#selectedAccount`, `this.publicKey` is definitely non-null\n\n this.publicKey!,\n );\n }\n }\n };\n\n protected constructor(\n wallet: LocalSolanaMobileWalletAdapterWallet | RemoteSolanaMobileWalletAdapterWallet,\n config: {\n addressSelector: AddressSelector;\n chain: Chain;\n },\n ) {\n super();\n // this.#chain = chainOrClusterToChainId(config.chain);\n this.#accountSelector = async (accounts: readonly WalletAccount[]) => {\n const selectedBase64EncodedAddress = await config.addressSelector.select(\n accounts.map(({ publicKey }) => base64FromUint8Array(new Uint8Array(publicKey))),\n );\n return (\n accounts.find(\n ({ publicKey }) => base64FromUint8Array(new Uint8Array(publicKey)) === selectedBase64EncodedAddress,\n ) ?? accounts[0]\n );\n };\n this.#wallet = wallet;\n this.#wallet.features[StandardEvents].on('change', this.#handleChangeEvent);\n this.name = this.#wallet.name as WalletName;\n this.icon = this.#wallet.icon;\n this.url = this.#wallet.url;\n // TODO: evaluate if this logic should be kept - it seems to create a nasty bug where\n // the wallet tries to auto connect on page load and gets blocked by the popup blocker\n // if (this.#readyState !== WalletReadyState.Unsupported) {\n // config.authorizationResultCache.get().then((authorizationResult) => {\n // if (authorizationResult) {\n // // Having a prior authorization result is, right now, the best\n // // indication that a mobile wallet is installed. There is no API\n // // we can use to test for whether the association URI is supported.\n // this.#declareWalletAsInstalled();\n // }\n // });\n // }\n }\n\n get publicKey(): PublicKey | null {\n if (!this.#publicKey && this.#selectedAccount) {\n try {\n this.#publicKey = new PublicKey(this.#selectedAccount.publicKey);\n } catch (e) {\n throw new WalletPublicKeyError((e instanceof Error && e?.message) || 'Unknown error', e);\n }\n }\n return this.#publicKey ?? null;\n }\n\n get connected(): boolean {\n return this.#wallet.connected;\n }\n\n get connecting(): boolean {\n return this.#connecting;\n }\n\n get readyState(): WalletReadyState {\n return this.#readyState;\n }\n\n /** @deprecated Use `autoConnect()` instead. */\n async autoConnect_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(): Promise<void> {\n return await this.autoConnect();\n }\n\n async autoConnect(): Promise<void> {\n this.#connect(true);\n }\n\n async connect(): Promise<void> {\n this.#connect();\n }\n\n async #connect(autoConnect: boolean = false): Promise<void> {\n if (this.connecting || this.connected) {\n return;\n }\n return await this.#runWithGuard(async () => {\n if (this.#readyState !== WalletReadyState.Installed && this.#readyState !== WalletReadyState.Loadable) {\n throw new WalletNotReadyError();\n }\n this.#connecting = true;\n try {\n await this.#wallet.features[StandardConnect].connect({ silent: autoConnect });\n } catch (e) {\n throw new WalletConnectionError((e instanceof Error && e.message) || 'Unknown error', e);\n } finally {\n this.#connecting = false;\n }\n });\n }\n\n /** @deprecated Use `connect()` or `autoConnect()` instead. */\n async performAuthorization(signInPayload?: SignInPayload): Promise<AuthorizationResult> {\n try {\n const cachedAuthorizationResult = await this.#wallet.cachedAuthorizationResult;\n if (cachedAuthorizationResult) {\n await this.#wallet.features[StandardConnect].connect({ silent: true });\n return cachedAuthorizationResult;\n }\n\n if (signInPayload) {\n await this.#wallet.features[SolanaSignIn].signIn(signInPayload);\n } else await this.#wallet.features[StandardConnect].connect();\n const authorizationResult = await await this.#wallet.cachedAuthorizationResult;\n return authorizationResult!;\n } catch (e) {\n throw new WalletConnectionError((e instanceof Error && e.message) || 'Unknown error', e);\n }\n }\n\n async disconnect(): Promise<void> {\n // return await this.#runWithGuard(this.#wallet.features[StandardDisconnect].disconnect);\n return await this.#runWithGuard(async () => {\n this.#connecting = false;\n this.#publicKey = undefined;\n this.#selectedAccount = undefined;\n await this.#wallet.features[StandardDisconnect].disconnect();\n this.emit('disconnect');\n });\n }\n\n async signIn(input?: SolanaSignInInput): Promise<SolanaSignInOutput> {\n return this.#runWithGuard(async () => {\n if (this.#readyState !== WalletReadyState.Installed && this.#readyState !== WalletReadyState.Loadable) {\n throw new WalletNotReadyError();\n }\n this.#connecting = true;\n try {\n const outputs = await this.#wallet.features[SolanaSignIn].signIn({\n ...input,\n domain: input?.domain ?? window.location.host,\n });\n if (outputs.length > 0) {\n return outputs[0];\n } else {\n throw new Error('Sign in failed, no sign in result returned by wallet');\n }\n } catch (e) {\n throw new WalletConnectionError((e instanceof Error && e.message) || 'Unknown error', e);\n } finally {\n this.#connecting = false;\n }\n });\n }\n\n async signMessage(message: Uint8Array): Promise<Uint8Array> {\n return await this.#runWithGuard(async () => {\n const account = this.#assertIsAuthorized();\n try {\n const outputs = await this.#wallet.features[SolanaSignMessage].signMessage({\n account,\n message: message,\n });\n return outputs[0].signature;\n } catch (error: unknown) {\n throw new WalletSignMessageError(getErrorMessage(error), error);\n }\n });\n }\n\n async sendTransaction<T extends LegacyTransaction | VersionedTransaction>(\n transaction: T,\n connection: Connection,\n options?: SendOptions,\n ): Promise<TransactionSignature> {\n return await this.#runWithGuard(async () => {\n const account = this.#assertIsAuthorized();\n try {\n function getTargetCommitment() {\n let targetCommitment: Finality;\n switch (connection.commitment) {\n case 'confirmed':\n case 'finalized':\n case 'processed':\n targetCommitment = connection.commitment;\n break;\n default:\n targetCommitment = 'finalized';\n }\n let targetPreflightCommitment: Finality;\n switch (options?.preflightCommitment) {\n case 'confirmed':\n case 'finalized':\n case 'processed':\n targetPreflightCommitment = options.preflightCommitment;\n break;\n case undefined:\n targetPreflightCommitment = targetCommitment;\n break;\n default:\n targetPreflightCommitment = 'finalized';\n }\n const preflightCommitmentScore =\n targetPreflightCommitment === 'finalized'\n ? 2\n : targetPreflightCommitment === 'confirmed'\n ? 1\n : 0;\n const targetCommitmentScore =\n targetCommitment === 'finalized' ? 2 : targetCommitment === 'confirmed' ? 1 : 0;\n return preflightCommitmentScore < targetCommitmentScore\n ? targetPreflightCommitment\n : targetCommitment;\n }\n if (SolanaSignAndSendTransaction in this.#wallet.features) {\n const chain = chainOrClusterToChainId(this.#wallet.currentAuthorization!.chain);\n const [signature] = (\n await this.#wallet.features[SolanaSignAndSendTransaction].signAndSendTransaction({\n account,\n transaction: transaction.serialize(),\n chain: chain,\n options: options\n ? {\n skipPreflight: options.skipPreflight,\n maxRetries: options.maxRetries,\n }\n : undefined,\n })\n ).map((output) => {\n return base64FromUint8Array(output.signature);\n });\n\n return signature;\n } else {\n const [signedTransaction] = await this.#performSignTransactions([transaction]);\n if (isVersionedTransaction(signedTransaction)) {\n return await connection.sendTransaction(signedTransaction);\n } else {\n const serializedTransaction = signedTransaction.serialize();\n return await connection.sendRawTransaction(serializedTransaction, {\n ...options,\n preflightCommitment: getTargetCommitment(),\n });\n }\n }\n } catch (error: unknown) {\n throw new WalletSendTransactionError(getErrorMessage(error), error);\n }\n });\n }\n\n async signTransaction<T extends LegacyTransaction | VersionedTransaction>(transaction: T): Promise<T> {\n return await this.#runWithGuard(async () => {\n const [signedTransaction] = await this.#performSignTransactions([transaction]);\n return signedTransaction;\n });\n }\n\n async signAllTransactions<T extends LegacyTransaction | VersionedTransaction>(transactions: T[]): Promise<T[]> {\n return await this.#runWithGuard(async () => {\n const signedTransactions = await this.#performSignTransactions(transactions);\n return signedTransactions;\n });\n }\n\n #declareWalletAsInstalled(): void {\n if (this.#readyState !== WalletReadyState.Installed) {\n this.emit('readyStateChange', (this.#readyState = WalletReadyState.Installed));\n }\n }\n\n #assertIsAuthorized() {\n if (!this.#wallet.isAuthorized || !this.#selectedAccount) throw new WalletNotConnectedError();\n return this.#selectedAccount;\n }\n\n async #performSignTransactions<T extends LegacyTransaction | VersionedTransaction>(\n transactions: T[],\n ): Promise<T[]> {\n const account = this.#assertIsAuthorized();\n try {\n if (SolanaSignTransaction in this.#wallet.features) {\n return this.#wallet.features[SolanaSignTransaction].signTransaction(\n ...transactions.map((value) => {\n return { account, transaction: value.serialize() };\n }),\n ).then((outputs) => {\n return outputs.map((output: SolanaSignTransactionOutput) => {\n const byteArray = output.signedTransaction;\n const numSignatures = byteArray[0];\n const messageOffset = numSignatures * SIGNATURE_LENGTH_IN_BYTES + 1;\n const version = VersionedMessage.deserializeMessageVersion(\n byteArray.slice(messageOffset, byteArray.length),\n );\n if (version === 'legacy') {\n return Transaction.from(byteArray) as T;\n } else {\n return VersionedTransaction.deserialize(byteArray) as T;\n }\n });\n });\n } else {\n throw new Error('Connected wallet does not support signing transactions');\n }\n } catch (error: unknown) {\n throw new WalletSignTransactionError(getErrorMessage(error), error);\n }\n }\n\n async #runWithGuard<TReturn>(callback: () => Promise<TReturn>) {\n try {\n return await callback();\n } catch (e: unknown) {\n this.emit('error', e instanceof WalletError ? e : new WalletError(getErrorMessage(e), e));\n throw e;\n }\n }\n}\n\nexport class LocalSolanaMobileWalletAdapter extends BaseSolanaMobileWalletAdapter {\n /**\n * @deprecated @param cluster config paramter is deprecated, use @param chain instead\n */\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n cluster: Cluster;\n onWalletNotFound: (mobileWalletAdapter: LocalSolanaMobileWalletAdapter) => Promise<void>;\n });\n\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n chain: Chain;\n onWalletNotFound: (mobileWalletAdapter: LocalSolanaMobileWalletAdapter) => Promise<void>;\n });\n\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n chain: Chain;\n cluster: Cluster;\n onWalletNotFound: (mobileWalletAdapter: LocalSolanaMobileWalletAdapter) => Promise<void>;\n }) {\n const chain = chainOrClusterToChainId(config.chain ?? config.cluster);\n super(\n new LocalSolanaMobileWalletAdapterWallet({\n appIdentity: config.appIdentity,\n authorizationCache: {\n set: config.authorizationResultCache.set,\n get: async () => {\n return (await config.authorizationResultCache.get()) as Authorization | undefined;\n },\n clear: config.authorizationResultCache.clear,\n },\n chains: [chain],\n chainSelector: createDefaultChainSelector(),\n onWalletNotFound: async () => {\n config.onWalletNotFound(this);\n },\n }),\n {\n addressSelector: config.addressSelector,\n chain: chain,\n },\n );\n }\n}\n\nexport class RemoteSolanaMobileWalletAdapter extends BaseSolanaMobileWalletAdapter {\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n chain: Chain;\n remoteHostAuthority: string;\n onWalletNotFound: (mobileWalletAdapter: RemoteSolanaMobileWalletAdapter) => Promise<void>;\n }) {\n const chain = chainOrClusterToChainId(config.chain);\n super(\n new RemoteSolanaMobileWalletAdapterWallet({\n appIdentity: config.appIdentity,\n authorizationCache: {\n set: config.authorizationResultCache.set,\n get: async () => {\n return (await config.authorizationResultCache.get()) as Authorization | undefined;\n },\n clear: config.authorizationResultCache.clear,\n },\n chains: [chain],\n chainSelector: createDefaultChainSelector(),\n remoteHostAuthority: config.remoteHostAuthority,\n onWalletNotFound: async () => {\n config.onWalletNotFound(this);\n },\n }),\n {\n addressSelector: config.addressSelector,\n chain: chain,\n },\n );\n }\n}\n\nexport class SolanaMobileWalletAdapter extends LocalSolanaMobileWalletAdapter {}\n","import { AddressSelector } from './adapter.js';\n\nexport function createDefaultAddressSelector(): AddressSelector {\n return {\n async select(addresses) {\n return addresses[0];\n },\n };\n}\n\n/**\n * @deprecated Use {@link createDefaultAddressSelector} instead.\n */\nexport default createDefaultAddressSelector;\n","import { createDefaultAuthorizationCache as baseCreateDefaultAuthorizationCache } from '@solana-mobile/wallet-standard-mobile';\n\nimport { AuthorizationResultCache } from './adapter.js';\n\nexport function createDefaultAuthorizationResultCache(): AuthorizationResultCache {\n return baseCreateDefaultAuthorizationCache();\n}\n\n/**\n * @deprecated Use {@link createDefaultAuthorizationResultCache} instead.\n */\nexport default createDefaultAuthorizationResultCache;\n","import { defaultErrorModalWalletNotFoundHandler } from '@solana-mobile/wallet-standard-mobile';\n\nimport { SolanaMobileWalletAdapter } from './adapter.js';\n\nasync function defaultWalletNotFoundHandler(_mobileWalletAdapter: SolanaMobileWalletAdapter) {\n return defaultErrorModalWalletNotFoundHandler();\n}\n\nexport function createDefaultWalletNotFoundHandler(): (\n mobileWalletAdapter: SolanaMobileWalletAdapter,\n) => Promise<void> {\n return defaultWalletNotFoundHandler;\n}\n\n/**\n * @deprecated Use {@link createDefaultWalletNotFoundHandler} instead.\n */\nexport default createDefaultWalletNotFoundHandler;\n"],"mappings":"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"}
@@ -22,11 +22,11 @@ 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 _wallet_standard_core = require("@wallet-standard/core");
26
+ let _solana_web3_js = require("@solana/web3.js");
27
+ let _solana_mobile_mobile_wallet_adapter_protocol_encoding = require("@solana-mobile/mobile-wallet-adapter-protocol/encoding");
28
28
  let _solana_mobile_wallet_standard_mobile = require("@solana-mobile/wallet-standard-mobile");
29
- let js_base64 = require("js-base64");
29
+ let _wallet_standard_core = require("@wallet-standard/core");
30
30
  let react_native = require("react-native");
31
31
  let _react_native_async_storage_async_storage = require("@react-native-async-storage/async-storage");
32
32
  _react_native_async_storage_async_storage = __toESM(_react_native_async_storage_async_storage);
@@ -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;
@@ -75,8 +78,8 @@ var BaseSolanaMobileWalletAdapter = class extends _solana_wallet_adapter_base.Ba
75
78
  constructor(wallet, config) {
76
79
  super();
77
80
  this.#accountSelector = async (accounts) => {
78
- const selectedBase64EncodedAddress = await config.addressSelector.select(accounts.map(({ publicKey }) => (0, js_base64.fromUint8Array)(new Uint8Array(publicKey))));
79
- return accounts.find(({ publicKey }) => (0, js_base64.fromUint8Array)(new Uint8Array(publicKey)) === selectedBase64EncodedAddress) ?? accounts[0];
81
+ const selectedBase64EncodedAddress = await config.addressSelector.select(accounts.map(({ publicKey }) => (0, _solana_mobile_mobile_wallet_adapter_protocol_encoding.base64FromUint8Array)(new Uint8Array(publicKey))));
82
+ return accounts.find(({ publicKey }) => (0, _solana_mobile_mobile_wallet_adapter_protocol_encoding.base64FromUint8Array)(new Uint8Array(publicKey)) === selectedBase64EncodedAddress) ?? accounts[0];
80
83
  };
81
84
  this.#wallet = wallet;
82
85
  this.#wallet.features[_wallet_standard_core.StandardEvents].on("change", this.#handleChangeEvent);
@@ -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?.message, error);
182
+ throw new _solana_wallet_adapter_base.WalletSignMessageError(getErrorMessage(error), error);
180
183
  }
181
184
  });
182
185
  }
@@ -219,7 +222,7 @@ var BaseSolanaMobileWalletAdapter = class extends _solana_wallet_adapter_base.Ba
219
222
  maxRetries: options.maxRetries
220
223
  } : void 0
221
224
  })).map((output) => {
222
- return (0, js_base64.fromUint8Array)(output.signature);
225
+ return (0, _solana_mobile_mobile_wallet_adapter_protocol_encoding.base64FromUint8Array)(output.signature);
223
226
  });
224
227
  return signature;
225
228
  } else {
@@ -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?.message, 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?.message, 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(mobileWalletAdapter) {
371
+ async function defaultWalletNotFoundHandler(_mobileWalletAdapter) {
369
372
  return (0, _solana_mobile_wallet_standard_mobile.defaultErrorModalWalletNotFoundHandler)();
370
373
  }
371
374
  function createDefaultWalletNotFoundHandler() {