UNPKG

whatsapp-business

Version:

Node.js connector for the WhatsApp Business APIs with TypeScript support, integration tests and more.

58 lines (57 loc) 3.69 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getWebhookController = exports.postWebhookController = exports.webhookHandler = void 0; var webhookHandler = function (body, _a) { var _b; var onError = _a.onError, onMessageReceived = _a.onMessageReceived, onStatusReceived = _a.onStatusReceived, onTextMessageReceived = _a.onTextMessageReceived; (_b = body.entry) === null || _b === void 0 ? void 0 : _b.forEach(function (entry) { var _a; (_a = entry === null || entry === void 0 ? void 0 : entry.changes) === null || _a === void 0 ? void 0 : _a.forEach(function (change) { var _a, _b, _c, _d, _e, _f; //Generally, if not always, the message is just the index 0 //But, since the docs don't say anything, we do it through a loop (_b = (_a = change === null || change === void 0 ? void 0 : change.value) === null || _a === void 0 ? void 0 : _a.messages) === null || _b === void 0 ? void 0 : _b.forEach(function (message) { var _a, _b, _c; //The contact is always the 0 and it is only received when there the messages field is present var contact = (_a = change === null || change === void 0 ? void 0 : change.value) === null || _a === void 0 ? void 0 : _a.contacts[0]; //Call message event onMessageReceived && onMessageReceived(message, contact, (_b = change === null || change === void 0 ? void 0 : change.value) === null || _b === void 0 ? void 0 : _b.metadata); //If the message is type of text, then call the respective event if (message.type === "text" && message.text) onTextMessageReceived && onTextMessageReceived({ id: message.id, type: message.type, text: message.text, from: message.from, timestamp: message.timestamp, }, contact, (_c = change === null || change === void 0 ? void 0 : change.value) === null || _c === void 0 ? void 0 : _c.metadata); }); //Call status event (_d = (_c = change === null || change === void 0 ? void 0 : change.value) === null || _c === void 0 ? void 0 : _c.statuses) === null || _d === void 0 ? void 0 : _d.forEach(function (status) { var _a; onStatusReceived && onStatusReceived(status, (_a = change === null || change === void 0 ? void 0 : change.value) === null || _a === void 0 ? void 0 : _a.metadata); }); //Call error event (_f = (_e = change === null || change === void 0 ? void 0 : change.value) === null || _e === void 0 ? void 0 : _e.errors) === null || _f === void 0 ? void 0 : _f.forEach(function (err) { return onError && onError(err); }); }); }); }; exports.webhookHandler = webhookHandler; var postWebhookController = function (events) { return function (req, res) { (0, exports.webhookHandler)(req.body, events); return res.send("success"); }; }; exports.postWebhookController = postWebhookController; var getWebhookController = function (token) { return function (req, res) { if (req.query["hub.mode"] == "subscribe" && req.query["hub.verify_token"] == token) { try { return res.send(req.query["hub.challenge"]); } catch (err) { console.error("Could not subscribe to the webhook", "err: ".concat(JSON.stringify(err))); } } return res.sendStatus(400); }; }; exports.getWebhookController = getWebhookController;