@durable-streams/tanstack-ai-transport
Version:
TanStack AI adapters for Durable Streams
83 lines (79 loc) • 3.49 kB
TypeScript
import { DurableStream, HeadersRecord } from "@durable-streams/client";
//#region src/types.d.ts
type TanStackChunk = any;
type DurableSessionConnection = {
subscribe: (abortSignal?: AbortSignal) => AsyncIterable<TanStackChunk>;
send: (messages: Array<unknown>, data?: unknown, abortSignal?: AbortSignal) => Promise<void>;
};
type DurableStreamConnection = DurableSessionConnection;
type DurableStreamConnectionOptions = {
sendUrl: string;
readUrl?: string;
initialOffset?: string;
emitSnapshotOnSubscribe?: boolean;
headers?: HeadersInit;
fetchClient?: typeof fetch;
};
type DurableStreamTarget = {
writeUrl: string | URL;
readUrl?: string | URL;
headers?: HeadersRecord;
contentType?: string;
createIfMissing?: boolean;
};
type DurableChatSessionStreamTarget = Pick<DurableStreamTarget, `writeUrl` | `headers` | `createIfMissing`>;
type ToDurableStreamResponseMode = `immediate` | `await`;
type WaitUntil = (promise: Promise<unknown>) => void;
type ToDurableStreamResponseOptions = {
stream: DurableStreamTarget;
mode?: ToDurableStreamResponseMode;
waitUntil?: WaitUntil;
exposeLocationHeader?: boolean;
};
type DurableSessionMessagePart = {
type?: string;
content?: string;
text?: string;
};
type DurableSessionMessage = {
id?: string;
role?: string;
parts?: Array<DurableSessionMessagePart>;
};
type ToDurableChatSessionResponseOptions = {
stream: DurableChatSessionStreamTarget;
newMessages: Array<DurableSessionMessage>;
responseStream: AsyncIterable<TanStackChunk>;
mode?: ToDurableStreamResponseMode;
waitUntil?: WaitUntil;
};
//#endregion
//#region src/client.d.ts
declare function durableStreamConnection(options: DurableStreamConnectionOptions): DurableStreamConnection;
declare function sanitizeChunkForStorage<TChunk extends TanStackChunk>(chunk: TChunk): TChunk;
declare function materializeSnapshotFromDurableStream(options: {
readUrl: string;
headers?: HeadersInit;
offset?: string;
}): Promise<{
messages: Array<any>;
offset?: string;
}>;
//#endregion
//#region src/server.d.ts
declare function ensureDurableChatSessionStream(streamTarget: DurableStreamTarget): Promise<DurableStream>;
declare function toMessageEchoChunks(message: {
id?: string;
role?: string;
parts?: Array<{
type?: string;
content?: string;
text?: string;
}>;
}): Array<TanStackChunk>;
declare function appendSanitizedChunksToStream(stream: DurableStream, chunks: ReadonlyArray<TanStackChunk>, contentType?: string): Promise<void>;
declare function pipeSanitizedChunksToStream(source: AsyncIterable<TanStackChunk>, stream: DurableStream, contentType?: string): Promise<void>;
declare function toDurableStreamResponse(source: AsyncIterable<unknown>, options: ToDurableStreamResponseOptions): Promise<Response>;
declare function toDurableChatSessionResponse(options: ToDurableChatSessionResponseOptions): Promise<Response>;
//#endregion
export { DurableChatSessionStreamTarget, DurableSessionConnection, DurableSessionMessage, DurableSessionMessagePart, DurableStreamConnection, DurableStreamConnectionOptions, DurableStreamTarget, TanStackChunk, ToDurableChatSessionResponseOptions, ToDurableStreamResponseMode, ToDurableStreamResponseOptions, WaitUntil, appendSanitizedChunksToStream, durableStreamConnection, ensureDurableChatSessionStream, materializeSnapshotFromDurableStream, pipeSanitizedChunksToStream, sanitizeChunkForStorage, toDurableChatSessionResponse, toDurableStreamResponse, toMessageEchoChunks };