From b3ed7ee49363f53397811b2f5f8f164dfe1c6cfe Mon Sep 17 00:00:00 2001 From: Dotta Date: Tue, 21 Jul 2026 17:48:58 +0000 Subject: [PATCH] fix(connections): make relay handoffs idempotent Co-Authored-By: Paperclip --- server/src/services/connection-relay.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/server/src/services/connection-relay.ts b/server/src/services/connection-relay.ts index b6e87f60e4b..7d2ad1fa8d5 100644 --- a/server/src/services/connection-relay.ts +++ b/server/src/services/connection-relay.ts @@ -74,6 +74,10 @@ export function connectionRelaySecretResolver(db: Db) { export type ConnectionRelayDispatcher = Record Promise>; +function relayTriggerIdempotencyKey(envelope: RelayEnvelope, trigger: RelayTrigger) { + return `connection-relay:${envelope.deliveryId}:${trigger.id}`; +} + export function connectionRelayDispatcher( db: Db, options: { pluginWorkerManager?: PluginWorkerManager } = {}, @@ -87,7 +91,7 @@ export function connectionRelayDispatcher( await routines.runRoutine(trigger.destinationId, { source: "api", payload: { connectionRelay: envelope }, - idempotencyKey: `connection-relay:${envelope.deliveryId}:${trigger.id}`, + idempotencyKey: relayTriggerIdempotencyKey(envelope, trigger), }); }, issue_wake: async (trigger, envelope) => { @@ -101,7 +105,7 @@ export function connectionRelayDispatcher( source: "automation", triggerDetail: "system", reason: "connection_trigger", - idempotencyKey: `connection-relay:${envelope.deliveryId}:${trigger.id}`, + idempotencyKey: relayTriggerIdempotencyKey(envelope, trigger), requestedByActorType: "system", contextSnapshot: { issueId: issue.id, @@ -130,7 +134,7 @@ export function connectionRelayDispatcher( headers: envelope.provider.headers, rawBody, parsedBody, - requestId: envelope.deliveryId, + requestId: relayTriggerIdempotencyKey(envelope, trigger), }); }, };