Skip to content

feat(dataplane,dashboard): configurable outbound request ID header per project#2665

Open
olamilekan000 wants to merge 1 commit into
mainfrom
add-per-project-requid-id-for-oubound-webooks
Open

feat(dataplane,dashboard): configurable outbound request ID header per project#2665
olamilekan000 wants to merge 1 commit into
mainfrom
add-per-project-requid-id-for-oubound-webooks

Conversation

@olamilekan000

@olamilekan000 olamilekan000 commented Jun 3, 2026

Copy link
Copy Markdown
Contributor
change adds per-project configuration for the outbound request ID header name (request_id_header), 
defaulting to X-Convoy-Idempotency-Key. 
Webhook deliveries send the event’s idempotency key under that header only 
(no duplicate legacy header when a custom name is set).
image

Note

Medium Risk
Changes webhook HTTP headers and tightens event ingestion when custom headers are set; misconfiguration or missing idempotency keys can break subscriber integrations.

Overview
Adds per-project request_id_header (default X-Convoy-Idempotency-Key) so outbound webhook deliveries can expose the event idempotency key under a configurable header name, with dashboard support per the PR description.

API & validation: Project config accepts request_id_header through the API model and persistence layer; test seeds set the default header. Create endpoint event now rejects requests when an outgoing project uses a non-default header name but the event omits idempotency_key (same rule applies in other outgoing event services in this branch).

Tooling: Makefile adds ui-build and ui-build-fresh targets for building the dashboard via scripts/build-ui.sh.

Reviewed by Cursor Bugbot for commit a3df423. Bugbot is set up for automated code reviews on this repo. Configure here.

@olamilekan000 olamilekan000 force-pushed the add-per-project-requid-id-for-oubound-webooks branch from 65c0e2d to dc48c4b Compare June 3, 2026 07:56

@mekilis mekilis left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks ok, but added a few comments. Also, please check the CI; one of the checks failed.

Comment thread net/dispatcher.go Outdated
Comment thread net/dispatcher.go Outdated
Comment thread net/dispatcher_test.go Outdated
int64(cfg.MaxResponseSize),
eventDelivery.Headers,
project.Config.GetRequestIDHeader().String(),
eventDelivery.IdempotencyKey,

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two problems. The header only goes out when the event has an idempotency key, so deliveries without one get no Split-Request-ID at all. And when it is sent, the value is that key (usually a ULID), not the UUID their contract specifies. As-is this doesn't meet the contract, which is a stable UUID on every delivery. The value and always-present pieces still need handling.

Comment thread worker/task/process_meta_event.go Outdated
Comment thread debug.json Outdated
},
"host": "http://localhost:5011",
"root_path": "/testing",
"root_path": "",

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

root_path flips from /testing to "", which looks like a local debug tweak that got swept in. Unrelated to the feature. Can we drop debug.json from the diff?

Comment thread api/ui/build/index.html
@olamilekan000 olamilekan000 force-pushed the add-per-project-requid-id-for-oubound-webooks branch 2 times, most recently from 8582815 to 94875b1 Compare June 13, 2026 23:46
Comment thread debug.json Outdated
Comment thread net/dispatcher.go
@olamilekan000 olamilekan000 force-pushed the add-per-project-requid-id-for-oubound-webooks branch from 94875b1 to bee1acd Compare June 17, 2026 00:49

@mekilis mekilis left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added comments but please fix the failing tests.

Comment thread debug.json Outdated
},
"host": "http://localhost:5011",
"root_path": "/testing",
"root_path": "",

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Still in the diff. Can we revert debug.json to match main?

header,
int64(cfg.MaxResponseSize),
eventDelivery.Headers,
project.Config.GetRequestIDHeader().String(),

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This works, thanks. Validating at publish with a 400 across the create paths, plus the dispatcher backstop, is the right call. One ask: add a code comment noting the producer must supply the UUID as the idempotency key, since that's the contract now.

@olamilekan000 olamilekan000 force-pushed the add-per-project-requid-id-for-oubound-webooks branch from bee1acd to a3de853 Compare June 17, 2026 11:39

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 2 potential issues.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit a3de853. Configure here.

Comment thread net/dispatcher.go
Comment thread services/project_service.go
@olamilekan000 olamilekan000 force-pushed the add-per-project-requid-id-for-oubound-webooks branch from a3de853 to a3df423 Compare June 17, 2026 21:15
@olamilekan000 olamilekan000 requested a review from mekilis June 17, 2026 21:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants