import type { ProviderInstanceId, ProviderDriverKind, ProviderSessionRuntimeStatus, RuntimeMode, ThreadId,} from "@t3tools/contracts";import * as Option from "effect/Option";import * as Context from "effect/Context";import type * as Effect from "effect/Effect"; import type { ProviderSessionDirectoryPersistenceError, ProviderValidationError,} from "../Errors.ts"; export interface ProviderRuntimeBinding { readonly threadId: ThreadId; readonly provider: ProviderDriverKind; /** * Routing key for the configured provider instance that owns this * session. The persistence layer promotes legacy null rows before * exposing bindings; runtime callers must not infer this from `provider`. */ readonly providerInstanceId?: ProviderInstanceId; readonly adapterKey?: string; readonly status?: ProviderSessionRuntimeStatus; readonly resumeCursor?: unknown | null; readonly runtimePayload?: unknown | null; readonly runtimeMode?: RuntimeMode;} export interface ProviderRuntimeBindingWithMetadata extends ProviderRuntimeBinding { readonly lastSeenAt: string;} export type ProviderSessionDirectoryReadError = ProviderSessionDirectoryPersistenceError; export type ProviderSessionDirectoryWriteError = | ProviderValidationError | ProviderSessionDirectoryPersistenceError; export interface ProviderSessionDirectoryShape { readonly upsert: ( binding: ProviderRuntimeBinding, ) => Effect.Effect<void, ProviderSessionDirectoryWriteError>; readonly getProvider: ( threadId: ThreadId, ) => Effect.Effect<ProviderDriverKind, ProviderSessionDirectoryReadError>; readonly getBinding: ( threadId: ThreadId, ) => Effect.Effect<Option.Option<ProviderRuntimeBinding>, ProviderSessionDirectoryReadError>; readonly listThreadIds: () => Effect.Effect< ReadonlyArray<ThreadId>, ProviderSessionDirectoryPersistenceError >; readonly listBindings: () => Effect.Effect< ReadonlyArray<ProviderRuntimeBindingWithMetadata>, ProviderSessionDirectoryPersistenceError >;} export class ProviderSessionDirectory extends Context.Service< ProviderSessionDirectory, ProviderSessionDirectoryShape>()("t3/provider/Services/ProviderSessionDirectory") {}
import type {
ProviderInstanceId,
ProviderDriverKind,
ProviderSessionRuntimeStatus,
RuntimeMode,
ThreadId,
} from "@t3tools/contracts";
import * as Option from "effect/Option";
import * as Context from "effect/Context";
import type * as Effect from "effect/Effect";
import type {
ProviderSessionDirectoryPersistenceError,
ProviderValidationError,
} from "../Errors.ts";
export interface ProviderRuntimeBinding {
readonly threadId: ThreadId;
readonly provider: ProviderDriverKind;
/**
* Routing key for the configured provider instance that owns this
* session. The persistence layer promotes legacy null rows before
* exposing bindings; runtime callers must not infer this from `provider`.
*/
readonly providerInstanceId?: ProviderInstanceId;
readonly adapterKey?: string;
readonly status?: ProviderSessionRuntimeStatus;
readonly resumeCursor?: unknown | null;
readonly runtimePayload?: unknown | null;
readonly runtimeMode?: RuntimeMode;
}
export interface ProviderRuntimeBindingWithMetadata extends ProviderRuntimeBinding {
readonly lastSeenAt: string;
}
export type ProviderSessionDirectoryReadError = ProviderSessionDirectoryPersistenceError;
export type ProviderSessionDirectoryWriteError =
| ProviderValidationError
| ProviderSessionDirectoryPersistenceError;
export interface ProviderSessionDirectoryShape {
readonly upsert: (
binding: ProviderRuntimeBinding,
) => Effect.Effect<void, ProviderSessionDirectoryWriteError>;
readonly getProvider: (
threadId: ThreadId,
) => Effect.Effect<ProviderDriverKind, ProviderSessionDirectoryReadError>;
readonly getBinding: (
threadId: ThreadId,
) => Effect.Effect<Option.Option<ProviderRuntimeBinding>, ProviderSessionDirectoryReadError>;
readonly listThreadIds: () => Effect.Effect<
ReadonlyArray<ThreadId>,
ProviderSessionDirectoryPersistenceError
>;
readonly listBindings: () => Effect.Effect<
ReadonlyArray<ProviderRuntimeBindingWithMetadata>,
ProviderSessionDirectoryPersistenceError
>;
}
export class ProviderSessionDirectory extends Context.Service<
ProviderSessionDirectory,
ProviderSessionDirectoryShape
>()("t3/provider/Services/ProviderSessionDirectory") {}