new(all): TRUE multicloud.
This commit is contained in:
parent
b004f8b4b5
commit
016abf7aac
9 changed files with 18 additions and 25 deletions
2
boot.mjs
2
boot.mjs
|
@ -8,7 +8,7 @@ import pjson from './package.json' assert { type: 'json' };
|
||||||
|
|
||||||
// Displays version of Node JS being used at runtime and others attributes.
|
// Displays version of Node JS being used at runtime and others attributes.
|
||||||
|
|
||||||
process.stdout.write(`General Bots. BotServer@${pjson.version}, botlib@${pjson.dependencies.botlib}, botbuilder@${pjson.dependencies.botbuilder}, node@${process.version.replace('v', '')}, ${process.platform} ${process.arch} `);
|
process.stdout.write(`General Bots. BotServer@${pjson.version}, botlib@${pjson.dependencies.botlib}, node@${process.version.replace('v', '')}, ${process.platform} ${process.arch} `);
|
||||||
console.log(`\nLoading virtual machine source code files...`);
|
console.log(`\nLoading virtual machine source code files...`);
|
||||||
|
|
||||||
var __dirname = process.env.PWD || process.cwd();
|
var __dirname = process.env.PWD || process.cwd();
|
||||||
|
|
|
@ -187,7 +187,7 @@ export class GBAdminService implements IGBAdminService {
|
||||||
await deployer['cleanupPackage'](min.instance, packageName);
|
await deployer['cleanupPackage'](min.instance, packageName);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (GBConfigService.get('STORAGE_FILE')) {
|
if (!GBConfigService.get('STORAGE_NAME')) {
|
||||||
const path = Path.join(GBConfigService.get('STORAGE_LIBRARY'), gbaiPath);
|
const path = Path.join(GBConfigService.get('STORAGE_LIBRARY'), gbaiPath);
|
||||||
Fs.cpSync(path, localFolder, { errorOnExist: false, force: true, recursive: true});
|
Fs.cpSync(path, localFolder, { errorOnExist: false, force: true, recursive: true});
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -426,8 +426,8 @@ ENDPOINT_UPDATE=true
|
||||||
let instances: IGBInstance[];
|
let instances: IGBInstance[];
|
||||||
try {
|
try {
|
||||||
instances = await core.loadInstances();
|
instances = await core.loadInstances();
|
||||||
const group = GBConfigService.get('CLOUD_GROUP') ?? GBConfigService.get('BOT_ID');
|
|
||||||
if (process.env.ENDPOINT_UPDATE === 'true') {
|
if (process.env.ENDPOINT_UPDATE === 'true') {
|
||||||
|
const group = GBConfigService.get('CLOUD_GROUP') ?? GBConfigService.get('BOT_ID');
|
||||||
await CollectionUtil.asyncForEach(instances, async instance => {
|
await CollectionUtil.asyncForEach(instances, async instance => {
|
||||||
GBLogEx.info(instance.instanceId, `Updating bot endpoint for ${instance.botId}...`);
|
GBLogEx.info(instance.instanceId, `Updating bot endpoint for ${instance.botId}...`);
|
||||||
try {
|
try {
|
||||||
|
@ -514,12 +514,6 @@ ENDPOINT_UPDATE=true
|
||||||
* before starting the server.
|
* before starting the server.
|
||||||
*/
|
*/
|
||||||
public ensureAdminIsSecured() {
|
public ensureAdminIsSecured() {
|
||||||
const password = GBConfigService.get('ADMIN_PASS');
|
|
||||||
if (!GBAdminService.StrongRegex.test(password)) {
|
|
||||||
throw new Error(
|
|
||||||
'Please, define a really strong password in ADMIN_PASS environment variable before running the server.'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async createBootInstance(
|
public async createBootInstance(
|
||||||
|
|
|
@ -222,7 +222,7 @@ export class GBDeployer implements IGBDeployer {
|
||||||
const instance = await this.importer.createBotInstance(botId);
|
const instance = await this.importer.createBotInstance(botId);
|
||||||
const bootInstance = GBServer.globals.bootInstance;
|
const bootInstance = GBServer.globals.bootInstance;
|
||||||
|
|
||||||
if (!GBConfigService.get('STORAGE_FILE')) {
|
if (GBConfigService.get('STORAGE_NAME')) {
|
||||||
// Gets the access token to perform service operations.
|
// Gets the access token to perform service operations.
|
||||||
|
|
||||||
const accessToken = await (GBServer.globals.minBoot.adminService as any)['acquireElevatedToken'](
|
const accessToken = await (GBServer.globals.minBoot.adminService as any)['acquireElevatedToken'](
|
||||||
|
@ -251,7 +251,7 @@ export class GBDeployer implements IGBDeployer {
|
||||||
// Saves bot information to the store.
|
// Saves bot information to the store.
|
||||||
|
|
||||||
await this.core.saveInstance(instance);
|
await this.core.saveInstance(instance);
|
||||||
if (!GBConfigService.get('STORAGE_FILE')) {
|
if (GBConfigService.get('STORAGE_NAME')) {
|
||||||
await this.deployBotOnAzure(instance, GBServer.globals.publicAddress);
|
await this.deployBotOnAzure(instance, GBServer.globals.publicAddress);
|
||||||
}
|
}
|
||||||
// Creates remaining objects on the cloud and updates instance information.
|
// Creates remaining objects on the cloud and updates instance information.
|
||||||
|
|
|
@ -321,7 +321,7 @@ export class GBMinService {
|
||||||
mkdirp.sync(dir);
|
mkdirp.sync(dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (GBConfigService.get('STORAGE_FILE')) {
|
if (!GBConfigService.get('STORAGE_NAME')) {
|
||||||
dir = Path.join(GBConfigService.get('STORAGE_LIBRARY'), 'work', gbai);
|
dir = Path.join(GBConfigService.get('STORAGE_LIBRARY'), 'work', gbai);
|
||||||
|
|
||||||
const server = GBServer.globals.webDavServer;
|
const server = GBServer.globals.webDavServer;
|
||||||
|
@ -695,7 +695,7 @@ export class GBMinService {
|
||||||
color2: this.core.getParam(instance, 'Color2', null)
|
color2: this.core.getParam(instance, 'Color2', null)
|
||||||
};
|
};
|
||||||
|
|
||||||
if (GBConfigService.get('STORAGE_FILE')) {
|
if (!GBConfigService.get('STORAGE_NAME')) {
|
||||||
config['domain'] = `http://localhost:${process.env.PORT}/directline/${botId}`;
|
config['domain'] = `http://localhost:${process.env.PORT}/directline/${botId}`;
|
||||||
} else {
|
} else {
|
||||||
const webchatTokenContainer = await this.getWebchatToken(instance);
|
const webchatTokenContainer = await this.getWebchatToken(instance);
|
||||||
|
@ -767,7 +767,7 @@ export class GBMinService {
|
||||||
? instance.marketplacePassword
|
? instance.marketplacePassword
|
||||||
: GBConfigService.get('MARKETPLACE_SECRET')
|
: GBConfigService.get('MARKETPLACE_SECRET')
|
||||||
};
|
};
|
||||||
if (GBConfigService.get('STORAGE_FILE')) {
|
if (!GBConfigService.get('STORAGE_NAME')) {
|
||||||
config['clientOptions'] = { baseUri: `http://localhost:${process.env.PORT}` };
|
config['clientOptions'] = { baseUri: `http://localhost:${process.env.PORT}` };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1198,7 +1198,7 @@ export class GBMinService {
|
||||||
};
|
};
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (GBConfigService.get('STORAGE_FILE')) {
|
if (!GBConfigService.get('STORAGE_NAME')) {
|
||||||
const context = adapter['createContext'](req);
|
const context = adapter['createContext'](req);
|
||||||
context['_activity'] = context.activity.body;
|
context['_activity'] = context.activity.body;
|
||||||
await handler(context);
|
await handler(context);
|
||||||
|
|
|
@ -5,6 +5,7 @@ import moment from 'moment';
|
||||||
import * as uuidv4 from 'uuid';
|
import * as uuidv4 from 'uuid';
|
||||||
|
|
||||||
import { IActivity, IBotData, IConversation, IConversationUpdateActivity, IMessageActivity } from './types';
|
import { IActivity, IBotData, IConversation, IConversationUpdateActivity, IMessageActivity } from './types';
|
||||||
|
import { GBConfigService } from '../GBConfigService.js';
|
||||||
|
|
||||||
const expiresIn = 1800;
|
const expiresIn = 1800;
|
||||||
const conversationsCleanupInterval = 10000;
|
const conversationsCleanupInterval = 10000;
|
||||||
|
@ -274,8 +275,8 @@ const setPrivateConversationData = (req: express.Request, res: express.Response)
|
||||||
};
|
};
|
||||||
|
|
||||||
export const start = (server, botId)=>{
|
export const start = (server, botId)=>{
|
||||||
|
const port = GBConfigService.getServerPort();
|
||||||
initializeRoutes(server, Number(process.env.PORT), `http://127.0.0.1:${process.env.PORT}/api/messages/${botId}`, null, botId);
|
initializeRoutes(server, Number(port), `http://127.0.0.1:${port}/api/messages/${botId}`, null, botId);
|
||||||
}
|
}
|
||||||
|
|
||||||
const deleteStateForUser = (req: express.Request, res: express.Response) => {
|
const deleteStateForUser = (req: express.Request, res: express.Response) => {
|
||||||
|
|
|
@ -1370,7 +1370,7 @@ export class KBService implements IGBKBService {
|
||||||
await this.importKbPackage(min, localPath, p, instance);
|
await this.importKbPackage(min, localPath, p, instance);
|
||||||
GBDeployer.mountGBKBAssets(packageName, min.botId, localPath);
|
GBDeployer.mountGBKBAssets(packageName, min.botId, localPath);
|
||||||
|
|
||||||
if (!GBConfigService.get('STORAGE_FILE')) {
|
if (GBConfigService.get('STORAGE_NAME')) {
|
||||||
const service = await AzureDeployerService.createInstance(deployer);
|
const service = await AzureDeployerService.createInstance(deployer);
|
||||||
const searchIndex = instance.searchIndex ? instance.searchIndex : GBServer.globals.minBoot.instance.searchIndex;
|
const searchIndex = instance.searchIndex ? instance.searchIndex : GBServer.globals.minBoot.instance.searchIndex;
|
||||||
await deployer.rebuildIndex(instance, service.getKBSearchSchema(searchIndex));
|
await deployer.rebuildIndex(instance, service.getKBSearchSchema(searchIndex));
|
||||||
|
|
|
@ -190,7 +190,7 @@ export class GBServer {
|
||||||
if (GBConfigService.get('STORAGE_SERVER')) {
|
if (GBConfigService.get('STORAGE_SERVER')) {
|
||||||
azureDeployer = await AzureDeployerService.createInstance(deployer);
|
azureDeployer = await AzureDeployerService.createInstance(deployer);
|
||||||
await core.initStorage();
|
await core.initStorage();
|
||||||
} else if (GBConfigService.get('STORAGE_FILE')) {
|
} else if (!GBConfigService.get('STORAGE_NAME')) {
|
||||||
await core.initStorage();
|
await core.initStorage();
|
||||||
} else {
|
} else {
|
||||||
[GBServer.globals.bootInstance, azureDeployer] = await core['createBootInstanceEx'](
|
[GBServer.globals.bootInstance, azureDeployer] = await core['createBootInstanceEx'](
|
||||||
|
@ -203,8 +203,6 @@ export class GBServer {
|
||||||
await core.saveInstance(GBServer.globals.bootInstance);
|
await core.saveInstance(GBServer.globals.bootInstance);
|
||||||
}
|
}
|
||||||
|
|
||||||
core.ensureAdminIsSecured();
|
|
||||||
|
|
||||||
// Deploys system and user packages.
|
// Deploys system and user packages.
|
||||||
|
|
||||||
GBLogEx.info(0, `Deploying System packages...`);
|
GBLogEx.info(0, `Deploying System packages...`);
|
||||||
|
@ -228,7 +226,7 @@ export class GBServer {
|
||||||
);
|
);
|
||||||
|
|
||||||
if (instances. length === 0) {
|
if (instances. length === 0) {
|
||||||
if (!GBConfigService.get('STORAGE_FILE')) {
|
if (GBConfigService.get('STORAGE_NAME')) {
|
||||||
const instance = await importer.importIfNotExistsBotPackage(
|
const instance = await importer.importIfNotExistsBotPackage(
|
||||||
GBConfigService.get('BOT_ID'),
|
GBConfigService.get('BOT_ID'),
|
||||||
'boot.gbot',
|
'boot.gbot',
|
||||||
|
|
|
@ -70,14 +70,14 @@ export class GBUtil {
|
||||||
public static async getDirectLineClient(min) {
|
public static async getDirectLineClient(min) {
|
||||||
|
|
||||||
let config = {
|
let config = {
|
||||||
url: `http://127.0.0.1:${GBConfigService.get('PORT')}/api/messages`,
|
url: `http://127.0.0.1:${GBConfigService.getServerPort()}/api/messages`,
|
||||||
spec: JSON.parse(Fs.readFileSync('directline-3.0.json', 'utf8')),
|
spec: JSON.parse(Fs.readFileSync('directline-3.0.json', 'utf8')),
|
||||||
requestInterceptor: req => {
|
requestInterceptor: req => {
|
||||||
req.headers['Authorization'] = `Bearer ${min.instance.webchatKey}`;
|
req.headers['Authorization'] = `Bearer ${min.instance.webchatKey}`;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
if (GBConfigService.get('STORAGE_FILE')) {
|
if (!GBConfigService.get('STORAGE_NAME')) {
|
||||||
config['spec'].servers = [{ url: `http://127.0.0.1:${GBConfigService.get('PORT')}/api/messages` }];
|
config['spec'].servers = [{ url: `http://127.0.0.1:${GBConfigService.getServerPort()}/api/messages` }];
|
||||||
config['openapi'] = '3.0.0';
|
config['openapi'] = '3.0.0';
|
||||||
}
|
}
|
||||||
return await new SwaggerClient(config);
|
return await new SwaggerClient(config);
|
||||||
|
|
Loading…
Add table
Reference in a new issue