UNPKG

bottender

Version:

A framework for building conversational user interfaces.

85 lines 3.45 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 getChannelBotAndRequestContext_1 = __importDefault(require("../shared/getChannelBotAndRequestContext")); const getConsoleBot_1 = __importDefault(require("../shared/getConsoleBot")); class Server { constructor({ useConsole = false } = {}) { this.useConsole = useConsole; } handleRequest(req, res) { res.statusCode = 200; return this.run(req, res).catch((err) => { console.error(err); res.statusCode = 500; res.end('Internal Server Error'); }); } sendResponse(res, response) { if (response) { Object.entries(response.headers || {}).forEach(([key, value]) => { res.setHeader(key, value); }); res.statusCode = response.status || 200; if (response.body && typeof response.body === 'object' && !Buffer.isBuffer(response.body)) { res.setHeader('Content-Type', 'application/json; charset=utf-8'); res.end(JSON.stringify(response.body)); } else { res.end(response.body || ''); } } else { res.statusCode = 200; res.end(''); } } prepare() { return __awaiter(this, void 0, void 0, function* () { if (this.useConsole) { const bot = getConsoleBot_1.default(); bot.createRuntime(); } }); } getRequestHandler() { return this.handleRequest.bind(this); } run(req, res) { return __awaiter(this, void 0, void 0, function* () { if (this.useConsole) { return; } const { channelBot, requestContext } = getChannelBotAndRequestContext_1.default(req) || {}; if (!channelBot || !requestContext) { return; } const bot = channelBot.bot; const result = yield bot.connector.preprocess(requestContext); const { shouldNext } = result; let { response } = result; if (!shouldNext) { this.sendResponse(res, response); return; } const requestHandler = bot.createRequestHandler(); response = yield requestHandler(Object.assign(Object.assign({}, requestContext.query), requestContext.body), requestContext); this.sendResponse(res, response); }); } } exports.default = Server; //# sourceMappingURL=Server.js.map