@twilio-labs/plugin-webhook
Version:
Emulate webhook requests from your commandline
61 lines (53 loc) • 1.54 kB
JavaScript
const webhooks = require('twilio/lib/webhooks/webhooks');
function isValidAuthToken(token) {
return typeof token === 'string' && token.length === 32;
}
function getEventData(type, accountSid, dataOverrides = {}) {
const { event } = require(`./webhook-events/${type}`);
event.body = {
...event.body,
AccountSid: accountSid,
...dataOverrides
}
return event;
}
function getAxiosRequest(method, url, eventData, authToken) {
let fullUrl = new URL(url);
let data = undefined;
const headers = { ...eventData.headers };
if (method === 'GET') {
for (const [key, value] of Object.entries(eventData.body)) {
fullUrl.searchParams.append(key, value);
}
} else if (method === 'POST') {
const params = new URLSearchParams();
for (const [key, value] of Object.entries(eventData.body)) {
params.append(key, value);
}
data = params.toString();
}
if (isValidAuthToken(authToken)) {
const signature = webhooks.getExpectedTwilioSignature(
authToken,
fullUrl.toString(),
method === 'POST' ? eventData.body : {}
);
headers['X-Twilio-Signature'] = signature;
}
return {
method,
url: fullUrl.toString(),
headers,
data
}
}
function getDataOverrides(dataFields) {
const data = {};
for (const entry of dataFields) {
const [key, ...values] = entry.split('=');
const value = values.join('=');
data[key] = value;
}
return data;
}
module.exports = { getEventData, isValidAuthToken, getAxiosRequest, getDataOverrides };