73 lines
2.9 KiB
JavaScript
73 lines
2.9 KiB
JavaScript
|
"use strict";
|
||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
exports.webhookCallback = void 0;
|
||
|
const platform_node_js_1 = require("../platform.node.js");
|
||
|
const frameworks_js_1 = require("./frameworks.js");
|
||
|
const debugErr = (0, platform_node_js_1.debug)("grammy:error");
|
||
|
const callbackAdapter = (update, callback, header, unauthorized = () => callback('"unauthorized"')) => ({
|
||
|
update: Promise.resolve(update),
|
||
|
respond: callback,
|
||
|
header,
|
||
|
unauthorized,
|
||
|
});
|
||
|
const adapters = { ...frameworks_js_1.adapters, callback: callbackAdapter };
|
||
|
function webhookCallback(bot, adapter = platform_node_js_1.defaultAdapter, onTimeout = "throw", timeoutMilliseconds = 10000, secretToken) {
|
||
|
const { onTimeout: timeout = "throw", timeoutMilliseconds: ms = 10000, secretToken: token, } = typeof onTimeout === "object"
|
||
|
? onTimeout
|
||
|
: { onTimeout, timeoutMilliseconds, secretToken };
|
||
|
let initialized = false;
|
||
|
const server = typeof adapter === "string"
|
||
|
? adapters[adapter]
|
||
|
: adapter;
|
||
|
return async (...args) => {
|
||
|
const { update, respond, unauthorized, end, handlerReturn, header } = server(...args);
|
||
|
if (!initialized) {
|
||
|
// Will dedupe concurrently incoming calls from several updates
|
||
|
await bot.init();
|
||
|
initialized = true;
|
||
|
}
|
||
|
if (header !== token) {
|
||
|
await unauthorized();
|
||
|
// TODO: investigate deno bug that happens when this console logging is removed
|
||
|
console.log(handlerReturn);
|
||
|
return handlerReturn;
|
||
|
}
|
||
|
let usedWebhookReply = false;
|
||
|
const webhookReplyEnvelope = {
|
||
|
async send(json) {
|
||
|
usedWebhookReply = true;
|
||
|
await respond(json);
|
||
|
},
|
||
|
};
|
||
|
await timeoutIfNecessary(bot.handleUpdate(await update, webhookReplyEnvelope), typeof timeout === "function" ? () => timeout(...args) : timeout, ms);
|
||
|
if (!usedWebhookReply)
|
||
|
end === null || end === void 0 ? void 0 : end();
|
||
|
return handlerReturn;
|
||
|
};
|
||
|
}
|
||
|
exports.webhookCallback = webhookCallback;
|
||
|
function timeoutIfNecessary(task, onTimeout, timeout) {
|
||
|
if (timeout === Infinity)
|
||
|
return task;
|
||
|
return new Promise((resolve, reject) => {
|
||
|
const handle = setTimeout(() => {
|
||
|
if (onTimeout === "throw") {
|
||
|
reject(new Error(`Request timed out after ${timeout} ms`));
|
||
|
}
|
||
|
else {
|
||
|
if (typeof onTimeout === "function")
|
||
|
onTimeout();
|
||
|
resolve();
|
||
|
}
|
||
|
const now = Date.now();
|
||
|
task.finally(() => {
|
||
|
const diff = Date.now() - now;
|
||
|
debugErr(`Request completed ${diff} ms after timeout!`);
|
||
|
});
|
||
|
}, timeout);
|
||
|
task.then(resolve)
|
||
|
.catch(reject)
|
||
|
.finally(() => clearTimeout(handle));
|
||
|
});
|
||
|
}
|