@atlaskit/collab-provider 10.4.0 → 10.4.1

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 (44) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/afm-cc/tsconfig.json +3 -0
  3. package/afm-jira/tsconfig.json +6 -0
  4. package/dist/cjs/analytics/analytics-helper.js +0 -2
  5. package/dist/cjs/api/api.js +26 -14
  6. package/dist/cjs/channel.js +0 -2
  7. package/dist/cjs/document/catchupv2.js +1 -4
  8. package/dist/cjs/document/document-service.js +33 -32
  9. package/dist/cjs/helpers/utils.js +80 -1
  10. package/dist/cjs/participants/participants-service.js +0 -2
  11. package/dist/cjs/provider/commit-step.js +12 -1
  12. package/dist/cjs/provider/index.js +69 -33
  13. package/dist/cjs/version-wrapper.js +1 -1
  14. package/dist/es2019/analytics/analytics-helper.js +0 -2
  15. package/dist/es2019/api/api.js +13 -1
  16. package/dist/es2019/channel.js +0 -2
  17. package/dist/es2019/document/catchupv2.js +1 -4
  18. package/dist/es2019/document/document-service.js +6 -5
  19. package/dist/es2019/helpers/utils.js +30 -1
  20. package/dist/es2019/participants/participants-service.js +0 -2
  21. package/dist/es2019/provider/commit-step.js +13 -1
  22. package/dist/es2019/provider/index.js +40 -17
  23. package/dist/es2019/version-wrapper.js +1 -1
  24. package/dist/esm/analytics/analytics-helper.js +0 -2
  25. package/dist/esm/api/api.js +26 -14
  26. package/dist/esm/channel.js +0 -2
  27. package/dist/esm/document/catchupv2.js +1 -4
  28. package/dist/esm/document/document-service.js +33 -32
  29. package/dist/esm/helpers/utils.js +78 -1
  30. package/dist/esm/participants/participants-service.js +0 -2
  31. package/dist/esm/provider/commit-step.js +12 -1
  32. package/dist/esm/provider/index.js +71 -35
  33. package/dist/esm/version-wrapper.js +1 -1
  34. package/dist/types/document/document-service.d.ts +1 -0
  35. package/dist/types/errors/custom-errors.d.ts +1 -1
  36. package/dist/types/helpers/utils.d.ts +9 -1
  37. package/dist/types/index.d.ts +1 -1
  38. package/dist/types/provider/commit-step.d.ts +2 -1
  39. package/dist/types-ts4.5/document/document-service.d.ts +1 -0
  40. package/dist/types-ts4.5/errors/custom-errors.d.ts +1 -1
  41. package/dist/types-ts4.5/helpers/utils.d.ts +9 -1
  42. package/dist/types-ts4.5/index.d.ts +1 -1
  43. package/dist/types-ts4.5/provider/commit-step.d.ts +2 -1
  44. package/package.json +12 -2
@@ -1,7 +1,11 @@
1
+ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
1
2
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
2
4
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
5
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
6
  import { scrubAdf } from '@atlaskit/adf-utils/scrub';
7
+ import { sendableSteps } from '@atlaskit/prosemirror-collab';
8
+ import { CustomError } from '../errors/custom-errors';
5
9
  export var createLogger = function createLogger(prefix) {
6
10
  var color = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'blue';
7
11
  return (
@@ -191,4 +195,77 @@ var stepToAdf = function stepToAdf(step) {
191
195
  });
192
196
  }
193
197
  return [];
194
- };
198
+ };
199
+ export function logObfuscatedSteps(_x, _x2) {
200
+ return _logObfuscatedSteps.apply(this, arguments);
201
+ }
202
+ function _logObfuscatedSteps() {
203
+ _logObfuscatedSteps = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(oldState, newState) {
204
+ var _states$new, _states$old, stepsFromOldState, stepsFromNewState, states;
205
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
206
+ while (1) switch (_context.prev = _context.next) {
207
+ case 0:
208
+ _context.prev = 0;
209
+ stepsFromOldState = '', stepsFromNewState = '';
210
+ states = {
211
+ old: oldState ? sendableSteps(oldState) : null,
212
+ new: sendableSteps(newState)
213
+ };
214
+ if (!((_states$new = states.new) !== null && _states$new !== void 0 && _states$new.steps)) {
215
+ _context.next = 7;
216
+ break;
217
+ }
218
+ _context.next = 6;
219
+ return toObfuscatedSteps(states.new.steps);
220
+ case 6:
221
+ stepsFromNewState = _context.sent;
222
+ case 7:
223
+ if (!((_states$old = states.old) !== null && _states$old !== void 0 && _states$old.steps)) {
224
+ _context.next = 11;
225
+ break;
226
+ }
227
+ _context.next = 10;
228
+ return toObfuscatedSteps(states.old.steps);
229
+ case 10:
230
+ stepsFromOldState = _context.sent;
231
+ case 11:
232
+ return _context.abrupt("return", {
233
+ stepsFromOldState: stepsFromOldState,
234
+ stepsFromNewState: stepsFromNewState
235
+ });
236
+ case 14:
237
+ _context.prev = 14;
238
+ _context.t0 = _context["catch"](0);
239
+ return _context.abrupt("return", new CustomError('Failed to obfuscate steps', _context.t0));
240
+ case 17:
241
+ case "end":
242
+ return _context.stop();
243
+ }
244
+ }, _callee, null, [[0, 14]]);
245
+ }));
246
+ return _logObfuscatedSteps.apply(this, arguments);
247
+ }
248
+ export function toObfuscatedSteps(_x3) {
249
+ return _toObfuscatedSteps.apply(this, arguments);
250
+ }
251
+ function _toObfuscatedSteps() {
252
+ _toObfuscatedSteps = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(steps) {
253
+ var _steps;
254
+ return _regeneratorRuntime.wrap(function _callee2$(_context2) {
255
+ while (1) switch (_context2.prev = _context2.next) {
256
+ case 0:
257
+ _context2.next = 2;
258
+ return Promise.resolve(steps.slice().map(function (s) {
259
+ return s.toJSON();
260
+ }));
261
+ case 2:
262
+ _steps = _context2.sent;
263
+ return _context2.abrupt("return", JSON.stringify(getObfuscatedSteps(_steps)));
264
+ case 4:
265
+ case "end":
266
+ return _context2.stop();
267
+ }
268
+ }, _callee2);
269
+ }));
270
+ return _toObfuscatedSteps.apply(this, arguments);
271
+ }
@@ -24,8 +24,6 @@ var SEND_PRESENCE_INTERVAL = 150 * 1000; // 150 seconds
24
24
  * @param sendPresenceJoined Callback to Channel class
25
25
  */
26
26
  export var ParticipantsService = /*#__PURE__*/function () {
27
- // Ignored via go/ees005
28
- // eslint-disable-next-line @typescript-eslint/max-params
29
27
  function ParticipantsService(analyticsHelper) {
30
28
  var _this = this;
31
29
  var participantsState = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new ParticipantsState();
@@ -20,7 +20,8 @@ export var commitStepQueue = function commitStepQueue(_ref) {
20
20
  onErrorHandled = _ref.onErrorHandled,
21
21
  analyticsHelper = _ref.analyticsHelper,
22
22
  emit = _ref.emit,
23
- __livePage = _ref.__livePage;
23
+ __livePage = _ref.__livePage,
24
+ hasRecovered = _ref.hasRecovered;
24
25
  if (!readyToCommit) {
25
26
  logger('Not ready to commit, skip');
26
27
  return;
@@ -62,6 +63,16 @@ export var commitStepQueue = function commitStepQueue(_ref) {
62
63
  return step;
63
64
  });
64
65
  }
66
+
67
+ // tag unconfirmed steps sent after page has been recovered during client's editing session
68
+ if (hasRecovered && fg('tag_unconfirmed_steps_after_recovery')) {
69
+ stepsWithClientAndUserId = stepsWithClientAndUserId.map(function (step) {
70
+ step.metadata = _objectSpread(_objectSpread({}, step.metadata), {}, {
71
+ unconfirmedStepAfterRecovery: true
72
+ });
73
+ return step;
74
+ });
75
+ }
65
76
  var start = new Date().getTime();
66
77
  emit('commit-status', {
67
78
  status: 'attempt',
@@ -13,12 +13,13 @@ function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstruct
13
13
  function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
14
14
  function _superPropGet(t, o, e, r) { var p = _get(_getPrototypeOf(1 & r ? t.prototype : t), o, e); return 2 & r && "function" == typeof p ? function (t) { return p.apply(e, t); } : p; }
15
15
  import { v4 as uuidv4 } from 'uuid';
16
+ import { fg } from '@atlaskit/platform-feature-flags';
16
17
  import { Emitter } from '../emitter';
17
18
  import { Channel } from '../channel';
18
- import { createLogger } from '../helpers/utils';
19
+ import { createLogger, logObfuscatedSteps } from '../helpers/utils';
19
20
  import AnalyticsHelper from '../analytics/analytics-helper';
20
21
  import { telepointerCallback } from '../participants/telepointers-helper';
21
- import { DestroyError, GetCurrentStateError, GetFinalAcknowledgedStateError, ProviderInitialisationError, SendTransactionError, SetEditorWidthError, SetMetadataError, SetTitleError } from '../errors/custom-errors';
22
+ import { CustomError, DestroyError, GetCurrentStateError, GetFinalAcknowledgedStateError, ProviderInitialisationError, SendTransactionError, SetEditorWidthError, SetMetadataError, SetTitleError } from '../errors/custom-errors';
22
23
  import { NCS_ERROR_CODE } from '../errors/ncs-errors';
23
24
  import { MetadataService } from '../metadata/metadata-service';
24
25
  import { DocumentService } from '../document/document-service';
@@ -155,7 +156,29 @@ export var Provider = /*#__PURE__*/function (_Emitter) {
155
156
  _this.emit('permission', permit);
156
157
  }).on('steps:added', _this.documentService.onStepsAdded).on('metadata:changed', _this.metadataService.onMetadataChanged).on('participant:telepointer', function (payload) {
157
158
  return _this.participantsService.onParticipantTelepointer(payload, _this.sessionId);
158
- }).on('participant:activity-join', _this.participantsService.onParticipantActivityJoin).on('participant:activity-ack', _this.participantsService.onParticipantActivityAck).on('presence:joined', _this.participantsService.onPresenceJoined).on('presence', _this.participantsService.onPresence).on('participant:left', _this.participantsService.onParticipantLeft).on('participant:updated', _this.participantsService.onParticipantUpdated).on('disconnect', _this.onDisconnected.bind(_this)).on('error', _this.onErrorHandled).on('status', _this.namespaceService.onNamespaceStatusChanged).connect(shouldSkipDocumentInit);
159
+ }).on('participant:activity-join', _this.participantsService.onParticipantActivityJoin).on('participant:activity-ack', _this.participantsService.onParticipantActivityAck).on('presence:joined', _this.participantsService.onPresenceJoined).on('presence', _this.participantsService.onPresence).on('participant:left', _this.participantsService.onParticipantLeft).on('participant:updated', _this.participantsService.onParticipantUpdated).on('disconnect', _this.onDisconnected.bind(_this)).on('error', _this.onErrorHandled).on('status', /*#__PURE__*/function () {
160
+ var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(status) {
161
+ var isLocked;
162
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
163
+ while (1) switch (_context.prev = _context.next) {
164
+ case 0:
165
+ _context.next = 2;
166
+ return _this.namespaceService.onNamespaceStatusChanged(status);
167
+ case 2:
168
+ isLocked = _this.namespaceService.getIsNamespaceLocked();
169
+ _this.emit('namespace-lock:check', {
170
+ isLocked: isLocked
171
+ });
172
+ case 4:
173
+ case "end":
174
+ return _context.stop();
175
+ }
176
+ }, _callee);
177
+ }));
178
+ return function (_x) {
179
+ return _ref4.apply(this, arguments);
180
+ };
181
+ }()).connect(shouldSkipDocumentInit);
159
182
  });
160
183
  _defineProperty(_this, "setUserId", function (id) {
161
184
  _this.userId = id;
@@ -202,8 +225,8 @@ export var Provider = /*#__PURE__*/function (_Emitter) {
202
225
  return _this.aiProviderActiveIds;
203
226
  });
204
227
  // Note: this gets triggered on page reload for Firefox (not other browsers) because of closeOnBeforeunload: false
205
- _defineProperty(_this, "onDisconnected", function (_ref4) {
206
- var reason = _ref4.reason;
228
+ _defineProperty(_this, "onDisconnected", function (_ref5) {
229
+ var reason = _ref5.reason;
207
230
  _this.disconnectedAt = Date.now();
208
231
  _this.participantsService.disconnect(reason, _this.sessionId);
209
232
  });
@@ -218,52 +241,52 @@ export var Provider = /*#__PURE__*/function (_Emitter) {
218
241
  * Used for draft sync, a process running every 5s for the first editor of a document to sync the document to the Confluence back-end.
219
242
  * @throws {GetCurrentStateError} Something went wrong while returning the current state
220
243
  */
221
- _defineProperty(_this, "getCurrentState", /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
244
+ _defineProperty(_this, "getCurrentState", /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
222
245
  var _this$analyticsHelper4;
223
- return _regeneratorRuntime.wrap(function _callee$(_context) {
224
- while (1) switch (_context.prev = _context.next) {
246
+ return _regeneratorRuntime.wrap(function _callee2$(_context2) {
247
+ while (1) switch (_context2.prev = _context2.next) {
225
248
  case 0:
226
- _context.prev = 0;
227
- _context.next = 3;
249
+ _context2.prev = 0;
250
+ _context2.next = 3;
228
251
  return _this.documentService.getCurrentState();
229
252
  case 3:
230
- return _context.abrupt("return", _context.sent);
253
+ return _context2.abrupt("return", _context2.sent);
231
254
  case 6:
232
- _context.prev = 6;
233
- _context.t0 = _context["catch"](0);
234
- (_this$analyticsHelper4 = _this.analyticsHelper) === null || _this$analyticsHelper4 === void 0 || _this$analyticsHelper4.sendErrorEvent(_context.t0, 'Error while returning ADF version of current draft document');
235
- throw new GetCurrentStateError('Error while returning the current state of the draft document', _context.t0);
255
+ _context2.prev = 6;
256
+ _context2.t0 = _context2["catch"](0);
257
+ (_this$analyticsHelper4 = _this.analyticsHelper) === null || _this$analyticsHelper4 === void 0 || _this$analyticsHelper4.sendErrorEvent(_context2.t0, 'Error while returning ADF version of current draft document');
258
+ throw new GetCurrentStateError('Error while returning the current state of the draft document', _context2.t0);
236
259
  case 10:
237
260
  case "end":
238
- return _context.stop();
261
+ return _context2.stop();
239
262
  }
240
- }, _callee, null, [[0, 6]]);
263
+ }, _callee2, null, [[0, 6]]);
241
264
  })));
242
265
  /**
243
266
  * Return the final acknowledged (by NCS) ADF version of the current draft document, together with it's title and the current step version.
244
267
  * Used when returning the document to Confluence on publish.
245
268
  * @throws {GetFinalAcknowledgedStateError} Something went wrong while returning the acknowledged state
246
269
  */
247
- _defineProperty(_this, "getFinalAcknowledgedState", /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
270
+ _defineProperty(_this, "getFinalAcknowledgedState", /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
248
271
  var _this$analyticsHelper5;
249
- return _regeneratorRuntime.wrap(function _callee2$(_context2) {
250
- while (1) switch (_context2.prev = _context2.next) {
272
+ return _regeneratorRuntime.wrap(function _callee3$(_context3) {
273
+ while (1) switch (_context3.prev = _context3.next) {
251
274
  case 0:
252
- _context2.prev = 0;
253
- _context2.next = 3;
275
+ _context3.prev = 0;
276
+ _context3.next = 3;
254
277
  return _this.documentService.getFinalAcknowledgedState();
255
278
  case 3:
256
- return _context2.abrupt("return", _context2.sent);
279
+ return _context3.abrupt("return", _context3.sent);
257
280
  case 6:
258
- _context2.prev = 6;
259
- _context2.t0 = _context2["catch"](0);
260
- (_this$analyticsHelper5 = _this.analyticsHelper) === null || _this$analyticsHelper5 === void 0 || _this$analyticsHelper5.sendErrorEvent(_context2.t0, 'Error while returning ADF version of the final draft document');
261
- throw new GetFinalAcknowledgedStateError('Error while returning the final acknowledged state of the draft document', _context2.t0);
281
+ _context3.prev = 6;
282
+ _context3.t0 = _context3["catch"](0);
283
+ (_this$analyticsHelper5 = _this.analyticsHelper) === null || _this$analyticsHelper5 === void 0 || _this$analyticsHelper5.sendErrorEvent(_context3.t0, 'Error while returning ADF version of the final draft document');
284
+ throw new GetFinalAcknowledgedStateError('Error while returning the final acknowledged state of the draft document', _context3.t0);
262
285
  case 10:
263
286
  case "end":
264
- return _context2.stop();
287
+ return _context3.stop();
265
288
  }
266
- }, _callee2, null, [[0, 6]]);
289
+ }, _callee3, null, [[0, 6]]);
267
290
  })));
268
291
  _defineProperty(_this, "getUnconfirmedSteps", function () {
269
292
  return _this.documentService.getUnconfirmedSteps();
@@ -352,10 +375,10 @@ export var Provider = /*#__PURE__*/function (_Emitter) {
352
375
  */
353
376
  }, {
354
377
  key: "setup",
355
- value: function setup(_ref7) {
356
- var getState = _ref7.getState,
357
- editorApi = _ref7.editorApi,
358
- onSyncUpError = _ref7.onSyncUpError;
378
+ value: function setup(_ref8) {
379
+ var getState = _ref8.getState,
380
+ editorApi = _ref8.editorApi,
381
+ onSyncUpError = _ref8.onSyncUpError;
359
382
  this.checkForCookies();
360
383
  try {
361
384
  // Ignored via go/ees005
@@ -449,16 +472,29 @@ export var Provider = /*#__PURE__*/function (_Emitter) {
449
472
  }, {
450
473
  key: "send",
451
474
  value: function send(_tr, _oldState, newState) {
475
+ var _this2 = this;
452
476
  try {
453
477
  if (this.isViewOnly()) {
454
- var _this$analyticsHelper10;
455
478
  var error = {
456
479
  message: 'Attempted to send steps in view only mode',
457
480
  data: {
458
481
  code: INTERNAL_ERROR_CODE.VIEW_ONLY_STEPS_ERROR
459
482
  }
460
483
  };
461
- (_this$analyticsHelper10 = this.analyticsHelper) === null || _this$analyticsHelper10 === void 0 || _this$analyticsHelper10.sendErrorEvent(error, error.message);
484
+ if (fg('log_obfuscated_steps_for_view_only')) {
485
+ logObfuscatedSteps(_oldState, newState).then(function (attributes) {
486
+ var _this2$analyticsHelpe;
487
+ var stepAttributes = attributes instanceof CustomError ? {} : _objectSpread({}, attributes);
488
+ var stepsError = new CustomError(error.message, error, _objectSpread({}, stepAttributes));
489
+ (_this2$analyticsHelpe = _this2.analyticsHelper) === null || _this2$analyticsHelpe === void 0 || _this2$analyticsHelpe.sendErrorEvent(stepsError, stepsError.message);
490
+ }).catch(function (err) {
491
+ var _this2$analyticsHelpe2;
492
+ return (_this2$analyticsHelpe2 = _this2.analyticsHelper) === null || _this2$analyticsHelpe2 === void 0 ? void 0 : _this2$analyticsHelpe2.sendErrorEvent(err, err.message);
493
+ });
494
+ } else {
495
+ var _this$analyticsHelper10;
496
+ (_this$analyticsHelper10 = this.analyticsHelper) === null || _this$analyticsHelper10 === void 0 || _this$analyticsHelper10.sendErrorEvent(error, error.message);
497
+ }
462
498
  return;
463
499
  }
464
500
  // Don't send steps while the document is locked (eg. when restoring the document)
@@ -1,5 +1,5 @@
1
1
  export var name = "@atlaskit/collab-provider";
2
- export var version = "10.4.0";
2
+ export var version = "10.4.1";
3
3
  export var nextMajorVersion = function nextMajorVersion() {
4
4
  return [Number(version.split('.')[0]) + 1, 0, 0].join('.');
5
5
  };
@@ -27,6 +27,7 @@ export declare class DocumentService implements DocumentServiceInterface {
27
27
  private stepRejectCounter;
28
28
  private aggressiveCatchup;
29
29
  private catchUpOutofSync;
30
+ private hasRecovered;
30
31
  private clientId?;
31
32
  onErrorHandled: (error: InternalError) => void;
32
33
  /**
@@ -1,5 +1,5 @@
1
1
  import type { CantSyncUpErrorAttributes, DocumentUpdateErrorAttributes } from '../helpers/const';
2
- type ValidEventAttributeType = boolean | string | number;
2
+ type ValidEventAttributeType = boolean | string | number | object;
3
3
  export declare class CustomError extends Error {
4
4
  extraEventAttributes?: {
5
5
  [key: string]: ValidEventAttributeType;
@@ -1,8 +1,10 @@
1
1
  import { type ADFEntity } from '@atlaskit/adf-utils/types';
2
2
  import type { ProductInformation } from '../types';
3
3
  import type { Step as ProseMirrorStep } from '@atlaskit/editor-prosemirror/transform';
4
+ import type { EditorState } from '@atlaskit/editor-prosemirror/state';
4
5
  import type { StepJson } from '@atlaskit/editor-common/collab';
5
- import type { Node as ProseMirrorNode } from '@atlaskit/editor-prosemirror/model';
6
+ import { Node as ProseMirrorNode } from '@atlaskit/editor-prosemirror/model';
7
+ import { CustomError } from '../errors/custom-errors';
6
8
  export declare const createLogger: (prefix: string, color?: string) => (msg: string, data?: any) => void;
7
9
  export declare function sleep(ms: number): Promise<unknown>;
8
10
  export declare const isAIProviderID: (id: string) => boolean;
@@ -50,5 +52,11 @@ export declare const getObfuscatedSteps: (steps: StepJson[], endIndex?: number |
50
52
  traceId?: string | undefined;
51
53
  reqId?: string | undefined;
52
54
  schemaVersion?: string | undefined;
55
+ unconfirmedStepAfterRecovery?: boolean | undefined;
53
56
  } | undefined;
54
57
  }[];
58
+ export declare function logObfuscatedSteps(oldState: EditorState | null, newState: EditorState): Promise<CustomError | {
59
+ stepsFromOldState: string;
60
+ stepsFromNewState: string;
61
+ }>;
62
+ export declare function toObfuscatedSteps(steps: readonly ProseMirrorStep[]): Promise<string>;
@@ -1,4 +1,4 @@
1
1
  export { Provider } from './provider';
2
2
  export type { CollabEventDisconnectedData, Socket } from './types';
3
- export type { NewCollabSyncUpErrorAttributes, ResolvedEditorState, CollabMetadataPayload, CollabEventInitData, CollabInitPayload, CollabEventConnectionData, CollabConnectedPayload, CollabDisconnectedPayload, CollabDataPayload, CollabActivityData, CollabTelepointerPayload, CollabPresencePayload, CollabLocalStepsPayload, CollabPermissionEventPayload, CollabEventRemoteData, CollabEventPresenceData, CollabActivityJoinPayload, CollabActivityAckPayload, CollabEventConnectingData, CollabEventTelepointerData, CollabSendableSelection, CollabParticipant, CollabEvents, SyncUpErrorFunction, CollabEditProvider, ProviderError, ProviderParticipant, CollabEventLocalStepData, UserPermitType, } from '@atlaskit/editor-common/collab';
3
+ export type { NewCollabSyncUpErrorAttributes, ResolvedEditorState, CollabMetadataPayload, CollabEventInitData, CollabInitPayload, CollabEventConnectionData, CollabConnectedPayload, CollabDisconnectedPayload, CollabDataPayload, CollabActivityData, CollabTelepointerPayload, CollabPresencePayload, CollabLocalStepsPayload, CollabPermissionEventPayload, CollabEventRemoteData, CollabEventPresenceData, CollabActivityJoinPayload, CollabActivityAckPayload, CollabEventConnectingData, CollabEventTelepointerData, CollabSendableSelection, CollabParticipant, CollabEvents, SyncUpErrorFunction, CollabEditProvider, ProviderError, ProviderParticipant, CollabEventLocalStepData, UserPermitType, CollabNamespaceLockCheckPayload, } from '@atlaskit/editor-common/collab';
4
4
  export { PROVIDER_ERROR_CODE } from '@atlaskit/editor-common/collab';
@@ -5,7 +5,7 @@ import type AnalyticsHelper from '../analytics/analytics-helper';
5
5
  import type { InternalError } from '../errors/internal-errors';
6
6
  export declare let readyToCommit: boolean;
7
7
  export declare const RESET_READYTOCOMMIT_INTERVAL_MS = 5000;
8
- export declare const commitStepQueue: ({ broadcast, steps, version, userId, clientId, onStepsAdded, onErrorHandled, analyticsHelper, emit, __livePage, }: {
8
+ export declare const commitStepQueue: ({ broadcast, steps, version, userId, clientId, onStepsAdded, onErrorHandled, analyticsHelper, emit, __livePage, hasRecovered, }: {
9
9
  broadcast: <K extends keyof ChannelEvent>(type: K, data: Omit<ChannelEvent[K], 'timestamp'>, callback?: Function) => void;
10
10
  steps: readonly ProseMirrorStep[];
11
11
  version: number;
@@ -16,4 +16,5 @@ export declare const commitStepQueue: ({ broadcast, steps, version, userId, clie
16
16
  analyticsHelper?: AnalyticsHelper | undefined;
17
17
  emit: (evt: keyof CollabEvents, data: CollabCommitStatusEventPayload) => void;
18
18
  __livePage: boolean;
19
+ hasRecovered: boolean;
19
20
  }) => void;
@@ -27,6 +27,7 @@ export declare class DocumentService implements DocumentServiceInterface {
27
27
  private stepRejectCounter;
28
28
  private aggressiveCatchup;
29
29
  private catchUpOutofSync;
30
+ private hasRecovered;
30
31
  private clientId?;
31
32
  onErrorHandled: (error: InternalError) => void;
32
33
  /**
@@ -1,5 +1,5 @@
1
1
  import type { CantSyncUpErrorAttributes, DocumentUpdateErrorAttributes } from '../helpers/const';
2
- type ValidEventAttributeType = boolean | string | number;
2
+ type ValidEventAttributeType = boolean | string | number | object;
3
3
  export declare class CustomError extends Error {
4
4
  extraEventAttributes?: {
5
5
  [key: string]: ValidEventAttributeType;
@@ -1,8 +1,10 @@
1
1
  import { type ADFEntity } from '@atlaskit/adf-utils/types';
2
2
  import type { ProductInformation } from '../types';
3
3
  import type { Step as ProseMirrorStep } from '@atlaskit/editor-prosemirror/transform';
4
+ import type { EditorState } from '@atlaskit/editor-prosemirror/state';
4
5
  import type { StepJson } from '@atlaskit/editor-common/collab';
5
- import type { Node as ProseMirrorNode } from '@atlaskit/editor-prosemirror/model';
6
+ import { Node as ProseMirrorNode } from '@atlaskit/editor-prosemirror/model';
7
+ import { CustomError } from '../errors/custom-errors';
6
8
  export declare const createLogger: (prefix: string, color?: string) => (msg: string, data?: any) => void;
7
9
  export declare function sleep(ms: number): Promise<unknown>;
8
10
  export declare const isAIProviderID: (id: string) => boolean;
@@ -50,5 +52,11 @@ export declare const getObfuscatedSteps: (steps: StepJson[], endIndex?: number |
50
52
  traceId?: string | undefined;
51
53
  reqId?: string | undefined;
52
54
  schemaVersion?: string | undefined;
55
+ unconfirmedStepAfterRecovery?: boolean | undefined;
53
56
  } | undefined;
54
57
  }[];
58
+ export declare function logObfuscatedSteps(oldState: EditorState | null, newState: EditorState): Promise<CustomError | {
59
+ stepsFromOldState: string;
60
+ stepsFromNewState: string;
61
+ }>;
62
+ export declare function toObfuscatedSteps(steps: readonly ProseMirrorStep[]): Promise<string>;
@@ -1,4 +1,4 @@
1
1
  export { Provider } from './provider';
2
2
  export type { CollabEventDisconnectedData, Socket } from './types';
3
- export type { NewCollabSyncUpErrorAttributes, ResolvedEditorState, CollabMetadataPayload, CollabEventInitData, CollabInitPayload, CollabEventConnectionData, CollabConnectedPayload, CollabDisconnectedPayload, CollabDataPayload, CollabActivityData, CollabTelepointerPayload, CollabPresencePayload, CollabLocalStepsPayload, CollabPermissionEventPayload, CollabEventRemoteData, CollabEventPresenceData, CollabActivityJoinPayload, CollabActivityAckPayload, CollabEventConnectingData, CollabEventTelepointerData, CollabSendableSelection, CollabParticipant, CollabEvents, SyncUpErrorFunction, CollabEditProvider, ProviderError, ProviderParticipant, CollabEventLocalStepData, UserPermitType, } from '@atlaskit/editor-common/collab';
3
+ export type { NewCollabSyncUpErrorAttributes, ResolvedEditorState, CollabMetadataPayload, CollabEventInitData, CollabInitPayload, CollabEventConnectionData, CollabConnectedPayload, CollabDisconnectedPayload, CollabDataPayload, CollabActivityData, CollabTelepointerPayload, CollabPresencePayload, CollabLocalStepsPayload, CollabPermissionEventPayload, CollabEventRemoteData, CollabEventPresenceData, CollabActivityJoinPayload, CollabActivityAckPayload, CollabEventConnectingData, CollabEventTelepointerData, CollabSendableSelection, CollabParticipant, CollabEvents, SyncUpErrorFunction, CollabEditProvider, ProviderError, ProviderParticipant, CollabEventLocalStepData, UserPermitType, CollabNamespaceLockCheckPayload, } from '@atlaskit/editor-common/collab';
4
4
  export { PROVIDER_ERROR_CODE } from '@atlaskit/editor-common/collab';
@@ -5,7 +5,7 @@ import type AnalyticsHelper from '../analytics/analytics-helper';
5
5
  import type { InternalError } from '../errors/internal-errors';
6
6
  export declare let readyToCommit: boolean;
7
7
  export declare const RESET_READYTOCOMMIT_INTERVAL_MS = 5000;
8
- export declare const commitStepQueue: ({ broadcast, steps, version, userId, clientId, onStepsAdded, onErrorHandled, analyticsHelper, emit, __livePage, }: {
8
+ export declare const commitStepQueue: ({ broadcast, steps, version, userId, clientId, onStepsAdded, onErrorHandled, analyticsHelper, emit, __livePage, hasRecovered, }: {
9
9
  broadcast: <K extends keyof ChannelEvent>(type: K, data: Omit<ChannelEvent[K], 'timestamp'>, callback?: Function) => void;
10
10
  steps: readonly ProseMirrorStep[];
11
11
  version: number;
@@ -16,4 +16,5 @@ export declare const commitStepQueue: ({ broadcast, steps, version, userId, clie
16
16
  analyticsHelper?: AnalyticsHelper | undefined;
17
17
  emit: (evt: keyof CollabEvents, data: CollabCommitStatusEventPayload) => void;
18
18
  __livePage: boolean;
19
+ hasRecovered: boolean;
19
20
  }) => void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/collab-provider",
3
- "version": "10.4.0",
3
+ "version": "10.4.1",
4
4
  "description": "A provider for collaborative editing.",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -35,12 +35,13 @@
35
35
  "@atlaskit/adf-utils": "^19.17.0",
36
36
  "@atlaskit/analytics-gas-types": "^5.1.0",
37
37
  "@atlaskit/analytics-listeners": "^8.13.0",
38
- "@atlaskit/editor-common": "^99.2.0",
38
+ "@atlaskit/editor-common": "^99.5.0",
39
39
  "@atlaskit/editor-json-transformer": "^8.21.0",
40
40
  "@atlaskit/editor-prosemirror": "6.2.1",
41
41
  "@atlaskit/feature-gate-js-client": "^4.22.0",
42
42
  "@atlaskit/platform-feature-flags": "^0.3.0",
43
43
  "@atlaskit/prosemirror-collab": "^0.11.0",
44
+ "@atlaskit/react-ufo": "^2.12.0",
44
45
  "@atlaskit/ufo": "^0.3.0",
45
46
  "@atlaskit/util-service-support": "^6.2.0",
46
47
  "@babel/runtime": "^7.0.0",
@@ -80,6 +81,15 @@
80
81
  },
81
82
  "restore_localstep_fallback_reconcile": {
82
83
  "type": "boolean"
84
+ },
85
+ "tag_unconfirmed_steps_after_recovery": {
86
+ "type": "boolean"
87
+ },
88
+ "platform_collab_provider_tracingheaders": {
89
+ "type": "boolean"
90
+ },
91
+ "log_obfuscated_steps_for_view_only": {
92
+ "type": "boolean"
83
93
  }
84
94
  }
85
95
  }