/** * ChatKit Store Interface * * Abstract interface for persisting threads and items. * Based on https://github.com/openai/chatkit-python/blob/main/chatkit/store.py */ import type { ThreadMetadata, ThreadRef, ThreadItem, Attachment, Page, StoreItemType, ClientToolCallItem } from './types'; import { type RunListOptions, type RunRecordData, type RunStepRecordData, type RunStore } from '../runs/store'; import { type TaskListOptions, type TaskRecordData, type TaskStore } from '../tasks/store'; import { type TaskAuthBindingRepository, type TaskAuthCredentialRecord } from '../tasks/TaskAuthBinding'; /** * Context type for store operations (generic) */ export type StoreContext = Record; export interface ClientToolContinuationClaim { claimId: string; threadRef: ThreadRef; item: ClientToolCallItem; run: RunRecordData; } /** * Abstract Store interface */ export interface ChatKitStore extends Partial> { generateThreadId(context: TContext): string; generateItemId(itemType: StoreItemType, thread: ThreadMetadata, context: TContext): string; loadThread(thread: ThreadRef, context: TContext): Promise; saveThread(thread: ThreadMetadata, context: TContext): Promise; loadThreads(limit: number, after: string | undefined, order: string, context: TContext): Promise>; deleteThread(thread: ThreadRef, context: TContext): Promise; loadThreadItems(thread: ThreadRef, after: string | undefined, limit: number, order: string, context: TContext): Promise>; addThreadItem(thread: ThreadRef, item: ThreadItem, context: TContext): Promise; saveItem(thread: ThreadRef, item: ThreadItem, context: TContext): Promise; loadItem(thread: ThreadRef, itemId: string, context: TContext): Promise; deleteThreadItem(thread: ThreadRef, itemId: string, context: TContext): Promise; claimClientToolContinuation?(input: { threadRef: ThreadRef; itemId: string; claimId: string; leaseExpiresAt: number; now: number; }, context: TContext): Promise; releaseClientToolContinuation?(claim: ClientToolContinuationClaim, now: number, context: TContext): Promise; saveAttachment?(attachment: Attachment, context: TContext): Promise; loadAttachment?(attachmentId: string, context: TContext): Promise; deleteAttachment?(attachmentId: string, context: TContext): Promise; } /** * In-Memory Store Implementation * * Simple in-memory store for development and testing. * Data is lost when the server restarts. */ export declare class InMemoryStore implements ChatKitStore, TaskStore, TaskAuthBindingRepository { private threads; private items; private attachments; private runs; private runSteps; private tasks; private taskAuthCredentials; private getUserKey; private getThreadKey; private normalizeThreadId; private stripThreadProtocolMetadata; generateThreadId(_context: TContext): string; generateItemId(itemType: StoreItemType, thread: ThreadMetadata, _context: TContext): string; loadThread(thread: ThreadRef, context: TContext): Promise; saveThread(thread: ThreadMetadata, context: TContext): Promise; loadThreads(limit: number, after: string | undefined, order: string, context: TContext): Promise>; deleteThread(thread: ThreadRef, context: TContext): Promise; loadThreadItems(thread: ThreadRef, after: string | undefined, limit: number, order: string, context: TContext): Promise>; addThreadItem(thread: ThreadRef, item: ThreadItem, context: TContext): Promise; saveItem(thread: ThreadRef, item: ThreadItem, context: TContext): Promise; loadItem(thread: ThreadRef, itemId: string, context: TContext): Promise; deleteThreadItem(thread: ThreadRef, itemId: string, context: TContext): Promise; claimClientToolContinuation(input: { threadRef: ThreadRef; itemId: string; claimId: string; leaseExpiresAt: number; now: number; }, context: TContext): Promise; releaseClientToolContinuation(claim: ClientToolContinuationClaim, now: number, context: TContext): Promise; saveAttachment(attachment: Attachment, _context: TContext): Promise; loadAttachment(attachmentId: string, _context: TContext): Promise; deleteAttachment(attachmentId: string, _context: TContext): Promise; saveRun(run: RunRecordData, context: TContext): Promise; loadRun(runId: string, context: TContext): Promise; listRuns(options: RunListOptions, context: TContext): Promise; appendRunStep(event: RunStepRecordData, context: TContext): Promise; loadRunSteps(runId: string, context: TContext): Promise; claimRun(input: { runId: string; leaseOwner: string; leaseExpiresAt: number; now: number; }, context: TContext): Promise; saveTask(task: TaskRecordData, context: TContext): Promise; loadTask(taskId: string, context: TContext): Promise; listTasks(options: TaskListOptions, context: TContext): Promise; saveTaskAuthCredential(input: { id: string; apiKey: string; displayName?: string; expiresAt?: number; }, context: TContext & StoreContext): Promise; loadTaskAuthCredential(id: string, context: TContext & StoreContext): Promise; private withAuthBindingMetadata; getStats(): { threads: number; items: number; attachments: number; }; clear(): void; private getRunKey; private getTaskKey; private getTaskAuthCredentialKey; }