mirror of
https://github.com/ReCloudStudio/WebHooker.git
synced 2026-09-22 16:11:29 +00:00
38 lines
1.5 KiB
TypeScript
38 lines
1.5 KiB
TypeScript
import { cfEnv } from "../lib/cf";
|
|
import { log } from "../lib/lib/log";
|
|
|
|
const DELIVERY_STATE_RETENTION_MS = 7 * 24 * 3600 * 1000;
|
|
const MESSAGE_TRACKING_RETENTION_MS = 30 * 24 * 3600 * 1000;
|
|
|
|
/**
|
|
* Scheduled: purge expired rows from the D1-backed ephemeral stores
|
|
* (dedup_keys, delivery_state, message_tracking). These replaced the KV keys
|
|
* that relied on per-entry TTL; D1 rows must be removed by this task instead.
|
|
*/
|
|
export default defineTask({
|
|
meta: { name: "storage:prune", description: "Prune D1 dedup/delivery/message-tracking rows" },
|
|
async run(event) {
|
|
try {
|
|
const env = cfEnv(event);
|
|
const now = Date.now();
|
|
let removed = 0;
|
|
const dedup = await env.DB.prepare("DELETE FROM dedup_keys WHERE expires_at < ?")
|
|
.bind(now)
|
|
.run();
|
|
removed += dedup.meta?.changes ?? 0;
|
|
const delivery = await env.DB.prepare("DELETE FROM delivery_state WHERE updated_at < ?")
|
|
.bind(now - DELIVERY_STATE_RETENTION_MS)
|
|
.run();
|
|
removed += delivery.meta?.changes ?? 0;
|
|
const messages = await env.DB.prepare("DELETE FROM message_tracking WHERE updated_at < ?")
|
|
.bind(now - MESSAGE_TRACKING_RETENTION_MS)
|
|
.run();
|
|
removed += messages.meta?.changes ?? 0;
|
|
if (removed > 0) log.info({ removed }, "Pruned D1 storage rows");
|
|
return { result: "ok", removed };
|
|
} catch (err) {
|
|
log.error({ err }, "Storage prune from cron failed");
|
|
return { result: "error" };
|
|
}
|
|
},
|
|
});
|