- Extract database schema and migrations into @openreader/database - Extract startup and orchestration scripts into @openreader/bootstrap - Move compute-worker into packages/compute-worker - Remove runtime dependency on drizzle-kit - Update Dockerfile to deploy isolated packages without merging node_modules
22 lines
808 B
TypeScript
22 lines
808 B
TypeScript
import type { WorkerOperationKind } from '../operations/contracts';
|
|
|
|
export type RetryAction = 'nak_retry' | 'term_fail';
|
|
|
|
export function buildQueueWaitTiming(queuedAt: number, now: number): { queueWaitMs: number } | undefined {
|
|
if (!Number.isFinite(queuedAt) || !Number.isFinite(now)) return undefined;
|
|
return { queueWaitMs: Math.max(0, Math.floor(now - queuedAt)) };
|
|
}
|
|
|
|
export function decideRetryAction(input: {
|
|
kind: WorkerOperationKind;
|
|
deliveryCount: number;
|
|
pdfAttempts: number;
|
|
whisperMaxDeliver?: number;
|
|
}): RetryAction {
|
|
const whisperMaxDeliver = input.whisperMaxDeliver ?? 1;
|
|
if (input.kind === 'whisper_align') {
|
|
return input.deliveryCount < whisperMaxDeliver ? 'nak_retry' : 'term_fail';
|
|
}
|
|
|
|
return input.deliveryCount < input.pdfAttempts ? 'nak_retry' : 'term_fail';
|
|
}
|