Replaces the v0.4.x sessionModule(opts: SessionModuleOptions): Module
factory. Caller surface:
import { sessionModule } from "@o3co/auth-provider-session";
// pass directly to the manifest list — sessionModule is a
// pre-built Module value, not a factory; dependencies
// (userRepository, userSessionStore, etc.) flow in through
// sibling defineModule(...) modules that produce them.
Two route contributions, both mounted at /session (intentional named-route
bundle per Codex Session 06 Q6):
"session-routes" — POST /session/login, POST /session/logout
"federation-routes" — GET /session/oauth/federation/:name (+ callback)
requires (Amendment 5):
"config", "userRepository" — bootstrap / DI
"userSessionStore", "federationTokenStore", "sessionFederationIndex" —
three sibling stores actually consumed by these routes (NOT the four-store
superset; sessionRPRegistry and sessionFamilyIndex are oauth-package
concerns per module.mts:84 / :248 audit pre-conversion).
"federationProviders" — synthetic (planner-derived from per-federation
federations.<name> contributions).
"federationRedirectPolicyResolver" — synthetic per A5 §7 (planner-derived
from federationRedirectPolicies.<name> contributions).
providerCallbackUrls is derived from config.federations inside the
federation-routes lambda — a route-local config projection, not a synthetic
key. Per A2-γ §11.5 synthetic keys are reserved for planner projections of
contribution kinds; callback URLs are config-driven and have no contribution
surface, so route-local derivation is the correct level (verified Codex
2026-05-01).
Theme B (one responsibility), Theme D (immutable const shape, no ctx mutation),
Theme E (typed deps replace lazy ctx closures + factory option indirection).
Const Module for the session and federation route surface.
Per A2-γ §3.4 + Amendment 5 (§1.1.5) + Amendment 6 (§1.1.6).
Replaces the v0.4.x
sessionModule(opts: SessionModuleOptions): Modulefactory. Caller surface:import { sessionModule } from "@o3co/auth-provider-session"; // pass directly to the manifest list —
sessionModuleis a // pre-builtModulevalue, not a factory; dependencies // (userRepository,userSessionStore, etc.) flow in through // siblingdefineModule(...)modules that produce them.Two route contributions, both mounted at
/session(intentional named-route bundle per Codex Session 06 Q6):requires(Amendment 5):sessionRPRegistryandsessionFamilyIndexare oauth-package concerns permodule.mts:84/:248audit pre-conversion).federations.<name>contributions).federationRedirectPolicies.<name>contributions).providerCallbackUrlsis derived fromconfig.federationsinside the federation-routes lambda — a route-local config projection, not a synthetic key. Per A2-γ §11.5 synthetic keys are reserved for planner projections of contribution kinds; callback URLs are config-driven and have no contribution surface, so route-local derivation is the correct level (verified Codex 2026-05-01).Theme B (one responsibility), Theme D (immutable const shape, no ctx mutation), Theme E (typed deps replace lazy ctx closures + factory option indirection).