From 0cf11d00af14861d84314fa6ac1594d4be09e389 Mon Sep 17 00:00:00 2001 From: Rodrigo Rodriguez Date: Thu, 2 Apr 2020 21:07:23 -0300 Subject: [PATCH 01/10] fix(core.gbapp): Fix in startup code in blank. --- package-lock.json | 16 ++++++++-------- package.json | 3 ++- .../core.gbapp/services/GBImporterService.ts | 3 ++- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0ec1db2a..217d5770 100644 --- a/package-lock.json +++ b/package-lock.json @@ -69,11 +69,6 @@ "uuid": "^3.3.2" }, "dependencies": { - "node-fetch": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", - "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==" - }, "tslib": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", @@ -3229,9 +3224,9 @@ } }, "botlib": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/botlib/-/botlib-1.4.3.tgz", - "integrity": "sha512-XLE6ZarAYomTfTsOsU+UeK38ec/yTgJTakNFUqzxz51srpLC35HitKH2crUr6tHv3d6Q4wfTinhclRv+1HBONA==", + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/botlib/-/botlib-1.4.5.tgz", + "integrity": "sha512-y9HvVNCpMwwJbFvfXyBStHDJ/u+ujiw0PXVcehesWQY8K7zh+rsFHDIJg5rj1ocbAuR0LhkFTcKh3ZAZcin9SQ==", "requires": { "async": "3.1.0", "botbuilder": "4.7.0", @@ -9434,6 +9429,11 @@ "semver": "^5.7.0" } }, + "node-fetch": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", + "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==" + }, "node-modules-regexp": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", diff --git a/package.json b/package.json index 97bc7bff..02117bc5 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,8 @@ "João Ferreira ", "Jorge Ramos ", "PH ", - "Dário Vieira " ], + "Dário Vieira " + ], "engines": { "node": "=10.15.2" }, diff --git a/packages/core.gbapp/services/GBImporterService.ts b/packages/core.gbapp/services/GBImporterService.ts index 04d68ac8..6135fed3 100644 --- a/packages/core.gbapp/services/GBImporterService.ts +++ b/packages/core.gbapp/services/GBImporterService.ts @@ -63,9 +63,10 @@ export class GBImporter { } const instance = await this.core.loadInstance(botId); - if (instance.botId === undefined || instance.botId === null) { + if (instance != null || instance.botId === null) { console.log(`Null BotId after load instance with botId: ${botId}.`); } + return await this.createOrUpdateInstanceInternal(instance, botId, localPath, settingsJson); } From e2d570cc3ffab6be3f70b3955902508e73ee53d9 Mon Sep 17 00:00:00 2001 From: Rodrigo Rodriguez Date: Thu, 2 Apr 2020 21:24:58 -0300 Subject: [PATCH 02/10] fix(core.gbapp): No more empty tests; reference errors fixed. --- packages/core.gbapp/tests/core.test.ts | 10 ---- packages/core.gbapp/tests/vm.test.ts | 50 ------------------- .../dialogs/FeedbackDialog.ts | 2 +- .../dialogs/QualityDialog.ts | 2 +- 4 files changed, 2 insertions(+), 62 deletions(-) delete mode 100644 packages/core.gbapp/tests/core.test.ts delete mode 100644 packages/core.gbapp/tests/vm.test.ts diff --git a/packages/core.gbapp/tests/core.test.ts b/packages/core.gbapp/tests/core.test.ts deleted file mode 100644 index 00da8ce8..00000000 --- a/packages/core.gbapp/tests/core.test.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { expect } from 'chai'; -import { GBImporter } from '../services/GBImporterService'; - -describe('Hello function', () => { - it('should return empty test', () => { - const service = new GBImporter(undefined); - const result = 0; - expect(result).to.equal(0); - }); -}); diff --git a/packages/core.gbapp/tests/vm.test.ts b/packages/core.gbapp/tests/vm.test.ts deleted file mode 100644 index 67ecffeb..00000000 --- a/packages/core.gbapp/tests/vm.test.ts +++ /dev/null @@ -1,50 +0,0 @@ -/*****************************************************************************\ -| ( )_ _ | -| _ _ _ __ _ _ __ ___ ___ _ _ | ,_)(_) ___ ___ _ | -| ( '_`\ ( '__)/'_` ) /'_ `\/' _ ` _ `\ /'_` )| | | |/',__)/' _ `\ /'_`\ | -| | (_) )| | ( (_| |( (_) || ( ) ( ) |( (_| || |_ | |\__, \| (˅) |( (_) ) | -| | ,__/'(_) `\__,_)`\__ |(_) (_) (_)`\__,_)`\__)(_)(____/(_) (_)`\___/' | -| | | ( )_) | | -| (_) \___/' | -| | -| General Bots Copyright (c) Pragmatismo.io. All rights reserved. | -| Licensed under the AGPL-3.0. | -| | -| According to our dual licensing model, this program can be used either | -| under the terms of the GNU Affero General Public License, version 3, | -| or under a proprietary license. | -| | -| The texts of the GNU Affero General Public License with an additional | -| permission and of our proprietary license can be found at and | -| in the LICENSE file you have received along with this program. | -| | -| This program is distributed in the hope that it will be useful, | -| but WITHOUT ANY WARRANTY, without even the implied warranty of | -| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | -| GNU Affero General Public License for more details. | -| | -| "General Bots" is a registered trademark of Pragmatismo.io. | -| The licensing of the program under the AGPLv3 does not imply a | -| trademark license. Therefore any rights, title and interest in | -| our trademarks remain entirely with us. | -| | -\*****************************************************************************/ - -'use strict'; - -/** - * @fileoverview Tests for General Bots VM. - */ - -import { expect } from 'chai'; -import { GBVMService } from '../services/GBVMService'; - -describe('Load function', () => { - it('should fail on invalid file', () => { - try { - const service = new GBVMService(); - } catch (error) { - expect(error).to.equal(0); - } - }); -}); diff --git a/packages/customer-satisfaction.gbapp/dialogs/FeedbackDialog.ts b/packages/customer-satisfaction.gbapp/dialogs/FeedbackDialog.ts index 314c9ef4..c469d512 100644 --- a/packages/customer-satisfaction.gbapp/dialogs/FeedbackDialog.ts +++ b/packages/customer-satisfaction.gbapp/dialogs/FeedbackDialog.ts @@ -79,7 +79,7 @@ export class FeedbackDialog extends IGBDialog { async step => { const locale = step.context.activity.locale; const rate = step.result.entity; - const user = await min.userProfile.get(context, {}); + const user = await min.userProfile.get(step.context, {}); await service.updateConversationRate(user.conversation, rate); await step.context.sendActivity(Messages[locale].thanks); diff --git a/packages/customer-satisfaction.gbapp/dialogs/QualityDialog.ts b/packages/customer-satisfaction.gbapp/dialogs/QualityDialog.ts index 696395a5..e02275ea 100644 --- a/packages/customer-satisfaction.gbapp/dialogs/QualityDialog.ts +++ b/packages/customer-satisfaction.gbapp/dialogs/QualityDialog.ts @@ -60,7 +60,7 @@ export class QualityDialog extends IGBDialog { min.dialogs.add(new WaterfallDialog('/quality', [ async step => { const locale = step.context.activity.locale; - const user = await min.userProfile.get(context, {}); + const user = await min.userProfile.get(step.context, {}); const score = step.result; From e2e0d2370413095f2b4502b7b1b2197ac90be4da Mon Sep 17 00:00:00 2001 From: Rodrigo Rodriguez Date: Thu, 2 Apr 2020 22:02:50 -0300 Subject: [PATCH 03/10] fix(core.gbapp): Operator fixed. --- packages/core.gbapp/services/GBImporterService.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core.gbapp/services/GBImporterService.ts b/packages/core.gbapp/services/GBImporterService.ts index 6135fed3..204db1df 100644 --- a/packages/core.gbapp/services/GBImporterService.ts +++ b/packages/core.gbapp/services/GBImporterService.ts @@ -63,7 +63,7 @@ export class GBImporter { } const instance = await this.core.loadInstance(botId); - if (instance != null || instance.botId === null) { + if (instance != null && instance.botId === null) { console.log(`Null BotId after load instance with botId: ${botId}.`); } From 34ae7587e62ba0bad8ae09873e11c8050c7d139a Mon Sep 17 00:00:00 2001 From: Rodrigo Rodriguez Date: Thu, 2 Apr 2020 22:02:50 -0300 Subject: [PATCH 04/10] fix(core.gbapp): Entire Web stack is optional now. --- packages/core.gbapp/services/GBConfigService.ts | 13 ++++++++----- packages/core.gbapp/services/GBImporterService.ts | 2 +- src/app.ts | 10 ++++++---- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/packages/core.gbapp/services/GBConfigService.ts b/packages/core.gbapp/services/GBConfigService.ts index 432da417..a48dfe50 100644 --- a/packages/core.gbapp/services/GBConfigService.ts +++ b/packages/core.gbapp/services/GBConfigService.ts @@ -131,12 +131,15 @@ export class GBConfigService { value = 'true'; break; case 'REVERSE_PROXY': - value = undefined; - break; + value = undefined; + break; + case 'DISABLE_WEB': + value = "false"; + break; case 'STORAGE_ACQUIRE_TIMEOUT': - value = 40000; - break; - default: + value = 40000; + break; + default: GBLog.warn(`Invalid key on .env file: '${key}'`); break; } diff --git a/packages/core.gbapp/services/GBImporterService.ts b/packages/core.gbapp/services/GBImporterService.ts index 6135fed3..204db1df 100644 --- a/packages/core.gbapp/services/GBImporterService.ts +++ b/packages/core.gbapp/services/GBImporterService.ts @@ -63,7 +63,7 @@ export class GBImporter { } const instance = await this.core.loadInstance(botId); - if (instance != null || instance.botId === null) { + if (instance != null && instance.botId === null) { console.log(`Null BotId after load instance with botId: ${botId}.`); } diff --git a/src/app.ts b/src/app.ts index f5c7098d..f8620796 100644 --- a/src/app.ts +++ b/src/app.ts @@ -115,7 +115,7 @@ export class GBServer { const deployer: GBDeployer = new GBDeployer(core, importer); const azureDeployer: AzureDeployerService = new AzureDeployerService(deployer); const adminService: GBAdminService = new GBAdminService(core); - + if (process.env.NODE_ENV === 'development') { const proxy = GBConfigService.get('REVERSE_PROXY'); @@ -167,14 +167,14 @@ export class GBServer { const fullInstance = Object.assign(packageInstance, GBServer.globals.bootInstance); await core.saveInstance(fullInstance); let instances: IGBInstance[] = await core.loadAllInstances(core, azureDeployer, - GBServer.globals.publicAddress); + GBServer.globals.publicAddress); instances = await core.ensureInstances(instances, GBServer.globals.bootInstance, core); if (GBServer.globals.bootInstance !== undefined) { GBServer.globals.bootInstance = instances[0]; } // Builds minimal service infrastructure. - + const conversationalService: GBConversationalService = new GBConversationalService(core); const minService: GBMinService = new GBMinService(core, conversationalService, adminService, deployer); GBServer.globals.minService = minService; @@ -182,7 +182,9 @@ export class GBServer { // Deployment of local applications for the first time. - deployer.setupDefaultGBUI(); + if (GBConfigService.get("DISABLE_WEB") !== "true") { + deployer.setupDefaultGBUI(); + } GBLog.info(`The Bot Server is in RUNNING mode...`); From 27d2643f395fcc8f207c3fb2d402cc2f6ec89dce Mon Sep 17 00:00:00 2001 From: Rodrigo Rodriguez Date: Thu, 2 Apr 2020 23:52:59 -0300 Subject: [PATCH 05/10] fix(core.gbapp): Use of BOT_URL instead of relying on AZ. --- src/app.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app.ts b/src/app.ts index f8620796..c407a818 100644 --- a/src/app.ts +++ b/src/app.ts @@ -128,7 +128,7 @@ export class GBServer { GBServer.globals.publicAddress = await core.ensureProxy(port); } } else { - const serverAddress = `https://${process.env.WEBSITE_SITE_NAME}.azurewebsites.net`; + const serverAddress = process.env.BOT_URL; GBLog.info(`Defining server address at ${serverAddress}...`); GBServer.globals.publicAddress = serverAddress; } From aadd914f44aa7cb42ab8c2c728e9a481af19fc93 Mon Sep 17 00:00:00 2001 From: Rodrigo Rodriguez Date: Fri, 3 Apr 2020 00:17:21 -0300 Subject: [PATCH 06/10] new(core.gbapp): New param for disabling welcome messages. --- packages/core.gbapp/services/GBMinService.ts | 45 +++++++++++--------- 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/packages/core.gbapp/services/GBMinService.ts b/packages/core.gbapp/services/GBMinService.ts index 5df8df88..6b1f884e 100644 --- a/packages/core.gbapp/services/GBMinService.ts +++ b/packages/core.gbapp/services/GBMinService.ts @@ -137,33 +137,40 @@ export class GBMinService { res.end(); return; // Exit here. } + let activeMin; + if (process.env.WHATSAPP_WELCOME_DISABLED !== "true") { - const toSwitchMin = GBServer.globals.minInstances.filter(p => p.botId === text)[0]; - let activeMin = toSwitchMin ? toSwitchMin : GBServer.globals.minBoot; + const toSwitchMin = GBServer.globals.minInstances.filter(p => p.botId === text)[0]; + activeMin = toSwitchMin ? toSwitchMin : GBServer.globals.minBoot; - let sec = new SecService(); - let user = await sec.getUserFromPhone(id); + let sec = new SecService(); + let user = await sec.getUserFromPhone(id); - if (user === null) { - user = await sec.ensureUser(activeMin.instance.instanceId, id, - activeMin.botId, id, "", "whatsapp", id, id); - await (activeMin as any).whatsAppDirectLine.sendToDevice(id, `Olá! Seja bem-vinda(o)!\nMe chamo ${activeMin.instance.title}. Como posso ajudar?`); - res.end(); - } else { - // User wants to switch bots. - if (toSwitchMin !== undefined) { - await sec.updateCurrentBotId(id, text); - await (activeMin as any).whatsAppDirectLine.sendToDevice(id, `Agora falando com ${activeMin.instance.title}...`); + if (user === null) { + user = await sec.ensureUser(activeMin.instance.instanceId, id, + activeMin.botId, id, "", "whatsapp", id, id); + await (activeMin as any).whatsAppDirectLine.sendToDevice(id, `Olá! Seja bem-vinda(o)!\nMe chamo ${activeMin.instance.title}. Como posso ajudar?`); res.end(); + } else { + // User wants to switch bots. + if (toSwitchMin !== undefined) { + await sec.updateCurrentBotId(id, text); + await (activeMin as any).whatsAppDirectLine.sendToDevice(id, `Agora falando com ${activeMin.instance.title}...`); + res.end(); + } + else { + activeMin = GBServer.globals.minInstances.filter(p => p.botId === user.currentBotId)[0];; + (activeMin as any).whatsAppDirectLine.received(req, res); + } } - else { - activeMin = GBServer.globals.minInstances.filter(p => p.botId === user.currentBotId)[0];; - (activeMin as any).whatsAppDirectLine.received(req, res); - } + } + else { + (GBServer.globals.minBoot as any).whatsAppDirectLine.received(req, res); } } catch (error) { GBLog.error(`Error on Whatsapp callback: ${error.message}`); } + }); await Promise.all( @@ -554,7 +561,7 @@ export class GBMinService { user.conversation, user.systemUser, context.activity.text); } - + // Checks for global exit kewywords cancelling any active dialogs. const globalQuit = (locale, utterance) => { From f65784227142fb89f240616c363c9149d50e809c Mon Sep 17 00:00:00 2001 From: Rodrigo Rodriguez Date: Fri, 3 Apr 2020 02:50:33 -0300 Subject: [PATCH 07/10] fix(core.gbapp): Fix in undeploy and markdown processsing. --- .../services/GBConversationalService.ts | 50 ++++++++++++++----- packages/core.gbapp/services/GBDeployer.ts | 2 +- 2 files changed, 38 insertions(+), 14 deletions(-) diff --git a/packages/core.gbapp/services/GBConversationalService.ts b/packages/core.gbapp/services/GBConversationalService.ts index c29e7698..3fc72653 100644 --- a/packages/core.gbapp/services/GBConversationalService.ts +++ b/packages/core.gbapp/services/GBConversationalService.ts @@ -151,6 +151,8 @@ export class GBConversationalService implements IGBConversationalService { InEmbedAddressBegin, InEmbedAddressEnd, InLineBreak, + InLineBreak1, + InLineBreak2, }; let state = State.InText; let currentImage = ''; @@ -164,35 +166,57 @@ export class GBConversationalService implements IGBConversationalService { switch (state) { case State.InText: - + if (c === '!') { state = State.InImageBegin; } else if (c === '[') { state = State.InEmbedBegin; } - else if (c === '\n') { + else if (c === '\n') { state = State.InLineBreak; } else { + state = State.InText; currentText = currentText.concat(c); } break; case State.InLineBreak: if (c === '\n') { - if (currentText !== '') { - if (mobile === null) { - await step.context.sendActivity(currentText); - } - else { - this.sendToMobile(min, mobile, currentText); - } - await sleep(3000); + state = State.InLineBreak1; + } + else if (c === '!') { + state = State.InImageBegin; + } + else if (c === '[') { + state = State.InEmbedBegin; + } else { + currentText = currentText.concat('\n', c); + state = State.InText; + } + break; + case State.InLineBreak1: + if (c === '\n') { + if (mobile === null) { + await step.context.sendActivity(currentText); } + else { + this.sendToMobile(min, mobile, currentText); + } + await sleep(3000); currentText = ''; state = State.InText; } - break; + else if (c === '!') { + state = State.InImageBegin; + } + else if (c === '[') { + state = State.InEmbedBegin; + } else { + currentText = currentText.concat('\n', '\n', c); + state = State.InText; + } + break; case State.InEmbedBegin: if (c === '=') { if (currentText !== '') { @@ -207,7 +231,7 @@ export class GBConversationalService implements IGBConversationalService { currentText = ''; state = State.InEmbedAddressBegin; } - + break; case State.InEmbedAddressBegin: if (c === ']') { @@ -217,7 +241,7 @@ export class GBConversationalService implements IGBConversationalService { await sleep(5000); currentEmbedUrl = ''; } - else{ + else { currentEmbedUrl = currentEmbedUrl.concat(c); } break; diff --git a/packages/core.gbapp/services/GBDeployer.ts b/packages/core.gbapp/services/GBDeployer.ts index 9b4ad3c9..a962399d 100644 --- a/packages/core.gbapp/services/GBDeployer.ts +++ b/packages/core.gbapp/services/GBDeployer.ts @@ -338,7 +338,7 @@ export class GBDeployer implements IGBDeployer { case '.gbkb': const service = new KBService(this.core.sequelize); - return service.undeployKbFromStorage(instance, this, p.packageId); + return await service.undeployKbFromStorage(instance, this, p.packageId); case '.gbui': From 3fb913a9a7ccda0be908431e5c061669ebbab9ed Mon Sep 17 00:00:00 2001 From: Rodrigo Rodriguez Date: Fri, 3 Apr 2020 09:46:13 -0300 Subject: [PATCH 08/10] fix(core.gbapp): Fix in deploy. --- packages/core.gbapp/services/GBDeployer.ts | 5 ++-- packages/core.gbapp/services/GBMinService.ts | 25 ++++++++++++++------ packages/whatsapp.gblib/index.ts | 9 ------- 3 files changed, 21 insertions(+), 18 deletions(-) diff --git a/packages/core.gbapp/services/GBDeployer.ts b/packages/core.gbapp/services/GBDeployer.ts index a962399d..a52e229a 100644 --- a/packages/core.gbapp/services/GBDeployer.ts +++ b/packages/core.gbapp/services/GBDeployer.ts @@ -529,10 +529,11 @@ export class GBDeployer implements IGBDeployer { } folder = Path.join(e, 'dist'); if (!Fs.existsSync()) { - GBLog.info(`Compiling ${e}...`); + try { - if (process.env.GBAPP_DISABLE_COMPILE !== "true") { + GBLog.info(`process.env.GBAPP_DISABLE_COMPILE: ${process.env.GBAPP_DISABLE_COMPILE}`); + if (process.env.GBAPP_DISABLE_COMPILE !== "true" && false) { child_process.execSync(Path.join(process.env.PWD, 'node_modules/.bin/tsc'), { cwd: e }); } const m = await import(e); diff --git a/packages/core.gbapp/services/GBMinService.ts b/packages/core.gbapp/services/GBMinService.ts index 6b1f884e..4db9bb65 100644 --- a/packages/core.gbapp/services/GBMinService.ts +++ b/packages/core.gbapp/services/GBMinService.ts @@ -44,6 +44,7 @@ const removeRoute = require('express-remove-route'); const AuthenticationContext = require('adal-node').AuthenticationContext; const wash = require('washyourmouthoutwithsoap'); import { AutoSaveStateMiddleware, BotFrameworkAdapter, ConversationState, MemoryStorage, UserState } from 'botbuilder'; +import { CollectionUtil } from 'pragmatismo-io-framework'; import { ConfirmPrompt, WaterfallDialog } from 'botbuilder-dialogs'; import { GBDialogStep, @@ -65,6 +66,7 @@ import { GBConfigService } from './GBConfigService'; import { GBDeployer } from './GBDeployer'; import { SecService } from '../../security.gblib/services/SecService'; import { AnalyticsService } from '../../analytics.gblib/services/AnalyticsService'; +import { WhatsappDirectLine } from '../../whatsapp.gblib/services/WhatsappDirectLine'; /** * Minimal service layer for a bot. @@ -207,7 +209,7 @@ export class GBMinService { // this.deployer.deployPackage(min, 'packages/default.gbdialog'); // Call the loadBot context.activity for all packages. - this.invokeLoadBot(GBServer.globals.appPackages, GBServer.globals.sysPackages, min); + await this.invokeLoadBot(GBServer.globals.appPackages, GBServer.globals.sysPackages, min); // Serves individual URL for each bot conversational interface... const url = `/api/messages/${instance.botId}`; @@ -402,6 +404,16 @@ export class GBMinService { min.scriptMap = {}; min.sandBoxMap = {}; min.packages = sysPackages; + if (min.instance.whatsappServiceKey !== null ) { + min.whatsAppDirectLine = new WhatsappDirectLine( + min.botId, + min.instance.whatsappBotKey, + min.instance.whatsappServiceKey, + min.instance.whatsappServiceNumber, + min.instance.whatsappServiceUrl + ); + } + min.userProfile = conversationState.createProperty('userProfile'); const dialogState = conversationState.createProperty('dialogState'); @@ -412,12 +424,11 @@ export class GBMinService { return { min, adapter, conversationState }; } - private invokeLoadBot(appPackages: IGBPackage[], sysPackages: IGBPackage[], min: GBMinInstance) { - sysPackages.forEach(e => { + private async invokeLoadBot(appPackages: IGBPackage[], sysPackages: IGBPackage[], min: GBMinInstance) { + await CollectionUtil.asyncForEach(sysPackages, async e => { e.loadBot(min); - }, this); - - appPackages.forEach(p => { + }); + await CollectionUtil.asyncForEach(appPackages, async p => { p.sysPackages = sysPackages; p.loadBot(min); if (p.getDialogs !== undefined) { @@ -426,7 +437,7 @@ export class GBMinService { min.dialogs.add(new WaterfallDialog(dialog.id, dialog.waterfall)); }); } - }, this); + }); } /** diff --git a/packages/whatsapp.gblib/index.ts b/packages/whatsapp.gblib/index.ts index fed2ccb8..a0068126 100644 --- a/packages/whatsapp.gblib/index.ts +++ b/packages/whatsapp.gblib/index.ts @@ -49,15 +49,6 @@ export class GBWhatsappPackage implements IGBPackage { public loadBot(min: GBMinInstance): void { // Only loads engine if it is defined on services.json. - if (min.instance.whatsappServiceKey !== null ) { - min.whatsAppDirectLine = new WhatsappDirectLine( - min.botId, - min.instance.whatsappBotKey, - min.instance.whatsappServiceKey, - min.instance.whatsappServiceNumber, - min.instance.whatsappServiceUrl - ); - } } public getDialogs(min: GBMinInstance) { From 1ffd141fa85190dff824c97968ad5fedce1aece9 Mon Sep 17 00:00:00 2001 From: Rodrigo Rodriguez Date: Fri, 3 Apr 2020 09:58:14 -0300 Subject: [PATCH 09/10] fix(core.gbapp): Fix in deploy. --- packages/core.gbapp/services/GBDeployer.ts | 32 +++++++++----------- packages/core.gbapp/services/GBMinService.ts | 15 ++++----- 2 files changed, 22 insertions(+), 25 deletions(-) diff --git a/packages/core.gbapp/services/GBDeployer.ts b/packages/core.gbapp/services/GBDeployer.ts index a52e229a..3b0e9923 100644 --- a/packages/core.gbapp/services/GBDeployer.ts +++ b/packages/core.gbapp/services/GBDeployer.ts @@ -528,27 +528,23 @@ export class GBDeployer implements IGBDeployer { } } folder = Path.join(e, 'dist'); - if (!Fs.existsSync()) { - - try { - GBLog.info(`process.env.GBAPP_DISABLE_COMPILE: ${process.env.GBAPP_DISABLE_COMPILE}`); - if (process.env.GBAPP_DISABLE_COMPILE !== "true" && false) { - child_process.execSync(Path.join(process.env.PWD, 'node_modules/.bin/tsc'), { cwd: e }); - } - const m = await import(e); - const p = new m.Package(); - p.loadPackage(core, core.sequelize); - appPackages.push(p); - GBLog.info(`App (.gbapp) deployed: ${e}.`); - appPackagesProcessed++; - } catch (error) { - GBLog.error(`Error compiling .gbapp package ${e}:\n${error.stdout.toString()}`); - appPackagesProcessed++; + + try { + if (process.env.GBAPP_DISABLE_COMPILE !== "true") { + GBLog.info(`Compiling .gbapp: ${e}.`); + child_process.execSync(Path.join(process.env.PWD, 'node_modules/.bin/tsc'), { cwd: e }); } + const m = await import(e); + const p = new m.Package(); + p.loadPackage(core, core.sequelize); + appPackages.push(p); + GBLog.info(`App (.gbapp) deployed: ${e}.`); + appPackagesProcessed++; + } catch (error) { + GBLog.error(`Error compiling .gbapp package ${e}:\n${error.stdout.toString()}`); + appPackagesProcessed++; } - } else { - appPackagesProcessed++; } }); diff --git a/packages/core.gbapp/services/GBMinService.ts b/packages/core.gbapp/services/GBMinService.ts index 4db9bb65..29699d08 100644 --- a/packages/core.gbapp/services/GBMinService.ts +++ b/packages/core.gbapp/services/GBMinService.ts @@ -209,7 +209,7 @@ export class GBMinService { // this.deployer.deployPackage(min, 'packages/default.gbdialog'); // Call the loadBot context.activity for all packages. - await this.invokeLoadBot(GBServer.globals.appPackages, GBServer.globals.sysPackages, min); + this.invokeLoadBot(GBServer.globals.appPackages, GBServer.globals.sysPackages, min); // Serves individual URL for each bot conversational interface... const url = `/api/messages/${instance.botId}`; @@ -404,7 +404,7 @@ export class GBMinService { min.scriptMap = {}; min.sandBoxMap = {}; min.packages = sysPackages; - if (min.instance.whatsappServiceKey !== null ) { + if (min.instance.whatsappServiceKey !== null) { min.whatsAppDirectLine = new WhatsappDirectLine( min.botId, min.instance.whatsappBotKey, @@ -424,11 +424,12 @@ export class GBMinService { return { min, adapter, conversationState }; } - private async invokeLoadBot(appPackages: IGBPackage[], sysPackages: IGBPackage[], min: GBMinInstance) { - await CollectionUtil.asyncForEach(sysPackages, async e => { + private invokeLoadBot(appPackages: IGBPackage[], sysPackages: IGBPackage[], min: GBMinInstance) { + sysPackages.forEach(e => { e.loadBot(min); - }); - await CollectionUtil.asyncForEach(appPackages, async p => { + }, this); + + appPackages.forEach(p => { p.sysPackages = sysPackages; p.loadBot(min); if (p.getDialogs !== undefined) { @@ -437,7 +438,7 @@ export class GBMinService { min.dialogs.add(new WaterfallDialog(dialog.id, dialog.waterfall)); }); } - }); + }, this); } /** From 156f289737f81ecf84ccbe2539d3f5f5c308a2a8 Mon Sep 17 00:00:00 2001 From: Rodrigo Rodriguez Date: Fri, 3 Apr 2020 10:11:36 -0300 Subject: [PATCH 10/10] fix(core.gbapp): Fix in deploy. --- packages/core.gbapp/services/GBDeployer.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/core.gbapp/services/GBDeployer.ts b/packages/core.gbapp/services/GBDeployer.ts index 3b0e9923..6d65155c 100644 --- a/packages/core.gbapp/services/GBDeployer.ts +++ b/packages/core.gbapp/services/GBDeployer.ts @@ -542,6 +542,9 @@ export class GBDeployer implements IGBDeployer { GBLog.info(`App (.gbapp) deployed: ${e}.`); appPackagesProcessed++; } catch (error) { + GBLog.error(`Error message: ${error.message}`); + GBLog.error(`Error message: ${error.stack}`); + GBLog.error(`Error compiling .gbapp package ${e}:\n${error.stderr.toString()}`); GBLog.error(`Error compiling .gbapp package ${e}:\n${error.stdout.toString()}`); appPackagesProcessed++; }