@atlaskit/collab-provider 7.1.1 → 7.1.5
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 +30 -0
- package/dist/cjs/analytics/index.js +3 -3
- package/dist/cjs/analytics/performance.js +1 -1
- package/dist/cjs/channel.js +2 -2
- package/dist/cjs/disconnected-reason-mapper.js +1 -1
- package/dist/cjs/helpers/const.js +1 -1
- package/dist/cjs/helpers/utils.js +1 -1
- package/dist/cjs/provider/catchup.js +1 -1
- package/dist/cjs/provider/index.js +175 -154
- package/dist/cjs/socket-io-provider.js +3 -3
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/provider/index.js +94 -64
- package/dist/es2019/version.json +1 -1
- package/dist/esm/analytics/index.js +2 -2
- package/dist/esm/channel.js +2 -2
- package/dist/esm/provider/index.js +177 -154
- package/dist/esm/socket-io-provider.js +2 -2
- package/dist/esm/version.json +1 -1
- package/dist/types/analytics/index.d.ts +1 -1
- package/dist/types/channel.d.ts +1 -70
- package/dist/types/error-code-mapper.d.ts +1 -2
- package/dist/types/index.d.ts +1 -2
- package/dist/types/provider/catchup.d.ts +1 -16
- package/dist/types/provider/index.d.ts +13 -64
- package/dist/types/types.d.ts +127 -3
- package/package.json +8 -7
|
@@ -5,8 +5,8 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.createSocketIOSocket = createSocketIOSocket;
|
|
9
8
|
exports.createSocketIOCollabProvider = createSocketIOCollabProvider;
|
|
9
|
+
exports.createSocketIOSocket = createSocketIOSocket;
|
|
10
10
|
|
|
11
11
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
12
12
|
|
|
@@ -16,9 +16,9 @@ var _socket = require("socket.io-client");
|
|
|
16
16
|
|
|
17
17
|
var _urlParse2 = _interopRequireDefault(require("url-parse"));
|
|
18
18
|
|
|
19
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
|
19
|
+
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; }
|
|
20
20
|
|
|
21
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
|
21
|
+
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; }
|
|
22
22
|
|
|
23
23
|
function createSocketIOSocket(url, auth) {
|
|
24
24
|
var _urlParse = (0, _urlParse2.default)(url),
|
package/dist/cjs/version.json
CHANGED
|
@@ -21,6 +21,8 @@ export const CATCHUP_THROTTLE = 1 * 1000; // 1 second
|
|
|
21
21
|
|
|
22
22
|
const OUT_OF_SYNC_PERIOD = 3 * 1000; // 3 seconds
|
|
23
23
|
|
|
24
|
+
const noop = () => {};
|
|
25
|
+
|
|
24
26
|
export const MAX_STEP_REJECTED_ERROR = 15;
|
|
25
27
|
|
|
26
28
|
const commitStep = ({
|
|
@@ -55,6 +57,38 @@ export class Provider extends Emitter {
|
|
|
55
57
|
|
|
56
58
|
_defineProperty(this, "stepRejectCounter", 0);
|
|
57
59
|
|
|
60
|
+
_defineProperty(this, "isChannelInitialized", false);
|
|
61
|
+
|
|
62
|
+
_defineProperty(this, "initializeChannel", () => {
|
|
63
|
+
this.channel.on('connected', ({
|
|
64
|
+
sid,
|
|
65
|
+
initialized
|
|
66
|
+
}) => {
|
|
67
|
+
this.sessionId = sid;
|
|
68
|
+
this.emit('connected', {
|
|
69
|
+
sid
|
|
70
|
+
}); // If already initialized, `connected` means reconnected
|
|
71
|
+
|
|
72
|
+
if (initialized && this.disconnectedAt && // Offline longer than `OUT_OF_SYNC_PERIOD`
|
|
73
|
+
Date.now() - this.disconnectedAt >= OUT_OF_SYNC_PERIOD) {
|
|
74
|
+
this.throttledCatchup();
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
this.disconnectedAt = undefined;
|
|
78
|
+
}).on('init', ({
|
|
79
|
+
doc,
|
|
80
|
+
version,
|
|
81
|
+
metadata
|
|
82
|
+
}) => {
|
|
83
|
+
// Initial document and version
|
|
84
|
+
this.updateDocumentWithMetadata({
|
|
85
|
+
doc,
|
|
86
|
+
version,
|
|
87
|
+
metadata
|
|
88
|
+
});
|
|
89
|
+
}).on('steps:added', this.onStepsAdded.bind(this)).on('participant:telepointer', this.onParticipantTelepointer.bind(this)).on('presence:joined', this.onPresenceJoined.bind(this)).on('presence', this.onPresence.bind(this)).on('participant:left', this.onParticipantLeft.bind(this)).on('participant:updated', this.onParticipantUpdated.bind(this)).on('metadata:changed', this.onMetadataChanged.bind(this)).on('disconnect', this.onDisconnected.bind(this)).on('error', this.onErrorHandled.bind(this)).connect();
|
|
90
|
+
});
|
|
91
|
+
|
|
58
92
|
_defineProperty(this, "onStepsAdded", data => {
|
|
59
93
|
logger(`Received steps`, {
|
|
60
94
|
steps: data.steps,
|
|
@@ -216,6 +250,7 @@ export class Provider extends Emitter {
|
|
|
216
250
|
|
|
217
251
|
_defineProperty(this, "onMetadataChanged", metadata => {
|
|
218
252
|
if (metadata !== undefined && !isequal(this.metadata, metadata)) {
|
|
253
|
+
this.metadata = metadata;
|
|
219
254
|
this.emit('metadata:changed', metadata);
|
|
220
255
|
}
|
|
221
256
|
});
|
|
@@ -388,50 +423,78 @@ export class Provider extends Emitter {
|
|
|
388
423
|
}
|
|
389
424
|
});
|
|
390
425
|
|
|
426
|
+
_defineProperty(this, "getFinalAcknowledgedState", async () => {
|
|
427
|
+
var _this$getUnconfirmedS, _this$metadata$title;
|
|
428
|
+
|
|
429
|
+
const maxAttemptsToSync = ACK_MAX_TRY;
|
|
430
|
+
let count = 0;
|
|
431
|
+
let unconfirmedSteps = (_this$getUnconfirmedS = this.getUnconfirmedSteps()) === null || _this$getUnconfirmedS === void 0 ? void 0 : _this$getUnconfirmedS.steps;
|
|
432
|
+
|
|
433
|
+
while (unconfirmedSteps && unconfirmedSteps.length) {
|
|
434
|
+
var _this$getUnconfirmedS2;
|
|
435
|
+
|
|
436
|
+
this.sendStepsFromCurrentState();
|
|
437
|
+
await sleep(500);
|
|
438
|
+
unconfirmedSteps = (_this$getUnconfirmedS2 = this.getUnconfirmedSteps()) === null || _this$getUnconfirmedS2 === void 0 ? void 0 : _this$getUnconfirmedS2.steps;
|
|
439
|
+
|
|
440
|
+
if (count++ >= maxAttemptsToSync) {
|
|
441
|
+
if (this.onSyncUpError) {
|
|
442
|
+
var _unconfirmedSteps;
|
|
443
|
+
|
|
444
|
+
const state = this.getState();
|
|
445
|
+
this.onSyncUpError({
|
|
446
|
+
lengthOfUnconfirmedSteps: (_unconfirmedSteps = unconfirmedSteps) === null || _unconfirmedSteps === void 0 ? void 0 : _unconfirmedSteps.length,
|
|
447
|
+
tries: count,
|
|
448
|
+
maxRetries: maxAttemptsToSync,
|
|
449
|
+
clientId: this.clientId,
|
|
450
|
+
version: getVersion(state)
|
|
451
|
+
});
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
throw new Error("Can't syncup with Collab Service");
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
const state = this.getState();
|
|
459
|
+
return {
|
|
460
|
+
content: state.doc.toJSON(),
|
|
461
|
+
title: (_this$metadata$title = this.metadata.title) === null || _this$metadata$title === void 0 ? void 0 : _this$metadata$title.toString(),
|
|
462
|
+
stepVersion: getVersion(state)
|
|
463
|
+
};
|
|
464
|
+
});
|
|
465
|
+
|
|
391
466
|
this.config = config;
|
|
392
467
|
this.channel = new Channel(config);
|
|
468
|
+
this.isChannelInitialized = false;
|
|
393
469
|
|
|
394
470
|
if (config.analyticsClient) {
|
|
395
471
|
this.analyticsClient = config.analyticsClient;
|
|
396
472
|
}
|
|
397
473
|
}
|
|
474
|
+
|
|
398
475
|
/**
|
|
399
476
|
* Called by collab plugin in editor when it's ready to
|
|
400
477
|
* initialize a collab session.
|
|
401
478
|
*/
|
|
479
|
+
initialize(getState) {
|
|
480
|
+
return this.setup({
|
|
481
|
+
getState
|
|
482
|
+
});
|
|
483
|
+
}
|
|
402
484
|
|
|
485
|
+
setup({
|
|
486
|
+
getState,
|
|
487
|
+
onSyncUpError
|
|
488
|
+
}) {
|
|
489
|
+
this.getState = getState;
|
|
490
|
+
this.onSyncUpError = onSyncUpError || noop;
|
|
491
|
+
this.clientId = getState().plugins.find(p => p.key === 'collab$').spec.config.clientID;
|
|
492
|
+
|
|
493
|
+
if (!this.isChannelInitialized) {
|
|
494
|
+
this.initializeChannel();
|
|
495
|
+
this.isChannelInitialized = true;
|
|
496
|
+
}
|
|
403
497
|
|
|
404
|
-
initialize(optionsOrGetState) {
|
|
405
|
-
this.getState = typeof optionsOrGetState === 'function' ? optionsOrGetState : optionsOrGetState.getState;
|
|
406
|
-
this.clientId = typeof optionsOrGetState === 'function' ? // Quick-hack to get clientID from native collab-plugin.
|
|
407
|
-
this.getState().plugins.find(p => p.key === 'collab$').spec.config.clientID : optionsOrGetState.clientId;
|
|
408
|
-
this.channel.on('connected', ({
|
|
409
|
-
sid,
|
|
410
|
-
initialized
|
|
411
|
-
}) => {
|
|
412
|
-
this.sessionId = sid;
|
|
413
|
-
this.emit('connected', {
|
|
414
|
-
sid
|
|
415
|
-
}); // If already initialized, `connected` means reconnected
|
|
416
|
-
|
|
417
|
-
if (initialized && this.disconnectedAt && // Offline longer than `OUT_OF_SYNC_PERIOD`
|
|
418
|
-
Date.now() - this.disconnectedAt >= OUT_OF_SYNC_PERIOD) {
|
|
419
|
-
this.throttledCatchup();
|
|
420
|
-
}
|
|
421
|
-
|
|
422
|
-
this.disconnectedAt = undefined;
|
|
423
|
-
}).on('init', ({
|
|
424
|
-
doc,
|
|
425
|
-
version,
|
|
426
|
-
metadata
|
|
427
|
-
}) => {
|
|
428
|
-
// Initial document and version
|
|
429
|
-
this.updateDocumentWithMetadata({
|
|
430
|
-
doc,
|
|
431
|
-
version,
|
|
432
|
-
metadata
|
|
433
|
-
});
|
|
434
|
-
}).on('steps:added', this.onStepsAdded).on('participant:telepointer', this.onParticipantTelepointer).on('presence:joined', this.onPresenceJoined).on('presence', this.onPresence).on('participant:left', this.onParticipantLeft).on('participant:updated', this.onParticipantUpdated).on('metadata:changed', this.onMetadataChanged).on('disconnect', this.onDisconnected).on('error', this.onErrorHandled).connect();
|
|
435
498
|
return this;
|
|
436
499
|
}
|
|
437
500
|
/**
|
|
@@ -644,43 +707,10 @@ export class Provider extends Emitter {
|
|
|
644
707
|
this.channel.sendMetadata(metadata);
|
|
645
708
|
Object.assign(this.metadata, metadata);
|
|
646
709
|
}
|
|
647
|
-
/**
|
|
648
|
-
* Get latest state.
|
|
649
|
-
*
|
|
650
|
-
* NOTE: Should this actually convert to ADF instead?
|
|
651
|
-
*/
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
async getFinalAcknowledgedState() {
|
|
655
|
-
var _this$getUnconfirmedS;
|
|
656
|
-
|
|
657
|
-
const state = this.getState();
|
|
658
|
-
let count = 0;
|
|
659
|
-
let unconfirmedSteps = this.getUnconfirmedSteps() && ((_this$getUnconfirmedS = this.getUnconfirmedSteps()) === null || _this$getUnconfirmedS === void 0 ? void 0 : _this$getUnconfirmedS.steps);
|
|
660
|
-
|
|
661
|
-
while (unconfirmedSteps && unconfirmedSteps.length) {
|
|
662
|
-
var _this$getUnconfirmedS2;
|
|
663
|
-
|
|
664
|
-
this.sendStepsFromCurrentState();
|
|
665
|
-
await sleep(500);
|
|
666
|
-
unconfirmedSteps = this.getUnconfirmedSteps() && ((_this$getUnconfirmedS2 = this.getUnconfirmedSteps()) === null || _this$getUnconfirmedS2 === void 0 ? void 0 : _this$getUnconfirmedS2.steps);
|
|
667
710
|
|
|
668
|
-
if (count++ >= ACK_MAX_TRY) {
|
|
669
|
-
throw new Error("Can't syncup with Collab Service");
|
|
670
|
-
}
|
|
671
|
-
}
|
|
672
|
-
|
|
673
|
-
return {
|
|
674
|
-
content: state.doc.toJSON(),
|
|
675
|
-
title: this.metadata.title,
|
|
676
|
-
stepVersion: getVersion(state)
|
|
677
|
-
};
|
|
678
|
-
}
|
|
679
711
|
/**
|
|
680
712
|
* Unsubscribe from all events emitted by this provider.
|
|
681
713
|
*/
|
|
682
|
-
|
|
683
|
-
|
|
684
714
|
unsubscribeAll() {
|
|
685
715
|
super.unsubscribeAll();
|
|
686
716
|
this.channel.disconnect();
|
package/dist/es2019/version.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
2
|
|
|
3
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
|
3
|
+
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; }
|
|
4
4
|
|
|
5
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
|
5
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
6
6
|
|
|
7
7
|
import { ATTRIBUTES_PACKAGE, CATCHUP_FAILURE, CATCHUP_SUCCESS, STEPS_ADDED, STEPS_REJECTED } from '../helpers/const';
|
|
8
8
|
export var buildAnalyticsPayload = function buildAnalyticsPayload(subject, payload) {
|
package/dist/esm/channel.js
CHANGED
|
@@ -8,9 +8,9 @@ import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstruct
|
|
|
8
8
|
import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf";
|
|
9
9
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
10
10
|
|
|
11
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
|
11
|
+
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; }
|
|
12
12
|
|
|
13
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
|
13
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
14
14
|
|
|
15
15
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
|
16
16
|
|