fix: multiple-webhook-headers and nextcloud talk provider (#296)

* feat(webhook): replace single secret header pair with webhookHeaders array schema

* feat(webhook): iterate webhookHeaders array; keep backward compat for legacy secret fields

* feat(webhook): replace single header pair with dynamic useFieldArray header list

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(webhook): add field labels to header key/value inputs

* fix(webhook): guard reserved headers; align delete button with inputs

* feat(nextcloud): add nextcloud to provider_kind enum

* feat(nextcloud): add ProviderKind entry and HMAC-signed provider

* feat(nextcloud): add Zod schema and form component

* feat(nextcloud): wire nextcloud into form registry and UI provider list

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(nextcloud): register sendNextcloud in provider dispatch map

* fix: multiple webhook headers and nextcloud talk notification provider

* test(webhook): update e2e to use Add Header button and Header Value label

* fix: webhook.ts

---------

Co-authored-by: charles-gauthereau <charles.gauthereau@soluce-technologies.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Charles GTE
2026-05-21 19:45:08 +02:00
committed by GitHub
co-authored by Claude Sonnet 4.6 charles-gauthereau
parent 2cd5bda416
commit af3df7f72a
16 changed files with 3017 additions and 76 deletions
+1
View File
@@ -0,0 +1 @@
ALTER TYPE "public"."provider_kind" ADD VALUE 'nextcloud';
File diff suppressed because it is too large Load Diff
+7
View File
@@ -393,6 +393,13 @@
"when": 1779342014802,
"tag": "0055_yielding_justin_hammer",
"breakpoints": true
},
{
"idx": 56,
"version": "7",
"when": 1779380470656,
"tag": "0056_lazy_cyclops",
"breakpoints": true
}
]
}
+1 -1
View File
@@ -7,7 +7,7 @@ import {z} from "zod";
import {OrganizationInvitation} from "@/db/schema/05_invitation";
export const providerKindEnum = pgEnum('provider_kind', ['slack', 'smtp', 'discord', 'telegram', 'gotify', 'ntfy', 'webhook']);
export const providerKindEnum = pgEnum('provider_kind', ['slack', 'smtp', 'discord', 'telegram', 'gotify', 'ntfy', 'webhook', 'nextcloud']);
export const notificationChannel = pgTable('notification_channel', {
id: uuid("id").defaultRandom().primaryKey(),