@atlaskit/collab-provider 10.3.4 → 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.
- package/CHANGELOG.md +20 -0
- package/afm-cc/tsconfig.json +6 -0
- package/afm-jira/tsconfig.json +6 -0
- package/dist/cjs/analytics/analytics-helper.js +0 -2
- package/dist/cjs/api/api.js +26 -14
- package/dist/cjs/channel.js +0 -2
- package/dist/cjs/document/catchupv2.js +24 -10
- package/dist/cjs/document/document-service.js +35 -33
- package/dist/cjs/helpers/const.js +2 -1
- package/dist/cjs/helpers/utils.js +216 -2
- package/dist/cjs/participants/participants-service.js +0 -2
- package/dist/cjs/provider/commit-step.js +12 -1
- package/dist/cjs/provider/index.js +69 -33
- package/dist/cjs/version-wrapper.js +1 -1
- package/dist/es2019/analytics/analytics-helper.js +0 -2
- package/dist/es2019/api/api.js +13 -1
- package/dist/es2019/channel.js +0 -2
- package/dist/es2019/document/catchupv2.js +20 -6
- package/dist/es2019/document/document-service.js +8 -6
- package/dist/es2019/helpers/const.js +2 -1
- package/dist/es2019/helpers/utils.js +159 -1
- package/dist/es2019/participants/participants-service.js +0 -2
- package/dist/es2019/provider/commit-step.js +13 -1
- package/dist/es2019/provider/index.js +40 -17
- package/dist/es2019/version-wrapper.js +1 -1
- package/dist/esm/analytics/analytics-helper.js +0 -2
- package/dist/esm/api/api.js +26 -14
- package/dist/esm/channel.js +0 -2
- package/dist/esm/document/catchupv2.js +25 -11
- package/dist/esm/document/document-service.js +35 -33
- package/dist/esm/helpers/const.js +2 -1
- package/dist/esm/helpers/utils.js +212 -1
- package/dist/esm/participants/participants-service.js +0 -2
- package/dist/esm/provider/commit-step.js +12 -1
- package/dist/esm/provider/index.js +71 -35
- package/dist/esm/version-wrapper.js +1 -1
- package/dist/types/document/document-service.d.ts +1 -0
- package/dist/types/errors/custom-errors.d.ts +1 -1
- package/dist/types/helpers/const.d.ts +16 -2
- package/dist/types/helpers/utils.d.ts +49 -0
- package/dist/types/index.d.ts +1 -1
- package/dist/types/provider/commit-step.d.ts +2 -1
- package/dist/types/types.d.ts +3 -2
- package/dist/types-ts4.5/document/document-service.d.ts +1 -0
- package/dist/types-ts4.5/errors/custom-errors.d.ts +1 -1
- package/dist/types-ts4.5/helpers/const.d.ts +16 -2
- package/dist/types-ts4.5/helpers/utils.d.ts +49 -0
- package/dist/types-ts4.5/index.d.ts +1 -1
- package/dist/types-ts4.5/provider/commit-step.d.ts +2 -1
- package/dist/types-ts4.5/types.d.ts +3 -2
- package/package.json +16 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
# @atlaskit/collab-provider
|
|
2
2
|
|
|
3
|
+
## 10.4.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#104569](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/104569)
|
|
8
|
+
[`b79a89c03faf9`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/b79a89c03faf9) -
|
|
9
|
+
log obfuscated steps for transactions in view only
|
|
10
|
+
|
|
11
|
+
## 10.4.0
|
|
12
|
+
|
|
13
|
+
### Minor Changes
|
|
14
|
+
|
|
15
|
+
- [#102499](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/102499)
|
|
16
|
+
[`c1bfe8b68a35e`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/c1bfe8b68a35e) -
|
|
17
|
+
log obfuscated steps in collab provider when catchup out of sync
|
|
18
|
+
|
|
19
|
+
### Patch Changes
|
|
20
|
+
|
|
21
|
+
- Updated dependencies
|
|
22
|
+
|
|
3
23
|
## 10.3.4
|
|
4
24
|
|
|
5
25
|
### Patch Changes
|
package/afm-cc/tsconfig.json
CHANGED
|
@@ -17,6 +17,9 @@
|
|
|
17
17
|
"../src/**/test.*"
|
|
18
18
|
],
|
|
19
19
|
"references": [
|
|
20
|
+
{
|
|
21
|
+
"path": "../../adf-utils/afm-cc/tsconfig.json"
|
|
22
|
+
},
|
|
20
23
|
{
|
|
21
24
|
"path": "../../../analytics/analytics-gas-types/afm-cc/tsconfig.json"
|
|
22
25
|
},
|
|
@@ -38,6 +41,9 @@
|
|
|
38
41
|
{
|
|
39
42
|
"path": "../../prosemirror-collab/afm-cc/tsconfig.json"
|
|
40
43
|
},
|
|
44
|
+
{
|
|
45
|
+
"path": "../../../react-ufo/atlaskit/afm-cc/tsconfig.json"
|
|
46
|
+
},
|
|
41
47
|
{
|
|
42
48
|
"path": "../../../data/ufo-external/afm-cc/tsconfig.json"
|
|
43
49
|
},
|
package/afm-jira/tsconfig.json
CHANGED
|
@@ -17,6 +17,9 @@
|
|
|
17
17
|
"../src/**/test.*"
|
|
18
18
|
],
|
|
19
19
|
"references": [
|
|
20
|
+
{
|
|
21
|
+
"path": "../../adf-utils/afm-jira/tsconfig.json"
|
|
22
|
+
},
|
|
20
23
|
{
|
|
21
24
|
"path": "../../../analytics/analytics-gas-types/afm-jira/tsconfig.json"
|
|
22
25
|
},
|
|
@@ -38,6 +41,9 @@
|
|
|
38
41
|
{
|
|
39
42
|
"path": "../../prosemirror-collab/afm-jira/tsconfig.json"
|
|
40
43
|
},
|
|
44
|
+
{
|
|
45
|
+
"path": "../../../react-ufo/atlaskit/afm-jira/tsconfig.json"
|
|
46
|
+
},
|
|
41
47
|
{
|
|
42
48
|
"path": "../../../data/ufo-external/afm-jira/tsconfig.json"
|
|
43
49
|
},
|
|
@@ -71,8 +71,6 @@ var triggerAnalyticsEvent = function triggerAnalyticsEvent(analyticsEvent, analy
|
|
|
71
71
|
}
|
|
72
72
|
};
|
|
73
73
|
var AnalyticsHelper = exports.default = /*#__PURE__*/function () {
|
|
74
|
-
// Ignored via go/ees005
|
|
75
|
-
// eslint-disable-next-line @typescript-eslint/max-params
|
|
76
74
|
function AnalyticsHelper(documentAri, subProduct, analyticsClient, getAnalyticsClient) {
|
|
77
75
|
(0, _classCallCheck2.default)(this, AnalyticsHelper);
|
|
78
76
|
this.documentAri = documentAri;
|
package/dist/cjs/api/api.js
CHANGED
|
@@ -15,6 +15,9 @@ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/ge
|
|
|
15
15
|
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
16
16
|
var _wrapNativeSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/wrapNativeSuper"));
|
|
17
17
|
var _utils = require("../helpers/utils");
|
|
18
|
+
var _experienceTraceIdContext = require("@atlaskit/react-ufo/experience-trace-id-context");
|
|
19
|
+
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
20
|
+
var _featureFlagsAccessed = require("@atlaskit/react-ufo/feature-flags-accessed");
|
|
18
21
|
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; }
|
|
19
22
|
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) { (0, _defineProperty2.default)(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; }
|
|
20
23
|
function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); }
|
|
@@ -46,7 +49,7 @@ var Api = exports.Api = /*#__PURE__*/function () {
|
|
|
46
49
|
(0, _classCallCheck2.default)(this, Api);
|
|
47
50
|
(0, _defineProperty2.default)(this, "submitComment", /*#__PURE__*/function () {
|
|
48
51
|
var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(steps, version) {
|
|
49
|
-
var reqBody, url, fetchOptions;
|
|
52
|
+
var reqBody, url, tracingHeaderEnabled, tracingHeaders, fetchOptions;
|
|
50
53
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
51
54
|
while (1) switch (_context.prev = _context.next) {
|
|
52
55
|
case 0:
|
|
@@ -57,25 +60,33 @@ var Api = exports.Api = /*#__PURE__*/function () {
|
|
|
57
60
|
});
|
|
58
61
|
url = "".concat(_this2.config.url, "/document/").concat(encodeURIComponent(_this2.config.documentAri), "/comment");
|
|
59
62
|
logger("Request url: ", url);
|
|
63
|
+
|
|
64
|
+
//Get tracing headers from UFO
|
|
65
|
+
tracingHeaderEnabled = (0, _platformFeatureFlags.fg)('platform_collab_provider_tracingheaders');
|
|
66
|
+
(0, _featureFlagsAccessed.addFeatureFlagAccessed)('platform_collab_provider_tracingheaders', tracingHeaderEnabled);
|
|
67
|
+
tracingHeaders = {};
|
|
68
|
+
if (tracingHeaderEnabled) {
|
|
69
|
+
tracingHeaders = (0, _experienceTraceIdContext.getActiveTraceHttpRequestHeaders)(url);
|
|
70
|
+
}
|
|
60
71
|
_context.t0 = _objectSpread;
|
|
61
72
|
_context.t1 = _objectSpread;
|
|
62
73
|
_context.t2 = {};
|
|
63
74
|
if (!_this2.config.permissionTokenRefresh) {
|
|
64
|
-
_context.next =
|
|
75
|
+
_context.next = 17;
|
|
65
76
|
break;
|
|
66
77
|
}
|
|
67
|
-
_context.next =
|
|
78
|
+
_context.next = 13;
|
|
68
79
|
return _this2.channel.getChannelToken();
|
|
69
|
-
case
|
|
80
|
+
case 13:
|
|
70
81
|
_context.t4 = _context.sent;
|
|
71
82
|
_context.t3 = {
|
|
72
83
|
'x-token': _context.t4
|
|
73
84
|
};
|
|
74
|
-
_context.next =
|
|
85
|
+
_context.next = 18;
|
|
75
86
|
break;
|
|
76
|
-
case
|
|
87
|
+
case 17:
|
|
77
88
|
_context.t3 = {};
|
|
78
|
-
case
|
|
89
|
+
case 18:
|
|
79
90
|
_context.t5 = _context.t3;
|
|
80
91
|
_context.t6 = (0, _context.t1)(_context.t2, _context.t5);
|
|
81
92
|
_context.t7 = {};
|
|
@@ -84,19 +95,20 @@ var Api = exports.Api = /*#__PURE__*/function () {
|
|
|
84
95
|
'x-subproduct': (0, _utils.getSubProduct)(_this2.config.productInfo),
|
|
85
96
|
'Content-Type': 'application/json'
|
|
86
97
|
};
|
|
87
|
-
_context.t9 =
|
|
88
|
-
_context.t10 =
|
|
98
|
+
_context.t9 = tracingHeaders;
|
|
99
|
+
_context.t10 = (0, _context.t0)(_context.t6, _context.t7, _context.t8, _context.t9);
|
|
100
|
+
_context.t11 = reqBody;
|
|
89
101
|
fetchOptions = {
|
|
90
102
|
credentials: 'include',
|
|
91
|
-
headers: _context.
|
|
103
|
+
headers: _context.t10,
|
|
92
104
|
method: 'POST',
|
|
93
|
-
body: _context.
|
|
105
|
+
body: _context.t11
|
|
94
106
|
};
|
|
95
|
-
_context.next =
|
|
107
|
+
_context.next = 28;
|
|
96
108
|
return fetch(url, fetchOptions);
|
|
97
|
-
case
|
|
109
|
+
case 28:
|
|
98
110
|
return _context.abrupt("return", _context.sent);
|
|
99
|
-
case
|
|
111
|
+
case 29:
|
|
100
112
|
case "end":
|
|
101
113
|
return _context.stop();
|
|
102
114
|
}
|
package/dist/cjs/channel.js
CHANGED
|
@@ -235,8 +235,6 @@ var Channel = exports.Channel = /*#__PURE__*/function (_Emitter) {
|
|
|
235
235
|
_this.emit('steps:added', data);
|
|
236
236
|
}
|
|
237
237
|
});
|
|
238
|
-
// Ignored via go/ees005
|
|
239
|
-
// eslint-disable-next-line @typescript-eslint/max-params
|
|
240
238
|
(0, _defineProperty2.default)(_this, "fetchCatchupv2", /*#__PURE__*/function () {
|
|
241
239
|
var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(fromVersion, clientId, catchUpOutofSync, reason) {
|
|
242
240
|
var _yield$utils$requestS, steps, metadata, errorNotFound, errorCatchupv2;
|
|
@@ -7,11 +7,13 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports.isOutOfSync = exports.catchupv2 = void 0;
|
|
8
8
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
9
9
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
10
|
+
var _const = require("../helpers/const");
|
|
10
11
|
var _utils = require("../helpers/utils");
|
|
12
|
+
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
11
13
|
var logger = (0, _utils.createLogger)('Catchupv2', 'red');
|
|
12
14
|
var catchupv2 = exports.catchupv2 = /*#__PURE__*/function () {
|
|
13
15
|
var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(opt) {
|
|
14
|
-
var steps, metadata, fromVersion, _yield$opt$fetchCatch, _opt$analyticsHelper, _opt$onCatchupComplet, version, stepsPayload, _opt$analyticsHelper2;
|
|
16
|
+
var steps, metadata, fromVersion, _yield$opt$fetchCatch, _opt$analyticsHelper, _opt$onCatchupComplet, version, stepsPayload, clientOutOfSync, _opt$analyticsHelper2;
|
|
15
17
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
16
18
|
while (1) switch (_context.prev = _context.next) {
|
|
17
19
|
case 0:
|
|
@@ -53,23 +55,38 @@ var catchupv2 = exports.catchupv2 = /*#__PURE__*/function () {
|
|
|
53
55
|
};
|
|
54
56
|
opt.onStepsAdded(stepsPayload);
|
|
55
57
|
opt.updateMetadata(metadata);
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
58
|
+
clientOutOfSync = Boolean(opt.clientId && isOutOfSync(fromVersion, opt.getCurrentPmVersion(), steps, opt.clientId));
|
|
59
|
+
if (clientOutOfSync) {
|
|
60
|
+
logObfuscatedSteps(steps, opt);
|
|
61
|
+
}
|
|
62
|
+
return _context.abrupt("return", clientOutOfSync);
|
|
63
|
+
case 28:
|
|
64
|
+
_context.prev = 28;
|
|
59
65
|
_context.t1 = _context["catch"](14);
|
|
60
66
|
(_opt$analyticsHelper2 = opt.analyticsHelper) === null || _opt$analyticsHelper2 === void 0 || _opt$analyticsHelper2.sendErrorEvent(_context.t1, 'Failed to apply catchupv2 result in the editor');
|
|
61
67
|
logger("Apply catchupv2 steps failed:", _context.t1.message);
|
|
62
68
|
throw _context.t1;
|
|
63
|
-
case
|
|
69
|
+
case 33:
|
|
64
70
|
case "end":
|
|
65
71
|
return _context.stop();
|
|
66
72
|
}
|
|
67
|
-
}, _callee, null, [[1, 9], [14,
|
|
73
|
+
}, _callee, null, [[1, 9], [14, 28]]);
|
|
68
74
|
}));
|
|
69
75
|
return function catchupv2(_x) {
|
|
70
76
|
return _ref.apply(this, arguments);
|
|
71
77
|
};
|
|
72
78
|
}();
|
|
79
|
+
var logObfuscatedSteps = function logObfuscatedSteps(steps, opt) {
|
|
80
|
+
if ((0, _platformFeatureFlags.fg)('platform_editor_log_obfuscated_steps')) {
|
|
81
|
+
var _opt$getState, _opt$analyticsHelper3;
|
|
82
|
+
var state = (_opt$getState = opt.getState) === null || _opt$getState === void 0 ? void 0 : _opt$getState.call(opt);
|
|
83
|
+
(_opt$analyticsHelper3 = opt.analyticsHelper) === null || _opt$analyticsHelper3 === void 0 || _opt$analyticsHelper3.sendActionEvent(_const.EVENT_ACTION.OUT_OF_SYNC, _const.EVENT_STATUS.FAILURE, {
|
|
84
|
+
obfuscatedSteps: (0, _utils.getObfuscatedSteps)(steps),
|
|
85
|
+
obfuscatedDoc: state ? (0, _utils.getDocAdfWithObfuscation)(state.doc) : null,
|
|
86
|
+
catchupReason: opt.reason
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
};
|
|
73
90
|
|
|
74
91
|
/**
|
|
75
92
|
* Checks if we're out of sync with the backend because catchup failed to apply, and thus the doc should be reset.
|
|
@@ -79,10 +96,7 @@ var catchupv2 = exports.catchupv2 = /*#__PURE__*/function () {
|
|
|
79
96
|
* @param clientId The ID of the currently connected session (one user can have multiple if theu have multiple tabs open)
|
|
80
97
|
* @returns True if we're out of sync, false if not.
|
|
81
98
|
*/
|
|
82
|
-
var isOutOfSync = exports.isOutOfSync = function isOutOfSync(fromVersion, currentVersion, steps, clientId
|
|
83
|
-
// Ignored via go/ees005
|
|
84
|
-
// eslint-disable-next-line @typescript-eslint/max-params
|
|
85
|
-
) {
|
|
99
|
+
var isOutOfSync = exports.isOutOfSync = function isOutOfSync(fromVersion, currentVersion, steps, clientId) {
|
|
86
100
|
return (
|
|
87
101
|
// If version number hasn't increased, and steps are not from our client, we're out of sync
|
|
88
102
|
Boolean(fromVersion >= currentVersion && steps.some(function (step) {
|
|
@@ -47,8 +47,6 @@ var DocumentService = exports.DocumentService = /*#__PURE__*/function () {
|
|
|
47
47
|
* @param enableErrorOnFailedDocumentApply - Enable failed document update exceptions.
|
|
48
48
|
* @param getConnected - if the channel is currently connected
|
|
49
49
|
*/
|
|
50
|
-
// Ignored via go/ees005
|
|
51
|
-
// eslint-disable-next-line @typescript-eslint/max-params
|
|
52
50
|
function DocumentService(participantsService, analyticsHelper, fetchCatchupv2, fetchReconcile,
|
|
53
51
|
// Ignored via go/ees005
|
|
54
52
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -64,6 +62,7 @@ var DocumentService = exports.DocumentService = /*#__PURE__*/function () {
|
|
|
64
62
|
(0, _defineProperty2.default)(this, "stepRejectCounter", 0);
|
|
65
63
|
(0, _defineProperty2.default)(this, "aggressiveCatchup", false);
|
|
66
64
|
(0, _defineProperty2.default)(this, "catchUpOutofSync", false);
|
|
65
|
+
(0, _defineProperty2.default)(this, "hasRecovered", false);
|
|
67
66
|
/**
|
|
68
67
|
* To prevent calling catchup to often, use lodash throttle to reduce the frequency
|
|
69
68
|
* @param reason - optional reason to attach.
|
|
@@ -122,7 +121,8 @@ var DocumentService = exports.DocumentService = /*#__PURE__*/function () {
|
|
|
122
121
|
remoteStepsLength: (_steps$length = steps === null || steps === void 0 ? void 0 : steps.length) !== null && _steps$length !== void 0 ? _steps$length : 0
|
|
123
122
|
}));
|
|
124
123
|
}
|
|
125
|
-
}
|
|
124
|
+
},
|
|
125
|
+
getState: _this.getState
|
|
126
126
|
});
|
|
127
127
|
case 11:
|
|
128
128
|
_this.catchUpOutofSync = _context.sent;
|
|
@@ -314,21 +314,24 @@ var DocumentService = exports.DocumentService = /*#__PURE__*/function () {
|
|
|
314
314
|
while (1) switch (_context3.prev = _context3.next) {
|
|
315
315
|
case 0:
|
|
316
316
|
doc = _ref6.doc, version = _ref6.version, metadata = _ref6.metadata, targetClientId = _ref6.targetClientId;
|
|
317
|
+
if (!targetClientId) {
|
|
318
|
+
_this.hasRecovered = true;
|
|
319
|
+
}
|
|
317
320
|
if (!(targetClientId && _this.clientId !== targetClientId)) {
|
|
318
|
-
_context3.next =
|
|
321
|
+
_context3.next = 4;
|
|
319
322
|
break;
|
|
320
323
|
}
|
|
321
324
|
return _context3.abrupt("return");
|
|
322
|
-
case
|
|
325
|
+
case 4:
|
|
323
326
|
// We preserve these as they will be lost apon this.updateDocument. This is because we are using document recovery.
|
|
324
327
|
// We can then reconcile the document with the preserved state.
|
|
325
328
|
unconfirmedSteps = _this.getUnconfirmedSteps();
|
|
326
|
-
_context3.next =
|
|
329
|
+
_context3.next = 7;
|
|
327
330
|
return _this.getCurrentState();
|
|
328
|
-
case
|
|
331
|
+
case 7:
|
|
329
332
|
currentState = _context3.sent;
|
|
330
333
|
useReconcile = Boolean((unconfirmedSteps === null || unconfirmedSteps === void 0 ? void 0 : unconfirmedSteps.length) && currentState && !targetClientId);
|
|
331
|
-
_context3.prev =
|
|
334
|
+
_context3.prev = 9;
|
|
332
335
|
// Reset the editor,
|
|
333
336
|
// - Replace the document, keep in sync with the server
|
|
334
337
|
// - Replace the version number, so editor is in sync with NCS server and can commit new changes.
|
|
@@ -343,10 +346,10 @@ var DocumentService = exports.DocumentService = /*#__PURE__*/function () {
|
|
|
343
346
|
});
|
|
344
347
|
_this.metadataService.updateMetadata(metadata);
|
|
345
348
|
if (!(0, _platformFeatureFlags.fg)('restore_localstep_fallback_reconcile')) {
|
|
346
|
-
_context3.next =
|
|
349
|
+
_context3.next = 26;
|
|
347
350
|
break;
|
|
348
351
|
}
|
|
349
|
-
_context3.prev =
|
|
352
|
+
_context3.prev = 13;
|
|
350
353
|
(_this$analyticsHelper13 = _this.analyticsHelper) === null || _this$analyticsHelper13 === void 0 || _this$analyticsHelper13.sendActionEvent(_const.EVENT_ACTION.REINITIALISE_DOCUMENT, _const.EVENT_STATUS.INFO, {
|
|
351
354
|
numUnconfirmedSteps: unconfirmedSteps === null || unconfirmedSteps === void 0 ? void 0 : unconfirmedSteps.length,
|
|
352
355
|
hasTitle: !!(metadata !== null && metadata !== void 0 && metadata.title),
|
|
@@ -357,35 +360,35 @@ var DocumentService = exports.DocumentService = /*#__PURE__*/function () {
|
|
|
357
360
|
if (unconfirmedSteps !== null && unconfirmedSteps !== void 0 && unconfirmedSteps.length) {
|
|
358
361
|
_this.applyLocalSteps(unconfirmedSteps);
|
|
359
362
|
}
|
|
360
|
-
_context3.next =
|
|
363
|
+
_context3.next = 24;
|
|
361
364
|
break;
|
|
362
|
-
case
|
|
363
|
-
_context3.prev =
|
|
364
|
-
_context3.t0 = _context3["catch"](
|
|
365
|
+
case 18:
|
|
366
|
+
_context3.prev = 18;
|
|
367
|
+
_context3.t0 = _context3["catch"](13);
|
|
365
368
|
(_this$analyticsHelper14 = _this.analyticsHelper) === null || _this$analyticsHelper14 === void 0 || _this$analyticsHelper14.sendErrorEvent(_context3.t0, "Error while onRestore with applyLocalSteps. Will fallback to fetchReconcile");
|
|
366
369
|
useReconcile = true;
|
|
367
|
-
_context3.next =
|
|
370
|
+
_context3.next = 24;
|
|
368
371
|
return _this.fetchReconcile(JSON.stringify(currentState.content), 'fe-restore');
|
|
369
|
-
case
|
|
370
|
-
_context3.next =
|
|
372
|
+
case 24:
|
|
373
|
+
_context3.next = 32;
|
|
371
374
|
break;
|
|
372
|
-
case
|
|
375
|
+
case 26:
|
|
373
376
|
if (!(useReconcile && currentState)) {
|
|
374
|
-
_context3.next =
|
|
377
|
+
_context3.next = 31;
|
|
375
378
|
break;
|
|
376
379
|
}
|
|
377
|
-
_context3.next =
|
|
380
|
+
_context3.next = 29;
|
|
378
381
|
return _this.fetchReconcile(JSON.stringify(currentState.content), 'fe-restore');
|
|
379
|
-
case
|
|
380
|
-
_context3.next =
|
|
382
|
+
case 29:
|
|
383
|
+
_context3.next = 32;
|
|
381
384
|
break;
|
|
382
|
-
case
|
|
385
|
+
case 31:
|
|
383
386
|
if (unconfirmedSteps !== null && unconfirmedSteps !== void 0 && unconfirmedSteps.length) {
|
|
384
387
|
// we don't want to use reconcile for restore triggered by catchup client out of sync (when targetClientId is provided)
|
|
385
388
|
// as this results in all changes made while the client was out of sync being lost
|
|
386
389
|
_this.applyLocalSteps(unconfirmedSteps);
|
|
387
390
|
}
|
|
388
|
-
case
|
|
391
|
+
case 32:
|
|
389
392
|
(_this$analyticsHelper15 = _this.analyticsHelper) === null || _this$analyticsHelper15 === void 0 || _this$analyticsHelper15.sendActionEvent(_const.EVENT_ACTION.REINITIALISE_DOCUMENT, _const.EVENT_STATUS.SUCCESS, {
|
|
390
393
|
numUnconfirmedSteps: unconfirmedSteps === null || unconfirmedSteps === void 0 ? void 0 : unconfirmedSteps.length,
|
|
391
394
|
hasTitle: !!(metadata !== null && metadata !== void 0 && metadata.title),
|
|
@@ -394,11 +397,11 @@ var DocumentService = exports.DocumentService = /*#__PURE__*/function () {
|
|
|
394
397
|
targetClientId: targetClientId,
|
|
395
398
|
triggeredByCatchup: targetClientId ? true : false
|
|
396
399
|
});
|
|
397
|
-
_context3.next =
|
|
400
|
+
_context3.next = 40;
|
|
398
401
|
break;
|
|
399
|
-
case
|
|
400
|
-
_context3.prev =
|
|
401
|
-
_context3.t1 = _context3["catch"](
|
|
402
|
+
case 35:
|
|
403
|
+
_context3.prev = 35;
|
|
404
|
+
_context3.t1 = _context3["catch"](9);
|
|
402
405
|
(_this$analyticsHelper16 = _this.analyticsHelper) === null || _this$analyticsHelper16 === void 0 || _this$analyticsHelper16.sendActionEvent(_const.EVENT_ACTION.REINITIALISE_DOCUMENT, _const.EVENT_STATUS.FAILURE, {
|
|
403
406
|
numUnconfirmedSteps: unconfirmedSteps === null || unconfirmedSteps === void 0 ? void 0 : unconfirmedSteps.length,
|
|
404
407
|
useReconcile: useReconcile,
|
|
@@ -415,11 +418,11 @@ var DocumentService = exports.DocumentService = /*#__PURE__*/function () {
|
|
|
415
418
|
code: _internalErrors.INTERNAL_ERROR_CODE.DOCUMENT_RESTORE_ERROR
|
|
416
419
|
}
|
|
417
420
|
});
|
|
418
|
-
case
|
|
421
|
+
case 40:
|
|
419
422
|
case "end":
|
|
420
423
|
return _context3.stop();
|
|
421
424
|
}
|
|
422
|
-
}, _callee3, null, [[
|
|
425
|
+
}, _callee3, null, [[9, 35], [13, 18]]);
|
|
423
426
|
}));
|
|
424
427
|
return function (_x3) {
|
|
425
428
|
return _ref7.apply(this, arguments);
|
|
@@ -830,8 +833,6 @@ var DocumentService = exports.DocumentService = /*#__PURE__*/function () {
|
|
|
830
833
|
* Send steps from transaction to other participants
|
|
831
834
|
* It needs the superfluous arguments because we keep the interface of the send API the same as the Synchrony plugin
|
|
832
835
|
*/
|
|
833
|
-
// Ignored via go/ees005
|
|
834
|
-
// eslint-disable-next-line @typescript-eslint/max-params
|
|
835
836
|
function send(_tr, _oldState, newState, sendAnalyticsEvent) {
|
|
836
837
|
var unconfirmedStepsData = (0, _prosemirrorCollab.sendableSteps)(newState);
|
|
837
838
|
var version = this.getVersionFromCollabState(newState, 'collab-provider: send');
|
|
@@ -889,7 +890,8 @@ var DocumentService = exports.DocumentService = /*#__PURE__*/function () {
|
|
|
889
890
|
onErrorHandled: this.onErrorHandled,
|
|
890
891
|
analyticsHelper: this.analyticsHelper,
|
|
891
892
|
emit: this.providerEmitCallback,
|
|
892
|
-
__livePage: this.options.__livePage
|
|
893
|
+
__livePage: this.options.__livePage,
|
|
894
|
+
hasRecovered: this.hasRecovered
|
|
893
895
|
});
|
|
894
896
|
}
|
|
895
897
|
}]);
|
|
@@ -25,8 +25,9 @@ var EVENT_ACTION = exports.EVENT_ACTION = /*#__PURE__*/function (EVENT_ACTION) {
|
|
|
25
25
|
EVENT_ACTION["RECONNECTION"] = "providerReconnection";
|
|
26
26
|
EVENT_ACTION["PROVIDER_SETUP"] = "providerSetup";
|
|
27
27
|
EVENT_ACTION["HAS_UNCONFIRMED_STEPS"] = "hasUnconfirmedSteps";
|
|
28
|
+
EVENT_ACTION["OUT_OF_SYNC"] = "outOfSync";
|
|
28
29
|
return EVENT_ACTION;
|
|
29
|
-
}({}); // https://data-portal.internal.atlassian.com/analytics/registry/
|
|
30
|
+
}({}); // https://data-portal.internal.atlassian.com/analytics/registry/74993
|
|
30
31
|
var EVENT_STATUS = exports.EVENT_STATUS = /*#__PURE__*/function (EVENT_STATUS) {
|
|
31
32
|
EVENT_STATUS["SUCCESS"] = "SUCCESS";
|
|
32
33
|
EVENT_STATUS["FAILURE"] = "FAILURE";
|
|
@@ -1,10 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
3
4
|
Object.defineProperty(exports, "__esModule", {
|
|
4
5
|
value: true
|
|
5
6
|
});
|
|
6
|
-
exports.isAIProviderID = exports.getSubProduct = exports.getStepUGCFreeDetails = exports.getProduct = exports.createLogger = void 0;
|
|
7
|
+
exports.isAIProviderID = exports.getSubProduct = exports.getStepsAdfWithObfuscation = exports.getStepUGCFreeDetails = exports.getStepTypes = exports.getStepPositions = exports.getProduct = exports.getObfuscatedSteps = exports.getDocAdfWithObfuscation = exports.createLogger = void 0;
|
|
8
|
+
exports.logObfuscatedSteps = logObfuscatedSteps;
|
|
7
9
|
exports.sleep = sleep;
|
|
10
|
+
exports.toObfuscatedSteps = toObfuscatedSteps;
|
|
11
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
12
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
13
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
14
|
+
var _scrub = require("@atlaskit/adf-utils/scrub");
|
|
15
|
+
var _prosemirrorCollab = require("@atlaskit/prosemirror-collab");
|
|
16
|
+
var _customErrors = require("../errors/custom-errors");
|
|
17
|
+
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; }
|
|
18
|
+
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) { (0, _defineProperty2.default)(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; }
|
|
8
19
|
var createLogger = exports.createLogger = function createLogger(prefix) {
|
|
9
20
|
var color = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'blue';
|
|
10
21
|
return (
|
|
@@ -64,4 +75,207 @@ var getStepUGCFreeDetails = exports.getStepUGCFreeDetails = function getStepUGCF
|
|
|
64
75
|
contentTypes: contentTypes,
|
|
65
76
|
stepSizeInBytes: Buffer.byteLength(JSON.stringify(step))
|
|
66
77
|
};
|
|
67
|
-
};
|
|
78
|
+
};
|
|
79
|
+
var stepWithNextDocument = function stepWithNextDocument(stepJson) {
|
|
80
|
+
return stepJson.stepType === 'override-document' && 'nextDocument' in stepJson;
|
|
81
|
+
};
|
|
82
|
+
var stepWithMark = function stepWithMark(stepJson) {
|
|
83
|
+
return stepJson.stepType === 'addMark' || stepJson.stepType === 'addNodeMark';
|
|
84
|
+
};
|
|
85
|
+
var stepWithAttrs = function stepWithAttrs(stepJson) {
|
|
86
|
+
return stepJson.stepType === 'setAttrs' && 'attrs' in stepJson;
|
|
87
|
+
};
|
|
88
|
+
var stepWithBatchAttrs = function stepWithBatchAttrs(stepJson) {
|
|
89
|
+
return stepJson.stepType === 'batchAttrs' && 'data' in stepJson;
|
|
90
|
+
};
|
|
91
|
+
var stepWithFromTo = function stepWithFromTo(stepJson) {
|
|
92
|
+
return 'from' in stepJson && typeof stepJson.from === 'number' && 'to' in stepJson && typeof stepJson.to === 'number';
|
|
93
|
+
};
|
|
94
|
+
var stepWithGapFromTo = function stepWithGapFromTo(stepJson) {
|
|
95
|
+
return 'gapFrom' in stepJson && typeof stepJson.gapFrom === 'number' && 'gapTo' in stepJson && typeof stepJson.gapTo === 'number';
|
|
96
|
+
};
|
|
97
|
+
var stepWithInsert = function stepWithInsert(stepJson) {
|
|
98
|
+
return 'insert' in stepJson && typeof stepJson.insert === 'number';
|
|
99
|
+
};
|
|
100
|
+
var stepWithPos = function stepWithPos(stepJson) {
|
|
101
|
+
return 'pos' in stepJson && typeof stepJson.pos === 'number';
|
|
102
|
+
};
|
|
103
|
+
var stepWithSlice = function stepWithSlice(stepJson) {
|
|
104
|
+
var _stepJson$slice3;
|
|
105
|
+
return 'slice' in stepJson && Array.isArray((_stepJson$slice3 = stepJson.slice) === null || _stepJson$slice3 === void 0 ? void 0 : _stepJson$slice3.content);
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
// Get as step info which is known not to contain user generated content.
|
|
109
|
+
var getStepTypes = exports.getStepTypes = function getStepTypes(stepJson) {
|
|
110
|
+
var contentTypes = null;
|
|
111
|
+
if (stepWithSlice(stepJson)) {
|
|
112
|
+
contentTypes = stepJson.slice.content.map(function (c) {
|
|
113
|
+
return (c === null || c === void 0 ? void 0 : c.type) || 'unknown';
|
|
114
|
+
}).join(', ');
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
type: stepJson.stepType || 'unknown',
|
|
118
|
+
contentTypes: contentTypes
|
|
119
|
+
};
|
|
120
|
+
};
|
|
121
|
+
var getStepsAdfWithObfuscation = exports.getStepsAdfWithObfuscation = function getStepsAdfWithObfuscation(stepJson) {
|
|
122
|
+
var stepContentAsAdf = stepToAdf(stepJson);
|
|
123
|
+
if (!stepContentAsAdf) {
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
var scrubbedSteps = stepContentAsAdf.map(function (adf) {
|
|
127
|
+
return (0, _scrub.scrubAdf)(adf);
|
|
128
|
+
}).filter(function (adf) {
|
|
129
|
+
return !!adf;
|
|
130
|
+
});
|
|
131
|
+
return scrubbedSteps;
|
|
132
|
+
};
|
|
133
|
+
var getDocAdfWithObfuscation = exports.getDocAdfWithObfuscation = function getDocAdfWithObfuscation(doc) {
|
|
134
|
+
var docJson = doc.toJSON();
|
|
135
|
+
var scrubbedDoc = (0, _scrub.scrubAdf)(docJson);
|
|
136
|
+
if (!scrubbedDoc) {
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
return scrubbedDoc;
|
|
140
|
+
};
|
|
141
|
+
var getStepPositions = exports.getStepPositions = function getStepPositions(stepJson) {
|
|
142
|
+
return _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, stepWithFromTo(stepJson) && {
|
|
143
|
+
from: stepJson.from,
|
|
144
|
+
to: stepJson.to
|
|
145
|
+
}), stepWithGapFromTo(stepJson) && {
|
|
146
|
+
gapFrom: stepJson.gapFrom,
|
|
147
|
+
gapTo: stepJson.gapTo
|
|
148
|
+
}), stepWithInsert(stepJson) && {
|
|
149
|
+
insert: stepJson.insert
|
|
150
|
+
}), stepWithPos(stepJson) && {
|
|
151
|
+
pos: stepJson.pos
|
|
152
|
+
});
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Returns the metadata for Step
|
|
157
|
+
* @description metadata is applied by transform overrides [here](https://bitbucket.org/atlassian/adf-schema/src/e13bbece84ede8f245067dc53dd7ce694f427eda/packages/editor-prosemirror/src/transform-override.ts#lines-12)
|
|
158
|
+
*/
|
|
159
|
+
var getStepMetadata = function getStepMetadata(stepJson) {
|
|
160
|
+
return stepJson.metadata;
|
|
161
|
+
};
|
|
162
|
+
var getObfuscatedSteps = exports.getObfuscatedSteps = function getObfuscatedSteps(steps) {
|
|
163
|
+
var endIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
|
|
164
|
+
return steps.slice(0, endIndex).map(function (step) {
|
|
165
|
+
return {
|
|
166
|
+
stepType: getStepTypes(step),
|
|
167
|
+
stepContent: getStepsAdfWithObfuscation(step),
|
|
168
|
+
stepPositions: getStepPositions(step),
|
|
169
|
+
stepMetadata: getStepMetadata(step)
|
|
170
|
+
};
|
|
171
|
+
});
|
|
172
|
+
};
|
|
173
|
+
var stepToAdf = function stepToAdf(step) {
|
|
174
|
+
if (stepWithSlice(step)) {
|
|
175
|
+
return [{
|
|
176
|
+
type: 'doc',
|
|
177
|
+
content: step.slice.content.filter(function (el) {
|
|
178
|
+
return el !== null;
|
|
179
|
+
})
|
|
180
|
+
}];
|
|
181
|
+
} else if (stepWithNextDocument(step)) {
|
|
182
|
+
return [{
|
|
183
|
+
type: 'doc',
|
|
184
|
+
content: step.nextDocument.content
|
|
185
|
+
}];
|
|
186
|
+
} else if (stepWithMark(step) && step.mark) {
|
|
187
|
+
return [{
|
|
188
|
+
type: 'doc',
|
|
189
|
+
marks: [{
|
|
190
|
+
type: step.mark.type || 'unknown',
|
|
191
|
+
attrs: step.mark.attrs
|
|
192
|
+
}]
|
|
193
|
+
}];
|
|
194
|
+
} else if (stepWithAttrs(step)) {
|
|
195
|
+
return [{
|
|
196
|
+
type: 'doc',
|
|
197
|
+
attrs: step.attrs
|
|
198
|
+
}];
|
|
199
|
+
} else if (stepWithBatchAttrs(step)) {
|
|
200
|
+
return step.data.map(function (stepData) {
|
|
201
|
+
return {
|
|
202
|
+
type: 'doc',
|
|
203
|
+
attrs: stepData.attrs
|
|
204
|
+
};
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
return [];
|
|
208
|
+
};
|
|
209
|
+
function logObfuscatedSteps(_x, _x2) {
|
|
210
|
+
return _logObfuscatedSteps.apply(this, arguments);
|
|
211
|
+
}
|
|
212
|
+
function _logObfuscatedSteps() {
|
|
213
|
+
_logObfuscatedSteps = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(oldState, newState) {
|
|
214
|
+
var _states$new, _states$old, stepsFromOldState, stepsFromNewState, states;
|
|
215
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
|
216
|
+
while (1) switch (_context.prev = _context.next) {
|
|
217
|
+
case 0:
|
|
218
|
+
_context.prev = 0;
|
|
219
|
+
stepsFromOldState = '', stepsFromNewState = '';
|
|
220
|
+
states = {
|
|
221
|
+
old: oldState ? (0, _prosemirrorCollab.sendableSteps)(oldState) : null,
|
|
222
|
+
new: (0, _prosemirrorCollab.sendableSteps)(newState)
|
|
223
|
+
};
|
|
224
|
+
if (!((_states$new = states.new) !== null && _states$new !== void 0 && _states$new.steps)) {
|
|
225
|
+
_context.next = 7;
|
|
226
|
+
break;
|
|
227
|
+
}
|
|
228
|
+
_context.next = 6;
|
|
229
|
+
return toObfuscatedSteps(states.new.steps);
|
|
230
|
+
case 6:
|
|
231
|
+
stepsFromNewState = _context.sent;
|
|
232
|
+
case 7:
|
|
233
|
+
if (!((_states$old = states.old) !== null && _states$old !== void 0 && _states$old.steps)) {
|
|
234
|
+
_context.next = 11;
|
|
235
|
+
break;
|
|
236
|
+
}
|
|
237
|
+
_context.next = 10;
|
|
238
|
+
return toObfuscatedSteps(states.old.steps);
|
|
239
|
+
case 10:
|
|
240
|
+
stepsFromOldState = _context.sent;
|
|
241
|
+
case 11:
|
|
242
|
+
return _context.abrupt("return", {
|
|
243
|
+
stepsFromOldState: stepsFromOldState,
|
|
244
|
+
stepsFromNewState: stepsFromNewState
|
|
245
|
+
});
|
|
246
|
+
case 14:
|
|
247
|
+
_context.prev = 14;
|
|
248
|
+
_context.t0 = _context["catch"](0);
|
|
249
|
+
return _context.abrupt("return", new _customErrors.CustomError('Failed to obfuscate steps', _context.t0));
|
|
250
|
+
case 17:
|
|
251
|
+
case "end":
|
|
252
|
+
return _context.stop();
|
|
253
|
+
}
|
|
254
|
+
}, _callee, null, [[0, 14]]);
|
|
255
|
+
}));
|
|
256
|
+
return _logObfuscatedSteps.apply(this, arguments);
|
|
257
|
+
}
|
|
258
|
+
function toObfuscatedSteps(_x3) {
|
|
259
|
+
return _toObfuscatedSteps.apply(this, arguments);
|
|
260
|
+
}
|
|
261
|
+
function _toObfuscatedSteps() {
|
|
262
|
+
_toObfuscatedSteps = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(steps) {
|
|
263
|
+
var _steps;
|
|
264
|
+
return _regenerator.default.wrap(function _callee2$(_context2) {
|
|
265
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
266
|
+
case 0:
|
|
267
|
+
_context2.next = 2;
|
|
268
|
+
return Promise.resolve(steps.slice().map(function (s) {
|
|
269
|
+
return s.toJSON();
|
|
270
|
+
}));
|
|
271
|
+
case 2:
|
|
272
|
+
_steps = _context2.sent;
|
|
273
|
+
return _context2.abrupt("return", JSON.stringify(getObfuscatedSteps(_steps)));
|
|
274
|
+
case 4:
|
|
275
|
+
case "end":
|
|
276
|
+
return _context2.stop();
|
|
277
|
+
}
|
|
278
|
+
}, _callee2);
|
|
279
|
+
}));
|
|
280
|
+
return _toObfuscatedSteps.apply(this, arguments);
|
|
281
|
+
}
|