import { DatabaseConfig } from '@n8n/config'; import { DataSource, type EntityManager, Repository } from '@n8n/typeorm'; import { ScheduledTask, type TerminalTaskStatus } from '../entities/scheduled-task'; export interface ClaimDueTasksOptions { host: string; taskTypes: string[]; lookaheadMs: number; leaseMs: number; batchSize: number; } export interface ClaimedRef { id: string; claimedEpoch: number; } export interface HostedClaimedRef extends ClaimedRef { host: string; } export interface DeleteFinishedTasksOptions { statuses: TerminalTaskStatus[]; olderThanMs: number; limit: number; } export interface NewOccurrence { jobId: number; taskType: string; payload: Record; scheduledFor: Date; runAt: Date; maxAttempts: number; timeoutSeconds: number; missedAfter?: Date | null; } export interface RetiredTask { id: string; jobId: number; taskType: string; } export interface RetireMissedResult { retired: number; heldByConcurrencyLimit: RetiredTask[]; } export interface RecordedOccurrence { id: string; jobId: number; taskType: string; } export interface InsertOccurrencesResult { recorded: number; created: RecordedOccurrence[]; } export type ScheduledTaskMetricSnapshot = { pending: number; due: number; running: number; oldestPendingAgeMs: number | null; }; export declare class ScheduledTaskRepository extends Repository { private readonly isPostgres; private readonly tableName; private readonly jobTableName; private readonly leaseExpiresAtColumn; private readonly dispatchedAtColumn; private readonly runAtColumn; private readonly missedAfterColumn; constructor(dataSource: DataSource, config: DatabaseConfig); insertIgnoringDuplicates(manager: EntityManager, occurrences: NewOccurrence[], chunkSize?: number): Promise; deletePendingByJobIds(manager: EntityManager, jobIds: number[]): Promise; updateToMissed(manager: EntityManager, superseded: Array<{ jobId: number; before: Date; }>): Promise; updateTimeoutForPendingJobs(manager: EntityManager, jobIds: number[], timeoutSeconds: number): Promise; updateMissedAfterForJobs(manager: EntityManager, jobIds: number[], misfireGraceSeconds: number): Promise; claimDueTasks(opts: ClaimDueTasksOptions): Promise; private claimCandidateSql; private limitedJobIdsSql; private withinConcurrencyLimitSql; private allowedByConcurrencyLimitSql; private claimableSql; private claimWithPostgres; private claimWithSqlite; beginDispatch(claim: HostedClaimedRef, leaseMs: number): Promise; renewLease(claim: HostedClaimedRef, expiresInMs: number): Promise; markDispatched(claim: HostedClaimedRef): Promise; completeTask(claim: HostedClaimedRef): Promise; failTaskTerminal(claim: HostedClaimedRef, errorMessage: string): Promise; rescheduleTask(claim: HostedClaimedRef, backoffMs: number, errorMessage: string): Promise; releaseClaim(claim: HostedClaimedRef): Promise; findExpiredLeases(limit: number): Promise; getMetricSnapshot(): Promise; readDbTime(manager?: EntityManager): Promise; reclaimExpired(ref: ClaimedRef, backoffMs: number, errorMessage: string): Promise; deadLetterExpired(ref: ClaimedRef, errorMessage: string): Promise; completeExpired(ref: ClaimedRef): Promise; private runGuardedUpdate; private runReaperUpdate; deleteFinishedOlderThan(options: DeleteFinishedTasksOptions): Promise; private deleteFinishedWithPostgres; private deleteFinishedWithSqlite; retireMissedPending(limit: number): Promise; private atConcurrencyLimitSql; private staleSql; private retireMissedPendingWithPostgres; private retireMissedPendingWithSqlite; }