accounts 0.3.0 → 0.4.1

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 (168) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/LICENSE +21 -0
  3. package/README.md +97 -0
  4. package/dist/core/AccessKey.d.ts +55 -0
  5. package/dist/core/AccessKey.d.ts.map +1 -0
  6. package/dist/core/AccessKey.js +69 -0
  7. package/dist/core/AccessKey.js.map +1 -0
  8. package/dist/core/Account.d.ts +91 -0
  9. package/dist/core/Account.d.ts.map +1 -0
  10. package/dist/core/Account.js +64 -0
  11. package/dist/core/Account.js.map +1 -0
  12. package/dist/core/Adapter.d.ts +187 -0
  13. package/dist/core/Adapter.d.ts.map +1 -0
  14. package/dist/core/Adapter.js +7 -0
  15. package/dist/core/Adapter.js.map +1 -0
  16. package/dist/core/Ceremony.d.ts +109 -0
  17. package/dist/core/Ceremony.d.ts.map +1 -0
  18. package/dist/core/Ceremony.js +104 -0
  19. package/dist/core/Ceremony.js.map +1 -0
  20. package/dist/core/Client.d.ts +16 -0
  21. package/dist/core/Client.d.ts.map +1 -0
  22. package/dist/core/Client.js +18 -0
  23. package/dist/core/Client.js.map +1 -0
  24. package/dist/core/Dialog.d.ts +52 -0
  25. package/dist/core/Dialog.d.ts.map +1 -0
  26. package/dist/core/Dialog.js +342 -0
  27. package/dist/core/Dialog.js.map +1 -0
  28. package/dist/core/Expiry.d.ts +15 -0
  29. package/dist/core/Expiry.d.ts.map +1 -0
  30. package/dist/core/Expiry.js +29 -0
  31. package/dist/core/Expiry.js.map +1 -0
  32. package/dist/core/Messenger.d.ts +86 -0
  33. package/dist/core/Messenger.d.ts.map +1 -0
  34. package/dist/core/Messenger.js +127 -0
  35. package/dist/core/Messenger.js.map +1 -0
  36. package/dist/core/Provider.d.ts +69 -0
  37. package/dist/core/Provider.d.ts.map +1 -0
  38. package/dist/core/Provider.js +401 -0
  39. package/dist/core/Provider.js.map +1 -0
  40. package/dist/core/Remote.d.ts +114 -0
  41. package/dist/core/Remote.d.ts.map +1 -0
  42. package/dist/core/Remote.js +116 -0
  43. package/dist/core/Remote.js.map +1 -0
  44. package/dist/core/Schema.d.ts +805 -0
  45. package/dist/core/Schema.d.ts.map +1 -0
  46. package/dist/core/Schema.js +43 -0
  47. package/dist/core/Schema.js.map +1 -0
  48. package/dist/core/Storage.d.ts +42 -0
  49. package/dist/core/Storage.d.ts.map +1 -0
  50. package/dist/core/Storage.js +173 -0
  51. package/dist/core/Storage.js.map +1 -0
  52. package/dist/core/Store.d.ts +58 -0
  53. package/dist/core/Store.d.ts.map +1 -0
  54. package/dist/core/Store.js +58 -0
  55. package/dist/core/Store.js.map +1 -0
  56. package/dist/core/adapters/dangerous_secp256k1.d.ts +30 -0
  57. package/dist/core/adapters/dangerous_secp256k1.d.ts.map +1 -0
  58. package/dist/core/adapters/dangerous_secp256k1.js +39 -0
  59. package/dist/core/adapters/dangerous_secp256k1.js.map +1 -0
  60. package/dist/core/adapters/dialog.d.ts +31 -0
  61. package/dist/core/adapters/dialog.d.ts.map +1 -0
  62. package/dist/core/adapters/dialog.js +306 -0
  63. package/dist/core/adapters/dialog.js.map +1 -0
  64. package/dist/core/adapters/local.d.ts +33 -0
  65. package/dist/core/adapters/local.d.ts.map +1 -0
  66. package/dist/core/adapters/local.js +227 -0
  67. package/dist/core/adapters/local.js.map +1 -0
  68. package/dist/core/adapters/webAuthn.d.ts +36 -0
  69. package/dist/core/adapters/webAuthn.d.ts.map +1 -0
  70. package/dist/core/adapters/webAuthn.js +93 -0
  71. package/dist/core/adapters/webAuthn.js.map +1 -0
  72. package/dist/core/internal/withDedupe.d.ts +12 -0
  73. package/dist/core/internal/withDedupe.d.ts.map +1 -0
  74. package/dist/core/internal/withDedupe.js +12 -0
  75. package/dist/core/internal/withDedupe.js.map +1 -0
  76. package/dist/core/zod/request.d.ts +31 -0
  77. package/dist/core/zod/request.d.ts.map +1 -0
  78. package/dist/core/zod/request.js +41 -0
  79. package/dist/core/zod/request.js.map +1 -0
  80. package/dist/core/zod/rpc.d.ts +603 -0
  81. package/dist/core/zod/rpc.d.ts.map +1 -0
  82. package/dist/core/zod/rpc.js +293 -0
  83. package/dist/core/zod/rpc.js.map +1 -0
  84. package/dist/core/zod/utils.d.ts +18 -0
  85. package/dist/core/zod/utils.d.ts.map +1 -0
  86. package/dist/core/zod/utils.js +21 -0
  87. package/dist/core/zod/utils.js.map +1 -0
  88. package/dist/index.d.ts +15 -0
  89. package/dist/index.d.ts.map +1 -0
  90. package/dist/index.js +15 -0
  91. package/dist/index.js.map +1 -0
  92. package/dist/internal/types.d.ts +284 -0
  93. package/dist/internal/types.d.ts.map +1 -0
  94. package/dist/internal/types.js +2 -0
  95. package/dist/internal/types.js.map +1 -0
  96. package/dist/server/Handler.d.ts +257 -0
  97. package/dist/server/Handler.d.ts.map +1 -0
  98. package/dist/server/Handler.js +433 -0
  99. package/dist/server/Handler.js.map +1 -0
  100. package/dist/server/Kv.d.ts +16 -0
  101. package/dist/server/Kv.d.ts.map +1 -0
  102. package/dist/server/Kv.js +30 -0
  103. package/dist/server/Kv.js.map +1 -0
  104. package/dist/server/index.d.ts +3 -0
  105. package/dist/server/index.d.ts.map +1 -0
  106. package/dist/server/index.js +3 -0
  107. package/dist/server/index.js.map +1 -0
  108. package/dist/server/internal/requestListener.d.ts +124 -0
  109. package/dist/server/internal/requestListener.d.ts.map +1 -0
  110. package/dist/server/internal/requestListener.js +173 -0
  111. package/dist/server/internal/requestListener.js.map +1 -0
  112. package/dist/wagmi/Connector.d.ts +93 -0
  113. package/dist/wagmi/Connector.d.ts.map +1 -0
  114. package/dist/wagmi/Connector.js +238 -0
  115. package/dist/wagmi/Connector.js.map +1 -0
  116. package/dist/wagmi/index.d.ts +3 -0
  117. package/dist/wagmi/index.d.ts.map +1 -0
  118. package/dist/wagmi/index.js +3 -0
  119. package/dist/wagmi/index.js.map +1 -0
  120. package/package.json +56 -2
  121. package/src/core/AccessKey.test.ts +257 -0
  122. package/src/core/AccessKey.ts +123 -0
  123. package/src/core/Account.test.ts +309 -0
  124. package/src/core/Account.ts +152 -0
  125. package/src/core/Adapter.ts +238 -0
  126. package/src/core/Ceremony.browser.test.ts +239 -0
  127. package/src/core/Ceremony.test.ts +151 -0
  128. package/src/core/Ceremony.ts +203 -0
  129. package/src/core/Client.ts +36 -0
  130. package/src/core/Dialog.browser.test.ts +309 -0
  131. package/src/core/Dialog.test-d.ts +19 -0
  132. package/src/core/Dialog.ts +442 -0
  133. package/src/core/Expiry.ts +34 -0
  134. package/src/core/Messenger.ts +206 -0
  135. package/src/core/Provider.browser.test.ts +774 -0
  136. package/src/core/Provider.connect.browser.test.ts +415 -0
  137. package/src/core/Provider.test-d.ts +53 -0
  138. package/src/core/Provider.test.ts +1566 -0
  139. package/src/core/Provider.ts +559 -0
  140. package/src/core/Remote.ts +262 -0
  141. package/src/core/Schema.test-d.ts +211 -0
  142. package/src/core/Schema.ts +143 -0
  143. package/src/core/Storage.ts +213 -0
  144. package/src/core/Store.test.ts +287 -0
  145. package/src/core/Store.ts +129 -0
  146. package/src/core/adapters/dangerous_secp256k1.ts +53 -0
  147. package/src/core/adapters/dialog.ts +379 -0
  148. package/src/core/adapters/local.test.ts +97 -0
  149. package/src/core/adapters/local.ts +277 -0
  150. package/src/core/adapters/webAuthn.ts +129 -0
  151. package/src/core/internal/withDedupe.test.ts +116 -0
  152. package/src/core/internal/withDedupe.ts +20 -0
  153. package/src/core/mppx.test.ts +83 -0
  154. package/src/core/zod/request.test.ts +121 -0
  155. package/src/core/zod/request.ts +70 -0
  156. package/src/core/zod/rpc.ts +374 -0
  157. package/src/core/zod/utils.test.ts +69 -0
  158. package/src/core/zod/utils.ts +40 -0
  159. package/src/index.ts +14 -0
  160. package/src/internal/types.ts +378 -0
  161. package/src/server/Handler.test.ts +1014 -0
  162. package/src/server/Handler.ts +605 -0
  163. package/src/server/Kv.ts +46 -0
  164. package/src/server/index.ts +2 -0
  165. package/src/server/internal/requestListener.ts +273 -0
  166. package/src/tsconfig.json +9 -0
  167. package/src/wagmi/Connector.ts +287 -0
  168. package/src/wagmi/index.ts +2 -0
@@ -0,0 +1,401 @@
1
+ import { announceProvider } from 'mipd';
2
+ import { Mppx, tempo as mppx_tempo } from 'mppx/client';
3
+ import { Hash, Hex, Json, Provider as ox_Provider, RpcResponse } from 'ox';
4
+ import { tempo, tempoModerato } from 'viem/chains';
5
+ import { Actions } from 'viem/tempo';
6
+ import * as z from 'zod/mini';
7
+ import * as Account from './Account.js';
8
+ import { dialog } from './adapters/dialog.js';
9
+ import * as Client from './Client.js';
10
+ import { withDedupe } from './internal/withDedupe.js';
11
+ import * as Schema from './Schema.js';
12
+ import * as Storage from './Storage.js';
13
+ import * as Store from './Store.js';
14
+ import * as Request from './zod/request.js';
15
+ import * as Rpc from './zod/rpc.js';
16
+ /**
17
+ * Creates an EIP-1193 provider with a pluggable adapter.
18
+ *
19
+ * @example
20
+ * ```ts
21
+ * import { Provider } from 'accounts'
22
+ *
23
+ * const provider = Provider.create()
24
+ * ```
25
+ */
26
+ export function create(options = {}) {
27
+ const { adapter = dialog(), chains = [tempo, tempoModerato], feePayerUrl, persistCredentials, testnet, storage = typeof window !== 'undefined' ? Storage.idb() : Storage.memory(), } = options;
28
+ const defaultChain = testnet
29
+ ? (chains.find((c) => c.testnet) ?? chains[chains.length - 1])
30
+ : chains[0];
31
+ const store = Store.create({
32
+ chainId: defaultChain.id,
33
+ persistCredentials,
34
+ storage,
35
+ });
36
+ const getAccount = (options = {}) => Account.find({ ...options, store });
37
+ function getClient(options = {}) {
38
+ const { chainId, feePayer } = options;
39
+ return Client.fromChainId(chainId, { chains, feePayer, store });
40
+ }
41
+ const instance = adapter({ getAccount, getClient, storage, store });
42
+ const { actions } = instance;
43
+ const emitter = ox_Provider.createEmitter();
44
+ // Emit EIP-1193 events on state changes.
45
+ store.subscribe((state) => state.accounts.map((a) => a.address).join(), () => emitter.emit('accountsChanged', store.getState().accounts.map((a) => a.address)));
46
+ store.subscribe((state) => state.chainId, (chainId) => emitter.emit('chainChanged', Hex.fromNumber(chainId)));
47
+ store.subscribe((state) => state.accounts.length > 0, (connected) => {
48
+ if (connected)
49
+ emitter.emit('connect', { chainId: Hex.fromNumber(store.getState().chainId) });
50
+ else
51
+ emitter.emit('disconnect', new ox_Provider.DisconnectedError());
52
+ });
53
+ /** Throws `DisconnectedError` if no accounts are connected. */
54
+ function assertConnected() {
55
+ if (store.getState().accounts.length === 0)
56
+ throw new ox_Provider.DisconnectedError({ message: 'No accounts connected.' });
57
+ }
58
+ /** Returns accounts to persist. When `persistAccounts` is set, merges new accounts with existing ones. */
59
+ function resolveAccounts(accounts) {
60
+ if (!instance.persistAccounts)
61
+ return accounts;
62
+ const merged = [...accounts];
63
+ for (const a of store.getState().accounts)
64
+ if (!merged.some((m) => m.address.toLowerCase() === a.address.toLowerCase()))
65
+ merged.push(a);
66
+ return merged;
67
+ }
68
+ /** Resolves the `feePayer` field from a transaction request into a URL string or `undefined`. */
69
+ function resolveFeePayer(feePayer) {
70
+ if (typeof feePayer === 'string')
71
+ return feePayer;
72
+ if (feePayer === true)
73
+ return feePayerUrl;
74
+ return undefined;
75
+ }
76
+ const provider = Object.assign(ox_Provider.from({
77
+ ...emitter,
78
+ async request({ method, params }) {
79
+ await Store.waitForHydration(store);
80
+ const shouldDedupe = [
81
+ 'eth_accounts',
82
+ 'eth_chainId',
83
+ 'eth_requestAccounts',
84
+ 'wallet_connect',
85
+ 'wallet_getBalances',
86
+ 'wallet_getCapabilities',
87
+ ].includes(method);
88
+ return withDedupe(async () => {
89
+ // Validate known methods. Unknown methods fall through to the RPC proxy.
90
+ let request;
91
+ try {
92
+ request = Request.validate(Schema.Request, { method, params });
93
+ }
94
+ catch (e) {
95
+ if (!(e instanceof ox_Provider.UnsupportedMethodError))
96
+ throw e;
97
+ // Proxy unknown methods to the RPC node.
98
+ return await Client.fromChainId(undefined, { chains, store }).request({
99
+ method: method,
100
+ params: params,
101
+ });
102
+ }
103
+ const result = await (async () => {
104
+ switch (request.method) {
105
+ case 'eth_accounts': {
106
+ const { accounts, activeAccount } = store.getState();
107
+ if (accounts.length === 0)
108
+ return [];
109
+ const activeAddr = accounts[activeAccount]?.address;
110
+ const activeIdx = accounts.findIndex((a) => a.address === activeAddr);
111
+ const sorted = [...accounts];
112
+ if (activeIdx >= 0) {
113
+ const [active] = sorted.splice(activeIdx, 1);
114
+ return [active.address, ...sorted.map((a) => a.address)];
115
+ }
116
+ return sorted.map((a) => a.address);
117
+ }
118
+ case 'eth_chainId':
119
+ return Hex.fromNumber(store.getState().chainId);
120
+ case 'eth_requestAccounts': {
121
+ const { accounts } = await actions.loadAccounts(undefined, {
122
+ method: 'wallet_connect',
123
+ params: undefined,
124
+ });
125
+ store.setState({ accounts: resolveAccounts(accounts), activeAccount: 0 });
126
+ return accounts.map((a) => a.address);
127
+ }
128
+ case 'eth_sendTransaction': {
129
+ assertConnected();
130
+ const [decoded] = request._decoded.params;
131
+ return (await actions.sendTransaction({
132
+ ...decoded,
133
+ feePayer: resolveFeePayer(decoded.feePayer),
134
+ }, request));
135
+ }
136
+ case 'eth_signTransaction': {
137
+ assertConnected();
138
+ const [decoded] = request._decoded.params;
139
+ return (await actions.signTransaction({
140
+ ...decoded,
141
+ feePayer: resolveFeePayer(decoded.feePayer),
142
+ }, request));
143
+ }
144
+ case 'eth_sendTransactionSync': {
145
+ assertConnected();
146
+ const [decoded] = request._decoded.params;
147
+ return (await actions.sendTransactionSync({
148
+ ...decoded,
149
+ feePayer: resolveFeePayer(decoded.feePayer),
150
+ }, request));
151
+ }
152
+ case 'eth_signTypedData_v4': {
153
+ assertConnected();
154
+ const [address, data] = request._decoded.params;
155
+ return (await actions.signTypedData({
156
+ address,
157
+ data,
158
+ }, request));
159
+ }
160
+ case 'personal_sign': {
161
+ assertConnected();
162
+ const [data, address] = request._decoded.params;
163
+ return (await actions.signPersonalMessage({
164
+ address,
165
+ data,
166
+ }, request));
167
+ }
168
+ case 'wallet_sendCalls': {
169
+ assertConnected();
170
+ const decoded = request._decoded.params?.[0];
171
+ const { calls = [], capabilities, chainId, from } = decoded ?? {};
172
+ const sync = capabilities?.sync;
173
+ const feePayer = resolveFeePayer(feePayerUrl ? true : undefined);
174
+ const txRequest = {
175
+ calls,
176
+ chainId,
177
+ from,
178
+ ...(feePayer ? { feePayer } : {}),
179
+ };
180
+ if (!sync) {
181
+ const hash = await actions.sendTransaction(txRequest, {
182
+ method: 'eth_sendTransaction',
183
+ params: [z.encode(Rpc.transactionRequest, txRequest)],
184
+ });
185
+ const chainId = Hex.fromNumber(store.getState().chainId);
186
+ const id = Hex.concat(hash, Hex.padLeft(chainId, 32), sendCallsMagic);
187
+ return { capabilities: { sync }, id };
188
+ }
189
+ const receipt = await actions.sendTransactionSync(txRequest, {
190
+ method: 'eth_sendTransactionSync',
191
+ params: [z.encode(Rpc.transactionRequest, txRequest)],
192
+ });
193
+ const hash = receipt.transactionHash;
194
+ const chainIdHex = Hex.fromNumber(store.getState().chainId);
195
+ const id = Hex.concat(hash, Hex.padLeft(chainIdHex, 32), sendCallsMagic);
196
+ return {
197
+ atomic: true,
198
+ capabilities: { sync },
199
+ chainId: chainIdHex,
200
+ id,
201
+ receipts: [receipt],
202
+ status: receipt.status === '0x1' ? 200 : 500,
203
+ version: '2.0.0',
204
+ };
205
+ }
206
+ case 'wallet_getBalances': {
207
+ const decoded = request._decoded.params?.[0];
208
+ const { accounts, activeAccount } = store.getState();
209
+ const account = decoded?.account ?? accounts[activeAccount]?.address;
210
+ if (!account)
211
+ throw new ox_Provider.DisconnectedError({
212
+ message: 'No accounts connected.',
213
+ });
214
+ const tokens = decoded?.tokens;
215
+ // TODO: hook up to indexer
216
+ if (!tokens || tokens.length === 0)
217
+ throw new RpcResponse.InvalidParamsError({
218
+ message: '`tokens` is required.',
219
+ });
220
+ const client = Client.fromChainId(decoded?.chainId, { chains, store });
221
+ return (await Promise.all(tokens.map(async (token) => {
222
+ const [balance, metadata] = await Promise.all([
223
+ Actions.token.getBalance(client, { account, token }),
224
+ Actions.token.getMetadata(client, { token }),
225
+ ]);
226
+ const value = Number(balance) / 10 ** metadata.decimals;
227
+ const display = new Intl.NumberFormat('en-US', {
228
+ style: 'currency',
229
+ currency: metadata.currency,
230
+ }).format(value);
231
+ return {
232
+ address: token,
233
+ balance: Hex.fromNumber(balance),
234
+ decimals: metadata.decimals,
235
+ display,
236
+ name: metadata.name,
237
+ symbol: metadata.symbol,
238
+ };
239
+ })));
240
+ }
241
+ case 'wallet_getCallsStatus': {
242
+ const [id] = request._decoded.params ?? [];
243
+ if (!id)
244
+ throw new Error('`id` not found');
245
+ if (!id.endsWith(sendCallsMagic.slice(2)))
246
+ throw new Error('`id` not supported');
247
+ Hex.assert(id);
248
+ const hash = Hex.slice(id, 0, 32);
249
+ const chainId = Hex.fromNumber(Number(Hex.slice(id, 32, 64)));
250
+ const client = Client.fromChainId(Number(chainId), { chains, store });
251
+ const receipt = await client.request({
252
+ method: 'eth_getTransactionReceipt',
253
+ params: [hash],
254
+ });
255
+ return {
256
+ atomic: true,
257
+ chainId,
258
+ id,
259
+ receipts: receipt ? [receipt] : [],
260
+ status: receipt?.status === '0x1' ? 200 : 500,
261
+ version: '2.0.0',
262
+ };
263
+ }
264
+ case 'wallet_getCapabilities': {
265
+ const decoded = request._decoded.params;
266
+ const address = decoded?.[0];
267
+ const chainIds = decoded?.[1];
268
+ if (address) {
269
+ const { accounts } = store.getState();
270
+ if (!accounts.some((a) => a.address.toLowerCase() === address.toLowerCase()))
271
+ throw new ox_Provider.UnauthorizedError({
272
+ message: `Address ${address} is not connected.`,
273
+ });
274
+ }
275
+ const filtered = chainIds
276
+ ? chains.filter((c) => chainIds.includes(Hex.fromNumber(c.id)))
277
+ : chains;
278
+ const result = {};
279
+ for (const chain of filtered)
280
+ result[Hex.fromNumber(chain.id)] = {
281
+ accessKeys: { status: 'supported' },
282
+ atomic: { status: 'supported' },
283
+ };
284
+ return result;
285
+ }
286
+ case 'wallet_connect': {
287
+ const capabilities = request._decoded.params?.[0]?.capabilities;
288
+ const authorizeAccessKey = capabilities?.authorizeAccessKey ?? options.authorizeAccessKey?.();
289
+ const { keyAuthorization, accounts, signature } = await (async () => {
290
+ if (capabilities?.method === 'register')
291
+ return await actions.createAccount({
292
+ digest: capabilities.digest,
293
+ authorizeAccessKey,
294
+ name: capabilities.name ?? 'default',
295
+ userId: capabilities.userId,
296
+ }, request);
297
+ return await actions.loadAccounts({
298
+ credentialId: capabilities?.credentialId,
299
+ digest: capabilities?.digest,
300
+ authorizeAccessKey,
301
+ selectAccount: capabilities?.selectAccount,
302
+ }, request);
303
+ })();
304
+ store.setState({ accounts: resolveAccounts(accounts), activeAccount: 0 });
305
+ const accountAddress = accounts[0]?.address;
306
+ return {
307
+ accounts: accounts.map((a) => ({
308
+ address: a.address,
309
+ capabilities: a.address === accountAddress
310
+ ? {
311
+ ...(keyAuthorization
312
+ ? {
313
+ keyAuthorization: {
314
+ ...keyAuthorization,
315
+ address: keyAuthorization.keyId,
316
+ },
317
+ }
318
+ : {}),
319
+ ...(signature && capabilities?.digest ? { signature } : {}),
320
+ }
321
+ : {},
322
+ })),
323
+ };
324
+ }
325
+ case 'wallet_disconnect':
326
+ await actions.disconnect?.();
327
+ store.setState({ accessKeys: [], accounts: [], activeAccount: 0 });
328
+ return;
329
+ case 'wallet_authorizeAccessKey': {
330
+ assertConnected();
331
+ if (!actions.authorizeAccessKey)
332
+ throw new ox_Provider.UnsupportedMethodError({
333
+ message: '`authorizeAccessKey` not supported by adapter.',
334
+ });
335
+ const decoded = request._decoded.params[0];
336
+ const result = await actions.authorizeAccessKey(decoded, request);
337
+ return {
338
+ ...result,
339
+ address: result.keyId,
340
+ };
341
+ }
342
+ case 'wallet_revokeAccessKey': {
343
+ assertConnected();
344
+ if (!actions.revokeAccessKey)
345
+ throw new ox_Provider.UnsupportedMethodError({
346
+ message: '`revokeAccessKey` not supported by adapter.',
347
+ });
348
+ const [decoded] = request._decoded.params;
349
+ await actions.revokeAccessKey({
350
+ ...decoded,
351
+ }, request);
352
+ return;
353
+ }
354
+ case 'wallet_switchEthereumChain': {
355
+ const { chainId } = request._decoded.params[0];
356
+ if (!chains.some((c) => c.id === chainId))
357
+ throw new ox_Provider.UnsupportedChainIdError({
358
+ message: `Chain ${chainId} not configured.`,
359
+ });
360
+ await actions.switchChain?.({ chainId });
361
+ store.setState({ chainId });
362
+ return;
363
+ }
364
+ }
365
+ })();
366
+ return result;
367
+ }, {
368
+ enabled: shouldDedupe,
369
+ id: Json.stringify({ method, params }),
370
+ });
371
+ },
372
+ }, { schema: Schema.ox }), { chains, getAccount, getClient, store });
373
+ if (typeof window !== 'undefined') {
374
+ announceProvider({
375
+ info: {
376
+ icon: adapter.icon ?? defaultIcon,
377
+ name: adapter.name ?? 'Injected Wallet',
378
+ rdns: adapter.rdns ??
379
+ `com.${(adapter.name ?? 'Injected Wallet').toLowerCase().replace(/\s+/g, '')}`,
380
+ uuid: crypto.randomUUID(),
381
+ },
382
+ provider,
383
+ });
384
+ }
385
+ if (options.mpp)
386
+ Mppx.create({
387
+ methods: [
388
+ mppx_tempo({
389
+ getClient: ({ chainId }) => {
390
+ const client = Client.fromChainId(chainId, { chains, store });
391
+ const account = Account.find({ store, signable: true });
392
+ return Object.assign(client, { account });
393
+ },
394
+ }),
395
+ ],
396
+ });
397
+ return provider;
398
+ }
399
+ const defaultIcon = 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="1" height="1"><rect width="1" height="1"/></svg>';
400
+ const sendCallsMagic = Hash.keccak256(Hex.fromString('TEMPO_5792'));
401
+ //# sourceMappingURL=Provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Provider.js","sourceRoot":"","sources":["../../src/core/Provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ import * as Provider from 'ox/Provider';
2
+ import * as RpcResponse from 'ox/RpcResponse';
3
+ import type { StoreApi } from 'zustand/vanilla';
4
+ import type * as Messenger from '../core/Messenger.js';
5
+ import type * as CoreProvider from '../core/Provider.js';
6
+ import type * as Store from '../core/Store.js';
7
+ /** State managed by the remote (dialog) side. */
8
+ export type State = {
9
+ /** Whether the dialog is rendered in an iframe or popup. */
10
+ mode: 'iframe' | 'popup' | undefined;
11
+ /** Trusted host origin from MessageEvent. */
12
+ origin: string | undefined;
13
+ /** Whether the dialog is ready to display content. */
14
+ ready: boolean;
15
+ /** Queued RPC requests received from the host. */
16
+ requests: readonly Store.QueuedRequest[];
17
+ };
18
+ /** Remote context — bundles messenger, provider, and remote store. */
19
+ export type Remote = {
20
+ /**
21
+ * Messenger for remote communication.
22
+ */
23
+ messenger: Messenger.Bridge;
24
+ /**
25
+ * Provider instance for executing RPC methods.
26
+ */
27
+ provider: CoreProvider.Provider;
28
+ /**
29
+ * Remote context store.
30
+ */
31
+ store: StoreApi<State>;
32
+ /**
33
+ * Subscribes to user-facing RPC requests from the parent context.
34
+ *
35
+ * Syncs the host's active chain, updates the remote store, and invokes
36
+ * the callback with the first pending request (or `null` when the queue
37
+ * is cleared, signalling the UI should close).
38
+ *
39
+ * @param cb - Callback receiving the request payload.
40
+ * @returns Unsubscribe function.
41
+ */
42
+ onUserRequest: (cb: (payload: onUserRequest.Payload) => void | Promise<void>) => () => void;
43
+ /**
44
+ * Subscribes to incoming RPC requests from the parent context.
45
+ * Updates the remote store with the received requests and syncs the
46
+ * host's active chain to the remote provider.
47
+ *
48
+ * @param cb - Callback receiving the full queued request list.
49
+ * @returns Unsubscribe function.
50
+ */
51
+ onRequests: (cb: (requests: readonly Store.QueuedRequest[], event: MessageEvent, extra: {
52
+ account: {
53
+ address: string;
54
+ } | undefined;
55
+ }) => void) => () => void;
56
+ /**
57
+ * Signals readiness to the host and begins accepting requests.
58
+ * Call this after the remote context is fully initialized.
59
+ */
60
+ ready: () => void;
61
+ /**
62
+ * Reject an RPC request.
63
+ */
64
+ reject: (request: Store.QueuedRequest['request'], error?: Provider.ProviderRpcError | RpcResponse.BaseError | undefined) => void;
65
+ /** Reject all pending RPC requests. */
66
+ rejectAll: (error?: Provider.ProviderRpcError | RpcResponse.BaseError | undefined) => void;
67
+ /**
68
+ * Respond to an RPC request.
69
+ *
70
+ * When `options.result` is provided, sends it directly.
71
+ * When `options.error` is provided, sends an error response.
72
+ * Otherwise, executes `provider.request(request)` and sends the result.
73
+ */
74
+ respond: (request: Store.QueuedRequest['request'], options?: respond.Options) => Promise<unknown>;
75
+ };
76
+ export declare namespace onUserRequest {
77
+ type Payload = {
78
+ /** Active account on the host side. */
79
+ account: {
80
+ address: string;
81
+ } | undefined;
82
+ /** Origin of the host that opened this dialog. */
83
+ origin: string;
84
+ /** The pending request to display, or `null` when the dialog should close. */
85
+ request: Store.QueuedRequest['request'] | null;
86
+ };
87
+ }
88
+ export declare namespace respond {
89
+ type Options = {
90
+ /** Error to respond with (takes precedence over result). */
91
+ error?: {
92
+ code: number;
93
+ message: string;
94
+ } | undefined;
95
+ /** Explicit result — if omitted, calls `provider.request(request)`. */
96
+ result?: unknown | undefined;
97
+ /** Transform the result before sending. */
98
+ selector?: ((result: any) => unknown) | undefined;
99
+ };
100
+ }
101
+ /** Creates a remote context for the dialog app. */
102
+ export declare function create(options: create.Options): Remote;
103
+ export declare namespace create {
104
+ type Options = {
105
+ /** Bridge messenger for cross-frame communication. */
106
+ messenger: Messenger.Bridge;
107
+ /** Provider to execute RPC requests against. */
108
+ provider: CoreProvider.Provider;
109
+ };
110
+ }
111
+ /** React hook to select state from a remote context's store. */
112
+ export declare function useState(remote: Remote): State;
113
+ export declare function useState<selected>(remote: Remote, selector: (state: State) => selected): selected;
114
+ //# sourceMappingURL=Remote.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Remote.d.ts","sourceRoot":"","sources":["../../src/core/Remote.ts"],"names":[],"mappings":"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"}