openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
62 lines (61 loc) • 2.92 kB
JavaScript
import { a as generateSecureUuid } from "./secure-random-Ds4AFLgz.js";
import { a as deleteDeliveryQueueEntry, b as upsertDeliveryQueueEntry, s as expireStagingAndLoadDeliveryQueueEntries } from "./delivery-queue-sqlite-Bpn2g0Bx.js";
//#region src/infra/outbound/delivery-queue-media-staging.ts
const LEGACY_OUTBOUND_DELIVERY_QUEUE_NAME = "outbound";
const OUTBOUND_LEGACY_PREPARATION_QUEUE_NAME = "outbound-legacy-preparing-v1";
const OUTBOUND_DELIVERY_PREPARATION_QUEUE_NAME = "outbound-preparing-v1";
const OUTBOUND_DELIVERY_MIGRATION_QUEUE_NAME = "outbound-prepared-migration-v1";
const OUTBOUND_DELIVERY_QUEUE_NAME = "outbound-prepared-v1";
const DELIVERY_QUEUE_MEDIA_STAGING_QUEUE_NAME = "outbound-media-staging";
function entryPayloads(entry) {
if (Array.isArray(entry.payloads)) return entry.payloads;
return (entry.preparedBatch?.entries ?? []).flatMap((prepared) => prepared.status === "accepted" && prepared.payload ? [prepared.payload] : []);
}
function createDeliveryQueueMediaRetention(artifacts, entryKind, stateDir) {
const id = generateSecureUuid();
const entry = {
id,
enqueuedAt: Date.now(),
retryCount: 0,
artifacts: [...artifacts]
};
if (!upsertDeliveryQueueEntry({
queueName: "outbound-media-staging",
entry,
metadata: { entryKind },
stateDir,
insertOnly: true
})) throw new Error(`Delivery queue media stage already exists: ${id}`);
return id;
}
/** Release a stage or recovery lease after its owner settles. */
function cancelDeliveryQueueMediaRetention(id, stateDir) {
if (!id) return;
deleteDeliveryQueueEntry(DELIVERY_QUEUE_MEDIA_STAGING_QUEUE_NAME, id, stateDir);
}
/**
* Atomically expire abandoned stages and return every artifact still owned by
* either a replayable outbound row or a producer that may still commit one.
*/
function loadDeliveryQueueMediaRetentionSnapshot(params) {
const snapshot = expireStagingAndLoadDeliveryQueueEntries({
queueNames: [
OUTBOUND_DELIVERY_QUEUE_NAME,
LEGACY_OUTBOUND_DELIVERY_QUEUE_NAME,
OUTBOUND_LEGACY_PREPARATION_QUEUE_NAME,
OUTBOUND_DELIVERY_MIGRATION_QUEUE_NAME
],
stagingQueueName: DELIVERY_QUEUE_MEDIA_STAGING_QUEUE_NAME,
expireBeforeMs: params.expireBeforeMs,
stateDir: params.stateDir
});
return {
payloads: snapshot.entries.map((entry) => entryPayloads(entry)),
stagedArtifacts: snapshot.stagingEntries.flatMap((entry) => {
const artifacts = entry.artifacts;
return Array.isArray(artifacts) ? artifacts.filter((artifact) => typeof artifact === "string") : [];
})
};
}
//#endregion
export { OUTBOUND_DELIVERY_QUEUE_NAME as a, createDeliveryQueueMediaRetention as c, OUTBOUND_DELIVERY_PREPARATION_QUEUE_NAME as i, loadDeliveryQueueMediaRetentionSnapshot as l, LEGACY_OUTBOUND_DELIVERY_QUEUE_NAME as n, OUTBOUND_LEGACY_PREPARATION_QUEUE_NAME as o, OUTBOUND_DELIVERY_MIGRATION_QUEUE_NAME as r, cancelDeliveryQueueMediaRetention as s, DELIVERY_QUEUE_MEDIA_STAGING_QUEUE_NAME as t };