From d717de6245a0263aea7ad8205bf896d82746b434 Mon Sep 17 00:00:00 2001 From: Rodrigo Rodriguez Date: Fri, 8 Mar 2019 19:13:00 -0300 Subject: [PATCH] fix(general): tslint being applied in all sources. --- .prettierrc | 1 + package-lock.json | 347 +++++------------- package.json | 27 +- packages/admin.gbapp/dialogs/AdminDialog.ts | 49 +-- .../admin.gbapp/services/GBAdminService.ts | 13 +- packages/analytics.gblib/index.ts | 32 +- .../dialogs/BotFarmDialog.ts | 69 ---- .../dialogs/StartDialog.ts | 25 +- packages/azuredeployer.gbapp/index.ts | 30 +- .../services/AzureDeployerService.ts | 58 ++- packages/console.gblib/index.ts | 29 +- .../services/ConsoleDirectLine.ts | 102 +++-- packages/core.gbapp/index.ts | 22 +- packages/core.gbapp/services/GBAPIService.ts | 22 +- .../core.gbapp/services/GBConfigService.ts | 4 +- .../services/GBConversationalService.ts | 2 +- packages/core.gbapp/services/GBDeployer.ts | 5 +- .../core.gbapp/services/GBImporterService.ts | 2 +- packages/core.gbapp/services/GBMinService.ts | 2 +- packages/core.gbapp/services/GBVMService.ts | 8 +- packages/core.gbapp/services/TSCompiler.ts | 1 - .../dialogs/FeedbackDialog.ts | 2 +- .../dialogs/QualityDialog.ts | 1 - packages/customer-satisfaction.gbapp/index.ts | 20 +- packages/kb.gbapp/dialogs/AskDialog.ts | 30 +- packages/kb.gbapp/dialogs/MenuDialog.ts | 8 +- packages/kb.gbapp/index.ts | 20 +- packages/kb.gbapp/services/KBService.ts | 114 +++--- packages/security.gblib/index.ts | 27 +- .../security.gblib/services/SecService.ts | 2 +- packages/whatsapp.gblib/index.ts | 16 +- .../services/WhatsappDirectLine.ts | 10 +- tslint.json | 3 + 33 files changed, 458 insertions(+), 645 deletions(-) delete mode 100644 packages/azuredeployer.gbapp/dialogs/BotFarmDialog.ts diff --git a/.prettierrc b/.prettierrc index c1e1114c..af8db0fa 100644 --- a/.prettierrc +++ b/.prettierrc @@ -5,4 +5,5 @@ "arrowParens": "avoid", "semi": true, "singleQuote": true + } \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index ea1d9d4e..7d26985e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -986,15 +986,6 @@ "resolved": "https://registry.npmjs.org/@kyleshockey/object-assign-deep/-/object-assign-deep-0.4.2.tgz", "integrity": "sha1-hJAPDu/DcnmPR1G1JigwuCCJIuw=" }, - "@microsoft/microsoft-graph-client": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@microsoft/microsoft-graph-client/-/microsoft-graph-client-1.4.0.tgz", - "integrity": "sha512-dX7053APLpIaGMGqJrDjBVX7ZO+vntKTvyB1WIy4WpC8qE3qdE68MDOq5Vv6JPG879KygPiCH2ex5RCAK+OR0Q==", - "requires": { - "es6-promise": "^4.1.0", - "isomorphic-fetch": "^2.2.1" - } - }, "@microsoft/recognizers-text": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/@microsoft/recognizers-text/-/recognizers-text-1.1.4.tgz", @@ -1606,7 +1597,7 @@ "@types/is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@types/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-uE17sgeiEPKvm+1DHcD76cQUO+E=", + "integrity": "sha512-jkZatu4QVbR60mpIzjINmtS1ZF4a/FqdTUTBeQDVOQ2PYyidtwFKr0B5G6ERukKwliq+7mIXvxyppwzG5EgRYg==", "requires": { "@types/node": "*" } @@ -1647,7 +1638,7 @@ "@types/node-fetch": { "version": "1.6.9", "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-1.6.9.tgz", - "integrity": "sha1-p1D7D0zylgv3K0YuTIaQgCLdacU=", + "integrity": "sha512-n2r6WLoY7+uuPT7pnEtKJCmPUGyJ+cbyBR8Avnu4+m1nzz7DwBVuyIvvlBzCZ/nrpC7rIgb3D6pNavL7rFEa9g==", "requires": { "@types/node": "*" } @@ -1671,23 +1662,6 @@ "@types/request": "*" } }, - "@types/semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==" - }, - "@types/sequelize": { - "version": "4.27.38", - "resolved": "https://registry.npmjs.org/@types/sequelize/-/sequelize-4.27.38.tgz", - "integrity": "sha512-HR+epHzmU8xSMRUjhuuYKHn3IxD2Ft4OePEqXY8/6otDyPn9s6SZx4bVLnUa98jv6Ny0Di9IHQHOXh35O7QajQ==", - "dev": true, - "requires": { - "@types/bluebird": "*", - "@types/continuation-local-storage": "*", - "@types/lodash": "*", - "@types/validator": "*" - } - }, "@types/shelljs": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.2.tgz", @@ -1711,7 +1685,7 @@ "@types/uuid": { "version": "3.4.4", "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.4.tgz", - "integrity": "sha1-evaTYPpl7w3stB/RUL9MpcDO/fU=", + "integrity": "sha512-tPIgT0GUmdJQNSHxp0X2jnpQfBSTfGxUMc/2CXBU2mnyTFVYVa2ojpoQ74w0U2yn2vw3jnC640+77lkFFpdVDw==", "requires": { "@types/node": "*" } @@ -2030,11 +2004,6 @@ "readable-stream": "^2.0.6" } }, - "arg": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.0.tgz", - "integrity": "sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==" - }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -2789,6 +2758,28 @@ "ms-rest-js": "^0.2.5", "request": "2.83.0", "rsa-pem-from-mod-exp": "^0.8.4" + }, + "dependencies": { + "ms-rest-js": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/ms-rest-js/-/ms-rest-js-0.2.8.tgz", + "integrity": "sha512-KgiSsbJzKcPLx0Zaca5PEdGOwm8X4Np+aTukK6stMl2eAqSrHvncjteyeXi6v6O0ECLYeUWVbqcPJfpw1PjnZQ==", + "requires": { + "@types/form-data": "^2.2.1", + "@types/is-stream": "^1.1.0", + "@types/node": "^9.4.6", + "@types/node-fetch": "^1.6.7", + "@types/uuid": "^3.4.3", + "fetch-cookie": "^0.7.0", + "fetch-ponyfill": "github:amarzavery/fetch-ponyfill#master", + "form-data": "^2.3.2", + "is-buffer": "^2.0.0", + "is-stream": "^1.1.0", + "moment": "^2.21.0", + "url-parse": "^1.2.0", + "uuid": "^3.2.1" + } + } } }, "botframework-schema": { @@ -2808,6 +2799,11 @@ "har-schema": "^2.0.0" } }, + "is-buffer": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", + "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==" + }, "oauth-sign": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", @@ -3007,6 +3003,28 @@ "ms-rest-js": "^0.2.5", "request": "2.83.0", "rsa-pem-from-mod-exp": "^0.8.4" + }, + "dependencies": { + "ms-rest-js": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/ms-rest-js/-/ms-rest-js-0.2.8.tgz", + "integrity": "sha512-KgiSsbJzKcPLx0Zaca5PEdGOwm8X4Np+aTukK6stMl2eAqSrHvncjteyeXi6v6O0ECLYeUWVbqcPJfpw1PjnZQ==", + "requires": { + "@types/form-data": "^2.2.1", + "@types/is-stream": "^1.1.0", + "@types/node": "^9.4.6", + "@types/node-fetch": "^1.6.7", + "@types/uuid": "^3.4.3", + "fetch-cookie": "^0.7.0", + "fetch-ponyfill": "github:amarzavery/fetch-ponyfill#master", + "form-data": "^2.3.2", + "is-buffer": "^2.0.0", + "is-stream": "^1.1.0", + "moment": "^2.21.0", + "url-parse": "^1.2.0", + "uuid": "^3.2.1" + } + } } }, "botframework-schema": { @@ -3026,6 +3044,11 @@ "har-schema": "^2.0.0" } }, + "is-buffer": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", + "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==" + }, "oauth-sign": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", @@ -3779,11 +3802,6 @@ "restore-cursor": "^2.0.0" } }, - "cli-spinner": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/cli-spinner/-/cli-spinner-0.2.8.tgz", - "integrity": "sha1-gWnZ/66HBnZEXm7kOX6Vp6Fb2AU=" - }, "cli-table": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", @@ -4058,12 +4076,6 @@ "delayed-stream": "~1.0.0" } }, - "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", - "dev": true - }, "commitizen": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/commitizen/-/commitizen-3.0.7.tgz", @@ -4250,15 +4262,6 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, - "config-chain": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", - "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", - "requires": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, "configstore": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", @@ -5308,31 +5311,6 @@ "safe-buffer": "^5.0.1" } }, - "editorconfig": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.2.tgz", - "integrity": "sha512-GWjSI19PVJAM9IZRGOS+YKI8LN+/sjkSjNyvxL5ucqP9/IqtYNXBaQ/6c/hkPNYQHyOHra2KoXZI/JVpuqwmcQ==", - "requires": { - "@types/node": "^10.11.7", - "@types/semver": "^5.5.0", - "commander": "^2.19.0", - "lru-cache": "^4.1.3", - "semver": "^5.6.0", - "sigmund": "^1.0.1" - }, - "dependencies": { - "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==" - }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" - } - } - }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -5495,7 +5473,8 @@ "es6-promise": { "version": "4.2.5", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.5.tgz", - "integrity": "sha1-2m0NVpLvtGHggsFIF/4kJ9j10FQ=" + "integrity": "sha1-2m0NVpLvtGHggsFIF/4kJ9j10FQ=", + "dev": true }, "es6-promisify": { "version": "5.0.0", @@ -6014,12 +5993,31 @@ "fetch-cookie": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/fetch-cookie/-/fetch-cookie-0.7.2.tgz", - "integrity": "sha1-W+US9xIbC80uNENQrXF3J6w7Gl0=", + "integrity": "sha512-Udm6ls1tV/pR9+EOjTYW2aGBadN03zOgVwu6grybxOg9ufACq7wE1HY/jh06DOykXH9FLYJC2RbUD3kJZcJBRg==", "requires": { "es6-denodeify": "^0.1.1", "tough-cookie": "^2.3.1" } }, + "fetch-ponyfill": { + "version": "github:amarzavery/fetch-ponyfill#136e6f8192bdb2aa0b7983f0b3b4361c357be9db", + "from": "github:amarzavery/fetch-ponyfill#master", + "requires": { + "fetch-cookie": "~0.6.0", + "node-fetch": "~1.7.1" + }, + "dependencies": { + "fetch-cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/fetch-cookie/-/fetch-cookie-0.6.0.tgz", + "integrity": "sha1-T+xOQIzAAH9sBOVTYYr0s97jf2k=", + "requires": { + "es6-denodeify": "^0.1.1", + "tough-cookie": "^2.3.1" + } + } + } + }, "figures": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", @@ -8207,15 +8205,6 @@ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - } - }, "isomorphic-form-data": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isomorphic-form-data/-/isomorphic-form-data-0.0.1.tgz", @@ -8285,33 +8274,6 @@ "integrity": "sha512-CpKJh9VRNhS+XqZtg1UMejETGEiqwCGDC/uwPEEQwc2nfdbSm73SIE29TplG2gLYuBOOTNDqxzG6A9NtEPLt0w==", "dev": true }, - "js-beautify": { - "version": "1.8.9", - "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.8.9.tgz", - "integrity": "sha512-MwPmLywK9RSX0SPsUJjN7i+RQY9w/yC17Lbrq9ViEefpLRgqAR2BgrMN2AbifkUuhDV8tRauLhLda/9+bE0YQA==", - "requires": { - "config-chain": "^1.1.12", - "editorconfig": "^0.15.2", - "glob": "^7.1.3", - "mkdirp": "~0.5.0", - "nopt": "~4.0.1" - }, - "dependencies": { - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, "js-levenshtein": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", @@ -8936,11 +8898,6 @@ "pify": "^3.0.0" } }, - "make-error": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", - "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==" - }, "map-age-cleaner": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", @@ -9542,54 +9499,16 @@ } }, "ms-rest-js": { - "version": "0.2.8", - "resolved": "http://registry.npmjs.org/ms-rest-js/-/ms-rest-js-0.2.8.tgz", - "integrity": "sha512-KgiSsbJzKcPLx0Zaca5PEdGOwm8X4Np+aTukK6stMl2eAqSrHvncjteyeXi6v6O0ECLYeUWVbqcPJfpw1PjnZQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ms-rest-js/-/ms-rest-js-1.0.1.tgz", + "integrity": "sha512-o2Gms3XE4sCKm0FZLJicq0aa2ybYyV8pwUHKHJG1QExkk/csM7PLuHiaPAj6Xn3kzqzAx4cAYtyEp4P1T3ujyA==", "requires": { - "@types/form-data": "^2.2.1", - "@types/is-stream": "^1.1.0", - "@types/node": "^9.4.6", - "@types/node-fetch": "^1.6.7", - "@types/uuid": "^3.4.3", - "fetch-cookie": "^0.7.0", - "fetch-ponyfill": "github:amarzavery/fetch-ponyfill#136e6f8192bdb2aa0b7983f0b3b4361c357be9db", + "axios": "^0.18.0", "form-data": "^2.3.2", - "is-buffer": "^2.0.0", - "is-stream": "^1.1.0", - "moment": "^2.21.0", - "url-parse": "^1.2.0", - "uuid": "^3.2.1" - }, - "dependencies": { - "@types/node": { - "version": "9.6.35", - "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.35.tgz", - "integrity": "sha512-h5zvHS8wXHGa+Gcqs9K8vqCgOtqjr0+NqG/DDJmQIX1wpR9HivAfgV8bjcD3mGM4bPfQw5Aneb2Pn8355L83jA==" - }, - "fetch-ponyfill": { - "version": "github:amarzavery/fetch-ponyfill#136e6f8192bdb2aa0b7983f0b3b4361c357be9db", - "from": "github:amarzavery/fetch-ponyfill#136e6f8192bdb2aa0b7983f0b3b4361c357be9db", - "requires": { - "fetch-cookie": "~0.6.0", - "node-fetch": "~1.7.1" - }, - "dependencies": { - "fetch-cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/fetch-cookie/-/fetch-cookie-0.6.0.tgz", - "integrity": "sha1-T+xOQIzAAH9sBOVTYYr0s97jf2k=", - "requires": { - "es6-denodeify": "^0.1.1", - "tough-cookie": "^2.3.1" - } - } - } - }, - "is-buffer": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", - "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==" - } + "tough-cookie": "^2.4.3", + "tslib": "^1.9.2", + "uuid": "^3.2.1", + "xml2js": "^0.4.19" } }, "mstranslator": { @@ -14821,11 +14740,6 @@ "resolved": "https://registry.npmjs.org/propagate/-/propagate-1.0.0.tgz", "integrity": "sha1-AMLa7t2iDofjeCs0Stuhzd1q1wk=" }, - "proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=" - }, "protocols": { "version": "1.4.6", "resolved": "https://registry.npmjs.org/protocols/-/protocols-1.4.6.tgz", @@ -16178,11 +16092,6 @@ } } }, - "sigmund": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=" - }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", @@ -16524,6 +16433,7 @@ "version": "0.5.10", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.10.tgz", "integrity": "sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==", + "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -16532,7 +16442,8 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -17609,73 +17520,11 @@ "semver": "^5.0.1" } }, - "ts-node": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.0.2.tgz", - "integrity": "sha512-MosTrinKmaAcWgO8tqMjMJB22h+sp3Rd1i4fdoWY4mhBDekOwIAKI/bzmRi7IcbCmjquccYg2gcF6NBkLgr0Tw==", - "requires": { - "arg": "^4.1.0", - "diff": "^3.1.0", - "make-error": "^1.1.1", - "source-map-support": "^0.5.6", - "yn": "^3.0.0" - } - }, "tslib": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", "integrity": "sha1-1+TdeSRdhUKMTX5IIqeZF5VMooY=" }, - "tslint": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.13.0.tgz", - "integrity": "sha512-ECOOQRxXCYnUUePG5h/+Z1Zouobk3KFpIHA9aKBB/nnMxs97S1JJPDGt5J4cGm1y9U9VmVlfboOxA8n1kSNzGw==", - "dev": true, - "requires": { - "babel-code-frame": "^6.22.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^3.2.0", - "glob": "^7.1.1", - "js-yaml": "^3.7.0", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.8.0", - "tsutils": "^2.27.2" - } - }, - "tslint-microsoft-contrib": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/tslint-microsoft-contrib/-/tslint-microsoft-contrib-6.0.0.tgz", - "integrity": "sha512-R//efwn+34IUjTJeYgNDAJdzG0jyLWIehygPt/PHuZAieTolFVS56FgeFW7DOLap9ghXzMiFPTmDgm54qaL7QA==", - "dev": true, - "requires": { - "tsutils": "^2.27.2 <2.29.0" - }, - "dependencies": { - "tsutils": { - "version": "2.28.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.28.0.tgz", - "integrity": "sha512-bh5nAtW0tuhvOJnx1GLRn5ScraRLICGyJV5wJhtRWOLsxW70Kk5tZtpK3O/hW6LDnqKS9mlUMPZj9fEMJ0gxqA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - } - } - }, - "tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, "tunnel": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.5.tgz", @@ -18039,9 +17888,9 @@ "integrity": "sha1-TTNA6AfTdzvamZH4MFrNzCpmXSo=" }, "url-parse": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.3.tgz", - "integrity": "sha1-v67kVciJAjIZ11fgRfpqaE7DbBU=", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.4.tgz", + "integrity": "sha512-/92DTTorg4JjktLNLe6GPS2/RvAd/RGr6LuktmWSMLEOa6rjnlrFXNgSbSmkNvCoL2T028A0a1JaJLzRMlFoHg==", "requires": { "querystringify": "^2.0.0", "requires-port": "^1.0.0" @@ -18210,11 +18059,6 @@ } } }, - "whatwg-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", - "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==" - }, "whatwg-mimetype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", @@ -18733,11 +18577,6 @@ } } } - }, - "yn": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.0.0.tgz", - "integrity": "sha512-+Wo/p5VRfxUgBUGy2j/6KX2mj9AYJWOHuhMjMcbBFc3y54o9/4buK1ksBvuiK01C3kby8DH9lSmJdSxw+4G/2Q==" } } } diff --git a/package.json b/package.json index 810157d2..8c5c757e 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "commit": "git-cz" }, "dependencies": { - "@microsoft/microsoft-graph-client": "1.4.0", + "@microsoft/microsoft-graph-client": "1.5.2", "@semantic-release/exec": "^3.3.2", "adal-node": "0.1.28", "async": "2.6.2", @@ -59,30 +59,31 @@ "azure-arm-website": "5.7.0", "bluebird": "^3.5.3", "body-parser": "1.18.3", - "botbuilder": "4.1.7", - "botbuilder-ai": "4.2.0", - "botbuilder-azure": "4.2.0", + "botbuilder": "4.3.2", + "botbuilder-ai": "4.3.2", + "botbuilder-azure": "4.3.2", "botbuilder-choices": "4.0.0-preview1.2", - "botbuilder-dialogs": "4.2.0", + "botbuilder-dialogs": "4.3.2", "botbuilder-prompts": "4.0.0-preview1.2", "botlib": "^0.1.21", "chai": "4.2.0", "child_process": "^1.0.2", "chokidar": "2.1.2", - "cli-spinner": "^0.2.8", + "cli-spinner": "^0.2.10", "csv-parse": "4.3.3", - "dotenv-extended": "2.3.0", + "dotenv-extended": "2.4.0", "express": "4.16.4", "express-promise-router": "3.0.3", "fs-extra": "7.0.1", "ip": "^1.1.5", - "js-beautify": "^1.8.9", + "js-beautify": "^1.9.0", "localize": "0.4.7", "marked": "0.6.1", "mocha": "6.0.2", "mocha-typescript": "1.1.17", "ms": "2.1.1", "ms-rest-azure": "2.6.0", + "ms-rest-js": "^1.0.1", "nexmo": "2.4.1", "ngrok": "3.1.1", "nyc": "13.3.0", @@ -94,7 +95,7 @@ "request-promise": "4.2.4", "request-promise-native": "1.0.7", "scanf": "^1.0.2", - "sequelize": "4.42.1", + "sequelize": "4.43.0", "sequelize-typescript": "0.6.7", "shx": "0.3.2", "simple-git": "1.107.0", @@ -103,7 +104,7 @@ "swagger-client": "3.8.25", "tedious": "5.0.3", "temperature-js": "^0.1.0", - "ts-node": "8.0.2", + "ts-node": "8.0.3", "typedoc": "0.14.2", "typedoc-plugin-external-module-name": "^2.0.0", "typedoc-plugin-markdown": "^1.1.27", @@ -123,7 +124,7 @@ "@semantic-release/release-notes-generator": "^7.1.4", "@types/chai": "4.1.7", "@types/mocha": "5.2.6", - "@types/sequelize": "4.27.38", + "@types/sequelize": "4.27.39", "@types/url-join": "4.0.0", "@types/winston": "2.4.4", "ban-sensitive-files": "1.9.2", @@ -141,8 +142,8 @@ "standard": "12.0.1", "travis-deploy-once": "5.0.11", "ts-loader": "^5.3.3", - "tslint": "^5.13.0", - "tslint-microsoft-contrib": "^6.0.0" + "tslint": "^5.13.1", + "tslint-microsoft-contrib": "^6.1.0" }, "eslintConfig": { "env": { diff --git a/packages/admin.gbapp/dialogs/AdminDialog.ts b/packages/admin.gbapp/dialogs/AdminDialog.ts index 21a50978..d385f175 100644 --- a/packages/admin.gbapp/dialogs/AdminDialog.ts +++ b/packages/admin.gbapp/dialogs/AdminDialog.ts @@ -36,24 +36,20 @@ 'use strict'; -const UrlJoin = require('url-join'); -import { BotAdapter } from 'botbuilder'; import { WaterfallDialog } from 'botbuilder-dialogs'; import { GBMinInstance, IGBDialog } from 'botlib'; +import UrlJoin = require('url-join'); import { AzureDeployerService } from '../../azuredeployer.gbapp/services/AzureDeployerService'; import { GBConfigService } from '../../core.gbapp/services/GBConfigService'; import { GBDeployer } from '../../core.gbapp/services/GBDeployer'; import { GBImporter } from '../../core.gbapp/services/GBImporterService'; -import { GBAdminService } from '../services/GBAdminService'; import { Messages } from '../strings'; /** * Dialogs for administration tasks. */ export class AdminDialog extends IGBDialog { - public static async createFarmCommand(text: any, min: GBMinInstance) {} - - public static async undeployPackageCommand(text: any, min: GBMinInstance) { + public static async undeployPamand(text: any, min: GBMinInstance) { const packageName = text.split(' ')[1]; const importer = new GBImporter(min.core); const deployer = new GBDeployer(min.core, importer); @@ -71,34 +67,27 @@ export class AdminDialog extends IGBDialog { await deployer.deployFromSharePoint(min.instance.instanceId, packageName); } else { const additionalPath = GBConfigService.get('ADDITIONAL_DEPLOY_PATH'); - if (!additionalPath) { + if (additionalPath !== undefined) { throw new Error('ADDITIONAL_DEPLOY_PATH is not set and deployPackage was called.'); } await deployer.deployPackageFromLocalPath(min, UrlJoin(additionalPath, packageName)); } } - public static async rebuildIndexPackageCommand(min: GBMinInstance, text: string, deployer: GBDeployer) { + public static async rebuildIndexPackageCommand(min: GBMinInstance, deployer: GBDeployer) { await deployer.rebuildIndex( min.instance, new AzureDeployerService(deployer).getKBSearchSchema(min.instance.searchIndex) ); } - public static async addConnectionCommand(min: GBMinInstance, text: any) { - const packageName = text.split(' ')[1]; - const importer = new GBImporter(min.core); - const admin = new GBAdminService(min.core); - // TODO: await admin.addConnection - } - /** * Setup dialogs flows and define services call. * * @param bot The bot adapter. * @param min The minimal bot instance data. */ - public static setup(bot: BotAdapter, min: GBMinInstance) { + public static setup(min: GBMinInstance) { // Setup services. const importer = new GBImporter(min.core); @@ -116,9 +105,9 @@ export class AdminDialog extends IGBDialog { }, async step => { const locale = step.context.activity.locale; - const password = step.result; + const sensitive = step.result; - if (password === GBConfigService.get('ADMIN_PASS')) { + if (sensitive === GBConfigService.get('ADMIN_PASS')) { await step.context.sendActivity(Messages[locale].welcome); return await step.prompt('textPrompt', Messages[locale].which_task); @@ -129,8 +118,9 @@ export class AdminDialog extends IGBDialog { } }, async step => { - const locale = step.context.activity.locale; - const text = step.result; + const locale: string = step.context.activity.locale; + // tslint:disable-next-line:no-unsafe-any + const text: string = step.result; const cmdName = text.split(' ')[0]; step.context.sendActivity(Messages[locale].working(cmdName)); @@ -138,29 +128,16 @@ export class AdminDialog extends IGBDialog { if (text === 'quit') { return await step.replaceDialog('/'); - } else if (cmdName === 'createFarm') { - await AdminDialog.createFarmCommand(text, min); - - return await step.replaceDialog('/admin', { firstRun: false }); } else if (cmdName === 'deployPackage') { await AdminDialog.deployPackageCommand(min, text, deployer); return await step.replaceDialog('/admin', { firstRun: false }); } else if (cmdName === 'redeployPackage') { - await AdminDialog.undeployPackageCommand(text, min); await AdminDialog.deployPackageCommand(min, text, deployer); return await step.replaceDialog('/admin', { firstRun: false }); } else if (cmdName === 'rebuildIndex') { - await AdminDialog.rebuildIndexPackageCommand(min, text, deployer); - - return await step.replaceDialog('/admin', { firstRun: false }); - } else if (cmdName === 'addConnection') { - await AdminDialog.addConnectionCommand(min, text); - - return await step.replaceDialog('/admin', { firstRun: false }); - } else if (cmdName === 'undeployPackage') { - await AdminDialog.undeployPackageCommand(text, min); + await AdminDialog.rebuildIndexPackageCommand(min, deployer); return await step.replaceDialog('/admin', { firstRun: false }); } else if (cmdName === 'setupSecurity') { @@ -224,9 +201,9 @@ export class AdminDialog extends IGBDialog { ); const locale = step.context.activity.locale; - const state = `${min.instance.instanceId}${Math.floor(Math.random() * 1000000000)}`; + const state = `${min.instance.instanceId}${crypto.getRandomValues(new Uint32Array(16))[0]}`; - await min.adminService.setValue(min.instance.instanceId, 'AntiCSRFAttackState', state); + min.adminService.setValue(min.instance.instanceId, 'AntiCSRFAttackState', state); const url = `https://login.microsoftonline.com/${ min.instance.authenticatorTenant diff --git a/packages/admin.gbapp/services/GBAdminService.ts b/packages/admin.gbapp/services/GBAdminService.ts index 68d3a95d..f844a299 100644 --- a/packages/admin.gbapp/services/GBAdminService.ts +++ b/packages/admin.gbapp/services/GBAdminService.ts @@ -38,9 +38,9 @@ import { AuthenticationContext, TokenResponse } from 'adal-node'; import { IGBAdminService, IGBCoreService } from 'botlib'; +import UrlJoin = require('url-join'); import { GuaribasInstance } from '../../core.gbapp/models/GBModel'; import { GuaribasAdmin } from '../models/AdminModel'; -const UrlJoin = require('url-join'); const msRestAzure = require('ms-rest-azure'); const PasswordGenerator = require('strict-password-generator').default; @@ -65,15 +65,13 @@ export class GBAdminService implements IGBAdminService { public static async getADALTokenFromUsername(username: string, password: string) { const credentials = await GBAdminService.getADALCredentialsFromUsername(username, password); - const accessToken = credentials.tokenCache._entries[0].accessToken; - return accessToken; + return credentials.tokenCache._entries[0].accessToken; } public static async getADALCredentialsFromUsername(username: string, password: string) { - const credentials = await msRestAzure.loginWithUsernamePassword(username, password); - return credentials; + return await msRestAzure.loginWithUsernamePassword(username, password); } public static getRndPassword(): string { @@ -102,9 +100,8 @@ export class GBAdminService implements IGBAdminService { minimumLength: 12, maximumLength: 14 }; - const name = passwordGenerator.generatePassword(options); - return name; + return passwordGenerator.generatePassword(options); } public async setValue(instanceId: number, key: string, value: string) { @@ -170,7 +167,7 @@ export class GBAdminService implements IGBAdminService { instance.authenticatorClientSecret, resource, async (err, res) => { - if (err) { + if (err !== undefined) { reject(err); } else { const token = res as TokenResponse; diff --git a/packages/analytics.gblib/index.ts b/packages/analytics.gblib/index.ts index 0c3e33f8..91e07bed 100644 --- a/packages/analytics.gblib/index.ts +++ b/packages/analytics.gblib/index.ts @@ -36,18 +36,30 @@ 'use strict'; -const UrlJoin = require('url-join'); - -import { GBMinInstance, IGBCoreService, IGBPackage } from 'botlib'; - +import { GBDialogStep, GBMinInstance, IGBCoreService, IGBPackage, GBLog } from 'botlib'; import { Sequelize } from 'sequelize-typescript'; +/** + * .gblib Package handler. + */ export class GBAnalyticsPackage implements IGBPackage { public sysPackages: IGBPackage[] = undefined; - public getDialogs(min: GBMinInstance) {} - public loadPackage(core: IGBCoreService, sequelize: Sequelize): void {} - public unloadPackage(core: IGBCoreService): void {} - public loadBot(min: GBMinInstance): void {} - public unloadBot(min: GBMinInstance): void {} - public onNewSession(min: GBMinInstance, step: GBDialogStep): void {} + public getDialogs(min: GBMinInstance) { + GBLog.verbose(`getDialogs called.`); + } + public loadPackage(core: IGBCoreService, sequelize: Sequelize): void { + GBLog.verbose(`loadPackage called.`); + } + public unloadPackage(core: IGBCoreService): void { + GBLog.verbose(`unloadPackage called.`); + } + public loadBot(min: GBMinInstance): void { + GBLog.verbose(`loadBot called.`); + } + public unloadBot(min: GBMinInstance): void { + GBLog.verbose(`unloadBot called.`); + } + public onNewSession(min: GBMinInstance, step: GBDialogStep): void { + GBLog.verbose(`onNewSession called.`); + } } diff --git a/packages/azuredeployer.gbapp/dialogs/BotFarmDialog.ts b/packages/azuredeployer.gbapp/dialogs/BotFarmDialog.ts deleted file mode 100644 index 0a41cd43..00000000 --- a/packages/azuredeployer.gbapp/dialogs/BotFarmDialog.ts +++ /dev/null @@ -1,69 +0,0 @@ -/*****************************************************************************\ -| ( )_ _ | -| _ _ _ __ _ _ __ ___ ___ _ _ | ,_)(_) ___ ___ _ | -| ( '_`\ ( '__)/'_` ) /'_ `\/' _ ` _ `\ /'_` )| | | |/',__)/' _ `\ /'_`\ | -| | (_) )| | ( (_| |( (_) || ( ) ( ) |( (_| || |_ | |\__, \| ( ) |( (_) ) | -| | ,__/'(_) `\__,_)`\__ |(_) (_) (_)`\__,_)`\__)(_)(____/(_) (_)`\___/' | -| | | ( )_) | | -| (_) \___/' | -| | -| General Bots Copyright (c) Pragmatismo.io. All rights reserved. | -| Licensed under the AGPL-3.0. | -| | -| According to our dual licensing model, this program can be used either | -| under the terms of the GNU Affero General Public License, version 3, | -| or under a proprietary license. | -| | -| The texts of the GNU Affero General Public License with an additional | -| permission and of our proprietary license can be found at and | -| in the LICENSE file you have received along with this program. | -| | -| This program is distributed in the hope that it will be useful, | -| but WITHOUT ANY WARRANTY, without even the implied warranty of | -| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | -| GNU Affero General Public License for more details. | -| | -| "General Bots" is a registered trademark of Pragmatismo.io. | -| The licensing of the program under the AGPLv3 does not imply a | -| trademark license. Therefore any rights, title and interest in | -| our trademarks remain entirely with us. | -| | -\*****************************************************************************/ - -/** - * @fileoverview General Bots server core. - */ - -'use strict'; - -import { BotAdapter } from 'botbuilder'; -import { GBMinInstance } from 'botlib'; -import { IGBDialog } from 'botlib'; -import { WaterfallDialog } from 'botlib/node_modules/botbuilder-dialogs'; -import { Messages } from '../strings'; - -export class BotFarmDialog extends IGBDialog { - /** - * Setup dialogs flows and define services call. - * - * @param bot The bot adapter. - * @param min The minimal bot instance data. - */ - public static setup(bot: BotAdapter, min: GBMinInstance) { - min.dialogs.add(new WaterfallDialog ('/createBotFarm', [ - async step => { - const locale = step.context.activity.locale; - await step.prompt('choicePrompt', Messages[locale].what_about_me); - - return step.next(); - }, - async step => { - - const locale = step.context.activity.locale; - await step.context.sendActivity(Messages[locale].thanks); - - return step.next(); - } - ])); - } -} diff --git a/packages/azuredeployer.gbapp/dialogs/StartDialog.ts b/packages/azuredeployer.gbapp/dialogs/StartDialog.ts index 4d2175ab..dbfe0b18 100644 --- a/packages/azuredeployer.gbapp/dialogs/StartDialog.ts +++ b/packages/azuredeployer.gbapp/dialogs/StartDialog.ts @@ -36,8 +36,7 @@ 'use strict'; -import { IGBInstance } from 'botlib'; -import { IGBInstallationDeployer } from 'botlib'; +import { GBLog, IGBInstallationDeployer, IGBInstance } from 'botlib'; import * as fs from 'fs'; import { GBAdminService } from '../../../packages/admin.gbapp/services/GBAdminService'; import { GBConfigService } from '../../../packages/core.gbapp/services/GBConfigService'; @@ -47,7 +46,6 @@ const scanf = require('scanf'); * Handles command-line dialog for getting info for Boot Bot. */ export class StartDialog { - public static async createBaseInstance(installationDeployer: IGBInstallationDeployer) { // No .env so asks for cloud credentials to start a new farm. @@ -122,7 +120,7 @@ export class StartDialog { private static retrieveUsername() { let value = GBConfigService.get('CLOUD_USERNAME'); - if (!value) { + if (value !== undefined) { process.stdout.write(`${GBAdminService.GB_PROMPT}CLOUD_USERNAME:`); value = scanf('%s').replace(/(\n|\r)+$/, ''); } @@ -132,7 +130,7 @@ export class StartDialog { private static retrievePassword() { let password = GBConfigService.get('CLOUD_PASSWORD'); - if (!password) { + if (password !== undefined) { process.stdout.write(`${GBAdminService.GB_PROMPT}CLOUD_PASSWORD:`); password = scanf('%s').replace(/(\n|\r)+$/, ''); } @@ -142,16 +140,13 @@ export class StartDialog { private static retrieveBotId() { let botId = GBConfigService.get('BOT_ID'); - if (!botId) { + if (botId !== undefined) { process.stdout.write( `${GBAdminService.GB_PROMPT}Choose a unique bot Id containing lowercase letters, digits or dashes (cannot use dash as the first two or last one characters), cannot start or end with or contain consecutive dashes and having 4 to 42 characters long.\n` ); process.stdout.write(`${GBAdminService.GB_PROMPT}BOT_ID:`); - - // TODO: Update this regexp to match description of it. - botId = scanf('%s').replace(/(\n|\r)+$/, ''); } @@ -160,7 +155,7 @@ cannot start or end with or contain consecutive dashes and having 4 to 42 charac private static retrieveAuthoringKey() { let authoringKey = GBConfigService.get('NLP_AUTHORING_KEY'); - if (!authoringKey) { + if (authoringKey !== undefined) { process.stdout.write( `${ GBAdminService.GB_PROMPT @@ -184,7 +179,7 @@ cannot start or end with or contain consecutive dashes and having 4 to 42 charac please go to https://apps.dev.microsoft.com/portal/register-app to generate manually an App ID and App Secret.\n` ); - if (!appId) { + if (appId !== undefined) { process.stdout.write('Generated Application Id (MARKETPLACE_ID):'); appId = scanf('%s').replace(/(\n|\r)+$/, ''); } @@ -194,7 +189,7 @@ generate manually an App ID and App Secret.\n` private static retrieveAppPassword() { let appPassword = GBConfigService.get('MARKETPLACE_SECRET'); - if (!appPassword) { + if (appPassword !== undefined) { process.stdout.write('Generated Password (MARKETPLACE_SECRET):'); appPassword = scanf('%s').replace(/(\n|\r)+$/, ''); } @@ -207,7 +202,7 @@ generate manually an App ID and App Secret.\n` const map = {}; let index = 1; list.forEach(element => { - console.log(`${index}: ${element.displayName} (${element.subscriptionId})`); + GBLog.info(`${index}: ${element.displayName} (${element.subscriptionId})`); map[index++] = element; }); let subscriptionIndex; @@ -222,8 +217,8 @@ generate manually an App ID and App Secret.\n` private static retrieveLocation() { let location = GBConfigService.get('CLOUD_LOCATION'); - if (!location) { - process.stdout.write('CLOUD_LOCATION (eg. \'westus\'):'); + if (location !== undefined) { + process.stdout.write('CLOUD_LOCATION (eg. westus):'); location = scanf('%s'); } diff --git a/packages/azuredeployer.gbapp/index.ts b/packages/azuredeployer.gbapp/index.ts index 905b43cd..13563ab1 100644 --- a/packages/azuredeployer.gbapp/index.ts +++ b/packages/azuredeployer.gbapp/index.ts @@ -36,19 +36,27 @@ 'use strict'; -import { GBMinInstance, IGBCoreService, IGBPackage } from 'botlib'; +import { GBMinInstance, IGBCoreService, IGBPackage, GBLog, GBDialogStep } from 'botlib'; import { Sequelize } from 'sequelize-typescript'; export class GBAzureDeployerPackage implements IGBPackage { public sysPackages: IGBPackage[] = undefined; - public getDialogs(min: GBMinInstance) {} - - public loadPackage(core: IGBCoreService, sequelize: Sequelize): void {} - - public unloadPackage(core: IGBCoreService): void {} - - public loadBot(min: GBMinInstance): void {} - - public unloadBot(min: GBMinInstance): void {} - public onNewSession(min: GBMinInstance, step: GBDialogStep): void {} + public getDialogs(min: GBMinInstance) { + GBLog.verbose(`getDialogs called.`); + } + public loadPackage(core: IGBCoreService, sequelize: Sequelize): void { + GBLog.verbose(`loadPackage called.`); + } + public unloadPackage(core: IGBCoreService): void { + GBLog.verbose(`unloadPackage called.`); + } + public loadBot(min: GBMinInstance): void { + GBLog.verbose(`loadBot called.`); + } + public unloadBot(min: GBMinInstance): void { + GBLog.verbose(`unloadBot called.`); + } + public onNewSession(min: GBMinInstance, step: GBDialogStep): void { + GBLog.verbose(`onNewSession called.`); + } } diff --git a/packages/azuredeployer.gbapp/services/AzureDeployerService.ts b/packages/azuredeployer.gbapp/services/AzureDeployerService.ts index c0584c00..735b3c27 100644 --- a/packages/azuredeployer.gbapp/services/AzureDeployerService.ts +++ b/packages/azuredeployer.gbapp/services/AzureDeployerService.ts @@ -37,14 +37,14 @@ 'use strict'; import { CognitiveServicesManagementClient } from 'azure-arm-cognitiveservices'; -import { CognitiveServicesAccount } from 'azure-arm-cognitiveservices/lib/models'; import { ResourceManagementClient, SubscriptionClient } from 'azure-arm-resource'; import { SearchManagementClient } from 'azure-arm-search'; import { SqlManagementClient } from 'azure-arm-sql'; import { WebSiteManagementClient } from 'azure-arm-website'; +//tslint:disable-next-line:no-submodule-imports import { AppServicePlan } from 'azure-arm-website/lib/models'; -import { IGBInstallationDeployer, IGBInstance } from 'botlib'; -import { HttpMethods, ServiceClient, WebResource } from 'ms-rest-js'; +import { GBLog, IGBInstallationDeployer, IGBInstance } from 'botlib'; +import { HttpHeaders, HttpMethods, ServiceClient, WebResource } from 'ms-rest-js'; import { GBAdminService } from '../../../packages/admin.gbapp/services/GBAdminService'; import { GBCorePackage } from '../../../packages/core.gbapp'; import { GBConfigService } from '../../../packages/core.gbapp/services/GBConfigService'; @@ -52,10 +52,15 @@ import { GBDeployer } from '../../../packages/core.gbapp/services/GBDeployer'; const Spinner = require('cli-spinner').Spinner; -const UrlJoin = require('url-join'); +// tslint:disable-next-line:no-submodule-imports +import { CognitiveServicesAccount } from 'azure-arm-cognitiveservices/lib/models'; +import 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'); +/** + * Deployer for Microsoft cloud. + */ export class AzureDeployerService implements IGBInstallationDeployer { public apiVersion = '2017-12-01'; public defaultEndPoint = 'http://localhost:4242'; @@ -81,10 +86,10 @@ export class AzureDeployerService implements IGBInstallationDeployer { const req = new WebResource(); req.method = verb; req.url = url; - req.headers = {}; + req.headers = {}; req.headers['Content-Type'] = 'application/json'; req.headers['accept-language'] = '*'; - req.headers.Authorization = 'Bearer ' + accessToken; + req.headers['Authorization'] = `Bearer ${accessToken}`; req.body = body; return req; @@ -192,8 +197,8 @@ export class AzureDeployerService implements IGBInstallationDeployer { } ], scoringProfiles: [], - defaultScoringProfile: null, - corsOptions: null + defaultScoringProfile: undefined, + corsOptions: undefined }; } @@ -218,7 +223,7 @@ export class AzureDeployerService implements IGBInstallationDeployer { const url = UrlJoin(baseUrl, query); const req = AzureDeployerService.createRequestObject(url, accessToken, 'PATCH', JSON.stringify(parameters)); const res = await httpClient.sendRequest(req); - if (!(res.bodyAsJson as any).id) { + if (!(res['bodyAsJson'] as any).id) { throw res.bodyAsText; } GBLog.info(`Bot proxy updated at: ${endpoint}.`); @@ -250,11 +255,9 @@ export class AzureDeployerService implements IGBInstallationDeployer { const culture = 'en-us'; this.initServices(credentials, subscriptionId); - const spinner = new Spinner('%s'); spinner.start(); spinner.setSpinnerString('|/-\\'); - let keys: any; const name = instance.botId; @@ -313,8 +316,6 @@ export class AzureDeployerService implements IGBInstallationDeployer { instance.textAnalyticsEndpoint = textAnalytics.endpoint; instance.textAnalyticsKey = keys.key1; - // TODO: Check quotes being added when NLP field is filled. - GBLog.info(`Deploying NLP...`); const nlp = await this.createNLP(name, `${name}-nlp`, instance.cloudLocation); keys = await this.cognitiveClient.accounts.listKeys(name, nlp.name); @@ -358,7 +359,7 @@ export class AzureDeployerService implements IGBInstallationDeployer { appPassword: string, subscriptionId: string ) { - const instance = {}; + const instance = {}; instance.botId = title; instance.cloudUsername = username; @@ -371,10 +372,9 @@ export class AzureDeployerService implements IGBInstallationDeployer { instance.adminPass = GBAdminService.getRndPassword(); const credentials = await GBAdminService.getADALCredentialsFromUsername(username, password); - this.deployFarm(`http://${instance.botId}.azurewebsites.net`, instance, credentials, subscriptionId); - - // TODO: Copy github to webapp. - //const status = await git.status(); + // tslint:disable-next-line:no-http-string + const url = `http://${instance.botId}.azurewebsites.net`; + this.deployFarm(url, instance, credentials, subscriptionId); } private initServices(credentials: any, subscriptionId: string) { @@ -398,21 +398,16 @@ export class AzureDeployerService implements IGBInstallationDeployer { } private async registerProviders(subscriptionId, baseUrl, accessToken) { - const query = `subscriptions/${subscriptionId}/providers/${ - this.provider - }/register?api-version=2018-02-01`; + const query = `subscriptions/${subscriptionId}/providers/${this.provider}/register?api-version=2018-02-01`; const requestUrl = UrlJoin(baseUrl, query); const req = new WebResource(); req.method = 'POST'; req.url = requestUrl; - req.headers = {}; + req.headers = {}; req.headers['Content-Type'] = 'application/json; charset=utf-8'; req.headers['accept-language'] = '*'; - req.headers.Authorization = 'Bearer ' + accessToken; - - const httpClient = new ServiceClient(); - // TODO: Check res for error. + req.headers['Authorization'] = `Bearer ${accessToken}`; } /** @@ -469,7 +464,7 @@ export class AzureDeployerService implements IGBInstallationDeployer { let url = UrlJoin(baseUrl, query); let req = AzureDeployerService.createRequestObject(url, accessToken, 'PUT', JSON.stringify(parameters)); const res = await httpClient.sendRequest(req); - if (!(res.bodyAsJson as any).id) { + if (!(res['bodyAsJson'] as any).id) { reject(res.bodyAsText); return; @@ -477,13 +472,14 @@ export class AzureDeployerService implements IGBInstallationDeployer { setTimeout(async () => { try { + //tslint:disable-next-line:max-line-length query = `subscriptions/${subscriptionId}/resourceGroups/${group}/providers/Microsoft.BotService/botServices/${botId}/channels/WebChatChannel/listChannelWithKeys?api-version=${ this.apiVersion }`; url = UrlJoin(baseUrl, query); req = AzureDeployerService.createRequestObject(url, accessToken, 'GET', JSON.stringify(parameters)); const resChannel = await httpClient.sendRequest(req); - const key = (resChannel.bodyAsJson as any).properties.properties.sites[0].key; + const key = (resChannel['bodyAsJson'] as any).properties.properties.sites[0].key; instance.webchatKey = key; resolve(instance); } catch (error) { @@ -507,8 +503,8 @@ export class AzureDeployerService implements IGBInstallationDeployer { }; const body = JSON.stringify(parameters); - const apps = await this.makeNlpRequest(location, authoringKey, null, 'GET', 'apps'); - const app = (apps.bodyAsJson as any).filter(x => x.name == name)[0]; + const apps = await this.makeNlpRequest(location, authoringKey, undefined, 'GET', 'apps'); + const app = (apps['bodyAsJson'] as any).filter(x => x.name === name)[0]; let id: string; if (!app) { const res = await this.makeNlpRequest(location, authoringKey, body, 'POST', 'apps'); @@ -530,7 +526,7 @@ export class AzureDeployerService implements IGBInstallationDeployer { const req = new WebResource(); req.method = method; req.url = `https://${location}.api.cognitive.microsoft.com/luis/api/v2.0/${resource}`; - req.headers = {}; + req.headers = {}; req.headers['Content-Type'] = 'application/json'; req.headers['accept-language'] = '*'; req.headers['Ocp-Apim-Subscription-Key'] = authoringKey; diff --git a/packages/console.gblib/index.ts b/packages/console.gblib/index.ts index 1ee62f9a..b76df96d 100644 --- a/packages/console.gblib/index.ts +++ b/packages/console.gblib/index.ts @@ -36,28 +36,33 @@ 'use strict'; -const UrlJoin = require('url-join'); +import UrlJoin = require('url-join'); -import { GBMinInstance, IGBCoreService, IGBPackage } from 'botlib'; +import { GBMinInstance, IGBCoreService, IGBPackage, GBLog, GBDialogStep } from 'botlib'; import { Sequelize } from 'sequelize-typescript'; import { ConsoleDirectLine } from './services/ConsoleDirectLine'; export class GBConsolePackage implements IGBPackage { - public sysPackages: IGBPackage[] = undefined; public channel: ConsoleDirectLine; - public getDialogs(min: GBMinInstance) {} - - public loadPackage(core: IGBCoreService, sequelize: Sequelize): void {} - - public unloadPackage(core: IGBCoreService): void {} + public getDialogs(min: GBMinInstance) { + GBLog.verbose(`getDialogs called.`); + } + public loadPackage(core: IGBCoreService, sequelize: Sequelize): void { + GBLog.verbose(`loadPackage called.`); + } + public unloadPackage(core: IGBCoreService): void { + GBLog.verbose(`unloadPackage called.`); + } + public unloadBot(min: GBMinInstance): void { + GBLog.verbose(`unloadBot called.`); + } + public onNewSession(min: GBMinInstance, step: GBDialogStep): void { + GBLog.verbose(`onNewSession called.`); + } public loadBot(min: GBMinInstance): void { this.channel = new ConsoleDirectLine(min.instance.webchatKey); } - - public unloadBot(min: GBMinInstance): void {} - - public onNewSession(min: GBMinInstance, step: GBDialogStep): void {} } diff --git a/packages/console.gblib/services/ConsoleDirectLine.ts b/packages/console.gblib/services/ConsoleDirectLine.ts index 56be12e8..9846e1c2 100644 --- a/packages/console.gblib/services/ConsoleDirectLine.ts +++ b/packages/console.gblib/services/ConsoleDirectLine.ts @@ -1,50 +1,58 @@ const Swagger = require('swagger-client'); const rp = require('request-promise'); -import { GBService } from 'botlib'; +import { GBLog, GBService } from 'botlib'; +/** + * Bot simulator in terminal window. + */ export class ConsoleDirectLine extends GBService { - public pollInterval = 1000; - public directLineSecret = ''; - public directLineClientName = 'DirectLineClient'; - public directLineSpecUrl = 'https://docs.botframework.com/en-us/restapi/directline3/swagger.json'; + public pollInterval: number = 1000; + public directLineSecret: string = ''; + public directLineClientName: string = 'DirectLineClient'; + public directLineSpecUrl: string = 'https://docs.botframework.com/en-us/restapi/directline3/swagger.json'; - constructor(directLineSecret) { + constructor(directLineSecret: string) { super(); this.directLineSecret = directLineSecret; - + // tslint:disable-next-line:no-unsafe-any const directLineClient = rp(this.directLineSpecUrl) - .then(function(spec) { + .then((spec: string) => { + // tslint:disable-next-line:no-unsafe-any return new Swagger({ spec: JSON.parse(spec.trim()), usePromise: true }); }) - .then(function(client) { + .then(client => { + // tslint:disable-next-line:no-unsafe-any client.clientAuthorizations.add( 'AuthorizationBotConnector', - new Swagger.ApiKeyAuthorization('Authorization', 'Bearer ' + directLineSecret, 'header') + // tslint:disable-next-line:no-unsafe-any + new Swagger.ApiKeyAuthorization('Authorization', `Bearer ${directLineSecret}`, 'header') ); return client; }) - .catch(function(err) { - console.error('Error initializing DirectLine client', err); + .catch(err => { + GBLog.error(`Error initializing DirectLine client ${err}`); }); - // TODO: Remove *this* issue. const _this_ = this; + // tslint:disable-next-line:no-unsafe-any directLineClient.then(client => { + // tslint:disable-next-line:no-unsafe-any client.Conversations.Conversations_StartConversation() - .then(function(response) { + .then(response => { + // tslint:disable-next-line:no-unsafe-any return response.obj.conversationId; }) - .then(function(conversationId) { + .then(conversationId => { _this_.sendMessagesFromConsole(client, conversationId); _this_.pollMessages(client, conversationId); }) - .catch(function(err) { - console.error('Error starting conversation', err); + .catch(err => { + GBLog.error(`Error starting conversation ${err}`); }); }); } @@ -54,14 +62,16 @@ export class ConsoleDirectLine extends GBService { process.stdin.resume(); const stdin = process.stdin; process.stdout.write('Command> '); - stdin.addListener('data', function(e) { - const input = e.toString().trim(); - if (input) { + stdin.addListener('data', e => { + // tslint:disable-next-line:no-unsafe-any + const input: string = e.toString().trim(); + if (input !== undefined) { // exit if (input.toLowerCase() === 'exit') { return process.exit(); } + // tslint:disable-next-line:no-unsafe-any client.Conversations.Conversations_PostActivity({ conversationId: conversationId, activity: { @@ -73,8 +83,8 @@ export class ConsoleDirectLine extends GBService { name: _this_.directLineClientName } } - }).catch(function(err) { - console.error('Error sending message:', err); + }).catch(err => { + GBLog.error(`Error sending message: ${err}`); }); process.stdout.write('Command> '); @@ -82,71 +92,85 @@ export class ConsoleDirectLine extends GBService { }); } - /** TBD: Poll Messages from conversation using DirectLine client */ public pollMessages(client, conversationId) { const _this_ = this; - console.log('Starting polling message for conversationId: ' + conversationId); - let watermark = null; - setInterval(function() { + GBLog.info(`Starting polling message for conversationId: ${conversationId}`); + let watermark; + setInterval(() => { + // tslint:disable-next-line:no-unsafe-any client.Conversations.Conversations_GetActivities({ conversationId: conversationId, watermark: watermark }) - .then(function(response) { + .then(response => { + // tslint:disable-next-line:no-unsafe-any watermark = response.obj.watermark; + // tslint:disable-next-line:no-unsafe-any return response.obj.activities; }) .then(_this_.printMessages, _this_.directLineClientName); + // tslint:disable-next-line:align }, this.pollInterval); } + // tslint:disable:no-unsafe-any public printMessages(activities, directLineClientName) { if (activities && activities.length) { // ignore own messages - activities = activities.filter(function(m) { + activities = activities.filter(m => { return m.from.id !== directLineClientName; }); if (activities.length) { // print other messages activities.forEach(activity => { - console.log(activity.text); + GBLog.info(activity.text); + // tslint:disable-next-line:align }, this); process.stdout.write('Command> '); } } } + // tslint:enable:no-unsafe-any + // tslint:disable:no-unsafe-any public printMessage(activity) { if (activity.text) { - console.log(activity.text); + GBLog.info(activity.text); } if (activity.attachments) { - activity.attachments.forEach(function(attachment) { + activity.attachments.forEach(attachment => { switch (attachment.contentType) { case 'application/vnd.microsoft.card.hero': this.renderHeroCard(attachment); break; case 'image/png': - console.log('Opening the requested image ' + attachment.contentUrl); + GBLog.info(`Opening the requested image ${attachment.contentUrl}`); open(attachment.contentUrl); break; + + default: + GBLog.info(`Unknown contentType: ${attachment.contentType}`); + break; } }); } } + // tslint:enable:no-unsafe-any + // tslint:disable:no-unsafe-any public renderHeroCard(attachment) { const width = 70; - const contentLine = function(content) { - return ' '.repeat((width - content.length) / 2) + content + ' '.repeat((width - content.length) / 2); + const contentLine = content => { + return `${' '.repeat((width - content.length) / 2)}content${' '.repeat((width - content.length) / 2)}`; }; - console.log('/' + '*'.repeat(width + 1)); - console.log('*' + contentLine(attachment.content.title) + '*'); - console.log('*' + ' '.repeat(width) + '*'); - console.log('*' + contentLine(attachment.content.text) + '*'); - console.log('*'.repeat(width + 1) + '/'); + GBLog.info(`/${'*'.repeat(width + 1)}`); + GBLog.info(`*${contentLine(attachment.content.title)}*`); + GBLog.info(`*${' '.repeat(width)}*`); + GBLog.info(`*${contentLine(attachment.content.text)}*`); + GBLog.info(`${'*'.repeat(width + 1)}/`); } + // tslint:enable:no-unsafe-any } diff --git a/packages/core.gbapp/index.ts b/packages/core.gbapp/index.ts index 3e73cba4..94f227cb 100644 --- a/packages/core.gbapp/index.ts +++ b/packages/core.gbapp/index.ts @@ -36,9 +36,9 @@ 'use strict'; -const UrlJoin = require('url-join'); +import UrlJoin = require('url-join'); -import { GBMinInstance, IGBPackage } from 'botlib'; +import { GBMinInstance, IGBPackage, GBLog, GBDialogStep } from 'botlib'; import { IGBCoreService } from 'botlib'; import { Sequelize } from 'sequelize-typescript'; @@ -49,19 +49,25 @@ import { GuaribasChannel, GuaribasException, GuaribasInstance, GuaribasPackage } export class GBCorePackage implements IGBPackage { public static CurrentEngineName = 'guaribas-1.0.0'; public sysPackages: IGBPackage[] = undefined; - public getDialogs(min: GBMinInstance) {} - public loadPackage(core: IGBCoreService, sequelize: Sequelize): void { core.sequelize.addModels([GuaribasInstance, GuaribasPackage, GuaribasChannel, GuaribasException]); } - public unloadPackage(core: IGBCoreService): void {} + public getDialogs(min: GBMinInstance) { + GBLog.verbose(`getDialogs called.`); + } + public unloadPackage(core: IGBCoreService): void { + GBLog.verbose(`unloadPackage called.`); + } + public unloadBot(min: GBMinInstance): void { + GBLog.verbose(`unloadBot called.`); + } + public onNewSession(min: GBMinInstance, step: GBDialogStep): void { + GBLog.verbose(`onNewSession called.`); + } public loadBot(min: GBMinInstance): void { WelcomeDialog.setup(min.bot, min); WhoAmIDialog.setup(min.bot, min); } - - public unloadBot(min: GBMinInstance): void {} - public onNewSession(min: GBMinInstance, step: GBDialogStep): void {} } diff --git a/packages/core.gbapp/services/GBAPIService.ts b/packages/core.gbapp/services/GBAPIService.ts index dccd0f39..03ddc01b 100644 --- a/packages/core.gbapp/services/GBAPIService.ts +++ b/packages/core.gbapp/services/GBAPIService.ts @@ -34,12 +34,12 @@ import { TurnContext } from 'botbuilder'; import { WaterfallStepContext } from 'botbuilder-dialogs'; -import { GBMinInstance } from 'botlib'; +import { GBLog, GBMinInstance } from 'botlib'; import * as request from 'request-promise-native'; +import UrlJoin = require('url-join'); import { GBAdminService } from '../../admin.gbapp/services/GBAdminService'; import { AzureDeployerService } from '../../azuredeployer.gbapp/services/AzureDeployerService'; import { GBDeployer } from './GBDeployer'; -const UrlJoin = require('url-join'); /** * BASIC system class for extra manipulation of bot behaviour. @@ -64,14 +64,14 @@ class SysClass { } public async createABotFarmUsing( - botId, - username, - password, - location, - nlpAuthoringKey, - appId, - appPassword, - subscriptionId + botId: string, + username: string, + password: string, + location: string, + nlpAuthoringKey: string, + appId: string, + appPassword: string, + subscriptionId: string ) { const service = new AzureDeployerService(this.deployer); await service.deployToCloud( @@ -91,7 +91,7 @@ class SysClass { */ public async sendEmail(to, subject, body) { // tslint:disable-next-line:no-console - console.log(`[E-mail]: to:${to}, subject: ${subject}, body: ${body}.`); + GBLog.info(`[E-mail]: to:${to}, subject: ${subject}, body: ${body}.`); } /** diff --git a/packages/core.gbapp/services/GBConfigService.ts b/packages/core.gbapp/services/GBConfigService.ts index e3e58e0e..0b13d92e 100644 --- a/packages/core.gbapp/services/GBConfigService.ts +++ b/packages/core.gbapp/services/GBConfigService.ts @@ -30,8 +30,8 @@ | | \*****************************************************************************/ - import * as fs from 'fs'; +import { GBLog } from 'botlib'; /** * @fileoverview General Bots server core. @@ -49,7 +49,7 @@ export class GBConfigService { overrideProcessEnv: true }); } catch (e) { - console.error(e.message); + GBLog.error(e.message); process.exit(3); } } diff --git a/packages/core.gbapp/services/GBConversationalService.ts b/packages/core.gbapp/services/GBConversationalService.ts index 5d4e501a..e5e4c184 100644 --- a/packages/core.gbapp/services/GBConversationalService.ts +++ b/packages/core.gbapp/services/GBConversationalService.ts @@ -63,7 +63,7 @@ export class GBConversationalService implements IGBConversationalService { return step.context.activity.locale; } - public async sendEvent(step: GBDialogStep, name: string, value: any): Promise { + public async sendEvent(step: GBDialogStep, name: string, value: Object): Promise { if (step.context.activity.channelId === 'webchat') { const msg = MessageFactory.text(''); msg.value = value; diff --git a/packages/core.gbapp/services/GBDeployer.ts b/packages/core.gbapp/services/GBDeployer.ts index c5dd11f0..8d1d70b8 100644 --- a/packages/core.gbapp/services/GBDeployer.ts +++ b/packages/core.gbapp/services/GBDeployer.ts @@ -36,16 +36,15 @@ 'use strict'; - const Path = require('path'); -const UrlJoin = require('url-join'); +import UrlJoin = require('url-join'); const Fs = require('fs'); const WaitUntil = require('wait-until'); const express = require('express'); const child_process = require('child_process'); const graph = require('@microsoft/microsoft-graph-client'); -import { GBMinInstance, IGBCoreService, IGBInstance } from 'botlib'; +import { GBMinInstance, IGBCoreService, IGBInstance, GBLog } from 'botlib'; import { GBError, IGBPackage } from 'botlib'; import { AzureSearch } from 'pragmatismo-io-framework'; import { AzureDeployerService } from '../../azuredeployer.gbapp/services/AzureDeployerService'; diff --git a/packages/core.gbapp/services/GBImporterService.ts b/packages/core.gbapp/services/GBImporterService.ts index 9464d60b..515296dd 100644 --- a/packages/core.gbapp/services/GBImporterService.ts +++ b/packages/core.gbapp/services/GBImporterService.ts @@ -36,10 +36,10 @@ 'use strict'; -const UrlJoin = require('url-join'); import { IGBCoreService, IGBInstance } from 'botlib'; import fs = require('fs'); import path = require('path'); +import UrlJoin = require('url-join'); import { SecService } from '../../security.gblib/services/SecService'; import { GuaribasInstance } from '../models/GBModel'; diff --git a/packages/core.gbapp/services/GBMinService.ts b/packages/core.gbapp/services/GBMinService.ts index 862c54f5..fa6471c6 100644 --- a/packages/core.gbapp/services/GBMinService.ts +++ b/packages/core.gbapp/services/GBMinService.ts @@ -37,7 +37,7 @@ 'use strict'; const { DialogSet, TextPrompt } = require('botbuilder-dialogs'); -const UrlJoin = require('url-join'); +import UrlJoin = require('url-join'); const express = require('express'); const request = require('request-promise-native'); diff --git a/packages/core.gbapp/services/GBVMService.ts b/packages/core.gbapp/services/GBVMService.ts index 35e477c8..715fab13 100644 --- a/packages/core.gbapp/services/GBVMService.ts +++ b/packages/core.gbapp/services/GBVMService.ts @@ -41,11 +41,11 @@ import { TSCompiler } from './TSCompiler'; const walkPromise = require('walk-promise'); const vm = require('vm'); -const UrlJoin = require('url-join'); +import UrlJoin = require('url-join'); +import DialogClass from './GBAPIService'; const vb2ts = require('vbscript-to-typescript/dist/converter'); const beautify = require('js-beautify').js; - /** * @fileoverview Virtualization services for emulation of BASIC. * This alpha version is using a hack in form of converter to @@ -249,7 +249,7 @@ export class GBVMService extends GBService { min.dialogs.add( new WaterfallDialog('/hear', [ async step => { - step.activeDialog.state.cbId = step.options.id; + step.activeDialog.state.cbId = step.options['id']; return await step.prompt('textPrompt', {}); }, @@ -259,7 +259,7 @@ export class GBVMService extends GBService { const cbId = step.activeDialog.state.cbId; const cb = min.cbMap[cbId]; - cb.bind({ step: step: GBDialogStep, context: step.context }); // TODO: Necessary or min.sandbox? + cb.bind({ step: step, context: step.context }); // TODO: Necessary or min.sandbox? await step.endDialog(); diff --git a/packages/core.gbapp/services/TSCompiler.ts b/packages/core.gbapp/services/TSCompiler.ts index c1cc88da..ccb991ab 100644 --- a/packages/core.gbapp/services/TSCompiler.ts +++ b/packages/core.gbapp/services/TSCompiler.ts @@ -38,7 +38,6 @@ import * as ts from 'typescript'; - export class TSCompiler { private static shouldIgnoreError(diagnostic) { diff --git a/packages/customer-satisfaction.gbapp/dialogs/FeedbackDialog.ts b/packages/customer-satisfaction.gbapp/dialogs/FeedbackDialog.ts index 96cdd6e7..e66d26e7 100644 --- a/packages/customer-satisfaction.gbapp/dialogs/FeedbackDialog.ts +++ b/packages/customer-satisfaction.gbapp/dialogs/FeedbackDialog.ts @@ -86,7 +86,7 @@ export class FeedbackDialog extends IGBDialog { const locale = step.context.activity.locale; await step.context.sendActivity(Messages[locale].about_suggestions); - step.activeDialog.state.cbId = step.options['id']; + step.activeDialog.state.cbId = step.options.id; return await step.prompt('textPrompt', Messages[locale].what_about_service); }, diff --git a/packages/customer-satisfaction.gbapp/dialogs/QualityDialog.ts b/packages/customer-satisfaction.gbapp/dialogs/QualityDialog.ts index 21b8bc01..02eab81e 100644 --- a/packages/customer-satisfaction.gbapp/dialogs/QualityDialog.ts +++ b/packages/customer-satisfaction.gbapp/dialogs/QualityDialog.ts @@ -44,7 +44,6 @@ import { GBMinInstance } from 'botlib'; import { CSService } from '../services/CSService'; import { Messages } from '../strings'; - export class QualityDialog extends IGBDialog { /** * Setup dialogs flows and define services call. diff --git a/packages/customer-satisfaction.gbapp/index.ts b/packages/customer-satisfaction.gbapp/index.ts index 42898ba7..3850b5d9 100644 --- a/packages/customer-satisfaction.gbapp/index.ts +++ b/packages/customer-satisfaction.gbapp/index.ts @@ -36,8 +36,8 @@ 'use strict'; -const UrlJoin = require('url-join'); -import { GBMinInstance, IGBCoreService, IGBPackage } from 'botlib'; +import { GBMinInstance, IGBCoreService, IGBPackage, GBLog, GBDialogStep } from 'botlib'; +import UrlJoin = require('url-join'); import { FeedbackDialog } from './dialogs/FeedbackDialog'; import { QualityDialog } from './dialogs/QualityDialog'; import { GuaribasQuestionAlternate } from './models/index'; @@ -46,16 +46,24 @@ import { Sequelize } from 'sequelize-typescript'; export class GBCustomerSatisfactionPackage implements IGBPackage { public sysPackages: IGBPackage[] = undefined; - public getDialogs(min: GBMinInstance) {} + public getDialogs(min: GBMinInstance) { + GBLog.verbose(`getDialogs called.`); + } + public unloadPackage(core: IGBCoreService): void { + GBLog.verbose(`unloadPackage called.`); + } + public unloadBot(min: GBMinInstance): void { + GBLog.verbose(`unloadBot called.`); + } + public onNewSession(min: GBMinInstance, step: GBDialogStep): void { + GBLog.verbose(`onNewSession called.`); + } public loadPackage(core: IGBCoreService, sequelize: Sequelize): void { core.sequelize.addModels([GuaribasQuestionAlternate]); } - public unloadPackage(core: IGBCoreService): void {} public loadBot(min: GBMinInstance): void { FeedbackDialog.setup(min.bot, min); QualityDialog.setup(min.bot, min); } - public unloadBot(min: GBMinInstance): void {} - public onNewSession(min: GBMinInstance, step: GBDialogStep): void {} } diff --git a/packages/kb.gbapp/dialogs/AskDialog.ts b/packages/kb.gbapp/dialogs/AskDialog.ts index fc95465d..5be2cace 100644 --- a/packages/kb.gbapp/dialogs/AskDialog.ts +++ b/packages/kb.gbapp/dialogs/AskDialog.ts @@ -38,14 +38,12 @@ import { BotAdapter } from 'botbuilder'; import { WaterfallDialog } from 'botbuilder-dialogs'; -import { IGBDialog } from 'botlib'; +import { IGBDialog, GBLog } from 'botlib'; import { GBMinInstance } from 'botlib'; import { AzureText } from 'pragmatismo-io-framework'; import { Messages } from '../strings'; import { KBService } from './../services/KBService'; - - export class AskDialog extends IGBDialog { /** * Setup dialogs flows and define services call. @@ -59,13 +57,13 @@ export class AskDialog extends IGBDialog { min.dialogs.add( new WaterfallDialog('/answerEvent', [ async step => { - if (step.options && step.options.questionId) { - const question = await service.getQuestionById(min.instance.instanceId, step.options.questionId); + if (step.options && step.options['questionId']) { + const question = await service.getQuestionById(min.instance.instanceId, step.options['questionId']); const answer = await service.getAnswerById(min.instance.instanceId, question.answerId); // Sends the answer to all outputs, including projector. - await service.sendAnswer(min.conversationalService, step: GBDialogStep, answer); + await service.sendAnswer(min.conversationalService, step, answer); await step.replaceDialog('/ask', { isReturning: true }); } @@ -79,7 +77,7 @@ export class AskDialog extends IGBDialog { new WaterfallDialog('/answer', [ async step => { const user = await min.userProfile.get(step.context, {}); - let text = step.options.query; + let text = step.options['query']; if (!text) { throw new Error(`/answer being called with no args query text.`); } @@ -88,13 +86,13 @@ export class AskDialog extends IGBDialog { // Stops any content on projector. - await min.conversationalService.sendEvent(step: GBDialogStep, 'stop', null); + await min.conversationalService.sendEvent(step, 'stop', null); // Handle extra text from FAQ. - if (step.options && step.options.query) { - text = step.options.query; - } else if (step.options && step.options.fromFaq) { + if (step.options && step.options['query']) { + text = step.options['query']; + } else if (step.options && step.options['fromFaq']) { await step.context.sendActivity(Messages[locale].going_answer); } @@ -126,7 +124,7 @@ export class AskDialog extends IGBDialog { // Sends the answer to all outputs, including projector. - await service.sendAnswer(min.conversationalService, step: GBDialogStep, resultsA.answer); + await service.sendAnswer(min.conversationalService, step, resultsA.answer); // Goes to ask loop, again. @@ -155,11 +153,11 @@ export class AskDialog extends IGBDialog { // Sends the answer to all outputs, including projector. - await service.sendAnswer(min.conversationalService, step: GBDialogStep, resultsB.answer); + await service.sendAnswer(min.conversationalService, step, resultsB.answer); return await step.replaceDialog('/ask', { isReturning: true }); } else { - if (!(await min.conversationalService.routeNLP(step: GBDialogStep, min, text))) { + if (!(await min.conversationalService.routeNLP(step, min, text))) { await step.context.sendActivity(Messages[locale].did_not_find); return await step.replaceDialog('/ask', { isReturning: true }); @@ -183,9 +181,9 @@ export class AskDialog extends IGBDialog { // Three forms of asking. - if (step.options && step.options.firstTime) { + if (step.options && step.options['firstTime'] ) { text = Messages[locale].ask_first_time; - } else if (step.options && step.options.isReturning) { + } else if (step.options && step.options['isReturning']) { text = Messages[locale].anything_else; } else if (user.subjects.length > 0) { text = Messages[locale].which_question; diff --git a/packages/kb.gbapp/dialogs/MenuDialog.ts b/packages/kb.gbapp/dialogs/MenuDialog.ts index 6505ccfe..b020c189 100644 --- a/packages/kb.gbapp/dialogs/MenuDialog.ts +++ b/packages/kb.gbapp/dialogs/MenuDialog.ts @@ -37,7 +37,7 @@ 'use strict'; -const UrlJoin = require('url-join'); +import UrlJoin = require('url-join'); import { BotAdapter, CardFactory, MessageFactory } from 'botbuilder'; import { WaterfallDialog } from 'botbuilder-dialogs'; @@ -63,8 +63,8 @@ export class MenuDialog extends IGBDialog { const locale = step.context.activity.locale; let rootSubjectId = null; - if (step.options && step.options.data) { - const subject = step.options.data; + if (step.options && step.options['data']) { + const subject = step.options ['data']; // If there is a shortcut specified as subject destination, go there. @@ -89,7 +89,7 @@ export class MenuDialog extends IGBDialog { 'menu', user.subjects ); - await min.conversationalService.sendEvent(step: GBDialogStep, 'play', { + await min.conversationalService.sendEvent(step, 'play', { playerType: 'bullet', data: data.slice(0, 10) }); diff --git a/packages/kb.gbapp/index.ts b/packages/kb.gbapp/index.ts index 4f5af31a..628c035e 100644 --- a/packages/kb.gbapp/index.ts +++ b/packages/kb.gbapp/index.ts @@ -36,9 +36,9 @@ 'use strict'; -const UrlJoin = require('url-join'); +import UrlJoin = require('url-join'); -import { GBMinInstance, IGBPackage } from 'botlib'; +import { GBDialogStep, GBLog, GBMinInstance, IGBPackage } from 'botlib'; import { GuaribasAnswer, GuaribasQuestion, GuaribasSubject } from './models/index'; import { IGBCoreService } from 'botlib'; @@ -49,17 +49,25 @@ import { MenuDialog } from './dialogs/MenuDialog'; export class GBKBPackage implements IGBPackage { public sysPackages: IGBPackage[] = undefined; - public getDialogs(min: GBMinInstance) {} + public getDialogs(min: GBMinInstance) { + GBLog.verbose(`getDialogs called.`); + } + public unloadPackage(core: IGBCoreService): void { + GBLog.verbose(`unloadPackage called.`); + } + public unloadBot(min: GBMinInstance): void { + GBLog.verbose(`unloadBot called.`); + } + public onNewSession(min: GBMinInstance, step: GBDialogStep): void { + GBLog.verbose(`onNewSession called.`); + } public loadPackage(core: IGBCoreService, sequelize: Sequelize): void { core.sequelize.addModels([GuaribasAnswer, GuaribasQuestion, GuaribasSubject]); } - public unloadPackage(core: IGBCoreService): void {} public loadBot(min: GBMinInstance): void { AskDialog.setup(min.bot, min); FaqDialog.setup(min.bot, min); MenuDialog.setup(min.bot, min); } - public unloadBot(min: GBMinInstance): void {} - public onNewSession(min: GBMinInstance, step: GBDialogStep): void {} } diff --git a/packages/kb.gbapp/services/KBService.ts b/packages/kb.gbapp/services/KBService.ts index c6ceda5d..70250f14 100644 --- a/packages/kb.gbapp/services/KBService.ts +++ b/packages/kb.gbapp/services/KBService.ts @@ -34,32 +34,38 @@ * @fileoverview Knowledge base services and logic. */ - const Path = require('path'); const Fs = require('fs'); - -const parse = require('bluebird').promisify(require('csv-parse')); -const UrlJoin = require('url-join'); +import UrlJoin = require('url-join'); const marked = require('marked'); const path = require('path'); const asyncPromise = require('async-promises'); const walkPromise = require('walk-promise'); -import { Messages } from '../strings'; +// tslint:disable:no-unsafe-any +const parse = require('bluebird').promisify(require('csv-parse')); +// tslint:enable:no-unsafe-any -import { IGBConversationalService, IGBCoreService, IGBInstance } from 'botlib'; +import { GBDialogStep, GBLog, IGBConversationalService, IGBCoreService, IGBInstance } from 'botlib'; import { AzureSearch } from 'pragmatismo-io-framework'; import { Sequelize } from 'sequelize-typescript'; import { AzureDeployerService } from '../../azuredeployer.gbapp/services/AzureDeployerService'; import { GuaribasPackage } from '../../core.gbapp/models/GBModel'; import { GBDeployer } from '../../core.gbapp/services/GBDeployer'; import { GuaribasAnswer, GuaribasQuestion, GuaribasSubject } from '../models'; +import { Messages } from '../strings'; import { GBConfigService } from './../../core.gbapp/services/GBConfigService'; +/** + * Result for quey on KB data. + */ export class KBServiceSearchResults { public answer: GuaribasAnswer; public questionId: number; } +/** + * All services related to knowledge base management. + */ export class KBService { public sequelize: Sequelize; @@ -68,7 +74,7 @@ export class KBService { } public static getFormattedSubjectItems(subjects: GuaribasSubject[]) { - if (!subjects) { + if (subjects !== null) { return ''; } const out = []; @@ -116,7 +122,7 @@ export class KBService { } }); - if (question) { + if (question !== null) { const answer = await GuaribasAnswer.findOne({ where: { instanceId: instanceId, @@ -127,7 +133,7 @@ export class KBService { return Promise.resolve({ question: question, answer: answer }); } - return Promise.resolve(null); + return Promise.resolve(undefined); } public async addAnswer(obj: GuaribasAnswer): Promise { @@ -157,40 +163,39 @@ export class KBService { query = query.replace('/', ' '); query = query.replace('\\', ' '); - if (subjects) { + if (subjects !== null) { const text = KBService.getSubjectItemsSeparatedBySpaces(subjects); - if (text) { + if (text !== null) { query = `${query} ${text}`; } } query = `${query}&$filter=instanceId eq ${instance.instanceId}`; - try { - if (instance.searchKey && GBConfigService.get('STORAGE_DIALECT') === 'mssql') { - const service = new AzureSearch( - instance.searchKey, - instance.searchHost, - instance.searchIndex, - instance.searchIndexer - ); - const results = await service.search(query); - if (results && results.length > 0 && results[0]['@search.score'] >= searchScore) { - const value = await this.getAnswerById(instance.instanceId, results[0].answerId); - if (value) { - return Promise.resolve({ answer: value, questionId: results[0].questionId }); - } else { - return Promise.resolve({ answer: null, questionId: 0 }); - } - } - } else { - const data = await this.getAnswerByText(instance.instanceId, query); - if (data) { - return Promise.resolve({ answer: data.answer, questionId: data.question.questionId }); + + // tslint:disable:no-unsafe-any + if (instance.searchKey !== null && GBConfigService.get('STORAGE_DIALECT') === 'mssql') { + const service = new AzureSearch( + instance.searchKey, + instance.searchHost, + instance.searchIndex, + instance.searchIndexer + ); + const results = await service.search(query); + + if (results && results.length > 0 && results[0]['@search.score'] >= searchScore) { + const value = await this.getAnswerById(instance.instanceId, results[0].answerId); + if (value !== null) { + return Promise.resolve({ answer: value, questionId: results[0].questionId }); } else { - return Promise.resolve({ answer: null, questionId: 0 }); + return Promise.resolve({ answer: undefined, questionId: 0 }); } } - } catch (reason) { - return Promise.reject(new Error(reason)); + } else { + const data = await this.getAnswerByText(instance.instanceId, query); + if (data) { + return Promise.resolve({ answer: data.answer, questionId: data.question.questionId }); + } else { + return Promise.resolve({ answer: undefined, questionId: 0 }); + } } } @@ -203,14 +208,13 @@ export class KBService { } public async getFaqBySubjectArray(from: string, subjects: any): Promise { - if (subjects) { const where = { from: from, - subject1: null, - subject2: null, - subject3: null, - subject4: null + subject1: undefined, + subject2: undefined, + subject3: undefined, + subject4: undefined }; if (subjects[0]) { @@ -291,13 +295,13 @@ export class KBService { let indexer = 0; subjectArray.forEach(element => { - if (indexer == 0) { + if (indexer === 0) { subject1 = subjectArray[indexer].substring(0, 63); - } else if (indexer == 1) { + } else if (indexer === 1) { subject2 = subjectArray[indexer].substring(0, 63); - } else if (indexer == 2) { + } else if (indexer === 2) { subject3 = subjectArray[indexer].substring(0, 63); - } else if (indexer == 3) { + } else if (indexer === 3) { subject4 = subjectArray[indexer].substring(0, 63); } indexer++; @@ -310,7 +314,7 @@ export class KBService { content: answer, format: format, packageId: packageId, - prevId: lastQuestionId ? lastQuestionId : 0 + prevId: lastQuestionId !== null ? lastQuestionId : 0 }); const question1 = await GuaribasQuestion.create({ @@ -326,7 +330,7 @@ export class KBService { packageId: packageId }); - if (lastAnswer && lastQuestionId) { + if (lastAnswer !== null && lastQuestionId !== 0) { await lastAnswer.update({ nextId: lastQuestionId }); } lastAnswer = answer1; @@ -336,21 +340,21 @@ export class KBService { } else { // Skips the header. - return Promise.resolve(null); + return Promise.resolve(undefined); } }); } public async sendAnswer(conversationalService: IGBConversationalService, step: GBDialogStep, answer: GuaribasAnswer) { if (answer.content.endsWith('.mp4')) { - await conversationalService.sendEvent(step: GBDialogStep, 'play', { + await conversationalService.sendEvent(step, 'play', { playerType: 'video', data: answer.content }); - } else if (answer.content.length > 140 && step.context._activity.channelId === 'webchat') { + } else if (answer.content.length > 140 && step.context.activity.channelId === 'webchat') { const locale = step.context.activity.locale; - await step.context.sendActivity(Messages[locale].will_answer_projector); // TODO: Handle rnd. + await step.context.sendActivity(Messages[locale].will_answer_projector); let html = answer.content; if (answer.format === '.md') { @@ -367,7 +371,7 @@ export class KBService { }); html = marked(answer.content); } - await conversationalService.sendEvent(step: GBDialogStep, 'play', { + await conversationalService.sendEvent(step, 'play', { playerType: 'markdown', data: { content: html, @@ -378,7 +382,7 @@ export class KBService { }); } else { await step.context.sendActivity(answer.content); - await conversationalService.sendEvent(step: GBDialogStep, 'stop', null); + await conversationalService.sendEvent(step, 'stop', undefined); } } @@ -409,12 +413,10 @@ export class KBService { } public async importSubjectFile(packageId: number, filename: string, instance: IGBInstance): Promise { - const subjects = JSON.parse(Fs.readFileSync(filename, 'utf8')); + const subjectsLoaded = JSON.parse(Fs.readFileSync(filename, 'utf8')); const doIt = async (subjects: GuaribasSubject[], parentSubjectId: number) => { return asyncPromise.eachSeries(subjects, async item => { - const mediaFilename = item.id + '.png'; - const value = await GuaribasSubject.create({ internalId: item.id, parentSubjectId: parentSubjectId, @@ -434,7 +436,7 @@ export class KBService { }); }; - return doIt(subjects.children, null); + return doIt(subjectsLoaded.children, undefined); } public async undeployKbFromStorage(instance: IGBInstance, deployer: GBDeployer, packageId: number) { diff --git a/packages/security.gblib/index.ts b/packages/security.gblib/index.ts index 12133320..cd54966f 100644 --- a/packages/security.gblib/index.ts +++ b/packages/security.gblib/index.ts @@ -36,25 +36,32 @@ 'use strict'; -const UrlJoin = require('url-join'); +import UrlJoin = require('url-join'); -import { GBMinInstance, IGBCoreService, IGBPackage } from 'botlib'; +import { GBDialogStep, GBLog, GBMinInstance, IGBCoreService, IGBPackage } from 'botlib'; import { Sequelize } from 'sequelize-typescript'; import { GuaribasGroup, GuaribasUser, GuaribasUserGroup } from './models'; export class GBSecurityPackage implements IGBPackage { public sysPackages: IGBPackage[] = undefined; - public getDialogs(min: GBMinInstance) {} + public getDialogs(min: GBMinInstance) { + GBLog.verbose(`getDialogs called.`); + } + public unloadPackage(core: IGBCoreService): void { + GBLog.verbose(`unloadPackage called.`); + } + public loadBot(min: GBMinInstance): void { + GBLog.verbose(`loadBot called.`); + } + public unloadBot(min: GBMinInstance): void { + GBLog.verbose(`unloadBot called.`); + } + public onNewSession(min: GBMinInstance, step: GBDialogStep): void { + GBLog.verbose(`onNewSession called.`); + } public loadPackage(core: IGBCoreService, sequelize: Sequelize): void { core.sequelize.addModels([GuaribasGroup, GuaribasUser, GuaribasUserGroup]); } - - public unloadPackage(core: IGBCoreService): void {} - - public loadBot(min: GBMinInstance): void {} - - public unloadBot(min: GBMinInstance): void {} - public onNewSession(min: GBMinInstance, step: GBDialogStep): void {} } diff --git a/packages/security.gblib/services/SecService.ts b/packages/security.gblib/services/SecService.ts index 8ced609b..d1fee375 100644 --- a/packages/security.gblib/services/SecService.ts +++ b/packages/security.gblib/services/SecService.ts @@ -1,5 +1,5 @@ const Fs = require('fs'); -const UrlJoin = require('url-join'); +import UrlJoin = require('url-join'); import { GBService, IGBInstance } from 'botlib'; import { GuaribasGroup, GuaribasUser, GuaribasUserGroup } from '../models'; diff --git a/packages/whatsapp.gblib/index.ts b/packages/whatsapp.gblib/index.ts index 6a0ca8a9..fbb4e983 100644 --- a/packages/whatsapp.gblib/index.ts +++ b/packages/whatsapp.gblib/index.ts @@ -36,9 +36,9 @@ 'use strict'; -const UrlJoin = require('url-join'); +import UrlJoin = require('url-join'); -import { GBMinInstance, IGBCoreService, IGBPackage } from 'botlib'; +import { GBMinInstance, IGBCoreService, IGBPackage, GBLog, GBDialogStep } from 'botlib'; import { Sequelize } from 'sequelize-typescript'; import { WhatsappDirectLine } from './services/WhatsappDirectLine'; @@ -47,11 +47,6 @@ export class GBWhatsappPackage implements IGBPackage { public sysPackages: IGBPackage[] = undefined; public channel: WhatsappDirectLine; - public getDialogs(min: GBMinInstance) {} - - public loadPackage(core: IGBCoreService, sequelize: Sequelize): void {} - - public unloadPackage(core: IGBCoreService): void {} public loadBot(min: GBMinInstance): void { // Only loads engine if it is defined on services.json. @@ -68,6 +63,9 @@ export class GBWhatsappPackage implements IGBPackage { } } - public unloadBot(min: GBMinInstance): void {} - public onNewSession(min: GBMinInstance, step: GBDialogStep): void {} + public getDialogs(min: GBMinInstance) {GBLog.verbose (`getDialogs called.`);} + public loadPackage(core: IGBCoreService, sequelize: Sequelize): void {GBLog.verbose (`loadPackage called.`);} + public unloadPackage(core: IGBCoreService): void {GBLog.verbose (`unloadPackage called.`);} + public unloadBot(min: GBMinInstance): void {GBLog.verbose (`unloadBot called.`);} + public onNewSession(min: GBMinInstance, step: GBDialogStep): void {GBLog.verbose (`onNewSession called.`);} } diff --git a/packages/whatsapp.gblib/services/WhatsappDirectLine.ts b/packages/whatsapp.gblib/services/WhatsappDirectLine.ts index befb941c..c3d61aaf 100644 --- a/packages/whatsapp.gblib/services/WhatsappDirectLine.ts +++ b/packages/whatsapp.gblib/services/WhatsappDirectLine.ts @@ -1,8 +1,8 @@ -const UrlJoin = require('url-join'); +import UrlJoin = require('url-join'); const Swagger = require('swagger-client'); const rp = require('request-promise'); -import { GBService } from 'botlib'; +import { GBService, GBLog } from 'botlib'; import * as request from 'request-promise-native'; export class WhatsappDirectLine extends GBService { @@ -67,13 +67,13 @@ export class WhatsappDirectLine extends GBService { const result = await request.post(options); GBLog.info(result); } catch (error) { - GBLog.error('Error initializing 3rd party Whatsapp provider.', error); + GBLog.error(`Error initializing 3rd party Whatsapp provider(1) ${error}`); } return client; }) .catch(err => { - GBLog.error('Error initializing DirectLine client', err); + GBLog.error(`Error initializing 3rd party Whatsapp provider(2) ${err}`); }); } @@ -104,7 +104,7 @@ export class WhatsappDirectLine extends GBService { this.pollMessages(client, conversationId, from, fromName); }) .catch(err => { - console.error('Error starting conversation', err); + GBLog.error(`Error starting conversation ${err}`); }); } else { this.inputMessage(client, conversationId, text, from, fromName); diff --git a/tslint.json b/tslint.json index 7480486c..10699ef4 100644 --- a/tslint.json +++ b/tslint.json @@ -12,6 +12,8 @@ "rulesDirectory": ["node_modules/tslint-microsoft-contrib"], "jsRules": {}, "rules": { + "no-unsafe-any":false, + "newline-per-chained-call": false, "no-floating-promises": false, "no-var-requires": false, "typedef": false, @@ -24,6 +26,7 @@ "no-redundant-jsdoc": false, "no-return-await": false, "prefer-type-cast": false, + "non-literal-fs-path": false, "no-object-literal-type-assertion": false, "no-increment-decrement": false, "no-any": false,