import { closeTaskRegistrySqliteStore, deleteTaskDeliveryStateFromSqlite, deleteTaskRegistryRecordFromSqlite, loadTaskRegistryStateFromSqlite, saveTaskRegistryStateToSqlite, upsertTaskDeliveryStateToSqlite, upsertTaskRegistryRecordToSqlite, } from "./task-registry.store.sqlite.js"; import type { TaskDeliveryState, TaskRecord } from "./task-registry.types.js"; export type TaskRegistryStoreSnapshot = { tasks: Map; deliveryStates: Map; }; export type TaskRegistryStore = { loadSnapshot: () => TaskRegistryStoreSnapshot; saveSnapshot: (snapshot: TaskRegistryStoreSnapshot) => void; upsertTask?: (task: TaskRecord) => void; deleteTask?: (taskId: string) => void; upsertDeliveryState?: (state: TaskDeliveryState) => void; deleteDeliveryState?: (taskId: string) => void; close?: () => void; }; export type TaskRegistryHookEvent = | { kind: "restored"; tasks: TaskRecord[]; } | { kind: "upserted"; task: TaskRecord; previous?: TaskRecord; } | { kind: "deleted"; taskId: string; previous: TaskRecord; }; export type TaskRegistryHooks = { // Hooks are incremental/observational. Snapshot persistence belongs to TaskRegistryStore. onEvent?: (event: TaskRegistryHookEvent) => void; }; const defaultTaskRegistryStore: TaskRegistryStore = { loadSnapshot: loadTaskRegistryStateFromSqlite, saveSnapshot: saveTaskRegistryStateToSqlite, upsertTask: upsertTaskRegistryRecordToSqlite, deleteTask: deleteTaskRegistryRecordFromSqlite, upsertDeliveryState: upsertTaskDeliveryStateToSqlite, deleteDeliveryState: deleteTaskDeliveryStateFromSqlite, close: closeTaskRegistrySqliteStore, }; let configuredTaskRegistryStore: TaskRegistryStore = defaultTaskRegistryStore; let configuredTaskRegistryHooks: TaskRegistryHooks | null = null; export function getTaskRegistryStore(): TaskRegistryStore { return configuredTaskRegistryStore; } export function getTaskRegistryHooks(): TaskRegistryHooks | null { return configuredTaskRegistryHooks; } export function configureTaskRegistryRuntime(params: { store?: TaskRegistryStore; hooks?: TaskRegistryHooks | null; }) { if (params.store) { configuredTaskRegistryStore = params.store; } if ("hooks" in params) { configuredTaskRegistryHooks = params.hooks ?? null; } } export function resetTaskRegistryRuntimeForTests() { configuredTaskRegistryStore.close?.(); configuredTaskRegistryStore = defaultTaskRegistryStore; configuredTaskRegistryHooks = null; }