@wallet-ui/react-native-web3js 2.2.2 → 3.0.0-canary-20260121173832

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,10 +1,11 @@
1
1
  import { Connection, PublicKey } from '@solana/web3.js';
2
- import React, { createContext, useMemo, useCallback, useContext } from 'react';
2
+ import React, { createContext, useMemo, useCallback, useContext, useRef } from 'react';
3
3
  import { SolanaMobileWalletAdapterProtocolError, SolanaMobileWalletAdapterProtocolErrorCode } from '@solana-mobile/mobile-wallet-adapter-protocol';
4
4
  import AsyncStorage from '@react-native-async-storage/async-storage';
5
5
  import { toUint8Array } from 'js-base64';
6
6
  export { fromUint8Array, toUint8Array } from 'js-base64';
7
- import { useQueryClient, useQuery, useMutation } from '@tanstack/react-query';
7
+ import { useStore } from '@nanostores/react';
8
+ import { atom, computed } from 'nanostores';
8
9
  import { transact } from '@solana-mobile/mobile-wallet-adapter-protocol-web3js';
9
10
  export * from '@solana-mobile/mobile-wallet-adapter-protocol-web3js';
10
11
  export * from '@wallet-ui/core';
@@ -108,60 +109,61 @@ function getAuthorizationFromAuthorizationResult(authorizationResult, previously
108
109
  selectedAccount
109
110
  };
110
111
  }
111
- function useFetchAuthorization({ cache, queryKey }) {
112
- return useQuery({
113
- queryFn: async () => {
114
- const result = await cache.get();
115
- return result ?? null;
116
- },
117
- queryKey
118
- });
119
- }
120
- function usePersistAuthorization({ cache, queryKey }) {
121
- const queryClient = useQueryClient();
122
- return useMutation({
123
- mutationFn: async (auth) => {
124
- if (auth) {
125
- await cache.set(auth);
126
- } else {
127
- await cache.clear();
128
- }
129
- },
130
- onSuccess: async () => {
131
- await queryClient.invalidateQueries({ queryKey });
132
- }
133
- });
134
- }
135
-
136
- // src/use-authorization-storage.ts
137
- function useAuthorizationStorage({ cache }) {
138
- const queryKey = ["wallet-authorization"];
139
- const queryClient = useQueryClient();
140
- const fetchQuery = useFetchAuthorization({ cache, queryKey });
141
- const persistMutation = usePersistAuthorization({ cache, queryKey });
142
- async function persist(next, invalidate = false) {
143
- await persistMutation.mutateAsync(next);
144
- if (invalidate) {
145
- await queryClient.invalidateQueries({ queryKey });
112
+ function createAuthorizationStore(context) {
113
+ const { cache } = context;
114
+ const $authorization = atom(null);
115
+ const $accounts = computed($authorization, (auth) => auth?.accounts ?? null);
116
+ const $authToken = computed($authorization, (auth) => auth?.authToken);
117
+ const $selectedAccount = computed($authorization, (auth) => auth?.selectedAccount);
118
+ async function fetch() {
119
+ const result = await cache.get();
120
+ const auth = result ?? null;
121
+ $authorization.set(auth);
122
+ return auth;
123
+ }
124
+ async function persist(auth) {
125
+ if (auth) {
126
+ await cache.set(auth);
127
+ } else {
128
+ await cache.clear();
146
129
  }
130
+ $authorization.set(auth);
147
131
  }
148
- const accounts = fetchQuery.data?.accounts ?? null;
149
- const authToken = fetchQuery.data?.authToken ?? void 0;
150
- const isLoading = fetchQuery.isLoading;
151
- const selectedAccount = fetchQuery.data?.selectedAccount ?? void 0;
152
132
  return {
153
- accounts,
154
- authToken,
155
- isLoading,
156
- persist,
157
- selectedAccount
133
+ $accounts,
134
+ $authToken,
135
+ $selectedAccount,
136
+ fetch,
137
+ persist
158
138
  };
159
139
  }
160
140
 
141
+ // src/use-authorization-store.ts
142
+ function useAuthorizationStore({ cache }) {
143
+ const storeRef = useRef(null);
144
+ if (!storeRef.current) {
145
+ storeRef.current = createAuthorizationStore({ cache });
146
+ storeRef.current.fetch().catch(console.error);
147
+ }
148
+ const store = storeRef.current;
149
+ const accounts = useStore(store.$accounts);
150
+ const authToken = useStore(store.$authToken);
151
+ const selectedAccount = useStore(store.$selectedAccount);
152
+ return useMemo(
153
+ () => ({
154
+ accounts,
155
+ authToken,
156
+ persist: store.persist,
157
+ selectedAccount
158
+ }),
159
+ [accounts, authToken, store.persist, selectedAccount]
160
+ );
161
+ }
162
+
161
163
  // src/use-authorization.ts
162
164
  function useAuthorization({ cache, chain, identity }) {
163
165
  const memoizedCache = useMemo(() => cache ?? createAsyncStorageCache(), [cache]);
164
- const { accounts, authToken, isLoading, persist, selectedAccount } = useAuthorizationStorage({
166
+ const { accounts, authToken, persist, selectedAccount } = useAuthorizationStore({
165
167
  cache: memoizedCache
166
168
  });
167
169
  const handleAuthorizationResult = useCallback(
@@ -229,7 +231,7 @@ function useAuthorization({ cache, chain, identity }) {
229
231
  [authToken, persist]
230
232
  );
231
233
  const deauthorizeSessions = useCallback(async () => {
232
- await persist(null, true);
234
+ await persist(null);
233
235
  }, [persist]);
234
236
  return useMemo(
235
237
  () => ({
@@ -238,7 +240,6 @@ function useAuthorization({ cache, chain, identity }) {
238
240
  authorizeSessionWithSignIn,
239
241
  deauthorizeSession,
240
242
  deauthorizeSessions,
241
- isLoading,
242
243
  selectedAccount
243
244
  }),
244
245
  [
@@ -247,7 +248,6 @@ function useAuthorization({ cache, chain, identity }) {
247
248
  authorizeSessionWithSignIn,
248
249
  deauthorizeSession,
249
250
  deauthorizeSessions,
250
- isLoading,
251
251
  selectedAccount
252
252
  ]
253
253
  );
@@ -318,6 +318,6 @@ function useMobileWallet() {
318
318
  );
319
319
  }
320
320
 
321
- export { MobileWalletProvider, MobileWalletProviderContext, useAuthorization, useMobileWallet };
321
+ export { MobileWalletProvider, MobileWalletProviderContext, createAuthorizationStore, useAuthorization, useMobileWallet };
322
322
  //# sourceMappingURL=index.node.mjs.map
323
323
  //# sourceMappingURL=index.node.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/mobile-wallet-provider.tsx","../src/async-storage-cache.ts","../src/get-public-key-from-address.ts","../src/get-account-from-authorized-account.ts","../src/get-authorization-from-authorization-result.ts","../src/use-fetch-authorization.ts","../src/use-persist-authorization.ts","../src/use-authorization-storage.ts","../src/use-authorization.ts","../src/use-mobile-wallet.ts"],"names":["PublicKey","useQueryClient","useMemo","useCallback"],"mappings":"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","file":"index.node.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\nimport { 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}\n\nexport const MobileWalletProviderContext = createContext<MobileWalletProviderState>({} as MobileWalletProviderState);\nexport function MobileWalletProvider({\n cache,\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 cache,\n chain,\n connection,\n identity,\n }),\n [cache, chain, connection, identity],\n )}\n >\n {children}\n </MobileWalletProviderContext.Provider>\n );\n}\n","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 { 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 { useQuery } from '@tanstack/react-query';\n\nimport { WalletAuthorization, WalletAuthorizationCache } from './use-authorization';\n\nexport function useFetchAuthorization({ cache, queryKey }: { cache: WalletAuthorizationCache; queryKey: string[] }) {\n return useQuery({\n queryFn: async (): Promise<WalletAuthorization | null> => {\n const result = await cache.get();\n return result ?? null;\n },\n queryKey,\n });\n}\n","import { useMutation, useQueryClient } from '@tanstack/react-query';\n\nimport { WalletAuthorization, WalletAuthorizationCache } from './use-authorization';\n\nexport function usePersistAuthorization({ cache, queryKey }: { cache: WalletAuthorizationCache; queryKey: string[] }) {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: async (auth: WalletAuthorization | null): Promise<void> => {\n if (auth) {\n await cache.set(auth);\n } else {\n await cache.clear();\n }\n },\n onSuccess: async () => {\n await queryClient.invalidateQueries({ queryKey });\n },\n });\n}\n","import { useQueryClient } from '@tanstack/react-query';\n\nimport { Account, WalletAuthorization, WalletAuthorizationCache } from './use-authorization';\nimport { useFetchAuthorization } from './use-fetch-authorization';\nimport { usePersistAuthorization } from './use-persist-authorization';\n\nexport function useAuthorizationStorage({ cache }: { cache: WalletAuthorizationCache }) {\n const queryKey = ['wallet-authorization'];\n const queryClient = useQueryClient();\n const fetchQuery = useFetchAuthorization({ cache, queryKey });\n const persistMutation = usePersistAuthorization({ cache, queryKey });\n\n async function persist(next: WalletAuthorization | null, invalidate = false) {\n await persistMutation.mutateAsync(next);\n if (invalidate) {\n await queryClient.invalidateQueries({ queryKey });\n }\n }\n\n const accounts = fetchQuery.data?.accounts ?? null;\n const authToken: string | undefined = fetchQuery.data?.authToken ?? undefined;\n const isLoading = fetchQuery.isLoading;\n const selectedAccount: Account | undefined = fetchQuery.data?.selectedAccount ?? undefined;\n\n return {\n accounts,\n authToken,\n isLoading,\n persist,\n selectedAccount,\n } as const;\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 { createAsyncStorageCache } from './async-storage-cache';\nimport { Cache } from './cache';\nimport { getAuthorizationFromAuthorizationResult } from './get-authorization-from-authorization-result';\nimport { useAuthorizationStorage } from './use-authorization-storage';\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}>;\nexport type WalletAuthorizationCache = Cache<WalletAuthorization | undefined>;\nexport type WalletAuthorizationProps = Readonly<{\n cache?: WalletAuthorizationCache;\n chain: Chain;\n identity: AppIdentity;\n}>;\nexport function useAuthorization({ cache, chain, identity }: WalletAuthorizationProps) {\n const memoizedCache = useMemo(() => cache ?? createAsyncStorageCache<WalletAuthorization>(), [cache]);\n\n const { accounts, authToken, isLoading, persist, selectedAccount } = useAuthorizationStorage({\n cache: memoizedCache,\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, true);\n }, [persist]);\n\n return useMemo(\n () => ({\n accounts,\n authorizeSession,\n authorizeSessionWithSignIn,\n deauthorizeSession,\n deauthorizeSessions,\n isLoading,\n selectedAccount,\n }),\n [\n accounts,\n authorizeSession,\n authorizeSessionWithSignIn,\n deauthorizeSession,\n deauthorizeSessions,\n isLoading,\n selectedAccount,\n ],\n );\n}\n","import { Transaction, TransactionSignature, VersionedTransaction } from '@solana/web3.js';\nimport { AuthorizeAPI, SignInPayload } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { transact } from '@solana-mobile/mobile-wallet-adapter-protocol-web3js';\nimport { useCallback, useContext, useMemo } from 'react';\n\nimport { MobileWalletProviderContext } from './mobile-wallet-provider';\nimport { Account, useAuthorization } from './use-authorization';\n\nexport function useMobileWallet() {\n const ctx = useContext(MobileWalletProviderContext);\n const { 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"]}
1
+ {"version":3,"sources":["../src/mobile-wallet-provider.tsx","../src/async-storage-cache.ts","../src/get-public-key-from-address.ts","../src/get-account-from-authorized-account.ts","../src/get-authorization-from-authorization-result.ts","../src/authorization-store.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 { 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\nimport { 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}\n\nexport const MobileWalletProviderContext = createContext<MobileWalletProviderState>({} as MobileWalletProviderState);\nexport function MobileWalletProvider({\n cache,\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 cache,\n chain,\n connection,\n identity,\n }),\n [cache, chain, connection, identity],\n )}\n >\n {children}\n </MobileWalletProviderContext.Provider>\n );\n}\n","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 { 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 { 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 { useStore } from '@nanostores/react';\nimport { useMemo, useRef } from 'react';\n\nimport { AuthorizationStore, createAuthorizationStore } from './authorization-store';\nimport { WalletAuthorizationCache } from './use-authorization';\n\nexport function useAuthorizationStore({ cache }: { cache: WalletAuthorizationCache }) {\n const storeRef = useRef<AuthorizationStore | null>(null);\n\n if (!storeRef.current) {\n storeRef.current = createAuthorizationStore({ cache });\n storeRef.current.fetch().catch(console.error);\n }\n\n const store = storeRef.current;\n\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 { createAsyncStorageCache } from './async-storage-cache';\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: 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}>;\nexport type WalletAuthorizationCache = Cache<WalletAuthorization | undefined>;\nexport type WalletAuthorizationProps = Readonly<{\n cache?: WalletAuthorizationCache;\n chain: Chain;\n identity: AppIdentity;\n}>;\nexport function useAuthorization({ cache, chain, identity }: WalletAuthorizationProps) {\n const memoizedCache = useMemo(() => cache ?? createAsyncStorageCache<WalletAuthorization>(), [cache]);\n\n const { accounts, authToken, persist, selectedAccount } = useAuthorizationStore({\n cache: memoizedCache,\n });\n\n const handleAuthorizationResult = useCallback(\n async (authorizationResult: AuthorizationResult): Promise<WalletAuthorization> => {\n const nextAuthorization = getAuthorizationFromAuthorizationResult(authorizationResult, selectedAccount);\n await persist(nextAuthorization);\n return nextAuthorization;\n },\n [selectedAccount, persist],\n );\n\n const authorizeSession = useCallback(\n async (wallet: AuthorizeAPI) => {\n try {\n const authorizationResult = await wallet.authorize({\n auth_token: authToken,\n chain,\n identity,\n });\n return (await handleAuthorizationResult(authorizationResult)).selectedAccount;\n } catch (error) {\n if (\n error instanceof SolanaMobileWalletAdapterProtocolError &&\n error.code === SolanaMobileWalletAdapterProtocolErrorCode.ERROR_AUTHORIZATION_FAILED\n ) {\n const retryResult = await wallet.authorize({\n chain,\n identity,\n });\n return (await handleAuthorizationResult(retryResult)).selectedAccount;\n }\n throw error;\n }\n },\n [authToken, chain, identity, handleAuthorizationResult],\n );\n\n const authorizeSessionWithSignIn = useCallback(\n async (wallet: AuthorizeAPI, signInPayload: SignInPayload) => {\n try {\n const authorizationResult = await wallet.authorize({\n auth_token: authToken,\n chain,\n identity,\n sign_in_payload: signInPayload,\n });\n return (await handleAuthorizationResult(authorizationResult)).selectedAccount;\n } catch (error) {\n if (\n error instanceof SolanaMobileWalletAdapterProtocolError &&\n error.code === SolanaMobileWalletAdapterProtocolErrorCode.ERROR_AUTHORIZATION_FAILED\n ) {\n const retryResult = await wallet.authorize({\n chain,\n identity,\n sign_in_payload: signInPayload,\n });\n return (await handleAuthorizationResult(retryResult)).selectedAccount;\n }\n throw error;\n }\n },\n [authToken, chain, identity, handleAuthorizationResult],\n );\n\n const deauthorizeSession = useCallback(\n async (wallet: DeauthorizeAPI) => {\n if (authToken == null) {\n return;\n }\n await wallet.deauthorize({ auth_token: authToken });\n await persist(null);\n },\n [authToken, persist],\n );\n\n const deauthorizeSessions = useCallback(async () => {\n await persist(null);\n }, [persist]);\n\n return useMemo(\n () => ({\n accounts,\n authorizeSession,\n authorizeSessionWithSignIn,\n deauthorizeSession,\n deauthorizeSessions,\n selectedAccount,\n }),\n [\n accounts,\n authorizeSession,\n authorizeSessionWithSignIn,\n deauthorizeSession,\n deauthorizeSessions,\n selectedAccount,\n ],\n );\n}\n","import { Transaction, TransactionSignature, VersionedTransaction } from '@solana/web3.js';\nimport { AuthorizeAPI, SignInPayload } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { transact } from '@solana-mobile/mobile-wallet-adapter-protocol-web3js';\nimport { useCallback, useContext, useMemo } from 'react';\n\nimport { MobileWalletProviderContext } from './mobile-wallet-provider';\nimport { Account, useAuthorization } from './use-authorization';\n\nexport function useMobileWallet() {\n const ctx = useContext(MobileWalletProviderContext);\n const { 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"]}
@@ -0,0 +1,24 @@
1
+ import { Cache } from './cache';
2
+ import { WalletAuthorization } from './use-authorization';
3
+ export type AuthorizationStoreContext = {
4
+ cache: Cache<WalletAuthorization | undefined>;
5
+ };
6
+ export declare function createAuthorizationStore(context: AuthorizationStoreContext): {
7
+ $accounts: import("nanostores").ReadableAtom<Readonly<{
8
+ address: import("@solana-mobile/mobile-wallet-adapter-protocol").Base64EncodedAddress;
9
+ icon?: import("@wallet-standard/core").WalletIcon;
10
+ label?: string;
11
+ publicKey: import("@solana/web3.js").PublicKey;
12
+ }>[] | null>;
13
+ $authToken: import("nanostores").ReadableAtom<string | undefined>;
14
+ $selectedAccount: import("nanostores").ReadableAtom<Readonly<{
15
+ address: import("@solana-mobile/mobile-wallet-adapter-protocol").Base64EncodedAddress;
16
+ icon?: import("@wallet-standard/core").WalletIcon;
17
+ label?: string;
18
+ publicKey: import("@solana/web3.js").PublicKey;
19
+ }> | undefined>;
20
+ fetch: () => Promise<WalletAuthorization | null>;
21
+ persist: (auth: WalletAuthorization | null) => Promise<void>;
22
+ };
23
+ export type AuthorizationStore = ReturnType<typeof createAuthorizationStore>;
24
+ //# sourceMappingURL=authorization-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorization-store.d.ts","sourceRoot":"","sources":["../../src/authorization-store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D,MAAM,MAAM,yBAAyB,GAAG;IACpC,KAAK,EAAE,KAAK,CAAC,mBAAmB,GAAG,SAAS,CAAC,CAAC;CACjD,CAAC;AAEF,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,yBAAyB;;;;;;;;;;;;;;iBAS/C,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;oBAO9B,mBAAmB,GAAG,IAAI,KAAG,OAAO,CAAC,IAAI,CAAC;EAgB1E;AAED,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC"}
@@ -1,6 +1,7 @@
1
1
  export * from './mobile-wallet-provider';
2
2
  export * from './cache';
3
3
  export * from './use-authorization';
4
+ export * from './authorization-store';
4
5
  export * from './use-mobile-wallet';
5
6
  export type { AppIdentity, SignInPayload } from '@solana-mobile/mobile-wallet-adapter-protocol';
6
7
  export * from '@solana-mobile/mobile-wallet-adapter-protocol-web3js';
@@ -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,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"}
@@ -1,21 +1,20 @@
1
- import { WalletAuthorization, WalletAuthorizationCache } from './use-authorization';
2
- export declare function useAuthorizationStorage({ cache }: {
1
+ import { WalletAuthorizationCache } from './use-authorization';
2
+ export declare function useAuthorizationStore({ cache }: {
3
3
  cache: WalletAuthorizationCache;
4
4
  }): {
5
- readonly accounts: Readonly<{
5
+ accounts: Readonly<{
6
6
  address: import("@solana-mobile/mobile-wallet-adapter-protocol").Base64EncodedAddress;
7
7
  icon?: import("@wallet-standard/core").WalletIcon;
8
8
  label?: string;
9
9
  publicKey: import("@solana/web3.js").PublicKey;
10
10
  }>[] | null;
11
- readonly authToken: string | undefined;
12
- readonly isLoading: boolean;
13
- readonly persist: (next: WalletAuthorization | null, invalidate?: boolean) => Promise<void>;
14
- readonly selectedAccount: Readonly<{
11
+ authToken: string | undefined;
12
+ persist: (auth: import("./use-authorization").WalletAuthorization | null) => Promise<void>;
13
+ selectedAccount: Readonly<{
15
14
  address: import("@solana-mobile/mobile-wallet-adapter-protocol").Base64EncodedAddress;
16
15
  icon?: import("@wallet-standard/core").WalletIcon;
17
16
  label?: string;
18
17
  publicKey: import("@solana/web3.js").PublicKey;
19
18
  }> | undefined;
20
19
  };
21
- //# sourceMappingURL=use-authorization-storage.d.ts.map
20
+ //# sourceMappingURL=use-authorization-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-authorization-store.d.ts","sourceRoot":"","sources":["../../src/use-authorization-store.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,wBAAgB,qBAAqB,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,wBAAwB,CAAA;CAAE;;;;;;;;;;;;;;;EAuBnF"}
@@ -40,7 +40,6 @@ export declare function useAuthorization({ cache, chain, identity }: WalletAutho
40
40
  }>>;
41
41
  deauthorizeSession: (wallet: DeauthorizeAPI) => Promise<void>;
42
42
  deauthorizeSessions: () => Promise<void>;
43
- isLoading: boolean;
44
43
  selectedAccount: Readonly<{
45
44
  address: Base64EncodedAddress;
46
45
  icon?: WalletIcon;
@@ -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;AAInD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAIhC,MAAM,MAAM,OAAO,GAAG,QAAQ,CAAC;IAC3B,OAAO,EAAE,oBAAoB,CAAC;IAC9B,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,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;CACzB,CAAC,CAAC;AACH,wBAAgB,gBAAgB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,wBAAwB;;iBAjBxE,oBAAoB;eACtB,UAAU;gBACT,MAAM;mBACH,SAAS;;+BA+BD,YAAY;iBAlCtB,oBAAoB;eACtB,UAAU;gBACT,MAAM;mBACH,SAAS;;yCAyDD,YAAY,iBAAiB,aAAa;iBA5DpD,oBAAoB;eACtB,UAAU;gBACT,MAAM;mBACH,SAAS;;iCAqFD,cAAc;;;;iBAxFxB,oBAAoB;eACtB,UAAU;gBACT,MAAM;mBACH,SAAS;;EAuHvB"}
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;AAInD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAIhC,MAAM,MAAM,OAAO,GAAG,QAAQ,CAAC;IAC3B,OAAO,EAAE,oBAAoB,CAAC;IAC9B,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,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;CACzB,CAAC,CAAC;AACH,wBAAgB,gBAAgB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,wBAAwB;;iBAjBxE,oBAAoB;eACtB,UAAU;gBACT,MAAM;mBACH,SAAS;;+BA+BD,YAAY;iBAlCtB,oBAAoB;eACtB,UAAU;gBACT,MAAM;mBACH,SAAS;;yCAyDD,YAAY,iBAAiB,aAAa;iBA5DpD,oBAAoB;eACtB,UAAU;gBACT,MAAM;mBACH,SAAS;;iCAqFD,cAAc;;;iBAxFxB,oBAAoB;eACtB,UAAU;gBACT,MAAM;mBACH,SAAS;;EAqHvB"}
@@ -21,7 +21,6 @@ export declare function useMobileWallet(): {
21
21
  publicKey: import("@solana/web3.js").PublicKey;
22
22
  }>[] | null;
23
23
  deauthorizeSession: (wallet: import("@solana-mobile/mobile-wallet-adapter-protocol").DeauthorizeAPI) => Promise<void>;
24
- isLoading: boolean;
25
24
  connection: import("@solana/web3.js").Connection;
26
25
  cache?: import("./use-authorization").WalletAuthorizationCache;
27
26
  chain: import("@solana-mobile/mobile-wallet-adapter-protocol").Chain;
@@ -1 +1 @@
1
- {"version":3,"file":"use-mobile-wallet.d.ts","sourceRoot":"","sources":["../../src/use-mobile-wallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC1F,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AAK5F,OAAO,EAAE,OAAO,EAAoB,MAAM,qBAAqB,CAAC;AAEhE,wBAAgB,eAAe;;;;;;;mBAMb,OAAO,CAAC,OAAO,CAAC;qBAKf,CAAC,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,KAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;sBAYjD,OAAO,CAAC,IAAI,CAAC;0CAIjC,WAAW,GAAG,oBAAoB,kBAC/B,MAAM,KACvB,OAAO,CAAC,oBAAoB,CAAC;4BAXV,aAAa,KAAG,OAAO,CAAC,OAAO,CAAC;2BAwBtC,UAAU,KAAG,OAAO,CAAC,UAAU,CAAC;;;;;;;;;;;;;EAoCvD"}
1
+ {"version":3,"file":"use-mobile-wallet.d.ts","sourceRoot":"","sources":["../../src/use-mobile-wallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC1F,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AAK5F,OAAO,EAAE,OAAO,EAAoB,MAAM,qBAAqB,CAAC;AAEhE,wBAAgB,eAAe;;;;;;;mBAMb,OAAO,CAAC,OAAO,CAAC;qBAKf,CAAC,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,KAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;sBAYjD,OAAO,CAAC,IAAI,CAAC;0CAIjC,WAAW,GAAG,oBAAoB,kBAC/B,MAAM,KACvB,OAAO,CAAC,oBAAoB,CAAC;4BAXV,aAAa,KAAG,OAAO,CAAC,OAAO,CAAC;2BAwBtC,UAAU,KAAG,OAAO,CAAC,UAAU,CAAC;;;;;;;;;;;;EAoCvD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wallet-ui/react-native-web3js",
3
- "version": "2.2.2",
3
+ "version": "3.0.0-canary-20260121173832",
4
4
  "description": "React components for Wallet UI",
5
5
  "exports": {
6
6
  ".": {
@@ -57,17 +57,18 @@
57
57
  "maintained node versions"
58
58
  ],
59
59
  "dependencies": {
60
+ "@nanostores/react": "^1.0.0",
60
61
  "@react-native-async-storage/async-storage": "^2.2.0",
61
62
  "@solana-mobile/mobile-wallet-adapter-protocol": "^2.2.3",
62
63
  "@solana-mobile/mobile-wallet-adapter-protocol-web3js": "^2.2.3",
63
64
  "@solana/react": "3.0.3",
64
65
  "@solana/wallet-standard-features": "1.3.0",
65
66
  "@solana/web3.js": "^1.98.4",
66
- "@tanstack/react-query": "^5.90.2",
67
67
  "@wallet-standard/core": "1.1.1",
68
68
  "@wallet-standard/react": "1.0.1",
69
69
  "js-base64": "^3.7.8",
70
- "@wallet-ui/core": "2.2.2"
70
+ "nanostores": "^1.1.0",
71
+ "@wallet-ui/core": "3.0.0-canary-20260121173832"
71
72
  },
72
73
  "peerDependencies": {
73
74
  "react": ">=18"
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-authorization-storage.d.ts","sourceRoot":"","sources":["../../src/use-authorization-storage.ts"],"names":[],"mappings":"AAEA,OAAO,EAAW,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAI7F,wBAAgB,uBAAuB,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,wBAAwB,CAAA;CAAE;;;;;;;;;6BAMrD,mBAAmB,GAAG,IAAI;;;;;;;EAmB1D"}
@@ -1,10 +0,0 @@
1
- import { WalletAuthorizationCache } from './use-authorization';
2
- export declare function useFetchAuthorization({ cache, queryKey }: {
3
- cache: WalletAuthorizationCache;
4
- queryKey: string[];
5
- }): import("@tanstack/react-query").UseQueryResult<Readonly<{
6
- accounts: import("./use-authorization").Account[];
7
- authToken: import("@solana-mobile/mobile-wallet-adapter-protocol").AuthToken;
8
- selectedAccount: import("./use-authorization").Account;
9
- }> | null, Error>;
10
- //# sourceMappingURL=use-fetch-authorization.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-fetch-authorization.d.ts","sourceRoot":"","sources":["../../src/use-fetch-authorization.ts"],"names":[],"mappings":"AAEA,OAAO,EAAuB,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAEpF,wBAAgB,qBAAqB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;IAAE,KAAK,EAAE,wBAAwB,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE;;;;kBAQjH"}
@@ -1,10 +0,0 @@
1
- import { WalletAuthorizationCache } from './use-authorization';
2
- export declare function usePersistAuthorization({ cache, queryKey }: {
3
- cache: WalletAuthorizationCache;
4
- queryKey: string[];
5
- }): import("@tanstack/react-query").UseMutationResult<void, Error, Readonly<{
6
- accounts: import("./use-authorization").Account[];
7
- authToken: import("@solana-mobile/mobile-wallet-adapter-protocol").AuthToken;
8
- selectedAccount: import("./use-authorization").Account;
9
- }> | null, unknown>;
10
- //# sourceMappingURL=use-persist-authorization.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-persist-authorization.d.ts","sourceRoot":"","sources":["../../src/use-persist-authorization.ts"],"names":[],"mappings":"AAEA,OAAO,EAAuB,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAEpF,wBAAgB,uBAAuB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;IAAE,KAAK,EAAE,wBAAwB,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE;;;;oBAcnH"}