feat(031): configurable webhooks — frontend UI + full test coverage#4234
Merged
feat(031): configurable webhooks — frontend UI + full test coverage#4234
Conversation
… and open questions Co-authored-by: ildyria <627094+ildyria@users.noreply.github.com> Agent-Logs-Url: https://github.com/LycheeOrg/Lychee/sessions/6e7b12fe-ea8f-49ed-8082-b157d3585774
Copilot
AI
changed the title
[WIP] Add support for configurable webhooks
feat(specs): Feature 031 – Configurable Webhooks specification, plan & tasks
Mar 25, 2026
…ks, log Q-031-08 Co-authored-by: ildyria <627094+ildyria@users.noreply.github.com> Agent-Logs-Url: https://github.com/LycheeOrg/Lychee/sessions/839f6431-571b-472a-93b8-33afa672d7ca
…migration, model, CRUD API, payload/dispatch, events, artisan command) Co-authored-by: ildyria <627094+ildyria@users.noreply.github.com> Agent-Logs-Url: https://github.com/LycheeOrg/Lychee/sessions/f6b8545a-e27e-4544-943e-5b88ddc83e08
Copilot
AI
changed the title
feat(specs): Feature 031 – Configurable Webhooks specification, plan & tasks
feat(031): resolve Q-031-08, implement configurable webhooks backend (I1–I4)
Mar 25, 2026
… ENV, guard dispatch/routes/frontend Co-authored-by: ildyria <627094+ildyria@users.noreply.github.com>
Copilot
AI
changed the title
feat(031): resolve Q-031-08, implement configurable webhooks backend (I1–I4)
feat(031): configurable webhooks — feature gate, ENV-driven timeout, base64 query-string encoding
Mar 26, 2026
Co-authored-by: ildyria <627094+ildyria@users.noreply.github.com>
Copilot
AI
changed the title
feat(031): configurable webhooks — feature gate, ENV-driven timeout, base64 query-string encoding
feat(031): webhook feature gate + ENV-driven timeout + frontend management UI
Mar 30, 2026
Codecov Report❌ Patch coverage is 🚀 New features to boost your workflow:
|
Co-authored-by: ildyria <627094+ildyria@users.noreply.github.com>
Copilot
AI
changed the title
feat(031): webhook feature gate + ENV-driven timeout + frontend management UI
feat(031): configurable webhooks — frontend UI + full test coverage
Mar 31, 2026
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.
Implements the frontend management UI for the outgoing webhook feature (backend was already in place, gated behind
WEBHOOK_ENABLED=false) and adds comprehensive test coverage across all layers.Frontend
Webhooks.vue— admin page: DataTable listing all webhooks with inline enable/disable toggle, create/edit Dialog, and ConfirmDialog for deletionwebhook-service.ts— typed Axios client for all 6 CRUD endpoints (GET|POST /Webhook,GET|PUT|PATCH|DELETE /Webhook/{id})lychee.d.ts— new enum types (PhotoWebhookEventType,WebhookMethodType,WebhookPayloadFormatType),WebhookResource, andis_mod_webhook_enabledonModulesRightsResource/webhooksroute + admin submenu entry gated onis_mod_webhook_enabledlang/en/webhook.php+'webhooks'key added to all 22 localeleft-menu.phpfilesTests
Unit (45 tests)
Unit/DTO/WebhookPayloadTesttoJsonArray()/toQueryArray()— null/partial/full fields; base64 size-variant URL encodingUnit/Services/WebhookPayloadBuilderTestbuild()flag combinations;filterSizeVariants()with null/empty/specific/absent typesUnit/Listeners/WebhookListenerTestUnit/Jobs/WebhookDispatchJobTest#[DataProvider]); JSON body vs. query-string encoding; secret header (default/custom/absent); standard headers; success/failure/exception logging; configurable timeoutFeature (47 tests, 6 files under
tests/Feature_v2/Webhook/)Every CRUD endpoint asserts:
401unauthenticated ·403non-admin ·403feature inactive ·404missing resource ·422validation · happy path with DB assertions. Secret is verified never to leak (has_secretboolean only).Infrastructure
tests/Traits/RequiresEmptyWebhooks— table-cleanup trait, followingRequiresEmptyRenamerRulespattern⚡ Quickly spin up Copilot coding agent tasks from anywhere on your macOS or Windows machine with Raycast.