UNPKG

telebot

Version:

The easy way to write Telegram bots.

66 lines (65 loc) 3.31 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const fs_1 = __importDefault(require("fs")); const url_1 = __importDefault(require("url")); const http_1 = __importDefault(require("http")); const https_1 = __importDefault(require("https")); const utils_1 = require("../utils"); exports.allowedWebhookPorts = [80, 88, 443, 8443]; function webhookServer(bot, options) { return __awaiter(this, void 0, void 0, function* () { const { host, port } = options; const key = options.key && fs_1.default.readFileSync(options.key); const cert = options.cert && fs_1.default.readFileSync(options.cert); const pathname = url_1.default.parse(options.url).pathname; function listener(request, response) { const path = pathname && pathname !== "/" ? pathname : ""; const endpoint = `${path}/${bot.getToken()}`; if (request.url === endpoint && request.method === "POST") { const body = []; request.on("data", (chunk) => body.push(chunk)); request.on("end", () => { let update; try { update = utils_1.convertToArray(JSON.parse(body.join())); } catch (error) { response.writeHead(415); response.end(); bot.dev.error("webhook.parse", { error }); return error; } bot.dev.debug("webhook.update", { data: update }); bot.processTelegramUpdates(update) .catch((error) => { bot.dev.error("webhook.processTelegramUpdates", { error }); response.writeHead(500); return error; }) .finally(() => { response.end(); }); }); } } const server = key && cert ? https_1.default.createServer({ key, cert }, listener) : http_1.default.createServer(listener); server.listen(port, host, () => { bot.dev.info("webhook.listen", { data: { port, host } }); // eslint-disable-next-line no-console console.log(`TeleBot started${key ? " secure" : ""} webhook server on "${host}:${port}"`); }); }); } exports.webhookServer = webhookServer;