UNPKG

wa-chat-server-mluvii

Version:

Mluvii adapter for the modules wa-chat-server

113 lines (112 loc) 4.81 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 }); exports.MluviiPublicAPI = void 0; const querystring_1 = __importDefault(require("querystring")); class MluviiPublicAPI { constructor(config, dependencies) { this.config = config; this.dependencies = dependencies; this.axios = dependencies.axios; this.log = dependencies.log; } getTokenRequest() { return { method: 'post', url: this.config.getTokenUrl, headers: { 'Content-Type': 'application/x-www-form-urlencoded', }, data: querystring_1.default.stringify({ response_type: 'token', grant_type: 'client_credentials', client_id: this.config.username, client_secret: this.config.secret, }), }; } /** * Removes some keys from the response for the purpose of logging */ pruneResponse(response) { const { headers, data, status, statusText } = response; return { headers, data, status, statusText }; } getAccessToken() { return __awaiter(this, void 0, void 0, function* () { const tm = new Date(); if (this.token && tm < this.tokenExpiration) { return this.token; } const request = this.getTokenRequest(); try { const response = yield this.axios(request); this.log.info('MluviiPublicAPI: getAccessToken request', { request, response: this.pruneResponse(response), }); this.token = response.data.access_token; this.tokenExpiration = new Date(new Date().getTime() + 1000 * response.data.expires_in); this.log.info('MluviiPublicAPI - setting access token' + ` (expiration on ${this.tokenExpiration.toISOString()}): ${this.token}`); return this.token; } catch (error) { this.log.error('MluviiPublicAPI: getAccessToken request failed', { request, error, }); } }); } sendMessage(sessionId, watsonResponse, // AssistantV1.Response session, date = new Date()) { return __awaiter(this, void 0, void 0, function* () { const converter = new this.dependencies.watsonToMluviiConverterClass(watsonResponse, this.dependencies, session); const activities = converter.convert(); const token = yield this.getAccessToken(); const ms = date.getTime(); let index = 0; let activity; let request; try { for (activity of activities) { const timestamp = new Date(ms + index).toISOString(); index++; request = { method: 'post', headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${token}`, }, url: `${this.config.sendMessageUrl}/${this.config.chatbotId}/activity`, data: Object.assign(Object.assign({ sessionId }, activity), { timestamp }), }; const response = yield this.axios(request); this.log.info('MluviiPublicAPI: sendMessage', { request, response: this.pruneResponse(response), }); } } catch (error) { this.log.error(`MluviiPublicAPI: sendMessage (call ${index}/${activities.length})`, { request, error, }); } }); } } exports.MluviiPublicAPI = MluviiPublicAPI;