diff --git a/CHANGELOG.md b/CHANGELOG.md index a33a9e888..fc225a43b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +## v4.9.0 - 2020 - 05 - 11 +## Added +- [main] Exposed `id` field on response object returned from `/v3/conversations` endpoint in PR [2129](https://github.com/microsoft/BotFramework-Emulator/pull/2129) + +- [client] - Bumped `botframework-webchat` to v4.9.0 in PR [2142](https://github.com/microsoft/BotFramework-Emulator/pull/2142) + +## Fixed +- [build] Fixed system dialog on Mac OS warning about being unable to check for malicious code in PR [2135](https://github.com/microsoft/BotFramework-Emulator/pull/2135) +- [client / main] Fixed an issue where starting a conversation via deeplink was initializing the WebSocket server twice and closing previously established connections in PR [2146](https://github.com/microsoft/BotFramework-Emulator/pull/2146) + ## v4.8.1 - 2019 - 03 - 18 ## Fixed - [build] Replaced a missing .icns file that was deleted by mistake in a previous PR. Fixes the app icon on Linux & Mac in PR [2104](https://github.com/microsoft/BotFramework-Emulator/pull/2104) diff --git a/package-lock.json b/package-lock.json index b26941686..5299dedfa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5964,55 +5964,29 @@ } }, "botframework-directlinespeech-sdk": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/botframework-directlinespeech-sdk/-/botframework-directlinespeech-sdk-4.8.0.tgz", - "integrity": "sha512-vPdP86+D7TO7CdmnGmgwueHDzl8IWGQuH3BAeZ60NyjcI8++tni0v8yCd3HKXmOK8TSLPsvfQL6rePjFpVu96w==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/botframework-directlinespeech-sdk/-/botframework-directlinespeech-sdk-4.9.0.tgz", + "integrity": "sha512-w3QfjoPvyQwq46gLdRtoOKz+AXywj3ryJxjVAHwctU41vV31oJnq27tIBpMUR4lZnuZpyb8zqUm/YSgKImtq9A==", "requires": { - "@babel/runtime": "^7.8.4", + "@babel/runtime": "^7.8.7", "abort-controller": "^3.0.0", "abort-controller-es5": "1.0.1", "base64-arraybuffer": "^0.2.0", - "core-js": "^3.5.0", + "core-js": "^3.6.4", "event-as-promise": "^1.0.5", "event-target-shim": "^5.0.1", "event-target-shim-es5": "1.0.1", "math-random": "^1.0.4", - "microsoft-cognitiveservices-speech-sdk": "1.8.1", + "microsoft-cognitiveservices-speech-sdk": "1.10.1", "p-defer": "^3.0.0", "p-defer-es5": "1.0.1", - "web-speech-cognitive-services": "^6.0.0" + "web-speech-cognitive-services": "7.0.0-master.da7babf" }, "dependencies": { "core-js": { - "version": "3.6.4", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", - "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" - }, - "https-proxy-agent": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz", - "integrity": "sha512-+ML2Rbh6DAuee7d07tYGEKOEi2voWPUGan+ExdPbPW6Z3svq+JCqr0v8WmKPOkz1vOVykPCBSuobe7G8GJUtVg==", - "requires": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" - } - }, - "microsoft-cognitiveservices-speech-sdk": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/microsoft-cognitiveservices-speech-sdk/-/microsoft-cognitiveservices-speech-sdk-1.8.1.tgz", - "integrity": "sha512-sXP43LjW+twcz5SZs8i6vg9r2QK6XidArVAQybb4bmNMv+t/U8Dj1CKoy/l83Db0JLdDiU3zXYs+znILAqnn9g==", - "requires": { - "asn1.js-rfc2560": "^5.0.0", - "asn1.js-rfc5280": "^3.0.0", - "https-proxy-agent": "^3.0.0", - "simple-lru-cache": "0.0.2", - "ws": "^7.1.1" - } - }, - "ws": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.3.tgz", - "integrity": "sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ==" + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", + "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" } } }, @@ -6022,27 +5996,28 @@ "integrity": "sha512-rSTywVl5dYzL4FNoK86s9kFPNkRx5iYJi7MAWEaSrhUiDV3KEHX/5VEHLa00d4nzQxC/jI9BqfbqdffpO97KIA==" }, "botframework-webchat": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/botframework-webchat/-/botframework-webchat-4.8.0.tgz", - "integrity": "sha512-6uire/MFNzrtq529HF6GR9O2ePZUmVq/8XnAWVLbGdkD7bA4cz9wZZgmr5lBx6Hg4AA0qntPnJQg5l6IrESpPQ==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/botframework-webchat/-/botframework-webchat-4.9.0.tgz", + "integrity": "sha512-nYbtZubUm28H4OBXA63pgz3Oq7FTeh4QLhAPXEl244WNEFCwJNRw3V6W4xoBqMBKQH6hfowO4dhR/8hkYeN8QQ==", "requires": { - "@babel/runtime": "^7.8.4", + "@babel/runtime": "7.8.7", "adaptivecards": "1.2.5", "botframework-directlinejs": "^0.11.6", - "botframework-directlinespeech-sdk": "4.8.0", - "botframework-webchat-component": "4.8.0", - "botframework-webchat-core": "4.8.0", - "core-js": "^3.5.0", - "markdown-it": "^10.0.0", - "markdown-it-for-inline": "^0.1.1", - "memoize-one": "^5.1.1", - "microsoft-cognitiveservices-speech-sdk": "1.6.0", - "microsoft-speech-browser-sdk": "^0.0.12", - "prop-types": "^15.7.2", - "sanitize-html": "^1.20.0", - "url-search-params-polyfill": "^7.0.0", - "web-speech-cognitive-services": "^6.0.0", - "whatwg-fetch": "^3.0.0" + "botframework-directlinespeech-sdk": "4.9.0", + "botframework-webchat-component": "4.9.0", + "botframework-webchat-core": "4.9.0", + "core-js": "3.6.4", + "markdown-it": "10.0.0", + "markdown-it-attrs": "3.0.2", + "markdown-it-attrs-es5": "1.0.0", + "markdown-it-for-inline": "0.1.1", + "memoize-one": "5.1.1", + "microsoft-cognitiveservices-speech-sdk": "1.10.1", + "prop-types": "15.7.2", + "sanitize-html": "1.20.0", + "url-search-params-polyfill": "8.0.0", + "web-speech-cognitive-services": "7.0.0-master.da7babf", + "whatwg-fetch": "3.0.0" }, "dependencies": { "core-js": { @@ -6065,29 +6040,29 @@ } }, "botframework-webchat-component": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/botframework-webchat-component/-/botframework-webchat-component-4.8.0.tgz", - "integrity": "sha512-wV/rlsRDpf+s18QNt0GryPkpT6VAJdWeIjRWzD5jT5vk1uvGUiY0GQs8sBmlXoZXk47CAklTgU6+dc5h+J7drg==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/botframework-webchat-component/-/botframework-webchat-component-4.9.0.tgz", + "integrity": "sha512-H8zBeADVVhkfY/wSrEJlYD5jr3aJHLDDtAt3h4J7MAvdm1dlVc8NF9n1J+R34sBEIxyCUJ2+QeKe9oO+4Jdcdw==", "requires": { - "botframework-webchat-core": "4.8.0", - "classnames": "^2.2.6", - "event-target-shim": "^5.0.1", + "botframework-webchat-core": "4.9.0", + "classnames": "2.2.6", + "event-target-shim": "5.0.1", "event-target-shim-es5": "1.0.1", - "glamor": "^2.20.40", - "globalize": "^1.4.2", - "markdown-it": "^10.0.0", - "math-random": "^1.0.4", - "memoize-one": "^5.1.1", - "prop-types": "^15.7.2", - "react-dictate-button": "^1.2.2", - "react-film": "^2.0.2", - "react-redux": "^7.1.1", - "react-say": "^2.0.0", - "react-scroll-to-bottom": "~1.3.2", - "redux": "^4.0.4", + "glamor": "2.20.40", + "globalize": "1.4.2", + "markdown-it": "10.0.0", + "math-random": "1.0.4", + "memoize-one": "5.1.1", + "prop-types": "15.7.2", + "react-dictate-button": "1.2.2", + "react-film": "2.0.2", + "react-redux": "7.2.0", + "react-say": "2.0.1-master.c5d6304", + "react-scroll-to-bottom": "1.3.2", + "redux": "4.0.5", "remark": "10.0.1", - "sanitize-html": "^1.20.1", - "simple-update-in": "^2.1.1", + "sanitize-html": "1.20.1", + "simple-update-in": "2.1.1", "strip-markdown": "3.0.4" }, "dependencies": { @@ -6124,6 +6099,23 @@ "symbol-observable": "^1.2.0" } }, + "sanitize-html": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-1.20.1.tgz", + "integrity": "sha512-txnH8TQjaQvg2Q0HY06G6CDJLVYCpbnxrdO0WN8gjCKaU5J0KbyGYhZxx5QJg3WLZ1lB7XU9kDkfrCXUozqptA==", + "requires": { + "chalk": "^2.4.1", + "htmlparser2": "^3.10.0", + "lodash.clonedeep": "^4.5.0", + "lodash.escaperegexp": "^4.1.2", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.mergewith": "^4.6.1", + "postcss": "^7.0.5", + "srcset": "^1.0.0", + "xtend": "^4.0.1" + } + }, "symbol-observable": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", @@ -6132,34 +6124,36 @@ } }, "botframework-webchat-core": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/botframework-webchat-core/-/botframework-webchat-core-4.8.0.tgz", - "integrity": "sha512-UpR5/pl9iSQJDH9BFmDkqWYYw5vabO2AJeT/UtVndZyi+PZMRv/VAnt3+QF5NdB4vtfGSuumRbO7Wt41VWnkAA==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/botframework-webchat-core/-/botframework-webchat-core-4.9.0.tgz", + "integrity": "sha512-4E7OYfsFrzFCuRS8v5d+rZ3Aned9dZqLxA5mX2WJaQ1CrJ/SfnGguF1knYbhowsIuuyuSwiKd+zs8Jj5dmD8xw==", "requires": { - "@babel/runtime": "^7.8.4", - "jsonwebtoken": "^8.5.1", - "math-random": "^1.0.4", + "@babel/runtime": "7.8.7", + "jsonwebtoken": "8.5.1", + "math-random": "1.0.4", "mime": "2.4.4", - "redux": "^4.0.4", - "redux-saga": "1.1.1", - "simple-update-in": "^2.1.1" + "p-defer": "3.0.0", + "p-defer-es5": "1.0.1", + "redux": "4.0.4", + "redux-saga": "1.1.3", + "simple-update-in": "2.1.1" }, "dependencies": { "redux": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.5.tgz", - "integrity": "sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.4.tgz", + "integrity": "sha512-vKv4WdiJxOWKxK0yRoaK3Y4pxxB0ilzVx6dszU2W8wLxlb2yikRph4iV/ymtdJ6ZxpBLFbyrxklnT5yBbQSl3Q==", "requires": { "loose-envify": "^1.4.0", "symbol-observable": "^1.2.0" } }, "redux-saga": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/redux-saga/-/redux-saga-1.1.1.tgz", - "integrity": "sha512-guSnGJ/uEF8yL8Mn4aNa7HxRGCpVUALCkec9iTTD0fOhQqkF6bRQkBLeS+7/cAH3nFnr299bi/DOurTi1apcCA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/redux-saga/-/redux-saga-1.1.3.tgz", + "integrity": "sha512-RkSn/z0mwaSa5/xH/hQLo8gNf4tlvT18qXDNvedihLcfzh+jMchDgaariQoehCpgRltEm4zHKJyINEz6aqswTw==", "requires": { - "@redux-saga/core": "^1.1.1" + "@redux-saga/core": "^1.1.3" } }, "symbol-observable": { @@ -8920,21 +8914,34 @@ } }, "domhandler": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.0.0.tgz", - "integrity": "sha512-eKLdI5v9m67kbXQbJSNn1zjh0SDzvzWVWtX+qEI3eMjZw8daH9k8rlj1FZY9memPwjiskQFbe7vHVVJIAqoEhw==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", "requires": { - "domelementtype": "^2.0.1" + "domelementtype": "1" + }, + "dependencies": { + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + } } }, "domutils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.0.0.tgz", - "integrity": "sha512-n5SelJ1axbO636c2yUtOGia/IcJtVtlhQbFiVDBZHKV5ReJO1ViX7sFEemtuyoAnBxk5meNSYgA8V4s0271efg==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", "requires": { - "dom-serializer": "^0.2.1", - "domelementtype": "^2.0.1", - "domhandler": "^3.0.0" + "dom-serializer": "0", + "domelementtype": "1" + }, + "dependencies": { + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + } } }, "dot-prop": { @@ -12487,14 +12494,38 @@ "integrity": "sha512-a4u9BeERWGu/S8JiWEAQcdrg9v4QArtP9keViQjGMdff20fBdd8waotXaNmODqBe6uZ3Nafi7K/ho4gCQHV3Ig==" }, "htmlparser2": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz", - "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^3.0.0", - "domutils": "^2.0.0", - "entities": "^2.0.0" + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "requires": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } } }, "http-cache-semantics": { @@ -15678,6 +15709,23 @@ } } }, + "markdown-it-attrs": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/markdown-it-attrs/-/markdown-it-attrs-3.0.2.tgz", + "integrity": "sha512-q45vdXU9TSWaHgFkWEFM97YHEoCmOyG9csLLdv3oVC6ARjT77u4wfng9rRtSOMb5UpxzT7zTX5GBbwm15H40dw==" + }, + "markdown-it-attrs-es5": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/markdown-it-attrs-es5/-/markdown-it-attrs-es5-1.0.0.tgz", + "integrity": "sha512-bI1fNQIX/6/a2yw4OYWNkx7R2Zlt8n3IxnbaJhfcDAUimhnJ2eAG9GENqGaePewU8pAWz/hx9AM630WlCY0z5g==", + "requires": { + "@babel/core": "^7", + "@babel/preset-env": "^7", + "babel-loader": "^8", + "webpack": "^4", + "webpack-cli": "^3" + } + }, "markdown-it-for-inline": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/markdown-it-for-inline/-/markdown-it-for-inline-0.1.1.tgz", @@ -15877,32 +15925,33 @@ } }, "microsoft-cognitiveservices-speech-sdk": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/microsoft-cognitiveservices-speech-sdk/-/microsoft-cognitiveservices-speech-sdk-1.6.0.tgz", - "integrity": "sha512-B1z9cOQSfQxHgjnbkx4NBj5YOHz0ymUBnXYec+thgwRsfJntKfWGJEdarvEjiHr0+UkC+ejuCaFshnHgtwgphQ==", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/microsoft-cognitiveservices-speech-sdk/-/microsoft-cognitiveservices-speech-sdk-1.10.1.tgz", + "integrity": "sha512-uqtNe5p1Un6hXUse9pDGvk7p6QZ96t7YzWaTmmDeaL1eIbrXAPBK4ecTE7OR0JCfLlRcJFfnRJtNO+itdLD3ZQ==", "requires": { - "asn1.js-rfc2560": "^5.0.0", + "asn1.js-rfc2560": "^5.0.1", "asn1.js-rfc5280": "^3.0.0", - "https-proxy-agent": "^2.2.1", + "https-proxy-agent": "^3.0.1", "simple-lru-cache": "0.0.2", - "ws": "^6.1.2" + "ws": "^7.2.1" }, "dependencies": { - "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "https-proxy-agent": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz", + "integrity": "sha512-+ML2Rbh6DAuee7d07tYGEKOEi2voWPUGan+ExdPbPW6Z3svq+JCqr0v8WmKPOkz1vOVykPCBSuobe7G8GJUtVg==", "requires": { - "async-limiter": "~1.0.0" + "agent-base": "^4.3.0", + "debug": "^3.1.0" } + }, + "ws": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.0.tgz", + "integrity": "sha512-iFtXzngZVXPGgpTlP1rBqsUK82p9tKqsWRPg5L56egiljujJT3vGAYnHANvFxBieXrTFavhzhxW52jnaWV+w2w==" } } }, - "microsoft-speech-browser-sdk": { - "version": "0.0.12", - "resolved": "https://registry.npmjs.org/microsoft-speech-browser-sdk/-/microsoft-speech-browser-sdk-0.0.12.tgz", - "integrity": "sha512-JYIR/WpaCyV1wk+4ff3kSJMqJFehbeApzG9CJxR+mN3z+4hFKGB/D5GaFsdN5WtRvnrekzUYSOv2nljMQb3Nwg==" - }, "miller-rabin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", @@ -17729,9 +17778,9 @@ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" }, "postcss": { - "version": "7.0.27", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz", - "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==", + "version": "7.0.30", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.30.tgz", + "integrity": "sha512-nu/0m+NtIzoubO+xdAlwZl/u5S5vi/y6BCsoL8D+8IxsD3XvBS8X4YEADNIVXKVuQvduiucnRv+vPIqj56EGMQ==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -19247,9 +19296,9 @@ } }, "react-say": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/react-say/-/react-say-2.0.0.tgz", - "integrity": "sha512-jHtvt5Q+v5W1iqnQROEF3DL20zZYqz319ZkcVgQyyLyx/1GZ4Nr3gXaGvf0JHBpp+/UcETdtFTgOEzpDCaOL6Q==", + "version": "2.0.1-master.c5d6304", + "resolved": "https://registry.npmjs.org/react-say/-/react-say-2.0.1-master.c5d6304.tgz", + "integrity": "sha512-AbSVouNLXOjh/pKM6OWYR+/DjBp/5uuOmXfz50FmP/T7Kd2E7hC0GY/ZKWuwn85bgDNGsTb8X2XJYuFEI8MhyA==", "requires": { "@babel/runtime": "^7.7.2", "classnames": "^2.2.6", @@ -20241,19 +20290,19 @@ } }, "sanitize-html": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-1.22.1.tgz", - "integrity": "sha512-++IMC00KfMQc45UWZJlhWOlS9eMrME38sFG9GXfR+k6oBo9JXSYQgTOZCl9j3v/smFTRNT9XNwz5DseFdMY+2Q==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-1.20.0.tgz", + "integrity": "sha512-BpxXkBoAG+uKCHjoXFmox6kCSYpnulABoGcZ/R3QyY9ndXbIM5S94eOr1IqnzTG8TnbmXaxWoDDzKC5eJv7fEQ==", "requires": { "chalk": "^2.4.1", - "htmlparser2": "^4.1.0", + "htmlparser2": "^3.10.0", "lodash.clonedeep": "^4.5.0", "lodash.escaperegexp": "^4.1.2", "lodash.isplainobject": "^4.0.6", "lodash.isstring": "^4.0.1", - "lodash.mergewith": "^4.6.2", - "postcss": "^7.0.27", - "srcset": "^2.0.1", + "lodash.mergewith": "^4.6.1", + "postcss": "^7.0.5", + "srcset": "^1.0.0", "xtend": "^4.0.1" } }, @@ -21287,9 +21336,13 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "srcset": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/srcset/-/srcset-2.0.1.tgz", - "integrity": "sha512-00kZI87TdRKwt+P8jj8UZxbfp7mK2ufxcIMWvhAOZNJTRROimpHeruWrGvCZneiuVDLqdyHefVp748ECTnyUBQ==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/srcset/-/srcset-1.0.0.tgz", + "integrity": "sha1-pWad4StC87HV6D7QPHEEb8SPQe8=", + "requires": { + "array-uniq": "^1.0.2", + "number-is-nan": "^1.0.0" + } }, "sshpk": { "version": "1.16.1", @@ -22956,9 +23009,9 @@ } }, "url-search-params-polyfill": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/url-search-params-polyfill/-/url-search-params-polyfill-7.0.1.tgz", - "integrity": "sha512-bAw7L2E+jn9XHG5P9zrPnHdO0yJub4U+yXJOdpcpkr7OBd9T8oll4lUos0iSGRcDvfZoLUKfx9a6aNmIhJ4+mQ==" + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/url-search-params-polyfill/-/url-search-params-polyfill-8.0.0.tgz", + "integrity": "sha512-X4BTaEq1UMz9bTbMKQ6r+CippkKBsFWHiP9wycQc7aHH2Ml/Iieuo44+GJDb77pfP71bONYA/nUd4iokYAxVRQ==" }, "url-to-options": { "version": "1.0.1", @@ -23111,9 +23164,9 @@ "integrity": "sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==" }, "vfile-message": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.3.tgz", - "integrity": "sha512-qQg/2z8qnnBHL0psXyF72kCjb9YioIynvyltuNKFaUhRtqTIcIMP3xnBaPzirVZNuBrUe1qwFciSx2yApa4byw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", "requires": { "@types/unist": "^2.0.0", "unist-util-stringify-position": "^2.0.0" @@ -23271,18 +23324,20 @@ "integrity": "sha512-A0TCk2JdZEn3M1DSG9YYbNRcGdx/YRw19lTiRpgwzH4qqWkO/oRDZRmi3Snn4L2j54KKTfPalBhlOtc8fojVgg==" }, "web-speech-cognitive-services": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/web-speech-cognitive-services/-/web-speech-cognitive-services-6.0.0.tgz", - "integrity": "sha512-JVsFybLP8XOV8cQNVhfa857jBPDCEngIY5y79tG07bq7iSQoU5t+pQWU9LXj0kXj9wZBa/TSO2mLqVVB+UjYTg==", + "version": "7.0.0-master.da7babf", + "resolved": "https://registry.npmjs.org/web-speech-cognitive-services/-/web-speech-cognitive-services-7.0.0-master.da7babf.tgz", + "integrity": "sha512-gBOTZOV1yhc8y8BlPfpsuHKbKvhiZBgyk/5Q2OhgUJOdSDztNnw96IMg5zki1FlGf9oUFc57xXP7bZ98tSnBpA==", "requires": { - "@babel/runtime": "^7.5.5", + "@babel/runtime": "^7.8.7", "base64-arraybuffer": "^0.2.0", "event-as-promise": "^1.0.5", - "events": "^3.0.0", - "memoize-one": "^5.0.5", - "microsoft-cognitiveservices-speech-sdk": "1.6.0", + "event-target-shim": "^5.0.1", + "event-target-shim-es5": "^1.0.1", + "memoize-one": "^5.1.1", "on-error-resume-next": "^1.1.0", - "simple-update-in": "^2.1.0" + "p-defer": "^3.0.0", + "p-defer-es5": "^1.0.1", + "simple-update-in": "^2.1.1" } }, "webdriverio": { diff --git a/packages/app/client/package.json b/packages/app/client/package.json index c957c9d41..b3ad26254 100644 --- a/packages/app/client/package.json +++ b/packages/app/client/package.json @@ -107,8 +107,8 @@ "base64url": "3.0.0", "botframework-config": "4.4.0", "botframework-schema": "^4.3.4", - "botframework-webchat": "4.8.0", - "botframework-webchat-core": "4.8.0", + "botframework-webchat": "4.9.0", + "botframework-webchat-core": "4.9.0", "eslint-plugin-react": "^7.12.3", "markdown-it": "^8.4.2", "react": "16.8.6", diff --git a/packages/app/main/package.json b/packages/app/main/package.json index 2b00bbbf4..dd376a5f4 100644 --- a/packages/app/main/package.json +++ b/packages/app/main/package.json @@ -1,7 +1,7 @@ { "name": "@bfemulator/main", "packagename": "BotFramework-Emulator", - "version": "4.8.1", + "version": "4.9.0", "private": true, "description": "Development tool for the Microsoft Bot Framework. Allows developers to test and debug bots on localhost.", "main": "./app/server/main.js", @@ -253,7 +253,11 @@ "x64" ] } - ] + ], + "extendInfo": { + "NSMicrophoneUsageDescription": "This app requires microphone access to record audio." + }, + "entitlements": "./scripts/config/resources/entitlements.plist" }, "dmg": { "background": "./scripts/config/resources/background.tiff", diff --git a/packages/app/main/scripts/config/resources/entitlements.plist b/packages/app/main/scripts/config/resources/entitlements.plist index be8b7163d..e5d5e467c 100644 --- a/packages/app/main/scripts/config/resources/entitlements.plist +++ b/packages/app/main/scripts/config/resources/entitlements.plist @@ -10,5 +10,7 @@ com.apple.security.cs.allow-dyld-environment-variables + com.apple.security.device.audio-input + diff --git a/packages/app/main/src/server/webSocketServer.spec.ts b/packages/app/main/src/server/webSocketServer.spec.ts index bc8abb87a..799378357 100644 --- a/packages/app/main/src/server/webSocketServer.spec.ts +++ b/packages/app/main/src/server/webSocketServer.spec.ts @@ -51,6 +51,7 @@ describe('WebSocketServer', () => { mockCreateServer.mockClear(); mockWSServer.handleUpgrade.mockClear(); mockWSServer.on.mockClear(); + (WebSocketServer as any)._restServer = undefined; }); it('should return the corresponding socket for a conversation id', () => { @@ -65,8 +66,6 @@ describe('WebSocketServer', () => { }); it('should initialize the server', async () => { - const cleanupSpy = jest.spyOn(WebSocketServer, 'cleanup').mockImplementationOnce(() => null); - (WebSocketServer as any)._restServer = {}; (WebSocketServer as any)._servers = {}; (WebSocketServer as any)._sockets = {}; const mockRestServer = { @@ -83,8 +82,13 @@ describe('WebSocketServer', () => { expect(port).toBe(56273); expect(mockRestServer.get).toHaveBeenCalledWith('/ws/:conversationId', jasmine.any(Function)); expect((WebSocketServer as any)._restServer).toEqual(mockRestServer); - expect(cleanupSpy).toHaveBeenCalled(); - cleanupSpy.mockRestore(); + }); + + it('should not re-initialize if already initialized', async () => { + (WebSocketServer as any)._restServer = {}; // server initialized + await WebSocketServer.init(); + + expect(mockCreateServer).not.toHaveBeenCalled(); }); it('should clean up the rest server, web sockets, and web socket servers', () => { diff --git a/packages/app/main/src/server/webSocketServer.ts b/packages/app/main/src/server/webSocketServer.ts index 2a7aaed15..119d5fd88 100644 --- a/packages/app/main/src/server/webSocketServer.ts +++ b/packages/app/main/src/server/webSocketServer.ts @@ -50,48 +50,50 @@ export class WebSocketServer { return this._sockets[conversationId]; } - public static async init(): Promise { - if (this._restServer) { - this.cleanup(); - } - this._restServer = createServer({ handleUpgrades: true, name: 'Emulator-WebSocket-Host' }); - this._restServer.get('/ws/:conversationId', (req: Request, res: Response, next: Next) => { - const conversationId = req.params.conversationId; + /** Initializes the server and returns the port it is listening on, or if already initialized, + * is a no-op. + */ + public static async init(): Promise { + if (!this._restServer) { + this._restServer = createServer({ handleUpgrades: true, name: 'Emulator-WebSocket-Host' }); + this._restServer.get('/ws/:conversationId', (req: Request, res: Response, next: Next) => { + const conversationId = req.params.conversationId; - // initialize a new web socket server for each new conversation - if (conversationId && !this._servers[conversationId]) { - if (!(res as any).claimUpgrade) { - return next(new Error('Connection must upgrade for web sockets.')); - } - const { head, socket } = (res as any).claimUpgrade(); - const wsServer = new WSServer({ - noServer: true, - }); - wsServer.on('connection', (socket, req) => { - this._sockets[conversationId] = socket; - socket.on('close', (code, reason) => { - delete this._servers[conversationId]; - delete this._sockets[conversationId]; + // initialize a new web socket server for each new conversation + if (conversationId && !this._servers[conversationId]) { + if (!(res as any).claimUpgrade) { + return next(new Error('Connection must upgrade for web sockets.')); + } + const { head, socket } = (res as any).claimUpgrade(); + const wsServer = new WSServer({ + noServer: true, }); + wsServer.on('connection', (socket, req) => { + this._sockets[conversationId] = socket; + socket.on('close', (code, reason) => { + delete this._servers[conversationId]; + delete this._sockets[conversationId]; + }); + }); + // upgrade the connection to a ws connection + wsServer.handleUpgrade(req, socket, head, socket => { + wsServer.emit('connection', socket, req); + }); + this._servers[conversationId] = wsServer; + } + }); + // dynamically generate the web socket server port + const port = await new Promise((resolve, reject) => { + this._restServer.once('error', err => reject(err)); + this._restServer.listen(null, () => { + resolve(this._restServer.address().port); }); - // upgrade the connection to a ws connection - wsServer.handleUpgrade(req, socket, head, socket => { - wsServer.emit('connection', socket, req); - }); - this._servers[conversationId] = wsServer; - } - }); - // dynamically generate the web socket server port - const port = await new Promise((resolve, reject) => { - this._restServer.once('error', err => reject(err)); - this._restServer.listen(null, () => { - resolve(this._restServer.address().port); }); - }); - this.port = port; - // eslint-disable-next-line no-console - console.log(`Web Socket host server listening on ${port}...`); - return port; + this.port = port; + // eslint-disable-next-line no-console + console.log(`Web Socket host server listening on ${port}...`); + return port; + } } public static cleanup(): void {