accounts 0.6.0 → 0.6.2
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.
- package/CHANGELOG.md +15 -0
- package/dist/core/Adapter.d.ts +2 -2
- package/dist/core/Adapter.d.ts.map +1 -1
- package/dist/core/Client.d.ts +2 -2
- package/dist/core/Client.d.ts.map +1 -1
- package/dist/core/Client.js +13 -4
- package/dist/core/Client.js.map +1 -1
- package/dist/core/Provider.d.ts.map +1 -1
- package/dist/core/Provider.js +9 -2
- package/dist/core/Provider.js.map +1 -1
- package/dist/core/Schema.d.ts +22 -12
- package/dist/core/Schema.d.ts.map +1 -1
- package/dist/core/adapters/dialog.d.ts.map +1 -1
- package/dist/core/adapters/dialog.js +24 -4
- package/dist/core/adapters/dialog.js.map +1 -1
- package/dist/core/adapters/local.d.ts.map +1 -1
- package/dist/core/adapters/local.js +21 -3
- package/dist/core/adapters/local.js.map +1 -1
- package/dist/core/zod/rpc.d.ts +14 -9
- package/dist/core/zod/rpc.d.ts.map +1 -1
- package/dist/core/zod/rpc.js +8 -2
- package/dist/core/zod/rpc.js.map +1 -1
- package/dist/server/CliAuth.d.ts +11 -11
- package/dist/server/CliAuth.js +1 -1
- package/dist/server/CliAuth.js.map +1 -1
- package/dist/server/Handler.d.ts +4 -252
- package/dist/server/Handler.d.ts.map +1 -1
- package/dist/server/Handler.js +4 -573
- package/dist/server/Handler.js.map +1 -1
- package/dist/server/internal/handlers/codeAuth.d.ts +41 -0
- package/dist/server/internal/handlers/codeAuth.d.ts.map +1 -0
- package/dist/server/internal/handlers/codeAuth.js +104 -0
- package/dist/server/internal/handlers/codeAuth.js.map +1 -0
- package/dist/server/internal/handlers/feePayer.d.ts +73 -0
- package/dist/server/internal/handlers/feePayer.d.ts.map +1 -0
- package/dist/server/internal/handlers/feePayer.js +184 -0
- package/dist/server/internal/handlers/feePayer.js.map +1 -0
- package/dist/server/internal/handlers/relay.d.ts +148 -0
- package/dist/server/internal/handlers/relay.d.ts.map +1 -0
- package/dist/server/internal/handlers/relay.js +600 -0
- package/dist/server/internal/handlers/relay.js.map +1 -0
- package/dist/server/internal/handlers/utils.d.ts +12 -0
- package/dist/server/internal/handlers/utils.d.ts.map +1 -0
- package/dist/server/internal/handlers/utils.js +80 -0
- package/dist/server/internal/handlers/utils.js.map +1 -0
- package/dist/server/internal/handlers/webAuthn.d.ts +57 -0
- package/dist/server/internal/handlers/webAuthn.d.ts.map +1 -0
- package/dist/server/internal/handlers/webAuthn.js +143 -0
- package/dist/server/internal/handlers/webAuthn.js.map +1 -0
- package/package.json +2 -2
- package/src/core/Adapter.ts +2 -2
- package/src/core/Client.ts +13 -6
- package/src/core/Provider.connect.browser.test.ts +23 -2
- package/src/core/Provider.test.ts +292 -0
- package/src/core/Provider.ts +11 -3
- package/src/core/adapters/dialog.ts +21 -4
- package/src/core/adapters/local.ts +15 -3
- package/src/core/zod/rpc.ts +12 -2
- package/src/server/CliAuth.ts +1 -1
- package/src/server/Handler.test.ts +3 -418
- package/src/server/Handler.ts +5 -766
- package/src/server/internal/handlers/codeAuth.ts +148 -0
- package/src/server/internal/handlers/feePayer.test.ts +335 -0
- package/src/server/internal/handlers/feePayer.ts +271 -0
- package/src/server/internal/handlers/relay.test.ts +767 -0
- package/src/server/internal/handlers/relay.ts +817 -0
- package/src/server/internal/handlers/utils.ts +96 -0
- package/src/server/internal/handlers/webAuthn.test.ts +170 -0
- package/src/server/internal/handlers/webAuthn.ts +213 -0
package/dist/server/Handler.js
CHANGED
|
@@ -1,16 +1,9 @@
|
|
|
1
1
|
import { Hono } from 'hono';
|
|
2
|
-
import { Base64, Bytes, Hex, RpcRequest, RpcResponse, Signature } from 'ox';
|
|
3
|
-
import { Transaction as core_Transaction, TxEnvelopeTempo } from 'ox/tempo';
|
|
4
|
-
import { Credential } from 'ox/webauthn';
|
|
5
|
-
import { createClient, http } from 'viem';
|
|
6
|
-
import { signTransaction } from 'viem/actions';
|
|
7
|
-
import { tempo, tempoModerato } from 'viem/chains';
|
|
8
|
-
import { Transaction } from 'viem/tempo';
|
|
9
|
-
import { Authentication, Registration, } from 'webauthx/server';
|
|
10
|
-
import * as z from 'zod/mini';
|
|
11
|
-
import * as CliAuth from './CliAuth.js';
|
|
12
2
|
import * as RequestListener from './internal/requestListener.js';
|
|
13
|
-
|
|
3
|
+
export { codeAuth } from './internal/handlers/codeAuth.js';
|
|
4
|
+
export { feePayer } from './internal/handlers/feePayer.js';
|
|
5
|
+
export { relay } from './internal/handlers/relay.js';
|
|
6
|
+
export { webAuthn } from './internal/handlers/webAuthn.js';
|
|
14
7
|
export function compose(handlers, options = {}) {
|
|
15
8
|
const path = options.path ?? '/';
|
|
16
9
|
const app = from(options);
|
|
@@ -52,567 +45,6 @@ export function from(options = {}) {
|
|
|
52
45
|
listener: RequestListener.fromFetchHandler((request) => app.fetch(request)),
|
|
53
46
|
});
|
|
54
47
|
}
|
|
55
|
-
/**
|
|
56
|
-
* Instantiates a fee payer service request handler that can be used to
|
|
57
|
-
* sponsor the fee for user transactions.
|
|
58
|
-
*
|
|
59
|
-
* @example
|
|
60
|
-
* ### Cloudflare Worker
|
|
61
|
-
*
|
|
62
|
-
* ```ts
|
|
63
|
-
* import { privateKeyToAccount } from 'viem/accounts'
|
|
64
|
-
* import { Handler } from 'accounts/server'
|
|
65
|
-
*
|
|
66
|
-
* export default {
|
|
67
|
-
* fetch(request) {
|
|
68
|
-
* return Handler.feePayer({
|
|
69
|
-
* account: privateKeyToAccount('0x...'),
|
|
70
|
-
* }).fetch(request)
|
|
71
|
-
* }
|
|
72
|
-
* }
|
|
73
|
-
* ```
|
|
74
|
-
*
|
|
75
|
-
* @example
|
|
76
|
-
* ### Next.js
|
|
77
|
-
*
|
|
78
|
-
* ```ts
|
|
79
|
-
* import { privateKeyToAccount } from 'viem/accounts'
|
|
80
|
-
* import { Handler } from 'accounts/server'
|
|
81
|
-
*
|
|
82
|
-
* const handler = Handler.feePayer({
|
|
83
|
-
* account: privateKeyToAccount('0x...'),
|
|
84
|
-
* })
|
|
85
|
-
*
|
|
86
|
-
* export GET = handler.fetch
|
|
87
|
-
* export POST = handler.fetch
|
|
88
|
-
* ```
|
|
89
|
-
*
|
|
90
|
-
* @example
|
|
91
|
-
* ### Hono
|
|
92
|
-
*
|
|
93
|
-
* ```ts
|
|
94
|
-
* import { privateKeyToAccount } from 'viem/accounts'
|
|
95
|
-
* import { Handler } from 'accounts/server'
|
|
96
|
-
*
|
|
97
|
-
* const handler = Handler.feePayer({
|
|
98
|
-
* account: privateKeyToAccount('0x...'),
|
|
99
|
-
* })
|
|
100
|
-
*
|
|
101
|
-
* const app = new Hono()
|
|
102
|
-
* app.all('*', handler)
|
|
103
|
-
*
|
|
104
|
-
* export default app
|
|
105
|
-
* ```
|
|
106
|
-
*
|
|
107
|
-
* @example
|
|
108
|
-
* ### Node.js
|
|
109
|
-
*
|
|
110
|
-
* ```ts
|
|
111
|
-
* import { privateKeyToAccount } from 'viem/accounts'
|
|
112
|
-
* import { Handler } from 'accounts/server'
|
|
113
|
-
*
|
|
114
|
-
* const handler = Handler.feePayer({
|
|
115
|
-
* account: privateKeyToAccount('0x...'),
|
|
116
|
-
* })
|
|
117
|
-
*
|
|
118
|
-
* const server = createServer(handler.listener)
|
|
119
|
-
* server.listen(3000)
|
|
120
|
-
* ```
|
|
121
|
-
*
|
|
122
|
-
* @example
|
|
123
|
-
* ### Bun
|
|
124
|
-
*
|
|
125
|
-
* ```ts
|
|
126
|
-
* import { privateKeyToAccount } from 'viem/accounts'
|
|
127
|
-
* import { Handler } from 'accounts/server'
|
|
128
|
-
*
|
|
129
|
-
* const handler = Handler.feePayer({
|
|
130
|
-
* account: privateKeyToAccount('0x...'),
|
|
131
|
-
* })
|
|
132
|
-
*
|
|
133
|
-
* Bun.serve(handler)
|
|
134
|
-
* ```
|
|
135
|
-
*
|
|
136
|
-
* @example
|
|
137
|
-
* ### Deno
|
|
138
|
-
*
|
|
139
|
-
* ```ts
|
|
140
|
-
* import { privateKeyToAccount } from 'viem/accounts'
|
|
141
|
-
* import { Handler } from 'accounts/server'
|
|
142
|
-
*
|
|
143
|
-
* const handler = Handler.feePayer({
|
|
144
|
-
* account: privateKeyToAccount('0x...'),
|
|
145
|
-
* })
|
|
146
|
-
*
|
|
147
|
-
* Deno.serve(handler)
|
|
148
|
-
* ```
|
|
149
|
-
*
|
|
150
|
-
* @example
|
|
151
|
-
* ### Express
|
|
152
|
-
*
|
|
153
|
-
* ```ts
|
|
154
|
-
* import { privateKeyToAccount } from 'viem/accounts'
|
|
155
|
-
* import { Handler } from 'accounts/server'
|
|
156
|
-
*
|
|
157
|
-
* const handler = Handler.feePayer({
|
|
158
|
-
* account: privateKeyToAccount('0x...'),
|
|
159
|
-
* })
|
|
160
|
-
*
|
|
161
|
-
* const app = express()
|
|
162
|
-
* app.use(handler.listener)
|
|
163
|
-
* app.listen(3000)
|
|
164
|
-
* ```
|
|
165
|
-
*
|
|
166
|
-
* @example
|
|
167
|
-
* ### Custom chains & transports
|
|
168
|
-
*
|
|
169
|
-
* ```ts
|
|
170
|
-
* import { http } from 'viem'
|
|
171
|
-
* import { privateKeyToAccount } from 'viem/accounts'
|
|
172
|
-
* import { tempo, tempoModerato } from 'viem/chains'
|
|
173
|
-
* import { Handler } from 'accounts/server'
|
|
174
|
-
*
|
|
175
|
-
* const handler = Handler.feePayer({
|
|
176
|
-
* account: privateKeyToAccount('0x...'),
|
|
177
|
-
* chains: [tempo, tempoModerato],
|
|
178
|
-
* transports: {
|
|
179
|
-
* [tempo.id]: http('https://rpc.tempo.xyz'),
|
|
180
|
-
* [tempoModerato.id]: http('https://rpc.testnet.tempo.xyz'),
|
|
181
|
-
* },
|
|
182
|
-
* })
|
|
183
|
-
* ```
|
|
184
|
-
*
|
|
185
|
-
* @param options - Options.
|
|
186
|
-
* @returns Request handler.
|
|
187
|
-
*/
|
|
188
|
-
export function feePayer(options) {
|
|
189
|
-
const { account, chains = [tempo, tempoModerato], name, onRequest, path = '/', transports = {}, url, ...rest } = options;
|
|
190
|
-
const clients = new Map();
|
|
191
|
-
for (const chain of chains) {
|
|
192
|
-
const transport = transports[chain.id] ?? http();
|
|
193
|
-
clients.set(chain.id, createClient({ chain, transport }));
|
|
194
|
-
}
|
|
195
|
-
function getClient(chainId) {
|
|
196
|
-
if (chainId) {
|
|
197
|
-
const client = clients.get(chainId);
|
|
198
|
-
if (!client)
|
|
199
|
-
throw new Error(`Chain ${chainId} not configured`);
|
|
200
|
-
return client;
|
|
201
|
-
}
|
|
202
|
-
return clients.get(chains[0].id);
|
|
203
|
-
}
|
|
204
|
-
const sponsor = {
|
|
205
|
-
address: account.address,
|
|
206
|
-
...(name ? { name } : {}),
|
|
207
|
-
...(url ? { url } : {}),
|
|
208
|
-
};
|
|
209
|
-
const router = from(rest);
|
|
210
|
-
router.post(path, async (c) => {
|
|
211
|
-
const request = RpcRequest.from((await c.req.raw.json()));
|
|
212
|
-
try {
|
|
213
|
-
await onRequest?.(request);
|
|
214
|
-
const method = request.method;
|
|
215
|
-
if (method !== 'eth_fillTransaction' &&
|
|
216
|
-
method !== 'eth_signRawTransaction' &&
|
|
217
|
-
method !== 'eth_sendRawTransaction' &&
|
|
218
|
-
method !== 'eth_sendRawTransactionSync')
|
|
219
|
-
return Response.json(RpcResponse.from({
|
|
220
|
-
error: new RpcResponse.MethodNotSupportedError({
|
|
221
|
-
message: `Method not supported: ${request.method}`,
|
|
222
|
-
}),
|
|
223
|
-
}, { request }));
|
|
224
|
-
if (method === 'eth_fillTransaction') {
|
|
225
|
-
const [parameters] = z
|
|
226
|
-
.readonly(z.tuple([z.record(z.string(), z.unknown())]))
|
|
227
|
-
.parse(request.params);
|
|
228
|
-
const chainId = resolveChainId(parameters.chainId);
|
|
229
|
-
const client = getClient(chainId);
|
|
230
|
-
const transaction = await (async () => {
|
|
231
|
-
if (isPreparedFeePayerTransaction(parameters))
|
|
232
|
-
return normalizeTempoTransaction(parameters);
|
|
233
|
-
const fillRequest = formatFillTransactionRequest(client, {
|
|
234
|
-
...normalizeFillTransactionRequest(parameters),
|
|
235
|
-
...(typeof chainId !== 'undefined' ? { chainId } : {}),
|
|
236
|
-
feePayer: true,
|
|
237
|
-
});
|
|
238
|
-
const result = (await client.request({
|
|
239
|
-
method: 'eth_fillTransaction',
|
|
240
|
-
params: [fillRequest],
|
|
241
|
-
}));
|
|
242
|
-
return normalizeTempoTransaction(result.tx);
|
|
243
|
-
})();
|
|
244
|
-
const from = transaction.from ??
|
|
245
|
-
(typeof parameters.from === 'string' ? parameters.from : undefined);
|
|
246
|
-
const { signature: _, ...withoutSenderSig } = transaction;
|
|
247
|
-
const prepared = { ...withoutSenderSig, from };
|
|
248
|
-
if (!prepared.from)
|
|
249
|
-
throw new RpcResponse.InvalidParamsError({
|
|
250
|
-
message: 'Transaction sender must be provided before fee payer signing.',
|
|
251
|
-
});
|
|
252
|
-
if (!account.sign)
|
|
253
|
-
throw new Error('Fee payer account cannot sign transactions.');
|
|
254
|
-
const feePayerSignature = Signature.from(await account.sign({
|
|
255
|
-
hash: TxEnvelopeTempo.getFeePayerSignPayload(TxEnvelopeTempo.from(prepared), {
|
|
256
|
-
sender: prepared.from,
|
|
257
|
-
}),
|
|
258
|
-
}));
|
|
259
|
-
return rpcResult(request, {
|
|
260
|
-
sponsor,
|
|
261
|
-
tx: core_Transaction.toRpc({
|
|
262
|
-
...prepared,
|
|
263
|
-
feePayerSignature,
|
|
264
|
-
}),
|
|
265
|
-
});
|
|
266
|
-
}
|
|
267
|
-
const serialized = request.params?.[0];
|
|
268
|
-
if (!serialized?.startsWith('0x76') && !serialized?.startsWith('0x78'))
|
|
269
|
-
throw new RpcResponse.InvalidParamsError({
|
|
270
|
-
message: 'Only Tempo (0x76/0x78) transactions are supported.',
|
|
271
|
-
});
|
|
272
|
-
const transaction = Transaction.deserialize(serialized);
|
|
273
|
-
if (!transaction.signature || !transaction.from)
|
|
274
|
-
throw new RpcResponse.InvalidParamsError({
|
|
275
|
-
message: 'Transaction must be signed by the sender before fee payer signing.',
|
|
276
|
-
});
|
|
277
|
-
const client = getClient(transaction.chainId);
|
|
278
|
-
const serializedTransaction = toSerializedTransaction(await signTransaction(client, {
|
|
279
|
-
...transaction,
|
|
280
|
-
account,
|
|
281
|
-
feePayer: account,
|
|
282
|
-
}));
|
|
283
|
-
if (method === 'eth_signRawTransaction')
|
|
284
|
-
return Response.json(RpcResponse.from({ result: serializedTransaction }, { request }));
|
|
285
|
-
const result = await client.request({
|
|
286
|
-
method: method,
|
|
287
|
-
params: [serializedTransaction],
|
|
288
|
-
});
|
|
289
|
-
return Response.json(RpcResponse.from({ result }, { request }));
|
|
290
|
-
}
|
|
291
|
-
catch (error) {
|
|
292
|
-
return rpcError(request, error);
|
|
293
|
-
}
|
|
294
|
-
});
|
|
295
|
-
return router;
|
|
296
|
-
}
|
|
297
|
-
/**
|
|
298
|
-
* Instantiates a generic device-code handler for access-key bootstrap.
|
|
299
|
-
*
|
|
300
|
-
* Exposes 4 endpoints:
|
|
301
|
-
* - `GET /auth/pkce/pending/:code`
|
|
302
|
-
* - `POST /auth/pkce/code`
|
|
303
|
-
* - `POST /auth/pkce/poll/:code`
|
|
304
|
-
* - `POST /auth/pkce`
|
|
305
|
-
*
|
|
306
|
-
* @param options - Options.
|
|
307
|
-
* @returns Request handler.
|
|
308
|
-
*/
|
|
309
|
-
export function codeAuth(options = {}) {
|
|
310
|
-
const { chains = [tempo, tempoModerato], now, path = '/auth/pkce', policy, random, store = CliAuth.Store.memory(), transports = {}, ttlMs, ...rest } = options;
|
|
311
|
-
const clients = new Map();
|
|
312
|
-
for (const chain of chains) {
|
|
313
|
-
const transport = transports[chain.id] ?? http();
|
|
314
|
-
clients.set(chain.id, createClient({ chain, transport }));
|
|
315
|
-
}
|
|
316
|
-
function getClient(chainId) {
|
|
317
|
-
if (typeof chainId !== 'undefined') {
|
|
318
|
-
const id = Number(chainId);
|
|
319
|
-
const client = clients.get(id);
|
|
320
|
-
if (!client)
|
|
321
|
-
throw new Error(`Chain ${id} not configured`);
|
|
322
|
-
return client;
|
|
323
|
-
}
|
|
324
|
-
return clients.get(chains[0].id);
|
|
325
|
-
}
|
|
326
|
-
const router = from(rest);
|
|
327
|
-
router.get(`${path}/pending/:code`, async (c) => {
|
|
328
|
-
try {
|
|
329
|
-
const code = c.req.param('code');
|
|
330
|
-
const result = await CliAuth.pending({
|
|
331
|
-
code,
|
|
332
|
-
...(now ? { now } : {}),
|
|
333
|
-
store,
|
|
334
|
-
});
|
|
335
|
-
return Response.json(z.encode(CliAuth.pendingResponse, result));
|
|
336
|
-
}
|
|
337
|
-
catch (error) {
|
|
338
|
-
const status = error instanceof CliAuth.PendingError ? error.status : 400;
|
|
339
|
-
return Response.json({ error: error.message }, { status });
|
|
340
|
-
}
|
|
341
|
-
});
|
|
342
|
-
router.post(`${path}/code`, async (c) => {
|
|
343
|
-
try {
|
|
344
|
-
const request = z.decode(CliAuth.createRequest, await c.req.raw.json());
|
|
345
|
-
const chainId = request.chainId ?? chains[0].id;
|
|
346
|
-
getClient(chainId);
|
|
347
|
-
const result = await CliAuth.createDeviceCode({
|
|
348
|
-
chainId,
|
|
349
|
-
...(now ? { now } : {}),
|
|
350
|
-
...(policy ? { policy } : {}),
|
|
351
|
-
...(random ? { random } : {}),
|
|
352
|
-
request,
|
|
353
|
-
store,
|
|
354
|
-
...(typeof ttlMs !== 'undefined' ? { ttlMs } : {}),
|
|
355
|
-
});
|
|
356
|
-
return Response.json(z.encode(CliAuth.createResponse, result));
|
|
357
|
-
}
|
|
358
|
-
catch (error) {
|
|
359
|
-
return Response.json({ error: error.message }, { status: 400 });
|
|
360
|
-
}
|
|
361
|
-
});
|
|
362
|
-
router.post(`${path}/poll/:code`, async (c) => {
|
|
363
|
-
try {
|
|
364
|
-
const request = z.decode(CliAuth.pollRequest, await c.req.raw.json());
|
|
365
|
-
const code = c.req.param('code');
|
|
366
|
-
const result = await CliAuth.poll({
|
|
367
|
-
code,
|
|
368
|
-
...(now ? { now } : {}),
|
|
369
|
-
request,
|
|
370
|
-
store,
|
|
371
|
-
});
|
|
372
|
-
return Response.json(z.encode(CliAuth.pollResponse, result));
|
|
373
|
-
}
|
|
374
|
-
catch (error) {
|
|
375
|
-
return Response.json({ error: error.message }, { status: 400 });
|
|
376
|
-
}
|
|
377
|
-
});
|
|
378
|
-
router.post(path, async (c) => {
|
|
379
|
-
try {
|
|
380
|
-
const request = z.decode(CliAuth.authorizeRequest, await c.req.raw.json());
|
|
381
|
-
const result = await CliAuth.authorize({
|
|
382
|
-
client: getClient(request.keyAuthorization.chainId),
|
|
383
|
-
...(now ? { now } : {}),
|
|
384
|
-
request,
|
|
385
|
-
store,
|
|
386
|
-
});
|
|
387
|
-
return Response.json(z.encode(CliAuth.authorizeResponse, result));
|
|
388
|
-
}
|
|
389
|
-
catch (error) {
|
|
390
|
-
return Response.json({ error: error.message }, { status: 400 });
|
|
391
|
-
}
|
|
392
|
-
});
|
|
393
|
-
return router;
|
|
394
|
-
}
|
|
395
|
-
/**
|
|
396
|
-
* Instantiates a WebAuthn ceremony handler that manages registration and
|
|
397
|
-
* authentication flows server-side.
|
|
398
|
-
*
|
|
399
|
-
* Exposes 4 POST endpoints following the webauthx convention:
|
|
400
|
-
* - `POST /register/options` — generate credential creation options
|
|
401
|
-
* - `POST /register` — verify registration and store credential
|
|
402
|
-
* - `POST /login/options` — generate credential request options
|
|
403
|
-
* - `POST /login` — verify authentication
|
|
404
|
-
*
|
|
405
|
-
* @example
|
|
406
|
-
* ```ts
|
|
407
|
-
* import { Handler, Kv } from 'accounts/server'
|
|
408
|
-
*
|
|
409
|
-
* const handler = Handler.webAuthn({
|
|
410
|
-
* kv: Kv.memory(),
|
|
411
|
-
* origin: 'https://example.com',
|
|
412
|
-
* rpId: 'example.com',
|
|
413
|
-
* })
|
|
414
|
-
*
|
|
415
|
-
* export default handler
|
|
416
|
-
* ```
|
|
417
|
-
*
|
|
418
|
-
* @param options - Options.
|
|
419
|
-
* @returns Request handler.
|
|
420
|
-
*/
|
|
421
|
-
export function webAuthn(options) {
|
|
422
|
-
const { challengeTtl = 300, kv, onAuthenticate, onRegister, path = '', rpId, ...rest } = options;
|
|
423
|
-
const origin = options.origin;
|
|
424
|
-
const router = from(rest);
|
|
425
|
-
router.post(`${path}/register/options`, async (c) => {
|
|
426
|
-
try {
|
|
427
|
-
const body = await c.req.raw.json();
|
|
428
|
-
const { excludeCredentialIds, name, userId } = body;
|
|
429
|
-
const { challenge, options } = Registration.getOptions({
|
|
430
|
-
excludeCredentialIds,
|
|
431
|
-
name,
|
|
432
|
-
rp: { id: rpId, name: rpId },
|
|
433
|
-
...(userId ? { user: { id: new TextEncoder().encode(userId), name } } : undefined),
|
|
434
|
-
});
|
|
435
|
-
await kv.set(`challenge:${challenge}`, Date.now());
|
|
436
|
-
return Response.json({ options });
|
|
437
|
-
}
|
|
438
|
-
catch (error) {
|
|
439
|
-
return Response.json({ error: error.message }, { status: 400 });
|
|
440
|
-
}
|
|
441
|
-
});
|
|
442
|
-
router.post(`${path}/register`, async (c) => {
|
|
443
|
-
try {
|
|
444
|
-
const credential = (await c.req.raw.json());
|
|
445
|
-
const deserialized = Credential.deserialize(credential);
|
|
446
|
-
const clientData = JSON.parse(Bytes.toString(new Uint8Array(deserialized.clientDataJSON)));
|
|
447
|
-
const challenge = Hex.fromBytes(Base64.toBytes(clientData.challenge));
|
|
448
|
-
const stored = await kv.get(`challenge:${challenge}`);
|
|
449
|
-
if (!stored || Date.now() - stored > challengeTtl * 1_000)
|
|
450
|
-
throw new Error('Missing or expired challenge');
|
|
451
|
-
await kv.delete(`challenge:${challenge}`);
|
|
452
|
-
const result = Registration.verify(credential, {
|
|
453
|
-
challenge,
|
|
454
|
-
origin,
|
|
455
|
-
rpId,
|
|
456
|
-
});
|
|
457
|
-
const { publicKey } = result.credential;
|
|
458
|
-
const credentialId = credential.id;
|
|
459
|
-
await kv.set(`credential:${credentialId}`, { publicKey });
|
|
460
|
-
const json = { credentialId, publicKey };
|
|
461
|
-
const hook = await onRegister?.({ credentialId, publicKey, request: c.req.raw });
|
|
462
|
-
return mergeResponse(json, hook);
|
|
463
|
-
}
|
|
464
|
-
catch (error) {
|
|
465
|
-
return Response.json({ error: error.message }, { status: 400 });
|
|
466
|
-
}
|
|
467
|
-
});
|
|
468
|
-
router.post(`${path}/login/options`, async (c) => {
|
|
469
|
-
try {
|
|
470
|
-
const body = await c.req.raw.json();
|
|
471
|
-
const { allowCredentialIds, challenge: requestChallenge, credentialId, mediation, } = body;
|
|
472
|
-
const { challenge, options: authOptions } = Authentication.getOptions({
|
|
473
|
-
challenge: requestChallenge,
|
|
474
|
-
credentialId: allowCredentialIds ?? credentialId,
|
|
475
|
-
rpId,
|
|
476
|
-
});
|
|
477
|
-
const options = mediation ? { ...authOptions, mediation } : authOptions;
|
|
478
|
-
await kv.set(`challenge:${challenge}`, Date.now());
|
|
479
|
-
return Response.json({ options });
|
|
480
|
-
}
|
|
481
|
-
catch (error) {
|
|
482
|
-
return Response.json({ error: error.message }, { status: 400 });
|
|
483
|
-
}
|
|
484
|
-
});
|
|
485
|
-
router.post(`${path}/login`, async (c) => {
|
|
486
|
-
try {
|
|
487
|
-
const response = (await c.req.raw.json());
|
|
488
|
-
const clientData = JSON.parse(response.metadata.clientDataJSON);
|
|
489
|
-
const challenge = Hex.fromBytes(Base64.toBytes(clientData.challenge));
|
|
490
|
-
const stored = await kv.get(`challenge:${challenge}`);
|
|
491
|
-
if (!stored || Date.now() - stored > challengeTtl * 1_000)
|
|
492
|
-
throw new Error('Missing or expired challenge');
|
|
493
|
-
await kv.delete(`challenge:${challenge}`);
|
|
494
|
-
const credentialData = await kv.get(`credential:${response.id}`);
|
|
495
|
-
if (!credentialData)
|
|
496
|
-
throw new Error('Unknown credential');
|
|
497
|
-
const valid = Authentication.verify(response, {
|
|
498
|
-
challenge,
|
|
499
|
-
origin,
|
|
500
|
-
publicKey: credentialData.publicKey,
|
|
501
|
-
rpId,
|
|
502
|
-
});
|
|
503
|
-
if (!valid)
|
|
504
|
-
throw new Error('Authentication failed');
|
|
505
|
-
const rawResponse = response.raw?.response;
|
|
506
|
-
const userHandle = rawResponse?.userHandle;
|
|
507
|
-
const json = {
|
|
508
|
-
credentialId: response.id,
|
|
509
|
-
publicKey: credentialData.publicKey,
|
|
510
|
-
...(userHandle && userHandle.length > 0 ? { userId: userHandle } : undefined),
|
|
511
|
-
};
|
|
512
|
-
const hook = await onAuthenticate?.({ ...json, request: c.req.raw });
|
|
513
|
-
return mergeResponse(json, hook);
|
|
514
|
-
}
|
|
515
|
-
catch (error) {
|
|
516
|
-
return Response.json({ error: error.message }, { status: 400 });
|
|
517
|
-
}
|
|
518
|
-
});
|
|
519
|
-
return router;
|
|
520
|
-
}
|
|
521
|
-
/** @internal */
|
|
522
|
-
function resolveChainId(value) {
|
|
523
|
-
if (typeof value === 'number')
|
|
524
|
-
return value;
|
|
525
|
-
if (typeof value === 'bigint')
|
|
526
|
-
return Number(value);
|
|
527
|
-
if (typeof value === 'string' && Hex.validate(value))
|
|
528
|
-
return Hex.toNumber(value);
|
|
529
|
-
return undefined;
|
|
530
|
-
}
|
|
531
|
-
/** @internal */
|
|
532
|
-
function isPreparedFeePayerTransaction(value) {
|
|
533
|
-
return (typeof value.from === 'string' &&
|
|
534
|
-
typeof resolveChainId(value.chainId) === 'number' &&
|
|
535
|
-
typeof value.gas !== 'undefined' &&
|
|
536
|
-
typeof value.nonce !== 'undefined' &&
|
|
537
|
-
(typeof value.maxFeePerGas !== 'undefined' || typeof value.gasPrice !== 'undefined'));
|
|
538
|
-
}
|
|
539
|
-
/** @internal */
|
|
540
|
-
function formatFillTransactionRequest(client, value) {
|
|
541
|
-
const format = client.chain?.formatters?.transactionRequest?.format;
|
|
542
|
-
if (!format)
|
|
543
|
-
return value;
|
|
544
|
-
return format({ ...value }, 'fillTransaction');
|
|
545
|
-
}
|
|
546
|
-
/** @internal */
|
|
547
|
-
function normalizeFillTransactionRequest(value) {
|
|
548
|
-
if (typeof value.to !== 'undefined' || typeof value.data !== 'undefined')
|
|
549
|
-
return value;
|
|
550
|
-
if (!Array.isArray(value.calls) || value.calls.length !== 1)
|
|
551
|
-
return value;
|
|
552
|
-
const [call] = value.calls;
|
|
553
|
-
const { calls: _, ...rest } = value;
|
|
554
|
-
return {
|
|
555
|
-
...rest,
|
|
556
|
-
...(typeof call?.data !== 'undefined' ? { data: call.data } : {}),
|
|
557
|
-
...(typeof call?.to !== 'undefined' ? { to: call.to } : {}),
|
|
558
|
-
...(typeof call?.value !== 'undefined' ? { value: normalizeFillValue(call.value) } : {}),
|
|
559
|
-
};
|
|
560
|
-
}
|
|
561
|
-
/** @internal */
|
|
562
|
-
function normalizeFillValue(value) {
|
|
563
|
-
if (typeof value !== 'string' || !value.startsWith('0x'))
|
|
564
|
-
return value;
|
|
565
|
-
return BigInt(value === '0x' ? '0x0' : value);
|
|
566
|
-
}
|
|
567
|
-
/** @internal */
|
|
568
|
-
function normalizeTempoTransaction(value) {
|
|
569
|
-
if (!value)
|
|
570
|
-
throw new Error('Expected `tx` in eth_fillTransaction response.');
|
|
571
|
-
return core_Transaction.fromRpc({ type: '0x76', ...value });
|
|
572
|
-
}
|
|
573
|
-
/** @internal */
|
|
574
|
-
function rpcError(request, error) {
|
|
575
|
-
if (error instanceof RpcResponse.InvalidParamsError)
|
|
576
|
-
return Response.json(RpcResponse.from({ error }, { request }));
|
|
577
|
-
if (error instanceof RpcResponse.MethodNotSupportedError)
|
|
578
|
-
return Response.json(RpcResponse.from({ error }, { request }));
|
|
579
|
-
if (error.name === 'ZodError')
|
|
580
|
-
return Response.json(RpcResponse.from({
|
|
581
|
-
error: new RpcResponse.InvalidParamsError({
|
|
582
|
-
message: error.message,
|
|
583
|
-
}),
|
|
584
|
-
}, { request }));
|
|
585
|
-
return Response.json(RpcResponse.from({
|
|
586
|
-
error: new RpcResponse.InternalError({
|
|
587
|
-
message: error.message,
|
|
588
|
-
}),
|
|
589
|
-
}, { request }));
|
|
590
|
-
}
|
|
591
|
-
/** @internal */
|
|
592
|
-
function rpcResult(request, result) {
|
|
593
|
-
return Response.json(RpcResponse.from({ result }, { request }));
|
|
594
|
-
}
|
|
595
|
-
/** @internal */
|
|
596
|
-
function toSerializedTransaction(value) {
|
|
597
|
-
if (typeof value === 'string')
|
|
598
|
-
return value;
|
|
599
|
-
if (value && typeof value === 'object' && 'raw' in value && typeof value.raw === 'string')
|
|
600
|
-
return value.raw;
|
|
601
|
-
throw new Error('Expected a serialized transaction result.');
|
|
602
|
-
}
|
|
603
|
-
/** @internal */
|
|
604
|
-
async function mergeResponse(json, hook) {
|
|
605
|
-
if (!hook)
|
|
606
|
-
return Response.json(json);
|
|
607
|
-
const extra = (await hook.json().catch(() => ({})));
|
|
608
|
-
const headers = new Headers(hook.headers);
|
|
609
|
-
headers.set('content-type', 'application/json');
|
|
610
|
-
return new Response(JSON.stringify({ ...json, ...extra }), {
|
|
611
|
-
headers,
|
|
612
|
-
status: hook.status,
|
|
613
|
-
});
|
|
614
|
-
}
|
|
615
|
-
/** @internal */
|
|
616
48
|
function normalizeHeaders(headers) {
|
|
617
49
|
if (!headers)
|
|
618
50
|
return new Headers();
|
|
@@ -620,7 +52,6 @@ function normalizeHeaders(headers) {
|
|
|
620
52
|
return headers;
|
|
621
53
|
return new Headers(headers);
|
|
622
54
|
}
|
|
623
|
-
/** @internal */
|
|
624
55
|
function corsToHeaders(cors) {
|
|
625
56
|
if (cors === false)
|
|
626
57
|
return new Headers();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Handler.js","sourceRoot":"","sources":["../../src/server/Handler.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Handler.js","sourceRoot":"","sources":["../../src/server/Handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { Chain, Transport } from 'viem';
|
|
2
|
+
import * as CliAuth from '../../CliAuth.js';
|
|
3
|
+
import { type Handler, from } from '../../Handler.js';
|
|
4
|
+
/**
|
|
5
|
+
* Instantiates a generic device-code handler for access-key bootstrap.
|
|
6
|
+
*
|
|
7
|
+
* Exposes 4 endpoints:
|
|
8
|
+
* - `GET /auth/pkce/pending/:code`
|
|
9
|
+
* - `POST /auth/pkce/code`
|
|
10
|
+
* - `POST /auth/pkce/poll/:code`
|
|
11
|
+
* - `POST /auth/pkce`
|
|
12
|
+
*
|
|
13
|
+
* @param options - Options.
|
|
14
|
+
* @returns Request handler.
|
|
15
|
+
*/
|
|
16
|
+
export declare function codeAuth(options?: codeAuth.Options): Handler;
|
|
17
|
+
export declare namespace codeAuth {
|
|
18
|
+
type Options = from.Options & {
|
|
19
|
+
/**
|
|
20
|
+
* Supported chains. The handler resolves the client based on chain IDs carried
|
|
21
|
+
* by device-code requests and key authorizations.
|
|
22
|
+
* @default [tempo, tempoModerato]
|
|
23
|
+
*/
|
|
24
|
+
chains?: readonly [Chain, ...Chain[]] | undefined;
|
|
25
|
+
/** Time source used for TTL evaluation. */
|
|
26
|
+
now?: (() => number) | undefined;
|
|
27
|
+
/** Path prefix for the code auth endpoints. @default "/auth/pkce" */
|
|
28
|
+
path?: string | undefined;
|
|
29
|
+
/** Policy used to validate and default requested CLI auth fields. */
|
|
30
|
+
policy?: CliAuth.Policy | undefined;
|
|
31
|
+
/** Random byte generator used for device-code allocation. */
|
|
32
|
+
random?: ((size: number) => Uint8Array) | undefined;
|
|
33
|
+
/** Device-code store. */
|
|
34
|
+
store?: CliAuth.Store | undefined;
|
|
35
|
+
/** Transports keyed by chain ID. Defaults to `http()` for each chain. */
|
|
36
|
+
transports?: Record<number, Transport> | undefined;
|
|
37
|
+
/** Pending entry TTL in milliseconds. @default 600000 */
|
|
38
|
+
ttlMs?: number | undefined;
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=codeAuth.d.ts.map
|