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

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,46 +1,59 @@
1
1
  import { Connection, PublicKey } from '@solana/web3.js';
2
2
  import React, { createContext, useMemo, useCallback, useContext } from 'react';
3
- import AsyncStorage from '@react-native-async-storage/async-storage';
4
- import { useQuery, useQueryClient, useMutation } from '@tanstack/react-query';
5
3
  import { toUint8Array } from 'js-base64';
6
4
  export { fromUint8Array, toUint8Array } from 'js-base64';
5
+ import AsyncStorage from '@react-native-async-storage/async-storage';
6
+ import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
7
7
  import { transact } from '@solana-mobile/mobile-wallet-adapter-protocol-web3js';
8
8
  export * from '@solana-mobile/mobile-wallet-adapter-protocol-web3js';
9
9
  export * from '@wallet-ui/core';
10
10
 
11
- // src/mobile-wallet-adapter-provider.tsx
12
- var MobileWalletAdapterProviderContext = createContext(
13
- {}
14
- );
15
- function MobileWalletAdapterProvider({
11
+ // src/mobile-wallet-provider.tsx
12
+ var MobileWalletProviderContext = createContext({});
13
+ function MobileWalletProvider({
16
14
  children,
17
- clusterId,
15
+ chain,
16
+ commitmentOrConfig = { commitment: "confirmed" },
18
17
  endpoint,
19
18
  identity
20
19
  }) {
21
- const connection = useMemo(() => new Connection(endpoint, { commitment: "confirmed" }), [endpoint]);
22
- const value = useMemo(() => ({ clusterId, connection, identity }), [connection, identity, clusterId]);
23
- return /* @__PURE__ */ React.createElement(MobileWalletAdapterProviderContext.Provider, { value }, children);
24
- }
25
- function ellipsify(str = "", len = 4, delimiter = "..") {
26
- const limit = len * 2 + delimiter.length;
27
- return str.length > limit ? str.slice(0, len) + delimiter + str.slice(-len) : str;
20
+ const connection = useMemo(() => new Connection(endpoint, commitmentOrConfig), [commitmentOrConfig, endpoint]);
21
+ return /* @__PURE__ */ React.createElement(
22
+ MobileWalletProviderContext.Provider,
23
+ {
24
+ value: useMemo(
25
+ () => ({
26
+ chain,
27
+ connection,
28
+ identity
29
+ }),
30
+ [connection, identity, chain]
31
+ )
32
+ },
33
+ children
34
+ );
28
35
  }
29
36
  function getPublicKeyFromAddress(address) {
30
37
  const publicKeyByteArray = toUint8Array(address);
31
38
  return new PublicKey(publicKeyByteArray);
32
39
  }
40
+
41
+ // src/get-account-from-authorized-account.ts
42
+ function ellipsify(str = "", len = 4, delimiter = "..") {
43
+ const limit = len * 2 + delimiter.length;
44
+ return str.length > limit ? str.slice(0, len) + delimiter + str.slice(-len) : str;
45
+ }
33
46
  function getAccountFromAuthorizedAccount(account) {
34
47
  const publicKey = getPublicKeyFromAddress(account.address);
35
48
  return {
36
49
  address: account.address,
37
- // TODO: Fix upstream?
38
- displayAddress: account.display_address,
39
50
  icon: account.icon,
40
51
  label: account.label ?? ellipsify(publicKey.toString(), 8),
41
52
  publicKey
42
53
  };
43
54
  }
55
+
56
+ // src/get-authorization-from-authorization-result.ts
44
57
  function getAuthorizationFromAuthorizationResult(authorizationResult, previouslySelectedAccount) {
45
58
  let selectedAccount;
46
59
  if (
@@ -59,8 +72,14 @@ function getAuthorizationFromAuthorizationResult(authorizationResult, previously
59
72
  selectedAccount
60
73
  };
61
74
  }
62
- var AUTHORIZATION_STORAGE_KEY = "authorization-cache";
63
- var queryKey = ["wallet-authorization"];
75
+ function useQueryConfig() {
76
+ const storageKey = "authorization-cache";
77
+ const queryClient = useQueryClient();
78
+ const queryKey = ["wallet-authorization"];
79
+ return { queryClient, queryKey, storageKey };
80
+ }
81
+
82
+ // src/use-fetch-authorization.ts
64
83
  function cacheReviver(key, value) {
65
84
  if (key === "publicKey") {
66
85
  return new PublicKey(value);
@@ -68,31 +87,36 @@ function cacheReviver(key, value) {
68
87
  return value;
69
88
  }
70
89
  }
71
- function usePersistAuthorization() {
72
- const queryClient = useQueryClient();
73
- return useMutation({
74
- mutationFn: async (auth) => {
75
- await AsyncStorage.setItem(AUTHORIZATION_STORAGE_KEY, JSON.stringify(auth));
76
- },
77
- onSuccess: async () => {
78
- await queryClient.invalidateQueries({ queryKey });
79
- }
80
- });
81
- }
82
90
  function useFetchAuthorization() {
91
+ const { queryKey, storageKey } = useQueryConfig();
83
92
  return useQuery({
84
93
  queryFn: async () => {
85
- const cacheFetchResult = await AsyncStorage.getItem(AUTHORIZATION_STORAGE_KEY);
94
+ const cacheFetchResult = await AsyncStorage.getItem(storageKey);
86
95
  return cacheFetchResult ? JSON.parse(cacheFetchResult, cacheReviver) : null;
87
96
  },
88
97
  queryKey
89
98
  });
90
99
  }
100
+
101
+ // src/use-invalidate-authorizations.ts
91
102
  function useInvalidateAuthorizations() {
92
- const client = useQueryClient();
93
- return () => client.invalidateQueries({ queryKey });
103
+ const { queryClient, queryKey } = useQueryConfig();
104
+ return () => queryClient.invalidateQueries({ queryKey });
105
+ }
106
+ function usePersistAuthorization() {
107
+ const { queryClient, queryKey, storageKey } = useQueryConfig();
108
+ return useMutation({
109
+ mutationFn: async (auth) => {
110
+ await AsyncStorage.setItem(storageKey, JSON.stringify(auth));
111
+ },
112
+ onSuccess: async () => {
113
+ await queryClient.invalidateQueries({ queryKey });
114
+ }
115
+ });
94
116
  }
95
- function useAuthorization({ clusterId, identity }) {
117
+
118
+ // src/use-authorization.ts
119
+ function useAuthorization({ chain, identity }) {
96
120
  const fetchQuery = useFetchAuthorization();
97
121
  const invalidateAuthorizations = useInvalidateAuthorizations();
98
122
  const persistMutation = usePersistAuthorization();
@@ -111,24 +135,24 @@ function useAuthorization({ clusterId, identity }) {
111
135
  async (wallet) => {
112
136
  const authorizationResult = await wallet.authorize({
113
137
  auth_token: fetchQuery.data?.authToken,
114
- chain: clusterId,
138
+ chain,
115
139
  identity
116
140
  });
117
141
  return (await handleAuthorizationResult(authorizationResult)).selectedAccount;
118
142
  },
119
- [fetchQuery.data?.authToken, clusterId, identity, handleAuthorizationResult]
143
+ [fetchQuery.data?.authToken, chain, identity, handleAuthorizationResult]
120
144
  );
121
145
  const authorizeSessionWithSignIn = useCallback(
122
146
  async (wallet, signInPayload) => {
123
147
  const authorizationResult = await wallet.authorize({
124
148
  auth_token: fetchQuery.data?.authToken,
125
- chain: clusterId,
149
+ chain,
126
150
  identity,
127
151
  sign_in_payload: signInPayload
128
152
  });
129
153
  return (await handleAuthorizationResult(authorizationResult)).selectedAccount;
130
154
  },
131
- [fetchQuery.data?.authToken, clusterId, identity, handleAuthorizationResult]
155
+ [fetchQuery.data?.authToken, chain, identity, handleAuthorizationResult]
132
156
  );
133
157
  const deauthorizeSession = useCallback(
134
158
  async (wallet) => {
@@ -165,11 +189,9 @@ function useAuthorization({ clusterId, identity }) {
165
189
  ]
166
190
  );
167
191
  }
168
- function useMobileWallet({ clusterId, identity }) {
169
- const { authorizeSessionWithSignIn, authorizeSession, deauthorizeSessions } = useAuthorization({
170
- clusterId,
171
- identity
172
- });
192
+ function useMobileWallet() {
193
+ const ctx = useContext(MobileWalletProviderContext);
194
+ const { authorizeSessionWithSignIn, authorizeSession, deauthorizeSessions, selectedAccount, ...authorization } = useAuthorization(ctx);
173
195
  const connect = useCallback(
174
196
  async () => await transact(async (wallet) => await authorizeSession(wallet)),
175
197
  [authorizeSession]
@@ -184,37 +206,34 @@ function useMobileWallet({ clusterId, identity }) {
184
206
  async (signInPayload) => await transact(async (wallet) => await authorizeSessionWithSignIn(wallet, signInPayload)),
185
207
  [authorizeSessionWithSignIn]
186
208
  );
187
- const disconnect = useCallback(async () => {
188
- await deauthorizeSessions();
189
- }, [deauthorizeSessions]);
209
+ const disconnect = useCallback(async () => await deauthorizeSessions(), [deauthorizeSessions]);
190
210
  const signAndSendTransaction = useCallback(
191
- async (transaction, minContextSlot) => {
192
- return await transact(async (wallet) => {
193
- await authorizeSession(wallet);
194
- const signatures = await wallet.signAndSendTransactions({
195
- minContextSlot,
196
- transactions: [transaction]
197
- });
198
- return signatures[0];
211
+ async (transaction, minContextSlot) => await transact(async (wallet) => {
212
+ await authorizeSession(wallet);
213
+ const signatures = await wallet.signAndSendTransactions({
214
+ minContextSlot,
215
+ transactions: [transaction]
199
216
  });
200
- },
217
+ return signatures[0];
218
+ }),
201
219
  [authorizeSession]
202
220
  );
203
221
  const signMessage = useCallback(
204
- async (message) => {
205
- return await transact(async (wallet) => {
206
- const authResult = await authorizeSession(wallet);
207
- const signedMessages = await wallet.signMessages({
208
- addresses: [authResult.address],
209
- payloads: [message]
210
- });
211
- return signedMessages[0];
222
+ async (message) => await transact(async (wallet) => {
223
+ const authResult = await authorizeSession(wallet);
224
+ const signedMessages = await wallet.signMessages({
225
+ addresses: [authResult.address],
226
+ payloads: [message]
212
227
  });
213
- },
228
+ return signedMessages[0];
229
+ }),
214
230
  [authorizeSession]
215
231
  );
216
232
  return useMemo(
217
233
  () => ({
234
+ ...ctx,
235
+ ...authorization,
236
+ account: selectedAccount,
218
237
  connect,
219
238
  connectAnd,
220
239
  disconnect,
@@ -222,25 +241,20 @@ function useMobileWallet({ clusterId, identity }) {
222
241
  signIn,
223
242
  signMessage
224
243
  }),
225
- [connect, connectAnd, disconnect, signAndSendTransaction, signIn, signMessage]
244
+ [
245
+ authorization,
246
+ connect,
247
+ connectAnd,
248
+ ctx,
249
+ disconnect,
250
+ selectedAccount,
251
+ signAndSendTransaction,
252
+ signIn,
253
+ signMessage
254
+ ]
226
255
  );
227
256
  }
228
- function useMobileWalletAdapter() {
229
- const ctx = useContext(MobileWalletAdapterProviderContext);
230
- const { connect, connectAnd, signAndSendTransaction, signMessage, signIn } = useMobileWallet(ctx);
231
- const { selectedAccount, deauthorizeSessions } = useAuthorization(ctx);
232
- return {
233
- ...ctx,
234
- account: selectedAccount,
235
- connect,
236
- connectAnd,
237
- disconnect: deauthorizeSessions,
238
- signAndSendTransaction,
239
- signIn,
240
- signMessage
241
- };
242
- }
243
257
 
244
- export { MobileWalletAdapterProvider, MobileWalletAdapterProviderContext, useAuthorization, useMobileWallet, useMobileWalletAdapter };
258
+ export { MobileWalletProvider, MobileWalletProviderContext, useAuthorization, useMobileWallet };
245
259
  //# sourceMappingURL=index.browser.mjs.map
246
260
  //# sourceMappingURL=index.browser.mjs.map
@@ -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.browser.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.browser.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"]}
@@ -1,46 +1,59 @@
1
1
  import { Connection, PublicKey } from '@solana/web3.js';
2
2
  import React, { createContext, useMemo, useCallback, useContext } from 'react';
3
- import AsyncStorage from '@react-native-async-storage/async-storage';
4
- import { useQuery, useQueryClient, useMutation } from '@tanstack/react-query';
5
3
  import { toUint8Array } from 'js-base64';
6
4
  export { fromUint8Array, toUint8Array } from 'js-base64';
5
+ import AsyncStorage from '@react-native-async-storage/async-storage';
6
+ import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
7
7
  import { transact } from '@solana-mobile/mobile-wallet-adapter-protocol-web3js';
8
8
  export * from '@solana-mobile/mobile-wallet-adapter-protocol-web3js';
9
9
  export * from '@wallet-ui/core';
10
10
 
11
- // src/mobile-wallet-adapter-provider.tsx
12
- var MobileWalletAdapterProviderContext = createContext(
13
- {}
14
- );
15
- function MobileWalletAdapterProvider({
11
+ // src/mobile-wallet-provider.tsx
12
+ var MobileWalletProviderContext = createContext({});
13
+ function MobileWalletProvider({
16
14
  children,
17
- clusterId,
15
+ chain,
16
+ commitmentOrConfig = { commitment: "confirmed" },
18
17
  endpoint,
19
18
  identity
20
19
  }) {
21
- const connection = useMemo(() => new Connection(endpoint, { commitment: "confirmed" }), [endpoint]);
22
- const value = useMemo(() => ({ clusterId, connection, identity }), [connection, identity, clusterId]);
23
- return /* @__PURE__ */ React.createElement(MobileWalletAdapterProviderContext.Provider, { value }, children);
24
- }
25
- function ellipsify(str = "", len = 4, delimiter = "..") {
26
- const limit = len * 2 + delimiter.length;
27
- return str.length > limit ? str.slice(0, len) + delimiter + str.slice(-len) : str;
20
+ const connection = useMemo(() => new Connection(endpoint, commitmentOrConfig), [commitmentOrConfig, endpoint]);
21
+ return /* @__PURE__ */ React.createElement(
22
+ MobileWalletProviderContext.Provider,
23
+ {
24
+ value: useMemo(
25
+ () => ({
26
+ chain,
27
+ connection,
28
+ identity
29
+ }),
30
+ [connection, identity, chain]
31
+ )
32
+ },
33
+ children
34
+ );
28
35
  }
29
36
  function getPublicKeyFromAddress(address) {
30
37
  const publicKeyByteArray = toUint8Array(address);
31
38
  return new PublicKey(publicKeyByteArray);
32
39
  }
40
+
41
+ // src/get-account-from-authorized-account.ts
42
+ function ellipsify(str = "", len = 4, delimiter = "..") {
43
+ const limit = len * 2 + delimiter.length;
44
+ return str.length > limit ? str.slice(0, len) + delimiter + str.slice(-len) : str;
45
+ }
33
46
  function getAccountFromAuthorizedAccount(account) {
34
47
  const publicKey = getPublicKeyFromAddress(account.address);
35
48
  return {
36
49
  address: account.address,
37
- // TODO: Fix upstream?
38
- displayAddress: account.display_address,
39
50
  icon: account.icon,
40
51
  label: account.label ?? ellipsify(publicKey.toString(), 8),
41
52
  publicKey
42
53
  };
43
54
  }
55
+
56
+ // src/get-authorization-from-authorization-result.ts
44
57
  function getAuthorizationFromAuthorizationResult(authorizationResult, previouslySelectedAccount) {
45
58
  let selectedAccount;
46
59
  if (
@@ -59,8 +72,14 @@ function getAuthorizationFromAuthorizationResult(authorizationResult, previously
59
72
  selectedAccount
60
73
  };
61
74
  }
62
- var AUTHORIZATION_STORAGE_KEY = "authorization-cache";
63
- var queryKey = ["wallet-authorization"];
75
+ function useQueryConfig() {
76
+ const storageKey = "authorization-cache";
77
+ const queryClient = useQueryClient();
78
+ const queryKey = ["wallet-authorization"];
79
+ return { queryClient, queryKey, storageKey };
80
+ }
81
+
82
+ // src/use-fetch-authorization.ts
64
83
  function cacheReviver(key, value) {
65
84
  if (key === "publicKey") {
66
85
  return new PublicKey(value);
@@ -68,31 +87,36 @@ function cacheReviver(key, value) {
68
87
  return value;
69
88
  }
70
89
  }
71
- function usePersistAuthorization() {
72
- const queryClient = useQueryClient();
73
- return useMutation({
74
- mutationFn: async (auth) => {
75
- await AsyncStorage.setItem(AUTHORIZATION_STORAGE_KEY, JSON.stringify(auth));
76
- },
77
- onSuccess: async () => {
78
- await queryClient.invalidateQueries({ queryKey });
79
- }
80
- });
81
- }
82
90
  function useFetchAuthorization() {
91
+ const { queryKey, storageKey } = useQueryConfig();
83
92
  return useQuery({
84
93
  queryFn: async () => {
85
- const cacheFetchResult = await AsyncStorage.getItem(AUTHORIZATION_STORAGE_KEY);
94
+ const cacheFetchResult = await AsyncStorage.getItem(storageKey);
86
95
  return cacheFetchResult ? JSON.parse(cacheFetchResult, cacheReviver) : null;
87
96
  },
88
97
  queryKey
89
98
  });
90
99
  }
100
+
101
+ // src/use-invalidate-authorizations.ts
91
102
  function useInvalidateAuthorizations() {
92
- const client = useQueryClient();
93
- return () => client.invalidateQueries({ queryKey });
103
+ const { queryClient, queryKey } = useQueryConfig();
104
+ return () => queryClient.invalidateQueries({ queryKey });
105
+ }
106
+ function usePersistAuthorization() {
107
+ const { queryClient, queryKey, storageKey } = useQueryConfig();
108
+ return useMutation({
109
+ mutationFn: async (auth) => {
110
+ await AsyncStorage.setItem(storageKey, JSON.stringify(auth));
111
+ },
112
+ onSuccess: async () => {
113
+ await queryClient.invalidateQueries({ queryKey });
114
+ }
115
+ });
94
116
  }
95
- function useAuthorization({ clusterId, identity }) {
117
+
118
+ // src/use-authorization.ts
119
+ function useAuthorization({ chain, identity }) {
96
120
  const fetchQuery = useFetchAuthorization();
97
121
  const invalidateAuthorizations = useInvalidateAuthorizations();
98
122
  const persistMutation = usePersistAuthorization();
@@ -111,24 +135,24 @@ function useAuthorization({ clusterId, identity }) {
111
135
  async (wallet) => {
112
136
  const authorizationResult = await wallet.authorize({
113
137
  auth_token: fetchQuery.data?.authToken,
114
- chain: clusterId,
138
+ chain,
115
139
  identity
116
140
  });
117
141
  return (await handleAuthorizationResult(authorizationResult)).selectedAccount;
118
142
  },
119
- [fetchQuery.data?.authToken, clusterId, identity, handleAuthorizationResult]
143
+ [fetchQuery.data?.authToken, chain, identity, handleAuthorizationResult]
120
144
  );
121
145
  const authorizeSessionWithSignIn = useCallback(
122
146
  async (wallet, signInPayload) => {
123
147
  const authorizationResult = await wallet.authorize({
124
148
  auth_token: fetchQuery.data?.authToken,
125
- chain: clusterId,
149
+ chain,
126
150
  identity,
127
151
  sign_in_payload: signInPayload
128
152
  });
129
153
  return (await handleAuthorizationResult(authorizationResult)).selectedAccount;
130
154
  },
131
- [fetchQuery.data?.authToken, clusterId, identity, handleAuthorizationResult]
155
+ [fetchQuery.data?.authToken, chain, identity, handleAuthorizationResult]
132
156
  );
133
157
  const deauthorizeSession = useCallback(
134
158
  async (wallet) => {
@@ -165,11 +189,9 @@ function useAuthorization({ clusterId, identity }) {
165
189
  ]
166
190
  );
167
191
  }
168
- function useMobileWallet({ clusterId, identity }) {
169
- const { authorizeSessionWithSignIn, authorizeSession, deauthorizeSessions } = useAuthorization({
170
- clusterId,
171
- identity
172
- });
192
+ function useMobileWallet() {
193
+ const ctx = useContext(MobileWalletProviderContext);
194
+ const { authorizeSessionWithSignIn, authorizeSession, deauthorizeSessions, selectedAccount, ...authorization } = useAuthorization(ctx);
173
195
  const connect = useCallback(
174
196
  async () => await transact(async (wallet) => await authorizeSession(wallet)),
175
197
  [authorizeSession]
@@ -184,37 +206,34 @@ function useMobileWallet({ clusterId, identity }) {
184
206
  async (signInPayload) => await transact(async (wallet) => await authorizeSessionWithSignIn(wallet, signInPayload)),
185
207
  [authorizeSessionWithSignIn]
186
208
  );
187
- const disconnect = useCallback(async () => {
188
- await deauthorizeSessions();
189
- }, [deauthorizeSessions]);
209
+ const disconnect = useCallback(async () => await deauthorizeSessions(), [deauthorizeSessions]);
190
210
  const signAndSendTransaction = useCallback(
191
- async (transaction, minContextSlot) => {
192
- return await transact(async (wallet) => {
193
- await authorizeSession(wallet);
194
- const signatures = await wallet.signAndSendTransactions({
195
- minContextSlot,
196
- transactions: [transaction]
197
- });
198
- return signatures[0];
211
+ async (transaction, minContextSlot) => await transact(async (wallet) => {
212
+ await authorizeSession(wallet);
213
+ const signatures = await wallet.signAndSendTransactions({
214
+ minContextSlot,
215
+ transactions: [transaction]
199
216
  });
200
- },
217
+ return signatures[0];
218
+ }),
201
219
  [authorizeSession]
202
220
  );
203
221
  const signMessage = useCallback(
204
- async (message) => {
205
- return await transact(async (wallet) => {
206
- const authResult = await authorizeSession(wallet);
207
- const signedMessages = await wallet.signMessages({
208
- addresses: [authResult.address],
209
- payloads: [message]
210
- });
211
- return signedMessages[0];
222
+ async (message) => await transact(async (wallet) => {
223
+ const authResult = await authorizeSession(wallet);
224
+ const signedMessages = await wallet.signMessages({
225
+ addresses: [authResult.address],
226
+ payloads: [message]
212
227
  });
213
- },
228
+ return signedMessages[0];
229
+ }),
214
230
  [authorizeSession]
215
231
  );
216
232
  return useMemo(
217
233
  () => ({
234
+ ...ctx,
235
+ ...authorization,
236
+ account: selectedAccount,
218
237
  connect,
219
238
  connectAnd,
220
239
  disconnect,
@@ -222,25 +241,20 @@ function useMobileWallet({ clusterId, identity }) {
222
241
  signIn,
223
242
  signMessage
224
243
  }),
225
- [connect, connectAnd, disconnect, signAndSendTransaction, signIn, signMessage]
244
+ [
245
+ authorization,
246
+ connect,
247
+ connectAnd,
248
+ ctx,
249
+ disconnect,
250
+ selectedAccount,
251
+ signAndSendTransaction,
252
+ signIn,
253
+ signMessage
254
+ ]
226
255
  );
227
256
  }
228
- function useMobileWalletAdapter() {
229
- const ctx = useContext(MobileWalletAdapterProviderContext);
230
- const { connect, connectAnd, signAndSendTransaction, signMessage, signIn } = useMobileWallet(ctx);
231
- const { selectedAccount, deauthorizeSessions } = useAuthorization(ctx);
232
- return {
233
- ...ctx,
234
- account: selectedAccount,
235
- connect,
236
- connectAnd,
237
- disconnect: deauthorizeSessions,
238
- signAndSendTransaction,
239
- signIn,
240
- signMessage
241
- };
242
- }
243
257
 
244
- export { MobileWalletAdapterProvider, MobileWalletAdapterProviderContext, useAuthorization, useMobileWallet, useMobileWalletAdapter };
258
+ export { MobileWalletProvider, MobileWalletProviderContext, useAuthorization, useMobileWallet };
245
259
  //# sourceMappingURL=index.native.mjs.map
246
260
  //# sourceMappingURL=index.native.mjs.map