diff --git a/types/config.ts b/types/config.ts index b512642..6ba8c2d 100644 --- a/types/config.ts +++ b/types/config.ts @@ -65,7 +65,7 @@ export type WebhookConfig = { method?: 'GET' | 'POST' | 'PUT' | 'PATCH' headers?: { [key: string]: string | number } payloadType: 'param' | 'json' | 'x-www-form-urlencoded' - payload: { [key: string]: string | number } + payload: any timeout?: number } diff --git a/worker/src/util.ts b/worker/src/util.ts index 800041d..f9b33c3 100644 --- a/worker/src/util.ts +++ b/worker/src/util.ts @@ -66,6 +66,18 @@ function formatStatusChangeNotification( } } +function templateWebhookPlayload(payload: any, message: string) { + for (const key in payload) { + if (Object.prototype.hasOwnProperty.call(payload, key)) { + if (payload[key] === '$MSG') { + payload[key] = message + } else if (typeof payload[key] === 'object' && payload[key] !== null) { + templateWebhookPlayload(payload[key], message) + } + } + } +} + async function webhookNotify(webhook: WebhookConfig, message: string) { console.log( 'Sending webhook notification: ' + JSON.stringify(message) + ' to webhook ' + webhook.url @@ -74,14 +86,8 @@ async function webhookNotify(webhook: WebhookConfig, message: string) { let url = webhook.url let method = webhook.method let headers = new Headers(webhook.headers as any) - let payloadTemplated: { [key: string]: string | number } = JSON.parse( - JSON.stringify(webhook.payload) - ) - Object.keys(payloadTemplated).forEach((k) => { - if (payloadTemplated[k] === '$MSG') { - payloadTemplated[k] = message - } - }) + let payloadTemplated: { [key: string]: string | number } = JSON.parse(JSON.stringify(webhook.payload)) + templateWebhookPlayload(payloadTemplated, message) let body = undefined switch (webhook.payloadType) {