fix(core.gbapp): Update of all packages and nodejs to 19.1.0.

This commit is contained in:
rodrigorodriguez 2022-11-18 22:39:14 -03:00
parent 9393081e58
commit a315d21cfe
69 changed files with 15490 additions and 11249 deletions

View file

@ -6,7 +6,7 @@
"request": "launch", "request": "launch",
"sourceMaps": true, "sourceMaps": true,
"name": "Debug Program", "name": "Debug Program",
"program": "${workspaceRoot}/boot.js", "program": "${workspaceRoot}/boot.mjs",
"cwd": "${workspaceRoot}", "cwd": "${workspaceRoot}",
"env": { "env": {
"NODE_ENV": "development" "NODE_ENV": "development"

View file

@ -1,9 +1,10 @@
#!/usr/bin/env node #!/usr/bin/env node
const Fs = require('fs'); import Fs from 'fs';
const Path = require('path'); import Path from 'path';
const { exec } = require('child_process'); import { exec } from 'child_process';
var pjson = require('./package.json'); import pjson from './package.json' assert { type: "json" };
import * as GBServer from "./dist/src/app.js";
// Displays version of Node JS being used at runtime and others attributes. // Displays version of Node JS being used at runtime and others attributes.
@ -19,15 +20,14 @@ console.log(`[GB Runtime] debugPort = ${process.debugPort}`);
var now = () => { var now = () => {
return (new Date()).toISOString().replace(/T/, ' ').replace(/\..+/, '') + ' UTC'; return (new Date()).toISOString().replace(/T/, ' ').replace(/\..+/, '') + ' UTC';
} }
var __dirname = process.env.PWD;
try { try {
var run = () => { var run = () => {
console.log(`[GB Runtime] Initializing General Bots (BotServer)...`); console.log(`[GB Runtime] Initializing General Bots (BotServer)...`);
const GBServer = require("./dist/src/app").GBServer console.log(`[GB Runtime] ${now()} - Running '${GBServer.name}' on '${import.meta.url}'`);
console.log(`[GB Runtime] ${now()} - Running '${GBServer.name}' on '${__dirname}' directory`); GBServer.GBServer.run();
process.env.PWD = __dirname;
GBServer.run();
} }
var processDist = () => { var processDist = () => {
if (!Fs.existsSync('dist')) { if (!Fs.existsSync('dist')) {

View file

@ -12,4 +12,4 @@ ECHO Compiling...
CALL node_modules\.bin\tsc CALL node_modules\.bin\tsc
:ALLSET :ALLSET
node boot.js node boot.cjs

24729
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -1,8 +1,9 @@
{ {
"name": "botserver", "name": "botserver",
"version": "3.0.0", "version": "3.0.0",
"type": "module",
"description": "General Bot Community Edition open-core server.", "description": "General Bot Community Edition open-core server.",
"main": "./boot.js", "main": "./boot.mjs",
"bugs": "https://github.com/pragmatismo-io/BotServer/issues", "bugs": "https://github.com/pragmatismo-io/BotServer/issues",
"homepage": "https://github.com/pragmatismo-io/BotServer/#readme", "homepage": "https://github.com/pragmatismo-io/BotServer/#readme",
"contributors": [ "contributors": [
@ -13,13 +14,13 @@
"Dário Vieira <dario.junior3@gmail.com>" "Dário Vieira <dario.junior3@gmail.com>"
], ],
"engines": { "engines": {
"node": "=14.19.3" "node": "=19.1.0"
}, },
"license": "AGPL-3.0", "license": "AGPL-3.0",
"preferGlobal": true, "preferGlobal": true,
"private": false, "private": false,
"bin": { "bin": {
"gbot": "./boot.js" "gbot": "./boot.cjs"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
@ -33,7 +34,7 @@
"build-gbui": "cd packages/default.gbui && echo SKIP_PREFLIGHT_CHECK=true >.env && npm install && npm run build", "build-gbui": "cd packages/default.gbui && echo SKIP_PREFLIGHT_CHECK=true >.env && npm install && npm run build",
"build-docs": "typedoc --options typedoc.json src/", "build-docs": "typedoc --options typedoc.json src/",
"test": "node test.js", "test": "node test.js",
"start": "node ./boot.js", "start": "node ./boot.cjs",
"reverse-proxy": "node_modules/.bin/ngrok http 4242", "reverse-proxy": "node_modules/.bin/ngrok http 4242",
"watch:build": "tsc --watch", "watch:build": "tsc --watch",
"posttypedoc": "shx cp .nojekyll docs/reference/.nojekyll", "posttypedoc": "shx cp .nojekyll docs/reference/.nojekyll",
@ -49,21 +50,21 @@
"commit": "git-cz" "commit": "git-cz"
}, },
"dependencies": { "dependencies": {
"@azure/cognitiveservices-computervision": "8.1.0", "@azure/cognitiveservices-computervision": "8.2.0",
"@azure/ms-rest-js": "2.5.1", "@azure/ms-rest-js": "2.6.2",
"@google-cloud/pubsub": "2.13.0", "@google-cloud/pubsub": "3.2.1",
"@google-cloud/translate": "6.2.6", "@google-cloud/translate": "7.0.4",
"@hubspot/api-client": "5.0.0", "@hubspot/api-client": "7.1.2",
"@microsoft/microsoft-graph-client": "2.2.1", "@microsoft/microsoft-graph-client": "3.0.4",
"@semantic-release/changelog": "5.0.1", "@semantic-release/changelog": "6.0.1",
"@semantic-release/exec": "5.0.0", "@semantic-release/exec": "6.0.3",
"@semantic-release/git": "9.0.0", "@semantic-release/git": "10.0.1",
"@sendgrid/mail": "7.4.4", "@sendgrid/mail": "7.7.0",
"@types/node": "8.0.0", "@types/node": "18.11.9",
"@types/validator": "13.1.4", "@types/validator": "13.7.10",
"adal-node": "0.2.2", "adal-node": "0.2.3",
"adm-zip": "0.5.6", "adm-zip": "0.5.9",
"alasql": "^1.7.3", "alasql": "2.1.6",
"any-shell-escape": "0.1.1", "any-shell-escape": "0.1.1",
"async-promises": "0.2.3", "async-promises": "0.2.3",
"azure-arm-cognitiveservices": "3.0.0", "azure-arm-cognitiveservices": "3.0.0",
@ -73,63 +74,63 @@
"azure-arm-website": "5.7.0", "azure-arm-website": "5.7.0",
"azure-search-client": "3.1.5", "azure-search-client": "3.1.5",
"basic-auth": "2.0.1", "basic-auth": "2.0.1",
"billboard.js": "^3.4.1", "billboard.js": "3.6.3",
"bluebird": "3.7.2", "bluebird": "3.7.2",
"body-parser": "1.19.0", "body-parser": "1.20.1",
"botbuilder": "4.11.0", "botbuilder": "4.18.0",
"botbuilder-adapter-facebook": "1.0.11", "botbuilder-adapter-facebook": "1.0.12",
"botbuilder-ai": "4.11.0", "botbuilder-ai": "4.18.0",
"botbuilder-dialogs": "4.11.0", "botbuilder-dialogs": "4.18.0",
"botframework-connector": "4.11.0", "botframework-connector": "4.18.0",
"botlib": "1.10.9", "botlib": "3.0.0",
"c3-chart-maker": "^0.2.8", "c3-chart-maker": "0.2.8",
"chrome-remote-interface": "^0.31.3", "chrome-remote-interface": "0.31.3",
"cli-progress": "^3.11.2", "cli-progress": "3.11.2",
"cli-spinner": "0.2.10", "cli-spinner": "0.2.10",
"core-js": "3.14.0", "core-js": "3.26.1",
"data-forge": "^1.9.5", "data-forge": "1.9.6",
"date-diff": "0.2.2", "date-diff": "1.0.2",
"debugger-api": "^0.1.2", "debugger-api": "0.1.2",
"docxtemplater": "^3.31.1", "docxtemplater": "3.32.4",
"dotenv-extended": "2.9.0", "dotenv-extended": "2.9.0",
"exceljs": "4.2.1", "exceljs": "4.3.0",
"express": "4.17.1", "express": "4.18.2",
"express-remove-route": "1.0.0", "express-remove-route": "1.0.0",
"ffmpeg-static": "4.3.0", "ffmpeg-static": "5.1.0",
"google-libphonenumber": "3.2.21", "google-libphonenumber": "3.2.31",
"googleapis": "75.0.0", "googleapis": "109.0.1",
"ibm-watson": "6.1.1", "ibm-watson": "7.1.2",
"indent.js": "^0.3.5", "indent.js": "0.3.5",
"js-beautify": "1.13.13", "js-beautify": "1.14.7",
"keyv": "^4.5.0", "keyv": "4.5.2",
"koa": "^2.13.4", "koa": "2.13.4",
"koa-body": "^5.0.0", "koa-body": "6.0.1",
"koa-router": "^12.0.0", "koa-router": "12.0.0",
"lodash": "^4.17.21", "lodash": "4.17.21",
"luxon": "2.0.2", "luxon": "3.1.0",
"mammoth": "^1.4.21", "mammoth": "1.5.1",
"marked": "2.0.7", "marked": "4.2.2",
"momentjs": "2.0.0", "momentjs": "2.0.0",
"ms-rest-azure": "3.0.0", "ms-rest-azure": "3.0.2",
"nexmo": "2.9.1", "nexmo": "2.9.1",
"node-cron": "3.0.0", "node-cron": "3.0.2",
"node-nlp": "^3.10.2", "node-nlp": "3.10.2",
"node-tesseract-ocr": "^2.2.1", "node-tesseract-ocr": "2.2.1",
"npm": "7.21.0", "npm": "9.1.2",
"opn": "6.0.0", "opn": "6.0.0",
"pdf-extraction": "1.0.2", "pdf-extraction": "1.0.2",
"pdfkit": "^0.13.0", "pdfkit": "0.13.0",
"phone": "2.4.21", "phone": "3.1.30",
"pizzip": "^3.0.6", "pizzip": "3.1.3",
"pptxtemplater": "1.0.5", "pptxtemplater": "1.0.5",
"pragmatismo-io-framework": "1.0.20", "pragmatismo-io-framework": "1.0.20",
"prism-media": "1.3.1", "prism-media": "1.3.4",
"public-ip": "4.0.4", "public-ip": "6.0.1",
"punycode": "^2.1.1", "punycode": "2.1.1",
"puppeteer": "13.7.0", "puppeteer": "19.2.2",
"puppeteer-extra": "^3.3.4", "puppeteer-extra": "3.3.4",
"puppeteer-extra-plugin-stealth": "2.4.5", "puppeteer-extra-plugin-stealth": "2.11.1",
"qrcode": "^1.5.0", "qrcode": "1.5.1",
"qrcode-terminal": "0.12.0", "qrcode-terminal": "0.12.0",
"readline": "1.3.0", "readline": "1.3.0",
"reflect-metadata": "0.1.13", "reflect-metadata": "0.1.13",
@ -138,50 +139,50 @@
"rimraf": "3.0.2", "rimraf": "3.0.2",
"safe-buffer": "5.2.1", "safe-buffer": "5.2.1",
"scanf": "1.1.2", "scanf": "1.1.2",
"sequelize": "6.5.0", "sequelize": "6.25.6",
"sequelize-cli": "6.2.0", "sequelize-cli": "6.5.2",
"sequelize-typescript": "2.1.0", "sequelize-typescript": "2.1.5",
"simple-git": "2.39.1", "simple-git": "3.15.0",
"speakingurl": "14.0.1", "speakingurl": "14.0.1",
"sppull": "2.7.0", "sppull": "3.0.1",
"ssr-for-bots": "1.0.1-c", "ssr-for-bots": "1.0.1-c",
"strict-password-generator": "1.1.2", "strict-password-generator": "1.1.2",
"swagger-client": "2.1.18", "swagger-client": "2.1.18",
"tabulator-tables": "^5.2.6", "tabulator-tables": "5.4.2",
"tedious": "14.0.0", "tedious": "15.1.2",
"textract": "2.5.0", "textract": "2.5.0",
"twitter-api-v2": "1.12.7", "twitter-api-v2": "1.12.9",
"typescript": "3.6.4", "typescript": "4.9.3",
"typescript-rest-rpc": "^1.0.10", "typescript-rest-rpc": "1.0.10",
"url-join": "4.0.1", "url-join": "5.0.0",
"vbscript-to-typescript": "1.0.8", "vbscript-to-typescript": "1.0.8",
"vhost": "^3.0.2", "vhost": "3.0.2",
"vm2": "^3.9.11", "vm2": "3.9.11",
"vm2-process": "^2.1.1", "vm2-process": "2.1.1",
"walk-promise": "0.2.0", "walk-promise": "0.2.0",
"washyourmouthoutwithsoap": "1.0.2", "washyourmouthoutwithsoap": "1.0.2",
"whatsapp-web.js": "1.18.0", "whatsapp-web.js": "1.18.3",
"winston": "^2.4.2", "winston": "3.8.2",
"winston-logs-display": "^1.0.0", "winston-logs-display": "1.0.0",
"yarn": "^1.22.19" "yarn": "1.22.19"
}, },
"devDependencies": { "devDependencies": {
"@types/puppeteer": "5.4.6", "@types/puppeteer": "5.4.7",
"@types/url-join": "4.0.0", "@types/url-join": "4.0.1",
"@types/winston": "2.4.4", "@types/winston": "2.4.4",
"ban-sensitive-files": "1.9.15", "ban-sensitive-files": "1.9.18",
"commitizen": "4.2.4", "commitizen": "4.2.5",
"cz-conventional-changelog": "3.3.0", "cz-conventional-changelog": "3.3.0",
"dependency-check": "4.1.0", "dependency-check": "4.1.0",
"git-issues": "1.3.1", "git-issues": "1.3.1",
"license-checker": "25.0.1", "license-checker": "25.0.1",
"ngrok": "4.0.1", "ngrok": "4.3.3",
"nsp": "3.2.1", "nsp": "3.2.1",
"prettier-standard": "16.4.1", "prettier-standard": "16.4.1",
"semantic-release": "17.4.3", "semantic-release": "19.0.5",
"simple-commit-message": "4.1.2", "simple-commit-message": "4.1.3",
"travis-deploy-once": "5.0.11", "travis-deploy-once": "5.0.11",
"ts-node": "10.0.0", "ts-node": "10.9.1",
"tslint": "6.1.2" "tslint": "6.1.2"
}, },
"eslintConfig": { "eslintConfig": {

View file

@ -36,14 +36,14 @@
'use strict'; 'use strict';
const crypto = require('crypto'); import crypto from 'crypto';
import urlJoin from 'url-join';
import { WaterfallDialog } from 'botbuilder-dialogs'; import { WaterfallDialog } from 'botbuilder-dialogs';
import { GBMinInstance, IGBDialog, GBLog, IGBPackage } from 'botlib'; import { GBMinInstance, IGBDialog, GBLog, IGBPackage } from 'botlib';
const urlJoin = require('url-join'); import { GBDeployer } from '../../core.gbapp/services/GBDeployer.js';
import { GBDeployer } from '../../core.gbapp/services/GBDeployer'; import { GBImporter } from '../../core.gbapp/services/GBImporterService.js';
import { GBImporter } from '../../core.gbapp/services/GBImporterService'; import { Messages } from '../strings.js';
import { Messages } from '../strings'; import { GBAdminService } from '../services/GBAdminService.js';
import { GBAdminService } from '../services/GBAdminService';
import { CollectionUtil } from 'pragmatismo-io-framework'; import { CollectionUtil } from 'pragmatismo-io-framework';
/** /**

View file

@ -38,8 +38,8 @@
import { GBDialogStep, GBLog, GBMinInstance, IGBCoreService, IGBPackage } from 'botlib'; import { GBDialogStep, GBLog, GBMinInstance, IGBCoreService, IGBPackage } from 'botlib';
import { Sequelize } from 'sequelize-typescript'; import { Sequelize } from 'sequelize-typescript';
import { AdminDialog } from './dialogs/AdminDialog'; import { AdminDialog } from './dialogs/AdminDialog.js';
import { GuaribasAdmin } from './models/AdminModel'; import { GuaribasAdmin } from './models/AdminModel.js';
/** /**
* The package for admin.gbapp. * The package for admin.gbapp.

View file

@ -52,20 +52,20 @@ import {
export class GuaribasAdmin extends Model<GuaribasAdmin> { export class GuaribasAdmin extends Model<GuaribasAdmin> {
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public instanceId: number; declare instanceId: number;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public key: string; declare key: string;
@Column(DataType.STRING(4000)) @Column(DataType.STRING(4000))
public value: string; declare value: string;
@Column(DataType.DATE) @Column(DataType.DATE)
@CreatedAt @CreatedAt
public createdAt: Date; declare createdAt: Date;
@Column(DataType.DATE) @Column(DataType.DATE)
@UpdatedAt @UpdatedAt
public updatedAt: Date; declare updatedAt: Date;
} }

View file

@ -39,18 +39,18 @@
import { AuthenticationContext, TokenResponse } from 'adal-node'; import { AuthenticationContext, TokenResponse } from 'adal-node';
import { GBLog, GBMinInstance, IGBAdminService, IGBCoreService, IGBDeployer, IGBInstance } from 'botlib'; import { GBLog, GBMinInstance, IGBAdminService, IGBCoreService, IGBDeployer, IGBInstance } from 'botlib';
import { FindOptions } from 'sequelize/types'; import { FindOptions } from 'sequelize/types';
const urlJoin = require('url-join'); import urlJoin from 'url-join';
import { AzureDeployerService } from '../../azuredeployer.gbapp/services/AzureDeployerService'; import { AzureDeployerService } from '../../azuredeployer.gbapp/services/AzureDeployerService.js';
import { GuaribasInstance } from '../../core.gbapp/models/GBModel'; import { GuaribasInstance } from '../../core.gbapp/models/GBModel.js';
import { GBConfigService } from '../../core.gbapp/services/GBConfigService'; import { GBConfigService } from '../../core.gbapp/services/GBConfigService.js';
import { GBDeployer } from '../../core.gbapp/services/GBDeployer'; import { GBDeployer } from '../../core.gbapp/services/GBDeployer.js';
import { GBImporter } from '../../core.gbapp/services/GBImporterService'; import { GBImporter } from '../../core.gbapp/services/GBImporterService.js';
import { GBSharePointService } from '../../sharepoint.gblib/services/SharePointService'; import { GBSharePointService } from '../../sharepoint.gblib/services/SharePointService.js';
import { GuaribasAdmin } from '../models/AdminModel'; import { GuaribasAdmin } from '../models/AdminModel.js';
const Path = require('path'); import msRestAzure from 'ms-rest-azure';
const msRestAzure = require('ms-rest-azure'); import Path from 'path';
const PasswordGenerator = require('strict-password-generator').default; import PasswordGenerator from 'strict-password-generator';
const crypto = require("crypto"); import crypto from 'crypto';
/** /**
* Services for server administration. * Services for server administration.
@ -68,25 +68,27 @@ export class GBAdminService implements IGBAdminService {
} }
public static generateUuid(): string { public static generateUuid(): string {
return msRestAzure.generateUuid(); return crypto.randomUUID();
} }
public static getNodeVersion() { public static getNodeVersion() {
return "19.1.0";
const packageJson = urlJoin(process.cwd(), 'package.json'); const packageJson = urlJoin(process.cwd(), 'package.json');
// tslint:disable-next-line: non-literal-require // tslint:disable-next-line: non-literal-require
const pjson = require(packageJson); // TODO
// const pjson = require(packageJson);
return pjson.engines.node.replace('=', ''); // return pjson.engines.node.replace('=', '');
} }
public static async getADALTokenFromUsername(username: string, password: string) { public static async getADALTokenFromUsername(username: string, password: string) {
const credentials = await GBAdminService.getADALCredentialsFromUsername(username, password); const credentials = await GBAdminService.getADALCredentialsFromUsername(username, password);
return credentials.tokenCache._entries[0].accessToken; return (credentials as any).tokenCache._entries[0].accessToken;
} }
public static async getADALCredentialsFromUsername(username: string, password: string) { public static async getADALCredentialsFromUsername(username: string, password: string) {
return await msRestAzure.loginWithUsernamePassword(username, password); return await msRestAzure.loginWithUsernamePassword(username, password)
} }
public static getMobileCode() { public static getMobileCode() {

View file

@ -38,7 +38,7 @@
import { GBDialogStep, GBLog, GBMinInstance, IGBCoreService, IGBPackage } from 'botlib'; import { GBDialogStep, GBLog, GBMinInstance, IGBCoreService, IGBPackage } from 'botlib';
import { Sequelize } from 'sequelize-typescript'; import { Sequelize } from 'sequelize-typescript';
import { GuaribasConversation, GuaribasConversationMessage } from './models'; import { GuaribasConversation, GuaribasConversationMessage } from './models/index.js';
/** /**
* .gblib Package handler. * .gblib Package handler.

View file

@ -54,9 +54,9 @@ import {
UpdatedAt UpdatedAt
} from 'sequelize-typescript'; } from 'sequelize-typescript';
import { GuaribasChannel, GuaribasInstance } from '../../core.gbapp/models/GBModel'; import { GuaribasChannel, GuaribasInstance } from '../../core.gbapp/models/GBModel.js';
import { GuaribasSubject } from '../../kb.gbapp/models'; import { GuaribasSubject } from '../../kb.gbapp/models/index.js';
import { GuaribasUser } from '../../security.gbapp/models'; import { GuaribasUser } from '../../security.gbapp/models/index.js';
/** /**
* A conversation that groups many messages. * A conversation that groups many messages.
@ -67,45 +67,45 @@ export class GuaribasConversation extends Model<GuaribasConversation> {
@PrimaryKey @PrimaryKey
@AutoIncrement @AutoIncrement
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public conversationId: number; declare conversationId: number;
@ForeignKey(() => GuaribasInstance) @ForeignKey(() => GuaribasInstance)
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public instanceId: number; declare instanceId: number;
@ForeignKey(() => GuaribasSubject) @ForeignKey(() => GuaribasSubject)
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public startSubjectId: number; declare startSubjectId: number;
@BelongsTo(() => GuaribasSubject) @BelongsTo(() => GuaribasSubject)
public startSubject: GuaribasSubject; declare startSubject: GuaribasSubject;
@ForeignKey(() => GuaribasChannel) @ForeignKey(() => GuaribasChannel)
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public channelId: string; declare channelId: string;
@Column(DataType.DATE) @Column(DataType.DATE)
public rateDate: Date; declare rateDate: Date;
@Column(DataType.FLOAT) @Column(DataType.FLOAT)
public rate: number; declare rate: number;
@Column(DataType.STRING(512)) @Column(DataType.STRING(512))
public feedback: string; declare feedback: string;
@CreatedAt @CreatedAt
@Column(DataType.DATE) @Column(DataType.DATE)
public createdAt: Date; declare createdAt: Date;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public text: string; declare text: string;
@ForeignKey(() => GuaribasUser) @ForeignKey(() => GuaribasUser)
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public startedByUserId: number; declare startedByUserId: number;
@BelongsTo(() => GuaribasUser) @BelongsTo(() => GuaribasUser)
public startedBy: GuaribasUser; declare startedBy: GuaribasUser;
} }
/** /**
@ -117,41 +117,41 @@ export class GuaribasConversationMessage extends Model<GuaribasConversationMessa
@PrimaryKey @PrimaryKey
@AutoIncrement @AutoIncrement
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public conversationMessageId: number; declare conversationMessageId: number;
@ForeignKey(() => GuaribasSubject) @ForeignKey(() => GuaribasSubject)
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public subjectId: number; declare subjectId: number;
@Column(DataType.TEXT) @Column(DataType.TEXT)
public content: string; declare content: string;
@Column(DataType.DATE) @Column(DataType.DATE)
@CreatedAt @CreatedAt
public createdAt: Date; declare createdAt: Date;
@Column(DataType.DATE) @Column(DataType.DATE)
@UpdatedAt @UpdatedAt
public updatedAt: Date; declare updatedAt: Date;
//tslint:disable-next-line:no-use-before-declare //tslint:disable-next-line:no-use-before-declare
@ForeignKey(() => GuaribasConversation) @ForeignKey(() => GuaribasConversation)
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public conversationId: number; declare conversationId: number;
//tslint:disable-next-line:no-use-before-declare //tslint:disable-next-line:no-use-before-declare
@BelongsTo(() => GuaribasConversation) @BelongsTo(() => GuaribasConversation)
public conversation: GuaribasConversation; declare conversation: GuaribasConversation;
@ForeignKey(() => GuaribasInstance) @ForeignKey(() => GuaribasInstance)
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public instanceId: number; declare instanceId: number;
@ForeignKey(() => GuaribasUser) @ForeignKey(() => GuaribasUser)
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public userId: number; declare userId: number;
@BelongsTo(() => GuaribasUser) @BelongsTo(() => GuaribasUser)
public user: GuaribasUser; declare user: GuaribasUser;
} }

View file

@ -36,9 +36,9 @@
import { AzureText } from 'pragmatismo-io-framework'; import { AzureText } from 'pragmatismo-io-framework';
import { FindOptions } from 'sequelize/types'; import { FindOptions } from 'sequelize/types';
import { GBServer } from '../../../src/app'; import { GBServer } from '../../../src/app.js';
import { GuaribasUser } from '../../security.gbapp/models'; import { GuaribasUser } from '../../security.gbapp/models/index.js';
import { GuaribasConversation, GuaribasConversationMessage } from '../models'; import { GuaribasConversation, GuaribasConversationMessage } from '../models/index.js';
/** /**
* Base services for Bot Analytics. * Base services for Bot Analytics.

View file

@ -37,10 +37,10 @@
'use strict'; 'use strict';
import { GBLog, IGBInstallationDeployer, IGBInstance } from 'botlib'; import { GBLog, IGBInstallationDeployer, IGBInstance } from 'botlib';
import * as fs from 'fs'; import * as Fs from 'fs';
import { GBAdminService } from '../../../packages/admin.gbapp/services/GBAdminService'; import { GBAdminService } from '../../../packages/admin.gbapp/services/GBAdminService.js';
import { GBConfigService } from '../../../packages/core.gbapp/services/GBConfigService'; import { GBConfigService } from '../../../packages/core.gbapp/services/GBConfigService.js';
const scanf = require('scanf'); import scanf from 'scanf';
/** /**
* Handles command-line dialog for getting info for Boot Bot. * Handles command-line dialog for getting info for Boot Bot.
@ -49,7 +49,7 @@ export class StartDialog {
public static async createBaseInstance(installationDeployer: IGBInstallationDeployer) { public static async createBaseInstance(installationDeployer: IGBInstallationDeployer) {
// No .env so asks for cloud credentials to start a new farm. // No .env so asks for cloud credentials to start a new farm.
if (!fs.existsSync(`.env`)) { if (!Fs.existsSync(`.env`)) {
process.stdout.write( process.stdout.write(
'A empty enviroment is detected. To start automatic deploy, please enter some information:\n' 'A empty enviroment is detected. To start automatic deploy, please enter some information:\n'
); );

View file

@ -36,31 +36,27 @@
'use strict'; 'use strict';
import { HttpHeaders, HttpMethods, ServiceClient, WebResource } from '@azure/ms-rest-js'; import urlJoin from 'url-join';
import { HttpMethods, ServiceClient, WebResource } from '@azure/ms-rest-js';
import { CognitiveServicesManagementClient } from 'azure-arm-cognitiveservices'; import { CognitiveServicesManagementClient } from 'azure-arm-cognitiveservices';
import { ResourceManagementClient, SubscriptionClient } from 'azure-arm-resource'; import { ResourceManagementClient, SubscriptionClient } from 'azure-arm-resource';
import { SearchManagementClient } from 'azure-arm-search'; import { SearchManagementClient } from 'azure-arm-search';
import { SqlManagementClient } from 'azure-arm-sql'; import { SqlManagementClient } from 'azure-arm-sql';
import { WebSiteManagementClient } from 'azure-arm-website'; import { WebSiteManagementClient } from 'azure-arm-website';
//tslint:disable-next-line:no-submodule-imports import { AppServicePlan, Site, SiteLogsConfig, SiteSourceControl } from 'azure-arm-website/lib/models/index.js';
import { AppServicePlan, Site, SiteConfigResource, SiteLogsConfig, SiteSourceControl } from 'azure-arm-website/lib/models';
import { GBLog, IGBInstallationDeployer, IGBInstance, IGBDeployer, IGBCoreService } from 'botlib'; import { GBLog, IGBInstallationDeployer, IGBInstance, IGBDeployer, IGBCoreService } from 'botlib';
import { GBAdminService } from '../../../packages/admin.gbapp/services/GBAdminService'; import { GBAdminService } from '../../../packages/admin.gbapp/services/GBAdminService.js';
import { GBCorePackage } from '../../../packages/core.gbapp'; import { GBCorePackage } from '../../../packages/core.gbapp/index.js';
import { GBConfigService } from '../../../packages/core.gbapp/services/GBConfigService'; import { GBConfigService } from '../../../packages/core.gbapp/services/GBConfigService.js';
import { GBDeployer } from '../../../packages/core.gbapp/services/GBDeployer'; import { GBDeployer } from '../../../packages/core.gbapp/services/GBDeployer.js';
const MicrosoftGraph = require("@microsoft/microsoft-graph-client"); import { CognitiveServicesAccount } from 'azure-arm-cognitiveservices/lib/models/index.js';
import MicrosoftGraph from "@microsoft/microsoft-graph-client";
import Spinner from 'cli-spinner';
import * as publicIp from 'public-ip';
const Spinner = require('cli-spinner').Spinner;
// tslint:disable-next-line: no-submodule-imports
// tslint:disable-next-line:no-submodule-imports
import { CognitiveServicesAccount } from 'azure-arm-cognitiveservices/lib/models';
const urlJoin = require('url-join');
const iconUrl = 'https://github.com/pragmatismo-io/BotServer/blob/master/docs/images/generalbots-logo-squared.png';
const publicIp = require('public-ip');
const WebSiteResponseTimeout = 900; const WebSiteResponseTimeout = 900;
const iconUrl = 'https://github.com/pragmatismo-io/BotServer/blob/master/docs/images/generalbots-logo-squared.png';
/** /**
* Deployer for Microsoft cloud. * Deployer for Microsoft cloud.
*/ */
@ -347,7 +343,7 @@ export class AzureDeployerService implements IGBInstallationDeployer {
const credentials = await GBAdminService.getADALCredentialsFromUsername(username, password); const credentials = await GBAdminService.getADALCredentialsFromUsername(username, password);
const storageClient = new SqlManagementClient(credentials, subscriptionId); const storageClient = new SqlManagementClient(credentials, subscriptionId);
const ip = await publicIp.v4(); const ip = await publicIp.publicIpv4();
let params = { let params = {
startIpAddress: ip, startIpAddress: ip,
endIpAddress: ip endIpAddress: ip
@ -404,7 +400,7 @@ export class AzureDeployerService implements IGBInstallationDeployer {
await this.createSearch(name, searchName, instance.cloudLocation); await this.createSearch(name, searchName, instance.cloudLocation);
const searchKeys = await this.searchClient.adminKeys.get(name, searchName); const searchKeys = await this.searchClient.adminKeys.get(name, searchName);
instance.searchHost = `${searchName}.search.windows.net`; instance.searchHost = `${searchName}.search.windows.net`;
instance.searchIndex = 'azuresql-index'; instance.searchIndex = 'azuresql-index.js';
instance.searchIndexer = 'azuresql-indexer'; instance.searchIndexer = 'azuresql-indexer';
instance.searchKey = searchKeys.primaryKey; instance.searchKey = searchKeys.primaryKey;

View file

@ -37,15 +37,16 @@
'use strict'; 'use strict';
import { GBDialogStep, GBLog, GBMinInstance, IGBCoreService, IGBPackage } from 'botlib'; import { GBDialogStep, GBLog, GBMinInstance, IGBCoreService, IGBPackage } from 'botlib';
import { GuaribasSchedule } from '../core.gbapp/models/GBModel'; import { GuaribasSchedule } from '../core.gbapp/models/GBModel.js';
import { Sequelize } from 'sequelize-typescript'; import { Sequelize } from 'sequelize-typescript';
import { createServerRouter } from "typescript-rest-rpc/lib/server" import { createServerRouter } from "typescript-rest-rpc/lib/server.js"
import { DialogKeywords } from './services/DialogKeywords'; import { DialogKeywords } from './services/DialogKeywords.js';
const Koa = require('koa');
import * as koaBody from "koa-body" import * as koaBody from "koa-body"
import { SystemKeywords } from './services/SystemKeywords'; import { SystemKeywords } from './services/SystemKeywords.js';
import { WebAutomationKeywords } from './services/WebAutomationKeywords'; import { WebAutomationKeywords } from './services/WebAutomationKeywords.js';
import { DebuggerService } from './services/DebuggerService'; import { DebuggerService } from './services/DebuggerService.js';
import Koa from 'koa';
const app = new Koa() const app = new Koa()
/** /**
@ -59,7 +60,7 @@ export class GBBasicPackage implements IGBPackage {
public async loadPackage(core: IGBCoreService, sequelize: Sequelize): Promise<void> { public async loadPackage(core: IGBCoreService, sequelize: Sequelize): Promise<void> {
core.sequelize.addModels([GuaribasSchedule]); core.sequelize.addModels([GuaribasSchedule]);
app.use(koaBody({ multipart: true })); app.use(koaBody.koaBody({ multipart: true }));
app.listen(1111); app.listen(1111);
} }

View file

@ -49,31 +49,31 @@ import {
UpdatedAt UpdatedAt
} from 'sequelize-typescript'; } from 'sequelize-typescript';
import { GuaribasInstance } from '../../core.gbapp/models/GBModel'; import { GuaribasInstance } from '../../core.gbapp/models/GBModel.js';
@Table @Table
//tslint:disable-next-line:max-classes-per-file //tslint:disable-next-line:max-classes-per-file
export class GuaribasSchedule extends Model<GuaribasSchedule> { export class GuaribasSchedule extends Model<GuaribasSchedule> {
@Column (DataType.STRING(255)) @Column (DataType.STRING(255))
public name: string; declare name: string;
@Column (DataType.STRING(255)) @Column (DataType.STRING(255))
public schedule: string; declare schedule: string;
@ForeignKey(() => GuaribasInstance) @ForeignKey(() => GuaribasInstance)
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public instanceId: number; declare instanceId: number;
@BelongsTo(() => GuaribasInstance) @BelongsTo(() => GuaribasInstance)
public instance: GuaribasInstance; declare instance: GuaribasInstance;
@Column(DataType.DATE) @Column(DataType.DATE)
@CreatedAt @CreatedAt
public createdAt: Date; declare createdAt: Date;
@Column(DataType.DATE) @Column(DataType.DATE)
@UpdatedAt @UpdatedAt
public updatedAt: Date; declare updatedAt: Date;
} }

View file

@ -33,7 +33,7 @@
'use strict'; 'use strict';
import { createBrowser } from '../../core.gbapp/services/GBSSR'; import { createBrowser } from '../../core.gbapp/services/GBSSR.js';
export class ChartServices { export class ChartServices {

View file

@ -33,12 +33,12 @@
'use strict'; 'use strict';
import { GBLog, GBMinInstance } from 'botlib'; import { GBLog, GBMinInstance } from 'botlib';
import { GBServer } from '../../../src/app'; import { GBServer } from '../../../src/app.js';
import { GuaribasUser } from '../../security.gbapp/models'; import { GuaribasUser } from '../../security.gbapp/models/index.js';
import { DialogKeywords } from './DialogKeywords'; import { DialogKeywords } from './DialogKeywords.js';
const Swagger = require('swagger-client'); import Fs from 'fs';
const fs = require('fs'); import Swagger from 'swagger-client';
const { spawn } = require('child_process'); import { spawn } from 'child_process';
/** /**
* Web Automation services of conversation to be called by BASIC. * Web Automation services of conversation to be called by BASIC.
@ -299,7 +299,7 @@ export class DebuggerService {
let min: GBMinInstance = GBServer.globals.minInstances.filter(p => p.instance.botId === botId)[0]; let min: GBMinInstance = GBServer.globals.minInstances.filter(p => p.instance.botId === botId)[0];
this.client = await new Swagger({ this.client = await new Swagger({
spec: JSON.parse(fs.readFileSync('directline-3.0.json', 'utf8')), spec: JSON.parse(Fs.readFileSync('directline-3.0.json', 'utf8')),
usePromise: true usePromise: true
}); });
this.client.clientAuthorizations.add( this.client.clientAuthorizations.add(

View file

@ -33,36 +33,31 @@
'use strict'; 'use strict';
import { GBLog, GBMinInstance } from 'botlib'; import { GBLog, GBMinInstance } from 'botlib';
import { GBConfigService } from '../../core.gbapp/services/GBConfigService'; import { GBConfigService } from '../../core.gbapp/services/GBConfigService.js';
import { ChartServices } from './ChartServices'; import { ChartServices } from './ChartServices.js';
const urlJoin = require('url-join'); import urlJoin from 'url-join';
import { GBServer } from '../../../src/app'; import { GBServer } from '../../../src/app.js';
import { GBDeployer } from '../../core.gbapp/services/GBDeployer'; import { GBDeployer } from '../../core.gbapp/services/GBDeployer.js';
import { SecService } from '../../security.gbapp/services/SecService'; import { SecService } from '../../security.gbapp/services/SecService.js';
import { SystemKeywords } from './SystemKeywords'; import { SystemKeywords } from './SystemKeywords.js';
import { GBMinService } from '../../core.gbapp/services/GBMinService'; import * as wpp from 'whatsapp-web.js';
import { HubSpotServices } from '../../hubspot.gblib/services/HubSpotServices'; import { HubSpotServices } from '../../hubspot.gblib/services/HubSpotServices.js';
import { WhatsappDirectLine } from '../../whatsapp.gblib/services/WhatsappDirectLine'; import { GBAdminService } from '../../admin.gbapp/services/GBAdminService.js';
import { GBAdminService } from '../../admin.gbapp/services/GBAdminService';
import { createBrowser } from '../../core.gbapp/services/GBSSR';
import * as request from 'request-promise-native'; import * as request from 'request-promise-native';
import { Messages } from '../strings'; import { Messages } from '../strings.js';
import * as Fs from 'fs';
import * as fs from 'fs';
import { CollectionUtil } from 'pragmatismo-io-framework'; import { CollectionUtil } from 'pragmatismo-io-framework';
import { GBConversationalService } from '../../core.gbapp/services/GBConversationalService'; import { GBConversationalService } from '../../core.gbapp/services/GBConversationalService.js';
import { GuaribasUser } from '../../security.gbapp/models'; import { GuaribasUser } from '../../security.gbapp/models/index.js';
import phoneUtil from 'google-libphonenumber';
import phone from 'phone';
const DateDiff = require('date-diff'); import DateDiff from 'date-diff';
const { Buttons } = require('whatsapp-web.js'); import { Buttons } from 'whatsapp-web.js';
const phoneUtil = require('google-libphonenumber').PhoneNumberUtil.getInstance(); import tesseract from 'node-tesseract-ocr';
const phone = require('phone'); import Path from 'path';
import sgMail from '@sendgrid/mail';
const Path = require('path'); import mammoth from 'mammoth';
const sgMail = require('@sendgrid/mail'); import qrcode from 'qrcode';
var mammoth = require("mammoth");
const qrcode = require('qrcode');
/** /**
* Base services of conversation to be called by BASIC. * Base services of conversation to be called by BASIC.
@ -232,7 +227,7 @@ export class DialogKeywords {
*/ */
public async getOCR({localFile}) { public async getOCR({localFile}) {
GBLog.info(`BASIC: OCR processing on ${localFile}.`); GBLog.info(`BASIC: OCR processing on ${localFile}.`);
const tesseract = require("node-tesseract-ocr")
const config = { const config = {
lang: "eng", lang: "eng",
@ -290,8 +285,6 @@ export class DialogKeywords {
* @example list = ACTIVE TASKS * @example list = ACTIVE TASKS
*/ */
public async getActiveTasks({}) { public async getActiveTasks({}) {
let s = new HubSpotServices(null, null, process.env.HUBSPOT_KEY);
return await s.getActiveTasks();
} }
/** /**
@ -300,9 +293,6 @@ export class DialogKeywords {
* @example CREATE DEAL dealname,contato,empresa,amount * @example CREATE DEAL dealname,contato,empresa,amount
*/ */
public async createDeal({dealName, contact, company, amount}) { public async createDeal({dealName, contact, company, amount}) {
let s = new HubSpotServices(null, null, process.env.HUBSPOT_KEY);
let deal = await s.createDeal(dealName, contact, company, amount);
return deal;
} }
/** /**
@ -311,8 +301,6 @@ export class DialogKeywords {
* @example list = FIND CONTACT "Sandra" * @example list = FIND CONTACT "Sandra"
*/ */
public async fndContact({name}) { public async fndContact({name}) {
let s = new HubSpotServices(null, null, process.env.HUBSPOT_KEY);
return await s.searchContact(name);
} }
@ -703,7 +691,7 @@ export class DialogKeywords {
response = await request.get(options); response = await request.get(options);
} }
fs.writeFile(localFileName, response, (fsError) => { Fs.writeFile(localFileName, response, (fsError) => {
if (fsError) { if (fsError) {
throw fsError; throw fsError;
} }
@ -772,12 +760,12 @@ export class DialogKeywords {
let i = 0; let i = 0;
await CollectionUtil.asyncForEach(args, async arg => { await CollectionUtil.asyncForEach(args, async arg => {
i++; i++;
// DISABLED: choices.push({ body: arg, id: `button${i}` }); choices.push({ body: arg, id: `button${i}` });
await this.talk(arg); await this.talk(arg);
}); });
// DISABLED const button = new Buttons(Messages[locale].choices, choices, ' ', ' '); const button = new wpp.Buttons(Messages[locale].choices, choices, ' ', ' ');
// await this.talk(button); // TODO: await this.talk(button);
GBLog.info(`BASIC: HEAR with [${args.toString()}] (Asking for input).`); GBLog.info(`BASIC: HEAR with [${args.toString()}] (Asking for input).`);
} }
@ -826,7 +814,7 @@ export class DialogKeywords {
// await Promise.all(replyPromises); // await Promise.all(replyPromises);
// result = { // result = {
// data: fs.readFileSync(successfulSaves[0]['localPath']), // data: Fs.readFileSync(successfulSaves[0]['localPath']),
// filename: successfulSaves[0]['fileName'] // filename: successfulSaves[0]['fileName']
// }; // };
@ -938,7 +926,7 @@ export class DialogKeywords {
let phoneNumber; let phoneNumber;
try { try {
phoneNumber = phone(text, 'BRA')[0]; // TODO: Use accordingly to the person. phoneNumber = phone(text, {country:'BRA'})[0]; // TODO: Use accordingly to the person.
phoneNumber = phoneUtil.parse(phoneNumber); phoneNumber = phoneUtil.parse(phoneNumber);
} catch (error) { } catch (error) {
await this.talk(Messages[locale].validation_enter_valid_mobile); await this.talk(Messages[locale].validation_enter_valid_mobile);

View file

@ -33,23 +33,21 @@
'use strict'; 'use strict';
import { GBLog, GBMinInstance, GBService, IGBCoreService, GBDialogStep } from 'botlib'; import { GBLog, GBMinInstance, GBService, IGBCoreService, GBDialogStep } from 'botlib';
import * as fs from 'fs'; import * as Fs from 'fs';
import { GBDeployer } from '../../core.gbapp/services/GBDeployer'; import { GBDeployer } from '../../core.gbapp/services/GBDeployer.js';
import { TSCompiler } from './TSCompiler'; import { TSCompiler } from './TSCompiler.js';
import { CollectionUtil } from 'pragmatismo-io-framework'; import { CollectionUtil } from 'pragmatismo-io-framework';
import { ScheduleServices } from './ScheduleServices'; import { ScheduleServices } from './ScheduleServices.js';
import { GBConfigService } from '../../core.gbapp/services/GBConfigService'; import { GBConfigService } from '../../core.gbapp/services/GBConfigService.js';
//tslint:disable-next-line:no-submodule-imports import urlJoin from 'url-join';
const urlJoin = require('url-join'); import { NodeVM, VMScript } from 'vm2';
const { NodeVM, VMScript } = require('vm2'); import { createVm2Pool } from './vm2-process/index.js';
const { createVm2Pool } = require('./vm2-process/index'); import * as vb2ts from './vbscript-to-typescript.js';
const vb2ts = require('./vbscript-to-typescript'); import textract from 'textract';
const beautify = require('js-beautify').js; import walkPromise from 'walk-promise';
const textract = require('textract'); import child_process from 'child_process';
const walkPromise = require('walk-promise'); import Path from 'path';
const child_process = require('child_process'); import indent from 'indent.js';
const Path = require('path');
const indent = require('indent.js');
/** /**
* @fileoverview Decision was to priorize security(isolation) and debugging, * @fileoverview Decision was to priorize security(isolation) and debugging,
* over a beautiful BASIC transpiler (to be done). * over a beautiful BASIC transpiler (to be done).
@ -73,11 +71,11 @@ export class GBVMService extends GBService {
const wordFile = filename; const wordFile = filename;
const vbsFile = filename.substr(0, filename.indexOf('docx')) + 'vbs'; const vbsFile = filename.substr(0, filename.indexOf('docx')) + 'vbs';
const fullVbsFile = urlJoin(folder, vbsFile); const fullVbsFile = urlJoin(folder, vbsFile);
const docxStat = fs.statSync(urlJoin(folder, wordFile)); const docxStat = Fs.statSync(urlJoin(folder, wordFile));
const interval = 3000; // If compiled is older 30 seconds, then recompile. const interval = 3000; // If compiled is older 30 seconds, then recompile.
let writeVBS = true; let writeVBS = true;
if (fs.existsSync(fullVbsFile)) { if (Fs.existsSync(fullVbsFile)) {
const vbsStat = fs.statSync(fullVbsFile); const vbsStat = Fs.statSync(fullVbsFile);
if (docxStat['mtimeMs'] < vbsStat['mtimeMs'] + interval) { if (docxStat['mtimeMs'] < vbsStat['mtimeMs'] + interval) {
writeVBS = false; writeVBS = false;
} }
@ -98,13 +96,13 @@ export class GBVMService extends GBService {
await s.deleteScheduleIfAny(min, mainName); await s.deleteScheduleIfAny(min, mainName);
} }
text = text.replace(/^\s*SET SCHEDULE (.*)/gim, ''); text = text.replace(/^\s*SET SCHEDULE (.*)/gim, '');
fs.writeFileSync(urlJoin(folder, vbsFile), text); Fs.writeFileSync(urlJoin(folder, vbsFile), text);
} }
// Process node_modules install. // Process node_modules install.
const node_modules = urlJoin(folder, 'node_modules'); const node_modules = urlJoin(folder, 'node_modules');
if (!fs.existsSync(node_modules)) { if (!Fs.existsSync(node_modules)) {
const packageJson = ` const packageJson = `
{ {
"name": "${min.botId}.gbdialog", "name": "${min.botId}.gbdialog",
@ -120,7 +118,7 @@ export class GBVMService extends GBService {
"vm2": "3.9.11" "vm2": "3.9.11"
} }
}`; }`;
fs.writeFileSync(urlJoin(folder, 'package.json'), packageJson); Fs.writeFileSync(urlJoin(folder, 'package.json'), packageJson);
GBLog.info(`BASIC: Installing .gbdialog node_modules for ${min.botId}...`); GBLog.info(`BASIC: Installing .gbdialog node_modules for ${min.botId}...`);
const npmPath = urlJoin(process.env.PWD, 'node_modules', '.bin', 'npm'); const npmPath = urlJoin(process.env.PWD, 'node_modules', '.bin', 'npm');
@ -131,21 +129,21 @@ export class GBVMService extends GBService {
const fullFilename = urlJoin(folder, filename); const fullFilename = urlJoin(folder, filename);
if (process.env.GBDIALOG_HOTSWAP) { if (process.env.GBDIALOG_HOTSWAP) {
fs.watchFile(fullFilename, async () => { Fs.watchFile(fullFilename, async () => {
await this.translateBASIC(fullFilename, min, deployer, mainName); await this.translateBASIC(fullFilename, min, deployer, mainName);
}); });
} }
const compiledAt = fs.statSync(fullFilename); const compiledAt = Fs.statSync(fullFilename);
const jsfile = urlJoin(folder, `${filename}.js`); const jsfile = urlJoin(folder, `${filename}.js`);
if (fs.existsSync(jsfile)) { if (Fs.existsSync(jsfile)) {
const jsStat = fs.statSync(jsfile); const jsStat = Fs.statSync(jsfile);
const interval = 30000; // If compiled is older 30 seconds, then recompile. const interval = 30000; // If compiled is older 30 seconds, then recompile.
if (compiledAt.isFile() && compiledAt['mtimeMs'] > jsStat['mtimeMs'] + interval) { if (compiledAt.isFile() && compiledAt['mtimeMs'] > jsStat['mtimeMs'] + interval) {
await this.translateBASIC(fullFilename, min, deployer, mainName); await this.translateBASIC(fullFilename, min, deployer, mainName);
} else { } else {
const parsedCode: string = fs.readFileSync(jsfile, 'utf8'); const parsedCode: string = Fs.readFileSync(jsfile, 'utf8');
min.sandBoxMap[mainName.toLowerCase().trim()] = parsedCode; min.sandBoxMap[mainName.toLowerCase().trim()] = parsedCode;
} }
@ -160,7 +158,7 @@ export class GBVMService extends GBService {
// Converts General Bots BASIC into regular VBS // Converts General Bots BASIC into regular VBS
let basicCode: string = fs.readFileSync(filename, 'utf8'); let basicCode: string = Fs.readFileSync(filename, 'utf8');
// Processes END keyword, removing extracode, useful // Processes END keyword, removing extracode, useful
// for development in .gbdialog. // for development in .gbdialog.
@ -195,17 +193,17 @@ export class GBVMService extends GBService {
// To use include, two /publish will be necessary (for now) // To use include, two /publish will be necessary (for now)
// because of alphabet order may raise not found errors. // because of alphabet order may raise not found errors.
let includeCode: string = fs.readFileSync(includeName, 'utf8'); let includeCode: string = Fs.readFileSync(includeName, 'utf8');
basicCode = basicCode.replace(/^include\b.*$/gmi, includeCode); basicCode = basicCode.replace(/^include\b.*$/gmi, includeCode);
} }
} while (include); } while (include);
const [vbsCode, jsonMap] = await this.convertGBASICToVBS(min, basicCode); const {code, jsonMap} = await this.convertGBASICToVBS(min, basicCode);
const vbsFile = `${filename}.compiled`; const vbsFile = `${filename}.compiled`;
const mapFile = `${filename}.map`; const mapFile = `${filename}.map`;
fs.writeFileSync(vbsFile, vbsCode); Fs.writeFileSync(vbsFile, code);
fs.writeFileSync(mapFile, JSON.stringify(jsonMap)); Fs.writeFileSync(mapFile, JSON.stringify(jsonMap));
// Converts VBS into TS. // Converts VBS into TS.
@ -214,8 +212,8 @@ export class GBVMService extends GBService {
// Convert TS into JS. // Convert TS into JS.
const tsfile: string = `${filename}.ts`; const tsfile: string = `${filename}.ts`;
let tsCode: string = fs.readFileSync(tsfile, 'utf8'); let tsCode: string = Fs.readFileSync(tsfile, 'utf8');
fs.writeFileSync(tsfile, tsCode); Fs.writeFileSync(tsfile, tsCode);
const tsc = new TSCompiler(); const tsc = new TSCompiler();
tsc.compile([tsfile]); tsc.compile([tsfile]);
@ -223,15 +221,15 @@ export class GBVMService extends GBService {
const jsfile = `${tsfile}.js`.replace('.ts', ''); const jsfile = `${tsfile}.js`.replace('.ts', '');
if (fs.existsSync(jsfile)) { if (Fs.existsSync(jsfile)) {
let code: string = fs.readFileSync(jsfile, 'utf8'); let code: string = Fs.readFileSync(jsfile, 'utf8');
code.replace(/^.*exports.*$/gm, ''); code.replace(/^.*exports.*$/gm, '');
code = ` code = `
return (async () => { return (async () => {
require('isomorphic-fetch'); require('isomorphic-fetch');
const rest = require ('typescript-rest-rpc/lib/client'); const rest from 'typescript-rest-rpc/lib/client');
// Interprocess communication from local HTTP to the BotServer. // Interprocess communication from local HTTP to the BotServer.
@ -275,7 +273,7 @@ export class GBVMService extends GBService {
`; `;
code = indent.js(code, {tabString: '\t'}); code = indent.js(code, {tabString: '\t'});
fs.writeFileSync(jsfile, code); Fs.writeFileSync(jsfile, code);
min.sandBoxMap[mainName.toLowerCase().trim()] = code; min.sandBoxMap[mainName.toLowerCase().trim()] = code;
GBLog.info(`[GBVMService] Finished loading of ${filename}, JavaScript from Word: \n ${code}`); GBLog.info(`[GBVMService] Finished loading of ${filename}, JavaScript from Word: \n ${code}`);
} }
@ -378,7 +376,7 @@ export class GBVMService extends GBService {
} }
code = `${allLines.join('\n')}\n%>`; code = `${allLines.join('\n')}\n%>`;
return [code, jsonMap]; return {code, jsonMap};
} }
private getKeywords() { private getKeywords() {
@ -841,7 +839,6 @@ export class GBVMService extends GBService {
script: runnerPath script: runnerPath
}); });
const port = run.port;
const result = await run(code, { filename: scriptPath, sandbox: sandbox }); const result = await run(code, { filename: scriptPath, sandbox: sandbox });
return result; return result;

View file

@ -33,13 +33,12 @@
'use strict'; 'use strict';
import { GBLog, GBMinInstance, GBService } from 'botlib'; import { GBLog, GBMinInstance, GBService } from 'botlib';
import { GBServer } from '../../../src/app'; import { GBServer } from '../../../src/app.js';
import { CollectionUtil } from 'pragmatismo-io-framework'; import { CollectionUtil } from 'pragmatismo-io-framework';
import { GBVMService } from '../../basic.gblib/services/GBVMService'; import { GBVMService } from '../../basic.gblib/services/GBVMService.js';
import { GuaribasSchedule } from '../../core.gbapp/models/GBModel'; import { GuaribasSchedule } from '../../core.gbapp/models/GBModel.js';
import { FindOptions } from 'sequelize/types';
const cron = require('node-cron'); import cron from 'node-cron';
/** /**
* @fileoverview Schedule Services. * @fileoverview Schedule Services.

View file

@ -31,32 +31,28 @@
\*****************************************************************************/ \*****************************************************************************/
'use strict'; 'use strict';
import { GBDialogStep, GBLog, GBMinInstance } from 'botlib'; import { GBDialogStep, GBLog, GBMinInstance } from 'botlib';
import { GBConfigService } from '../../core.gbapp/services/GBConfigService'; import { GBConfigService } from '../../core.gbapp/services/GBConfigService.js';
import { CollectionUtil } from 'pragmatismo-io-framework'; import { CollectionUtil } from 'pragmatismo-io-framework';
import * as request from 'request-promise-native'; import * as request from 'request-promise-native';
import { GBAdminService } from '../../admin.gbapp/services/GBAdminService'; import { GBAdminService } from '../../admin.gbapp/services/GBAdminService.js';
import { GBDeployer } from '../../core.gbapp/services/GBDeployer'; import { GBDeployer } from '../../core.gbapp/services/GBDeployer.js';
import { DialogKeywords } from './DialogKeywords'; import { DialogKeywords } from './DialogKeywords.js';
import { GBServer } from '../../../src/app'; import { GBServer } from '../../../src/app.js';
import { GBVMService } from './GBVMService'; import { GBVMService } from './GBVMService.js';
import { ThisPath } from 'botbuilder-dialogs'; import Fs from 'fs';
const Fs = require('fs'); import { createBrowser } from '../../core.gbapp/services/GBSSR.js';
const Excel = require('exceljs'); import urlJoin from 'url-join';
import { createBrowser } from '../../core.gbapp/services/GBSSR'; import Excel from 'exceljs';
const urlJoin = require('url-join'); import { TwitterApi } from 'twitter-api-v2';
import tesseract from 'node-tesseract-ocr';
const { TwitterApi } = require('twitter-api-v2'); import Path from 'path';
import ComputerVisionClient from '@azure/cognitiveservices-computervision';
import ApiKeyCredentials from '@azure/ms-rest-js';
const Path = require('path'); import alasql from 'alasql';
const ComputerVisionClient = require('@azure/cognitiveservices-computervision').ComputerVisionClient; import PizZip from 'pizzip';
const ApiKeyCredentials = require('@azure/ms-rest-js').ApiKeyCredentials; import Docxtemplater from 'docxtemplater';
const alasql = require('alasql'); import pptxTemplaterModule from 'pptxtemplater';
const PizZip = require("pizzip"); import _ from 'lodash';
const Docxtemplater = require("docxtemplater");
const pptxTemplaterModule = require('pptxtemplater');
const _ = require('lodash');
/** /**
* @fileoverview General Bots server core. * @fileoverview General Bots server core.
@ -114,8 +110,8 @@ export class SystemKeywords {
* *
*/ */
public async seeCaption({url}) { public async seeCaption({url}) {
const computerVisionClient = new ComputerVisionClient( const computerVisionClient = new ComputerVisionClient.ComputerVisionClient(
new ApiKeyCredentials({ inHeader: { 'Ocp-Apim-Subscription-Key': process.env.VISION_KEY } }), new ApiKeyCredentials.ApiKeyCredentials({ inHeader: { 'Ocp-Apim-Subscription-Key': process.env.VISION_KEY } }),
process.env.VISION_ENDPOINT); process.env.VISION_ENDPOINT);
let caption = (await computerVisionClient.describeImage(url)).captions[0]; let caption = (await computerVisionClient.describeImage(url)).captions[0];
@ -127,13 +123,11 @@ export class SystemKeywords {
); );
GBLog.info(`GBVision (caption): '${caption.text}' (Confidence: ${caption.confidence.toFixed(2)})`); GBLog.info(`GBVision (caption): '${caption.text}' (Confidence: ${caption.confidence.toFixed(2)})`);
caption = await this.min.conversationalService.translate( return await this.min.conversationalService.translate(
this.min, this.min,
caption, caption.text,
contentLocale contentLocale
); );
return caption.text;
} }
/** /**
@ -142,8 +136,8 @@ export class SystemKeywords {
* *
*/ */
public async seeText({url}) { public async seeText({url}) {
const computerVisionClient = new ComputerVisionClient( const computerVisionClient = new ComputerVisionClient.ComputerVisionClient(
new ApiKeyCredentials({ inHeader: { 'Ocp-Apim-Subscription-Key': process.env.VISION_KEY } }), new ApiKeyCredentials.ApiKeyCredentials({ inHeader: { 'Ocp-Apim-Subscription-Key': process.env.VISION_KEY } }),
process.env.VISION_ENDPOINT); process.env.VISION_ENDPOINT);
const result = (await computerVisionClient.recognizePrintedText(true, url)); const result = (await computerVisionClient.recognizePrintedText(true, url));
@ -481,7 +475,7 @@ export class SystemKeywords {
GBLog.info(`BASIC: Defining '${address}' in '${file}' to '${value}' (SET). `); GBLog.info(`BASIC: Defining '${address}' in '${file}' to '${value}' (SET). `);
let [baseUrl, client] = await GBDeployer.internalGetDriveClient(this.min); let {baseUrl, client} = await GBDeployer.internalGetDriveClient(this.min);
const botId = this.min.instance.botId; const botId = this.min.instance.botId;
const path = `/${botId}.gbai/${botId}.gbdata`; const path = `/${botId}.gbai/${botId}.gbdata`;
@ -530,7 +524,7 @@ export class SystemKeywords {
public async saveFile({file, data}): Promise<any> { public async saveFile({file, data}): Promise<any> {
GBLog.info(`BASIC: Saving '${file}' (SAVE file).`); GBLog.info(`BASIC: Saving '${file}' (SAVE file).`);
let [baseUrl, client] = await GBDeployer.internalGetDriveClient(this.min); let {baseUrl, client} = await GBDeployer.internalGetDriveClient(this.min);
const botId = this.min.instance.botId; const botId = this.min.instance.botId;
const path = `/${botId}.gbai/${botId}.gbdata`; const path = `/${botId}.gbai/${botId}.gbdata`;
@ -566,7 +560,7 @@ export class SystemKeywords {
const file = args[0]; const file = args[0];
args.shift(); args.shift();
GBLog.info(`BASIC: Saving '${file}' (SAVE). Args: ${args.join(',')}.`); GBLog.info(`BASIC: Saving '${file}' (SAVE). Args: ${args.join(',')}.`);
let [baseUrl, client] = await GBDeployer.internalGetDriveClient(this.min); let {baseUrl, client} = await GBDeployer.internalGetDriveClient(this.min);
const botId = this.min.instance.botId; const botId = this.min.instance.botId;
const path = `/${botId}.gbai/${botId}.gbdata`; const path = `/${botId}.gbai/${botId}.gbdata`;
@ -614,7 +608,7 @@ export class SystemKeywords {
} }
else { else {
GBLog.info(`BASIC: GET '${addressOrHeaders}' in '${file}'.`); GBLog.info(`BASIC: GET '${addressOrHeaders}' in '${file}'.`);
let [baseUrl, client] = await GBDeployer.internalGetDriveClient(this.min); let {baseUrl, client} = await GBDeployer.internalGetDriveClient(this.min);
const botId = this.min.instance.botId; const botId = this.min.instance.botId;
const path = `/${botId}.gbai/${botId}.gbdata`; const path = `/${botId}.gbai/${botId}.gbdata`;
@ -752,11 +746,11 @@ export class SystemKeywords {
header = []; header = [];
rows = []; rows = [];
for (let i = 0; i < worksheet._rows.length; i++) { for (let i = 0; i < worksheet.rowCount; i++) {
const r = worksheet._rows[i]; const r = worksheet.getRow(i+1);
let outRow = []; let outRow = [];
for (let j = 0; j < r._cells.length; j++) { for (let j = 0; j < r.cellCount; j++) {
outRow.push(r._cells[j].text); outRow.push(r.getCell(j+1).text);
} }
if (i == 0) { if (i == 0) {
@ -769,7 +763,7 @@ export class SystemKeywords {
} else { } else {
let [baseUrl, client] = await GBDeployer.internalGetDriveClient(this.min); let {baseUrl, client} = await GBDeployer.internalGetDriveClient(this.min);
let document let document
document = await this.internalGetDocument(client, baseUrl, path, file); document = await this.internalGetDocument(client, baseUrl, path, file);
@ -1065,7 +1059,7 @@ export class SystemKeywords {
*/ */
public async createFolder({name}) { public async createFolder({name}) {
let [baseUrl, client] = await GBDeployer.internalGetDriveClient(this.min); let {baseUrl, client} = await GBDeployer.internalGetDriveClient(this.min);
const botId = this.min.instance.botId; const botId = this.min.instance.botId;
let path = `/${botId}.gbai/${botId}.gbdrive`; let path = `/${botId}.gbai/${botId}.gbdrive`;
@ -1121,7 +1115,7 @@ export class SystemKeywords {
* *
*/ */
public async shareFolder({folder, email, message}) { public async shareFolder({folder, email, message}) {
let [baseUrl, client] = await GBDeployer.internalGetDriveClient(this.min); let {baseUrl, client} = await GBDeployer.internalGetDriveClient(this.min);
const root = urlJoin(`/${this.min.botId}.gbai/${this.min.botId}.gbdrive`, folder); const root = urlJoin(`/${this.min.botId}.gbai/${this.min.botId}.gbdrive`, folder);
const src = await client.api( const src = await client.api(
@ -1153,7 +1147,7 @@ export class SystemKeywords {
*/ */
public async copyFile({src, dest}) { public async copyFile({src, dest}) {
GBLog.info(`BASIC: BEGINING COPY '${src}' to '${dest}'`); GBLog.info(`BASIC: BEGINING COPY '${src}' to '${dest}'`);
let [baseUrl, client] = await GBDeployer.internalGetDriveClient(this.min); let {baseUrl, client} = await GBDeployer.internalGetDriveClient(this.min);
const botId = this.min.instance.botId; const botId = this.min.instance.botId;
// Normalizes all slashes. // Normalizes all slashes.
@ -1173,7 +1167,7 @@ export class SystemKeywords {
let folder; let folder;
if (dest.indexOf('/') !== -1) { if (dest.indexOf('/') !== -1) {
const pathOnly = Path.dirname(dest); const pathOnly = Path.dirname(dest);
folder = await this.createFolder(pathOnly); folder = await this.createFolder({name:pathOnly});
} }
else { else {
folder = await client.api( folder = await client.api(
@ -1222,7 +1216,7 @@ export class SystemKeywords {
*/ */
public async convert({src, dest}) { public async convert({src, dest}) {
GBLog.info(`BASIC: CONVERT '${src}' to '${dest}'`); GBLog.info(`BASIC: CONVERT '${src}' to '${dest}'`);
let [baseUrl, client] = await GBDeployer.internalGetDriveClient(this.min); let {baseUrl, client} = await GBDeployer.internalGetDriveClient(this.min);
const botId = this.min.instance.botId; const botId = this.min.instance.botId;
// Normalizes all slashes. // Normalizes all slashes.
@ -1242,7 +1236,7 @@ export class SystemKeywords {
let folder; let folder;
if (dest.indexOf('/') !== -1) { if (dest.indexOf('/') !== -1) {
const pathOnly = Path.dirname(dest); const pathOnly = Path.dirname(dest);
folder = await this.createFolder(pathOnly); folder = await this.createFolder({name:pathOnly});
} }
else { else {
folder = await client.api( folder = await client.api(
@ -1395,7 +1389,7 @@ export class SystemKeywords {
// Downloads template from .gbdrive. // Downloads template from .gbdrive.
let [baseUrl, client] = await GBDeployer.internalGetDriveClient(this.min); let {baseUrl, client} = await GBDeployer.internalGetDriveClient(this.min);
let template = await this.internalGetDocument(client, baseUrl, path, templateName); let template = await this.internalGetDocument(client, baseUrl, path, templateName);
const url = template['@microsoft.graph.downloadUrl']; const url = template['@microsoft.graph.downloadUrl'];
const localName = Path.join('work', gbaiName, 'cache', ``); const localName = Path.join('work', gbaiName, 'cache', ``);
@ -1425,43 +1419,39 @@ export class SystemKeywords {
public screenCapture() { public screenCapture() {
// scrcpy // scrcpy
const tesseract = require("node-tesseract-ocr") // function captureImage({ x, y, w, h }) {
const robot = require('robotjs') // const pic = robot.screen.capture(x, y, w, h)
const Jimp = require('jimp') // const width = pic.byteWidth / pic.bytesPerPixel // pic.width is sometimes wrong!
// const height = pic.height
function captureImage({ x, y, w, h }) { // const image = new Jimp(width, height)
const pic = robot.screen.capture(x, y, w, h) // let red, green, blue
const width = pic.byteWidth / pic.bytesPerPixel // pic.width is sometimes wrong! // pic.image.forEach((byte, i) => {
const height = pic.height // switch (i % 4) {
const image = new Jimp(width, height) // case 0: return blue = byte
let red, green, blue // case 1: return green = byte
pic.image.forEach((byte, i) => { // case 2: return red = byte
switch (i % 4) { // case 3:
case 0: return blue = byte // image.bitmap.data[i - 3] = red
case 1: return green = byte // image.bitmap.data[i - 2] = green
case 2: return red = byte // image.bitmap.data[i - 1] = blue
case 3: // image.bitmap.data[i] = 255
image.bitmap.data[i - 3] = red // }
image.bitmap.data[i - 2] = green // })
image.bitmap.data[i - 1] = blue // return image
image.bitmap.data[i] = 255 // }
} // let file = 'out.png';
}) // captureImage({ x: 60, y: 263, w: 250, h: 83 }).write(file)
return image
}
let file = 'out.png';
captureImage({ x: 60, y: 263, w: 250, h: 83 }).write(file)
const config = { // const config = {
lang: "eng", // lang: "eng",
oem: 1, // oem: 1,
psm: 3, // psm: 3,
} // }
tesseract.recognize(file, config).then(value => { // tesseract.recognize(file, config).then(value => {
console.log(value); // console.log(value);
}); // });
} }
private numberToLetters(num) { private numberToLetters(num) {
@ -1501,7 +1491,7 @@ export class SystemKeywords {
let results; let results;
let header, rows; let header, rows;
let [baseUrl, client] = await GBDeployer.internalGetDriveClient(this.min); let {baseUrl, client} = await GBDeployer.internalGetDriveClient(this.min);
let document let document
document = await this.internalGetDocument(client, baseUrl, path, file); document = await this.internalGetDocument(client, baseUrl, path, file);

View file

@ -33,18 +33,17 @@
'use strict'; 'use strict';
import { GBLog, GBMinInstance } from 'botlib'; import { GBLog, GBMinInstance } from 'botlib';
import { GBServer } from '../../../src/app'; import { GBServer } from '../../../src/app.js';
import { GBAdminService } from '../../admin.gbapp/services/GBAdminService'; import { GBAdminService } from '../../admin.gbapp/services/GBAdminService.js';
import { createBrowser } from '../../core.gbapp/services/GBSSR'; import { createBrowser } from '../../core.gbapp/services/GBSSR.js';
import { GuaribasUser } from '../../security.gbapp/models'; import { GuaribasUser } from '../../security.gbapp/models/index.js';
import { DialogKeywords } from './DialogKeywords'; import { DialogKeywords } from './DialogKeywords.js';
import * as request from 'request-promise-native'; import * as request from 'request-promise-native';
import { GBDeployer } from '../../core.gbapp/services/GBDeployer'; import { GBDeployer } from '../../core.gbapp/services/GBDeployer.js';
import urlJoin from 'url-join';
const urlJoin = require('url-join'); import Fs from 'fs';
const Path = require('path'); import Path from 'path';
const Fs = require('fs'); import url from 'url';
const url = require('url');
/** /**
* Web Automation services of conversation to be called by BASIC. * Web Automation services of conversation to be called by BASIC.
@ -371,7 +370,7 @@ export class WebAutomationKeywords {
} else { } else {
result = await request.get(options); result = await request.get(options);
} }
let [baseUrl, client] = await GBDeployer.internalGetDriveClient(this.min); let {baseUrl, client} = await GBDeployer.internalGetDriveClient(this.min);
const botId = this.min.instance.botId; const botId = this.min.instance.botId;
// Normalizes all slashes. // Normalizes all slashes.

View file

@ -1,9 +1,10 @@
// Source: https://github.com/uweg/vbscript-to-typescript // Source: https://github.com/uweg/vbscript-to-typescript
"use strict"; "use strict";
exports.__esModule = true;
var fs_1 = require("fs"); import fs_1 from 'fs';
var path = require("path"); import path from 'path';
function convertFile(file) {
export function convertFile(file) {
var extension = path.extname(file); var extension = path.extname(file);
var withoutExtension = file.substr(0, file.length - extension.length); var withoutExtension = file.substr(0, file.length - extension.length);
var targetFile = withoutExtension + ".ts"; var targetFile = withoutExtension + ".ts";
@ -13,12 +14,12 @@ function convertFile(file) {
console.log("Writing to \"" + targetFile + "\"..."); console.log("Writing to \"" + targetFile + "\"...");
fs_1.writeFileSync(targetFile, result); fs_1.writeFileSync(targetFile, result);
} }
exports.convertFile = convertFile;
function convert(input, name) { export function convert(input, name) {
var result = convertImports(input, name); var result = convertImports(input, name);
return result; return result;
} }
exports.convert = convert;
function convertImports(input, name) { function convertImports(input, name) {
var items = []; var items = [];
var result = input.replace(/<!-- #include file="(.*?\/)?(.*?).asp" -->/gi, function (input, group1, group2) { var result = input.replace(/<!-- #include file="(.*?\/)?(.*?).asp" -->/gi, function (input, group1, group2) {
@ -37,7 +38,7 @@ function convertImports(input, name) {
} }
return result; return result;
} }
exports.convertImports = convertImports;
function convertCode(input) { function convertCode(input) {
var result = input.replace(/<%([^=][\s\S]*?)%>/gi, function (input, group1) { var result = input.replace(/<%([^=][\s\S]*?)%>/gi, function (input, group1) {
var code = group1; var code = group1;
@ -53,7 +54,7 @@ function convertCode(input) {
}); });
return result; return result;
} }
exports.convertCode = convertCode;
function convertExpressions(input) { function convertExpressions(input) {
var result = input.replace(/<%=([\s\S]*?)%>/gi, function (input, group1) { var result = input.replace(/<%=([\s\S]*?)%>/gi, function (input, group1) {
var content = convertPRec(group1); var content = convertPRec(group1);
@ -62,7 +63,7 @@ function convertExpressions(input) {
}); });
return result; return result;
} }
exports.convertExpressions = convertExpressions;
function convertStrings(input) { function convertStrings(input) {
var result = input.replace(/%>([\s\S]+?)<%/gi, "\nResponse.Write(`$1`);\n"); var result = input.replace(/%>([\s\S]+?)<%/gi, "\nResponse.Write(`$1`);\n");
// Entire document is a string // Entire document is a string
@ -83,7 +84,7 @@ function convertStrings(input) {
result = result.replace(/^<%/, ""); result = result.replace(/^<%/, "");
return result; return result;
} }
exports.convertStrings = convertStrings;
function convertComments(input) { function convertComments(input) {
var result = ''; var result = '';
var splitted = input.split(/(".*")/gim); var splitted = input.split(/(".*")/gim);
@ -98,7 +99,7 @@ function convertComments(input) {
} }
return result; return result;
} }
exports.convertComments = convertComments;
function convertIfStatements(input) { function convertIfStatements(input) {
var result = input.replace(/if +(.*?) +then/gi, function (input, group1) { var result = input.replace(/if +(.*?) +then/gi, function (input, group1) {
var condition = convertConditions(group1); var condition = convertConditions(group1);
@ -108,25 +109,25 @@ function convertIfStatements(input) {
result = result.replace(/else(?!{)/gi, "\n}\nelse {\n"); result = result.replace(/else(?!{)/gi, "\n}\nelse {\n");
return result; return result;
} }
exports.convertIfStatements = convertIfStatements;
function convertSwitchStatements(input) { function convertSwitchStatements(input) {
var result = input.replace(/select case +(.*)/gi, "\nswitch ($1) {\n"); var result = input.replace(/select case +(.*)/gi, "\nswitch ($1) {\n");
result = result.replace(/end select/gi, "\n}\n"); result = result.replace(/end select/gi, "\n}\n");
return result; return result;
} }
exports.convertSwitchStatements = convertSwitchStatements;
function convertFunctions(input) { function convertFunctions(input) {
var result = input.replace(/function +(.*)\((.*)\)/gi, "\n$1 = ($2) => {\n"); var result = input.replace(/function +(.*)\((.*)\)/gi, "\n$1 = ($2) => {\n");
result = result.replace(/end function/gi, "\n}\n"); result = result.replace(/end function/gi, "\n}\n");
return result; return result;
} }
exports.convertFunctions = convertFunctions;
function convertForStatements(input) { function convertForStatements(input) {
var result = input.replace(/for +(.*to.*)/gi, "\nfor ($1) {\n"); var result = input.replace(/for +(.*to.*)/gi, "\nfor ($1) {\n");
result = result.replace(/^ *next *$/gim, "}\n"); result = result.replace(/^ *next *$/gim, "}\n");
return result; return result;
} }
exports.convertForStatements = convertForStatements;
function convertConditions(input) { function convertConditions(input) {
var result = input.replace(/ +and +/gi, " && "); var result = input.replace(/ +and +/gi, " && ");
result = result.replace(/ +or +/gi, " || "); result = result.replace(/ +or +/gi, " || ");
@ -134,7 +135,7 @@ function convertConditions(input) {
result = result.replace(/ += +/gi, " === "); result = result.replace(/ += +/gi, " === ");
return result; return result;
} }
exports.convertConditions = convertConditions;
function convertLoops(input) { function convertLoops(input) {
var result = input.replace(/do while +(.*)/gi, function (input, group1) { var result = input.replace(/do while +(.*)/gi, function (input, group1) {
var condition = convertConditions(group1); var condition = convertConditions(group1);
@ -144,14 +145,14 @@ function convertLoops(input) {
result = result.replace(/^ *loop *$/gim, "}\n"); result = result.replace(/^ *loop *$/gim, "}\n");
return result; return result;
} }
exports.convertLoops = convertLoops;
function convertPRec(input) { function convertPRec(input) {
var result = input.replace(/(p_rec\("\S+?"\))/gi, "$1.Value"); var result = input.replace(/(p_rec\("\S+?"\))/gi, "$1.Value");
return result; return result;
} }
exports.convertPRec = convertPRec;
function convertPLan(input) { function convertPLan(input) {
var result = input.replace(/(l_\S+?)\(p_lan\)/gi, "$1[p_lan]"); var result = input.replace(/(l_\S+?)\(p_lan\)/gi, "$1[p_lan]");
return result; return result;
} }
exports.convertPLan = convertPLan;

View file

@ -1,13 +1,13 @@
const crypto2 = require('crypto'); import crypto2 from 'crypto';
const { spawn } = require('child_process'); import { spawn } from 'child_process';
const CDP = require('chrome-remote-interface'); import CDP from 'chrome-remote-interface';
const {} = require('child_process'); import {} from 'child_process';
const net = require('net'); import net from 'net';
import { GBLog } from 'botlib'; import { GBLog } from 'botlib';
import { CollectionUtil } from 'pragmatismo-io-framework'; import { CollectionUtil } from 'pragmatismo-io-framework';
import { GBServer } from '../../../../src/app'; import { GBServer } from '../../../../src/app.js';
import { DebuggerService } from '../DebuggerService'; import { DebuggerService } from '../DebuggerService.js';
const finalStream = require('final-stream'); import finalStream from 'final-stream';
const waitUntil = condition => { const waitUntil = condition => {
if (condition()) { if (condition()) {
@ -26,7 +26,7 @@ const waitUntil = condition => {
}); });
}; };
const createVm2Pool = ({ min, max, ...limits }) => { export const createVm2Pool = ({ min, max, ...limits }) => {
limits = Object.assign( limits = Object.assign(
{ {
cpu: 100, cpu: 100,
@ -65,7 +65,7 @@ const createVm2Pool = ({ min, max, ...limits }) => {
childProcess.stdout.on('data', data => { childProcess.stdout.on('data', data => {
childProcess.socket = childProcess.socket || data.toString().trim(); childProcess['socket'] = childProcess['socket'] || data.toString().trim();
}); });
childProcess.stderr.on('data', data => { childProcess.stderr.on('data', data => {
@ -88,7 +88,7 @@ const createVm2Pool = ({ min, max, ...limits }) => {
}); });
let socket = null; let socket = null;
await waitUntil(() => childProcess.socket); await waitUntil(() => childProcess['socket']);
GBServer.globals.debuggers[limits.botId].childProcess = ref; GBServer.globals.debuggers[limits.botId].childProcess = ref;
@ -175,7 +175,7 @@ const createVm2Pool = ({ min, max, ...limits }) => {
await debug(); await debug();
} }
socket = net.createConnection(childProcess.socket); socket = net.createConnection(childProcess['socket']);
socket.write(JSON.stringify({ code, scope }) + '\n'); socket.write(JSON.stringify({ code, scope }) + '\n');
const timer = setTimeout(() => { const timer = setTimeout(() => {
@ -215,4 +215,3 @@ const createVm2Pool = ({ min, max, ...limits }) => {
}; };
}; };
exports.createVm2Pool = createVm2Pool;

View file

@ -1,6 +1,6 @@
const { VMScript, NodeVM } = require('vm2'); import { VMScript, NodeVM } from 'vm2';
const crypto1 = require('crypto'); import crypto1 from 'crypto';
const net1 = require('net'); import net1 from 'net';
const evaluate = async (script, scope) => { const evaluate = async (script, scope) => {
const vm = new NodeVM({ const vm = new NodeVM({

View file

@ -38,7 +38,7 @@
import { GBDialogStep, GBLog, GBMinInstance, IGBCoreService, IGBPackage } from 'botlib'; import { GBDialogStep, GBLog, GBMinInstance, IGBCoreService, IGBPackage } from 'botlib';
import { Sequelize } from 'sequelize-typescript'; import { Sequelize } from 'sequelize-typescript';
import { ConsoleDirectLine } from './services/ConsoleDirectLine'; import { ConsoleDirectLine } from './services/ConsoleDirectLine.js';
/** /**
* Package for console.glib. * Package for console.glib.

View file

@ -1,5 +1,5 @@
const Swagger = require('swagger-client'); import Swagger from 'swagger-client';
const rp = require('request-promise'); import rp from 'request-promise';
import { GBLog, GBService } from 'botlib'; import { GBLog, GBService } from 'botlib';
/** /**

View file

@ -39,10 +39,10 @@
import { BotAdapter } from 'botbuilder'; import { BotAdapter } from 'botbuilder';
import { WaterfallDialog } from 'botbuilder-dialogs'; import { WaterfallDialog } from 'botbuilder-dialogs';
import { GBMinInstance, IGBDialog } from 'botlib'; import { GBMinInstance, IGBDialog } from 'botlib';
import { Messages } from '../strings'; import { Messages } from '../strings.js';
import { SecService } from '../../security.gbapp/services/SecService'; import { SecService } from '../../security.gbapp/services/SecService.js';
import { GBServer } from '../../../src/app'; import { GBServer } from '../../../src/app.js';
import { GBConversationalService } from '../services/GBConversationalService'; import { GBConversationalService } from '../services/GBConversationalService.js';
/** /**
* Dialog for the bot explains about itself. * Dialog for the bot explains about itself.
*/ */

View file

@ -39,10 +39,10 @@
import { BotAdapter } from 'botbuilder'; import { BotAdapter } from 'botbuilder';
import { WaterfallDialog } from 'botbuilder-dialogs'; import { WaterfallDialog } from 'botbuilder-dialogs';
import { GBMinInstance, IGBDialog } from 'botlib'; import { GBMinInstance, IGBDialog } from 'botlib';
import { Messages } from '../strings'; import { Messages } from '../strings.js';
import { SecService } from '../../security.gbapp/services/SecService'; import { SecService } from '../../security.gbapp/services/SecService.js';
import { GBServer } from '../../../src/app'; import { GBServer } from '../../../src/app.js';
import { GBConversationalService } from '../services/GBConversationalService'; import { GBConversationalService } from '../services/GBConversationalService.js';
import { CollectionUtil } from 'pragmatismo-io-framework'; import { CollectionUtil } from 'pragmatismo-io-framework';
/** /**
* Dialog for the bot explains about itself. * Dialog for the bot explains about itself.

View file

@ -39,10 +39,10 @@
import { BotAdapter } from 'botbuilder'; import { BotAdapter } from 'botbuilder';
import { WaterfallDialog } from 'botbuilder-dialogs'; import { WaterfallDialog } from 'botbuilder-dialogs';
import { GBMinInstance, IGBDialog } from 'botlib'; import { GBMinInstance, IGBDialog } from 'botlib';
import { GBServer } from '../../../src/app'; import { GBServer } from '../../../src/app.js';
import { SecService } from '../../security.gbapp/services/SecService'; import { SecService } from '../../security.gbapp/services/SecService.js';
import { GBConversationalService } from '../services/GBConversationalService'; import { GBConversationalService } from '../services/GBConversationalService.js';
import { Messages } from '../strings'; import { Messages } from '../strings.js';
/** /**
* Dialog for the bot explains about itself. * Dialog for the bot explains about itself.
*/ */

View file

@ -39,9 +39,9 @@
import { BotAdapter } from 'botbuilder'; import { BotAdapter } from 'botbuilder';
import { WaterfallDialog } from 'botbuilder-dialogs'; import { WaterfallDialog } from 'botbuilder-dialogs';
import { GBLog, GBMinInstance, IGBDialog } from 'botlib'; import { GBLog, GBMinInstance, IGBDialog } from 'botlib';
import { GBServer } from '../../../src/app'; import { GBServer } from '../../../src/app.js';
import { GBConversationalService } from '../services/GBConversationalService'; import { GBConversationalService } from '../services/GBConversationalService.js';
import { Messages } from '../strings'; import { Messages } from '../strings.js';
/** /**
* Dialog for Welcoming people. * Dialog for Welcoming people.

View file

@ -39,8 +39,8 @@
import { BotAdapter } from 'botbuilder'; import { BotAdapter } from 'botbuilder';
import { WaterfallDialog } from 'botbuilder-dialogs'; import { WaterfallDialog } from 'botbuilder-dialogs';
import { GBMinInstance, IGBDialog } from 'botlib'; import { GBMinInstance, IGBDialog } from 'botlib';
import { GBConversationalService } from '../services/GBConversationalService'; import { GBConversationalService } from '../services/GBConversationalService.js';
import { Messages } from '../strings'; import { Messages } from '../strings.js';
/** /**
* Dialog for the bot explains about itself. * Dialog for the bot explains about itself.
*/ */

View file

@ -38,12 +38,12 @@
import { GBDialogStep, GBLog, GBMinInstance, IGBCoreService, IGBPackage } from 'botlib'; import { GBDialogStep, GBLog, GBMinInstance, IGBCoreService, IGBPackage } from 'botlib';
import { Sequelize } from 'sequelize-typescript'; import { Sequelize } from 'sequelize-typescript';
import { BroadcastDialog } from './dialogs/BroadcastDialog'; import { BroadcastDialog } from './dialogs/BroadcastDialog.js';
import { LanguageDialog } from './dialogs/LanguageDialog'; import { LanguageDialog } from './dialogs/LanguageDialog.js';
import { SwitchBotDialog } from './dialogs/SwitchBot'; import { SwitchBotDialog } from './dialogs/SwitchBot.js';
import { WelcomeDialog } from './dialogs/WelcomeDialog'; import { WelcomeDialog } from './dialogs/WelcomeDialog.js';
import { WhoAmIDialog } from './dialogs/WhoAmIDialog'; import { WhoAmIDialog } from './dialogs/WhoAmIDialog.js';
import { GuaribasChannel, GuaribasException, GuaribasInstance, GuaribasPackage } from './models/GBModel'; import { GuaribasChannel, GuaribasException, GuaribasInstance, GuaribasPackage } from './models/GBModel.js';
/** /**
* Package for core.gbapp. * Package for core.gbapp.

View file

@ -47,4 +47,4 @@ import {
Table, Table,
UpdatedAt UpdatedAt
} from 'sequelize-typescript'; } from 'sequelize-typescript';
import { GuaribasInstance } from './GBModel'; import { GuaribasInstance } from './GBModel.js';

View file

@ -61,215 +61,215 @@ export class GuaribasInstance extends Model<GuaribasInstance>
@PrimaryKey @PrimaryKey
@AutoIncrement @AutoIncrement
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public instanceId: number; declare instanceId: number;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public botEndpoint: string; declare botEndpoint: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public whoAmIVideo: string; declare whoAmIVideo: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public botId: string; declare botId: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public title: string; declare title: string;
@Column({ type: DataType.STRING(16) }) @Column({ type: DataType.STRING(16) })
public activationCode: string; declare activationCode: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public description: string; declare description: string;
@Column({ type: DataType.STRING(16) }) @Column({ type: DataType.STRING(16) })
public state: string; declare state: string;
public version: string; declare version: string;
@Column(DataType.STRING(64)) @Column(DataType.STRING(64))
public botKey: string; declare botKey: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public enabledAdmin: boolean; declare enabledAdmin: boolean;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public engineName: string; declare engineName: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public marketplaceId: string; declare marketplaceId: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public textAnalyticsKey: string; declare textAnalyticsKey: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public textAnalyticsEndpoint: string; declare textAnalyticsEndpoint: string;
@Column({ type: DataType.STRING(64) }) @Column({ type: DataType.STRING(64) })
public translatorKey: string; declare translatorKey: string;
@Column({ type: DataType.STRING(128) }) @Column({ type: DataType.STRING(128) })
public translatorEndpoint: string; declare translatorEndpoint: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public marketplacePassword: string; declare marketplacePassword: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public webchatKey: string; declare webchatKey: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public authenticatorTenant: string; declare authenticatorTenant: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public authenticatorAuthorityHostUrl: string; declare authenticatorAuthorityHostUrl: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public cloudSubscriptionId: string; declare cloudSubscriptionId: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public cloudUsername: string; declare cloudUsername: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public cloudPassword: string; declare cloudPassword: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public cloudLocation: string; declare cloudLocation: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public googleBotKey: string; declare googleBotKey: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public googleChatApiKey: string; declare googleChatApiKey: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public googleChatSubscriptionName: string; declare googleChatSubscriptionName: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public googleClientEmail: string; declare googleClientEmail: string;
@Column({ type: DataType.STRING(4000) }) @Column({ type: DataType.STRING(4000) })
public googlePrivateKey: string; declare googlePrivateKey: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public googleProjectId: string; declare googleProjectId: string;
@Column({ type: DataType.STRING(255) }) @Column({ type: DataType.STRING(255) })
facebookWorkplaceVerifyToken: string; declare facebookWorkplaceVerifyToken: string;
@Column({ type: DataType.STRING(255) }) @Column({ type: DataType.STRING(255) })
facebookWorkplaceAppSecret: string; declare facebookWorkplaceAppSecret: string;
@Column({ type: DataType.STRING(512) }) @Column({ type: DataType.STRING(512) })
facebookWorkplaceAccessToken: string; declare facebookWorkplaceAccessToken: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public whatsappBotKey: string; declare whatsappBotKey: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public whatsappServiceKey: string; declare whatsappServiceKey: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public whatsappServiceNumber: string; declare whatsappServiceNumber: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public whatsappServiceUrl: string; declare whatsappServiceUrl: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public smsKey: string; declare smsKey: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public smsSecret: string; declare smsSecret: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public smsServiceNumber: string; declare smsServiceNumber: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public speechKey: string; declare speechKey: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public speechEndpoint: string; declare speechEndpoint: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public spellcheckerKey: string; declare spellcheckerKey: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public spellcheckerEndpoint: string; declare spellcheckerEndpoint: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public theme: string; declare theme: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public ui: string; declare ui: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public kb: string; declare kb: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public nlpAppId: string; declare nlpAppId: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public nlpKey: string; declare nlpKey: string;
@Column({ type: DataType.STRING(512) }) @Column({ type: DataType.STRING(512) })
public nlpEndpoint: string; declare nlpEndpoint: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public nlpAuthoringKey: string; declare nlpAuthoringKey: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public deploymentPaths: string; declare deploymentPaths: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public searchHost: string; declare searchHost: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public searchKey: string; declare searchKey: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public searchIndex: string; declare searchIndex: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public searchIndexer: string; declare searchIndexer: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public storageUsername: string; declare storageUsername: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public storagePassword: string; declare storagePassword: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public storageName: string; declare storageName: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public storageServer: string; declare storageServer: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public storageDialect: string; declare storageDialect: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public storagePath: string; declare storagePath: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public adminPass: string; declare adminPass: string;
@Column(DataType.FLOAT) @Column(DataType.FLOAT)
public nlpVsSearch: number; // TODO: Remove field. declare nlpVsSearch: number; // TODO: Remove field.
@Column(DataType.FLOAT) @Column(DataType.FLOAT)
public searchScore: number; declare searchScore: number;
@Column(DataType.FLOAT) @Column(DataType.FLOAT)
public nlpScore: number; declare nlpScore: number;
@Column(DataType.DATE) @Column(DataType.DATE)
@CreatedAt @CreatedAt
public createdAt: Date; declare createdAt: Date;
@Column(DataType.DATE) @Column(DataType.DATE)
@UpdatedAt @UpdatedAt
public updatedAt: Date; declare updatedAt: Date;
@Column(DataType.STRING(4000)) @Column(DataType.STRING(4000))
public params: string; declare params: string;
} }
/** /**
@ -280,28 +280,28 @@ export class GuaribasPackage extends Model<GuaribasPackage> {
@PrimaryKey @PrimaryKey
@AutoIncrement @AutoIncrement
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public packageId: number; declare packageId: number;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public packageName: string; declare packageName: string;
@ForeignKey(() => GuaribasInstance) @ForeignKey(() => GuaribasInstance)
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public instanceId: number; declare instanceId: number;
@BelongsTo(() => GuaribasInstance) @BelongsTo(() => GuaribasInstance)
public instance: GuaribasInstance; declare instance: GuaribasInstance;
@Column(DataType.DATE) @Column(DataType.DATE)
@CreatedAt @CreatedAt
public createdAt: Date; declare createdAt: Date;
@Column(DataType.DATE) @Column(DataType.DATE)
@UpdatedAt @UpdatedAt
public updatedAt: Date; declare updatedAt: Date;
@Column({ type: DataType.STRING(512) }) @Column({ type: DataType.STRING(512) })
public custom: string; declare custom: string;
} }
/** /**
@ -312,18 +312,18 @@ export class GuaribasChannel extends Model<GuaribasChannel> {
@PrimaryKey @PrimaryKey
@AutoIncrement @AutoIncrement
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public channelId: number; declare channelId: number;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public title: string; declare title: string;
@Column(DataType.DATE) @Column(DataType.DATE)
@CreatedAt @CreatedAt
public createdAt: Date; declare createdAt: Date;
@Column(DataType.DATE) @Column(DataType.DATE)
@UpdatedAt @UpdatedAt
public updatedAt: Date; declare updatedAt: Date;
} }
/** /**
@ -335,25 +335,25 @@ export class GuaribasException extends Model<GuaribasException> {
@PrimaryKey @PrimaryKey
@AutoIncrement @AutoIncrement
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public exceptionId: number; declare exceptionId: number;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public message: string; declare message: string;
@ForeignKey(() => GuaribasInstance) @ForeignKey(() => GuaribasInstance)
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public instanceId: number; declare instanceId: number;
@BelongsTo(() => GuaribasInstance) @BelongsTo(() => GuaribasInstance)
public instance: GuaribasInstance; declare instance: GuaribasInstance;
@Column(DataType.DATE) @Column(DataType.DATE)
@CreatedAt @CreatedAt
public createdAt: Date; declare createdAt: Date;
@Column(DataType.DATE) @Column(DataType.DATE)
@UpdatedAt @UpdatedAt
public updatedAt: Date; declare updatedAt: Date;
} }
@Table @Table
@ -361,22 +361,22 @@ export class GuaribasException extends Model<GuaribasException> {
export class GuaribasApplications extends Model<GuaribasApplications> { export class GuaribasApplications extends Model<GuaribasApplications> {
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public name: string; declare name: string;
@ForeignKey(() => GuaribasInstance) @ForeignKey(() => GuaribasInstance)
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public instanceId: number; declare instanceId: number;
@BelongsTo(() => GuaribasInstance) @BelongsTo(() => GuaribasInstance)
public instance: GuaribasInstance; declare instance: GuaribasInstance;
@Column(DataType.DATE) @Column(DataType.DATE)
@CreatedAt @CreatedAt
public createdAt: Date; declare createdAt: Date;
@Column(DataType.DATE) @Column(DataType.DATE)
@UpdatedAt @UpdatedAt
public updatedAt: Date; declare updatedAt: Date;
} }
@Table @Table
@ -384,23 +384,23 @@ export class GuaribasApplications extends Model<GuaribasApplications> {
export class GuaribasSchedule extends Model<GuaribasSchedule> { export class GuaribasSchedule extends Model<GuaribasSchedule> {
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public name: string; declare name: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public schedule: string; declare schedule: string;
@ForeignKey(() => GuaribasInstance) @ForeignKey(() => GuaribasInstance)
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public instanceId: number; declare instanceId: number;
@BelongsTo(() => GuaribasInstance) @BelongsTo(() => GuaribasInstance)
public instance: GuaribasInstance; declare instance: GuaribasInstance;
@Column(DataType.DATE) @Column(DataType.DATE)
@CreatedAt @CreatedAt
public createdAt: Date; declare createdAt: Date;
@Column(DataType.DATE) @Column(DataType.DATE)
@UpdatedAt @UpdatedAt
public updatedAt: Date; declare updatedAt: Date;
} }

View file

@ -33,6 +33,7 @@
'use strict'; 'use strict';
import { GBLog } from 'botlib'; import { GBLog } from 'botlib';
import * as en from 'dotenv-extended';
/** /**
* @fileoverview General Bots server core. * @fileoverview General Bots server core.
@ -58,7 +59,7 @@ export class GBConfigService {
public static init(): any { public static init(): any {
try { try {
require('dotenv-extended').load({ en.load({
encoding: 'utf8', encoding: 'utf8',
silent: true, silent: true,
path: '.env', path: '.env',

View file

@ -39,31 +39,30 @@
import { MessageFactory, RecognizerResult, TurnContext } from 'botbuilder'; import { MessageFactory, RecognizerResult, TurnContext } from 'botbuilder';
import { LuisRecognizer } from 'botbuilder-ai'; import { LuisRecognizer } from 'botbuilder-ai';
import { GBDialogStep, GBLog, GBMinInstance, IGBCoreService } from 'botlib'; import { GBDialogStep, GBLog, GBMinInstance, IGBCoreService } from 'botlib';
import { GBServer } from '../../../src/app'; import { GBServer } from '../../../src/app.js';
import { Readable } from 'stream'; import { Readable } from 'stream';
import { GBAdminService } from '../../admin.gbapp/services/GBAdminService'; import { GBAdminService } from '../../admin.gbapp/services/GBAdminService.js';
import { SecService } from '../../security.gbapp/services/SecService'; import { SecService } from '../../security.gbapp/services/SecService.js';
import { AnalyticsService } from '../../analytics.gblib/services/AnalyticsService'; import { AnalyticsService } from '../../analytics.gblib/services/AnalyticsService.js';
import { MicrosoftAppCredentials } from 'botframework-connector'; import { MicrosoftAppCredentials } from 'botframework-connector';
import { GBConfigService } from './GBConfigService'; import { GBConfigService } from './GBConfigService.js';
import { Messages } from '../strings';
import { CollectionUtil, AzureText } from 'pragmatismo-io-framework'; import { CollectionUtil, AzureText } from 'pragmatismo-io-framework';
import { GuaribasUser } from '../../security.gbapp/models'; import { GuaribasUser } from '../../security.gbapp/models/index.js';
import { GBMinService } from './GBMinService'; import { GBMinService } from './GBMinService.js';
const urlJoin = require('url-join'); import urlJoin from 'url-join';
const PasswordGenerator = require('strict-password-generator').default; import Fs from 'fs';
const Nexmo = require('nexmo'); import PasswordGenerator from 'strict-password-generator';
const { join } = require('path'); import Nexmo from 'nexmo';
const shell = require('any-shell-escape'); import { join } from 'path';
const { exec } = require('child_process'); import shell from 'any-shell-escape';
const prism = require('prism-media'); import { exec } from 'child_process';
const request = require('request-promise-native'); import prism from 'prism-media';
const fs = require('fs'); import request from 'request-promise-native';
const SpeechToTextV1 = require('ibm-watson/speech-to-text/v1'); import SpeechToTextV1 from 'ibm-watson/speech-to-text/v1.js';
const TextToSpeechV1 = require('ibm-watson/text-to-speech/v1'); import TextToSpeechV1 from 'ibm-watson/text-to-speech/v1.js';
const { IamAuthenticator } = require('ibm-watson/auth'); import { IamAuthenticator } from 'ibm-watson/auth/index.js';
const marked = require('marked'); import * as marked from 'marked';
const { Translate } = require('@google-cloud/translate').v2; import Translate from '@google-cloud/translate';
/** /**
* Provides basic services for handling messages and dispatching to back-end * Provides basic services for handling messages and dispatching to back-end
@ -309,7 +308,7 @@ export class GBConversationalService {
apiSecret: min.instance.smsSecret apiSecret: min.instance.smsSecret
}); });
// tslint:disable-next-line:no-unsafe-any // tslint:disable-next-line:no-unsafe-any
nexmo.message.sendSms(min.instance.smsServiceNumber, mobile, text, (err, data) => { nexmo.message.sendSms(min.instance.smsServiceNumber, mobile, text,{}, (err, data) => {
const message = data.messages ? data.messages[0] : {}; const message = data.messages ? data.messages[0] : {};
if (err || message['error-text']) { if (err || message['error-text']) {
GBLog.error(`BASIC: error sending SMS to ${mobile}: ${message['error-text']}`); GBLog.error(`BASIC: error sending SMS to ${mobile}: ${message['error-text']}`);
@ -317,7 +316,7 @@ export class GBConversationalService {
} else { } else {
resolve(data); resolve(data);
} }
}); }, );
}); });
} }
} }
@ -350,17 +349,16 @@ export class GBConversationalService {
let res = await textToSpeech.synthesize(params); let res = await textToSpeech.synthesize(params);
const waveFilename = `work/tmp${name}.pcm`; const waveFilename = `work/tmp${name}.pcm`;
let audio = ''; let audio = await textToSpeech.repairWavHeaderStream(res.result as any);
audio = await textToSpeech.repairWavHeaderStream(res.result); Fs.writeFileSync(waveFilename, audio);
fs.writeFileSync(waveFilename, audio);
const oggFilenameOnly = `tmp${name}.ogg`; const oggFilenameOnly = `tmp${name}.ogg`;
const oggFilename = `work/${oggFilenameOnly}`; const oggFilename = `work/${oggFilenameOnly}`;
const output = fs.createWriteStream(oggFilename); const output = Fs.createWriteStream(oggFilename);
const transcoder = new prism.FFmpeg({ const transcoder = new prism.FFmpeg({
args: ['-analyzeduration', '0', '-loglevel', '0', '-f', 'opus', '-ar', '16000', '-ac', '1'] args: ['-analyzeduration', '0', '-loglevel', '0', '-f', 'opus', '-ar', '16000', '-ac', '1']
}); });
fs.createReadStream(waveFilename).pipe(transcoder).pipe(output); Fs.createReadStream(waveFilename).pipe(transcoder).pipe(output);
let url = urlJoin(GBServer.globals.publicAddress, 'audios', oggFilenameOnly); let url = urlJoin(GBServer.globals.publicAddress, 'audios', oggFilenameOnly);
resolve(url); resolve(url);
@ -383,7 +381,7 @@ export class GBConversationalService {
const dest = `work/tmp${name}.wav`; const dest = `work/tmp${name}.wav`;
const src = `work/tmp${name}.ogg`; const src = `work/tmp${name}.ogg`;
fs.writeFileSync(src, oggFile.read()); Fs.writeFileSync(src, oggFile.read());
const makeMp3 = shell([ const makeMp3 = shell([
'node_modules/ffmpeg-static/ffmpeg.exe', 'node_modules/ffmpeg-static/ffmpeg.exe',
@ -406,7 +404,7 @@ export class GBConversationalService {
GBLog.error(error); GBLog.error(error);
return Promise.reject(error); return Promise.reject(error);
} else { } else {
let data = fs.readFileSync(dest); let data = Fs.readFileSync(dest);
const speechToText = new SpeechToTextV1({ const speechToText = new SpeechToTextV1({
authenticator: new IamAuthenticator({ apikey: process.env.WATSON_STT_KEY }), authenticator: new IamAuthenticator({ apikey: process.env.WATSON_STT_KEY }),
@ -461,7 +459,7 @@ export class GBConversationalService {
GBLog.verbose(`Translated text(playMarkdown): ${text}.`); GBLog.verbose(`Translated text(playMarkdown): ${text}.`);
} }
var renderer = new marked.Renderer(); var renderer = new marked.marked.Renderer();
renderer.oldImage = renderer.image; renderer.oldImage = renderer.image;
renderer.image = function (href, title, text) { renderer.image = function (href, title, text) {
var videos = ['webm', 'mp4', 'mov']; var videos = ['webm', 'mp4', 'mov'];
@ -859,7 +857,7 @@ export class GBConversationalService {
if (min.instance.googleProjectId) { if (min.instance.googleProjectId) {
// Instantiates a client // Instantiates a client
const translate = new Translate({ const translate = new Translate.v2.Translate({
projectId: min.instance.googleProjectId, projectId: min.instance.googleProjectId,
credentials: { client_email: min.instance.googleClientEmail, private_key: min.instance.googlePrivateKey.replace(/\\n/gm, '\n') } credentials: { client_email: min.instance.googleClientEmail, private_key: min.instance.googlePrivateKey.replace(/\\n/gm, '\n') }
}); });

View file

@ -37,30 +37,29 @@
'use strict'; 'use strict';
import { GBLog, IGBCoreService, IGBInstallationDeployer, IGBInstance, IGBPackage } from 'botlib'; import { GBLog, IGBCoreService, IGBInstallationDeployer, IGBInstance, IGBPackage } from 'botlib';
import * as fs from 'fs'; import * as Fs from 'fs';
import { Sequelize, SequelizeOptions } from 'sequelize-typescript'; import { Sequelize, SequelizeOptions } from 'sequelize-typescript';
import { Op, Dialect } from 'sequelize'; import { Op, Dialect } from 'sequelize';
import { GBServer } from '../../../src/app'; import { GBServer } from '../../../src/app.js';
import { GBAdminPackage } from '../../admin.gbapp/index'; import { GBAdminPackage } from '../../admin.gbapp/index.js';
import { GBAdminService } from '../../admin.gbapp/services/GBAdminService'; import { GBAdminService } from '../../admin.gbapp/services/GBAdminService.js';
import { GBAnalyticsPackage } from '../../analytics.gblib'; import { GBAnalyticsPackage } from '../../analytics.gblib/index.js';
import { StartDialog } from '../../azuredeployer.gbapp/dialogs/StartDialog'; import { StartDialog } from '../../azuredeployer.gbapp/dialogs/StartDialog.js';
import { GBCorePackage } from '../../core.gbapp'; import { GBCorePackage } from '../../core.gbapp/index.js';
import { GBCustomerSatisfactionPackage } from '../../customer-satisfaction.gbapp'; import { GBCustomerSatisfactionPackage } from '../../customer-satisfaction.gbapp/index.js';
import { GBKBPackage } from '../../kb.gbapp'; import { GBKBPackage } from '../../kb.gbapp/index.js';
import { GBSecurityPackage } from '../../security.gbapp'; import { GBSecurityPackage } from '../../security.gbapp/index.js';
import { GBWhatsappPackage } from '../../whatsapp.gblib/index'; import { GBWhatsappPackage } from '../../whatsapp.gblib/index.js';
import { GuaribasInstance } from '../models/GBModel'; import { GuaribasInstance } from '../models/GBModel.js';
import { GBConfigService } from './GBConfigService'; import { GBConfigService } from './GBConfigService.js';
import { GBAzureDeployerPackage } from '../../azuredeployer.gbapp'; import { GBAzureDeployerPackage } from '../../azuredeployer.gbapp/index.js';
import { GBSharePointPackage } from '../../sharepoint.gblib'; import { GBSharePointPackage } from '../../sharepoint.gblib/index.js';
import { CollectionUtil } from 'pragmatismo-io-framework'; import { CollectionUtil } from 'pragmatismo-io-framework';
import { GBBasicPackage } from '../../basic.gblib'; import { GBBasicPackage } from '../../basic.gblib/index.js';
import { GBGoogleChatPackage } from '../../google-chat.gblib'; import { GBGoogleChatPackage } from '../../google-chat.gblib/index.js';
import { GBHubSpotPackage } from '../../hubspot.gblib'; import { GBHubSpotPackage } from '../../hubspot.gblib/index.js';
import opn from 'opn';
const opn = require('opn'); import ngrok from 'ngrok';
const cron = require('node-cron');
/** /**
* GBCoreService contains main logic for handling storage services related * GBCoreService contains main logic for handling storage services related
@ -288,7 +287,7 @@ STORAGE_SYNC_ALTER=true
ENDPOINT_UPDATE=true ENDPOINT_UPDATE=true
`; `;
fs.writeFileSync('.env', env); Fs.writeFileSync('.env', env);
} }
@ -299,9 +298,9 @@ ENDPOINT_UPDATE=true
*/ */
public async ensureProxy(port): Promise<string> { public async ensureProxy(port): Promise<string> {
try { try {
if (fs.existsSync('node_modules/ngrok/bin/ngrok.exe') || fs.existsSync('node_modules/ngrok/bin/ngrok')) { if (Fs.existsSync('node_modules/ngrok/bin/ngrok.exe') || Fs.existsSync('node_modules/ngrok/bin/ngrok')) {
const ngrok = require('ngrok');
return await ngrok.connect({ port: port }, 10); return await ngrok.connect({ port: port});
} else { } else {
GBLog.warn('ngrok executable not found (only tested on Windows). Check installation or node_modules folder.'); GBLog.warn('ngrok executable not found (only tested on Windows). Check installation or node_modules folder.');

View file

@ -36,27 +36,27 @@
'use strict'; 'use strict';
const Path = require('path'); import Path from 'path';
const urlJoin = require('url-join'); import express from 'express';
const Fs = require('fs'); import child_process from 'child_process';
const express = require('express'); import rimraf from 'rimraf';
const child_process = require('child_process'); import request from 'request-promise-native';
const rimraf = require('rimraf'); import vhost from 'vhost'
const request = require('request-promise-native'); import urlJoin from 'url-join';
const vhost = require('vhost') import Fs from 'fs';
import { GBError, GBLog, GBMinInstance, IGBCoreService, IGBDeployer, IGBInstance, IGBPackage } from 'botlib'; import { GBError, GBLog, GBMinInstance, IGBCoreService, IGBDeployer, IGBInstance, IGBPackage } from 'botlib';
import { AzureSearch } from 'pragmatismo-io-framework'; import { AzureSearch } from 'pragmatismo-io-framework';
import { CollectionUtil } from 'pragmatismo-io-framework'; import { CollectionUtil } from 'pragmatismo-io-framework';
import { GBServer } from '../../../src/app'; import { GBServer } from '../../../src/app.js';
import { GBVMService } from '../../basic.gblib/services/GBVMService'; import { GBVMService } from '../../basic.gblib/services/GBVMService.js';
import { GuaribasPackage } from '../models/GBModel'; import { GuaribasPackage } from '../models/GBModel.js';
import { GBAdminService } from './../../admin.gbapp/services/GBAdminService'; import { GBAdminService } from './../../admin.gbapp/services/GBAdminService.js';
import { AzureDeployerService } from './../../azuredeployer.gbapp/services/AzureDeployerService'; import { AzureDeployerService } from './../../azuredeployer.gbapp/services/AzureDeployerService.js';
import { KBService } from './../../kb.gbapp/services/KBService'; import { KBService } from './../../kb.gbapp/services/KBService.js';
import { GBConfigService } from './GBConfigService'; import { GBConfigService } from './GBConfigService.js';
import { GBImporter } from './GBImporterService'; import { GBImporter } from './GBImporterService.js';
import { TeamsService } from '../../teams.gblib/services/TeamsService'; import { TeamsService } from '../../teams.gblib/services/TeamsService.js';
const MicrosoftGraph = require('@microsoft/microsoft-graph-client'); import MicrosoftGraph from '@microsoft/microsoft-graph-client';
/** /**
@ -114,7 +114,7 @@ export class GBDeployer implements IGBDeployer {
} }
}); });
const baseUrl = `https://graph.microsoft.com/v1.0/sites/${siteId}/lists/${libraryId}`; const baseUrl = `https://graph.microsoft.com/v1.0/sites/${siteId}/lists/${libraryId}`;
return [baseUrl, client]; return {baseUrl, client};
} }
/** /**
@ -452,7 +452,7 @@ export class GBDeployer implements IGBDeployer {
GBLog.info(`downloadFolder: localPath=${localPath}, remotePath=${remotePath}, baseUrl=${baseUrl}`); GBLog.info(`downloadFolder: localPath=${localPath}, remotePath=${remotePath}, baseUrl=${baseUrl}`);
if (!baseUrl) { if (!baseUrl) {
[baseUrl, client] = await GBDeployer.internalGetDriveClient(min); client = await GBDeployer.internalGetDriveClient(min);
remotePath = remotePath.replace(/\\/gi, '/'); remotePath = remotePath.replace(/\\/gi, '/');
const parts = remotePath.split('/'); const parts = remotePath.split('/');
@ -479,7 +479,7 @@ export class GBDeployer implements IGBDeployer {
GBLog.info(`Download URL: ${url}`); GBLog.info(`Download URL: ${url}`);
const res = await client const res = await client.client
.api(url) .api(url)
.get(); .get();
const documents = res.value; const documents = res.value;

View file

@ -38,11 +38,11 @@
import { GBMinInstance, IGBCoreService, IGBInstance } from 'botlib'; import { GBMinInstance, IGBCoreService, IGBInstance } from 'botlib';
import { CreateOptions } from 'sequelize/types'; import { CreateOptions } from 'sequelize/types';
const fs = require('fs'); import Fs from 'fs';
const urlJoin = require('url-join'); import urlJoin from 'url-join';
import { GBServer } from '../../../src/app'; import { GBServer } from '../../../src/app.js';
import { GuaribasInstance } from '../models/GBModel'; import { GuaribasInstance } from '../models/GBModel.js';
import { GBConfigService } from './GBConfigService'; import { GBConfigService } from './GBConfigService.js';
/** /**
* Handles the importing of packages. * Handles the importing of packages.
@ -56,7 +56,7 @@ export class GBImporter {
public async importIfNotExistsBotPackage(botId: string, public async importIfNotExistsBotPackage(botId: string,
packageName: string, localPath: string, additionalInstance: IGBInstance = null) { packageName: string, localPath: string, additionalInstance: IGBInstance = null) {
const settingsJson = JSON.parse(fs.readFileSync(urlJoin(localPath, 'settings.json'), 'utf8')); const settingsJson = JSON.parse(Fs.readFileSync(urlJoin(localPath, 'settings.json'), 'utf8'));
if (botId === undefined) { if (botId === undefined) {
botId = settingsJson.botId; botId = settingsJson.botId;
} }
@ -107,8 +107,8 @@ export class GBImporter {
localPath: string, localPath: string,
settingsJson: any settingsJson: any
) { ) {
const packageJson = JSON.parse(fs.readFileSync(urlJoin(localPath, 'package.json'), 'utf8')); const packageJson = JSON.parse(Fs.readFileSync(urlJoin(localPath, 'package.json'), 'utf8'));
const servicesJson = JSON.parse(fs.readFileSync(urlJoin(localPath, 'services.json'), 'utf8')); const servicesJson = JSON.parse(Fs.readFileSync(urlJoin(localPath, 'services.json'), 'utf8'));
const fullSettingsJson = { ...GBServer.globals.bootInstance, ...packageJson, ...settingsJson, ...servicesJson }; const fullSettingsJson = { ...GBServer.globals.bootInstance, ...packageJson, ...settingsJson, ...servicesJson };

View file

@ -35,19 +35,18 @@
*/ */
'use strict'; 'use strict';
const cliProgress = require('cli-progress'); import cliProgress from 'cli-progress';
const { DialogSet, TextPrompt } = require('botbuilder-dialogs'); import { DialogSet, TextPrompt } from 'botbuilder-dialogs';
const express = require('express'); import express from 'express';
const Swagger = require('swagger-client'); import Swagger from 'swagger-client';
const Fs = require('fs'); import request from 'request-promise-native';
const request = require('request-promise-native'); import removeRoute from 'express-remove-route';
const removeRoute = require('express-remove-route'); import AuthenticationContext from 'adal-node';
const AuthenticationContext = require('adal-node').AuthenticationContext; import wash from 'washyourmouthoutwithsoap';
const wash = require('washyourmouthoutwithsoap'); import { FacebookAdapter } from 'botbuilder-adapter-facebook';
const { FacebookAdapter } = require('botbuilder-adapter-facebook'); import path from 'path';
const path = require('path'); import mkdirp from 'mkdirp';
const { NerManager } = require('node-nlp'); import Fs from 'fs';
const mkdirp = require('mkdirp');
import { import {
AutoSaveStateMiddleware, AutoSaveStateMiddleware,
BotFrameworkAdapter, BotFrameworkAdapter,
@ -69,25 +68,26 @@ import {
} from 'botlib'; } from 'botlib';
import { CollectionUtil } from 'pragmatismo-io-framework'; import { CollectionUtil } from 'pragmatismo-io-framework';
import { MicrosoftAppCredentials } from 'botframework-connector'; import { MicrosoftAppCredentials } from 'botframework-connector';
import { GBServer } from '../../../src/app'; import { GBServer } from '../../../src/app.js';
import { GBAdminService } from '../../admin.gbapp/services/GBAdminService'; import { GBAdminService } from '../../admin.gbapp/services/GBAdminService.js';
import { GuaribasConversationMessage } from '../../analytics.gblib/models'; import { GuaribasConversationMessage } from '../../analytics.gblib/models/index.js';
import { AnalyticsService } from '../../analytics.gblib/services/AnalyticsService'; import { AnalyticsService } from '../../analytics.gblib/services/AnalyticsService.js';
import { GBVMService } from '../../basic.gblib/services/GBVMService'; import { GBVMService } from '../../basic.gblib/services/GBVMService.js';
import { AskDialogArgs } from '../../kb.gbapp/dialogs/AskDialog'; import { AskDialogArgs } from '../../kb.gbapp/dialogs/AskDialog.js';
import { KBService } from '../../kb.gbapp/services/KBService'; import { KBService } from '../../kb.gbapp/services/KBService.js';
import { SecService } from '../../security.gbapp/services/SecService'; import { SecService } from '../../security.gbapp/services/SecService.js';
import { WhatsappDirectLine } from '../../whatsapp.gblib/services/WhatsappDirectLine'; import { WhatsappDirectLine } from '../../whatsapp.gblib/services/WhatsappDirectLine.js';
import { Messages } from '../strings'; import { Messages } from '../strings.js';
import { GBConfigService } from './GBConfigService'; import { GBConfigService } from './GBConfigService.js';
import { GBConversationalService } from './GBConversationalService'; import { GBConversationalService } from './GBConversationalService.js';
import { GBDeployer } from './GBDeployer'; import { GBDeployer } from './GBDeployer.js';
import urlJoin = require('url-join'); import urlJoin from 'url-join';
import fs = require('fs'); import fs from 'fs';
import { GoogleChatDirectLine } from '../../google-chat.gblib/services/GoogleChatDirectLine'; import { GoogleChatDirectLine } from '../../google-chat.gblib/services/GoogleChatDirectLine.js';
import { ScheduleServices } from '../../basic.gblib/services/ScheduleServices'; import { ScheduleServices } from '../../basic.gblib/services/ScheduleServices.js';
import { SystemKeywords } from '../../basic.gblib/services/SystemKeywords'; import { SystemKeywords } from '../../basic.gblib/services/SystemKeywords.js';
import { ssrForBots } from './GBSSR'; import { ssrForBots } from './GBSSR';
import * as nlp from 'node-nlp';
/** /**
* Minimal service layer for a bot and encapsulation of BOT Framework calls. * Minimal service layer for a bot and encapsulation of BOT Framework calls.
@ -268,33 +268,33 @@ export class GBMinService {
// Install per bot deployed packages. // Install per bot deployed packages.
let packagePath = `work/${min.botId}.gbai/${min.botId}.gbdialog`; let packagePath = `work/${min.botId}.gbai/${min.botId}.gbdialog`;
if (fs.existsSync(packagePath)) { if (Fs.existsSync(packagePath)) {
await this.deployer.deployPackage(min, packagePath); await this.deployer.deployPackage(min, packagePath);
} }
packagePath = `work/${min.botId}.gbai/${min.botId}.gbapp`; packagePath = `work/${min.botId}.gbai/${min.botId}.gbapp`;
if (fs.existsSync(packagePath)) { if (Fs.existsSync(packagePath)) {
await this.deployer.deployPackage(min, packagePath); await this.deployer.deployPackage(min, packagePath);
} }
packagePath = `work/${min.botId}.gbai/${min.botId}.gbtheme`; packagePath = `work/${min.botId}.gbai/${min.botId}.gbtheme`;
if (fs.existsSync(packagePath)) { if (Fs.existsSync(packagePath)) {
await this.deployer.deployPackage(min, packagePath); await this.deployer.deployPackage(min, packagePath);
} }
packagePath = `work/${min.botId}.gbai/${min.botId}.gblib`; packagePath = `work/${min.botId}.gbai/${min.botId}.gblib`;
if (fs.existsSync(packagePath)) { if (Fs.existsSync(packagePath)) {
await this.deployer.deployPackage(min, packagePath); await this.deployer.deployPackage(min, packagePath);
} }
let dir = `work/${min.botId}.gbai/cache`; let dir = `work/${min.botId}.gbai/cache`;
if (!fs.existsSync(dir)) { if (!Fs.existsSync(dir)) {
mkdirp.sync(dir); mkdirp.sync(dir);
} }
dir = `work/${min.botId}.gbai/profile`; dir = `work/${min.botId}.gbai/profile`;
if (!fs.existsSync(dir)) { if (!Fs.existsSync(dir)) {
mkdirp.sync(dir); mkdirp.sync(dir);
} }
dir = `work/${min.botId}.gbai/uploads`; dir = `work/${min.botId}.gbai/uploads`;
if (!fs.existsSync(dir)) { if (!Fs.existsSync(dir)) {
mkdirp.sync(dir); mkdirp.sync(dir);
} }
@ -333,7 +333,7 @@ export class GBMinService {
GBLog.info(`Starting auto test with '${process.env.TEST_MESSAGE}'.`); GBLog.info(`Starting auto test with '${process.env.TEST_MESSAGE}'.`);
const client = await new Swagger({ const client = await new Swagger({
spec: JSON.parse(fs.readFileSync('directline-3.0.json', 'utf8')), usePromise: true spec: JSON.parse(Fs.readFileSync('directline-3.0.json', 'utf8')), usePromise: true
}); });
client.clientAuthorizations.add( client.clientAuthorizations.add(
'AuthorizationBotConnector', 'AuthorizationBotConnector',
@ -472,7 +472,7 @@ export class GBMinService {
GBLog.error(msg); GBLog.error(msg);
throw new Error(msg); throw new Error(msg);
} }
const authenticationContext = new AuthenticationContext( const authenticationContext = new AuthenticationContext.AuthenticationContext(
urlJoin(min.instance.authenticatorAuthorityHostUrl, min.instance.authenticatorTenant) urlJoin(min.instance.authenticatorAuthorityHostUrl, min.instance.authenticatorTenant)
); );
const resource = 'https://graph.microsoft.com'; const resource = 'https://graph.microsoft.com';
@ -494,9 +494,9 @@ export class GBMinService {
// Saves token to the database. // Saves token to the database.
await this.adminService.setValue(instance.instanceId, 'accessToken', token.accessToken); await this.adminService.setValue(instance.instanceId, 'accessToken', token['accessToken']);
await this.adminService.setValue(instance.instanceId, 'refreshToken', token.refreshToken); await this.adminService.setValue(instance.instanceId, 'refreshToken', token['refreshToken']);
await this.adminService.setValue(instance.instanceId, 'expiresOn', token.expiresOn.toString()); await this.adminService.setValue(instance.instanceId, 'expiresOn', token['expiresOn'].toString());
await this.adminService.setValue(instance.instanceId, 'AntiCSRFAttackState', undefined); await this.adminService.setValue(instance.instanceId, 'AntiCSRFAttackState', undefined);
// Inform the home for default .gbui after finishing token retrival. // Inform the home for default .gbui after finishing token retrival.
@ -664,7 +664,7 @@ export class GBMinService {
min.sandBoxMap = {}; min.sandBoxMap = {};
min["scheduleMap"] = {}; min["scheduleMap"] = {};
min["conversationWelcomed"] = {}; min["conversationWelcomed"] = {};
min["nerEngine"] = new NerManager();; min["nerEngine"] = new nlp.default.NerManager();
min.packages = sysPackages; min.packages = sysPackages;
min.appPackages = appPackages; min.appPackages = appPackages;

View file

@ -36,15 +36,15 @@
'use strict'; 'use strict';
const puppeteer = require('puppeteer-extra') import puppeteer from 'puppeteer-extra';
const Fs = require('fs'); import Fs from 'fs';
// const StealthPlugin = require('puppeteer-extra-plugin-stealth') // const StealthPlugin from 'puppeteer-extra-plugin-stealth')
// puppeteer.use(StealthPlugin()); // puppeteer.use(StealthPlugin());
import { NextFunction, Request, Response } from "express"; import { NextFunction, Request, Response } from "express";
import urljoin = require("url-join"); import urljoin from "url-join";
const Path = require('path');
// https://hackernoon.com/tips-and-tricks-for-web-scraping-with-puppeteer-ed391a63d952 // https://hackernoon.com/tips-and-tricks-for-web-scraping-with-puppeteer-ed391a63d952
// Dont download all resources, we just need the HTML // Dont download all resources, we just need the HTML
@ -114,7 +114,6 @@ async function createBrowser(profilePath): Promise<any> {
args: args, args: args,
ignoreHTTPSErrors: true, ignoreHTTPSErrors: true,
headless: false, headless: false,
devTools: false,
defaultViewport: null, defaultViewport: null,
ignoreDefaultArgs: ["--enable-automation", "--enable-blink-features=IdleDetection"] ignoreDefaultArgs: ["--enable-automation", "--enable-blink-features=IdleDetection"]
}); });

View file

@ -39,11 +39,11 @@
import { BotAdapter } from 'botbuilder'; import { BotAdapter } from 'botbuilder';
import { WaterfallDialog } from 'botbuilder-dialogs'; import { WaterfallDialog } from 'botbuilder-dialogs';
import { GBMinInstance, IGBDialog } from 'botlib'; import { GBMinInstance, IGBDialog } from 'botlib';
import { GBMinService } from '../../core.gbapp/services/GBMinService'; import { GBMinService } from '../../core.gbapp/services/GBMinService.js';
import { AnalyticsService } from '../../analytics.gblib/services/AnalyticsService'; import { AnalyticsService } from '../../analytics.gblib/services/AnalyticsService.js';
import { SecService } from '../../security.gbapp/services/SecService'; import { SecService } from '../../security.gbapp/services/SecService.js';
import { CSService } from '../services/CSService'; import { CSService } from '../services/CSService.js';
import { Messages } from '../strings'; import { Messages } from '../strings.js';
/** /**
* Dialog for feedback collecting. * Dialog for feedback collecting.

View file

@ -40,10 +40,10 @@ import { GBMinInstance, IGBDialog } from 'botlib';
import { BotAdapter } from 'botbuilder'; import { BotAdapter } from 'botbuilder';
import { WaterfallDialog } from 'botbuilder-dialogs'; import { WaterfallDialog } from 'botbuilder-dialogs';
import { AnalyticsService } from '../../analytics.gblib/services/AnalyticsService'; import { AnalyticsService } from '../../analytics.gblib/services/AnalyticsService.js';
import { GBConversationalService } from '../../core.gbapp/services/GBConversationalService'; import { GBConversationalService } from '../../core.gbapp/services/GBConversationalService.js';
import { CSService } from '../services/CSService'; import { CSService } from '../services/CSService.js';
import { Messages } from '../strings'; import { Messages } from '../strings.js';
/** /**
* Dialog for collecting quality of answer. * Dialog for collecting quality of answer.

View file

@ -37,10 +37,10 @@
'use strict'; 'use strict';
import { GBDialogStep, GBLog, GBMinInstance, IGBCoreService, IGBPackage } from 'botlib'; import { GBDialogStep, GBLog, GBMinInstance, IGBCoreService, IGBPackage } from 'botlib';
const urlJoin = require('url-join'); import urlJoin from 'url-join';
import { FeedbackDialog } from './dialogs/FeedbackDialog'; import { FeedbackDialog } from './dialogs/FeedbackDialog.js';
import { QualityDialog } from './dialogs/QualityDialog'; import { QualityDialog } from './dialogs/QualityDialog.js';
import { GuaribasQuestionAlternate } from './models/index'; import { GuaribasQuestionAlternate } from './models/index.js';
import { Sequelize } from 'sequelize-typescript'; import { Sequelize } from 'sequelize-typescript';

View file

@ -47,7 +47,7 @@ import {
Table Table
} from 'sequelize-typescript'; } from 'sequelize-typescript';
import { GuaribasInstance } from '../../core.gbapp/models/GBModel'; import { GuaribasInstance } from '../../core.gbapp/models/GBModel.js';
/** /**
* List of saved alternate questions. * List of saved alternate questions.
@ -58,18 +58,18 @@ export class GuaribasQuestionAlternate extends Model<GuaribasQuestionAlternate>
@PrimaryKey @PrimaryKey
@AutoIncrement @AutoIncrement
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public quickAnswerId: number; declare quickAnswerId: number;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public questionTyped: string; declare questionTyped: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public questionText: string; declare questionText: string;
@ForeignKey(() => GuaribasInstance) @ForeignKey(() => GuaribasInstance)
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public instanceId: number; declare instanceId: number;
@BelongsTo(() => GuaribasInstance) @BelongsTo(() => GuaribasInstance)
public instance: GuaribasInstance; declare instance: GuaribasInstance;
} }

View file

@ -31,9 +31,9 @@
\*****************************************************************************/ \*****************************************************************************/
import { FindOptions, NonNullFindOptions } from 'sequelize/types'; import { FindOptions, NonNullFindOptions } from 'sequelize/types';
import { GuaribasQuestion } from '../../../packages/kb.gbapp/models'; import { GuaribasQuestion } from '../../../packages/kb.gbapp/models/index.js';
import { GuaribasConversation } from '../../analytics.gblib/models'; import { GuaribasConversation } from '../../analytics.gblib/models/index.js';
import { GuaribasQuestionAlternate } from '../models'; import { GuaribasQuestionAlternate } from '../models/index.js';
/** /**
* Customer Satisfaction Service Layer. * Customer Satisfaction Service Layer.

View file

@ -2229,26 +2229,26 @@
"resolved": "https://registry.npmjs.org/@midudev/react-static-content/-/react-static-content-1.0.4.tgz", "resolved": "https://registry.npmjs.org/@midudev/react-static-content/-/react-static-content-1.0.4.tgz",
"integrity": "sha512-P2+rdqhysYNon5/noOoUiFJghVxbl64qGgxsKwe10mjrkQvgIy4vCcOLN5Nw00er/cBSuWY/hVHkuSeQ6sI5VA==" "integrity": "sha512-P2+rdqhysYNon5/noOoUiFJghVxbl64qGgxsKwe10mjrkQvgIy4vCcOLN5Nw00er/cBSuWY/hVHkuSeQ6sI5VA=="
}, },
"@nodelib/fs.scandir": { "@nodelib/Fs.scandir": {
"version": "2.1.5", "version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "resolved": "https://registry.npmjs.org/@nodelib/Fs.scandir/-/Fs.scandir-2.1.5.tgz",
"integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
"requires": { "requires": {
"@nodelib/fs.stat": "2.0.5", "@nodelib/Fs.stat": "2.0.5",
"run-parallel": "^1.1.9" "run-parallel": "^1.1.9"
} }
}, },
"@nodelib/fs.stat": { "@nodelib/Fs.stat": {
"version": "2.0.5", "version": "2.0.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "resolved": "https://registry.npmjs.org/@nodelib/Fs.stat/-/Fs.stat-2.0.5.tgz",
"integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="
}, },
"@nodelib/fs.walk": { "@nodelib/Fs.walk": {
"version": "1.2.7", "version": "1.2.7",
"resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz", "resolved": "https://registry.npmjs.org/@nodelib/Fs.walk/-/Fs.walk-1.2.7.tgz",
"integrity": "sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==", "integrity": "sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==",
"requires": { "requires": {
"@nodelib/fs.scandir": "2.1.5", "@nodelib/Fs.scandir": "2.1.5",
"fastq": "^1.6.0" "fastq": "^1.6.0"
} }
}, },
@ -8189,8 +8189,8 @@
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz",
"integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==",
"requires": { "requires": {
"@nodelib/fs.stat": "^2.0.2", "@nodelib/Fs.stat": "^2.0.2",
"@nodelib/fs.walk": "^1.2.3", "@nodelib/Fs.walk": "^1.2.3",
"glob-parent": "^5.1.0", "glob-parent": "^5.1.0",
"merge2": "^1.3.0", "merge2": "^1.3.0",
"micromatch": "^4.0.2", "micromatch": "^4.0.2",
@ -8581,9 +8581,9 @@
"readable-stream": "1 || 2" "readable-stream": "1 || 2"
} }
}, },
"fs.realpath": { "Fs.realpath": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "resolved": "https://registry.npmjs.org/Fs.realpath/-/Fs.realpath-1.0.0.tgz",
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
}, },
"fsevents": { "fsevents": {
@ -8662,7 +8662,7 @@
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
"integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
"requires": { "requires": {
"fs.realpath": "^1.0.0", "Fs.realpath": "^1.0.0",
"inflight": "^1.0.4", "inflight": "^1.0.4",
"inherits": "2", "inherits": "2",
"minimatch": "^3.0.4", "minimatch": "^3.0.4",

View file

@ -38,7 +38,7 @@
import { GBDialogStep, GBLog, GBMinInstance, IGBCoreService, IGBPackage } from 'botlib'; import { GBDialogStep, GBLog, GBMinInstance, IGBCoreService, IGBPackage } from 'botlib';
import { Sequelize } from 'sequelize-typescript'; import { Sequelize } from 'sequelize-typescript';
import { GoogleChatDirectLine } from './services/GoogleChatDirectLine'; import { GoogleChatDirectLine } from './services/GoogleChatDirectLine.js';
/** /**
* Package for GoogleChat.gblib * Package for GoogleChat.gblib

View file

@ -30,14 +30,14 @@
| | | |
\*****************************************************************************/ \*****************************************************************************/
const Swagger = require('swagger-client'); import Swagger from 'swagger-client';
const fs = require('fs'); import { google } from 'googleapis';
const { google } = require('googleapis') import { promisify } from 'util';
const { promisify } = require('util'); import { PubSub } from '@google-cloud/pubsub';
const { PubSub } = require('@google-cloud/pubsub'); import Fs from 'fs';
import { GBLog, GBMinInstance, GBService } from 'botlib'; import { GBLog, GBMinInstance, GBService } from 'botlib';
import { GBServer } from '../../../src/app'; import { GBServer } from '../../../src/app.js';
import { SecService } from '../../security.gbapp/services/SecService'; import { SecService } from '../../security.gbapp/services/SecService.js';
/** /**
* Support for Google Chat. * Support for Google Chat.
@ -97,7 +97,7 @@ export class GoogleChatDirectLine extends GBService {
this.directLineClient = this.directLineClient =
new Swagger({ new Swagger({
spec: JSON.parse(fs.readFileSync('directline-3.0.json', 'utf8')), spec: JSON.parse(Fs.readFileSync('directline-3.0.json', 'utf8')),
usePromise: true usePromise: true
}); });
const client = await this.directLineClient; const client = await this.directLineClient;
@ -270,9 +270,9 @@ export class GoogleChatDirectLine extends GBService {
); );
await jwtClient.authorize(); await jwtClient.authorize();
const chat = google.chat({version: 'v1', auth: jwtClient}); const chat = google.chat({version: 'v1', auth: jwtClient});
chat.spaces.messages.createAsync = promisify(chat.spaces.messages.create);
const res = await chat.spaces.messages.createAsync({
const res = await chat.spaces.messages.create({
parent: `spaces/${spaces}`, parent: `spaces/${spaces}`,
threadKey: threadKey, threadKey: threadKey,
requestBody: { requestBody: {

View file

@ -30,13 +30,11 @@
| | | |
\*****************************************************************************/ \*****************************************************************************/
const Swagger = require('swagger-client');
const fs = require('fs');
const { promisify } = require('util');
import { GBLog, GBMinInstance, GBService } from 'botlib'; import { GBLog, GBMinInstance, GBService } from 'botlib';
import { GBServer } from '../../../src/app'; import { promisify } from 'util';
import { SecService } from '../../security.gbapp/services/SecService'; import Swagger from 'swagger-client';
const hubspot = require('@hubspot/api-client'); import * as hubspot from '@hubspot/api-client';
/** /**
@ -44,157 +42,5 @@ const hubspot = require('@hubspot/api-client');
*/ */
export class HubSpotServices extends GBService { export class HubSpotServices extends GBService {
public static conversationIds = {};
public pollInterval = 5000;
public botId: string;
public min: GBMinInstance;
private key: any;
constructor(
min: GBMinInstance,
botId,
key
) {
super();
this.min = min;
this.botId = botId;
this.key = key;
} }
public static async asyncForEach(array, callback) {
for (let index = 0; index < array.length; index++) {
await callback(array[index], index, array);
}
}
public async addDealNote(name, note)
{
}
public async createDeal(dealName, contact, company, amount) {
const dealObj = {
properties: {
dealname: dealName,
dealstage: 'appointmentscheduled',
pipeline: 'default',
amount: amount
},
}
const contactObj = {
properties: {
firstname: contact
},
}
const companyObj = {
properties: {
name: company,
},
}
const hubspotClient = new hubspot.Client({ apiKey: this.key });
const createDealResponse = await hubspotClient.crm.deals.basicApi.create(dealObj);
const createContactResponse = await hubspotClient.crm.contacts.basicApi.create(contactObj);
const createCompanyResponse = await hubspotClient.crm.companies.basicApi.create(companyObj);
await hubspotClient.crm.deals.associationsApi.create(
createDealResponse.body.id,
'contacts',
createContactResponse.body.id,
'deal_to_contact'
)
await hubspotClient.crm.deals.associationsApi.create(
createDealResponse.body.id,
'companies',
createCompanyResponse.body.id,
'deal_to_company'
)
return createDealResponse.body;
}
public async createContact(firstName, lastName, domain, companyName) {
const contactObj = {
properties: {
firstname: firstName,
lastname: lastName,
},
}
const companyObj = {
properties: {
domain: domain,
name: companyName,
},
}
const hubspotClient = new hubspot.Client({ apiKey: this.key })
const createContactResponse = await hubspotClient.crm.contacts.basicApi.create(contactObj)
const createCompanyResponse = await hubspotClient.crm.companies.basicApi.create(companyObj)
return await hubspotClient.crm.companies.associationsApi.create(
createCompanyResponse.body.id,
'contacts',
createContactResponse.body.id,
'company_to_contact'
)
}
public async searchContact(query) {
const client = new hubspot.Client({ apiKey: this.key });
const sort = JSON.stringify({ propertyName: 'createdate', direction: 'DESCENDING' })
const properties = ['createdate', 'firstname', 'lastname', 'phone', 'email']
const limit = 100
const after = 0
const publicObjectSearchRequest = {
sorts: [sort],
query,
properties,
limit,
after,
}
const result = await client.crm.contacts.searchApi.doSearch(publicObjectSearchRequest)
return result.body.results;
}
public async getActiveTasks(): Promise<[]> {
const client = new hubspot.Client({ apiKey: this.key });
let properties = ['hs_task_subject', 'hubspot_owner_id', 'hs_task_status', 'hs_task_priority'];
const pageSize = 100;
let list;
list = [];
let r = await client.crm.objects.basicApi.getPage("TASK", pageSize, 0, properties);
list = list.concat(r.body.results);
while (r.body.results && r.body.results.length === pageSize) {
r = await client.crm.objects.basicApi.getPage("TASK", pageSize, r.body.paging.next.after, properties);
list = list.concat(r.body.results);
}
let final;
final = [];
list.forEach(e => {
if (e.properties.hs_task_status === "NOT_STARTED") {
e['status'] = e.properties.hs_task_status;
e['title'] = e.properties.hs_task_subject;
e['ownerId'] = e.properties.hubspot_owner_id;
e['priority'] = e.properties.hs_task_priority;
final.push(e);
}
});
return final;
}
}

View file

@ -36,19 +36,19 @@
'use strict'; 'use strict';
import { GBServer } from '../../../src/app'; import { GBServer } from '../../../src/app.js';
import { BotAdapter } from 'botbuilder'; import { BotAdapter } from 'botbuilder';
import { WaterfallDialog } from 'botbuilder-dialogs'; import { WaterfallDialog } from 'botbuilder-dialogs';
import { GBLog, GBMinInstance, IGBDialog, IGBPackage } from 'botlib'; import { GBLog, GBMinInstance, IGBDialog, IGBPackage } from 'botlib';
import { Messages } from '../strings'; import { Messages } from '../strings.js';
import { KBService } from './../services/KBService'; import { KBService } from './../services/KBService.js';
import { GuaribasAnswer } from '../models'; import { GuaribasAnswer } from '../models/index.js';
import { SecService } from '../../security.gbapp/services/SecService'; import { SecService } from '../../security.gbapp/services/SecService.js';
import { CollectionUtil, AzureText } from 'pragmatismo-io-framework'; import { CollectionUtil, AzureText } from 'pragmatismo-io-framework';
import { GBVMService } from '../../basic.gblib/services/GBVMService'; import { GBVMService } from '../../basic.gblib/services/GBVMService.js';
import { GBImporter } from '../../core.gbapp/services/GBImporterService'; import { GBImporter } from '../../core.gbapp/services/GBImporterService.js';
import { GBDeployer } from '../../core.gbapp/services/GBDeployer'; import { GBDeployer } from '../../core.gbapp/services/GBDeployer.js';
import { GBConfigService } from '../../core.gbapp/services/GBConfigService'; import { GBConfigService } from '../../core.gbapp/services/GBConfigService.js';
/** /**
* Dialog arguments. * Dialog arguments.

View file

@ -39,9 +39,9 @@
import { BotAdapter } from 'botbuilder'; import { BotAdapter } from 'botbuilder';
import { WaterfallDialog } from 'botbuilder-dialogs'; import { WaterfallDialog } from 'botbuilder-dialogs';
import { GBMinInstance, IGBDialog } from 'botlib'; import { GBMinInstance, IGBDialog } from 'botlib';
import { GBConversationalService } from '../../core.gbapp/services/GBConversationalService'; import { GBConversationalService } from '../../core.gbapp/services/GBConversationalService.js';
import { Messages } from '../strings'; import { Messages } from '../strings.js';
import { KBService } from './../services/KBService'; import { KBService } from './../services/KBService.js';
/** /**
* Handle display of FAQ allowing direct access to KB. * Handle display of FAQ allowing direct access to KB.

View file

@ -36,15 +36,15 @@
'use strict'; 'use strict';
const urlJoin = require('url-join'); import urlJoin from 'url-join';
import { BotAdapter, CardFactory, MessageFactory } from 'botbuilder'; import { BotAdapter, CardFactory, MessageFactory } from 'botbuilder';
import { WaterfallDialog } from 'botbuilder-dialogs'; import { WaterfallDialog } from 'botbuilder-dialogs';
import { GBMinInstance, IGBDialog } from 'botlib'; import { GBMinInstance, IGBDialog } from 'botlib';
import { GBConversationalService } from '../../core.gbapp/services/GBConversationalService'; import { GBConversationalService } from '../../core.gbapp/services/GBConversationalService.js';
import { GuaribasSubject } from '../models'; import { GuaribasSubject } from '../models/index.js';
import { KBService } from '../services/KBService'; import { KBService } from '../services/KBService.js';
import { Messages } from '../strings'; import { Messages } from '../strings.js';
/** /**
* Dialog arguments. * Dialog arguments.

View file

@ -38,10 +38,10 @@
import { GBDialogStep, GBLog, GBMinInstance, IGBCoreService, IGBPackage } from 'botlib'; import { GBDialogStep, GBLog, GBMinInstance, IGBCoreService, IGBPackage } from 'botlib';
import { Sequelize } from 'sequelize-typescript'; import { Sequelize } from 'sequelize-typescript';
import { AskDialog } from './dialogs/AskDialog'; import { AskDialog } from './dialogs/AskDialog.js';
import { FaqDialog } from './dialogs/FaqDialog'; import { FaqDialog } from './dialogs/FaqDialog.js';
import { MenuDialog } from './dialogs/MenuDialog'; import { MenuDialog } from './dialogs/MenuDialog.js';
import { GuaribasAnswer, GuaribasQuestion, GuaribasSubject } from './models/index'; import { GuaribasAnswer, GuaribasQuestion, GuaribasSubject } from './models/index.js';
/** /**
* Package for kb.gbapp. * Package for kb.gbapp.

View file

@ -57,8 +57,8 @@ import {
import { import {
GuaribasInstance, GuaribasInstance,
GuaribasPackage GuaribasPackage
} from '../../core.gbapp/models/GBModel'; } from '../../core.gbapp/models/GBModel.js';
import { GuaribasUser } from '../../security.gbapp/models'; import { GuaribasUser } from '../../security.gbapp/models/index.js';
/** /**
* Subjects to group the pair of questions and answers. * Subjects to group the pair of questions and answers.
@ -68,53 +68,53 @@ export class GuaribasSubject extends Model<GuaribasSubject> {
@PrimaryKey @PrimaryKey
@AutoIncrement @AutoIncrement
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public subjectId: number; declare subjectId: number;
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public internalId: string; declare internalId: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public title: string; declare title: string;
@Column(DataType.STRING(512)) @Column(DataType.STRING(512))
public description: string; declare description: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public from: string; declare from: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public to: string; declare to: string;
@ForeignKey(() => GuaribasSubject) @ForeignKey(() => GuaribasSubject)
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public parentSubjectId: number; declare parentSubjectId: number;
@BelongsTo(() => GuaribasSubject, 'parentSubjectId') @BelongsTo(() => GuaribasSubject, 'parentSubjectId')
public parentSubject: GuaribasSubject; declare parentSubject: GuaribasSubject;
@HasMany(() => GuaribasSubject, { foreignKey: 'parentSubjectId' }) @HasMany(() => GuaribasSubject, { foreignKey: 'parentSubjectId' })
public childrenSubjects: GuaribasSubject[]; declare childrenSubjects: GuaribasSubject[];
@ForeignKey(() => GuaribasInstance) @ForeignKey(() => GuaribasInstance)
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public instanceId: number; declare instanceId: number;
@BelongsTo(() => GuaribasInstance) @BelongsTo(() => GuaribasInstance)
public instance: GuaribasInstance; declare instance: GuaribasInstance;
@ForeignKey(() => GuaribasUser) @ForeignKey(() => GuaribasUser)
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public responsibleUserId: number; declare responsibleUserId: number;
@BelongsTo(() => GuaribasUser) @BelongsTo(() => GuaribasUser)
public responsibleUser: GuaribasUser; declare responsibleUser: GuaribasUser;
@ForeignKey(() => GuaribasPackage) @ForeignKey(() => GuaribasPackage)
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public packageId: number; declare packageId: number;
@BelongsTo(() => GuaribasPackage) @BelongsTo(() => GuaribasPackage)
public package: GuaribasPackage; declare package: GuaribasPackage;
} }
/** /**
@ -125,62 +125,62 @@ export class GuaribasQuestion extends Model<GuaribasQuestion> {
@PrimaryKey @PrimaryKey
@AutoIncrement @AutoIncrement
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public questionId: number; declare questionId: number;
@Column(DataType.STRING(64)) @Column(DataType.STRING(64))
public subject1: string; declare subject1: string;
@Column(DataType.STRING(64)) @Column(DataType.STRING(64))
public subject2: string; declare subject2: string;
@Column(DataType.STRING(64)) @Column(DataType.STRING(64))
public subject3: string; declare subject3: string;
@Column(DataType.STRING(64)) @Column(DataType.STRING(64))
public subject4: string; declare subject4: string;
@Column(DataType.STRING(1024)) @Column(DataType.STRING(1024))
public keywords: string; declare keywords: string;
@Column(DataType.BOOLEAN) @Column(DataType.BOOLEAN)
public skipIndex: boolean; declare skipIndex: boolean;
@Column(DataType.STRING(512)) @Column(DataType.STRING(512))
public from: string; declare from: string;
@Column(DataType.STRING(512)) @Column(DataType.STRING(512))
public to: string; declare to: string;
@Column(DataType.TEXT) @Column(DataType.TEXT)
public content: string; declare content: string;
@Column(DataType.DATE) @Column(DataType.DATE)
@CreatedAt @CreatedAt
public createdAt: Date; declare createdAt: Date;
@Column(DataType.DATE) @Column(DataType.DATE)
@UpdatedAt @UpdatedAt
public updatedAt: Date; declare updatedAt: Date;
//tslint:disable-next-line:no-use-before-declare //tslint:disable-next-line:no-use-before-declare
@ForeignKey(() => GuaribasAnswer) @ForeignKey(() => GuaribasAnswer)
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public answerId: number; declare answerId: number;
@BelongsTo(() => GuaribasInstance) @BelongsTo(() => GuaribasInstance)
public instance: GuaribasInstance; declare instance: GuaribasInstance;
@ForeignKey(() => GuaribasInstance) @ForeignKey(() => GuaribasInstance)
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public instanceId: number; declare instanceId: number;
@ForeignKey(() => GuaribasPackage) @ForeignKey(() => GuaribasPackage)
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public packageId: number; declare packageId: number;
@BelongsTo(() => GuaribasPackage) @BelongsTo(() => GuaribasPackage)
public package: GuaribasPackage; declare package: GuaribasPackage;
} }
/** /**
@ -191,53 +191,53 @@ export class GuaribasAnswer extends Model<GuaribasAnswer> {
@PrimaryKey @PrimaryKey
@AutoIncrement @AutoIncrement
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public answerId: number; declare answerId: number;
@Length({ min: 0, max: 512 }) @Length({ min: 0, max: 512 })
@Column(DataType.STRING(512)) @Column(DataType.STRING(512))
public media: string; declare media: string;
@Length({ min: 0, max: 12 }) @Length({ min: 0, max: 12 })
@Column(DataType.STRING(12)) @Column(DataType.STRING(12))
public format: string; declare format: string;
@Column(DataType.TEXT) @Column(DataType.TEXT)
public content: string; declare content: string;
@Column(DataType.DATE) @Column(DataType.DATE)
@CreatedAt @CreatedAt
public createdAt: Date; declare createdAt: Date;
@Column(DataType.DATE) @Column(DataType.DATE)
@UpdatedAt @UpdatedAt
public updatedAt: Date; declare updatedAt: Date;
@HasMany(() => GuaribasQuestion) @HasMany(() => GuaribasQuestion)
public questions: GuaribasQuestion[]; declare questions: GuaribasQuestion[];
@HasOne(() => GuaribasQuestion) @HasOne(() => GuaribasQuestion)
public prev: GuaribasQuestion; declare prev: GuaribasQuestion;
@HasOne(() => GuaribasQuestion) @HasOne(() => GuaribasQuestion)
public next: GuaribasQuestion; declare next: GuaribasQuestion;
@ForeignKey(() => GuaribasQuestion) @ForeignKey(() => GuaribasQuestion)
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public nextId: number; declare nextId: number;
@ForeignKey(() => GuaribasQuestion) @ForeignKey(() => GuaribasQuestion)
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public prevId: number; declare prevId: number;
@ForeignKey(() => GuaribasInstance) @ForeignKey(() => GuaribasInstance)
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public instanceId: number; declare instanceId: number;
@ForeignKey(() => GuaribasPackage) @ForeignKey(() => GuaribasPackage)
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public packageId: number; declare packageId: number;
@BelongsTo(() => GuaribasPackage) @BelongsTo(() => GuaribasPackage)
public package: GuaribasPackage; declare package: GuaribasPackage;
} }

View file

@ -34,17 +34,16 @@
* @fileoverview Knowledge base services and logic. * @fileoverview Knowledge base services and logic.
*/ */
const Path = require('path'); import Path from 'path';
const Fs = require('fs'); import Fs from 'fs';
const urlJoin = require('url-join'); import urlJoin from 'url-join';
const path = require('path'); import path from 'path';
const asyncPromise = require('async-promises'); import asyncPromise from 'async-promises';
const walkPromise = require('walk-promise'); import walkPromise from 'walk-promise';
// tslint:disable-next-line:newline-per-chained-call import { SearchService } from 'azure-search-client';
const { SearchService } = require('azure-search-client'); import Excel from 'exceljs';
const Excel = require('exceljs'); import getSlug from 'speakingurl';
const getSlug = require('speakingurl'); import { GBServer } from '../../../src/app.js';
import { GBServer } from '../../../src/app';
import { import {
GBDialogStep, GBDialogStep,
GBLog, GBLog,
@ -57,15 +56,15 @@ import {
import { CollectionUtil } from 'pragmatismo-io-framework'; import { CollectionUtil } from 'pragmatismo-io-framework';
import { Op } from 'sequelize'; import { Op } from 'sequelize';
import { Sequelize } from 'sequelize-typescript'; import { Sequelize } from 'sequelize-typescript';
import { AzureDeployerService } from '../../azuredeployer.gbapp/services/AzureDeployerService'; import { AzureDeployerService } from '../../azuredeployer.gbapp/services/AzureDeployerService.js';
import { GuaribasPackage } from '../../core.gbapp/models/GBModel'; import { GuaribasPackage } from '../../core.gbapp/models/GBModel.js';
import { GBDeployer } from '../../core.gbapp/services/GBDeployer'; import { GBDeployer } from '../../core.gbapp/services/GBDeployer.js';
import { CSService } from '../../customer-satisfaction.gbapp/services/CSService'; import { CSService } from '../../customer-satisfaction.gbapp/services/CSService.js';
import { GuaribasAnswer, GuaribasQuestion, GuaribasSubject } from '../models'; import { GuaribasAnswer, GuaribasQuestion, GuaribasSubject } from '../models/index.js';
import { GBConfigService } from './../../core.gbapp/services/GBConfigService'; import { GBConfigService } from './../../core.gbapp/services/GBConfigService.js';
const request = require('request-promise-native'); import request from 'request-promise-native';
const textract = require('textract'); import textract from 'textract';
const pdf = require("pdf-extraction"); import pdf from "pdf-extraction";
/** /**
* Result for quey on KB data. * Result for quey on KB data.
@ -425,8 +424,8 @@ export class KBService implements IGBKBService {
// when loading worksheets collection. // when loading worksheets collection.
let worksheet: any; let worksheet: any;
for (let t = 0; t < data._worksheets.length; t++) { for (let t = 0; t < data.worksheets.length; t++) {
worksheet = data._worksheets[t]; worksheet = data.worksheets[t];
if (worksheet) { if (worksheet) {
break; break;
} }

View file

@ -38,7 +38,7 @@
import { TokenResponse } from 'botbuilder'; import { TokenResponse } from 'botbuilder';
import { GBLog, GBMinInstance, IGBDialog } from 'botlib'; import { GBLog, GBMinInstance, IGBDialog } from 'botlib';
import { Messages } from '../strings'; import { Messages } from '../strings.js';
/** /**
* Dialogs for handling Menu control. * Dialogs for handling Menu control.

View file

@ -36,16 +36,11 @@
'use strict'; 'use strict';
const urlJoin = require('url-join');
import { BotAdapter, CardFactory, MessageFactory } from 'botbuilder';
import { WaterfallDialog } from 'botbuilder-dialogs';
import { GBLog, GBMinInstance, IGBDialog } from 'botlib'; import { GBLog, GBMinInstance, IGBDialog } from 'botlib';
import { GBAdminService } from '../../admin.gbapp/services/GBAdminService'; import { GBAdminService } from '../../admin.gbapp/services/GBAdminService.js';
import { GBConversationalService } from '../../core.gbapp/services/GBConversationalService'; import { Messages } from '../strings.js';
import { Messages } from '../strings'; import * as phone from 'google-libphonenumber';
const phoneUtil = require('google-libphonenumber').PhoneNumberUtil.getInstance();
const phone = require('phone');
/** /**
* Dialogs for handling Menu control. * Dialogs for handling Menu control.
@ -112,14 +107,15 @@ export class ProfileDialog extends IGBDialog {
const locale = step.context.activity.locale; const locale = step.context.activity.locale;
let phoneNumber; let phoneNumber;
try { try {
phoneNumber = phone(step.result, 'BRA')[0]; // TODO: Use accordingly to the person. let p = phone.PhoneNumberUtil.getInstance();
phoneNumber = phoneUtil.parse(phoneNumber); phoneNumber = p(step.result, 'BRA')[0]; // TODO: Use accordingly to the person.
phoneNumber = phone.phoneUtil.parse(phoneNumber);
} catch (error) { } catch (error) {
await step.context.sendActivity(Messages[locale].validation_enter_valid_mobile); await step.context.sendActivity(Messages[locale].validation_enter_valid_mobile);
return await step.replaceDialog('/profile_mobile', step.activeDialog.state.options); return await step.replaceDialog('/profile_mobile', step.activeDialog.state.options);
} }
if (!phoneUtil.isPossibleNumber(phoneNumber)) { if (!phone.phoneUtil.isPossibleNumber(phoneNumber)) {
await step.context.sendActivity(Messages[locale].validation_enter_valid_mobile); await step.context.sendActivity(Messages[locale].validation_enter_valid_mobile);
return await step.replaceDialog('/profile_mobile', step.activeDialog.state.options); return await step.replaceDialog('/profile_mobile', step.activeDialog.state.options);

View file

@ -36,13 +36,11 @@
'use strict'; 'use strict';
const urlJoin = require('url-join');
import { GBDialogStep, GBLog, GBMinInstance, IGBCoreService, IGBPackage } from 'botlib'; import { GBDialogStep, GBLog, GBMinInstance, IGBCoreService, IGBPackage } from 'botlib';
import { Sequelize } from 'sequelize-typescript'; import { Sequelize } from 'sequelize-typescript';
import { OAuthDialog } from './dialogs/OAuthDialog'; import { OAuthDialog } from './dialogs/OAuthDialog.js';
import { ProfileDialog } from './dialogs/ProfileDialog'; import { ProfileDialog } from './dialogs/ProfileDialog.js';
import { GuaribasGroup, GuaribasUser, GuaribasUserGroup } from './models'; import { GuaribasGroup, GuaribasUser, GuaribasUserGroup } from './models/index.js';
/** /**
* Package for the security module. * Package for the security module.

View file

@ -48,7 +48,7 @@ import {
Table Table
} from 'sequelize-typescript'; } from 'sequelize-typescript';
import { GuaribasInstance } from '../../core.gbapp/models/GBModel'; import { GuaribasInstance } from '../../core.gbapp/models/GBModel.js';
/** /**
* A user and its metadata. * A user and its metadata.
@ -58,46 +58,46 @@ export class GuaribasUser extends Model<GuaribasUser> {
@PrimaryKey @PrimaryKey
@AutoIncrement @AutoIncrement
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public userId: number; declare userId: number;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public displayName: string; declare displayName: string;
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public userSystemId: string; declare userSystemId: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public userName: string; declare userName: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public defaultChannel: string; declare defaultChannel: string;
@Column(DataType.STRING(255)) @Column(DataType.STRING(255))
public email: string; declare email: string;
@Column(DataType.STRING(5)) @Column(DataType.STRING(5))
public locale: string; declare locale: string;
@ForeignKey(() => GuaribasInstance) @ForeignKey(() => GuaribasInstance)
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public instanceId: number; declare instanceId: number;
@BelongsTo(() => GuaribasInstance) @BelongsTo(() => GuaribasInstance)
public instance: GuaribasInstance; declare instance: GuaribasInstance;
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public agentSystemId: string; declare agentSystemId: string;
@Column(DataType.DATE) @Column(DataType.DATE)
public agentContacted: Date; declare agentContacted: Date;
@Column(DataType.STRING(16)) @Column(DataType.STRING(16))
public agentMode: string; declare agentMode: string;
@Column(DataType.TEXT) @Column(DataType.TEXT)
public conversationReference: string; declare conversationReference: string;
@Column(DataType.STRING(64)) @Column(DataType.STRING(64))
public hearOnDialog: string; declare hearOnDialog: string;
} }
/** /**
@ -108,18 +108,18 @@ export class GuaribasGroup extends Model<GuaribasGroup> {
@PrimaryKey @PrimaryKey
@AutoIncrement @AutoIncrement
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public groupId: number; declare groupId: number;
@Length({ min: 0, max: 512 }) @Length({ min: 0, max: 512 })
@Column(DataType.STRING(512)) @Column(DataType.STRING(512))
public displayName: string; declare displayName: string;
@ForeignKey(() => GuaribasInstance) @ForeignKey(() => GuaribasInstance)
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public instanceId: number; declare instanceId: number;
@BelongsTo(() => GuaribasInstance) @BelongsTo(() => GuaribasInstance)
public instance: GuaribasInstance; declare instance: GuaribasInstance;
} }
/** /**
@ -129,22 +129,22 @@ export class GuaribasGroup extends Model<GuaribasGroup> {
export class GuaribasUserGroup extends Model<GuaribasUserGroup> { export class GuaribasUserGroup extends Model<GuaribasUserGroup> {
@ForeignKey(() => GuaribasUser) @ForeignKey(() => GuaribasUser)
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public userId: number; declare userId: number;
@ForeignKey(() => GuaribasGroup) @ForeignKey(() => GuaribasGroup)
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public groupId: number; declare groupId: number;
@ForeignKey(() => GuaribasInstance) @ForeignKey(() => GuaribasInstance)
@Column(DataType.INTEGER) @Column(DataType.INTEGER)
public instanceId: number; declare instanceId: number;
@BelongsTo(() => GuaribasInstance) @BelongsTo(() => GuaribasInstance)
public instance: GuaribasInstance; declare instance: GuaribasInstance;
@BelongsTo(() => GuaribasGroup) @BelongsTo(() => GuaribasGroup)
public group: GuaribasGroup; declare group: GuaribasGroup;
@BelongsTo(() => GuaribasUser) @BelongsTo(() => GuaribasUser)
public user: GuaribasUser; declare user: GuaribasUser;
} }

View file

@ -1,10 +1,10 @@
const Fs = require('fs'); import Fs from 'fs';
const urlJoin = require('url-join'); import urlJoin from 'url-join';
import { ConversationReference } from 'botbuilder'; import { ConversationReference } from 'botbuilder';
import { GBLog, GBMinInstance, GBService, IGBInstance } from 'botlib'; import { GBLog, GBMinInstance, GBService, IGBInstance } from 'botlib';
import { CollectionUtil } from 'pragmatismo-io-framework'; import { CollectionUtil } from 'pragmatismo-io-framework';
import { GuaribasGroup, GuaribasUser, GuaribasUserGroup } from '../models'; import { GuaribasGroup, GuaribasUser, GuaribasUserGroup } from '../models/index.js';
import { FindOptions } from 'sequelize'; import { FindOptions } from 'sequelize';
/** /**

View file

@ -36,29 +36,12 @@
'use strict'; 'use strict';
const { sppull } = require('sppull');
/** /**
* Service facade for SharePoint Online. * Service facade for SharePoint Online.
*/ */
export class GBSharePointService { export class GBSharePointService {
public async downloadFolder(localPath: string, siteUrl: string, folderUrl: string, username: string, password: string) {
const context = {
siteUrl: siteUrl,
creds: {
username: username,
password: password
}
};
const options = {
spRootFolder: folderUrl,
dlRootFolder: localPath
};
return await sppull(context, options);
}
} }

View file

@ -30,11 +30,9 @@
| | | |
\*****************************************************************************/ \*****************************************************************************/
const urlJoin = require('url-join');
import { GBService } from 'botlib'; import { GBService } from 'botlib';
const fs = require('fs'); import Fs from 'fs';
var AdmZip = require("adm-zip"); import AdmZip from 'adm-zip';
/** /**
* Support for Whatsapp. * Support for Whatsapp.
@ -51,7 +49,7 @@ export class TeamsService extends GBService {
} }
public async getManifest(marketplaceId, botName, botDescription, id, packageName, yourName) { public async getManifest(marketplaceId, botName, botDescription, id, packageName, yourName) {
let content = fs.readFileSync('teams-manifest.json', 'utf8'); let content = Fs.readFileSync('teams-manifest.json', 'utf8');
content = content.replace(/\@\@marketplaceId/gi, marketplaceId); content = content.replace(/\@\@marketplaceId/gi, marketplaceId);
content = content.replace(/\@\@botName/gi, botName); content = content.replace(/\@\@botName/gi, botName);

View file

@ -38,7 +38,7 @@
import { GBDialogStep, GBLog, GBMinInstance, IGBCoreService, IGBPackage } from 'botlib'; import { GBDialogStep, GBLog, GBMinInstance, IGBCoreService, IGBPackage } from 'botlib';
import { Sequelize } from 'sequelize-typescript'; import { Sequelize } from 'sequelize-typescript';
import { WhatsappDirectLine } from './services/WhatsappDirectLine'; import { WhatsappDirectLine } from './services/WhatsappDirectLine.js';
/** /**
* Package for whatsapp.gblib * Package for whatsapp.gblib

View file

@ -30,29 +30,23 @@
| | | |
\*****************************************************************************/ \*****************************************************************************/
const urlJoin = require('url-join'); import urlJoin from 'url-join';
import Swagger from 'swagger-client';
const Swagger = require('swagger-client'); import Path from 'path';
const fs = require('fs'); import Fs from 'fs';
const Path = require('path');
import { GBLog, GBMinInstance, GBService, IGBPackage } from 'botlib'; import { GBLog, GBMinInstance, GBService, IGBPackage } from 'botlib';
import { CollectionUtil } from 'pragmatismo-io-framework'; import { CollectionUtil } from 'pragmatismo-io-framework';
import * as request from 'request-promise-native'; import * as request from 'request-promise-native';
import { GBServer } from '../../../src/app'; import { GBServer } from '../../../src/app.js';
import { GBConversationalService } from '../../core.gbapp/services/GBConversationalService'; import { GBConversationalService } from '../../core.gbapp/services/GBConversationalService.js';
import { SecService } from '../../security.gbapp/services/SecService'; import { SecService } from '../../security.gbapp/services/SecService.js';
import { Messages } from '../strings'; import { Messages } from '../strings.js';
import { GuaribasUser } from '../../security.gbapp/models'; import { GuaribasUser } from '../../security.gbapp/models/index.js';
import { DialogKeywords } from '../../basic.gblib/services/DialogKeywords'; import { GBMinService } from '../../core.gbapp/services/GBMinService.js';
import { GBAdminService } from '../../admin.gbapp/services/GBAdminService'; import { GBConfigService } from '../../core.gbapp/services/GBConfigService.js';
import { GBMinService } from '../../core.gbapp/services/GBMinService'; import * as wpp from 'whatsapp-web.js';
import { GBConfigService } from '../../core.gbapp/services/GBConfigService'; import qrcode from 'qrcode-terminal';
import express from 'express';
const puppeteer = require('puppeteer');
const { MessageMedia, Client, LocalAuth } = require('whatsapp-web.js');
const qrcode = require('qrcode-terminal');
/** /**
* Support for Whatsapp. * Support for Whatsapp.
@ -117,7 +111,7 @@ export class WhatsappDirectLine extends GBService {
this.directLineClient = this.directLineClient =
new Swagger({ new Swagger({
spec: JSON.parse(fs.readFileSync('directline-3.0.json', 'utf8')), usePromise: true spec: JSON.parse(Fs.readFileSync('directline-3.0.json', 'utf8')), usePromise: true
}); });
const client = await this.directLineClient; const client = await this.directLineClient;
@ -164,8 +158,8 @@ export class WhatsappDirectLine extends GBService {
puppeteer = { browserWSEndpoint: browserWSEndpoint }; puppeteer = { browserWSEndpoint: browserWSEndpoint };
} }
const client = this.customClient = new Client({ const client = this.customClient = new wpp.Client({
authStrategy: new LocalAuth({ authStrategy: new wpp.LocalAuth({
clientId: this.min.botId, clientId: this.min.botId,
dataPath: localName dataPath: localName
}), }),
@ -194,7 +188,7 @@ export class WhatsappDirectLine extends GBService {
// const qrBuf = await s.getQRCode(qr); // const qrBuf = await s.getQRCode(qr);
// const gbaiName = `${this.min.botId}.gbai`; // const gbaiName = `${this.min.botId}.gbai`;
// const localName = Path.join('work', gbaiName, 'cache', `qr${GBAdminService.getRndReadableIdentifier()}.png`); // const localName = Path.join('work', gbaiName, 'cache', `qr${GBAdminService.getRndReadableIdentifier()}.png`);
// fs.writeFileSync(localName, qrBuf); // Fs.writeFileSync(localName, qrBuf);
// const url = urlJoin( // const url = urlJoin(
// GBServer.globals.publicAddress, // GBServer.globals.publicAddress,
// this.min.botId, // this.min.botId,
@ -291,7 +285,7 @@ export class WhatsappDirectLine extends GBService {
} }
if (setUrl && options&& this.whatsappServiceUrl) { if (setUrl && options&& this.whatsappServiceUrl) {
const express = require('express');
GBServer.globals.server.use(`/audios`, express.static('work')); GBServer.globals.server.use(`/audios`, express.static('work'));
if (options) { if (options) {
@ -729,7 +723,7 @@ export class WhatsappDirectLine extends GBService {
let options; let options;
switch (this.provider) { switch (this.provider) {
case 'GeneralBots': case 'GeneralBots':
const attachment = await MessageMedia.fromUrl(url); const attachment = await wpp.MessageMedia.fromUrl(url);
if (to.indexOf('@') == -1) { if (to.indexOf('@') == -1) {
if (to.length == 18) { if (to.length == 18) {
to = to + '@g.us'; to = to + '@g.us';
@ -806,7 +800,7 @@ export class WhatsappDirectLine extends GBService {
switch (this.provider) { switch (this.provider) {
case 'GeneralBots': case 'GeneralBots':
const attachment = MessageMedia.fromUrl(url); const attachment = wpp.MessageMedia.fromUrl(url);
await this.customClient.sendMessage(to, attachment); await this.customClient.sendMessage(to, attachment);
break; break;

View file

@ -36,24 +36,24 @@
'use strict'; 'use strict';
const express = require('express'); import express from 'express';
const bodyParser = require('body-parser'); import bodyParser from 'body-parser';
const https = require('https'); import https from 'https';
const mkdirp = require('mkdirp'); import mkdirp from 'mkdirp';
const Path = require('path'); import Path from 'path';
import * as Fs from 'fs';
import * as fs from 'fs';
import { GBLog, GBMinInstance, IGBCoreService, IGBInstance, IGBPackage } from 'botlib'; import { GBLog, GBMinInstance, IGBCoreService, IGBInstance, IGBPackage } from 'botlib';
import { GBAdminService } from '../packages/admin.gbapp/services/GBAdminService'; import { GBAdminService } from '../packages/admin.gbapp/services/GBAdminService.js';
import { AzureDeployerService } from '../packages/azuredeployer.gbapp/services/AzureDeployerService'; import { AzureDeployerService } from '../packages/azuredeployer.gbapp/services/AzureDeployerService.js';
import { GBConfigService } from '../packages/core.gbapp/services/GBConfigService'; import { GBConfigService } from '../packages/core.gbapp/services/GBConfigService.js';
import { GBConversationalService } from '../packages/core.gbapp/services/GBConversationalService'; import { GBConversationalService } from '../packages/core.gbapp/services/GBConversationalService.js';
import { GBCoreService } from '../packages/core.gbapp/services/GBCoreService'; import { GBCoreService } from '../packages/core.gbapp/services/GBCoreService.js';
import { GBDeployer } from '../packages/core.gbapp/services/GBDeployer'; import { GBDeployer } from '../packages/core.gbapp/services/GBDeployer.js';
import { GBImporter } from '../packages/core.gbapp/services/GBImporterService'; import { GBImporter } from '../packages/core.gbapp/services/GBImporterService.js';
import { GBMinService } from '../packages/core.gbapp/services/GBMinService'; import { GBMinService } from '../packages/core.gbapp/services/GBMinService.js';
var auth = require('basic-auth'); import auth from 'basic-auth';
const child_process = require('child_process'); import child_process from 'child_process';
import * as winston from 'winston-logs-display';
/** /**
* Global shared server data; * Global shared server data;
@ -117,7 +117,7 @@ export class GBServer {
// Creates working directory. // Creates working directory.
const workDir = Path.join(process.env.PWD, 'work'); const workDir = Path.join(process.env.PWD, 'work');
if (!fs.existsSync(workDir)) { if (!Fs.existsSync(workDir)) {
mkdirp.sync(workDir); mkdirp.sync(workDir);
} }
@ -236,7 +236,7 @@ export class GBServer {
// If global log enabled, reorders transports adding web logging. // If global log enabled, reorders transports adding web logging.
const loggers = GBLog.getLogger(); const loggers = GBLog.getLogger();
require('winston-logs-display')(server, loggers[1]); winston.default(server, loggers[1]);
} }
@ -254,14 +254,14 @@ export class GBServer {
if (process.env.CERTIFICATE_PFX) { if (process.env.CERTIFICATE_PFX) {
let options = { let options = {
passphrase: process.env.CERTIFICATE_PASSPHRASE, passphrase: process.env.CERTIFICATE_PASSPHRASE,
pfx: fs.readFileSync(process.env.CERTIFICATE_PFX) pfx: Fs.readFileSync(process.env.CERTIFICATE_PFX)
}; };
const httpsServer = https.createServer(options, server).listen(port, mainCallback); const httpsServer = https.createServer(options, server).listen(port, mainCallback);
if (process.env.CERTIFICATE2_PFX) { if (process.env.CERTIFICATE2_PFX) {
let options = { let options = {
passphrase: process.env.CERTIFICATE2_PASSPHRASE, passphrase: process.env.CERTIFICATE2_PASSPHRASE,
pfx: fs.readFileSync(process.env.CERTIFICATE2_PFX) pfx: Fs.readFileSync(process.env.CERTIFICATE2_PFX)
}; };
httpsServer.addContext(process.env.CERTIFICATE2_DOMAIN, options); httpsServer.addContext(process.env.CERTIFICATE2_DOMAIN, options);

View file

@ -6,11 +6,13 @@
"declaration": false, "declaration": false,
"emitDecoratorMetadata": true, "emitDecoratorMetadata": true,
"experimentalDecorators": true, "experimentalDecorators": true,
"esModuleInterop": true,
"skipLibCheck": true, "skipLibCheck": true,
"mapRoot": "./dist/", "mapRoot": "./dist/",
"module": "CommonJS",
"moduleResolution": "Node", "moduleResolution": "Node",
"resolveJsonModule": false, "module": "ESNext",
"forceConsistentCasingInFileNames": true,
"resolveJsonModule": true,
"outDir": "./dist", "outDir": "./dist",
"paths": { "paths": {
"*": [ "*": [