fix(gateway): resolve download_event_id timing bug#592
Merged
Conversation
…fore intake JS now fetches the download URL via ?format=json before submitting intake, so the redirect event is logged server-side before intake is enqueued. The PHP download endpoint returns the event_id in its JSON response, which the JS passes to the intake POST as download_event_id. - DownloadController: add last_event_id property; expose event_id in JSON response - IntakeController: accept download_event_id from request instead of DB lookup; removes the always-null find_redirect_id() call - WebhookDispatcher: add ORDER BY id ASC so download webhook is always delivered to Make.com before intake (they share the same next_attempt_at) - gateway-modal.js: handleIntakeSubmit() now fetches download URL first, then posts intake with event_id, then redirects — fixes the ordering - Bump version to 0.1.13 to bust JS cache Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
download_event_idwas alwaysnullin intake webhook payloads, causing Make.com's Airtable search formula to evaluate as{WP Event ID} =(empty string) and fail with a 422.Root cause: The JS submitted intake first, then redirected the browser to the download token URL. The redirect event was logged server-side only after the browser navigation — after intake had already been enqueued.
find_redirect_id()always returnednullbecause the redirect row didn't exist yet.Additionally,
WebhookDispatcherhad noORDER BY, so intake could be sent to Make.com before the download webhook even if they were enqueued at the same time.Fixes
JS sequencing (
gateway-modal.js)handleIntakeSubmit()now fetches the download URL via?format=jsonfirst{url, event_id}download_event_id: event_id, then redirects to file URLPHP: download event_id in JSON response (
class-download-controller.php)last_event_idproperty set as a side effect ofget_file_url()handle()includesevent_idin the?format=jsonresponseresolve()signature or existing testsPHP: intake accepts event_id from caller (
class-intake-controller.php)submit()now accepts?int $download_event_id = null(default keeps tests passing)DownloadEventRepository::find_redirect_id()DB lookupWebhook ordering (
class-webhook-dispatcher.php)ORDER BY id ASCtodispatch_pending()queryMake.com: no scenario changes needed
The intake webhook now reliably carries
download_event_id, so the existing M24 search formula{WP Event ID} = {{1.download_event_id}}will work correctly.Test plan
composer test)composer lint)dispatch_pendingtrigger)download_event_idis non-null in intake webhook payload → verify Make.com updates Downloads record correctly🤖 Generated with Claude Code