blob: f23290b33dcef94b2fe7baa797dfcf196a023064 [file]
import type { InteractiveArtifactStoreWriter } from '@maka/storage/artifact-stores';
import type { InteractiveTaskLedgerWriter } from '@maka/storage/task-ledger-authority';
export interface SessionSidecarPurgeAuthority {
readonly artifacts: Pick<InteractiveArtifactStoreWriter, 'purgeSessionArtifacts'>;
readonly taskLedger: Pick<InteractiveTaskLedgerWriter, 'purgeConversationTaskLedger'>;
readonly purgeOperationalState: (sessionId: string) => Promise<void>;
}
export async function purgeSessionSidecars(
authority: SessionSidecarPurgeAuthority,
sessionId: string,
): Promise<void> {
const outcomes = await Promise.allSettled([
authority.artifacts.purgeSessionArtifacts(sessionId),
authority.taskLedger.purgeConversationTaskLedger(sessionId),
authority.purgeOperationalState(sessionId),
]);
const failures = outcomes.flatMap((outcome) =>
outcome.status === 'rejected' ? [outcome.reason] : [],
);
if (failures.length > 0) {
throw new AggregateError(failures, `Session ${sessionId} sidecars could not be purged`);
}
}