n8n
Version:
n8n Workflow Automation Tool
59 lines (58 loc) • 2.05 kB
TypeScript
import { type InstanceAiEvent } from '@n8n/api-types';
import { Logger } from '@n8n/backend-common';
import type { StoredEvent } from '@n8n/instance-ai';
import { DurableLogMetrics } from './durable-log-metrics';
import { InstanceAiEventLogRepository } from '../repositories/instance-ai-event-log.repository';
export interface DrainedEvent {
id?: number;
event: InstanceAiEvent;
live: boolean;
}
export interface OpenSegment {
runId: string;
agentId: string;
responseId?: string;
kind: 'text' | 'reasoning';
text: string;
}
type EmitFn = (drained: DrainedEvent) => void;
export declare class DurableEventLog {
private readonly logger;
private readonly repo;
private readonly metrics;
private readonly pendingByThread;
private readonly draining;
private readonly lastSeq;
private readonly buffers;
private readonly emitters;
private readonly lifecycles;
private readonly idleFlushTimers;
idleFlushMs: number;
constructor(logger: Logger, repo: InstanceAiEventLogRepository, metrics: DurableLogMetrics);
publish(threadId: string, event: InstanceAiEvent, emit: EmitFn): void;
private scheduleIdleFlush;
getEventsAfter(threadId: string, afterSeq: number): Promise<StoredEvent[]>;
getEventsForRuns(threadId: string, runIds: string[]): Promise<InstanceAiEvent[]>;
getOpenSegments(threadId: string): OpenSegment[];
getNextEventId(threadId: string): Promise<number>;
clearThread(threadId: string): void;
clear(): void;
private resolvePendingFlushes;
flush(threadId: string): Promise<void>;
flushAll(): Promise<void>;
private ensureDraining;
private drainBatch;
private currentLifecycle;
private takeAllOpenBlocks;
private persistWithRetry;
private didBatchCommit;
private bufferDelta;
private markBufferedPartsEmitted;
private flushBlocks;
private rollSegmentOnResponseChange;
private takeBlock;
private currentSeq;
private getOrCreateBuffer;
private takePending;
}
export {};