@wallet-ui/react-native-web3js 3.1.0 → 3.2.0

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.
@@ -308,6 +308,16 @@ function useMobileWallet() {
308
308
  }),
309
309
  [authorizeSession]
310
310
  );
311
+ const signTransaction = React.useCallback(
312
+ async (transaction) => await mobileWalletAdapterProtocolWeb3js.transact(async (wallet) => {
313
+ await authorizeSession(wallet);
314
+ const signedTxs = await wallet.signTransactions({
315
+ transactions: Array.isArray(transaction) ? transaction : [transaction]
316
+ });
317
+ return Array.isArray(transaction) ? signedTxs : signedTxs[0];
318
+ }),
319
+ [authorizeSession]
320
+ );
311
321
  return React.useMemo(
312
322
  () => ({
313
323
  ...ctx,
@@ -319,7 +329,8 @@ function useMobileWallet() {
319
329
  disconnect,
320
330
  signAndSendTransaction,
321
331
  signIn,
322
- signMessage
332
+ signMessage,
333
+ signTransaction
323
334
  }),
324
335
  [
325
336
  accounts,
@@ -331,7 +342,8 @@ function useMobileWallet() {
331
342
  selectedAccount,
332
343
  signAndSendTransaction,
333
344
  signIn,
334
- signMessage
345
+ signMessage,
346
+ signTransaction
335
347
  ]
336
348
  );
337
349
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/async-storage-cache.ts","../src/authorization-store.ts","../src/mobile-wallet-provider.tsx","../src/get-public-key-from-address.ts","../src/get-account-from-authorized-account.ts","../src/get-authorization-from-authorization-result.ts","../src/use-authorization-store.ts","../src/use-authorization.ts","../src/use-mobile-wallet.ts"],"names":["PublicKey","AsyncStorage","atom","computed","createContext","useMemo","Connection","useRef","useEffect","React","toUint8Array","useStore","useCallback","SolanaMobileWalletAdapterProtocolError","SolanaMobileWalletAdapterProtocolErrorCode","useContext","transact"],"mappings":"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","file":"index.browser.cjs","sourcesContent":["import AsyncStorage from '@react-native-async-storage/async-storage';\nimport { PublicKey, PublicKeyInitData } from '@solana/web3.js';\n\nimport { Cache } from './cache';\n\nfunction cacheReviver(key: string, value: unknown) {\n if (key === 'publicKey') {\n return new PublicKey(value as PublicKeyInitData);\n } else {\n return value;\n }\n}\n\nexport class AsyncStorageCache<T> implements Cache<T> {\n constructor(private readonly storageKey: string) {}\n\n async clear(): Promise<void> {\n await AsyncStorage.removeItem(this.storageKey);\n }\n\n async get(): Promise<T | undefined> {\n const cacheFetchResult = await AsyncStorage.getItem(this.storageKey);\n if (!cacheFetchResult) {\n return undefined;\n }\n try {\n return JSON.parse(cacheFetchResult, cacheReviver) as T;\n } catch (error) {\n console.warn(`Failed to parse cached data for key ${this.storageKey}:`, error);\n return undefined;\n }\n }\n\n async set(value: T): Promise<void> {\n await AsyncStorage.setItem(this.storageKey, JSON.stringify(value));\n }\n}\n\nexport function createAsyncStorageCache<T>(storageKey = 'authorization-cache') {\n return new AsyncStorageCache<T>(storageKey);\n}\n","import { atom, computed } from 'nanostores';\n\nimport { Cache } from './cache';\nimport { WalletAuthorization } from './use-authorization';\n\nexport type AuthorizationStoreContext = {\n cache: Cache<WalletAuthorization | undefined>;\n};\n\nexport function createAuthorizationStore(context: AuthorizationStoreContext) {\n const { cache } = context;\n\n const $authorization = atom<WalletAuthorization | null>(null);\n\n const $accounts = computed($authorization, auth => auth?.accounts ?? null);\n const $authToken = computed($authorization, auth => auth?.authToken);\n const $selectedAccount = computed($authorization, auth => auth?.selectedAccount);\n\n async function fetch(): Promise<WalletAuthorization | null> {\n const result = await cache.get();\n const auth = result ?? null;\n $authorization.set(auth);\n return auth;\n }\n\n async function persist(auth: WalletAuthorization | null): Promise<void> {\n if (auth) {\n await cache.set(auth);\n } else {\n await cache.clear();\n }\n $authorization.set(auth);\n }\n\n return {\n $accounts,\n $authToken,\n $selectedAccount,\n fetch,\n persist,\n };\n}\n\nexport type AuthorizationStore = ReturnType<typeof createAuthorizationStore>;\n","import { Commitment, Connection, ConnectionConfig } from '@solana/web3.js';\nimport { AppIdentity, Chain } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport React, { createContext, type ReactNode, useEffect, useMemo, useRef } from 'react';\n\nimport { createAsyncStorageCache } from './async-storage-cache';\nimport { AuthorizationStore, createAuthorizationStore } from './authorization-store';\nimport { WalletAuthorization, WalletAuthorizationCache, WalletAuthorizationProps } from './use-authorization';\n\nexport interface MobileWalletProviderProps {\n cache?: WalletAuthorizationCache;\n chain: Chain;\n children: ReactNode;\n commitmentOrConfig?: Commitment | ConnectionConfig;\n endpoint: string;\n identity: AppIdentity;\n}\nexport interface MobileWalletProviderState extends WalletAuthorizationProps {\n connection: Connection;\n store: AuthorizationStore;\n}\n\nexport const MobileWalletProviderContext = createContext<MobileWalletProviderState>({} as MobileWalletProviderState);\nexport function MobileWalletProvider({\n cache: userCache,\n children,\n chain,\n commitmentOrConfig = { commitment: 'confirmed' },\n endpoint,\n identity,\n}: MobileWalletProviderProps) {\n const connection = useMemo(() => new Connection(endpoint, commitmentOrConfig), [commitmentOrConfig, endpoint]);\n const cache = useMemo(() => userCache ?? createAsyncStorageCache<WalletAuthorization>(), [userCache]);\n\n const storeRef = useRef<AuthorizationStore | null>(null);\n if (!storeRef.current) {\n storeRef.current = createAuthorizationStore({ cache });\n }\n const store = storeRef.current;\n\n useEffect(() => {\n store.fetch().catch(console.error);\n }, [store]);\n\n return (\n <MobileWalletProviderContext.Provider\n value={useMemo(\n () => ({\n cache,\n chain,\n connection,\n identity,\n store,\n }),\n [cache, chain, connection, identity, store],\n )}\n >\n {children}\n </MobileWalletProviderContext.Provider>\n );\n}\n","import { PublicKey } from '@solana/web3.js';\nimport { Base64EncodedAddress } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { toUint8Array } from 'js-base64';\n\nexport function getPublicKeyFromAddress(address: Base64EncodedAddress): PublicKey {\n const publicKeyByteArray = toUint8Array(address);\n\n return new PublicKey(publicKeyByteArray);\n}\n","import { Account as AuthorizedAccount } from '@solana-mobile/mobile-wallet-adapter-protocol';\n\nimport { getPublicKeyFromAddress } from './get-public-key-from-address';\nimport { Account } from './use-authorization';\n\nfunction ellipsify(str = '', len = 4, delimiter = '..') {\n const limit = len * 2 + delimiter.length;\n\n return str.length > limit ? str.slice(0, len) + delimiter + str.slice(-len) : str;\n}\n\nexport function getAccountFromAuthorizedAccount(account: AuthorizedAccount): Account {\n const address = getPublicKeyFromAddress(account.address);\n\n return {\n address,\n addressBase64: account.address,\n icon: account.icon,\n label: account.label ?? ellipsify(address.toString(), 8),\n publicKey: address,\n };\n}\n","import { AuthorizationResult } from '@solana-mobile/mobile-wallet-adapter-protocol';\n\nimport { getAccountFromAuthorizedAccount } from './get-account-from-authorized-account';\nimport { Account, WalletAuthorization } from './use-authorization';\n\nexport function getAuthorizationFromAuthorizationResult(\n authorizationResult: AuthorizationResult,\n previouslySelectedAccount?: Account,\n): WalletAuthorization {\n let selectedAccount: Account;\n if (\n // We have yet to select an account.\n previouslySelectedAccount == null ||\n // The previously selected account is no longer in the set of authorized addresses.\n !authorizationResult.accounts.some(({ address }) => address === previouslySelectedAccount.addressBase64)\n ) {\n const firstAccount = authorizationResult.accounts[0];\n selectedAccount = getAccountFromAuthorizedAccount(firstAccount);\n } else {\n selectedAccount = previouslySelectedAccount;\n }\n return {\n accounts: authorizationResult.accounts.map(getAccountFromAuthorizedAccount),\n authToken: authorizationResult.auth_token,\n selectedAccount,\n };\n}\n","import { useStore } from '@nanostores/react';\nimport { useMemo } from 'react';\n\nimport { AuthorizationStore } from './authorization-store';\n\nexport function useAuthorizationStore({ store }: { store: AuthorizationStore }) {\n const accounts = useStore(store.$accounts);\n const authToken = useStore(store.$authToken);\n const selectedAccount = useStore(store.$selectedAccount);\n\n return useMemo(\n () => ({\n accounts,\n authToken,\n persist: store.persist,\n selectedAccount,\n }),\n [accounts, authToken, store.persist, selectedAccount],\n );\n}\n","import { PublicKey } from '@solana/web3.js';\nimport {\n AppIdentity,\n AuthorizationResult,\n AuthorizeAPI,\n AuthToken,\n Base64EncodedAddress,\n Chain,\n DeauthorizeAPI,\n SignInPayload,\n SolanaMobileWalletAdapterProtocolError,\n SolanaMobileWalletAdapterProtocolErrorCode,\n} from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { WalletIcon } from '@wallet-standard/core';\nimport { useCallback, useMemo } from 'react';\n\nimport { AuthorizationStore } from './authorization-store';\nimport { Cache } from './cache';\nimport { getAuthorizationFromAuthorizationResult } from './get-authorization-from-authorization-result';\nimport { useAuthorizationStore } from './use-authorization-store';\n\nexport type Account = Readonly<{\n address: PublicKey;\n addressBase64: Base64EncodedAddress;\n icon?: WalletIcon;\n label?: string;\n /**\n * @deprecated Use `address` instead.\n */\n publicKey: PublicKey;\n}>;\n\nexport type WalletAuthorization = Readonly<{\n accounts: Account[];\n authToken: AuthToken;\n selectedAccount: Account;\n}>;\nexport type WalletAuthorizationCache = Cache<WalletAuthorization | undefined>;\nexport type WalletAuthorizationProps = Readonly<{\n cache?: WalletAuthorizationCache;\n chain: Chain;\n identity: AppIdentity;\n store: AuthorizationStore;\n}>;\nexport function useAuthorization({ chain, identity, store }: WalletAuthorizationProps) {\n const { accounts, authToken, persist, selectedAccount } = useAuthorizationStore({\n store,\n });\n\n const handleAuthorizationResult = useCallback(\n async (authorizationResult: AuthorizationResult): Promise<WalletAuthorization> => {\n const nextAuthorization = getAuthorizationFromAuthorizationResult(authorizationResult, selectedAccount);\n await persist(nextAuthorization);\n return nextAuthorization;\n },\n [selectedAccount, persist],\n );\n\n const authorizeSession = useCallback(\n async (wallet: AuthorizeAPI) => {\n try {\n const authorizationResult = await wallet.authorize({\n auth_token: authToken,\n chain,\n identity,\n });\n return (await handleAuthorizationResult(authorizationResult)).selectedAccount;\n } catch (error) {\n if (\n error instanceof SolanaMobileWalletAdapterProtocolError &&\n error.code === SolanaMobileWalletAdapterProtocolErrorCode.ERROR_AUTHORIZATION_FAILED\n ) {\n const retryResult = await wallet.authorize({\n chain,\n identity,\n });\n return (await handleAuthorizationResult(retryResult)).selectedAccount;\n }\n throw error;\n }\n },\n [authToken, chain, identity, handleAuthorizationResult],\n );\n\n const authorizeSessionWithSignIn = useCallback(\n async (wallet: AuthorizeAPI, signInPayload: SignInPayload) => {\n try {\n const authorizationResult = await wallet.authorize({\n auth_token: authToken,\n chain,\n identity,\n sign_in_payload: signInPayload,\n });\n return (await handleAuthorizationResult(authorizationResult)).selectedAccount;\n } catch (error) {\n if (\n error instanceof SolanaMobileWalletAdapterProtocolError &&\n error.code === SolanaMobileWalletAdapterProtocolErrorCode.ERROR_AUTHORIZATION_FAILED\n ) {\n const retryResult = await wallet.authorize({\n chain,\n identity,\n sign_in_payload: signInPayload,\n });\n return (await handleAuthorizationResult(retryResult)).selectedAccount;\n }\n throw error;\n }\n },\n [authToken, chain, identity, handleAuthorizationResult],\n );\n\n const deauthorizeSession = useCallback(\n async (wallet: DeauthorizeAPI) => {\n if (authToken == null) {\n return;\n }\n await wallet.deauthorize({ auth_token: authToken });\n await persist(null);\n },\n [authToken, persist],\n );\n\n const deauthorizeSessions = useCallback(async () => {\n await persist(null);\n }, [persist]);\n\n return useMemo(\n () => ({\n accounts,\n authorizeSession,\n authorizeSessionWithSignIn,\n deauthorizeSession,\n deauthorizeSessions,\n selectedAccount,\n }),\n [\n accounts,\n authorizeSession,\n authorizeSessionWithSignIn,\n deauthorizeSession,\n deauthorizeSessions,\n selectedAccount,\n ],\n );\n}\n","import { Transaction, TransactionSignature, VersionedTransaction } from '@solana/web3.js';\nimport { AuthorizeAPI, SignInPayload } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { transact } from '@solana-mobile/mobile-wallet-adapter-protocol-web3js';\nimport { useCallback, useContext, useMemo } from 'react';\n\nimport { MobileWalletProviderContext } from './mobile-wallet-provider';\nimport { Account, useAuthorization } from './use-authorization';\n\nexport function useMobileWallet() {\n const ctx = useContext(MobileWalletProviderContext);\n const {\n authorizeSessionWithSignIn,\n authorizeSession,\n deauthorizeSessions,\n selectedAccount,\n accounts,\n deauthorizeSession,\n } = useAuthorization(ctx);\n\n const connect = useCallback(\n async (): Promise<Account> => await transact(async wallet => await authorizeSession(wallet)),\n [authorizeSession],\n );\n\n const connectAnd = useCallback(\n async (cb: (wallet: AuthorizeAPI) => Promise<Account | void>): Promise<Account | void> => {\n return await transact(async wallet => await cb(wallet));\n },\n [],\n );\n\n const signIn = useCallback(\n async (signInPayload: SignInPayload): Promise<Account> =>\n await transact(async wallet => await authorizeSessionWithSignIn(wallet, signInPayload)),\n [authorizeSessionWithSignIn],\n );\n\n const disconnect = useCallback(async (): Promise<void> => await deauthorizeSessions(), [deauthorizeSessions]);\n\n const signAndSendTransaction = useCallback(\n async (\n transaction: Transaction | VersionedTransaction,\n minContextSlot: number,\n ): Promise<TransactionSignature> =>\n await transact(async wallet => {\n await authorizeSession(wallet);\n const signatures = await wallet.signAndSendTransactions({\n minContextSlot,\n transactions: [transaction],\n });\n return signatures[0];\n }),\n [authorizeSession],\n );\n\n const signMessage = useCallback(\n async (message: Uint8Array): Promise<Uint8Array> =>\n await transact(async wallet => {\n const authResult = await authorizeSession(wallet);\n const signedMessages = await wallet.signMessages({\n addresses: [authResult.addressBase64],\n payloads: [message],\n });\n return signedMessages[0];\n }),\n [authorizeSession],\n );\n\n return useMemo(\n () => ({\n ...ctx,\n account: selectedAccount,\n accounts,\n connect,\n connectAnd,\n deauthorizeSession,\n disconnect,\n signAndSendTransaction,\n signIn,\n signMessage,\n }),\n [\n accounts,\n connect,\n connectAnd,\n ctx,\n deauthorizeSession,\n disconnect,\n selectedAccount,\n signAndSendTransaction,\n signIn,\n signMessage,\n ],\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/async-storage-cache.ts","../src/authorization-store.ts","../src/mobile-wallet-provider.tsx","../src/get-public-key-from-address.ts","../src/get-account-from-authorized-account.ts","../src/get-authorization-from-authorization-result.ts","../src/use-authorization-store.ts","../src/use-authorization.ts","../src/use-mobile-wallet.ts"],"names":["PublicKey","AsyncStorage","atom","computed","createContext","useMemo","Connection","useRef","useEffect","React","toUint8Array","useStore","useCallback","SolanaMobileWalletAdapterProtocolError","SolanaMobileWalletAdapterProtocolErrorCode","useContext","transact"],"mappings":"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","file":"index.browser.cjs","sourcesContent":["import AsyncStorage from '@react-native-async-storage/async-storage';\nimport { PublicKey, PublicKeyInitData } from '@solana/web3.js';\n\nimport { Cache } from './cache';\n\nfunction cacheReviver(key: string, value: unknown) {\n if (key === 'publicKey') {\n return new PublicKey(value as PublicKeyInitData);\n } else {\n return value;\n }\n}\n\nexport class AsyncStorageCache<T> implements Cache<T> {\n constructor(private readonly storageKey: string) {}\n\n async clear(): Promise<void> {\n await AsyncStorage.removeItem(this.storageKey);\n }\n\n async get(): Promise<T | undefined> {\n const cacheFetchResult = await AsyncStorage.getItem(this.storageKey);\n if (!cacheFetchResult) {\n return undefined;\n }\n try {\n return JSON.parse(cacheFetchResult, cacheReviver) as T;\n } catch (error) {\n console.warn(`Failed to parse cached data for key ${this.storageKey}:`, error);\n return undefined;\n }\n }\n\n async set(value: T): Promise<void> {\n await AsyncStorage.setItem(this.storageKey, JSON.stringify(value));\n }\n}\n\nexport function createAsyncStorageCache<T>(storageKey = 'authorization-cache') {\n return new AsyncStorageCache<T>(storageKey);\n}\n","import { atom, computed } from 'nanostores';\n\nimport { Cache } from './cache';\nimport { WalletAuthorization } from './use-authorization';\n\nexport type AuthorizationStoreContext = {\n cache: Cache<WalletAuthorization | undefined>;\n};\n\nexport function createAuthorizationStore(context: AuthorizationStoreContext) {\n const { cache } = context;\n\n const $authorization = atom<WalletAuthorization | null>(null);\n\n const $accounts = computed($authorization, auth => auth?.accounts ?? null);\n const $authToken = computed($authorization, auth => auth?.authToken);\n const $selectedAccount = computed($authorization, auth => auth?.selectedAccount);\n\n async function fetch(): Promise<WalletAuthorization | null> {\n const result = await cache.get();\n const auth = result ?? null;\n $authorization.set(auth);\n return auth;\n }\n\n async function persist(auth: WalletAuthorization | null): Promise<void> {\n if (auth) {\n await cache.set(auth);\n } else {\n await cache.clear();\n }\n $authorization.set(auth);\n }\n\n return {\n $accounts,\n $authToken,\n $selectedAccount,\n fetch,\n persist,\n };\n}\n\nexport type AuthorizationStore = ReturnType<typeof createAuthorizationStore>;\n","import { Commitment, Connection, ConnectionConfig } from '@solana/web3.js';\nimport { AppIdentity, Chain } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport React, { createContext, type ReactNode, useEffect, useMemo, useRef } from 'react';\n\nimport { createAsyncStorageCache } from './async-storage-cache';\nimport { AuthorizationStore, createAuthorizationStore } from './authorization-store';\nimport { WalletAuthorization, WalletAuthorizationCache, WalletAuthorizationProps } from './use-authorization';\n\nexport interface MobileWalletProviderProps {\n cache?: WalletAuthorizationCache;\n chain: Chain;\n children: ReactNode;\n commitmentOrConfig?: Commitment | ConnectionConfig;\n endpoint: string;\n identity: AppIdentity;\n}\nexport interface MobileWalletProviderState extends WalletAuthorizationProps {\n connection: Connection;\n store: AuthorizationStore;\n}\n\nexport const MobileWalletProviderContext = createContext<MobileWalletProviderState>({} as MobileWalletProviderState);\nexport function MobileWalletProvider({\n cache: userCache,\n children,\n chain,\n commitmentOrConfig = { commitment: 'confirmed' },\n endpoint,\n identity,\n}: MobileWalletProviderProps) {\n const connection = useMemo(() => new Connection(endpoint, commitmentOrConfig), [commitmentOrConfig, endpoint]);\n const cache = useMemo(() => userCache ?? createAsyncStorageCache<WalletAuthorization>(), [userCache]);\n\n const storeRef = useRef<AuthorizationStore | null>(null);\n if (!storeRef.current) {\n storeRef.current = createAuthorizationStore({ cache });\n }\n const store = storeRef.current;\n\n useEffect(() => {\n store.fetch().catch(console.error);\n }, [store]);\n\n return (\n <MobileWalletProviderContext.Provider\n value={useMemo(\n () => ({\n cache,\n chain,\n connection,\n identity,\n store,\n }),\n [cache, chain, connection, identity, store],\n )}\n >\n {children}\n </MobileWalletProviderContext.Provider>\n );\n}\n","import { PublicKey } from '@solana/web3.js';\nimport { Base64EncodedAddress } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { toUint8Array } from 'js-base64';\n\nexport function getPublicKeyFromAddress(address: Base64EncodedAddress): PublicKey {\n const publicKeyByteArray = toUint8Array(address);\n\n return new PublicKey(publicKeyByteArray);\n}\n","import { Account as AuthorizedAccount } from '@solana-mobile/mobile-wallet-adapter-protocol';\n\nimport { getPublicKeyFromAddress } from './get-public-key-from-address';\nimport { Account } from './use-authorization';\n\nfunction ellipsify(str = '', len = 4, delimiter = '..') {\n const limit = len * 2 + delimiter.length;\n\n return str.length > limit ? str.slice(0, len) + delimiter + str.slice(-len) : str;\n}\n\nexport function getAccountFromAuthorizedAccount(account: AuthorizedAccount): Account {\n const address = getPublicKeyFromAddress(account.address);\n\n return {\n address,\n addressBase64: account.address,\n icon: account.icon,\n label: account.label ?? ellipsify(address.toString(), 8),\n publicKey: address,\n };\n}\n","import { AuthorizationResult } from '@solana-mobile/mobile-wallet-adapter-protocol';\n\nimport { getAccountFromAuthorizedAccount } from './get-account-from-authorized-account';\nimport { Account, WalletAuthorization } from './use-authorization';\n\nexport function getAuthorizationFromAuthorizationResult(\n authorizationResult: AuthorizationResult,\n previouslySelectedAccount?: Account,\n): WalletAuthorization {\n let selectedAccount: Account;\n if (\n // We have yet to select an account.\n previouslySelectedAccount == null ||\n // The previously selected account is no longer in the set of authorized addresses.\n !authorizationResult.accounts.some(({ address }) => address === previouslySelectedAccount.addressBase64)\n ) {\n const firstAccount = authorizationResult.accounts[0];\n selectedAccount = getAccountFromAuthorizedAccount(firstAccount);\n } else {\n selectedAccount = previouslySelectedAccount;\n }\n return {\n accounts: authorizationResult.accounts.map(getAccountFromAuthorizedAccount),\n authToken: authorizationResult.auth_token,\n selectedAccount,\n };\n}\n","import { useStore } from '@nanostores/react';\nimport { useMemo } from 'react';\n\nimport { AuthorizationStore } from './authorization-store';\n\nexport function useAuthorizationStore({ store }: { store: AuthorizationStore }) {\n const accounts = useStore(store.$accounts);\n const authToken = useStore(store.$authToken);\n const selectedAccount = useStore(store.$selectedAccount);\n\n return useMemo(\n () => ({\n accounts,\n authToken,\n persist: store.persist,\n selectedAccount,\n }),\n [accounts, authToken, store.persist, selectedAccount],\n );\n}\n","import { PublicKey } from '@solana/web3.js';\nimport {\n AppIdentity,\n AuthorizationResult,\n AuthorizeAPI,\n AuthToken,\n Base64EncodedAddress,\n Chain,\n DeauthorizeAPI,\n SignInPayload,\n SolanaMobileWalletAdapterProtocolError,\n SolanaMobileWalletAdapterProtocolErrorCode,\n} from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { WalletIcon } from '@wallet-standard/core';\nimport { useCallback, useMemo } from 'react';\n\nimport { AuthorizationStore } from './authorization-store';\nimport { Cache } from './cache';\nimport { getAuthorizationFromAuthorizationResult } from './get-authorization-from-authorization-result';\nimport { useAuthorizationStore } from './use-authorization-store';\n\nexport type Account = Readonly<{\n address: PublicKey;\n addressBase64: Base64EncodedAddress;\n icon?: WalletIcon;\n label?: string;\n /**\n * @deprecated Use `address` instead.\n */\n publicKey: PublicKey;\n}>;\n\nexport type WalletAuthorization = Readonly<{\n accounts: Account[];\n authToken: AuthToken;\n selectedAccount: Account;\n}>;\nexport type WalletAuthorizationCache = Cache<WalletAuthorization | undefined>;\nexport type WalletAuthorizationProps = Readonly<{\n cache?: WalletAuthorizationCache;\n chain: Chain;\n identity: AppIdentity;\n store: AuthorizationStore;\n}>;\nexport function useAuthorization({ chain, identity, store }: WalletAuthorizationProps) {\n const { accounts, authToken, persist, selectedAccount } = useAuthorizationStore({\n store,\n });\n\n const handleAuthorizationResult = useCallback(\n async (authorizationResult: AuthorizationResult): Promise<WalletAuthorization> => {\n const nextAuthorization = getAuthorizationFromAuthorizationResult(authorizationResult, selectedAccount);\n await persist(nextAuthorization);\n return nextAuthorization;\n },\n [selectedAccount, persist],\n );\n\n const authorizeSession = useCallback(\n async (wallet: AuthorizeAPI) => {\n try {\n const authorizationResult = await wallet.authorize({\n auth_token: authToken,\n chain,\n identity,\n });\n return (await handleAuthorizationResult(authorizationResult)).selectedAccount;\n } catch (error) {\n if (\n error instanceof SolanaMobileWalletAdapterProtocolError &&\n error.code === SolanaMobileWalletAdapterProtocolErrorCode.ERROR_AUTHORIZATION_FAILED\n ) {\n const retryResult = await wallet.authorize({\n chain,\n identity,\n });\n return (await handleAuthorizationResult(retryResult)).selectedAccount;\n }\n throw error;\n }\n },\n [authToken, chain, identity, handleAuthorizationResult],\n );\n\n const authorizeSessionWithSignIn = useCallback(\n async (wallet: AuthorizeAPI, signInPayload: SignInPayload) => {\n try {\n const authorizationResult = await wallet.authorize({\n auth_token: authToken,\n chain,\n identity,\n sign_in_payload: signInPayload,\n });\n return (await handleAuthorizationResult(authorizationResult)).selectedAccount;\n } catch (error) {\n if (\n error instanceof SolanaMobileWalletAdapterProtocolError &&\n error.code === SolanaMobileWalletAdapterProtocolErrorCode.ERROR_AUTHORIZATION_FAILED\n ) {\n const retryResult = await wallet.authorize({\n chain,\n identity,\n sign_in_payload: signInPayload,\n });\n return (await handleAuthorizationResult(retryResult)).selectedAccount;\n }\n throw error;\n }\n },\n [authToken, chain, identity, handleAuthorizationResult],\n );\n\n const deauthorizeSession = useCallback(\n async (wallet: DeauthorizeAPI) => {\n if (authToken == null) {\n return;\n }\n await wallet.deauthorize({ auth_token: authToken });\n await persist(null);\n },\n [authToken, persist],\n );\n\n const deauthorizeSessions = useCallback(async () => {\n await persist(null);\n }, [persist]);\n\n return useMemo(\n () => ({\n accounts,\n authorizeSession,\n authorizeSessionWithSignIn,\n deauthorizeSession,\n deauthorizeSessions,\n selectedAccount,\n }),\n [\n accounts,\n authorizeSession,\n authorizeSessionWithSignIn,\n deauthorizeSession,\n deauthorizeSessions,\n selectedAccount,\n ],\n );\n}\n","import { Transaction, TransactionSignature, VersionedTransaction } from '@solana/web3.js';\nimport { AuthorizeAPI, SignInPayload } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { transact } from '@solana-mobile/mobile-wallet-adapter-protocol-web3js';\nimport { useCallback, useContext, useMemo } from 'react';\n\nimport { MobileWalletProviderContext } from './mobile-wallet-provider';\nimport { Account, useAuthorization } from './use-authorization';\n\nexport function useMobileWallet() {\n const ctx = useContext(MobileWalletProviderContext);\n const {\n authorizeSessionWithSignIn,\n authorizeSession,\n deauthorizeSessions,\n selectedAccount,\n accounts,\n deauthorizeSession,\n } = useAuthorization(ctx);\n\n const connect = useCallback(\n async (): Promise<Account> => await transact(async wallet => await authorizeSession(wallet)),\n [authorizeSession],\n );\n\n const connectAnd = useCallback(\n async (cb: (wallet: AuthorizeAPI) => Promise<Account | void>): Promise<Account | void> => {\n return await transact(async wallet => await cb(wallet));\n },\n [],\n );\n\n const signIn = useCallback(\n async (signInPayload: SignInPayload): Promise<Account> =>\n await transact(async wallet => await authorizeSessionWithSignIn(wallet, signInPayload)),\n [authorizeSessionWithSignIn],\n );\n\n const disconnect = useCallback(async (): Promise<void> => await deauthorizeSessions(), [deauthorizeSessions]);\n\n const signAndSendTransaction = useCallback(\n async (\n transaction: Transaction | VersionedTransaction,\n minContextSlot: number,\n ): Promise<TransactionSignature> =>\n await transact(async wallet => {\n await authorizeSession(wallet);\n const signatures = await wallet.signAndSendTransactions({\n minContextSlot,\n transactions: [transaction],\n });\n return signatures[0];\n }),\n [authorizeSession],\n );\n\n const signMessage = useCallback(\n async (message: Uint8Array): Promise<Uint8Array> =>\n await transact(async wallet => {\n const authResult = await authorizeSession(wallet);\n const signedMessages = await wallet.signMessages({\n addresses: [authResult.addressBase64],\n payloads: [message],\n });\n return signedMessages[0];\n }),\n [authorizeSession],\n );\n\n const signTransaction = useCallback(\n async <T extends Transaction | VersionedTransaction, K extends T | T[]>(transaction: K): Promise<K> =>\n await transact(async wallet => {\n await authorizeSession(wallet);\n const signedTxs = await wallet.signTransactions({\n transactions: Array.isArray(transaction) ? transaction : [transaction],\n });\n return Array.isArray(transaction) ? signedTxs : signedTxs[0];\n }),\n\n [authorizeSession],\n );\n\n return useMemo(\n () => ({\n ...ctx,\n account: selectedAccount,\n accounts,\n connect,\n connectAnd,\n deauthorizeSession,\n disconnect,\n signAndSendTransaction,\n signIn,\n signMessage,\n signTransaction,\n }),\n [\n accounts,\n connect,\n connectAnd,\n ctx,\n deauthorizeSession,\n disconnect,\n selectedAccount,\n signAndSendTransaction,\n signIn,\n signMessage,\n signTransaction,\n ],\n );\n}\n"]}
@@ -303,6 +303,16 @@ function useMobileWallet() {
303
303
  }),
304
304
  [authorizeSession]
305
305
  );
306
+ const signTransaction = useCallback(
307
+ async (transaction) => await transact(async (wallet) => {
308
+ await authorizeSession(wallet);
309
+ const signedTxs = await wallet.signTransactions({
310
+ transactions: Array.isArray(transaction) ? transaction : [transaction]
311
+ });
312
+ return Array.isArray(transaction) ? signedTxs : signedTxs[0];
313
+ }),
314
+ [authorizeSession]
315
+ );
306
316
  return useMemo(
307
317
  () => ({
308
318
  ...ctx,
@@ -314,7 +324,8 @@ function useMobileWallet() {
314
324
  disconnect,
315
325
  signAndSendTransaction,
316
326
  signIn,
317
- signMessage
327
+ signMessage,
328
+ signTransaction
318
329
  }),
319
330
  [
320
331
  accounts,
@@ -326,7 +337,8 @@ function useMobileWallet() {
326
337
  selectedAccount,
327
338
  signAndSendTransaction,
328
339
  signIn,
329
- signMessage
340
+ signMessage,
341
+ signTransaction
330
342
  ]
331
343
  );
332
344
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/async-storage-cache.ts","../src/authorization-store.ts","../src/mobile-wallet-provider.tsx","../src/get-public-key-from-address.ts","../src/get-account-from-authorized-account.ts","../src/get-authorization-from-authorization-result.ts","../src/use-authorization-store.ts","../src/use-authorization.ts","../src/use-mobile-wallet.ts"],"names":["PublicKey","useMemo","useCallback"],"mappings":"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","file":"index.browser.mjs","sourcesContent":["import AsyncStorage from '@react-native-async-storage/async-storage';\nimport { PublicKey, PublicKeyInitData } from '@solana/web3.js';\n\nimport { Cache } from './cache';\n\nfunction cacheReviver(key: string, value: unknown) {\n if (key === 'publicKey') {\n return new PublicKey(value as PublicKeyInitData);\n } else {\n return value;\n }\n}\n\nexport class AsyncStorageCache<T> implements Cache<T> {\n constructor(private readonly storageKey: string) {}\n\n async clear(): Promise<void> {\n await AsyncStorage.removeItem(this.storageKey);\n }\n\n async get(): Promise<T | undefined> {\n const cacheFetchResult = await AsyncStorage.getItem(this.storageKey);\n if (!cacheFetchResult) {\n return undefined;\n }\n try {\n return JSON.parse(cacheFetchResult, cacheReviver) as T;\n } catch (error) {\n console.warn(`Failed to parse cached data for key ${this.storageKey}:`, error);\n return undefined;\n }\n }\n\n async set(value: T): Promise<void> {\n await AsyncStorage.setItem(this.storageKey, JSON.stringify(value));\n }\n}\n\nexport function createAsyncStorageCache<T>(storageKey = 'authorization-cache') {\n return new AsyncStorageCache<T>(storageKey);\n}\n","import { atom, computed } from 'nanostores';\n\nimport { Cache } from './cache';\nimport { WalletAuthorization } from './use-authorization';\n\nexport type AuthorizationStoreContext = {\n cache: Cache<WalletAuthorization | undefined>;\n};\n\nexport function createAuthorizationStore(context: AuthorizationStoreContext) {\n const { cache } = context;\n\n const $authorization = atom<WalletAuthorization | null>(null);\n\n const $accounts = computed($authorization, auth => auth?.accounts ?? null);\n const $authToken = computed($authorization, auth => auth?.authToken);\n const $selectedAccount = computed($authorization, auth => auth?.selectedAccount);\n\n async function fetch(): Promise<WalletAuthorization | null> {\n const result = await cache.get();\n const auth = result ?? null;\n $authorization.set(auth);\n return auth;\n }\n\n async function persist(auth: WalletAuthorization | null): Promise<void> {\n if (auth) {\n await cache.set(auth);\n } else {\n await cache.clear();\n }\n $authorization.set(auth);\n }\n\n return {\n $accounts,\n $authToken,\n $selectedAccount,\n fetch,\n persist,\n };\n}\n\nexport type AuthorizationStore = ReturnType<typeof createAuthorizationStore>;\n","import { Commitment, Connection, ConnectionConfig } from '@solana/web3.js';\nimport { AppIdentity, Chain } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport React, { createContext, type ReactNode, useEffect, useMemo, useRef } from 'react';\n\nimport { createAsyncStorageCache } from './async-storage-cache';\nimport { AuthorizationStore, createAuthorizationStore } from './authorization-store';\nimport { WalletAuthorization, WalletAuthorizationCache, WalletAuthorizationProps } from './use-authorization';\n\nexport interface MobileWalletProviderProps {\n cache?: WalletAuthorizationCache;\n chain: Chain;\n children: ReactNode;\n commitmentOrConfig?: Commitment | ConnectionConfig;\n endpoint: string;\n identity: AppIdentity;\n}\nexport interface MobileWalletProviderState extends WalletAuthorizationProps {\n connection: Connection;\n store: AuthorizationStore;\n}\n\nexport const MobileWalletProviderContext = createContext<MobileWalletProviderState>({} as MobileWalletProviderState);\nexport function MobileWalletProvider({\n cache: userCache,\n children,\n chain,\n commitmentOrConfig = { commitment: 'confirmed' },\n endpoint,\n identity,\n}: MobileWalletProviderProps) {\n const connection = useMemo(() => new Connection(endpoint, commitmentOrConfig), [commitmentOrConfig, endpoint]);\n const cache = useMemo(() => userCache ?? createAsyncStorageCache<WalletAuthorization>(), [userCache]);\n\n const storeRef = useRef<AuthorizationStore | null>(null);\n if (!storeRef.current) {\n storeRef.current = createAuthorizationStore({ cache });\n }\n const store = storeRef.current;\n\n useEffect(() => {\n store.fetch().catch(console.error);\n }, [store]);\n\n return (\n <MobileWalletProviderContext.Provider\n value={useMemo(\n () => ({\n cache,\n chain,\n connection,\n identity,\n store,\n }),\n [cache, chain, connection, identity, store],\n )}\n >\n {children}\n </MobileWalletProviderContext.Provider>\n );\n}\n","import { PublicKey } from '@solana/web3.js';\nimport { Base64EncodedAddress } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { toUint8Array } from 'js-base64';\n\nexport function getPublicKeyFromAddress(address: Base64EncodedAddress): PublicKey {\n const publicKeyByteArray = toUint8Array(address);\n\n return new PublicKey(publicKeyByteArray);\n}\n","import { Account as AuthorizedAccount } from '@solana-mobile/mobile-wallet-adapter-protocol';\n\nimport { getPublicKeyFromAddress } from './get-public-key-from-address';\nimport { Account } from './use-authorization';\n\nfunction ellipsify(str = '', len = 4, delimiter = '..') {\n const limit = len * 2 + delimiter.length;\n\n return str.length > limit ? str.slice(0, len) + delimiter + str.slice(-len) : str;\n}\n\nexport function getAccountFromAuthorizedAccount(account: AuthorizedAccount): Account {\n const address = getPublicKeyFromAddress(account.address);\n\n return {\n address,\n addressBase64: account.address,\n icon: account.icon,\n label: account.label ?? ellipsify(address.toString(), 8),\n publicKey: address,\n };\n}\n","import { AuthorizationResult } from '@solana-mobile/mobile-wallet-adapter-protocol';\n\nimport { getAccountFromAuthorizedAccount } from './get-account-from-authorized-account';\nimport { Account, WalletAuthorization } from './use-authorization';\n\nexport function getAuthorizationFromAuthorizationResult(\n authorizationResult: AuthorizationResult,\n previouslySelectedAccount?: Account,\n): WalletAuthorization {\n let selectedAccount: Account;\n if (\n // We have yet to select an account.\n previouslySelectedAccount == null ||\n // The previously selected account is no longer in the set of authorized addresses.\n !authorizationResult.accounts.some(({ address }) => address === previouslySelectedAccount.addressBase64)\n ) {\n const firstAccount = authorizationResult.accounts[0];\n selectedAccount = getAccountFromAuthorizedAccount(firstAccount);\n } else {\n selectedAccount = previouslySelectedAccount;\n }\n return {\n accounts: authorizationResult.accounts.map(getAccountFromAuthorizedAccount),\n authToken: authorizationResult.auth_token,\n selectedAccount,\n };\n}\n","import { useStore } from '@nanostores/react';\nimport { useMemo } from 'react';\n\nimport { AuthorizationStore } from './authorization-store';\n\nexport function useAuthorizationStore({ store }: { store: AuthorizationStore }) {\n const accounts = useStore(store.$accounts);\n const authToken = useStore(store.$authToken);\n const selectedAccount = useStore(store.$selectedAccount);\n\n return useMemo(\n () => ({\n accounts,\n authToken,\n persist: store.persist,\n selectedAccount,\n }),\n [accounts, authToken, store.persist, selectedAccount],\n );\n}\n","import { PublicKey } from '@solana/web3.js';\nimport {\n AppIdentity,\n AuthorizationResult,\n AuthorizeAPI,\n AuthToken,\n Base64EncodedAddress,\n Chain,\n DeauthorizeAPI,\n SignInPayload,\n SolanaMobileWalletAdapterProtocolError,\n SolanaMobileWalletAdapterProtocolErrorCode,\n} from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { WalletIcon } from '@wallet-standard/core';\nimport { useCallback, useMemo } from 'react';\n\nimport { AuthorizationStore } from './authorization-store';\nimport { Cache } from './cache';\nimport { getAuthorizationFromAuthorizationResult } from './get-authorization-from-authorization-result';\nimport { useAuthorizationStore } from './use-authorization-store';\n\nexport type Account = Readonly<{\n address: PublicKey;\n addressBase64: Base64EncodedAddress;\n icon?: WalletIcon;\n label?: string;\n /**\n * @deprecated Use `address` instead.\n */\n publicKey: PublicKey;\n}>;\n\nexport type WalletAuthorization = Readonly<{\n accounts: Account[];\n authToken: AuthToken;\n selectedAccount: Account;\n}>;\nexport type WalletAuthorizationCache = Cache<WalletAuthorization | undefined>;\nexport type WalletAuthorizationProps = Readonly<{\n cache?: WalletAuthorizationCache;\n chain: Chain;\n identity: AppIdentity;\n store: AuthorizationStore;\n}>;\nexport function useAuthorization({ chain, identity, store }: WalletAuthorizationProps) {\n const { accounts, authToken, persist, selectedAccount } = useAuthorizationStore({\n store,\n });\n\n const handleAuthorizationResult = useCallback(\n async (authorizationResult: AuthorizationResult): Promise<WalletAuthorization> => {\n const nextAuthorization = getAuthorizationFromAuthorizationResult(authorizationResult, selectedAccount);\n await persist(nextAuthorization);\n return nextAuthorization;\n },\n [selectedAccount, persist],\n );\n\n const authorizeSession = useCallback(\n async (wallet: AuthorizeAPI) => {\n try {\n const authorizationResult = await wallet.authorize({\n auth_token: authToken,\n chain,\n identity,\n });\n return (await handleAuthorizationResult(authorizationResult)).selectedAccount;\n } catch (error) {\n if (\n error instanceof SolanaMobileWalletAdapterProtocolError &&\n error.code === SolanaMobileWalletAdapterProtocolErrorCode.ERROR_AUTHORIZATION_FAILED\n ) {\n const retryResult = await wallet.authorize({\n chain,\n identity,\n });\n return (await handleAuthorizationResult(retryResult)).selectedAccount;\n }\n throw error;\n }\n },\n [authToken, chain, identity, handleAuthorizationResult],\n );\n\n const authorizeSessionWithSignIn = useCallback(\n async (wallet: AuthorizeAPI, signInPayload: SignInPayload) => {\n try {\n const authorizationResult = await wallet.authorize({\n auth_token: authToken,\n chain,\n identity,\n sign_in_payload: signInPayload,\n });\n return (await handleAuthorizationResult(authorizationResult)).selectedAccount;\n } catch (error) {\n if (\n error instanceof SolanaMobileWalletAdapterProtocolError &&\n error.code === SolanaMobileWalletAdapterProtocolErrorCode.ERROR_AUTHORIZATION_FAILED\n ) {\n const retryResult = await wallet.authorize({\n chain,\n identity,\n sign_in_payload: signInPayload,\n });\n return (await handleAuthorizationResult(retryResult)).selectedAccount;\n }\n throw error;\n }\n },\n [authToken, chain, identity, handleAuthorizationResult],\n );\n\n const deauthorizeSession = useCallback(\n async (wallet: DeauthorizeAPI) => {\n if (authToken == null) {\n return;\n }\n await wallet.deauthorize({ auth_token: authToken });\n await persist(null);\n },\n [authToken, persist],\n );\n\n const deauthorizeSessions = useCallback(async () => {\n await persist(null);\n }, [persist]);\n\n return useMemo(\n () => ({\n accounts,\n authorizeSession,\n authorizeSessionWithSignIn,\n deauthorizeSession,\n deauthorizeSessions,\n selectedAccount,\n }),\n [\n accounts,\n authorizeSession,\n authorizeSessionWithSignIn,\n deauthorizeSession,\n deauthorizeSessions,\n selectedAccount,\n ],\n );\n}\n","import { Transaction, TransactionSignature, VersionedTransaction } from '@solana/web3.js';\nimport { AuthorizeAPI, SignInPayload } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { transact } from '@solana-mobile/mobile-wallet-adapter-protocol-web3js';\nimport { useCallback, useContext, useMemo } from 'react';\n\nimport { MobileWalletProviderContext } from './mobile-wallet-provider';\nimport { Account, useAuthorization } from './use-authorization';\n\nexport function useMobileWallet() {\n const ctx = useContext(MobileWalletProviderContext);\n const {\n authorizeSessionWithSignIn,\n authorizeSession,\n deauthorizeSessions,\n selectedAccount,\n accounts,\n deauthorizeSession,\n } = useAuthorization(ctx);\n\n const connect = useCallback(\n async (): Promise<Account> => await transact(async wallet => await authorizeSession(wallet)),\n [authorizeSession],\n );\n\n const connectAnd = useCallback(\n async (cb: (wallet: AuthorizeAPI) => Promise<Account | void>): Promise<Account | void> => {\n return await transact(async wallet => await cb(wallet));\n },\n [],\n );\n\n const signIn = useCallback(\n async (signInPayload: SignInPayload): Promise<Account> =>\n await transact(async wallet => await authorizeSessionWithSignIn(wallet, signInPayload)),\n [authorizeSessionWithSignIn],\n );\n\n const disconnect = useCallback(async (): Promise<void> => await deauthorizeSessions(), [deauthorizeSessions]);\n\n const signAndSendTransaction = useCallback(\n async (\n transaction: Transaction | VersionedTransaction,\n minContextSlot: number,\n ): Promise<TransactionSignature> =>\n await transact(async wallet => {\n await authorizeSession(wallet);\n const signatures = await wallet.signAndSendTransactions({\n minContextSlot,\n transactions: [transaction],\n });\n return signatures[0];\n }),\n [authorizeSession],\n );\n\n const signMessage = useCallback(\n async (message: Uint8Array): Promise<Uint8Array> =>\n await transact(async wallet => {\n const authResult = await authorizeSession(wallet);\n const signedMessages = await wallet.signMessages({\n addresses: [authResult.addressBase64],\n payloads: [message],\n });\n return signedMessages[0];\n }),\n [authorizeSession],\n );\n\n return useMemo(\n () => ({\n ...ctx,\n account: selectedAccount,\n accounts,\n connect,\n connectAnd,\n deauthorizeSession,\n disconnect,\n signAndSendTransaction,\n signIn,\n signMessage,\n }),\n [\n accounts,\n connect,\n connectAnd,\n ctx,\n deauthorizeSession,\n disconnect,\n selectedAccount,\n signAndSendTransaction,\n signIn,\n signMessage,\n ],\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/async-storage-cache.ts","../src/authorization-store.ts","../src/mobile-wallet-provider.tsx","../src/get-public-key-from-address.ts","../src/get-account-from-authorized-account.ts","../src/get-authorization-from-authorization-result.ts","../src/use-authorization-store.ts","../src/use-authorization.ts","../src/use-mobile-wallet.ts"],"names":["PublicKey","useMemo","useCallback"],"mappings":"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","file":"index.browser.mjs","sourcesContent":["import AsyncStorage from '@react-native-async-storage/async-storage';\nimport { PublicKey, PublicKeyInitData } from '@solana/web3.js';\n\nimport { Cache } from './cache';\n\nfunction cacheReviver(key: string, value: unknown) {\n if (key === 'publicKey') {\n return new PublicKey(value as PublicKeyInitData);\n } else {\n return value;\n }\n}\n\nexport class AsyncStorageCache<T> implements Cache<T> {\n constructor(private readonly storageKey: string) {}\n\n async clear(): Promise<void> {\n await AsyncStorage.removeItem(this.storageKey);\n }\n\n async get(): Promise<T | undefined> {\n const cacheFetchResult = await AsyncStorage.getItem(this.storageKey);\n if (!cacheFetchResult) {\n return undefined;\n }\n try {\n return JSON.parse(cacheFetchResult, cacheReviver) as T;\n } catch (error) {\n console.warn(`Failed to parse cached data for key ${this.storageKey}:`, error);\n return undefined;\n }\n }\n\n async set(value: T): Promise<void> {\n await AsyncStorage.setItem(this.storageKey, JSON.stringify(value));\n }\n}\n\nexport function createAsyncStorageCache<T>(storageKey = 'authorization-cache') {\n return new AsyncStorageCache<T>(storageKey);\n}\n","import { atom, computed } from 'nanostores';\n\nimport { Cache } from './cache';\nimport { WalletAuthorization } from './use-authorization';\n\nexport type AuthorizationStoreContext = {\n cache: Cache<WalletAuthorization | undefined>;\n};\n\nexport function createAuthorizationStore(context: AuthorizationStoreContext) {\n const { cache } = context;\n\n const $authorization = atom<WalletAuthorization | null>(null);\n\n const $accounts = computed($authorization, auth => auth?.accounts ?? null);\n const $authToken = computed($authorization, auth => auth?.authToken);\n const $selectedAccount = computed($authorization, auth => auth?.selectedAccount);\n\n async function fetch(): Promise<WalletAuthorization | null> {\n const result = await cache.get();\n const auth = result ?? null;\n $authorization.set(auth);\n return auth;\n }\n\n async function persist(auth: WalletAuthorization | null): Promise<void> {\n if (auth) {\n await cache.set(auth);\n } else {\n await cache.clear();\n }\n $authorization.set(auth);\n }\n\n return {\n $accounts,\n $authToken,\n $selectedAccount,\n fetch,\n persist,\n };\n}\n\nexport type AuthorizationStore = ReturnType<typeof createAuthorizationStore>;\n","import { Commitment, Connection, ConnectionConfig } from '@solana/web3.js';\nimport { AppIdentity, Chain } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport React, { createContext, type ReactNode, useEffect, useMemo, useRef } from 'react';\n\nimport { createAsyncStorageCache } from './async-storage-cache';\nimport { AuthorizationStore, createAuthorizationStore } from './authorization-store';\nimport { WalletAuthorization, WalletAuthorizationCache, WalletAuthorizationProps } from './use-authorization';\n\nexport interface MobileWalletProviderProps {\n cache?: WalletAuthorizationCache;\n chain: Chain;\n children: ReactNode;\n commitmentOrConfig?: Commitment | ConnectionConfig;\n endpoint: string;\n identity: AppIdentity;\n}\nexport interface MobileWalletProviderState extends WalletAuthorizationProps {\n connection: Connection;\n store: AuthorizationStore;\n}\n\nexport const MobileWalletProviderContext = createContext<MobileWalletProviderState>({} as MobileWalletProviderState);\nexport function MobileWalletProvider({\n cache: userCache,\n children,\n chain,\n commitmentOrConfig = { commitment: 'confirmed' },\n endpoint,\n identity,\n}: MobileWalletProviderProps) {\n const connection = useMemo(() => new Connection(endpoint, commitmentOrConfig), [commitmentOrConfig, endpoint]);\n const cache = useMemo(() => userCache ?? createAsyncStorageCache<WalletAuthorization>(), [userCache]);\n\n const storeRef = useRef<AuthorizationStore | null>(null);\n if (!storeRef.current) {\n storeRef.current = createAuthorizationStore({ cache });\n }\n const store = storeRef.current;\n\n useEffect(() => {\n store.fetch().catch(console.error);\n }, [store]);\n\n return (\n <MobileWalletProviderContext.Provider\n value={useMemo(\n () => ({\n cache,\n chain,\n connection,\n identity,\n store,\n }),\n [cache, chain, connection, identity, store],\n )}\n >\n {children}\n </MobileWalletProviderContext.Provider>\n );\n}\n","import { PublicKey } from '@solana/web3.js';\nimport { Base64EncodedAddress } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { toUint8Array } from 'js-base64';\n\nexport function getPublicKeyFromAddress(address: Base64EncodedAddress): PublicKey {\n const publicKeyByteArray = toUint8Array(address);\n\n return new PublicKey(publicKeyByteArray);\n}\n","import { Account as AuthorizedAccount } from '@solana-mobile/mobile-wallet-adapter-protocol';\n\nimport { getPublicKeyFromAddress } from './get-public-key-from-address';\nimport { Account } from './use-authorization';\n\nfunction ellipsify(str = '', len = 4, delimiter = '..') {\n const limit = len * 2 + delimiter.length;\n\n return str.length > limit ? str.slice(0, len) + delimiter + str.slice(-len) : str;\n}\n\nexport function getAccountFromAuthorizedAccount(account: AuthorizedAccount): Account {\n const address = getPublicKeyFromAddress(account.address);\n\n return {\n address,\n addressBase64: account.address,\n icon: account.icon,\n label: account.label ?? ellipsify(address.toString(), 8),\n publicKey: address,\n };\n}\n","import { AuthorizationResult } from '@solana-mobile/mobile-wallet-adapter-protocol';\n\nimport { getAccountFromAuthorizedAccount } from './get-account-from-authorized-account';\nimport { Account, WalletAuthorization } from './use-authorization';\n\nexport function getAuthorizationFromAuthorizationResult(\n authorizationResult: AuthorizationResult,\n previouslySelectedAccount?: Account,\n): WalletAuthorization {\n let selectedAccount: Account;\n if (\n // We have yet to select an account.\n previouslySelectedAccount == null ||\n // The previously selected account is no longer in the set of authorized addresses.\n !authorizationResult.accounts.some(({ address }) => address === previouslySelectedAccount.addressBase64)\n ) {\n const firstAccount = authorizationResult.accounts[0];\n selectedAccount = getAccountFromAuthorizedAccount(firstAccount);\n } else {\n selectedAccount = previouslySelectedAccount;\n }\n return {\n accounts: authorizationResult.accounts.map(getAccountFromAuthorizedAccount),\n authToken: authorizationResult.auth_token,\n selectedAccount,\n };\n}\n","import { useStore } from '@nanostores/react';\nimport { useMemo } from 'react';\n\nimport { AuthorizationStore } from './authorization-store';\n\nexport function useAuthorizationStore({ store }: { store: AuthorizationStore }) {\n const accounts = useStore(store.$accounts);\n const authToken = useStore(store.$authToken);\n const selectedAccount = useStore(store.$selectedAccount);\n\n return useMemo(\n () => ({\n accounts,\n authToken,\n persist: store.persist,\n selectedAccount,\n }),\n [accounts, authToken, store.persist, selectedAccount],\n );\n}\n","import { PublicKey } from '@solana/web3.js';\nimport {\n AppIdentity,\n AuthorizationResult,\n AuthorizeAPI,\n AuthToken,\n Base64EncodedAddress,\n Chain,\n DeauthorizeAPI,\n SignInPayload,\n SolanaMobileWalletAdapterProtocolError,\n SolanaMobileWalletAdapterProtocolErrorCode,\n} from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { WalletIcon } from '@wallet-standard/core';\nimport { useCallback, useMemo } from 'react';\n\nimport { AuthorizationStore } from './authorization-store';\nimport { Cache } from './cache';\nimport { getAuthorizationFromAuthorizationResult } from './get-authorization-from-authorization-result';\nimport { useAuthorizationStore } from './use-authorization-store';\n\nexport type Account = Readonly<{\n address: PublicKey;\n addressBase64: Base64EncodedAddress;\n icon?: WalletIcon;\n label?: string;\n /**\n * @deprecated Use `address` instead.\n */\n publicKey: PublicKey;\n}>;\n\nexport type WalletAuthorization = Readonly<{\n accounts: Account[];\n authToken: AuthToken;\n selectedAccount: Account;\n}>;\nexport type WalletAuthorizationCache = Cache<WalletAuthorization | undefined>;\nexport type WalletAuthorizationProps = Readonly<{\n cache?: WalletAuthorizationCache;\n chain: Chain;\n identity: AppIdentity;\n store: AuthorizationStore;\n}>;\nexport function useAuthorization({ chain, identity, store }: WalletAuthorizationProps) {\n const { accounts, authToken, persist, selectedAccount } = useAuthorizationStore({\n store,\n });\n\n const handleAuthorizationResult = useCallback(\n async (authorizationResult: AuthorizationResult): Promise<WalletAuthorization> => {\n const nextAuthorization = getAuthorizationFromAuthorizationResult(authorizationResult, selectedAccount);\n await persist(nextAuthorization);\n return nextAuthorization;\n },\n [selectedAccount, persist],\n );\n\n const authorizeSession = useCallback(\n async (wallet: AuthorizeAPI) => {\n try {\n const authorizationResult = await wallet.authorize({\n auth_token: authToken,\n chain,\n identity,\n });\n return (await handleAuthorizationResult(authorizationResult)).selectedAccount;\n } catch (error) {\n if (\n error instanceof SolanaMobileWalletAdapterProtocolError &&\n error.code === SolanaMobileWalletAdapterProtocolErrorCode.ERROR_AUTHORIZATION_FAILED\n ) {\n const retryResult = await wallet.authorize({\n chain,\n identity,\n });\n return (await handleAuthorizationResult(retryResult)).selectedAccount;\n }\n throw error;\n }\n },\n [authToken, chain, identity, handleAuthorizationResult],\n );\n\n const authorizeSessionWithSignIn = useCallback(\n async (wallet: AuthorizeAPI, signInPayload: SignInPayload) => {\n try {\n const authorizationResult = await wallet.authorize({\n auth_token: authToken,\n chain,\n identity,\n sign_in_payload: signInPayload,\n });\n return (await handleAuthorizationResult(authorizationResult)).selectedAccount;\n } catch (error) {\n if (\n error instanceof SolanaMobileWalletAdapterProtocolError &&\n error.code === SolanaMobileWalletAdapterProtocolErrorCode.ERROR_AUTHORIZATION_FAILED\n ) {\n const retryResult = await wallet.authorize({\n chain,\n identity,\n sign_in_payload: signInPayload,\n });\n return (await handleAuthorizationResult(retryResult)).selectedAccount;\n }\n throw error;\n }\n },\n [authToken, chain, identity, handleAuthorizationResult],\n );\n\n const deauthorizeSession = useCallback(\n async (wallet: DeauthorizeAPI) => {\n if (authToken == null) {\n return;\n }\n await wallet.deauthorize({ auth_token: authToken });\n await persist(null);\n },\n [authToken, persist],\n );\n\n const deauthorizeSessions = useCallback(async () => {\n await persist(null);\n }, [persist]);\n\n return useMemo(\n () => ({\n accounts,\n authorizeSession,\n authorizeSessionWithSignIn,\n deauthorizeSession,\n deauthorizeSessions,\n selectedAccount,\n }),\n [\n accounts,\n authorizeSession,\n authorizeSessionWithSignIn,\n deauthorizeSession,\n deauthorizeSessions,\n selectedAccount,\n ],\n );\n}\n","import { Transaction, TransactionSignature, VersionedTransaction } from '@solana/web3.js';\nimport { AuthorizeAPI, SignInPayload } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { transact } from '@solana-mobile/mobile-wallet-adapter-protocol-web3js';\nimport { useCallback, useContext, useMemo } from 'react';\n\nimport { MobileWalletProviderContext } from './mobile-wallet-provider';\nimport { Account, useAuthorization } from './use-authorization';\n\nexport function useMobileWallet() {\n const ctx = useContext(MobileWalletProviderContext);\n const {\n authorizeSessionWithSignIn,\n authorizeSession,\n deauthorizeSessions,\n selectedAccount,\n accounts,\n deauthorizeSession,\n } = useAuthorization(ctx);\n\n const connect = useCallback(\n async (): Promise<Account> => await transact(async wallet => await authorizeSession(wallet)),\n [authorizeSession],\n );\n\n const connectAnd = useCallback(\n async (cb: (wallet: AuthorizeAPI) => Promise<Account | void>): Promise<Account | void> => {\n return await transact(async wallet => await cb(wallet));\n },\n [],\n );\n\n const signIn = useCallback(\n async (signInPayload: SignInPayload): Promise<Account> =>\n await transact(async wallet => await authorizeSessionWithSignIn(wallet, signInPayload)),\n [authorizeSessionWithSignIn],\n );\n\n const disconnect = useCallback(async (): Promise<void> => await deauthorizeSessions(), [deauthorizeSessions]);\n\n const signAndSendTransaction = useCallback(\n async (\n transaction: Transaction | VersionedTransaction,\n minContextSlot: number,\n ): Promise<TransactionSignature> =>\n await transact(async wallet => {\n await authorizeSession(wallet);\n const signatures = await wallet.signAndSendTransactions({\n minContextSlot,\n transactions: [transaction],\n });\n return signatures[0];\n }),\n [authorizeSession],\n );\n\n const signMessage = useCallback(\n async (message: Uint8Array): Promise<Uint8Array> =>\n await transact(async wallet => {\n const authResult = await authorizeSession(wallet);\n const signedMessages = await wallet.signMessages({\n addresses: [authResult.addressBase64],\n payloads: [message],\n });\n return signedMessages[0];\n }),\n [authorizeSession],\n );\n\n const signTransaction = useCallback(\n async <T extends Transaction | VersionedTransaction, K extends T | T[]>(transaction: K): Promise<K> =>\n await transact(async wallet => {\n await authorizeSession(wallet);\n const signedTxs = await wallet.signTransactions({\n transactions: Array.isArray(transaction) ? transaction : [transaction],\n });\n return Array.isArray(transaction) ? signedTxs : signedTxs[0];\n }),\n\n [authorizeSession],\n );\n\n return useMemo(\n () => ({\n ...ctx,\n account: selectedAccount,\n accounts,\n connect,\n connectAnd,\n deauthorizeSession,\n disconnect,\n signAndSendTransaction,\n signIn,\n signMessage,\n signTransaction,\n }),\n [\n accounts,\n connect,\n connectAnd,\n ctx,\n deauthorizeSession,\n disconnect,\n selectedAccount,\n signAndSendTransaction,\n signIn,\n signMessage,\n signTransaction,\n ],\n );\n}\n"]}
@@ -303,6 +303,16 @@ function useMobileWallet() {
303
303
  }),
304
304
  [authorizeSession]
305
305
  );
306
+ const signTransaction = useCallback(
307
+ async (transaction) => await transact(async (wallet) => {
308
+ await authorizeSession(wallet);
309
+ const signedTxs = await wallet.signTransactions({
310
+ transactions: Array.isArray(transaction) ? transaction : [transaction]
311
+ });
312
+ return Array.isArray(transaction) ? signedTxs : signedTxs[0];
313
+ }),
314
+ [authorizeSession]
315
+ );
306
316
  return useMemo(
307
317
  () => ({
308
318
  ...ctx,
@@ -314,7 +324,8 @@ function useMobileWallet() {
314
324
  disconnect,
315
325
  signAndSendTransaction,
316
326
  signIn,
317
- signMessage
327
+ signMessage,
328
+ signTransaction
318
329
  }),
319
330
  [
320
331
  accounts,
@@ -326,7 +337,8 @@ function useMobileWallet() {
326
337
  selectedAccount,
327
338
  signAndSendTransaction,
328
339
  signIn,
329
- signMessage
340
+ signMessage,
341
+ signTransaction
330
342
  ]
331
343
  );
332
344
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/async-storage-cache.ts","../src/authorization-store.ts","../src/mobile-wallet-provider.tsx","../src/get-public-key-from-address.ts","../src/get-account-from-authorized-account.ts","../src/get-authorization-from-authorization-result.ts","../src/use-authorization-store.ts","../src/use-authorization.ts","../src/use-mobile-wallet.ts"],"names":["PublicKey","useMemo","useCallback"],"mappings":"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","file":"index.native.mjs","sourcesContent":["import AsyncStorage from '@react-native-async-storage/async-storage';\nimport { PublicKey, PublicKeyInitData } from '@solana/web3.js';\n\nimport { Cache } from './cache';\n\nfunction cacheReviver(key: string, value: unknown) {\n if (key === 'publicKey') {\n return new PublicKey(value as PublicKeyInitData);\n } else {\n return value;\n }\n}\n\nexport class AsyncStorageCache<T> implements Cache<T> {\n constructor(private readonly storageKey: string) {}\n\n async clear(): Promise<void> {\n await AsyncStorage.removeItem(this.storageKey);\n }\n\n async get(): Promise<T | undefined> {\n const cacheFetchResult = await AsyncStorage.getItem(this.storageKey);\n if (!cacheFetchResult) {\n return undefined;\n }\n try {\n return JSON.parse(cacheFetchResult, cacheReviver) as T;\n } catch (error) {\n console.warn(`Failed to parse cached data for key ${this.storageKey}:`, error);\n return undefined;\n }\n }\n\n async set(value: T): Promise<void> {\n await AsyncStorage.setItem(this.storageKey, JSON.stringify(value));\n }\n}\n\nexport function createAsyncStorageCache<T>(storageKey = 'authorization-cache') {\n return new AsyncStorageCache<T>(storageKey);\n}\n","import { atom, computed } from 'nanostores';\n\nimport { Cache } from './cache';\nimport { WalletAuthorization } from './use-authorization';\n\nexport type AuthorizationStoreContext = {\n cache: Cache<WalletAuthorization | undefined>;\n};\n\nexport function createAuthorizationStore(context: AuthorizationStoreContext) {\n const { cache } = context;\n\n const $authorization = atom<WalletAuthorization | null>(null);\n\n const $accounts = computed($authorization, auth => auth?.accounts ?? null);\n const $authToken = computed($authorization, auth => auth?.authToken);\n const $selectedAccount = computed($authorization, auth => auth?.selectedAccount);\n\n async function fetch(): Promise<WalletAuthorization | null> {\n const result = await cache.get();\n const auth = result ?? null;\n $authorization.set(auth);\n return auth;\n }\n\n async function persist(auth: WalletAuthorization | null): Promise<void> {\n if (auth) {\n await cache.set(auth);\n } else {\n await cache.clear();\n }\n $authorization.set(auth);\n }\n\n return {\n $accounts,\n $authToken,\n $selectedAccount,\n fetch,\n persist,\n };\n}\n\nexport type AuthorizationStore = ReturnType<typeof createAuthorizationStore>;\n","import { Commitment, Connection, ConnectionConfig } from '@solana/web3.js';\nimport { AppIdentity, Chain } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport React, { createContext, type ReactNode, useEffect, useMemo, useRef } from 'react';\n\nimport { createAsyncStorageCache } from './async-storage-cache';\nimport { AuthorizationStore, createAuthorizationStore } from './authorization-store';\nimport { WalletAuthorization, WalletAuthorizationCache, WalletAuthorizationProps } from './use-authorization';\n\nexport interface MobileWalletProviderProps {\n cache?: WalletAuthorizationCache;\n chain: Chain;\n children: ReactNode;\n commitmentOrConfig?: Commitment | ConnectionConfig;\n endpoint: string;\n identity: AppIdentity;\n}\nexport interface MobileWalletProviderState extends WalletAuthorizationProps {\n connection: Connection;\n store: AuthorizationStore;\n}\n\nexport const MobileWalletProviderContext = createContext<MobileWalletProviderState>({} as MobileWalletProviderState);\nexport function MobileWalletProvider({\n cache: userCache,\n children,\n chain,\n commitmentOrConfig = { commitment: 'confirmed' },\n endpoint,\n identity,\n}: MobileWalletProviderProps) {\n const connection = useMemo(() => new Connection(endpoint, commitmentOrConfig), [commitmentOrConfig, endpoint]);\n const cache = useMemo(() => userCache ?? createAsyncStorageCache<WalletAuthorization>(), [userCache]);\n\n const storeRef = useRef<AuthorizationStore | null>(null);\n if (!storeRef.current) {\n storeRef.current = createAuthorizationStore({ cache });\n }\n const store = storeRef.current;\n\n useEffect(() => {\n store.fetch().catch(console.error);\n }, [store]);\n\n return (\n <MobileWalletProviderContext.Provider\n value={useMemo(\n () => ({\n cache,\n chain,\n connection,\n identity,\n store,\n }),\n [cache, chain, connection, identity, store],\n )}\n >\n {children}\n </MobileWalletProviderContext.Provider>\n );\n}\n","import { PublicKey } from '@solana/web3.js';\nimport { Base64EncodedAddress } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { toUint8Array } from 'js-base64';\n\nexport function getPublicKeyFromAddress(address: Base64EncodedAddress): PublicKey {\n const publicKeyByteArray = toUint8Array(address);\n\n return new PublicKey(publicKeyByteArray);\n}\n","import { Account as AuthorizedAccount } from '@solana-mobile/mobile-wallet-adapter-protocol';\n\nimport { getPublicKeyFromAddress } from './get-public-key-from-address';\nimport { Account } from './use-authorization';\n\nfunction ellipsify(str = '', len = 4, delimiter = '..') {\n const limit = len * 2 + delimiter.length;\n\n return str.length > limit ? str.slice(0, len) + delimiter + str.slice(-len) : str;\n}\n\nexport function getAccountFromAuthorizedAccount(account: AuthorizedAccount): Account {\n const address = getPublicKeyFromAddress(account.address);\n\n return {\n address,\n addressBase64: account.address,\n icon: account.icon,\n label: account.label ?? ellipsify(address.toString(), 8),\n publicKey: address,\n };\n}\n","import { AuthorizationResult } from '@solana-mobile/mobile-wallet-adapter-protocol';\n\nimport { getAccountFromAuthorizedAccount } from './get-account-from-authorized-account';\nimport { Account, WalletAuthorization } from './use-authorization';\n\nexport function getAuthorizationFromAuthorizationResult(\n authorizationResult: AuthorizationResult,\n previouslySelectedAccount?: Account,\n): WalletAuthorization {\n let selectedAccount: Account;\n if (\n // We have yet to select an account.\n previouslySelectedAccount == null ||\n // The previously selected account is no longer in the set of authorized addresses.\n !authorizationResult.accounts.some(({ address }) => address === previouslySelectedAccount.addressBase64)\n ) {\n const firstAccount = authorizationResult.accounts[0];\n selectedAccount = getAccountFromAuthorizedAccount(firstAccount);\n } else {\n selectedAccount = previouslySelectedAccount;\n }\n return {\n accounts: authorizationResult.accounts.map(getAccountFromAuthorizedAccount),\n authToken: authorizationResult.auth_token,\n selectedAccount,\n };\n}\n","import { useStore } from '@nanostores/react';\nimport { useMemo } from 'react';\n\nimport { AuthorizationStore } from './authorization-store';\n\nexport function useAuthorizationStore({ store }: { store: AuthorizationStore }) {\n const accounts = useStore(store.$accounts);\n const authToken = useStore(store.$authToken);\n const selectedAccount = useStore(store.$selectedAccount);\n\n return useMemo(\n () => ({\n accounts,\n authToken,\n persist: store.persist,\n selectedAccount,\n }),\n [accounts, authToken, store.persist, selectedAccount],\n );\n}\n","import { PublicKey } from '@solana/web3.js';\nimport {\n AppIdentity,\n AuthorizationResult,\n AuthorizeAPI,\n AuthToken,\n Base64EncodedAddress,\n Chain,\n DeauthorizeAPI,\n SignInPayload,\n SolanaMobileWalletAdapterProtocolError,\n SolanaMobileWalletAdapterProtocolErrorCode,\n} from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { WalletIcon } from '@wallet-standard/core';\nimport { useCallback, useMemo } from 'react';\n\nimport { AuthorizationStore } from './authorization-store';\nimport { Cache } from './cache';\nimport { getAuthorizationFromAuthorizationResult } from './get-authorization-from-authorization-result';\nimport { useAuthorizationStore } from './use-authorization-store';\n\nexport type Account = Readonly<{\n address: PublicKey;\n addressBase64: Base64EncodedAddress;\n icon?: WalletIcon;\n label?: string;\n /**\n * @deprecated Use `address` instead.\n */\n publicKey: PublicKey;\n}>;\n\nexport type WalletAuthorization = Readonly<{\n accounts: Account[];\n authToken: AuthToken;\n selectedAccount: Account;\n}>;\nexport type WalletAuthorizationCache = Cache<WalletAuthorization | undefined>;\nexport type WalletAuthorizationProps = Readonly<{\n cache?: WalletAuthorizationCache;\n chain: Chain;\n identity: AppIdentity;\n store: AuthorizationStore;\n}>;\nexport function useAuthorization({ chain, identity, store }: WalletAuthorizationProps) {\n const { accounts, authToken, persist, selectedAccount } = useAuthorizationStore({\n store,\n });\n\n const handleAuthorizationResult = useCallback(\n async (authorizationResult: AuthorizationResult): Promise<WalletAuthorization> => {\n const nextAuthorization = getAuthorizationFromAuthorizationResult(authorizationResult, selectedAccount);\n await persist(nextAuthorization);\n return nextAuthorization;\n },\n [selectedAccount, persist],\n );\n\n const authorizeSession = useCallback(\n async (wallet: AuthorizeAPI) => {\n try {\n const authorizationResult = await wallet.authorize({\n auth_token: authToken,\n chain,\n identity,\n });\n return (await handleAuthorizationResult(authorizationResult)).selectedAccount;\n } catch (error) {\n if (\n error instanceof SolanaMobileWalletAdapterProtocolError &&\n error.code === SolanaMobileWalletAdapterProtocolErrorCode.ERROR_AUTHORIZATION_FAILED\n ) {\n const retryResult = await wallet.authorize({\n chain,\n identity,\n });\n return (await handleAuthorizationResult(retryResult)).selectedAccount;\n }\n throw error;\n }\n },\n [authToken, chain, identity, handleAuthorizationResult],\n );\n\n const authorizeSessionWithSignIn = useCallback(\n async (wallet: AuthorizeAPI, signInPayload: SignInPayload) => {\n try {\n const authorizationResult = await wallet.authorize({\n auth_token: authToken,\n chain,\n identity,\n sign_in_payload: signInPayload,\n });\n return (await handleAuthorizationResult(authorizationResult)).selectedAccount;\n } catch (error) {\n if (\n error instanceof SolanaMobileWalletAdapterProtocolError &&\n error.code === SolanaMobileWalletAdapterProtocolErrorCode.ERROR_AUTHORIZATION_FAILED\n ) {\n const retryResult = await wallet.authorize({\n chain,\n identity,\n sign_in_payload: signInPayload,\n });\n return (await handleAuthorizationResult(retryResult)).selectedAccount;\n }\n throw error;\n }\n },\n [authToken, chain, identity, handleAuthorizationResult],\n );\n\n const deauthorizeSession = useCallback(\n async (wallet: DeauthorizeAPI) => {\n if (authToken == null) {\n return;\n }\n await wallet.deauthorize({ auth_token: authToken });\n await persist(null);\n },\n [authToken, persist],\n );\n\n const deauthorizeSessions = useCallback(async () => {\n await persist(null);\n }, [persist]);\n\n return useMemo(\n () => ({\n accounts,\n authorizeSession,\n authorizeSessionWithSignIn,\n deauthorizeSession,\n deauthorizeSessions,\n selectedAccount,\n }),\n [\n accounts,\n authorizeSession,\n authorizeSessionWithSignIn,\n deauthorizeSession,\n deauthorizeSessions,\n selectedAccount,\n ],\n );\n}\n","import { Transaction, TransactionSignature, VersionedTransaction } from '@solana/web3.js';\nimport { AuthorizeAPI, SignInPayload } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { transact } from '@solana-mobile/mobile-wallet-adapter-protocol-web3js';\nimport { useCallback, useContext, useMemo } from 'react';\n\nimport { MobileWalletProviderContext } from './mobile-wallet-provider';\nimport { Account, useAuthorization } from './use-authorization';\n\nexport function useMobileWallet() {\n const ctx = useContext(MobileWalletProviderContext);\n const {\n authorizeSessionWithSignIn,\n authorizeSession,\n deauthorizeSessions,\n selectedAccount,\n accounts,\n deauthorizeSession,\n } = useAuthorization(ctx);\n\n const connect = useCallback(\n async (): Promise<Account> => await transact(async wallet => await authorizeSession(wallet)),\n [authorizeSession],\n );\n\n const connectAnd = useCallback(\n async (cb: (wallet: AuthorizeAPI) => Promise<Account | void>): Promise<Account | void> => {\n return await transact(async wallet => await cb(wallet));\n },\n [],\n );\n\n const signIn = useCallback(\n async (signInPayload: SignInPayload): Promise<Account> =>\n await transact(async wallet => await authorizeSessionWithSignIn(wallet, signInPayload)),\n [authorizeSessionWithSignIn],\n );\n\n const disconnect = useCallback(async (): Promise<void> => await deauthorizeSessions(), [deauthorizeSessions]);\n\n const signAndSendTransaction = useCallback(\n async (\n transaction: Transaction | VersionedTransaction,\n minContextSlot: number,\n ): Promise<TransactionSignature> =>\n await transact(async wallet => {\n await authorizeSession(wallet);\n const signatures = await wallet.signAndSendTransactions({\n minContextSlot,\n transactions: [transaction],\n });\n return signatures[0];\n }),\n [authorizeSession],\n );\n\n const signMessage = useCallback(\n async (message: Uint8Array): Promise<Uint8Array> =>\n await transact(async wallet => {\n const authResult = await authorizeSession(wallet);\n const signedMessages = await wallet.signMessages({\n addresses: [authResult.addressBase64],\n payloads: [message],\n });\n return signedMessages[0];\n }),\n [authorizeSession],\n );\n\n return useMemo(\n () => ({\n ...ctx,\n account: selectedAccount,\n accounts,\n connect,\n connectAnd,\n deauthorizeSession,\n disconnect,\n signAndSendTransaction,\n signIn,\n signMessage,\n }),\n [\n accounts,\n connect,\n connectAnd,\n ctx,\n deauthorizeSession,\n disconnect,\n selectedAccount,\n signAndSendTransaction,\n signIn,\n signMessage,\n ],\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/async-storage-cache.ts","../src/authorization-store.ts","../src/mobile-wallet-provider.tsx","../src/get-public-key-from-address.ts","../src/get-account-from-authorized-account.ts","../src/get-authorization-from-authorization-result.ts","../src/use-authorization-store.ts","../src/use-authorization.ts","../src/use-mobile-wallet.ts"],"names":["PublicKey","useMemo","useCallback"],"mappings":";;;;;;;;;;;;;AAKA,SAAS,YAAA,CAAa,KAAa,KAAA,EAAgB;AAC/C,EAAA,IAAI,QAAQ,WAAA,EAAa;AACrB,IAAA,OAAO,IAAI,UAAU,KAA0B,CAAA;AAAA,EACnD,CAAA,MAAO;AACH,IAAA,OAAO,KAAA;AAAA,EACX;AACJ;AAEO,IAAM,oBAAN,MAA+C;AAAA,EAClD,YAA6B,UAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AAAA,EAAqB;AAAA,EAElD,MAAM,KAAA,GAAuB;AACzB,IAAA,MAAM,YAAA,CAAa,UAAA,CAAW,IAAA,CAAK,UAAU,CAAA;AAAA,EACjD;AAAA,EAEA,MAAM,GAAA,GAA8B;AAChC,IAAA,MAAM,gBAAA,GAAmB,MAAM,YAAA,CAAa,OAAA,CAAQ,KAAK,UAAU,CAAA;AACnE,IAAA,IAAI,CAAC,gBAAA,EAAkB;AACnB,MAAA,OAAO,MAAA;AAAA,IACX;AACA,IAAA,IAAI;AACA,MAAA,OAAO,IAAA,CAAK,KAAA,CAAM,gBAAA,EAAkB,YAAY,CAAA;AAAA,IACpD,SAAS,KAAA,EAAO;AACZ,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,oCAAA,EAAuC,IAAA,CAAK,UAAU,KAAK,KAAK,CAAA;AAC7E,MAAA,OAAO,MAAA;AAAA,IACX;AAAA,EACJ;AAAA,EAEA,MAAM,IAAI,KAAA,EAAyB;AAC/B,IAAA,MAAM,aAAa,OAAA,CAAQ,IAAA,CAAK,YAAY,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA,EACrE;AACJ,CAAA;AAEO,SAAS,uBAAA,CAA2B,aAAa,qBAAA,EAAuB;AAC3E,EAAA,OAAO,IAAI,kBAAqB,UAAU,CAAA;AAC9C;AC/BO,SAAS,yBAAyB,OAAA,EAAoC;AACzE,EAAA,MAAM,EAAE,OAAM,GAAI,OAAA;AAElB,EAAA,MAAM,cAAA,GAAiB,KAAiC,IAAI,CAAA;AAE5D,EAAA,MAAM,YAAY,QAAA,CAAS,cAAA,EAAgB,CAAA,IAAA,KAAQ,IAAA,EAAM,YAAY,IAAI,CAAA;AACzE,EAAA,MAAM,UAAA,GAAa,QAAA,CAAS,cAAA,EAAgB,CAAA,IAAA,KAAQ,MAAM,SAAS,CAAA;AACnE,EAAA,MAAM,gBAAA,GAAmB,QAAA,CAAS,cAAA,EAAgB,CAAA,IAAA,KAAQ,MAAM,eAAe,CAAA;AAE/E,EAAA,eAAe,KAAA,GAA6C;AACxD,IAAA,MAAM,MAAA,GAAS,MAAM,KAAA,CAAM,GAAA,EAAI;AAC/B,IAAA,MAAM,OAAO,MAAA,IAAU,IAAA;AACvB,IAAA,cAAA,CAAe,IAAI,IAAI,CAAA;AACvB,IAAA,OAAO,IAAA;AAAA,EACX;AAEA,EAAA,eAAe,QAAQ,IAAA,EAAiD;AACpE,IAAA,IAAI,IAAA,EAAM;AACN,MAAA,MAAM,KAAA,CAAM,IAAI,IAAI,CAAA;AAAA,IACxB,CAAA,MAAO;AACH,MAAA,MAAM,MAAM,KAAA,EAAM;AAAA,IACtB;AACA,IAAA,cAAA,CAAe,IAAI,IAAI,CAAA;AAAA,EAC3B;AAEA,EAAA,OAAO;AAAA,IACH,SAAA;AAAA,IACA,UAAA;AAAA,IACA,gBAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACJ;AACJ;;;ACpBO,IAAM,2BAAA,GAA8B,aAAA,CAAyC,EAA+B;AAC5G,SAAS,oBAAA,CAAqB;AAAA,EACjC,KAAA,EAAO,SAAA;AAAA,EACP,QAAA;AAAA,EACA,KAAA;AAAA,EACA,kBAAA,GAAqB,EAAE,UAAA,EAAY,WAAA,EAAY;AAAA,EAC/C,QAAA;AAAA,EACA;AACJ,CAAA,EAA8B;AAC1B,EAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,MAAM,IAAI,UAAA,CAAW,QAAA,EAAU,kBAAkB,CAAA,EAAG,CAAC,kBAAA,EAAoB,QAAQ,CAAC,CAAA;AAC7G,EAAA,MAAM,KAAA,GAAQ,QAAQ,MAAM,SAAA,IAAa,yBAA6C,EAAG,CAAC,SAAS,CAAC,CAAA;AAEpG,EAAA,MAAM,QAAA,GAAW,OAAkC,IAAI,CAAA;AACvD,EAAA,IAAI,CAAC,SAAS,OAAA,EAAS;AACnB,IAAA,QAAA,CAAS,OAAA,GAAU,wBAAA,CAAyB,EAAE,KAAA,EAAO,CAAA;AAAA,EACzD;AACA,EAAA,MAAM,QAAQ,QAAA,CAAS,OAAA;AAEvB,EAAA,SAAA,CAAU,MAAM;AACZ,IAAA,KAAA,CAAM,KAAA,EAAM,CAAE,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA;AAAA,EACrC,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,uBACI,KAAA,CAAA,aAAA;AAAA,IAAC,2BAAA,CAA4B,QAAA;AAAA,IAA5B;AAAA,MACG,KAAA,EAAO,OAAA;AAAA,QACH,OAAO;AAAA,UACH,KAAA;AAAA,UACA,KAAA;AAAA,UACA,UAAA;AAAA,UACA,QAAA;AAAA,UACA;AAAA,SACJ,CAAA;AAAA,QACA,CAAC,KAAA,EAAO,KAAA,EAAO,UAAA,EAAY,UAAU,KAAK;AAAA;AAC9C,KAAA;AAAA,IAEC;AAAA,GACL;AAER;ACvDO,SAAS,wBAAwB,OAAA,EAA0C;AAC9E,EAAA,MAAM,kBAAA,GAAqB,aAAa,OAAO,CAAA;AAE/C,EAAA,OAAO,IAAIA,UAAU,kBAAkB,CAAA;AAC3C;;;ACHA,SAAS,UAAU,GAAA,GAAM,EAAA,EAAI,GAAA,GAAM,CAAA,EAAG,YAAY,IAAA,EAAM;AACpD,EAAA,MAAM,KAAA,GAAQ,GAAA,GAAM,CAAA,GAAI,SAAA,CAAU,MAAA;AAElC,EAAA,OAAO,GAAA,CAAI,MAAA,GAAS,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA,GAAI,SAAA,GAAY,GAAA,CAAI,KAAA,CAAM,CAAC,GAAG,CAAA,GAAI,GAAA;AAClF;AAEO,SAAS,gCAAgC,OAAA,EAAqC;AACjF,EAAA,MAAM,OAAA,GAAU,uBAAA,CAAwB,OAAA,CAAQ,OAAO,CAAA;AAEvD,EAAA,OAAO;AAAA,IACH,OAAA;AAAA,IACA,eAAe,OAAA,CAAQ,OAAA;AAAA,IACvB,MAAM,OAAA,CAAQ,IAAA;AAAA,IACd,OAAO,OAAA,CAAQ,KAAA,IAAS,UAAU,OAAA,CAAQ,QAAA,IAAY,CAAC,CAAA;AAAA,IACvD,SAAA,EAAW;AAAA,GACf;AACJ;;;AChBO,SAAS,uCAAA,CACZ,qBACA,yBAAA,EACmB;AACnB,EAAA,IAAI,eAAA;AACJ,EAAA;AAAA;AAAA,IAEI,yBAAA,IAA6B,IAAA;AAAA,IAE7B,CAAC,mBAAA,CAAoB,QAAA,CAAS,IAAA,CAAK,CAAC,EAAE,OAAA,EAAQ,KAAM,OAAA,KAAY,yBAAA,CAA0B,aAAa;AAAA,IACzG;AACE,IAAA,MAAM,YAAA,GAAe,mBAAA,CAAoB,QAAA,CAAS,CAAC,CAAA;AACnD,IAAA,eAAA,GAAkB,gCAAgC,YAAY,CAAA;AAAA,EAClE,CAAA,MAAO;AACH,IAAA,eAAA,GAAkB,yBAAA;AAAA,EACtB;AACA,EAAA,OAAO;AAAA,IACH,QAAA,EAAU,mBAAA,CAAoB,QAAA,CAAS,GAAA,CAAI,+BAA+B,CAAA;AAAA,IAC1E,WAAW,mBAAA,CAAoB,UAAA;AAAA,IAC/B;AAAA,GACJ;AACJ;ACrBO,SAAS,qBAAA,CAAsB,EAAE,KAAA,EAAM,EAAkC;AAC5E,EAAA,MAAM,QAAA,GAAW,QAAA,CAAS,KAAA,CAAM,SAAS,CAAA;AACzC,EAAA,MAAM,SAAA,GAAY,QAAA,CAAS,KAAA,CAAM,UAAU,CAAA;AAC3C,EAAA,MAAM,eAAA,GAAkB,QAAA,CAAS,KAAA,CAAM,gBAAgB,CAAA;AAEvD,EAAA,OAAOC,OAAAA;AAAA,IACH,OAAO;AAAA,MACH,QAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAS,KAAA,CAAM,OAAA;AAAA,MACf;AAAA,KACJ,CAAA;AAAA,IACA,CAAC,QAAA,EAAU,SAAA,EAAW,KAAA,CAAM,SAAS,eAAe;AAAA,GACxD;AACJ;;;ACyBO,SAAS,gBAAA,CAAiB,EAAE,KAAA,EAAO,QAAA,EAAU,OAAM,EAA6B;AACnF,EAAA,MAAM,EAAE,QAAA,EAAU,SAAA,EAAW,OAAA,EAAS,eAAA,KAAoB,qBAAA,CAAsB;AAAA,IAC5E;AAAA,GACH,CAAA;AAED,EAAA,MAAM,yBAAA,GAA4B,WAAA;AAAA,IAC9B,OAAO,mBAAA,KAA2E;AAC9E,MAAA,MAAM,iBAAA,GAAoB,uCAAA,CAAwC,mBAAA,EAAqB,eAAe,CAAA;AACtG,MAAA,MAAM,QAAQ,iBAAiB,CAAA;AAC/B,MAAA,OAAO,iBAAA;AAAA,IACX,CAAA;AAAA,IACA,CAAC,iBAAiB,OAAO;AAAA,GAC7B;AAEA,EAAA,MAAM,gBAAA,GAAmB,WAAA;AAAA,IACrB,OAAO,MAAA,KAAyB;AAC5B,MAAA,IAAI;AACA,QAAA,MAAM,mBAAA,GAAsB,MAAM,MAAA,CAAO,SAAA,CAAU;AAAA,UAC/C,UAAA,EAAY,SAAA;AAAA,UACZ,KAAA;AAAA,UACA;AAAA,SACH,CAAA;AACD,QAAA,OAAA,CAAQ,MAAM,yBAAA,CAA0B,mBAAmB,CAAA,EAAG,eAAA;AAAA,MAClE,SAAS,KAAA,EAAO;AACZ,QAAA,IACI,KAAA,YAAiB,sCAAA,IACjB,KAAA,CAAM,IAAA,KAAS,2CAA2C,0BAAA,EAC5D;AACE,UAAA,MAAM,WAAA,GAAc,MAAM,MAAA,CAAO,SAAA,CAAU;AAAA,YACvC,KAAA;AAAA,YACA;AAAA,WACH,CAAA;AACD,UAAA,OAAA,CAAQ,MAAM,yBAAA,CAA0B,WAAW,CAAA,EAAG,eAAA;AAAA,QAC1D;AACA,QAAA,MAAM,KAAA;AAAA,MACV;AAAA,IACJ,CAAA;AAAA,IACA,CAAC,SAAA,EAAW,KAAA,EAAO,QAAA,EAAU,yBAAyB;AAAA,GAC1D;AAEA,EAAA,MAAM,0BAAA,GAA6B,WAAA;AAAA,IAC/B,OAAO,QAAsB,aAAA,KAAiC;AAC1D,MAAA,IAAI;AACA,QAAA,MAAM,mBAAA,GAAsB,MAAM,MAAA,CAAO,SAAA,CAAU;AAAA,UAC/C,UAAA,EAAY,SAAA;AAAA,UACZ,KAAA;AAAA,UACA,QAAA;AAAA,UACA,eAAA,EAAiB;AAAA,SACpB,CAAA;AACD,QAAA,OAAA,CAAQ,MAAM,yBAAA,CAA0B,mBAAmB,CAAA,EAAG,eAAA;AAAA,MAClE,SAAS,KAAA,EAAO;AACZ,QAAA,IACI,KAAA,YAAiB,sCAAA,IACjB,KAAA,CAAM,IAAA,KAAS,2CAA2C,0BAAA,EAC5D;AACE,UAAA,MAAM,WAAA,GAAc,MAAM,MAAA,CAAO,SAAA,CAAU;AAAA,YACvC,KAAA;AAAA,YACA,QAAA;AAAA,YACA,eAAA,EAAiB;AAAA,WACpB,CAAA;AACD,UAAA,OAAA,CAAQ,MAAM,yBAAA,CAA0B,WAAW,CAAA,EAAG,eAAA;AAAA,QAC1D;AACA,QAAA,MAAM,KAAA;AAAA,MACV;AAAA,IACJ,CAAA;AAAA,IACA,CAAC,SAAA,EAAW,KAAA,EAAO,QAAA,EAAU,yBAAyB;AAAA,GAC1D;AAEA,EAAA,MAAM,kBAAA,GAAqB,WAAA;AAAA,IACvB,OAAO,MAAA,KAA2B;AAC9B,MAAA,IAAI,aAAa,IAAA,EAAM;AACnB,QAAA;AAAA,MACJ;AACA,MAAA,MAAM,MAAA,CAAO,WAAA,CAAY,EAAE,UAAA,EAAY,WAAW,CAAA;AAClD,MAAA,MAAM,QAAQ,IAAI,CAAA;AAAA,IACtB,CAAA;AAAA,IACA,CAAC,WAAW,OAAO;AAAA,GACvB;AAEA,EAAA,MAAM,mBAAA,GAAsB,YAAY,YAAY;AAChD,IAAA,MAAM,QAAQ,IAAI,CAAA;AAAA,EACtB,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,OAAOA,OAAAA;AAAA,IACH,OAAO;AAAA,MACH,QAAA;AAAA,MACA,gBAAA;AAAA,MACA,0BAAA;AAAA,MACA,kBAAA;AAAA,MACA,mBAAA;AAAA,MACA;AAAA,KACJ,CAAA;AAAA,IACA;AAAA,MACI,QAAA;AAAA,MACA,gBAAA;AAAA,MACA,0BAAA;AAAA,MACA,kBAAA;AAAA,MACA,mBAAA;AAAA,MACA;AAAA;AACJ,GACJ;AACJ;ACzIO,SAAS,eAAA,GAAkB;AAC9B,EAAA,MAAM,GAAA,GAAM,WAAW,2BAA2B,CAAA;AAClD,EAAA,MAAM;AAAA,IACF,0BAAA;AAAA,IACA,gBAAA;AAAA,IACA,mBAAA;AAAA,IACA,eAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACJ,GAAI,iBAAiB,GAAG,CAAA;AAExB,EAAA,MAAM,OAAA,GAAUC,WAAAA;AAAA,IACZ,YAA8B,MAAM,QAAA,CAAS,OAAM,WAAU,MAAM,gBAAA,CAAiB,MAAM,CAAC,CAAA;AAAA,IAC3F,CAAC,gBAAgB;AAAA,GACrB;AAEA,EAAA,MAAM,UAAA,GAAaA,WAAAA;AAAA,IACf,OAAO,EAAA,KAAmF;AACtF,MAAA,OAAO,MAAM,QAAA,CAAS,OAAM,WAAU,MAAM,EAAA,CAAG,MAAM,CAAC,CAAA;AAAA,IAC1D,CAAA;AAAA,IACA;AAAC,GACL;AAEA,EAAA,MAAM,MAAA,GAASA,WAAAA;AAAA,IACX,OAAO,aAAA,KACH,MAAM,QAAA,CAAS,OAAM,WAAU,MAAM,0BAAA,CAA2B,MAAA,EAAQ,aAAa,CAAC,CAAA;AAAA,IAC1F,CAAC,0BAA0B;AAAA,GAC/B;AAEA,EAAA,MAAM,UAAA,GAAaA,YAAY,YAA2B,MAAM,qBAAoB,EAAG,CAAC,mBAAmB,CAAC,CAAA;AAE5G,EAAA,MAAM,sBAAA,GAAyBA,WAAAA;AAAA,IAC3B,OACI,WAAA,EACA,cAAA,KAEA,MAAM,QAAA,CAAS,OAAM,MAAA,KAAU;AAC3B,MAAA,MAAM,iBAAiB,MAAM,CAAA;AAC7B,MAAA,MAAM,UAAA,GAAa,MAAM,MAAA,CAAO,uBAAA,CAAwB;AAAA,QACpD,cAAA;AAAA,QACA,YAAA,EAAc,CAAC,WAAW;AAAA,OAC7B,CAAA;AACD,MAAA,OAAO,WAAW,CAAC,CAAA;AAAA,IACvB,CAAC,CAAA;AAAA,IACL,CAAC,gBAAgB;AAAA,GACrB;AAEA,EAAA,MAAM,WAAA,GAAcA,WAAAA;AAAA,IAChB,OAAO,OAAA,KACH,MAAM,QAAA,CAAS,OAAM,MAAA,KAAU;AAC3B,MAAA,MAAM,UAAA,GAAa,MAAM,gBAAA,CAAiB,MAAM,CAAA;AAChD,MAAA,MAAM,cAAA,GAAiB,MAAM,MAAA,CAAO,YAAA,CAAa;AAAA,QAC7C,SAAA,EAAW,CAAC,UAAA,CAAW,aAAa,CAAA;AAAA,QACpC,QAAA,EAAU,CAAC,OAAO;AAAA,OACrB,CAAA;AACD,MAAA,OAAO,eAAe,CAAC,CAAA;AAAA,IAC3B,CAAC,CAAA;AAAA,IACL,CAAC,gBAAgB;AAAA,GACrB;AAEA,EAAA,MAAM,eAAA,GAAkBA,WAAAA;AAAA,IACpB,OAAwE,WAAA,KACpE,MAAM,QAAA,CAAS,OAAM,MAAA,KAAU;AAC3B,MAAA,MAAM,iBAAiB,MAAM,CAAA;AAC7B,MAAA,MAAM,SAAA,GAAY,MAAM,MAAA,CAAO,gBAAA,CAAiB;AAAA,QAC5C,cAAc,KAAA,CAAM,OAAA,CAAQ,WAAW,CAAA,GAAI,WAAA,GAAc,CAAC,WAAW;AAAA,OACxE,CAAA;AACD,MAAA,OAAO,MAAM,OAAA,CAAQ,WAAW,CAAA,GAAI,SAAA,GAAY,UAAU,CAAC,CAAA;AAAA,IAC/D,CAAC,CAAA;AAAA,IAEL,CAAC,gBAAgB;AAAA,GACrB;AAEA,EAAA,OAAOD,OAAAA;AAAA,IACH,OAAO;AAAA,MACH,GAAG,GAAA;AAAA,MACH,OAAA,EAAS,eAAA;AAAA,MACT,QAAA;AAAA,MACA,OAAA;AAAA,MACA,UAAA;AAAA,MACA,kBAAA;AAAA,MACA,UAAA;AAAA,MACA,sBAAA;AAAA,MACA,MAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,KACJ,CAAA;AAAA,IACA;AAAA,MACI,QAAA;AAAA,MACA,OAAA;AAAA,MACA,UAAA;AAAA,MACA,GAAA;AAAA,MACA,kBAAA;AAAA,MACA,UAAA;AAAA,MACA,eAAA;AAAA,MACA,sBAAA;AAAA,MACA,MAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA;AACJ,GACJ;AACJ","file":"index.native.mjs","sourcesContent":["import AsyncStorage from '@react-native-async-storage/async-storage';\nimport { PublicKey, PublicKeyInitData } from '@solana/web3.js';\n\nimport { Cache } from './cache';\n\nfunction cacheReviver(key: string, value: unknown) {\n if (key === 'publicKey') {\n return new PublicKey(value as PublicKeyInitData);\n } else {\n return value;\n }\n}\n\nexport class AsyncStorageCache<T> implements Cache<T> {\n constructor(private readonly storageKey: string) {}\n\n async clear(): Promise<void> {\n await AsyncStorage.removeItem(this.storageKey);\n }\n\n async get(): Promise<T | undefined> {\n const cacheFetchResult = await AsyncStorage.getItem(this.storageKey);\n if (!cacheFetchResult) {\n return undefined;\n }\n try {\n return JSON.parse(cacheFetchResult, cacheReviver) as T;\n } catch (error) {\n console.warn(`Failed to parse cached data for key ${this.storageKey}:`, error);\n return undefined;\n }\n }\n\n async set(value: T): Promise<void> {\n await AsyncStorage.setItem(this.storageKey, JSON.stringify(value));\n }\n}\n\nexport function createAsyncStorageCache<T>(storageKey = 'authorization-cache') {\n return new AsyncStorageCache<T>(storageKey);\n}\n","import { atom, computed } from 'nanostores';\n\nimport { Cache } from './cache';\nimport { WalletAuthorization } from './use-authorization';\n\nexport type AuthorizationStoreContext = {\n cache: Cache<WalletAuthorization | undefined>;\n};\n\nexport function createAuthorizationStore(context: AuthorizationStoreContext) {\n const { cache } = context;\n\n const $authorization = atom<WalletAuthorization | null>(null);\n\n const $accounts = computed($authorization, auth => auth?.accounts ?? null);\n const $authToken = computed($authorization, auth => auth?.authToken);\n const $selectedAccount = computed($authorization, auth => auth?.selectedAccount);\n\n async function fetch(): Promise<WalletAuthorization | null> {\n const result = await cache.get();\n const auth = result ?? null;\n $authorization.set(auth);\n return auth;\n }\n\n async function persist(auth: WalletAuthorization | null): Promise<void> {\n if (auth) {\n await cache.set(auth);\n } else {\n await cache.clear();\n }\n $authorization.set(auth);\n }\n\n return {\n $accounts,\n $authToken,\n $selectedAccount,\n fetch,\n persist,\n };\n}\n\nexport type AuthorizationStore = ReturnType<typeof createAuthorizationStore>;\n","import { Commitment, Connection, ConnectionConfig } from '@solana/web3.js';\nimport { AppIdentity, Chain } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport React, { createContext, type ReactNode, useEffect, useMemo, useRef } from 'react';\n\nimport { createAsyncStorageCache } from './async-storage-cache';\nimport { AuthorizationStore, createAuthorizationStore } from './authorization-store';\nimport { WalletAuthorization, WalletAuthorizationCache, WalletAuthorizationProps } from './use-authorization';\n\nexport interface MobileWalletProviderProps {\n cache?: WalletAuthorizationCache;\n chain: Chain;\n children: ReactNode;\n commitmentOrConfig?: Commitment | ConnectionConfig;\n endpoint: string;\n identity: AppIdentity;\n}\nexport interface MobileWalletProviderState extends WalletAuthorizationProps {\n connection: Connection;\n store: AuthorizationStore;\n}\n\nexport const MobileWalletProviderContext = createContext<MobileWalletProviderState>({} as MobileWalletProviderState);\nexport function MobileWalletProvider({\n cache: userCache,\n children,\n chain,\n commitmentOrConfig = { commitment: 'confirmed' },\n endpoint,\n identity,\n}: MobileWalletProviderProps) {\n const connection = useMemo(() => new Connection(endpoint, commitmentOrConfig), [commitmentOrConfig, endpoint]);\n const cache = useMemo(() => userCache ?? createAsyncStorageCache<WalletAuthorization>(), [userCache]);\n\n const storeRef = useRef<AuthorizationStore | null>(null);\n if (!storeRef.current) {\n storeRef.current = createAuthorizationStore({ cache });\n }\n const store = storeRef.current;\n\n useEffect(() => {\n store.fetch().catch(console.error);\n }, [store]);\n\n return (\n <MobileWalletProviderContext.Provider\n value={useMemo(\n () => ({\n cache,\n chain,\n connection,\n identity,\n store,\n }),\n [cache, chain, connection, identity, store],\n )}\n >\n {children}\n </MobileWalletProviderContext.Provider>\n );\n}\n","import { PublicKey } from '@solana/web3.js';\nimport { Base64EncodedAddress } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { toUint8Array } from 'js-base64';\n\nexport function getPublicKeyFromAddress(address: Base64EncodedAddress): PublicKey {\n const publicKeyByteArray = toUint8Array(address);\n\n return new PublicKey(publicKeyByteArray);\n}\n","import { Account as AuthorizedAccount } from '@solana-mobile/mobile-wallet-adapter-protocol';\n\nimport { getPublicKeyFromAddress } from './get-public-key-from-address';\nimport { Account } from './use-authorization';\n\nfunction ellipsify(str = '', len = 4, delimiter = '..') {\n const limit = len * 2 + delimiter.length;\n\n return str.length > limit ? str.slice(0, len) + delimiter + str.slice(-len) : str;\n}\n\nexport function getAccountFromAuthorizedAccount(account: AuthorizedAccount): Account {\n const address = getPublicKeyFromAddress(account.address);\n\n return {\n address,\n addressBase64: account.address,\n icon: account.icon,\n label: account.label ?? ellipsify(address.toString(), 8),\n publicKey: address,\n };\n}\n","import { AuthorizationResult } from '@solana-mobile/mobile-wallet-adapter-protocol';\n\nimport { getAccountFromAuthorizedAccount } from './get-account-from-authorized-account';\nimport { Account, WalletAuthorization } from './use-authorization';\n\nexport function getAuthorizationFromAuthorizationResult(\n authorizationResult: AuthorizationResult,\n previouslySelectedAccount?: Account,\n): WalletAuthorization {\n let selectedAccount: Account;\n if (\n // We have yet to select an account.\n previouslySelectedAccount == null ||\n // The previously selected account is no longer in the set of authorized addresses.\n !authorizationResult.accounts.some(({ address }) => address === previouslySelectedAccount.addressBase64)\n ) {\n const firstAccount = authorizationResult.accounts[0];\n selectedAccount = getAccountFromAuthorizedAccount(firstAccount);\n } else {\n selectedAccount = previouslySelectedAccount;\n }\n return {\n accounts: authorizationResult.accounts.map(getAccountFromAuthorizedAccount),\n authToken: authorizationResult.auth_token,\n selectedAccount,\n };\n}\n","import { useStore } from '@nanostores/react';\nimport { useMemo } from 'react';\n\nimport { AuthorizationStore } from './authorization-store';\n\nexport function useAuthorizationStore({ store }: { store: AuthorizationStore }) {\n const accounts = useStore(store.$accounts);\n const authToken = useStore(store.$authToken);\n const selectedAccount = useStore(store.$selectedAccount);\n\n return useMemo(\n () => ({\n accounts,\n authToken,\n persist: store.persist,\n selectedAccount,\n }),\n [accounts, authToken, store.persist, selectedAccount],\n );\n}\n","import { PublicKey } from '@solana/web3.js';\nimport {\n AppIdentity,\n AuthorizationResult,\n AuthorizeAPI,\n AuthToken,\n Base64EncodedAddress,\n Chain,\n DeauthorizeAPI,\n SignInPayload,\n SolanaMobileWalletAdapterProtocolError,\n SolanaMobileWalletAdapterProtocolErrorCode,\n} from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { WalletIcon } from '@wallet-standard/core';\nimport { useCallback, useMemo } from 'react';\n\nimport { AuthorizationStore } from './authorization-store';\nimport { Cache } from './cache';\nimport { getAuthorizationFromAuthorizationResult } from './get-authorization-from-authorization-result';\nimport { useAuthorizationStore } from './use-authorization-store';\n\nexport type Account = Readonly<{\n address: PublicKey;\n addressBase64: Base64EncodedAddress;\n icon?: WalletIcon;\n label?: string;\n /**\n * @deprecated Use `address` instead.\n */\n publicKey: PublicKey;\n}>;\n\nexport type WalletAuthorization = Readonly<{\n accounts: Account[];\n authToken: AuthToken;\n selectedAccount: Account;\n}>;\nexport type WalletAuthorizationCache = Cache<WalletAuthorization | undefined>;\nexport type WalletAuthorizationProps = Readonly<{\n cache?: WalletAuthorizationCache;\n chain: Chain;\n identity: AppIdentity;\n store: AuthorizationStore;\n}>;\nexport function useAuthorization({ chain, identity, store }: WalletAuthorizationProps) {\n const { accounts, authToken, persist, selectedAccount } = useAuthorizationStore({\n store,\n });\n\n const handleAuthorizationResult = useCallback(\n async (authorizationResult: AuthorizationResult): Promise<WalletAuthorization> => {\n const nextAuthorization = getAuthorizationFromAuthorizationResult(authorizationResult, selectedAccount);\n await persist(nextAuthorization);\n return nextAuthorization;\n },\n [selectedAccount, persist],\n );\n\n const authorizeSession = useCallback(\n async (wallet: AuthorizeAPI) => {\n try {\n const authorizationResult = await wallet.authorize({\n auth_token: authToken,\n chain,\n identity,\n });\n return (await handleAuthorizationResult(authorizationResult)).selectedAccount;\n } catch (error) {\n if (\n error instanceof SolanaMobileWalletAdapterProtocolError &&\n error.code === SolanaMobileWalletAdapterProtocolErrorCode.ERROR_AUTHORIZATION_FAILED\n ) {\n const retryResult = await wallet.authorize({\n chain,\n identity,\n });\n return (await handleAuthorizationResult(retryResult)).selectedAccount;\n }\n throw error;\n }\n },\n [authToken, chain, identity, handleAuthorizationResult],\n );\n\n const authorizeSessionWithSignIn = useCallback(\n async (wallet: AuthorizeAPI, signInPayload: SignInPayload) => {\n try {\n const authorizationResult = await wallet.authorize({\n auth_token: authToken,\n chain,\n identity,\n sign_in_payload: signInPayload,\n });\n return (await handleAuthorizationResult(authorizationResult)).selectedAccount;\n } catch (error) {\n if (\n error instanceof SolanaMobileWalletAdapterProtocolError &&\n error.code === SolanaMobileWalletAdapterProtocolErrorCode.ERROR_AUTHORIZATION_FAILED\n ) {\n const retryResult = await wallet.authorize({\n chain,\n identity,\n sign_in_payload: signInPayload,\n });\n return (await handleAuthorizationResult(retryResult)).selectedAccount;\n }\n throw error;\n }\n },\n [authToken, chain, identity, handleAuthorizationResult],\n );\n\n const deauthorizeSession = useCallback(\n async (wallet: DeauthorizeAPI) => {\n if (authToken == null) {\n return;\n }\n await wallet.deauthorize({ auth_token: authToken });\n await persist(null);\n },\n [authToken, persist],\n );\n\n const deauthorizeSessions = useCallback(async () => {\n await persist(null);\n }, [persist]);\n\n return useMemo(\n () => ({\n accounts,\n authorizeSession,\n authorizeSessionWithSignIn,\n deauthorizeSession,\n deauthorizeSessions,\n selectedAccount,\n }),\n [\n accounts,\n authorizeSession,\n authorizeSessionWithSignIn,\n deauthorizeSession,\n deauthorizeSessions,\n selectedAccount,\n ],\n );\n}\n","import { Transaction, TransactionSignature, VersionedTransaction } from '@solana/web3.js';\nimport { AuthorizeAPI, SignInPayload } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { transact } from '@solana-mobile/mobile-wallet-adapter-protocol-web3js';\nimport { useCallback, useContext, useMemo } from 'react';\n\nimport { MobileWalletProviderContext } from './mobile-wallet-provider';\nimport { Account, useAuthorization } from './use-authorization';\n\nexport function useMobileWallet() {\n const ctx = useContext(MobileWalletProviderContext);\n const {\n authorizeSessionWithSignIn,\n authorizeSession,\n deauthorizeSessions,\n selectedAccount,\n accounts,\n deauthorizeSession,\n } = useAuthorization(ctx);\n\n const connect = useCallback(\n async (): Promise<Account> => await transact(async wallet => await authorizeSession(wallet)),\n [authorizeSession],\n );\n\n const connectAnd = useCallback(\n async (cb: (wallet: AuthorizeAPI) => Promise<Account | void>): Promise<Account | void> => {\n return await transact(async wallet => await cb(wallet));\n },\n [],\n );\n\n const signIn = useCallback(\n async (signInPayload: SignInPayload): Promise<Account> =>\n await transact(async wallet => await authorizeSessionWithSignIn(wallet, signInPayload)),\n [authorizeSessionWithSignIn],\n );\n\n const disconnect = useCallback(async (): Promise<void> => await deauthorizeSessions(), [deauthorizeSessions]);\n\n const signAndSendTransaction = useCallback(\n async (\n transaction: Transaction | VersionedTransaction,\n minContextSlot: number,\n ): Promise<TransactionSignature> =>\n await transact(async wallet => {\n await authorizeSession(wallet);\n const signatures = await wallet.signAndSendTransactions({\n minContextSlot,\n transactions: [transaction],\n });\n return signatures[0];\n }),\n [authorizeSession],\n );\n\n const signMessage = useCallback(\n async (message: Uint8Array): Promise<Uint8Array> =>\n await transact(async wallet => {\n const authResult = await authorizeSession(wallet);\n const signedMessages = await wallet.signMessages({\n addresses: [authResult.addressBase64],\n payloads: [message],\n });\n return signedMessages[0];\n }),\n [authorizeSession],\n );\n\n const signTransaction = useCallback(\n async <T extends Transaction | VersionedTransaction, K extends T | T[]>(transaction: K): Promise<K> =>\n await transact(async wallet => {\n await authorizeSession(wallet);\n const signedTxs = await wallet.signTransactions({\n transactions: Array.isArray(transaction) ? transaction : [transaction],\n });\n return Array.isArray(transaction) ? signedTxs : signedTxs[0];\n }),\n\n [authorizeSession],\n );\n\n return useMemo(\n () => ({\n ...ctx,\n account: selectedAccount,\n accounts,\n connect,\n connectAnd,\n deauthorizeSession,\n disconnect,\n signAndSendTransaction,\n signIn,\n signMessage,\n signTransaction,\n }),\n [\n accounts,\n connect,\n connectAnd,\n ctx,\n deauthorizeSession,\n disconnect,\n selectedAccount,\n signAndSendTransaction,\n signIn,\n signMessage,\n signTransaction,\n ],\n );\n}\n"]}
@@ -308,6 +308,16 @@ function useMobileWallet() {
308
308
  }),
309
309
  [authorizeSession]
310
310
  );
311
+ const signTransaction = React.useCallback(
312
+ async (transaction) => await mobileWalletAdapterProtocolWeb3js.transact(async (wallet) => {
313
+ await authorizeSession(wallet);
314
+ const signedTxs = await wallet.signTransactions({
315
+ transactions: Array.isArray(transaction) ? transaction : [transaction]
316
+ });
317
+ return Array.isArray(transaction) ? signedTxs : signedTxs[0];
318
+ }),
319
+ [authorizeSession]
320
+ );
311
321
  return React.useMemo(
312
322
  () => ({
313
323
  ...ctx,
@@ -319,7 +329,8 @@ function useMobileWallet() {
319
329
  disconnect,
320
330
  signAndSendTransaction,
321
331
  signIn,
322
- signMessage
332
+ signMessage,
333
+ signTransaction
323
334
  }),
324
335
  [
325
336
  accounts,
@@ -331,7 +342,8 @@ function useMobileWallet() {
331
342
  selectedAccount,
332
343
  signAndSendTransaction,
333
344
  signIn,
334
- signMessage
345
+ signMessage,
346
+ signTransaction
335
347
  ]
336
348
  );
337
349
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/async-storage-cache.ts","../src/authorization-store.ts","../src/mobile-wallet-provider.tsx","../src/get-public-key-from-address.ts","../src/get-account-from-authorized-account.ts","../src/get-authorization-from-authorization-result.ts","../src/use-authorization-store.ts","../src/use-authorization.ts","../src/use-mobile-wallet.ts"],"names":["PublicKey","AsyncStorage","atom","computed","createContext","useMemo","Connection","useRef","useEffect","React","toUint8Array","useStore","useCallback","SolanaMobileWalletAdapterProtocolError","SolanaMobileWalletAdapterProtocolErrorCode","useContext","transact"],"mappings":";;;;;;;;;;;;;;;;;;AAKA,SAAS,YAAA,CAAa,KAAa,KAAA,EAAgB;AAC/C,EAAA,IAAI,QAAQ,WAAA,EAAa;AACrB,IAAA,OAAO,IAAIA,kBAAU,KAA0B,CAAA;AAAA,EACnD,CAAA,MAAO;AACH,IAAA,OAAO,KAAA;AAAA,EACX;AACJ;AAEO,IAAM,oBAAN,MAA+C;AAAA,EAClD,YAA6B,UAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AAAA,EAAqB;AAAA,EAElD,MAAM,KAAA,GAAuB;AACzB,IAAA,MAAMC,6BAAA,CAAa,UAAA,CAAW,IAAA,CAAK,UAAU,CAAA;AAAA,EACjD;AAAA,EAEA,MAAM,GAAA,GAA8B;AAChC,IAAA,MAAM,gBAAA,GAAmB,MAAMA,6BAAA,CAAa,OAAA,CAAQ,KAAK,UAAU,CAAA;AACnE,IAAA,IAAI,CAAC,gBAAA,EAAkB;AACnB,MAAA,OAAO,MAAA;AAAA,IACX;AACA,IAAA,IAAI;AACA,MAAA,OAAO,IAAA,CAAK,KAAA,CAAM,gBAAA,EAAkB,YAAY,CAAA;AAAA,IACpD,SAAS,KAAA,EAAO;AACZ,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,oCAAA,EAAuC,IAAA,CAAK,UAAU,KAAK,KAAK,CAAA;AAC7E,MAAA,OAAO,MAAA;AAAA,IACX;AAAA,EACJ;AAAA,EAEA,MAAM,IAAI,KAAA,EAAyB;AAC/B,IAAA,MAAMA,8BAAa,OAAA,CAAQ,IAAA,CAAK,YAAY,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA,EACrE;AACJ,CAAA;AAEO,SAAS,uBAAA,CAA2B,aAAa,qBAAA,EAAuB;AAC3E,EAAA,OAAO,IAAI,kBAAqB,UAAU,CAAA;AAC9C;AC/BO,SAAS,yBAAyB,OAAA,EAAoC;AACzE,EAAA,MAAM,EAAE,OAAM,GAAI,OAAA;AAElB,EAAA,MAAM,cAAA,GAAiBC,gBAAiC,IAAI,CAAA;AAE5D,EAAA,MAAM,YAAYC,mBAAA,CAAS,cAAA,EAAgB,CAAA,IAAA,KAAQ,IAAA,EAAM,YAAY,IAAI,CAAA;AACzE,EAAA,MAAM,UAAA,GAAaA,mBAAA,CAAS,cAAA,EAAgB,CAAA,IAAA,KAAQ,MAAM,SAAS,CAAA;AACnE,EAAA,MAAM,gBAAA,GAAmBA,mBAAA,CAAS,cAAA,EAAgB,CAAA,IAAA,KAAQ,MAAM,eAAe,CAAA;AAE/E,EAAA,eAAe,KAAA,GAA6C;AACxD,IAAA,MAAM,MAAA,GAAS,MAAM,KAAA,CAAM,GAAA,EAAI;AAC/B,IAAA,MAAM,OAAO,MAAA,IAAU,IAAA;AACvB,IAAA,cAAA,CAAe,IAAI,IAAI,CAAA;AACvB,IAAA,OAAO,IAAA;AAAA,EACX;AAEA,EAAA,eAAe,QAAQ,IAAA,EAAiD;AACpE,IAAA,IAAI,IAAA,EAAM;AACN,MAAA,MAAM,KAAA,CAAM,IAAI,IAAI,CAAA;AAAA,IACxB,CAAA,MAAO;AACH,MAAA,MAAM,MAAM,KAAA,EAAM;AAAA,IACtB;AACA,IAAA,cAAA,CAAe,IAAI,IAAI,CAAA;AAAA,EAC3B;AAEA,EAAA,OAAO;AAAA,IACH,SAAA;AAAA,IACA,UAAA;AAAA,IACA,gBAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACJ;AACJ;;;ACpBO,IAAM,2BAAA,GAA8BC,mBAAA,CAAyC,EAA+B;AAC5G,SAAS,oBAAA,CAAqB;AAAA,EACjC,KAAA,EAAO,SAAA;AAAA,EACP,QAAA;AAAA,EACA,KAAA;AAAA,EACA,kBAAA,GAAqB,EAAE,UAAA,EAAY,WAAA,EAAY;AAAA,EAC/C,QAAA;AAAA,EACA;AACJ,CAAA,EAA8B;AAC1B,EAAA,MAAM,UAAA,GAAaC,aAAA,CAAQ,MAAM,IAAIC,kBAAA,CAAW,QAAA,EAAU,kBAAkB,CAAA,EAAG,CAAC,kBAAA,EAAoB,QAAQ,CAAC,CAAA;AAC7G,EAAA,MAAM,KAAA,GAAQD,cAAQ,MAAM,SAAA,IAAa,yBAA6C,EAAG,CAAC,SAAS,CAAC,CAAA;AAEpG,EAAA,MAAM,QAAA,GAAWE,aAAkC,IAAI,CAAA;AACvD,EAAA,IAAI,CAAC,SAAS,OAAA,EAAS;AACnB,IAAA,QAAA,CAAS,OAAA,GAAU,wBAAA,CAAyB,EAAE,KAAA,EAAO,CAAA;AAAA,EACzD;AACA,EAAA,MAAM,QAAQ,QAAA,CAAS,OAAA;AAEvB,EAAAC,eAAA,CAAU,MAAM;AACZ,IAAA,KAAA,CAAM,KAAA,EAAM,CAAE,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA;AAAA,EACrC,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,uBACIC,sBAAA,CAAA,aAAA;AAAA,IAAC,2BAAA,CAA4B,QAAA;AAAA,IAA5B;AAAA,MACG,KAAA,EAAOJ,aAAA;AAAA,QACH,OAAO;AAAA,UACH,KAAA;AAAA,UACA,KAAA;AAAA,UACA,UAAA;AAAA,UACA,QAAA;AAAA,UACA;AAAA,SACJ,CAAA;AAAA,QACA,CAAC,KAAA,EAAO,KAAA,EAAO,UAAA,EAAY,UAAU,KAAK;AAAA;AAC9C,KAAA;AAAA,IAEC;AAAA,GACL;AAER;ACvDO,SAAS,wBAAwB,OAAA,EAA0C;AAC9E,EAAA,MAAM,kBAAA,GAAqBK,sBAAa,OAAO,CAAA;AAE/C,EAAA,OAAO,IAAIV,kBAAU,kBAAkB,CAAA;AAC3C;;;ACHA,SAAS,UAAU,GAAA,GAAM,EAAA,EAAI,GAAA,GAAM,CAAA,EAAG,YAAY,IAAA,EAAM;AACpD,EAAA,MAAM,KAAA,GAAQ,GAAA,GAAM,CAAA,GAAI,SAAA,CAAU,MAAA;AAElC,EAAA,OAAO,GAAA,CAAI,MAAA,GAAS,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA,GAAI,SAAA,GAAY,GAAA,CAAI,KAAA,CAAM,CAAC,GAAG,CAAA,GAAI,GAAA;AAClF;AAEO,SAAS,gCAAgC,OAAA,EAAqC;AACjF,EAAA,MAAM,OAAA,GAAU,uBAAA,CAAwB,OAAA,CAAQ,OAAO,CAAA;AAEvD,EAAA,OAAO;AAAA,IACH,OAAA;AAAA,IACA,eAAe,OAAA,CAAQ,OAAA;AAAA,IACvB,MAAM,OAAA,CAAQ,IAAA;AAAA,IACd,OAAO,OAAA,CAAQ,KAAA,IAAS,UAAU,OAAA,CAAQ,QAAA,IAAY,CAAC,CAAA;AAAA,IACvD,SAAA,EAAW;AAAA,GACf;AACJ;;;AChBO,SAAS,uCAAA,CACZ,qBACA,yBAAA,EACmB;AACnB,EAAA,IAAI,eAAA;AACJ,EAAA;AAAA;AAAA,IAEI,yBAAA,IAA6B,IAAA;AAAA,IAE7B,CAAC,mBAAA,CAAoB,QAAA,CAAS,IAAA,CAAK,CAAC,EAAE,OAAA,EAAQ,KAAM,OAAA,KAAY,yBAAA,CAA0B,aAAa;AAAA,IACzG;AACE,IAAA,MAAM,YAAA,GAAe,mBAAA,CAAoB,QAAA,CAAS,CAAC,CAAA;AACnD,IAAA,eAAA,GAAkB,gCAAgC,YAAY,CAAA;AAAA,EAClE,CAAA,MAAO;AACH,IAAA,eAAA,GAAkB,yBAAA;AAAA,EACtB;AACA,EAAA,OAAO;AAAA,IACH,QAAA,EAAU,mBAAA,CAAoB,QAAA,CAAS,GAAA,CAAI,+BAA+B,CAAA;AAAA,IAC1E,WAAW,mBAAA,CAAoB,UAAA;AAAA,IAC/B;AAAA,GACJ;AACJ;ACrBO,SAAS,qBAAA,CAAsB,EAAE,KAAA,EAAM,EAAkC;AAC5E,EAAA,MAAM,QAAA,GAAWW,cAAA,CAAS,KAAA,CAAM,SAAS,CAAA;AACzC,EAAA,MAAM,SAAA,GAAYA,cAAA,CAAS,KAAA,CAAM,UAAU,CAAA;AAC3C,EAAA,MAAM,eAAA,GAAkBA,cAAA,CAAS,KAAA,CAAM,gBAAgB,CAAA;AAEvD,EAAA,OAAON,aAAAA;AAAA,IACH,OAAO;AAAA,MACH,QAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAS,KAAA,CAAM,OAAA;AAAA,MACf;AAAA,KACJ,CAAA;AAAA,IACA,CAAC,QAAA,EAAU,SAAA,EAAW,KAAA,CAAM,SAAS,eAAe;AAAA,GACxD;AACJ;;;ACyBO,SAAS,gBAAA,CAAiB,EAAE,KAAA,EAAO,QAAA,EAAU,OAAM,EAA6B;AACnF,EAAA,MAAM,EAAE,QAAA,EAAU,SAAA,EAAW,OAAA,EAAS,eAAA,KAAoB,qBAAA,CAAsB;AAAA,IAC5E;AAAA,GACH,CAAA;AAED,EAAA,MAAM,yBAAA,GAA4BO,iBAAA;AAAA,IAC9B,OAAO,mBAAA,KAA2E;AAC9E,MAAA,MAAM,iBAAA,GAAoB,uCAAA,CAAwC,mBAAA,EAAqB,eAAe,CAAA;AACtG,MAAA,MAAM,QAAQ,iBAAiB,CAAA;AAC/B,MAAA,OAAO,iBAAA;AAAA,IACX,CAAA;AAAA,IACA,CAAC,iBAAiB,OAAO;AAAA,GAC7B;AAEA,EAAA,MAAM,gBAAA,GAAmBA,iBAAA;AAAA,IACrB,OAAO,MAAA,KAAyB;AAC5B,MAAA,IAAI;AACA,QAAA,MAAM,mBAAA,GAAsB,MAAM,MAAA,CAAO,SAAA,CAAU;AAAA,UAC/C,UAAA,EAAY,SAAA;AAAA,UACZ,KAAA;AAAA,UACA;AAAA,SACH,CAAA;AACD,QAAA,OAAA,CAAQ,MAAM,yBAAA,CAA0B,mBAAmB,CAAA,EAAG,eAAA;AAAA,MAClE,SAAS,KAAA,EAAO;AACZ,QAAA,IACI,KAAA,YAAiBC,kEAAA,IACjB,KAAA,CAAM,IAAA,KAASC,uEAA2C,0BAAA,EAC5D;AACE,UAAA,MAAM,WAAA,GAAc,MAAM,MAAA,CAAO,SAAA,CAAU;AAAA,YACvC,KAAA;AAAA,YACA;AAAA,WACH,CAAA;AACD,UAAA,OAAA,CAAQ,MAAM,yBAAA,CAA0B,WAAW,CAAA,EAAG,eAAA;AAAA,QAC1D;AACA,QAAA,MAAM,KAAA;AAAA,MACV;AAAA,IACJ,CAAA;AAAA,IACA,CAAC,SAAA,EAAW,KAAA,EAAO,QAAA,EAAU,yBAAyB;AAAA,GAC1D;AAEA,EAAA,MAAM,0BAAA,GAA6BF,iBAAA;AAAA,IAC/B,OAAO,QAAsB,aAAA,KAAiC;AAC1D,MAAA,IAAI;AACA,QAAA,MAAM,mBAAA,GAAsB,MAAM,MAAA,CAAO,SAAA,CAAU;AAAA,UAC/C,UAAA,EAAY,SAAA;AAAA,UACZ,KAAA;AAAA,UACA,QAAA;AAAA,UACA,eAAA,EAAiB;AAAA,SACpB,CAAA;AACD,QAAA,OAAA,CAAQ,MAAM,yBAAA,CAA0B,mBAAmB,CAAA,EAAG,eAAA;AAAA,MAClE,SAAS,KAAA,EAAO;AACZ,QAAA,IACI,KAAA,YAAiBC,kEAAA,IACjB,KAAA,CAAM,IAAA,KAASC,uEAA2C,0BAAA,EAC5D;AACE,UAAA,MAAM,WAAA,GAAc,MAAM,MAAA,CAAO,SAAA,CAAU;AAAA,YACvC,KAAA;AAAA,YACA,QAAA;AAAA,YACA,eAAA,EAAiB;AAAA,WACpB,CAAA;AACD,UAAA,OAAA,CAAQ,MAAM,yBAAA,CAA0B,WAAW,CAAA,EAAG,eAAA;AAAA,QAC1D;AACA,QAAA,MAAM,KAAA;AAAA,MACV;AAAA,IACJ,CAAA;AAAA,IACA,CAAC,SAAA,EAAW,KAAA,EAAO,QAAA,EAAU,yBAAyB;AAAA,GAC1D;AAEA,EAAA,MAAM,kBAAA,GAAqBF,iBAAA;AAAA,IACvB,OAAO,MAAA,KAA2B;AAC9B,MAAA,IAAI,aAAa,IAAA,EAAM;AACnB,QAAA;AAAA,MACJ;AACA,MAAA,MAAM,MAAA,CAAO,WAAA,CAAY,EAAE,UAAA,EAAY,WAAW,CAAA;AAClD,MAAA,MAAM,QAAQ,IAAI,CAAA;AAAA,IACtB,CAAA;AAAA,IACA,CAAC,WAAW,OAAO;AAAA,GACvB;AAEA,EAAA,MAAM,mBAAA,GAAsBA,kBAAY,YAAY;AAChD,IAAA,MAAM,QAAQ,IAAI,CAAA;AAAA,EACtB,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,OAAOP,aAAAA;AAAA,IACH,OAAO;AAAA,MACH,QAAA;AAAA,MACA,gBAAA;AAAA,MACA,0BAAA;AAAA,MACA,kBAAA;AAAA,MACA,mBAAA;AAAA,MACA;AAAA,KACJ,CAAA;AAAA,IACA;AAAA,MACI,QAAA;AAAA,MACA,gBAAA;AAAA,MACA,0BAAA;AAAA,MACA,kBAAA;AAAA,MACA,mBAAA;AAAA,MACA;AAAA;AACJ,GACJ;AACJ;ACzIO,SAAS,eAAA,GAAkB;AAC9B,EAAA,MAAM,GAAA,GAAMU,iBAAW,2BAA2B,CAAA;AAClD,EAAA,MAAM;AAAA,IACF,0BAAA;AAAA,IACA,gBAAA;AAAA,IACA,mBAAA;AAAA,IACA,eAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACJ,GAAI,iBAAiB,GAAG,CAAA;AAExB,EAAA,MAAM,OAAA,GAAUH,iBAAAA;AAAA,IACZ,YAA8B,MAAMI,0CAAA,CAAS,OAAM,WAAU,MAAM,gBAAA,CAAiB,MAAM,CAAC,CAAA;AAAA,IAC3F,CAAC,gBAAgB;AAAA,GACrB;AAEA,EAAA,MAAM,UAAA,GAAaJ,iBAAAA;AAAA,IACf,OAAO,EAAA,KAAmF;AACtF,MAAA,OAAO,MAAMI,0CAAA,CAAS,OAAM,WAAU,MAAM,EAAA,CAAG,MAAM,CAAC,CAAA;AAAA,IAC1D,CAAA;AAAA,IACA;AAAC,GACL;AAEA,EAAA,MAAM,MAAA,GAASJ,iBAAAA;AAAA,IACX,OAAO,aAAA,KACH,MAAMI,0CAAA,CAAS,OAAM,WAAU,MAAM,0BAAA,CAA2B,MAAA,EAAQ,aAAa,CAAC,CAAA;AAAA,IAC1F,CAAC,0BAA0B;AAAA,GAC/B;AAEA,EAAA,MAAM,UAAA,GAAaJ,kBAAY,YAA2B,MAAM,qBAAoB,EAAG,CAAC,mBAAmB,CAAC,CAAA;AAE5G,EAAA,MAAM,sBAAA,GAAyBA,iBAAAA;AAAA,IAC3B,OACI,WAAA,EACA,cAAA,KAEA,MAAMI,0CAAA,CAAS,OAAM,MAAA,KAAU;AAC3B,MAAA,MAAM,iBAAiB,MAAM,CAAA;AAC7B,MAAA,MAAM,UAAA,GAAa,MAAM,MAAA,CAAO,uBAAA,CAAwB;AAAA,QACpD,cAAA;AAAA,QACA,YAAA,EAAc,CAAC,WAAW;AAAA,OAC7B,CAAA;AACD,MAAA,OAAO,WAAW,CAAC,CAAA;AAAA,IACvB,CAAC,CAAA;AAAA,IACL,CAAC,gBAAgB;AAAA,GACrB;AAEA,EAAA,MAAM,WAAA,GAAcJ,iBAAAA;AAAA,IAChB,OAAO,OAAA,KACH,MAAMI,0CAAA,CAAS,OAAM,MAAA,KAAU;AAC3B,MAAA,MAAM,UAAA,GAAa,MAAM,gBAAA,CAAiB,MAAM,CAAA;AAChD,MAAA,MAAM,cAAA,GAAiB,MAAM,MAAA,CAAO,YAAA,CAAa;AAAA,QAC7C,SAAA,EAAW,CAAC,UAAA,CAAW,aAAa,CAAA;AAAA,QACpC,QAAA,EAAU,CAAC,OAAO;AAAA,OACrB,CAAA;AACD,MAAA,OAAO,eAAe,CAAC,CAAA;AAAA,IAC3B,CAAC,CAAA;AAAA,IACL,CAAC,gBAAgB;AAAA,GACrB;AAEA,EAAA,OAAOX,aAAAA;AAAA,IACH,OAAO;AAAA,MACH,GAAG,GAAA;AAAA,MACH,OAAA,EAAS,eAAA;AAAA,MACT,QAAA;AAAA,MACA,OAAA;AAAA,MACA,UAAA;AAAA,MACA,kBAAA;AAAA,MACA,UAAA;AAAA,MACA,sBAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA,KACJ,CAAA;AAAA,IACA;AAAA,MACI,QAAA;AAAA,MACA,OAAA;AAAA,MACA,UAAA;AAAA,MACA,GAAA;AAAA,MACA,kBAAA;AAAA,MACA,UAAA;AAAA,MACA,eAAA;AAAA,MACA,sBAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA;AACJ,GACJ;AACJ","file":"index.node.cjs","sourcesContent":["import AsyncStorage from '@react-native-async-storage/async-storage';\nimport { PublicKey, PublicKeyInitData } from '@solana/web3.js';\n\nimport { Cache } from './cache';\n\nfunction cacheReviver(key: string, value: unknown) {\n if (key === 'publicKey') {\n return new PublicKey(value as PublicKeyInitData);\n } else {\n return value;\n }\n}\n\nexport class AsyncStorageCache<T> implements Cache<T> {\n constructor(private readonly storageKey: string) {}\n\n async clear(): Promise<void> {\n await AsyncStorage.removeItem(this.storageKey);\n }\n\n async get(): Promise<T | undefined> {\n const cacheFetchResult = await AsyncStorage.getItem(this.storageKey);\n if (!cacheFetchResult) {\n return undefined;\n }\n try {\n return JSON.parse(cacheFetchResult, cacheReviver) as T;\n } catch (error) {\n console.warn(`Failed to parse cached data for key ${this.storageKey}:`, error);\n return undefined;\n }\n }\n\n async set(value: T): Promise<void> {\n await AsyncStorage.setItem(this.storageKey, JSON.stringify(value));\n }\n}\n\nexport function createAsyncStorageCache<T>(storageKey = 'authorization-cache') {\n return new AsyncStorageCache<T>(storageKey);\n}\n","import { atom, computed } from 'nanostores';\n\nimport { Cache } from './cache';\nimport { WalletAuthorization } from './use-authorization';\n\nexport type AuthorizationStoreContext = {\n cache: Cache<WalletAuthorization | undefined>;\n};\n\nexport function createAuthorizationStore(context: AuthorizationStoreContext) {\n const { cache } = context;\n\n const $authorization = atom<WalletAuthorization | null>(null);\n\n const $accounts = computed($authorization, auth => auth?.accounts ?? null);\n const $authToken = computed($authorization, auth => auth?.authToken);\n const $selectedAccount = computed($authorization, auth => auth?.selectedAccount);\n\n async function fetch(): Promise<WalletAuthorization | null> {\n const result = await cache.get();\n const auth = result ?? null;\n $authorization.set(auth);\n return auth;\n }\n\n async function persist(auth: WalletAuthorization | null): Promise<void> {\n if (auth) {\n await cache.set(auth);\n } else {\n await cache.clear();\n }\n $authorization.set(auth);\n }\n\n return {\n $accounts,\n $authToken,\n $selectedAccount,\n fetch,\n persist,\n };\n}\n\nexport type AuthorizationStore = ReturnType<typeof createAuthorizationStore>;\n","import { Commitment, Connection, ConnectionConfig } from '@solana/web3.js';\nimport { AppIdentity, Chain } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport React, { createContext, type ReactNode, useEffect, useMemo, useRef } from 'react';\n\nimport { createAsyncStorageCache } from './async-storage-cache';\nimport { AuthorizationStore, createAuthorizationStore } from './authorization-store';\nimport { WalletAuthorization, WalletAuthorizationCache, WalletAuthorizationProps } from './use-authorization';\n\nexport interface MobileWalletProviderProps {\n cache?: WalletAuthorizationCache;\n chain: Chain;\n children: ReactNode;\n commitmentOrConfig?: Commitment | ConnectionConfig;\n endpoint: string;\n identity: AppIdentity;\n}\nexport interface MobileWalletProviderState extends WalletAuthorizationProps {\n connection: Connection;\n store: AuthorizationStore;\n}\n\nexport const MobileWalletProviderContext = createContext<MobileWalletProviderState>({} as MobileWalletProviderState);\nexport function MobileWalletProvider({\n cache: userCache,\n children,\n chain,\n commitmentOrConfig = { commitment: 'confirmed' },\n endpoint,\n identity,\n}: MobileWalletProviderProps) {\n const connection = useMemo(() => new Connection(endpoint, commitmentOrConfig), [commitmentOrConfig, endpoint]);\n const cache = useMemo(() => userCache ?? createAsyncStorageCache<WalletAuthorization>(), [userCache]);\n\n const storeRef = useRef<AuthorizationStore | null>(null);\n if (!storeRef.current) {\n storeRef.current = createAuthorizationStore({ cache });\n }\n const store = storeRef.current;\n\n useEffect(() => {\n store.fetch().catch(console.error);\n }, [store]);\n\n return (\n <MobileWalletProviderContext.Provider\n value={useMemo(\n () => ({\n cache,\n chain,\n connection,\n identity,\n store,\n }),\n [cache, chain, connection, identity, store],\n )}\n >\n {children}\n </MobileWalletProviderContext.Provider>\n );\n}\n","import { PublicKey } from '@solana/web3.js';\nimport { Base64EncodedAddress } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { toUint8Array } from 'js-base64';\n\nexport function getPublicKeyFromAddress(address: Base64EncodedAddress): PublicKey {\n const publicKeyByteArray = toUint8Array(address);\n\n return new PublicKey(publicKeyByteArray);\n}\n","import { Account as AuthorizedAccount } from '@solana-mobile/mobile-wallet-adapter-protocol';\n\nimport { getPublicKeyFromAddress } from './get-public-key-from-address';\nimport { Account } from './use-authorization';\n\nfunction ellipsify(str = '', len = 4, delimiter = '..') {\n const limit = len * 2 + delimiter.length;\n\n return str.length > limit ? str.slice(0, len) + delimiter + str.slice(-len) : str;\n}\n\nexport function getAccountFromAuthorizedAccount(account: AuthorizedAccount): Account {\n const address = getPublicKeyFromAddress(account.address);\n\n return {\n address,\n addressBase64: account.address,\n icon: account.icon,\n label: account.label ?? ellipsify(address.toString(), 8),\n publicKey: address,\n };\n}\n","import { AuthorizationResult } from '@solana-mobile/mobile-wallet-adapter-protocol';\n\nimport { getAccountFromAuthorizedAccount } from './get-account-from-authorized-account';\nimport { Account, WalletAuthorization } from './use-authorization';\n\nexport function getAuthorizationFromAuthorizationResult(\n authorizationResult: AuthorizationResult,\n previouslySelectedAccount?: Account,\n): WalletAuthorization {\n let selectedAccount: Account;\n if (\n // We have yet to select an account.\n previouslySelectedAccount == null ||\n // The previously selected account is no longer in the set of authorized addresses.\n !authorizationResult.accounts.some(({ address }) => address === previouslySelectedAccount.addressBase64)\n ) {\n const firstAccount = authorizationResult.accounts[0];\n selectedAccount = getAccountFromAuthorizedAccount(firstAccount);\n } else {\n selectedAccount = previouslySelectedAccount;\n }\n return {\n accounts: authorizationResult.accounts.map(getAccountFromAuthorizedAccount),\n authToken: authorizationResult.auth_token,\n selectedAccount,\n };\n}\n","import { useStore } from '@nanostores/react';\nimport { useMemo } from 'react';\n\nimport { AuthorizationStore } from './authorization-store';\n\nexport function useAuthorizationStore({ store }: { store: AuthorizationStore }) {\n const accounts = useStore(store.$accounts);\n const authToken = useStore(store.$authToken);\n const selectedAccount = useStore(store.$selectedAccount);\n\n return useMemo(\n () => ({\n accounts,\n authToken,\n persist: store.persist,\n selectedAccount,\n }),\n [accounts, authToken, store.persist, selectedAccount],\n );\n}\n","import { PublicKey } from '@solana/web3.js';\nimport {\n AppIdentity,\n AuthorizationResult,\n AuthorizeAPI,\n AuthToken,\n Base64EncodedAddress,\n Chain,\n DeauthorizeAPI,\n SignInPayload,\n SolanaMobileWalletAdapterProtocolError,\n SolanaMobileWalletAdapterProtocolErrorCode,\n} from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { WalletIcon } from '@wallet-standard/core';\nimport { useCallback, useMemo } from 'react';\n\nimport { AuthorizationStore } from './authorization-store';\nimport { Cache } from './cache';\nimport { getAuthorizationFromAuthorizationResult } from './get-authorization-from-authorization-result';\nimport { useAuthorizationStore } from './use-authorization-store';\n\nexport type Account = Readonly<{\n address: PublicKey;\n addressBase64: Base64EncodedAddress;\n icon?: WalletIcon;\n label?: string;\n /**\n * @deprecated Use `address` instead.\n */\n publicKey: PublicKey;\n}>;\n\nexport type WalletAuthorization = Readonly<{\n accounts: Account[];\n authToken: AuthToken;\n selectedAccount: Account;\n}>;\nexport type WalletAuthorizationCache = Cache<WalletAuthorization | undefined>;\nexport type WalletAuthorizationProps = Readonly<{\n cache?: WalletAuthorizationCache;\n chain: Chain;\n identity: AppIdentity;\n store: AuthorizationStore;\n}>;\nexport function useAuthorization({ chain, identity, store }: WalletAuthorizationProps) {\n const { accounts, authToken, persist, selectedAccount } = useAuthorizationStore({\n store,\n });\n\n const handleAuthorizationResult = useCallback(\n async (authorizationResult: AuthorizationResult): Promise<WalletAuthorization> => {\n const nextAuthorization = getAuthorizationFromAuthorizationResult(authorizationResult, selectedAccount);\n await persist(nextAuthorization);\n return nextAuthorization;\n },\n [selectedAccount, persist],\n );\n\n const authorizeSession = useCallback(\n async (wallet: AuthorizeAPI) => {\n try {\n const authorizationResult = await wallet.authorize({\n auth_token: authToken,\n chain,\n identity,\n });\n return (await handleAuthorizationResult(authorizationResult)).selectedAccount;\n } catch (error) {\n if (\n error instanceof SolanaMobileWalletAdapterProtocolError &&\n error.code === SolanaMobileWalletAdapterProtocolErrorCode.ERROR_AUTHORIZATION_FAILED\n ) {\n const retryResult = await wallet.authorize({\n chain,\n identity,\n });\n return (await handleAuthorizationResult(retryResult)).selectedAccount;\n }\n throw error;\n }\n },\n [authToken, chain, identity, handleAuthorizationResult],\n );\n\n const authorizeSessionWithSignIn = useCallback(\n async (wallet: AuthorizeAPI, signInPayload: SignInPayload) => {\n try {\n const authorizationResult = await wallet.authorize({\n auth_token: authToken,\n chain,\n identity,\n sign_in_payload: signInPayload,\n });\n return (await handleAuthorizationResult(authorizationResult)).selectedAccount;\n } catch (error) {\n if (\n error instanceof SolanaMobileWalletAdapterProtocolError &&\n error.code === SolanaMobileWalletAdapterProtocolErrorCode.ERROR_AUTHORIZATION_FAILED\n ) {\n const retryResult = await wallet.authorize({\n chain,\n identity,\n sign_in_payload: signInPayload,\n });\n return (await handleAuthorizationResult(retryResult)).selectedAccount;\n }\n throw error;\n }\n },\n [authToken, chain, identity, handleAuthorizationResult],\n );\n\n const deauthorizeSession = useCallback(\n async (wallet: DeauthorizeAPI) => {\n if (authToken == null) {\n return;\n }\n await wallet.deauthorize({ auth_token: authToken });\n await persist(null);\n },\n [authToken, persist],\n );\n\n const deauthorizeSessions = useCallback(async () => {\n await persist(null);\n }, [persist]);\n\n return useMemo(\n () => ({\n accounts,\n authorizeSession,\n authorizeSessionWithSignIn,\n deauthorizeSession,\n deauthorizeSessions,\n selectedAccount,\n }),\n [\n accounts,\n authorizeSession,\n authorizeSessionWithSignIn,\n deauthorizeSession,\n deauthorizeSessions,\n selectedAccount,\n ],\n );\n}\n","import { Transaction, TransactionSignature, VersionedTransaction } from '@solana/web3.js';\nimport { AuthorizeAPI, SignInPayload } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { transact } from '@solana-mobile/mobile-wallet-adapter-protocol-web3js';\nimport { useCallback, useContext, useMemo } from 'react';\n\nimport { MobileWalletProviderContext } from './mobile-wallet-provider';\nimport { Account, useAuthorization } from './use-authorization';\n\nexport function useMobileWallet() {\n const ctx = useContext(MobileWalletProviderContext);\n const {\n authorizeSessionWithSignIn,\n authorizeSession,\n deauthorizeSessions,\n selectedAccount,\n accounts,\n deauthorizeSession,\n } = useAuthorization(ctx);\n\n const connect = useCallback(\n async (): Promise<Account> => await transact(async wallet => await authorizeSession(wallet)),\n [authorizeSession],\n );\n\n const connectAnd = useCallback(\n async (cb: (wallet: AuthorizeAPI) => Promise<Account | void>): Promise<Account | void> => {\n return await transact(async wallet => await cb(wallet));\n },\n [],\n );\n\n const signIn = useCallback(\n async (signInPayload: SignInPayload): Promise<Account> =>\n await transact(async wallet => await authorizeSessionWithSignIn(wallet, signInPayload)),\n [authorizeSessionWithSignIn],\n );\n\n const disconnect = useCallback(async (): Promise<void> => await deauthorizeSessions(), [deauthorizeSessions]);\n\n const signAndSendTransaction = useCallback(\n async (\n transaction: Transaction | VersionedTransaction,\n minContextSlot: number,\n ): Promise<TransactionSignature> =>\n await transact(async wallet => {\n await authorizeSession(wallet);\n const signatures = await wallet.signAndSendTransactions({\n minContextSlot,\n transactions: [transaction],\n });\n return signatures[0];\n }),\n [authorizeSession],\n );\n\n const signMessage = useCallback(\n async (message: Uint8Array): Promise<Uint8Array> =>\n await transact(async wallet => {\n const authResult = await authorizeSession(wallet);\n const signedMessages = await wallet.signMessages({\n addresses: [authResult.addressBase64],\n payloads: [message],\n });\n return signedMessages[0];\n }),\n [authorizeSession],\n );\n\n return useMemo(\n () => ({\n ...ctx,\n account: selectedAccount,\n accounts,\n connect,\n connectAnd,\n deauthorizeSession,\n disconnect,\n signAndSendTransaction,\n signIn,\n signMessage,\n }),\n [\n accounts,\n connect,\n connectAnd,\n ctx,\n deauthorizeSession,\n disconnect,\n selectedAccount,\n signAndSendTransaction,\n signIn,\n signMessage,\n ],\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/async-storage-cache.ts","../src/authorization-store.ts","../src/mobile-wallet-provider.tsx","../src/get-public-key-from-address.ts","../src/get-account-from-authorized-account.ts","../src/get-authorization-from-authorization-result.ts","../src/use-authorization-store.ts","../src/use-authorization.ts","../src/use-mobile-wallet.ts"],"names":["PublicKey","AsyncStorage","atom","computed","createContext","useMemo","Connection","useRef","useEffect","React","toUint8Array","useStore","useCallback","SolanaMobileWalletAdapterProtocolError","SolanaMobileWalletAdapterProtocolErrorCode","useContext","transact"],"mappings":"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","file":"index.node.cjs","sourcesContent":["import AsyncStorage from '@react-native-async-storage/async-storage';\nimport { PublicKey, PublicKeyInitData } from '@solana/web3.js';\n\nimport { Cache } from './cache';\n\nfunction cacheReviver(key: string, value: unknown) {\n if (key === 'publicKey') {\n return new PublicKey(value as PublicKeyInitData);\n } else {\n return value;\n }\n}\n\nexport class AsyncStorageCache<T> implements Cache<T> {\n constructor(private readonly storageKey: string) {}\n\n async clear(): Promise<void> {\n await AsyncStorage.removeItem(this.storageKey);\n }\n\n async get(): Promise<T | undefined> {\n const cacheFetchResult = await AsyncStorage.getItem(this.storageKey);\n if (!cacheFetchResult) {\n return undefined;\n }\n try {\n return JSON.parse(cacheFetchResult, cacheReviver) as T;\n } catch (error) {\n console.warn(`Failed to parse cached data for key ${this.storageKey}:`, error);\n return undefined;\n }\n }\n\n async set(value: T): Promise<void> {\n await AsyncStorage.setItem(this.storageKey, JSON.stringify(value));\n }\n}\n\nexport function createAsyncStorageCache<T>(storageKey = 'authorization-cache') {\n return new AsyncStorageCache<T>(storageKey);\n}\n","import { atom, computed } from 'nanostores';\n\nimport { Cache } from './cache';\nimport { WalletAuthorization } from './use-authorization';\n\nexport type AuthorizationStoreContext = {\n cache: Cache<WalletAuthorization | undefined>;\n};\n\nexport function createAuthorizationStore(context: AuthorizationStoreContext) {\n const { cache } = context;\n\n const $authorization = atom<WalletAuthorization | null>(null);\n\n const $accounts = computed($authorization, auth => auth?.accounts ?? null);\n const $authToken = computed($authorization, auth => auth?.authToken);\n const $selectedAccount = computed($authorization, auth => auth?.selectedAccount);\n\n async function fetch(): Promise<WalletAuthorization | null> {\n const result = await cache.get();\n const auth = result ?? null;\n $authorization.set(auth);\n return auth;\n }\n\n async function persist(auth: WalletAuthorization | null): Promise<void> {\n if (auth) {\n await cache.set(auth);\n } else {\n await cache.clear();\n }\n $authorization.set(auth);\n }\n\n return {\n $accounts,\n $authToken,\n $selectedAccount,\n fetch,\n persist,\n };\n}\n\nexport type AuthorizationStore = ReturnType<typeof createAuthorizationStore>;\n","import { Commitment, Connection, ConnectionConfig } from '@solana/web3.js';\nimport { AppIdentity, Chain } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport React, { createContext, type ReactNode, useEffect, useMemo, useRef } from 'react';\n\nimport { createAsyncStorageCache } from './async-storage-cache';\nimport { AuthorizationStore, createAuthorizationStore } from './authorization-store';\nimport { WalletAuthorization, WalletAuthorizationCache, WalletAuthorizationProps } from './use-authorization';\n\nexport interface MobileWalletProviderProps {\n cache?: WalletAuthorizationCache;\n chain: Chain;\n children: ReactNode;\n commitmentOrConfig?: Commitment | ConnectionConfig;\n endpoint: string;\n identity: AppIdentity;\n}\nexport interface MobileWalletProviderState extends WalletAuthorizationProps {\n connection: Connection;\n store: AuthorizationStore;\n}\n\nexport const MobileWalletProviderContext = createContext<MobileWalletProviderState>({} as MobileWalletProviderState);\nexport function MobileWalletProvider({\n cache: userCache,\n children,\n chain,\n commitmentOrConfig = { commitment: 'confirmed' },\n endpoint,\n identity,\n}: MobileWalletProviderProps) {\n const connection = useMemo(() => new Connection(endpoint, commitmentOrConfig), [commitmentOrConfig, endpoint]);\n const cache = useMemo(() => userCache ?? createAsyncStorageCache<WalletAuthorization>(), [userCache]);\n\n const storeRef = useRef<AuthorizationStore | null>(null);\n if (!storeRef.current) {\n storeRef.current = createAuthorizationStore({ cache });\n }\n const store = storeRef.current;\n\n useEffect(() => {\n store.fetch().catch(console.error);\n }, [store]);\n\n return (\n <MobileWalletProviderContext.Provider\n value={useMemo(\n () => ({\n cache,\n chain,\n connection,\n identity,\n store,\n }),\n [cache, chain, connection, identity, store],\n )}\n >\n {children}\n </MobileWalletProviderContext.Provider>\n );\n}\n","import { PublicKey } from '@solana/web3.js';\nimport { Base64EncodedAddress } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { toUint8Array } from 'js-base64';\n\nexport function getPublicKeyFromAddress(address: Base64EncodedAddress): PublicKey {\n const publicKeyByteArray = toUint8Array(address);\n\n return new PublicKey(publicKeyByteArray);\n}\n","import { Account as AuthorizedAccount } from '@solana-mobile/mobile-wallet-adapter-protocol';\n\nimport { getPublicKeyFromAddress } from './get-public-key-from-address';\nimport { Account } from './use-authorization';\n\nfunction ellipsify(str = '', len = 4, delimiter = '..') {\n const limit = len * 2 + delimiter.length;\n\n return str.length > limit ? str.slice(0, len) + delimiter + str.slice(-len) : str;\n}\n\nexport function getAccountFromAuthorizedAccount(account: AuthorizedAccount): Account {\n const address = getPublicKeyFromAddress(account.address);\n\n return {\n address,\n addressBase64: account.address,\n icon: account.icon,\n label: account.label ?? ellipsify(address.toString(), 8),\n publicKey: address,\n };\n}\n","import { AuthorizationResult } from '@solana-mobile/mobile-wallet-adapter-protocol';\n\nimport { getAccountFromAuthorizedAccount } from './get-account-from-authorized-account';\nimport { Account, WalletAuthorization } from './use-authorization';\n\nexport function getAuthorizationFromAuthorizationResult(\n authorizationResult: AuthorizationResult,\n previouslySelectedAccount?: Account,\n): WalletAuthorization {\n let selectedAccount: Account;\n if (\n // We have yet to select an account.\n previouslySelectedAccount == null ||\n // The previously selected account is no longer in the set of authorized addresses.\n !authorizationResult.accounts.some(({ address }) => address === previouslySelectedAccount.addressBase64)\n ) {\n const firstAccount = authorizationResult.accounts[0];\n selectedAccount = getAccountFromAuthorizedAccount(firstAccount);\n } else {\n selectedAccount = previouslySelectedAccount;\n }\n return {\n accounts: authorizationResult.accounts.map(getAccountFromAuthorizedAccount),\n authToken: authorizationResult.auth_token,\n selectedAccount,\n };\n}\n","import { useStore } from '@nanostores/react';\nimport { useMemo } from 'react';\n\nimport { AuthorizationStore } from './authorization-store';\n\nexport function useAuthorizationStore({ store }: { store: AuthorizationStore }) {\n const accounts = useStore(store.$accounts);\n const authToken = useStore(store.$authToken);\n const selectedAccount = useStore(store.$selectedAccount);\n\n return useMemo(\n () => ({\n accounts,\n authToken,\n persist: store.persist,\n selectedAccount,\n }),\n [accounts, authToken, store.persist, selectedAccount],\n );\n}\n","import { PublicKey } from '@solana/web3.js';\nimport {\n AppIdentity,\n AuthorizationResult,\n AuthorizeAPI,\n AuthToken,\n Base64EncodedAddress,\n Chain,\n DeauthorizeAPI,\n SignInPayload,\n SolanaMobileWalletAdapterProtocolError,\n SolanaMobileWalletAdapterProtocolErrorCode,\n} from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { WalletIcon } from '@wallet-standard/core';\nimport { useCallback, useMemo } from 'react';\n\nimport { AuthorizationStore } from './authorization-store';\nimport { Cache } from './cache';\nimport { getAuthorizationFromAuthorizationResult } from './get-authorization-from-authorization-result';\nimport { useAuthorizationStore } from './use-authorization-store';\n\nexport type Account = Readonly<{\n address: PublicKey;\n addressBase64: Base64EncodedAddress;\n icon?: WalletIcon;\n label?: string;\n /**\n * @deprecated Use `address` instead.\n */\n publicKey: PublicKey;\n}>;\n\nexport type WalletAuthorization = Readonly<{\n accounts: Account[];\n authToken: AuthToken;\n selectedAccount: Account;\n}>;\nexport type WalletAuthorizationCache = Cache<WalletAuthorization | undefined>;\nexport type WalletAuthorizationProps = Readonly<{\n cache?: WalletAuthorizationCache;\n chain: Chain;\n identity: AppIdentity;\n store: AuthorizationStore;\n}>;\nexport function useAuthorization({ chain, identity, store }: WalletAuthorizationProps) {\n const { accounts, authToken, persist, selectedAccount } = useAuthorizationStore({\n store,\n });\n\n const handleAuthorizationResult = useCallback(\n async (authorizationResult: AuthorizationResult): Promise<WalletAuthorization> => {\n const nextAuthorization = getAuthorizationFromAuthorizationResult(authorizationResult, selectedAccount);\n await persist(nextAuthorization);\n return nextAuthorization;\n },\n [selectedAccount, persist],\n );\n\n const authorizeSession = useCallback(\n async (wallet: AuthorizeAPI) => {\n try {\n const authorizationResult = await wallet.authorize({\n auth_token: authToken,\n chain,\n identity,\n });\n return (await handleAuthorizationResult(authorizationResult)).selectedAccount;\n } catch (error) {\n if (\n error instanceof SolanaMobileWalletAdapterProtocolError &&\n error.code === SolanaMobileWalletAdapterProtocolErrorCode.ERROR_AUTHORIZATION_FAILED\n ) {\n const retryResult = await wallet.authorize({\n chain,\n identity,\n });\n return (await handleAuthorizationResult(retryResult)).selectedAccount;\n }\n throw error;\n }\n },\n [authToken, chain, identity, handleAuthorizationResult],\n );\n\n const authorizeSessionWithSignIn = useCallback(\n async (wallet: AuthorizeAPI, signInPayload: SignInPayload) => {\n try {\n const authorizationResult = await wallet.authorize({\n auth_token: authToken,\n chain,\n identity,\n sign_in_payload: signInPayload,\n });\n return (await handleAuthorizationResult(authorizationResult)).selectedAccount;\n } catch (error) {\n if (\n error instanceof SolanaMobileWalletAdapterProtocolError &&\n error.code === SolanaMobileWalletAdapterProtocolErrorCode.ERROR_AUTHORIZATION_FAILED\n ) {\n const retryResult = await wallet.authorize({\n chain,\n identity,\n sign_in_payload: signInPayload,\n });\n return (await handleAuthorizationResult(retryResult)).selectedAccount;\n }\n throw error;\n }\n },\n [authToken, chain, identity, handleAuthorizationResult],\n );\n\n const deauthorizeSession = useCallback(\n async (wallet: DeauthorizeAPI) => {\n if (authToken == null) {\n return;\n }\n await wallet.deauthorize({ auth_token: authToken });\n await persist(null);\n },\n [authToken, persist],\n );\n\n const deauthorizeSessions = useCallback(async () => {\n await persist(null);\n }, [persist]);\n\n return useMemo(\n () => ({\n accounts,\n authorizeSession,\n authorizeSessionWithSignIn,\n deauthorizeSession,\n deauthorizeSessions,\n selectedAccount,\n }),\n [\n accounts,\n authorizeSession,\n authorizeSessionWithSignIn,\n deauthorizeSession,\n deauthorizeSessions,\n selectedAccount,\n ],\n );\n}\n","import { Transaction, TransactionSignature, VersionedTransaction } from '@solana/web3.js';\nimport { AuthorizeAPI, SignInPayload } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { transact } from '@solana-mobile/mobile-wallet-adapter-protocol-web3js';\nimport { useCallback, useContext, useMemo } from 'react';\n\nimport { MobileWalletProviderContext } from './mobile-wallet-provider';\nimport { Account, useAuthorization } from './use-authorization';\n\nexport function useMobileWallet() {\n const ctx = useContext(MobileWalletProviderContext);\n const {\n authorizeSessionWithSignIn,\n authorizeSession,\n deauthorizeSessions,\n selectedAccount,\n accounts,\n deauthorizeSession,\n } = useAuthorization(ctx);\n\n const connect = useCallback(\n async (): Promise<Account> => await transact(async wallet => await authorizeSession(wallet)),\n [authorizeSession],\n );\n\n const connectAnd = useCallback(\n async (cb: (wallet: AuthorizeAPI) => Promise<Account | void>): Promise<Account | void> => {\n return await transact(async wallet => await cb(wallet));\n },\n [],\n );\n\n const signIn = useCallback(\n async (signInPayload: SignInPayload): Promise<Account> =>\n await transact(async wallet => await authorizeSessionWithSignIn(wallet, signInPayload)),\n [authorizeSessionWithSignIn],\n );\n\n const disconnect = useCallback(async (): Promise<void> => await deauthorizeSessions(), [deauthorizeSessions]);\n\n const signAndSendTransaction = useCallback(\n async (\n transaction: Transaction | VersionedTransaction,\n minContextSlot: number,\n ): Promise<TransactionSignature> =>\n await transact(async wallet => {\n await authorizeSession(wallet);\n const signatures = await wallet.signAndSendTransactions({\n minContextSlot,\n transactions: [transaction],\n });\n return signatures[0];\n }),\n [authorizeSession],\n );\n\n const signMessage = useCallback(\n async (message: Uint8Array): Promise<Uint8Array> =>\n await transact(async wallet => {\n const authResult = await authorizeSession(wallet);\n const signedMessages = await wallet.signMessages({\n addresses: [authResult.addressBase64],\n payloads: [message],\n });\n return signedMessages[0];\n }),\n [authorizeSession],\n );\n\n const signTransaction = useCallback(\n async <T extends Transaction | VersionedTransaction, K extends T | T[]>(transaction: K): Promise<K> =>\n await transact(async wallet => {\n await authorizeSession(wallet);\n const signedTxs = await wallet.signTransactions({\n transactions: Array.isArray(transaction) ? transaction : [transaction],\n });\n return Array.isArray(transaction) ? signedTxs : signedTxs[0];\n }),\n\n [authorizeSession],\n );\n\n return useMemo(\n () => ({\n ...ctx,\n account: selectedAccount,\n accounts,\n connect,\n connectAnd,\n deauthorizeSession,\n disconnect,\n signAndSendTransaction,\n signIn,\n signMessage,\n signTransaction,\n }),\n [\n accounts,\n connect,\n connectAnd,\n ctx,\n deauthorizeSession,\n disconnect,\n selectedAccount,\n signAndSendTransaction,\n signIn,\n signMessage,\n signTransaction,\n ],\n );\n}\n"]}
@@ -303,6 +303,16 @@ function useMobileWallet() {
303
303
  }),
304
304
  [authorizeSession]
305
305
  );
306
+ const signTransaction = useCallback(
307
+ async (transaction) => await transact(async (wallet) => {
308
+ await authorizeSession(wallet);
309
+ const signedTxs = await wallet.signTransactions({
310
+ transactions: Array.isArray(transaction) ? transaction : [transaction]
311
+ });
312
+ return Array.isArray(transaction) ? signedTxs : signedTxs[0];
313
+ }),
314
+ [authorizeSession]
315
+ );
306
316
  return useMemo(
307
317
  () => ({
308
318
  ...ctx,
@@ -314,7 +324,8 @@ function useMobileWallet() {
314
324
  disconnect,
315
325
  signAndSendTransaction,
316
326
  signIn,
317
- signMessage
327
+ signMessage,
328
+ signTransaction
318
329
  }),
319
330
  [
320
331
  accounts,
@@ -326,7 +337,8 @@ function useMobileWallet() {
326
337
  selectedAccount,
327
338
  signAndSendTransaction,
328
339
  signIn,
329
- signMessage
340
+ signMessage,
341
+ signTransaction
330
342
  ]
331
343
  );
332
344
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/async-storage-cache.ts","../src/authorization-store.ts","../src/mobile-wallet-provider.tsx","../src/get-public-key-from-address.ts","../src/get-account-from-authorized-account.ts","../src/get-authorization-from-authorization-result.ts","../src/use-authorization-store.ts","../src/use-authorization.ts","../src/use-mobile-wallet.ts"],"names":["PublicKey","useMemo","useCallback"],"mappings":"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","file":"index.node.mjs","sourcesContent":["import AsyncStorage from '@react-native-async-storage/async-storage';\nimport { PublicKey, PublicKeyInitData } from '@solana/web3.js';\n\nimport { Cache } from './cache';\n\nfunction cacheReviver(key: string, value: unknown) {\n if (key === 'publicKey') {\n return new PublicKey(value as PublicKeyInitData);\n } else {\n return value;\n }\n}\n\nexport class AsyncStorageCache<T> implements Cache<T> {\n constructor(private readonly storageKey: string) {}\n\n async clear(): Promise<void> {\n await AsyncStorage.removeItem(this.storageKey);\n }\n\n async get(): Promise<T | undefined> {\n const cacheFetchResult = await AsyncStorage.getItem(this.storageKey);\n if (!cacheFetchResult) {\n return undefined;\n }\n try {\n return JSON.parse(cacheFetchResult, cacheReviver) as T;\n } catch (error) {\n console.warn(`Failed to parse cached data for key ${this.storageKey}:`, error);\n return undefined;\n }\n }\n\n async set(value: T): Promise<void> {\n await AsyncStorage.setItem(this.storageKey, JSON.stringify(value));\n }\n}\n\nexport function createAsyncStorageCache<T>(storageKey = 'authorization-cache') {\n return new AsyncStorageCache<T>(storageKey);\n}\n","import { atom, computed } from 'nanostores';\n\nimport { Cache } from './cache';\nimport { WalletAuthorization } from './use-authorization';\n\nexport type AuthorizationStoreContext = {\n cache: Cache<WalletAuthorization | undefined>;\n};\n\nexport function createAuthorizationStore(context: AuthorizationStoreContext) {\n const { cache } = context;\n\n const $authorization = atom<WalletAuthorization | null>(null);\n\n const $accounts = computed($authorization, auth => auth?.accounts ?? null);\n const $authToken = computed($authorization, auth => auth?.authToken);\n const $selectedAccount = computed($authorization, auth => auth?.selectedAccount);\n\n async function fetch(): Promise<WalletAuthorization | null> {\n const result = await cache.get();\n const auth = result ?? null;\n $authorization.set(auth);\n return auth;\n }\n\n async function persist(auth: WalletAuthorization | null): Promise<void> {\n if (auth) {\n await cache.set(auth);\n } else {\n await cache.clear();\n }\n $authorization.set(auth);\n }\n\n return {\n $accounts,\n $authToken,\n $selectedAccount,\n fetch,\n persist,\n };\n}\n\nexport type AuthorizationStore = ReturnType<typeof createAuthorizationStore>;\n","import { Commitment, Connection, ConnectionConfig } from '@solana/web3.js';\nimport { AppIdentity, Chain } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport React, { createContext, type ReactNode, useEffect, useMemo, useRef } from 'react';\n\nimport { createAsyncStorageCache } from './async-storage-cache';\nimport { AuthorizationStore, createAuthorizationStore } from './authorization-store';\nimport { WalletAuthorization, WalletAuthorizationCache, WalletAuthorizationProps } from './use-authorization';\n\nexport interface MobileWalletProviderProps {\n cache?: WalletAuthorizationCache;\n chain: Chain;\n children: ReactNode;\n commitmentOrConfig?: Commitment | ConnectionConfig;\n endpoint: string;\n identity: AppIdentity;\n}\nexport interface MobileWalletProviderState extends WalletAuthorizationProps {\n connection: Connection;\n store: AuthorizationStore;\n}\n\nexport const MobileWalletProviderContext = createContext<MobileWalletProviderState>({} as MobileWalletProviderState);\nexport function MobileWalletProvider({\n cache: userCache,\n children,\n chain,\n commitmentOrConfig = { commitment: 'confirmed' },\n endpoint,\n identity,\n}: MobileWalletProviderProps) {\n const connection = useMemo(() => new Connection(endpoint, commitmentOrConfig), [commitmentOrConfig, endpoint]);\n const cache = useMemo(() => userCache ?? createAsyncStorageCache<WalletAuthorization>(), [userCache]);\n\n const storeRef = useRef<AuthorizationStore | null>(null);\n if (!storeRef.current) {\n storeRef.current = createAuthorizationStore({ cache });\n }\n const store = storeRef.current;\n\n useEffect(() => {\n store.fetch().catch(console.error);\n }, [store]);\n\n return (\n <MobileWalletProviderContext.Provider\n value={useMemo(\n () => ({\n cache,\n chain,\n connection,\n identity,\n store,\n }),\n [cache, chain, connection, identity, store],\n )}\n >\n {children}\n </MobileWalletProviderContext.Provider>\n );\n}\n","import { PublicKey } from '@solana/web3.js';\nimport { Base64EncodedAddress } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { toUint8Array } from 'js-base64';\n\nexport function getPublicKeyFromAddress(address: Base64EncodedAddress): PublicKey {\n const publicKeyByteArray = toUint8Array(address);\n\n return new PublicKey(publicKeyByteArray);\n}\n","import { Account as AuthorizedAccount } from '@solana-mobile/mobile-wallet-adapter-protocol';\n\nimport { getPublicKeyFromAddress } from './get-public-key-from-address';\nimport { Account } from './use-authorization';\n\nfunction ellipsify(str = '', len = 4, delimiter = '..') {\n const limit = len * 2 + delimiter.length;\n\n return str.length > limit ? str.slice(0, len) + delimiter + str.slice(-len) : str;\n}\n\nexport function getAccountFromAuthorizedAccount(account: AuthorizedAccount): Account {\n const address = getPublicKeyFromAddress(account.address);\n\n return {\n address,\n addressBase64: account.address,\n icon: account.icon,\n label: account.label ?? ellipsify(address.toString(), 8),\n publicKey: address,\n };\n}\n","import { AuthorizationResult } from '@solana-mobile/mobile-wallet-adapter-protocol';\n\nimport { getAccountFromAuthorizedAccount } from './get-account-from-authorized-account';\nimport { Account, WalletAuthorization } from './use-authorization';\n\nexport function getAuthorizationFromAuthorizationResult(\n authorizationResult: AuthorizationResult,\n previouslySelectedAccount?: Account,\n): WalletAuthorization {\n let selectedAccount: Account;\n if (\n // We have yet to select an account.\n previouslySelectedAccount == null ||\n // The previously selected account is no longer in the set of authorized addresses.\n !authorizationResult.accounts.some(({ address }) => address === previouslySelectedAccount.addressBase64)\n ) {\n const firstAccount = authorizationResult.accounts[0];\n selectedAccount = getAccountFromAuthorizedAccount(firstAccount);\n } else {\n selectedAccount = previouslySelectedAccount;\n }\n return {\n accounts: authorizationResult.accounts.map(getAccountFromAuthorizedAccount),\n authToken: authorizationResult.auth_token,\n selectedAccount,\n };\n}\n","import { useStore } from '@nanostores/react';\nimport { useMemo } from 'react';\n\nimport { AuthorizationStore } from './authorization-store';\n\nexport function useAuthorizationStore({ store }: { store: AuthorizationStore }) {\n const accounts = useStore(store.$accounts);\n const authToken = useStore(store.$authToken);\n const selectedAccount = useStore(store.$selectedAccount);\n\n return useMemo(\n () => ({\n accounts,\n authToken,\n persist: store.persist,\n selectedAccount,\n }),\n [accounts, authToken, store.persist, selectedAccount],\n );\n}\n","import { PublicKey } from '@solana/web3.js';\nimport {\n AppIdentity,\n AuthorizationResult,\n AuthorizeAPI,\n AuthToken,\n Base64EncodedAddress,\n Chain,\n DeauthorizeAPI,\n SignInPayload,\n SolanaMobileWalletAdapterProtocolError,\n SolanaMobileWalletAdapterProtocolErrorCode,\n} from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { WalletIcon } from '@wallet-standard/core';\nimport { useCallback, useMemo } from 'react';\n\nimport { AuthorizationStore } from './authorization-store';\nimport { Cache } from './cache';\nimport { getAuthorizationFromAuthorizationResult } from './get-authorization-from-authorization-result';\nimport { useAuthorizationStore } from './use-authorization-store';\n\nexport type Account = Readonly<{\n address: PublicKey;\n addressBase64: Base64EncodedAddress;\n icon?: WalletIcon;\n label?: string;\n /**\n * @deprecated Use `address` instead.\n */\n publicKey: PublicKey;\n}>;\n\nexport type WalletAuthorization = Readonly<{\n accounts: Account[];\n authToken: AuthToken;\n selectedAccount: Account;\n}>;\nexport type WalletAuthorizationCache = Cache<WalletAuthorization | undefined>;\nexport type WalletAuthorizationProps = Readonly<{\n cache?: WalletAuthorizationCache;\n chain: Chain;\n identity: AppIdentity;\n store: AuthorizationStore;\n}>;\nexport function useAuthorization({ chain, identity, store }: WalletAuthorizationProps) {\n const { accounts, authToken, persist, selectedAccount } = useAuthorizationStore({\n store,\n });\n\n const handleAuthorizationResult = useCallback(\n async (authorizationResult: AuthorizationResult): Promise<WalletAuthorization> => {\n const nextAuthorization = getAuthorizationFromAuthorizationResult(authorizationResult, selectedAccount);\n await persist(nextAuthorization);\n return nextAuthorization;\n },\n [selectedAccount, persist],\n );\n\n const authorizeSession = useCallback(\n async (wallet: AuthorizeAPI) => {\n try {\n const authorizationResult = await wallet.authorize({\n auth_token: authToken,\n chain,\n identity,\n });\n return (await handleAuthorizationResult(authorizationResult)).selectedAccount;\n } catch (error) {\n if (\n error instanceof SolanaMobileWalletAdapterProtocolError &&\n error.code === SolanaMobileWalletAdapterProtocolErrorCode.ERROR_AUTHORIZATION_FAILED\n ) {\n const retryResult = await wallet.authorize({\n chain,\n identity,\n });\n return (await handleAuthorizationResult(retryResult)).selectedAccount;\n }\n throw error;\n }\n },\n [authToken, chain, identity, handleAuthorizationResult],\n );\n\n const authorizeSessionWithSignIn = useCallback(\n async (wallet: AuthorizeAPI, signInPayload: SignInPayload) => {\n try {\n const authorizationResult = await wallet.authorize({\n auth_token: authToken,\n chain,\n identity,\n sign_in_payload: signInPayload,\n });\n return (await handleAuthorizationResult(authorizationResult)).selectedAccount;\n } catch (error) {\n if (\n error instanceof SolanaMobileWalletAdapterProtocolError &&\n error.code === SolanaMobileWalletAdapterProtocolErrorCode.ERROR_AUTHORIZATION_FAILED\n ) {\n const retryResult = await wallet.authorize({\n chain,\n identity,\n sign_in_payload: signInPayload,\n });\n return (await handleAuthorizationResult(retryResult)).selectedAccount;\n }\n throw error;\n }\n },\n [authToken, chain, identity, handleAuthorizationResult],\n );\n\n const deauthorizeSession = useCallback(\n async (wallet: DeauthorizeAPI) => {\n if (authToken == null) {\n return;\n }\n await wallet.deauthorize({ auth_token: authToken });\n await persist(null);\n },\n [authToken, persist],\n );\n\n const deauthorizeSessions = useCallback(async () => {\n await persist(null);\n }, [persist]);\n\n return useMemo(\n () => ({\n accounts,\n authorizeSession,\n authorizeSessionWithSignIn,\n deauthorizeSession,\n deauthorizeSessions,\n selectedAccount,\n }),\n [\n accounts,\n authorizeSession,\n authorizeSessionWithSignIn,\n deauthorizeSession,\n deauthorizeSessions,\n selectedAccount,\n ],\n );\n}\n","import { Transaction, TransactionSignature, VersionedTransaction } from '@solana/web3.js';\nimport { AuthorizeAPI, SignInPayload } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { transact } from '@solana-mobile/mobile-wallet-adapter-protocol-web3js';\nimport { useCallback, useContext, useMemo } from 'react';\n\nimport { MobileWalletProviderContext } from './mobile-wallet-provider';\nimport { Account, useAuthorization } from './use-authorization';\n\nexport function useMobileWallet() {\n const ctx = useContext(MobileWalletProviderContext);\n const {\n authorizeSessionWithSignIn,\n authorizeSession,\n deauthorizeSessions,\n selectedAccount,\n accounts,\n deauthorizeSession,\n } = useAuthorization(ctx);\n\n const connect = useCallback(\n async (): Promise<Account> => await transact(async wallet => await authorizeSession(wallet)),\n [authorizeSession],\n );\n\n const connectAnd = useCallback(\n async (cb: (wallet: AuthorizeAPI) => Promise<Account | void>): Promise<Account | void> => {\n return await transact(async wallet => await cb(wallet));\n },\n [],\n );\n\n const signIn = useCallback(\n async (signInPayload: SignInPayload): Promise<Account> =>\n await transact(async wallet => await authorizeSessionWithSignIn(wallet, signInPayload)),\n [authorizeSessionWithSignIn],\n );\n\n const disconnect = useCallback(async (): Promise<void> => await deauthorizeSessions(), [deauthorizeSessions]);\n\n const signAndSendTransaction = useCallback(\n async (\n transaction: Transaction | VersionedTransaction,\n minContextSlot: number,\n ): Promise<TransactionSignature> =>\n await transact(async wallet => {\n await authorizeSession(wallet);\n const signatures = await wallet.signAndSendTransactions({\n minContextSlot,\n transactions: [transaction],\n });\n return signatures[0];\n }),\n [authorizeSession],\n );\n\n const signMessage = useCallback(\n async (message: Uint8Array): Promise<Uint8Array> =>\n await transact(async wallet => {\n const authResult = await authorizeSession(wallet);\n const signedMessages = await wallet.signMessages({\n addresses: [authResult.addressBase64],\n payloads: [message],\n });\n return signedMessages[0];\n }),\n [authorizeSession],\n );\n\n return useMemo(\n () => ({\n ...ctx,\n account: selectedAccount,\n accounts,\n connect,\n connectAnd,\n deauthorizeSession,\n disconnect,\n signAndSendTransaction,\n signIn,\n signMessage,\n }),\n [\n accounts,\n connect,\n connectAnd,\n ctx,\n deauthorizeSession,\n disconnect,\n selectedAccount,\n signAndSendTransaction,\n signIn,\n signMessage,\n ],\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/async-storage-cache.ts","../src/authorization-store.ts","../src/mobile-wallet-provider.tsx","../src/get-public-key-from-address.ts","../src/get-account-from-authorized-account.ts","../src/get-authorization-from-authorization-result.ts","../src/use-authorization-store.ts","../src/use-authorization.ts","../src/use-mobile-wallet.ts"],"names":["PublicKey","useMemo","useCallback"],"mappings":"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","file":"index.node.mjs","sourcesContent":["import AsyncStorage from '@react-native-async-storage/async-storage';\nimport { PublicKey, PublicKeyInitData } from '@solana/web3.js';\n\nimport { Cache } from './cache';\n\nfunction cacheReviver(key: string, value: unknown) {\n if (key === 'publicKey') {\n return new PublicKey(value as PublicKeyInitData);\n } else {\n return value;\n }\n}\n\nexport class AsyncStorageCache<T> implements Cache<T> {\n constructor(private readonly storageKey: string) {}\n\n async clear(): Promise<void> {\n await AsyncStorage.removeItem(this.storageKey);\n }\n\n async get(): Promise<T | undefined> {\n const cacheFetchResult = await AsyncStorage.getItem(this.storageKey);\n if (!cacheFetchResult) {\n return undefined;\n }\n try {\n return JSON.parse(cacheFetchResult, cacheReviver) as T;\n } catch (error) {\n console.warn(`Failed to parse cached data for key ${this.storageKey}:`, error);\n return undefined;\n }\n }\n\n async set(value: T): Promise<void> {\n await AsyncStorage.setItem(this.storageKey, JSON.stringify(value));\n }\n}\n\nexport function createAsyncStorageCache<T>(storageKey = 'authorization-cache') {\n return new AsyncStorageCache<T>(storageKey);\n}\n","import { atom, computed } from 'nanostores';\n\nimport { Cache } from './cache';\nimport { WalletAuthorization } from './use-authorization';\n\nexport type AuthorizationStoreContext = {\n cache: Cache<WalletAuthorization | undefined>;\n};\n\nexport function createAuthorizationStore(context: AuthorizationStoreContext) {\n const { cache } = context;\n\n const $authorization = atom<WalletAuthorization | null>(null);\n\n const $accounts = computed($authorization, auth => auth?.accounts ?? null);\n const $authToken = computed($authorization, auth => auth?.authToken);\n const $selectedAccount = computed($authorization, auth => auth?.selectedAccount);\n\n async function fetch(): Promise<WalletAuthorization | null> {\n const result = await cache.get();\n const auth = result ?? null;\n $authorization.set(auth);\n return auth;\n }\n\n async function persist(auth: WalletAuthorization | null): Promise<void> {\n if (auth) {\n await cache.set(auth);\n } else {\n await cache.clear();\n }\n $authorization.set(auth);\n }\n\n return {\n $accounts,\n $authToken,\n $selectedAccount,\n fetch,\n persist,\n };\n}\n\nexport type AuthorizationStore = ReturnType<typeof createAuthorizationStore>;\n","import { Commitment, Connection, ConnectionConfig } from '@solana/web3.js';\nimport { AppIdentity, Chain } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport React, { createContext, type ReactNode, useEffect, useMemo, useRef } from 'react';\n\nimport { createAsyncStorageCache } from './async-storage-cache';\nimport { AuthorizationStore, createAuthorizationStore } from './authorization-store';\nimport { WalletAuthorization, WalletAuthorizationCache, WalletAuthorizationProps } from './use-authorization';\n\nexport interface MobileWalletProviderProps {\n cache?: WalletAuthorizationCache;\n chain: Chain;\n children: ReactNode;\n commitmentOrConfig?: Commitment | ConnectionConfig;\n endpoint: string;\n identity: AppIdentity;\n}\nexport interface MobileWalletProviderState extends WalletAuthorizationProps {\n connection: Connection;\n store: AuthorizationStore;\n}\n\nexport const MobileWalletProviderContext = createContext<MobileWalletProviderState>({} as MobileWalletProviderState);\nexport function MobileWalletProvider({\n cache: userCache,\n children,\n chain,\n commitmentOrConfig = { commitment: 'confirmed' },\n endpoint,\n identity,\n}: MobileWalletProviderProps) {\n const connection = useMemo(() => new Connection(endpoint, commitmentOrConfig), [commitmentOrConfig, endpoint]);\n const cache = useMemo(() => userCache ?? createAsyncStorageCache<WalletAuthorization>(), [userCache]);\n\n const storeRef = useRef<AuthorizationStore | null>(null);\n if (!storeRef.current) {\n storeRef.current = createAuthorizationStore({ cache });\n }\n const store = storeRef.current;\n\n useEffect(() => {\n store.fetch().catch(console.error);\n }, [store]);\n\n return (\n <MobileWalletProviderContext.Provider\n value={useMemo(\n () => ({\n cache,\n chain,\n connection,\n identity,\n store,\n }),\n [cache, chain, connection, identity, store],\n )}\n >\n {children}\n </MobileWalletProviderContext.Provider>\n );\n}\n","import { PublicKey } from '@solana/web3.js';\nimport { Base64EncodedAddress } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { toUint8Array } from 'js-base64';\n\nexport function getPublicKeyFromAddress(address: Base64EncodedAddress): PublicKey {\n const publicKeyByteArray = toUint8Array(address);\n\n return new PublicKey(publicKeyByteArray);\n}\n","import { Account as AuthorizedAccount } from '@solana-mobile/mobile-wallet-adapter-protocol';\n\nimport { getPublicKeyFromAddress } from './get-public-key-from-address';\nimport { Account } from './use-authorization';\n\nfunction ellipsify(str = '', len = 4, delimiter = '..') {\n const limit = len * 2 + delimiter.length;\n\n return str.length > limit ? str.slice(0, len) + delimiter + str.slice(-len) : str;\n}\n\nexport function getAccountFromAuthorizedAccount(account: AuthorizedAccount): Account {\n const address = getPublicKeyFromAddress(account.address);\n\n return {\n address,\n addressBase64: account.address,\n icon: account.icon,\n label: account.label ?? ellipsify(address.toString(), 8),\n publicKey: address,\n };\n}\n","import { AuthorizationResult } from '@solana-mobile/mobile-wallet-adapter-protocol';\n\nimport { getAccountFromAuthorizedAccount } from './get-account-from-authorized-account';\nimport { Account, WalletAuthorization } from './use-authorization';\n\nexport function getAuthorizationFromAuthorizationResult(\n authorizationResult: AuthorizationResult,\n previouslySelectedAccount?: Account,\n): WalletAuthorization {\n let selectedAccount: Account;\n if (\n // We have yet to select an account.\n previouslySelectedAccount == null ||\n // The previously selected account is no longer in the set of authorized addresses.\n !authorizationResult.accounts.some(({ address }) => address === previouslySelectedAccount.addressBase64)\n ) {\n const firstAccount = authorizationResult.accounts[0];\n selectedAccount = getAccountFromAuthorizedAccount(firstAccount);\n } else {\n selectedAccount = previouslySelectedAccount;\n }\n return {\n accounts: authorizationResult.accounts.map(getAccountFromAuthorizedAccount),\n authToken: authorizationResult.auth_token,\n selectedAccount,\n };\n}\n","import { useStore } from '@nanostores/react';\nimport { useMemo } from 'react';\n\nimport { AuthorizationStore } from './authorization-store';\n\nexport function useAuthorizationStore({ store }: { store: AuthorizationStore }) {\n const accounts = useStore(store.$accounts);\n const authToken = useStore(store.$authToken);\n const selectedAccount = useStore(store.$selectedAccount);\n\n return useMemo(\n () => ({\n accounts,\n authToken,\n persist: store.persist,\n selectedAccount,\n }),\n [accounts, authToken, store.persist, selectedAccount],\n );\n}\n","import { PublicKey } from '@solana/web3.js';\nimport {\n AppIdentity,\n AuthorizationResult,\n AuthorizeAPI,\n AuthToken,\n Base64EncodedAddress,\n Chain,\n DeauthorizeAPI,\n SignInPayload,\n SolanaMobileWalletAdapterProtocolError,\n SolanaMobileWalletAdapterProtocolErrorCode,\n} from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { WalletIcon } from '@wallet-standard/core';\nimport { useCallback, useMemo } from 'react';\n\nimport { AuthorizationStore } from './authorization-store';\nimport { Cache } from './cache';\nimport { getAuthorizationFromAuthorizationResult } from './get-authorization-from-authorization-result';\nimport { useAuthorizationStore } from './use-authorization-store';\n\nexport type Account = Readonly<{\n address: PublicKey;\n addressBase64: Base64EncodedAddress;\n icon?: WalletIcon;\n label?: string;\n /**\n * @deprecated Use `address` instead.\n */\n publicKey: PublicKey;\n}>;\n\nexport type WalletAuthorization = Readonly<{\n accounts: Account[];\n authToken: AuthToken;\n selectedAccount: Account;\n}>;\nexport type WalletAuthorizationCache = Cache<WalletAuthorization | undefined>;\nexport type WalletAuthorizationProps = Readonly<{\n cache?: WalletAuthorizationCache;\n chain: Chain;\n identity: AppIdentity;\n store: AuthorizationStore;\n}>;\nexport function useAuthorization({ chain, identity, store }: WalletAuthorizationProps) {\n const { accounts, authToken, persist, selectedAccount } = useAuthorizationStore({\n store,\n });\n\n const handleAuthorizationResult = useCallback(\n async (authorizationResult: AuthorizationResult): Promise<WalletAuthorization> => {\n const nextAuthorization = getAuthorizationFromAuthorizationResult(authorizationResult, selectedAccount);\n await persist(nextAuthorization);\n return nextAuthorization;\n },\n [selectedAccount, persist],\n );\n\n const authorizeSession = useCallback(\n async (wallet: AuthorizeAPI) => {\n try {\n const authorizationResult = await wallet.authorize({\n auth_token: authToken,\n chain,\n identity,\n });\n return (await handleAuthorizationResult(authorizationResult)).selectedAccount;\n } catch (error) {\n if (\n error instanceof SolanaMobileWalletAdapterProtocolError &&\n error.code === SolanaMobileWalletAdapterProtocolErrorCode.ERROR_AUTHORIZATION_FAILED\n ) {\n const retryResult = await wallet.authorize({\n chain,\n identity,\n });\n return (await handleAuthorizationResult(retryResult)).selectedAccount;\n }\n throw error;\n }\n },\n [authToken, chain, identity, handleAuthorizationResult],\n );\n\n const authorizeSessionWithSignIn = useCallback(\n async (wallet: AuthorizeAPI, signInPayload: SignInPayload) => {\n try {\n const authorizationResult = await wallet.authorize({\n auth_token: authToken,\n chain,\n identity,\n sign_in_payload: signInPayload,\n });\n return (await handleAuthorizationResult(authorizationResult)).selectedAccount;\n } catch (error) {\n if (\n error instanceof SolanaMobileWalletAdapterProtocolError &&\n error.code === SolanaMobileWalletAdapterProtocolErrorCode.ERROR_AUTHORIZATION_FAILED\n ) {\n const retryResult = await wallet.authorize({\n chain,\n identity,\n sign_in_payload: signInPayload,\n });\n return (await handleAuthorizationResult(retryResult)).selectedAccount;\n }\n throw error;\n }\n },\n [authToken, chain, identity, handleAuthorizationResult],\n );\n\n const deauthorizeSession = useCallback(\n async (wallet: DeauthorizeAPI) => {\n if (authToken == null) {\n return;\n }\n await wallet.deauthorize({ auth_token: authToken });\n await persist(null);\n },\n [authToken, persist],\n );\n\n const deauthorizeSessions = useCallback(async () => {\n await persist(null);\n }, [persist]);\n\n return useMemo(\n () => ({\n accounts,\n authorizeSession,\n authorizeSessionWithSignIn,\n deauthorizeSession,\n deauthorizeSessions,\n selectedAccount,\n }),\n [\n accounts,\n authorizeSession,\n authorizeSessionWithSignIn,\n deauthorizeSession,\n deauthorizeSessions,\n selectedAccount,\n ],\n );\n}\n","import { Transaction, TransactionSignature, VersionedTransaction } from '@solana/web3.js';\nimport { AuthorizeAPI, SignInPayload } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { transact } from '@solana-mobile/mobile-wallet-adapter-protocol-web3js';\nimport { useCallback, useContext, useMemo } from 'react';\n\nimport { MobileWalletProviderContext } from './mobile-wallet-provider';\nimport { Account, useAuthorization } from './use-authorization';\n\nexport function useMobileWallet() {\n const ctx = useContext(MobileWalletProviderContext);\n const {\n authorizeSessionWithSignIn,\n authorizeSession,\n deauthorizeSessions,\n selectedAccount,\n accounts,\n deauthorizeSession,\n } = useAuthorization(ctx);\n\n const connect = useCallback(\n async (): Promise<Account> => await transact(async wallet => await authorizeSession(wallet)),\n [authorizeSession],\n );\n\n const connectAnd = useCallback(\n async (cb: (wallet: AuthorizeAPI) => Promise<Account | void>): Promise<Account | void> => {\n return await transact(async wallet => await cb(wallet));\n },\n [],\n );\n\n const signIn = useCallback(\n async (signInPayload: SignInPayload): Promise<Account> =>\n await transact(async wallet => await authorizeSessionWithSignIn(wallet, signInPayload)),\n [authorizeSessionWithSignIn],\n );\n\n const disconnect = useCallback(async (): Promise<void> => await deauthorizeSessions(), [deauthorizeSessions]);\n\n const signAndSendTransaction = useCallback(\n async (\n transaction: Transaction | VersionedTransaction,\n minContextSlot: number,\n ): Promise<TransactionSignature> =>\n await transact(async wallet => {\n await authorizeSession(wallet);\n const signatures = await wallet.signAndSendTransactions({\n minContextSlot,\n transactions: [transaction],\n });\n return signatures[0];\n }),\n [authorizeSession],\n );\n\n const signMessage = useCallback(\n async (message: Uint8Array): Promise<Uint8Array> =>\n await transact(async wallet => {\n const authResult = await authorizeSession(wallet);\n const signedMessages = await wallet.signMessages({\n addresses: [authResult.addressBase64],\n payloads: [message],\n });\n return signedMessages[0];\n }),\n [authorizeSession],\n );\n\n const signTransaction = useCallback(\n async <T extends Transaction | VersionedTransaction, K extends T | T[]>(transaction: K): Promise<K> =>\n await transact(async wallet => {\n await authorizeSession(wallet);\n const signedTxs = await wallet.signTransactions({\n transactions: Array.isArray(transaction) ? transaction : [transaction],\n });\n return Array.isArray(transaction) ? signedTxs : signedTxs[0];\n }),\n\n [authorizeSession],\n );\n\n return useMemo(\n () => ({\n ...ctx,\n account: selectedAccount,\n accounts,\n connect,\n connectAnd,\n deauthorizeSession,\n disconnect,\n signAndSendTransaction,\n signIn,\n signMessage,\n signTransaction,\n }),\n [\n accounts,\n connect,\n connectAnd,\n ctx,\n deauthorizeSession,\n disconnect,\n selectedAccount,\n signAndSendTransaction,\n signIn,\n signMessage,\n signTransaction,\n ],\n );\n}\n"]}
@@ -23,6 +23,7 @@ export declare function useMobileWallet(): {
23
23
  signAndSendTransaction: (transaction: Transaction | VersionedTransaction, minContextSlot: number) => Promise<TransactionSignature>;
24
24
  signIn: (signInPayload: SignInPayload) => Promise<Account>;
25
25
  signMessage: (message: Uint8Array) => Promise<Uint8Array>;
26
+ signTransaction: <T extends Transaction | VersionedTransaction, K extends T | T[]>(transaction: K) => Promise<K>;
26
27
  connection: import("@solana/web3.js").Connection;
27
28
  store: import("./authorization-store").AuthorizationStore;
28
29
  cache?: import("./use-authorization").WalletAuthorizationCache;
@@ -1 +1 @@
1
- {"version":3,"file":"use-mobile-wallet.d.ts","sourceRoot":"","sources":["../../src/use-mobile-wallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC1F,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AAK5F,OAAO,EAAE,OAAO,EAAoB,MAAM,qBAAqB,CAAC;AAEhE,wBAAgB,eAAe;;;;;;;;;;;;;;;mBAYb,OAAO,CAAC,OAAO,CAAC;qBAKf,CAAC,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,KAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;;sBAYjD,OAAO,CAAC,IAAI,CAAC;0CAIjC,WAAW,GAAG,oBAAoB,kBAC/B,MAAM,KACvB,OAAO,CAAC,oBAAoB,CAAC;4BAXV,aAAa,KAAG,OAAO,CAAC,OAAO,CAAC;2BAwBtC,UAAU,KAAG,OAAO,CAAC,UAAU,CAAC;;;;;;EAsCvD"}
1
+ {"version":3,"file":"use-mobile-wallet.d.ts","sourceRoot":"","sources":["../../src/use-mobile-wallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC1F,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AAK5F,OAAO,EAAE,OAAO,EAAoB,MAAM,qBAAqB,CAAC;AAEhE,wBAAgB,eAAe;;;;;;;;;;;;;;;mBAYb,OAAO,CAAC,OAAO,CAAC;qBAKf,CAAC,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,KAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;;sBAYjD,OAAO,CAAC,IAAI,CAAC;0CAIjC,WAAW,GAAG,oBAAoB,kBAC/B,MAAM,KACvB,OAAO,CAAC,oBAAoB,CAAC;4BAXV,aAAa,KAAG,OAAO,CAAC,OAAO,CAAC;2BAwBtC,UAAU,KAAG,OAAO,CAAC,UAAU,CAAC;sBAazC,CAAC,SAAS,WAAW,GAAG,oBAAoB,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,eAAe,CAAC,KAAG,OAAO,CAAC,CAAC,CAAC;;;;;;EAwC1G"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wallet-ui/react-native-web3js",
3
- "version": "3.1.0",
3
+ "version": "3.2.0",
4
4
  "description": "React components for Wallet UI",
5
5
  "exports": {
6
6
  ".": {
@@ -68,7 +68,7 @@
68
68
  "@wallet-standard/react": "1.0.1",
69
69
  "js-base64": "^3.7.8",
70
70
  "nanostores": "^1.1.0",
71
- "@wallet-ui/core": "3.1.0"
71
+ "@wallet-ui/core": "3.2.0"
72
72
  },
73
73
  "peerDependencies": {
74
74
  "react": ">=18"