62 lines · 1.8 KB · TypeScript
RawDownload
import type {  ProviderKind,  ProviderSessionRuntimeStatus,  RuntimeMode,  ThreadId,} from "@t3tools/contracts";import { Option, Context } 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 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<ProviderKind, 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") {}