@wallet-ui/react-native-web3js 3.3.0 → 4.0.0-canary-20260304112557

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.
@@ -5,10 +5,10 @@ var React = require('react');
5
5
  var AsyncStorage = require('@react-native-async-storage/async-storage');
6
6
  var nanostores = require('nanostores');
7
7
  var mobileWalletAdapterProtocol = require('@solana-mobile/mobile-wallet-adapter-protocol');
8
+ var core = require('@wallet-ui/core');
8
9
  var jsBase64 = require('js-base64');
9
10
  var react = require('@nanostores/react');
10
11
  var mobileWalletAdapterProtocolWeb3js = require('@solana-mobile/mobile-wallet-adapter-protocol-web3js');
11
- var core = require('@wallet-ui/core');
12
12
 
13
13
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
14
14
 
@@ -115,6 +115,16 @@ function MobileWalletProvider({
115
115
  children
116
116
  );
117
117
  }
118
+ function convertSignInResult({
119
+ account,
120
+ signInResult
121
+ }) {
122
+ return {
123
+ account,
124
+ signature: core.stringToUint8Array(signInResult.signature),
125
+ signedMessage: core.stringToUint8Array(signInResult.signed_message)
126
+ };
127
+ }
118
128
  function getPublicKeyFromAddress(address) {
119
129
  const publicKeyByteArray = jsBase64.toUint8Array(address);
120
130
  return new web3_js.PublicKey(publicKeyByteArray);
@@ -208,21 +218,29 @@ function useAuthorization({ chain, identity, store }) {
208
218
  const authorizeSessionWithSignIn = React.useCallback(
209
219
  async (wallet, signInPayload) => {
210
220
  try {
211
- const authorizationResult = await wallet.authorize({
221
+ const result = await wallet.authorize({
212
222
  auth_token: authToken,
213
223
  chain,
214
224
  identity,
215
225
  sign_in_payload: signInPayload
216
226
  });
217
- return (await handleAuthorizationResult(authorizationResult)).selectedAccount;
227
+ const { selectedAccount: account } = await handleAuthorizationResult(result);
228
+ if (!result.sign_in_result) {
229
+ throw new Error("Sign in result not retrieved.");
230
+ }
231
+ return convertSignInResult({ account, signInResult: result.sign_in_result });
218
232
  } catch (error) {
219
233
  if (error instanceof mobileWalletAdapterProtocol.SolanaMobileWalletAdapterProtocolError && error.code === mobileWalletAdapterProtocol.SolanaMobileWalletAdapterProtocolErrorCode.ERROR_AUTHORIZATION_FAILED) {
220
- const retryResult = await wallet.authorize({
234
+ const result = await wallet.authorize({
221
235
  chain,
222
236
  identity,
223
237
  sign_in_payload: signInPayload
224
238
  });
225
- return (await handleAuthorizationResult(retryResult)).selectedAccount;
239
+ if (!result.sign_in_result) {
240
+ throw new Error("Sign in result not retrieved.", { cause: error });
241
+ }
242
+ const { selectedAccount: account } = await handleAuthorizationResult(result);
243
+ return convertSignInResult({ account, signInResult: result.sign_in_result });
226
244
  }
227
245
  throw error;
228
246
  }
@@ -360,19 +378,20 @@ Object.defineProperty(exports, "toUint8Array", {
360
378
  });
361
379
  exports.MobileWalletProvider = MobileWalletProvider;
362
380
  exports.MobileWalletProviderContext = MobileWalletProviderContext;
381
+ exports.convertSignInResult = convertSignInResult;
363
382
  exports.createAuthorizationStore = createAuthorizationStore;
364
383
  exports.useAuthorization = useAuthorization;
365
384
  exports.useMobileWallet = useMobileWallet;
366
- Object.keys(mobileWalletAdapterProtocolWeb3js).forEach(function (k) {
385
+ Object.keys(core).forEach(function (k) {
367
386
  if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
368
387
  enumerable: true,
369
- get: function () { return mobileWalletAdapterProtocolWeb3js[k]; }
388
+ get: function () { return core[k]; }
370
389
  });
371
390
  });
372
- Object.keys(core).forEach(function (k) {
391
+ Object.keys(mobileWalletAdapterProtocolWeb3js).forEach(function (k) {
373
392
  if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
374
393
  enumerable: true,
375
- get: function () { return core[k]; }
394
+ get: function () { return mobileWalletAdapterProtocolWeb3js[k]; }
376
395
  });
377
396
  });
378
397
  //# sourceMappingURL=index.browser.cjs.map
@@ -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, 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 { TransactionSignatures } from './types';\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 <T extends Transaction | VersionedTransaction, K extends T | T[]>(\n transaction: K,\n minContextSlot: number,\n ): Promise<TransactionSignatures<K>> =>\n await transact(async wallet => {\n await authorizeSession(wallet);\n\n const isTransactionsArray = Array.isArray(transaction);\n\n const signatures = await wallet.signAndSendTransactions({\n minContextSlot,\n transactions: isTransactionsArray ? transaction : [transaction],\n });\n\n return isTransactionsArray\n ? (signatures as TransactionSignatures<K>)\n : (signatures[0] as TransactionSignatures<K>);\n }),\n [authorizeSession],\n );\n\n const signMessage = useCallback(\n async <K extends Uint8Array | Uint8Array[]>(message: K): Promise<K> =>\n await transact(async wallet => {\n const authResult = await authorizeSession(wallet);\n const payloads: Uint8Array[] = Array.isArray(message) ? message : [message];\n const signed = await wallet.signMessages({\n addresses: payloads.map(() => authResult.addressBase64),\n payloads,\n });\n return (Array.isArray(message) ? signed : signed[0]) as K;\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"]}
1
+ {"version":3,"sources":["../src/async-storage-cache.ts","../src/authorization-store.ts","../src/mobile-wallet-provider.tsx","../src/convert-sign-in-result.ts","../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","stringToUint8Array","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 { SolanaSignInOutput } from '@solana/wallet-standard-features';\nimport { SignInResult } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { stringToUint8Array } from '@wallet-ui/core';\n\nimport { Account } from './use-authorization';\n\nexport type SignInOutput = Omit<SolanaSignInOutput, 'account' | 'signatureType'> &\n Readonly<{\n account: Account;\n }>;\n\nexport function convertSignInResult({\n account,\n signInResult,\n}: {\n account: Account;\n signInResult: SignInResult;\n}): SignInOutput {\n return {\n account,\n signature: stringToUint8Array(signInResult.signature),\n signedMessage: stringToUint8Array(signInResult.signed_message),\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 { convertSignInResult, SignInOutput } from './convert-sign-in-result';\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): Promise<SignInOutput> => {\n try {\n const result = await wallet.authorize({\n auth_token: authToken,\n chain,\n identity,\n sign_in_payload: signInPayload,\n });\n const { selectedAccount: account } = await handleAuthorizationResult(result);\n\n if (!result.sign_in_result) {\n throw new Error('Sign in result not retrieved.');\n }\n return convertSignInResult({ account, signInResult: result.sign_in_result });\n } catch (error) {\n if (\n error instanceof SolanaMobileWalletAdapterProtocolError &&\n error.code === SolanaMobileWalletAdapterProtocolErrorCode.ERROR_AUTHORIZATION_FAILED\n ) {\n const result = await wallet.authorize({\n chain,\n identity,\n sign_in_payload: signInPayload,\n });\n if (!result.sign_in_result) {\n throw new Error('Sign in result not retrieved.', { cause: error });\n }\n const { selectedAccount: account } = await handleAuthorizationResult(result);\n return convertSignInResult({ account, signInResult: result.sign_in_result });\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, 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 { SignInOutput } from './convert-sign-in-result';\nimport { MobileWalletProviderContext } from './mobile-wallet-provider';\nimport { TransactionSignatures } from './types';\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<SignInOutput> =>\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 <T extends Transaction | VersionedTransaction, K extends T | T[]>(\n transaction: K,\n minContextSlot: number,\n ): Promise<TransactionSignatures<K>> =>\n await transact(async wallet => {\n await authorizeSession(wallet);\n\n const isTransactionsArray = Array.isArray(transaction);\n\n const signatures = await wallet.signAndSendTransactions({\n minContextSlot,\n transactions: isTransactionsArray ? transaction : [transaction],\n });\n\n return isTransactionsArray\n ? (signatures as TransactionSignatures<K>)\n : (signatures[0] as TransactionSignatures<K>);\n }),\n [authorizeSession],\n );\n\n const signMessage = useCallback(\n async <K extends Uint8Array | Uint8Array[]>(message: K): Promise<K> =>\n await transact(async wallet => {\n const authResult = await authorizeSession(wallet);\n const payloads: Uint8Array[] = Array.isArray(message) ? message : [message];\n const signed = await wallet.signMessages({\n addresses: payloads.map(() => authResult.addressBase64),\n payloads,\n });\n return (Array.isArray(message) ? signed : signed[0]) as K;\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"]}
@@ -3,12 +3,13 @@ import React, { createContext, useMemo, useRef, useEffect, useCallback, useConte
3
3
  import AsyncStorage from '@react-native-async-storage/async-storage';
4
4
  import { atom, computed } from 'nanostores';
5
5
  import { SolanaMobileWalletAdapterProtocolError, SolanaMobileWalletAdapterProtocolErrorCode } from '@solana-mobile/mobile-wallet-adapter-protocol';
6
+ import { stringToUint8Array } from '@wallet-ui/core';
7
+ export * from '@wallet-ui/core';
6
8
  import { toUint8Array } from 'js-base64';
7
9
  export { fromUint8Array, toUint8Array } from 'js-base64';
8
10
  import { useStore } from '@nanostores/react';
9
11
  import { transact } from '@solana-mobile/mobile-wallet-adapter-protocol-web3js';
10
12
  export * from '@solana-mobile/mobile-wallet-adapter-protocol-web3js';
11
- export * from '@wallet-ui/core';
12
13
 
13
14
  // src/mobile-wallet-provider.tsx
14
15
  function cacheReviver(key, value) {
@@ -110,6 +111,16 @@ function MobileWalletProvider({
110
111
  children
111
112
  );
112
113
  }
114
+ function convertSignInResult({
115
+ account,
116
+ signInResult
117
+ }) {
118
+ return {
119
+ account,
120
+ signature: stringToUint8Array(signInResult.signature),
121
+ signedMessage: stringToUint8Array(signInResult.signed_message)
122
+ };
123
+ }
113
124
  function getPublicKeyFromAddress(address) {
114
125
  const publicKeyByteArray = toUint8Array(address);
115
126
  return new PublicKey(publicKeyByteArray);
@@ -203,21 +214,29 @@ function useAuthorization({ chain, identity, store }) {
203
214
  const authorizeSessionWithSignIn = useCallback(
204
215
  async (wallet, signInPayload) => {
205
216
  try {
206
- const authorizationResult = await wallet.authorize({
217
+ const result = await wallet.authorize({
207
218
  auth_token: authToken,
208
219
  chain,
209
220
  identity,
210
221
  sign_in_payload: signInPayload
211
222
  });
212
- return (await handleAuthorizationResult(authorizationResult)).selectedAccount;
223
+ const { selectedAccount: account } = await handleAuthorizationResult(result);
224
+ if (!result.sign_in_result) {
225
+ throw new Error("Sign in result not retrieved.");
226
+ }
227
+ return convertSignInResult({ account, signInResult: result.sign_in_result });
213
228
  } catch (error) {
214
229
  if (error instanceof SolanaMobileWalletAdapterProtocolError && error.code === SolanaMobileWalletAdapterProtocolErrorCode.ERROR_AUTHORIZATION_FAILED) {
215
- const retryResult = await wallet.authorize({
230
+ const result = await wallet.authorize({
216
231
  chain,
217
232
  identity,
218
233
  sign_in_payload: signInPayload
219
234
  });
220
- return (await handleAuthorizationResult(retryResult)).selectedAccount;
235
+ if (!result.sign_in_result) {
236
+ throw new Error("Sign in result not retrieved.", { cause: error });
237
+ }
238
+ const { selectedAccount: account } = await handleAuthorizationResult(result);
239
+ return convertSignInResult({ account, signInResult: result.sign_in_result });
221
240
  }
222
241
  throw error;
223
242
  }
@@ -345,6 +364,6 @@ function useMobileWallet() {
345
364
  );
346
365
  }
347
366
 
348
- export { MobileWalletProvider, MobileWalletProviderContext, createAuthorizationStore, useAuthorization, useMobileWallet };
367
+ export { MobileWalletProvider, MobileWalletProviderContext, convertSignInResult, createAuthorizationStore, useAuthorization, useMobileWallet };
349
368
  //# sourceMappingURL=index.browser.mjs.map
350
369
  //# sourceMappingURL=index.browser.mjs.map
@@ -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, 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 { TransactionSignatures } from './types';\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 <T extends Transaction | VersionedTransaction, K extends T | T[]>(\n transaction: K,\n minContextSlot: number,\n ): Promise<TransactionSignatures<K>> =>\n await transact(async wallet => {\n await authorizeSession(wallet);\n\n const isTransactionsArray = Array.isArray(transaction);\n\n const signatures = await wallet.signAndSendTransactions({\n minContextSlot,\n transactions: isTransactionsArray ? transaction : [transaction],\n });\n\n return isTransactionsArray\n ? (signatures as TransactionSignatures<K>)\n : (signatures[0] as TransactionSignatures<K>);\n }),\n [authorizeSession],\n );\n\n const signMessage = useCallback(\n async <K extends Uint8Array | Uint8Array[]>(message: K): Promise<K> =>\n await transact(async wallet => {\n const authResult = await authorizeSession(wallet);\n const payloads: Uint8Array[] = Array.isArray(message) ? message : [message];\n const signed = await wallet.signMessages({\n addresses: payloads.map(() => authResult.addressBase64),\n payloads,\n });\n return (Array.isArray(message) ? signed : signed[0]) as K;\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"]}
1
+ {"version":3,"sources":["../src/async-storage-cache.ts","../src/authorization-store.ts","../src/mobile-wallet-provider.tsx","../src/convert-sign-in-result.ts","../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 { SolanaSignInOutput } from '@solana/wallet-standard-features';\nimport { SignInResult } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { stringToUint8Array } from '@wallet-ui/core';\n\nimport { Account } from './use-authorization';\n\nexport type SignInOutput = Omit<SolanaSignInOutput, 'account' | 'signatureType'> &\n Readonly<{\n account: Account;\n }>;\n\nexport function convertSignInResult({\n account,\n signInResult,\n}: {\n account: Account;\n signInResult: SignInResult;\n}): SignInOutput {\n return {\n account,\n signature: stringToUint8Array(signInResult.signature),\n signedMessage: stringToUint8Array(signInResult.signed_message),\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 { convertSignInResult, SignInOutput } from './convert-sign-in-result';\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): Promise<SignInOutput> => {\n try {\n const result = await wallet.authorize({\n auth_token: authToken,\n chain,\n identity,\n sign_in_payload: signInPayload,\n });\n const { selectedAccount: account } = await handleAuthorizationResult(result);\n\n if (!result.sign_in_result) {\n throw new Error('Sign in result not retrieved.');\n }\n return convertSignInResult({ account, signInResult: result.sign_in_result });\n } catch (error) {\n if (\n error instanceof SolanaMobileWalletAdapterProtocolError &&\n error.code === SolanaMobileWalletAdapterProtocolErrorCode.ERROR_AUTHORIZATION_FAILED\n ) {\n const result = await wallet.authorize({\n chain,\n identity,\n sign_in_payload: signInPayload,\n });\n if (!result.sign_in_result) {\n throw new Error('Sign in result not retrieved.', { cause: error });\n }\n const { selectedAccount: account } = await handleAuthorizationResult(result);\n return convertSignInResult({ account, signInResult: result.sign_in_result });\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, 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 { SignInOutput } from './convert-sign-in-result';\nimport { MobileWalletProviderContext } from './mobile-wallet-provider';\nimport { TransactionSignatures } from './types';\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<SignInOutput> =>\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 <T extends Transaction | VersionedTransaction, K extends T | T[]>(\n transaction: K,\n minContextSlot: number,\n ): Promise<TransactionSignatures<K>> =>\n await transact(async wallet => {\n await authorizeSession(wallet);\n\n const isTransactionsArray = Array.isArray(transaction);\n\n const signatures = await wallet.signAndSendTransactions({\n minContextSlot,\n transactions: isTransactionsArray ? transaction : [transaction],\n });\n\n return isTransactionsArray\n ? (signatures as TransactionSignatures<K>)\n : (signatures[0] as TransactionSignatures<K>);\n }),\n [authorizeSession],\n );\n\n const signMessage = useCallback(\n async <K extends Uint8Array | Uint8Array[]>(message: K): Promise<K> =>\n await transact(async wallet => {\n const authResult = await authorizeSession(wallet);\n const payloads: Uint8Array[] = Array.isArray(message) ? message : [message];\n const signed = await wallet.signMessages({\n addresses: payloads.map(() => authResult.addressBase64),\n payloads,\n });\n return (Array.isArray(message) ? signed : signed[0]) as K;\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"]}
@@ -3,12 +3,13 @@ import React, { createContext, useMemo, useRef, useEffect, useCallback, useConte
3
3
  import AsyncStorage from '@react-native-async-storage/async-storage';
4
4
  import { atom, computed } from 'nanostores';
5
5
  import { SolanaMobileWalletAdapterProtocolError, SolanaMobileWalletAdapterProtocolErrorCode } from '@solana-mobile/mobile-wallet-adapter-protocol';
6
+ import { stringToUint8Array } from '@wallet-ui/core';
7
+ export * from '@wallet-ui/core';
6
8
  import { toUint8Array } from 'js-base64';
7
9
  export { fromUint8Array, toUint8Array } from 'js-base64';
8
10
  import { useStore } from '@nanostores/react';
9
11
  import { transact } from '@solana-mobile/mobile-wallet-adapter-protocol-web3js';
10
12
  export * from '@solana-mobile/mobile-wallet-adapter-protocol-web3js';
11
- export * from '@wallet-ui/core';
12
13
 
13
14
  // src/mobile-wallet-provider.tsx
14
15
  function cacheReviver(key, value) {
@@ -110,6 +111,16 @@ function MobileWalletProvider({
110
111
  children
111
112
  );
112
113
  }
114
+ function convertSignInResult({
115
+ account,
116
+ signInResult
117
+ }) {
118
+ return {
119
+ account,
120
+ signature: stringToUint8Array(signInResult.signature),
121
+ signedMessage: stringToUint8Array(signInResult.signed_message)
122
+ };
123
+ }
113
124
  function getPublicKeyFromAddress(address) {
114
125
  const publicKeyByteArray = toUint8Array(address);
115
126
  return new PublicKey(publicKeyByteArray);
@@ -203,21 +214,29 @@ function useAuthorization({ chain, identity, store }) {
203
214
  const authorizeSessionWithSignIn = useCallback(
204
215
  async (wallet, signInPayload) => {
205
216
  try {
206
- const authorizationResult = await wallet.authorize({
217
+ const result = await wallet.authorize({
207
218
  auth_token: authToken,
208
219
  chain,
209
220
  identity,
210
221
  sign_in_payload: signInPayload
211
222
  });
212
- return (await handleAuthorizationResult(authorizationResult)).selectedAccount;
223
+ const { selectedAccount: account } = await handleAuthorizationResult(result);
224
+ if (!result.sign_in_result) {
225
+ throw new Error("Sign in result not retrieved.");
226
+ }
227
+ return convertSignInResult({ account, signInResult: result.sign_in_result });
213
228
  } catch (error) {
214
229
  if (error instanceof SolanaMobileWalletAdapterProtocolError && error.code === SolanaMobileWalletAdapterProtocolErrorCode.ERROR_AUTHORIZATION_FAILED) {
215
- const retryResult = await wallet.authorize({
230
+ const result = await wallet.authorize({
216
231
  chain,
217
232
  identity,
218
233
  sign_in_payload: signInPayload
219
234
  });
220
- return (await handleAuthorizationResult(retryResult)).selectedAccount;
235
+ if (!result.sign_in_result) {
236
+ throw new Error("Sign in result not retrieved.", { cause: error });
237
+ }
238
+ const { selectedAccount: account } = await handleAuthorizationResult(result);
239
+ return convertSignInResult({ account, signInResult: result.sign_in_result });
221
240
  }
222
241
  throw error;
223
242
  }
@@ -345,6 +364,6 @@ function useMobileWallet() {
345
364
  );
346
365
  }
347
366
 
348
- export { MobileWalletProvider, MobileWalletProviderContext, createAuthorizationStore, useAuthorization, useMobileWallet };
367
+ export { MobileWalletProvider, MobileWalletProviderContext, convertSignInResult, createAuthorizationStore, useAuthorization, useMobileWallet };
349
368
  //# sourceMappingURL=index.native.mjs.map
350
369
  //# sourceMappingURL=index.native.mjs.map
@@ -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":";;;;;;;;;;;;;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;ACxIO,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;AAE7B,MAAA,MAAM,mBAAA,GAAsB,KAAA,CAAM,OAAA,CAAQ,WAAW,CAAA;AAErD,MAAA,MAAM,UAAA,GAAa,MAAM,MAAA,CAAO,uBAAA,CAAwB;AAAA,QACpD,cAAA;AAAA,QACA,YAAA,EAAc,mBAAA,GAAsB,WAAA,GAAc,CAAC,WAAW;AAAA,OACjE,CAAA;AAED,MAAA,OAAO,mBAAA,GACA,UAAA,GACA,UAAA,CAAW,CAAC,CAAA;AAAA,IACvB,CAAC,CAAA;AAAA,IACL,CAAC,gBAAgB;AAAA,GACrB;AAEA,EAAA,MAAM,WAAA,GAAcA,WAAAA;AAAA,IAChB,OAA4C,OAAA,KACxC,MAAM,QAAA,CAAS,OAAM,MAAA,KAAU;AAC3B,MAAA,MAAM,UAAA,GAAa,MAAM,gBAAA,CAAiB,MAAM,CAAA;AAChD,MAAA,MAAM,WAAyB,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,GAAI,OAAA,GAAU,CAAC,OAAO,CAAA;AAC1E,MAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,YAAA,CAAa;AAAA,QACrC,SAAA,EAAW,QAAA,CAAS,GAAA,CAAI,MAAM,WAAW,aAAa,CAAA;AAAA,QACtD;AAAA,OACH,CAAA;AACD,MAAA,OAAQ,MAAM,OAAA,CAAQ,OAAO,CAAA,GAAI,MAAA,GAAS,OAAO,CAAC,CAAA;AAAA,IACtD,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, 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 { TransactionSignatures } from './types';\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 <T extends Transaction | VersionedTransaction, K extends T | T[]>(\n transaction: K,\n minContextSlot: number,\n ): Promise<TransactionSignatures<K>> =>\n await transact(async wallet => {\n await authorizeSession(wallet);\n\n const isTransactionsArray = Array.isArray(transaction);\n\n const signatures = await wallet.signAndSendTransactions({\n minContextSlot,\n transactions: isTransactionsArray ? transaction : [transaction],\n });\n\n return isTransactionsArray\n ? (signatures as TransactionSignatures<K>)\n : (signatures[0] as TransactionSignatures<K>);\n }),\n [authorizeSession],\n );\n\n const signMessage = useCallback(\n async <K extends Uint8Array | Uint8Array[]>(message: K): Promise<K> =>\n await transact(async wallet => {\n const authResult = await authorizeSession(wallet);\n const payloads: Uint8Array[] = Array.isArray(message) ? message : [message];\n const signed = await wallet.signMessages({\n addresses: payloads.map(() => authResult.addressBase64),\n payloads,\n });\n return (Array.isArray(message) ? signed : signed[0]) as K;\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"]}
1
+ {"version":3,"sources":["../src/async-storage-cache.ts","../src/authorization-store.ts","../src/mobile-wallet-provider.tsx","../src/convert-sign-in-result.ts","../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;AChDO,SAAS,mBAAA,CAAoB;AAAA,EAChC,OAAA;AAAA,EACA;AACJ,CAAA,EAGiB;AACb,EAAA,OAAO;AAAA,IACH,OAAA;AAAA,IACA,SAAA,EAAW,kBAAA,CAAmB,YAAA,CAAa,SAAS,CAAA;AAAA,IACpD,aAAA,EAAe,kBAAA,CAAmB,YAAA,CAAa,cAAc;AAAA,GACjE;AACJ;ACnBO,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;;;AC0BO,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,KAAwD;AACjF,MAAA,IAAI;AACA,QAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,SAAA,CAAU;AAAA,UAClC,UAAA,EAAY,SAAA;AAAA,UACZ,KAAA;AAAA,UACA,QAAA;AAAA,UACA,eAAA,EAAiB;AAAA,SACpB,CAAA;AACD,QAAA,MAAM,EAAE,eAAA,EAAiB,OAAA,EAAQ,GAAI,MAAM,0BAA0B,MAAM,CAAA;AAE3E,QAAA,IAAI,CAAC,OAAO,cAAA,EAAgB;AACxB,UAAA,MAAM,IAAI,MAAM,+BAA+B,CAAA;AAAA,QACnD;AACA,QAAA,OAAO,oBAAoB,EAAE,OAAA,EAAS,YAAA,EAAc,MAAA,CAAO,gBAAgB,CAAA;AAAA,MAC/E,SAAS,KAAA,EAAO;AACZ,QAAA,IACI,KAAA,YAAiB,sCAAA,IACjB,KAAA,CAAM,IAAA,KAAS,2CAA2C,0BAAA,EAC5D;AACE,UAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,SAAA,CAAU;AAAA,YAClC,KAAA;AAAA,YACA,QAAA;AAAA,YACA,eAAA,EAAiB;AAAA,WACpB,CAAA;AACD,UAAA,IAAI,CAAC,OAAO,cAAA,EAAgB;AACxB,YAAA,MAAM,IAAI,KAAA,CAAM,+BAAA,EAAiC,EAAE,KAAA,EAAO,OAAO,CAAA;AAAA,UACrE;AACA,UAAA,MAAM,EAAE,eAAA,EAAiB,OAAA,EAAQ,GAAI,MAAM,0BAA0B,MAAM,CAAA;AAC3E,UAAA,OAAO,oBAAoB,EAAE,OAAA,EAAS,YAAA,EAAc,MAAA,CAAO,gBAAgB,CAAA;AAAA,QAC/E;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;ACjJO,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;AAE7B,MAAA,MAAM,mBAAA,GAAsB,KAAA,CAAM,OAAA,CAAQ,WAAW,CAAA;AAErD,MAAA,MAAM,UAAA,GAAa,MAAM,MAAA,CAAO,uBAAA,CAAwB;AAAA,QACpD,cAAA;AAAA,QACA,YAAA,EAAc,mBAAA,GAAsB,WAAA,GAAc,CAAC,WAAW;AAAA,OACjE,CAAA;AAED,MAAA,OAAO,mBAAA,GACA,UAAA,GACA,UAAA,CAAW,CAAC,CAAA;AAAA,IACvB,CAAC,CAAA;AAAA,IACL,CAAC,gBAAgB;AAAA,GACrB;AAEA,EAAA,MAAM,WAAA,GAAcA,WAAAA;AAAA,IAChB,OAA4C,OAAA,KACxC,MAAM,QAAA,CAAS,OAAM,MAAA,KAAU;AAC3B,MAAA,MAAM,UAAA,GAAa,MAAM,gBAAA,CAAiB,MAAM,CAAA;AAChD,MAAA,MAAM,WAAyB,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,GAAI,OAAA,GAAU,CAAC,OAAO,CAAA;AAC1E,MAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,YAAA,CAAa;AAAA,QACrC,SAAA,EAAW,QAAA,CAAS,GAAA,CAAI,MAAM,WAAW,aAAa,CAAA;AAAA,QACtD;AAAA,OACH,CAAA;AACD,MAAA,OAAQ,MAAM,OAAA,CAAQ,OAAO,CAAA,GAAI,MAAA,GAAS,OAAO,CAAC,CAAA;AAAA,IACtD,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 { SolanaSignInOutput } from '@solana/wallet-standard-features';\nimport { SignInResult } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { stringToUint8Array } from '@wallet-ui/core';\n\nimport { Account } from './use-authorization';\n\nexport type SignInOutput = Omit<SolanaSignInOutput, 'account' | 'signatureType'> &\n Readonly<{\n account: Account;\n }>;\n\nexport function convertSignInResult({\n account,\n signInResult,\n}: {\n account: Account;\n signInResult: SignInResult;\n}): SignInOutput {\n return {\n account,\n signature: stringToUint8Array(signInResult.signature),\n signedMessage: stringToUint8Array(signInResult.signed_message),\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 { convertSignInResult, SignInOutput } from './convert-sign-in-result';\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): Promise<SignInOutput> => {\n try {\n const result = await wallet.authorize({\n auth_token: authToken,\n chain,\n identity,\n sign_in_payload: signInPayload,\n });\n const { selectedAccount: account } = await handleAuthorizationResult(result);\n\n if (!result.sign_in_result) {\n throw new Error('Sign in result not retrieved.');\n }\n return convertSignInResult({ account, signInResult: result.sign_in_result });\n } catch (error) {\n if (\n error instanceof SolanaMobileWalletAdapterProtocolError &&\n error.code === SolanaMobileWalletAdapterProtocolErrorCode.ERROR_AUTHORIZATION_FAILED\n ) {\n const result = await wallet.authorize({\n chain,\n identity,\n sign_in_payload: signInPayload,\n });\n if (!result.sign_in_result) {\n throw new Error('Sign in result not retrieved.', { cause: error });\n }\n const { selectedAccount: account } = await handleAuthorizationResult(result);\n return convertSignInResult({ account, signInResult: result.sign_in_result });\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, 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 { SignInOutput } from './convert-sign-in-result';\nimport { MobileWalletProviderContext } from './mobile-wallet-provider';\nimport { TransactionSignatures } from './types';\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<SignInOutput> =>\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 <T extends Transaction | VersionedTransaction, K extends T | T[]>(\n transaction: K,\n minContextSlot: number,\n ): Promise<TransactionSignatures<K>> =>\n await transact(async wallet => {\n await authorizeSession(wallet);\n\n const isTransactionsArray = Array.isArray(transaction);\n\n const signatures = await wallet.signAndSendTransactions({\n minContextSlot,\n transactions: isTransactionsArray ? transaction : [transaction],\n });\n\n return isTransactionsArray\n ? (signatures as TransactionSignatures<K>)\n : (signatures[0] as TransactionSignatures<K>);\n }),\n [authorizeSession],\n );\n\n const signMessage = useCallback(\n async <K extends Uint8Array | Uint8Array[]>(message: K): Promise<K> =>\n await transact(async wallet => {\n const authResult = await authorizeSession(wallet);\n const payloads: Uint8Array[] = Array.isArray(message) ? message : [message];\n const signed = await wallet.signMessages({\n addresses: payloads.map(() => authResult.addressBase64),\n payloads,\n });\n return (Array.isArray(message) ? signed : signed[0]) as K;\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"]}
@@ -5,10 +5,10 @@ var React = require('react');
5
5
  var AsyncStorage = require('@react-native-async-storage/async-storage');
6
6
  var nanostores = require('nanostores');
7
7
  var mobileWalletAdapterProtocol = require('@solana-mobile/mobile-wallet-adapter-protocol');
8
+ var core = require('@wallet-ui/core');
8
9
  var jsBase64 = require('js-base64');
9
10
  var react = require('@nanostores/react');
10
11
  var mobileWalletAdapterProtocolWeb3js = require('@solana-mobile/mobile-wallet-adapter-protocol-web3js');
11
- var core = require('@wallet-ui/core');
12
12
 
13
13
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
14
14
 
@@ -115,6 +115,16 @@ function MobileWalletProvider({
115
115
  children
116
116
  );
117
117
  }
118
+ function convertSignInResult({
119
+ account,
120
+ signInResult
121
+ }) {
122
+ return {
123
+ account,
124
+ signature: core.stringToUint8Array(signInResult.signature),
125
+ signedMessage: core.stringToUint8Array(signInResult.signed_message)
126
+ };
127
+ }
118
128
  function getPublicKeyFromAddress(address) {
119
129
  const publicKeyByteArray = jsBase64.toUint8Array(address);
120
130
  return new web3_js.PublicKey(publicKeyByteArray);
@@ -208,21 +218,29 @@ function useAuthorization({ chain, identity, store }) {
208
218
  const authorizeSessionWithSignIn = React.useCallback(
209
219
  async (wallet, signInPayload) => {
210
220
  try {
211
- const authorizationResult = await wallet.authorize({
221
+ const result = await wallet.authorize({
212
222
  auth_token: authToken,
213
223
  chain,
214
224
  identity,
215
225
  sign_in_payload: signInPayload
216
226
  });
217
- return (await handleAuthorizationResult(authorizationResult)).selectedAccount;
227
+ const { selectedAccount: account } = await handleAuthorizationResult(result);
228
+ if (!result.sign_in_result) {
229
+ throw new Error("Sign in result not retrieved.");
230
+ }
231
+ return convertSignInResult({ account, signInResult: result.sign_in_result });
218
232
  } catch (error) {
219
233
  if (error instanceof mobileWalletAdapterProtocol.SolanaMobileWalletAdapterProtocolError && error.code === mobileWalletAdapterProtocol.SolanaMobileWalletAdapterProtocolErrorCode.ERROR_AUTHORIZATION_FAILED) {
220
- const retryResult = await wallet.authorize({
234
+ const result = await wallet.authorize({
221
235
  chain,
222
236
  identity,
223
237
  sign_in_payload: signInPayload
224
238
  });
225
- return (await handleAuthorizationResult(retryResult)).selectedAccount;
239
+ if (!result.sign_in_result) {
240
+ throw new Error("Sign in result not retrieved.", { cause: error });
241
+ }
242
+ const { selectedAccount: account } = await handleAuthorizationResult(result);
243
+ return convertSignInResult({ account, signInResult: result.sign_in_result });
226
244
  }
227
245
  throw error;
228
246
  }
@@ -360,19 +378,20 @@ Object.defineProperty(exports, "toUint8Array", {
360
378
  });
361
379
  exports.MobileWalletProvider = MobileWalletProvider;
362
380
  exports.MobileWalletProviderContext = MobileWalletProviderContext;
381
+ exports.convertSignInResult = convertSignInResult;
363
382
  exports.createAuthorizationStore = createAuthorizationStore;
364
383
  exports.useAuthorization = useAuthorization;
365
384
  exports.useMobileWallet = useMobileWallet;
366
- Object.keys(mobileWalletAdapterProtocolWeb3js).forEach(function (k) {
385
+ Object.keys(core).forEach(function (k) {
367
386
  if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
368
387
  enumerable: true,
369
- get: function () { return mobileWalletAdapterProtocolWeb3js[k]; }
388
+ get: function () { return core[k]; }
370
389
  });
371
390
  });
372
- Object.keys(core).forEach(function (k) {
391
+ Object.keys(mobileWalletAdapterProtocolWeb3js).forEach(function (k) {
373
392
  if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
374
393
  enumerable: true,
375
- get: function () { return core[k]; }
394
+ get: function () { return mobileWalletAdapterProtocolWeb3js[k]; }
376
395
  });
377
396
  });
378
397
  //# sourceMappingURL=index.node.cjs.map
@@ -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.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, 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 { TransactionSignatures } from './types';\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 <T extends Transaction | VersionedTransaction, K extends T | T[]>(\n transaction: K,\n minContextSlot: number,\n ): Promise<TransactionSignatures<K>> =>\n await transact(async wallet => {\n await authorizeSession(wallet);\n\n const isTransactionsArray = Array.isArray(transaction);\n\n const signatures = await wallet.signAndSendTransactions({\n minContextSlot,\n transactions: isTransactionsArray ? transaction : [transaction],\n });\n\n return isTransactionsArray\n ? (signatures as TransactionSignatures<K>)\n : (signatures[0] as TransactionSignatures<K>);\n }),\n [authorizeSession],\n );\n\n const signMessage = useCallback(\n async <K extends Uint8Array | Uint8Array[]>(message: K): Promise<K> =>\n await transact(async wallet => {\n const authResult = await authorizeSession(wallet);\n const payloads: Uint8Array[] = Array.isArray(message) ? message : [message];\n const signed = await wallet.signMessages({\n addresses: payloads.map(() => authResult.addressBase64),\n payloads,\n });\n return (Array.isArray(message) ? signed : signed[0]) as K;\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"]}
1
+ {"version":3,"sources":["../src/async-storage-cache.ts","../src/authorization-store.ts","../src/mobile-wallet-provider.tsx","../src/convert-sign-in-result.ts","../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","stringToUint8Array","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 { SolanaSignInOutput } from '@solana/wallet-standard-features';\nimport { SignInResult } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { stringToUint8Array } from '@wallet-ui/core';\n\nimport { Account } from './use-authorization';\n\nexport type SignInOutput = Omit<SolanaSignInOutput, 'account' | 'signatureType'> &\n Readonly<{\n account: Account;\n }>;\n\nexport function convertSignInResult({\n account,\n signInResult,\n}: {\n account: Account;\n signInResult: SignInResult;\n}): SignInOutput {\n return {\n account,\n signature: stringToUint8Array(signInResult.signature),\n signedMessage: stringToUint8Array(signInResult.signed_message),\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 { convertSignInResult, SignInOutput } from './convert-sign-in-result';\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): Promise<SignInOutput> => {\n try {\n const result = await wallet.authorize({\n auth_token: authToken,\n chain,\n identity,\n sign_in_payload: signInPayload,\n });\n const { selectedAccount: account } = await handleAuthorizationResult(result);\n\n if (!result.sign_in_result) {\n throw new Error('Sign in result not retrieved.');\n }\n return convertSignInResult({ account, signInResult: result.sign_in_result });\n } catch (error) {\n if (\n error instanceof SolanaMobileWalletAdapterProtocolError &&\n error.code === SolanaMobileWalletAdapterProtocolErrorCode.ERROR_AUTHORIZATION_FAILED\n ) {\n const result = await wallet.authorize({\n chain,\n identity,\n sign_in_payload: signInPayload,\n });\n if (!result.sign_in_result) {\n throw new Error('Sign in result not retrieved.', { cause: error });\n }\n const { selectedAccount: account } = await handleAuthorizationResult(result);\n return convertSignInResult({ account, signInResult: result.sign_in_result });\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, 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 { SignInOutput } from './convert-sign-in-result';\nimport { MobileWalletProviderContext } from './mobile-wallet-provider';\nimport { TransactionSignatures } from './types';\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<SignInOutput> =>\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 <T extends Transaction | VersionedTransaction, K extends T | T[]>(\n transaction: K,\n minContextSlot: number,\n ): Promise<TransactionSignatures<K>> =>\n await transact(async wallet => {\n await authorizeSession(wallet);\n\n const isTransactionsArray = Array.isArray(transaction);\n\n const signatures = await wallet.signAndSendTransactions({\n minContextSlot,\n transactions: isTransactionsArray ? transaction : [transaction],\n });\n\n return isTransactionsArray\n ? (signatures as TransactionSignatures<K>)\n : (signatures[0] as TransactionSignatures<K>);\n }),\n [authorizeSession],\n );\n\n const signMessage = useCallback(\n async <K extends Uint8Array | Uint8Array[]>(message: K): Promise<K> =>\n await transact(async wallet => {\n const authResult = await authorizeSession(wallet);\n const payloads: Uint8Array[] = Array.isArray(message) ? message : [message];\n const signed = await wallet.signMessages({\n addresses: payloads.map(() => authResult.addressBase64),\n payloads,\n });\n return (Array.isArray(message) ? signed : signed[0]) as K;\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"]}
@@ -3,12 +3,13 @@ import React, { createContext, useMemo, useRef, useEffect, useCallback, useConte
3
3
  import AsyncStorage from '@react-native-async-storage/async-storage';
4
4
  import { atom, computed } from 'nanostores';
5
5
  import { SolanaMobileWalletAdapterProtocolError, SolanaMobileWalletAdapterProtocolErrorCode } from '@solana-mobile/mobile-wallet-adapter-protocol';
6
+ import { stringToUint8Array } from '@wallet-ui/core';
7
+ export * from '@wallet-ui/core';
6
8
  import { toUint8Array } from 'js-base64';
7
9
  export { fromUint8Array, toUint8Array } from 'js-base64';
8
10
  import { useStore } from '@nanostores/react';
9
11
  import { transact } from '@solana-mobile/mobile-wallet-adapter-protocol-web3js';
10
12
  export * from '@solana-mobile/mobile-wallet-adapter-protocol-web3js';
11
- export * from '@wallet-ui/core';
12
13
 
13
14
  // src/mobile-wallet-provider.tsx
14
15
  function cacheReviver(key, value) {
@@ -110,6 +111,16 @@ function MobileWalletProvider({
110
111
  children
111
112
  );
112
113
  }
114
+ function convertSignInResult({
115
+ account,
116
+ signInResult
117
+ }) {
118
+ return {
119
+ account,
120
+ signature: stringToUint8Array(signInResult.signature),
121
+ signedMessage: stringToUint8Array(signInResult.signed_message)
122
+ };
123
+ }
113
124
  function getPublicKeyFromAddress(address) {
114
125
  const publicKeyByteArray = toUint8Array(address);
115
126
  return new PublicKey(publicKeyByteArray);
@@ -203,21 +214,29 @@ function useAuthorization({ chain, identity, store }) {
203
214
  const authorizeSessionWithSignIn = useCallback(
204
215
  async (wallet, signInPayload) => {
205
216
  try {
206
- const authorizationResult = await wallet.authorize({
217
+ const result = await wallet.authorize({
207
218
  auth_token: authToken,
208
219
  chain,
209
220
  identity,
210
221
  sign_in_payload: signInPayload
211
222
  });
212
- return (await handleAuthorizationResult(authorizationResult)).selectedAccount;
223
+ const { selectedAccount: account } = await handleAuthorizationResult(result);
224
+ if (!result.sign_in_result) {
225
+ throw new Error("Sign in result not retrieved.");
226
+ }
227
+ return convertSignInResult({ account, signInResult: result.sign_in_result });
213
228
  } catch (error) {
214
229
  if (error instanceof SolanaMobileWalletAdapterProtocolError && error.code === SolanaMobileWalletAdapterProtocolErrorCode.ERROR_AUTHORIZATION_FAILED) {
215
- const retryResult = await wallet.authorize({
230
+ const result = await wallet.authorize({
216
231
  chain,
217
232
  identity,
218
233
  sign_in_payload: signInPayload
219
234
  });
220
- return (await handleAuthorizationResult(retryResult)).selectedAccount;
235
+ if (!result.sign_in_result) {
236
+ throw new Error("Sign in result not retrieved.", { cause: error });
237
+ }
238
+ const { selectedAccount: account } = await handleAuthorizationResult(result);
239
+ return convertSignInResult({ account, signInResult: result.sign_in_result });
221
240
  }
222
241
  throw error;
223
242
  }
@@ -345,6 +364,6 @@ function useMobileWallet() {
345
364
  );
346
365
  }
347
366
 
348
- export { MobileWalletProvider, MobileWalletProviderContext, createAuthorizationStore, useAuthorization, useMobileWallet };
367
+ export { MobileWalletProvider, MobileWalletProviderContext, convertSignInResult, createAuthorizationStore, useAuthorization, useMobileWallet };
349
368
  //# sourceMappingURL=index.node.mjs.map
350
369
  //# sourceMappingURL=index.node.mjs.map
@@ -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, 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 { TransactionSignatures } from './types';\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 <T extends Transaction | VersionedTransaction, K extends T | T[]>(\n transaction: K,\n minContextSlot: number,\n ): Promise<TransactionSignatures<K>> =>\n await transact(async wallet => {\n await authorizeSession(wallet);\n\n const isTransactionsArray = Array.isArray(transaction);\n\n const signatures = await wallet.signAndSendTransactions({\n minContextSlot,\n transactions: isTransactionsArray ? transaction : [transaction],\n });\n\n return isTransactionsArray\n ? (signatures as TransactionSignatures<K>)\n : (signatures[0] as TransactionSignatures<K>);\n }),\n [authorizeSession],\n );\n\n const signMessage = useCallback(\n async <K extends Uint8Array | Uint8Array[]>(message: K): Promise<K> =>\n await transact(async wallet => {\n const authResult = await authorizeSession(wallet);\n const payloads: Uint8Array[] = Array.isArray(message) ? message : [message];\n const signed = await wallet.signMessages({\n addresses: payloads.map(() => authResult.addressBase64),\n payloads,\n });\n return (Array.isArray(message) ? signed : signed[0]) as K;\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"]}
1
+ {"version":3,"sources":["../src/async-storage-cache.ts","../src/authorization-store.ts","../src/mobile-wallet-provider.tsx","../src/convert-sign-in-result.ts","../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 { SolanaSignInOutput } from '@solana/wallet-standard-features';\nimport { SignInResult } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { stringToUint8Array } from '@wallet-ui/core';\n\nimport { Account } from './use-authorization';\n\nexport type SignInOutput = Omit<SolanaSignInOutput, 'account' | 'signatureType'> &\n Readonly<{\n account: Account;\n }>;\n\nexport function convertSignInResult({\n account,\n signInResult,\n}: {\n account: Account;\n signInResult: SignInResult;\n}): SignInOutput {\n return {\n account,\n signature: stringToUint8Array(signInResult.signature),\n signedMessage: stringToUint8Array(signInResult.signed_message),\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 { convertSignInResult, SignInOutput } from './convert-sign-in-result';\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): Promise<SignInOutput> => {\n try {\n const result = await wallet.authorize({\n auth_token: authToken,\n chain,\n identity,\n sign_in_payload: signInPayload,\n });\n const { selectedAccount: account } = await handleAuthorizationResult(result);\n\n if (!result.sign_in_result) {\n throw new Error('Sign in result not retrieved.');\n }\n return convertSignInResult({ account, signInResult: result.sign_in_result });\n } catch (error) {\n if (\n error instanceof SolanaMobileWalletAdapterProtocolError &&\n error.code === SolanaMobileWalletAdapterProtocolErrorCode.ERROR_AUTHORIZATION_FAILED\n ) {\n const result = await wallet.authorize({\n chain,\n identity,\n sign_in_payload: signInPayload,\n });\n if (!result.sign_in_result) {\n throw new Error('Sign in result not retrieved.', { cause: error });\n }\n const { selectedAccount: account } = await handleAuthorizationResult(result);\n return convertSignInResult({ account, signInResult: result.sign_in_result });\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, 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 { SignInOutput } from './convert-sign-in-result';\nimport { MobileWalletProviderContext } from './mobile-wallet-provider';\nimport { TransactionSignatures } from './types';\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<SignInOutput> =>\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 <T extends Transaction | VersionedTransaction, K extends T | T[]>(\n transaction: K,\n minContextSlot: number,\n ): Promise<TransactionSignatures<K>> =>\n await transact(async wallet => {\n await authorizeSession(wallet);\n\n const isTransactionsArray = Array.isArray(transaction);\n\n const signatures = await wallet.signAndSendTransactions({\n minContextSlot,\n transactions: isTransactionsArray ? transaction : [transaction],\n });\n\n return isTransactionsArray\n ? (signatures as TransactionSignatures<K>)\n : (signatures[0] as TransactionSignatures<K>);\n }),\n [authorizeSession],\n );\n\n const signMessage = useCallback(\n async <K extends Uint8Array | Uint8Array[]>(message: K): Promise<K> =>\n await transact(async wallet => {\n const authResult = await authorizeSession(wallet);\n const payloads: Uint8Array[] = Array.isArray(message) ? message : [message];\n const signed = await wallet.signMessages({\n addresses: payloads.map(() => authResult.addressBase64),\n payloads,\n });\n return (Array.isArray(message) ? signed : signed[0]) as K;\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"]}
@@ -0,0 +1,11 @@
1
+ import { SolanaSignInOutput } from '@solana/wallet-standard-features';
2
+ import { SignInResult } from '@solana-mobile/mobile-wallet-adapter-protocol';
3
+ import { Account } from './use-authorization';
4
+ export type SignInOutput = Omit<SolanaSignInOutput, 'account' | 'signatureType'> & Readonly<{
5
+ account: Account;
6
+ }>;
7
+ export declare function convertSignInResult({ account, signInResult, }: {
8
+ account: Account;
9
+ signInResult: SignInResult;
10
+ }): SignInOutput;
11
+ //# sourceMappingURL=convert-sign-in-result.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convert-sign-in-result.d.ts","sourceRoot":"","sources":["../../src/convert-sign-in-result.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,+CAA+C,CAAC;AAG7E,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,EAAE,SAAS,GAAG,eAAe,CAAC,GAC5E,QAAQ,CAAC;IACL,OAAO,EAAE,OAAO,CAAC;CACpB,CAAC,CAAC;AAEP,wBAAgB,mBAAmB,CAAC,EAChC,OAAO,EACP,YAAY,GACf,EAAE;IACC,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,YAAY,CAAC;CAC9B,GAAG,YAAY,CAMf"}
@@ -7,4 +7,5 @@ export type { AppIdentity, SignInPayload } from '@solana-mobile/mobile-wallet-ad
7
7
  export * from '@solana-mobile/mobile-wallet-adapter-protocol-web3js';
8
8
  export * from '@wallet-ui/core';
9
9
  export { toUint8Array, fromUint8Array } from 'js-base64';
10
+ export { convertSignInResult } from './convert-sign-in-result';
10
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,SAAS,CAAC;AACxB,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AAEpC,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AAChG,cAAc,sDAAsD,CAAC;AACrE,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,SAAS,CAAC;AACxB,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AAEpC,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AAChG,cAAc,sDAAsD,CAAC;AACrE,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC"}
@@ -3,6 +3,7 @@ import { AppIdentity, AuthorizeAPI, AuthToken, Base64EncodedAddress, Chain, Deau
3
3
  import { WalletIcon } from '@wallet-standard/core';
4
4
  import { AuthorizationStore } from './authorization-store';
5
5
  import { Cache } from './cache';
6
+ import { SignInOutput } from './convert-sign-in-result';
6
7
  export type Account = Readonly<{
7
8
  address: PublicKey;
8
9
  addressBase64: Base64EncodedAddress;
@@ -46,16 +47,7 @@ export declare function useAuthorization({ chain, identity, store }: WalletAutho
46
47
  */
47
48
  publicKey: PublicKey;
48
49
  }>>;
49
- authorizeSessionWithSignIn: (wallet: AuthorizeAPI, signInPayload: SignInPayload) => Promise<Readonly<{
50
- address: PublicKey;
51
- addressBase64: Base64EncodedAddress;
52
- icon?: WalletIcon;
53
- label?: string;
54
- /**
55
- * @deprecated Use `address` instead.
56
- */
57
- publicKey: PublicKey;
58
- }>>;
50
+ authorizeSessionWithSignIn: (wallet: AuthorizeAPI, signInPayload: SignInPayload) => Promise<SignInOutput>;
59
51
  deauthorizeSession: (wallet: DeauthorizeAPI) => Promise<void>;
60
52
  deauthorizeSessions: () => Promise<void>;
61
53
  selectedAccount: Readonly<{
@@ -1 +1 @@
1
- {"version":3,"file":"use-authorization.d.ts","sourceRoot":"","sources":["../../src/use-authorization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACH,WAAW,EAEX,YAAY,EACZ,SAAS,EACT,oBAAoB,EACpB,KAAK,EACL,cAAc,EACd,aAAa,EAGhB,MAAM,+CAA+C,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAIhC,MAAM,MAAM,OAAO,GAAG,QAAQ,CAAC;IAC3B,OAAO,EAAE,SAAS,CAAC;IACnB,aAAa,EAAE,oBAAoB,CAAC;IACpC,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,SAAS,EAAE,SAAS,CAAC;CACxB,CAAC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IACvC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,SAAS,EAAE,SAAS,CAAC;IACrB,eAAe,EAAE,OAAO,CAAC;CAC5B,CAAC,CAAC;AACH,MAAM,MAAM,wBAAwB,GAAG,KAAK,CAAC,mBAAmB,GAAG,SAAS,CAAC,CAAC;AAC9E,MAAM,MAAM,wBAAwB,GAAG,QAAQ,CAAC;IAC5C,KAAK,CAAC,EAAE,wBAAwB,CAAC;IACjC,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,EAAE,kBAAkB,CAAC;CAC7B,CAAC,CAAC;AACH,wBAAgB,gBAAgB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,wBAAwB;;iBAtBxE,SAAS;uBACH,oBAAoB;eAC5B,UAAU;gBACT,MAAM;QACd;;WAEG;mBACQ,SAAS;;+BA8BD,YAAY;iBArCtB,SAAS;uBACH,oBAAoB;eAC5B,UAAU;gBACT,MAAM;QACd;;WAEG;mBACQ,SAAS;;yCAwDD,YAAY,iBAAiB,aAAa;iBA/DpD,SAAS;uBACH,oBAAoB;eAC5B,UAAU;gBACT,MAAM;QACd;;WAEG;mBACQ,SAAS;;iCAoFD,cAAc;;;iBA3FxB,SAAS;uBACH,oBAAoB;eAC5B,UAAU;gBACT,MAAM;QACd;;WAEG;mBACQ,SAAS;;EAoHvB"}
1
+ {"version":3,"file":"use-authorization.d.ts","sourceRoot":"","sources":["../../src/use-authorization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACH,WAAW,EAEX,YAAY,EACZ,SAAS,EACT,oBAAoB,EACpB,KAAK,EACL,cAAc,EACd,aAAa,EAGhB,MAAM,+CAA+C,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAuB,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAI7E,MAAM,MAAM,OAAO,GAAG,QAAQ,CAAC;IAC3B,OAAO,EAAE,SAAS,CAAC;IACnB,aAAa,EAAE,oBAAoB,CAAC;IACpC,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,SAAS,EAAE,SAAS,CAAC;CACxB,CAAC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IACvC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,SAAS,EAAE,SAAS,CAAC;IACrB,eAAe,EAAE,OAAO,CAAC;CAC5B,CAAC,CAAC;AACH,MAAM,MAAM,wBAAwB,GAAG,KAAK,CAAC,mBAAmB,GAAG,SAAS,CAAC,CAAC;AAC9E,MAAM,MAAM,wBAAwB,GAAG,QAAQ,CAAC;IAC5C,KAAK,CAAC,EAAE,wBAAwB,CAAC;IACjC,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,EAAE,kBAAkB,CAAC;CAC7B,CAAC,CAAC;AACH,wBAAgB,gBAAgB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,wBAAwB;;iBAtBxE,SAAS;uBACH,oBAAoB;eAC5B,UAAU;gBACT,MAAM;QACd;;WAEG;mBACQ,SAAS;;+BA8BD,YAAY;iBArCtB,SAAS;uBACH,oBAAoB;eAC5B,UAAU;gBACT,MAAM;QACd;;WAEG;mBACQ,SAAS;;yCAwDD,YAAY,iBAAiB,aAAa,KAAG,OAAO,CAAC,YAAY,CAAC;iCAqClE,cAAc;;;iBApGxB,SAAS;uBACH,oBAAoB;eAC5B,UAAU;gBACT,MAAM;QACd;;WAEG;mBACQ,SAAS;;EA6HvB"}
@@ -1,5 +1,6 @@
1
1
  import { Transaction, VersionedTransaction } from '@solana/web3.js';
2
2
  import { AuthorizeAPI, SignInPayload } from '@solana-mobile/mobile-wallet-adapter-protocol';
3
+ import { SignInOutput } from './convert-sign-in-result';
3
4
  import { TransactionSignatures } from './types';
4
5
  import { Account } from './use-authorization';
5
6
  export declare function useMobileWallet(): {
@@ -22,7 +23,7 @@ export declare function useMobileWallet(): {
22
23
  deauthorizeSession: (wallet: import("@solana-mobile/mobile-wallet-adapter-protocol").DeauthorizeAPI) => Promise<void>;
23
24
  disconnect: () => Promise<void>;
24
25
  signAndSendTransaction: <T extends Transaction | VersionedTransaction, K extends T | T[]>(transaction: K, minContextSlot: number) => Promise<TransactionSignatures<K>>;
25
- signIn: (signInPayload: SignInPayload) => Promise<Account>;
26
+ signIn: (signInPayload: SignInPayload) => Promise<SignInOutput>;
26
27
  signMessage: <K extends Uint8Array | Uint8Array[]>(message: K) => Promise<K>;
27
28
  signTransaction: <T extends Transaction | VersionedTransaction, K extends T | T[]>(transaction: K) => Promise<K>;
28
29
  connection: import("@solana/web3.js").Connection;
@@ -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,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AAK5F,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAChD,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;6BAG3C,CAAC,SAAS,WAAW,GAAG,oBAAoB,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,eACrD,CAAC,kBACE,MAAM,KACvB,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;4BAXd,aAAa,KAAG,OAAO,CAAC,OAAO,CAAC;kBA8B/C,CAAC,SAAS,UAAU,GAAG,UAAU,EAAE,WAAW,CAAC,KAAG,OAAO,CAAC,CAAC,CAAC;sBAc5D,CAAC,SAAS,WAAW,GAAG,oBAAoB,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,eAAe,CAAC,KAAG,OAAO,CAAC,CAAC,CAAC;;;;;;EAwC1G"}
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,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AAI5F,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAChD,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;6BAG3C,CAAC,SAAS,WAAW,GAAG,oBAAoB,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,eACrD,CAAC,kBACE,MAAM,KACvB,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;4BAXd,aAAa,KAAG,OAAO,CAAC,YAAY,CAAC;kBA8BpD,CAAC,SAAS,UAAU,GAAG,UAAU,EAAE,WAAW,CAAC,KAAG,OAAO,CAAC,CAAC,CAAC;sBAc5D,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.3.0",
3
+ "version": "4.0.0-canary-20260304112557",
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.3.0"
71
+ "@wallet-ui/core": "4.0.0-canary-20260304112557"
72
72
  },
73
73
  "peerDependencies": {
74
74
  "react": ">=18"