fix #148: handle nested webhook payload
parent
1d12cf0b3e
commit
20e7f47b5e
|
|
@ -65,7 +65,7 @@ export type WebhookConfig = {
|
||||||
method?: 'GET' | 'POST' | 'PUT' | 'PATCH'
|
method?: 'GET' | 'POST' | 'PUT' | 'PATCH'
|
||||||
headers?: { [key: string]: string | number }
|
headers?: { [key: string]: string | number }
|
||||||
payloadType: 'param' | 'json' | 'x-www-form-urlencoded'
|
payloadType: 'param' | 'json' | 'x-www-form-urlencoded'
|
||||||
payload: { [key: string]: string | number }
|
payload: any
|
||||||
timeout?: number
|
timeout?: number
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
async function webhookNotify(webhook: WebhookConfig, message: string) {
|
||||||
console.log(
|
console.log(
|
||||||
'Sending webhook notification: ' + JSON.stringify(message) + ' to webhook ' + webhook.url
|
'Sending webhook notification: ' + JSON.stringify(message) + ' to webhook ' + webhook.url
|
||||||
|
|
@ -75,11 +87,7 @@ async function webhookNotify(webhook: WebhookConfig, message: string) {
|
||||||
let method = webhook.method
|
let method = webhook.method
|
||||||
let headers = new Headers(webhook.headers as any)
|
let headers = new Headers(webhook.headers as any)
|
||||||
let payloadTemplated: { [key: string]: string | number } = JSON.parse(JSON.stringify(webhook.payload))
|
let payloadTemplated: { [key: string]: string | number } = JSON.parse(JSON.stringify(webhook.payload))
|
||||||
Object.keys(payloadTemplated).forEach((k) => {
|
templateWebhookPlayload(payloadTemplated, message)
|
||||||
if (payloadTemplated[k] === '$MSG') {
|
|
||||||
payloadTemplated[k] = message
|
|
||||||
}
|
|
||||||
})
|
|
||||||
let body = undefined
|
let body = undefined
|
||||||
|
|
||||||
switch (webhook.payloadType) {
|
switch (webhook.payloadType) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue