diff --git a/README.md b/README.md index f667b72..d46285d 100644 --- a/README.md +++ b/README.md @@ -1777,7 +1777,7 @@ src/ The app — strict tsc, no build step. *.test.ts sit beside auth/ Identity + the session-JWT hot path: jwt · jwt-middleware · jwks · gen-jwks (CLI) · login · guards · csrf · denylist · flow-view · oauth-login · oauth-consent · routes · bootstrap, and the Ory REST clients (kratos-public/admin, keto, hydra, - fetch-timeout) + link-header, fetch-timeout) i18n/ catalog (parity rules) · locale (resolution) · translate · load · runtime · english · view-locals · locales/ (the core en-US + sv-SE catalogs) plugin-host/ plugin.ts (the contract) · plugin-api.ts (the `@plainpages/plugin-api` barrel) · system.ts diff --git a/examples/plugins/auth-admin/admin-shared.ts b/examples/plugins/auth-admin/admin-shared.ts index fed5721..1a320a3 100644 --- a/examples/plugins/auth-admin/admin-shared.ts +++ b/examples/plugins/auth-admin/admin-shared.ts @@ -1,6 +1,4 @@ -// Shared plumbing for the admin example plugin: the section nav fragment, the screen gate, the -// CSRF-guarded form reader, the destructive-confirm model builder, the form-field type, the Keto -// paging loop, and small RouteResult helpers. +// Shared plumbing for the admin example plugin's screens. // Everything imports the host only through the @plainpages/plugin-api barrel. import { can, CSRF_FIELD, englishTranslator, GuardError, type KetoClient, type NavNode, readFormBody, type RelationQuery, type RelationTuple, type RequestContext, requireSession, type RouteResult, type Translate, type User } from "@plainpages/plugin-api"; diff --git a/src/auth/link-header.ts b/src/auth/link-header.ts index 70295df..0da47b3 100644 --- a/src/auth/link-header.ts +++ b/src/auth/link-header.ts @@ -1,6 +1,5 @@ -// Kratos and Hydra both paginate with an RFC 8288 `Link` header. Returns the `page_token` of its -// `rel="next"` entry, or null on the last page. The href is a relative path, so it is resolved -// against a throwaway base just to read the query parameter. +// The `page_token` of a `Link` header's `rel="next"` entry (Kratos and Hydra paginate with it), or +// null when there is none. The href is relative, so it is resolved against a throwaway base. export function nextPageToken(link: string | null): string | null { const href = link?.match(/<([^>]+)>\s*;\s*rel="next"/)?.[1]; return href ? new URL(href, "http://link-header.invalid").searchParams.get("page_token") : null;