@atlaskit/collab-provider 7.6.1 → 7.6.3

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/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # @atlaskit/collab-provider
2
2
 
3
+ ## 7.6.3
4
+
5
+ ### Patch Changes
6
+
7
+ - [`1a64a3e3e53`](https://bitbucket.org/atlassian/atlassian-frontend/commits/1a64a3e3e53) - ESS-2591 Reduce initial re-connection delay and increase randomization factor for socket io connections.
8
+ - [`ee8ac15d730`](https://bitbucket.org/atlassian/atlassian-frontend/commits/ee8ac15d730) - ESS-1363 add packageVersion to analytic events
9
+ - [`29292da81d7`](https://bitbucket.org/atlassian/atlassian-frontend/commits/29292da81d7) - Increased the limits for the collab sync on returning the document to the consumer
10
+ - [`e06f8ba062f`](https://bitbucket.org/atlassian/atlassian-frontend/commits/e06f8ba062f) - Disable collab provider transport closing on the beforeunload event.
11
+ - Updated dependencies
12
+
13
+ ## 7.6.2
14
+
15
+ ### Patch Changes
16
+
17
+ - Updated dependencies
18
+
3
19
  ## 7.6.1
4
20
 
5
21
  ### Patch Changes
@@ -11,6 +11,8 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
11
11
 
12
12
  var _const = require("../helpers/const");
13
13
 
14
+ var _versionWrapper = require("../version-wrapper");
15
+
14
16
  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; }
15
17
 
16
18
  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) { (0, _defineProperty2.default)(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; }
@@ -43,7 +45,8 @@ var triggerCollabAnalyticsEvent = function triggerCollabAnalyticsEvent(analytics
43
45
  actionSubject: _const.EVENT_SUBJECT,
44
46
  source: 'unknown',
45
47
  attributes: _objectSpread({
46
- packageName: _const.ATTRIBUTES_PACKAGE,
48
+ packageName: _versionWrapper.name,
49
+ packageVersion: _versionWrapper.version,
47
50
  collabService: _const.COLLAB_SERVICE.NCS
48
51
  }, analyticsEvent.attributes)
49
52
  };
@@ -15,6 +15,8 @@ exports.MEASURE_NAME = MEASURE_NAME;
15
15
  MEASURE_NAME["SOCKET_CONNECT"] = "socketConnect";
16
16
  MEASURE_NAME["DOCUMENT_INIT"] = "documentInit";
17
17
  MEASURE_NAME["CONVERT_PM_TO_ADF"] = "convertPMToADF";
18
+ MEASURE_NAME["ADD_STEPS"] = "addSteps";
19
+ MEASURE_NAME["COMMIT_UNCONFIRMED_STEPS"] = "commitUnconfirmedSteps";
18
20
  })(MEASURE_NAME || (exports.MEASURE_NAME = MEASURE_NAME = {}));
19
21
 
20
22
  var isPerformanceAPIAvailable = function isPerformanceAPIAvailable() {
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.SOCKET_IO_OPTIONS = void 0;
7
7
  var SOCKET_IO_OPTIONS = {
8
8
  RECONNECTION_DELAY_MAX: 128 * 1000,
9
- RECONNECTION_DELAY: 1000,
10
- RANDOMIZATION_FACTOR: 0.1
9
+ RECONNECTION_DELAY: 200,
10
+ RANDOMIZATION_FACTOR: 0.5
11
11
  };
12
12
  exports.SOCKET_IO_OPTIONS = SOCKET_IO_OPTIONS;
@@ -3,9 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.EVENT_SUBJECT = exports.EVENT_STATUS = exports.EVENT_ACTION = exports.COLLAB_SERVICE = exports.ATTRIBUTES_PACKAGE = exports.ACK_MAX_TRY = void 0;
7
- var ATTRIBUTES_PACKAGE = 'collabProvider';
8
- exports.ATTRIBUTES_PACKAGE = ATTRIBUTES_PACKAGE;
6
+ exports.EVENT_SUBJECT = exports.EVENT_STATUS = exports.EVENT_ACTION = exports.COLLAB_SERVICE = exports.ACK_MAX_TRY = void 0;
9
7
  var EVENT_SUBJECT = 'collab';
10
8
  exports.EVENT_SUBJECT = EVENT_SUBJECT;
11
9
  var COLLAB_SERVICE;
@@ -26,6 +24,7 @@ exports.EVENT_ACTION = EVENT_ACTION;
26
24
  EVENT_ACTION["ADD_STEPS"] = "addSteps";
27
25
  EVENT_ACTION["CONVERT_PM_TO_ADF"] = "convertPMToADF";
28
26
  EVENT_ACTION["UPDATE_PARTICIPANTS"] = "updateParticipants";
27
+ EVENT_ACTION["COMMIT_UNCONFIRMED_STEPS"] = "commitUnconfirmedSteps";
29
28
  })(EVENT_ACTION || (exports.EVENT_ACTION = EVENT_ACTION = {}));
30
29
 
31
30
  var EVENT_STATUS;
@@ -36,5 +35,5 @@ exports.EVENT_STATUS = EVENT_STATUS;
36
35
  EVENT_STATUS["FAILURE"] = "FAILURE";
37
36
  })(EVENT_STATUS || (exports.EVENT_STATUS = EVENT_STATUS = {}));
38
37
 
39
- var ACK_MAX_TRY = 10;
38
+ var ACK_MAX_TRY = 30;
40
39
  exports.ACK_MAX_TRY = ACK_MAX_TRY;
@@ -306,12 +306,14 @@ var Provider = /*#__PURE__*/function (_Emitter) {
306
306
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onErrorHandled", function (error) {
307
307
  if (error && error.data) {
308
308
  if (error.data.code === 'HEAD_VERSION_UPDATE_FAILED' || error.data.code === 'VERSION_NUMBER_ALREADY_EXISTS') {
309
+ var measure = (0, _performance.stopMeasure)(_performance.MEASURE_NAME.ADD_STEPS);
309
310
  (0, _analytics.triggerCollabAnalyticsEvent)({
310
311
  eventAction: _const.EVENT_ACTION.ADD_STEPS,
311
312
  attributes: {
312
313
  eventStatus: _const.EVENT_STATUS.FAILURE,
313
314
  error: error,
314
- documentAri: _this.config.documentAri
315
+ documentAri: _this.config.documentAri,
316
+ latency: measure === null || measure === void 0 ? void 0 : measure.duration
315
317
  }
316
318
  }, _this.analyticsClient);
317
319
  _this.stepRejectCounter++;
@@ -581,7 +583,7 @@ var Provider = /*#__PURE__*/function (_Emitter) {
581
583
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "getFinalAcknowledgedState", /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {
582
584
  var _this$metadata$title;
583
585
 
584
- var maxAttemptsToSync, count, unconfirmedState, state, adfDocument, measure, _measure2;
586
+ var maxAttemptsToSync, count, unconfirmedState, state, adfDocument, measure, _measure3;
585
587
 
586
588
  return _regenerator.default.wrap(function _callee4$(_context4) {
587
589
  while (1) {
@@ -597,32 +599,33 @@ var Provider = /*#__PURE__*/function (_Emitter) {
597
599
  }
598
600
 
599
601
  return _context4.delegateYield( /*#__PURE__*/_regenerator.default.mark(function _callee3() {
600
- var unconfirmedTrs, lastTr, isLastTrConfirmed, nextUnconfirmedState, nextUnconfirmedTrs, _state;
602
+ var unconfirmedTrs, lastTr, isLastTrConfirmed, nextUnconfirmedState, nextUnconfirmedTrs, _state, _measure2, measure;
601
603
 
602
604
  return _regenerator.default.wrap(function _callee3$(_context3) {
603
605
  while (1) {
604
606
  switch (_context3.prev = _context3.next) {
605
607
  case 0:
606
- // We use origins here as steps can be rebased. When steps are rebased a new step is created.
608
+ (0, _performance.startMeasure)(_performance.MEASURE_NAME.COMMIT_UNCONFIRMED_STEPS); // We use origins here as steps can be rebased. When steps are rebased a new step is created.
607
609
  // This means that we can not track if it has been removed from the unconfirmed array or not.
608
610
  // Origins points to the original transaction that the step was created in. This is never changed
609
611
  // and gets passed down when a step is rebased.
612
+
610
613
  unconfirmedTrs = unconfirmedState.origins;
611
614
  lastTr = unconfirmedTrs[unconfirmedTrs.length - 1];
612
615
  isLastTrConfirmed = false;
613
616
 
614
- case 3:
617
+ case 4:
615
618
  if (isLastTrConfirmed) {
616
- _context3.next = 14;
619
+ _context3.next = 17;
617
620
  break;
618
621
  }
619
622
 
620
623
  _this.sendStepsFromCurrentState();
621
624
 
622
- _context3.next = 7;
623
- return (0, _utils.sleep)(500);
625
+ _context3.next = 8;
626
+ return (0, _utils.sleep)(1000);
624
627
 
625
- case 7:
628
+ case 8:
626
629
  nextUnconfirmedState = _this.getUnconfirmedSteps();
627
630
 
628
631
  if (nextUnconfirmedState && nextUnconfirmedState.steps.length) {
@@ -635,7 +638,7 @@ var Provider = /*#__PURE__*/function (_Emitter) {
635
638
  }
636
639
 
637
640
  if (!(!isLastTrConfirmed && count++ >= maxAttemptsToSync)) {
638
- _context3.next = 12;
641
+ _context3.next = 15;
639
642
  break;
640
643
  }
641
644
 
@@ -651,13 +654,33 @@ var Provider = /*#__PURE__*/function (_Emitter) {
651
654
  });
652
655
  }
653
656
 
654
- throw new Error("Can't syncup with Collab Service");
655
-
656
- case 12:
657
- _context3.next = 3;
657
+ _measure2 = (0, _performance.stopMeasure)(_performance.MEASURE_NAME.COMMIT_UNCONFIRMED_STEPS);
658
+ (0, _analytics.triggerCollabAnalyticsEvent)({
659
+ eventAction: _const.EVENT_ACTION.COMMIT_UNCONFIRMED_STEPS,
660
+ attributes: {
661
+ eventStatus: _const.EVENT_STATUS.FAILURE,
662
+ latency: _measure2 === null || _measure2 === void 0 ? void 0 : _measure2.duration,
663
+ documentAri: _this.config.documentAri
664
+ }
665
+ }, _this.analyticsClient);
666
+ throw new Error("Can't sync up with Collab Service");
667
+
668
+ case 15:
669
+ _context3.next = 4;
658
670
  break;
659
671
 
660
- case 14:
672
+ case 17:
673
+ measure = (0, _performance.stopMeasure)(_performance.MEASURE_NAME.COMMIT_UNCONFIRMED_STEPS);
674
+ (0, _analytics.triggerCollabAnalyticsEvent)({
675
+ eventAction: _const.EVENT_ACTION.COMMIT_UNCONFIRMED_STEPS,
676
+ attributes: {
677
+ eventStatus: _const.EVENT_STATUS.SUCCESS,
678
+ latency: measure === null || measure === void 0 ? void 0 : measure.duration,
679
+ documentAri: _this.config.documentAri
680
+ }
681
+ }, _this.analyticsClient);
682
+
683
+ case 19:
661
684
  case "end":
662
685
  return _context3.stop();
663
686
  }
@@ -681,12 +704,12 @@ var Provider = /*#__PURE__*/function (_Emitter) {
681
704
  }
682
705
  }, _this.analyticsClient);
683
706
  } catch (error) {
684
- _measure2 = (0, _performance.stopMeasure)(_performance.MEASURE_NAME.CONVERT_PM_TO_ADF);
707
+ _measure3 = (0, _performance.stopMeasure)(_performance.MEASURE_NAME.CONVERT_PM_TO_ADF);
685
708
  (0, _analytics.triggerCollabAnalyticsEvent)({
686
709
  eventAction: _const.EVENT_ACTION.CONVERT_PM_TO_ADF,
687
710
  attributes: {
688
711
  eventStatus: _const.EVENT_STATUS.FAILURE,
689
- latency: _measure2 === null || _measure2 === void 0 ? void 0 : _measure2.duration,
712
+ latency: _measure3 === null || _measure3 === void 0 ? void 0 : _measure3.duration,
690
713
  error: error,
691
714
  documentAri: _this.config.documentAri
692
715
  }
@@ -785,11 +808,12 @@ var Provider = /*#__PURE__*/function (_Emitter) {
785
808
 
786
809
  if (!steps || !steps.length) {
787
810
  return;
788
- } // Avoid reference issues using a
811
+ }
812
+
813
+ (0, _performance.startMeasure)(_performance.MEASURE_NAME.ADD_STEPS); // Avoid reference issues using a
789
814
  // method outside of the provider
790
815
  // scope
791
816
 
792
-
793
817
  throttledCommitStep({
794
818
  channel: this.channel,
795
819
  userId: this.userId,
@@ -852,14 +876,16 @@ var Provider = /*#__PURE__*/function (_Emitter) {
852
876
  json: steps,
853
877
  version: version,
854
878
  userIds: clientIds
855
- }); // If steps can apply to local editor sucessfully, no need to accumulate the error counter.
879
+ }); // If steps can apply to local editor successfully, no need to accumulate the error counter.
856
880
 
857
881
  this.stepRejectCounter = 0;
882
+ var measure = (0, _performance.stopMeasure)(_performance.MEASURE_NAME.ADD_STEPS);
858
883
  (0, _analytics.triggerCollabAnalyticsEvent)({
859
884
  eventAction: _const.EVENT_ACTION.ADD_STEPS,
860
885
  attributes: {
861
886
  eventStatus: _const.EVENT_STATUS.SUCCESS,
862
- documentAri: this.config.documentAri
887
+ documentAri: this.config.documentAri,
888
+ latency: measure === null || measure === void 0 ? void 0 : measure.duration
863
889
  }
864
890
  }, this.analyticsClient);
865
891
  this.emitTelepointersFromSteps(steps); // Resend local steps if none of the received steps originated with us!
@@ -31,6 +31,7 @@ function createSocketIOSocket(url, auth, productInfo) {
31
31
  reconnectionDelayMax: _config.SOCKET_IO_OPTIONS.RECONNECTION_DELAY_MAX,
32
32
  reconnectionDelay: _config.SOCKET_IO_OPTIONS.RECONNECTION_DELAY,
33
33
  randomizationFactor: _config.SOCKET_IO_OPTIONS.RANDOMIZATION_FACTOR,
34
+ closeOnBeforeunload: false,
34
35
  withCredentials: true,
35
36
  transports: ['polling', 'websocket'],
36
37
  path: "/".concat(pathname.split('/')[1], "/socket.io"),
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.version = exports.nextMajorVersion = exports.name = void 0;
7
+ var name = "@atlaskit/collab-provider";
8
+ exports.name = name;
9
+ var version = "7.6.3";
10
+ exports.version = version;
11
+
12
+ var nextMajorVersion = function nextMajorVersion() {
13
+ return [Number(version.split('.')[0]) + 1, 0, 0].join('.');
14
+ };
15
+
16
+ exports.nextMajorVersion = nextMajorVersion;
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/collab-provider",
3
- "version": "7.6.1",
3
+ "version": "7.6.3",
4
4
  "sideEffects": false
5
5
  }
@@ -1,4 +1,5 @@
1
- import { ATTRIBUTES_PACKAGE, EVENT_SUBJECT, COLLAB_SERVICE } from '../helpers/const';
1
+ import { EVENT_SUBJECT, COLLAB_SERVICE } from '../helpers/const';
2
+ import { name as packageName, version as packageVersion } from '../version-wrapper';
2
3
  export const fireAnalyticsEvent = (analyticsClient, payload) => {
3
4
  if (!analyticsClient || !payload) {
4
5
  return;
@@ -24,7 +25,8 @@ export const triggerCollabAnalyticsEvent = (analyticsEvent, analyticsClient) =>
24
25
  actionSubject: EVENT_SUBJECT,
25
26
  source: 'unknown',
26
27
  attributes: {
27
- packageName: ATTRIBUTES_PACKAGE,
28
+ packageName,
29
+ packageVersion,
28
30
  collabService: COLLAB_SERVICE.NCS,
29
31
  ...analyticsEvent.attributes
30
32
  }
@@ -5,6 +5,8 @@ export let MEASURE_NAME;
5
5
  MEASURE_NAME["SOCKET_CONNECT"] = "socketConnect";
6
6
  MEASURE_NAME["DOCUMENT_INIT"] = "documentInit";
7
7
  MEASURE_NAME["CONVERT_PM_TO_ADF"] = "convertPMToADF";
8
+ MEASURE_NAME["ADD_STEPS"] = "addSteps";
9
+ MEASURE_NAME["COMMIT_UNCONFIRMED_STEPS"] = "commitUnconfirmedSteps";
8
10
  })(MEASURE_NAME || (MEASURE_NAME = {}));
9
11
 
10
12
  const isPerformanceAPIAvailable = () => {
@@ -1,5 +1,5 @@
1
1
  export const SOCKET_IO_OPTIONS = {
2
2
  RECONNECTION_DELAY_MAX: 128 * 1000,
3
- RECONNECTION_DELAY: 1000,
4
- RANDOMIZATION_FACTOR: 0.1
3
+ RECONNECTION_DELAY: 200,
4
+ RANDOMIZATION_FACTOR: 0.5
5
5
  };
@@ -1,4 +1,3 @@
1
- export const ATTRIBUTES_PACKAGE = 'collabProvider';
2
1
  export const EVENT_SUBJECT = 'collab';
3
2
  export let COLLAB_SERVICE;
4
3
 
@@ -16,6 +15,7 @@ export let EVENT_ACTION;
16
15
  EVENT_ACTION["ADD_STEPS"] = "addSteps";
17
16
  EVENT_ACTION["CONVERT_PM_TO_ADF"] = "convertPMToADF";
18
17
  EVENT_ACTION["UPDATE_PARTICIPANTS"] = "updateParticipants";
18
+ EVENT_ACTION["COMMIT_UNCONFIRMED_STEPS"] = "commitUnconfirmedSteps";
19
19
  })(EVENT_ACTION || (EVENT_ACTION = {}));
20
20
 
21
21
  export let EVENT_STATUS;
@@ -25,4 +25,4 @@ export let EVENT_STATUS;
25
25
  EVENT_STATUS["FAILURE"] = "FAILURE";
26
26
  })(EVENT_STATUS || (EVENT_STATUS = {}));
27
27
 
28
- export const ACK_MAX_TRY = 10;
28
+ export const ACK_MAX_TRY = 30;
@@ -216,12 +216,14 @@ export class Provider extends Emitter {
216
216
  _defineProperty(this, "onErrorHandled", error => {
217
217
  if (error && error.data) {
218
218
  if (error.data.code === 'HEAD_VERSION_UPDATE_FAILED' || error.data.code === 'VERSION_NUMBER_ALREADY_EXISTS') {
219
+ const measure = stopMeasure(MEASURE_NAME.ADD_STEPS);
219
220
  triggerCollabAnalyticsEvent({
220
221
  eventAction: EVENT_ACTION.ADD_STEPS,
221
222
  attributes: {
222
223
  eventStatus: EVENT_STATUS.FAILURE,
223
224
  error,
224
- documentAri: this.config.documentAri
225
+ documentAri: this.config.documentAri,
226
+ latency: measure === null || measure === void 0 ? void 0 : measure.duration
225
227
  }
226
228
  }, this.analyticsClient);
227
229
  this.stepRejectCounter++;
@@ -468,17 +470,18 @@ export class Provider extends Emitter {
468
470
  let unconfirmedState = this.getUnconfirmedSteps();
469
471
 
470
472
  if (unconfirmedState && unconfirmedState.steps.length) {
471
- // We use origins here as steps can be rebased. When steps are rebased a new step is created.
473
+ startMeasure(MEASURE_NAME.COMMIT_UNCONFIRMED_STEPS); // We use origins here as steps can be rebased. When steps are rebased a new step is created.
472
474
  // This means that we can not track if it has been removed from the unconfirmed array or not.
473
475
  // Origins points to the original transaction that the step was created in. This is never changed
474
476
  // and gets passed down when a step is rebased.
477
+
475
478
  const unconfirmedTrs = unconfirmedState.origins;
476
479
  const lastTr = unconfirmedTrs[unconfirmedTrs.length - 1];
477
480
  let isLastTrConfirmed = false;
478
481
 
479
482
  while (!isLastTrConfirmed) {
480
483
  this.sendStepsFromCurrentState();
481
- await sleep(500);
484
+ await sleep(1000);
482
485
  const nextUnconfirmedState = this.getUnconfirmedSteps();
483
486
 
484
487
  if (nextUnconfirmedState && nextUnconfirmedState.steps.length) {
@@ -500,9 +503,28 @@ export class Provider extends Emitter {
500
503
  });
501
504
  }
502
505
 
503
- throw new Error("Can't syncup with Collab Service");
506
+ const measure = stopMeasure(MEASURE_NAME.COMMIT_UNCONFIRMED_STEPS);
507
+ triggerCollabAnalyticsEvent({
508
+ eventAction: EVENT_ACTION.COMMIT_UNCONFIRMED_STEPS,
509
+ attributes: {
510
+ eventStatus: EVENT_STATUS.FAILURE,
511
+ latency: measure === null || measure === void 0 ? void 0 : measure.duration,
512
+ documentAri: this.config.documentAri
513
+ }
514
+ }, this.analyticsClient);
515
+ throw new Error("Can't sync up with Collab Service");
504
516
  }
505
517
  }
518
+
519
+ const measure = stopMeasure(MEASURE_NAME.COMMIT_UNCONFIRMED_STEPS);
520
+ triggerCollabAnalyticsEvent({
521
+ eventAction: EVENT_ACTION.COMMIT_UNCONFIRMED_STEPS,
522
+ attributes: {
523
+ eventStatus: EVENT_STATUS.SUCCESS,
524
+ latency: measure === null || measure === void 0 ? void 0 : measure.duration,
525
+ documentAri: this.config.documentAri
526
+ }
527
+ }, this.analyticsClient);
506
528
  }
507
529
 
508
530
  const state = this.getState(); // Convert ProseMirror document in Editor state to ADF document
@@ -613,11 +635,12 @@ export class Provider extends Emitter {
613
635
 
614
636
  if (!steps || !steps.length) {
615
637
  return;
616
- } // Avoid reference issues using a
638
+ }
639
+
640
+ startMeasure(MEASURE_NAME.ADD_STEPS); // Avoid reference issues using a
617
641
  // method outside of the provider
618
642
  // scope
619
643
 
620
-
621
644
  throttledCommitStep({
622
645
  channel: this.channel,
623
646
  userId: this.userId,
@@ -674,14 +697,16 @@ export class Provider extends Emitter {
674
697
  json: steps,
675
698
  version,
676
699
  userIds: clientIds
677
- }); // If steps can apply to local editor sucessfully, no need to accumulate the error counter.
700
+ }); // If steps can apply to local editor successfully, no need to accumulate the error counter.
678
701
 
679
702
  this.stepRejectCounter = 0;
703
+ const measure = stopMeasure(MEASURE_NAME.ADD_STEPS);
680
704
  triggerCollabAnalyticsEvent({
681
705
  eventAction: EVENT_ACTION.ADD_STEPS,
682
706
  attributes: {
683
707
  eventStatus: EVENT_STATUS.SUCCESS,
684
- documentAri: this.config.documentAri
708
+ documentAri: this.config.documentAri,
709
+ latency: measure === null || measure === void 0 ? void 0 : measure.duration
685
710
  }
686
711
  }, this.analyticsClient);
687
712
  this.emitTelepointersFromSteps(steps); // Resend local steps if none of the received steps originated with us!
@@ -11,6 +11,7 @@ export function createSocketIOSocket(url, auth, productInfo) {
11
11
  reconnectionDelayMax: SOCKET_IO_OPTIONS.RECONNECTION_DELAY_MAX,
12
12
  reconnectionDelay: SOCKET_IO_OPTIONS.RECONNECTION_DELAY,
13
13
  randomizationFactor: SOCKET_IO_OPTIONS.RANDOMIZATION_FACTOR,
14
+ closeOnBeforeunload: false,
14
15
  withCredentials: true,
15
16
  transports: ['polling', 'websocket'],
16
17
  path: `/${pathname.split('/')[1]}/socket.io`,
@@ -0,0 +1,5 @@
1
+ export const name = "@atlaskit/collab-provider";
2
+ export const version = "7.6.3";
3
+ export const nextMajorVersion = () => {
4
+ return [Number(version.split('.')[0]) + 1, 0, 0].join('.');
5
+ };
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/collab-provider",
3
- "version": "7.6.1",
3
+ "version": "7.6.3",
4
4
  "sideEffects": false
5
5
  }
@@ -4,7 +4,8 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
4
4
 
5
5
  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; }
6
6
 
7
- import { ATTRIBUTES_PACKAGE, EVENT_SUBJECT, COLLAB_SERVICE } from '../helpers/const';
7
+ import { EVENT_SUBJECT, COLLAB_SERVICE } from '../helpers/const';
8
+ import { name as packageName, version as packageVersion } from '../version-wrapper';
8
9
  export var fireAnalyticsEvent = function fireAnalyticsEvent(analyticsClient, payload) {
9
10
  if (!analyticsClient || !payload) {
10
11
  return;
@@ -30,7 +31,8 @@ export var triggerCollabAnalyticsEvent = function triggerCollabAnalyticsEvent(an
30
31
  actionSubject: EVENT_SUBJECT,
31
32
  source: 'unknown',
32
33
  attributes: _objectSpread({
33
- packageName: ATTRIBUTES_PACKAGE,
34
+ packageName: packageName,
35
+ packageVersion: packageVersion,
34
36
  collabService: COLLAB_SERVICE.NCS
35
37
  }, analyticsEvent.attributes)
36
38
  };
@@ -5,6 +5,8 @@ export var MEASURE_NAME;
5
5
  MEASURE_NAME["SOCKET_CONNECT"] = "socketConnect";
6
6
  MEASURE_NAME["DOCUMENT_INIT"] = "documentInit";
7
7
  MEASURE_NAME["CONVERT_PM_TO_ADF"] = "convertPMToADF";
8
+ MEASURE_NAME["ADD_STEPS"] = "addSteps";
9
+ MEASURE_NAME["COMMIT_UNCONFIRMED_STEPS"] = "commitUnconfirmedSteps";
8
10
  })(MEASURE_NAME || (MEASURE_NAME = {}));
9
11
 
10
12
  var isPerformanceAPIAvailable = function isPerformanceAPIAvailable() {
@@ -1,5 +1,5 @@
1
1
  export var SOCKET_IO_OPTIONS = {
2
2
  RECONNECTION_DELAY_MAX: 128 * 1000,
3
- RECONNECTION_DELAY: 1000,
4
- RANDOMIZATION_FACTOR: 0.1
3
+ RECONNECTION_DELAY: 200,
4
+ RANDOMIZATION_FACTOR: 0.5
5
5
  };
@@ -1,4 +1,3 @@
1
- export var ATTRIBUTES_PACKAGE = 'collabProvider';
2
1
  export var EVENT_SUBJECT = 'collab';
3
2
  export var COLLAB_SERVICE;
4
3
 
@@ -16,6 +15,7 @@ export var EVENT_ACTION;
16
15
  EVENT_ACTION["ADD_STEPS"] = "addSteps";
17
16
  EVENT_ACTION["CONVERT_PM_TO_ADF"] = "convertPMToADF";
18
17
  EVENT_ACTION["UPDATE_PARTICIPANTS"] = "updateParticipants";
18
+ EVENT_ACTION["COMMIT_UNCONFIRMED_STEPS"] = "commitUnconfirmedSteps";
19
19
  })(EVENT_ACTION || (EVENT_ACTION = {}));
20
20
 
21
21
  export var EVENT_STATUS;
@@ -25,4 +25,4 @@ export var EVENT_STATUS;
25
25
  EVENT_STATUS["FAILURE"] = "FAILURE";
26
26
  })(EVENT_STATUS || (EVENT_STATUS = {}));
27
27
 
28
- export var ACK_MAX_TRY = 10;
28
+ export var ACK_MAX_TRY = 30;