@atlaskit/collab-provider 7.6.2 → 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,15 @@
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
+
3
13
  ## 7.6.2
4
14
 
5
15
  ### 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.2",
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.2",
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;
@@ -283,12 +283,14 @@ export var Provider = /*#__PURE__*/function (_Emitter) {
283
283
  _defineProperty(_assertThisInitialized(_this), "onErrorHandled", function (error) {
284
284
  if (error && error.data) {
285
285
  if (error.data.code === 'HEAD_VERSION_UPDATE_FAILED' || error.data.code === 'VERSION_NUMBER_ALREADY_EXISTS') {
286
+ var measure = stopMeasure(MEASURE_NAME.ADD_STEPS);
286
287
  triggerCollabAnalyticsEvent({
287
288
  eventAction: EVENT_ACTION.ADD_STEPS,
288
289
  attributes: {
289
290
  eventStatus: EVENT_STATUS.FAILURE,
290
291
  error: error,
291
- documentAri: _this.config.documentAri
292
+ documentAri: _this.config.documentAri,
293
+ latency: measure === null || measure === void 0 ? void 0 : measure.duration
292
294
  }
293
295
  }, _this.analyticsClient);
294
296
  _this.stepRejectCounter++;
@@ -571,7 +573,7 @@ export var Provider = /*#__PURE__*/function (_Emitter) {
571
573
  _defineProperty(_assertThisInitialized(_this), "getFinalAcknowledgedState", /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {
572
574
  var _this$metadata$title;
573
575
 
574
- var maxAttemptsToSync, count, unconfirmedState, state, adfDocument, measure, _measure2;
576
+ var maxAttemptsToSync, count, unconfirmedState, state, adfDocument, measure, _measure3;
575
577
 
576
578
  return _regeneratorRuntime.wrap(function _callee4$(_context4) {
577
579
  while (1) {
@@ -587,32 +589,33 @@ export var Provider = /*#__PURE__*/function (_Emitter) {
587
589
  }
588
590
 
589
591
  return _context4.delegateYield( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
590
- var unconfirmedTrs, lastTr, isLastTrConfirmed, nextUnconfirmedState, nextUnconfirmedTrs, _state;
592
+ var unconfirmedTrs, lastTr, isLastTrConfirmed, nextUnconfirmedState, nextUnconfirmedTrs, _state, _measure2, measure;
591
593
 
592
594
  return _regeneratorRuntime.wrap(function _callee3$(_context3) {
593
595
  while (1) {
594
596
  switch (_context3.prev = _context3.next) {
595
597
  case 0:
596
- // We use origins here as steps can be rebased. When steps are rebased a new step is created.
598
+ startMeasure(MEASURE_NAME.COMMIT_UNCONFIRMED_STEPS); // We use origins here as steps can be rebased. When steps are rebased a new step is created.
597
599
  // This means that we can not track if it has been removed from the unconfirmed array or not.
598
600
  // Origins points to the original transaction that the step was created in. This is never changed
599
601
  // and gets passed down when a step is rebased.
602
+
600
603
  unconfirmedTrs = unconfirmedState.origins;
601
604
  lastTr = unconfirmedTrs[unconfirmedTrs.length - 1];
602
605
  isLastTrConfirmed = false;
603
606
 
604
- case 3:
607
+ case 4:
605
608
  if (isLastTrConfirmed) {
606
- _context3.next = 14;
609
+ _context3.next = 17;
607
610
  break;
608
611
  }
609
612
 
610
613
  _this.sendStepsFromCurrentState();
611
614
 
612
- _context3.next = 7;
613
- return sleep(500);
615
+ _context3.next = 8;
616
+ return sleep(1000);
614
617
 
615
- case 7:
618
+ case 8:
616
619
  nextUnconfirmedState = _this.getUnconfirmedSteps();
617
620
 
618
621
  if (nextUnconfirmedState && nextUnconfirmedState.steps.length) {
@@ -625,7 +628,7 @@ export var Provider = /*#__PURE__*/function (_Emitter) {
625
628
  }
626
629
 
627
630
  if (!(!isLastTrConfirmed && count++ >= maxAttemptsToSync)) {
628
- _context3.next = 12;
631
+ _context3.next = 15;
629
632
  break;
630
633
  }
631
634
 
@@ -641,13 +644,33 @@ export var Provider = /*#__PURE__*/function (_Emitter) {
641
644
  });
642
645
  }
643
646
 
644
- throw new Error("Can't syncup with Collab Service");
645
-
646
- case 12:
647
- _context3.next = 3;
647
+ _measure2 = stopMeasure(MEASURE_NAME.COMMIT_UNCONFIRMED_STEPS);
648
+ triggerCollabAnalyticsEvent({
649
+ eventAction: EVENT_ACTION.COMMIT_UNCONFIRMED_STEPS,
650
+ attributes: {
651
+ eventStatus: EVENT_STATUS.FAILURE,
652
+ latency: _measure2 === null || _measure2 === void 0 ? void 0 : _measure2.duration,
653
+ documentAri: _this.config.documentAri
654
+ }
655
+ }, _this.analyticsClient);
656
+ throw new Error("Can't sync up with Collab Service");
657
+
658
+ case 15:
659
+ _context3.next = 4;
648
660
  break;
649
661
 
650
- case 14:
662
+ case 17:
663
+ measure = stopMeasure(MEASURE_NAME.COMMIT_UNCONFIRMED_STEPS);
664
+ triggerCollabAnalyticsEvent({
665
+ eventAction: EVENT_ACTION.COMMIT_UNCONFIRMED_STEPS,
666
+ attributes: {
667
+ eventStatus: EVENT_STATUS.SUCCESS,
668
+ latency: measure === null || measure === void 0 ? void 0 : measure.duration,
669
+ documentAri: _this.config.documentAri
670
+ }
671
+ }, _this.analyticsClient);
672
+
673
+ case 19:
651
674
  case "end":
652
675
  return _context3.stop();
653
676
  }
@@ -671,12 +694,12 @@ export var Provider = /*#__PURE__*/function (_Emitter) {
671
694
  }
672
695
  }, _this.analyticsClient);
673
696
  } catch (error) {
674
- _measure2 = stopMeasure(MEASURE_NAME.CONVERT_PM_TO_ADF);
697
+ _measure3 = stopMeasure(MEASURE_NAME.CONVERT_PM_TO_ADF);
675
698
  triggerCollabAnalyticsEvent({
676
699
  eventAction: EVENT_ACTION.CONVERT_PM_TO_ADF,
677
700
  attributes: {
678
701
  eventStatus: EVENT_STATUS.FAILURE,
679
- latency: _measure2 === null || _measure2 === void 0 ? void 0 : _measure2.duration,
702
+ latency: _measure3 === null || _measure3 === void 0 ? void 0 : _measure3.duration,
680
703
  error: error,
681
704
  documentAri: _this.config.documentAri
682
705
  }
@@ -776,11 +799,12 @@ export var Provider = /*#__PURE__*/function (_Emitter) {
776
799
 
777
800
  if (!steps || !steps.length) {
778
801
  return;
779
- } // Avoid reference issues using a
802
+ }
803
+
804
+ startMeasure(MEASURE_NAME.ADD_STEPS); // Avoid reference issues using a
780
805
  // method outside of the provider
781
806
  // scope
782
807
 
783
-
784
808
  throttledCommitStep({
785
809
  channel: this.channel,
786
810
  userId: this.userId,
@@ -843,14 +867,16 @@ export var Provider = /*#__PURE__*/function (_Emitter) {
843
867
  json: steps,
844
868
  version: version,
845
869
  userIds: clientIds
846
- }); // If steps can apply to local editor sucessfully, no need to accumulate the error counter.
870
+ }); // If steps can apply to local editor successfully, no need to accumulate the error counter.
847
871
 
848
872
  this.stepRejectCounter = 0;
873
+ var measure = stopMeasure(MEASURE_NAME.ADD_STEPS);
849
874
  triggerCollabAnalyticsEvent({
850
875
  eventAction: EVENT_ACTION.ADD_STEPS,
851
876
  attributes: {
852
877
  eventStatus: EVENT_STATUS.SUCCESS,
853
- documentAri: this.config.documentAri
878
+ documentAri: this.config.documentAri,
879
+ latency: measure === null || measure === void 0 ? void 0 : measure.duration
854
880
  }
855
881
  }, this.analyticsClient);
856
882
  this.emitTelepointersFromSteps(steps); // Resend local steps if none of the received steps originated with us!
@@ -17,6 +17,7 @@ export function createSocketIOSocket(url, auth, productInfo) {
17
17
  reconnectionDelayMax: SOCKET_IO_OPTIONS.RECONNECTION_DELAY_MAX,
18
18
  reconnectionDelay: SOCKET_IO_OPTIONS.RECONNECTION_DELAY,
19
19
  randomizationFactor: SOCKET_IO_OPTIONS.RANDOMIZATION_FACTOR,
20
+ closeOnBeforeunload: false,
20
21
  withCredentials: true,
21
22
  transports: ['polling', 'websocket'],
22
23
  path: "/".concat(pathname.split('/')[1], "/socket.io"),
@@ -0,0 +1,5 @@
1
+ export var name = "@atlaskit/collab-provider";
2
+ export var version = "7.6.3";
3
+ export var nextMajorVersion = function 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.2",
3
+ "version": "7.6.3",
4
4
  "sideEffects": false
5
5
  }
@@ -2,7 +2,9 @@ export declare enum MEASURE_NAME {
2
2
  CALLING_CATCHUP_API = "callingCatchupApi",
3
3
  SOCKET_CONNECT = "socketConnect",
4
4
  DOCUMENT_INIT = "documentInit",
5
- CONVERT_PM_TO_ADF = "convertPMToADF"
5
+ CONVERT_PM_TO_ADF = "convertPMToADF",
6
+ ADD_STEPS = "addSteps",
7
+ COMMIT_UNCONFIRMED_STEPS = "commitUnconfirmedSteps"
6
8
  }
7
9
  export declare function startMeasure(measureName: MEASURE_NAME): void;
8
10
  export declare function stopMeasure(measureName: MEASURE_NAME, onMeasureComplete?: (duration: number, startTime: number) => void): {
@@ -1,5 +1,4 @@
1
1
  import { ErrorPayload } from '../types';
2
- export declare const ATTRIBUTES_PACKAGE = "collabProvider";
3
2
  export declare const EVENT_SUBJECT = "collab";
4
3
  export declare enum COLLAB_SERVICE {
5
4
  NCS = "ncs",
@@ -11,7 +10,8 @@ export declare enum EVENT_ACTION {
11
10
  DOCUMENT_INIT = "documentInit",
12
11
  ADD_STEPS = "addSteps",
13
12
  CONVERT_PM_TO_ADF = "convertPMToADF",
14
- UPDATE_PARTICIPANTS = "updateParticipants"
13
+ UPDATE_PARTICIPANTS = "updateParticipants",
14
+ COMMIT_UNCONFIRMED_STEPS = "commitUnconfirmedSteps"
15
15
  }
16
16
  export declare enum EVENT_STATUS {
17
17
  SUCCESS = "SUCCESS",
@@ -28,4 +28,4 @@ export declare type AnalyticsEvent = {
28
28
  participants?: number;
29
29
  };
30
30
  };
31
- export declare const ACK_MAX_TRY = 10;
31
+ export declare const ACK_MAX_TRY = 30;
@@ -0,0 +1,3 @@
1
+ export declare const name: string;
2
+ export declare const version: string;
3
+ export declare const nextMajorVersion: () => string;
@@ -2,7 +2,9 @@ export declare enum MEASURE_NAME {
2
2
  CALLING_CATCHUP_API = "callingCatchupApi",
3
3
  SOCKET_CONNECT = "socketConnect",
4
4
  DOCUMENT_INIT = "documentInit",
5
- CONVERT_PM_TO_ADF = "convertPMToADF"
5
+ CONVERT_PM_TO_ADF = "convertPMToADF",
6
+ ADD_STEPS = "addSteps",
7
+ COMMIT_UNCONFIRMED_STEPS = "commitUnconfirmedSteps"
6
8
  }
7
9
  export declare function startMeasure(measureName: MEASURE_NAME): void;
8
10
  export declare function stopMeasure(measureName: MEASURE_NAME, onMeasureComplete?: (duration: number, startTime: number) => void): {
@@ -1,5 +1,4 @@
1
1
  import { ErrorPayload } from '../types';
2
- export declare const ATTRIBUTES_PACKAGE = "collabProvider";
3
2
  export declare const EVENT_SUBJECT = "collab";
4
3
  export declare enum COLLAB_SERVICE {
5
4
  NCS = "ncs",
@@ -11,7 +10,8 @@ export declare enum EVENT_ACTION {
11
10
  DOCUMENT_INIT = "documentInit",
12
11
  ADD_STEPS = "addSteps",
13
12
  CONVERT_PM_TO_ADF = "convertPMToADF",
14
- UPDATE_PARTICIPANTS = "updateParticipants"
13
+ UPDATE_PARTICIPANTS = "updateParticipants",
14
+ COMMIT_UNCONFIRMED_STEPS = "commitUnconfirmedSteps"
15
15
  }
16
16
  export declare enum EVENT_STATUS {
17
17
  SUCCESS = "SUCCESS",
@@ -28,4 +28,4 @@ export declare type AnalyticsEvent = {
28
28
  participants?: number;
29
29
  };
30
30
  };
31
- export declare const ACK_MAX_TRY = 10;
31
+ export declare const ACK_MAX_TRY = 30;
@@ -0,0 +1,3 @@
1
+ export declare const name: string;
2
+ export declare const version: string;
3
+ export declare const nextMajorVersion: () => string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/collab-provider",
3
- "version": "7.6.2",
3
+ "version": "7.6.3",
4
4
  "description": "A provider for collaborative editing.",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -15,7 +15,8 @@
15
15
  "typesVersions": {
16
16
  ">=4.0 <4.5": {
17
17
  "*": [
18
- "dist/types-ts4.0/*"
18
+ "dist/types-ts4.0/*",
19
+ "dist/types-ts4.0/index.d.ts"
19
20
  ]
20
21
  }
21
22
  },
@@ -30,7 +31,7 @@
30
31
  "dependencies": {
31
32
  "@atlaskit/analytics-gas-types": "5.0.9",
32
33
  "@atlaskit/analytics-listeners": "^8.3.0",
33
- "@atlaskit/editor-common": "^70.0.0",
34
+ "@atlaskit/editor-common": "^70.2.0",
34
35
  "@atlaskit/editor-json-transformer": "^8.8.0",
35
36
  "@atlaskit/util-service-support": "^6.1.0",
36
37
  "@babel/runtime": "^7.0.0",
@@ -39,7 +40,7 @@
39
40
  "prosemirror-collab": "^1.2.2",
40
41
  "prosemirror-state": "1.3.4",
41
42
  "prosemirror-transform": "1.3.2",
42
- "socket.io-client": "^4.0.0"
43
+ "socket.io-client": "^4.1.3"
43
44
  },
44
45
  "techstack": {
45
46
  "@atlassian/frontend": {
@@ -47,7 +48,10 @@
47
48
  },
48
49
  "@repo/internal": {
49
50
  "deprecation": "no-deprecated-imports",
50
- "theming": "tokens"
51
+ "theming": "tokens",
52
+ "styling": [
53
+ "emotion"
54
+ ]
51
55
  }
52
56
  },
53
57
  "devDependencies": {
package/report.api.md CHANGED
@@ -1,6 +1,10 @@
1
- ## API Report File for "@atlaskit/collab-provider".
1
+ ## API Report File for "@atlaskit/collab-provider"
2
2
 
3
- > Do not edit this file. This report is auto-generated by [API Extractor](https://api-extractor.com/).
3
+ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).
4
+
5
+ <!--
6
+ Generated API Report version: 2.0
7
+ -->
4
8
 
5
9
  [Learn more about API reports](https://hello.atlassian.net/wiki/spaces/UR/pages/1825484529/Package+API+Reports)
6
10
 
@@ -20,73 +24,108 @@ import type { Step } from 'prosemirror-transform';
20
24
  import { SyncUpErrorFunction } from '@atlaskit/editor-common/types';
21
25
  import { Transaction } from 'prosemirror-state';
22
26
 
23
- declare type BaseEvents = Pick<
27
+ // @public (undocumented)
28
+ type BaseEvents = Pick<
24
29
  CollabEditProvider<CollabEvents>,
25
30
  'setup' | 'send' | 'sendMessage'
26
31
  >;
27
32
 
28
- export declare type CollabConnectedPayload = CollabEventConnectionData;
33
+ // @public (undocumented)
34
+ export type CollabConnectedPayload = CollabEventConnectionData;
29
35
 
30
- export declare interface CollabDataPayload extends CollabEventRemoteData {
31
- version: number;
36
+ // @public (undocumented)
37
+ export interface CollabDataPayload extends CollabEventRemoteData {
38
+ // (undocumented)
32
39
  json: StepJson[];
40
+ // (undocumented)
33
41
  userIds: string[];
42
+ // (undocumented)
43
+ version: number;
34
44
  }
35
45
 
36
- export declare interface CollabDisconnectedPayload {
46
+ // @public (undocumented)
47
+ export interface CollabDisconnectedPayload {
48
+ // (undocumented)
37
49
  reason: DisconnectReason;
50
+ // (undocumented)
38
51
  sid: string;
39
52
  }
40
53
 
41
- export declare interface CollabErrorPayload {
42
- status: number;
54
+ // @public (undocumented)
55
+ export interface CollabErrorPayload {
56
+ // (undocumented)
43
57
  code: string;
58
+ // (undocumented)
44
59
  message: string;
60
+ // (undocumented)
45
61
  reason?: string;
62
+ // (undocumented)
63
+ status: number;
46
64
  }
47
65
 
48
- export declare interface CollabEvents {
66
+ // @public (undocumented)
67
+ export interface CollabEvents {
68
+ // (undocumented)
69
+ 'local-steps': CollabLocalStepsPayload;
70
+ // (undocumented)
49
71
  'metadata:changed': CollabMetadataPayload;
50
- init: CollabInitPayload;
72
+ // (undocumented)
51
73
  connected: CollabConnectedPayload;
52
- disconnected: CollabDisconnectedPayload;
74
+ // (undocumented)
53
75
  data: CollabDataPayload;
54
- telepointer: CollabTelepointerPayload;
55
- presence: CollabPresencePayload;
56
- 'local-steps': CollabLocalStepsPayload;
57
- error: CollabErrorPayload;
76
+ // (undocumented)
77
+ disconnected: CollabDisconnectedPayload;
78
+ // (undocumented)
58
79
  entity: any;
80
+ // (undocumented)
81
+ error: CollabErrorPayload;
82
+ // (undocumented)
83
+ init: CollabInitPayload;
84
+ // (undocumented)
85
+ presence: CollabPresencePayload;
86
+ // (undocumented)
87
+ telepointer: CollabTelepointerPayload;
59
88
  }
60
89
 
61
- export declare interface CollabInitPayload extends CollabEventInitData {
90
+ // @public (undocumented)
91
+ export interface CollabInitPayload extends CollabEventInitData {
92
+ // (undocumented)
62
93
  doc: any;
63
- version: number;
64
- userId?: string;
94
+ // (undocumented)
65
95
  metadata?: Metadata_2;
96
+ // (undocumented)
97
+ userId?: string;
98
+ // (undocumented)
99
+ version: number;
66
100
  }
67
101
 
68
- export declare type CollabLocalStepsPayload = {
102
+ // @public (undocumented)
103
+ export type CollabLocalStepsPayload = {
69
104
  steps: Step[];
70
105
  };
71
106
 
72
- export declare type CollabMetadataPayload = Metadata_2;
107
+ // @public (undocumented)
108
+ export type CollabMetadataPayload = Metadata_2;
73
109
 
74
- export declare type CollabPresencePayload = CollabEventPresenceData;
110
+ // @public (undocumented)
111
+ export type CollabPresencePayload = CollabEventPresenceData;
75
112
 
76
- export declare type CollabTelepointerPayload = CollabEventTelepointerData;
113
+ // @public (undocumented)
114
+ export type CollabTelepointerPayload = CollabEventTelepointerData;
77
115
 
78
- declare interface Config {
79
- url: string;
80
- documentAri: string;
81
- lifecycle?: Lifecycle;
82
- storage?: Storage_2;
83
- need404?: boolean;
116
+ // @public (undocumented)
117
+ interface Config {
118
+ // (undocumented)
119
+ analyticsClient?: AnalyticsWebClient;
120
+ // (undocumented)
84
121
  createSocket: (
85
122
  path: string,
86
123
  auth?: (cb: (data: object) => void) => void,
87
124
  productInfo?: ProductInformation,
88
125
  ) => Socket;
89
- analyticsClient?: AnalyticsWebClient;
126
+ // (undocumented)
127
+ documentAri: string;
128
+ // (undocumented)
90
129
  getUser?(
91
130
  userId: string,
92
131
  ): Promise<
@@ -94,194 +133,123 @@ declare interface Config {
94
133
  userId: string;
95
134
  }
96
135
  >;
136
+ // (undocumented)
137
+ lifecycle?: Lifecycle;
138
+ // (undocumented)
139
+ need404?: boolean;
140
+ // (undocumented)
97
141
  permissionTokenRefresh?: () => Promise<string>;
142
+ // (undocumented)
98
143
  productInfo?: ProductInformation;
144
+ // (undocumented)
145
+ storage?: Storage_2;
146
+ // (undocumented)
147
+ url: string;
99
148
  }
100
149
 
101
- declare enum DisconnectReason {
150
+ // @public (undocumented)
151
+ enum DisconnectReason {
152
+ // (undocumented)
102
153
  CLIENT_DISCONNECT = 'CLIENT_DISCONNECT',
154
+ // (undocumented)
103
155
  SERVER_DISCONNECT = 'SERVER_DISCONNECT',
156
+ // (undocumented)
104
157
  SOCKET_CLOSED = 'SOCKET_CLOSED',
158
+ // (undocumented)
105
159
  SOCKET_ERROR = 'SOCKET_ERROR',
160
+ // (undocumented)
106
161
  SOCKET_TIMEOUT = 'SOCKET_TIMEOUT',
162
+ // (undocumented)
107
163
  UNKNOWN_DISCONNECT = 'UNKNOWN_DISCONNECT',
108
164
  }
109
165
 
110
- declare class Emitter<T = any> {
111
- private eventEmitter;
112
- /**
113
- * Emit events to subscribers
114
- */
166
+ // @public (undocumented)
167
+ class Emitter<T = any> {
115
168
  protected emit<K extends keyof T>(evt: K, data: T[K]): this;
116
- /**
117
- * Subscribe to events emitted by this provider
118
- */
119
- on<K extends keyof T>(evt: K, handler: (args: T[K]) => void): this;
120
- /**
121
- * Unsubscribe from events emitted by this provider
122
- */
123
169
  off<K extends keyof T>(evt: K, handler: (args: T[K]) => void): this;
124
- /**
125
- * Unsubscribe from all events emitted by this provider.
126
- */
170
+ on<K extends keyof T>(evt: K, handler: (args: T[K]) => void): this;
127
171
  unsubscribeAll<K extends keyof T>(evt?: K): this;
128
172
  }
129
173
 
130
- declare type EventHandler = () => void;
174
+ // @public (undocumented)
175
+ type EventHandler = () => void;
131
176
 
132
- declare interface Lifecycle {
177
+ // @public (undocumented)
178
+ interface Lifecycle {
179
+ // (undocumented)
133
180
  on(event: LifecycleEvents, handler: EventHandler): void;
134
181
  }
135
182
 
136
- declare type LifecycleEvents = 'save' | 'restore';
183
+ // @public (undocumented)
184
+ type LifecycleEvents = 'save' | 'restore';
137
185
 
138
- declare interface Metadata_2 {
186
+ // @public (undocumented)
187
+ interface Metadata_2 {
188
+ // (undocumented)
139
189
  [key: string]: string | number | boolean;
140
190
  }
141
191
 
142
- declare type ProductInformation = {
192
+ // @public (undocumented)
193
+ type ProductInformation = {
143
194
  product: string;
144
195
  subProduct?: string;
145
196
  };
146
197
 
147
- export declare class Provider
148
- extends Emitter<CollabEvents>
149
- implements BaseEvents {
150
- private participants;
151
- private channel;
152
- private config;
153
- private getState;
154
- private metadata;
155
- private stepRejectCounter;
156
- private analyticsClient?;
157
- private isChannelInitialized;
158
- private onSyncUpError?;
159
- private sessionId?;
160
- private clientId?;
161
- private userId?;
162
- private participantUpdateTimeout?;
163
- private presenceUpdateTimeout?;
164
- private disconnectedAt?;
198
+ // @public (undocumented)
199
+ export class Provider extends Emitter<CollabEvents> implements BaseEvents {
165
200
  constructor(config: Config);
166
- private initializeChannel;
167
- /**
168
- * Called by collab plugin in editor when it's ready to
169
- * initialize a collab session.
170
- */
201
+ // (undocumented)
202
+ destroy(): this;
203
+ // (undocumented)
204
+ disconnect(): this;
205
+ // (undocumented)
206
+ getFinalAcknowledgedState: () => Promise<ResolvedEditorState>;
171
207
  initialize(getState: () => EditorState): this;
172
- setup({
173
- getState,
174
- onSyncUpError,
175
- }: {
176
- getState: () => EditorState;
177
- onSyncUpError?: SyncUpErrorFunction;
178
- }): this;
179
- /**
180
- * We can use this function to throttle/delay
181
- * Any send steps operation
182
- *
183
- * The getState function will return the current EditorState
184
- * from the EditorView.
185
- */
186
- private sendStepsFromCurrentState;
187
- /**
188
- * Send steps from transaction to other participants
189
- */
190
208
  send(
191
209
  _tr: Transaction | null,
192
210
  _oldState: EditorState | null,
193
211
  newState: EditorState,
194
212
  ): void;
195
- /**
196
- * Called when we receive steps from the service
197
- */
198
- private onStepsAdded;
199
- private throttledCatchup;
200
- private fitlerQueue;
201
- private updateDocumentWithMetadata;
202
- private applyLocalsteps;
203
- private getCurrentPmVersion;
204
- private getUnconfirmedSteps;
205
- /**
206
- * Called when:
207
- * * session established(offline -> online)
208
- * * try to accept steps but version is behind.
209
- */
210
- private catchup;
211
- private onErrorHandled;
212
- private pauseQueue?;
213
- private queue;
214
- private queueSteps;
215
- private processQueue;
216
- private processSteps;
217
- /**
218
- * Send messages, such as telepointers, to other participants.
219
- */
220
213
  sendMessage(data: any): void;
221
- private sendPresence;
222
- /**
223
- * Called when a participant joins the session.
224
- *
225
- * We keep track of participants internally in this class, and emit the `presence` event to update
226
- * the active avatars in the editor.
227
- * This method will be triggered from backend to notify all participants to exchange presence
228
- *
229
- */
230
- private onPresenceJoined;
231
- private onPresence;
232
- /**
233
- * Called when a metadata is changed.
234
- *
235
- */
236
- private onMetadataChanged;
237
- /**
238
- * Called when a participant leaves the session.
239
- *
240
- * We emit the `presence` event to update the active avatars in the editor.
241
- */
242
- private onParticipantLeft;
243
- /**
244
- * Called when we receive an update event from another participant.
245
- */
246
- private onParticipantUpdated;
247
- /**
248
- * Called when we receive a telepointer update from another
249
- * participant.
250
- */
251
- private onParticipantTelepointer;
252
- private updateParticipant;
253
- /**
254
- * Keep list of participants up to date. Filter out inactive users etc.
255
- */
256
- private updateParticipants;
257
- private emitTelepointersFromSteps;
258
- private disconnectedReasonMapper;
259
- private onDisconnected;
260
- destroy(): this;
261
- disconnect(): this;
262
- setTitle(title: string, broadcast?: boolean): void;
214
+ // (undocumented)
263
215
  setEditorWidth(editorWidth: string, broadcast?: boolean): void;
216
+ // (undocumented)
264
217
  setMetadata(metadata: Metadata_2): void;
265
- getFinalAcknowledgedState: () => Promise<ResolvedEditorState>;
266
- /**
267
- * Unsubscribe from all events emitted by this provider.
268
- */
218
+ // (undocumented)
219
+ setTitle(title: string, broadcast?: boolean): void;
220
+ // (undocumented)
221
+ setup({
222
+ getState,
223
+ onSyncUpError,
224
+ }: {
225
+ getState: () => EditorState;
226
+ onSyncUpError?: SyncUpErrorFunction;
227
+ }): this;
269
228
  unsubscribeAll(): this;
270
229
  }
271
230
 
272
- declare interface SimpleEventEmitter {
231
+ // @public (undocumented)
232
+ interface SimpleEventEmitter {
233
+ // (undocumented)
273
234
  on(event: string, fn: Function): SimpleEventEmitter;
274
235
  }
275
236
 
276
- export declare interface Socket extends SimpleEventEmitter {
277
- id: string;
237
+ // @public (undocumented)
238
+ export interface Socket extends SimpleEventEmitter {
239
+ // (undocumented)
240
+ close(): Socket;
241
+ // (undocumented)
278
242
  connect(): Socket;
243
+ // (undocumented)
279
244
  emit(event: string, ...args: any[]): Socket;
280
- close(): Socket;
245
+ // (undocumented)
246
+ id: string;
247
+ // (undocumented)
281
248
  io?: Manager;
282
249
  }
283
250
 
284
- declare type StepJson = {
251
+ // @public (undocumented)
252
+ type StepJson = {
285
253
  from?: number;
286
254
  to?: number;
287
255
  stepType?: string;
@@ -289,11 +257,15 @@ declare type StepJson = {
289
257
  userId: string;
290
258
  };
291
259
 
292
- declare interface Storage_2 {
260
+ // @public (undocumented)
261
+ interface Storage_2 {
262
+ // (undocumented)
263
+ delete(key: string): Promise<void>;
264
+ // (undocumented)
293
265
  get(key: string): Promise<string>;
266
+ // (undocumented)
294
267
  set(key: string, value: string): Promise<void>;
295
- delete(key: string): Promise<void>;
296
268
  }
297
269
 
298
- export {};
270
+ // (No @packageDocumentation comment for this package)
299
271
  ```
@@ -0,0 +1,15 @@
1
+ {
2
+ "name": "@atlaskit/collab-provider/version-wrapper",
3
+ "main": "../dist/cjs/version-wrapper.js",
4
+ "module": "../dist/esm/version-wrapper.js",
5
+ "module:es2019": "../dist/es2019/version-wrapper.js",
6
+ "sideEffects": false,
7
+ "types": "../dist/types/version-wrapper.d.ts",
8
+ "typesVersions": {
9
+ ">=4.0 <4.5": {
10
+ "*": [
11
+ "../dist/types-ts4.0/version-wrapper.d.ts"
12
+ ]
13
+ }
14
+ }
15
+ }