@@ -13,6 +13,7 @@ import {
1313 createExternalWebhookSubscription ,
1414 shouldRecreateExternalWebhookSubscription ,
1515} from '@/lib/webhooks/provider-subscriptions'
16+ import { mergeNonUserFields } from '@/lib/webhooks/utils'
1617import { getUserEntityPermissions } from '@/lib/workspaces/permissions/utils'
1718
1819const logger = createLogger ( 'WebhookAPI' )
@@ -185,21 +186,22 @@ export async function PATCH(request: NextRequest, { params }: { params: Promise<
185186
186187 const existingProviderConfig =
187188 ( webhookData . webhook . providerConfig as Record < string , unknown > ) || { }
189+ const nextProvider = ( provider ?? webhookData . webhook . provider ) as string
190+
188191 let nextProviderConfig =
189192 providerConfig !== undefined &&
190193 resolvedProviderConfig &&
191194 typeof resolvedProviderConfig === 'object'
192195 ? ( resolvedProviderConfig as Record < string , unknown > )
193196 : existingProviderConfig
194- const nextProvider = ( provider ?? webhookData . webhook . provider ) as string
195197
196198 if (
197199 providerConfig !== undefined &&
198200 shouldRecreateExternalWebhookSubscription ( {
199201 previousProvider : webhookData . webhook . provider as string ,
200202 nextProvider,
201203 previousConfig : existingProviderConfig ,
202- nextConfig : nextProviderConfig ,
204+ nextConfig : originalProviderConfig as Record < string , unknown > ,
203205 } )
204206 ) {
205207 await cleanupExternalWebhook (
@@ -231,24 +233,13 @@ export async function PATCH(request: NextRequest, { params }: { params: Promise<
231233 hasFailedCountUpdate : failedCount !== undefined ,
232234 } )
233235
234- let finalProviderConfig = webhooks [ 0 ] . webhook . providerConfig
236+ let finalProviderConfig : Record < string , unknown > =
237+ ( webhooks [ 0 ] . webhook . providerConfig as Record < string , unknown > ) || { }
235238 if ( providerConfig !== undefined && originalProviderConfig ) {
236- const existingConfig = existingProviderConfig
237- finalProviderConfig = {
238- ...originalProviderConfig ,
239- credentialId : existingConfig . credentialId ,
240- credentialSetId : existingConfig . credentialSetId ,
241- userId : existingConfig . userId ,
242- historyId : existingConfig . historyId ,
243- lastCheckedTimestamp : existingConfig . lastCheckedTimestamp ,
244- setupCompleted : existingConfig . setupCompleted ,
245- externalId : existingConfig . externalId ,
246- }
247- for ( const [ key , value ] of Object . entries ( nextProviderConfig ) ) {
248- if ( ! ( key in originalProviderConfig ) ) {
249- ; ( finalProviderConfig as Record < string , unknown > ) [ key ] = value
250- }
251- }
239+ const userProvided = originalProviderConfig as Record < string , unknown >
240+ finalProviderConfig = { ...userProvided }
241+ mergeNonUserFields ( finalProviderConfig , existingProviderConfig , userProvided )
242+ mergeNonUserFields ( finalProviderConfig , nextProviderConfig , userProvided )
252243 }
253244
254245 const updatedWebhook = await db
0 commit comments