accounts 0.5.6 → 0.5.8

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.
@@ -0,0 +1,314 @@
1
+ import { Address as core_Address, Base64, Hex, P256, Provider as core_Provider, PublicKey, RpcResponse, } from 'ox';
2
+ import { KeyAuthorization } from 'ox/tempo';
3
+ import { prepareTransactionRequest } from 'viem/actions';
4
+ import { Account as TempoAccount, Secp256k1 } from 'viem/tempo';
5
+ import * as AccessKey from '../core/AccessKey.js';
6
+ import * as Adapter from '../core/Adapter.js';
7
+ /**
8
+ * Creates a React Native adapter that authorizes access keys via the system browser.
9
+ *
10
+ * Authentication opens a browser session and completes via a redirect callback
11
+ * that returns the signed key authorization.
12
+ */
13
+ export function reactNative(options) {
14
+ const { name = 'Tempo Mobile', rdns = 'xyz.tempo.mobile' } = options;
15
+ return Adapter.define({ name, rdns }, ({ getAccount, getClient, store }) => {
16
+ async function loadManagedKey(address, parameters = {}) {
17
+ const { keyType } = parameters;
18
+ const { secureStorage } = options;
19
+ if (!secureStorage)
20
+ return undefined;
21
+ const { chainId } = store.getState();
22
+ const storageKey = managedKeyStorageKey(address, chainId, keyType);
23
+ const entry = await secureStorage.getItem(storageKey);
24
+ if (!entry)
25
+ return undefined;
26
+ const deserialized = KeyAuthorization.deserialize(entry.keyAuthorization);
27
+ if (!deserialized.signature)
28
+ throw new Error('Managed access key is missing a signature.');
29
+ const keyAuthorization = deserialized;
30
+ AccessKey.save({
31
+ address,
32
+ keyAuthorization,
33
+ privateKey: entry.key,
34
+ store,
35
+ });
36
+ return entry;
37
+ }
38
+ async function resolveManagedKey(resolveOptions = {}) {
39
+ const { address, keyType } = resolveOptions;
40
+ const requestedKeyType = keyType === 'p256' || keyType === 'secp256k1' ? keyType : undefined;
41
+ const entry = address
42
+ ? await loadManagedKey(address, requestedKeyType ? { keyType: requestedKeyType } : {})
43
+ : undefined;
44
+ if (entry) {
45
+ const account = entry.keyType === 'p256'
46
+ ? TempoAccount.fromP256(entry.key, { access: address })
47
+ : TempoAccount.fromSecp256k1(entry.key, { access: address });
48
+ return {
49
+ account,
50
+ key: entry.key,
51
+ keyAddress: entry.keyAddress,
52
+ keyType: entry.keyType,
53
+ publicKey: account.publicKey,
54
+ };
55
+ }
56
+ const nextKeyType = requestedKeyType === 'p256' ? 'p256' : 'secp256k1';
57
+ const key = nextKeyType === 'p256' ? P256.randomPrivateKey() : Secp256k1.randomPrivateKey();
58
+ const account = nextKeyType === 'p256'
59
+ ? TempoAccount.fromP256(key, address ? { access: address } : undefined)
60
+ : TempoAccount.fromSecp256k1(key, address ? { access: address } : undefined);
61
+ return {
62
+ account,
63
+ key,
64
+ keyAddress: core_Address.fromPublicKey(PublicKey.from(account.publicKey)),
65
+ keyType: nextKeyType,
66
+ publicKey: account.publicKey,
67
+ };
68
+ }
69
+ async function saveManagedKey(address, managedKey, keyAuthorization) {
70
+ if (!managedKey)
71
+ return;
72
+ AccessKey.save({
73
+ address,
74
+ keyAuthorization,
75
+ privateKey: managedKey.key,
76
+ store,
77
+ });
78
+ const { secureStorage } = options;
79
+ if (!secureStorage)
80
+ return;
81
+ const { chainId } = store.getState();
82
+ const storageKey = managedKeyStorageKey(address, chainId, managedKey.keyType);
83
+ const entry = {
84
+ chainId,
85
+ expiry: keyAuthorization.expiry ?? 0,
86
+ key: managedKey.key,
87
+ keyAddress: managedKey.keyAddress,
88
+ keyAuthorization: KeyAuthorization.serialize(keyAuthorization),
89
+ keyType: managedKey.keyType,
90
+ walletAddress: address,
91
+ };
92
+ await secureStorage.setItem(storageKey, entry);
93
+ }
94
+ async function withManagedAccessKey(fn) {
95
+ const rootAddress = store.getState().accounts[store.getState().activeAccount]?.address;
96
+ if (rootAddress)
97
+ await loadManagedKey(rootAddress);
98
+ const account = getAccount({ signable: true });
99
+ const keyAuthorization = AccessKey.getPending(account, { store });
100
+ try {
101
+ const result = await fn(account, keyAuthorization ?? undefined);
102
+ AccessKey.removePending(account, { store });
103
+ return result;
104
+ }
105
+ catch (error) {
106
+ AccessKey.remove(account, { store });
107
+ throw error;
108
+ }
109
+ }
110
+ async function authorize(request) {
111
+ const { host, redirectUri, open = defaultOpen } = options;
112
+ const { account, authorizeAccessKey, method } = request;
113
+ const managedKey = authorizeAccessKey && !authorizeAccessKey.publicKey && !authorizeAccessKey.address
114
+ ? await resolveManagedKey({
115
+ ...(account ? { address: account } : {}),
116
+ ...(authorizeAccessKey.keyType ? { keyType: authorizeAccessKey.keyType } : {}),
117
+ })
118
+ : undefined;
119
+ const publicKey = authorizeAccessKey?.publicKey ?? managedKey?.publicKey;
120
+ const keyType = authorizeAccessKey?.keyType ?? managedKey?.keyType;
121
+ if (!publicKey)
122
+ throw new RpcResponse.InvalidParamsError({
123
+ message: method === 'wallet_connect'
124
+ ? '`wallet_connect` on the React Native adapter requires `capabilities.authorizeAccessKey`.'
125
+ : '`wallet_authorizeAccessKey` on the React Native adapter requires key parameters.',
126
+ });
127
+ const state = Base64.fromBytes(Hex.toBytes(Hex.random(16)), { pad: false, url: true });
128
+ const authUrl = buildAuthUrl(host, {
129
+ callback: redirectUri,
130
+ chainId: store.getState().chainId,
131
+ ...(typeof authorizeAccessKey?.expiry !== 'undefined'
132
+ ? { expiry: authorizeAccessKey.expiry }
133
+ : {}),
134
+ ...(keyType ? { keyType } : {}),
135
+ ...(authorizeAccessKey?.limits
136
+ ? { limits: authorizeAccessKey.limits.map((l) => ({ ...l, limit: String(l.limit) })) }
137
+ : {}),
138
+ pubKey: publicKey,
139
+ state,
140
+ });
141
+ const callbackUrl = await open(authUrl, redirectUri);
142
+ if (!callbackUrl)
143
+ throw new AuthCancelledError();
144
+ const params = new URL(callbackUrl).searchParams;
145
+ const returnedState = params.get('state');
146
+ if (returnedState !== state)
147
+ throw new StateMismatchError();
148
+ const accountAddress = params.get('accountAddress');
149
+ if (!accountAddress)
150
+ throw new Error('Missing accountAddress in callback.');
151
+ const keyAuthorizationHex = params.get('keyAuthorization');
152
+ if (!keyAuthorizationHex)
153
+ throw new Error('Missing keyAuthorization in callback.');
154
+ const keyAuthorization = KeyAuthorization.deserialize(keyAuthorizationHex);
155
+ if (!keyAuthorization.signature)
156
+ throw new Error('Key authorization in callback is missing a signature.');
157
+ const signed = keyAuthorization;
158
+ if (managedKey)
159
+ await saveManagedKey(accountAddress, managedKey, signed);
160
+ return {
161
+ accountAddress: accountAddress,
162
+ keyAuthorization: signed,
163
+ };
164
+ }
165
+ return {
166
+ actions: {
167
+ async authorizeAccessKey(parameters) {
168
+ const { accounts, activeAccount } = store.getState();
169
+ const account = accounts[activeAccount]?.address;
170
+ const result = await authorize({
171
+ ...(account ? { account } : {}),
172
+ authorizeAccessKey: parameters,
173
+ method: 'wallet_authorizeAccessKey',
174
+ });
175
+ if (!account)
176
+ store.setState({
177
+ accounts: [{ address: result.accountAddress }],
178
+ activeAccount: 0,
179
+ });
180
+ return {
181
+ keyAuthorization: KeyAuthorization.toRpc(result.keyAuthorization),
182
+ rootAddress: result.accountAddress,
183
+ };
184
+ },
185
+ async createAccount(params, request) {
186
+ return this.loadAccounts(params, request);
187
+ },
188
+ async loadAccounts(parameters) {
189
+ if (parameters?.digest)
190
+ throw unsupported('`wallet_connect` digest signing not supported by React Native adapter.');
191
+ const result = await authorize({
192
+ authorizeAccessKey: parameters?.authorizeAccessKey,
193
+ method: 'wallet_connect',
194
+ });
195
+ return {
196
+ accounts: [
197
+ {
198
+ address: result.accountAddress,
199
+ capabilities: {},
200
+ },
201
+ ],
202
+ keyAuthorization: KeyAuthorization.toRpc(result.keyAuthorization),
203
+ };
204
+ },
205
+ async revokeAccessKey() {
206
+ throw unsupported('`wallet_revokeAccessKey` not supported by React Native adapter.');
207
+ },
208
+ async sendTransaction(parameters) {
209
+ const { feePayer, ...rest } = parameters;
210
+ const client = getClient(typeof feePayer === 'string' ? { feePayer } : {});
211
+ const { account, prepared } = await withManagedAccessKey(async (account, keyAuthorization) => ({
212
+ account,
213
+ prepared: await prepareTransactionRequest(client, {
214
+ account,
215
+ ...rest,
216
+ ...(feePayer ? { feePayer: true } : {}),
217
+ ...(keyAuthorization ? { keyAuthorization } : {}),
218
+ type: 'tempo',
219
+ }),
220
+ }));
221
+ const signed = await account.signTransaction(prepared);
222
+ return await client.request({
223
+ method: 'eth_sendRawTransaction',
224
+ params: [signed],
225
+ });
226
+ },
227
+ async sendTransactionSync(parameters) {
228
+ const { feePayer, ...rest } = parameters;
229
+ const client = getClient(typeof feePayer === 'string' ? { feePayer } : {});
230
+ const { account, prepared } = await withManagedAccessKey(async (account, keyAuthorization) => ({
231
+ account,
232
+ prepared: await prepareTransactionRequest(client, {
233
+ account,
234
+ ...rest,
235
+ ...(feePayer ? { feePayer: true } : {}),
236
+ ...(keyAuthorization ? { keyAuthorization } : {}),
237
+ type: 'tempo',
238
+ }),
239
+ }));
240
+ const signed = await account.signTransaction(prepared);
241
+ return await client.request({
242
+ method: 'eth_sendRawTransactionSync',
243
+ params: [signed],
244
+ });
245
+ },
246
+ async signPersonalMessage({ address, data }) {
247
+ await loadManagedKey(address);
248
+ const account = getAccount({ address, signable: true });
249
+ return await account.signMessage({ message: { raw: data } });
250
+ },
251
+ async signTransaction(parameters) {
252
+ const { feePayer, ...rest } = parameters;
253
+ const client = getClient(typeof feePayer === 'string' ? { feePayer } : {});
254
+ const { account, prepared } = await withManagedAccessKey(async (account, keyAuthorization) => ({
255
+ account,
256
+ prepared: await prepareTransactionRequest(client, {
257
+ account,
258
+ ...rest,
259
+ ...(feePayer ? { feePayer: true } : {}),
260
+ ...(keyAuthorization ? { keyAuthorization } : {}),
261
+ type: 'tempo',
262
+ }),
263
+ }));
264
+ return await account.signTransaction(prepared);
265
+ },
266
+ async signTypedData({ address, data }) {
267
+ await loadManagedKey(address);
268
+ const account = getAccount({ address, signable: true });
269
+ return await account.signTypedData(JSON.parse(data));
270
+ },
271
+ },
272
+ };
273
+ });
274
+ }
275
+ class AuthCancelledError extends Error {
276
+ constructor() {
277
+ super('Authentication was cancelled by the user.');
278
+ this.name = 'AuthCancelledError';
279
+ }
280
+ }
281
+ class StateMismatchError extends Error {
282
+ constructor() {
283
+ super('State parameter mismatch — possible CSRF attack.');
284
+ this.name = 'StateMismatchError';
285
+ }
286
+ }
287
+ async function defaultOpen(url, redirectUri) {
288
+ const { openAuthSessionAsync } = await import('expo-web-browser');
289
+ const result = await openAuthSessionAsync(url, redirectUri);
290
+ if (result.type !== 'success')
291
+ return null;
292
+ return result.url;
293
+ }
294
+ function buildAuthUrl(host, params) {
295
+ const url = new URL('/mobile-auth', host);
296
+ url.searchParams.set('pubKey', params.pubKey);
297
+ if (params.keyType)
298
+ url.searchParams.set('keyType', params.keyType);
299
+ url.searchParams.set('chainId', String(params.chainId));
300
+ if (typeof params.expiry !== 'undefined')
301
+ url.searchParams.set('expiry', String(params.expiry));
302
+ if (params.limits)
303
+ url.searchParams.set('limits', JSON.stringify(params.limits));
304
+ url.searchParams.set('callback', params.callback);
305
+ url.searchParams.set('state', params.state);
306
+ return url.toString();
307
+ }
308
+ function managedKeyStorageKey(address, chainId, keyType) {
309
+ return `managedKey.${address.toLowerCase()}.${chainId}${keyType ? `.${keyType}` : ''}`;
310
+ }
311
+ function unsupported(message) {
312
+ return new core_Provider.UnsupportedMethodError({ message });
313
+ }
314
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/react-native/adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * as Provider from './Provider.js';
2
+ export { reactNative } from './adapter.js';
3
+ export { asyncStorage, secureStorage } from './storage.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react-native/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA"}
@@ -0,0 +1,4 @@
1
+ export * as Provider from './Provider.js';
2
+ export { reactNative } from './adapter.js';
3
+ export { asyncStorage, secureStorage } from './storage.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react-native/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA"}
@@ -0,0 +1,12 @@
1
+ import * as Storage from '../core/Storage.js';
2
+ /** Creates a storage adapter backed by `expo-secure-store`. For private key material. */
3
+ export declare function secureStorage(options?: secureStorage.Options): Storage.Storage;
4
+ export declare namespace secureStorage {
5
+ type Options = Storage.from.Options;
6
+ }
7
+ /** Creates a storage adapter backed by `@react-native-async-storage/async-storage`. */
8
+ export declare function asyncStorage(options?: asyncStorage.Options): Storage.Storage;
9
+ export declare namespace asyncStorage {
10
+ type Options = Storage.from.Options;
11
+ }
12
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/react-native/storage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAA;AAE7C,yFAAyF;AACzF,wBAAgB,aAAa,CAAC,OAAO,GAAE,aAAa,CAAC,OAAY,GAAG,OAAO,CAAC,OAAO,CAwBlF;AAED,MAAM,CAAC,OAAO,WAAW,aAAa,CAAC;IACrC,KAAK,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAA;CACpC;AAED,uFAAuF;AACvF,wBAAgB,YAAY,CAAC,OAAO,GAAE,YAAY,CAAC,OAAY,GAAG,OAAO,CAAC,OAAO,CAwBhF;AAED,MAAM,CAAC,OAAO,WAAW,YAAY,CAAC;IACpC,KAAK,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAA;CACpC"}
@@ -0,0 +1,53 @@
1
+ import { Json } from 'ox';
2
+ import * as Storage from '../core/Storage.js';
3
+ /** Creates a storage adapter backed by `expo-secure-store`. For private key material. */
4
+ export function secureStorage(options = {}) {
5
+ return Storage.from({
6
+ async getItem(name) {
7
+ const { getItemAsync } = await import('expo-secure-store');
8
+ const raw = await getItemAsync(name);
9
+ if (raw === null)
10
+ return null;
11
+ try {
12
+ return Json.parse(raw);
13
+ }
14
+ catch {
15
+ return null;
16
+ }
17
+ },
18
+ async setItem(name, value) {
19
+ const { setItemAsync } = await import('expo-secure-store');
20
+ await setItemAsync(name, Json.stringify(value));
21
+ },
22
+ async removeItem(name) {
23
+ const { deleteItemAsync } = await import('expo-secure-store');
24
+ await deleteItemAsync(name);
25
+ },
26
+ }, options);
27
+ }
28
+ /** Creates a storage adapter backed by `@react-native-async-storage/async-storage`. */
29
+ export function asyncStorage(options = {}) {
30
+ return Storage.from({
31
+ async getItem(name) {
32
+ const AsyncStorage = (await import('@react-native-async-storage/async-storage')).default;
33
+ const raw = await AsyncStorage.getItem(name);
34
+ if (raw === null)
35
+ return null;
36
+ try {
37
+ return Json.parse(raw);
38
+ }
39
+ catch {
40
+ return null;
41
+ }
42
+ },
43
+ async setItem(name, value) {
44
+ const AsyncStorage = (await import('@react-native-async-storage/async-storage')).default;
45
+ await AsyncStorage.setItem(name, Json.stringify(value));
46
+ },
47
+ async removeItem(name) {
48
+ const AsyncStorage = (await import('@react-native-async-storage/async-storage')).default;
49
+ await AsyncStorage.removeItem(name);
50
+ },
51
+ }, options);
52
+ }
53
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/react-native/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAA;AAEzB,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAA;AAE7C,yFAAyF;AACzF,MAAM,UAAU,aAAa,CAAC,UAAiC,EAAE;IAC/D,OAAO,OAAO,CAAC,IAAI,CACjB;QACE,KAAK,CAAC,OAAO,CAAC,IAAI;YAChB,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAA;YAC1D,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,CAAA;YACpC,IAAI,GAAG,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,CAAC;gBACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YACxB,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAA;YACb,CAAC;QACH,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK;YACvB,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAA;YAC1D,MAAM,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;QACjD,CAAC;QACD,KAAK,CAAC,UAAU,CAAC,IAAI;YACnB,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAA;YAC7D,MAAM,eAAe,CAAC,IAAI,CAAC,CAAA;QAC7B,CAAC;KACF,EACD,OAAO,CACR,CAAA;AACH,CAAC;AAMD,uFAAuF;AACvF,MAAM,UAAU,YAAY,CAAC,UAAgC,EAAE;IAC7D,OAAO,OAAO,CAAC,IAAI,CACjB;QACE,KAAK,CAAC,OAAO,CAAC,IAAI;YAChB,MAAM,YAAY,GAAG,CAAC,MAAM,MAAM,CAAC,2CAA2C,CAAC,CAAC,CAAC,OAAO,CAAA;YACxF,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YAC5C,IAAI,GAAG,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,CAAC;gBACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YACxB,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAA;YACb,CAAC;QACH,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK;YACvB,MAAM,YAAY,GAAG,CAAC,MAAM,MAAM,CAAC,2CAA2C,CAAC,CAAC,CAAC,OAAO,CAAA;YACxF,MAAM,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;QACzD,CAAC;QACD,KAAK,CAAC,UAAU,CAAC,IAAI;YACnB,MAAM,YAAY,GAAG,CAAC,MAAM,MAAM,CAAC,2CAA2C,CAAC,CAAC,CAAC,OAAO,CAAA;YACxF,MAAM,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;QACrC,CAAC;KACF,EACD,OAAO,CACR,CAAA;AACH,CAAC"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "accounts",
3
3
  "description": "Tempo Accounts SDK",
4
4
  "type": "module",
5
- "version": "0.5.6",
5
+ "version": "0.5.8",
6
6
  "dependencies": {
7
7
  "hono": "^4.12.12",
8
8
  "idb-keyval": "^6.2.2",
@@ -14,7 +14,10 @@
14
14
  "zustand": "^5.0.11"
15
15
  },
16
16
  "peerDependencies": {
17
+ "@react-native-async-storage/async-storage": "^3.0.2",
17
18
  "@wagmi/core": ">=2",
19
+ "expo-secure-store": "^55.0.12",
20
+ "expo-web-browser": "^55.0.13",
18
21
  "react": ">=18",
19
22
  "viem": ">=2.43.3"
20
23
  },
@@ -27,6 +30,15 @@
27
30
  },
28
31
  "viem": {
29
32
  "optional": true
33
+ },
34
+ "expo-web-browser": {
35
+ "optional": true
36
+ },
37
+ "expo-secure-store": {
38
+ "optional": true
39
+ },
40
+ "@react-native-async-storage/async-storage": {
41
+ "optional": true
30
42
  }
31
43
  },
32
44
  "repository": {
@@ -46,6 +58,7 @@
46
58
  ".": {
47
59
  "types": "./dist/index.d.ts",
48
60
  "src": "./src/index.ts",
61
+ "react-native": "./dist/index.js",
49
62
  "default": "./dist/index.js"
50
63
  },
51
64
  "./server": {
@@ -67,6 +80,12 @@
67
80
  "types": "./dist/wagmi/index.d.ts",
68
81
  "src": "./src/wagmi/index.ts",
69
82
  "default": "./dist/wagmi/index.js"
83
+ },
84
+ "./react-native": {
85
+ "types": "./dist/react-native/index.d.ts",
86
+ "src": "./src/react-native/index.ts",
87
+ "react-native": "./dist/react-native/index.js",
88
+ "default": "./dist/react-native/index.js"
70
89
  }
71
90
  }
72
91
  }
@@ -75,7 +75,19 @@ export function iframe(): Dialog {
75
75
 
76
76
  // Reuse existing iframe if the host matches — just swap the store/fallback refs.
77
77
  if (cached && cached.host === host) {
78
+ const oldStore = store
78
79
  store = parameters.store
80
+
81
+ // Migrate in-flight requests so responses land in the current store.
82
+ if (oldStore && oldStore !== store) {
83
+ const pending = oldStore.getState().requestQueue.filter((q) => q.status === 'pending')
84
+ if (pending.length > 0)
85
+ store.setState((x) => ({
86
+ ...x,
87
+ requestQueue: [...x.requestQueue, ...pending],
88
+ }))
89
+ }
90
+
79
91
  fallback?.destroy()
80
92
  fallback = popup()(parameters)
81
93
  return cached.instance
@@ -208,6 +208,7 @@ export function create(options: create.Options = {}): create.ReturnType {
208
208
  return (await actions.sendTransaction(
209
209
  {
210
210
  ...rest,
211
+ chainId: decoded.chainId ?? store.getState().chainId,
211
212
  ...(calls ? { calls } : {}),
212
213
  feePayer: resolveFeePayer(decoded.feePayer),
213
214
  },
@@ -285,6 +286,7 @@ export function create(options: create.Options = {}): create.ReturnType {
285
286
  return (await actions.signTransaction(
286
287
  {
287
288
  ...rest,
289
+ chainId: decoded.chainId ?? store.getState().chainId,
288
290
  ...(calls ? { calls } : {}),
289
291
  feePayer: resolveFeePayer(decoded.feePayer),
290
292
  },
@@ -301,6 +303,7 @@ export function create(options: create.Options = {}): create.ReturnType {
301
303
  return (await actions.sendTransactionSync(
302
304
  {
303
305
  ...rest,
306
+ chainId: decoded.chainId ?? store.getState().chainId,
304
307
  ...(calls ? { calls } : {}),
305
308
  feePayer: resolveFeePayer(decoded.feePayer),
306
309
  },
@@ -604,7 +607,7 @@ export function create(options: create.Options = {}): create.ReturnType {
604
607
  },
605
608
  )
606
609
 
607
- if (typeof window !== 'undefined') {
610
+ if (typeof window !== 'undefined' && typeof CustomEvent !== 'undefined') {
608
611
  const rdns =
609
612
  adapter.rdns ?? `com.${(adapter.name ?? 'Injected Wallet').toLowerCase().replace(/\s+/g, '')}`
610
613
 
@@ -0,0 +1,28 @@
1
+ import * as CoreProvider from '../core/Provider.js'
2
+ import { reactNative } from './adapter.js'
3
+
4
+ /** Creates a provider for React Native apps using system browser authentication. */
5
+ export function create(options: create.Options): create.ReturnType {
6
+ const { host = 'https://wallet.tempo.xyz', redirectUri, open, secureStorage, ...rest } = options
7
+
8
+ return CoreProvider.create({
9
+ ...rest,
10
+ adapter: reactNative({
11
+ host,
12
+ redirectUri,
13
+ ...(open ? { open } : {}),
14
+ ...(secureStorage ? { secureStorage } : {}),
15
+ }),
16
+ })
17
+ }
18
+
19
+ export declare namespace create {
20
+ export type Options = Omit<
21
+ CoreProvider.create.Options & reactNative.Options,
22
+ 'adapter' | 'host'
23
+ > & {
24
+ /** Host URL for the mobile auth page. @default "https://wallet.tempo.xyz" */
25
+ host?: string | undefined
26
+ }
27
+ export type ReturnType = CoreProvider.create.ReturnType
28
+ }