1/**
2 * Provider event logging as the server offers it to drivers: one stream for
3 * the provider's native protocol frames and one for canonical orchestration
4 * events. Either logger is absent when diagnostics logging could not start.
5 *
6 * @module provider-core/server/ProviderEventLoggers
7 */
8import type { ThreadId } from "@t3tools/contracts";
9import * as Context from "effect/Context";
10import type * as Effect from "effect/Effect";
11
12export interface EventNdjsonLogger {
13 readonly filePath: string;
14 readonly write: (event: unknown, threadId: ThreadId | null) => Effect.Effect<void>;
15 readonly close: () => Effect.Effect<void>;
16}
17
18export class ProviderEventLoggers extends Context.Service<
19 ProviderEventLoggers,
20 {
21 readonly native: EventNdjsonLogger | undefined;
22 readonly canonical: EventNdjsonLogger | undefined;
23 }
24>()("@t3tools/provider-core/server/ProviderEventLoggers") {}
25
26/** Logging turned off: for tests and boot layers that skip diagnostics. */
27export const NoOpProviderEventLoggers: ProviderEventLoggers["Service"] = {
28 native: undefined,
29 canonical: undefined,
30};