@atlaskit/collab-provider 9.25.10 → 9.25.11

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 CHANGED
@@ -1,5 +1,11 @@
1
1
  # @atlaskit/collab-provider
2
2
 
3
+ ## 9.25.11
4
+
5
+ ### Patch Changes
6
+
7
+ - [#80629](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/80629) [`7cc52a784224`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/7cc52a784224) - [ESS-4515] Collab provider: Do not use polling by default, only as safe-fail if WebSocket doesn't work
8
+
3
9
  ## 9.25.10
4
10
 
5
11
  ### Patch Changes
@@ -9,6 +9,7 @@ exports.createSocketIOSocket = createSocketIOSocket;
9
9
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
10
  var _provider = require("./provider");
11
11
  var _socket = require("socket.io-client");
12
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
12
13
  var _utils = require("./helpers/utils");
13
14
  var _config = require("./config");
14
15
  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; }
@@ -16,22 +17,54 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
16
17
  function createSocketIOSocket(url, auth, productInfo) {
17
18
  var _URL = new URL(url),
18
19
  pathname = _URL.pathname;
20
+ if ((0, _platformFeatureFlags.getBooleanFF)('platform.editor.ncs.try-connect-websocket-first')) {
21
+ var socket = (0, _socket.io)(url, {
22
+ reconnectionDelayMax: _config.SOCKET_IO_OPTIONS.RECONNECTION_DELAY_MAX,
23
+ reconnectionDelay: _config.SOCKET_IO_OPTIONS.RECONNECTION_DELAY,
24
+ randomizationFactor: _config.SOCKET_IO_OPTIONS.RANDOMIZATION_FACTOR,
25
+ closeOnBeforeunload: false,
26
+ withCredentials: true,
27
+ transports: ['websocket'],
28
+ path: "/".concat(pathname.split('/')[1], "/socket.io"),
29
+ auth: auth,
30
+ extraHeaders: {
31
+ 'x-product': (0, _utils.getProduct)(productInfo),
32
+ 'x-subproduct': (0, _utils.getSubProduct)(productInfo)
33
+ }
34
+ });
35
+ socket.on('connect_error', function (error) {
36
+ // There is no good documentation about this error, howevert this is how socket.io is emiting the websocket error
37
+ // see: https://github.com/socketio/engine.io-client/blob/6.0.x/lib/transports/websocket.ts#L116
38
+ var isWebSocketError = (error.message || '') === 'websocket error';
19
39
 
20
- // to limit the reconnection flooding towards collab service, here we set the reconnectionDelayMax to 128s.
21
- return (0, _socket.io)(url, {
22
- reconnectionDelayMax: _config.SOCKET_IO_OPTIONS.RECONNECTION_DELAY_MAX,
23
- reconnectionDelay: _config.SOCKET_IO_OPTIONS.RECONNECTION_DELAY,
24
- randomizationFactor: _config.SOCKET_IO_OPTIONS.RANDOMIZATION_FACTOR,
25
- closeOnBeforeunload: false,
26
- withCredentials: true,
27
- transports: ['polling', 'websocket'],
28
- path: "/".concat(pathname.split('/')[1], "/socket.io"),
29
- auth: auth,
30
- extraHeaders: {
31
- 'x-product': (0, _utils.getProduct)(productInfo),
32
- 'x-subproduct': (0, _utils.getSubProduct)(productInfo)
33
- }
34
- });
40
+ // Neither this TransportError type is well documented
41
+ // see: https://github.com/socketio/engine.io-client/blob/main/lib/transport.ts#L11
42
+ var isTransportError =
43
+ // @ts-expect-error
44
+ error.type === 'TransportError';
45
+
46
+ // We are checking both situations as a safe measure
47
+ if (isWebSocketError || isTransportError) {
48
+ socket.io.opts.transports = ['polling', 'websocket'];
49
+ }
50
+ });
51
+ return socket;
52
+ } else {
53
+ return (0, _socket.io)(url, {
54
+ reconnectionDelayMax: _config.SOCKET_IO_OPTIONS.RECONNECTION_DELAY_MAX,
55
+ reconnectionDelay: _config.SOCKET_IO_OPTIONS.RECONNECTION_DELAY,
56
+ randomizationFactor: _config.SOCKET_IO_OPTIONS.RANDOMIZATION_FACTOR,
57
+ closeOnBeforeunload: false,
58
+ withCredentials: true,
59
+ transports: ['polling', 'websocket'],
60
+ path: "/".concat(pathname.split('/')[1], "/socket.io"),
61
+ auth: auth,
62
+ extraHeaders: {
63
+ 'x-product': (0, _utils.getProduct)(productInfo),
64
+ 'x-subproduct': (0, _utils.getSubProduct)(productInfo)
65
+ }
66
+ });
67
+ }
35
68
  }
36
69
  function createSocketIOCollabProvider(config) {
37
70
  return new _provider.Provider(_objectSpread(_objectSpread({}, config), {}, {
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.version = exports.nextMajorVersion = exports.name = void 0;
7
7
  var name = exports.name = "@atlaskit/collab-provider";
8
- var version = exports.version = "9.25.10";
8
+ var version = exports.version = "9.25.11";
9
9
  var nextMajorVersion = exports.nextMajorVersion = function nextMajorVersion() {
10
10
  return [Number(version.split('.')[0]) + 1, 0, 0].join('.');
11
11
  };
@@ -1,27 +1,60 @@
1
1
  import { Provider } from './provider';
2
2
  import { io } from 'socket.io-client';
3
+ import { getBooleanFF } from '@atlaskit/platform-feature-flags';
3
4
  import { getProduct, getSubProduct } from './helpers/utils';
4
5
  import { SOCKET_IO_OPTIONS } from './config';
5
6
  export function createSocketIOSocket(url, auth, productInfo) {
6
7
  const {
7
8
  pathname
8
9
  } = new URL(url);
10
+ if (getBooleanFF('platform.editor.ncs.try-connect-websocket-first')) {
11
+ const socket = io(url, {
12
+ reconnectionDelayMax: SOCKET_IO_OPTIONS.RECONNECTION_DELAY_MAX,
13
+ reconnectionDelay: SOCKET_IO_OPTIONS.RECONNECTION_DELAY,
14
+ randomizationFactor: SOCKET_IO_OPTIONS.RANDOMIZATION_FACTOR,
15
+ closeOnBeforeunload: false,
16
+ withCredentials: true,
17
+ transports: ['websocket'],
18
+ path: `/${pathname.split('/')[1]}/socket.io`,
19
+ auth,
20
+ extraHeaders: {
21
+ 'x-product': getProduct(productInfo),
22
+ 'x-subproduct': getSubProduct(productInfo)
23
+ }
24
+ });
25
+ socket.on('connect_error', error => {
26
+ // There is no good documentation about this error, howevert this is how socket.io is emiting the websocket error
27
+ // see: https://github.com/socketio/engine.io-client/blob/6.0.x/lib/transports/websocket.ts#L116
28
+ const isWebSocketError = (error.message || '') === 'websocket error';
9
29
 
10
- // to limit the reconnection flooding towards collab service, here we set the reconnectionDelayMax to 128s.
11
- return io(url, {
12
- reconnectionDelayMax: SOCKET_IO_OPTIONS.RECONNECTION_DELAY_MAX,
13
- reconnectionDelay: SOCKET_IO_OPTIONS.RECONNECTION_DELAY,
14
- randomizationFactor: SOCKET_IO_OPTIONS.RANDOMIZATION_FACTOR,
15
- closeOnBeforeunload: false,
16
- withCredentials: true,
17
- transports: ['polling', 'websocket'],
18
- path: `/${pathname.split('/')[1]}/socket.io`,
19
- auth,
20
- extraHeaders: {
21
- 'x-product': getProduct(productInfo),
22
- 'x-subproduct': getSubProduct(productInfo)
23
- }
24
- });
30
+ // Neither this TransportError type is well documented
31
+ // see: https://github.com/socketio/engine.io-client/blob/main/lib/transport.ts#L11
32
+ const isTransportError =
33
+ // @ts-expect-error
34
+ error.type === 'TransportError';
35
+
36
+ // We are checking both situations as a safe measure
37
+ if (isWebSocketError || isTransportError) {
38
+ socket.io.opts.transports = ['polling', 'websocket'];
39
+ }
40
+ });
41
+ return socket;
42
+ } else {
43
+ return io(url, {
44
+ reconnectionDelayMax: SOCKET_IO_OPTIONS.RECONNECTION_DELAY_MAX,
45
+ reconnectionDelay: SOCKET_IO_OPTIONS.RECONNECTION_DELAY,
46
+ randomizationFactor: SOCKET_IO_OPTIONS.RANDOMIZATION_FACTOR,
47
+ closeOnBeforeunload: false,
48
+ withCredentials: true,
49
+ transports: ['polling', 'websocket'],
50
+ path: `/${pathname.split('/')[1]}/socket.io`,
51
+ auth,
52
+ extraHeaders: {
53
+ 'x-product': getProduct(productInfo),
54
+ 'x-subproduct': getSubProduct(productInfo)
55
+ }
56
+ });
57
+ }
25
58
  }
26
59
  export function createSocketIOCollabProvider(config) {
27
60
  return new Provider({
@@ -1,5 +1,5 @@
1
1
  export const name = "@atlaskit/collab-provider";
2
- export const version = "9.25.10";
2
+ export const version = "9.25.11";
3
3
  export const nextMajorVersion = () => {
4
4
  return [Number(version.split('.')[0]) + 1, 0, 0].join('.');
5
5
  };
@@ -3,27 +3,60 @@ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbol
3
3
  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
4
  import { Provider } from './provider';
5
5
  import { io } from 'socket.io-client';
6
+ import { getBooleanFF } from '@atlaskit/platform-feature-flags';
6
7
  import { getProduct, getSubProduct } from './helpers/utils';
7
8
  import { SOCKET_IO_OPTIONS } from './config';
8
9
  export function createSocketIOSocket(url, auth, productInfo) {
9
10
  var _URL = new URL(url),
10
11
  pathname = _URL.pathname;
12
+ if (getBooleanFF('platform.editor.ncs.try-connect-websocket-first')) {
13
+ var socket = io(url, {
14
+ reconnectionDelayMax: SOCKET_IO_OPTIONS.RECONNECTION_DELAY_MAX,
15
+ reconnectionDelay: SOCKET_IO_OPTIONS.RECONNECTION_DELAY,
16
+ randomizationFactor: SOCKET_IO_OPTIONS.RANDOMIZATION_FACTOR,
17
+ closeOnBeforeunload: false,
18
+ withCredentials: true,
19
+ transports: ['websocket'],
20
+ path: "/".concat(pathname.split('/')[1], "/socket.io"),
21
+ auth: auth,
22
+ extraHeaders: {
23
+ 'x-product': getProduct(productInfo),
24
+ 'x-subproduct': getSubProduct(productInfo)
25
+ }
26
+ });
27
+ socket.on('connect_error', function (error) {
28
+ // There is no good documentation about this error, howevert this is how socket.io is emiting the websocket error
29
+ // see: https://github.com/socketio/engine.io-client/blob/6.0.x/lib/transports/websocket.ts#L116
30
+ var isWebSocketError = (error.message || '') === 'websocket error';
11
31
 
12
- // to limit the reconnection flooding towards collab service, here we set the reconnectionDelayMax to 128s.
13
- return io(url, {
14
- reconnectionDelayMax: SOCKET_IO_OPTIONS.RECONNECTION_DELAY_MAX,
15
- reconnectionDelay: SOCKET_IO_OPTIONS.RECONNECTION_DELAY,
16
- randomizationFactor: SOCKET_IO_OPTIONS.RANDOMIZATION_FACTOR,
17
- closeOnBeforeunload: false,
18
- withCredentials: true,
19
- transports: ['polling', 'websocket'],
20
- path: "/".concat(pathname.split('/')[1], "/socket.io"),
21
- auth: auth,
22
- extraHeaders: {
23
- 'x-product': getProduct(productInfo),
24
- 'x-subproduct': getSubProduct(productInfo)
25
- }
26
- });
32
+ // Neither this TransportError type is well documented
33
+ // see: https://github.com/socketio/engine.io-client/blob/main/lib/transport.ts#L11
34
+ var isTransportError =
35
+ // @ts-expect-error
36
+ error.type === 'TransportError';
37
+
38
+ // We are checking both situations as a safe measure
39
+ if (isWebSocketError || isTransportError) {
40
+ socket.io.opts.transports = ['polling', 'websocket'];
41
+ }
42
+ });
43
+ return socket;
44
+ } else {
45
+ return io(url, {
46
+ reconnectionDelayMax: SOCKET_IO_OPTIONS.RECONNECTION_DELAY_MAX,
47
+ reconnectionDelay: SOCKET_IO_OPTIONS.RECONNECTION_DELAY,
48
+ randomizationFactor: SOCKET_IO_OPTIONS.RANDOMIZATION_FACTOR,
49
+ closeOnBeforeunload: false,
50
+ withCredentials: true,
51
+ transports: ['polling', 'websocket'],
52
+ path: "/".concat(pathname.split('/')[1], "/socket.io"),
53
+ auth: auth,
54
+ extraHeaders: {
55
+ 'x-product': getProduct(productInfo),
56
+ 'x-subproduct': getSubProduct(productInfo)
57
+ }
58
+ });
59
+ }
27
60
  }
28
61
  export function createSocketIOCollabProvider(config) {
29
62
  return new Provider(_objectSpread(_objectSpread({}, config), {}, {
@@ -1,5 +1,5 @@
1
1
  export var name = "@atlaskit/collab-provider";
2
- export var version = "9.25.10";
2
+ export var version = "9.25.11";
3
3
  export var nextMajorVersion = function nextMajorVersion() {
4
4
  return [Number(version.split('.')[0]) + 1, 0, 0].join('.');
5
5
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/collab-provider",
3
- "version": "9.25.10",
3
+ "version": "9.25.11",
4
4
  "description": "A provider for collaborative editing.",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -75,6 +75,9 @@
75
75
  "platform-feature-flags": {
76
76
  "platform.editor.live-pages-expand-divergence": {
77
77
  "type": "boolean"
78
+ },
79
+ "platform.editor.ncs.try-connect-websocket-first": {
80
+ "type": "boolean"
78
81
  }
79
82
  }
80
83
  }