/**
* modules/session-identity.ts — the session-identity domain as a registered Papyrus-native
* module. Deliberately self-contained: no artifact/task infrastructure imports, matching the
* precedent set by modules/logs.ts. See domain/session-identity.ts for the design rationale.
*/
import type { OperationDefinition } from "../module-registry.ts";
import type { SessionIdentity } from "../session-identity/session-identity-service.ts";
import { type OperationInput, optionalString, string } from "./operation-input.ts";
const MODULE_ID = "session-identity";
/** This module's own operation names, the single source of truth src/service.ts's EXPECTED_OPERATION_NAMES spreads in rather than re-listing by hand. */
export const SESSION_IDENTITY_OPERATION_NAMES = ["session.register", "session.release"] as const;
/** Registers every session.* operation against one SessionIdentity instance. */
export function sessionIdentityOperations(sessionIdentity: SessionIdentity): OperationDefinition[] {
const define = (name: string, execute: (input: Input) => Output): OperationDefinition => ({
name,
moduleId: MODULE_ID,
execute,
});
return [
define("session.register", (input: OperationInput) => sessionIdentity.register(string(input, "session_id"))),
define("session.release", (input: OperationInput) =>
sessionIdentity.release(string(input, "session_id"), optionalString(input, "session_secret")),
),
];
}