@atlaskit/collab-provider 25.1.6 → 25.2.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 CHANGED
@@ -1,5 +1,30 @@
1
1
  # @atlaskit/collab-provider
2
2
 
3
+ ## 25.2.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [`f330bc1939dac`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/f330bc1939dac) -
8
+ Extend websocket-only transport to collab editing, behind the
9
+ platform-editor-collab-edit-websocket-only feature gate (excludes long-polling-only tenants).
10
+ Previously websocket-only applied to presence only.
11
+ - Updated dependencies
12
+
13
+ ## 25.2.0
14
+
15
+ ### Minor Changes
16
+
17
+ - [`23f2823b17126`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/23f2823b17126) -
18
+ Add a `DOCUMENT_BLOCKED` provider error and map the NCS `ARI_BLACKLISTED` (423) error to it.
19
+ Previously `ARI_BLACKLISTED` had no mapping and was silently dropped by the provider, so products
20
+ could not react to a blocked (blacklisted) document. The new mapping is gated behind
21
+ `platform_editor_blocked_document_ux`; when the gate is off the error is still dropped, preserving
22
+ existing behaviour.
23
+
24
+ ### Patch Changes
25
+
26
+ - Updated dependencies
27
+
3
28
  ## 25.1.6
4
29
 
5
30
  ### Patch Changes
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.errorCodeMapper = void 0;
7
+ var _fg = require("@atlaskit/platform-feature-flags/fg");
7
8
  var _ncsErrors = require("./ncs-errors");
8
9
  var _internalErrors = require("./internal-errors");
9
10
  var _collab = require("@atlaskit/editor-common/collab");
@@ -58,6 +59,19 @@ var errorCodeMapper = exports.errorCodeMapper = function errorCodeMapper(error)
58
59
  message: 'The document is currently not available, please try again later',
59
60
  recoverable: true
60
61
  };
62
+ case _ncsErrors.NCS_ERROR_CODE.ARI_BLACKLISTED:
63
+ // The document ARI has been blocked (e.g. via the documentari kill switch). This is not
64
+ // recoverable, so emit a distinct error the product can use to disable editing and tell
65
+ // the user the document is blocked, rather than swallowing it as an unmapped error.
66
+ if ((0, _fg.fg)('platform_editor_blocked_document_ux')) {
67
+ return {
68
+ code: _collab.PROVIDER_ERROR_CODE.DOCUMENT_BLOCKED,
69
+ message: 'The document is blocked and cannot be edited',
70
+ recoverable: false,
71
+ status: 423
72
+ };
73
+ }
74
+ return;
61
75
  case _ncsErrors.NCS_ERROR_CODE.DYNAMO_ERROR:
62
76
  return {
63
77
  code: _collab.PROVIDER_ERROR_CODE.FAIL_TO_SAVE,
@@ -17,6 +17,7 @@ var NCS_ERROR_CODE = exports.NCS_ERROR_CODE = /*#__PURE__*/function (NCS_ERROR_C
17
17
  NCS_ERROR_CODE["NAMESPACE_NOT_FOUND"] = "NAMESPACE_NOT_FOUND";
18
18
  NCS_ERROR_CODE["TENANT_INSTANCE_MAINTENANCE"] = "TENANT_INSTANCE_MAINTENANCE";
19
19
  NCS_ERROR_CODE["LOCKED_DOCUMENT"] = "LOCKED_DOCUMENT";
20
+ NCS_ERROR_CODE["ARI_BLACKLISTED"] = "ARI_BLACKLISTED";
20
21
  NCS_ERROR_CODE["EMPTY_BROADCAST"] = "EMPTY_BROADCAST";
21
22
  NCS_ERROR_CODE["DYNAMO_ERROR"] = "DYNAMO_ERROR";
22
23
  NCS_ERROR_CODE["INVALID_ACTIVATION_ID"] = "INVALID_ACTIVATION_ID";
@@ -36,6 +37,12 @@ var NCS_ERROR_CODE = exports.NCS_ERROR_CODE = /*#__PURE__*/function (NCS_ERROR_C
36
37
  * This might be because invalid ADF has been written to a document, as it was not validated correctly.
37
38
  */
38
39
  // - Less common back-end errors
40
+ /**
41
+ * The document ARI has been blacklisted (blocked) by NCS, e.g. via the documentari kill switch
42
+ * https://switcheroo.atlassian.com/ui/gates/1a5f36bd-0eb6-4634-ba32-ae325174edb8/key/documentari_kill_switch
43
+ * NCS rejects the connection with a 423 status. Unlike a temporary namespace lock, this is not
44
+ * expected to clear on its own.
45
+ */
39
46
  /**
40
47
  * The client is trying to send too many messages or messages that are too large. This not expected to be a standard
41
48
  * operating condition and should only ever indicate a frontend bug.
@@ -19,20 +19,47 @@ function createSocketIOSocket(url, auth, productInfo, isPresenceOnly, analyticsH
19
19
  pathname = _URL.pathname,
20
20
  hostname = _URL.hostname;
21
21
  var socketIOOptions = _config.SOCKET_IO_OPTIONS;
22
- // Polling first
22
+ // Default: polling first, with WebSocket upgrade fallback
23
23
  var transports = ['polling', 'websocket'];
24
- if (isPresenceOnly) {
25
- // Presence-specific configuration
26
- if ((0, _fg.fg)('platform-editor-presence-websocket-only')) {
27
- // https://socket.io/docs/v4/client-options/#transports
28
- // WebSocket first, if fails, try polling
29
- transports = ['websocket'];
30
- }
31
- socketIOOptions = _config.SOCKET_IO_OPTIONS_WITH_HIGH_JITTER;
32
- } else {
33
- if ((0, _utils.isGCPtenant)(hostname) && (0, _fg.fg)('collab_edit_via_websocket_only_for_gcp')) {
34
- transports = ['websocket'];
24
+
25
+ // Determine transport strategy based on connection type and tenant.
26
+ // https://socket.io/docs/v4/client-options/#transports
27
+
28
+ var getConnectionCase = function getConnectionCase() {
29
+ if (isPresenceOnly) {
30
+ // Presence connections: all tenants (commercial, GCP, IC, etc.)
31
+ return 'presence';
32
+ } else if ((0, _utils.isGCPtenant)(hostname)) {
33
+ // Collab editing: GCP tenant
34
+ return 'gcp-collab';
35
+ } else {
36
+ // Collab editing: commercial and all other tenants
37
+ return 'collab-edit';
35
38
  }
39
+ };
40
+ switch (getConnectionCase()) {
41
+ case 'presence':
42
+ // Presence for all tenants (commercial, GCP, IC, …): WebSocket only when flag is enabled
43
+ socketIOOptions = _config.SOCKET_IO_OPTIONS_WITH_HIGH_JITTER;
44
+ if ((0, _fg.fg)('platform-editor-presence-websocket-only')) {
45
+ transports = ['websocket'];
46
+ }
47
+ break;
48
+ case 'gcp-collab':
49
+ // GCP: use WebSocket for all collab editing as well
50
+ if ((0, _fg.fg)('collab_edit_via_websocket_only_for_gcp')) {
51
+ transports = ['websocket'];
52
+ }
53
+ break;
54
+ case 'collab-edit':
55
+ // Collab edit (commercial and all other tenants): WebSocket only when flag is enabled, otherwise polling fallback
56
+ if ((0, _fg.fg)('platform-editor-collab-edit-websocket-only')) {
57
+ transports = ['websocket'];
58
+ }
59
+ break;
60
+ default:
61
+ // Default: polling first, with WebSocket upgrade fallback
62
+ break;
36
63
  }
37
64
  var extraHeaders = {
38
65
  'x-product': (0, _utils.getProduct)(productInfo),
@@ -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 = "25.1.5";
8
+ var version = exports.version = "25.2.0";
9
9
  var nextMajorVersion = exports.nextMajorVersion = function nextMajorVersion() {
10
10
  return [Number(version.split('.')[0]) + 1, 0, 0].join('.');
11
11
  };
@@ -1,3 +1,4 @@
1
+ import { fg } from '@atlaskit/platform-feature-flags/fg';
1
2
  import { NCS_ERROR_CODE } from './ncs-errors';
2
3
  import { INTERNAL_ERROR_CODE } from './internal-errors';
3
4
  import { PROVIDER_ERROR_CODE } from '@atlaskit/editor-common/collab';
@@ -53,6 +54,19 @@ export const errorCodeMapper = error => {
53
54
  message: 'The document is currently not available, please try again later',
54
55
  recoverable: true
55
56
  };
57
+ case NCS_ERROR_CODE.ARI_BLACKLISTED:
58
+ // The document ARI has been blocked (e.g. via the documentari kill switch). This is not
59
+ // recoverable, so emit a distinct error the product can use to disable editing and tell
60
+ // the user the document is blocked, rather than swallowing it as an unmapped error.
61
+ if (fg('platform_editor_blocked_document_ux')) {
62
+ return {
63
+ code: PROVIDER_ERROR_CODE.DOCUMENT_BLOCKED,
64
+ message: 'The document is blocked and cannot be edited',
65
+ recoverable: false,
66
+ status: 423
67
+ };
68
+ }
69
+ return;
56
70
  case NCS_ERROR_CODE.DYNAMO_ERROR:
57
71
  return {
58
72
  code: PROVIDER_ERROR_CODE.FAIL_TO_SAVE,
@@ -11,6 +11,7 @@ export let NCS_ERROR_CODE = /*#__PURE__*/function (NCS_ERROR_CODE) {
11
11
  NCS_ERROR_CODE["NAMESPACE_NOT_FOUND"] = "NAMESPACE_NOT_FOUND";
12
12
  NCS_ERROR_CODE["TENANT_INSTANCE_MAINTENANCE"] = "TENANT_INSTANCE_MAINTENANCE";
13
13
  NCS_ERROR_CODE["LOCKED_DOCUMENT"] = "LOCKED_DOCUMENT";
14
+ NCS_ERROR_CODE["ARI_BLACKLISTED"] = "ARI_BLACKLISTED";
14
15
  NCS_ERROR_CODE["EMPTY_BROADCAST"] = "EMPTY_BROADCAST";
15
16
  NCS_ERROR_CODE["DYNAMO_ERROR"] = "DYNAMO_ERROR";
16
17
  NCS_ERROR_CODE["INVALID_ACTIVATION_ID"] = "INVALID_ACTIVATION_ID";
@@ -39,6 +40,13 @@ export let NCS_ERROR_CODE = /*#__PURE__*/function (NCS_ERROR_CODE) {
39
40
 
40
41
  // - Less common back-end errors
41
42
 
43
+ /**
44
+ * The document ARI has been blacklisted (blocked) by NCS, e.g. via the documentari kill switch
45
+ * https://switcheroo.atlassian.com/ui/gates/1a5f36bd-0eb6-4634-ba32-ae325174edb8/key/documentari_kill_switch
46
+ * NCS rejects the connection with a 423 status. Unlike a temporary namespace lock, this is not
47
+ * expected to clear on its own.
48
+ */
49
+
42
50
  /**
43
51
  * The client is trying to send too many messages or messages that are too large. This not expected to be a standard
44
52
  * operating condition and should only ever indicate a frontend bug.
@@ -9,20 +9,47 @@ export function createSocketIOSocket(url, auth, productInfo, isPresenceOnly, ana
9
9
  hostname
10
10
  } = new URL(url);
11
11
  let socketIOOptions = SOCKET_IO_OPTIONS;
12
- // Polling first
12
+ // Default: polling first, with WebSocket upgrade fallback
13
13
  let transports = ['polling', 'websocket'];
14
- if (isPresenceOnly) {
15
- // Presence-specific configuration
16
- if (fg('platform-editor-presence-websocket-only')) {
17
- // https://socket.io/docs/v4/client-options/#transports
18
- // WebSocket first, if fails, try polling
19
- transports = ['websocket'];
20
- }
21
- socketIOOptions = SOCKET_IO_OPTIONS_WITH_HIGH_JITTER;
22
- } else {
23
- if (isGCPtenant(hostname) && fg('collab_edit_via_websocket_only_for_gcp')) {
24
- transports = ['websocket'];
14
+
15
+ // Determine transport strategy based on connection type and tenant.
16
+ // https://socket.io/docs/v4/client-options/#transports
17
+
18
+ const getConnectionCase = () => {
19
+ if (isPresenceOnly) {
20
+ // Presence connections: all tenants (commercial, GCP, IC, etc.)
21
+ return 'presence';
22
+ } else if (isGCPtenant(hostname)) {
23
+ // Collab editing: GCP tenant
24
+ return 'gcp-collab';
25
+ } else {
26
+ // Collab editing: commercial and all other tenants
27
+ return 'collab-edit';
25
28
  }
29
+ };
30
+ switch (getConnectionCase()) {
31
+ case 'presence':
32
+ // Presence for all tenants (commercial, GCP, IC, …): WebSocket only when flag is enabled
33
+ socketIOOptions = SOCKET_IO_OPTIONS_WITH_HIGH_JITTER;
34
+ if (fg('platform-editor-presence-websocket-only')) {
35
+ transports = ['websocket'];
36
+ }
37
+ break;
38
+ case 'gcp-collab':
39
+ // GCP: use WebSocket for all collab editing as well
40
+ if (fg('collab_edit_via_websocket_only_for_gcp')) {
41
+ transports = ['websocket'];
42
+ }
43
+ break;
44
+ case 'collab-edit':
45
+ // Collab edit (commercial and all other tenants): WebSocket only when flag is enabled, otherwise polling fallback
46
+ if (fg('platform-editor-collab-edit-websocket-only')) {
47
+ transports = ['websocket'];
48
+ }
49
+ break;
50
+ default:
51
+ // Default: polling first, with WebSocket upgrade fallback
52
+ break;
26
53
  }
27
54
  const extraHeaders = {
28
55
  'x-product': getProduct(productInfo),
@@ -1,5 +1,5 @@
1
1
  export const name = "@atlaskit/collab-provider";
2
- export const version = "25.1.5";
2
+ export const version = "25.2.0";
3
3
  export const nextMajorVersion = () => {
4
4
  return [Number(version.split('.')[0]) + 1, 0, 0].join('.');
5
5
  };
@@ -1,3 +1,4 @@
1
+ import { fg } from '@atlaskit/platform-feature-flags/fg';
1
2
  import { NCS_ERROR_CODE } from './ncs-errors';
2
3
  import { INTERNAL_ERROR_CODE } from './internal-errors';
3
4
  import { PROVIDER_ERROR_CODE } from '@atlaskit/editor-common/collab';
@@ -53,6 +54,19 @@ export var errorCodeMapper = function errorCodeMapper(error) {
53
54
  message: 'The document is currently not available, please try again later',
54
55
  recoverable: true
55
56
  };
57
+ case NCS_ERROR_CODE.ARI_BLACKLISTED:
58
+ // The document ARI has been blocked (e.g. via the documentari kill switch). This is not
59
+ // recoverable, so emit a distinct error the product can use to disable editing and tell
60
+ // the user the document is blocked, rather than swallowing it as an unmapped error.
61
+ if (fg('platform_editor_blocked_document_ux')) {
62
+ return {
63
+ code: PROVIDER_ERROR_CODE.DOCUMENT_BLOCKED,
64
+ message: 'The document is blocked and cannot be edited',
65
+ recoverable: false,
66
+ status: 423
67
+ };
68
+ }
69
+ return;
56
70
  case NCS_ERROR_CODE.DYNAMO_ERROR:
57
71
  return {
58
72
  code: PROVIDER_ERROR_CODE.FAIL_TO_SAVE,
@@ -11,6 +11,7 @@ export var NCS_ERROR_CODE = /*#__PURE__*/function (NCS_ERROR_CODE) {
11
11
  NCS_ERROR_CODE["NAMESPACE_NOT_FOUND"] = "NAMESPACE_NOT_FOUND";
12
12
  NCS_ERROR_CODE["TENANT_INSTANCE_MAINTENANCE"] = "TENANT_INSTANCE_MAINTENANCE";
13
13
  NCS_ERROR_CODE["LOCKED_DOCUMENT"] = "LOCKED_DOCUMENT";
14
+ NCS_ERROR_CODE["ARI_BLACKLISTED"] = "ARI_BLACKLISTED";
14
15
  NCS_ERROR_CODE["EMPTY_BROADCAST"] = "EMPTY_BROADCAST";
15
16
  NCS_ERROR_CODE["DYNAMO_ERROR"] = "DYNAMO_ERROR";
16
17
  NCS_ERROR_CODE["INVALID_ACTIVATION_ID"] = "INVALID_ACTIVATION_ID";
@@ -39,6 +40,13 @@ export var NCS_ERROR_CODE = /*#__PURE__*/function (NCS_ERROR_CODE) {
39
40
 
40
41
  // - Less common back-end errors
41
42
 
43
+ /**
44
+ * The document ARI has been blacklisted (blocked) by NCS, e.g. via the documentari kill switch
45
+ * https://switcheroo.atlassian.com/ui/gates/1a5f36bd-0eb6-4634-ba32-ae325174edb8/key/documentari_kill_switch
46
+ * NCS rejects the connection with a 423 status. Unlike a temporary namespace lock, this is not
47
+ * expected to clear on its own.
48
+ */
49
+
42
50
  /**
43
51
  * The client is trying to send too many messages or messages that are too large. This not expected to be a standard
44
52
  * operating condition and should only ever indicate a frontend bug.
@@ -11,20 +11,47 @@ export function createSocketIOSocket(url, auth, productInfo, isPresenceOnly, ana
11
11
  pathname = _URL.pathname,
12
12
  hostname = _URL.hostname;
13
13
  var socketIOOptions = SOCKET_IO_OPTIONS;
14
- // Polling first
14
+ // Default: polling first, with WebSocket upgrade fallback
15
15
  var transports = ['polling', 'websocket'];
16
- if (isPresenceOnly) {
17
- // Presence-specific configuration
18
- if (fg('platform-editor-presence-websocket-only')) {
19
- // https://socket.io/docs/v4/client-options/#transports
20
- // WebSocket first, if fails, try polling
21
- transports = ['websocket'];
22
- }
23
- socketIOOptions = SOCKET_IO_OPTIONS_WITH_HIGH_JITTER;
24
- } else {
25
- if (isGCPtenant(hostname) && fg('collab_edit_via_websocket_only_for_gcp')) {
26
- transports = ['websocket'];
16
+
17
+ // Determine transport strategy based on connection type and tenant.
18
+ // https://socket.io/docs/v4/client-options/#transports
19
+
20
+ var getConnectionCase = function getConnectionCase() {
21
+ if (isPresenceOnly) {
22
+ // Presence connections: all tenants (commercial, GCP, IC, etc.)
23
+ return 'presence';
24
+ } else if (isGCPtenant(hostname)) {
25
+ // Collab editing: GCP tenant
26
+ return 'gcp-collab';
27
+ } else {
28
+ // Collab editing: commercial and all other tenants
29
+ return 'collab-edit';
27
30
  }
31
+ };
32
+ switch (getConnectionCase()) {
33
+ case 'presence':
34
+ // Presence for all tenants (commercial, GCP, IC, …): WebSocket only when flag is enabled
35
+ socketIOOptions = SOCKET_IO_OPTIONS_WITH_HIGH_JITTER;
36
+ if (fg('platform-editor-presence-websocket-only')) {
37
+ transports = ['websocket'];
38
+ }
39
+ break;
40
+ case 'gcp-collab':
41
+ // GCP: use WebSocket for all collab editing as well
42
+ if (fg('collab_edit_via_websocket_only_for_gcp')) {
43
+ transports = ['websocket'];
44
+ }
45
+ break;
46
+ case 'collab-edit':
47
+ // Collab edit (commercial and all other tenants): WebSocket only when flag is enabled, otherwise polling fallback
48
+ if (fg('platform-editor-collab-edit-websocket-only')) {
49
+ transports = ['websocket'];
50
+ }
51
+ break;
52
+ default:
53
+ // Default: polling first, with WebSocket upgrade fallback
54
+ break;
28
55
  }
29
56
  var extraHeaders = {
30
57
  'x-product': getProduct(productInfo),
@@ -1,5 +1,5 @@
1
1
  export var name = "@atlaskit/collab-provider";
2
- export var version = "25.1.5";
2
+ export var version = "25.2.0";
3
3
  export var nextMajorVersion = function nextMajorVersion() {
4
4
  return [Number(version.split('.')[0]) + 1, 0, 0].join('.');
5
5
  };
@@ -10,6 +10,7 @@ export declare enum NCS_ERROR_CODE {
10
10
  NAMESPACE_NOT_FOUND = "NAMESPACE_NOT_FOUND",
11
11
  TENANT_INSTANCE_MAINTENANCE = "TENANT_INSTANCE_MAINTENANCE",
12
12
  LOCKED_DOCUMENT = "LOCKED_DOCUMENT",
13
+ ARI_BLACKLISTED = "ARI_BLACKLISTED",
13
14
  EMPTY_BROADCAST = "EMPTY_BROADCAST",
14
15
  DYNAMO_ERROR = "DYNAMO_ERROR",
15
16
  INVALID_ACTIVATION_ID = "INVALID_ACTIVATION_ID",
@@ -123,6 +124,20 @@ type NamespaceLockedError = {
123
124
  };
124
125
  message: string;
125
126
  };
127
+ /**
128
+ * The document ARI has been blacklisted (blocked) by NCS, e.g. via the documentari kill switch
129
+ * https://switcheroo.atlassian.com/ui/gates/1a5f36bd-0eb6-4634-ba32-ae325174edb8/key/documentari_kill_switch
130
+ * NCS rejects the connection with a 423 status. Unlike a temporary namespace lock, this is not
131
+ * expected to clear on its own.
132
+ */
133
+ type DocumentBlacklistedError = {
134
+ data: {
135
+ code: NCS_ERROR_CODE.ARI_BLACKLISTED;
136
+ meta?: string;
137
+ status: number;
138
+ };
139
+ message: string;
140
+ };
126
141
  type EmptyBroadcastError = {
127
142
  data: {
128
143
  code: NCS_ERROR_CODE.EMPTY_BROADCAST;
@@ -180,5 +195,5 @@ export type RateLimitError = {
180
195
  };
181
196
  message: string;
182
197
  };
183
- export type NCSErrors = HeadVersionUpdateFailedError | VersionAlreadyPresentInDynamoError | InsufficientEditingPermissionError | ForbiddenUserTokenError | NCSDocumentNotFoundError | FailedToLoadInitDataError | ErrorMappingError | InvalidNamespaceDefinedError | SocketNamespaceNotFoundError | TenantInstanceMaintenanceError | NamespaceLockedError | EmptyBroadcastError | DynamoError | InvalidActivationIdError | InvalidDocumentAriError | InvalidCloudIdError | RateLimitError | ProsemirrorSchemaValidationError;
198
+ export type NCSErrors = HeadVersionUpdateFailedError | VersionAlreadyPresentInDynamoError | InsufficientEditingPermissionError | ForbiddenUserTokenError | NCSDocumentNotFoundError | FailedToLoadInitDataError | ErrorMappingError | InvalidNamespaceDefinedError | SocketNamespaceNotFoundError | TenantInstanceMaintenanceError | NamespaceLockedError | DocumentBlacklistedError | EmptyBroadcastError | DynamoError | InvalidActivationIdError | InvalidDocumentAriError | InvalidCloudIdError | RateLimitError | ProsemirrorSchemaValidationError;
184
199
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/collab-provider",
3
- "version": "25.1.6",
3
+ "version": "25.2.1",
4
4
  "description": "A provider for collaborative editing.",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -18,7 +18,7 @@
18
18
  "team": "Editor: Collaboration"
19
19
  },
20
20
  "dependencies": {
21
- "@atlaskit/adf-utils": "^20.8.0",
21
+ "@atlaskit/adf-utils": "^20.9.0",
22
22
  "@atlaskit/analytics-gas-types": "^6.2.0",
23
23
  "@atlaskit/analytics-listeners": "^11.3.0",
24
24
  "@atlaskit/anonymous-assets": "^2.8.0",
@@ -39,10 +39,10 @@
39
39
  "lodash": "^4.17.21",
40
40
  "prosemirror-changeset": "^2.3.1",
41
41
  "socket.io-client": "^4.7.5",
42
- "uuid": "^3.1.0"
42
+ "uuid": "^11.1.1"
43
43
  },
44
44
  "devDependencies": {
45
- "@atlaskit/adf-schema": "^57.2.0",
45
+ "@atlaskit/adf-schema": "^57.3.0",
46
46
  "@atlaskit/editor-test-helpers": "workspace:^",
47
47
  "@atlassian/a11y-jest-testing": "^0.17.0",
48
48
  "@atlassian/experiment-test-utils": "^0.2.0",
@@ -61,9 +61,15 @@
61
61
  },
62
62
  "collab_edit_via_websocket_only_for_gcp": {
63
63
  "type": "boolean"
64
+ },
65
+ "platform_editor_blocked_document_ux": {
66
+ "type": "boolean"
67
+ },
68
+ "platform-editor-collab-edit-websocket-only": {
69
+ "type": "boolean"
64
70
  }
65
71
  },
66
72
  "peerDependencies": {
67
- "@atlaskit/editor-common": "^120.12.0"
73
+ "@atlaskit/editor-common": "^120.15.0"
68
74
  }
69
75
  }