@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.
- package/lib/cjs/index.browser.js +14 -15
- package/lib/cjs/index.browser.js.map +1 -1
- package/lib/cjs/index.js +14 -15
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/index.native.js +14 -11
- package/lib/cjs/index.native.js.map +1 -1
- package/lib/esm/index.browser.js +15 -16
- package/lib/esm/index.browser.js.map +1 -1
- package/lib/esm/index.js +15 -16
- package/lib/esm/index.js.map +1 -1
- package/lib/types/index.d.ts +1 -1
- package/lib/types/index.d.ts.map +1 -1
- package/package.json +4 -6
package/lib/cjs/index.browser.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
|
|
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
|
-
|
|
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 }) =>
|
|
58
|
-
return accounts.find(({ publicKey }) =>
|
|
56
|
+
const selectedBase64EncodedAddress = await config.addressSelector.select(accounts.map(({ publicKey }) => (0, _solana_mobile_mobile_wallet_adapter_protocol_encoding.base64FromUint8Array)(new Uint8Array(publicKey))));
|
|
57
|
+
return accounts.find(({ publicKey }) => (0, _solana_mobile_mobile_wallet_adapter_protocol_encoding.base64FromUint8Array)(new Uint8Array(publicKey)) === selectedBase64EncodedAddress) ?? accounts[0];
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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(
|
|
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":";;;;;;;AAAA,SAAgB,eAAe,WAA+B;AAC1D,QAAO,OAAO,KAAK,OAAO,aAAa,KAAK,MAAM,GAAG,UAAU,CAAC;;;;ACDpE,SAAwB,iBAAiB;AACrC,QACI,OAAO,WAAW,eAClB,OAAO,mBACP,OAAO,aAAa,eACpB,WAAW,KAAK,UAAU,UAAU;;;;ACiE5C,MAAa,sCAAsCA,sCAAAA;AACnD,MAAa,4CAA4CC,sCAAAA;AAEzD,MAAM,4BAA4B;AAElC,SAAS,uBACL,aACmC;AACnC,QAAO,aAAa;;AAGxB,SAAS,wBAAwB,OAA0C;AACvE,SAAQ,OAAR;EACI,KAAK,eACD,QAAO;EACX,KAAK,UACD,QAAO;EACX,KAAK,SACD,QAAO;EACX,QACI,QAAO;;;AAInB,IAAe,gCAAf,cAAqDC,4BAAAA,qCAAqC;CACtF,+BAAiE,IAAI,IAEjE,CAAC,UAAU,EAAE,CAChB;CACD;CACA;CACA;CACA;CACA,cAAc;CACd,cAAgC,gBAAgB,GAAGC,4BAAAA,iBAAiB,WAAWA,4BAAAA,iBAAiB;CAChG;CACA;CACA;CAEA,qBAAqB,OAAO,eAA+C;AACvE,MAAI,WAAW,YAAY,WAAW,SAAS,SAAS,GAAG;AACvD,SAAA,0BAAgC;GAChC,MAAM,sBAAsB,MAAM,MAAA,gBAAsB,WAAW,SAAS;AAC5E,OAAI,wBAAwB,MAAA,iBAAuB;AAC/C,UAAA,kBAAwB;AACxB,UAAA,YAAkB,KAAA;AAClB,SAAK,KACD,WAGA,KAAK,UACR;;;;CAKb,YACI,QACA,QAIF;AACE,SAAO;AAEP,QAAA,kBAAwB,OAAO,aAAuC;GAClE,MAAM,+BAA+B,MAAM,OAAO,gBAAgB,OAC9D,SAAS,KAAK,EAAE,gBAAgB,eAAe,IAAI,WAAW,UAAU,CAAC,CAAC,CAC7E;AACD,UACI,SAAS,MACJ,EAAE,gBAAgB,eAAe,IAAI,WAAW,UAAU,CAAC,KAAK,6BACpE,IAAI,SAAS;;AAGtB,QAAA,SAAe;AACf,QAAA,OAAa,SAASM,sBAAAA,gBAAgB,GAAG,UAAU,MAAA,kBAAwB;AAC3E,OAAK,OAAO,MAAA,OAAa;AACzB,OAAK,OAAO,MAAA,OAAa;AACzB,OAAK,MAAM,MAAA,OAAa;;CAe5B,IAAI,YAA8B;AAC9B,MAAI,CAAC,MAAA,aAAmB,MAAA,gBACpB,KAAI;AACA,SAAA,YAAkB,IAAIE,gBAAAA,UAAU,MAAA,gBAAsB,UAAU;WAC3D,GAAG;AACR,SAAM,IAAIC,4BAAAA,qBAAsB,aAAa,SAAS,GAAG,WAAY,iBAAiB,EAAE;;AAGhG,SAAO,MAAA,aAAmB;;CAG9B,IAAI,YAAqB;AACrB,SAAO,MAAA,OAAa;;CAGxB,IAAI,aAAsB;AACtB,SAAO,MAAA;;CAGX,IAAI,aAA+B;AAC/B,SAAO,MAAA;;;CAIX,MAAM,8CAA6D;AAC/D,SAAO,MAAM,KAAK,aAAa;;CAGnC,MAAM,cAA6B;AAC/B,QAAA,QAAc,KAAK;;CAGvB,MAAM,UAAyB;AAC3B,QAAA,SAAe;;CAGnB,OAAA,QAAe,cAAuB,OAAsB;AACxD,MAAI,KAAK,cAAc,KAAK,UACxB;AAEJ,SAAO,MAAM,MAAA,aAAmB,YAAY;AACxC,OAAI,MAAA,eAAqBT,4BAAAA,iBAAiB,aAAa,MAAA,eAAqBA,4BAAAA,iBAAiB,SACzF,OAAM,IAAIc,4BAAAA,qBAAqB;AAEnC,SAAA,aAAmB;AACnB,OAAI;AACA,UAAM,MAAA,OAAa,SAASC,sBAAAA,iBAAiB,QAAQ,EAAE,QAAQ,aAAa,CAAC;YACxE,GAAG;AACR,UAAM,IAAIC,4BAAAA,sBAAuB,aAAa,SAAS,EAAE,WAAY,iBAAiB,EAAE;aAClF;AACN,UAAA,aAAmB;;IAEzB;;;CAIN,MAAM,qBAAqB,eAA6D;AACpF,MAAI;GACA,MAAM,4BAA4B,MAAM,MAAA,OAAa;AACrD,OAAI,2BAA2B;AAC3B,UAAM,MAAA,OAAa,SAASD,sBAAAA,iBAAiB,QAAQ,EAAE,QAAQ,MAAM,CAAC;AACtE,WAAO;;AAGX,OAAI,cACA,OAAM,MAAA,OAAa,SAASE,iCAAAA,cAAc,OAAO,cAAc;OAC5D,OAAM,MAAA,OAAa,SAASF,sBAAAA,iBAAiB,SAAS;AAE7D,UAD4B,MAAM,MAAM,MAAA,OAAa;WAEhD,GAAG;AACR,SAAM,IAAIC,4BAAAA,sBAAuB,aAAa,SAAS,EAAE,WAAY,iBAAiB,EAAE;;;CAIhG,MAAM,aAA4B;AAE9B,SAAO,MAAM,MAAA,aAAmB,YAAY;AACxC,SAAA,aAAmB;AACnB,SAAA,YAAkB,KAAA;AAClB,SAAA,kBAAwB,KAAA;AACxB,SAAM,MAAA,OAAa,SAASE,sBAAAA,oBAAoB,YAAY;AAC5D,QAAK,KAAK,aAAa;IACzB;;CAGN,MAAM,OAAO,OAAwD;AACjE,SAAO,MAAA,aAAmB,YAAY;AAClC,OAAI,MAAA,eAAqBlB,4BAAAA,iBAAiB,aAAa,MAAA,eAAqBA,4BAAAA,iBAAiB,SACzF,OAAM,IAAIc,4BAAAA,qBAAqB;AAEnC,SAAA,aAAmB;AACnB,OAAI;IACA,MAAM,UAAU,MAAM,MAAA,OAAa,SAASG,iCAAAA,cAAc,OAAO;KAC7D,GAAG;KACH,QAAQ,OAAO,UAAU,OAAO,SAAS;KAC5C,CAAC;AACF,QAAI,QAAQ,SAAS,EACjB,QAAO,QAAQ;QAEf,OAAM,IAAI,MAAM,uDAAuD;YAEtE,GAAG;AACR,UAAM,IAAID,4BAAAA,sBAAuB,aAAa,SAAS,EAAE,WAAY,iBAAiB,EAAE;aAClF;AACN,UAAA,aAAmB;;IAEzB;;CAGN,MAAM,YAAY,SAA0C;AACxD,SAAO,MAAM,MAAA,aAAmB,YAAY;GACxC,MAAM,UAAU,MAAA,oBAA0B;AAC1C,OAAI;AAKA,YAJgB,MAAM,MAAA,OAAa,SAASI,iCAAAA,mBAAmB,YAAY;KACvE;KACS;KACZ,CAAC,EACa,GAAG;YACb,OAAY;AACjB,UAAM,IAAIC,4BAAAA,uBAAuB,OAAO,SAAS,MAAM;;IAE7D;;CAGN,MAAM,gBACF,aACA,YACA,SAC6B;AAC7B,SAAO,MAAM,MAAA,aAAmB,YAAY;GACxC,MAAM,UAAU,MAAA,oBAA0B;AAC1C,OAAI;IACA,SAAS,sBAAsB;KAC3B,IAAI;AACJ,aAAQ,WAAW,YAAnB;MACI,KAAK;MACL,KAAK;MACL,KAAK;AACD,0BAAmB,WAAW;AAC9B;MACJ,QACI,oBAAmB;;KAE3B,IAAI;AACJ,aAAQ,SAAS,qBAAjB;MACI,KAAK;MACL,KAAK;MACL,KAAK;AACD,mCAA4B,QAAQ;AACpC;MACJ,KAAK,KAAA;AACD,mCAA4B;AAC5B;MACJ,QACI,6BAA4B;;AAUpC,aAPI,8BAA8B,cACxB,IACA,8BAA8B,cAC5B,IACA,MAER,qBAAqB,cAAc,IAAI,qBAAqB,cAAc,IAAI,KAE5E,4BACA;;AAEV,QAAIC,iCAAAA,gCAAgC,MAAA,OAAa,UAAU;KACvD,MAAM,QAAQ,wBAAwB,MAAA,OAAa,qBAAsB,MAAM;KAC/E,MAAM,CAAC,cACH,MAAM,MAAA,OAAa,SAASA,iCAAAA,8BAA8B,uBAAuB;MAC7E;MACA,aAAa,YAAY,WAAW;MAC7B;MACP,SAAS,UACH;OACI,eAAe,QAAQ;OACvB,YAAY,QAAQ;OACvB,GACD,KAAA;MACT,CAAC,EACJ,KAAK,WAAW;AACd,aAAO,eAAe,OAAO,UAAU;OACzC;AAEF,YAAO;WACJ;KACH,MAAM,CAAC,qBAAqB,MAAM,MAAA,wBAA8B,CAAC,YAAY,CAAC;AAC9E,SAAI,uBAAuB,kBAAkB,CACzC,QAAO,MAAM,WAAW,gBAAgB,kBAAkB;UACvD;MACH,MAAM,wBAAwB,kBAAkB,WAAW;AAC3D,aAAO,MAAM,WAAW,mBAAmB,uBAAuB;OAC9D,GAAG;OACH,qBAAqB,qBAAqB;OAC7C,CAAC;;;YAGL,OAAY;AACjB,UAAM,IAAIE,4BAAAA,2BAA2B,OAAO,SAAS,MAAM;;IAEjE;;CAGN,MAAM,gBAAoE,aAA4B;AAClG,SAAO,MAAM,MAAA,aAAmB,YAAY;GACxC,MAAM,CAAC,qBAAqB,MAAM,MAAA,wBAA8B,CAAC,YAAY,CAAC;AAC9E,UAAO;IACT;;CAGN,MAAM,oBAAwE,cAAiC;AAC3G,SAAO,MAAM,MAAA,aAAmB,YAAY;AAExC,UAD2B,MAAM,MAAA,wBAA8B,aAAa;IAE9E;;CAGN,4BAAkC;AAC9B,MAAI,MAAA,eAAqBxB,4BAAAA,iBAAiB,UACtC,MAAK,KAAK,oBAAqB,MAAA,aAAmBA,4BAAAA,iBAAiB,UAAW;;CAItF,sBAAsB;AAClB,MAAI,CAAC,MAAA,OAAa,gBAAgB,CAAC,MAAA,gBAAuB,OAAM,IAAIyB,4BAAAA,yBAAyB;AAC7F,SAAO,MAAA;;CAGX,OAAA,wBACI,cACY;EACZ,MAAM,UAAU,MAAA,oBAA0B;AAC1C,MAAI;AACA,OAAIC,iCAAAA,yBAAyB,MAAA,OAAa,SACtC,QAAO,MAAA,OAAa,SAASA,iCAAAA,uBAAuB,gBAChD,GAAG,aAAa,KAAK,UAAU;AAC3B,WAAO;KAAE;KAAS,aAAa,MAAM,WAAW;KAAE;KACpD,CACL,CAAC,MAAM,YAAY;AAChB,WAAO,QAAQ,KAAK,WAAwC;KACxD,MAAM,YAAY,OAAO;KAEzB,MAAM,gBADgB,UAAU,KACM,4BAA4B;AAIlE,SAHgBC,gBAAAA,iBAAiB,0BAC7B,UAAU,MAAM,eAAe,UAAU,OAAO,CACnD,KACe,SACZ,QAAOC,gBAAAA,YAAY,KAAK,UAAU;SAElC,QAAOC,gBAAAA,qBAAqB,YAAY,UAAU;MAExD;KACJ;OAEF,OAAM,IAAI,MAAM,yDAAyD;WAExE,OAAY;AACjB,SAAM,IAAIC,4BAAAA,2BAA2B,OAAO,SAAS,MAAM;;;CAInE,OAAA,aAA6B,UAAkC;AAC3D,MAAI;AACA,UAAO,MAAM,UAAU;WAClB,GAAQ;AACb,QAAK,KAAK,SAAS,EAAE;AACrB,SAAM;;;;AAKlB,IAAa,iCAAb,cAAoD,8BAA8B;CAoB9E,YAAY,QAOT;EACC,MAAM,QAAQ,wBAAwB,OAAO,SAAS,OAAO,QAAQ;AACrE,QACI,IAAIC,sCAAAA,qCAAqC;GACrC,aAAa,OAAO;GACpB,oBAAoB;IAChB,KAAK,OAAO,yBAAyB;IACrC,KAAK,YAAY;AACb,YAAQ,MAAM,OAAO,yBAAyB,KAAK;;IAEvD,OAAO,OAAO,yBAAyB;IAC1C;GACD,QAAQ,CAAC,MAAM;GACf,gBAAA,GAAA,sCAAA,6BAA2C;GAC3C,kBAAkB,YAAY;AAC1B,WAAO,iBAAiB,KAAK;;GAEpC,CAAC,EACF;GACI,iBAAiB,OAAO;GACjB;GACV,CACJ;;;AAIT,IAAa,kCAAb,cAAqD,8BAA8B;CAC/E,YAAY,QAOT;EACC,MAAM,QAAQ,wBAAwB,OAAO,MAAM;AACnD,QACI,IAAIC,sCAAAA,sCAAsC;GACtC,aAAa,OAAO;GACpB,oBAAoB;IAChB,KAAK,OAAO,yBAAyB;IACrC,KAAK,YAAY;AACb,YAAQ,MAAM,OAAO,yBAAyB,KAAK;;IAEvD,OAAO,OAAO,yBAAyB;IAC1C;GACD,QAAQ,CAAC,MAAM;GACf,gBAAA,GAAA,sCAAA,6BAA2C;GAC3C,qBAAqB,OAAO;GAC5B,kBAAkB,YAAY;AAC1B,WAAO,iBAAiB,KAAK;;GAEpC,CAAC,EACF;GACI,iBAAiB,OAAO;GACjB;GACV,CACJ;;;AAIT,IAAa,4BAAb,cAA+C,+BAA+B;;;AC3gB9E,SAAwB,+BAAgD;AACpE,QAAO,EACH,MAAM,OAAO,WAAW;AACpB,SAAO,UAAU;IAExB;;;;ACJL,SAAwB,wCAAkE;AACtF,SAAA,GAAA,sCAAA,kCAA4C;;;;ACDhD,eAAe,6BAA6B,qBAAgD;AACxF,SAAA,GAAA,sCAAA,yCAA+C;;AAGnD,SAAwB,qCAEL;AACf,QAAO"}
|
|
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
|
|
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
|
-
|
|
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 }) =>
|
|
58
|
-
return accounts.find(({ publicKey }) =>
|
|
56
|
+
const selectedBase64EncodedAddress = await config.addressSelector.select(accounts.map(({ publicKey }) => (0, _solana_mobile_mobile_wallet_adapter_protocol_encoding.base64FromUint8Array)(new Uint8Array(publicKey))));
|
|
57
|
+
return accounts.find(({ publicKey }) => (0, _solana_mobile_mobile_wallet_adapter_protocol_encoding.base64FromUint8Array)(new Uint8Array(publicKey)) === selectedBase64EncodedAddress) ?? accounts[0];
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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(
|
|
329
|
+
async function defaultWalletNotFoundHandler(_mobileWalletAdapter) {
|
|
331
330
|
return (0, _solana_mobile_wallet_standard_mobile.defaultErrorModalWalletNotFoundHandler)();
|
|
332
331
|
}
|
|
333
332
|
function createDefaultWalletNotFoundHandler() {
|
package/lib/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["WalletStandardWalletName","WalletStandardRemoteWalletName","BaseSignInMessageSignerWalletAdapter","WalletReadyState","#declareWalletAsInstalled","#accountSelector","#selectedAccount","#publicKey","#wallet","StandardEvents","#handleChangeEvent","PublicKey","WalletPublicKeyError","#connecting","#readyState","#connect","#runWithGuard","WalletNotReadyError","StandardConnect","WalletConnectionError","SolanaSignIn","StandardDisconnect","#assertIsAuthorized","SolanaSignMessage","WalletSignMessageError","SolanaSignAndSendTransaction","#performSignTransactions","WalletSendTransactionError","WalletNotConnectedError","SolanaSignTransaction","VersionedMessage","Transaction","VersionedTransaction","WalletSignTransactionError","LocalSolanaMobileWalletAdapterWallet","RemoteSolanaMobileWalletAdapterWallet"],"sources":["../../src/base64Utils.ts","../../src/getIsSupported.ts","../../src/adapter.ts","../../src/createDefaultAddressSelector.ts","../../src/createDefaultAuthorizationResultCache.ts","../../src/createDefaultWalletNotFoundHandler.ts"],"sourcesContent":["export function fromUint8Array(byteArray: Uint8Array): string {\n return window.btoa(String.fromCharCode.call(null, ...byteArray));\n}\n\nexport function toUint8Array(base64EncodedByteArray: string): Uint8Array {\n return new Uint8Array(\n window\n .atob(base64EncodedByteArray)\n .split('')\n .map((c) => c.charCodeAt(0)),\n );\n}\n","export default function getIsSupported() {\n return (\n typeof window !== 'undefined' &&\n window.isSecureContext &&\n typeof document !== 'undefined' &&\n /android/i.test(navigator.userAgent)\n );\n}\n","import {\n BaseSignInMessageSignerWalletAdapter,\n WalletConnectionError,\n WalletName,\n WalletNotConnectedError,\n WalletNotReadyError,\n WalletPublicKeyError,\n WalletReadyState,\n WalletSendTransactionError,\n WalletSignMessageError,\n WalletSignTransactionError,\n} from '@solana/wallet-adapter-base';\nimport {\n Connection,\n PublicKey,\n SendOptions,\n Transaction as LegacyTransaction,\n TransactionSignature,\n TransactionVersion,\n VersionedTransaction,\n VersionedMessage,\n Transaction,\n} from '@solana/web3.js';\nimport {\n AppIdentity,\n AuthorizationResult,\n Base64EncodedAddress,\n Finality,\n Chain,\n Cluster,\n SignInPayload,\n} from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport {\n SolanaSignAndSendTransaction,\n SolanaSignIn,\n SolanaSignInInput,\n SolanaSignInOutput,\n SolanaSignMessage,\n SolanaSignTransaction,\n SolanaSignTransactionOutput,\n} from '@solana/wallet-standard-features';\nimport {\n IdentifierString,\n StandardConnect,\n StandardDisconnect,\n StandardEvents,\n StandardEventsChangeProperties,\n WalletAccount,\n} from '@wallet-standard/core';\nimport {\n Authorization,\n createDefaultChainSelector,\n LocalSolanaMobileWalletAdapterWallet,\n RemoteSolanaMobileWalletAdapterWallet,\n SolanaMobileWalletAdapterWalletName as WalletStandardWalletName,\n SolanaMobileWalletAdapterRemoteWalletName as WalletStandardRemoteWalletName,\n} from '@solana-mobile/wallet-standard-mobile';\nimport { fromUint8Array } from './base64Utils.js';\nimport getIsSupported from './getIsSupported.js';\n\nexport interface AuthorizationResultCache {\n clear(): Promise<void>;\n get(): Promise<AuthorizationResult | Authorization | undefined>;\n set(authorizationResult: AuthorizationResult | Authorization): Promise<void>;\n}\n\nexport interface AddressSelector {\n select(addresses: Base64EncodedAddress[]): Promise<Base64EncodedAddress>;\n}\n\nexport const SolanaMobileWalletAdapterWalletName = WalletStandardWalletName as WalletName;\nexport const SolanaMobileWalletAdapterRemoteWalletName = WalletStandardRemoteWalletName as WalletName;\n\nconst SIGNATURE_LENGTH_IN_BYTES = 64;\n\nfunction isVersionedTransaction(\n transaction: LegacyTransaction | VersionedTransaction,\n): transaction is VersionedTransaction {\n return 'version' in transaction;\n}\n\nfunction chainOrClusterToChainId(chain: Cluster | Chain): IdentifierString {\n switch (chain) {\n case 'mainnet-beta':\n return 'solana:mainnet';\n case 'testnet':\n return 'solana:testnet';\n case 'devnet':\n return 'solana:devnet';\n default:\n return chain;\n }\n}\n\nabstract class BaseSolanaMobileWalletAdapter extends BaseSignInMessageSignerWalletAdapter {\n readonly supportedTransactionVersions: Set<TransactionVersion> = new Set(\n // FIXME(#244): We can't actually know what versions are supported until we know which wallet we're talking to.\n ['legacy', 0],\n );\n name;\n icon;\n url;\n #wallet: LocalSolanaMobileWalletAdapterWallet | RemoteSolanaMobileWalletAdapterWallet;\n #connecting = false;\n #readyState: WalletReadyState = getIsSupported() ? WalletReadyState.Loadable : WalletReadyState.Unsupported;\n #accountSelector: (accounts: readonly WalletAccount[]) => Promise<WalletAccount>;\n #selectedAccount: WalletAccount | undefined;\n #publicKey: PublicKey | undefined;\n\n #handleChangeEvent = async (properties: StandardEventsChangeProperties) => {\n if (properties.accounts && properties.accounts.length > 0) {\n this.#declareWalletAsInstalled();\n const nextSelectedAccount = await this.#accountSelector(properties.accounts);\n if (nextSelectedAccount !== this.#selectedAccount) {\n this.#selectedAccount = nextSelectedAccount;\n this.#publicKey = undefined;\n this.emit(\n 'connect',\n // Having just set `this.#selectedAccount`, `this.publicKey` is definitely non-null\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.publicKey!,\n );\n }\n }\n };\n\n protected constructor(\n wallet: LocalSolanaMobileWalletAdapterWallet | RemoteSolanaMobileWalletAdapterWallet,\n config: {\n addressSelector: AddressSelector;\n chain: Chain;\n },\n ) {\n super();\n // this.#chain = chainOrClusterToChainId(config.chain);\n this.#accountSelector = async (accounts: readonly WalletAccount[]) => {\n const selectedBase64EncodedAddress = await config.addressSelector.select(\n accounts.map(({ publicKey }) => fromUint8Array(new Uint8Array(publicKey))),\n );\n return (\n accounts.find(\n ({ publicKey }) => fromUint8Array(new Uint8Array(publicKey)) === selectedBase64EncodedAddress,\n ) ?? accounts[0]\n );\n };\n this.#wallet = wallet;\n this.#wallet.features[StandardEvents].on('change', this.#handleChangeEvent);\n this.name = this.#wallet.name as WalletName;\n this.icon = this.#wallet.icon;\n this.url = this.#wallet.url;\n // TODO: evaluate if this logic should be kept - it seems to create a nasty bug where\n // the wallet tries to auto connect on page load and gets blocked by the popup blocker\n // if (this.#readyState !== WalletReadyState.Unsupported) {\n // config.authorizationResultCache.get().then((authorizationResult) => {\n // if (authorizationResult) {\n // // Having a prior authorization result is, right now, the best\n // // indication that a mobile wallet is installed. There is no API\n // // we can use to test for whether the association URI is supported.\n // this.#declareWalletAsInstalled();\n // }\n // });\n // }\n }\n\n get publicKey(): PublicKey | null {\n if (!this.#publicKey && this.#selectedAccount) {\n try {\n this.#publicKey = new PublicKey(this.#selectedAccount.publicKey);\n } catch (e) {\n throw new WalletPublicKeyError((e instanceof Error && e?.message) || 'Unknown error', e);\n }\n }\n return this.#publicKey ?? null;\n }\n\n get connected(): boolean {\n return this.#wallet.connected;\n }\n\n get connecting(): boolean {\n return this.#connecting;\n }\n\n get readyState(): WalletReadyState {\n return this.#readyState;\n }\n\n /** @deprecated Use `autoConnect()` instead. */\n async autoConnect_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(): Promise<void> {\n return await this.autoConnect();\n }\n\n async autoConnect(): Promise<void> {\n this.#connect(true);\n }\n\n async connect(): Promise<void> {\n this.#connect();\n }\n\n async #connect(autoConnect: boolean = false): Promise<void> {\n if (this.connecting || this.connected) {\n return;\n }\n return await this.#runWithGuard(async () => {\n if (this.#readyState !== WalletReadyState.Installed && this.#readyState !== WalletReadyState.Loadable) {\n throw new WalletNotReadyError();\n }\n this.#connecting = true;\n try {\n await this.#wallet.features[StandardConnect].connect({ silent: autoConnect });\n } catch (e) {\n throw new WalletConnectionError((e instanceof Error && e.message) || 'Unknown error', e);\n } finally {\n this.#connecting = false;\n }\n });\n }\n\n /** @deprecated Use `connect()` or `autoConnect()` instead. */\n async performAuthorization(signInPayload?: SignInPayload): Promise<AuthorizationResult> {\n try {\n const cachedAuthorizationResult = await this.#wallet.cachedAuthorizationResult;\n if (cachedAuthorizationResult) {\n await this.#wallet.features[StandardConnect].connect({ silent: true });\n return cachedAuthorizationResult;\n }\n\n if (signInPayload) {\n await this.#wallet.features[SolanaSignIn].signIn(signInPayload);\n } else await this.#wallet.features[StandardConnect].connect();\n const authorizationResult = await await this.#wallet.cachedAuthorizationResult;\n return authorizationResult!;\n } catch (e) {\n throw new WalletConnectionError((e instanceof Error && e.message) || 'Unknown error', e);\n }\n }\n\n async disconnect(): Promise<void> {\n // return await this.#runWithGuard(this.#wallet.features[StandardDisconnect].disconnect);\n return await this.#runWithGuard(async () => {\n this.#connecting = false;\n this.#publicKey = undefined;\n this.#selectedAccount = undefined;\n await this.#wallet.features[StandardDisconnect].disconnect();\n this.emit('disconnect');\n });\n }\n\n async signIn(input?: SolanaSignInInput): Promise<SolanaSignInOutput> {\n return this.#runWithGuard(async () => {\n if (this.#readyState !== WalletReadyState.Installed && this.#readyState !== WalletReadyState.Loadable) {\n throw new WalletNotReadyError();\n }\n this.#connecting = true;\n try {\n const outputs = await this.#wallet.features[SolanaSignIn].signIn({\n ...input,\n domain: input?.domain ?? window.location.host,\n });\n if (outputs.length > 0) {\n return outputs[0];\n } else {\n throw new Error('Sign in failed, no sign in result returned by wallet');\n }\n } catch (e) {\n throw new WalletConnectionError((e instanceof Error && e.message) || 'Unknown error', e);\n } finally {\n this.#connecting = false;\n }\n });\n }\n\n async signMessage(message: Uint8Array): Promise<Uint8Array> {\n return await this.#runWithGuard(async () => {\n const account = this.#assertIsAuthorized();\n try {\n const outputs = await this.#wallet.features[SolanaSignMessage].signMessage({\n account,\n message: message,\n });\n return outputs[0].signature;\n } catch (error: any) {\n throw new WalletSignMessageError(error?.message, error);\n }\n });\n }\n\n async sendTransaction<T extends LegacyTransaction | VersionedTransaction>(\n transaction: T,\n connection: Connection,\n options?: SendOptions,\n ): Promise<TransactionSignature> {\n return await this.#runWithGuard(async () => {\n const account = this.#assertIsAuthorized();\n try {\n function getTargetCommitment() {\n let targetCommitment: Finality;\n switch (connection.commitment) {\n case 'confirmed':\n case 'finalized':\n case 'processed':\n targetCommitment = connection.commitment;\n break;\n default:\n targetCommitment = 'finalized';\n }\n let targetPreflightCommitment: Finality;\n switch (options?.preflightCommitment) {\n case 'confirmed':\n case 'finalized':\n case 'processed':\n targetPreflightCommitment = options.preflightCommitment;\n break;\n case undefined:\n targetPreflightCommitment = targetCommitment;\n break;\n default:\n targetPreflightCommitment = 'finalized';\n }\n const preflightCommitmentScore =\n targetPreflightCommitment === 'finalized'\n ? 2\n : targetPreflightCommitment === 'confirmed'\n ? 1\n : 0;\n const targetCommitmentScore =\n targetCommitment === 'finalized' ? 2 : targetCommitment === 'confirmed' ? 1 : 0;\n return preflightCommitmentScore < targetCommitmentScore\n ? targetPreflightCommitment\n : targetCommitment;\n }\n if (SolanaSignAndSendTransaction in this.#wallet.features) {\n const chain = chainOrClusterToChainId(this.#wallet.currentAuthorization!.chain);\n const [signature] = (\n await this.#wallet.features[SolanaSignAndSendTransaction].signAndSendTransaction({\n account,\n transaction: transaction.serialize(),\n chain: chain,\n options: options\n ? {\n skipPreflight: options.skipPreflight,\n maxRetries: options.maxRetries,\n }\n : undefined,\n })\n ).map((output) => {\n return fromUint8Array(output.signature);\n });\n\n return signature;\n } else {\n const [signedTransaction] = await this.#performSignTransactions([transaction]);\n if (isVersionedTransaction(signedTransaction)) {\n return await connection.sendTransaction(signedTransaction);\n } else {\n const serializedTransaction = signedTransaction.serialize();\n return await connection.sendRawTransaction(serializedTransaction, {\n ...options,\n preflightCommitment: getTargetCommitment(),\n });\n }\n }\n } catch (error: any) {\n throw new WalletSendTransactionError(error?.message, error);\n }\n });\n }\n\n async signTransaction<T extends LegacyTransaction | VersionedTransaction>(transaction: T): Promise<T> {\n return await this.#runWithGuard(async () => {\n const [signedTransaction] = await this.#performSignTransactions([transaction]);\n return signedTransaction;\n });\n }\n\n async signAllTransactions<T extends LegacyTransaction | VersionedTransaction>(transactions: T[]): Promise<T[]> {\n return await this.#runWithGuard(async () => {\n const signedTransactions = await this.#performSignTransactions(transactions);\n return signedTransactions;\n });\n }\n\n #declareWalletAsInstalled(): void {\n if (this.#readyState !== WalletReadyState.Installed) {\n this.emit('readyStateChange', (this.#readyState = WalletReadyState.Installed));\n }\n }\n\n #assertIsAuthorized() {\n if (!this.#wallet.isAuthorized || !this.#selectedAccount) throw new WalletNotConnectedError();\n return this.#selectedAccount;\n }\n\n async #performSignTransactions<T extends LegacyTransaction | VersionedTransaction>(\n transactions: T[],\n ): Promise<T[]> {\n const account = this.#assertIsAuthorized();\n try {\n if (SolanaSignTransaction in this.#wallet.features) {\n return this.#wallet.features[SolanaSignTransaction].signTransaction(\n ...transactions.map((value) => {\n return { account, transaction: value.serialize() };\n }),\n ).then((outputs) => {\n return outputs.map((output: SolanaSignTransactionOutput) => {\n const byteArray = output.signedTransaction;\n const numSignatures = byteArray[0];\n const messageOffset = numSignatures * SIGNATURE_LENGTH_IN_BYTES + 1;\n const version = VersionedMessage.deserializeMessageVersion(\n byteArray.slice(messageOffset, byteArray.length),\n );\n if (version === 'legacy') {\n return Transaction.from(byteArray) as T;\n } else {\n return VersionedTransaction.deserialize(byteArray) as T;\n }\n });\n });\n } else {\n throw new Error('Connected wallet does not support signing transactions');\n }\n } catch (error: any) {\n throw new WalletSignTransactionError(error?.message, error);\n }\n }\n\n async #runWithGuard<TReturn>(callback: () => Promise<TReturn>) {\n try {\n return await callback();\n } catch (e: any) {\n this.emit('error', e);\n throw e;\n }\n }\n}\n\nexport class LocalSolanaMobileWalletAdapter extends BaseSolanaMobileWalletAdapter {\n /**\n * @deprecated @param cluster config paramter is deprecated, use @param chain instead\n */\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n cluster: Cluster;\n onWalletNotFound: (mobileWalletAdapter: LocalSolanaMobileWalletAdapter) => Promise<void>;\n });\n\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n chain: Chain;\n onWalletNotFound: (mobileWalletAdapter: LocalSolanaMobileWalletAdapter) => Promise<void>;\n });\n\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n chain: Chain;\n cluster: Cluster;\n onWalletNotFound: (mobileWalletAdapter: LocalSolanaMobileWalletAdapter) => Promise<void>;\n }) {\n const chain = chainOrClusterToChainId(config.chain ?? config.cluster);\n super(\n new LocalSolanaMobileWalletAdapterWallet({\n appIdentity: config.appIdentity,\n authorizationCache: {\n set: config.authorizationResultCache.set,\n get: async () => {\n return (await config.authorizationResultCache.get()) as Authorization | undefined;\n },\n clear: config.authorizationResultCache.clear,\n },\n chains: [chain],\n chainSelector: createDefaultChainSelector(),\n onWalletNotFound: async () => {\n config.onWalletNotFound(this);\n },\n }),\n {\n addressSelector: config.addressSelector,\n chain: chain,\n },\n );\n }\n}\n\nexport class RemoteSolanaMobileWalletAdapter extends BaseSolanaMobileWalletAdapter {\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n chain: Chain;\n remoteHostAuthority: string;\n onWalletNotFound: (mobileWalletAdapter: RemoteSolanaMobileWalletAdapter) => Promise<void>;\n }) {\n const chain = chainOrClusterToChainId(config.chain);\n super(\n new RemoteSolanaMobileWalletAdapterWallet({\n appIdentity: config.appIdentity,\n authorizationCache: {\n set: config.authorizationResultCache.set,\n get: async () => {\n return (await config.authorizationResultCache.get()) as Authorization | undefined;\n },\n clear: config.authorizationResultCache.clear,\n },\n chains: [chain],\n chainSelector: createDefaultChainSelector(),\n remoteHostAuthority: config.remoteHostAuthority,\n onWalletNotFound: async () => {\n config.onWalletNotFound(this);\n },\n }),\n {\n addressSelector: config.addressSelector,\n chain: chain,\n },\n );\n }\n}\n\nexport class SolanaMobileWalletAdapter extends LocalSolanaMobileWalletAdapter {}\n","import { AddressSelector } from './adapter.js';\n\nexport default function createDefaultAddressSelector(): AddressSelector {\n return {\n async select(addresses) {\n return addresses[0];\n },\n };\n}\n","import { AuthorizationResultCache } from './adapter.js';\nimport { createDefaultAuthorizationCache as baseCreateDefaultAuthorizationCache } from '@solana-mobile/wallet-standard-mobile';\n\nexport default function createDefaultAuthorizationResultCache(): AuthorizationResultCache {\n return baseCreateDefaultAuthorizationCache();\n}\n","import { SolanaMobileWalletAdapter } from './adapter.js';\nimport { defaultErrorModalWalletNotFoundHandler } from '@solana-mobile/wallet-standard-mobile';\n\nasync function defaultWalletNotFoundHandler(mobileWalletAdapter: SolanaMobileWalletAdapter) {\n return defaultErrorModalWalletNotFoundHandler();\n}\n\nexport default function createDefaultWalletNotFoundHandler(): (\n mobileWalletAdapter: SolanaMobileWalletAdapter,\n) => Promise<void> {\n return defaultWalletNotFoundHandler;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["WalletStandardWalletName","WalletStandardRemoteWalletName","BaseSignInMessageSignerWalletAdapter","WalletReadyState","#declareWalletAsInstalled","#accountSelector","#selectedAccount","#publicKey","#wallet","StandardEvents","#handleChangeEvent","PublicKey","WalletPublicKeyError","#connecting","#readyState","#connect","#runWithGuard","WalletNotReadyError","StandardConnect","WalletConnectionError","SolanaSignIn","StandardDisconnect","#assertIsAuthorized","SolanaSignMessage","WalletSignMessageError","SolanaSignAndSendTransaction","#performSignTransactions","WalletSendTransactionError","WalletNotConnectedError","SolanaSignTransaction","VersionedMessage","Transaction","VersionedTransaction","WalletSignTransactionError","WalletError","LocalSolanaMobileWalletAdapterWallet","RemoteSolanaMobileWalletAdapterWallet"],"sources":["../../src/getIsSupported.ts","../../src/adapter.ts","../../src/createDefaultAddressSelector.ts","../../src/createDefaultAuthorizationResultCache.ts","../../src/createDefaultWalletNotFoundHandler.ts"],"sourcesContent":["export function getIsSupported() {\n return (\n typeof window !== 'undefined' &&\n window.isSecureContext &&\n typeof document !== 'undefined' &&\n /android/i.test(navigator.userAgent)\n );\n}\n\n/**\n * @deprecated Use {@link getIsSupported} instead.\n */\nexport default getIsSupported;\n","import {\n BaseSignInMessageSignerWalletAdapter,\n WalletConnectionError,\n WalletError,\n WalletName,\n WalletNotConnectedError,\n WalletNotReadyError,\n WalletPublicKeyError,\n WalletReadyState,\n WalletSendTransactionError,\n WalletSignMessageError,\n WalletSignTransactionError,\n} from '@solana/wallet-adapter-base';\nimport {\n SolanaSignAndSendTransaction,\n SolanaSignIn,\n SolanaSignInInput,\n SolanaSignInOutput,\n SolanaSignMessage,\n SolanaSignTransaction,\n SolanaSignTransactionOutput,\n} from '@solana/wallet-standard-features';\nimport {\n Connection,\n PublicKey,\n SendOptions,\n Transaction as LegacyTransaction,\n Transaction,\n TransactionSignature,\n TransactionVersion,\n VersionedMessage,\n VersionedTransaction,\n} from '@solana/web3.js';\nimport {\n AppIdentity,\n AuthorizationResult,\n Base64EncodedAddress,\n Chain,\n Cluster,\n Finality,\n SignInPayload,\n} from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { base64FromUint8Array } from '@solana-mobile/mobile-wallet-adapter-protocol/encoding';\nimport {\n Authorization,\n createDefaultChainSelector,\n LocalSolanaMobileWalletAdapterWallet,\n RemoteSolanaMobileWalletAdapterWallet,\n SolanaMobileWalletAdapterRemoteWalletName as WalletStandardRemoteWalletName,\n SolanaMobileWalletAdapterWalletName as WalletStandardWalletName,\n} from '@solana-mobile/wallet-standard-mobile';\nimport {\n IdentifierString,\n StandardConnect,\n StandardDisconnect,\n StandardEvents,\n StandardEventsChangeProperties,\n WalletAccount,\n} from '@wallet-standard/core';\n\nimport { getIsSupported } from './getIsSupported.js';\n\nexport interface AuthorizationResultCache {\n clear(): Promise<void>;\n get(): Promise<AuthorizationResult | Authorization | undefined>;\n set(authorizationResult: AuthorizationResult | Authorization): Promise<void>;\n}\n\nexport interface AddressSelector {\n select(addresses: Base64EncodedAddress[]): Promise<Base64EncodedAddress>;\n}\n\nexport const SolanaMobileWalletAdapterWalletName = WalletStandardWalletName as WalletName;\nexport const SolanaMobileWalletAdapterRemoteWalletName = WalletStandardRemoteWalletName as WalletName;\n\nconst SIGNATURE_LENGTH_IN_BYTES = 64;\n\nfunction isVersionedTransaction(\n transaction: LegacyTransaction | VersionedTransaction,\n): transaction is VersionedTransaction {\n return 'version' in transaction;\n}\n\nfunction chainOrClusterToChainId(chain: Cluster | Chain): IdentifierString {\n switch (chain) {\n case 'mainnet-beta':\n return 'solana:mainnet';\n case 'testnet':\n return 'solana:testnet';\n case 'devnet':\n return 'solana:devnet';\n default:\n return chain;\n }\n}\n\nfunction getErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : 'Unknown error';\n}\n\nabstract class BaseSolanaMobileWalletAdapter extends BaseSignInMessageSignerWalletAdapter {\n readonly supportedTransactionVersions: Set<TransactionVersion> = new Set(\n // FIXME(#244): We can't actually know what versions are supported until we know which wallet we're talking to.\n ['legacy', 0],\n );\n name;\n icon;\n url;\n #wallet: LocalSolanaMobileWalletAdapterWallet | RemoteSolanaMobileWalletAdapterWallet;\n #connecting = false;\n #readyState: WalletReadyState = getIsSupported() ? WalletReadyState.Loadable : WalletReadyState.Unsupported;\n #accountSelector: (accounts: readonly WalletAccount[]) => Promise<WalletAccount>;\n #selectedAccount: WalletAccount | undefined;\n #publicKey: PublicKey | undefined;\n\n #handleChangeEvent = async (properties: StandardEventsChangeProperties) => {\n if (properties.accounts && properties.accounts.length > 0) {\n this.#declareWalletAsInstalled();\n const nextSelectedAccount = await this.#accountSelector(properties.accounts);\n if (nextSelectedAccount !== this.#selectedAccount) {\n this.#selectedAccount = nextSelectedAccount;\n this.#publicKey = undefined;\n this.emit(\n 'connect',\n // Having just set `this.#selectedAccount`, `this.publicKey` is definitely non-null\n\n this.publicKey!,\n );\n }\n }\n };\n\n protected constructor(\n wallet: LocalSolanaMobileWalletAdapterWallet | RemoteSolanaMobileWalletAdapterWallet,\n config: {\n addressSelector: AddressSelector;\n chain: Chain;\n },\n ) {\n super();\n // this.#chain = chainOrClusterToChainId(config.chain);\n this.#accountSelector = async (accounts: readonly WalletAccount[]) => {\n const selectedBase64EncodedAddress = await config.addressSelector.select(\n accounts.map(({ publicKey }) => base64FromUint8Array(new Uint8Array(publicKey))),\n );\n return (\n accounts.find(\n ({ publicKey }) => base64FromUint8Array(new Uint8Array(publicKey)) === selectedBase64EncodedAddress,\n ) ?? accounts[0]\n );\n };\n this.#wallet = wallet;\n this.#wallet.features[StandardEvents].on('change', this.#handleChangeEvent);\n this.name = this.#wallet.name as WalletName;\n this.icon = this.#wallet.icon;\n this.url = this.#wallet.url;\n // TODO: evaluate if this logic should be kept - it seems to create a nasty bug where\n // the wallet tries to auto connect on page load and gets blocked by the popup blocker\n // if (this.#readyState !== WalletReadyState.Unsupported) {\n // config.authorizationResultCache.get().then((authorizationResult) => {\n // if (authorizationResult) {\n // // Having a prior authorization result is, right now, the best\n // // indication that a mobile wallet is installed. There is no API\n // // we can use to test for whether the association URI is supported.\n // this.#declareWalletAsInstalled();\n // }\n // });\n // }\n }\n\n get publicKey(): PublicKey | null {\n if (!this.#publicKey && this.#selectedAccount) {\n try {\n this.#publicKey = new PublicKey(this.#selectedAccount.publicKey);\n } catch (e) {\n throw new WalletPublicKeyError((e instanceof Error && e?.message) || 'Unknown error', e);\n }\n }\n return this.#publicKey ?? null;\n }\n\n get connected(): boolean {\n return this.#wallet.connected;\n }\n\n get connecting(): boolean {\n return this.#connecting;\n }\n\n get readyState(): WalletReadyState {\n return this.#readyState;\n }\n\n /** @deprecated Use `autoConnect()` instead. */\n async autoConnect_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(): Promise<void> {\n return await this.autoConnect();\n }\n\n async autoConnect(): Promise<void> {\n this.#connect(true);\n }\n\n async connect(): Promise<void> {\n this.#connect();\n }\n\n async #connect(autoConnect: boolean = false): Promise<void> {\n if (this.connecting || this.connected) {\n return;\n }\n return await this.#runWithGuard(async () => {\n if (this.#readyState !== WalletReadyState.Installed && this.#readyState !== WalletReadyState.Loadable) {\n throw new WalletNotReadyError();\n }\n this.#connecting = true;\n try {\n await this.#wallet.features[StandardConnect].connect({ silent: autoConnect });\n } catch (e) {\n throw new WalletConnectionError((e instanceof Error && e.message) || 'Unknown error', e);\n } finally {\n this.#connecting = false;\n }\n });\n }\n\n /** @deprecated Use `connect()` or `autoConnect()` instead. */\n async performAuthorization(signInPayload?: SignInPayload): Promise<AuthorizationResult> {\n try {\n const cachedAuthorizationResult = await this.#wallet.cachedAuthorizationResult;\n if (cachedAuthorizationResult) {\n await this.#wallet.features[StandardConnect].connect({ silent: true });\n return cachedAuthorizationResult;\n }\n\n if (signInPayload) {\n await this.#wallet.features[SolanaSignIn].signIn(signInPayload);\n } else await this.#wallet.features[StandardConnect].connect();\n const authorizationResult = await await this.#wallet.cachedAuthorizationResult;\n return authorizationResult!;\n } catch (e) {\n throw new WalletConnectionError((e instanceof Error && e.message) || 'Unknown error', e);\n }\n }\n\n async disconnect(): Promise<void> {\n // return await this.#runWithGuard(this.#wallet.features[StandardDisconnect].disconnect);\n return await this.#runWithGuard(async () => {\n this.#connecting = false;\n this.#publicKey = undefined;\n this.#selectedAccount = undefined;\n await this.#wallet.features[StandardDisconnect].disconnect();\n this.emit('disconnect');\n });\n }\n\n async signIn(input?: SolanaSignInInput): Promise<SolanaSignInOutput> {\n return this.#runWithGuard(async () => {\n if (this.#readyState !== WalletReadyState.Installed && this.#readyState !== WalletReadyState.Loadable) {\n throw new WalletNotReadyError();\n }\n this.#connecting = true;\n try {\n const outputs = await this.#wallet.features[SolanaSignIn].signIn({\n ...input,\n domain: input?.domain ?? window.location.host,\n });\n if (outputs.length > 0) {\n return outputs[0];\n } else {\n throw new Error('Sign in failed, no sign in result returned by wallet');\n }\n } catch (e) {\n throw new WalletConnectionError((e instanceof Error && e.message) || 'Unknown error', e);\n } finally {\n this.#connecting = false;\n }\n });\n }\n\n async signMessage(message: Uint8Array): Promise<Uint8Array> {\n return await this.#runWithGuard(async () => {\n const account = this.#assertIsAuthorized();\n try {\n const outputs = await this.#wallet.features[SolanaSignMessage].signMessage({\n account,\n message: message,\n });\n return outputs[0].signature;\n } catch (error: unknown) {\n throw new WalletSignMessageError(getErrorMessage(error), error);\n }\n });\n }\n\n async sendTransaction<T extends LegacyTransaction | VersionedTransaction>(\n transaction: T,\n connection: Connection,\n options?: SendOptions,\n ): Promise<TransactionSignature> {\n return await this.#runWithGuard(async () => {\n const account = this.#assertIsAuthorized();\n try {\n function getTargetCommitment() {\n let targetCommitment: Finality;\n switch (connection.commitment) {\n case 'confirmed':\n case 'finalized':\n case 'processed':\n targetCommitment = connection.commitment;\n break;\n default:\n targetCommitment = 'finalized';\n }\n let targetPreflightCommitment: Finality;\n switch (options?.preflightCommitment) {\n case 'confirmed':\n case 'finalized':\n case 'processed':\n targetPreflightCommitment = options.preflightCommitment;\n break;\n case undefined:\n targetPreflightCommitment = targetCommitment;\n break;\n default:\n targetPreflightCommitment = 'finalized';\n }\n const preflightCommitmentScore =\n targetPreflightCommitment === 'finalized'\n ? 2\n : targetPreflightCommitment === 'confirmed'\n ? 1\n : 0;\n const targetCommitmentScore =\n targetCommitment === 'finalized' ? 2 : targetCommitment === 'confirmed' ? 1 : 0;\n return preflightCommitmentScore < targetCommitmentScore\n ? targetPreflightCommitment\n : targetCommitment;\n }\n if (SolanaSignAndSendTransaction in this.#wallet.features) {\n const chain = chainOrClusterToChainId(this.#wallet.currentAuthorization!.chain);\n const [signature] = (\n await this.#wallet.features[SolanaSignAndSendTransaction].signAndSendTransaction({\n account,\n transaction: transaction.serialize(),\n chain: chain,\n options: options\n ? {\n skipPreflight: options.skipPreflight,\n maxRetries: options.maxRetries,\n }\n : undefined,\n })\n ).map((output) => {\n return base64FromUint8Array(output.signature);\n });\n\n return signature;\n } else {\n const [signedTransaction] = await this.#performSignTransactions([transaction]);\n if (isVersionedTransaction(signedTransaction)) {\n return await connection.sendTransaction(signedTransaction);\n } else {\n const serializedTransaction = signedTransaction.serialize();\n return await connection.sendRawTransaction(serializedTransaction, {\n ...options,\n preflightCommitment: getTargetCommitment(),\n });\n }\n }\n } catch (error: unknown) {\n throw new WalletSendTransactionError(getErrorMessage(error), error);\n }\n });\n }\n\n async signTransaction<T extends LegacyTransaction | VersionedTransaction>(transaction: T): Promise<T> {\n return await this.#runWithGuard(async () => {\n const [signedTransaction] = await this.#performSignTransactions([transaction]);\n return signedTransaction;\n });\n }\n\n async signAllTransactions<T extends LegacyTransaction | VersionedTransaction>(transactions: T[]): Promise<T[]> {\n return await this.#runWithGuard(async () => {\n const signedTransactions = await this.#performSignTransactions(transactions);\n return signedTransactions;\n });\n }\n\n #declareWalletAsInstalled(): void {\n if (this.#readyState !== WalletReadyState.Installed) {\n this.emit('readyStateChange', (this.#readyState = WalletReadyState.Installed));\n }\n }\n\n #assertIsAuthorized() {\n if (!this.#wallet.isAuthorized || !this.#selectedAccount) throw new WalletNotConnectedError();\n return this.#selectedAccount;\n }\n\n async #performSignTransactions<T extends LegacyTransaction | VersionedTransaction>(\n transactions: T[],\n ): Promise<T[]> {\n const account = this.#assertIsAuthorized();\n try {\n if (SolanaSignTransaction in this.#wallet.features) {\n return this.#wallet.features[SolanaSignTransaction].signTransaction(\n ...transactions.map((value) => {\n return { account, transaction: value.serialize() };\n }),\n ).then((outputs) => {\n return outputs.map((output: SolanaSignTransactionOutput) => {\n const byteArray = output.signedTransaction;\n const numSignatures = byteArray[0];\n const messageOffset = numSignatures * SIGNATURE_LENGTH_IN_BYTES + 1;\n const version = VersionedMessage.deserializeMessageVersion(\n byteArray.slice(messageOffset, byteArray.length),\n );\n if (version === 'legacy') {\n return Transaction.from(byteArray) as T;\n } else {\n return VersionedTransaction.deserialize(byteArray) as T;\n }\n });\n });\n } else {\n throw new Error('Connected wallet does not support signing transactions');\n }\n } catch (error: unknown) {\n throw new WalletSignTransactionError(getErrorMessage(error), error);\n }\n }\n\n async #runWithGuard<TReturn>(callback: () => Promise<TReturn>) {\n try {\n return await callback();\n } catch (e: unknown) {\n this.emit('error', e instanceof WalletError ? e : new WalletError(getErrorMessage(e), e));\n throw e;\n }\n }\n}\n\nexport class LocalSolanaMobileWalletAdapter extends BaseSolanaMobileWalletAdapter {\n /**\n * @deprecated @param cluster config paramter is deprecated, use @param chain instead\n */\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n cluster: Cluster;\n onWalletNotFound: (mobileWalletAdapter: LocalSolanaMobileWalletAdapter) => Promise<void>;\n });\n\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n chain: Chain;\n onWalletNotFound: (mobileWalletAdapter: LocalSolanaMobileWalletAdapter) => Promise<void>;\n });\n\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n chain: Chain;\n cluster: Cluster;\n onWalletNotFound: (mobileWalletAdapter: LocalSolanaMobileWalletAdapter) => Promise<void>;\n }) {\n const chain = chainOrClusterToChainId(config.chain ?? config.cluster);\n super(\n new LocalSolanaMobileWalletAdapterWallet({\n appIdentity: config.appIdentity,\n authorizationCache: {\n set: config.authorizationResultCache.set,\n get: async () => {\n return (await config.authorizationResultCache.get()) as Authorization | undefined;\n },\n clear: config.authorizationResultCache.clear,\n },\n chains: [chain],\n chainSelector: createDefaultChainSelector(),\n onWalletNotFound: async () => {\n config.onWalletNotFound(this);\n },\n }),\n {\n addressSelector: config.addressSelector,\n chain: chain,\n },\n );\n }\n}\n\nexport class RemoteSolanaMobileWalletAdapter extends BaseSolanaMobileWalletAdapter {\n constructor(config: {\n addressSelector: AddressSelector;\n appIdentity: AppIdentity;\n authorizationResultCache: AuthorizationResultCache;\n chain: Chain;\n remoteHostAuthority: string;\n onWalletNotFound: (mobileWalletAdapter: RemoteSolanaMobileWalletAdapter) => Promise<void>;\n }) {\n const chain = chainOrClusterToChainId(config.chain);\n super(\n new RemoteSolanaMobileWalletAdapterWallet({\n appIdentity: config.appIdentity,\n authorizationCache: {\n set: config.authorizationResultCache.set,\n get: async () => {\n return (await config.authorizationResultCache.get()) as Authorization | undefined;\n },\n clear: config.authorizationResultCache.clear,\n },\n chains: [chain],\n chainSelector: createDefaultChainSelector(),\n remoteHostAuthority: config.remoteHostAuthority,\n onWalletNotFound: async () => {\n config.onWalletNotFound(this);\n },\n }),\n {\n addressSelector: config.addressSelector,\n chain: chain,\n },\n );\n }\n}\n\nexport class SolanaMobileWalletAdapter extends LocalSolanaMobileWalletAdapter {}\n","import { AddressSelector } from './adapter.js';\n\nexport function createDefaultAddressSelector(): AddressSelector {\n return {\n async select(addresses) {\n return addresses[0];\n },\n };\n}\n\n/**\n * @deprecated Use {@link createDefaultAddressSelector} instead.\n */\nexport default createDefaultAddressSelector;\n","import { createDefaultAuthorizationCache as baseCreateDefaultAuthorizationCache } from '@solana-mobile/wallet-standard-mobile';\n\nimport { AuthorizationResultCache } from './adapter.js';\n\nexport function createDefaultAuthorizationResultCache(): AuthorizationResultCache {\n return baseCreateDefaultAuthorizationCache();\n}\n\n/**\n * @deprecated Use {@link createDefaultAuthorizationResultCache} instead.\n */\nexport default createDefaultAuthorizationResultCache;\n","import { defaultErrorModalWalletNotFoundHandler } from '@solana-mobile/wallet-standard-mobile';\n\nimport { SolanaMobileWalletAdapter } from './adapter.js';\n\nasync function defaultWalletNotFoundHandler(_mobileWalletAdapter: SolanaMobileWalletAdapter) {\n return defaultErrorModalWalletNotFoundHandler();\n}\n\nexport function createDefaultWalletNotFoundHandler(): (\n mobileWalletAdapter: SolanaMobileWalletAdapter,\n) => Promise<void> {\n return defaultWalletNotFoundHandler;\n}\n\n/**\n * @deprecated Use {@link createDefaultWalletNotFoundHandler} instead.\n */\nexport default createDefaultWalletNotFoundHandler;\n"],"mappings":"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"}
|
package/lib/cjs/index.native.js
CHANGED
|
@@ -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
|
|
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
|
|
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,
|
|
79
|
-
return accounts.find(({ publicKey }) => (0,
|
|
81
|
+
const selectedBase64EncodedAddress = await config.addressSelector.select(accounts.map(({ publicKey }) => (0, _solana_mobile_mobile_wallet_adapter_protocol_encoding.base64FromUint8Array)(new Uint8Array(publicKey))));
|
|
82
|
+
return accounts.find(({ publicKey }) => (0, _solana_mobile_mobile_wallet_adapter_protocol_encoding.base64FromUint8Array)(new Uint8Array(publicKey)) === selectedBase64EncodedAddress) ?? accounts[0];
|
|
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
|
|
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,
|
|
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
|
|
240
|
+
throw new _solana_wallet_adapter_base.WalletSendTransactionError(getErrorMessage(error), error);
|
|
238
241
|
}
|
|
239
242
|
});
|
|
240
243
|
}
|
|
@@ -274,14 +277,14 @@ var BaseSolanaMobileWalletAdapter = class extends _solana_wallet_adapter_base.Ba
|
|
|
274
277
|
});
|
|
275
278
|
else throw new Error("Connected wallet does not support signing transactions");
|
|
276
279
|
} catch (error) {
|
|
277
|
-
throw new _solana_wallet_adapter_base.WalletSignTransactionError(error
|
|
280
|
+
throw new _solana_wallet_adapter_base.WalletSignTransactionError(getErrorMessage(error), error);
|
|
278
281
|
}
|
|
279
282
|
}
|
|
280
283
|
async #runWithGuard(callback) {
|
|
281
284
|
try {
|
|
282
285
|
return await callback();
|
|
283
286
|
} catch (e) {
|
|
284
|
-
this.emit("error", e);
|
|
287
|
+
this.emit("error", e instanceof _solana_wallet_adapter_base.WalletError ? e : new _solana_wallet_adapter_base.WalletError(getErrorMessage(e), e));
|
|
285
288
|
throw e;
|
|
286
289
|
}
|
|
287
290
|
}
|
|
@@ -365,7 +368,7 @@ function createDefaultAuthorizationResultCache() {
|
|
|
365
368
|
}
|
|
366
369
|
//#endregion
|
|
367
370
|
//#region src/createDefaultWalletNotFoundHandler.ts
|
|
368
|
-
async function defaultWalletNotFoundHandler(
|
|
371
|
+
async function defaultWalletNotFoundHandler(_mobileWalletAdapter) {
|
|
369
372
|
return (0, _solana_mobile_wallet_standard_mobile.defaultErrorModalWalletNotFoundHandler)();
|
|
370
373
|
}
|
|
371
374
|
function createDefaultWalletNotFoundHandler() {
|