auth/request_context.ts

Request context middleware and permit checking helpers.

Builds { account, actor, permits } from a session cookie for every authenticated request. Downstream handlers check permits, never flags.

build_request_context is the shared helper used by session, bearer, and daemon token middleware to resolve account → actor → permits. refresh_permits reloads permits on an existing context.

Declarations
#

10 declarations

view source

build_request_context
#

auth/request_context.ts view source

(deps: QueryDeps, account_id: string): Promise<RequestContext | null>

Build a full RequestContext from an account id.

Shared helper used by session, bearer, and daemon token middleware, as well as WebSocket upgrade handlers. Does the account → actor → permits lookup pipeline and returns the composed context, or null if the account or actor is not found.

deps

query dependencies

account_id

the account to build context for

type string

returns

Promise<RequestContext | null>

a request context, or null if account/actor not found

create_request_context_middleware
#

auth/request_context.ts view source

(deps: QueryDeps, log: Logger, session_context_key?: string): MiddlewareHandler

Create middleware that builds the request context from a session cookie.

Reads the session identity (set by session middleware), looks up the auth_session, loads account + actor + active permits, and sets the RequestContext on the Hono context.

If the session is invalid or the account is not found, the context is set to null (unauthenticated). No 401 is returned — use require_role or require_auth for enforcement.

deps

query dependencies (pool-level db for middleware)

log

the logger instance

type Logger

session_context_key

the Hono context key where session middleware stored the session token

type string
default 'auth_session_id'

returns

MiddlewareHandler

get_request_context
#

auth/request_context.ts view source

(c: Context<any, any, {}>): RequestContext | null

Get the request context from a Hono context, or null if unauthenticated.

c

the Hono context

type Context<any, any, {}>

returns

RequestContext | null

the request context, or null

has_role
#

auth/request_context.ts view source

(ctx: RequestContext, role: string, now?: Date): boolean

Check if a request context has an active permit for a given role.

Checks the permits already loaded in the context (no DB query).

ctx

the request context

role

the role to check

type string

now

current time (defaults to new Date(), pass for testability and hot-path efficiency)

type Date
default new Date()

returns

boolean

true if the actor has an active permit for the role

refresh_permits
#

auth/request_context.ts view source

(ctx: RequestContext, deps: QueryDeps): Promise<RequestContext>

Reload active permits from the database, returning a new request context.

Useful for long-lived WebSocket connections where permits may change (grant or revoke) during the connection lifetime. Call periodically or after receiving a revocation signal.

Returns a new RequestContext with updated permits — the original context is not mutated, making concurrent calls safe.

ctx

the request context to refresh

deps

query dependencies

returns

Promise<RequestContext>

a new RequestContext with fresh permits

REQUEST_CONTEXT_KEY
#

RequestContext
#

require_auth
#

auth/request_context.ts view source

(c: Context<any, string, {}>, next: Next): Promise<void | Response>

Middleware that requires authentication.

Returns 401 if no request context is set.

c

type Context<any, string, {}>

next

type Next

returns

Promise<void | Response>

require_request_context
#

auth/request_context.ts view source

(c: Context<any, any, {}>): RequestContext

Get the request context, throwing if unauthenticated.

Use in route handlers where auth middleware guarantees a context exists (i.e., routes with auth: {type: 'authenticated'} or stricter). Prefer this over get_request_context(c)! for explicit error handling.

c

the Hono context

type Context<any, any, {}>

returns

RequestContext

the request context (never null)

throws

  • Error - if no request context is set (middleware misconfiguration)

require_role
#

auth/request_context.ts view source

(role: string): MiddlewareHandler

Create middleware that requires a specific role.

Returns 401 if unauthenticated, 403 if the role is missing.

role

the required role

type string

returns

MiddlewareHandler

Depends on
#

Imported by
#