@wallet-ui/react-native-web3js 2.2.0-canary-20251120223258 → 2.2.0-canary-20251206072155

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.
Files changed (37) hide show
  1. package/dist/index.browser.cjs +95 -82
  2. package/dist/index.browser.cjs.map +1 -1
  3. package/dist/index.browser.mjs +95 -81
  4. package/dist/index.browser.mjs.map +1 -1
  5. package/dist/index.native.mjs +95 -81
  6. package/dist/index.native.mjs.map +1 -1
  7. package/dist/index.node.cjs +95 -82
  8. package/dist/index.node.cjs.map +1 -1
  9. package/dist/index.node.mjs +95 -81
  10. package/dist/index.node.mjs.map +1 -1
  11. package/dist/types/get-account-from-authorized-account.d.ts +4 -0
  12. package/dist/types/get-account-from-authorized-account.d.ts.map +1 -0
  13. package/dist/types/get-authorization-from-authorization-result.d.ts +4 -0
  14. package/dist/types/get-authorization-from-authorization-result.d.ts.map +1 -0
  15. package/dist/types/get-public-key-from-address.d.ts +4 -0
  16. package/dist/types/get-public-key-from-address.d.ts.map +1 -0
  17. package/dist/types/index.d.ts +1 -2
  18. package/dist/types/index.d.ts.map +1 -1
  19. package/dist/types/mobile-wallet-provider.d.ts +18 -0
  20. package/dist/types/mobile-wallet-provider.d.ts.map +1 -0
  21. package/dist/types/use-authorization.d.ts +3 -9
  22. package/dist/types/use-authorization.d.ts.map +1 -1
  23. package/dist/types/use-fetch-authorization.d.ts +6 -0
  24. package/dist/types/use-fetch-authorization.d.ts.map +1 -0
  25. package/dist/types/use-invalidate-authorizations.d.ts +2 -0
  26. package/dist/types/use-invalidate-authorizations.d.ts.map +1 -0
  27. package/dist/types/use-mobile-wallet.d.ts +19 -6
  28. package/dist/types/use-mobile-wallet.d.ts.map +1 -1
  29. package/dist/types/use-persist-authorization.d.ts +6 -0
  30. package/dist/types/use-persist-authorization.d.ts.map +1 -0
  31. package/dist/types/use-query-config.d.ts +6 -0
  32. package/dist/types/use-query-config.d.ts.map +1 -0
  33. package/package.json +2 -2
  34. package/dist/types/mobile-wallet-adapter-provider.d.ts +0 -18
  35. package/dist/types/mobile-wallet-adapter-provider.d.ts.map +0 -1
  36. package/dist/types/use-mobile-wallet-adapter.d.ts +0 -19
  37. package/dist/types/use-mobile-wallet-adapter.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/mobile-wallet-adapter-provider.tsx","../src/use-authorization.ts","../src/use-mobile-wallet.ts","../src/use-mobile-wallet-adapter.ts"],"names":["useMemo","useCallback"],"mappings":"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","file":"index.native.mjs","sourcesContent":["import { Connection } from '@solana/web3.js';\nimport { AppIdentity } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { SolanaClusterId } from '@wallet-ui/core/src';\nimport React, { createContext, type ReactNode, useMemo } from 'react';\n\nexport interface MobileWalletAdapterProviderProps {\n children: ReactNode;\n clusterId: SolanaClusterId;\n endpoint: string;\n identity: AppIdentity;\n}\nexport interface MobileWalletAdapterProviderState {\n clusterId: SolanaClusterId;\n connection: Connection;\n identity: AppIdentity;\n}\n\nexport const MobileWalletAdapterProviderContext = createContext<MobileWalletAdapterProviderState>(\n {} as MobileWalletAdapterProviderState,\n);\nexport function MobileWalletAdapterProvider({\n children,\n clusterId,\n endpoint,\n identity,\n}: MobileWalletAdapterProviderProps) {\n const connection = useMemo(() => new Connection(endpoint, { commitment: 'confirmed' }), [endpoint]);\n const value = useMemo(() => ({ clusterId, connection, identity }), [connection, identity, clusterId]);\n\n return (\n <MobileWalletAdapterProviderContext.Provider value={value}>\n {children}\n </MobileWalletAdapterProviderContext.Provider>\n );\n}\n","import AsyncStorage from '@react-native-async-storage/async-storage';\nimport { PublicKey, PublicKeyInitData } from '@solana/web3.js';\nimport {\n Account as AuthorizedAccount,\n AppIdentity,\n AuthorizationResult,\n AuthorizeAPI,\n AuthToken,\n Base64EncodedAddress,\n DeauthorizeAPI,\n SignInPayload,\n} from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { WalletIcon } from '@wallet-standard/core';\nimport { SolanaClusterId } from '@wallet-ui/core';\nimport { toUint8Array } from 'js-base64';\nimport { useCallback, useMemo } from 'react';\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 type Account = Readonly<{\n address: Base64EncodedAddress;\n displayAddress?: string;\n icon?: WalletIcon;\n label?: string;\n publicKey: PublicKey;\n}>;\n\nexport type WalletAuthorization = Readonly<{\n accounts: Account[];\n authToken: AuthToken;\n selectedAccount: Account;\n}>;\n\nfunction getPublicKeyFromAddress(address: Base64EncodedAddress): PublicKey {\n const publicKeyByteArray = toUint8Array(address);\n return new PublicKey(publicKeyByteArray);\n}\n\nfunction getAccountFromAuthorizedAccount(account: AuthorizedAccount): Account {\n const publicKey = getPublicKeyFromAddress(account.address);\n return {\n address: account.address,\n // TODO: Fix upstream?\n displayAddress: (account as unknown as { display_address: string }).display_address,\n icon: account.icon,\n label: account.label ?? ellipsify(publicKey.toString(), 8),\n publicKey,\n };\n}\n\nfunction 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.address)\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\nconst AUTHORIZATION_STORAGE_KEY = 'authorization-cache';\n\nconst queryKey = ['wallet-authorization'];\n\nfunction cacheReviver(key: string, value: unknown) {\n if (key === 'publicKey') {\n return new PublicKey(value as PublicKeyInitData); // the PublicKeyInitData should match the actual data structure stored in AsyncStorage\n } else {\n return value;\n }\n}\nfunction usePersistAuthorization() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: async (auth: WalletAuthorization | null): Promise<void> => {\n await AsyncStorage.setItem(AUTHORIZATION_STORAGE_KEY, JSON.stringify(auth));\n },\n onSuccess: async () => {\n await queryClient.invalidateQueries({ queryKey });\n },\n });\n}\n\nfunction useFetchAuthorization() {\n return useQuery({\n queryFn: async (): Promise<WalletAuthorization | null> => {\n const cacheFetchResult = await AsyncStorage.getItem(AUTHORIZATION_STORAGE_KEY);\n\n // Return prior authorization, if found.\n return cacheFetchResult ? JSON.parse(cacheFetchResult, cacheReviver) : null;\n },\n queryKey,\n });\n}\n\nfunction useInvalidateAuthorizations() {\n const client = useQueryClient();\n return () => client.invalidateQueries({ queryKey });\n}\n\nexport function useAuthorization({ clusterId, identity }: { clusterId: SolanaClusterId; identity: AppIdentity }) {\n const fetchQuery = useFetchAuthorization();\n const invalidateAuthorizations = useInvalidateAuthorizations();\n const persistMutation = usePersistAuthorization();\n\n const handleAuthorizationResult = useCallback(\n async (authorizationResult: AuthorizationResult): Promise<WalletAuthorization> => {\n const nextAuthorization = getAuthorizationFromAuthorizationResult(\n authorizationResult,\n fetchQuery.data?.selectedAccount,\n );\n await persistMutation.mutateAsync(nextAuthorization);\n return nextAuthorization;\n },\n [fetchQuery.data?.selectedAccount, persistMutation],\n );\n\n const authorizeSession = useCallback(\n async (wallet: AuthorizeAPI) => {\n const authorizationResult = await wallet.authorize({\n auth_token: fetchQuery.data?.authToken,\n chain: clusterId,\n identity,\n });\n return (await handleAuthorizationResult(authorizationResult)).selectedAccount;\n },\n [fetchQuery.data?.authToken, clusterId, identity, handleAuthorizationResult],\n );\n\n const authorizeSessionWithSignIn = useCallback(\n async (wallet: AuthorizeAPI, signInPayload: SignInPayload) => {\n const authorizationResult = await wallet.authorize({\n auth_token: fetchQuery.data?.authToken,\n chain: clusterId,\n identity,\n sign_in_payload: signInPayload,\n });\n return (await handleAuthorizationResult(authorizationResult)).selectedAccount;\n },\n [fetchQuery.data?.authToken, clusterId, identity, handleAuthorizationResult],\n );\n\n const deauthorizeSession = useCallback(\n async (wallet: DeauthorizeAPI) => {\n if (fetchQuery.data?.authToken == null) {\n return;\n }\n await wallet.deauthorize({ auth_token: fetchQuery.data.authToken });\n await persistMutation.mutateAsync(null);\n },\n [fetchQuery.data?.authToken, persistMutation],\n );\n\n const deauthorizeSessions = useCallback(async () => {\n await invalidateAuthorizations();\n await persistMutation.mutateAsync(null);\n }, [invalidateAuthorizations, persistMutation]);\n\n return useMemo(\n () => ({\n accounts: fetchQuery.data?.accounts ?? null,\n authorizeSession,\n authorizeSessionWithSignIn,\n deauthorizeSession,\n deauthorizeSessions,\n isLoading: fetchQuery.isLoading,\n selectedAccount: fetchQuery.data?.selectedAccount ?? null,\n }),\n [\n authorizeSession,\n authorizeSessionWithSignIn,\n deauthorizeSession,\n deauthorizeSessions,\n fetchQuery.data?.accounts,\n fetchQuery.data?.selectedAccount,\n fetchQuery.isLoading,\n ],\n );\n}\n","import { Transaction, TransactionSignature, VersionedTransaction } from '@solana/web3.js';\nimport { AppIdentity, AuthorizeAPI, SignInPayload } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { transact } from '@solana-mobile/mobile-wallet-adapter-protocol-web3js';\nimport { SolanaClusterId } from '@wallet-ui/core';\nimport { useCallback, useMemo } from 'react';\n\nimport { Account, useAuthorization } from './use-authorization';\n\nexport function useMobileWallet({ clusterId, identity }: { clusterId: SolanaClusterId; identity: AppIdentity }) {\n const { authorizeSessionWithSignIn, authorizeSession, deauthorizeSessions } = useAuthorization({\n clusterId,\n identity,\n });\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> => {\n await deauthorizeSessions();\n }, [deauthorizeSessions]);\n\n const signAndSendTransaction = useCallback(\n async (\n transaction: Transaction | VersionedTransaction,\n minContextSlot: number,\n ): Promise<TransactionSignature> => {\n return await transact(async wallet => {\n await authorizeSession(wallet);\n const signatures = await wallet.signAndSendTransactions({\n minContextSlot,\n transactions: [transaction],\n });\n return signatures[0];\n });\n },\n [authorizeSession],\n );\n\n const signMessage = useCallback(\n async (message: Uint8Array): Promise<Uint8Array> => {\n return await transact(async wallet => {\n const authResult = await authorizeSession(wallet);\n const signedMessages = await wallet.signMessages({\n addresses: [authResult.address],\n payloads: [message],\n });\n return signedMessages[0];\n });\n },\n [authorizeSession],\n );\n\n return useMemo(\n () => ({\n connect,\n connectAnd,\n disconnect,\n signAndSendTransaction,\n signIn,\n signMessage,\n }),\n [connect, connectAnd, disconnect, signAndSendTransaction, signIn, signMessage],\n );\n}\n","import { useContext } from 'react';\n\nimport { MobileWalletAdapterProviderContext } from './mobile-wallet-adapter-provider';\nimport { useAuthorization } from './use-authorization';\nimport { useMobileWallet } from './use-mobile-wallet';\n\nexport function useMobileWalletAdapter() {\n const ctx = useContext(MobileWalletAdapterProviderContext);\n const { connect, connectAnd, signAndSendTransaction, signMessage, signIn } = useMobileWallet(ctx);\n const { selectedAccount, deauthorizeSessions } = useAuthorization(ctx);\n\n return {\n ...ctx,\n account: selectedAccount,\n connect,\n connectAnd,\n disconnect: deauthorizeSessions,\n signAndSendTransaction,\n signIn,\n signMessage,\n };\n}\n"]}
1
+ {"version":3,"sources":["../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-query-config.ts","../src/use-fetch-authorization.ts","../src/use-invalidate-authorizations.ts","../src/use-persist-authorization.ts","../src/use-authorization.ts","../src/use-mobile-wallet.ts"],"names":["PublicKey","AsyncStorage","useMemo","useCallback"],"mappings":"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","file":"index.native.mjs","sourcesContent":["import { Commitment, Connection, ConnectionConfig } from '@solana/web3.js';\nimport { AppIdentity, Chain } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport React, { createContext, type ReactNode, useMemo } from 'react';\n\nexport interface MobileWalletProviderProps {\n chain: Chain;\n children: ReactNode;\n commitmentOrConfig?: Commitment | ConnectionConfig;\n endpoint: string;\n identity: AppIdentity;\n}\nexport interface MobileWalletProviderState {\n chain: Chain;\n connection: Connection;\n identity: AppIdentity;\n}\n\nexport const MobileWalletProviderContext = createContext<MobileWalletProviderState>({} as MobileWalletProviderState);\nexport function MobileWalletProvider({\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\n return (\n <MobileWalletProviderContext.Provider\n value={useMemo(\n () => ({\n chain,\n connection,\n identity,\n }),\n [connection, identity, chain],\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 publicKey = getPublicKeyFromAddress(account.address);\n\n return {\n address: account.address,\n icon: account.icon,\n label: account.label ?? ellipsify(publicKey.toString(), 8),\n publicKey,\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.address)\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 { useQueryClient } from '@tanstack/react-query';\n\nexport function useQueryConfig() {\n const storageKey = 'authorization-cache';\n const queryClient = useQueryClient();\n const queryKey = ['wallet-authorization'];\n\n return { queryClient, queryKey, storageKey };\n}\n","import AsyncStorage from '@react-native-async-storage/async-storage';\nimport { PublicKey, PublicKeyInitData } from '@solana/web3.js';\nimport { useQuery } from '@tanstack/react-query';\n\nimport { WalletAuthorization } from './use-authorization';\nimport { useQueryConfig } from './use-query-config';\n\nfunction cacheReviver(key: string, value: unknown) {\n if (key === 'publicKey') {\n return new PublicKey(value as PublicKeyInitData); // the PublicKeyInitData should match the actual data structure stored in AsyncStorage\n } else {\n return value;\n }\n}\n\nexport function useFetchAuthorization() {\n const { queryKey, storageKey } = useQueryConfig();\n return useQuery({\n queryFn: async (): Promise<WalletAuthorization | null> => {\n const cacheFetchResult = await AsyncStorage.getItem(storageKey);\n\n // Return prior authorization, if found.\n return cacheFetchResult ? JSON.parse(cacheFetchResult, cacheReviver) : null;\n },\n queryKey,\n });\n}\n","import { useQueryConfig } from './use-query-config';\n\nexport function useInvalidateAuthorizations() {\n const { queryClient, queryKey } = useQueryConfig();\n\n return () => queryClient.invalidateQueries({ queryKey });\n}\n","import AsyncStorage from '@react-native-async-storage/async-storage';\nimport { useMutation } from '@tanstack/react-query';\n\nimport { WalletAuthorization } from './use-authorization';\nimport { useQueryConfig } from './use-query-config';\n\nexport function usePersistAuthorization() {\n const { queryClient, queryKey, storageKey } = useQueryConfig();\n return useMutation({\n mutationFn: async (auth: WalletAuthorization | null): Promise<void> => {\n await AsyncStorage.setItem(storageKey, JSON.stringify(auth));\n },\n onSuccess: async () => {\n await queryClient.invalidateQueries({ queryKey });\n },\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} from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { WalletIcon } from '@wallet-standard/core';\nimport { useCallback, useMemo } from 'react';\n\nimport { getAuthorizationFromAuthorizationResult } from './get-authorization-from-authorization-result';\nimport { useFetchAuthorization } from './use-fetch-authorization';\nimport { useInvalidateAuthorizations } from './use-invalidate-authorizations';\nimport { usePersistAuthorization } from './use-persist-authorization';\n\nexport type Account = Readonly<{\n address: Base64EncodedAddress;\n icon?: WalletIcon;\n label?: string;\n publicKey: PublicKey;\n}>;\n\nexport type WalletAuthorization = Readonly<{\n accounts: Account[];\n authToken: AuthToken;\n selectedAccount: Account;\n}>;\n\nexport function useAuthorization({ chain, identity }: { chain: Chain; identity: AppIdentity }) {\n const fetchQuery = useFetchAuthorization();\n const invalidateAuthorizations = useInvalidateAuthorizations();\n const persistMutation = usePersistAuthorization();\n\n const handleAuthorizationResult = useCallback(\n async (authorizationResult: AuthorizationResult): Promise<WalletAuthorization> => {\n const nextAuthorization = getAuthorizationFromAuthorizationResult(\n authorizationResult,\n fetchQuery.data?.selectedAccount,\n );\n await persistMutation.mutateAsync(nextAuthorization);\n return nextAuthorization;\n },\n [fetchQuery.data?.selectedAccount, persistMutation],\n );\n\n const authorizeSession = useCallback(\n async (wallet: AuthorizeAPI) => {\n const authorizationResult = await wallet.authorize({\n auth_token: fetchQuery.data?.authToken,\n chain,\n identity,\n });\n return (await handleAuthorizationResult(authorizationResult)).selectedAccount;\n },\n [fetchQuery.data?.authToken, chain, identity, handleAuthorizationResult],\n );\n\n const authorizeSessionWithSignIn = useCallback(\n async (wallet: AuthorizeAPI, signInPayload: SignInPayload) => {\n const authorizationResult = await wallet.authorize({\n auth_token: fetchQuery.data?.authToken,\n chain,\n identity,\n sign_in_payload: signInPayload,\n });\n return (await handleAuthorizationResult(authorizationResult)).selectedAccount;\n },\n [fetchQuery.data?.authToken, chain, identity, handleAuthorizationResult],\n );\n\n const deauthorizeSession = useCallback(\n async (wallet: DeauthorizeAPI) => {\n if (fetchQuery.data?.authToken == null) {\n return;\n }\n await wallet.deauthorize({ auth_token: fetchQuery.data.authToken });\n await persistMutation.mutateAsync(null);\n },\n [fetchQuery.data?.authToken, persistMutation],\n );\n\n const deauthorizeSessions = useCallback(async () => {\n await invalidateAuthorizations();\n await persistMutation.mutateAsync(null);\n }, [invalidateAuthorizations, persistMutation]);\n\n return useMemo(\n () => ({\n accounts: fetchQuery.data?.accounts ?? null,\n authorizeSession,\n authorizeSessionWithSignIn,\n deauthorizeSession,\n deauthorizeSessions,\n isLoading: fetchQuery.isLoading,\n selectedAccount: fetchQuery.data?.selectedAccount ?? null,\n }),\n [\n authorizeSession,\n authorizeSessionWithSignIn,\n deauthorizeSession,\n deauthorizeSessions,\n fetchQuery.data?.accounts,\n fetchQuery.data?.selectedAccount,\n fetchQuery.isLoading,\n ],\n );\n}\n","import { Transaction, TransactionSignature, VersionedTransaction } from '@solana/web3.js';\nimport { AuthorizeAPI, SignInPayload } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { transact } from '@solana-mobile/mobile-wallet-adapter-protocol-web3js';\nimport { useCallback, useContext, useMemo } from 'react';\n\nimport { MobileWalletProviderContext } from './mobile-wallet-provider';\nimport { Account, useAuthorization } from './use-authorization';\n\nexport function useMobileWallet() {\n const ctx = useContext(MobileWalletProviderContext);\n const { authorizeSessionWithSignIn, authorizeSession, deauthorizeSessions, selectedAccount, ...authorization } =\n useAuthorization(ctx);\n\n const connect = useCallback(\n async (): Promise<Account> => await transact(async wallet => await authorizeSession(wallet)),\n [authorizeSession],\n );\n\n const connectAnd = useCallback(\n async (cb: (wallet: AuthorizeAPI) => Promise<Account | void>): Promise<Account | void> => {\n return await transact(async wallet => await cb(wallet));\n },\n [],\n );\n\n const signIn = useCallback(\n async (signInPayload: SignInPayload): Promise<Account> =>\n await transact(async wallet => await authorizeSessionWithSignIn(wallet, signInPayload)),\n [authorizeSessionWithSignIn],\n );\n\n const disconnect = useCallback(async (): Promise<void> => await deauthorizeSessions(), [deauthorizeSessions]);\n\n const signAndSendTransaction = useCallback(\n async (\n transaction: Transaction | VersionedTransaction,\n minContextSlot: number,\n ): Promise<TransactionSignature> =>\n await transact(async wallet => {\n await authorizeSession(wallet);\n const signatures = await wallet.signAndSendTransactions({\n minContextSlot,\n transactions: [transaction],\n });\n return signatures[0];\n }),\n [authorizeSession],\n );\n\n const signMessage = useCallback(\n async (message: Uint8Array): Promise<Uint8Array> =>\n await transact(async wallet => {\n const authResult = await authorizeSession(wallet);\n const signedMessages = await wallet.signMessages({\n addresses: [authResult.address],\n payloads: [message],\n });\n return signedMessages[0];\n }),\n [authorizeSession],\n );\n\n return useMemo(\n () => ({\n ...ctx,\n ...authorization,\n account: selectedAccount,\n connect,\n connectAnd,\n disconnect,\n signAndSendTransaction,\n signIn,\n signMessage,\n }),\n [\n authorization,\n connect,\n connectAnd,\n ctx,\n disconnect,\n selectedAccount,\n signAndSendTransaction,\n signIn,\n signMessage,\n ],\n );\n}\n"]}
@@ -2,9 +2,9 @@
2
2
 
3
3
  var web3_js = require('@solana/web3.js');
4
4
  var React = require('react');
5
+ var jsBase64 = require('js-base64');
5
6
  var AsyncStorage = require('@react-native-async-storage/async-storage');
6
7
  var reactQuery = require('@tanstack/react-query');
7
- var jsBase64 = require('js-base64');
8
8
  var mobileWalletAdapterProtocolWeb3js = require('@solana-mobile/mobile-wallet-adapter-protocol-web3js');
9
9
  var core = require('@wallet-ui/core');
10
10
 
@@ -13,39 +13,52 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
13
13
  var React__default = /*#__PURE__*/_interopDefault(React);
14
14
  var AsyncStorage__default = /*#__PURE__*/_interopDefault(AsyncStorage);
15
15
 
16
- // src/mobile-wallet-adapter-provider.tsx
17
- var MobileWalletAdapterProviderContext = React.createContext(
18
- {}
19
- );
20
- function MobileWalletAdapterProvider({
16
+ // src/mobile-wallet-provider.tsx
17
+ var MobileWalletProviderContext = React.createContext({});
18
+ function MobileWalletProvider({
21
19
  children,
22
- clusterId,
20
+ chain,
21
+ commitmentOrConfig = { commitment: "confirmed" },
23
22
  endpoint,
24
23
  identity
25
24
  }) {
26
- const connection = React.useMemo(() => new web3_js.Connection(endpoint, { commitment: "confirmed" }), [endpoint]);
27
- const value = React.useMemo(() => ({ clusterId, connection, identity }), [connection, identity, clusterId]);
28
- return /* @__PURE__ */ React__default.default.createElement(MobileWalletAdapterProviderContext.Provider, { value }, children);
29
- }
30
- function ellipsify(str = "", len = 4, delimiter = "..") {
31
- const limit = len * 2 + delimiter.length;
32
- return str.length > limit ? str.slice(0, len) + delimiter + str.slice(-len) : str;
25
+ const connection = React.useMemo(() => new web3_js.Connection(endpoint, commitmentOrConfig), [commitmentOrConfig, endpoint]);
26
+ return /* @__PURE__ */ React__default.default.createElement(
27
+ MobileWalletProviderContext.Provider,
28
+ {
29
+ value: React.useMemo(
30
+ () => ({
31
+ chain,
32
+ connection,
33
+ identity
34
+ }),
35
+ [connection, identity, chain]
36
+ )
37
+ },
38
+ children
39
+ );
33
40
  }
34
41
  function getPublicKeyFromAddress(address) {
35
42
  const publicKeyByteArray = jsBase64.toUint8Array(address);
36
43
  return new web3_js.PublicKey(publicKeyByteArray);
37
44
  }
45
+
46
+ // src/get-account-from-authorized-account.ts
47
+ function ellipsify(str = "", len = 4, delimiter = "..") {
48
+ const limit = len * 2 + delimiter.length;
49
+ return str.length > limit ? str.slice(0, len) + delimiter + str.slice(-len) : str;
50
+ }
38
51
  function getAccountFromAuthorizedAccount(account) {
39
52
  const publicKey = getPublicKeyFromAddress(account.address);
40
53
  return {
41
54
  address: account.address,
42
- // TODO: Fix upstream?
43
- displayAddress: account.display_address,
44
55
  icon: account.icon,
45
56
  label: account.label ?? ellipsify(publicKey.toString(), 8),
46
57
  publicKey
47
58
  };
48
59
  }
60
+
61
+ // src/get-authorization-from-authorization-result.ts
49
62
  function getAuthorizationFromAuthorizationResult(authorizationResult, previouslySelectedAccount) {
50
63
  let selectedAccount;
51
64
  if (
@@ -64,8 +77,14 @@ function getAuthorizationFromAuthorizationResult(authorizationResult, previously
64
77
  selectedAccount
65
78
  };
66
79
  }
67
- var AUTHORIZATION_STORAGE_KEY = "authorization-cache";
68
- var queryKey = ["wallet-authorization"];
80
+ function useQueryConfig() {
81
+ const storageKey = "authorization-cache";
82
+ const queryClient = reactQuery.useQueryClient();
83
+ const queryKey = ["wallet-authorization"];
84
+ return { queryClient, queryKey, storageKey };
85
+ }
86
+
87
+ // src/use-fetch-authorization.ts
69
88
  function cacheReviver(key, value) {
70
89
  if (key === "publicKey") {
71
90
  return new web3_js.PublicKey(value);
@@ -73,31 +92,36 @@ function cacheReviver(key, value) {
73
92
  return value;
74
93
  }
75
94
  }
76
- function usePersistAuthorization() {
77
- const queryClient = reactQuery.useQueryClient();
78
- return reactQuery.useMutation({
79
- mutationFn: async (auth) => {
80
- await AsyncStorage__default.default.setItem(AUTHORIZATION_STORAGE_KEY, JSON.stringify(auth));
81
- },
82
- onSuccess: async () => {
83
- await queryClient.invalidateQueries({ queryKey });
84
- }
85
- });
86
- }
87
95
  function useFetchAuthorization() {
96
+ const { queryKey, storageKey } = useQueryConfig();
88
97
  return reactQuery.useQuery({
89
98
  queryFn: async () => {
90
- const cacheFetchResult = await AsyncStorage__default.default.getItem(AUTHORIZATION_STORAGE_KEY);
99
+ const cacheFetchResult = await AsyncStorage__default.default.getItem(storageKey);
91
100
  return cacheFetchResult ? JSON.parse(cacheFetchResult, cacheReviver) : null;
92
101
  },
93
102
  queryKey
94
103
  });
95
104
  }
105
+
106
+ // src/use-invalidate-authorizations.ts
96
107
  function useInvalidateAuthorizations() {
97
- const client = reactQuery.useQueryClient();
98
- return () => client.invalidateQueries({ queryKey });
108
+ const { queryClient, queryKey } = useQueryConfig();
109
+ return () => queryClient.invalidateQueries({ queryKey });
110
+ }
111
+ function usePersistAuthorization() {
112
+ const { queryClient, queryKey, storageKey } = useQueryConfig();
113
+ return reactQuery.useMutation({
114
+ mutationFn: async (auth) => {
115
+ await AsyncStorage__default.default.setItem(storageKey, JSON.stringify(auth));
116
+ },
117
+ onSuccess: async () => {
118
+ await queryClient.invalidateQueries({ queryKey });
119
+ }
120
+ });
99
121
  }
100
- function useAuthorization({ clusterId, identity }) {
122
+
123
+ // src/use-authorization.ts
124
+ function useAuthorization({ chain, identity }) {
101
125
  const fetchQuery = useFetchAuthorization();
102
126
  const invalidateAuthorizations = useInvalidateAuthorizations();
103
127
  const persistMutation = usePersistAuthorization();
@@ -116,24 +140,24 @@ function useAuthorization({ clusterId, identity }) {
116
140
  async (wallet) => {
117
141
  const authorizationResult = await wallet.authorize({
118
142
  auth_token: fetchQuery.data?.authToken,
119
- chain: clusterId,
143
+ chain,
120
144
  identity
121
145
  });
122
146
  return (await handleAuthorizationResult(authorizationResult)).selectedAccount;
123
147
  },
124
- [fetchQuery.data?.authToken, clusterId, identity, handleAuthorizationResult]
148
+ [fetchQuery.data?.authToken, chain, identity, handleAuthorizationResult]
125
149
  );
126
150
  const authorizeSessionWithSignIn = React.useCallback(
127
151
  async (wallet, signInPayload) => {
128
152
  const authorizationResult = await wallet.authorize({
129
153
  auth_token: fetchQuery.data?.authToken,
130
- chain: clusterId,
154
+ chain,
131
155
  identity,
132
156
  sign_in_payload: signInPayload
133
157
  });
134
158
  return (await handleAuthorizationResult(authorizationResult)).selectedAccount;
135
159
  },
136
- [fetchQuery.data?.authToken, clusterId, identity, handleAuthorizationResult]
160
+ [fetchQuery.data?.authToken, chain, identity, handleAuthorizationResult]
137
161
  );
138
162
  const deauthorizeSession = React.useCallback(
139
163
  async (wallet) => {
@@ -170,11 +194,9 @@ function useAuthorization({ clusterId, identity }) {
170
194
  ]
171
195
  );
172
196
  }
173
- function useMobileWallet({ clusterId, identity }) {
174
- const { authorizeSessionWithSignIn, authorizeSession, deauthorizeSessions } = useAuthorization({
175
- clusterId,
176
- identity
177
- });
197
+ function useMobileWallet() {
198
+ const ctx = React.useContext(MobileWalletProviderContext);
199
+ const { authorizeSessionWithSignIn, authorizeSession, deauthorizeSessions, selectedAccount, ...authorization } = useAuthorization(ctx);
178
200
  const connect = React.useCallback(
179
201
  async () => await mobileWalletAdapterProtocolWeb3js.transact(async (wallet) => await authorizeSession(wallet)),
180
202
  [authorizeSession]
@@ -189,37 +211,34 @@ function useMobileWallet({ clusterId, identity }) {
189
211
  async (signInPayload) => await mobileWalletAdapterProtocolWeb3js.transact(async (wallet) => await authorizeSessionWithSignIn(wallet, signInPayload)),
190
212
  [authorizeSessionWithSignIn]
191
213
  );
192
- const disconnect = React.useCallback(async () => {
193
- await deauthorizeSessions();
194
- }, [deauthorizeSessions]);
214
+ const disconnect = React.useCallback(async () => await deauthorizeSessions(), [deauthorizeSessions]);
195
215
  const signAndSendTransaction = React.useCallback(
196
- async (transaction, minContextSlot) => {
197
- return await mobileWalletAdapterProtocolWeb3js.transact(async (wallet) => {
198
- await authorizeSession(wallet);
199
- const signatures = await wallet.signAndSendTransactions({
200
- minContextSlot,
201
- transactions: [transaction]
202
- });
203
- return signatures[0];
216
+ async (transaction, minContextSlot) => await mobileWalletAdapterProtocolWeb3js.transact(async (wallet) => {
217
+ await authorizeSession(wallet);
218
+ const signatures = await wallet.signAndSendTransactions({
219
+ minContextSlot,
220
+ transactions: [transaction]
204
221
  });
205
- },
222
+ return signatures[0];
223
+ }),
206
224
  [authorizeSession]
207
225
  );
208
226
  const signMessage = React.useCallback(
209
- async (message) => {
210
- return await mobileWalletAdapterProtocolWeb3js.transact(async (wallet) => {
211
- const authResult = await authorizeSession(wallet);
212
- const signedMessages = await wallet.signMessages({
213
- addresses: [authResult.address],
214
- payloads: [message]
215
- });
216
- return signedMessages[0];
227
+ async (message) => await mobileWalletAdapterProtocolWeb3js.transact(async (wallet) => {
228
+ const authResult = await authorizeSession(wallet);
229
+ const signedMessages = await wallet.signMessages({
230
+ addresses: [authResult.address],
231
+ payloads: [message]
217
232
  });
218
- },
233
+ return signedMessages[0];
234
+ }),
219
235
  [authorizeSession]
220
236
  );
221
237
  return React.useMemo(
222
238
  () => ({
239
+ ...ctx,
240
+ ...authorization,
241
+ account: selectedAccount,
223
242
  connect,
224
243
  connectAnd,
225
244
  disconnect,
@@ -227,24 +246,19 @@ function useMobileWallet({ clusterId, identity }) {
227
246
  signIn,
228
247
  signMessage
229
248
  }),
230
- [connect, connectAnd, disconnect, signAndSendTransaction, signIn, signMessage]
249
+ [
250
+ authorization,
251
+ connect,
252
+ connectAnd,
253
+ ctx,
254
+ disconnect,
255
+ selectedAccount,
256
+ signAndSendTransaction,
257
+ signIn,
258
+ signMessage
259
+ ]
231
260
  );
232
261
  }
233
- function useMobileWalletAdapter() {
234
- const ctx = React.useContext(MobileWalletAdapterProviderContext);
235
- const { connect, connectAnd, signAndSendTransaction, signMessage, signIn } = useMobileWallet(ctx);
236
- const { selectedAccount, deauthorizeSessions } = useAuthorization(ctx);
237
- return {
238
- ...ctx,
239
- account: selectedAccount,
240
- connect,
241
- connectAnd,
242
- disconnect: deauthorizeSessions,
243
- signAndSendTransaction,
244
- signIn,
245
- signMessage
246
- };
247
- }
248
262
 
249
263
  Object.defineProperty(exports, "fromUint8Array", {
250
264
  enumerable: true,
@@ -254,11 +268,10 @@ Object.defineProperty(exports, "toUint8Array", {
254
268
  enumerable: true,
255
269
  get: function () { return jsBase64.toUint8Array; }
256
270
  });
257
- exports.MobileWalletAdapterProvider = MobileWalletAdapterProvider;
258
- exports.MobileWalletAdapterProviderContext = MobileWalletAdapterProviderContext;
271
+ exports.MobileWalletProvider = MobileWalletProvider;
272
+ exports.MobileWalletProviderContext = MobileWalletProviderContext;
259
273
  exports.useAuthorization = useAuthorization;
260
274
  exports.useMobileWallet = useMobileWallet;
261
- exports.useMobileWalletAdapter = useMobileWalletAdapter;
262
275
  Object.keys(mobileWalletAdapterProtocolWeb3js).forEach(function (k) {
263
276
  if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
264
277
  enumerable: true,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/mobile-wallet-adapter-provider.tsx","../src/use-authorization.ts","../src/use-mobile-wallet.ts","../src/use-mobile-wallet-adapter.ts"],"names":["createContext","useMemo","Connection","React","toUint8Array","PublicKey","useQueryClient","useMutation","AsyncStorage","useQuery","useCallback","transact","useContext"],"mappings":"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","file":"index.node.cjs","sourcesContent":["import { Connection } from '@solana/web3.js';\nimport { AppIdentity } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { SolanaClusterId } from '@wallet-ui/core/src';\nimport React, { createContext, type ReactNode, useMemo } from 'react';\n\nexport interface MobileWalletAdapterProviderProps {\n children: ReactNode;\n clusterId: SolanaClusterId;\n endpoint: string;\n identity: AppIdentity;\n}\nexport interface MobileWalletAdapterProviderState {\n clusterId: SolanaClusterId;\n connection: Connection;\n identity: AppIdentity;\n}\n\nexport const MobileWalletAdapterProviderContext = createContext<MobileWalletAdapterProviderState>(\n {} as MobileWalletAdapterProviderState,\n);\nexport function MobileWalletAdapterProvider({\n children,\n clusterId,\n endpoint,\n identity,\n}: MobileWalletAdapterProviderProps) {\n const connection = useMemo(() => new Connection(endpoint, { commitment: 'confirmed' }), [endpoint]);\n const value = useMemo(() => ({ clusterId, connection, identity }), [connection, identity, clusterId]);\n\n return (\n <MobileWalletAdapterProviderContext.Provider value={value}>\n {children}\n </MobileWalletAdapterProviderContext.Provider>\n );\n}\n","import AsyncStorage from '@react-native-async-storage/async-storage';\nimport { PublicKey, PublicKeyInitData } from '@solana/web3.js';\nimport {\n Account as AuthorizedAccount,\n AppIdentity,\n AuthorizationResult,\n AuthorizeAPI,\n AuthToken,\n Base64EncodedAddress,\n DeauthorizeAPI,\n SignInPayload,\n} from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { WalletIcon } from '@wallet-standard/core';\nimport { SolanaClusterId } from '@wallet-ui/core';\nimport { toUint8Array } from 'js-base64';\nimport { useCallback, useMemo } from 'react';\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 type Account = Readonly<{\n address: Base64EncodedAddress;\n displayAddress?: string;\n icon?: WalletIcon;\n label?: string;\n publicKey: PublicKey;\n}>;\n\nexport type WalletAuthorization = Readonly<{\n accounts: Account[];\n authToken: AuthToken;\n selectedAccount: Account;\n}>;\n\nfunction getPublicKeyFromAddress(address: Base64EncodedAddress): PublicKey {\n const publicKeyByteArray = toUint8Array(address);\n return new PublicKey(publicKeyByteArray);\n}\n\nfunction getAccountFromAuthorizedAccount(account: AuthorizedAccount): Account {\n const publicKey = getPublicKeyFromAddress(account.address);\n return {\n address: account.address,\n // TODO: Fix upstream?\n displayAddress: (account as unknown as { display_address: string }).display_address,\n icon: account.icon,\n label: account.label ?? ellipsify(publicKey.toString(), 8),\n publicKey,\n };\n}\n\nfunction 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.address)\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\nconst AUTHORIZATION_STORAGE_KEY = 'authorization-cache';\n\nconst queryKey = ['wallet-authorization'];\n\nfunction cacheReviver(key: string, value: unknown) {\n if (key === 'publicKey') {\n return new PublicKey(value as PublicKeyInitData); // the PublicKeyInitData should match the actual data structure stored in AsyncStorage\n } else {\n return value;\n }\n}\nfunction usePersistAuthorization() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: async (auth: WalletAuthorization | null): Promise<void> => {\n await AsyncStorage.setItem(AUTHORIZATION_STORAGE_KEY, JSON.stringify(auth));\n },\n onSuccess: async () => {\n await queryClient.invalidateQueries({ queryKey });\n },\n });\n}\n\nfunction useFetchAuthorization() {\n return useQuery({\n queryFn: async (): Promise<WalletAuthorization | null> => {\n const cacheFetchResult = await AsyncStorage.getItem(AUTHORIZATION_STORAGE_KEY);\n\n // Return prior authorization, if found.\n return cacheFetchResult ? JSON.parse(cacheFetchResult, cacheReviver) : null;\n },\n queryKey,\n });\n}\n\nfunction useInvalidateAuthorizations() {\n const client = useQueryClient();\n return () => client.invalidateQueries({ queryKey });\n}\n\nexport function useAuthorization({ clusterId, identity }: { clusterId: SolanaClusterId; identity: AppIdentity }) {\n const fetchQuery = useFetchAuthorization();\n const invalidateAuthorizations = useInvalidateAuthorizations();\n const persistMutation = usePersistAuthorization();\n\n const handleAuthorizationResult = useCallback(\n async (authorizationResult: AuthorizationResult): Promise<WalletAuthorization> => {\n const nextAuthorization = getAuthorizationFromAuthorizationResult(\n authorizationResult,\n fetchQuery.data?.selectedAccount,\n );\n await persistMutation.mutateAsync(nextAuthorization);\n return nextAuthorization;\n },\n [fetchQuery.data?.selectedAccount, persistMutation],\n );\n\n const authorizeSession = useCallback(\n async (wallet: AuthorizeAPI) => {\n const authorizationResult = await wallet.authorize({\n auth_token: fetchQuery.data?.authToken,\n chain: clusterId,\n identity,\n });\n return (await handleAuthorizationResult(authorizationResult)).selectedAccount;\n },\n [fetchQuery.data?.authToken, clusterId, identity, handleAuthorizationResult],\n );\n\n const authorizeSessionWithSignIn = useCallback(\n async (wallet: AuthorizeAPI, signInPayload: SignInPayload) => {\n const authorizationResult = await wallet.authorize({\n auth_token: fetchQuery.data?.authToken,\n chain: clusterId,\n identity,\n sign_in_payload: signInPayload,\n });\n return (await handleAuthorizationResult(authorizationResult)).selectedAccount;\n },\n [fetchQuery.data?.authToken, clusterId, identity, handleAuthorizationResult],\n );\n\n const deauthorizeSession = useCallback(\n async (wallet: DeauthorizeAPI) => {\n if (fetchQuery.data?.authToken == null) {\n return;\n }\n await wallet.deauthorize({ auth_token: fetchQuery.data.authToken });\n await persistMutation.mutateAsync(null);\n },\n [fetchQuery.data?.authToken, persistMutation],\n );\n\n const deauthorizeSessions = useCallback(async () => {\n await invalidateAuthorizations();\n await persistMutation.mutateAsync(null);\n }, [invalidateAuthorizations, persistMutation]);\n\n return useMemo(\n () => ({\n accounts: fetchQuery.data?.accounts ?? null,\n authorizeSession,\n authorizeSessionWithSignIn,\n deauthorizeSession,\n deauthorizeSessions,\n isLoading: fetchQuery.isLoading,\n selectedAccount: fetchQuery.data?.selectedAccount ?? null,\n }),\n [\n authorizeSession,\n authorizeSessionWithSignIn,\n deauthorizeSession,\n deauthorizeSessions,\n fetchQuery.data?.accounts,\n fetchQuery.data?.selectedAccount,\n fetchQuery.isLoading,\n ],\n );\n}\n","import { Transaction, TransactionSignature, VersionedTransaction } from '@solana/web3.js';\nimport { AppIdentity, AuthorizeAPI, SignInPayload } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { transact } from '@solana-mobile/mobile-wallet-adapter-protocol-web3js';\nimport { SolanaClusterId } from '@wallet-ui/core';\nimport { useCallback, useMemo } from 'react';\n\nimport { Account, useAuthorization } from './use-authorization';\n\nexport function useMobileWallet({ clusterId, identity }: { clusterId: SolanaClusterId; identity: AppIdentity }) {\n const { authorizeSessionWithSignIn, authorizeSession, deauthorizeSessions } = useAuthorization({\n clusterId,\n identity,\n });\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> => {\n await deauthorizeSessions();\n }, [deauthorizeSessions]);\n\n const signAndSendTransaction = useCallback(\n async (\n transaction: Transaction | VersionedTransaction,\n minContextSlot: number,\n ): Promise<TransactionSignature> => {\n return await transact(async wallet => {\n await authorizeSession(wallet);\n const signatures = await wallet.signAndSendTransactions({\n minContextSlot,\n transactions: [transaction],\n });\n return signatures[0];\n });\n },\n [authorizeSession],\n );\n\n const signMessage = useCallback(\n async (message: Uint8Array): Promise<Uint8Array> => {\n return await transact(async wallet => {\n const authResult = await authorizeSession(wallet);\n const signedMessages = await wallet.signMessages({\n addresses: [authResult.address],\n payloads: [message],\n });\n return signedMessages[0];\n });\n },\n [authorizeSession],\n );\n\n return useMemo(\n () => ({\n connect,\n connectAnd,\n disconnect,\n signAndSendTransaction,\n signIn,\n signMessage,\n }),\n [connect, connectAnd, disconnect, signAndSendTransaction, signIn, signMessage],\n );\n}\n","import { useContext } from 'react';\n\nimport { MobileWalletAdapterProviderContext } from './mobile-wallet-adapter-provider';\nimport { useAuthorization } from './use-authorization';\nimport { useMobileWallet } from './use-mobile-wallet';\n\nexport function useMobileWalletAdapter() {\n const ctx = useContext(MobileWalletAdapterProviderContext);\n const { connect, connectAnd, signAndSendTransaction, signMessage, signIn } = useMobileWallet(ctx);\n const { selectedAccount, deauthorizeSessions } = useAuthorization(ctx);\n\n return {\n ...ctx,\n account: selectedAccount,\n connect,\n connectAnd,\n disconnect: deauthorizeSessions,\n signAndSendTransaction,\n signIn,\n signMessage,\n };\n}\n"]}
1
+ {"version":3,"sources":["../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-query-config.ts","../src/use-fetch-authorization.ts","../src/use-invalidate-authorizations.ts","../src/use-persist-authorization.ts","../src/use-authorization.ts","../src/use-mobile-wallet.ts"],"names":["createContext","useMemo","Connection","React","toUint8Array","PublicKey","useQueryClient","useQuery","AsyncStorage","useMutation","useCallback","useContext","transact"],"mappings":"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","file":"index.node.cjs","sourcesContent":["import { Commitment, Connection, ConnectionConfig } from '@solana/web3.js';\nimport { AppIdentity, Chain } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport React, { createContext, type ReactNode, useMemo } from 'react';\n\nexport interface MobileWalletProviderProps {\n chain: Chain;\n children: ReactNode;\n commitmentOrConfig?: Commitment | ConnectionConfig;\n endpoint: string;\n identity: AppIdentity;\n}\nexport interface MobileWalletProviderState {\n chain: Chain;\n connection: Connection;\n identity: AppIdentity;\n}\n\nexport const MobileWalletProviderContext = createContext<MobileWalletProviderState>({} as MobileWalletProviderState);\nexport function MobileWalletProvider({\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\n return (\n <MobileWalletProviderContext.Provider\n value={useMemo(\n () => ({\n chain,\n connection,\n identity,\n }),\n [connection, identity, chain],\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 publicKey = getPublicKeyFromAddress(account.address);\n\n return {\n address: account.address,\n icon: account.icon,\n label: account.label ?? ellipsify(publicKey.toString(), 8),\n publicKey,\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.address)\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 { useQueryClient } from '@tanstack/react-query';\n\nexport function useQueryConfig() {\n const storageKey = 'authorization-cache';\n const queryClient = useQueryClient();\n const queryKey = ['wallet-authorization'];\n\n return { queryClient, queryKey, storageKey };\n}\n","import AsyncStorage from '@react-native-async-storage/async-storage';\nimport { PublicKey, PublicKeyInitData } from '@solana/web3.js';\nimport { useQuery } from '@tanstack/react-query';\n\nimport { WalletAuthorization } from './use-authorization';\nimport { useQueryConfig } from './use-query-config';\n\nfunction cacheReviver(key: string, value: unknown) {\n if (key === 'publicKey') {\n return new PublicKey(value as PublicKeyInitData); // the PublicKeyInitData should match the actual data structure stored in AsyncStorage\n } else {\n return value;\n }\n}\n\nexport function useFetchAuthorization() {\n const { queryKey, storageKey } = useQueryConfig();\n return useQuery({\n queryFn: async (): Promise<WalletAuthorization | null> => {\n const cacheFetchResult = await AsyncStorage.getItem(storageKey);\n\n // Return prior authorization, if found.\n return cacheFetchResult ? JSON.parse(cacheFetchResult, cacheReviver) : null;\n },\n queryKey,\n });\n}\n","import { useQueryConfig } from './use-query-config';\n\nexport function useInvalidateAuthorizations() {\n const { queryClient, queryKey } = useQueryConfig();\n\n return () => queryClient.invalidateQueries({ queryKey });\n}\n","import AsyncStorage from '@react-native-async-storage/async-storage';\nimport { useMutation } from '@tanstack/react-query';\n\nimport { WalletAuthorization } from './use-authorization';\nimport { useQueryConfig } from './use-query-config';\n\nexport function usePersistAuthorization() {\n const { queryClient, queryKey, storageKey } = useQueryConfig();\n return useMutation({\n mutationFn: async (auth: WalletAuthorization | null): Promise<void> => {\n await AsyncStorage.setItem(storageKey, JSON.stringify(auth));\n },\n onSuccess: async () => {\n await queryClient.invalidateQueries({ queryKey });\n },\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} from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { WalletIcon } from '@wallet-standard/core';\nimport { useCallback, useMemo } from 'react';\n\nimport { getAuthorizationFromAuthorizationResult } from './get-authorization-from-authorization-result';\nimport { useFetchAuthorization } from './use-fetch-authorization';\nimport { useInvalidateAuthorizations } from './use-invalidate-authorizations';\nimport { usePersistAuthorization } from './use-persist-authorization';\n\nexport type Account = Readonly<{\n address: Base64EncodedAddress;\n icon?: WalletIcon;\n label?: string;\n publicKey: PublicKey;\n}>;\n\nexport type WalletAuthorization = Readonly<{\n accounts: Account[];\n authToken: AuthToken;\n selectedAccount: Account;\n}>;\n\nexport function useAuthorization({ chain, identity }: { chain: Chain; identity: AppIdentity }) {\n const fetchQuery = useFetchAuthorization();\n const invalidateAuthorizations = useInvalidateAuthorizations();\n const persistMutation = usePersistAuthorization();\n\n const handleAuthorizationResult = useCallback(\n async (authorizationResult: AuthorizationResult): Promise<WalletAuthorization> => {\n const nextAuthorization = getAuthorizationFromAuthorizationResult(\n authorizationResult,\n fetchQuery.data?.selectedAccount,\n );\n await persistMutation.mutateAsync(nextAuthorization);\n return nextAuthorization;\n },\n [fetchQuery.data?.selectedAccount, persistMutation],\n );\n\n const authorizeSession = useCallback(\n async (wallet: AuthorizeAPI) => {\n const authorizationResult = await wallet.authorize({\n auth_token: fetchQuery.data?.authToken,\n chain,\n identity,\n });\n return (await handleAuthorizationResult(authorizationResult)).selectedAccount;\n },\n [fetchQuery.data?.authToken, chain, identity, handleAuthorizationResult],\n );\n\n const authorizeSessionWithSignIn = useCallback(\n async (wallet: AuthorizeAPI, signInPayload: SignInPayload) => {\n const authorizationResult = await wallet.authorize({\n auth_token: fetchQuery.data?.authToken,\n chain,\n identity,\n sign_in_payload: signInPayload,\n });\n return (await handleAuthorizationResult(authorizationResult)).selectedAccount;\n },\n [fetchQuery.data?.authToken, chain, identity, handleAuthorizationResult],\n );\n\n const deauthorizeSession = useCallback(\n async (wallet: DeauthorizeAPI) => {\n if (fetchQuery.data?.authToken == null) {\n return;\n }\n await wallet.deauthorize({ auth_token: fetchQuery.data.authToken });\n await persistMutation.mutateAsync(null);\n },\n [fetchQuery.data?.authToken, persistMutation],\n );\n\n const deauthorizeSessions = useCallback(async () => {\n await invalidateAuthorizations();\n await persistMutation.mutateAsync(null);\n }, [invalidateAuthorizations, persistMutation]);\n\n return useMemo(\n () => ({\n accounts: fetchQuery.data?.accounts ?? null,\n authorizeSession,\n authorizeSessionWithSignIn,\n deauthorizeSession,\n deauthorizeSessions,\n isLoading: fetchQuery.isLoading,\n selectedAccount: fetchQuery.data?.selectedAccount ?? null,\n }),\n [\n authorizeSession,\n authorizeSessionWithSignIn,\n deauthorizeSession,\n deauthorizeSessions,\n fetchQuery.data?.accounts,\n fetchQuery.data?.selectedAccount,\n fetchQuery.isLoading,\n ],\n );\n}\n","import { Transaction, TransactionSignature, VersionedTransaction } from '@solana/web3.js';\nimport { AuthorizeAPI, SignInPayload } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { transact } from '@solana-mobile/mobile-wallet-adapter-protocol-web3js';\nimport { useCallback, useContext, useMemo } from 'react';\n\nimport { MobileWalletProviderContext } from './mobile-wallet-provider';\nimport { Account, useAuthorization } from './use-authorization';\n\nexport function useMobileWallet() {\n const ctx = useContext(MobileWalletProviderContext);\n const { authorizeSessionWithSignIn, authorizeSession, deauthorizeSessions, selectedAccount, ...authorization } =\n useAuthorization(ctx);\n\n const connect = useCallback(\n async (): Promise<Account> => await transact(async wallet => await authorizeSession(wallet)),\n [authorizeSession],\n );\n\n const connectAnd = useCallback(\n async (cb: (wallet: AuthorizeAPI) => Promise<Account | void>): Promise<Account | void> => {\n return await transact(async wallet => await cb(wallet));\n },\n [],\n );\n\n const signIn = useCallback(\n async (signInPayload: SignInPayload): Promise<Account> =>\n await transact(async wallet => await authorizeSessionWithSignIn(wallet, signInPayload)),\n [authorizeSessionWithSignIn],\n );\n\n const disconnect = useCallback(async (): Promise<void> => await deauthorizeSessions(), [deauthorizeSessions]);\n\n const signAndSendTransaction = useCallback(\n async (\n transaction: Transaction | VersionedTransaction,\n minContextSlot: number,\n ): Promise<TransactionSignature> =>\n await transact(async wallet => {\n await authorizeSession(wallet);\n const signatures = await wallet.signAndSendTransactions({\n minContextSlot,\n transactions: [transaction],\n });\n return signatures[0];\n }),\n [authorizeSession],\n );\n\n const signMessage = useCallback(\n async (message: Uint8Array): Promise<Uint8Array> =>\n await transact(async wallet => {\n const authResult = await authorizeSession(wallet);\n const signedMessages = await wallet.signMessages({\n addresses: [authResult.address],\n payloads: [message],\n });\n return signedMessages[0];\n }),\n [authorizeSession],\n );\n\n return useMemo(\n () => ({\n ...ctx,\n ...authorization,\n account: selectedAccount,\n connect,\n connectAnd,\n disconnect,\n signAndSendTransaction,\n signIn,\n signMessage,\n }),\n [\n authorization,\n connect,\n connectAnd,\n ctx,\n disconnect,\n selectedAccount,\n signAndSendTransaction,\n signIn,\n signMessage,\n ],\n );\n}\n"]}