From b3ef3fca7587a17774624271ff0f0a8c76ba4293 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sun, 15 Feb 2026 17:29:08 +0000 Subject: [PATCH] refactor(cron): share legacy delivery helpers --- src/cron/legacy-delivery.ts | 48 ++++++++++++++++++++++++++++++++++ src/cron/normalize.ts | 52 ++++--------------------------------- src/cron/service/store.ts | 52 ++++--------------------------------- 3 files changed, 58 insertions(+), 94 deletions(-) create mode 100644 src/cron/legacy-delivery.ts diff --git a/src/cron/legacy-delivery.ts b/src/cron/legacy-delivery.ts new file mode 100644 index 000000000..326f000b7 --- /dev/null +++ b/src/cron/legacy-delivery.ts @@ -0,0 +1,48 @@ +export function hasLegacyDeliveryHints(payload: Record) { + if (typeof payload.deliver === "boolean") { + return true; + } + if (typeof payload.bestEffortDeliver === "boolean") { + return true; + } + if (typeof payload.to === "string" && payload.to.trim()) { + return true; + } + return false; +} + +export function buildDeliveryFromLegacyPayload( + payload: Record, +): Record { + const deliver = payload.deliver; + const mode = deliver === false ? "none" : "announce"; + const channelRaw = + typeof payload.channel === "string" ? payload.channel.trim().toLowerCase() : ""; + const toRaw = typeof payload.to === "string" ? payload.to.trim() : ""; + const next: Record = { mode }; + if (channelRaw) { + next.channel = channelRaw; + } + if (toRaw) { + next.to = toRaw; + } + if (typeof payload.bestEffortDeliver === "boolean") { + next.bestEffort = payload.bestEffortDeliver; + } + return next; +} + +export function stripLegacyDeliveryFields(payload: Record) { + if ("deliver" in payload) { + delete payload.deliver; + } + if ("channel" in payload) { + delete payload.channel; + } + if ("to" in payload) { + delete payload.to; + } + if ("bestEffortDeliver" in payload) { + delete payload.bestEffortDeliver; + } +} diff --git a/src/cron/normalize.ts b/src/cron/normalize.ts index 00e561646..c54b81f5b 100644 --- a/src/cron/normalize.ts +++ b/src/cron/normalize.ts @@ -1,6 +1,11 @@ import type { CronJobCreate, CronJobPatch } from "./types.js"; import { sanitizeAgentId } from "../routing/session-key.js"; import { isRecord } from "../utils.js"; +import { + buildDeliveryFromLegacyPayload, + hasLegacyDeliveryHints, + stripLegacyDeliveryFields, +} from "./legacy-delivery.js"; import { parseAbsoluteTimeMs } from "./parse.js"; import { migrateLegacyCronPayload } from "./payload-migration.js"; import { inferLegacyName } from "./service/normalize.js"; @@ -173,53 +178,6 @@ function coerceDelivery(delivery: UnknownRecord) { return next; } -function hasLegacyDeliveryHints(payload: UnknownRecord) { - if (typeof payload.deliver === "boolean") { - return true; - } - if (typeof payload.bestEffortDeliver === "boolean") { - return true; - } - if (typeof payload.to === "string" && payload.to.trim()) { - return true; - } - return false; -} - -function buildDeliveryFromLegacyPayload(payload: UnknownRecord): UnknownRecord { - const deliver = payload.deliver; - const mode = deliver === false ? "none" : "announce"; - const channelRaw = - typeof payload.channel === "string" ? payload.channel.trim().toLowerCase() : ""; - const toRaw = typeof payload.to === "string" ? payload.to.trim() : ""; - const next: UnknownRecord = { mode }; - if (channelRaw) { - next.channel = channelRaw; - } - if (toRaw) { - next.to = toRaw; - } - if (typeof payload.bestEffortDeliver === "boolean") { - next.bestEffort = payload.bestEffortDeliver; - } - return next; -} - -function stripLegacyDeliveryFields(payload: UnknownRecord) { - if ("deliver" in payload) { - delete payload.deliver; - } - if ("channel" in payload) { - delete payload.channel; - } - if ("to" in payload) { - delete payload.to; - } - if ("bestEffortDeliver" in payload) { - delete payload.bestEffortDeliver; - } -} - function unwrapJob(raw: UnknownRecord) { if (isRecord(raw.data)) { return raw.data; diff --git a/src/cron/service/store.ts b/src/cron/service/store.ts index 3da848f3e..9a171f9e0 100644 --- a/src/cron/service/store.ts +++ b/src/cron/service/store.ts @@ -1,44 +1,17 @@ import fs from "node:fs"; import type { CronJob } from "../types.js"; import type { CronServiceState } from "./state.js"; +import { + buildDeliveryFromLegacyPayload, + hasLegacyDeliveryHints, + stripLegacyDeliveryFields, +} from "../legacy-delivery.js"; import { parseAbsoluteTimeMs } from "../parse.js"; import { migrateLegacyCronPayload } from "../payload-migration.js"; import { loadCronStore, saveCronStore } from "../store.js"; import { recomputeNextRuns } from "./jobs.js"; import { inferLegacyName, normalizeOptionalText } from "./normalize.js"; -function hasLegacyDeliveryHints(payload: Record) { - if (typeof payload.deliver === "boolean") { - return true; - } - if (typeof payload.bestEffortDeliver === "boolean") { - return true; - } - if (typeof payload.to === "string" && payload.to.trim()) { - return true; - } - return false; -} - -function buildDeliveryFromLegacyPayload(payload: Record) { - const deliver = payload.deliver; - const mode = deliver === false ? "none" : "announce"; - const channelRaw = - typeof payload.channel === "string" ? payload.channel.trim().toLowerCase() : ""; - const toRaw = typeof payload.to === "string" ? payload.to.trim() : ""; - const next: Record = { mode }; - if (channelRaw) { - next.channel = channelRaw; - } - if (toRaw) { - next.to = toRaw; - } - if (typeof payload.bestEffortDeliver === "boolean") { - next.bestEffort = payload.bestEffortDeliver; - } - return next; -} - function buildDeliveryPatchFromLegacyPayload(payload: Record) { const deliver = payload.deliver; const channelRaw = @@ -102,21 +75,6 @@ function mergeLegacyDeliveryInto( return { delivery: next, mutated }; } -function stripLegacyDeliveryFields(payload: Record) { - if ("deliver" in payload) { - delete payload.deliver; - } - if ("channel" in payload) { - delete payload.channel; - } - if ("to" in payload) { - delete payload.to; - } - if ("bestEffortDeliver" in payload) { - delete payload.bestEffortDeliver; - } -} - function normalizePayloadKind(payload: Record) { const raw = typeof payload.kind === "string" ? payload.kind.trim().toLowerCase() : ""; if (raw === "agentturn") {