@atlaskit/collab-provider 8.2.0 → 8.4.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.
Files changed (72) hide show
  1. package/CHANGELOG.md +49 -0
  2. package/dist/cjs/analytics/index.js +67 -9
  3. package/dist/cjs/analytics/performance.js +46 -35
  4. package/dist/cjs/analytics/ufo.js +33 -0
  5. package/dist/cjs/channel.js +307 -162
  6. package/dist/cjs/connectivity/network.js +53 -0
  7. package/dist/cjs/connectivity/reconnect-helper.js +48 -0
  8. package/dist/cjs/connectivity/singleton.js +15 -0
  9. package/dist/cjs/disconnected-reason-mapper.js +19 -2
  10. package/dist/cjs/{error-code-mapper.js → errors/error-code-mapper.js} +17 -2
  11. package/dist/cjs/errors/error-types.js +43 -0
  12. package/dist/cjs/helpers/const.js +4 -11
  13. package/dist/cjs/provider/catchup.js +8 -12
  14. package/dist/cjs/provider/commit-step.js +70 -0
  15. package/dist/cjs/provider/index.js +503 -566
  16. package/dist/cjs/provider/telepointers.js +78 -0
  17. package/dist/cjs/version-wrapper.js +1 -1
  18. package/dist/cjs/version.json +1 -1
  19. package/dist/es2019/analytics/index.js +58 -8
  20. package/dist/es2019/analytics/performance.js +47 -35
  21. package/dist/es2019/analytics/ufo.js +22 -0
  22. package/dist/es2019/channel.js +192 -93
  23. package/dist/es2019/connectivity/network.js +34 -0
  24. package/dist/es2019/connectivity/reconnect-helper.js +29 -0
  25. package/dist/es2019/connectivity/singleton.js +7 -0
  26. package/dist/es2019/disconnected-reason-mapper.js +17 -1
  27. package/dist/es2019/{error-code-mapper.js → errors/error-code-mapper.js} +17 -2
  28. package/dist/es2019/errors/error-types.js +13 -0
  29. package/dist/es2019/helpers/const.js +3 -8
  30. package/dist/es2019/provider/catchup.js +5 -12
  31. package/dist/es2019/provider/commit-step.js +57 -0
  32. package/dist/es2019/provider/index.js +428 -515
  33. package/dist/es2019/provider/telepointers.js +65 -0
  34. package/dist/es2019/version-wrapper.js +1 -1
  35. package/dist/es2019/version.json +1 -1
  36. package/dist/esm/analytics/index.js +68 -9
  37. package/dist/esm/analytics/performance.js +47 -35
  38. package/dist/esm/analytics/ufo.js +25 -0
  39. package/dist/esm/channel.js +308 -165
  40. package/dist/esm/connectivity/network.js +45 -0
  41. package/dist/esm/connectivity/reconnect-helper.js +42 -0
  42. package/dist/esm/connectivity/singleton.js +7 -0
  43. package/dist/esm/disconnected-reason-mapper.js +17 -1
  44. package/dist/esm/{error-code-mapper.js → errors/error-code-mapper.js} +17 -2
  45. package/dist/esm/errors/error-types.js +34 -0
  46. package/dist/esm/helpers/const.js +3 -8
  47. package/dist/esm/provider/catchup.js +8 -12
  48. package/dist/esm/provider/commit-step.js +62 -0
  49. package/dist/esm/provider/index.js +504 -567
  50. package/dist/esm/provider/telepointers.js +69 -0
  51. package/dist/esm/version-wrapper.js +1 -1
  52. package/dist/esm/version.json +1 -1
  53. package/dist/types/analytics/index.d.ts +8 -2
  54. package/dist/types/analytics/performance.d.ts +6 -5
  55. package/dist/types/analytics/ufo.d.ts +3 -0
  56. package/dist/types/channel.d.ts +16 -5
  57. package/dist/types/connectivity/network.d.ts +17 -0
  58. package/dist/types/connectivity/reconnect-helper.d.ts +8 -0
  59. package/dist/types/connectivity/singleton.d.ts +3 -0
  60. package/dist/types/disconnected-reason-mapper.d.ts +1 -0
  61. package/dist/types/{error-code-mapper.d.ts → errors/error-code-mapper.d.ts} +6 -2
  62. package/dist/types/errors/error-types.d.ts +8 -0
  63. package/dist/types/helpers/const.d.ts +133 -26
  64. package/dist/types/provider/commit-step.d.ts +14 -0
  65. package/dist/types/provider/index.d.ts +24 -6
  66. package/dist/types/provider/telepointers.d.ts +5 -0
  67. package/dist/types/socket-io-provider.d.ts +3 -2
  68. package/dist/types/types.d.ts +44 -12
  69. package/package.json +5 -6
  70. package/report.api.md +49 -3
  71. package/.vscode/settings.json +0 -3
  72. package/error-code-mapper/package.json +0 -15
@@ -0,0 +1,45 @@
1
+ import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
2
+ import _createClass from "@babel/runtime/helpers/createClass";
3
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
4
+ export var NetworkStatus;
5
+ (function (NetworkStatus) {
6
+ NetworkStatus["ONLINE"] = "ONLINE";
7
+ NetworkStatus["OFFLINE"] = "OFFLINE";
8
+ })(NetworkStatus || (NetworkStatus = {}));
9
+ var Network = /*#__PURE__*/function () {
10
+ function Network(props) {
11
+ var _this = this;
12
+ _classCallCheck(this, Network);
13
+ _defineProperty(this, "offlineHandler", function () {
14
+ _this.status = NetworkStatus.OFFLINE;
15
+ });
16
+ _defineProperty(this, "onlineHandler", function () {
17
+ _this.status = NetworkStatus.ONLINE;
18
+ if (_this.onlineCallback) {
19
+ _this.onlineCallback();
20
+ }
21
+ });
22
+ if (props !== null && props !== void 0 && props.initialStatus) {
23
+ this.status = props.initialStatus;
24
+ }
25
+ if (props !== null && props !== void 0 && props.onlineCallback) {
26
+ this.onlineCallback = props.onlineCallback;
27
+ }
28
+ window.addEventListener('offline', this.offlineHandler);
29
+ window.addEventListener('online', this.onlineHandler);
30
+ }
31
+ _createClass(Network, [{
32
+ key: "getStatus",
33
+ value: function getStatus() {
34
+ return this.status || null;
35
+ }
36
+ }, {
37
+ key: "destroy",
38
+ value: function destroy() {
39
+ window.removeEventListener('offline', this.offlineHandler);
40
+ window.removeEventListener('online', this.onlineHandler);
41
+ }
42
+ }]);
43
+ return Network;
44
+ }();
45
+ export { Network as default };
@@ -0,0 +1,42 @@
1
+ import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
2
+ import _createClass from "@babel/runtime/helpers/createClass";
3
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
4
+ import { NetworkStatus } from './network';
5
+ import { network } from './singleton';
6
+
7
+ // Calculation for max 8 offline reconnect attempts, with reconnection delay 200ms, randomization factor 0.5, reconnection delay max 128s
8
+ // Min: 800ms, Avg: 51s, Max: 6m
9
+ var FAILED_RECONNECTS_WHILE_OFFLINE_THRESHOLD = 8;
10
+ var ReconnectHelper = /*#__PURE__*/function () {
11
+ function ReconnectHelper() {
12
+ var _this = this;
13
+ _classCallCheck(this, ReconnectHelper);
14
+ _defineProperty(this, "failedReconnectCount", 0);
15
+ _defineProperty(this, "onlineHandler", function () {
16
+ _this.failedReconnectCount = 0;
17
+ });
18
+ window.addEventListener('online', this.onlineHandler);
19
+ }
20
+ _createClass(ReconnectHelper, [{
21
+ key: "countReconnectError",
22
+ value: function countReconnectError() {
23
+ // Only count the reconnection attempts when offline
24
+ if (network.getStatus() === NetworkStatus.OFFLINE) {
25
+ this.failedReconnectCount++;
26
+ }
27
+ }
28
+ }, {
29
+ key: "isLikelyNetworkIssue",
30
+ value: function isLikelyNetworkIssue() {
31
+ var isLikelyNetworkIssue = this.failedReconnectCount >= FAILED_RECONNECTS_WHILE_OFFLINE_THRESHOLD;
32
+ return isLikelyNetworkIssue;
33
+ }
34
+ }, {
35
+ key: "destroy",
36
+ value: function destroy() {
37
+ window.removeEventListener('online', this.onlineHandler);
38
+ }
39
+ }]);
40
+ return ReconnectHelper;
41
+ }();
42
+ export { ReconnectHelper as default };
@@ -0,0 +1,7 @@
1
+ import Network, { NetworkStatus } from './network';
2
+
3
+ // Assume the connection is established at first
4
+ var network = new Network({
5
+ initialStatus: NetworkStatus.ONLINE
6
+ });
7
+ export { network };
@@ -19,4 +19,20 @@ export var DisconnectReason;
19
19
  DisconnectReason["SOCKET_ERROR"] = "SOCKET_ERROR";
20
20
  DisconnectReason["SOCKET_TIMEOUT"] = "SOCKET_TIMEOUT";
21
21
  DisconnectReason["UNKNOWN_DISCONNECT"] = "UNKNOWN_DISCONNECT";
22
- })(DisconnectReason || (DisconnectReason = {}));
22
+ })(DisconnectReason || (DisconnectReason = {}));
23
+ export var disconnectedReasonMapper = function disconnectedReasonMapper(reason) {
24
+ switch (reason) {
25
+ case socketIOReasons.IO_CLIENT_DISCONNECT:
26
+ return DisconnectReason.CLIENT_DISCONNECT;
27
+ case socketIOReasons.IO_SERVER_DISCONNECT:
28
+ return DisconnectReason.SERVER_DISCONNECT;
29
+ case socketIOReasons.TRANSPORT_CLOSED:
30
+ return DisconnectReason.SOCKET_CLOSED;
31
+ case socketIOReasons.TRANSPORT_ERROR:
32
+ return DisconnectReason.SOCKET_ERROR;
33
+ case socketIOReasons.PING_TIMEOUT:
34
+ return DisconnectReason.SOCKET_TIMEOUT;
35
+ default:
36
+ return DisconnectReason.UNKNOWN_DISCONNECT;
37
+ }
38
+ };
@@ -2,7 +2,7 @@ import _typeof from "@babel/runtime/helpers/typeof";
2
2
  export var ErrorCodeMapper = {
3
3
  noPermissionError: {
4
4
  code: 'NO_PERMISSION_ERROR',
5
- message: 'User does not have permissions to access this document'
5
+ message: 'User does not have permissions to access this document or document is not found'
6
6
  },
7
7
  documentNotFound: {
8
8
  code: 'DOCUMENT_NOT_FOUND',
@@ -24,6 +24,10 @@ export var ErrorCodeMapper = {
24
24
  code: 'FAIL_TO_SAVE',
25
25
  message: 'Collab service is not able to save changes'
26
26
  },
27
+ restoreError: {
28
+ code: 'DOCUMENT_RESTORE_ERROR',
29
+ message: 'Collab service unable to restore document'
30
+ },
27
31
  internalError: {
28
32
  code: 'INTERNAL_SERVICE_ERROR',
29
33
  message: 'Collab service has experienced an internal server error'
@@ -54,11 +58,22 @@ export var errorCodeMapper = function errorCodeMapper(error) {
54
58
  code: ErrorCodeMapper.failToSave.code,
55
59
  message: ErrorCodeMapper.failToSave.message
56
60
  };
57
- default:
61
+ case 'DOCUMENT_RESTORE_ERROR':
62
+ return {
63
+ status: 500,
64
+ code: ErrorCodeMapper.restoreError.code,
65
+ message: ErrorCodeMapper.restoreError.message
66
+ };
67
+ // Temporarily re-added so we don't emit errors to Confluence by default as they will disconnect the collab provider
68
+ case 'CATCHUP_FAILED':
69
+ case 'GET_QUERY_TIME_OUT':
70
+ case 'INIT_DATA_LOAD_FAILED':
58
71
  return {
59
72
  status: 500,
60
73
  code: ErrorCodeMapper.internalError.code,
61
74
  message: ErrorCodeMapper.internalError.message
62
75
  };
76
+ default:
77
+ break;
63
78
  }
64
79
  };
@@ -0,0 +1,34 @@
1
+ import _createClass from "@babel/runtime/helpers/createClass";
2
+ import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
3
+ import _assertThisInitialized from "@babel/runtime/helpers/assertThisInitialized";
4
+ import _inherits from "@babel/runtime/helpers/inherits";
5
+ import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstructorReturn";
6
+ import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf";
7
+ import _wrapNativeSuper from "@babel/runtime/helpers/wrapNativeSuper";
8
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
9
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
10
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
11
+ export var NotConnectedError = /*#__PURE__*/function (_Error) {
12
+ _inherits(NotConnectedError, _Error);
13
+ var _super = _createSuper(NotConnectedError);
14
+ function NotConnectedError(message) {
15
+ var _this;
16
+ _classCallCheck(this, NotConnectedError);
17
+ _this = _super.call(this, message);
18
+ _defineProperty(_assertThisInitialized(_this), "name", 'NotConnectedError');
19
+ return _this;
20
+ }
21
+ return _createClass(NotConnectedError);
22
+ }( /*#__PURE__*/_wrapNativeSuper(Error));
23
+ export var NotInitializedError = /*#__PURE__*/function (_Error2) {
24
+ _inherits(NotInitializedError, _Error2);
25
+ var _super2 = _createSuper(NotInitializedError);
26
+ function NotInitializedError(message) {
27
+ var _this2;
28
+ _classCallCheck(this, NotInitializedError);
29
+ _this2 = _super2.call(this, message);
30
+ _defineProperty(_assertThisInitialized(_this2), "name", 'NotInitializedError');
31
+ return _this2;
32
+ }
33
+ return _createClass(NotInitializedError);
34
+ }( /*#__PURE__*/_wrapNativeSuper(Error));
@@ -1,21 +1,16 @@
1
- export var EVENT_SUBJECT = 'collab';
2
- export var COLLAB_SERVICE;
3
- (function (COLLAB_SERVICE) {
4
- COLLAB_SERVICE["NCS"] = "ncs";
5
- COLLAB_SERVICE["SYNCHRONY"] = "synchrony";
6
- })(COLLAB_SERVICE || (COLLAB_SERVICE = {}));
7
1
  export var EVENT_ACTION;
8
2
  (function (EVENT_ACTION) {
9
3
  EVENT_ACTION["CONNECTION"] = "connection";
10
4
  EVENT_ACTION["CATCHUP"] = "catchup";
11
5
  EVENT_ACTION["DOCUMENT_INIT"] = "documentInit";
12
6
  EVENT_ACTION["ADD_STEPS"] = "addSteps";
13
- EVENT_ACTION["CONVERT_PM_TO_ADF"] = "convertPMToADF";
14
7
  EVENT_ACTION["UPDATE_PARTICIPANTS"] = "updateParticipants";
15
8
  EVENT_ACTION["COMMIT_UNCONFIRMED_STEPS"] = "commitUnconfirmedSteps";
16
9
  EVENT_ACTION["REINITIALISE_DOCUMENT"] = "reinitialiseDocument";
17
- EVENT_ACTION["INIT_PROVIDER"] = "initProvider";
18
10
  EVENT_ACTION["ERROR"] = "error";
11
+ EVENT_ACTION["PUBLISH_PAGE"] = "publishPage";
12
+ EVENT_ACTION["GET_CURRENT_STATE"] = "getCurrentState";
13
+ EVENT_ACTION["INVALIDATE_TOKEN"] = "invalidateToken";
19
14
  })(EVENT_ACTION || (EVENT_ACTION = {}));
20
15
  export var EVENT_STATUS;
21
16
  (function (EVENT_STATUS) {
@@ -34,7 +34,7 @@ export function rebaseSteps(steps, mapping) {
34
34
  }
35
35
  export var catchup = /*#__PURE__*/function () {
36
36
  var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(opt) {
37
- var _yield$opt$fetchCatch, doc, serverStepMaps, serverVersion, metadata, currentPmVersion, _ref2, unconfirmedSteps, _ref3, _unconfirmedSteps, stepMaps, mapping, newUnconfirmedSteps;
37
+ var _yield$opt$fetchCatch, doc, serverStepMaps, serverVersion, metadata, currentPmVersion, unconfirmedSteps, _unconfirmedSteps, stepMaps, mapping, newUnconfirmedSteps;
38
38
  return _regeneratorRuntime.wrap(function _callee$(_context) {
39
39
  while (1) {
40
40
  switch (_context.prev = _context.next) {
@@ -53,9 +53,7 @@ export var catchup = /*#__PURE__*/function () {
53
53
  logger("Could not determine server version");
54
54
  } else if (serverVersion <= currentPmVersion) {
55
55
  // there are no step maps in this case after page recovery
56
- _ref2 = opt.getUnconfirmedSteps() || {
57
- steps: []
58
- }, unconfirmedSteps = _ref2.steps; // replace the entire document
56
+ unconfirmedSteps = opt.getUnconfirmedSteps(); // replace the entire document
59
57
  logger("Replacing document: ".concat(doc));
60
58
  logger("getting metadata: ".concat(metadata));
61
59
  // Replace local document and version number
@@ -65,15 +63,13 @@ export var catchup = /*#__PURE__*/function () {
65
63
  metadata: metadata,
66
64
  reserveCursor: true
67
65
  });
68
- if (unconfirmedSteps.length) {
66
+ if (unconfirmedSteps !== null && unconfirmedSteps !== void 0 && unconfirmedSteps.length) {
69
67
  opt.applyLocalSteps(unconfirmedSteps);
70
68
  }
71
69
  } else {
72
70
  // Please, do not use those steps inside of async
73
71
  // method. That will lead to outdated steps
74
- _ref3 = opt.getUnconfirmedSteps() || {
75
- steps: []
76
- }, _unconfirmedSteps = _ref3.steps;
72
+ _unconfirmedSteps = opt.getUnconfirmedSteps();
77
73
  logger("Too far behind[current: v".concat(currentPmVersion, ", server: v").concat(serverVersion, ". ").concat(serverStepMaps.length, " steps need to catchup]"));
78
74
  /**
79
75
  * Remove steps from queue where the version is older than
@@ -100,12 +96,12 @@ export var catchup = /*#__PURE__*/function () {
100
96
  // steps back into the editor, so we don't lose any data. But before that, we need to rebase
101
97
  // those steps since their position could be changed after replacing.
102
98
  // https://prosemirror.net/docs/guide/#transform.rebasing
103
- if (_unconfirmedSteps.length) {
99
+ if (_unconfirmedSteps !== null && _unconfirmedSteps !== void 0 && _unconfirmedSteps.length) {
104
100
  // Create StepMap from StepMap JSON
105
101
  // eslint-disable-next-line no-unused-vars
106
- stepMaps = serverStepMaps.map(function (_ref4) {
107
- var ranges = _ref4.ranges,
108
- inverted = _ref4.inverted;
102
+ stepMaps = serverStepMaps.map(function (_ref2) {
103
+ var ranges = _ref2.ranges,
104
+ inverted = _ref2.inverted;
109
105
  // Due to @types/prosemirror-transform mismatch with the actual
110
106
  // constructor, hack to set the `inverted`.
111
107
  var stepMap = new StepMap(ranges);
@@ -0,0 +1,62 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
3
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
4
+ import countBy from 'lodash/countBy';
5
+ import { ADD_STEPS_TYPE, EVENT_ACTION, EVENT_STATUS } from '../helpers/const';
6
+ import { AcknowledgementResponseTypes } from '../types';
7
+ export var commitStep = function commitStep(_ref) {
8
+ var channel = _ref.channel,
9
+ steps = _ref.steps,
10
+ version = _ref.version,
11
+ userId = _ref.userId,
12
+ clientId = _ref.clientId,
13
+ onStepsAdded = _ref.onStepsAdded,
14
+ onErrorHandled = _ref.onErrorHandled,
15
+ analyticsHelper = _ref.analyticsHelper;
16
+ var stepsWithClientAndUserId = steps.map(function (step) {
17
+ return _objectSpread(_objectSpread({}, step.toJSON()), {}, {
18
+ clientId: clientId,
19
+ userId: userId
20
+ });
21
+ });
22
+ var start = new Date().getTime();
23
+ try {
24
+ channel.broadcast('steps:commit', {
25
+ steps: stepsWithClientAndUserId,
26
+ version: version,
27
+ userId: userId
28
+ }, function (response) {
29
+ var latency = new Date().getTime() - start;
30
+ if (response.type === AcknowledgementResponseTypes.SUCCESS) {
31
+ onStepsAdded({
32
+ steps: stepsWithClientAndUserId,
33
+ version: response.version
34
+ });
35
+ analyticsHelper === null || analyticsHelper === void 0 ? void 0 : analyticsHelper.sendActionEvent(EVENT_ACTION.ADD_STEPS, EVENT_STATUS.SUCCESS, {
36
+ type: ADD_STEPS_TYPE.ACCEPTED,
37
+ latency: latency,
38
+ stepType: countBy(stepsWithClientAndUserId, function (stepWithClientAndUserId) {
39
+ return stepWithClientAndUserId.stepType;
40
+ })
41
+ });
42
+ } else if (response.type === AcknowledgementResponseTypes.ERROR) {
43
+ var _response$error, _response$error$data, _response$error2, _response$error2$data;
44
+ onErrorHandled(response.error);
45
+ analyticsHelper === null || analyticsHelper === void 0 ? void 0 : analyticsHelper.sendActionEvent(EVENT_ACTION.ADD_STEPS, EVENT_STATUS.FAILURE, {
46
+ // User tried committing steps but they were rejected because:
47
+ // - HEAD_VERSION_UPDATE_FAILED: the collab service's latest stored step tail version didn't correspond to the head version of the first step submitted
48
+ // - VERSION_NUMBER_ALREADY_EXISTS: while storing the steps there was a conflict meaning someone else wrote steps into the database more quickly
49
+ type: ((_response$error = response.error) === null || _response$error === void 0 ? void 0 : (_response$error$data = _response$error.data) === null || _response$error$data === void 0 ? void 0 : _response$error$data.code) === 'HEAD_VERSION_UPDATE_FAILED' || ((_response$error2 = response.error) === null || _response$error2 === void 0 ? void 0 : (_response$error2$data = _response$error2.data) === null || _response$error2$data === void 0 ? void 0 : _response$error2$data.code) === 'VERSION_NUMBER_ALREADY_EXISTS' ? ADD_STEPS_TYPE.REJECTED : ADD_STEPS_TYPE.ERROR,
50
+ latency: latency
51
+ });
52
+ analyticsHelper === null || analyticsHelper === void 0 ? void 0 : analyticsHelper.sendErrorEvent(response.error, 'Error while adding steps - Acknowledgement Error');
53
+ } else {
54
+ analyticsHelper === null || analyticsHelper === void 0 ? void 0 : analyticsHelper.sendErrorEvent(
55
+ // @ts-expect-error We didn't type the invalid type case
56
+ new Error("Response type: ".concat((response === null || response === void 0 ? void 0 : response.type) || 'No response type')), 'Error while adding steps - Invalid Acknowledgement');
57
+ }
58
+ });
59
+ } catch (error) {
60
+ analyticsHelper === null || analyticsHelper === void 0 ? void 0 : analyticsHelper.sendErrorEvent(error, 'Error while adding steps - Broadcast threw exception');
61
+ }
62
+ };