@atlaskit/editor-synced-block-provider 2.12.1 → 2.12.3

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 (52) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/cjs/clients/block-service/blockService.js +6 -5
  3. package/dist/cjs/clients/confluence/contentProperty.js +4 -3
  4. package/dist/cjs/clients/confluence/sourceInfo.js +2 -1
  5. package/dist/cjs/common/types.js +5 -0
  6. package/dist/cjs/providers/block-service/blockServiceAPI.js +81 -37
  7. package/dist/cjs/providers/confluence/confluenceContentAPI.js +80 -42
  8. package/dist/cjs/providers/syncBlockProvider.js +13 -2
  9. package/dist/cjs/store-manager/referenceSyncBlockStoreManager.js +4 -6
  10. package/dist/cjs/store-manager/sourceSyncBlockStoreManager.js +10 -12
  11. package/dist/cjs/utils/resolveSyncBlockInstance.js +8 -4
  12. package/dist/cjs/utils/retry.js +66 -0
  13. package/dist/cjs/utils/utils.js +1 -10
  14. package/dist/es2019/clients/block-service/blockService.js +6 -5
  15. package/dist/es2019/clients/confluence/contentProperty.js +4 -3
  16. package/dist/es2019/clients/confluence/sourceInfo.js +2 -1
  17. package/dist/es2019/common/types.js +5 -0
  18. package/dist/es2019/providers/block-service/blockServiceAPI.js +43 -15
  19. package/dist/es2019/providers/confluence/confluenceContentAPI.js +35 -10
  20. package/dist/es2019/providers/syncBlockProvider.js +5 -0
  21. package/dist/es2019/store-manager/referenceSyncBlockStoreManager.js +4 -6
  22. package/dist/es2019/store-manager/sourceSyncBlockStoreManager.js +11 -13
  23. package/dist/es2019/utils/resolveSyncBlockInstance.js +8 -4
  24. package/dist/es2019/utils/retry.js +26 -0
  25. package/dist/es2019/utils/utils.js +0 -9
  26. package/dist/esm/clients/block-service/blockService.js +6 -5
  27. package/dist/esm/clients/confluence/contentProperty.js +4 -3
  28. package/dist/esm/clients/confluence/sourceInfo.js +2 -1
  29. package/dist/esm/common/types.js +5 -0
  30. package/dist/esm/providers/block-service/blockServiceAPI.js +81 -37
  31. package/dist/esm/providers/confluence/confluenceContentAPI.js +80 -42
  32. package/dist/esm/providers/syncBlockProvider.js +13 -2
  33. package/dist/esm/store-manager/referenceSyncBlockStoreManager.js +4 -6
  34. package/dist/esm/store-manager/sourceSyncBlockStoreManager.js +11 -13
  35. package/dist/esm/utils/resolveSyncBlockInstance.js +8 -4
  36. package/dist/esm/utils/retry.js +60 -0
  37. package/dist/esm/utils/utils.js +0 -9
  38. package/dist/types/common/types.d.ts +4 -0
  39. package/dist/types/providers/block-service/blockServiceAPI.d.ts +1 -0
  40. package/dist/types/providers/confluence/confluenceContentAPI.d.ts +1 -0
  41. package/dist/types/providers/syncBlockProvider.d.ts +1 -0
  42. package/dist/types/providers/types.d.ts +2 -0
  43. package/dist/types/utils/retry.d.ts +1 -0
  44. package/dist/types/utils/utils.d.ts +0 -1
  45. package/dist/types-ts4.5/common/types.d.ts +4 -0
  46. package/dist/types-ts4.5/providers/block-service/blockServiceAPI.d.ts +1 -0
  47. package/dist/types-ts4.5/providers/confluence/confluenceContentAPI.d.ts +1 -0
  48. package/dist/types-ts4.5/providers/syncBlockProvider.d.ts +1 -0
  49. package/dist/types-ts4.5/providers/types.d.ts +2 -0
  50. package/dist/types-ts4.5/utils/retry.d.ts +1 -0
  51. package/dist/types-ts4.5/utils/utils.d.ts +0 -1
  52. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # @atlaskit/editor-synced-block-provider
2
2
 
3
+ ## 2.12.3
4
+
5
+ ### Patch Changes
6
+
7
+ - [`707c3960baedb`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/707c3960baedb) -
8
+ EDITOR-1923 retry api requests on rate limited for sync block provider
9
+ - Updated dependencies
10
+
11
+ ## 2.12.2
12
+
13
+ ### Patch Changes
14
+
15
+ - [`fd932d0fad4a5`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/fd932d0fad4a5) -
16
+ [ux] EDITOR-3693 separate sync block creation and update into different provider calls
17
+ - [`1f90e6ac4a228`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/1f90e6ac4a228) -
18
+ [ux] EDITOR-3662 fix sync block error merging logic to retain old information on error
19
+
3
20
  ## 2.12.1
4
21
 
5
22
  ### Patch Changes
@@ -13,6 +13,7 @@ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/ge
13
13
  var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
14
14
  var _wrapNativeSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/wrapNativeSuper"));
15
15
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
16
+ var _retry = require("../../utils/retry");
16
17
  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)); }
17
18
  function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
18
19
  var isBlockContentResponse = exports.isBlockContentResponse = function isBlockContentResponse(response) {
@@ -69,7 +70,7 @@ var getReferenceSyncedBlocks = exports.getReferenceSyncedBlocks = /*#__PURE__*/f
69
70
  while (1) switch (_context.prev = _context.next) {
70
71
  case 0:
71
72
  _context.next = 2;
72
- return fetch("".concat(BLOCK_SERVICE_API_URL, "/block/document/reference/").concat(encodeURIComponent(documentAri)), {
73
+ return (0, _retry.fetchWithRetry)("".concat(BLOCK_SERVICE_API_URL, "/block/document/reference/").concat(encodeURIComponent(documentAri)), {
73
74
  method: 'GET',
74
75
  headers: COMMON_HEADERS
75
76
  });
@@ -119,7 +120,7 @@ var getSyncedBlockContent = exports.getSyncedBlockContent = /*#__PURE__*/functio
119
120
  case 0:
120
121
  blockAri = _ref2.blockAri;
121
122
  _context2.next = 3;
122
- return fetch("".concat(BLOCK_SERVICE_API_URL, "/block/").concat(encodeURIComponent(blockAri)), {
123
+ return (0, _retry.fetchWithRetry)("".concat(BLOCK_SERVICE_API_URL, "/block/").concat(encodeURIComponent(blockAri)), {
123
124
  method: 'GET',
124
125
  headers: COMMON_HEADERS
125
126
  });
@@ -153,7 +154,7 @@ var deleteSyncedBlock = exports.deleteSyncedBlock = /*#__PURE__*/function () {
153
154
  case 0:
154
155
  blockAri = _ref4.blockAri;
155
156
  _context3.next = 3;
156
- return fetch("".concat(BLOCK_SERVICE_API_URL, "/block/").concat(encodeURIComponent(blockAri)), {
157
+ return (0, _retry.fetchWithRetry)("".concat(BLOCK_SERVICE_API_URL, "/block/").concat(encodeURIComponent(blockAri)), {
157
158
  method: 'DELETE',
158
159
  headers: COMMON_HEADERS
159
160
  });
@@ -182,7 +183,7 @@ var updateSyncedBlock = exports.updateSyncedBlock = /*#__PURE__*/function () {
182
183
  case 0:
183
184
  blockAri = _ref6.blockAri, content = _ref6.content;
184
185
  _context4.next = 3;
185
- return fetch("".concat(BLOCK_SERVICE_API_URL, "/block/").concat(encodeURIComponent(blockAri)), {
186
+ return (0, _retry.fetchWithRetry)("".concat(BLOCK_SERVICE_API_URL, "/block/").concat(encodeURIComponent(blockAri)), {
186
187
  method: 'PUT',
187
188
  headers: COMMON_HEADERS,
188
189
  body: JSON.stringify({
@@ -214,7 +215,7 @@ var createSyncedBlock = exports.createSyncedBlock = /*#__PURE__*/function () {
214
215
  case 0:
215
216
  blockAri = _ref8.blockAri, blockInstanceId = _ref8.blockInstanceId, sourceAri = _ref8.sourceAri, product = _ref8.product, content = _ref8.content;
216
217
  _context5.next = 3;
217
- return fetch("".concat(BLOCK_SERVICE_API_URL, "/block"), {
218
+ return (0, _retry.fetchWithRetry)("".concat(BLOCK_SERVICE_API_URL, "/block"), {
218
219
  method: 'POST',
219
220
  headers: COMMON_HEADERS,
220
221
  body: JSON.stringify({
@@ -8,6 +8,7 @@ exports.updateContentProperty = exports.getContentProperty = exports.deleteConte
8
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
9
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
10
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
11
+ var _retry = require("../../utils/retry");
11
12
  var _ari = require("./ari");
12
13
  var _utils = require("./utils");
13
14
  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; }
@@ -95,7 +96,7 @@ var getContentProperty = exports.getContentProperty = /*#__PURE__*/function () {
95
96
  }
96
97
  };
97
98
  _context.next = 6;
98
- return fetch(GRAPHQL_ENDPOINT, {
99
+ return (0, _retry.fetchWithRetry)(GRAPHQL_ENDPOINT, {
99
100
  method: 'POST',
100
101
  headers: _objectSpread(_objectSpread({}, COMMON_HEADERS), AGG_HEADERS),
101
102
  body: JSON.stringify(bodyData)
@@ -204,7 +205,7 @@ var createContentProperty = exports.createContentProperty = /*#__PURE__*/functio
204
205
  }
205
206
  };
206
207
  _context3.next = 6;
207
- return fetch(GRAPHQL_ENDPOINT, {
208
+ return (0, _retry.fetchWithRetry)(GRAPHQL_ENDPOINT, {
208
209
  method: 'POST',
209
210
  headers: _objectSpread(_objectSpread({}, COMMON_HEADERS), AGG_HEADERS),
210
211
  body: JSON.stringify(bodyData)
@@ -254,7 +255,7 @@ var deleteContentProperty = exports.deleteContentProperty = /*#__PURE__*/functio
254
255
  }
255
256
  };
256
257
  _context4.next = 6;
257
- return fetch(GRAPHQL_ENDPOINT, {
258
+ return (0, _retry.fetchWithRetry)(GRAPHQL_ENDPOINT, {
258
259
  method: 'POST',
259
260
  headers: _objectSpread(_objectSpread({}, COMMON_HEADERS), AGG_HEADERS),
260
261
  body: JSON.stringify(bodyData)
@@ -10,6 +10,7 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
10
10
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
11
11
  var _monitoring = require("@atlaskit/editor-common/monitoring");
12
12
  var _errorHandling = require("../../utils/errorHandling");
13
+ var _retry = require("../../utils/retry");
13
14
  var _ari = require("./ari");
14
15
  var _utils = require("./utils");
15
16
  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; }
@@ -43,7 +44,7 @@ var getConfluenceSourceInfo = /*#__PURE__*/function () {
43
44
  }
44
45
  };
45
46
  _context.next = 3;
46
- return fetch(GRAPHQL_ENDPOINT, {
47
+ return (0, _retry.fetchWithRetry)(GRAPHQL_ENDPOINT, {
47
48
  method: 'POST',
48
49
  headers: _objectSpread(_objectSpread({}, COMMON_HEADERS), AGG_HEADERS),
49
50
  body: JSON.stringify(bodyData)
@@ -8,6 +8,11 @@ var SyncBlockError = exports.SyncBlockError = /*#__PURE__*/function (SyncBlockEr
8
8
  SyncBlockError["Errored"] = "errored";
9
9
  SyncBlockError["NotFound"] = "not_found";
10
10
  SyncBlockError["Forbidden"] = "forbidden";
11
+ SyncBlockError["InvalidRequest"] = "invalid_request";
12
+ SyncBlockError["RateLimited"] = "rate_limited";
13
+ SyncBlockError["Conflict"] = "conflict";
14
+ // attempt to create block that already exists
15
+ SyncBlockError["ServerError"] = "server_error";
11
16
  SyncBlockError["InvalidContent"] = "invalid_content"; // content is not a valid JSON
12
17
  return SyncBlockError;
13
18
  }({});
@@ -17,10 +17,21 @@ var _types = require("../../common/types");
17
17
  var _errorHandling = require("../../utils/errorHandling");
18
18
  var mapBlockError = function mapBlockError(error) {
19
19
  switch (error.status) {
20
+ case 400:
21
+ case 401:
22
+ return _types.SyncBlockError.InvalidRequest;
20
23
  case 403:
21
24
  return _types.SyncBlockError.Forbidden;
22
25
  case 404:
23
26
  return _types.SyncBlockError.NotFound;
27
+ case 409:
28
+ return _types.SyncBlockError.Conflict;
29
+ case 429:
30
+ return _types.SyncBlockError.RateLimited;
31
+ case 500:
32
+ case 503:
33
+ case 504:
34
+ return _types.SyncBlockError.ServerError;
24
35
  }
25
36
  return _types.SyncBlockError.Errored;
26
37
  };
@@ -210,88 +221,121 @@ var BlockServiceADFWriteProvider = /*#__PURE__*/function () {
210
221
  _context3.prev = 7;
211
222
  _context3.t0 = _context3["catch"](1);
212
223
  if (!(_context3.t0 instanceof _blockService.BlockError)) {
213
- _context3.next = 16;
224
+ _context3.next = 11;
214
225
  break;
215
226
  }
216
- if (!(_context3.t0.status === 404)) {
217
- _context3.next = 15;
218
- break;
219
- }
220
- _context3.next = 13;
221
- return (0, _blockService.createSyncedBlock)({
222
- blockAri: resourceId,
223
- blockInstanceId: data.blockInstanceId,
224
- sourceAri: this.sourceAri,
225
- product: this.product,
226
- content: JSON.stringify(data.content)
227
- });
228
- case 13:
229
- _context3.next = 16;
230
- break;
231
- case 15:
232
227
  return _context3.abrupt("return", {
233
228
  error: mapBlockError(_context3.t0),
234
229
  resourceId: resourceId
235
230
  });
236
- case 16:
231
+ case 11:
237
232
  return _context3.abrupt("return", {
238
233
  error: (0, _errorHandling.stringifyError)(_context3.t0),
239
234
  resourceId: resourceId
240
235
  });
241
- case 17:
236
+ case 12:
242
237
  case "end":
243
238
  return _context3.stop();
244
239
  }
245
- }, _callee3, this, [[1, 7]]);
240
+ }, _callee3, null, [[1, 7]]);
246
241
  }));
247
242
  function writeData(_x3) {
248
243
  return _writeData.apply(this, arguments);
249
244
  }
250
245
  return writeData;
251
- }() // soft deletes the source synced block
246
+ }()
252
247
  }, {
253
- key: "deleteData",
248
+ key: "createData",
254
249
  value: function () {
255
- var _deleteData = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(resourceId) {
250
+ var _createData = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(data) {
251
+ var resourceId;
256
252
  return _regenerator.default.wrap(function _callee4$(_context4) {
257
253
  while (1) switch (_context4.prev = _context4.next) {
258
254
  case 0:
259
- _context4.prev = 0;
260
- _context4.next = 3;
255
+ resourceId = data.resourceId;
256
+ _context4.prev = 1;
257
+ _context4.next = 4;
258
+ return (0, _blockService.createSyncedBlock)({
259
+ blockAri: resourceId,
260
+ blockInstanceId: data.blockInstanceId,
261
+ sourceAri: this.sourceAri,
262
+ product: this.product,
263
+ content: JSON.stringify(data.content)
264
+ });
265
+ case 4:
266
+ return _context4.abrupt("return", {
267
+ resourceId: resourceId
268
+ });
269
+ case 7:
270
+ _context4.prev = 7;
271
+ _context4.t0 = _context4["catch"](1);
272
+ if (!(_context4.t0 instanceof _blockService.BlockError)) {
273
+ _context4.next = 11;
274
+ break;
275
+ }
276
+ return _context4.abrupt("return", {
277
+ error: mapBlockError(_context4.t0),
278
+ resourceId: resourceId
279
+ });
280
+ case 11:
281
+ return _context4.abrupt("return", {
282
+ error: (0, _errorHandling.stringifyError)(_context4.t0),
283
+ resourceId: resourceId
284
+ });
285
+ case 12:
286
+ case "end":
287
+ return _context4.stop();
288
+ }
289
+ }, _callee4, this, [[1, 7]]);
290
+ }));
291
+ function createData(_x4) {
292
+ return _createData.apply(this, arguments);
293
+ }
294
+ return createData;
295
+ }() // soft deletes the source synced block
296
+ }, {
297
+ key: "deleteData",
298
+ value: function () {
299
+ var _deleteData = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(resourceId) {
300
+ return _regenerator.default.wrap(function _callee5$(_context5) {
301
+ while (1) switch (_context5.prev = _context5.next) {
302
+ case 0:
303
+ _context5.prev = 0;
304
+ _context5.next = 3;
261
305
  return (0, _blockService.deleteSyncedBlock)({
262
306
  blockAri: resourceId
263
307
  });
264
308
  case 3:
265
- return _context4.abrupt("return", {
309
+ return _context5.abrupt("return", {
266
310
  resourceId: resourceId,
267
311
  success: true,
268
312
  error: undefined
269
313
  });
270
314
  case 6:
271
- _context4.prev = 6;
272
- _context4.t0 = _context4["catch"](0);
273
- if (!(_context4.t0 instanceof _blockService.BlockError)) {
274
- _context4.next = 10;
315
+ _context5.prev = 6;
316
+ _context5.t0 = _context5["catch"](0);
317
+ if (!(_context5.t0 instanceof _blockService.BlockError)) {
318
+ _context5.next = 10;
275
319
  break;
276
320
  }
277
- return _context4.abrupt("return", {
321
+ return _context5.abrupt("return", {
278
322
  resourceId: resourceId,
279
323
  success: false,
280
- error: mapBlockError(_context4.t0)
324
+ error: mapBlockError(_context5.t0)
281
325
  });
282
326
  case 10:
283
- return _context4.abrupt("return", {
327
+ return _context5.abrupt("return", {
284
328
  resourceId: resourceId,
285
329
  success: false,
286
- error: (0, _errorHandling.stringifyError)(_context4.t0)
330
+ error: (0, _errorHandling.stringifyError)(_context5.t0)
287
331
  });
288
332
  case 11:
289
333
  case "end":
290
- return _context4.stop();
334
+ return _context5.stop();
291
335
  }
292
- }, _callee4, null, [[0, 6]]);
336
+ }, _callee5, null, [[0, 6]]);
293
337
  }));
294
- function deleteData(_x4) {
338
+ function deleteData(_x5) {
295
339
  return _deleteData.apply(this, arguments);
296
340
  }
297
341
  return deleteData;
@@ -260,37 +260,23 @@ var ConfluenceADFWriteProvider = /*#__PURE__*/function () {
260
260
  resourceId: resourceId
261
261
  });
262
262
  case 23:
263
- if (updateResult) {
264
- _context3.next = 27;
265
- break;
266
- }
267
- return _context3.abrupt("return", this.createNewContentProperty(pageId, key, syncBlockDataWithSourceDocumentAri, pageType).then(function () {
268
- return {
269
- resourceId: resourceId
270
- };
271
- }, function (error) {
272
- return {
273
- error: error
274
- };
275
- }));
276
- case 27:
277
263
  return _context3.abrupt("return", {
278
264
  error: "Failed to update ".concat(pageType, " content property")
279
265
  });
280
- case 28:
281
- _context3.next = 33;
266
+ case 24:
267
+ _context3.next = 29;
282
268
  break;
283
- case 30:
284
- _context3.prev = 30;
269
+ case 26:
270
+ _context3.prev = 26;
285
271
  _context3.t1 = _context3["catch"](9);
286
272
  return _context3.abrupt("return", {
287
273
  error: "Failed to write ".concat(pageType)
288
274
  });
289
- case 33:
275
+ case 29:
290
276
  case "end":
291
277
  return _context3.stop();
292
278
  }
293
- }, _callee3, this, [[1, 5], [9, 30]]);
279
+ }, _callee3, this, [[1, 5], [9, 26]]);
294
280
  }));
295
281
  function writeData(_x6) {
296
282
  return _writeData.apply(this, arguments);
@@ -298,28 +284,80 @@ var ConfluenceADFWriteProvider = /*#__PURE__*/function () {
298
284
  return writeData;
299
285
  }()
300
286
  }, {
301
- key: "deleteData",
287
+ key: "createData",
302
288
  value: function () {
303
- var _deleteData = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(resourceId) {
304
- var deletePayload, deleteResult, match, _match2, pageId, pageType, localId, key, options, _stringifyError;
289
+ var _createData = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(syncBlockData) {
290
+ var match, resourceId, _match2, pageId, pageType, localId, key, sourceAri, syncBlockDataWithSourceDocumentAri;
305
291
  return _regenerator.default.wrap(function _callee4$(_context4) {
306
292
  while (1) switch (_context4.prev = _context4.next) {
307
293
  case 0:
308
- _context4.prev = 0;
294
+ resourceId = syncBlockData.resourceId;
295
+ _context4.prev = 1;
309
296
  match = (0, _ari.getPageIdAndTypeFromConfluencePageAri)(resourceId);
310
- _context4.next = 7;
297
+ _context4.next = 8;
311
298
  break;
312
- case 4:
313
- _context4.prev = 4;
314
- _context4.t0 = _context4["catch"](0);
299
+ case 5:
300
+ _context4.prev = 5;
301
+ _context4.t0 = _context4["catch"](1);
302
+ return _context4.abrupt("return", {
303
+ error: (0, _errorHandling.stringifyError)(_context4.t0)
304
+ });
305
+ case 8:
306
+ _match2 = match, pageId = _match2.id, pageType = _match2.type;
307
+ _context4.prev = 9;
308
+ localId = (0, _ari.getLocalIdFromConfluencePageAri)(resourceId);
309
+ key = getContentPropertyKey(this.config.contentPropertyKey, localId);
310
+ sourceAri = (0, _ari.getConfluencePageAri)(pageId, this.config.cloudId, pageType);
311
+ syncBlockDataWithSourceDocumentAri = _objectSpread(_objectSpread({}, syncBlockData), {}, {
312
+ product: 'confluence-page',
313
+ sourceAri: sourceAri
314
+ });
315
+ _context4.next = 16;
316
+ return this.createNewContentProperty(pageId, key, syncBlockDataWithSourceDocumentAri, pageType);
317
+ case 16:
315
318
  return _context4.abrupt("return", {
319
+ resourceId: resourceId
320
+ });
321
+ case 19:
322
+ _context4.prev = 19;
323
+ _context4.t1 = _context4["catch"](9);
324
+ return _context4.abrupt("return", Promise.resolve({
325
+ error: (0, _errorHandling.stringifyError)(_context4.t1)
326
+ }));
327
+ case 22:
328
+ case "end":
329
+ return _context4.stop();
330
+ }
331
+ }, _callee4, this, [[1, 5], [9, 19]]);
332
+ }));
333
+ function createData(_x7) {
334
+ return _createData.apply(this, arguments);
335
+ }
336
+ return createData;
337
+ }()
338
+ }, {
339
+ key: "deleteData",
340
+ value: function () {
341
+ var _deleteData = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(resourceId) {
342
+ var deletePayload, deleteResult, match, _match3, pageId, pageType, localId, key, options, _stringifyError;
343
+ return _regenerator.default.wrap(function _callee5$(_context5) {
344
+ while (1) switch (_context5.prev = _context5.next) {
345
+ case 0:
346
+ _context5.prev = 0;
347
+ match = (0, _ari.getPageIdAndTypeFromConfluencePageAri)(resourceId);
348
+ _context5.next = 7;
349
+ break;
350
+ case 4:
351
+ _context5.prev = 4;
352
+ _context5.t0 = _context5["catch"](0);
353
+ return _context5.abrupt("return", {
316
354
  resourceId: resourceId,
317
355
  success: false,
318
- error: (0, _errorHandling.stringifyError)(_context4.t0)
356
+ error: (0, _errorHandling.stringifyError)(_context5.t0)
319
357
  });
320
358
  case 7:
321
- _match2 = match, pageId = _match2.id, pageType = _match2.type;
322
- _context4.prev = 8;
359
+ _match3 = match, pageId = _match3.id, pageType = _match3.type;
360
+ _context5.prev = 8;
323
361
  localId = (0, _ari.getLocalIdFromConfluencePageAri)(resourceId);
324
362
  key = getContentPropertyKey(this.config.contentPropertyKey, localId);
325
363
  options = {
@@ -328,34 +366,34 @@ var ConfluenceADFWriteProvider = /*#__PURE__*/function () {
328
366
  cloudId: this.config.cloudId,
329
367
  pageType: pageType
330
368
  };
331
- _context4.next = 14;
369
+ _context5.next = 14;
332
370
  return (0, _contentProperty3.deleteContentProperty)(options);
333
371
  case 14:
334
- deletePayload = _context4.sent;
372
+ deletePayload = _context5.sent;
335
373
  deleteResult = (0, _utils.isBlogPageType)(pageType) ? deletePayload.data.confluence.deleteBlogPostProperty : deletePayload.data.confluence.deletePageProperty;
336
- _context4.next = 21;
374
+ _context5.next = 21;
337
375
  break;
338
376
  case 18:
339
- _context4.prev = 18;
340
- _context4.t1 = _context4["catch"](8);
341
- return _context4.abrupt("return", {
377
+ _context5.prev = 18;
378
+ _context5.t1 = _context5["catch"](8);
379
+ return _context5.abrupt("return", {
342
380
  resourceId: resourceId,
343
381
  success: false,
344
- error: (_stringifyError = (0, _errorHandling.stringifyError)(_context4.t1)) !== null && _stringifyError !== void 0 ? _stringifyError : "Fail to delete ".concat(pageType, " content property")
382
+ error: (_stringifyError = (0, _errorHandling.stringifyError)(_context5.t1)) !== null && _stringifyError !== void 0 ? _stringifyError : "Fail to delete ".concat(pageType, " content property")
345
383
  });
346
384
  case 21:
347
- return _context4.abrupt("return", {
385
+ return _context5.abrupt("return", {
348
386
  resourceId: resourceId,
349
387
  success: deleteResult.success,
350
388
  error: deleteResult.errors.join()
351
389
  });
352
390
  case 22:
353
391
  case "end":
354
- return _context4.stop();
392
+ return _context5.stop();
355
393
  }
356
- }, _callee4, this, [[0, 4], [8, 18]]);
394
+ }, _callee5, this, [[0, 4], [8, 18]]);
357
395
  }));
358
- function deleteData(_x7) {
396
+ function deleteData(_x8) {
359
397
  return _deleteData.apply(this, arguments);
360
398
  }
361
399
  return deleteData;
@@ -150,7 +150,19 @@ var SyncBlockProvider = exports.SyncBlockProvider = /*#__PURE__*/function (_Sync
150
150
  return _writeNodesData.apply(this, arguments);
151
151
  }
152
152
  return writeNodesData;
153
- }()
153
+ }())
154
+ }, {
155
+ key: "createNodeData",
156
+ value: function createNodeData(data) {
157
+ return this.writeProvider.createData(data).then(function (result) {
158
+ return result;
159
+ }, function (error) {
160
+ return {
161
+ error: error
162
+ };
163
+ });
164
+ }
165
+
154
166
  /**
155
167
  * Delete the data from the write provider
156
168
  *
@@ -158,7 +170,6 @@ var SyncBlockProvider = exports.SyncBlockProvider = /*#__PURE__*/function (_Sync
158
170
  *
159
171
  * @returns Array of {resourceId?: string, error?: string}.
160
172
  */
161
- )
162
173
  }, {
163
174
  key: "deleteNodesData",
164
175
  value: (function () {
@@ -233,17 +233,15 @@ var ReferenceSyncBlockStoreManager = exports.ReferenceSyncBlockStoreManager = /*
233
233
  (_this2$fireAnalyticsE = _this2.fireAnalyticsEvent) === null || _this2$fireAnalyticsE === void 0 || _this2$fireAnalyticsE.call(_this2, (0, _errorHandling.fetchErrorPayload)(syncBlockInstance.error || 'Returned sync block instance does not have resource id'));
234
234
  return;
235
235
  }
236
+ var existingSyncBlock = _this2.getFromCache(syncBlockInstance.resourceId);
237
+ var resolvedSyncBlockInstance = existingSyncBlock ? (0, _resolveSyncBlockInstance.resolveSyncBlockInstance)(existingSyncBlock, syncBlockInstance) : syncBlockInstance;
238
+ _this2.updateCache(resolvedSyncBlockInstance);
239
+ resolvedData.push(resolvedSyncBlockInstance);
236
240
  if (syncBlockInstance.error) {
237
241
  var _this2$fireAnalyticsE2;
238
242
  (_this2$fireAnalyticsE2 = _this2.fireAnalyticsEvent) === null || _this2$fireAnalyticsE2 === void 0 || _this2$fireAnalyticsE2.call(_this2, (0, _errorHandling.fetchErrorPayload)(syncBlockInstance.error));
239
- _this2.updateCache(syncBlockInstance);
240
- resolvedData.push(syncBlockInstance);
241
243
  return;
242
244
  }
243
- var existingSyncBlock = _this2.getFromCache(syncBlockInstance.resourceId);
244
- var resolvedSyncBlockInstance = existingSyncBlock ? (0, _resolveSyncBlockInstance.resolveSyncBlockInstance)(existingSyncBlock, syncBlockInstance) : syncBlockInstance;
245
- _this2.updateCache(resolvedSyncBlockInstance);
246
- resolvedData.push(resolvedSyncBlockInstance);
247
245
  _this2.fetchSyncBlockSourceInfo(resolvedSyncBlockInstance.resourceId);
248
246
  });
249
247
  return _context3.abrupt("return", [].concat(resolvedData, blocksWithNotFoundError));
@@ -240,21 +240,19 @@ var SourceSyncBlockStoreManager = exports.SourceSyncBlockStoreManager = /*#__PUR
240
240
  }
241
241
  var resourceId = attrs.resourceId,
242
242
  blockInstanceId = attrs.localId;
243
- this.dataProvider.writeNodesData([(0, _utils.createBodiedSyncBlockNode)(blockInstanceId, resourceId)], [{
243
+ this.dataProvider.createNodeData({
244
244
  content: [],
245
245
  blockInstanceId: blockInstanceId,
246
246
  resourceId: resourceId
247
- }]).then(function (results) {
248
- results.forEach(function (result) {
249
- var resourceId = result.resourceId;
250
- if (resourceId) {
251
- _this4.commitPendingCreation(true);
252
- } else {
253
- var _this4$fireAnalyticsE;
254
- _this4.commitPendingCreation(false);
255
- (_this4$fireAnalyticsE = _this4.fireAnalyticsEvent) === null || _this4$fireAnalyticsE === void 0 || _this4$fireAnalyticsE.call(_this4, (0, _errorHandling.createErrorPayload)(result.error || 'Failed to create bodied sync block'));
256
- }
257
- });
247
+ }).then(function (result) {
248
+ var resourceId = result.resourceId;
249
+ if (resourceId) {
250
+ _this4.commitPendingCreation(true);
251
+ } else {
252
+ var _this4$fireAnalyticsE;
253
+ _this4.commitPendingCreation(false);
254
+ (_this4$fireAnalyticsE = _this4.fireAnalyticsEvent) === null || _this4$fireAnalyticsE === void 0 || _this4$fireAnalyticsE.call(_this4, (0, _errorHandling.createErrorPayload)(result.error || 'Failed to create bodied sync block'));
255
+ }
258
256
  }).catch(function (error) {
259
257
  var _this4$fireAnalyticsE2;
260
258
  _this4.commitPendingCreation(false);
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.resolveSyncBlockInstance = void 0;
8
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ var _types = require("../common/types");
9
10
  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; }
10
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; }
11
12
  /**
@@ -20,13 +21,16 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
20
21
  */
21
22
  var resolveSyncBlockInstance = exports.resolveSyncBlockInstance = function resolveSyncBlockInstance(oldResult, newResult) {
22
23
  var _newResult$data, _oldResult$data, _newResult$data2, _oldResult$data2;
23
- // if the old result has no data, we simple return the new result
24
+ // if the old result has no data, we simply return the new result
24
25
  if (!oldResult.data) {
25
26
  return newResult;
26
27
  } else if (!newResult.data) {
27
- // if the new result has no data, we simply return the old result
28
- // TODO: EDITOR-2533 - handle this case based on the error type and whether we should keep old data or not
29
- return oldResult;
28
+ // return the old result if there was an error, e.g. network error, but not if not found or forbidden
29
+ if (newResult.error === _types.SyncBlockError.NotFound || newResult.error === _types.SyncBlockError.Forbidden) {
30
+ return newResult;
31
+ } else {
32
+ return oldResult;
33
+ }
30
34
  }
31
35
 
32
36
  // otherwise, we merge the two results, preserving the sourceURL and sourceTitle from the old result if it exists