bottender
Version:
A framework for building conversational user interfaces.
85 lines • 3.45 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 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