telebot
Version:
The easy way to write Telegram bots.
66 lines (65 loc) • 3.31 kB
JavaScript
;
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;