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,306 @@
1
+ import { Address, Provider as ox_Provider, RpcRequest as ox_RpcRequest } from 'ox';
2
+ import { KeyAuthorization } from 'ox/tempo';
3
+ import { prepareTransactionRequest } from 'viem/actions';
4
+ import { Account as TempoAccount } from 'viem/tempo';
5
+ import { z } from 'zod/mini';
6
+ import * as AccessKey from '../AccessKey.js';
7
+ import * as Adapter from '../Adapter.js';
8
+ import * as Dialog from '../Dialog.js';
9
+ import * as Schema from '../Schema.js';
10
+ import * as Rpc from '../zod/rpc.js';
11
+ /**
12
+ * Creates a dialog adapter that delegates signing to a remote embed app
13
+ * via an iframe or popup dialog.
14
+ *
15
+ * @example
16
+ * ```ts
17
+ * import { dialog, Provider } from 'accounts'
18
+ *
19
+ * const provider = Provider.create({
20
+ * adapter: dialog(),
21
+ * })
22
+ * ```
23
+ */
24
+ export function dialog(options = {}) {
25
+ const { dialog = Dialog.isSafari() ? Dialog.popup() : Dialog.iframe(), host = 'https://wallet.tempo.xyz/embed', icon, name = 'Tempo', rdns = 'xyz.tempo', } = options;
26
+ return Adapter.define({ icon, name, rdns }, ({ getAccount, getClient, store }) => {
27
+ const listeners = new Set();
28
+ const requestStore = ox_RpcRequest.createStore();
29
+ /** Wait for a queued request to be resolved via the store. */
30
+ function waitForQueuedRequest(requestId) {
31
+ return new Promise((resolve, reject) => {
32
+ const listener = (requestQueue) => {
33
+ const queued = requestQueue.find((x) => x.request.id === requestId);
34
+ // Request removed and queue empty — cancelled or dialog closed.
35
+ if (!queued && requestQueue.length === 0) {
36
+ listeners.delete(listener);
37
+ reject(new ox_Provider.UserRejectedRequestError());
38
+ return;
39
+ }
40
+ // Request not found but queue has other requests — wait.
41
+ if (!queued)
42
+ return;
43
+ // Request found but not yet resolved — wait.
44
+ if (queued.status !== 'success' && queued.status !== 'error')
45
+ return;
46
+ listeners.delete(listener);
47
+ if (queued.status === 'success')
48
+ resolve(queued.result);
49
+ else
50
+ reject(new ox_Provider.UserRejectedRequestError({ message: queued.error.message }));
51
+ // Remove the resolved request from the queue.
52
+ store.setState((x) => ({
53
+ ...x,
54
+ requestQueue: x.requestQueue.filter((x) => x.request.id !== requestId),
55
+ }));
56
+ };
57
+ listeners.add(listener);
58
+ // Notify immediately with current state so the store subscription
59
+ // picks up the request that was just added (setState fires
60
+ // synchronously before this listener is registered).
61
+ listener(store.getState().requestQueue);
62
+ });
63
+ }
64
+ /**
65
+ * An ox provider that queues RPC requests in the store. The store
66
+ * subscription syncs the pending queue to the dialog via `syncRequests`.
67
+ */
68
+ const provider = ox_Provider.from({
69
+ async request(r) {
70
+ const request = requestStore.prepare(r);
71
+ store.setState((x) => ({
72
+ ...x,
73
+ requestQueue: [...x.requestQueue, { request, status: 'pending' }],
74
+ }));
75
+ return waitForQueuedRequest(request.id);
76
+ },
77
+ }, { schema: Schema.ox });
78
+ /**
79
+ * Prepares a local key pair when `authorizeAccessKey` is requested without
80
+ * an external publicKey/address, and returns the params to inject into the
81
+ * RPC request so the dialog signs the authorization.
82
+ */
83
+ async function generateAccessKey(options) {
84
+ if (!options)
85
+ return undefined;
86
+ if (options.publicKey || options.address)
87
+ return undefined;
88
+ const { accessKey, keyPair } = await AccessKey.generate();
89
+ return {
90
+ accessKey,
91
+ keyPair,
92
+ request: {
93
+ ...options,
94
+ publicKey: accessKey.publicKey,
95
+ keyType: 'p256',
96
+ },
97
+ };
98
+ }
99
+ /**
100
+ * After the dialog returns a signed key authorization, saves the local
101
+ * key pair + key authorization into the store.
102
+ */
103
+ function saveAccessKey(address, keyAuth, keyPair) {
104
+ const keyAuthorization = KeyAuthorization.fromRpc(keyAuth);
105
+ AccessKey.save({ address, keyAuthorization, keyPair, store });
106
+ }
107
+ /**
108
+ * Tries to execute `fn` with the local access key. Returns `undefined`
109
+ * when no access key exists so the caller can fall through to the dialog.
110
+ * On access key errors, removes the stale key and also returns `undefined`.
111
+ */
112
+ async function withAccessKey(fn) {
113
+ const account = (() => {
114
+ try {
115
+ return getAccount({ signable: true });
116
+ }
117
+ catch {
118
+ return undefined;
119
+ }
120
+ })();
121
+ if (!account)
122
+ return undefined;
123
+ if (account.source !== 'accessKey')
124
+ return undefined;
125
+ const keyAuthorization = AccessKey.getPending(account, { store });
126
+ try {
127
+ const result = await fn(account, keyAuthorization ?? undefined);
128
+ AccessKey.removePending(account, { store });
129
+ return result;
130
+ }
131
+ catch {
132
+ AccessKey.remove(account, { store });
133
+ return undefined;
134
+ }
135
+ }
136
+ const dialogInstance = dialog({ host, store });
137
+ // Sync store → dialog: whenever the request queue changes, notify
138
+ // listeners and sync pending requests to the dialog.
139
+ const unsubscribe = store.subscribe((x) => x.requestQueue, (requestQueue) => {
140
+ for (const listener of listeners)
141
+ listener(requestQueue);
142
+ const pending = requestQueue.filter((x) => x.status === 'pending');
143
+ dialogInstance?.syncRequests(pending);
144
+ if (pending.length === 0)
145
+ dialogInstance?.close();
146
+ });
147
+ return {
148
+ cleanup() {
149
+ unsubscribe();
150
+ dialogInstance?.destroy();
151
+ },
152
+ actions: {
153
+ async createAccount(parameters, request) {
154
+ const accessKey = await generateAccessKey(parameters.authorizeAccessKey);
155
+ const { accounts } = await provider.request({
156
+ ...request,
157
+ params: [
158
+ {
159
+ ...request.params?.[0],
160
+ capabilities: {
161
+ ...request.params?.[0]?.capabilities,
162
+ ...(accessKey
163
+ ? {
164
+ authorizeAccessKey: z.encode(Rpc.wallet_connect.authorizeAccessKey, accessKey.request),
165
+ }
166
+ : {}),
167
+ },
168
+ },
169
+ ],
170
+ });
171
+ const address = accounts[0]?.address;
172
+ const keyAuthorization = accounts[0]?.capabilities.keyAuthorization;
173
+ if (accessKey && address && keyAuthorization)
174
+ saveAccessKey(address, keyAuthorization, accessKey.keyPair);
175
+ return {
176
+ accounts: accounts.map((a) => ({ address: a.address })),
177
+ ...(keyAuthorization ? { keyAuthorization } : {}),
178
+ ...(accounts[0]?.capabilities.signature
179
+ ? { signature: accounts[0].capabilities.signature }
180
+ : {}),
181
+ };
182
+ },
183
+ async loadAccounts(parameters, request) {
184
+ const accessKey = await generateAccessKey(parameters?.authorizeAccessKey);
185
+ const { accounts } = await provider.request({
186
+ ...request,
187
+ params: [
188
+ {
189
+ ...request.params?.[0],
190
+ capabilities: {
191
+ ...request.params?.[0]?.capabilities,
192
+ ...(accessKey
193
+ ? {
194
+ authorizeAccessKey: z.encode(Rpc.wallet_connect.authorizeAccessKey, accessKey.request),
195
+ }
196
+ : {}),
197
+ },
198
+ },
199
+ ],
200
+ });
201
+ const address = accounts[0]?.address;
202
+ const keyAuthorization = accounts[0]?.capabilities.keyAuthorization;
203
+ if (accessKey && address && keyAuthorization)
204
+ saveAccessKey(address, keyAuthorization, accessKey.keyPair);
205
+ return {
206
+ accounts: accounts.map((a) => ({ address: a.address })),
207
+ ...(keyAuthorization ? { keyAuthorization } : {}),
208
+ ...(accounts[0]?.capabilities.signature
209
+ ? { signature: accounts[0].capabilities.signature }
210
+ : {}),
211
+ };
212
+ },
213
+ async signPersonalMessage(_params, request) {
214
+ return await provider.request(request);
215
+ },
216
+ async signTransaction(parameters, request) {
217
+ const result = await withAccessKey(async (account, keyAuthorization) => {
218
+ const { feePayer, ...rest } = parameters;
219
+ const client = getClient({
220
+ feePayer: typeof feePayer === 'string' ? feePayer : undefined,
221
+ });
222
+ const prepared = await prepareTransactionRequest(client, {
223
+ account,
224
+ ...rest,
225
+ ...(feePayer ? { feePayer: true } : {}),
226
+ keyAuthorization,
227
+ type: 'tempo',
228
+ });
229
+ return await account.signTransaction(prepared);
230
+ });
231
+ if (result !== undefined)
232
+ return result;
233
+ return await provider.request(request);
234
+ },
235
+ async signTypedData(_params, request) {
236
+ return await provider.request(request);
237
+ },
238
+ async sendTransaction(parameters, request) {
239
+ const result = await withAccessKey(async (account, keyAuthorization) => {
240
+ const { feePayer, ...rest } = parameters;
241
+ const client = getClient({
242
+ feePayer: typeof feePayer === 'string' ? feePayer : undefined,
243
+ });
244
+ const prepared = await prepareTransactionRequest(client, {
245
+ account,
246
+ ...rest,
247
+ ...(feePayer ? { feePayer: true } : {}),
248
+ keyAuthorization,
249
+ type: 'tempo',
250
+ });
251
+ const signed = await account.signTransaction(prepared);
252
+ return await client.request({
253
+ method: 'eth_sendRawTransaction',
254
+ params: [signed],
255
+ });
256
+ });
257
+ if (result !== undefined)
258
+ return result;
259
+ return await provider.request(request);
260
+ },
261
+ async sendTransactionSync(parameters, request) {
262
+ const result = await withAccessKey(async (account, keyAuthorization) => {
263
+ const { feePayer, ...rest } = parameters;
264
+ const client = getClient({
265
+ feePayer: typeof feePayer === 'string' ? feePayer : undefined,
266
+ });
267
+ const prepared = await prepareTransactionRequest(client, {
268
+ account,
269
+ ...rest,
270
+ ...(feePayer ? { feePayer: true } : {}),
271
+ keyAuthorization,
272
+ type: 'tempo',
273
+ });
274
+ const signed = await account.signTransaction(prepared);
275
+ return await client.request({
276
+ method: 'eth_sendRawTransactionSync',
277
+ params: [signed],
278
+ });
279
+ });
280
+ if (result !== undefined)
281
+ return result;
282
+ return await provider.request(request);
283
+ },
284
+ async authorizeAccessKey(parameters, request) {
285
+ const accessKey = await generateAccessKey(parameters);
286
+ const result = await provider.request({
287
+ ...request,
288
+ params: [z.encode(Rpc.wallet_connect.authorizeAccessKey, accessKey.request)],
289
+ });
290
+ if (accessKey) {
291
+ const account = getAccount({ accessKey: false, signable: false });
292
+ saveAccessKey(account.address, result, accessKey.keyPair);
293
+ }
294
+ return result;
295
+ },
296
+ async revokeAccessKey(_params, request) {
297
+ await provider.request(request);
298
+ },
299
+ async disconnect() {
300
+ store.setState({ accessKeys: [], accounts: [], activeAccount: 0 });
301
+ },
302
+ },
303
+ };
304
+ });
305
+ }
306
+ //# sourceMappingURL=dialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialog.js","sourceRoot":"","sources":["../../../src/core/adapters/dialog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import * as Adapter from '../Adapter.js';
2
+ /**
3
+ * Creates a local adapter where the app manages keys and signing in-process.
4
+ *
5
+ * @example
6
+ * ```ts
7
+ * import { local, Provider } from 'accounts'
8
+ *
9
+ * const Provider = Provider.create({
10
+ * adapter: local({
11
+ * loadAccounts: async () => ({
12
+ * accounts: [{ address: '0x...' }],
13
+ * }),
14
+ * }),
15
+ * })
16
+ * ```
17
+ */
18
+ export declare function local(options: local.Options): Adapter.Adapter;
19
+ export declare namespace local {
20
+ type Options = {
21
+ /** Create a new account. Optional — omit for login-only flows. */
22
+ createAccount?: ((params: Adapter.createAccount.Parameters) => Promise<Adapter.createAccount.ReturnType>) | undefined;
23
+ /** Discover existing accounts (e.g. WebAuthn assertion). */
24
+ loadAccounts: (params?: Adapter.loadAccounts.Parameters | undefined) => Promise<Adapter.loadAccounts.ReturnType>;
25
+ /** Data URI of the provider icon. @default Black 1×1 SVG. */
26
+ icon?: `data:image/${string}` | undefined;
27
+ /** Display name of the provider (e.g. `"My Wallet"`). @default "Injected Wallet" */
28
+ name?: string | undefined;
29
+ /** Reverse DNS identifier. @default `com.{lowercase name}` */
30
+ rdns?: string | undefined;
31
+ };
32
+ }
33
+ //# sourceMappingURL=local.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../../src/core/adapters/local.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,OAAO,MAAM,eAAe,CAAA;AAExC;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAwO7D;AAED,MAAM,CAAC,OAAO,WAAW,KAAK,CAAC;IAC7B,KAAK,OAAO,GAAG;QACb,kEAAkE;QAClE,aAAa,CAAC,EACV,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,UAAU,KAAK,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,GACzF,SAAS,CAAA;QACb,4DAA4D;QAC5D,YAAY,EAAE,CACZ,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,UAAU,GAAG,SAAS,KACjD,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAA;QAC7C,6DAA6D;QAC7D,IAAI,CAAC,EAAE,cAAc,MAAM,EAAE,GAAG,SAAS,CAAA;QACzC,oFAAoF;QACpF,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACzB,8DAA8D;QAC9D,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC1B,CAAA;CACF"}
@@ -0,0 +1,227 @@
1
+ import { Address as ox_Address, Hex, Provider as ox_Provider, PublicKey, WebCryptoP256 } from 'ox';
2
+ import { KeyAuthorization, SignatureEnvelope } from 'ox/tempo';
3
+ import { prepareTransactionRequest } from 'viem/actions';
4
+ import { Account as TempoAccount } from 'viem/tempo';
5
+ import * as AccessKey from '../AccessKey.js';
6
+ import * as Account from '../Account.js';
7
+ import * as Adapter from '../Adapter.js';
8
+ /**
9
+ * Creates a local adapter where the app manages keys and signing in-process.
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * import { local, Provider } from 'accounts'
14
+ *
15
+ * const Provider = Provider.create({
16
+ * adapter: local({
17
+ * loadAccounts: async () => ({
18
+ * accounts: [{ address: '0x...' }],
19
+ * }),
20
+ * }),
21
+ * })
22
+ * ```
23
+ */
24
+ export function local(options) {
25
+ const { createAccount, icon, loadAccounts, name, rdns } = options;
26
+ return Adapter.define({ icon, name, rdns }, ({ getAccount, getClient, store }) => {
27
+ /**
28
+ * Resolves access key params and computes the key authorization digest.
29
+ *
30
+ * For external keys: derives the address from the provided publicKey/address.
31
+ * For local keys: generates a P256 key pair via `AccessKey.generate`.
32
+ */
33
+ async function prepareKeyAuthorization(options) {
34
+ const { expiry, limits } = options;
35
+ const chainId = getClient().chain.id;
36
+ if (options.publicKey || options.address) {
37
+ const accessKeyAddress = options.address ?? ox_Address.fromPublicKey(PublicKey.from(options.publicKey));
38
+ const keyType = options.keyType ?? 'secp256k1';
39
+ const keyAuthorization = KeyAuthorization.from({
40
+ address: accessKeyAddress,
41
+ chainId: BigInt(chainId),
42
+ expiry,
43
+ limits,
44
+ type: keyType,
45
+ });
46
+ return { keyAuthorization };
47
+ }
48
+ const keyPair = await WebCryptoP256.createKeyPair();
49
+ const address = ox_Address.fromPublicKey(PublicKey.from(keyPair.publicKey));
50
+ const keyAuthorization = KeyAuthorization.from({
51
+ address,
52
+ chainId: BigInt(chainId),
53
+ expiry,
54
+ limits,
55
+ type: 'p256',
56
+ });
57
+ return { keyAuthorization, keyPair };
58
+ }
59
+ /**
60
+ * Signs (or wraps a pre-computed signature into) a key authorization
61
+ * and saves the result to the store.
62
+ */
63
+ async function signKeyAuthorization(account, prepared, options = {}) {
64
+ const { keyPair } = prepared;
65
+ const keyAuthorization = await (async () => {
66
+ const digest = KeyAuthorization.getSignPayload(prepared.keyAuthorization);
67
+ const signature = options.signature ?? (await account.sign({ hash: digest }));
68
+ return KeyAuthorization.from(prepared.keyAuthorization, {
69
+ signature: SignatureEnvelope.from(signature),
70
+ });
71
+ })();
72
+ AccessKey.save({ address: account.address, keyAuthorization, keyPair, store });
73
+ return KeyAuthorization.toRpc(keyAuthorization);
74
+ }
75
+ async function withAccessKey(fn) {
76
+ const account = getAccount({ signable: true });
77
+ const keyAuthorization = AccessKey.getPending(account, { store });
78
+ try {
79
+ const result = await fn(account, keyAuthorization ?? undefined);
80
+ AccessKey.removePending(account, { store });
81
+ return result;
82
+ }
83
+ catch (error) {
84
+ if (account.source !== 'accessKey')
85
+ throw error;
86
+ AccessKey.remove(account, { store });
87
+ const root = getAccount({ accessKey: false, signable: true });
88
+ return await fn(root, undefined);
89
+ }
90
+ }
91
+ return {
92
+ actions: {
93
+ async createAccount(parameters) {
94
+ if (!createAccount)
95
+ throw new ox_Provider.UnsupportedMethodError({
96
+ message: '`createAccount` not configured on adapter.',
97
+ });
98
+ const { authorizeAccessKey: grantOptions, ...rest } = parameters;
99
+ const { accounts, signature } = await createAccount(rest);
100
+ // Hydrate the first account for signing. Must be done here (not via
101
+ // the store) because accounts aren't merged into the store until
102
+ // Provider.ts processes the return value.
103
+ const account = Account.hydrate(accounts[0], { signable: true });
104
+ // If the caller requested a digest signature but the adapter didn't
105
+ // produce one (e.g. secp256k1 adapters), sign it ourselves.
106
+ const signature_ = rest.digest && !signature ? await account.sign({ hash: rest.digest }) : signature;
107
+ const keyAuthorization = await (async () => {
108
+ if (!grantOptions)
109
+ return undefined;
110
+ const prepared = await prepareKeyAuthorization(grantOptions);
111
+ return await signKeyAuthorization(account, prepared);
112
+ })();
113
+ return { accounts, keyAuthorization, signature: signature_ };
114
+ },
115
+ async authorizeAccessKey(parameters) {
116
+ const prepared = await prepareKeyAuthorization(parameters);
117
+ const account = getAccount({ accessKey: false, signable: true });
118
+ return await signKeyAuthorization(account, prepared, { signature: parameters.signature });
119
+ },
120
+ async loadAccounts(parameters) {
121
+ const { authorizeAccessKey, ...rest } = parameters ?? {};
122
+ const keyAuthorization_unsigned = authorizeAccessKey
123
+ ? await prepareKeyAuthorization(authorizeAccessKey)
124
+ : undefined;
125
+ const digest = (() => {
126
+ if (rest.digest)
127
+ return rest.digest;
128
+ if (keyAuthorization_unsigned?.keyAuthorization)
129
+ return KeyAuthorization.getSignPayload(keyAuthorization_unsigned.keyAuthorization);
130
+ return undefined;
131
+ })();
132
+ // Pass the prepared digest (or the caller's) into loadAccounts so
133
+ // the ceremony can sign it in a single biometric prompt.
134
+ const { accounts, signature } = await loadAccounts({ ...rest, digest });
135
+ // Hydrate here (not from the store) — same reason as createAccount.
136
+ // Guard against empty accounts (e.g. user cancelled the ceremony).
137
+ const account = accounts[0] ? Account.hydrate(accounts[0], { signable: true }) : undefined;
138
+ // Fall back to local signing if the adapter didn't return a signature.
139
+ let signature_ = signature;
140
+ if (digest && !signature_ && account)
141
+ signature_ = await account.sign({ hash: digest });
142
+ const keyAuthorization = keyAuthorization_unsigned && account
143
+ ? await signKeyAuthorization(account, keyAuthorization_unsigned, {
144
+ signature: signature_,
145
+ })
146
+ : undefined;
147
+ return { accounts, keyAuthorization, signature: signature_ };
148
+ },
149
+ async revokeAccessKey(parameters) {
150
+ AccessKey.revoke({
151
+ address: parameters.address,
152
+ store,
153
+ });
154
+ },
155
+ async signPersonalMessage({ data, address }) {
156
+ const account = getAccount({ address, signable: true });
157
+ return await account.signMessage({ message: { raw: data } });
158
+ },
159
+ async signTransaction(parameters) {
160
+ const { feePayer, ...rest } = parameters;
161
+ const client = getClient({
162
+ feePayer: typeof feePayer === 'string' ? feePayer : undefined,
163
+ });
164
+ const { account, prepared } = await withAccessKey(async (account, keyAuthorization) => ({
165
+ account,
166
+ prepared: await prepareTransactionRequest(client, {
167
+ account,
168
+ ...rest,
169
+ ...(feePayer ? { feePayer: true } : {}),
170
+ keyAuthorization,
171
+ type: 'tempo',
172
+ }),
173
+ }));
174
+ return await account.signTransaction(prepared);
175
+ },
176
+ async signTypedData({ data, address }) {
177
+ const account = getAccount({ address, signable: true });
178
+ const { domain, types, primaryType, message } = JSON.parse(data);
179
+ return await account.signTypedData({ domain, types, primaryType, message });
180
+ },
181
+ async sendTransaction(parameters) {
182
+ const { feePayer, ...rest } = parameters;
183
+ const client = getClient({
184
+ feePayer: typeof feePayer === 'string' ? feePayer : undefined,
185
+ });
186
+ const { account, prepared } = await withAccessKey(async (account, keyAuthorization) => ({
187
+ account,
188
+ prepared: await prepareTransactionRequest(client, {
189
+ account,
190
+ ...rest,
191
+ ...(feePayer ? { feePayer: true } : {}),
192
+ keyAuthorization,
193
+ type: 'tempo',
194
+ }),
195
+ }));
196
+ const signed = await account.signTransaction(prepared);
197
+ return await client.request({
198
+ method: 'eth_sendRawTransaction',
199
+ params: [signed],
200
+ });
201
+ },
202
+ async sendTransactionSync(parameters) {
203
+ const { feePayer, ...rest } = parameters;
204
+ const client = getClient({
205
+ feePayer: typeof feePayer === 'string' ? feePayer : undefined,
206
+ });
207
+ const { account, prepared } = await withAccessKey(async (account, keyAuthorization) => ({
208
+ account,
209
+ prepared: await prepareTransactionRequest(client, {
210
+ account,
211
+ ...rest,
212
+ ...(feePayer ? { feePayer: true } : {}),
213
+ keyAuthorization,
214
+ type: 'tempo',
215
+ }),
216
+ }));
217
+ const signed = await account.signTransaction(prepared);
218
+ return await client.request({
219
+ method: 'eth_sendRawTransactionSync',
220
+ params: [signed],
221
+ });
222
+ },
223
+ },
224
+ };
225
+ });
226
+ }
227
+ //# sourceMappingURL=local.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local.js","sourceRoot":"","sources":["../../../src/core/adapters/local.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import type { OneOf } from '../../internal/types.js';
2
+ import * as Adapter from '../Adapter.js';
3
+ import * as Ceremony from '../Ceremony.js';
4
+ /**
5
+ * Creates a WebAuthn adapter backed by real passkey ceremonies.
6
+ *
7
+ * Wraps the {@link local} adapter with WebAuthn registration and authentication flows,
8
+ * using the provided {@link Ceremony} for challenge generation and verification.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import { webAuthn } from 'accounts'
13
+ *
14
+ * const provider = Provider.create({
15
+ * adapter: webAuthn(),
16
+ * })
17
+ * ```
18
+ */
19
+ export declare function webAuthn(options?: webAuthn.Options): Adapter.Adapter;
20
+ export declare namespace webAuthn {
21
+ type Options = OneOf<{
22
+ /** Ceremony strategy for WebAuthn registration and authentication. @default Ceremony.local() */
23
+ ceremony?: Ceremony.Ceremony | undefined;
24
+ } | {
25
+ /** URL of a WebAuthn handler (shorthand for `Ceremony.server({ url })`). */
26
+ authUrl?: string | undefined;
27
+ }> & {
28
+ /** Data URI of the provider icon. @default Black 1×1 SVG. */
29
+ icon?: `data:image/${string}` | undefined;
30
+ /** Display name of the provider (e.g. `"My Wallet"`). @default "Injected Wallet" */
31
+ name?: string | undefined;
32
+ /** Reverse DNS identifier. @default `com.{lowercase name}` */
33
+ rdns?: string | undefined;
34
+ };
35
+ }
36
+ //# sourceMappingURL=webAuthn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webAuthn.d.ts","sourceRoot":"","sources":["../../../src/core/adapters/webAuthn.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AACpD,OAAO,KAAK,OAAO,MAAM,eAAe,CAAA;AACxC,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAG1C;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,QAAQ,CAAC,OAAO,GAAE,QAAQ,CAAC,OAAY,GAAG,OAAO,CAAC,OAAO,CAmFxE;AAED,MAAM,CAAC,OAAO,WAAW,QAAQ,CAAC;IAChC,KAAK,OAAO,GAAG,KAAK,CAChB;QACE,gGAAgG;QAChG,QAAQ,CAAC,EAAE,QAAQ,CAAC,QAAQ,GAAG,SAAS,CAAA;KACzC,GACD;QACE,4EAA4E;QAC5E,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC7B,CACJ,GAAG;QACF,6DAA6D;QAC7D,IAAI,CAAC,EAAE,cAAc,MAAM,EAAE,GAAG,SAAS,CAAA;QACzC,oFAAoF;QACpF,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACzB,8DAA8D;QAC9D,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC1B,CAAA;CACF"}