| |
| |
| |
| |
| |
| |
|
|
| import type { PluginRegistry } from "./registry.js"; |
| import type { PluginHookGatewayContext, PluginHookGatewayStopEvent } from "./types.js"; |
| import { createSubsystemLogger } from "../logging/subsystem.js"; |
| import { createHookRunner, type HookRunner } from "./hooks.js"; |
|
|
| const log = createSubsystemLogger("plugins"); |
|
|
| let globalHookRunner: HookRunner | null = null; |
| let globalRegistry: PluginRegistry | null = null; |
|
|
| |
| |
| |
| |
| export function initializeGlobalHookRunner(registry: PluginRegistry): void { |
| globalRegistry = registry; |
| globalHookRunner = createHookRunner(registry, { |
| logger: { |
| debug: (msg) => log.debug(msg), |
| warn: (msg) => log.warn(msg), |
| error: (msg) => log.error(msg), |
| }, |
| catchErrors: true, |
| }); |
|
|
| const hookCount = registry.hooks.length; |
| if (hookCount > 0) { |
| log.info(`hook runner initialized with ${hookCount} registered hooks`); |
| } |
| } |
|
|
| |
| |
| |
| |
| export function getGlobalHookRunner(): HookRunner | null { |
| return globalHookRunner; |
| } |
|
|
| |
| |
| |
| |
| export function getGlobalPluginRegistry(): PluginRegistry | null { |
| return globalRegistry; |
| } |
|
|
| |
| |
| |
| export function hasGlobalHooks(hookName: Parameters<HookRunner["hasHooks"]>[0]): boolean { |
| return globalHookRunner?.hasHooks(hookName) ?? false; |
| } |
|
|
| export async function runGlobalGatewayStopSafely(params: { |
| event: PluginHookGatewayStopEvent; |
| ctx: PluginHookGatewayContext; |
| onError?: (err: unknown) => void; |
| }): Promise<void> { |
| const hookRunner = getGlobalHookRunner(); |
| if (!hookRunner?.hasHooks("gateway_stop")) { |
| return; |
| } |
| try { |
| await hookRunner.runGatewayStop(params.event, params.ctx); |
| } catch (err) { |
| if (params.onError) { |
| params.onError(err); |
| return; |
| } |
| log.warn(`gateway_stop hook failed: ${String(err)}`); |
| } |
| } |
|
|
| |
| |
| |
| export function resetGlobalHookRunner(): void { |
| globalHookRunner = null; |
| globalRegistry = null; |
| } |
|
|