From aa976aeb8c031c6319978b85d59939a461130b69 Mon Sep 17 00:00:00 2001 From: Rodrigo Rodriguez Date: Sat, 19 Sep 2020 21:57:00 -0300 Subject: [PATCH] fix(core.gbapp): Instance loading fix and external url for images. --- packages/core.gbapp/models/GBModel.ts | 23 +++++++++++++ .../services/GBConversationalService.ts | 10 ++++-- packages/core.gbapp/services/GBCoreService.ts | 16 ++++++++- packages/core.gbapp/services/GBDeployer.ts | 2 +- .../core.gbapp/services/GBImporterService.ts | 34 +++++++++++++++---- packages/core.gbapp/services/GBMinService.ts | 3 +- 6 files changed, 76 insertions(+), 12 deletions(-) diff --git a/packages/core.gbapp/models/GBModel.ts b/packages/core.gbapp/models/GBModel.ts index 5d6de0e3..0a74cba7 100644 --- a/packages/core.gbapp/models/GBModel.ts +++ b/packages/core.gbapp/models/GBModel.ts @@ -329,3 +329,26 @@ export class GuaribasException extends Model { @UpdatedAt public updatedAt: Date; } + +@Table +//tslint:disable-next-line:max-classes-per-file +export class GuaribasApplications extends Model { + + @Column + public name: string; + + @ForeignKey(() => GuaribasInstance) + @Column + public instanceId: number; + + @BelongsTo(() => GuaribasInstance) + public instance: GuaribasInstance; + + @Column + @CreatedAt + public createdAt: Date; + + @Column + @UpdatedAt + public updatedAt: Date; +} diff --git a/packages/core.gbapp/services/GBConversationalService.ts b/packages/core.gbapp/services/GBConversationalService.ts index a8bb75fa..8dce8dc9 100644 --- a/packages/core.gbapp/services/GBConversationalService.ts +++ b/packages/core.gbapp/services/GBConversationalService.ts @@ -162,7 +162,7 @@ export class GBConversationalService { const waveFilename = `work/tmp${name}.pcm`; const sdk = require('microsoft-cognitiveservices-speech-sdk'); sdk.Recognizer.enableTelemetry(false); - + var audioConfig = sdk.AudioConfig.fromAudioFileOutput(waveFilename); var speechConfig = sdk.SpeechConfig.fromSubscription(speechKey, cloudRegion); @@ -392,7 +392,9 @@ export class GBConversationalService { case State.InEmbedAddressBegin: if (c === ']') { state = State.InEmbedEnd; - let url = urlJoin(GBServer.globals.publicAddress, currentEmbedUrl); + let url = currentEmbedUrl.startsWith('http') + ? currentEmbedUrl + : urlJoin(GBServer.globals.publicAddress, currentEmbedUrl); await this.sendFile(min, step, mobile, url, null); await sleep(5000); currentEmbedUrl = ''; @@ -437,7 +439,9 @@ export class GBConversationalService { case State.InImageAddressBody: if (c === ')') { state = State.InText; - let url = urlJoin(GBServer.globals.publicAddress, currentImage); + let url = currentImage.startsWith('http') + ? currentImage + : urlJoin(GBServer.globals.publicAddress, currentImage); await this.sendFile(min, step, mobile, url, currentCaption); currentCaption = ''; await sleep(4500); diff --git a/packages/core.gbapp/services/GBCoreService.ts b/packages/core.gbapp/services/GBCoreService.ts index dd91286b..0daa0ab4 100644 --- a/packages/core.gbapp/services/GBCoreService.ts +++ b/packages/core.gbapp/services/GBCoreService.ts @@ -224,6 +224,16 @@ export class GBCoreService implements IGBCoreService { } } + // public async getPackagesByInstanceId(instanceId: number): Promise { + + // const options = { + // where: { + // instanceId: instanceId + // } + // }; + // return GuaribasApplications.findAll(options); + // } + /** * Loads just one Bot instance by its internal Id. */ @@ -323,7 +333,11 @@ STORAGE_SYNC=true options.where = { botId: fullInstance.botId }; let instance = await GuaribasInstance.findOne(options); // tslint:disable-next-line:prefer-object-spread - instance = Object.assign(instance, fullInstance); + if (instance) { + instance = Object.assign(instance, fullInstance); + } else { + instance = Object.assign(new GuaribasInstance(), fullInstance); + } try { instance.params = JSON.stringify(JSON.parse(instance.params)); } catch (err) { diff --git a/packages/core.gbapp/services/GBDeployer.ts b/packages/core.gbapp/services/GBDeployer.ts index 537a21a7..919f8070 100644 --- a/packages/core.gbapp/services/GBDeployer.ts +++ b/packages/core.gbapp/services/GBDeployer.ts @@ -250,7 +250,7 @@ export class GBDeployer implements IGBDeployer { public async deployBotFromLocalPath(localPath: string, publicAddress: string): Promise { const packageName = Path.basename(localPath); let instance = await this.importer.importIfNotExistsBotPackage(undefined, packageName, localPath); - this.deployBotFull(instance, publicAddress); + await this.deployBotFull(instance, publicAddress); } public async loadParamsFromExcel(min: GBMinInstance): Promise { diff --git a/packages/core.gbapp/services/GBImporterService.ts b/packages/core.gbapp/services/GBImporterService.ts index 62332ca5..1603aa05 100644 --- a/packages/core.gbapp/services/GBImporterService.ts +++ b/packages/core.gbapp/services/GBImporterService.ts @@ -36,7 +36,7 @@ 'use strict'; -import { IGBCoreService, IGBInstance } from 'botlib'; +import { IGBCoreService, IGBInstance, GBMinInstance } from 'botlib'; import fs = require('fs'); import urlJoin = require('url-join'); import { GuaribasInstance } from '../models/GBModel'; @@ -58,15 +58,34 @@ export class GBImporter { if (botId === undefined) { botId = settingsJson.botId; } + let instance: IGBInstance; if (botId === undefined) { botId = GBConfigService.get('BOT_ID'); + instance = await this.core.loadInstanceByBotId(botId); + if (!instance) { + instance = {}; + instance.adminPass = GBConfigService.get('ADMIN_PASS'); + instance.botId = GBConfigService.get('BOT_ID'); + instance.cloudSubscriptionId = GBConfigService.get('CLOUD_SUBSCRIPTIONID'); + instance.cloudLocation = GBConfigService.get('CLOUD_LOCATION'); + instance.cloudUsername = GBConfigService.get('CLOUD_USERNAME'); + instance.cloudPassword = GBConfigService.get('CLOUD_PASSWORD'); + instance.marketplaceId = GBConfigService.get('MARKETPLACE_ID'); + instance.marketplacePassword = GBConfigService.get('MARKETPLACE_SECRET'); + instance.storageDialect = GBConfigService.get('STORAGE_DIALECT'); + instance.storageServer = GBConfigService.get('STORAGE_SERVER'); + instance.storageName = GBConfigService.get('STORAGE_NAME'); + instance.storageUsername = GBConfigService.get('STORAGE_USERNAME'); + instance.storagePassword = GBConfigService.get('STORAGE_PASSWORD'); + } + } else { + instance = await this.core.loadInstanceByBotId(botId); } - const instance = await this.core.loadInstanceByBotId(botId); if (instance != null && instance.botId === null) { console.log(`Null BotId after load instance with botId: ${botId}.`); } - + return await this.createOrUpdateInstanceInternal(instance, botId, localPath, settingsJson); } @@ -76,9 +95,12 @@ export class GBImporter { return await GuaribasInstance.create(fullSettingsJson); } - - private async createOrUpdateInstanceInternal(instance: IGBInstance, - botId: string, localPath: string, settingsJson: any) { + private async createOrUpdateInstanceInternal( + instance: IGBInstance, + botId: string, + localPath: string, + settingsJson: any + ) { let packageJson = JSON.parse(fs.readFileSync(urlJoin(localPath, 'package.json'), 'utf8')); const servicesJson = JSON.parse(fs.readFileSync(urlJoin(localPath, 'services.json'), 'utf8')); diff --git a/packages/core.gbapp/services/GBMinService.ts b/packages/core.gbapp/services/GBMinService.ts index 7d3a574c..dd0fed06 100644 --- a/packages/core.gbapp/services/GBMinService.ts +++ b/packages/core.gbapp/services/GBMinService.ts @@ -482,7 +482,8 @@ export class GBMinService { min.scriptMap = {}; min.sandBoxMap = {}; min.packages = sysPackages; - min.appPackages = appPackages; + min.appPackages = appPackages; + // TODO: min.appPackages = core.getPackagesByInstanceId(min.instance.instanceId); // Create a hub of services available in .gbapps.