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.
- package/CHANGELOG.md +13 -0
- package/README.md +38 -7
- package/dist/cli/Provider.d.ts +12 -0
- package/dist/cli/Provider.d.ts.map +1 -0
- package/dist/cli/Provider.js +19 -0
- package/dist/cli/Provider.js.map +1 -0
- package/dist/cli/adapter.d.ts +24 -0
- package/dist/cli/adapter.d.ts.map +1 -0
- package/dist/cli/adapter.js +173 -0
- package/dist/cli/adapter.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +3 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/Dialog.d.ts.map +1 -1
- package/dist/core/Dialog.js +25 -1
- package/dist/core/Dialog.js.map +1 -1
- package/dist/core/IntersectionObserver.d.ts +3 -0
- package/dist/core/IntersectionObserver.d.ts.map +1 -0
- package/dist/core/IntersectionObserver.js +6 -0
- package/dist/core/IntersectionObserver.js.map +1 -0
- package/dist/core/Messenger.d.ts +14 -3
- package/dist/core/Messenger.d.ts.map +1 -1
- package/dist/core/Messenger.js +4 -4
- package/dist/core/Messenger.js.map +1 -1
- package/dist/core/Remote.d.ts +6 -3
- package/dist/core/Remote.d.ts.map +1 -1
- package/dist/core/Remote.js +3 -6
- package/dist/core/Remote.js.map +1 -1
- package/dist/core/adapters/local.d.ts.map +1 -1
- package/dist/core/adapters/local.js +2 -2
- package/dist/core/adapters/local.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/react/Remote.d.ts +21 -0
- package/dist/react/Remote.d.ts.map +1 -0
- package/dist/react/Remote.js +51 -0
- package/dist/react/Remote.js.map +1 -0
- package/dist/react/index.d.ts +2 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +2 -0
- package/dist/react/index.js.map +1 -0
- package/dist/server/CliAuth.d.ts +553 -0
- package/dist/server/CliAuth.d.ts.map +1 -0
- package/dist/server/CliAuth.js +446 -0
- package/dist/server/CliAuth.js.map +1 -0
- package/dist/server/Handler.d.ts +36 -2
- package/dist/server/Handler.d.ts.map +1 -1
- package/dist/server/Handler.js +84 -0
- package/dist/server/Handler.js.map +1 -1
- package/dist/server/index.d.ts +1 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +1 -0
- package/dist/server/index.js.map +1 -1
- package/package.json +16 -54
- package/src/cli/Provider.test-d.ts +28 -0
- package/src/cli/Provider.test.ts +235 -0
- package/src/cli/Provider.ts +26 -0
- package/src/cli/adapter.ts +229 -0
- package/src/cli/index.ts +2 -0
- package/src/core/Dialog.ts +31 -1
- package/src/core/IntersectionObserver.ts +6 -0
- package/src/core/Messenger.ts +18 -8
- package/src/core/Provider.test.ts +12 -2
- package/src/core/Remote.ts +9 -10
- package/src/core/adapters/local.ts +7 -2
- package/src/index.ts +1 -0
- package/src/react/Remote.ts +94 -0
- package/src/react/index.ts +1 -0
- package/src/server/CliAuth.test-d.ts +56 -0
- package/src/server/CliAuth.test.ts +800 -0
- package/src/server/CliAuth.ts +634 -0
- package/src/server/Handler.ts +123 -1
- package/src/server/index.ts +1 -0
package/src/server/Handler.ts
CHANGED
|
@@ -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
|
|
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.
|
package/src/server/index.ts
CHANGED