Removal of semicolon.

This commit is contained in:
Rodrigo Rodriguez 2018-09-12 04:47:11 -03:00
parent 911aa77b11
commit 81dafca36e
2 changed files with 109 additions and 109 deletions

View file

@ -30,12 +30,12 @@
| | | |
\*****************************************************************************/ \*****************************************************************************/
"use strict"; "use strict"
const { TextPrompt } = require("botbuilder-dialogs"); const { TextPrompt } = require("botbuilder-dialogs")
const UrlJoin = require("url-join"); const UrlJoin = require("url-join")
const express = require("express"); const express = require("express")
const logger = require("../../../src/logger"); const logger = require("../../../src/logger")
import { import {
BotFrameworkAdapter, BotFrameworkAdapter,
@ -43,29 +43,29 @@ import {
ConversationState, ConversationState,
MemoryStorage, MemoryStorage,
UserState UserState
} from "botbuilder"; } from "botbuilder"
import { GBCoreService } from "./GBCoreService"; import { GBCoreService } from "./GBCoreService"
import { GBConversationalService } from "./GBConversationalService"; import { GBConversationalService } from "./GBConversationalService"
import * as request from "request-promise-native"; import * as request from "request-promise-native"
import { GBMinInstance, IGBPackage } from "botlib"; import { GBMinInstance, IGBPackage } from "botlib"
import { GBAnalyticsPackage } from "../../analytics.gblib"; import { GBAnalyticsPackage } from "../../analytics.gblib"
import { GBCorePackage } from "../../core.gbapp"; import { GBCorePackage } from "../../core.gbapp"
import { GBKBPackage } from "../../kb.gbapp"; import { GBKBPackage } from "../../kb.gbapp"
import { GBDeployer } from "./GBDeployer"; import { GBDeployer } from "./GBDeployer"
import { GBSecurityPackage } from "../../security.gblib"; import { GBSecurityPackage } from "../../security.gblib"
import { GBAdminPackage } from "./../../admin.gbapp/index"; import { GBAdminPackage } from "./../../admin.gbapp/index"
import { GBCustomerSatisfactionPackage } from "../../customer-satisfaction.gbapp"; import { GBCustomerSatisfactionPackage } from "../../customer-satisfaction.gbapp"
import { GBWhatsappPackage } from "../../whatsapp.gblib"; import { GBWhatsappPackage } from "../../whatsapp.gblib"
/** Minimal service layer for a bot. */ /** Minimal service layer for a bot. */
export class GBMinService { export class GBMinService {
core: GBCoreService; core: GBCoreService
conversationalService: GBConversationalService; conversationalService: GBConversationalService
deployer: GBDeployer; deployer: GBDeployer
corePackage = "core.gbai"; corePackage = "core.gbai"
/** /**
* Static initialization of minimal instance. * Static initialization of minimal instance.
@ -77,9 +77,9 @@ export class GBMinService {
conversationalService: GBConversationalService, conversationalService: GBConversationalService,
deployer: GBDeployer deployer: GBDeployer
) { ) {
this.core = core; this.core = core
this.conversationalService = conversationalService; this.conversationalService = conversationalService
this.deployer = deployer; this.deployer = deployer
} }
/** /**
@ -99,20 +99,20 @@ export class GBMinService {
): Promise<GBMinInstance> { ): Promise<GBMinInstance> {
// Serves default UI on root address '/'. // Serves default UI on root address '/'.
let uiPackage = "default.gbui"; let uiPackage = "default.gbui"
server.use( server.use(
"/", "/",
express.static(UrlJoin(GBDeployer.deployFolder, uiPackage, "build")) express.static(UrlJoin(GBDeployer.deployFolder, uiPackage, "build"))
); )
// Loads all bot instances from storage and starting loading them. // Loads all bot instances from storage and starting loading them.
let instances = await this.core.loadInstances(); let instances = await this.core.loadInstances()
Promise.all( Promise.all(
instances.map(async instance => { instances.map(async instance => {
// Gets the authorization key for each instance from Bot Service. // Gets the authorization key for each instance from Bot Service.
let webchatToken = await this.getWebchatToken(instance); let webchatToken = await this.getWebchatToken(instance)
// Serves the bot information object via HTTP so clients can get // Serves the bot information object via HTTP so clients can get
// instance information stored on server. // instance information stored on server.
@ -121,10 +121,10 @@ export class GBMinService {
(async () => { (async () => {
// Returns the instance object to clients requesting bot info. // Returns the instance object to clients requesting bot info.
let botId = req.params.botId; let botId = req.params.botId
let instance = await this.core.loadInstance(botId); let instance = await this.core.loadInstance(botId)
if (instance) { if (instance) {
let speechToken = await this.getSTSToken(instance); let speechToken = await this.getSTSToken(instance)
res.send( res.send(
JSON.stringify({ JSON.stringify({
@ -135,28 +135,28 @@ export class GBMinService {
speechToken: speechToken, speechToken: speechToken,
conversationId: webchatToken.conversationId conversationId: webchatToken.conversationId
}) })
); )
} else { } else {
let error = `Instance not found: ${botId}.`; let error = `Instance not found: ${botId}.`
res.sendStatus(error); res.sendStatus(error)
logger.error(error); logger.error(error)
} }
})(); })()
}); })
// Build bot adapter. // Build bot adapter.
var { min, adapter, conversationState } = await this.buildBotAdapter( var { min, adapter, conversationState } = await this.buildBotAdapter(
instance instance
); )
// Call the loadBot context.activity for all packages. // Call the loadBot context.activity for all packages.
this.invokeLoadBot(appPackages, min, server); this.invokeLoadBot(appPackages, min, server)
// Serves individual URL for each bot conversational interface... // Serves individual URL for each bot conversational interface...
let url = `/api/messages/${instance.botId}`; let url = `/api/messages/${instance.botId}`
server.post(url, async (req, res) => { server.post(url, async (req, res) => {
return this.receiver( return this.receiver(
adapter, adapter,
@ -166,20 +166,20 @@ export class GBMinService {
min, min,
instance, instance,
appPackages appPackages
); )
}); })
logger.info( logger.info(
`GeneralBots(${instance.engineName}) listening on: ${url}.` `GeneralBots(${instance.engineName}) listening on: ${url}.`
); )
// Serves individual URL for each bot user interface. // Serves individual URL for each bot user interface.
let uiUrl = `/${instance.botId}`; let uiUrl = `/${instance.botId}`
server.use( server.use(
uiUrl, uiUrl,
express.static(UrlJoin(GBDeployer.deployFolder, uiPackage, "build")) express.static(UrlJoin(GBDeployer.deployFolder, uiPackage, "build"))
); )
logger.info(`Bot UI ${uiPackage} acessible at: ${uiUrl}.`); logger.info(`Bot UI ${uiPackage} acessible at: ${uiUrl}.`)
// Setups handlers. // Setups handlers.
// send: function (context.activity, next) { // send: function (context.activity, next) {
@ -196,37 +196,37 @@ export class GBMinService {
// ) // )
// next() // next()
}) })
); )
} }
private async buildBotAdapter(instance: any) { private async buildBotAdapter(instance: any) {
let adapter = new BotFrameworkAdapter({ let adapter = new BotFrameworkAdapter({
appId: instance.marketplaceId, appId: instance.marketplaceId,
appPassword: instance.marketplacePassword appPassword: instance.marketplacePassword
}); })
const storage = new MemoryStorage(); const storage = new MemoryStorage()
const conversationState = new ConversationState(storage); const conversationState = new ConversationState(storage)
const userState = new UserState(storage); const userState = new UserState(storage)
adapter.use(new BotStateSet(conversationState, userState)); adapter.use(new BotStateSet(conversationState, userState))
// The minimal bot is built here. // The minimal bot is built here.
let min = new GBMinInstance(); let min = new GBMinInstance()
min.botId = instance.botId; min.botId = instance.botId
min.bot = adapter; min.bot = adapter
min.userState = userState; min.userState = userState
min.core = this.core; min.core = this.core
min.conversationalService = this.conversationalService; min.conversationalService = this.conversationalService
min.instance = await this.core.loadInstance(min.botId); min.instance = await this.core.loadInstance(min.botId)
min.dialogs.add("textPrompt", new TextPrompt()); min.dialogs.add("textPrompt", new TextPrompt())
return { min, adapter, conversationState }; return { min, adapter, conversationState }
} }
private invokeLoadBot(appPackages: any[], min: any, server: any) { private invokeLoadBot(appPackages: any[], min: any, server: any) {
appPackages.forEach(e => { appPackages.forEach(e => {
e.sysPackages = new Array<IGBPackage>(); e.sysPackages = new Array<IGBPackage>()
[ [
GBAdminPackage, GBAdminPackage,
@ -237,19 +237,19 @@ export class GBMinService {
GBCustomerSatisfactionPackage, GBCustomerSatisfactionPackage,
GBWhatsappPackage GBWhatsappPackage
].forEach(sysPackage => { ].forEach(sysPackage => {
logger.info(`Loading sys package: ${sysPackage.name}...`); logger.info(`Loading sys package: ${sysPackage.name}...`)
let p = Object.create(sysPackage.prototype) as IGBPackage; let p = Object.create(sysPackage.prototype) as IGBPackage
p.loadBot(min); p.loadBot(min)
e.sysPackages.push(p); e.sysPackages.push(p)
if (sysPackage.name === "GBWhatsappPackage") { if (sysPackage.name === "GBWhatsappPackage") {
let url = "/instances/:botId/whatsapp"; let url = "/instances/:botId/whatsapp"
server.post(url, (req, res) => { server.post(url, (req, res) => {
p["channel"].received(req, res); p["channel"].received(req, res)
}); })
} }
}, this); }, this)
e.loadBot(min); e.loadBot(min)
}, this); }, this)
} }
/** /**
@ -265,9 +265,9 @@ export class GBMinService {
appPackages: any[] appPackages: any[]
) { ) {
return adapter.processActivity(req, res, async context => { return adapter.processActivity(req, res, async context => {
const state = conversationState.get(context); const state = conversationState.get(context)
const dc = min.dialogs.createContext(context, state); const dc = min.dialogs.createContext(context, state)
const user = min.userState.get(dc.context); const user = min.userState.get(dc.context)
if (!user.loaded) { if (!user.loaded) {
await min.conversationalService.sendEvent(dc, "loadInstance", { await min.conversationalService.sendEvent(dc, "loadInstance", {
@ -275,65 +275,65 @@ export class GBMinService {
botId: instance.botId, botId: instance.botId,
theme: instance.theme, theme: instance.theme,
secret: instance.webchatKey secret: instance.webchatKey
}); })
user.loaded = true; user.loaded = true
user.subjects = []; user.subjects = []
} }
logger.info( logger.info(
`[RCV]: ${context.activity.type}, ChannelID: ${ `[RCV]: ${context.activity.type}, ChannelID: ${
context.activity.channelId context.activity.channelId
}, Name: ${context.activity.name}, Text: ${context.activity.text}.` }, Name: ${context.activity.name}, Text: ${context.activity.text}.`
); )
if ( if (
context.activity.type === "conversationUpdate" && context.activity.type === "conversationUpdate" &&
context.activity.membersAdded.length > 0 context.activity.membersAdded.length > 0
) { ) {
let member = context.activity.membersAdded[0]; let member = context.activity.membersAdded[0]
if (member.name === "GeneralBots") { if (member.name === "GeneralBots") {
logger.info(`Bot added to conversation, starting chat...`); logger.info(`Bot added to conversation, starting chat...`)
appPackages.forEach(e => { appPackages.forEach(e => {
e.onNewSession(min, dc); e.onNewSession(min, dc)
}); })
await dc.begin("/"); await dc.begin("/")
} else { } else {
logger.info(`Member added to conversation: ${member.name}`); logger.info(`Member added to conversation: ${member.name}`)
} }
} else if (context.activity.type === "message") { } else if (context.activity.type === "message") {
// Check to see if anyone replied. If not then start echo dialog // Check to see if anyone replied. If not then start echo dialog
if (context.activity.text === "admin") { if (context.activity.text === "admin") {
await dc.begin("/admin"); await dc.begin("/admin")
} else if (context.activity.text.startsWith("{\"title\"")) { } else if (context.activity.text.startsWith("{\"title\"")) {
await dc.begin("/menu", {data:JSON.parse(context.activity.text)}); await dc.begin("/menu", {data:JSON.parse(context.activity.text)})
} else { } else {
await dc.continue(); await dc.continue()
} }
} else if (context.activity.type === "event") { } else if (context.activity.type === "event") {
if (context.activity.name === "whoAmI") { if (context.activity.name === "whoAmI") {
await dc.begin("/whoAmI"); await dc.begin("/whoAmI")
} else if (context.activity.name === "showSubjects") { } else if (context.activity.name === "showSubjects") {
await dc.begin("/menu"); await dc.begin("/menu")
} else if (context.activity.name === "giveFeedback") { } else if (context.activity.name === "giveFeedback") {
await dc.begin("/feedback", { await dc.begin("/feedback", {
fromMenu: true fromMenu: true
}); })
} else if (context.activity.name === "showFAQ") { } else if (context.activity.name === "showFAQ") {
await dc.begin("/faq"); await dc.begin("/faq")
} else if (context.activity.name === "ask") { } else if (context.activity.name === "ask") {
await dc.begin("/answer", { await dc.begin("/answer", {
query: (context.activity as any).data, query: (context.activity as any).data,
fromFaq: true fromFaq: true
}); })
} else if (context.activity.name === "quality") { } else if (context.activity.name === "quality") {
await dc.begin("/quality", { await dc.begin("/quality", {
// TODO: score: context.activity.data // TODO: score: context.activity.data
}); })
} else { } else {
await dc.continue(); await dc.continue()
} }
} }
}); })
} }
/** /**
@ -349,15 +349,15 @@ export class GBMinService {
headers: { headers: {
Authorization: `Bearer ${instance.webchatKey}` Authorization: `Bearer ${instance.webchatKey}`
} }
}; }
try { try {
let json = await request(options); let json = await request(options)
return Promise.resolve(JSON.parse(json)); return Promise.resolve(JSON.parse(json))
} catch (error) { } catch (error) {
let msg = `Error calling Direct Line client, verify Bot endpoint on the cloud. Error is: ${error}.`; let msg = `Error calling Direct Line client, verify Bot endpoint on the cloud. Error is: ${error}.`
logger.error(msg); logger.error(msg)
return Promise.reject(msg); return Promise.reject(msg)
} }
} }
@ -376,14 +376,14 @@ export class GBMinService {
headers: { headers: {
"Ocp-Apim-Subscription-Key": instance.speechKey "Ocp-Apim-Subscription-Key": instance.speechKey
} }
}; }
try { try {
return await request(options); return await request(options)
} catch (error) { } catch (error) {
let msg = `Error calling Speech to Text client. Error is: ${error}.`; let msg = `Error calling Speech to Text client. Error is: ${error}.`
logger.error(msg); logger.error(msg)
return Promise.reject(msg); return Promise.reject(msg)
} }
} }
} }

View file

@ -98,7 +98,7 @@ export class GBServer {
// Build a minimal bot instance for each .gbot deployment. // Build a minimal bot instance for each .gbot deployment.
let conversationalService = new GBConversationalService(core) let conversationalService = new GBConversationalService(core)
let minService = new GBMinService(core, conversationalService, deployer); let minService = new GBMinService(core, conversationalService, deployer)
[GBAdminPackage, GBAnalyticsPackage, GBCorePackage, GBSecurityPackage, [GBAdminPackage, GBAnalyticsPackage, GBCorePackage, GBSecurityPackage,
GBKBPackage, GBCustomerSatisfactionPackage, GBWhatsappPackage].forEach(e => { GBKBPackage, GBCustomerSatisfactionPackage, GBWhatsappPackage].forEach(e => {