import { env } from "cloudflare:workers"; import { sha256Hex } from "../crypto"; export type PushParams = { source: "proxy" | "internal" | "artifacts"; repoId: string | null; artifactsName: string | null; ref: string; before: string; after: string; pusherId: string | null; }; export async function pushEventId(repoKey: string, ref: string, before: string, after: string): Promise { return (await sha256Hex(`${repoKey}\n${ref}\n${before}\n${after}`)).slice(0, 48); } /** Starts durable push processing. Instance ids are deterministic so duplicate triggers collapse. */ export async function triggerPush( params: Omit & { artifactsName: string }, ): Promise { const id = await pushEventId(params.artifactsName, params.ref, params.before, params.after); try { await env.PUSH_WORKFLOW.create({ id, params }); } catch (error) { if (error instanceof Error && /already exists|duplicate/i.test(error.message)) return; throw error; } }