@atlaskit/editor-synced-block-provider 3.29.0 → 3.29.2

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.
Files changed (47) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/cjs/clients/block-service/ari.js +5 -3
  3. package/dist/cjs/index.js +33 -1
  4. package/dist/cjs/providers/syncBlockProvider.js +10 -10
  5. package/dist/cjs/providers/types.js +7 -7
  6. package/dist/cjs/store-manager/referenceSyncBlockStoreManager.js +102 -35
  7. package/dist/cjs/store-manager/sourceSyncBlockStoreManager.js +1 -1
  8. package/dist/cjs/utils/errorHandling.js +21 -1
  9. package/dist/cjs/utils/resolveSyncBlockInstance.js +3 -2
  10. package/dist/cjs/utils/retry.js +2 -1
  11. package/dist/es2019/clients/block-service/ari.js +5 -3
  12. package/dist/es2019/index.js +4 -4
  13. package/dist/es2019/providers/syncBlockProvider.js +4 -4
  14. package/dist/es2019/providers/types.js +1 -1
  15. package/dist/es2019/store-manager/referenceSyncBlockStoreManager.js +75 -16
  16. package/dist/es2019/store-manager/sourceSyncBlockStoreManager.js +1 -1
  17. package/dist/es2019/utils/errorHandling.js +21 -1
  18. package/dist/es2019/utils/resolveSyncBlockInstance.js +3 -2
  19. package/dist/es2019/utils/retry.js +4 -1
  20. package/dist/esm/clients/block-service/ari.js +5 -3
  21. package/dist/esm/index.js +4 -4
  22. package/dist/esm/providers/syncBlockProvider.js +10 -10
  23. package/dist/esm/providers/types.js +6 -6
  24. package/dist/esm/store-manager/referenceSyncBlockStoreManager.js +101 -35
  25. package/dist/esm/store-manager/sourceSyncBlockStoreManager.js +1 -1
  26. package/dist/esm/utils/errorHandling.js +20 -0
  27. package/dist/esm/utils/resolveSyncBlockInstance.js +3 -2
  28. package/dist/esm/utils/retry.js +2 -1
  29. package/dist/types/clients/block-service/ari.d.ts +4 -2
  30. package/dist/types/index.d.ts +6 -4
  31. package/dist/types/providers/syncBlockProvider.d.ts +4 -4
  32. package/dist/types/providers/types.d.ts +1 -1
  33. package/dist/types/store-manager/referenceSyncBlockStoreManager.d.ts +5 -2
  34. package/dist/types/store-manager/sourceSyncBlockStoreManager.d.ts +3 -3
  35. package/dist/types/store-manager/syncBlockStoreManager.d.ts +3 -3
  36. package/dist/types/utils/errorHandling.d.ts +1 -0
  37. package/dist/types/utils/resolveSyncBlockInstance.d.ts +3 -2
  38. package/dist/types-ts4.5/clients/block-service/ari.d.ts +4 -2
  39. package/dist/types-ts4.5/index.d.ts +6 -4
  40. package/dist/types-ts4.5/providers/syncBlockProvider.d.ts +4 -4
  41. package/dist/types-ts4.5/providers/types.d.ts +1 -1
  42. package/dist/types-ts4.5/store-manager/referenceSyncBlockStoreManager.d.ts +5 -2
  43. package/dist/types-ts4.5/store-manager/sourceSyncBlockStoreManager.d.ts +3 -3
  44. package/dist/types-ts4.5/store-manager/syncBlockStoreManager.d.ts +3 -3
  45. package/dist/types-ts4.5/utils/errorHandling.d.ts +1 -0
  46. package/dist/types-ts4.5/utils/resolveSyncBlockInstance.d.ts +3 -2
  47. package/package.json +5 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # @atlaskit/editor-synced-block-provider
2
2
 
3
+ ## 3.29.2
4
+
5
+ ### Patch Changes
6
+
7
+ - [`8806992b3642c`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/8806992b3642c) -
8
+ EDITOR-5454 update synced block insert success event to use document inserted event
9
+ - [`0f351c68adbac`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/0f351c68adbac) -
10
+ Improve robustness
11
+ - Updated dependencies
12
+
13
+ ## 3.29.1
14
+
15
+ ### Patch Changes
16
+
17
+ - [`53c9f85806f98`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/53c9f85806f98) -
18
+ EDITOR-5275 Store synced blocks data in session storage for look up during page transitions
19
+ - Updated dependencies
20
+
3
21
  ## 3.29.0
4
22
 
5
23
  ### Minor Changes
@@ -35,8 +35,10 @@ var generateBlockAriFromReference = exports.generateBlockAriFromReference = func
35
35
  };
36
36
 
37
37
  /**
38
- * Extracts the local ID from a block ARI.
39
- * @param ari - the block ARI. E.G ari:cloud:blocks:cloudId:synced-block/localId
38
+ * Extracts the local ID from a source block ARI.
39
+ * Designed for source block ARIs of the form: ari:cloud:blocks:{cloudId}:synced-block/{localId}
40
+ * where the localId is a UUID immediately after synced-block/.
41
+ * @param ari - the source block ARI. E.G ari:cloud:blocks:cloudId:synced-block/79d4f3f4-51df-451b-b9a1-751bc77b1e77
40
42
  * @returns the localId of the block node. A randomly generated UUID
41
43
  */
42
44
  var getLocalIdFromBlockResourceId = exports.getLocalIdFromBlockResourceId = function getLocalIdFromBlockResourceId(ari) {
@@ -44,7 +46,7 @@ var getLocalIdFromBlockResourceId = exports.getLocalIdFromBlockResourceId = func
44
46
  if (match !== null && match !== void 0 && match[1]) {
45
47
  return match[1];
46
48
  }
47
- throw new Error("Invalid page ARI: ".concat(ari));
49
+ throw new Error("Invalid block ARI: ".concat(ari));
48
50
  };
49
51
  var getProductFromSourceAri = exports.getProductFromSourceAri = function getProductFromSourceAri(ari) {
50
52
  var jiraMatch = ari === null || ari === void 0 ? void 0 : ari.search(/ari:cloud:jira:.*/);
package/dist/cjs/index.js CHANGED
@@ -3,6 +3,18 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ Object.defineProperty(exports, "BlockError", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _blockService.BlockError;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "ReferenceSyncBlockStoreManager", {
13
+ enumerable: true,
14
+ get: function get() {
15
+ return _referenceSyncBlockStoreManager.ReferenceSyncBlockStoreManager;
16
+ }
17
+ });
6
18
  Object.defineProperty(exports, "SyncBlockError", {
7
19
  enumerable: true,
8
20
  get: function get() {
@@ -18,7 +30,7 @@ Object.defineProperty(exports, "SyncBlockStoreManager", {
18
30
  Object.defineProperty(exports, "SyncedBlockProvider", {
19
31
  enumerable: true,
20
32
  get: function get() {
21
- return _syncBlockProvider.SyncBlockProvider;
33
+ return _syncBlockProvider.SyncedBlockProvider;
22
34
  }
23
35
  });
24
36
  Object.defineProperty(exports, "batchFetchData", {
@@ -27,6 +39,12 @@ Object.defineProperty(exports, "batchFetchData", {
27
39
  return _blockServiceAPI.batchFetchData;
28
40
  }
29
41
  });
42
+ Object.defineProperty(exports, "blockAriToResourceId", {
43
+ enumerable: true,
44
+ get: function get() {
45
+ return _blockServiceAPI.blockAriToResourceId;
46
+ }
47
+ });
30
48
  Object.defineProperty(exports, "convertPMNodesToSyncBlockNodes", {
31
49
  enumerable: true,
32
50
  get: function get() {
@@ -45,6 +63,12 @@ Object.defineProperty(exports, "convertSyncBlockPMNodeToSyncBlockData", {
45
63
  return _utils.convertSyncBlockPMNodeToSyncBlockData;
46
64
  }
47
65
  });
66
+ Object.defineProperty(exports, "convertToSyncBlockData", {
67
+ enumerable: true,
68
+ get: function get() {
69
+ return _blockServiceAPI.convertToSyncBlockData;
70
+ }
71
+ });
48
72
  Object.defineProperty(exports, "createResourceIdForReference", {
49
73
  enumerable: true,
50
74
  get: function get() {
@@ -57,6 +81,12 @@ Object.defineProperty(exports, "createSyncBlockNode", {
57
81
  return _utils.createSyncBlockNode;
58
82
  }
59
83
  });
84
+ Object.defineProperty(exports, "extractResourceIdFromBlockAri", {
85
+ enumerable: true,
86
+ get: function get() {
87
+ return _blockServiceAPI.extractResourceIdFromBlockAri;
88
+ }
89
+ });
60
90
  Object.defineProperty(exports, "fetchConfluencePageInfo", {
61
91
  enumerable: true,
62
92
  get: function get() {
@@ -207,12 +237,14 @@ var _useFetchSyncBlockData = require("./hooks/useFetchSyncBlockData");
207
237
  var _useFetchSyncBlockTitle = require("./hooks/useFetchSyncBlockTitle");
208
238
  var _useHandleContentChanges = require("./hooks/useHandleContentChanges");
209
239
  var _ari = require("./clients/block-service/ari");
240
+ var _blockService = require("./clients/block-service/blockService");
210
241
  var _ari2 = require("./clients/confluence/ari");
211
242
  var _fetchMediaToken = require("./clients/confluence/fetchMediaToken");
212
243
  var _ari3 = require("./clients/jira/ari");
213
244
  var _blockServiceAPI = require("./providers/block-service/blockServiceAPI");
214
245
  var _sourceInfo = require("./clients/confluence/sourceInfo");
215
246
  var _syncBlockProvider = require("./providers/syncBlockProvider");
247
+ var _referenceSyncBlockStoreManager = require("./store-manager/referenceSyncBlockStoreManager");
216
248
  var _syncBlockStoreManager = require("./store-manager/syncBlockStoreManager");
217
249
  var _resolveSyncBlockInstance = require("./utils/resolveSyncBlockInstance");
218
250
  var _resourceId = require("./utils/resourceId");
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.useMemoizedSyncedBlockProvider = exports.SyncBlockProvider = void 0;
7
+ exports.useMemoizedSyncedBlockProvider = exports.SyncedBlockProvider = void 0;
8
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
9
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
10
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
@@ -24,26 +24,26 @@ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbol
24
24
  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; }
25
25
  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)); }
26
26
  function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
27
- var SyncBlockProvider = exports.SyncBlockProvider = /*#__PURE__*/function (_SyncBlockDataProvide) {
27
+ var SyncedBlockProvider = exports.SyncedBlockProvider = /*#__PURE__*/function (_SyncBlockDataProvide) {
28
28
  /**
29
- * Constructor for the SyncBlockProvider
29
+ * Constructor for the SyncedBlockProvider
30
30
  *
31
31
  * @param fetchProvider
32
32
  * @param writeProvider
33
33
  * @param nestedRendererDataProviders
34
34
  */
35
- function SyncBlockProvider(fetchProvider, writeProvider) {
35
+ function SyncedBlockProvider(fetchProvider, writeProvider) {
36
36
  var _this;
37
- (0, _classCallCheck2.default)(this, SyncBlockProvider);
38
- _this = _callSuper(this, SyncBlockProvider);
37
+ (0, _classCallCheck2.default)(this, SyncedBlockProvider);
38
+ _this = _callSuper(this, SyncedBlockProvider);
39
39
  (0, _defineProperty2.default)(_this, "name", 'syncBlockProvider');
40
40
  _this.fetchProvider = fetchProvider;
41
41
  _this.writeProvider = writeProvider;
42
42
  _this.providerOptions = {};
43
43
  return _this;
44
44
  }
45
- (0, _inherits2.default)(SyncBlockProvider, _SyncBlockDataProvide);
46
- return (0, _createClass2.default)(SyncBlockProvider, [{
45
+ (0, _inherits2.default)(SyncedBlockProvider, _SyncBlockDataProvide);
46
+ return (0, _createClass2.default)(SyncedBlockProvider, [{
47
47
  key: "setProviderOptions",
48
48
  value: function setProviderOptions(providerOptions) {
49
49
  this.providerOptions = providerOptions;
@@ -441,11 +441,11 @@ var SyncBlockProvider = exports.SyncBlockProvider = /*#__PURE__*/function (_Sync
441
441
  return undefined;
442
442
  }
443
443
  }]);
444
- }(_types2.SyncBlockDataProvider);
444
+ }(_types2.SyncBlockDataProviderInterface);
445
445
  var createSyncedBlockProvider = function createSyncedBlockProvider(_ref) {
446
446
  var fetchProvider = _ref.fetchProvider,
447
447
  writeProvider = _ref.writeProvider;
448
- return new SyncBlockProvider(fetchProvider, writeProvider);
448
+ return new SyncedBlockProvider(fetchProvider, writeProvider);
449
449
  };
450
450
  var useMemoizedSyncedBlockProvider = exports.useMemoizedSyncedBlockProvider = function useMemoizedSyncedBlockProvider(_ref2) {
451
451
  var fetchProvider = _ref2.fetchProvider,
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.SyncBlockDataProvider = void 0;
7
+ exports.SyncBlockDataProviderInterface = void 0;
8
8
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
9
9
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
10
10
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
@@ -18,11 +18,11 @@ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.
18
18
  * Mainly used for representing the state of a sync block after fetching from a data provider.
19
19
  * This will be used in both data processing and rendering contexts.
20
20
  */
21
- var SyncBlockDataProvider = exports.SyncBlockDataProvider = /*#__PURE__*/function (_NodeDataProvider) {
22
- function SyncBlockDataProvider() {
23
- (0, _classCallCheck2.default)(this, SyncBlockDataProvider);
24
- return _callSuper(this, SyncBlockDataProvider, arguments);
21
+ var SyncBlockDataProviderInterface = exports.SyncBlockDataProviderInterface = /*#__PURE__*/function (_NodeDataProvider) {
22
+ function SyncBlockDataProviderInterface() {
23
+ (0, _classCallCheck2.default)(this, SyncBlockDataProviderInterface);
24
+ return _callSuper(this, SyncBlockDataProviderInterface, arguments);
25
25
  }
26
- (0, _inherits2.default)(SyncBlockDataProvider, _NodeDataProvider);
27
- return (0, _createClass2.default)(SyncBlockDataProvider);
26
+ (0, _inherits2.default)(SyncBlockDataProviderInterface, _NodeDataProvider);
27
+ return (0, _createClass2.default)(SyncBlockDataProviderInterface);
28
28
  }(_nodeDataProvider.NodeDataProvider);
@@ -27,6 +27,8 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
27
27
  function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
28
28
  function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
29
29
  function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
30
+ var SESSION_STORAGE_KEY_PREFIX = 'sync-block-data-';
31
+
30
32
  // A store manager responsible for the lifecycle and state management of reference sync blocks in an editor instance.
31
33
  // Designed to manage local in-memory state and synchronize with an external data provider.
32
34
  // Supports fetch, cache, and subscription for sync block data.
@@ -34,7 +36,8 @@ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length)
34
36
  // Can be used in both editor and renderer contexts.
35
37
  var ReferenceSyncBlockStoreManager = exports.ReferenceSyncBlockStoreManager = /*#__PURE__*/function () {
36
38
  function ReferenceSyncBlockStoreManager(dataProvider) {
37
- var _this = this;
39
+ var _this = this,
40
+ _this$dataProvider;
38
41
  (0, _classCallCheck2.default)(this, ReferenceSyncBlockStoreManager);
39
42
  // Keeps track of addition and deletion of reference synced blocks on the document
40
43
  // This starts as true to always flush the cache when document is saved for the first time
@@ -81,6 +84,9 @@ var ReferenceSyncBlockStoreManager = exports.ReferenceSyncBlockStoreManager = /*
81
84
  this.graphqlSubscriptions = new Map();
82
85
  this.subscriptionChangeListeners = new Set();
83
86
  this.newlyAddedSyncBlocks = new Set();
87
+
88
+ // The provider might have SSR data cache already set, so we need to update the cache in session storage
89
+ this.setSSRDataInSessionStorage((_this$dataProvider = this.dataProvider) === null || _this$dataProvider === void 0 ? void 0 : _this$dataProvider.getNodeDataCacheKeys());
84
90
  }
85
91
 
86
92
  /**
@@ -217,9 +223,57 @@ var ReferenceSyncBlockStoreManager = exports.ReferenceSyncBlockStoreManager = /*
217
223
  }, {
218
224
  key: "getInitialSyncBlockData",
219
225
  value: function getInitialSyncBlockData(resourceId) {
220
- var _this$dataProvider;
226
+ var _this$dataProvider2;
221
227
  var syncBlockNode = (0, _utils.createSyncBlockNode)('', resourceId);
222
- return (_this$dataProvider = this.dataProvider) === null || _this$dataProvider === void 0 || (_this$dataProvider = _this$dataProvider.getNodeDataFromCache(syncBlockNode)) === null || _this$dataProvider === void 0 ? void 0 : _this$dataProvider.data;
228
+ var data = (_this$dataProvider2 = this.dataProvider) === null || _this$dataProvider2 === void 0 || (_this$dataProvider2 = _this$dataProvider2.getNodeDataFromCache(syncBlockNode)) === null || _this$dataProvider2 === void 0 ? void 0 : _this$dataProvider2.data;
229
+ if (data) {
230
+ return data;
231
+ }
232
+ if ((0, _platformFeatureFlags.fg)('platform_synced_block_patch_3')) {
233
+ var sessionData = this.getSyncBlockDataFromSessionStorage(resourceId);
234
+ if (sessionData) {
235
+ return sessionData;
236
+ }
237
+ }
238
+ return undefined;
239
+ }
240
+ }, {
241
+ key: "updateCacheInSessionStorage",
242
+ value: function updateCacheInSessionStorage(resourceId) {
243
+ try {
244
+ var latestData = this.getFromCache(resourceId);
245
+ if (latestData) {
246
+ sessionStorage.setItem("".concat(SESSION_STORAGE_KEY_PREFIX).concat(resourceId), JSON.stringify(latestData));
247
+ }
248
+ } catch (error) {
249
+ (0, _monitoring.logException)(error, {
250
+ location: 'editor-synced-block-provider/referenceSyncBlockStoreManager/updateCacheInSessionStorage'
251
+ });
252
+ }
253
+ }
254
+ }, {
255
+ key: "getSyncBlockDataFromSessionStorage",
256
+ value: function getSyncBlockDataFromSessionStorage(resourceId) {
257
+ var sessionData = null;
258
+ try {
259
+ sessionData = sessionStorage.getItem("".concat(SESSION_STORAGE_KEY_PREFIX).concat(resourceId));
260
+ } catch (error) {
261
+ (0, _monitoring.logException)(error, {
262
+ location: 'editor-synced-block-provider/referenceSyncBlockStoreManager/getSyncBlockDataFromSessionStorage'
263
+ });
264
+ return undefined;
265
+ }
266
+ if (!sessionData) {
267
+ return undefined;
268
+ }
269
+ try {
270
+ return JSON.parse(sessionData);
271
+ } catch (error) {
272
+ (0, _monitoring.logException)(error, {
273
+ location: 'editor-synced-block-provider/referenceSyncBlockStoreManager/getSyncBlockDataFromSessionStorage'
274
+ });
275
+ return undefined;
276
+ }
223
277
  }
224
278
 
225
279
  /**
@@ -324,13 +378,13 @@ var ReferenceSyncBlockStoreManager = exports.ReferenceSyncBlockStoreManager = /*
324
378
  }, {
325
379
  key: "setupGraphQLSubscription",
326
380
  value: function setupGraphQLSubscription(resourceId) {
327
- var _this$dataProvider2,
381
+ var _this$dataProvider3,
328
382
  _this4 = this;
329
383
  // Don't set up duplicate subscriptions
330
384
  if (this.graphqlSubscriptions.has(resourceId)) {
331
385
  return;
332
386
  }
333
- if (!((_this$dataProvider2 = this.dataProvider) !== null && _this$dataProvider2 !== void 0 && _this$dataProvider2.subscribeToBlockUpdates)) {
387
+ if (!((_this$dataProvider3 = this.dataProvider) !== null && _this$dataProvider3 !== void 0 && _this$dataProvider3.subscribeToBlockUpdates)) {
334
388
  return;
335
389
  }
336
390
  var unsubscribe = this.dataProvider.subscribeToBlockUpdates(resourceId, function (syncBlockInstance) {
@@ -773,8 +827,8 @@ var ReferenceSyncBlockStoreManager = exports.ReferenceSyncBlockStoreManager = /*
773
827
  value: function updateCache(syncBlock) {
774
828
  var resourceId = syncBlock.resourceId;
775
829
  if (resourceId) {
776
- var _this$dataProvider3;
777
- (_this$dataProvider3 = this.dataProvider) === null || _this$dataProvider3 === void 0 || _this$dataProvider3.updateCache((0, _defineProperty2.default)({}, resourceId, syncBlock), {
830
+ var _this$dataProvider4;
831
+ (_this$dataProvider4 = this.dataProvider) === null || _this$dataProvider4 === void 0 || _this$dataProvider4.updateCache((0, _defineProperty2.default)({}, resourceId, syncBlock), {
778
832
  strategy: 'merge',
779
833
  source: 'network'
780
834
  });
@@ -784,6 +838,9 @@ var ReferenceSyncBlockStoreManager = exports.ReferenceSyncBlockStoreManager = /*
784
838
  callback(syncBlock);
785
839
  });
786
840
  }
841
+ if ((0, _platformFeatureFlags.fg)('platform_synced_block_patch_3')) {
842
+ this.updateCacheInSessionStorage(resourceId);
843
+ }
787
844
  }
788
845
  }
789
846
  }, {
@@ -799,15 +856,15 @@ var ReferenceSyncBlockStoreManager = exports.ReferenceSyncBlockStoreManager = /*
799
856
  }, {
800
857
  key: "getFromCache",
801
858
  value: function getFromCache(resourceId) {
802
- var _this$dataProvider4;
859
+ var _this$dataProvider5;
803
860
  var syncBlockNode = (0, _utils.createSyncBlockNode)('', resourceId);
804
- return (_this$dataProvider4 = this.dataProvider) === null || _this$dataProvider4 === void 0 || (_this$dataProvider4 = _this$dataProvider4.getNodeDataFromCache(syncBlockNode)) === null || _this$dataProvider4 === void 0 ? void 0 : _this$dataProvider4.data;
861
+ return (_this$dataProvider5 = this.dataProvider) === null || _this$dataProvider5 === void 0 || (_this$dataProvider5 = _this$dataProvider5.getNodeDataFromCache(syncBlockNode)) === null || _this$dataProvider5 === void 0 ? void 0 : _this$dataProvider5.data;
805
862
  }
806
863
  }, {
807
864
  key: "deleteFromCache",
808
865
  value: function deleteFromCache(resourceId) {
809
- var _this$dataProvider5;
810
- (_this$dataProvider5 = this.dataProvider) === null || _this$dataProvider5 === void 0 || _this$dataProvider5.removeFromCache([resourceId]);
866
+ var _this$dataProvider6;
867
+ (_this$dataProvider6 = this.dataProvider) === null || _this$dataProvider6 === void 0 || _this$dataProvider6.removeFromCache([resourceId]);
811
868
  this.providerFactories.delete(resourceId);
812
869
  }
813
870
  }, {
@@ -826,11 +883,22 @@ var ReferenceSyncBlockStoreManager = exports.ReferenceSyncBlockStoreManager = /*
826
883
  this.scheduledBatchFetch();
827
884
  }
828
885
  }
886
+ }, {
887
+ key: "setSSRDataInSessionStorage",
888
+ value: function setSSRDataInSessionStorage(resourceIds) {
889
+ var _this0 = this;
890
+ if (!resourceIds || resourceIds.length === 0) {
891
+ return;
892
+ }
893
+ resourceIds.forEach(function (resourceId) {
894
+ _this0.updateCacheInSessionStorage(resourceId);
895
+ });
896
+ }
829
897
  }, {
830
898
  key: "subscribeToSyncBlock",
831
899
  value: function subscribeToSyncBlock(resourceId, localId, callback) {
832
- var _this$dataProvider6,
833
- _this0 = this;
900
+ var _this$dataProvider7,
901
+ _this1 = this;
834
902
  // Cancel any pending cache deletion for this resourceId.
835
903
  // This handles the case where a block is moved - the old component unmounts
836
904
  // (scheduling deletion) but the new component mounts and subscribes before
@@ -856,7 +924,7 @@ var ReferenceSyncBlockStoreManager = exports.ReferenceSyncBlockStoreManager = /*
856
924
  var syncBlockNode = (0, _utils.createSyncBlockNode)(localId, resourceId);
857
925
 
858
926
  // call the callback immediately if we have cached data
859
- var cachedData = (_this$dataProvider6 = this.dataProvider) === null || _this$dataProvider6 === void 0 || (_this$dataProvider6 = _this$dataProvider6.getNodeDataFromCache(syncBlockNode)) === null || _this$dataProvider6 === void 0 ? void 0 : _this$dataProvider6.data;
927
+ var cachedData = (_this$dataProvider7 = this.dataProvider) === null || _this$dataProvider7 === void 0 || (_this$dataProvider7 = _this$dataProvider7.getNodeDataFromCache(syncBlockNode)) === null || _this$dataProvider7 === void 0 ? void 0 : _this$dataProvider7.data;
860
928
  if (cachedData) {
861
929
  callback(cachedData);
862
930
  } else {
@@ -868,19 +936,19 @@ var ReferenceSyncBlockStoreManager = exports.ReferenceSyncBlockStoreManager = /*
868
936
  this.setupGraphQLSubscription(resourceId);
869
937
  }
870
938
  return function () {
871
- var resourceSubscriptions = _this0.subscriptions.get(resourceId);
939
+ var resourceSubscriptions = _this1.subscriptions.get(resourceId);
872
940
  if (resourceSubscriptions) {
873
941
  // Unsubscription means a reference synced block is removed from the document
874
- _this0.isCacheDirty = true;
942
+ _this1.isCacheDirty = true;
875
943
  delete resourceSubscriptions[localId];
876
944
  if (Object.keys(resourceSubscriptions).length === 0) {
877
- _this0.subscriptions.delete(resourceId);
945
+ _this1.subscriptions.delete(resourceId);
878
946
 
879
947
  // Clean up GraphQL subscription when no more local subscribers
880
- _this0.cleanupGraphQLSubscription(resourceId);
948
+ _this1.cleanupGraphQLSubscription(resourceId);
881
949
 
882
950
  // Notify listeners that subscription was removed
883
- _this0.notifySubscriptionChangeListeners();
951
+ _this1.notifySubscriptionChangeListeners();
884
952
 
885
953
  // Delay cache deletion to handle block moves (unmount/remount).
886
954
  // When a block is moved, the old component unmounts before the new one mounts.
@@ -889,14 +957,14 @@ var ReferenceSyncBlockStoreManager = exports.ReferenceSyncBlockStoreManager = /*
889
957
  // TODO: EDITOR-4152 - Rework this logic
890
958
  var deletionTimeout = setTimeout(function () {
891
959
  // Only delete if still no subscribers (wasn't re-subscribed)
892
- if (!_this0.subscriptions.has(resourceId)) {
893
- _this0.deleteFromCache(resourceId);
960
+ if (!_this1.subscriptions.has(resourceId)) {
961
+ _this1.deleteFromCache(resourceId);
894
962
  }
895
- _this0.pendingCacheDeletions.delete(resourceId);
963
+ _this1.pendingCacheDeletions.delete(resourceId);
896
964
  }, 1000);
897
- _this0.pendingCacheDeletions.set(resourceId, deletionTimeout);
965
+ _this1.pendingCacheDeletions.set(resourceId, deletionTimeout);
898
966
  } else {
899
- _this0.subscriptions.set(resourceId, resourceSubscriptions);
967
+ _this1.subscriptions.set(resourceId, resourceSubscriptions);
900
968
  }
901
969
  }
902
970
  };
@@ -905,7 +973,7 @@ var ReferenceSyncBlockStoreManager = exports.ReferenceSyncBlockStoreManager = /*
905
973
  key: "subscribeToSourceTitle",
906
974
  value: function subscribeToSourceTitle(node, callback) {
907
975
  var _cachedData$data,
908
- _this1 = this;
976
+ _this10 = this;
909
977
  // check node is a sync block, as we only support sync block subscriptions
910
978
  if (node.type.name !== 'syncBlock') {
911
979
  return function () {};
@@ -925,13 +993,13 @@ var ReferenceSyncBlockStoreManager = exports.ReferenceSyncBlockStoreManager = /*
925
993
  var resourceSubscriptions = this.titleSubscriptions.get(resourceId) || {};
926
994
  this.titleSubscriptions.set(resourceId, _objectSpread(_objectSpread({}, resourceSubscriptions), {}, (0, _defineProperty2.default)({}, localId, callback)));
927
995
  return function () {
928
- var resourceSubscriptions = _this1.titleSubscriptions.get(resourceId);
996
+ var resourceSubscriptions = _this10.titleSubscriptions.get(resourceId);
929
997
  if (resourceSubscriptions) {
930
998
  delete resourceSubscriptions[localId];
931
999
  if (Object.keys(resourceSubscriptions).length === 0) {
932
- _this1.titleSubscriptions.delete(resourceId);
1000
+ _this10.titleSubscriptions.delete(resourceId);
933
1001
  } else {
934
- _this1.titleSubscriptions.set(resourceId, resourceSubscriptions);
1002
+ _this10.titleSubscriptions.set(resourceId, resourceSubscriptions);
935
1003
  }
936
1004
  }
937
1005
  };
@@ -1081,7 +1149,7 @@ var ReferenceSyncBlockStoreManager = exports.ReferenceSyncBlockStoreManager = /*
1081
1149
  }
1082
1150
  var parentInfo = this.dataProvider.retrieveSyncBlockParentInfo((_syncBlock$data2 = syncBlock.data) === null || _syncBlock$data2 === void 0 ? void 0 : _syncBlock$data2.sourceAri, (_syncBlock$data3 = syncBlock.data) === null || _syncBlock$data3 === void 0 ? void 0 : _syncBlock$data3.product);
1083
1151
  if (!parentInfo) {
1084
- throw new Error('Unable to retrive sync block parent info');
1152
+ throw new Error('Unable to retrieve sync block parent info');
1085
1153
  }
1086
1154
  var contentId = parentInfo.contentId,
1087
1155
  contentProduct = parentInfo.contentProduct;
@@ -1126,7 +1194,7 @@ var ReferenceSyncBlockStoreManager = exports.ReferenceSyncBlockStoreManager = /*
1126
1194
  key: "flush",
1127
1195
  value: (function () {
1128
1196
  var _flush = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {
1129
- var _this10 = this;
1197
+ var _this11 = this;
1130
1198
  var success, syncedBlocksToFlush, _this$saveExperience, blocks, _iterator4, _step4, _loop2, updateResult, _this$saveExperience2, _this$fireAnalyticsEv1, _this$saveExperience3, _this$fireAnalyticsEv10, _this$saveExperience4;
1131
1199
  return _regenerator.default.wrap(function _callee4$(_context6) {
1132
1200
  while (1) switch (_context6.prev = _context6.next) {
@@ -1288,8 +1356,8 @@ var ReferenceSyncBlockStoreManager = exports.ReferenceSyncBlockStoreManager = /*
1288
1356
  // Use setTimeout to avoid deep recursion and run queued flush asynchronously
1289
1357
  // Note: flush() handles all exceptions internally and never rejects
1290
1358
  this.queuedFlushTimeout = setTimeout(function () {
1291
- _this10.queuedFlushTimeout = undefined;
1292
- void _this10.flush();
1359
+ _this11.queuedFlushTimeout = undefined;
1360
+ void _this11.flush();
1293
1361
  }, 0);
1294
1362
  }
1295
1363
  }
@@ -1310,7 +1378,7 @@ var ReferenceSyncBlockStoreManager = exports.ReferenceSyncBlockStoreManager = /*
1310
1378
  }, {
1311
1379
  key: "destroy",
1312
1380
  value: function destroy() {
1313
- var _this$dataProvider7, _this$saveExperience5, _this$fetchExperience0, _this$fetchSourceInfo2;
1381
+ var _this$dataProvider8, _this$saveExperience5, _this$fetchExperience0, _this$fetchSourceInfo2;
1314
1382
  // Cancel any queued flush to prevent it from running after destroy
1315
1383
  if (this.queuedFlushTimeout) {
1316
1384
  clearTimeout(this.queuedFlushTimeout);
@@ -1319,7 +1387,7 @@ var ReferenceSyncBlockStoreManager = exports.ReferenceSyncBlockStoreManager = /*
1319
1387
 
1320
1388
  // Clean up all GraphQL subscriptions first
1321
1389
  this.cleanupAllGraphQLSubscriptions();
1322
- (_this$dataProvider7 = this.dataProvider) === null || _this$dataProvider7 === void 0 || _this$dataProvider7.resetCache();
1390
+ (_this$dataProvider8 = this.dataProvider) === null || _this$dataProvider8 === void 0 || _this$dataProvider8.resetCache();
1323
1391
  this.scheduledBatchFetch.cancel();
1324
1392
  this.pendingFetchRequests.clear();
1325
1393
  this.dataProvider = undefined;
@@ -1327,7 +1395,6 @@ var ReferenceSyncBlockStoreManager = exports.ReferenceSyncBlockStoreManager = /*
1327
1395
  this.titleSubscriptions.clear();
1328
1396
  this.syncBlockFetchDataRequests.clear();
1329
1397
  this.syncBlockSourceInfoRequests.clear();
1330
- this.providerFactories.clear();
1331
1398
  this.isRefreshingSubscriptions = false;
1332
1399
  this.useRealTimeSubscriptions = false;
1333
1400
  this.subscriptionChangeListeners.clear();
@@ -267,7 +267,7 @@ var SourceSyncBlockStoreManager = exports.SourceSyncBlockStoreManager = /*#__PUR
267
267
  */
268
268
  }, {
269
269
  key: "createBodiedSyncBlockNode",
270
- value: function createBodiedSyncBlockNode(attrs, onCompletion, nodeData) {
270
+ value: function createBodiedSyncBlockNode(attrs, onCompletion) {
271
271
  var _this4 = this;
272
272
  var resourceId = attrs.resourceId,
273
273
  blockInstanceId = attrs.localId;
@@ -4,9 +4,10 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.updateSuccessPayload = exports.updateReferenceErrorPayload = exports.updateErrorPayload = exports.updateCacheErrorPayload = exports.stringifyError = exports.getSourceInfoErrorPayload = exports.getErrorPayload = exports.fetchSuccessPayload = exports.fetchReferencesErrorPayload = exports.fetchErrorPayload = exports.deleteSuccessPayload = exports.deleteErrorPayload = exports.createSuccessPayload = exports.createErrorPayload = void 0;
7
+ exports.updateSuccessPayload = exports.updateReferenceErrorPayload = exports.updateErrorPayload = exports.updateCacheErrorPayload = exports.stringifyError = exports.getSourceInfoErrorPayload = exports.getErrorPayload = exports.fetchSuccessPayload = exports.fetchReferencesErrorPayload = exports.fetchErrorPayload = exports.deleteSuccessPayload = exports.deleteErrorPayload = exports.createSuccessPayloadNew = exports.createSuccessPayload = exports.createErrorPayload = void 0;
8
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
9
  var _analytics = require("@atlaskit/editor-common/analytics");
10
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
10
11
  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; }
11
12
  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; }
12
13
  var stringifyError = exports.stringifyError = function stringifyError(error) {
@@ -70,6 +71,25 @@ var fetchSuccessPayload = exports.fetchSuccessPayload = function fetchSuccessPay
70
71
  };
71
72
  };
72
73
  var createSuccessPayload = exports.createSuccessPayload = function createSuccessPayload(resourceId) {
74
+ return (0, _platformFeatureFlags.fg)('platform_synced_block_patch_3') ? {
75
+ action: _analytics.ACTION.INSERTED,
76
+ actionSubject: _analytics.ACTION_SUBJECT.DOCUMENT,
77
+ actionSubjectId: _analytics.ACTION_SUBJECT_ID.BODIED_SYNCED_BLOCK,
78
+ eventType: _analytics.EVENT_TYPE.TRACK,
79
+ attributes: {
80
+ resourceId: resourceId
81
+ }
82
+ } : {
83
+ action: _analytics.ACTION.INSERTED,
84
+ actionSubject: _analytics.ACTION_SUBJECT.SYNCED_BLOCK,
85
+ actionSubjectId: _analytics.ACTION_SUBJECT_ID.SYNCED_BLOCK_CREATE,
86
+ eventType: _analytics.EVENT_TYPE.OPERATIONAL,
87
+ attributes: {
88
+ resourceId: resourceId
89
+ }
90
+ };
91
+ };
92
+ var createSuccessPayloadNew = exports.createSuccessPayloadNew = function createSuccessPayloadNew(resourceId) {
73
93
  return {
74
94
  action: _analytics.ACTION.INSERTED,
75
95
  actionSubject: _analytics.ACTION_SUBJECT.SYNCED_BLOCK,
@@ -11,8 +11,9 @@ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbol
11
11
  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; }
12
12
  /**
13
13
  * Merges two SyncBlockInstance objects,
14
- * currently it only preserves the sourceURL from the old result,
15
- * but this can be extended in the future to preserve other fields and resolve conflicts as needed.
14
+ * preserving sourceURL, sourceTitle, sourceSubType, and onSameDocument from the old result
15
+ * when the new result does not have them.
16
+ * This can be extended in the future to resolve other conflicts as needed,
16
17
  * e.g. compare timestamps or version numbers to determine which data is more recent.
17
18
  *
18
19
  * @param oldResult - The existing SyncBlockInstance object.
@@ -50,7 +50,8 @@ var _fetchWithRetry = exports.fetchWithRetry = /*#__PURE__*/function () {
50
50
  retryAfter = response.headers.get('Retry-After');
51
51
  _context.next = 11;
52
52
  return new Promise(function (resolve) {
53
- return setTimeout(resolve, retryAfter ? parseRetryAfter(retryAfter) : delay);
53
+ var _ref2;
54
+ return setTimeout(resolve, (_ref2 = retryAfter ? parseRetryAfter(retryAfter) : undefined) !== null && _ref2 !== void 0 ? _ref2 : delay);
54
55
  });
55
56
  case 11:
56
57
  return _context.abrupt("return", _fetchWithRetry(url, options, retriesRemaining - 1, delay * 2));
@@ -31,8 +31,10 @@ export const generateBlockAriFromReference = ({
31
31
  };
32
32
 
33
33
  /**
34
- * Extracts the local ID from a block ARI.
35
- * @param ari - the block ARI. E.G ari:cloud:blocks:cloudId:synced-block/localId
34
+ * Extracts the local ID from a source block ARI.
35
+ * Designed for source block ARIs of the form: ari:cloud:blocks:{cloudId}:synced-block/{localId}
36
+ * where the localId is a UUID immediately after synced-block/.
37
+ * @param ari - the source block ARI. E.G ari:cloud:blocks:cloudId:synced-block/79d4f3f4-51df-451b-b9a1-751bc77b1e77
36
38
  * @returns the localId of the block node. A randomly generated UUID
37
39
  */
38
40
  export const getLocalIdFromBlockResourceId = ari => {
@@ -40,7 +42,7 @@ export const getLocalIdFromBlockResourceId = ari => {
40
42
  if (match !== null && match !== void 0 && match[1]) {
41
43
  return match[1];
42
44
  }
43
- throw new Error(`Invalid page ARI: ${ari}`);
45
+ throw new Error(`Invalid block ARI: ${ari}`);
44
46
  };
45
47
  export const getProductFromSourceAri = ari => {
46
48
  const jiraMatch = ari === null || ari === void 0 ? void 0 : ari.search(/ari:cloud:jira:.*/);
@@ -10,17 +10,17 @@ export { useHandleContentChanges } from './hooks/useHandleContentChanges';
10
10
 
11
11
  // clients
12
12
  export { generateBlockAri, generateBlockAriFromReference, getLocalIdFromBlockResourceId } from './clients/block-service/ari';
13
+ export { BlockError } from './clients/block-service/blockService';
13
14
  export { getConfluencePageAri, getPageIdAndTypeFromConfluencePageAri } from './clients/confluence/ari';
14
15
  export { fetchMediaToken } from './clients/confluence/fetchMediaToken';
15
16
  export { getJiraWorkItemAri, getJiraWorkItemIdFromAri } from './clients/jira/ari';
16
17
 
17
18
  // providers
18
- export { useMemoizedBlockServiceAPIProviders, useMemoizedBlockServiceFetchOnlyAPIProvider, fetchReferences, batchFetchData } from './providers/block-service/blockServiceAPI';
19
+ export { useMemoizedBlockServiceAPIProviders, useMemoizedBlockServiceFetchOnlyAPIProvider, fetchReferences, batchFetchData, blockAriToResourceId, convertToSyncBlockData, extractResourceIdFromBlockAri } from './providers/block-service/blockServiceAPI';
19
20
  export { fetchConfluencePageInfo } from './clients/confluence/sourceInfo';
20
- export { SyncBlockProvider as SyncedBlockProvider, useMemoizedSyncedBlockProvider } from './providers/syncBlockProvider';
21
-
21
+ export { SyncedBlockProvider, useMemoizedSyncedBlockProvider } from './providers/syncBlockProvider';
22
22
  // store managers
23
-
23
+ export { ReferenceSyncBlockStoreManager } from './store-manager/referenceSyncBlockStoreManager';
24
24
  export { SyncBlockStoreManager, useMemoizedSyncBlockStoreManager } from './store-manager/syncBlockStoreManager';
25
25
 
26
26
  // utils