openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
38 lines (37 loc) • 1.42 kB
JavaScript
import "./src-vebZIeLe.js";
import { t as stableStringify } from "./stable-stringify-C8X7niaI.js";
import { n as sha256Base64Url } from "./crypto-digest-C4hqTb_e.js";
import { c as projectCronJobThroughStorageCodec } from "./row-codec-Bv7_IRNO.js";
//#region src/cron/config-revision.ts
/** Opaque revision token for cron configuration, excluding scheduler-maintained state. */
function configRevisionDefinition(projected) {
const { updatedAtMs: _updatedAtMs, state: _state, ...definition } = projected;
if (definition.payload.kind !== "command" || !definition.payload.env) return definition;
const foldedKeys = /* @__PURE__ */ new Set();
if (!Object.keys(definition.payload.env).some((key) => {
const folded = key.toLowerCase();
if (foldedKeys.has(folded)) return true;
foldedKeys.add(folded);
return false;
})) return definition;
const { env, ...payload } = definition.payload;
return {
...definition,
payload: {
...payload,
envEntries: Object.entries(env)
}
};
}
/** Hashes the job definition while preserving meaningful own-undefined config fields. */
function resolveCronJobConfigRevision(job) {
const projected = projectCronJobThroughStorageCodec({
...job,
updatedAtMs: 0,
state: {}
});
const fingerprint = stableStringify(configRevisionDefinition(projected));
return `sha256:${sha256Base64Url(fingerprint)}`;
}
//#endregion
export { resolveCronJobConfigRevision as t };