57 lines · 1.7 KB · TypeScript
RawDownload
import type {  ProviderKind,  ProviderSessionRuntimeStatus,  RuntimeMode,  ThreadId,} from "@t3tools/contracts";import { Option, ServiceMap } from "effect";import type { Effect } from "effect"; import type {  ProviderSessionDirectoryPersistenceError,  ProviderValidationError,} from "../Errors.ts"; export interface ProviderRuntimeBinding {  readonly threadId: ThreadId;  readonly provider: ProviderKind;  readonly adapterKey?: string;  readonly status?: ProviderSessionRuntimeStatus;  readonly resumeCursor?: unknown | null;  readonly runtimePayload?: unknown | null;  readonly runtimeMode?: RuntimeMode;} 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<ProviderKind, ProviderSessionDirectoryReadError>;   readonly getBinding: (    threadId: ThreadId,  ) => Effect.Effect<Option.Option<ProviderRuntimeBinding>, ProviderSessionDirectoryReadError>;   readonly remove: (    threadId: ThreadId,  ) => Effect.Effect<void, ProviderSessionDirectoryPersistenceError>;   readonly listThreadIds: () => Effect.Effect<    ReadonlyArray<ThreadId>,    ProviderSessionDirectoryPersistenceError  >;} export class ProviderSessionDirectory extends ServiceMap.Service<  ProviderSessionDirectory,  ProviderSessionDirectoryShape>()("t3/provider/Services/ProviderSessionDirectory") {}