@atlaskit/collab-provider 8.5.0 → 8.7.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 (76) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/dist/cjs/analytics/analytics-helper.js +22 -24
  3. package/dist/cjs/analytics/performance.js +4 -4
  4. package/dist/cjs/channel.js +218 -203
  5. package/dist/cjs/connectivity/network.js +4 -4
  6. package/dist/cjs/disconnected-reason-mapper.js +4 -4
  7. package/dist/cjs/document/catchup.js +81 -81
  8. package/dist/cjs/document/document-service.js +226 -285
  9. package/dist/cjs/document/step-queue-state.js +4 -0
  10. package/dist/cjs/errors/error-types.js +102 -23
  11. package/dist/cjs/helpers/const.js +12 -12
  12. package/dist/cjs/index.js +8 -1
  13. package/dist/cjs/metadata/metadata-service.js +77 -0
  14. package/dist/cjs/participants/participants-helper.js +19 -28
  15. package/dist/cjs/participants/participants-service.js +90 -60
  16. package/dist/cjs/participants/participants-state.js +1 -0
  17. package/dist/cjs/provider/commit-step.js +10 -2
  18. package/dist/cjs/provider/index.js +168 -101
  19. package/dist/cjs/types.js +12 -4
  20. package/dist/cjs/version-wrapper.js +1 -1
  21. package/dist/cjs/version.json +1 -1
  22. package/dist/es2019/analytics/analytics-helper.js +3 -3
  23. package/dist/es2019/analytics/performance.js +3 -3
  24. package/dist/es2019/channel.js +27 -6
  25. package/dist/es2019/connectivity/network.js +3 -3
  26. package/dist/es2019/disconnected-reason-mapper.js +3 -3
  27. package/dist/es2019/document/catchup.js +4 -2
  28. package/dist/es2019/document/document-service.js +45 -76
  29. package/dist/es2019/document/step-queue-state.js +4 -0
  30. package/dist/es2019/errors/error-types.js +104 -25
  31. package/dist/es2019/helpers/const.js +9 -9
  32. package/dist/es2019/index.js +2 -1
  33. package/dist/es2019/metadata/metadata-service.js +57 -0
  34. package/dist/es2019/participants/participants-helper.js +3 -8
  35. package/dist/es2019/participants/participants-service.js +46 -15
  36. package/dist/es2019/participants/participants-state.js +1 -0
  37. package/dist/es2019/provider/commit-step.js +8 -1
  38. package/dist/es2019/provider/index.js +111 -39
  39. package/dist/es2019/types.js +16 -3
  40. package/dist/es2019/version-wrapper.js +1 -1
  41. package/dist/es2019/version.json +1 -1
  42. package/dist/esm/analytics/analytics-helper.js +22 -24
  43. package/dist/esm/analytics/performance.js +3 -3
  44. package/dist/esm/channel.js +218 -203
  45. package/dist/esm/connectivity/network.js +3 -3
  46. package/dist/esm/disconnected-reason-mapper.js +3 -3
  47. package/dist/esm/document/catchup.js +81 -81
  48. package/dist/esm/document/document-service.js +226 -285
  49. package/dist/esm/document/step-queue-state.js +4 -0
  50. package/dist/esm/errors/error-types.js +104 -25
  51. package/dist/esm/helpers/const.js +9 -9
  52. package/dist/esm/index.js +2 -1
  53. package/dist/esm/metadata/metadata-service.js +69 -0
  54. package/dist/esm/participants/participants-helper.js +19 -28
  55. package/dist/esm/participants/participants-service.js +90 -60
  56. package/dist/esm/participants/participants-state.js +1 -0
  57. package/dist/esm/provider/commit-step.js +8 -1
  58. package/dist/esm/provider/index.js +167 -99
  59. package/dist/esm/types.js +16 -3
  60. package/dist/esm/version-wrapper.js +1 -1
  61. package/dist/esm/version.json +1 -1
  62. package/dist/types/channel.d.ts +2 -2
  63. package/dist/types/document/document-service.d.ts +5 -24
  64. package/dist/types/index.d.ts +2 -1
  65. package/dist/types/metadata/metadata-service.d.ts +25 -0
  66. package/dist/types/participants/participants-helper.d.ts +2 -3
  67. package/dist/types/participants/participants-service.d.ts +8 -8
  68. package/dist/types/provider/commit-step.d.ts +11 -0
  69. package/dist/types/provider/index.d.ts +15 -13
  70. package/dist/types/types.d.ts +24 -10
  71. package/package.json +12 -7
  72. package/report.api.md +26 -7
  73. package/channel/package.json +0 -15
  74. package/config/package.json +0 -15
  75. package/disconnected-reason-mapper/package.json +0 -15
  76. package/emitter/package.json +0 -15
package/CHANGELOG.md CHANGED
@@ -1,5 +1,40 @@
1
1
  # @atlaskit/collab-provider
2
2
 
3
+ ## 8.7.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`054186aa44f`](https://bitbucket.org/atlassian/atlassian-frontend/commits/054186aa44f) - Remove email from CollabParticipant type and rely more on ProviderParticipant type.
8
+ - [`849e1a3b3e1`](https://bitbucket.org/atlassian/atlassian-frontend/commits/849e1a3b3e1) - ESS-3486 Add getmetadata as an exposed method.
9
+
10
+ ### Patch Changes
11
+
12
+ - [`b69b9375eec`](https://bitbucket.org/atlassian/atlassian-frontend/commits/b69b9375eec) - match version of @atlaskit/ufo to others places/packages so we only have one version
13
+ - [`0ffb55018c9`](https://bitbucket.org/atlassian/atlassian-frontend/commits/0ffb55018c9) - Revert "[ED-17172] Bumped prosemirror-view from 1.23.2 to 1.23.7 and removed work-around for fixed issues"
14
+ - [`196773a471b`](https://bitbucket.org/atlassian/atlassian-frontend/commits/196773a471b) - Add new type that reflects default broadcast payloads, telepoint events are now being passed the needed timestamp
15
+ - [`66b94ce320c`](https://bitbucket.org/atlassian/atlassian-frontend/commits/66b94ce320c) - Throw new error if cookies not enabled
16
+ - [`60725af0609`](https://bitbucket.org/atlassian/atlassian-frontend/commits/60725af0609) - Remove the auto exported modules and use explicit exports
17
+ - Updated dependencies
18
+
19
+ ## 8.6.0
20
+
21
+ ### Minor Changes
22
+
23
+ - [`1547aa8e377`](https://bitbucket.org/atlassian/atlassian-frontend/commits/1547aa8e377) - skipping document update with initial draft on reconnection
24
+ - [`76eded42866`](https://bitbucket.org/atlassian/atlassian-frontend/commits/76eded42866) - [ESS-3441] Added Confluence integration tests for collab provider, don't emit empty participants left events
25
+ - [`33cab158f01`](https://bitbucket.org/atlassian/atlassian-frontend/commits/33cab158f01) - ESS-3478 Fix public interface `getUnconfirmedSteps` from being removed
26
+ - [`02520373358`](https://bitbucket.org/atlassian/atlassian-frontend/commits/02520373358) - passing initial draft to NCS collab provider and adding flag to bypass BE draft fetch.
27
+ - [`56779259eab`](https://bitbucket.org/atlassian/atlassian-frontend/commits/56779259eab) - ESS-2900: add confluence integration tests + add error handling to provider init
28
+ - [`f9257ff1a63`](https://bitbucket.org/atlassian/atlassian-frontend/commits/f9257ff1a63) - NO-ISSUE Changed the type export to a normal export for PROVIDER_ERROR_CODE
29
+
30
+ ### Patch Changes
31
+
32
+ - [`2e01c9c74b5`](https://bitbucket.org/atlassian/atlassian-frontend/commits/2e01c9c74b5) - DUMMY remove before merging to master; dupe adf-schema via adf-utils
33
+ - [`945162380e3`](https://bitbucket.org/atlassian/atlassian-frontend/commits/945162380e3) - Functional changes to document service.
34
+ - [`937ff19a47d`](https://bitbucket.org/atlassian/atlassian-frontend/commits/937ff19a47d) - ESS-3240: moved throttledCommitStep function from index to commit-step file in collab-provider & add unit tests for commitStep
35
+ - [`0693d8fcab1`](https://bitbucket.org/atlassian/atlassian-frontend/commits/0693d8fcab1) - ESS-3446: clear all continuous timers when the provider disconnects or is destroyed
36
+ - Updated dependencies
37
+
3
38
  ## 8.5.0
4
39
 
5
40
  ### Minor Changes
@@ -16,11 +16,11 @@ var _singleton = require("../connectivity/singleton");
16
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; }
17
17
  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; }
18
18
  var EVENT_SUBJECT = 'collab';
19
- var COLLAB_SERVICE;
20
- (function (COLLAB_SERVICE) {
19
+ var COLLAB_SERVICE = /*#__PURE__*/function (COLLAB_SERVICE) {
21
20
  COLLAB_SERVICE["NCS"] = "ncs";
22
21
  COLLAB_SERVICE["SYNCHRONY"] = "synchrony";
23
- })(COLLAB_SERVICE || (COLLAB_SERVICE = {}));
22
+ return COLLAB_SERVICE;
23
+ }(COLLAB_SERVICE || {});
24
24
  var triggerAnalyticsEvent = function triggerAnalyticsEvent(analyticsEvent, analyticsClient) {
25
25
  if (!analyticsClient) {
26
26
  return;
@@ -97,29 +97,27 @@ var AnalyticsHelper = /*#__PURE__*/function () {
97
97
  value: function () {
98
98
  var _sendEvent = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(event) {
99
99
  return _regenerator.default.wrap(function _callee$(_context) {
100
- while (1) {
101
- switch (_context.prev = _context.next) {
102
- case 0:
103
- if (!(this.getAnalyticsClient && !this.analyticsClient)) {
104
- _context.next = 9;
105
- break;
106
- }
107
- _context.prev = 1;
108
- _context.next = 4;
109
- return this.getAnalyticsClient;
110
- case 4:
111
- this.analyticsClient = _context.sent;
100
+ while (1) switch (_context.prev = _context.next) {
101
+ case 0:
102
+ if (!(this.getAnalyticsClient && !this.analyticsClient)) {
112
103
  _context.next = 9;
113
104
  break;
114
- case 7:
115
- _context.prev = 7;
116
- _context.t0 = _context["catch"](1);
117
- case 9:
118
- triggerAnalyticsEvent(event, this.analyticsClient);
119
- case 10:
120
- case "end":
121
- return _context.stop();
122
- }
105
+ }
106
+ _context.prev = 1;
107
+ _context.next = 4;
108
+ return this.getAnalyticsClient;
109
+ case 4:
110
+ this.analyticsClient = _context.sent;
111
+ _context.next = 9;
112
+ break;
113
+ case 7:
114
+ _context.prev = 7;
115
+ _context.t0 = _context["catch"](1);
116
+ case 9:
117
+ triggerAnalyticsEvent(event, this.analyticsClient);
118
+ case 10:
119
+ case "end":
120
+ return _context.stop();
123
121
  }
124
122
  }, _callee, this, [[1, 7]]);
125
123
  }));
@@ -6,15 +6,15 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.measureMap = exports.isPerformanceAPIAvailable = exports.MEASURE_NAME = void 0;
7
7
  exports.startMeasure = startMeasure;
8
8
  exports.stopMeasure = stopMeasure;
9
- var MEASURE_NAME;
10
- exports.MEASURE_NAME = MEASURE_NAME;
11
- (function (MEASURE_NAME) {
9
+ var MEASURE_NAME = /*#__PURE__*/function (MEASURE_NAME) {
12
10
  MEASURE_NAME["SOCKET_CONNECT"] = "socketConnect";
13
11
  MEASURE_NAME["DOCUMENT_INIT"] = "documentInit";
14
12
  MEASURE_NAME["COMMIT_UNCONFIRMED_STEPS"] = "commitUnconfirmedSteps";
15
13
  MEASURE_NAME["PUBLISH_PAGE"] = "publishPage";
16
14
  MEASURE_NAME["GET_CURRENT_STATE"] = "getCurrentState";
17
- })(MEASURE_NAME || (exports.MEASURE_NAME = MEASURE_NAME = {}));
15
+ return MEASURE_NAME;
16
+ }({});
17
+ exports.MEASURE_NAME = MEASURE_NAME;
18
18
  var isPerformanceAPIAvailable = function isPerformanceAPIAvailable() {
19
19
  return typeof window !== 'undefined' && 'performance' in window && ['measure', 'clearMeasures', 'clearMarks', 'getEntriesByName', 'getEntriesByType'].every(function (api) {
20
20
  return !!performance[api];
@@ -41,6 +41,7 @@ var Channel = /*#__PURE__*/function (_Emitter) {
41
41
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "reconnectHelper", null);
42
42
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "initialized", false);
43
43
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "network", null);
44
+ // read-only getters used for tests
44
45
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "getInitialized", function () {
45
46
  return _this.initialized;
46
47
  });
@@ -58,6 +59,7 @@ var Channel = /*#__PURE__*/function (_Emitter) {
58
59
  _this.token = value;
59
60
  }
60
61
  });
62
+ // sets the token as undefined
61
63
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "unsetToken", function () {
62
64
  return _this.setToken();
63
65
  });
@@ -184,131 +186,129 @@ var Channel = /*#__PURE__*/function (_Emitter) {
184
186
  var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(fromVersion) {
185
187
  var _ref2, _this$token, _yield$utils$requestS, doc, version, stepMaps, metadata, errorNotFound, errorCatchup;
186
188
  return _regenerator.default.wrap(function _callee$(_context) {
187
- while (1) {
188
- switch (_context.prev = _context.next) {
189
- case 0:
190
- _context.prev = 0;
191
- _context.t0 = _utilServiceSupport.utils;
192
- _context.t1 = _this.config;
193
- _context.t2 = "document/".concat(encodeURIComponent(_this.config.documentAri), "/catchup");
194
- _context.t3 = {
195
- version: fromVersion
196
- };
197
- _context.t4 = _objectSpread;
198
- _context.t5 = _objectSpread;
199
- _context.t6 = {};
200
- if (!_this.config.permissionTokenRefresh) {
201
- _context.next = 29;
202
- break;
203
- }
204
- if (!((_this$token = _this.token) !== null && _this$token !== void 0)) {
205
- _context.next = 13;
206
- break;
207
- }
208
- _context.t9 = _this$token;
209
- _context.next = 16;
189
+ while (1) switch (_context.prev = _context.next) {
190
+ case 0:
191
+ _context.prev = 0;
192
+ _context.t0 = _utilServiceSupport.utils;
193
+ _context.t1 = _this.config;
194
+ _context.t2 = "document/".concat(encodeURIComponent(_this.config.documentAri), "/catchup");
195
+ _context.t3 = {
196
+ version: fromVersion
197
+ };
198
+ _context.t4 = _objectSpread;
199
+ _context.t5 = _objectSpread;
200
+ _context.t6 = {};
201
+ if (!_this.config.permissionTokenRefresh) {
202
+ _context.next = 29;
210
203
  break;
211
- case 13:
212
- _context.next = 15;
213
- return _this.config.permissionTokenRefresh().then(function (token) {
214
- if (token) {
215
- _this.setToken(token);
216
- }
217
- return token;
218
- });
219
- case 15:
220
- _context.t9 = _context.sent;
221
- case 16:
222
- _context.t10 = _ref2 = _context.t9;
223
- _context.t8 = _context.t10 !== null;
224
- if (!_context.t8) {
225
- _context.next = 20;
226
- break;
227
- }
228
- _context.t8 = _ref2 !== void 0;
229
- case 20:
230
- if (!_context.t8) {
231
- _context.next = 24;
232
- break;
204
+ }
205
+ if (!((_this$token = _this.token) !== null && _this$token !== void 0)) {
206
+ _context.next = 13;
207
+ break;
208
+ }
209
+ _context.t9 = _this$token;
210
+ _context.next = 16;
211
+ break;
212
+ case 13:
213
+ _context.next = 15;
214
+ return _this.config.permissionTokenRefresh().then(function (token) {
215
+ if (token) {
216
+ _this.setToken(token);
233
217
  }
234
- _context.t11 = _ref2;
235
- _context.next = 25;
218
+ return token;
219
+ });
220
+ case 15:
221
+ _context.t9 = _context.sent;
222
+ case 16:
223
+ _context.t10 = _ref2 = _context.t9;
224
+ _context.t8 = _context.t10 !== null;
225
+ if (!_context.t8) {
226
+ _context.next = 20;
236
227
  break;
237
- case 24:
238
- _context.t11 = undefined;
239
- case 25:
240
- _context.t12 = _context.t11;
241
- _context.t7 = {
242
- 'x-token': _context.t12
243
- };
244
- _context.next = 30;
228
+ }
229
+ _context.t8 = _ref2 !== void 0;
230
+ case 20:
231
+ if (!_context.t8) {
232
+ _context.next = 24;
245
233
  break;
246
- case 29:
247
- _context.t7 = {};
248
- case 30:
249
- _context.t13 = _context.t7;
250
- _context.t14 = (0, _context.t5)(_context.t6, _context.t13);
251
- _context.t15 = {};
252
- _context.t16 = {
253
- 'x-product': (0, _utils.getProduct)(_this.config.productInfo),
254
- 'x-subproduct': (0, _utils.getSubProduct)(_this.config.productInfo)
255
- };
256
- _context.t17 = (0, _context.t4)(_context.t14, _context.t15, _context.t16);
257
- _context.t18 = {
258
- headers: _context.t17
259
- };
260
- _context.t19 = {
261
- path: _context.t2,
262
- queryParams: _context.t3,
263
- requestInit: _context.t18
264
- };
265
- _context.next = 39;
266
- return _context.t0.requestService.call(_context.t0, _context.t1, _context.t19);
267
- case 39:
268
- _yield$utils$requestS = _context.sent;
269
- doc = _yield$utils$requestS.doc;
270
- version = _yield$utils$requestS.version;
271
- stepMaps = _yield$utils$requestS.stepMaps;
272
- metadata = _yield$utils$requestS.metadata;
273
- return _context.abrupt("return", {
274
- doc: doc,
275
- version: version,
276
- stepMaps: stepMaps,
277
- metadata: metadata
278
- });
279
- case 47:
280
- _context.prev = 47;
281
- _context.t20 = _context["catch"](0);
282
- if (!(_context.t20.code === 404)) {
283
- _context.next = 53;
284
- break;
234
+ }
235
+ _context.t11 = _ref2;
236
+ _context.next = 25;
237
+ break;
238
+ case 24:
239
+ _context.t11 = undefined;
240
+ case 25:
241
+ _context.t12 = _context.t11;
242
+ _context.t7 = {
243
+ 'x-token': _context.t12
244
+ };
245
+ _context.next = 30;
246
+ break;
247
+ case 29:
248
+ _context.t7 = {};
249
+ case 30:
250
+ _context.t13 = _context.t7;
251
+ _context.t14 = (0, _context.t5)(_context.t6, _context.t13);
252
+ _context.t15 = {};
253
+ _context.t16 = {
254
+ 'x-product': (0, _utils.getProduct)(_this.config.productInfo),
255
+ 'x-subproduct': (0, _utils.getSubProduct)(_this.config.productInfo)
256
+ };
257
+ _context.t17 = (0, _context.t4)(_context.t14, _context.t15, _context.t16);
258
+ _context.t18 = {
259
+ headers: _context.t17
260
+ };
261
+ _context.t19 = {
262
+ path: _context.t2,
263
+ queryParams: _context.t3,
264
+ requestInit: _context.t18
265
+ };
266
+ _context.next = 39;
267
+ return _context.t0.requestService.call(_context.t0, _context.t1, _context.t19);
268
+ case 39:
269
+ _yield$utils$requestS = _context.sent;
270
+ doc = _yield$utils$requestS.doc;
271
+ version = _yield$utils$requestS.version;
272
+ stepMaps = _yield$utils$requestS.stepMaps;
273
+ metadata = _yield$utils$requestS.metadata;
274
+ return _context.abrupt("return", {
275
+ doc: doc,
276
+ version: version,
277
+ stepMaps: stepMaps,
278
+ metadata: metadata
279
+ });
280
+ case 47:
281
+ _context.prev = 47;
282
+ _context.t20 = _context["catch"](0);
283
+ if (!(_context.t20.code === 404)) {
284
+ _context.next = 53;
285
+ break;
286
+ }
287
+ errorNotFound = {
288
+ message: 'The requested document is not found',
289
+ data: {
290
+ status: _context.t20.code,
291
+ code: _errorTypes.INTERNAL_ERROR_CODE.DOCUMENT_NOT_FOUND
285
292
  }
286
- errorNotFound = {
287
- message: 'The requested document is not found',
288
- data: {
289
- status: _context.t20.code,
290
- code: _errorTypes.INTERNAL_ERROR_CODE.DOCUMENT_NOT_FOUND
291
- }
292
- };
293
- _this.emit('error', errorNotFound);
294
- return _context.abrupt("return", {});
295
- case 53:
296
- //nullify token so it is forced to generate new token on reconnect
297
- _this.unsetToken();
298
- logger("Can't fetch the catchup", _context.t20.message);
299
- errorCatchup = {
300
- message: 'Cannot fetch catchup from collab service',
301
- data: {
302
- status: _context.t20.status,
303
- code: _errorTypes.INTERNAL_ERROR_CODE.CATCHUP_FAILED
304
- }
305
- };
306
- _this.emit('error', errorCatchup);
307
- throw _context.t20;
308
- case 58:
309
- case "end":
310
- return _context.stop();
311
- }
293
+ };
294
+ _this.emit('error', errorNotFound);
295
+ return _context.abrupt("return", {});
296
+ case 53:
297
+ //nullify token so it is forced to generate new token on reconnect
298
+ _this.unsetToken();
299
+ logger("Can't fetch the catchup", _context.t20.message);
300
+ errorCatchup = {
301
+ message: 'Cannot fetch catchup from collab service',
302
+ data: {
303
+ status: _context.t20.status,
304
+ code: _errorTypes.INTERNAL_ERROR_CODE.CATCHUP_FAILED
305
+ }
306
+ };
307
+ _this.emit('error', errorCatchup);
308
+ throw _context.t20;
309
+ case 58:
310
+ case "end":
311
+ return _context.stop();
312
312
  }
313
313
  }, _callee, null, [[0, 47]]);
314
314
  }));
@@ -316,6 +316,11 @@ var Channel = /*#__PURE__*/function (_Emitter) {
316
316
  return _ref.apply(this, arguments);
317
317
  };
318
318
  }());
319
+ /**
320
+ * Send message to the back-end service over the channel. Timestamp will be added server side.
321
+ * @throws {NotInitializedError} Channel not initialized
322
+ * @throws {NotConnectedError} Channel not connected
323
+ */
319
324
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "broadcast", function (type, data, callback) {
320
325
  if (!_this.socket) {
321
326
  throw new _errorTypes.NotInitializedError('Cannot broadcast, not initialized yet');
@@ -330,6 +335,11 @@ var Channel = /*#__PURE__*/function (_Emitter) {
330
335
  type: type
331
336
  }, data), callback);
332
337
  });
338
+ /**
339
+ * Send metadata to the back-end service over the channel
340
+ * @throws {NotInitializedError} Channel not initialized
341
+ * @throws {NotConnectedError} Channel not connected
342
+ */
333
343
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "sendMetadata", function (metadata) {
334
344
  if (!_this.socket) {
335
345
  throw new _errorTypes.NotInitializedError('Cannot send metadata, not initialized yet');
@@ -354,8 +364,6 @@ var Channel = /*#__PURE__*/function (_Emitter) {
354
364
  _this.initExperience = (0, _ufo.createDocInitExp)(_this.analyticsHelper);
355
365
  return _this;
356
366
  }
357
-
358
- // read-only getters used for tests
359
367
  (0, _createClass2.default)(Channel, [{
360
368
  key: "connect",
361
369
  value:
@@ -364,7 +372,13 @@ var Channel = /*#__PURE__*/function (_Emitter) {
364
372
  */
365
373
  function connect() {
366
374
  var _this2 = this;
375
+ var shouldInitialize = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
367
376
  (0, _performance.startMeasure)(_performance.MEASURE_NAME.SOCKET_CONNECT, this.analyticsHelper);
377
+ // If provider already has access to the initial draft, explicitly set channel as initialized
378
+ // to bypass BE doc retrieval
379
+ if (shouldInitialize) {
380
+ this.initialized = true;
381
+ }
368
382
  if (!this.initialized) {
369
383
  var _this$initExperience2;
370
384
  (0, _performance.startMeasure)(_performance.MEASURE_NAME.DOCUMENT_INIT, this.analyticsHelper);
@@ -389,54 +403,52 @@ var Channel = /*#__PURE__*/function (_Emitter) {
389
403
  var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(cb) {
390
404
  var token, _err, _err$data, _err$data$meta, authenticationError;
391
405
  return _regenerator.default.wrap(function _callee2$(_context2) {
392
- while (1) {
393
- switch (_context2.prev = _context2.next) {
394
- case 0:
395
- if (!(cacheToken && _this2.token)) {
396
- _context2.next = 5;
397
- break;
398
- }
399
- authData.token = _this2.token;
400
- cb(authData);
401
- _context2.next = 17;
402
- break;
403
- case 5:
404
- _context2.prev = 5;
405
- _context2.next = 8;
406
- return permissionTokenRefresh();
407
- case 8:
408
- token = _context2.sent;
409
- if (token) {
410
- // save token locally
411
- _this2.setToken(token);
412
- authData.token = token;
413
- }
414
- cb(authData);
415
- _context2.next = 17;
406
+ while (1) switch (_context2.prev = _context2.next) {
407
+ case 0:
408
+ if (!(cacheToken && _this2.token)) {
409
+ _context2.next = 5;
416
410
  break;
417
- case 13:
418
- _context2.prev = 13;
419
- _context2.t0 = _context2["catch"](5);
420
- // Pass the error back to the consumers so they can deal with exceptional cases themselves (eg. no permissions because the page was deleted)
421
- authenticationError = {
422
- message: 'Insufficient editing permissions',
423
- data: {
424
- status: 403,
425
- code: _errorTypes.INTERNAL_ERROR_CODE.TOKEN_PERMISSION_ERROR,
426
- meta: {
427
- originalError: _context2.t0,
428
- // @ts-expect-error we know the error structure passed in this hack
429
- reason: (_err = err) === null || _err === void 0 ? void 0 : (_err$data = _err.data) === null || _err$data === void 0 ? void 0 : (_err$data$meta = _err$data.meta) === null || _err$data$meta === void 0 ? void 0 : _err$data$meta.reason // Should always be 'RESOURCE_DELETED' Temporary, until Confluence Cloud removes their hack
430
- // https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/browse/next/packages/native-collab/src/fetchCollabPermissionToken.ts#37
431
- }
411
+ }
412
+ authData.token = _this2.token;
413
+ cb(authData);
414
+ _context2.next = 17;
415
+ break;
416
+ case 5:
417
+ _context2.prev = 5;
418
+ _context2.next = 8;
419
+ return permissionTokenRefresh();
420
+ case 8:
421
+ token = _context2.sent;
422
+ if (token) {
423
+ // save token locally
424
+ _this2.setToken(token);
425
+ authData.token = token;
426
+ }
427
+ cb(authData);
428
+ _context2.next = 17;
429
+ break;
430
+ case 13:
431
+ _context2.prev = 13;
432
+ _context2.t0 = _context2["catch"](5);
433
+ // Pass the error back to the consumers so they can deal with exceptional cases themselves (eg. no permissions because the page was deleted)
434
+ authenticationError = {
435
+ message: 'Insufficient editing permissions',
436
+ data: {
437
+ status: 403,
438
+ code: _errorTypes.INTERNAL_ERROR_CODE.TOKEN_PERMISSION_ERROR,
439
+ meta: {
440
+ originalError: _context2.t0,
441
+ // @ts-expect-error we know the error structure passed in this hack
442
+ reason: (_err = err) === null || _err === void 0 ? void 0 : (_err$data = _err.data) === null || _err$data === void 0 ? void 0 : (_err$data$meta = _err$data.meta) === null || _err$data$meta === void 0 ? void 0 : _err$data$meta.reason // Should always be 'RESOURCE_DELETED' Temporary, until Confluence Cloud removes their hack
443
+ // https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/browse/next/packages/native-collab/src/fetchCollabPermissionToken.ts#37
432
444
  }
433
- };
445
+ }
446
+ };
434
447
 
435
- _this2.emit('error', authenticationError);
436
- case 17:
437
- case "end":
438
- return _context2.stop();
439
- }
448
+ _this2.emit('error', authenticationError);
449
+ case 17:
450
+ case "end":
451
+ return _context2.stop();
440
452
  }
441
453
  }, _callee2, null, [[5, 13]]);
442
454
  }));
@@ -457,8 +469,13 @@ var Channel = /*#__PURE__*/function (_Emitter) {
457
469
  this.socket.on('steps:added', function (data) {
458
470
  _this2.emit('steps:added', data);
459
471
  });
460
- this.socket.on('participant:telepointer', function (payload) {
461
- _this2.emit('participant:telepointer', payload.data);
472
+ this.socket.on('participant:telepointer', function (_ref4) {
473
+ var timestamp = _ref4.timestamp,
474
+ data = _ref4.data;
475
+ // data is TelepointerPayload without timestamp
476
+ _this2.emit('participant:telepointer', _objectSpread({
477
+ timestamp: timestamp
478
+ }, data));
462
479
  });
463
480
  this.socket.on('presence:joined', function (data) {
464
481
  _this2.emit('presence:joined', data);
@@ -469,11 +486,11 @@ var Channel = /*#__PURE__*/function (_Emitter) {
469
486
  this.socket.on('participant:left', function (data) {
470
487
  _this2.emit('participant:left', data);
471
488
  });
472
- this.socket.on('participant:updated', function (_ref4) {
473
- var sessionId = _ref4.sessionId,
474
- timestamp = _ref4.timestamp,
475
- data = _ref4.data,
476
- clientId = _ref4.clientId;
489
+ this.socket.on('participant:updated', function (_ref5) {
490
+ var sessionId = _ref5.sessionId,
491
+ timestamp = _ref5.timestamp,
492
+ data = _ref5.data,
493
+ clientId = _ref5.clientId;
477
494
  _this2.emit('participant:updated', _objectSpread({
478
495
  sessionId: sessionId,
479
496
  timestamp: timestamp,
@@ -489,42 +506,40 @@ var Channel = /*#__PURE__*/function (_Emitter) {
489
506
  _this2.emit('status', data);
490
507
  });
491
508
  this.socket.on('disconnect', /*#__PURE__*/function () {
492
- var _ref5 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(reason) {
509
+ var _ref6 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(reason) {
493
510
  var _this2$analyticsHelpe, reconnectionError;
494
511
  return _regenerator.default.wrap(function _callee3$(_context3) {
495
- while (1) {
496
- switch (_context3.prev = _context3.next) {
497
- case 0:
498
- _this2.connected = false;
499
- logger("disconnect reason: ".concat(reason));
500
- _this2.emit('disconnect', {
501
- reason: reason
502
- });
503
- if (reason === _disconnectedReasonMapper.socketIOReasons.IO_SERVER_DISCONNECT && _this2.socket) {
504
- // The disconnection was initiated by the server, we need to reconnect manually.
505
- try {
506
- _this2.socket.connect();
507
- } catch (error) {
508
- (_this2$analyticsHelpe = _this2.analyticsHelper) === null || _this2$analyticsHelpe === void 0 ? void 0 : _this2$analyticsHelpe.sendErrorEvent(error, 'Error while reconnecting the channel');
509
- reconnectionError = {
510
- message: 'Caught error during reconnection',
511
- data: {
512
- status: 500,
513
- code: _errorTypes.INTERNAL_ERROR_CODE.RECONNECTION_ERROR
514
- }
515
- };
516
- _this2.emit('error', reconnectionError);
517
- }
512
+ while (1) switch (_context3.prev = _context3.next) {
513
+ case 0:
514
+ _this2.connected = false;
515
+ logger("disconnect reason: ".concat(reason));
516
+ _this2.emit('disconnect', {
517
+ reason: reason
518
+ });
519
+ if (reason === _disconnectedReasonMapper.socketIOReasons.IO_SERVER_DISCONNECT && _this2.socket) {
520
+ // The disconnection was initiated by the server, we need to reconnect manually.
521
+ try {
522
+ _this2.socket.connect();
523
+ } catch (error) {
524
+ (_this2$analyticsHelpe = _this2.analyticsHelper) === null || _this2$analyticsHelpe === void 0 ? void 0 : _this2$analyticsHelpe.sendErrorEvent(error, 'Error while reconnecting the channel');
525
+ reconnectionError = {
526
+ message: 'Caught error during reconnection',
527
+ data: {
528
+ status: 500,
529
+ code: _errorTypes.INTERNAL_ERROR_CODE.RECONNECTION_ERROR
530
+ }
531
+ };
532
+ _this2.emit('error', reconnectionError);
518
533
  }
519
- case 4:
520
- case "end":
521
- return _context3.stop();
522
- }
534
+ }
535
+ case 4:
536
+ case "end":
537
+ return _context3.stop();
523
538
  }
524
539
  }, _callee3);
525
540
  }));
526
541
  return function (_x3) {
527
- return _ref5.apply(this, arguments);
542
+ return _ref6.apply(this, arguments);
528
543
  };
529
544
  }());
530
545