accounts 0.4.0 → 0.4.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.
Files changed (76) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +38 -7
  3. package/dist/cli/Provider.d.ts +12 -0
  4. package/dist/cli/Provider.d.ts.map +1 -0
  5. package/dist/cli/Provider.js +19 -0
  6. package/dist/cli/Provider.js.map +1 -0
  7. package/dist/cli/adapter.d.ts +24 -0
  8. package/dist/cli/adapter.d.ts.map +1 -0
  9. package/dist/cli/adapter.js +173 -0
  10. package/dist/cli/adapter.js.map +1 -0
  11. package/dist/cli/index.d.ts +3 -0
  12. package/dist/cli/index.d.ts.map +1 -0
  13. package/dist/cli/index.js +3 -0
  14. package/dist/cli/index.js.map +1 -0
  15. package/dist/core/Dialog.d.ts.map +1 -1
  16. package/dist/core/Dialog.js +25 -1
  17. package/dist/core/Dialog.js.map +1 -1
  18. package/dist/core/IntersectionObserver.d.ts +3 -0
  19. package/dist/core/IntersectionObserver.d.ts.map +1 -0
  20. package/dist/core/IntersectionObserver.js +6 -0
  21. package/dist/core/IntersectionObserver.js.map +1 -0
  22. package/dist/core/Messenger.d.ts +14 -3
  23. package/dist/core/Messenger.d.ts.map +1 -1
  24. package/dist/core/Messenger.js +4 -4
  25. package/dist/core/Messenger.js.map +1 -1
  26. package/dist/core/Remote.d.ts +6 -3
  27. package/dist/core/Remote.d.ts.map +1 -1
  28. package/dist/core/Remote.js +3 -6
  29. package/dist/core/Remote.js.map +1 -1
  30. package/dist/core/adapters/local.d.ts.map +1 -1
  31. package/dist/core/adapters/local.js +2 -2
  32. package/dist/core/adapters/local.js.map +1 -1
  33. package/dist/index.d.ts +1 -0
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +1 -0
  36. package/dist/index.js.map +1 -1
  37. package/dist/react/Remote.d.ts +21 -0
  38. package/dist/react/Remote.d.ts.map +1 -0
  39. package/dist/react/Remote.js +51 -0
  40. package/dist/react/Remote.js.map +1 -0
  41. package/dist/react/index.d.ts +2 -0
  42. package/dist/react/index.d.ts.map +1 -0
  43. package/dist/react/index.js +2 -0
  44. package/dist/react/index.js.map +1 -0
  45. package/dist/server/CliAuth.d.ts +553 -0
  46. package/dist/server/CliAuth.d.ts.map +1 -0
  47. package/dist/server/CliAuth.js +446 -0
  48. package/dist/server/CliAuth.js.map +1 -0
  49. package/dist/server/Handler.d.ts +36 -2
  50. package/dist/server/Handler.d.ts.map +1 -1
  51. package/dist/server/Handler.js +84 -0
  52. package/dist/server/Handler.js.map +1 -1
  53. package/dist/server/index.d.ts +1 -0
  54. package/dist/server/index.d.ts.map +1 -1
  55. package/dist/server/index.js +1 -0
  56. package/dist/server/index.js.map +1 -1
  57. package/package.json +16 -54
  58. package/src/cli/Provider.test-d.ts +28 -0
  59. package/src/cli/Provider.test.ts +235 -0
  60. package/src/cli/Provider.ts +26 -0
  61. package/src/cli/adapter.ts +229 -0
  62. package/src/cli/index.ts +2 -0
  63. package/src/core/Dialog.ts +31 -1
  64. package/src/core/IntersectionObserver.ts +6 -0
  65. package/src/core/Messenger.ts +18 -8
  66. package/src/core/Provider.test.ts +12 -2
  67. package/src/core/Remote.ts +9 -10
  68. package/src/core/adapters/local.ts +7 -2
  69. package/src/index.ts +1 -0
  70. package/src/react/Remote.ts +94 -0
  71. package/src/react/index.ts +1 -0
  72. package/src/server/CliAuth.test-d.ts +56 -0
  73. package/src/server/CliAuth.test.ts +800 -0
  74. package/src/server/CliAuth.ts +634 -0
  75. package/src/server/Handler.ts +123 -1
  76. package/src/server/index.ts +1 -0
@@ -16,7 +16,9 @@ import {
16
16
  Registration,
17
17
  type Registration as Registration_Types,
18
18
  } from 'webauthx/server'
19
+ import * as z from 'zod/mini'
19
20
 
21
+ import * as CliAuth from './CliAuth.js'
20
22
  import * as RequestListener from './internal/requestListener.js'
21
23
  import type { Kv } from './Kv.js'
22
24
 
@@ -25,7 +27,7 @@ export type Handler = Omit<Router, 'fetch'> & {
25
27
  listener: (req: any, res: any) => void
26
28
  }
27
29
 
28
- export function compose(handlers: Handler[], options: compose.Options = {}): Handler {
30
+ export function compose(handlers: Array<Handler>, options: compose.Options = {}): Handler {
29
31
  const path = options.path ?? '/'
30
32
 
31
33
  return from({
@@ -354,6 +356,126 @@ export declare namespace feePayer {
354
356
  }
355
357
  }
356
358
 
359
+ /**
360
+ * Instantiates a generic device-code handler for access-key bootstrap.
361
+ *
362
+ * Exposes 4 endpoints:
363
+ * - `GET /auth/pkce/pending/:code`
364
+ * - `POST /auth/pkce/code`
365
+ * - `POST /auth/pkce/poll/:code`
366
+ * - `POST /auth/pkce`
367
+ *
368
+ * @param options - Options.
369
+ * @returns Request handler.
370
+ */
371
+ export function codeAuth(options: codeAuth.Options = {}): Handler {
372
+ const {
373
+ chainId,
374
+ client,
375
+ now,
376
+ path = '/auth/pkce',
377
+ policy,
378
+ random,
379
+ store = CliAuth.Store.memory(),
380
+ ttlMs,
381
+ ...rest
382
+ } = options
383
+
384
+ const router = from(rest)
385
+
386
+ router.get(`${path}/pending/:code`, async ({ params }) => {
387
+ try {
388
+ const { code } = params as { code: string }
389
+ const result = await CliAuth.pending({
390
+ code,
391
+ ...(now ? { now } : {}),
392
+ store,
393
+ })
394
+
395
+ return Response.json(z.encode(CliAuth.pendingResponse, result))
396
+ } catch (error) {
397
+ const status = error instanceof CliAuth.PendingError ? error.status : 400
398
+ return Response.json({ error: (error as Error).message }, { status })
399
+ }
400
+ })
401
+
402
+ router.post(`${path}/code`, async ({ request: req }) => {
403
+ try {
404
+ const request = z.decode(CliAuth.createRequest, await req.json())
405
+ const result = await CliAuth.createDeviceCode({
406
+ ...(typeof chainId !== 'undefined' ? { chainId } : {}),
407
+ ...(now ? { now } : {}),
408
+ ...(policy ? { policy } : {}),
409
+ ...(random ? { random } : {}),
410
+ request,
411
+ store,
412
+ ...(typeof ttlMs !== 'undefined' ? { ttlMs } : {}),
413
+ })
414
+
415
+ return Response.json(z.encode(CliAuth.createResponse, result))
416
+ } catch (error) {
417
+ return Response.json({ error: (error as Error).message }, { status: 400 })
418
+ }
419
+ })
420
+
421
+ router.post(`${path}/poll/:code`, async ({ params, request: req }) => {
422
+ try {
423
+ const request = z.decode(CliAuth.pollRequest, await req.json())
424
+ const { code } = params as { code: string }
425
+ const result = await CliAuth.poll({
426
+ code,
427
+ ...(now ? { now } : {}),
428
+ request,
429
+ store,
430
+ })
431
+
432
+ return Response.json(z.encode(CliAuth.pollResponse, result))
433
+ } catch (error) {
434
+ return Response.json({ error: (error as Error).message }, { status: 400 })
435
+ }
436
+ })
437
+
438
+ router.post(path, async ({ request: req }) => {
439
+ try {
440
+ const request = z.decode(CliAuth.authorizeRequest, await req.json())
441
+ const result = await CliAuth.authorize({
442
+ ...(typeof chainId !== 'undefined' ? { chainId } : {}),
443
+ ...(client ? { client } : {}),
444
+ ...(now ? { now } : {}),
445
+ request,
446
+ store,
447
+ })
448
+
449
+ return Response.json(z.encode(CliAuth.authorizeResponse, result))
450
+ } catch (error) {
451
+ return Response.json({ error: (error as Error).message }, { status: 400 })
452
+ }
453
+ })
454
+
455
+ return router
456
+ }
457
+
458
+ export declare namespace codeAuth {
459
+ export type Options = from.Options & {
460
+ /** Chain ID embedded into authorized access keys. Defaults to the client chain or tempo.id. */
461
+ chainId?: bigint | number | undefined
462
+ /** Client used to verify signed key authorizations. */
463
+ client?: Client<Transport, Chain | undefined> | undefined
464
+ /** Time source used for TTL evaluation. */
465
+ now?: (() => number) | undefined
466
+ /** Path prefix for the code auth endpoints. @default "/auth/pkce" */
467
+ path?: string | undefined
468
+ /** Policy used to validate and default requested CLI auth fields. */
469
+ policy?: CliAuth.Policy | undefined
470
+ /** Random byte generator used for device-code allocation. */
471
+ random?: ((size: number) => Uint8Array) | undefined
472
+ /** Device-code store. */
473
+ store?: CliAuth.Store | undefined
474
+ /** Pending entry TTL in milliseconds. @default 600000 */
475
+ ttlMs?: number | undefined
476
+ }
477
+ }
478
+
357
479
  /**
358
480
  * Instantiates a WebAuthn ceremony handler that manages registration and
359
481
  * authentication flows server-side.
@@ -1,2 +1,3 @@
1
+ export * as CliAuth from './CliAuth.js'
1
2
  export * as Handler from './Handler.js'
2
3
  export * as Kv from './Kv.js'