fix(general): tslint being applied in all sources.
This commit is contained in:
parent
2c185177a8
commit
d717de6245
33 changed files with 458 additions and 645 deletions
|
@ -5,4 +5,5 @@
|
|||
"arrowParens": "avoid",
|
||||
"semi": true,
|
||||
"singleQuote": true
|
||||
|
||||
}
|
347
package-lock.json
generated
347
package-lock.json
generated
|
@ -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=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
27
package.json
27
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": {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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.`);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
]));
|
||||
}
|
||||
}
|
|
@ -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');
|
||||
}
|
||||
|
||||
|
|
|
@ -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.`);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 = <HttpHeaders>{};
|
||||
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 = <IGBInstance> {};
|
||||
const instance = <IGBInstance>{};
|
||||
|
||||
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 = <HttpHeaders>{};
|
||||
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 = <HttpHeaders> {};
|
||||
req.headers['Content-Type'] = 'application/json';
|
||||
req.headers['accept-language'] = '*';
|
||||
req.headers['Ocp-Apim-Subscription-Key'] = authoringKey;
|
||||
|
|
|
@ -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 {}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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 {}
|
||||
}
|
||||
|
|
|
@ -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}.`);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -63,7 +63,7 @@ export class GBConversationalService implements IGBConversationalService {
|
|||
return step.context.activity.locale;
|
||||
}
|
||||
|
||||
public async sendEvent(step: GBDialogStep, name: string, value: any): Promise<any> {
|
||||
public async sendEvent(step: GBDialogStep, name: string, value: Object): Promise<any> {
|
||||
if (step.context.activity.channelId === 'webchat') {
|
||||
const msg = MessageFactory.text('');
|
||||
msg.value = value;
|
||||
|
|
|
@ -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';
|
||||
|
|
|
@ -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';
|
||||
|
||||
|
|
|
@ -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');
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -38,7 +38,6 @@
|
|||
|
||||
import * as ts from 'typescript';
|
||||
|
||||
|
||||
export class TSCompiler {
|
||||
|
||||
private static shouldIgnoreError(diagnostic) {
|
||||
|
|
|
@ -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);
|
||||
},
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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 {}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
});
|
||||
|
|
|
@ -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 {}
|
||||
}
|
||||
|
|
|
@ -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<GuaribasAnswer> {
|
||||
|
@ -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<GuaribasQuestion[]> {
|
||||
|
||||
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<any> {
|
||||
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) {
|
||||
|
|
|
@ -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 {}
|
||||
}
|
||||
|
|
|
@ -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';
|
||||
|
|
|
@ -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.`);}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Add table
Reference in a new issue