@atlaskit/collab-provider 8.1.0 → 8.2.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.
- package/CHANGELOG.md +15 -0
- package/dist/cjs/analytics/index.js +2 -11
- package/dist/cjs/analytics/performance.js +2 -16
- package/dist/cjs/channel.js +63 -114
- package/dist/cjs/disconnected-reason-mapper.js +0 -2
- package/dist/cjs/emitter.js +3 -11
- package/dist/cjs/error-code-mapper.js +4 -17
- package/dist/cjs/feature-flags/__test__/index.unit.js +0 -1
- package/dist/cjs/feature-flags/index.js +5 -15
- package/dist/cjs/feature-flags/types.js +2 -0
- package/dist/cjs/helpers/const.js +2 -8
- package/dist/cjs/helpers/utils.js +0 -12
- package/dist/cjs/index.js +0 -1
- package/dist/cjs/provider/catchup.js +38 -42
- package/dist/cjs/provider/index.js +150 -281
- package/dist/cjs/socket-io-provider.js +2 -12
- package/dist/cjs/types.js +0 -1
- package/dist/cjs/version-wrapper.js +1 -3
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/analytics/index.js +2 -3
- package/dist/es2019/analytics/performance.js +2 -13
- package/dist/es2019/channel.js +54 -64
- package/dist/es2019/disconnected-reason-mapper.js +1 -2
- package/dist/es2019/emitter.js +3 -8
- package/dist/es2019/error-code-mapper.js +4 -12
- package/dist/es2019/feature-flags/index.js +2 -5
- package/dist/es2019/feature-flags/types.js +2 -0
- package/dist/es2019/helpers/const.js +2 -8
- package/dist/es2019/helpers/utils.js +0 -2
- package/dist/es2019/provider/catchup.js +33 -17
- package/dist/es2019/provider/index.js +116 -187
- package/dist/es2019/socket-io-provider.js +4 -2
- package/dist/es2019/types.js +1 -1
- package/dist/es2019/version-wrapper.js +1 -1
- package/dist/es2019/version.json +1 -1
- package/dist/esm/analytics/index.js +2 -6
- package/dist/esm/analytics/performance.js +2 -13
- package/dist/esm/channel.js +65 -107
- package/dist/esm/disconnected-reason-mapper.js +1 -2
- package/dist/esm/emitter.js +3 -6
- package/dist/esm/error-code-mapper.js +4 -12
- package/dist/esm/feature-flags/index.js +5 -10
- package/dist/esm/feature-flags/types.js +2 -0
- package/dist/esm/helpers/const.js +2 -8
- package/dist/esm/helpers/utils.js +0 -3
- package/dist/esm/provider/catchup.js +38 -35
- package/dist/esm/provider/index.js +150 -283
- package/dist/esm/socket-io-provider.js +2 -5
- package/dist/esm/types.js +1 -1
- package/dist/esm/version-wrapper.js +1 -1
- package/dist/esm/version.json +1 -1
- package/dist/types/channel.d.ts +1 -0
- package/dist/types/error-code-mapper.d.ts +1 -1
- package/dist/types/helpers/const.d.ts +16 -3
- package/dist/types/types.d.ts +3 -1
- package/package.json +7 -5
- package/report.api.md +6 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# @atlaskit/collab-provider
|
|
2
2
|
|
|
3
|
+
## 8.2.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [`945413f0b29`](https://bitbucket.org/atlassian/atlassian-frontend/commits/945413f0b29) - trigger page recovery when catchup returns 404
|
|
8
|
+
- [`06119d7fed4`](https://bitbucket.org/atlassian/atlassian-frontend/commits/06119d7fed4) - handle catchup after page recovery
|
|
9
|
+
- [`a66427c3fe5`](https://bitbucket.org/atlassian/atlassian-frontend/commits/a66427c3fe5) - Add analytics logging to error handling
|
|
10
|
+
- [`56a21fe7209`](https://bitbucket.org/atlassian/atlassian-frontend/commits/56a21fe7209) - Improve error handling logic
|
|
11
|
+
- [`77aee68579e`](https://bitbucket.org/atlassian/atlassian-frontend/commits/77aee68579e) - adding a connecting event to be emitted when collab-provider is first initialized
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- [`625f3c20f8c`](https://bitbucket.org/atlassian/atlassian-frontend/commits/625f3c20f8c) - Handle init errors
|
|
16
|
+
- Updated dependencies
|
|
17
|
+
|
|
3
18
|
## 8.1.0
|
|
4
19
|
|
|
5
20
|
### Minor Changes
|
|
@@ -1,27 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.triggerAnalyticsEvent = void 0;
|
|
9
|
-
|
|
10
8
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
-
|
|
12
9
|
var _const = require("../helpers/const");
|
|
13
|
-
|
|
14
10
|
var _versionWrapper = require("../version-wrapper");
|
|
15
|
-
|
|
16
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; }
|
|
17
|
-
|
|
18
12
|
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; }
|
|
19
|
-
|
|
20
13
|
var triggerAnalyticsEvent = function triggerAnalyticsEvent(analyticsEvent, analyticsClient) {
|
|
21
14
|
if (!analyticsClient) {
|
|
22
15
|
return;
|
|
23
16
|
}
|
|
24
|
-
|
|
25
17
|
var payload = {
|
|
26
18
|
actionSubject: _const.EVENT_SUBJECT,
|
|
27
19
|
attributes: _objectSpread({
|
|
@@ -32,15 +24,14 @@ var triggerAnalyticsEvent = function triggerAnalyticsEvent(analyticsEvent, analy
|
|
|
32
24
|
tags: ['editor'],
|
|
33
25
|
action: analyticsEvent.eventAction,
|
|
34
26
|
source: 'unknown' // Adds zero analytics value, but event validation throws an error if you don't add it :-(
|
|
27
|
+
};
|
|
35
28
|
|
|
36
|
-
|
|
29
|
+
// Let the browser figure out
|
|
37
30
|
// when it should send those events
|
|
38
|
-
|
|
39
31
|
var requestIdleCallbackFunction = window.requestIdleCallback;
|
|
40
32
|
var runItLater = typeof requestIdleCallbackFunction === 'function' ? requestIdleCallbackFunction : window.requestAnimationFrame;
|
|
41
33
|
runItLater(function () {
|
|
42
34
|
analyticsClient.sendOperationalEvent(payload);
|
|
43
35
|
});
|
|
44
36
|
};
|
|
45
|
-
|
|
46
37
|
exports.triggerAnalyticsEvent = triggerAnalyticsEvent;
|
|
@@ -9,53 +9,43 @@ exports.startMeasure = startMeasure;
|
|
|
9
9
|
exports.stopMeasure = stopMeasure;
|
|
10
10
|
var MEASURE_NAME;
|
|
11
11
|
exports.MEASURE_NAME = MEASURE_NAME;
|
|
12
|
-
|
|
13
12
|
(function (MEASURE_NAME) {
|
|
14
13
|
MEASURE_NAME["SOCKET_CONNECT"] = "socketConnect";
|
|
15
14
|
MEASURE_NAME["DOCUMENT_INIT"] = "documentInit";
|
|
16
15
|
MEASURE_NAME["CONVERT_PM_TO_ADF"] = "convertPMToADF";
|
|
17
16
|
MEASURE_NAME["COMMIT_UNCONFIRMED_STEPS"] = "commitUnconfirmedSteps";
|
|
18
17
|
})(MEASURE_NAME || (exports.MEASURE_NAME = MEASURE_NAME = {}));
|
|
19
|
-
|
|
20
18
|
var isPerformanceAPIAvailable = function isPerformanceAPIAvailable() {
|
|
21
19
|
return typeof window !== 'undefined' && 'performance' in window && ['measure', 'clearMeasures', 'clearMarks', 'getEntriesByName', 'getEntriesByType'].every(function (api) {
|
|
22
20
|
return !!performance[api];
|
|
23
21
|
});
|
|
24
22
|
};
|
|
25
|
-
|
|
26
23
|
var hasPerformanceAPIAvailable = isPerformanceAPIAvailable();
|
|
27
24
|
var measureMap = new Map();
|
|
28
|
-
|
|
29
25
|
function startMeasure(measureName) {
|
|
30
26
|
if (!hasPerformanceAPIAvailable) {
|
|
31
27
|
return;
|
|
32
28
|
}
|
|
33
|
-
|
|
34
29
|
performance.mark("".concat(measureName, "::start"));
|
|
35
30
|
measureMap.set(measureName, performance.now());
|
|
36
31
|
}
|
|
37
|
-
|
|
38
32
|
function stopMeasure(measureName, onMeasureComplete) {
|
|
39
33
|
if (!hasPerformanceAPIAvailable) {
|
|
40
34
|
return;
|
|
41
|
-
}
|
|
42
|
-
|
|
35
|
+
}
|
|
43
36
|
|
|
37
|
+
// `startMeasure` is not called with `measureName` before.
|
|
44
38
|
if (!measureMap.get(measureName)) {
|
|
45
39
|
return;
|
|
46
40
|
}
|
|
47
|
-
|
|
48
41
|
performance.mark("".concat(measureName, "::end"));
|
|
49
42
|
var start = onMeasureComplete ? measureMap.get(measureName) : undefined;
|
|
50
|
-
|
|
51
43
|
try {
|
|
52
44
|
performance.measure(measureName, "".concat(measureName, "::start"), "".concat(measureName, "::end"));
|
|
53
45
|
} catch (e) {}
|
|
54
|
-
|
|
55
46
|
var entry = performance.getEntriesByName(measureName).pop();
|
|
56
47
|
clearMeasure(measureName);
|
|
57
48
|
var measure;
|
|
58
|
-
|
|
59
49
|
if (entry) {
|
|
60
50
|
measure = {
|
|
61
51
|
duration: entry.duration,
|
|
@@ -67,19 +57,15 @@ function stopMeasure(measureName, onMeasureComplete) {
|
|
|
67
57
|
startTime: start
|
|
68
58
|
};
|
|
69
59
|
}
|
|
70
|
-
|
|
71
60
|
if (measure && onMeasureComplete) {
|
|
72
61
|
onMeasureComplete(measure.duration, measure.startTime);
|
|
73
62
|
}
|
|
74
|
-
|
|
75
63
|
return measure;
|
|
76
64
|
}
|
|
77
|
-
|
|
78
65
|
function clearMeasure(measureName) {
|
|
79
66
|
if (!hasPerformanceAPIAvailable) {
|
|
80
67
|
return;
|
|
81
68
|
}
|
|
82
|
-
|
|
83
69
|
measureMap.delete(measureName);
|
|
84
70
|
performance.clearMarks("".concat(measureName, "::start"));
|
|
85
71
|
performance.clearMarks("".concat(measureName, "::end"));
|
package/dist/cjs/channel.js
CHANGED
|
@@ -1,64 +1,37 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.Channel = void 0;
|
|
9
|
-
|
|
10
8
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
11
|
-
|
|
12
9
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
13
|
-
|
|
14
10
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
15
|
-
|
|
16
11
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
17
|
-
|
|
18
12
|
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
|
|
19
|
-
|
|
20
13
|
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
21
|
-
|
|
22
14
|
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
23
|
-
|
|
24
15
|
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
25
|
-
|
|
26
16
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
27
|
-
|
|
28
17
|
var _utilServiceSupport = require("@atlaskit/util-service-support");
|
|
29
|
-
|
|
30
18
|
var _emitter = require("./emitter");
|
|
31
|
-
|
|
32
19
|
var _errorCodeMapper = require("./error-code-mapper");
|
|
33
|
-
|
|
34
20
|
var _utils = require("./helpers/utils");
|
|
35
|
-
|
|
36
21
|
var _performance = require("./analytics/performance");
|
|
37
|
-
|
|
38
22
|
var _analytics = require("./analytics");
|
|
39
|
-
|
|
40
23
|
var _const = require("./helpers/const");
|
|
41
|
-
|
|
42
24
|
var _ufo = require("@atlaskit/ufo");
|
|
43
|
-
|
|
44
25
|
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; }
|
|
45
|
-
|
|
46
26
|
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; }
|
|
47
|
-
|
|
48
27
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
|
|
49
|
-
|
|
50
28
|
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
51
|
-
|
|
52
29
|
var logger = (0, _utils.createLogger)('Channel', 'green');
|
|
53
|
-
|
|
54
30
|
var Channel = /*#__PURE__*/function (_Emitter) {
|
|
55
31
|
(0, _inherits2.default)(Channel, _Emitter);
|
|
56
|
-
|
|
57
32
|
var _super = _createSuper(Channel);
|
|
58
|
-
|
|
59
33
|
function Channel(config) {
|
|
60
34
|
var _this;
|
|
61
|
-
|
|
62
35
|
(0, _classCallCheck2.default)(this, Channel);
|
|
63
36
|
_this = _super.call(this);
|
|
64
37
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "connected", false);
|
|
@@ -82,6 +55,30 @@ var Channel = /*#__PURE__*/function (_Emitter) {
|
|
|
82
55
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "getSocket", function () {
|
|
83
56
|
return _this.socket;
|
|
84
57
|
});
|
|
58
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onConnectError", function (error) {
|
|
59
|
+
var measure = (0, _performance.stopMeasure)(_performance.MEASURE_NAME.SOCKET_CONNECT);
|
|
60
|
+
(0, _analytics.triggerAnalyticsEvent)({
|
|
61
|
+
eventAction: _const.EVENT_ACTION.CONNECTION,
|
|
62
|
+
attributes: {
|
|
63
|
+
eventStatus: _const.EVENT_STATUS.FAILURE,
|
|
64
|
+
error: error,
|
|
65
|
+
latency: measure === null || measure === void 0 ? void 0 : measure.duration,
|
|
66
|
+
documentAri: _this.config.documentAri
|
|
67
|
+
}
|
|
68
|
+
}, _this.analyticsClient);
|
|
69
|
+
// If error received with `data`, it means the connection is rejected
|
|
70
|
+
// by the server on purpose for example no permission, so no need to
|
|
71
|
+
// keep the underneath connection, need to close. But some error like
|
|
72
|
+
// `xhr polling error` needs to retry.
|
|
73
|
+
if (!!error.data) {
|
|
74
|
+
var _this$socket;
|
|
75
|
+
(_this$socket = _this.socket) === null || _this$socket === void 0 ? void 0 : _this$socket.close();
|
|
76
|
+
}
|
|
77
|
+
_this.emit('error', {
|
|
78
|
+
message: error.message,
|
|
79
|
+
data: error.data
|
|
80
|
+
});
|
|
81
|
+
});
|
|
85
82
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onConnect", function () {
|
|
86
83
|
_this.connected = true;
|
|
87
84
|
logger('Connected.', _this.socket.id);
|
|
@@ -94,7 +91,6 @@ var Channel = /*#__PURE__*/function (_Emitter) {
|
|
|
94
91
|
documentAri: _this.config.documentAri
|
|
95
92
|
}
|
|
96
93
|
}, _this.analyticsClient);
|
|
97
|
-
|
|
98
94
|
_this.emit('connected', {
|
|
99
95
|
sid: _this.socket.id,
|
|
100
96
|
initialized: _this.initialized
|
|
@@ -103,13 +99,10 @@ var Channel = /*#__PURE__*/function (_Emitter) {
|
|
|
103
99
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onReceiveData", function (data) {
|
|
104
100
|
logger('Received data', data);
|
|
105
101
|
logger('Session ID is', _this.socket.id);
|
|
106
|
-
|
|
107
102
|
if (data.type === 'initial') {
|
|
108
103
|
if (!_this.initialized) {
|
|
109
104
|
var measure = (0, _performance.stopMeasure)(_performance.MEASURE_NAME.DOCUMENT_INIT);
|
|
110
|
-
|
|
111
105
|
_this.initExperience.success();
|
|
112
|
-
|
|
113
106
|
(0, _analytics.triggerAnalyticsEvent)({
|
|
114
107
|
eventAction: _const.EVENT_ACTION.DOCUMENT_INIT,
|
|
115
108
|
attributes: {
|
|
@@ -122,11 +115,10 @@ var Channel = /*#__PURE__*/function (_Emitter) {
|
|
|
122
115
|
}
|
|
123
116
|
}, _this.analyticsClient);
|
|
124
117
|
var doc = data.doc,
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
118
|
+
version = data.version,
|
|
119
|
+
userId = data.userId,
|
|
120
|
+
metadata = data.metadata;
|
|
128
121
|
_this.initialized = true;
|
|
129
|
-
|
|
130
122
|
_this.emit('init', {
|
|
131
123
|
doc: doc,
|
|
132
124
|
version: version,
|
|
@@ -136,10 +128,9 @@ var Channel = /*#__PURE__*/function (_Emitter) {
|
|
|
136
128
|
} else {
|
|
137
129
|
// Page is been just restored, need to fix all the participants as well.
|
|
138
130
|
var _doc = data.doc,
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
131
|
+
_version = data.version,
|
|
132
|
+
_userId = data.userId,
|
|
133
|
+
_metadata = data.metadata;
|
|
143
134
|
_this.emit('restore', {
|
|
144
135
|
doc: _doc,
|
|
145
136
|
version: _version,
|
|
@@ -152,15 +143,13 @@ var Channel = /*#__PURE__*/function (_Emitter) {
|
|
|
152
143
|
}
|
|
153
144
|
});
|
|
154
145
|
_this.config = config;
|
|
155
|
-
|
|
156
146
|
if (config.analyticsClient) {
|
|
157
147
|
_this.analyticsClient = config.analyticsClient;
|
|
158
148
|
}
|
|
159
|
-
|
|
160
149
|
return _this;
|
|
161
|
-
}
|
|
162
|
-
|
|
150
|
+
}
|
|
163
151
|
|
|
152
|
+
// read-only getters used for tests
|
|
164
153
|
(0, _createClass2.default)(Channel, [{
|
|
165
154
|
key: "connect",
|
|
166
155
|
value:
|
|
@@ -169,21 +158,17 @@ var Channel = /*#__PURE__*/function (_Emitter) {
|
|
|
169
158
|
*/
|
|
170
159
|
function connect() {
|
|
171
160
|
var _this2 = this;
|
|
172
|
-
|
|
173
161
|
(0, _performance.startMeasure)(_performance.MEASURE_NAME.SOCKET_CONNECT);
|
|
174
|
-
|
|
175
162
|
if (!this.initialized) {
|
|
176
163
|
(0, _performance.startMeasure)(_performance.MEASURE_NAME.DOCUMENT_INIT);
|
|
177
164
|
this.initExperience.start();
|
|
178
165
|
}
|
|
179
|
-
|
|
180
166
|
var _this$config = this.config,
|
|
181
|
-
|
|
182
|
-
|
|
167
|
+
documentAri = _this$config.documentAri,
|
|
168
|
+
url = _this$config.url;
|
|
183
169
|
var createSocket = this.config.createSocket;
|
|
184
170
|
var permissionTokenRefresh = this.config.permissionTokenRefresh;
|
|
185
171
|
var authCb = null;
|
|
186
|
-
|
|
187
172
|
if (permissionTokenRefresh) {
|
|
188
173
|
authCb = function authCb(cb) {
|
|
189
174
|
permissionTokenRefresh().then(function (token) {
|
|
@@ -209,11 +194,11 @@ var Channel = /*#__PURE__*/function (_Emitter) {
|
|
|
209
194
|
});
|
|
210
195
|
};
|
|
211
196
|
}
|
|
197
|
+
this.socket = createSocket("".concat(url, "/session/").concat(documentAri), authCb, this.config.productInfo);
|
|
212
198
|
|
|
213
|
-
|
|
199
|
+
// Due to https://github.com/socketio/socket.io-client/issues/1473,
|
|
214
200
|
// reconnect no longer fired on the socket.
|
|
215
201
|
// We should use `connect` for better cross platform compatibility(Mobile/Web).
|
|
216
|
-
|
|
217
202
|
this.socket.on('connect', this.onConnect);
|
|
218
203
|
this.socket.on('data', this.onReceiveData);
|
|
219
204
|
this.socket.on('steps:added', function (data) {
|
|
@@ -233,10 +218,9 @@ var Channel = /*#__PURE__*/function (_Emitter) {
|
|
|
233
218
|
});
|
|
234
219
|
this.socket.on('participant:updated', function (_ref) {
|
|
235
220
|
var sessionId = _ref.sessionId,
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
221
|
+
timestamp = _ref.timestamp,
|
|
222
|
+
data = _ref.data,
|
|
223
|
+
clientId = _ref.clientId;
|
|
240
224
|
_this2.emit('participant:updated', _objectSpread({
|
|
241
225
|
sessionId: sessionId,
|
|
242
226
|
timestamp: timestamp,
|
|
@@ -245,8 +229,9 @@ var Channel = /*#__PURE__*/function (_Emitter) {
|
|
|
245
229
|
});
|
|
246
230
|
this.socket.on('metadata:changed', function (payload) {
|
|
247
231
|
_this2.emit('metadata:changed', payload);
|
|
248
|
-
});
|
|
232
|
+
});
|
|
249
233
|
|
|
234
|
+
// ESS-2916 namespace status event - lock/unlock
|
|
250
235
|
this.socket.on('status', function (data) {
|
|
251
236
|
_this2.emit('status', data);
|
|
252
237
|
});
|
|
@@ -258,16 +243,13 @@ var Channel = /*#__PURE__*/function (_Emitter) {
|
|
|
258
243
|
case 0:
|
|
259
244
|
_this2.connected = false;
|
|
260
245
|
logger("disconnect reason: ".concat(reason));
|
|
261
|
-
|
|
262
246
|
_this2.emit('disconnect', {
|
|
263
247
|
reason: reason
|
|
264
248
|
});
|
|
265
|
-
|
|
266
249
|
if (reason === 'io server disconnect' && _this2.socket) {
|
|
267
250
|
// The disconnection was initiated by the server, we need to reconnect manually.
|
|
268
251
|
_this2.socket.connect();
|
|
269
252
|
}
|
|
270
|
-
|
|
271
253
|
case 4:
|
|
272
254
|
case "end":
|
|
273
255
|
return _context.stop();
|
|
@@ -275,50 +257,25 @@ var Channel = /*#__PURE__*/function (_Emitter) {
|
|
|
275
257
|
}
|
|
276
258
|
}, _callee);
|
|
277
259
|
}));
|
|
278
|
-
|
|
279
260
|
return function (_x) {
|
|
280
261
|
return _ref2.apply(this, arguments);
|
|
281
262
|
};
|
|
282
|
-
}());
|
|
263
|
+
}());
|
|
283
264
|
|
|
265
|
+
// Socket error, including errors from `packetMiddleware`, `controllers` and `onconnect` and more. Paramter is a plain JSON object.
|
|
284
266
|
this.socket.on('error', function (error) {
|
|
285
267
|
_this2.emit('error', error);
|
|
286
|
-
}); // `connect_error`'s paramter type is `Error`.
|
|
287
|
-
// Ensure the error emit to the provider has the same structure, so we can handle them unified.
|
|
288
|
-
|
|
289
|
-
this.socket.on('connect_error', function (error) {
|
|
290
|
-
var measure = (0, _performance.stopMeasure)(_performance.MEASURE_NAME.SOCKET_CONNECT);
|
|
291
|
-
(0, _analytics.triggerAnalyticsEvent)({
|
|
292
|
-
eventAction: _const.EVENT_ACTION.CONNECTION,
|
|
293
|
-
attributes: {
|
|
294
|
-
eventStatus: _const.EVENT_STATUS.FAILURE,
|
|
295
|
-
error: error,
|
|
296
|
-
latency: measure === null || measure === void 0 ? void 0 : measure.duration,
|
|
297
|
-
documentAri: _this2.config.documentAri
|
|
298
|
-
}
|
|
299
|
-
}, _this2.analyticsClient); // If error received with `data`, it means the connection is rejected
|
|
300
|
-
// by the server on purpose for example no permission, so no need to
|
|
301
|
-
// keep the underneath connection, need to close. But some error like
|
|
302
|
-
// `xhr polling error` needs to retry.
|
|
303
|
-
|
|
304
|
-
if (!!error.data) {
|
|
305
|
-
var _this2$socket;
|
|
306
|
-
|
|
307
|
-
(_this2$socket = _this2.socket) === null || _this2$socket === void 0 ? void 0 : _this2$socket.close();
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
_this2.emit('error', {
|
|
311
|
-
message: error.message,
|
|
312
|
-
data: error.data
|
|
313
|
-
});
|
|
314
268
|
});
|
|
269
|
+
|
|
270
|
+
// `connect_error`'s paramter type is `Error`.
|
|
271
|
+
// Ensure the error emit to the provider has the same structure, so we can handle them unified.
|
|
272
|
+
this.socket.on('connect_error', this.onConnectError);
|
|
315
273
|
}
|
|
316
274
|
}, {
|
|
317
275
|
key: "fetchCatchup",
|
|
318
276
|
value: function () {
|
|
319
277
|
var _fetchCatchup = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(fromVersion) {
|
|
320
|
-
var _yield$this$config$pe, _yield$utils$requestS, doc, version, stepMaps, metadata, errorCatchup;
|
|
321
|
-
|
|
278
|
+
var _yield$this$config$pe, _yield$utils$requestS, doc, version, stepMaps, metadata, errorNotFound, errorCatchup;
|
|
322
279
|
return _regenerator.default.wrap(function _callee2$(_context2) {
|
|
323
280
|
while (1) {
|
|
324
281
|
switch (_context2.prev = _context2.next) {
|
|
@@ -333,39 +290,30 @@ var Channel = /*#__PURE__*/function (_Emitter) {
|
|
|
333
290
|
_context2.t4 = _objectSpread;
|
|
334
291
|
_context2.t5 = _objectSpread;
|
|
335
292
|
_context2.t6 = {};
|
|
336
|
-
|
|
337
293
|
if (!this.config.permissionTokenRefresh) {
|
|
338
294
|
_context2.next = 24;
|
|
339
295
|
break;
|
|
340
296
|
}
|
|
341
|
-
|
|
342
297
|
_context2.next = 11;
|
|
343
298
|
return this.config.permissionTokenRefresh();
|
|
344
|
-
|
|
345
299
|
case 11:
|
|
346
300
|
_context2.t9 = _yield$this$config$pe = _context2.sent;
|
|
347
301
|
_context2.t8 = _context2.t9 !== null;
|
|
348
|
-
|
|
349
302
|
if (!_context2.t8) {
|
|
350
303
|
_context2.next = 15;
|
|
351
304
|
break;
|
|
352
305
|
}
|
|
353
|
-
|
|
354
306
|
_context2.t8 = _yield$this$config$pe !== void 0;
|
|
355
|
-
|
|
356
307
|
case 15:
|
|
357
308
|
if (!_context2.t8) {
|
|
358
309
|
_context2.next = 19;
|
|
359
310
|
break;
|
|
360
311
|
}
|
|
361
|
-
|
|
362
312
|
_context2.t10 = _yield$this$config$pe;
|
|
363
313
|
_context2.next = 20;
|
|
364
314
|
break;
|
|
365
|
-
|
|
366
315
|
case 19:
|
|
367
316
|
_context2.t10 = undefined;
|
|
368
|
-
|
|
369
317
|
case 20:
|
|
370
318
|
_context2.t11 = _context2.t10;
|
|
371
319
|
_context2.t7 = {
|
|
@@ -373,10 +321,8 @@ var Channel = /*#__PURE__*/function (_Emitter) {
|
|
|
373
321
|
};
|
|
374
322
|
_context2.next = 25;
|
|
375
323
|
break;
|
|
376
|
-
|
|
377
324
|
case 24:
|
|
378
325
|
_context2.t7 = {};
|
|
379
|
-
|
|
380
326
|
case 25:
|
|
381
327
|
_context2.t12 = _context2.t7;
|
|
382
328
|
_context2.t13 = (0, _context2.t5)(_context2.t6, _context2.t12);
|
|
@@ -396,7 +342,6 @@ var Channel = /*#__PURE__*/function (_Emitter) {
|
|
|
396
342
|
};
|
|
397
343
|
_context2.next = 34;
|
|
398
344
|
return _context2.t0.requestService.call(_context2.t0, _context2.t1, _context2.t18);
|
|
399
|
-
|
|
400
345
|
case 34:
|
|
401
346
|
_yield$utils$requestS = _context2.sent;
|
|
402
347
|
doc = _yield$utils$requestS.doc;
|
|
@@ -409,10 +354,23 @@ var Channel = /*#__PURE__*/function (_Emitter) {
|
|
|
409
354
|
stepMaps: stepMaps,
|
|
410
355
|
metadata: metadata
|
|
411
356
|
});
|
|
412
|
-
|
|
413
357
|
case 42:
|
|
414
358
|
_context2.prev = 42;
|
|
415
359
|
_context2.t19 = _context2["catch"](0);
|
|
360
|
+
if (!(_context2.t19.code === 404)) {
|
|
361
|
+
_context2.next = 48;
|
|
362
|
+
break;
|
|
363
|
+
}
|
|
364
|
+
errorNotFound = {
|
|
365
|
+
message: _errorCodeMapper.ErrorCodeMapper.documentNotFound.message,
|
|
366
|
+
data: {
|
|
367
|
+
status: _context2.t19.code,
|
|
368
|
+
code: _errorCodeMapper.ErrorCodeMapper.documentNotFound.code
|
|
369
|
+
}
|
|
370
|
+
};
|
|
371
|
+
this.emit('error', errorNotFound);
|
|
372
|
+
return _context2.abrupt("return", {});
|
|
373
|
+
case 48:
|
|
416
374
|
logger("Can't fetch the catchup", _context2.t19.message);
|
|
417
375
|
errorCatchup = {
|
|
418
376
|
message: _errorCodeMapper.ErrorCodeMapper.catchupFail.message,
|
|
@@ -423,32 +381,27 @@ var Channel = /*#__PURE__*/function (_Emitter) {
|
|
|
423
381
|
};
|
|
424
382
|
this.emit('error', errorCatchup);
|
|
425
383
|
return _context2.abrupt("return", {});
|
|
426
|
-
|
|
427
|
-
case 48:
|
|
384
|
+
case 52:
|
|
428
385
|
case "end":
|
|
429
386
|
return _context2.stop();
|
|
430
387
|
}
|
|
431
388
|
}
|
|
432
389
|
}, _callee2, this, [[0, 42]]);
|
|
433
390
|
}));
|
|
434
|
-
|
|
435
391
|
function fetchCatchup(_x2) {
|
|
436
392
|
return _fetchCatchup.apply(this, arguments);
|
|
437
393
|
}
|
|
438
|
-
|
|
439
394
|
return fetchCatchup;
|
|
440
395
|
}()
|
|
441
396
|
/**
|
|
442
397
|
* Send message to service. Timestamp will be added server side.
|
|
443
398
|
*/
|
|
444
|
-
|
|
445
399
|
}, {
|
|
446
400
|
key: "broadcast",
|
|
447
401
|
value: function broadcast(type, data, callback) {
|
|
448
402
|
if (!this.connected || !this.socket) {
|
|
449
403
|
return;
|
|
450
404
|
}
|
|
451
|
-
|
|
452
405
|
this.socket.emit('broadcast', _objectSpread({
|
|
453
406
|
type: type
|
|
454
407
|
}, data), callback);
|
|
@@ -459,7 +412,6 @@ var Channel = /*#__PURE__*/function (_Emitter) {
|
|
|
459
412
|
if (!this.connected || !this.socket) {
|
|
460
413
|
return;
|
|
461
414
|
}
|
|
462
|
-
|
|
463
415
|
this.socket.emit('metadata', metadata);
|
|
464
416
|
}
|
|
465
417
|
}, {
|
|
@@ -468,14 +420,12 @@ var Channel = /*#__PURE__*/function (_Emitter) {
|
|
|
468
420
|
if (!this.connected || !this.socket) {
|
|
469
421
|
return;
|
|
470
422
|
}
|
|
471
|
-
|
|
472
423
|
this.socket.emit('presence:joined');
|
|
473
424
|
}
|
|
474
425
|
}, {
|
|
475
426
|
key: "disconnect",
|
|
476
427
|
value: function disconnect() {
|
|
477
428
|
this.unsubscribeAll();
|
|
478
|
-
|
|
479
429
|
if (this.socket) {
|
|
480
430
|
this.socket.close();
|
|
481
431
|
this.socket = null;
|
|
@@ -484,5 +434,4 @@ var Channel = /*#__PURE__*/function (_Emitter) {
|
|
|
484
434
|
}]);
|
|
485
435
|
return Channel;
|
|
486
436
|
}(_emitter.Emitter);
|
|
487
|
-
|
|
488
437
|
exports.Channel = Channel;
|
|
@@ -15,12 +15,10 @@ var socketIOReasons = {
|
|
|
15
15
|
TRANSPORT_ERROR: 'transport error',
|
|
16
16
|
// The connection was closed (example: the user has lost connection, or the network was changed from WiFi to 4G)
|
|
17
17
|
PING_TIMEOUT: 'ping timeout' // The connection has encountered an error (example: the server was killed during a HTTP long-polling cycle)
|
|
18
|
-
|
|
19
18
|
};
|
|
20
19
|
exports.socketIOReasons = socketIOReasons;
|
|
21
20
|
var DisconnectReason;
|
|
22
21
|
exports.DisconnectReason = DisconnectReason;
|
|
23
|
-
|
|
24
22
|
(function (DisconnectReason) {
|
|
25
23
|
DisconnectReason["CLIENT_DISCONNECT"] = "CLIENT_DISCONNECT";
|
|
26
24
|
DisconnectReason["SERVER_DISCONNECT"] = "SERVER_DISCONNECT";
|
package/dist/cjs/emitter.js
CHANGED
|
@@ -1,26 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.Emitter = void 0;
|
|
9
|
-
|
|
10
8
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
|
-
|
|
12
9
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
13
|
-
|
|
14
10
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
15
|
-
|
|
16
11
|
var _eventemitter = require("eventemitter2");
|
|
17
|
-
|
|
18
12
|
var Emitter = /*#__PURE__*/function () {
|
|
19
13
|
function Emitter() {
|
|
20
14
|
(0, _classCallCheck2.default)(this, Emitter);
|
|
21
15
|
(0, _defineProperty2.default)(this, "eventEmitter", new _eventemitter.EventEmitter2());
|
|
22
16
|
}
|
|
23
|
-
|
|
24
17
|
(0, _createClass2.default)(Emitter, [{
|
|
25
18
|
key: "emit",
|
|
26
19
|
value:
|
|
@@ -31,30 +24,30 @@ var Emitter = /*#__PURE__*/function () {
|
|
|
31
24
|
this.eventEmitter.emit(evt, data);
|
|
32
25
|
return this;
|
|
33
26
|
}
|
|
27
|
+
|
|
34
28
|
/**
|
|
35
29
|
* Subscribe to events emitted by this provider
|
|
36
30
|
*/
|
|
37
|
-
|
|
38
31
|
}, {
|
|
39
32
|
key: "on",
|
|
40
33
|
value: function on(evt, handler) {
|
|
41
34
|
this.eventEmitter.on(evt, handler);
|
|
42
35
|
return this;
|
|
43
36
|
}
|
|
37
|
+
|
|
44
38
|
/**
|
|
45
39
|
* Unsubscribe from events emitted by this provider
|
|
46
40
|
*/
|
|
47
|
-
|
|
48
41
|
}, {
|
|
49
42
|
key: "off",
|
|
50
43
|
value: function off(evt, handler) {
|
|
51
44
|
this.eventEmitter.off(evt, handler);
|
|
52
45
|
return this;
|
|
53
46
|
}
|
|
47
|
+
|
|
54
48
|
/**
|
|
55
49
|
* Unsubscribe from all events emitted by this provider.
|
|
56
50
|
*/
|
|
57
|
-
|
|
58
51
|
}, {
|
|
59
52
|
key: "unsubscribeAll",
|
|
60
53
|
value: function unsubscribeAll(evt) {
|
|
@@ -64,5 +57,4 @@ var Emitter = /*#__PURE__*/function () {
|
|
|
64
57
|
}]);
|
|
65
58
|
return Emitter;
|
|
66
59
|
}();
|
|
67
|
-
|
|
68
60
|
exports.Emitter = Emitter;
|