botframework-webchat-core 4.14.1 → 4.15.2-main.20220413.af6e8a3

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.
Files changed (238) hide show
  1. package/.eslintrc.yml +4 -198
  2. package/.prettierrc.yml +1 -1
  3. package/babel.config.json +1 -1
  4. package/lib/actions/clearSuggestedActions.js +1 -1
  5. package/lib/actions/connect.js +1 -1
  6. package/lib/actions/connectionStatusUpdate.js +1 -1
  7. package/lib/actions/deleteActivity.d.ts +13 -0
  8. package/lib/actions/deleteActivity.d.ts.map +1 -0
  9. package/lib/actions/deleteActivity.js +5 -3
  10. package/lib/actions/disconnect.js +1 -1
  11. package/lib/actions/dismissNotification.js +1 -1
  12. package/lib/actions/emitTypingIndicator.js +1 -1
  13. package/lib/actions/incomingActivity.d.ts +14 -0
  14. package/lib/actions/incomingActivity.d.ts.map +1 -0
  15. package/lib/actions/incomingActivity.js +5 -3
  16. package/lib/actions/markActivity.d.ts +17 -0
  17. package/lib/actions/markActivity.d.ts.map +1 -0
  18. package/lib/actions/markActivity.js +5 -3
  19. package/lib/actions/postActivity.d.ts +52 -0
  20. package/lib/actions/postActivity.d.ts.map +1 -0
  21. package/lib/actions/postActivity.js +5 -3
  22. package/lib/actions/queueIncomingActivity.js +1 -1
  23. package/lib/actions/sagaError.js +1 -1
  24. package/lib/actions/sendEvent.js +1 -1
  25. package/lib/actions/sendFiles.js +1 -1
  26. package/lib/actions/sendMessage.js +1 -1
  27. package/lib/actions/sendMessageBack.js +1 -1
  28. package/lib/actions/sendPostBack.js +1 -1
  29. package/lib/actions/setDictateInterims.js +1 -1
  30. package/lib/actions/setDictateState.js +1 -1
  31. package/lib/actions/setLanguage.js +1 -1
  32. package/lib/actions/setNotification.js +2 -2
  33. package/lib/actions/setReferenceGrammarID.js +1 -1
  34. package/lib/actions/setSendBox.js +1 -1
  35. package/lib/actions/setSendTimeout.js +1 -1
  36. package/lib/actions/setSendTypingIndicator.js +1 -1
  37. package/lib/actions/setSuggestedActions.js +1 -1
  38. package/lib/actions/startDictate.js +1 -1
  39. package/lib/actions/startSpeakingActivity.js +1 -1
  40. package/lib/actions/stopDictate.js +1 -1
  41. package/lib/actions/stopSpeakingActivity.js +1 -1
  42. package/lib/actions/submitSendBox.js +1 -1
  43. package/lib/actions/updateConnectionStatus.js +1 -1
  44. package/lib/constants/ActivityClientState.js +1 -1
  45. package/lib/createStore.d.ts.map +1 -1
  46. package/lib/createStore.js +5 -5
  47. package/lib/definitions/speakingActivity.js +4 -2
  48. package/lib/index.d.ts +17 -15
  49. package/lib/index.d.ts.map +1 -1
  50. package/lib/index.js +12 -3
  51. package/lib/reducer.d.ts +1 -2
  52. package/lib/reducer.d.ts.map +1 -1
  53. package/lib/reducer.js +1 -4
  54. package/lib/reducers/activities.d.ts +10 -0
  55. package/lib/reducers/activities.d.ts.map +1 -0
  56. package/lib/reducers/activities.js +65 -45
  57. package/lib/reducers/notifications.js +21 -14
  58. package/lib/reducers/typing.js +13 -7
  59. package/lib/sagas/connectionStatusToNotificationSaga.js +1 -1
  60. package/lib/sagas/effects/observeOnce.js +1 -1
  61. package/lib/sagas/effects/whileConnected.js +1 -1
  62. package/lib/sagas/observeActivitySaga.js +21 -3
  63. package/lib/sagas/postActivitySaga.js +51 -72
  64. package/lib/sagas/queueIncomingActivitySaga.js +1 -1
  65. package/lib/sagas/sendFilesToPostActivitySaga.js +4 -4
  66. package/lib/sagas/sendMessageBackToPostActivitySaga.js +1 -1
  67. package/lib/sagas/sendTypingIndicatorOnSetSendBoxSaga.js +1 -1
  68. package/lib/sagas/speakActivityAndStartDictateOnIncomingActivityFromOthersSaga.js +1 -1
  69. package/lib/sagas/startSpeakActivityOnPostActivitySaga.js +1 -1
  70. package/lib/sagas/stopSpeakingActivityOnInputSaga.js +1 -1
  71. package/lib/sagas/submitSendBoxSaga.js +1 -1
  72. package/lib/selectors/activities.js +1 -1
  73. package/lib/selectors/combineSelectors.js +9 -4
  74. package/lib/selectors/dictateState.js +1 -1
  75. package/lib/selectors/language.js +1 -1
  76. package/lib/selectors/notifications.js +1 -1
  77. package/lib/selectors/sendBoxValue.js +1 -1
  78. package/lib/selectors/sendTimeout.js +1 -1
  79. package/lib/selectors/sendTypingIndicator.js +1 -1
  80. package/lib/selectors/shouldSpeakIncomingActivity.js +1 -1
  81. package/lib/types/AnyAnd.d.ts +2 -0
  82. package/lib/types/AnyAnd.d.ts.map +1 -0
  83. package/lib/types/AnyAnd.js +6 -0
  84. package/lib/types/OneOrMany.js +4 -0
  85. package/lib/types/WebChatActivity.d.ts +81 -0
  86. package/lib/types/WebChatActivity.d.ts.map +1 -0
  87. package/lib/types/WebChatActivity.js +6 -0
  88. package/lib/types/external/DirectLineActivity.d.ts +2 -2
  89. package/lib/types/external/DirectLineActivity.d.ts.map +1 -1
  90. package/lib/types/external/DirectLineActivity.js +4 -0
  91. package/lib/types/external/DirectLineAnimationCard.d.ts +5 -2
  92. package/lib/types/external/DirectLineAnimationCard.d.ts.map +1 -1
  93. package/lib/types/external/DirectLineAnimationCard.js +4 -0
  94. package/lib/types/external/DirectLineAttachment.d.ts +8 -2
  95. package/lib/types/external/DirectLineAttachment.d.ts.map +1 -1
  96. package/lib/types/external/DirectLineAttachment.js +4 -0
  97. package/lib/types/external/DirectLineAudioCard.d.ts +5 -2
  98. package/lib/types/external/DirectLineAudioCard.d.ts.map +1 -1
  99. package/lib/types/external/DirectLineAudioCard.js +4 -0
  100. package/lib/types/external/DirectLineBasicCardEssence.d.ts +12 -0
  101. package/lib/types/external/DirectLineBasicCardEssence.d.ts.map +1 -0
  102. package/lib/types/external/DirectLineBasicCardEssence.js +6 -0
  103. package/lib/types/external/DirectLineCardAction.d.ts +1 -1
  104. package/lib/types/external/DirectLineCardAction.d.ts.map +1 -1
  105. package/lib/types/external/DirectLineCardAction.js +4 -0
  106. package/lib/types/external/DirectLineCardImage.d.ts +8 -0
  107. package/lib/types/external/DirectLineCardImage.d.ts.map +1 -0
  108. package/lib/types/external/DirectLineCardImage.js +6 -0
  109. package/lib/types/external/DirectLineHeroCard.d.ts +5 -2
  110. package/lib/types/external/DirectLineHeroCard.d.ts.map +1 -1
  111. package/lib/types/external/DirectLineHeroCard.js +4 -0
  112. package/lib/types/external/DirectLineJSBotConnection.d.ts +1 -1
  113. package/lib/types/external/DirectLineJSBotConnection.d.ts.map +1 -1
  114. package/lib/types/external/DirectLineJSBotConnection.js +4 -0
  115. package/lib/types/external/DirectLineMediaCardEssence.d.ts +21 -0
  116. package/lib/types/external/DirectLineMediaCardEssence.d.ts.map +1 -0
  117. package/lib/types/external/DirectLineMediaCardEssence.js +6 -0
  118. package/lib/types/external/DirectLineOAuthCard.d.ts +7 -2
  119. package/lib/types/external/DirectLineOAuthCard.d.ts.map +1 -1
  120. package/lib/types/external/DirectLineOAuthCard.js +4 -0
  121. package/lib/types/external/DirectLineReceiptCard.d.ts +27 -2
  122. package/lib/types/external/DirectLineReceiptCard.d.ts.map +1 -1
  123. package/lib/types/external/DirectLineReceiptCard.js +4 -0
  124. package/lib/types/external/DirectLineSignInCard.d.ts +7 -2
  125. package/lib/types/external/DirectLineSignInCard.d.ts.map +1 -1
  126. package/lib/types/external/DirectLineSignInCard.js +4 -0
  127. package/lib/types/external/DirectLineSuggestedAction.d.ts +6 -2
  128. package/lib/types/external/DirectLineSuggestedAction.d.ts.map +1 -1
  129. package/lib/types/external/DirectLineSuggestedAction.js +4 -0
  130. package/lib/types/external/DirectLineThumbnailCard.d.ts +5 -2
  131. package/lib/types/external/DirectLineThumbnailCard.d.ts.map +1 -1
  132. package/lib/types/external/DirectLineThumbnailCard.js +4 -0
  133. package/lib/types/external/DirectLineVideoCard.d.ts +5 -2
  134. package/lib/types/external/DirectLineVideoCard.d.ts.map +1 -1
  135. package/lib/types/external/DirectLineVideoCard.js +4 -0
  136. package/lib/types/external/Observable.js +6 -0
  137. package/lib/types/internal/Notification.js +6 -0
  138. package/lib/types/internal/ReduxState.js +6 -0
  139. package/lib/utils/dateToLocaleISOString.js +5 -5
  140. package/lib/utils/deleteKey.js +2 -3
  141. package/lib/utils/isForbiddenPropertyName.d.ts +2 -0
  142. package/lib/utils/isForbiddenPropertyName.d.ts.map +1 -0
  143. package/lib/utils/isForbiddenPropertyName.js +21 -0
  144. package/lib/utils/sleep.js +1 -1
  145. package/lib/utils/uniqueID.js +1 -1
  146. package/package.json +20 -23
  147. package/src/__tests__/detectSlowConnectionSaga.spec.js +1 -1
  148. package/src/__tests__/observeOnce.spec.js +3 -3
  149. package/src/actions/deleteActivity.ts +19 -0
  150. package/src/actions/incomingActivity.ts +21 -0
  151. package/src/actions/markActivity.ts +23 -0
  152. package/src/actions/postActivity.ts +48 -0
  153. package/src/actions/setNotification.js +8 -2
  154. package/src/createStore.ts +4 -4
  155. package/src/definitions/speakingActivity.js +1 -1
  156. package/src/index.ts +19 -14
  157. package/src/reducer.ts +0 -2
  158. package/src/reducers/activities.ts +172 -0
  159. package/src/reducers/notifications.js +22 -16
  160. package/src/reducers/typing.js +6 -5
  161. package/src/sagas/connectionStatusToNotificationSaga.js +1 -1
  162. package/src/sagas/effects/{observeOnce.js → observeOnce.ts} +6 -4
  163. package/src/sagas/effects/{whileConnected.js → whileConnected.ts} +20 -1
  164. package/src/sagas/{observeActivitySaga.js → observeActivitySaga.ts} +25 -6
  165. package/src/sagas/{postActivitySaga.js → postActivitySaga.ts} +57 -48
  166. package/src/sagas/queueIncomingActivitySaga.js +40 -39
  167. package/src/sagas/sendFilesToPostActivitySaga.js +1 -1
  168. package/src/sagas/sendMessageBackToPostActivitySaga.js +0 -1
  169. package/src/sagas/sendTypingIndicatorOnSetSendBoxSaga.js +1 -1
  170. package/src/sagas/speakActivityAndStartDictateOnIncomingActivityFromOthersSaga.js +1 -1
  171. package/src/sagas/startSpeakActivityOnPostActivitySaga.js +1 -1
  172. package/src/sagas/stopSpeakingActivityOnInputSaga.js +1 -1
  173. package/src/sagas/submitSendBoxSaga.js +1 -1
  174. package/src/selectors/activities.ts +12 -0
  175. package/src/selectors/combineSelectors.ts +21 -0
  176. package/src/selectors/dictateState.ts +3 -0
  177. package/src/selectors/language.ts +3 -0
  178. package/src/selectors/notifications.ts +6 -0
  179. package/src/selectors/sendBoxValue.ts +3 -0
  180. package/src/selectors/sendTimeout.ts +3 -0
  181. package/src/selectors/sendTypingIndicator.ts +3 -0
  182. package/src/selectors/shouldSpeakIncomingActivity.ts +3 -0
  183. package/src/types/AnyAnd.ts +1 -0
  184. package/src/types/WebChatActivity.ts +154 -0
  185. package/src/types/external/DirectLineActivity.ts +4 -3
  186. package/src/types/external/DirectLineAnimationCard.ts +6 -4
  187. package/src/types/external/DirectLineAttachment.ts +10 -5
  188. package/src/types/external/DirectLineAudioCard.ts +6 -4
  189. package/src/types/external/DirectLineBasicCardEssence.ts +14 -0
  190. package/src/types/external/DirectLineCardAction.ts +1 -1
  191. package/src/types/external/DirectLineCardImage.ts +9 -0
  192. package/src/types/external/DirectLineHeroCard.ts +6 -4
  193. package/src/types/external/DirectLineJSBotConnection.ts +1 -2
  194. package/src/types/external/DirectLineMediaCardEssence.ts +19 -0
  195. package/src/types/external/DirectLineOAuthCard.ts +7 -4
  196. package/src/types/external/DirectLineReceiptCard.ts +30 -4
  197. package/src/types/external/DirectLineSignInCard.ts +8 -4
  198. package/src/types/external/DirectLineSuggestedAction.ts +6 -4
  199. package/src/types/external/DirectLineThumbnailCard.ts +6 -4
  200. package/src/types/external/DirectLineVideoCard.ts +6 -4
  201. package/src/types/external/Observable.ts +69 -0
  202. package/src/types/internal/Notification.ts +10 -0
  203. package/src/types/internal/ReduxState.ts +16 -0
  204. package/src/utils/dateToLocaleISOString.chatham.spec.js +1 -0
  205. package/src/utils/dateToLocaleISOString.japan.spec.js +1 -0
  206. package/src/utils/dateToLocaleISOString.pacific.spec.js +1 -0
  207. package/src/utils/{dateToLocaleISOString.js → dateToLocaleISOString.ts} +6 -6
  208. package/src/utils/dateToLocaleISOString.utc.spec.js +2 -0
  209. package/src/utils/deleteKey.ts +9 -0
  210. package/src/utils/isForbiddenPropertyName.spec.js +6 -0
  211. package/src/utils/isForbiddenPropertyName.ts +33 -0
  212. package/src/utils/{sleep.js → sleep.ts} +1 -1
  213. package/src/utils/uniqueID.ts +7 -0
  214. package/.eslintignore +0 -9
  215. package/lib/reducers/clockSkewAdjustment.js +0 -44
  216. package/lib/sagas/effects/callUntil.js +0 -48
  217. package/lib/selectors/clockSkewAdjustment.js +0 -14
  218. package/lib/utils/mime-wrapper.js +0 -49
  219. package/src/actions/deleteActivity.js +0 -8
  220. package/src/actions/incomingActivity.js +0 -10
  221. package/src/actions/markActivity.js +0 -14
  222. package/src/actions/postActivity.js +0 -14
  223. package/src/reducers/activities.js +0 -116
  224. package/src/reducers/clockSkewAdjustment.js +0 -29
  225. package/src/sagas/effects/callUntil.js +0 -13
  226. package/src/selectors/activities.js +0 -8
  227. package/src/selectors/clockSkewAdjustment.js +0 -1
  228. package/src/selectors/combineSelectors.js +0 -8
  229. package/src/selectors/dictateState.js +0 -1
  230. package/src/selectors/language.js +0 -1
  231. package/src/selectors/notifications.js +0 -3
  232. package/src/selectors/sendBoxValue.js +0 -1
  233. package/src/selectors/sendTimeout.js +0 -1
  234. package/src/selectors/sendTypingIndicator.js +0 -1
  235. package/src/selectors/shouldSpeakIncomingActivity.js +0 -1
  236. package/src/utils/deleteKey.js +0 -11
  237. package/src/utils/mime-wrapper.js +0 -40
  238. package/src/utils/uniqueID.js +0 -12
@@ -6,6 +6,7 @@
6
6
  import dateToLocaleISOString from './dateToLocaleISOString';
7
7
 
8
8
  test('formatting a time in Japan timezone', () => {
9
+ // eslint-disable-next-line no-magic-numbers
9
10
  const date = new Date(Date.UTC(2000, 0, 1, 0, 12, 34, 567));
10
11
  const actual = dateToLocaleISOString(date);
11
12
 
@@ -6,6 +6,7 @@
6
6
  import dateToLocaleISOString from './dateToLocaleISOString';
7
7
 
8
8
  test('formatting a time in Pacific Standard Time timezone', () => {
9
+ // eslint-disable-next-line no-magic-numbers
9
10
  const date = new Date(Date.UTC(2000, 0, 1, 0, 12, 34, 567));
10
11
  const actual = dateToLocaleISOString(date);
11
12
 
@@ -1,21 +1,21 @@
1
1
  /* eslint no-magic-numbers: ["off", { "ignore": [1, 2, 3, 60] }] */
2
2
 
3
- function pad(value, count = 2) {
3
+ function pad(value: number, count = 2): string {
4
4
  if (typeof value !== 'number') {
5
5
  throw new Error('First argument must be a number');
6
6
  }
7
7
 
8
- value += '';
8
+ let stringValue = value + '';
9
9
 
10
- while (value.length < count) {
11
- value = '0' + value;
10
+ while (stringValue.length < count) {
11
+ stringValue = '0' + stringValue;
12
12
  }
13
13
 
14
- return value;
14
+ return stringValue;
15
15
  }
16
16
 
17
17
  // Adopted from https://stackoverflow.com/questions/17415579/how-to-iso-8601-format-a-date-with-timezone-offset-in-javascript.
18
- export default function dateToLocaleISOString(date) {
18
+ export default function dateToLocaleISOString(date: Date): string {
19
19
  if (!(date instanceof Date)) {
20
20
  throw new Error('First argument must be a Date object');
21
21
  }
@@ -6,6 +6,7 @@
6
6
  import dateToLocaleISOString from './dateToLocaleISOString';
7
7
 
8
8
  test('formatting a time in UTC timezone', () => {
9
+ // eslint-disable-next-line no-magic-numbers
9
10
  const date = new Date(Date.UTC(2000, 0, 1, 0, 12, 34, 567));
10
11
  const actual = dateToLocaleISOString(date);
11
12
 
@@ -13,6 +14,7 @@ test('formatting a time in UTC timezone', () => {
13
14
  });
14
15
 
15
16
  test('formatting a time in UTC timezone with zero milliseconds', () => {
17
+ // eslint-disable-next-line no-magic-numbers
16
18
  const date = new Date(Date.UTC(2000, 0, 1, 0, 12, 34, 0));
17
19
  const actual = dateToLocaleISOString(date);
18
20
 
@@ -0,0 +1,9 @@
1
+ export default function deleteKey<TMap, TKey extends keyof TMap>(map: TMap, key: TKey): Omit<TMap, TKey> {
2
+ if (!map) {
3
+ return map;
4
+ }
5
+
6
+ const { [key]: _deleted, ...nextMap } = map;
7
+
8
+ return nextMap;
9
+ }
@@ -0,0 +1,6 @@
1
+ import isForbiddenPropertyName from './isForbiddenPropertyName';
2
+
3
+ test('should forbid "__proto__"', () => expect(isForbiddenPropertyName('__proto__')).toBeTruthy());
4
+ test('should forbid "constructor"', () => expect(isForbiddenPropertyName('constructor')).toBeTruthy());
5
+ test('should forbid "prototype"', () => expect(isForbiddenPropertyName('prototype')).toBeTruthy());
6
+ test('should not forbid "abc"', () => expect(isForbiddenPropertyName('abc')).toBeFalsy());
@@ -0,0 +1,33 @@
1
+ let FORBIDDEN_PROPERTY_NAMES;
2
+
3
+ function getForbiddenPropertyNames(): string[] {
4
+ return (
5
+ FORBIDDEN_PROPERTY_NAMES ||
6
+ (FORBIDDEN_PROPERTY_NAMES = Object.freeze(
7
+ Array.from(
8
+ new Set([
9
+ // As-of writing, `Object.prototype` includes:
10
+ // __defineGetter__
11
+ // __defineSetter__
12
+ // __lookupGetter__
13
+ // __lookupSetter
14
+ // __proto__
15
+ // constructor
16
+ // hasOwnProperty
17
+ // isPrototypeOf
18
+ // propertyIsEnumerable
19
+ // toLocaleString
20
+ // toString
21
+ // valueOf
22
+ ...Object.getOwnPropertyNames(Object.prototype),
23
+
24
+ 'prototype'
25
+ ])
26
+ )
27
+ ))
28
+ );
29
+ }
30
+
31
+ export default function isForbiddenPropertyName(propertyName: string): boolean {
32
+ return getForbiddenPropertyNames().includes(propertyName);
33
+ }
@@ -1,3 +1,3 @@
1
- export default function sleep(interval) {
1
+ export default function sleep(interval: number): Promise<void> {
2
2
  return new Promise(resolve => setTimeout(resolve, interval));
3
3
  }
@@ -0,0 +1,7 @@
1
+ /* eslint no-magic-numbers: ["error", { "ignore": [2, 36] }] */
2
+
3
+ import random from 'math-random';
4
+
5
+ export default function uniqueID(): string {
6
+ return Date.now() + random().toString(36).substr(2);
7
+ }
package/.eslintignore DELETED
@@ -1,9 +0,0 @@
1
- /src/__tests__/**/*
2
- /src/**/*.spec.js
3
- /src/**/*.spec.jsx
4
- /src/**/*.spec.ts
5
- /src/**/*.spec.tsx
6
- /src/**/*.test.js
7
- /src/**/*.test.jsx
8
- /src/**/*.test.ts
9
- /src/**/*.test.tsx
@@ -1,44 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports["default"] = clockSkewAdjustment;
7
-
8
- var _incomingActivity = require("../actions/incomingActivity");
9
-
10
- var _setClockSkewAdjustment = require("../actions/setClockSkewAdjustment");
11
-
12
- function clockSkewAdjustment() {
13
- var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
14
-
15
- var _ref = arguments.length > 1 ? arguments[1] : undefined,
16
- payload = _ref.payload,
17
- type = _ref.type;
18
-
19
- if (type === _incomingActivity.INCOMING_ACTIVITY) {
20
- var _payload$activity = payload.activity,
21
- _payload$activity$cha = _payload$activity.channelData;
22
- _payload$activity$cha = _payload$activity$cha === void 0 ? {} : _payload$activity$cha;
23
- var clientTimestamp = _payload$activity$cha.clientTimestamp,
24
- timestamp = _payload$activity.timestamp;
25
- var clientSendTime = Date.parse(clientTimestamp);
26
- var serverTime = Date.parse(timestamp);
27
-
28
- if (!isNaN(clientSendTime) && !isNaN(serverTime)) {
29
- // The adjustment include the latency between the client and the server.
30
- // This means, the adjustment is always larger than the actual value.
31
- // And it means, after adjustment, client time will be ahead of server time.
32
- // And it also means, the user-originated message has higher probability to appear below bot-originated message.
33
- // Although it has higher probability, if the user-originated message is still sending (i.e. did not echoback with server timestamp yet),
34
- // the insertion-sort logic will put the bot-originated below the user-originated message.
35
- state = serverTime - clientSendTime;
36
- }
37
- } else if (type === _setClockSkewAdjustment.SET_CLOCK_SKEW_ADJUSTMENT) {
38
- // Currently, this action is for testing purpose only.
39
- state = payload.value;
40
- }
41
-
42
- return state;
43
- }
44
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZWR1Y2Vycy9jbG9ja1NrZXdBZGp1c3RtZW50LmpzIl0sIm5hbWVzIjpbImNsb2NrU2tld0FkanVzdG1lbnQiLCJzdGF0ZSIsInBheWxvYWQiLCJ0eXBlIiwiSU5DT01JTkdfQUNUSVZJVFkiLCJhY3Rpdml0eSIsImNoYW5uZWxEYXRhIiwiY2xpZW50VGltZXN0YW1wIiwidGltZXN0YW1wIiwiY2xpZW50U2VuZFRpbWUiLCJEYXRlIiwicGFyc2UiLCJzZXJ2ZXJUaW1lIiwiaXNOYU4iLCJTRVRfQ0xPQ0tfU0tFV19BREpVU1RNRU5UIiwidmFsdWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFFZSxTQUFTQSxtQkFBVCxHQUEyRDtBQUFBLE1BQTlCQyxLQUE4Qix1RUFBdEIsQ0FBc0I7O0FBQUE7QUFBQSxNQUFqQkMsT0FBaUIsUUFBakJBLE9BQWlCO0FBQUEsTUFBUkMsSUFBUSxRQUFSQSxJQUFROztBQUN4RSxNQUFJQSxJQUFJLEtBQUtDLG1DQUFiLEVBQWdDO0FBQzlCLDRCQUVJRixPQUZKLENBQ0VHLFFBREY7QUFBQSxrREFDY0MsV0FEZDtBQUFBLCtEQUNpRCxFQURqRDtBQUFBLFFBQzZCQyxlQUQ3Qix5QkFDNkJBLGVBRDdCO0FBQUEsUUFDcURDLFNBRHJELHFCQUNxREEsU0FEckQ7QUFJQSxRQUFNQyxjQUFjLEdBQUdDLElBQUksQ0FBQ0MsS0FBTCxDQUFXSixlQUFYLENBQXZCO0FBQ0EsUUFBTUssVUFBVSxHQUFHRixJQUFJLENBQUNDLEtBQUwsQ0FBV0gsU0FBWCxDQUFuQjs7QUFFQSxRQUFJLENBQUNLLEtBQUssQ0FBQ0osY0FBRCxDQUFOLElBQTBCLENBQUNJLEtBQUssQ0FBQ0QsVUFBRCxDQUFwQyxFQUFrRDtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQVgsTUFBQUEsS0FBSyxHQUFHVyxVQUFVLEdBQUdILGNBQXJCO0FBQ0Q7QUFDRixHQWxCRCxNQWtCTyxJQUFJTixJQUFJLEtBQUtXLGlEQUFiLEVBQXdDO0FBQzdDO0FBQ0FiLElBQUFBLEtBQUssR0FBR0MsT0FBTyxDQUFDYSxLQUFoQjtBQUNEOztBQUVELFNBQU9kLEtBQVA7QUFDRCIsInNvdXJjZVJvb3QiOiJjb3JlOi8vLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElOQ09NSU5HX0FDVElWSVRZIH0gZnJvbSAnLi4vYWN0aW9ucy9pbmNvbWluZ0FjdGl2aXR5JztcbmltcG9ydCB7IFNFVF9DTE9DS19TS0VXX0FESlVTVE1FTlQgfSBmcm9tICcuLi9hY3Rpb25zL3NldENsb2NrU2tld0FkanVzdG1lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjbG9ja1NrZXdBZGp1c3RtZW50KHN0YXRlID0gMCwgeyBwYXlsb2FkLCB0eXBlIH0pIHtcbiAgaWYgKHR5cGUgPT09IElOQ09NSU5HX0FDVElWSVRZKSB7XG4gICAgY29uc3Qge1xuICAgICAgYWN0aXZpdHk6IHsgY2hhbm5lbERhdGE6IHsgY2xpZW50VGltZXN0YW1wIH0gPSB7fSwgdGltZXN0YW1wIH1cbiAgICB9ID0gcGF5bG9hZDtcblxuICAgIGNvbnN0IGNsaWVudFNlbmRUaW1lID0gRGF0ZS5wYXJzZShjbGllbnRUaW1lc3RhbXApO1xuICAgIGNvbnN0IHNlcnZlclRpbWUgPSBEYXRlLnBhcnNlKHRpbWVzdGFtcCk7XG5cbiAgICBpZiAoIWlzTmFOKGNsaWVudFNlbmRUaW1lKSAmJiAhaXNOYU4oc2VydmVyVGltZSkpIHtcbiAgICAgIC8vIFRoZSBhZGp1c3RtZW50IGluY2x1ZGUgdGhlIGxhdGVuY3kgYmV0d2VlbiB0aGUgY2xpZW50IGFuZCB0aGUgc2VydmVyLlxuICAgICAgLy8gVGhpcyBtZWFucywgdGhlIGFkanVzdG1lbnQgaXMgYWx3YXlzIGxhcmdlciB0aGFuIHRoZSBhY3R1YWwgdmFsdWUuXG4gICAgICAvLyBBbmQgaXQgbWVhbnMsIGFmdGVyIGFkanVzdG1lbnQsIGNsaWVudCB0aW1lIHdpbGwgYmUgYWhlYWQgb2Ygc2VydmVyIHRpbWUuXG4gICAgICAvLyBBbmQgaXQgYWxzbyBtZWFucywgdGhlIHVzZXItb3JpZ2luYXRlZCBtZXNzYWdlIGhhcyBoaWdoZXIgcHJvYmFiaWxpdHkgdG8gYXBwZWFyIGJlbG93IGJvdC1vcmlnaW5hdGVkIG1lc3NhZ2UuXG4gICAgICAvLyBBbHRob3VnaCBpdCBoYXMgaGlnaGVyIHByb2JhYmlsaXR5LCBpZiB0aGUgdXNlci1vcmlnaW5hdGVkIG1lc3NhZ2UgaXMgc3RpbGwgc2VuZGluZyAoaS5lLiBkaWQgbm90IGVjaG9iYWNrIHdpdGggc2VydmVyIHRpbWVzdGFtcCB5ZXQpLFxuICAgICAgLy8gdGhlIGluc2VydGlvbi1zb3J0IGxvZ2ljIHdpbGwgcHV0IHRoZSBib3Qtb3JpZ2luYXRlZCBiZWxvdyB0aGUgdXNlci1vcmlnaW5hdGVkIG1lc3NhZ2UuXG5cbiAgICAgIHN0YXRlID0gc2VydmVyVGltZSAtIGNsaWVudFNlbmRUaW1lO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlID09PSBTRVRfQ0xPQ0tfU0tFV19BREpVU1RNRU5UKSB7XG4gICAgLy8gQ3VycmVudGx5LCB0aGlzIGFjdGlvbiBpcyBmb3IgdGVzdGluZyBwdXJwb3NlIG9ubHkuXG4gICAgc3RhdGUgPSBwYXlsb2FkLnZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuIl19
@@ -1,48 +0,0 @@
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"] = callUntilEffect;
9
-
10
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
-
12
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
13
-
14
- var _effects = require("redux-saga/effects");
15
-
16
- function callUntilEffect(fn, args, predicate) {
17
- return (0, _effects.call)( /*#__PURE__*/_regenerator["default"].mark(function callUntil() {
18
- var result;
19
- return _regenerator["default"].wrap(function callUntil$(_context) {
20
- while (1) {
21
- switch (_context.prev = _context.next) {
22
- case 0:
23
- _context.next = 2;
24
- return _effects.call.apply(void 0, [fn].concat((0, _toConsumableArray2["default"])(args)));
25
-
26
- case 2:
27
- result = _context.sent;
28
-
29
- if (!predicate(result)) {
30
- _context.next = 5;
31
- break;
32
- }
33
-
34
- return _context.abrupt("break", 7);
35
-
36
- case 5:
37
- _context.next = 0;
38
- break;
39
-
40
- case 7:
41
- case "end":
42
- return _context.stop();
43
- }
44
- }
45
- }, callUntil);
46
- }));
47
- }
48
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zYWdhcy9lZmZlY3RzL2NhbGxVbnRpbC5qcyJdLCJuYW1lcyI6WyJjYWxsVW50aWxFZmZlY3QiLCJmbiIsImFyZ3MiLCJwcmVkaWNhdGUiLCJjYWxsVW50aWwiLCJjYWxsIiwicmVzdWx0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUE7O0FBRWUsU0FBU0EsZUFBVCxDQUF5QkMsRUFBekIsRUFBNkJDLElBQTdCLEVBQW1DQyxTQUFuQyxFQUE4QztBQUMzRCxTQUFPLDhEQUFLLFNBQVVDLFNBQVY7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFTyxtQkFBTUMsNkJBQUtKLEVBQUwsNkNBQVlDLElBQVosR0FBTjs7QUFGUDtBQUVGSSxZQUFBQSxNQUZFOztBQUFBLGlCQUlKSCxTQUFTLENBQUNHLE1BQUQsQ0FKTDtBQUFBO0FBQUE7QUFBQTs7QUFBQTs7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE9BQVVGLFNBQVY7QUFBQSxHQUFMLEVBQVA7QUFTRCIsInNvdXJjZVJvb3QiOiJjb3JlOi8vLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNhbGwgfSBmcm9tICdyZWR1eC1zYWdhL2VmZmVjdHMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjYWxsVW50aWxFZmZlY3QoZm4sIGFyZ3MsIHByZWRpY2F0ZSkge1xuICByZXR1cm4gY2FsbChmdW5jdGlvbiogY2FsbFVudGlsKCkge1xuICAgIGZvciAoOzspIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHlpZWxkIGNhbGwoZm4sIC4uLmFyZ3MpO1xuXG4gICAgICBpZiAocHJlZGljYXRlKHJlc3VsdCkpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cbiJdfQ==
@@ -1,14 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports["default"] = void 0;
7
-
8
- var _default = function _default(_ref) {
9
- var clockSkewAdjustment = _ref.clockSkewAdjustment;
10
- return clockSkewAdjustment;
11
- };
12
-
13
- exports["default"] = _default;
14
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZWxlY3RvcnMvY2xvY2tTa2V3QWRqdXN0bWVudC5qcyJdLCJuYW1lcyI6WyJjbG9ja1NrZXdBZGp1c3RtZW50Il0sIm1hcHBpbmdzIjoiOzs7Ozs7O2VBQWU7QUFBQSxNQUFHQSxtQkFBSCxRQUFHQSxtQkFBSDtBQUFBLFNBQTZCQSxtQkFBN0I7QUFBQSxDIiwic291cmNlUm9vdCI6ImNvcmU6Ly8vIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgKHsgY2xvY2tTa2V3QWRqdXN0bWVudCB9KSA9PiBjbG9ja1NrZXdBZGp1c3RtZW50O1xuIl19
@@ -1,49 +0,0 @@
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"] = void 0;
9
-
10
- var _Mime = _interopRequireDefault(require("mime/Mime"));
11
-
12
- /* eslint no-undef: "off"*/
13
-
14
- /* eslint node/global-require: "off"*/
15
- // We adopted the work from mime-wrapper, at https://github.com/marlon360/mime-wrapper.
16
- // This file wraps the mime library constructor to include '.json' types. This is needed
17
- // to support Angular CLI web projects, in which the webpack.config files are hidden away
18
- // from the user, and do not support .json file extension module resolutions.
19
- //
20
- // Refer to issue https://github.com/jshttp/mime-types/issues/50#issuecomment-390932678
21
- // and issue https://github.com/broofa/node-mime/issues/208.
22
- //
23
- // This file may need to change if the mime library is bumped a major that may cause a
24
- // breaking change, as it relies on the internal library file placement.
25
- // MIT License
26
- //
27
- // Copyright (c) 2018 Marlon Lückert
28
- //
29
- // Permission is hereby granted, free of charge, to any person obtaining a copy
30
- // of this software and associated documentation files (the "Software"), to deal
31
- // in the Software without restriction, including without limitation the rights
32
- // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
33
- // copies of the Software, and to permit persons to whom the Software is
34
- // furnished to do so, subject to the following conditions:
35
- //
36
- // The above copyright notice and this permission notice shall be included in all
37
- // copies or substantial portions of the Software.
38
- //
39
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
40
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
41
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
42
- // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
43
- // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
44
- // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
45
- // SOFTWARE.
46
- var _default = new _Mime["default"](require('mime/types/standard'), require('mime/types/other'));
47
-
48
- exports["default"] = _default;
49
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9taW1lLXdyYXBwZXIuanMiXSwibmFtZXMiOlsiTWltZSIsInJlcXVpcmUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQXFDQTs7QUFyQ0E7O0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtlQUllLElBQUlBLGdCQUFKLENBQVNDLE9BQU8sQ0FBQyxxQkFBRCxDQUFoQixFQUF5Q0EsT0FBTyxDQUFDLGtCQUFELENBQWhELEMiLCJzb3VyY2VSb290IjoiY29yZTovLy8iLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQgbm8tdW5kZWY6IFwib2ZmXCIqL1xuLyogZXNsaW50IG5vZGUvZ2xvYmFsLXJlcXVpcmU6IFwib2ZmXCIqL1xuXG4vLyBXZSBhZG9wdGVkIHRoZSB3b3JrIGZyb20gbWltZS13cmFwcGVyLCBhdCBodHRwczovL2dpdGh1Yi5jb20vbWFybG9uMzYwL21pbWUtd3JhcHBlci5cblxuLy8gVGhpcyBmaWxlIHdyYXBzIHRoZSBtaW1lIGxpYnJhcnkgY29uc3RydWN0b3IgdG8gaW5jbHVkZSAnLmpzb24nIHR5cGVzLiBUaGlzIGlzIG5lZWRlZFxuLy8gdG8gc3VwcG9ydCBBbmd1bGFyIENMSSB3ZWIgcHJvamVjdHMsIGluIHdoaWNoIHRoZSB3ZWJwYWNrLmNvbmZpZyBmaWxlcyBhcmUgaGlkZGVuIGF3YXlcbi8vIGZyb20gdGhlIHVzZXIsIGFuZCBkbyBub3Qgc3VwcG9ydCAuanNvbiBmaWxlIGV4dGVuc2lvbiBtb2R1bGUgcmVzb2x1dGlvbnMuXG4vL1xuLy8gUmVmZXIgdG8gaXNzdWUgaHR0cHM6Ly9naXRodWIuY29tL2pzaHR0cC9taW1lLXR5cGVzL2lzc3Vlcy81MCNpc3N1ZWNvbW1lbnQtMzkwOTMyNjc4XG4vLyBhbmQgaXNzdWUgaHR0cHM6Ly9naXRodWIuY29tL2Jyb29mYS9ub2RlLW1pbWUvaXNzdWVzLzIwOC5cbi8vXG4vLyBUaGlzIGZpbGUgbWF5IG5lZWQgdG8gY2hhbmdlIGlmIHRoZSBtaW1lIGxpYnJhcnkgaXMgYnVtcGVkIGEgbWFqb3IgdGhhdCBtYXkgY2F1c2UgYVxuLy8gYnJlYWtpbmcgY2hhbmdlLCBhcyBpdCByZWxpZXMgb24gdGhlIGludGVybmFsIGxpYnJhcnkgZmlsZSBwbGFjZW1lbnQuXG5cbi8vIE1JVCBMaWNlbnNlXG4vL1xuLy8gQ29weXJpZ2h0IChjKSAyMDE4IE1hcmxvbiBMw7xja2VydFxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbi8vIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuLy8gU09GVFdBUkUuXG5cbmltcG9ydCBNaW1lIGZyb20gJ21pbWUvTWltZSc7XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBNaW1lKHJlcXVpcmUoJ21pbWUvdHlwZXMvc3RhbmRhcmQnKSwgcmVxdWlyZSgnbWltZS90eXBlcy9vdGhlcicpKTtcbiJdfQ==
@@ -1,8 +0,0 @@
1
- export const DELETE_ACTIVITY = 'DIRECT_LINE/DELETE_ACTIVITY';
2
-
3
- export default function deleteActivity(activityID) {
4
- return {
5
- type: DELETE_ACTIVITY,
6
- payload: { activityID }
7
- };
8
- }
@@ -1,10 +0,0 @@
1
- const INCOMING_ACTIVITY = 'DIRECT_LINE/INCOMING_ACTIVITY';
2
-
3
- export default function incomingActivity(activity) {
4
- return {
5
- type: INCOMING_ACTIVITY,
6
- payload: { activity }
7
- };
8
- }
9
-
10
- export { INCOMING_ACTIVITY };
@@ -1,14 +0,0 @@
1
- const MARK_ACTIVITY = 'WEB_CHAT/MARK_ACTIVITY';
2
-
3
- export default function markActivity({ id: activityID }, name, value) {
4
- return {
5
- type: MARK_ACTIVITY,
6
- payload: {
7
- activityID,
8
- name,
9
- value
10
- }
11
- };
12
- }
13
-
14
- export { MARK_ACTIVITY };
@@ -1,14 +0,0 @@
1
- const POST_ACTIVITY = 'DIRECT_LINE/POST_ACTIVITY';
2
- export const POST_ACTIVITY_FULFILLED = `${POST_ACTIVITY}_FULFILLED`;
3
- export const POST_ACTIVITY_PENDING = `${POST_ACTIVITY}_PENDING`;
4
- export const POST_ACTIVITY_REJECTED = `${POST_ACTIVITY}_REJECTED`;
5
-
6
- export default function postActivity(activity, method = 'keyboard') {
7
- return {
8
- type: POST_ACTIVITY,
9
- meta: { method },
10
- payload: { activity }
11
- };
12
- }
13
-
14
- export { POST_ACTIVITY };
@@ -1,116 +0,0 @@
1
- /* eslint no-magic-numbers: ["error", { "ignore": [0, -1] }] */
2
-
3
- import updateIn from 'simple-update-in';
4
-
5
- import { DELETE_ACTIVITY } from '../actions/deleteActivity';
6
- import { INCOMING_ACTIVITY } from '../actions/incomingActivity';
7
- import { MARK_ACTIVITY } from '../actions/markActivity';
8
-
9
- import { POST_ACTIVITY_FULFILLED, POST_ACTIVITY_PENDING, POST_ACTIVITY_REJECTED } from '../actions/postActivity';
10
-
11
- import { SEND_FAILED, SENDING, SENT } from '../constants/ActivityClientState';
12
-
13
- const DEFAULT_STATE = [];
14
- const DIRECT_LINE_PLACEHOLDER_URL =
15
- 'https://docs.botframework.com/static/devportal/client/images/bot-framework-default-placeholder.png';
16
-
17
- function getClientActivityID({ channelData: { clientActivityID } = {} }) {
18
- return clientActivityID;
19
- }
20
-
21
- function findByClientActivityID(clientActivityID) {
22
- return activity => getClientActivityID(activity) === clientActivityID;
23
- }
24
-
25
- function patchActivity(activity) {
26
- // Direct Line channel will return a placeholder image for the user-uploaded image.
27
- // As observed, the URL for the placeholder image is https://docs.botframework.com/static/devportal/client/images/bot-framework-default-placeholder.png.
28
- // To make our code simpler, we are removing the value if "contentUrl" is pointing to a placeholder image.
29
-
30
- // TODO: [P2] #2869 This "contentURL" removal code should be moved to DirectLineJS adapter.
31
-
32
- // Also, if the "contentURL" starts with "blob:", this means the user is uploading a file (the URL is constructed by URL.createObjectURL)
33
- // Although the copy/reference of the file is temporary in-memory, to make the UX consistent across page refresh, we do not allow the user to re-download the file either.
34
-
35
- return updateIn(activity, ['attachments', () => true, 'contentUrl'], contentUrl => {
36
- if (contentUrl !== DIRECT_LINE_PLACEHOLDER_URL && !/^blob:/iu.test(contentUrl)) {
37
- return contentUrl;
38
- }
39
- });
40
- }
41
-
42
- function upsertActivityWithSort(activities, nextActivity) {
43
- nextActivity = patchActivity(nextActivity);
44
-
45
- const { channelData: { clientActivityID: nextClientActivityID } = {} } = nextActivity;
46
-
47
- const nextTimestamp = Date.parse(nextActivity.timestamp);
48
- const nextActivities = activities.filter(
49
- ({ channelData: { clientActivityID } = {}, id }) =>
50
- // We will remove all "sending messages" activities and activities with same ID
51
- // "clientActivityID" is unique and used to track if the message has been sent and echoed back from the server
52
- !(nextClientActivityID && clientActivityID === nextClientActivityID) && !(id && id === nextActivity.id)
53
- );
54
-
55
- // Then, find the right (sorted) place to insert the new activity at, based on timestamp
56
- // Since clockskew might happen, we will ignore timestamp on messages that are sending
57
-
58
- const indexToInsert = nextActivities.findIndex(
59
- ({ channelData: { state } = {}, timestamp }) =>
60
- Date.parse(timestamp) > nextTimestamp && state !== SENDING && state !== SEND_FAILED
61
- );
62
-
63
- // If no right place are found, append it
64
- nextActivities.splice(~indexToInsert ? indexToInsert : nextActivities.length, 0, nextActivity);
65
-
66
- return nextActivities;
67
- }
68
-
69
- export default function activities(state = DEFAULT_STATE, { meta, payload, type }) {
70
- switch (type) {
71
- case DELETE_ACTIVITY:
72
- state = updateIn(state, [({ id }) => id === payload.activityID]);
73
- break;
74
-
75
- case MARK_ACTIVITY:
76
- state = updateIn(
77
- state,
78
- [({ id }) => id === payload.activityID, 'channelData', payload.name],
79
- () => payload.value
80
- );
81
- break;
82
-
83
- case POST_ACTIVITY_PENDING:
84
- state = upsertActivityWithSort(
85
- state,
86
- updateIn(payload.activity, ['channelData', 'state'], () => SENDING)
87
- );
88
- break;
89
-
90
- case POST_ACTIVITY_REJECTED:
91
- state = updateIn(
92
- state,
93
- [findByClientActivityID(meta.clientActivityID), 'channelData', 'state'],
94
- () => SEND_FAILED
95
- );
96
- break;
97
-
98
- case POST_ACTIVITY_FULFILLED:
99
- state = updateIn(state, [findByClientActivityID(meta.clientActivityID)], () =>
100
- // We will replace the activity with the version from the server
101
- updateIn(patchActivity(payload.activity), ['channelData', 'state'], () => SENT)
102
- );
103
-
104
- break;
105
-
106
- case INCOMING_ACTIVITY:
107
- // TODO: [P4] #2100 Move "typing" into Constants.ActivityType
108
- state = upsertActivityWithSort(state, payload.activity);
109
- break;
110
-
111
- default:
112
- break;
113
- }
114
-
115
- return state;
116
- }
@@ -1,29 +0,0 @@
1
- import { INCOMING_ACTIVITY } from '../actions/incomingActivity';
2
- import { SET_CLOCK_SKEW_ADJUSTMENT } from '../actions/setClockSkewAdjustment';
3
-
4
- export default function clockSkewAdjustment(state = 0, { payload, type }) {
5
- if (type === INCOMING_ACTIVITY) {
6
- const {
7
- activity: { channelData: { clientTimestamp } = {}, timestamp }
8
- } = payload;
9
-
10
- const clientSendTime = Date.parse(clientTimestamp);
11
- const serverTime = Date.parse(timestamp);
12
-
13
- if (!isNaN(clientSendTime) && !isNaN(serverTime)) {
14
- // The adjustment include the latency between the client and the server.
15
- // This means, the adjustment is always larger than the actual value.
16
- // And it means, after adjustment, client time will be ahead of server time.
17
- // And it also means, the user-originated message has higher probability to appear below bot-originated message.
18
- // Although it has higher probability, if the user-originated message is still sending (i.e. did not echoback with server timestamp yet),
19
- // the insertion-sort logic will put the bot-originated below the user-originated message.
20
-
21
- state = serverTime - clientSendTime;
22
- }
23
- } else if (type === SET_CLOCK_SKEW_ADJUSTMENT) {
24
- // Currently, this action is for testing purpose only.
25
- state = payload.value;
26
- }
27
-
28
- return state;
29
- }
@@ -1,13 +0,0 @@
1
- import { call } from 'redux-saga/effects';
2
-
3
- export default function callUntilEffect(fn, args, predicate) {
4
- return call(function* callUntil() {
5
- for (;;) {
6
- const result = yield call(fn, ...args);
7
-
8
- if (predicate(result)) {
9
- break;
10
- }
11
- }
12
- });
13
- }
@@ -1,8 +0,0 @@
1
- const activities = ({ activities }) => activities;
2
-
3
- const of = predicate => state => activities(state).filter(predicate);
4
- const ofID = targetID => of(({ id }) => id === targetID);
5
- const ofType = targetType => of(({ type }) => type === targetType);
6
-
7
- export default activities;
8
- export { of, ofID, ofType };
@@ -1 +0,0 @@
1
- export default ({ clockSkewAdjustment }) => clockSkewAdjustment;
@@ -1,8 +0,0 @@
1
- export default function combineSelectors(selectors) {
2
- if (Array.isArray(selectors)) {
3
- return state => selectors.reduce((combinedState, selector) => [...combinedState, selector(state)], []);
4
- }
5
-
6
- return state =>
7
- Object.keys(selectors).reduce((combinedState, key) => ({ ...combinedState, [key]: selectors[key](state) }), {});
8
- }
@@ -1 +0,0 @@
1
- export default ({ dictateState }) => dictateState;
@@ -1 +0,0 @@
1
- export default ({ language }) => language;
@@ -1,3 +0,0 @@
1
- const notifications = ({ notifications }) => notifications;
2
-
3
- export default notifications;
@@ -1 +0,0 @@
1
- export default ({ sendBoxValue }) => sendBoxValue;
@@ -1 +0,0 @@
1
- export default ({ sendTimeout }) => sendTimeout;
@@ -1 +0,0 @@
1
- export default ({ sendTypingIndicator }) => sendTypingIndicator;
@@ -1 +0,0 @@
1
- export default ({ shouldSpeakIncomingActivity }) => shouldSpeakIncomingActivity;
@@ -1,11 +0,0 @@
1
- /* eslint no-unused-vars: ["error", { "varsIgnorePattern": "^deleted$" }] */
2
-
3
- export default function deleteKey(map, key) {
4
- if (!map) {
5
- return map;
6
- }
7
-
8
- const { [key]: deleted, ...nextMap } = map;
9
-
10
- return nextMap;
11
- }
@@ -1,40 +0,0 @@
1
- /* eslint no-undef: "off"*/
2
- /* eslint node/global-require: "off"*/
3
-
4
- // We adopted the work from mime-wrapper, at https://github.com/marlon360/mime-wrapper.
5
-
6
- // This file wraps the mime library constructor to include '.json' types. This is needed
7
- // to support Angular CLI web projects, in which the webpack.config files are hidden away
8
- // from the user, and do not support .json file extension module resolutions.
9
- //
10
- // Refer to issue https://github.com/jshttp/mime-types/issues/50#issuecomment-390932678
11
- // and issue https://github.com/broofa/node-mime/issues/208.
12
- //
13
- // This file may need to change if the mime library is bumped a major that may cause a
14
- // breaking change, as it relies on the internal library file placement.
15
-
16
- // MIT License
17
- //
18
- // Copyright (c) 2018 Marlon Lückert
19
- //
20
- // Permission is hereby granted, free of charge, to any person obtaining a copy
21
- // of this software and associated documentation files (the "Software"), to deal
22
- // in the Software without restriction, including without limitation the rights
23
- // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
24
- // copies of the Software, and to permit persons to whom the Software is
25
- // furnished to do so, subject to the following conditions:
26
- //
27
- // The above copyright notice and this permission notice shall be included in all
28
- // copies or substantial portions of the Software.
29
- //
30
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
31
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
32
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
33
- // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
34
- // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
35
- // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
36
- // SOFTWARE.
37
-
38
- import Mime from 'mime/Mime';
39
-
40
- export default new Mime(require('mime/types/standard'), require('mime/types/other'));
@@ -1,12 +0,0 @@
1
- /* eslint no-magic-numbers: ["error", { "ignore": [2, 36] }] */
2
-
3
- import random from 'math-random';
4
-
5
- export default function uniqueID() {
6
- return (
7
- Date.now() +
8
- random()
9
- .toString(36)
10
- .substr(2)
11
- );
12
- }