botframework-webchat-core 4.13.0 → 4.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.yml +4 -198
- package/.prettierrc.yml +1 -1
- package/lib/actions/setNotification.js +1 -1
- package/lib/createPromiseQueue.js +1 -1
- package/lib/createStore.d.ts +3 -2
- package/lib/createStore.d.ts.map +1 -0
- package/lib/createStore.js +5 -5
- package/lib/index.d.ts +50 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +34 -6
- package/lib/reducer.d.ts +1 -0
- package/lib/reducer.d.ts.map +1 -0
- package/lib/reducers/activities.js +1 -1
- package/lib/reducers/clockSkewAdjustment.js +1 -1
- package/lib/reducers/lastTypingAt.js +1 -1
- package/lib/reducers/notifications.js +21 -14
- package/lib/reducers/typing.js +1 -1
- package/lib/sagas/connectSaga.js +14 -8
- package/lib/sagas/connectionStatusToNotificationSaga.js +1 -1
- package/lib/sagas/effects/forkPut.js +1 -1
- package/lib/sagas/markAllAsSpokenOnStopSpeakActivitySaga.js +1 -1
- package/lib/sagas/observeActivitySaga.js +1 -1
- package/lib/sagas/postActivitySaga.js +39 -32
- package/lib/sagas/queueIncomingActivitySaga.js +7 -3
- package/lib/sagas/sendMessageBackToPostActivitySaga.js +4 -4
- package/lib/sagas/sendPostBackToPostActivitySaga.js +4 -4
- package/lib/sagas/sendTypingIndicatorOnSetSendBoxSaga.js +1 -1
- package/lib/sagas/speakActivityAndStartDictateOnIncomingActivityFromOthersSaga.js +1 -1
- package/lib/sagas/startSpeakActivityOnPostActivitySaga.js +1 -1
- package/lib/sagas/stopSpeakingActivityOnInputSaga.js +1 -1
- package/lib/sagas/submitSendBoxSaga.js +1 -1
- package/lib/selectors/combineSelectors.js +8 -3
- package/lib/types/OneOrMany.d.ts +3 -0
- package/lib/types/OneOrMany.d.ts.map +1 -0
- package/lib/types/OneOrMany.js +2 -0
- package/lib/types/external/DirectLineActivity.d.ts +3 -0
- package/lib/types/external/DirectLineActivity.d.ts.map +1 -0
- package/lib/types/external/DirectLineActivity.js +2 -0
- package/lib/types/external/DirectLineAnimationCard.d.ts +3 -0
- package/lib/types/external/DirectLineAnimationCard.d.ts.map +1 -0
- package/lib/types/external/DirectLineAnimationCard.js +2 -0
- package/lib/types/external/DirectLineAttachment.d.ts +3 -0
- package/lib/types/external/DirectLineAttachment.d.ts.map +1 -0
- package/lib/types/external/DirectLineAttachment.js +2 -0
- package/lib/types/external/DirectLineAudioCard.d.ts +3 -0
- package/lib/types/external/DirectLineAudioCard.d.ts.map +1 -0
- package/lib/types/external/DirectLineAudioCard.js +2 -0
- package/lib/types/external/DirectLineCardAction.d.ts +110 -0
- package/lib/types/external/DirectLineCardAction.d.ts.map +1 -0
- package/lib/types/external/DirectLineCardAction.js +2 -0
- package/lib/types/external/DirectLineHeroCard.d.ts +3 -0
- package/lib/types/external/DirectLineHeroCard.d.ts.map +1 -0
- package/lib/types/external/DirectLineHeroCard.js +2 -0
- package/lib/types/external/DirectLineJSBotConnection.d.ts +3 -0
- package/lib/types/external/DirectLineJSBotConnection.d.ts.map +1 -0
- package/lib/types/external/DirectLineJSBotConnection.js +2 -0
- package/lib/types/external/DirectLineOAuthCard.d.ts +3 -0
- package/lib/types/external/DirectLineOAuthCard.d.ts.map +1 -0
- package/lib/types/external/DirectLineOAuthCard.js +2 -0
- package/lib/types/external/DirectLineReceiptCard.d.ts +3 -0
- package/lib/types/external/DirectLineReceiptCard.d.ts.map +1 -0
- package/lib/types/external/DirectLineReceiptCard.js +2 -0
- package/lib/types/external/DirectLineSignInCard.d.ts +3 -0
- package/lib/types/external/DirectLineSignInCard.d.ts.map +1 -0
- package/lib/types/external/DirectLineSignInCard.js +2 -0
- package/lib/types/external/DirectLineSuggestedAction.d.ts +3 -0
- package/lib/types/external/DirectLineSuggestedAction.d.ts.map +1 -0
- package/lib/types/external/DirectLineSuggestedAction.js +2 -0
- package/lib/types/external/DirectLineThumbnailCard.d.ts +3 -0
- package/lib/types/external/DirectLineThumbnailCard.d.ts.map +1 -0
- package/lib/types/external/DirectLineThumbnailCard.js +2 -0
- package/lib/types/external/DirectLineVideoCard.d.ts +3 -0
- package/lib/types/external/DirectLineVideoCard.d.ts.map +1 -0
- package/lib/types/external/DirectLineVideoCard.js +2 -0
- package/lib/utils/dateToLocaleISOString.js +37 -0
- package/lib/utils/deleteKey.js +2 -3
- package/lib/utils/isForbiddenPropertyName.d.ts +2 -0
- package/lib/utils/isForbiddenPropertyName.d.ts.map +1 -0
- package/lib/utils/isForbiddenPropertyName.js +21 -0
- package/lib/utils/mime-wrapper.js +2 -4
- package/lib/utils/once.d.ts +2 -0
- package/lib/utils/once.d.ts.map +1 -0
- package/lib/utils/once.js +17 -0
- package/lib/utils/singleToArray.d.ts +2 -0
- package/lib/utils/singleToArray.d.ts.map +1 -0
- package/lib/utils/singleToArray.js +11 -0
- package/lib/utils/uniqueID.js +1 -1
- package/lib/utils/warnOnce.d.ts +2 -0
- package/lib/utils/warnOnce.d.ts.map +1 -0
- package/lib/utils/warnOnce.js +17 -0
- package/package.json +19 -22
- package/src/__tests__/detectSlowConnectionSaga.spec.js +1 -1
- package/src/__tests__/observeOnce.spec.js +3 -3
- package/src/actions/setNotification.js +8 -2
- package/src/createStore.ts +6 -6
- package/src/{index.js → index.ts} +40 -4
- package/src/reducers/notifications.js +22 -16
- package/src/sagas/connectSaga.js +9 -2
- package/src/sagas/connectionStatusToNotificationSaga.js +1 -1
- package/src/sagas/postActivitySaga.js +11 -4
- package/src/sagas/queueIncomingActivitySaga.js +40 -39
- package/src/sagas/sendMessageBackToPostActivitySaga.js +2 -3
- package/src/sagas/sendPostBackToPostActivitySaga.js +2 -3
- package/src/sagas/sendTypingIndicatorOnSetSendBoxSaga.js +1 -1
- package/src/sagas/speakActivityAndStartDictateOnIncomingActivityFromOthersSaga.js +1 -1
- package/src/sagas/startSpeakActivityOnPostActivitySaga.js +1 -1
- package/src/sagas/stopSpeakingActivityOnInputSaga.js +1 -1
- package/src/sagas/submitSendBoxSaga.js +1 -1
- package/src/selectors/combineSelectors.js +9 -1
- package/src/tsconfig.json +7 -3
- package/src/types/OneOrMany.ts +3 -0
- package/src/types/external/DirectLineActivity.ts +7 -0
- package/src/types/external/DirectLineAnimationCard.ts +5 -0
- package/src/types/external/DirectLineAttachment.ts +5 -0
- package/src/types/external/DirectLineAudioCard.ts +5 -0
- package/src/types/external/DirectLineCardAction.ts +128 -0
- package/src/types/external/DirectLineHeroCard.ts +5 -0
- package/src/types/external/DirectLineJSBotConnection.ts +5 -0
- package/src/types/external/DirectLineOAuthCard.ts +5 -0
- package/src/types/external/DirectLineReceiptCard.ts +5 -0
- package/src/types/external/DirectLineSignInCard.ts +5 -0
- package/src/types/external/DirectLineSuggestedAction.ts +5 -0
- package/src/types/external/DirectLineThumbnailCard.ts +5 -0
- package/src/types/external/DirectLineVideoCard.ts +5 -0
- package/src/utils/dateToLocaleISOString.chatham.spec.js +14 -0
- package/src/utils/dateToLocaleISOString.japan.spec.js +14 -0
- package/src/utils/dateToLocaleISOString.js +34 -0
- package/src/utils/dateToLocaleISOString.pacific.spec.js +14 -0
- package/src/utils/dateToLocaleISOString.utc.spec.js +22 -0
- package/src/utils/deleteKey.js +1 -3
- package/src/utils/isForbiddenPropertyName.spec.js +6 -0
- package/src/utils/isForbiddenPropertyName.ts +33 -0
- package/src/utils/mime-wrapper.js +1 -2
- package/src/utils/once.ts +10 -0
- package/src/utils/singleToArray.ts +3 -0
- package/src/utils/uniqueID.js +1 -6
- package/src/utils/warnOnce.ts +5 -0
- package/.eslintignore +0 -9
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports["default"] = dateToLocaleISOString;
|
|
7
|
+
|
|
8
|
+
/* eslint no-magic-numbers: ["off", { "ignore": [1, 2, 3, 60] }] */
|
|
9
|
+
function pad(value) {
|
|
10
|
+
var count = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;
|
|
11
|
+
|
|
12
|
+
if (typeof value !== 'number') {
|
|
13
|
+
throw new Error('First argument must be a number');
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
value += '';
|
|
17
|
+
|
|
18
|
+
while (value.length < count) {
|
|
19
|
+
value = '0' + value;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
return value;
|
|
23
|
+
} // Adopted from https://stackoverflow.com/questions/17415579/how-to-iso-8601-format-a-date-with-timezone-offset-in-javascript.
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
function dateToLocaleISOString(date) {
|
|
27
|
+
if (!(date instanceof Date)) {
|
|
28
|
+
throw new Error('First argument must be a Date object');
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
var timezoneOffset = -date.getTimezoneOffset();
|
|
32
|
+
var timezoneSign = timezoneOffset < 0 ? '-' : '+'; // "yyyy-MM-DDTHH:mm:ss.fff+08:00" for GMT+08
|
|
33
|
+
// "yyyy-MM-DDTHH:mm:ss.fffZ" for UTC
|
|
34
|
+
|
|
35
|
+
return "".concat(date.getFullYear(), "-").concat(pad(date.getMonth() + 1), "-").concat(pad(date.getDate()), "T").concat(pad(date.getHours()), ":").concat(pad(date.getMinutes()), ":").concat(pad(date.getSeconds()), ".").concat(pad(date.getMilliseconds(), 3)).concat(timezoneOffset ? "".concat(timezoneSign).concat(pad(~~(Math.abs(timezoneOffset) / 60)), ":").concat(pad(timezoneOffset % 60)) : 'Z');
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9kYXRlVG9Mb2NhbGVJU09TdHJpbmcuanMiXSwibmFtZXMiOlsicGFkIiwidmFsdWUiLCJjb3VudCIsIkVycm9yIiwibGVuZ3RoIiwiZGF0ZVRvTG9jYWxlSVNPU3RyaW5nIiwiZGF0ZSIsIkRhdGUiLCJ0aW1lem9uZU9mZnNldCIsImdldFRpbWV6b25lT2Zmc2V0IiwidGltZXpvbmVTaWduIiwiZ2V0RnVsbFllYXIiLCJnZXRNb250aCIsImdldERhdGUiLCJnZXRIb3VycyIsImdldE1pbnV0ZXMiLCJnZXRTZWNvbmRzIiwiZ2V0TWlsbGlzZWNvbmRzIiwiTWF0aCIsImFicyJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBO0FBRUEsU0FBU0EsR0FBVCxDQUFhQyxLQUFiLEVBQStCO0FBQUEsTUFBWEMsS0FBVyx1RUFBSCxDQUFHOztBQUM3QixNQUFJLE9BQU9ELEtBQVAsS0FBaUIsUUFBckIsRUFBK0I7QUFDN0IsVUFBTSxJQUFJRSxLQUFKLENBQVUsaUNBQVYsQ0FBTjtBQUNEOztBQUVERixFQUFBQSxLQUFLLElBQUksRUFBVDs7QUFFQSxTQUFPQSxLQUFLLENBQUNHLE1BQU4sR0FBZUYsS0FBdEIsRUFBNkI7QUFDM0JELElBQUFBLEtBQUssR0FBRyxNQUFNQSxLQUFkO0FBQ0Q7O0FBRUQsU0FBT0EsS0FBUDtBQUNELEMsQ0FFRDs7O0FBQ2UsU0FBU0kscUJBQVQsQ0FBK0JDLElBQS9CLEVBQXFDO0FBQ2xELE1BQUksRUFBRUEsSUFBSSxZQUFZQyxJQUFsQixDQUFKLEVBQTZCO0FBQzNCLFVBQU0sSUFBSUosS0FBSixDQUFVLHNDQUFWLENBQU47QUFDRDs7QUFFRCxNQUFNSyxjQUFjLEdBQUcsQ0FBQ0YsSUFBSSxDQUFDRyxpQkFBTCxFQUF4QjtBQUNBLE1BQU1DLFlBQVksR0FBR0YsY0FBYyxHQUFHLENBQWpCLEdBQXFCLEdBQXJCLEdBQTJCLEdBQWhELENBTmtELENBUWxEO0FBQ0E7O0FBRUEsbUJBQVVGLElBQUksQ0FBQ0ssV0FBTCxFQUFWLGNBQWdDWCxHQUFHLENBQUNNLElBQUksQ0FBQ00sUUFBTCxLQUFrQixDQUFuQixDQUFuQyxjQUE0RFosR0FBRyxDQUFDTSxJQUFJLENBQUNPLE9BQUwsRUFBRCxDQUEvRCxjQUFtRmIsR0FBRyxDQUFDTSxJQUFJLENBQUNRLFFBQUwsRUFBRCxDQUF0RixjQUEyR2QsR0FBRyxDQUM1R00sSUFBSSxDQUFDUyxVQUFMLEVBRDRHLENBQTlHLGNBRUtmLEdBQUcsQ0FBQ00sSUFBSSxDQUFDVSxVQUFMLEVBQUQsQ0FGUixjQUUrQmhCLEdBQUcsQ0FBQ00sSUFBSSxDQUFDVyxlQUFMLEVBQUQsRUFBeUIsQ0FBekIsQ0FGbEMsU0FHRVQsY0FBYyxhQUFNRSxZQUFOLFNBQXFCVixHQUFHLENBQUMsQ0FBQyxFQUFFa0IsSUFBSSxDQUFDQyxHQUFMLENBQVNYLGNBQVQsSUFBMkIsRUFBN0IsQ0FBRixDQUF4QixjQUErRFIsR0FBRyxDQUFDUSxjQUFjLEdBQUcsRUFBbEIsQ0FBbEUsSUFBNEYsR0FINUc7QUFLRCIsInNvdXJjZVJvb3QiOiJjb3JlOi8vLyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludCBuby1tYWdpYy1udW1iZXJzOiBbXCJvZmZcIiwgeyBcImlnbm9yZVwiOiBbMSwgMiwgMywgNjBdIH1dICovXG5cbmZ1bmN0aW9uIHBhZCh2YWx1ZSwgY291bnQgPSAyKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJyk7XG4gIH1cblxuICB2YWx1ZSArPSAnJztcblxuICB3aGlsZSAodmFsdWUubGVuZ3RoIDwgY291bnQpIHtcbiAgICB2YWx1ZSA9ICcwJyArIHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4vLyBBZG9wdGVkIGZyb20gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTc0MTU1NzkvaG93LXRvLWlzby04NjAxLWZvcm1hdC1hLWRhdGUtd2l0aC10aW1lem9uZS1vZmZzZXQtaW4tamF2YXNjcmlwdC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRhdGVUb0xvY2FsZUlTT1N0cmluZyhkYXRlKSB7XG4gIGlmICghKGRhdGUgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIERhdGUgb2JqZWN0Jyk7XG4gIH1cblxuICBjb25zdCB0aW1lem9uZU9mZnNldCA9IC1kYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gIGNvbnN0IHRpbWV6b25lU2lnbiA9IHRpbWV6b25lT2Zmc2V0IDwgMCA/ICctJyA6ICcrJztcblxuICAvLyBcInl5eXktTU0tRERUSEg6bW06c3MuZmZmKzA4OjAwXCIgZm9yIEdNVCswOFxuICAvLyBcInl5eXktTU0tRERUSEg6bW06c3MuZmZmWlwiIGZvciBVVENcblxuICByZXR1cm4gYCR7ZGF0ZS5nZXRGdWxsWWVhcigpfS0ke3BhZChkYXRlLmdldE1vbnRoKCkgKyAxKX0tJHtwYWQoZGF0ZS5nZXREYXRlKCkpfVQke3BhZChkYXRlLmdldEhvdXJzKCkpfToke3BhZChcbiAgICBkYXRlLmdldE1pbnV0ZXMoKVxuICApfToke3BhZChkYXRlLmdldFNlY29uZHMoKSl9LiR7cGFkKGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCksIDMpfSR7XG4gICAgdGltZXpvbmVPZmZzZXQgPyBgJHt0aW1lem9uZVNpZ259JHtwYWQofn4oTWF0aC5hYnModGltZXpvbmVPZmZzZXQpIC8gNjApKX06JHtwYWQodGltZXpvbmVPZmZzZXQgJSA2MCl9YCA6ICdaJ1xuICB9YDtcbn1cbiJdfQ==
|
package/lib/utils/deleteKey.js
CHANGED
|
@@ -17,14 +17,13 @@ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _ty
|
|
|
17
17
|
|
|
18
18
|
function _toPrimitive(input, hint) { if ((0, _typeof2["default"])(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if ((0, _typeof2["default"])(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
19
19
|
|
|
20
|
-
/* eslint no-unused-vars: ["error", { "varsIgnorePattern": "^deleted$" }] */
|
|
21
20
|
function deleteKey(map, key) {
|
|
22
21
|
if (!map) {
|
|
23
22
|
return map;
|
|
24
23
|
}
|
|
25
24
|
|
|
26
|
-
var
|
|
25
|
+
var _deleted = map[key],
|
|
27
26
|
nextMap = (0, _objectWithoutProperties2["default"])(map, [key].map(_toPropertyKey));
|
|
28
27
|
return nextMap;
|
|
29
28
|
}
|
|
30
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
29
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9kZWxldGVLZXkuanMiXSwibmFtZXMiOlsiZGVsZXRlS2V5IiwibWFwIiwia2V5IiwiX2RlbGV0ZWQiLCJuZXh0TWFwIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQWUsU0FBU0EsU0FBVCxDQUFtQkMsR0FBbkIsRUFBd0JDLEdBQXhCLEVBQTZCO0FBQzFDLE1BQUksQ0FBQ0QsR0FBTCxFQUFVO0FBQ1IsV0FBT0EsR0FBUDtBQUNEOztBQUVELE1BQWVFLFFBQWYsR0FBd0NGLEdBQXhDLENBQVNDLEdBQVQ7QUFBQSxNQUE0QkUsT0FBNUIsNkNBQXdDSCxHQUF4QyxHQUFTQyxHQUFUO0FBRUEsU0FBT0UsT0FBUDtBQUNEIiwic291cmNlUm9vdCI6ImNvcmU6Ly8vIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVsZXRlS2V5KG1hcCwga2V5KSB7XG4gIGlmICghbWFwKSB7XG4gICAgcmV0dXJuIG1hcDtcbiAgfVxuXG4gIGNvbnN0IHsgW2tleV06IF9kZWxldGVkLCAuLi5uZXh0TWFwIH0gPSBtYXA7XG5cbiAgcmV0dXJuIG5leHRNYXA7XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isForbiddenPropertyName.d.ts","sourceRoot":"","sources":["../../src/utils/isForbiddenPropertyName.ts"],"names":[],"mappings":"AA8BA,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAE7E"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports["default"] = isForbiddenPropertyName;
|
|
9
|
+
|
|
10
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
11
|
+
|
|
12
|
+
var FORBIDDEN_PROPERTY_NAMES;
|
|
13
|
+
|
|
14
|
+
function getForbiddenPropertyNames() {
|
|
15
|
+
return FORBIDDEN_PROPERTY_NAMES || (FORBIDDEN_PROPERTY_NAMES = Object.freeze(Array.from(new Set([].concat((0, _toConsumableArray2["default"])(Object.getOwnPropertyNames(Object.prototype)), ['prototype'])))));
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function isForbiddenPropertyName(propertyName) {
|
|
19
|
+
return getForbiddenPropertyNames().includes(propertyName);
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9pc0ZvcmJpZGRlblByb3BlcnR5TmFtZS50cyJdLCJuYW1lcyI6WyJGT1JCSURERU5fUFJPUEVSVFlfTkFNRVMiLCJnZXRGb3JiaWRkZW5Qcm9wZXJ0eU5hbWVzIiwiT2JqZWN0IiwiZnJlZXplIiwiQXJyYXkiLCJmcm9tIiwiU2V0IiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsInByb3RvdHlwZSIsImlzRm9yYmlkZGVuUHJvcGVydHlOYW1lIiwicHJvcGVydHlOYW1lIiwiaW5jbHVkZXMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUEsSUFBSUEsd0JBQUo7O0FBRUEsU0FBU0MseUJBQVQsR0FBK0M7QUFDN0MsU0FDRUQsd0JBQXdCLEtBQ3ZCQSx3QkFBd0IsR0FBR0UsTUFBTSxDQUFDQyxNQUFQLENBQzFCQyxLQUFLLENBQUNDLElBQU4sQ0FDRSxJQUFJQyxHQUFKLCtDQWNLSixNQUFNLENBQUNLLG1CQUFQLENBQTJCTCxNQUFNLENBQUNNLFNBQWxDLENBZEwsSUFnQkUsV0FoQkYsR0FERixDQUQwQixDQURKLENBRDFCO0FBeUJEOztBQUVjLFNBQVNDLHVCQUFULENBQWlDQyxZQUFqQyxFQUFnRTtBQUM3RSxTQUFPVCx5QkFBeUIsR0FBR1UsUUFBNUIsQ0FBcUNELFlBQXJDLENBQVA7QUFDRCIsInNvdXJjZVJvb3QiOiJjb3JlOi8vLyIsInNvdXJjZXNDb250ZW50IjpbImxldCBGT1JCSURERU5fUFJPUEVSVFlfTkFNRVM7XG5cbmZ1bmN0aW9uIGdldEZvcmJpZGRlblByb3BlcnR5TmFtZXMoKTogc3RyaW5nW10ge1xuICByZXR1cm4gKFxuICAgIEZPUkJJRERFTl9QUk9QRVJUWV9OQU1FUyB8fFxuICAgIChGT1JCSURERU5fUFJPUEVSVFlfTkFNRVMgPSBPYmplY3QuZnJlZXplKFxuICAgICAgQXJyYXkuZnJvbShcbiAgICAgICAgbmV3IFNldChbXG4gICAgICAgICAgLy8gQXMtb2Ygd3JpdGluZywgYE9iamVjdC5wcm90b3R5cGVgIGluY2x1ZGVzOlxuICAgICAgICAgIC8vICAgX19kZWZpbmVHZXR0ZXJfX1xuICAgICAgICAgIC8vICAgX19kZWZpbmVTZXR0ZXJfX1xuICAgICAgICAgIC8vICAgX19sb29rdXBHZXR0ZXJfX1xuICAgICAgICAgIC8vICAgX19sb29rdXBTZXR0ZXJcbiAgICAgICAgICAvLyAgIF9fcHJvdG9fX1xuICAgICAgICAgIC8vICAgY29uc3RydWN0b3JcbiAgICAgICAgICAvLyAgIGhhc093blByb3BlcnR5XG4gICAgICAgICAgLy8gICBpc1Byb3RvdHlwZU9mXG4gICAgICAgICAgLy8gICBwcm9wZXJ0eUlzRW51bWVyYWJsZVxuICAgICAgICAgIC8vICAgdG9Mb2NhbGVTdHJpbmdcbiAgICAgICAgICAvLyAgIHRvU3RyaW5nXG4gICAgICAgICAgLy8gICB2YWx1ZU9mXG4gICAgICAgICAgLi4uT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoT2JqZWN0LnByb3RvdHlwZSksXG5cbiAgICAgICAgICAncHJvdG90eXBlJ1xuICAgICAgICBdKVxuICAgICAgKVxuICAgICkpXG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzRm9yYmlkZGVuUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBnZXRGb3JiaWRkZW5Qcm9wZXJ0eU5hbWVzKCkuaW5jbHVkZXMocHJvcGVydHlOYW1lKTtcbn1cbiJdfQ==
|
|
@@ -9,9 +9,7 @@ exports["default"] = void 0;
|
|
|
9
9
|
|
|
10
10
|
var _Mime = _interopRequireDefault(require("mime/Mime"));
|
|
11
11
|
|
|
12
|
-
/* eslint no-undef: "off"*/
|
|
13
|
-
|
|
14
|
-
/* eslint node/global-require: "off"*/
|
|
12
|
+
/* eslint no-undef: "off" */
|
|
15
13
|
// We adopted the work from mime-wrapper, at https://github.com/marlon360/mime-wrapper.
|
|
16
14
|
// This file wraps the mime library constructor to include '.json' types. This is needed
|
|
17
15
|
// to support Angular CLI web projects, in which the webpack.config files are hidden away
|
|
@@ -46,4 +44,4 @@ var _Mime = _interopRequireDefault(require("mime/Mime"));
|
|
|
46
44
|
var _default = new _Mime["default"](require('mime/types/standard'), require('mime/types/other'));
|
|
47
45
|
|
|
48
46
|
exports["default"] = _default;
|
|
49
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
47
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9taW1lLXdyYXBwZXIuanMiXSwibmFtZXMiOlsiTWltZSIsInJlcXVpcmUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQW9DQTs7QUFwQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtlQUllLElBQUlBLGdCQUFKLENBQVNDLE9BQU8sQ0FBQyxxQkFBRCxDQUFoQixFQUF5Q0EsT0FBTyxDQUFDLGtCQUFELENBQWhELEMiLCJzb3VyY2VSb290IjoiY29yZTovLy8iLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQgbm8tdW5kZWY6IFwib2ZmXCIgKi9cblxuLy8gV2UgYWRvcHRlZCB0aGUgd29yayBmcm9tIG1pbWUtd3JhcHBlciwgYXQgaHR0cHM6Ly9naXRodWIuY29tL21hcmxvbjM2MC9taW1lLXdyYXBwZXIuXG5cbi8vIFRoaXMgZmlsZSB3cmFwcyB0aGUgbWltZSBsaWJyYXJ5IGNvbnN0cnVjdG9yIHRvIGluY2x1ZGUgJy5qc29uJyB0eXBlcy4gVGhpcyBpcyBuZWVkZWRcbi8vIHRvIHN1cHBvcnQgQW5ndWxhciBDTEkgd2ViIHByb2plY3RzLCBpbiB3aGljaCB0aGUgd2VicGFjay5jb25maWcgZmlsZXMgYXJlIGhpZGRlbiBhd2F5XG4vLyBmcm9tIHRoZSB1c2VyLCBhbmQgZG8gbm90IHN1cHBvcnQgLmpzb24gZmlsZSBleHRlbnNpb24gbW9kdWxlIHJlc29sdXRpb25zLlxuLy9cbi8vIFJlZmVyIHRvIGlzc3VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qc2h0dHAvbWltZS10eXBlcy9pc3N1ZXMvNTAjaXNzdWVjb21tZW50LTM5MDkzMjY3OFxuLy8gYW5kIGlzc3VlIGh0dHBzOi8vZ2l0aHViLmNvbS9icm9vZmEvbm9kZS1taW1lL2lzc3Vlcy8yMDguXG4vL1xuLy8gVGhpcyBmaWxlIG1heSBuZWVkIHRvIGNoYW5nZSBpZiB0aGUgbWltZSBsaWJyYXJ5IGlzIGJ1bXBlZCBhIG1ham9yIHRoYXQgbWF5IGNhdXNlIGFcbi8vIGJyZWFraW5nIGNoYW5nZSwgYXMgaXQgcmVsaWVzIG9uIHRoZSBpbnRlcm5hbCBsaWJyYXJ5IGZpbGUgcGxhY2VtZW50LlxuXG4vLyBNSVQgTGljZW5zZVxuLy9cbi8vIENvcHlyaWdodCAoYykgMjAxOCBNYXJsb24gTMO8Y2tlcnRcbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4vLyBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbi8vIFNPRlRXQVJFLlxuXG5pbXBvcnQgTWltZSBmcm9tICdtaW1lL01pbWUnO1xuXG5leHBvcnQgZGVmYXVsdCBuZXcgTWltZShyZXF1aXJlKCdtaW1lL3R5cGVzL3N0YW5kYXJkJyksIHJlcXVpcmUoJ21pbWUvdHlwZXMvb3RoZXInKSk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"once.d.ts","sourceRoot":"","sources":["../../src/utils/once.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CASvD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports["default"] = once;
|
|
7
|
+
|
|
8
|
+
function once(fn) {
|
|
9
|
+
var done;
|
|
10
|
+
return function () {
|
|
11
|
+
if (!done) {
|
|
12
|
+
fn();
|
|
13
|
+
done = 1;
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9vbmNlLnRzIl0sIm5hbWVzIjpbIm9uY2UiLCJmbiIsImRvbmUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBZSxTQUFTQSxJQUFULENBQWNDLEVBQWQsRUFBMEM7QUFDdkQsTUFBSUMsSUFBSjtBQUVBLFNBQU8sWUFBTTtBQUNYLFFBQUksQ0FBQ0EsSUFBTCxFQUFXO0FBQ1RELE1BQUFBLEVBQUU7QUFDRkMsTUFBQUEsSUFBSSxHQUFHLENBQVA7QUFDRDtBQUNGLEdBTEQ7QUFNRCIsInNvdXJjZVJvb3QiOiJjb3JlOi8vLyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG9uY2UoZm46ICgpID0+IHZvaWQpOiAoKSA9PiB2b2lkIHtcbiAgbGV0IGRvbmU7XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBpZiAoIWRvbmUpIHtcbiAgICAgIGZuKCk7XG4gICAgICBkb25lID0gMTtcbiAgICB9XG4gIH07XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"singleToArray.d.ts","sourceRoot":"","sources":["../../src/utils/singleToArray.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAEpE"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports["default"] = singleToArray;
|
|
7
|
+
|
|
8
|
+
function singleToArray(singleOrArray) {
|
|
9
|
+
return singleOrArray ? Array.isArray(singleOrArray) ? singleOrArray : [singleOrArray] : [];
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9zaW5nbGVUb0FycmF5LnRzIl0sIm5hbWVzIjpbInNpbmdsZVRvQXJyYXkiLCJzaW5nbGVPckFycmF5IiwiQXJyYXkiLCJpc0FycmF5Il0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQWUsU0FBU0EsYUFBVCxDQUEwQkMsYUFBMUIsRUFBdUQ7QUFDcEUsU0FBT0EsYUFBYSxHQUFJQyxLQUFLLENBQUNDLE9BQU4sQ0FBY0YsYUFBZCxJQUErQkEsYUFBL0IsR0FBK0MsQ0FBQ0EsYUFBRCxDQUFuRCxHQUFzRSxFQUExRjtBQUNEIiwic291cmNlUm9vdCI6ImNvcmU6Ly8vIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2luZ2xlVG9BcnJheTxUPihzaW5nbGVPckFycmF5OiBUIHwgVFtdKTogVFtdIHtcbiAgcmV0dXJuIHNpbmdsZU9yQXJyYXkgPyAoQXJyYXkuaXNBcnJheShzaW5nbGVPckFycmF5KSA/IHNpbmdsZU9yQXJyYXkgOiBbc2luZ2xlT3JBcnJheV0pIDogW107XG59XG4iXX0=
|
package/lib/utils/uniqueID.js
CHANGED
|
@@ -13,4 +13,4 @@ var _mathRandom = _interopRequireDefault(require("math-random"));
|
|
|
13
13
|
function uniqueID() {
|
|
14
14
|
return Date.now() + (0, _mathRandom["default"])().toString(36).substr(2);
|
|
15
15
|
}
|
|
16
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
16
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy91bmlxdWVJRC5qcyJdLCJuYW1lcyI6WyJ1bmlxdWVJRCIsIkRhdGUiLCJub3ciLCJ0b1N0cmluZyIsInN1YnN0ciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBRUE7O0FBRkE7QUFJZSxTQUFTQSxRQUFULEdBQW9CO0FBQ2pDLFNBQU9DLElBQUksQ0FBQ0MsR0FBTCxLQUFhLDhCQUFTQyxRQUFULENBQWtCLEVBQWxCLEVBQXNCQyxNQUF0QixDQUE2QixDQUE3QixDQUFwQjtBQUNEIiwic291cmNlUm9vdCI6ImNvcmU6Ly8vIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50IG5vLW1hZ2ljLW51bWJlcnM6IFtcImVycm9yXCIsIHsgXCJpZ25vcmVcIjogWzIsIDM2XSB9XSAqL1xuXG5pbXBvcnQgcmFuZG9tIGZyb20gJ21hdGgtcmFuZG9tJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdW5pcXVlSUQoKSB7XG4gIHJldHVybiBEYXRlLm5vdygpICsgcmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"warnOnce.d.ts","sourceRoot":"","sources":["../../src/utils/warnOnce.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,IAAI,CAE5D"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports["default"] = warnOnce;
|
|
9
|
+
|
|
10
|
+
var _once = _interopRequireDefault(require("./once"));
|
|
11
|
+
|
|
12
|
+
function warnOnce(message) {
|
|
13
|
+
return (0, _once["default"])(function () {
|
|
14
|
+
return console.warn("botframework-webchat: ".concat(message, "."));
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy93YXJuT25jZS50cyJdLCJuYW1lcyI6WyJ3YXJuT25jZSIsIm1lc3NhZ2UiLCJjb25zb2xlIiwid2FybiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7O0FBRWUsU0FBU0EsUUFBVCxDQUFrQkMsT0FBbEIsRUFBK0M7QUFDNUQsU0FBTyxzQkFBSztBQUFBLFdBQU1DLE9BQU8sQ0FBQ0MsSUFBUixpQ0FBc0NGLE9BQXRDLE9BQU47QUFBQSxHQUFMLENBQVA7QUFDRCIsInNvdXJjZVJvb3QiOiJjb3JlOi8vLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBvbmNlIGZyb20gJy4vb25jZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHdhcm5PbmNlKG1lc3NhZ2U6IHN0cmluZyk6ICgpID0+IHZvaWQge1xuICByZXR1cm4gb25jZSgoKSA9PiBjb25zb2xlLndhcm4oYGJvdGZyYW1ld29yay13ZWJjaGF0OiAke21lc3NhZ2V9LmApKTtcbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "botframework-webchat-core",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.15.0",
|
|
4
4
|
"description": "Core of botframework-webchat",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"publishConfig": {
|
|
@@ -20,40 +20,37 @@
|
|
|
20
20
|
"build": "npm run build:typescript && npm run build:babel",
|
|
21
21
|
"build:babel": "babel src --extensions .js,.ts,.tsx --ignore **/*.spec.js,**/*.spec.ts,**/*.spec.tsx,**/*.test.js,**/*.test.ts,**/*.test.tsx,__tests__/**/*.js,__tests__/**/*.ts,__tests__/**/*.tsx --out-dir lib --verbose",
|
|
22
22
|
"build:typescript": "tsc --project src/tsconfig.json",
|
|
23
|
-
"eslint": "
|
|
23
|
+
"eslint": "npm run precommit",
|
|
24
|
+
"precommit": "npm run precommit:eslint -- src && npm run precommit:typecheck",
|
|
25
|
+
"precommit:eslint": "../../node_modules/.bin/eslint --report-unused-disable-directives --max-warnings 0",
|
|
26
|
+
"precommit:typecheck": "tsc --project ./src --emitDeclarationOnly false --esModuleInterop true --noEmit --pretty false",
|
|
24
27
|
"prestart": "npm run build:babel",
|
|
25
28
|
"start": "concurrently --kill-others --names \"babel,tsc\" \"npm run start:babel\" \"npm run start:typescript\"",
|
|
26
29
|
"start:babel": "npm run build:babel -- --skip-initial-build --watch",
|
|
27
30
|
"start:typescript": "npm run build:typescript -- --watch"
|
|
28
31
|
},
|
|
29
32
|
"devDependencies": {
|
|
30
|
-
"@babel/cli": "^7.
|
|
31
|
-
"@babel/core": "^7.
|
|
32
|
-
"@babel/plugin-transform-runtime": "^7.
|
|
33
|
-
"@babel/preset-env": "^7.
|
|
34
|
-
"@babel/preset-typescript": "^7.
|
|
35
|
-
"@types/node": "^
|
|
36
|
-
"@typescript-eslint/eslint-plugin": "^4.19.0",
|
|
37
|
-
"@typescript-eslint/parser": "^4.19.0",
|
|
33
|
+
"@babel/cli": "^7.14.5",
|
|
34
|
+
"@babel/core": "^7.14.6",
|
|
35
|
+
"@babel/plugin-transform-runtime": "^7.14.5",
|
|
36
|
+
"@babel/preset-env": "^7.14.7",
|
|
37
|
+
"@babel/preset-typescript": "^7.14.5",
|
|
38
|
+
"@types/node": "^16.3.1",
|
|
38
39
|
"babel-plugin-istanbul": "^6.0.0",
|
|
39
40
|
"babel-plugin-transform-inline-environment-variables": "^0.4.3",
|
|
40
|
-
"botframework-directlinejs": "
|
|
41
|
-
"concurrently": "^6.
|
|
42
|
-
"
|
|
43
|
-
"eslint-plugin-node": "^11.1.0",
|
|
44
|
-
"eslint-plugin-prettier": "^3.3.1",
|
|
45
|
-
"prettier": "^2.2.1",
|
|
46
|
-
"typescript": "^4.2.3"
|
|
41
|
+
"botframework-directlinejs": "0.15.1",
|
|
42
|
+
"concurrently": "^6.3.0",
|
|
43
|
+
"typescript": "^4.3.5"
|
|
47
44
|
},
|
|
48
45
|
"dependencies": {
|
|
49
|
-
"@babel/runtime": "7.
|
|
50
|
-
"
|
|
46
|
+
"@babel/runtime": "7.15.4",
|
|
47
|
+
"jwt-decode": "3.1.2",
|
|
51
48
|
"math-random": "2.0.1",
|
|
52
49
|
"mime": "2.5.2",
|
|
53
|
-
"p-defer": "
|
|
54
|
-
"p-defer-es5": "
|
|
50
|
+
"p-defer": "4.0.0",
|
|
51
|
+
"p-defer-es5": "2.0.1",
|
|
55
52
|
"redux": "4.0.5",
|
|
56
|
-
"redux-devtools-extension": "2.13.
|
|
53
|
+
"redux-devtools-extension": "2.13.9",
|
|
57
54
|
"redux-saga": "1.1.3",
|
|
58
55
|
"simple-update-in": "2.2.0"
|
|
59
56
|
},
|
|
@@ -36,7 +36,7 @@ describe('observeOnce', () => {
|
|
|
36
36
|
|
|
37
37
|
test('should unsubscribe after first next', () =>
|
|
38
38
|
new Promise((resolve, reject) => {
|
|
39
|
-
runSaga(inputOutput, function*() {
|
|
39
|
+
runSaga(inputOutput, function* () {
|
|
40
40
|
try {
|
|
41
41
|
const [result] = yield all([observeOnce(observable), call(() => onNext('Hello, World!'))]);
|
|
42
42
|
|
|
@@ -53,7 +53,7 @@ describe('observeOnce', () => {
|
|
|
53
53
|
|
|
54
54
|
test('should unsubscribe and throw after first error', () =>
|
|
55
55
|
new Promise((resolve, reject) => {
|
|
56
|
-
runSaga(inputOutput, function*() {
|
|
56
|
+
runSaga(inputOutput, function* () {
|
|
57
57
|
try {
|
|
58
58
|
try {
|
|
59
59
|
yield all([observeOnce(observable), call(() => onError(new Error('Hello, World!')))]);
|
|
@@ -75,7 +75,7 @@ describe('observeOnce', () => {
|
|
|
75
75
|
|
|
76
76
|
test('should unsubscribe after complete', () =>
|
|
77
77
|
new Promise((resolve, reject) => {
|
|
78
|
-
runSaga(inputOutput, function*() {
|
|
78
|
+
runSaga(inputOutput, function* () {
|
|
79
79
|
try {
|
|
80
80
|
const [result] = yield all([observeOnce(observable), call(() => onComplete())]);
|
|
81
81
|
|
|
@@ -4,12 +4,18 @@ const SET_NOTIFICATION = 'WEB_CHAT/SET_NOTIFICATION';
|
|
|
4
4
|
|
|
5
5
|
export default function setNotification({ alt, data, id, level, message }) {
|
|
6
6
|
if (!id || typeof id !== 'string') {
|
|
7
|
-
console.warn(
|
|
7
|
+
console.warn(
|
|
8
|
+
'botframework-webchat: The "id" argument passed to "setNotification" must be a string; defaulting to a random value.'
|
|
9
|
+
);
|
|
10
|
+
|
|
8
11
|
id = uniqueID();
|
|
9
12
|
}
|
|
10
13
|
|
|
11
14
|
if (!level || typeof level !== 'string') {
|
|
12
|
-
console.warn(
|
|
15
|
+
console.warn(
|
|
16
|
+
'botframework-webchat: The "level" argument passed to "setNotification" must be a string; defaulting to "info".'
|
|
17
|
+
);
|
|
18
|
+
|
|
13
19
|
level = 'info';
|
|
14
20
|
}
|
|
15
21
|
|
package/src/createStore.ts
CHANGED
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
|
|
2
|
-
// This is for the racing between sagaMiddleware and store
|
|
3
|
-
/* eslint no-use-before-define: "off" */
|
|
4
|
-
|
|
5
1
|
import { applyMiddleware, createStore as createReduxStore, Store } from 'redux';
|
|
6
2
|
import { composeWithDevTools } from 'redux-devtools-extension';
|
|
7
3
|
import createSagaMiddleware from 'redux-saga';
|
|
@@ -29,7 +25,9 @@ function createEnhancerAndSagaMiddleware(getStore, ...middlewares) {
|
|
|
29
25
|
};
|
|
30
26
|
}
|
|
31
27
|
|
|
32
|
-
export default function createStore(initialState
|
|
28
|
+
export default function createStore(initialState?, ...middlewares): Store {
|
|
29
|
+
// We are sure the "getStore" (first argument) is not called on "createEnhancerAndSagaMiddleware()".
|
|
30
|
+
// eslint-disable-next-line @typescript-eslint/no-use-before-define
|
|
33
31
|
const { enhancer, sagaMiddleware } = createEnhancerAndSagaMiddleware(() => store, ...middlewares);
|
|
34
32
|
const store = createReduxStore(reducer, initialState || {}, enhancer);
|
|
35
33
|
|
|
@@ -38,7 +36,9 @@ export default function createStore(initialState, ...middlewares): Store {
|
|
|
38
36
|
return store;
|
|
39
37
|
}
|
|
40
38
|
|
|
41
|
-
export function withDevTools(initialState
|
|
39
|
+
export function withDevTools(initialState?, ...middlewares): Store {
|
|
40
|
+
// We are sure the "getStore" (first argument) is not called on "createEnhancerAndSagaMiddleware()".
|
|
41
|
+
// eslint-disable-next-line @typescript-eslint/no-use-before-define
|
|
42
42
|
const { enhancer, sagaMiddleware } = createEnhancerAndSagaMiddleware(() => store, ...middlewares);
|
|
43
43
|
const store = createReduxStore(reducer, initialState || {}, composeWithDevTools(enhancer));
|
|
44
44
|
|
|
@@ -1,10 +1,27 @@
|
|
|
1
|
+
import * as ActivityClientState from './constants/ActivityClientState';
|
|
2
|
+
import * as DictateState from './constants/DictateState';
|
|
1
3
|
import clearSuggestedActions from './actions/clearSuggestedActions';
|
|
2
4
|
import connect from './actions/connect';
|
|
3
5
|
import createStore, { withDevTools as createStoreWithDevTools } from './createStore';
|
|
6
|
+
import DirectLineActivity from './types/external/DirectLineActivity';
|
|
7
|
+
import DirectLineAnimationCard from './types/external/DirectLineAnimationCard';
|
|
8
|
+
import DirectLineAttachment from './types/external/DirectLineAttachment';
|
|
9
|
+
import DirectLineAudioCard from './types/external/DirectLineAudioCard';
|
|
10
|
+
import DirectLineCardAction from './types/external/DirectLineCardAction';
|
|
11
|
+
import DirectLineHeroCard from './types/external/DirectLineHeroCard';
|
|
12
|
+
import DirectLineJSBotConnection from './types/external/DirectLineJSBotConnection';
|
|
13
|
+
import DirectLineOAuthCard from './types/external/DirectLineOAuthCard';
|
|
14
|
+
import DirectLineReceiptCard from './types/external/DirectLineReceiptCard';
|
|
15
|
+
import DirectLineSignInCard from './types/external/DirectLineSignInCard';
|
|
16
|
+
import DirectLineSuggestedAction from './types/external/DirectLineSuggestedAction';
|
|
17
|
+
import DirectLineThumbnailCard from './types/external/DirectLineThumbnailCard';
|
|
18
|
+
import DirectLineVideoCard from './types/external/DirectLineVideoCard';
|
|
4
19
|
import disconnect from './actions/disconnect';
|
|
5
20
|
import dismissNotification from './actions/dismissNotification';
|
|
6
21
|
import emitTypingIndicator from './actions/emitTypingIndicator';
|
|
22
|
+
import isForbiddenPropertyName from './utils/isForbiddenPropertyName';
|
|
7
23
|
import markActivity from './actions/markActivity';
|
|
24
|
+
import OneOrMany from './types/OneOrMany';
|
|
8
25
|
import postActivity from './actions/postActivity';
|
|
9
26
|
import sendEvent from './actions/sendEvent';
|
|
10
27
|
import sendFiles from './actions/sendFiles';
|
|
@@ -18,14 +35,13 @@ import setNotification from './actions/setNotification';
|
|
|
18
35
|
import setSendBox from './actions/setSendBox';
|
|
19
36
|
import setSendTimeout from './actions/setSendTimeout';
|
|
20
37
|
import setSendTypingIndicator from './actions/setSendTypingIndicator';
|
|
38
|
+
import singleToArray from './utils/singleToArray';
|
|
21
39
|
import startDictate from './actions/startDictate';
|
|
22
40
|
import startSpeakingActivity from './actions/startSpeakingActivity';
|
|
23
41
|
import stopDictate from './actions/stopDictate';
|
|
24
42
|
import stopSpeakingActivity from './actions/stopSpeakingActivity';
|
|
25
43
|
import submitSendBox from './actions/submitSendBox';
|
|
26
|
-
|
|
27
|
-
import * as ActivityClientState from './constants/ActivityClientState';
|
|
28
|
-
import * as DictateState from './constants/DictateState';
|
|
44
|
+
import warnOnce from './utils/warnOnce';
|
|
29
45
|
|
|
30
46
|
const Constants = { ActivityClientState, DictateState };
|
|
31
47
|
const version = process.env.npm_package_version;
|
|
@@ -39,6 +55,7 @@ export {
|
|
|
39
55
|
disconnect,
|
|
40
56
|
dismissNotification,
|
|
41
57
|
emitTypingIndicator,
|
|
58
|
+
isForbiddenPropertyName,
|
|
42
59
|
markActivity,
|
|
43
60
|
postActivity,
|
|
44
61
|
sendEvent,
|
|
@@ -53,10 +70,29 @@ export {
|
|
|
53
70
|
setSendBox,
|
|
54
71
|
setSendTimeout,
|
|
55
72
|
setSendTypingIndicator,
|
|
73
|
+
singleToArray,
|
|
56
74
|
startDictate,
|
|
57
75
|
startSpeakingActivity,
|
|
58
76
|
stopDictate,
|
|
59
77
|
stopSpeakingActivity,
|
|
60
78
|
submitSendBox,
|
|
61
|
-
version
|
|
79
|
+
version,
|
|
80
|
+
warnOnce
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
export type {
|
|
84
|
+
DirectLineActivity,
|
|
85
|
+
DirectLineAnimationCard,
|
|
86
|
+
DirectLineAttachment,
|
|
87
|
+
DirectLineAudioCard,
|
|
88
|
+
DirectLineCardAction,
|
|
89
|
+
DirectLineHeroCard,
|
|
90
|
+
DirectLineOAuthCard,
|
|
91
|
+
DirectLineJSBotConnection,
|
|
92
|
+
DirectLineReceiptCard,
|
|
93
|
+
DirectLineSignInCard,
|
|
94
|
+
DirectLineSuggestedAction,
|
|
95
|
+
DirectLineThumbnailCard,
|
|
96
|
+
DirectLineVideoCard,
|
|
97
|
+
OneOrMany
|
|
62
98
|
};
|
|
@@ -3,6 +3,7 @@ import updateIn from 'simple-update-in';
|
|
|
3
3
|
import { DISMISS_NOTIFICATION } from '../actions/dismissNotification';
|
|
4
4
|
import { SAGA_ERROR } from '../actions/sagaError';
|
|
5
5
|
import { SET_NOTIFICATION } from '../actions/setNotification';
|
|
6
|
+
import isForbiddenPropertyName from '../utils/isForbiddenPropertyName';
|
|
6
7
|
|
|
7
8
|
const DEFAULT_STATE = {};
|
|
8
9
|
|
|
@@ -15,23 +16,28 @@ export default function notifications(state = DEFAULT_STATE, { payload, type })
|
|
|
15
16
|
state = updateIn(state, ['connectivitystatus', 'message'], () => 'javascripterror');
|
|
16
17
|
} else if (type === SET_NOTIFICATION) {
|
|
17
18
|
const { alt, data, id, level, message } = payload;
|
|
18
|
-
const notification = state[id];
|
|
19
19
|
|
|
20
|
-
if (
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
20
|
+
if (!isForbiddenPropertyName(id)) {
|
|
21
|
+
// Mitigated through denylisting.
|
|
22
|
+
// eslint-disable-next-line security/detect-object-injection
|
|
23
|
+
const notification = state[id];
|
|
24
|
+
|
|
25
|
+
if (
|
|
26
|
+
!notification ||
|
|
27
|
+
alt !== notification.alt ||
|
|
28
|
+
!Object.is(data, notification.data) ||
|
|
29
|
+
level !== notification.level ||
|
|
30
|
+
message !== notification.message
|
|
31
|
+
) {
|
|
32
|
+
state = updateIn(state, [id], () => ({
|
|
33
|
+
alt,
|
|
34
|
+
data,
|
|
35
|
+
id,
|
|
36
|
+
level,
|
|
37
|
+
message,
|
|
38
|
+
timestamp: now
|
|
39
|
+
}));
|
|
40
|
+
}
|
|
35
41
|
}
|
|
36
42
|
}
|
|
37
43
|
|
package/src/sagas/connectSaga.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import { call, cancel, cancelled, fork, put, race, take } from 'redux-saga/effects';
|
|
4
4
|
|
|
5
5
|
import { ConnectionStatus } from 'botframework-directlinejs';
|
|
6
|
-
import
|
|
6
|
+
import decode from 'jwt-decode';
|
|
7
7
|
|
|
8
8
|
import { CONNECT } from '../actions/connect';
|
|
9
9
|
import createPromiseQueue from '../createPromiseQueue';
|
|
@@ -39,7 +39,14 @@ function* observeAndPutConnectionStatusUpdate(directLine) {
|
|
|
39
39
|
// TODO: [P2] We should move this check and rectification to DirectLineJS.
|
|
40
40
|
function rectifyUserID(directLine, userIDFromAction) {
|
|
41
41
|
const { token } = directLine;
|
|
42
|
-
|
|
42
|
+
|
|
43
|
+
let userIDFromToken;
|
|
44
|
+
|
|
45
|
+
// TODO: Add test to make sure "jwt-decode" work as expected.
|
|
46
|
+
try {
|
|
47
|
+
userIDFromToken = (decode(token) || {}).user;
|
|
48
|
+
// eslint-disable-next-line no-empty
|
|
49
|
+
} catch (err) {}
|
|
43
50
|
|
|
44
51
|
const result = {
|
|
45
52
|
fromAction: userIDFromAction,
|
|
@@ -5,6 +5,7 @@ import whileConnected from './effects/whileConnected';
|
|
|
5
5
|
|
|
6
6
|
import clockSkewAdjustmentSelector from '../selectors/clockSkewAdjustment';
|
|
7
7
|
import combineSelectors from '../selectors/combineSelectors';
|
|
8
|
+
import dateToLocaleISOString from '../utils/dateToLocaleISOString';
|
|
8
9
|
import languageSelector from '../selectors/language';
|
|
9
10
|
import sendTimeoutSelector from '../selectors/sendTimeout';
|
|
10
11
|
|
|
@@ -21,8 +22,9 @@ import {
|
|
|
21
22
|
|
|
22
23
|
import { INCOMING_ACTIVITY } from '../actions/incomingActivity';
|
|
23
24
|
|
|
24
|
-
function getTimestamp(clockSkewAdjustment = 0) {
|
|
25
|
-
return
|
|
25
|
+
function getTimestamp(date, clockSkewAdjustment = 0) {
|
|
26
|
+
// "+date" will return epoch time in milliseconds, same as Date.getTime().
|
|
27
|
+
return new Date(+date + clockSkewAdjustment).toISOString();
|
|
26
28
|
}
|
|
27
29
|
|
|
28
30
|
function* postActivity(directLine, userID, username, numActivitiesPosted, { meta: { method }, payload: { activity } }) {
|
|
@@ -31,6 +33,9 @@ function* postActivity(directLine, userID, username, numActivitiesPosted, { meta
|
|
|
31
33
|
);
|
|
32
34
|
const { attachments } = activity;
|
|
33
35
|
const clientActivityID = uniqueID();
|
|
36
|
+
const now = new Date();
|
|
37
|
+
const localTimeZone =
|
|
38
|
+
typeof window.Intl === 'undefined' ? undefined : new Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
34
39
|
|
|
35
40
|
activity = {
|
|
36
41
|
...deleteKey(activity, 'id'),
|
|
@@ -46,7 +51,7 @@ function* postActivity(directLine, userID, username, numActivitiesPosted, { meta
|
|
|
46
51
|
...deleteKey(activity.channelData, 'state'),
|
|
47
52
|
clientActivityID,
|
|
48
53
|
// This is unskewed local timestamp for estimating clock skew.
|
|
49
|
-
clientTimestamp: getTimestamp()
|
|
54
|
+
clientTimestamp: getTimestamp(now)
|
|
50
55
|
},
|
|
51
56
|
channelId: 'webchat',
|
|
52
57
|
from: {
|
|
@@ -55,9 +60,11 @@ function* postActivity(directLine, userID, username, numActivitiesPosted, { meta
|
|
|
55
60
|
role: 'user'
|
|
56
61
|
},
|
|
57
62
|
locale,
|
|
63
|
+
localTimestamp: dateToLocaleISOString(now),
|
|
64
|
+
localTimezone: localTimeZone,
|
|
58
65
|
// This timestamp will be replaced by Direct Line Channel in echoback.
|
|
59
66
|
// We are temporarily adding this timestamp for sorting.
|
|
60
|
-
timestamp: getTimestamp(clockSkewAdjustment)
|
|
67
|
+
timestamp: getTimestamp(now, clockSkewAdjustment)
|
|
61
68
|
};
|
|
62
69
|
|
|
63
70
|
if (!numActivitiesPosted) {
|