@atlaskit/editor-synced-block-provider 3.11.0 → 3.12.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.
Files changed (34) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/cjs/clients/block-service/blockService.js +2 -2
  3. package/dist/cjs/providers/block-service/blockServiceAPI.js +1 -1
  4. package/dist/cjs/store-manager/referenceSyncBlockStoreManager.js +92 -136
  5. package/dist/cjs/store-manager/sourceSyncBlockStoreManager.js +95 -124
  6. package/dist/cjs/utils/errorHandling.js +79 -19
  7. package/dist/cjs/utils/experienceTracking.js +119 -0
  8. package/dist/es2019/clients/block-service/blockService.js +2 -2
  9. package/dist/es2019/providers/block-service/blockServiceAPI.js +1 -1
  10. package/dist/es2019/store-manager/referenceSyncBlockStoreManager.js +85 -126
  11. package/dist/es2019/store-manager/sourceSyncBlockStoreManager.js +80 -89
  12. package/dist/es2019/utils/errorHandling.js +61 -10
  13. package/dist/es2019/utils/experienceTracking.js +113 -0
  14. package/dist/esm/clients/block-service/blockService.js +2 -2
  15. package/dist/esm/providers/block-service/blockServiceAPI.js +1 -1
  16. package/dist/esm/store-manager/referenceSyncBlockStoreManager.js +93 -137
  17. package/dist/esm/store-manager/sourceSyncBlockStoreManager.js +96 -125
  18. package/dist/esm/utils/errorHandling.js +77 -18
  19. package/dist/esm/utils/experienceTracking.js +113 -0
  20. package/dist/types/clients/block-service/blockService.d.ts +5 -5
  21. package/dist/types/providers/block-service/blockServiceAPI.d.ts +1 -1
  22. package/dist/types/providers/types.d.ts +5 -5
  23. package/dist/types/store-manager/referenceSyncBlockStoreManager.d.ts +0 -1
  24. package/dist/types/store-manager/sourceSyncBlockStoreManager.d.ts +1 -5
  25. package/dist/types/utils/errorHandling.d.ts +14 -9
  26. package/dist/types/utils/experienceTracking.d.ts +51 -0
  27. package/dist/types-ts4.5/clients/block-service/blockService.d.ts +5 -5
  28. package/dist/types-ts4.5/providers/block-service/blockServiceAPI.d.ts +1 -1
  29. package/dist/types-ts4.5/providers/types.d.ts +5 -5
  30. package/dist/types-ts4.5/store-manager/referenceSyncBlockStoreManager.d.ts +0 -1
  31. package/dist/types-ts4.5/store-manager/sourceSyncBlockStoreManager.d.ts +1 -5
  32. package/dist/types-ts4.5/utils/errorHandling.d.ts +14 -9
  33. package/dist/types-ts4.5/utils/experienceTracking.d.ts +51 -0
  34. package/package.json +2 -2
@@ -14,6 +14,7 @@ var _monitoring = require("@atlaskit/editor-common/monitoring");
14
14
  var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
15
15
  var _types = require("../common/types");
16
16
  var _errorHandling = require("../utils/errorHandling");
17
+ var _experienceTracking = require("../utils/experienceTracking");
17
18
  var _utils = require("../utils/utils");
18
19
  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; }
19
20
  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; }
@@ -39,21 +40,9 @@ var SourceSyncBlockStoreManager = exports.SourceSyncBlockStoreManager = /*#__PUR
39
40
  key: "setFireAnalyticsEvent",
40
41
  value: function setFireAnalyticsEvent(fireAnalyticsEvent) {
41
42
  this.fireAnalyticsEvent = fireAnalyticsEvent;
42
- }
43
- }, {
44
- key: "setCreateExperience",
45
- value: function setCreateExperience(createExperience) {
46
- this.createExperience = createExperience;
47
- }
48
- }, {
49
- key: "setSaveExperience",
50
- value: function setSaveExperience(saveExperience) {
51
- this.saveExperience = saveExperience;
52
- }
53
- }, {
54
- key: "setDeleteExperience",
55
- value: function setDeleteExperience(deleteExperience) {
56
- this.deleteExperience = deleteExperience;
43
+ this.createExperience = (0, _experienceTracking.getCreateSourceExperience)(fireAnalyticsEvent);
44
+ this.saveExperience = (0, _experienceTracking.getSaveSourceExperience)(fireAnalyticsEvent);
45
+ this.deleteExperience = (0, _experienceTracking.getDeleteSourceExperience)(fireAnalyticsEvent);
57
46
  }
58
47
  }, {
59
48
  key: "isSourceBlock",
@@ -103,7 +92,7 @@ var SourceSyncBlockStoreManager = exports.SourceSyncBlockStoreManager = /*#__PUR
103
92
  value: (function () {
104
93
  var _flush = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
105
94
  var _this2 = this;
106
- var bodiedSyncBlockNodes, bodiedSyncBlockData, _this$saveExperience, writeResults, successfulSaved, failedSave, _this$saveExperience2, _this$saveExperience3, _this$saveExperience4, _this$fireAnalyticsEv2;
95
+ var bodiedSyncBlockNodes, bodiedSyncBlockData, _this$saveExperience, writeResults, _this$saveExperience2, _this$saveExperience3, _this$fireAnalyticsEv2;
107
96
  return _regenerator.default.wrap(function _callee$(_context) {
108
97
  while (1) switch (_context.prev = _context.next) {
109
98
  case 0:
@@ -137,17 +126,16 @@ var SourceSyncBlockStoreManager = exports.SourceSyncBlockStoreManager = /*#__PUR
137
126
  }
138
127
  return _context.abrupt("return", Promise.resolve(true));
139
128
  case 6:
140
- // only start the save experience if we have sync blocks to save
141
- if ((0, _platformFeatureFlags.fg)('platform_synced_block_dogfooding')) {
142
- (_this$saveExperience = this.saveExperience) === null || _this$saveExperience === void 0 || _this$saveExperience.start({});
143
- }
144
- ;
145
129
  if (this.dataProvider) {
146
- _context.next = 10;
130
+ _context.next = 8;
147
131
  break;
148
132
  }
149
133
  throw new Error('Data provider not set');
150
- case 10:
134
+ case 8:
135
+ if ((0, _platformFeatureFlags.fg)('platform_synced_block_dogfooding')) {
136
+ (_this$saveExperience = this.saveExperience) === null || _this$saveExperience === void 0 || _this$saveExperience.start({});
137
+ }
138
+ ;
151
139
  _context.next = 12;
152
140
  return this.dataProvider.writeNodesData(bodiedSyncBlockNodes, bodiedSyncBlockData);
153
141
  case 12:
@@ -161,75 +149,50 @@ var SourceSyncBlockStoreManager = exports.SourceSyncBlockStoreManager = /*#__PUR
161
149
  }
162
150
  }
163
151
  });
164
- successfulSaved = writeResults.filter(function (result) {
165
- return result.resourceId && !result.error;
166
- }).map(function (result) {
167
- return {
168
- resourceId: result.resourceId
169
- };
170
- });
171
- failedSave = writeResults.filter(function (result) {
172
- return !result.resourceId || result.error;
173
- }).map(function (result) {
174
- return {
175
- resourceId: result.resourceId || 'unknown',
176
- failReason: result.error || 'Failed to save sync blocks'
177
- };
178
- });
179
152
  if (!writeResults.every(function (result) {
180
153
  return result.resourceId && !result.error;
181
154
  })) {
182
- _context.next = 22;
155
+ _context.next = 20;
183
156
  break;
184
157
  }
185
158
  if ((0, _platformFeatureFlags.fg)('platform_synced_block_dogfooding')) {
186
- (_this$saveExperience2 = this.saveExperience) === null || _this$saveExperience2 === void 0 || _this$saveExperience2.success({
187
- metadata: {
188
- successfulSaved: successfulSaved
159
+ (_this$saveExperience2 = this.saveExperience) === null || _this$saveExperience2 === void 0 || _this$saveExperience2.success();
160
+ writeResults.forEach(function (result) {
161
+ if (result.resourceId && !result.error) {
162
+ var _this2$fireAnalyticsE;
163
+ (_this2$fireAnalyticsE = _this2.fireAnalyticsEvent) === null || _this2$fireAnalyticsE === void 0 || _this2$fireAnalyticsE.call(_this2, (0, _errorHandling.updateSuccessPayload)(result.resourceId, false));
189
164
  }
190
165
  });
191
166
  }
192
167
  ;
193
168
  return _context.abrupt("return", true);
194
- case 22:
169
+ case 20:
195
170
  if ((0, _platformFeatureFlags.fg)('platform_synced_block_dogfooding')) {
196
- (_this$saveExperience3 = this.saveExperience) === null || _this$saveExperience3 === void 0 || _this$saveExperience3.failure({
197
- metadata: {
198
- successfulSaved: successfulSaved,
199
- failedSave: failedSave
200
- }
201
- });
202
- } else {
203
- writeResults.filter(function (result) {
204
- return !result.resourceId || result.error;
205
- }).forEach(function (result) {
206
- var _this2$fireAnalyticsE;
207
- (_this2$fireAnalyticsE = _this2.fireAnalyticsEvent) === null || _this2$fireAnalyticsE === void 0 || _this2$fireAnalyticsE.call(_this2, (0, _errorHandling.updateErrorPayload)(result.error || 'Failed to write data'));
208
- });
171
+ (_this$saveExperience3 = this.saveExperience) === null || _this$saveExperience3 === void 0 || _this$saveExperience3.failure();
209
172
  }
173
+ writeResults.filter(function (result) {
174
+ return !result.resourceId || result.error;
175
+ }).forEach(function (result) {
176
+ var _this2$fireAnalyticsE2;
177
+ (_this2$fireAnalyticsE2 = _this2.fireAnalyticsEvent) === null || _this2$fireAnalyticsE2 === void 0 || _this2$fireAnalyticsE2.call(_this2, (0, _errorHandling.updateErrorPayload)(result.error || 'Failed to write data', result.resourceId));
178
+ });
210
179
  return _context.abrupt("return", false);
211
- case 24:
212
- _context.next = 31;
180
+ case 23:
181
+ _context.next = 30;
213
182
  break;
214
- case 26:
215
- _context.prev = 26;
183
+ case 25:
184
+ _context.prev = 25;
216
185
  _context.t0 = _context["catch"](0);
217
186
  (0, _monitoring.logException)(_context.t0, {
218
187
  location: 'editor-synced-block-provider/sourceSyncBlockStoreManager'
219
188
  });
220
- if ((0, _platformFeatureFlags.fg)('platform_synced_block_dogfooding')) {
221
- (_this$saveExperience4 = this.saveExperience) === null || _this$saveExperience4 === void 0 || _this$saveExperience4.failure({
222
- reason: _context.t0.message
223
- });
224
- } else {
225
- (_this$fireAnalyticsEv2 = this.fireAnalyticsEvent) === null || _this$fireAnalyticsEv2 === void 0 || _this$fireAnalyticsEv2.call(this, (0, _errorHandling.updateErrorPayload)(_context.t0.message));
226
- }
189
+ (_this$fireAnalyticsEv2 = this.fireAnalyticsEvent) === null || _this$fireAnalyticsEv2 === void 0 || _this$fireAnalyticsEv2.call(this, (0, _errorHandling.updateErrorPayload)(_context.t0.message));
227
190
  return _context.abrupt("return", false);
228
- case 31:
191
+ case 30:
229
192
  case "end":
230
193
  return _context.stop();
231
194
  }
232
- }, _callee, this, [[0, 26]]);
195
+ }, _callee, this, [[0, 25]]);
233
196
  }));
234
197
  function flush() {
235
198
  return _flush.apply(this, arguments);
@@ -260,6 +223,13 @@ var SourceSyncBlockStoreManager = exports.SourceSyncBlockStoreManager = /*#__PUR
260
223
  value: function commitPendingCreation(success) {
261
224
  if (success && this.creationCallback) {
262
225
  this.creationCallback();
226
+ if ((0, _platformFeatureFlags.fg)('platform_synced_block_dogfooding')) {
227
+ var _this$fireAnalyticsEv3;
228
+ (_this$fireAnalyticsEv3 = this.fireAnalyticsEvent) === null || _this$fireAnalyticsEv3 === void 0 || _this$fireAnalyticsEv3.call(this, (0, _errorHandling.createSuccessPayload)(this.pendingResourceId || ''));
229
+ }
230
+ } else if (success && !this.creationCallback && (0, _platformFeatureFlags.fg)('platform_synced_block_dogfooding')) {
231
+ var _this$fireAnalyticsEv4;
232
+ (_this$fireAnalyticsEv4 = this.fireAnalyticsEvent) === null || _this$fireAnalyticsEv4 === void 0 || _this$fireAnalyticsEv4.call(this, (0, _errorHandling.createErrorPayload)('creation callback missing', this.pendingResourceId));
263
233
  }
264
234
  this.pendingResourceId = undefined;
265
235
  this.creationCallback = undefined;
@@ -316,11 +286,13 @@ var SourceSyncBlockStoreManager = exports.SourceSyncBlockStoreManager = /*#__PUR
316
286
  value: function createBodiedSyncBlockNode(attrs) {
317
287
  var _this4 = this;
318
288
  try {
289
+ var _this$createExperienc;
319
290
  if (!this.dataProvider) {
320
291
  throw new Error('Data provider not set');
321
292
  }
322
293
  var resourceId = attrs.resourceId,
323
294
  blockInstanceId = attrs.localId;
295
+ (_this$createExperienc = this.createExperience) === null || _this$createExperienc === void 0 || _this$createExperienc.start({});
324
296
  this.dataProvider.createNodeData({
325
297
  content: [],
326
298
  blockInstanceId: blockInstanceId,
@@ -329,50 +301,45 @@ var SourceSyncBlockStoreManager = exports.SourceSyncBlockStoreManager = /*#__PUR
329
301
  var resourceId = result.resourceId;
330
302
  if (resourceId) {
331
303
  _this4.commitPendingCreation(true);
304
+ if ((0, _platformFeatureFlags.fg)('platform_synced_block_dogfooding')) {
305
+ var _this4$createExperien;
306
+ (_this4$createExperien = _this4.createExperience) === null || _this4$createExperien === void 0 || _this4$createExperien.success();
307
+ }
332
308
  } else {
309
+ var _this4$fireAnalyticsE;
333
310
  _this4.commitPendingCreation(false);
334
311
  if ((0, _platformFeatureFlags.fg)('platform_synced_block_dogfooding')) {
335
- var _this4$createExperien;
336
- (_this4$createExperien = _this4.createExperience) === null || _this4$createExperien === void 0 || _this4$createExperien.failure({
312
+ var _this4$createExperien2;
313
+ (_this4$createExperien2 = _this4.createExperience) === null || _this4$createExperien2 === void 0 || _this4$createExperien2.failure({
337
314
  reason: result.error || 'Failed to create bodied sync block'
338
315
  });
339
- } else {
340
- var _this4$fireAnalyticsE;
341
- (_this4$fireAnalyticsE = _this4.fireAnalyticsEvent) === null || _this4$fireAnalyticsE === void 0 || _this4$fireAnalyticsE.call(_this4, (0, _errorHandling.createErrorPayload)(result.error || 'Failed to create bodied sync block'));
342
316
  }
317
+ (_this4$fireAnalyticsE = _this4.fireAnalyticsEvent) === null || _this4$fireAnalyticsE === void 0 || _this4$fireAnalyticsE.call(_this4, (0, _errorHandling.createErrorPayload)(result.error || 'Failed to create bodied sync block', resourceId));
343
318
  }
344
319
  }).catch(function (error) {
320
+ var _this4$fireAnalyticsE2;
345
321
  _this4.commitPendingCreation(false);
346
322
  (0, _monitoring.logException)(error, {
347
323
  location: 'editor-synced-block-provider/sourceSyncBlockStoreManager'
348
324
  });
349
325
  if ((0, _platformFeatureFlags.fg)('platform_synced_block_dogfooding')) {
350
- var _this4$createExperien2;
351
- (_this4$createExperien2 = _this4.createExperience) === null || _this4$createExperien2 === void 0 || _this4$createExperien2.failure({
326
+ var _this4$createExperien3;
327
+ (_this4$createExperien3 = _this4.createExperience) === null || _this4$createExperien3 === void 0 || _this4$createExperien3.failure({
352
328
  reason: error.message
353
329
  });
354
- } else {
355
- var _this4$fireAnalyticsE2;
356
- (_this4$fireAnalyticsE2 = _this4.fireAnalyticsEvent) === null || _this4$fireAnalyticsE2 === void 0 || _this4$fireAnalyticsE2.call(_this4, (0, _errorHandling.createErrorPayload)(error.message));
357
330
  }
331
+ (_this4$fireAnalyticsE2 = _this4.fireAnalyticsEvent) === null || _this4$fireAnalyticsE2 === void 0 || _this4$fireAnalyticsE2.call(_this4, (0, _errorHandling.createErrorPayload)(error.message, resourceId));
358
332
  });
359
333
  this.registerPendingCreation(resourceId);
360
334
  } catch (error) {
335
+ var _this$fireAnalyticsEv5;
361
336
  if (this.hasPendingCreation()) {
362
337
  this.commitPendingCreation(false);
363
338
  }
364
339
  (0, _monitoring.logException)(error, {
365
340
  location: 'editor-synced-block-provider/sourceSyncBlockStoreManager'
366
341
  });
367
- if ((0, _platformFeatureFlags.fg)('platform_synced_block_dogfooding')) {
368
- var _this$createExperienc;
369
- (_this$createExperienc = this.createExperience) === null || _this$createExperienc === void 0 || _this$createExperienc.failure({
370
- reason: error.message
371
- });
372
- } else {
373
- var _this$fireAnalyticsEv3;
374
- (_this$fireAnalyticsEv3 = this.fireAnalyticsEvent) === null || _this$fireAnalyticsEv3 === void 0 || _this$fireAnalyticsEv3.call(this, (0, _errorHandling.createErrorPayload)(error.message));
375
- }
342
+ (_this$fireAnalyticsEv5 = this.fireAnalyticsEvent) === null || _this$fireAnalyticsEv5 === void 0 || _this$fireAnalyticsEv5.call(this, (0, _errorHandling.createErrorPayload)(error.message));
376
343
  }
377
344
  }
378
345
  }, {
@@ -380,7 +347,7 @@ var SourceSyncBlockStoreManager = exports.SourceSyncBlockStoreManager = /*#__PUR
380
347
  value: function () {
381
348
  var _delete2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(syncBlockIds, onDelete, onDeleteCompleted) {
382
349
  var _this5 = this;
383
- var results, callback, isDeleteSuccessful, _this$deleteExperienc, successfulDeleted, failedDelete, _this$deleteExperienc2, _this$fireAnalyticsEv4;
350
+ var _this$deleteExperienc, results, callback, isDeleteSuccessful, _this$deleteExperienc2, _this$deleteExperienc3;
384
351
  return _regenerator.default.wrap(function _callee2$(_context2) {
385
352
  while (1) switch (_context2.prev = _context2.next) {
386
353
  case 0:
@@ -394,11 +361,14 @@ var SourceSyncBlockStoreManager = exports.SourceSyncBlockStoreManager = /*#__PUR
394
361
  syncBlockIds.forEach(function (Ids) {
395
362
  _this5.setPendingDeletion(Ids, true);
396
363
  });
397
- _context2.next = 6;
364
+ if ((0, _platformFeatureFlags.fg)('platform_synced_block_dogfooding')) {
365
+ (_this$deleteExperienc = this.deleteExperience) === null || _this$deleteExperienc === void 0 || _this$deleteExperienc.start({});
366
+ }
367
+ _context2.next = 7;
398
368
  return this.dataProvider.deleteNodesData(syncBlockIds.map(function (attrs) {
399
369
  return attrs.resourceId;
400
370
  }));
401
- case 6:
371
+ case 7:
402
372
  results = _context2.sent;
403
373
  isDeleteSuccessful = results.every(function (result) {
404
374
  return result.success;
@@ -410,66 +380,57 @@ var SourceSyncBlockStoreManager = exports.SourceSyncBlockStoreManager = /*#__PUR
410
380
  return _this5.syncBlockCache.delete(Ids.resourceId);
411
381
  };
412
382
  this.clearPendingDeletion();
383
+ if ((0, _platformFeatureFlags.fg)('platform_synced_block_dogfooding')) {
384
+ (_this$deleteExperienc2 = this.deleteExperience) === null || _this$deleteExperienc2 === void 0 || _this$deleteExperienc2.success();
385
+ results.forEach(function (result) {
386
+ var _this5$fireAnalyticsE;
387
+ (_this5$fireAnalyticsE = _this5.fireAnalyticsEvent) === null || _this5$fireAnalyticsE === void 0 || _this5$fireAnalyticsE.call(_this5, (0, _errorHandling.deleteSuccessPayload)(result.resourceId));
388
+ });
389
+ }
413
390
  } else {
414
391
  callback = function callback(Ids) {
415
392
  _this5.setPendingDeletion(Ids, false);
416
393
  };
417
394
  if ((0, _platformFeatureFlags.fg)('platform_synced_block_dogfooding')) {
418
- successfulDeleted = results.filter(function (result) {
419
- return result.success;
420
- }).map(function (result) {
421
- return {
422
- resourceId: result.resourceId
423
- };
424
- });
425
- failedDelete = results.filter(function (result) {
426
- return !result.success;
427
- }).map(function (result) {
428
- return {
429
- resourceId: result.resourceId || 'unknown',
430
- failReason: result.error || 'Failed to delete sync block'
431
- };
432
- });
433
- (_this$deleteExperienc = this.deleteExperience) === null || _this$deleteExperienc === void 0 || _this$deleteExperienc.failure({
434
- metadata: {
435
- successfulDeleted: successfulDeleted,
436
- failedDelete: failedDelete
395
+ (_this$deleteExperienc3 = this.deleteExperience) === null || _this$deleteExperienc3 === void 0 || _this$deleteExperienc3.failure();
396
+ results.forEach(function (result) {
397
+ if (result.success) {
398
+ var _this5$fireAnalyticsE2;
399
+ (_this5$fireAnalyticsE2 = _this5.fireAnalyticsEvent) === null || _this5$fireAnalyticsE2 === void 0 || _this5$fireAnalyticsE2.call(_this5, (0, _errorHandling.deleteSuccessPayload)(result.resourceId));
400
+ } else {
401
+ var _this5$fireAnalyticsE3;
402
+ (_this5$fireAnalyticsE3 = _this5.fireAnalyticsEvent) === null || _this5$fireAnalyticsE3 === void 0 || _this5$fireAnalyticsE3.call(_this5, (0, _errorHandling.deleteErrorPayload)(result.error || 'Failed to delete synced block', result.resourceId));
437
403
  }
438
404
  });
439
405
  } else {
440
406
  results.filter(function (result) {
441
407
  return result.resourceId === undefined;
442
408
  }).forEach(function (result) {
443
- var _this5$fireAnalyticsE;
444
- (_this5$fireAnalyticsE = _this5.fireAnalyticsEvent) === null || _this5$fireAnalyticsE === void 0 || _this5$fireAnalyticsE.call(_this5, (0, _errorHandling.deleteErrorPayload)(result.error || 'Failed to delete synced block'));
409
+ var _this5$fireAnalyticsE4;
410
+ (_this5$fireAnalyticsE4 = _this5.fireAnalyticsEvent) === null || _this5$fireAnalyticsE4 === void 0 || _this5$fireAnalyticsE4.call(_this5, (0, _errorHandling.deleteErrorPayload)(result.error || 'Failed to delete synced block'));
445
411
  });
446
412
  }
447
413
  }
448
414
  syncBlockIds.forEach(callback);
449
415
  return _context2.abrupt("return", isDeleteSuccessful);
450
- case 14:
451
- _context2.prev = 14;
416
+ case 15:
417
+ _context2.prev = 15;
452
418
  _context2.t0 = _context2["catch"](0);
453
419
  syncBlockIds.forEach(function (Ids) {
420
+ var _this5$fireAnalyticsE5;
454
421
  _this5.setPendingDeletion(Ids, false);
422
+ (_this5$fireAnalyticsE5 = _this5.fireAnalyticsEvent) === null || _this5$fireAnalyticsE5 === void 0 || _this5$fireAnalyticsE5.call(_this5, (0, _errorHandling.deleteErrorPayload)(_context2.t0.message, Ids.resourceId));
455
423
  });
456
424
  (0, _monitoring.logException)(_context2.t0, {
457
425
  location: 'editor-synced-block-provider/sourceSyncBlockStoreManager'
458
426
  });
459
- if ((0, _platformFeatureFlags.fg)('platform_synced_block_dogfooding')) {
460
- (_this$deleteExperienc2 = this.deleteExperience) === null || _this$deleteExperienc2 === void 0 || _this$deleteExperienc2.failure({
461
- reason: _context2.t0.message
462
- });
463
- } else {
464
- (_this$fireAnalyticsEv4 = this.fireAnalyticsEvent) === null || _this$fireAnalyticsEv4 === void 0 || _this$fireAnalyticsEv4.call(this, (0, _errorHandling.deleteErrorPayload)(_context2.t0.message));
465
- }
466
427
  onDeleteCompleted(false);
467
428
  return _context2.abrupt("return", false);
468
429
  case 21:
469
430
  case "end":
470
431
  return _context2.stop();
471
432
  }
472
- }, _callee2, this, [[0, 14]]);
433
+ }, _callee2, this, [[0, 15]]);
473
434
  }));
474
435
  function _delete(_x, _x2, _x3) {
475
436
  return _delete2.apply(this, arguments);
@@ -587,22 +548,32 @@ var SourceSyncBlockStoreManager = exports.SourceSyncBlockStoreManager = /*#__PUR
587
548
  }
588
549
  return this.dataProvider.fetchSyncBlockSourceInfo(localId, undefined, undefined, this.fireAnalyticsEvent);
589
550
  } catch (error) {
590
- var _this$fireAnalyticsEv5;
551
+ var _this$fireAnalyticsEv6;
591
552
  (0, _monitoring.logException)(error, {
592
553
  location: 'editor-synced-block-provider/sourceSyncBlockStoreManager'
593
554
  });
594
- (_this$fireAnalyticsEv5 = this.fireAnalyticsEvent) === null || _this$fireAnalyticsEv5 === void 0 || _this$fireAnalyticsEv5.call(this, (0, _errorHandling.getSourceInfoErrorPayload)(error.message));
555
+ (_this$fireAnalyticsEv6 = this.fireAnalyticsEvent) === null || _this$fireAnalyticsEv6 === void 0 || _this$fireAnalyticsEv6.call(this, (0, _errorHandling.getSourceInfoErrorPayload)(error.message));
595
556
  return Promise.resolve(undefined);
596
557
  }
597
558
  }
598
559
  }, {
599
560
  key: "destroy",
600
561
  value: function destroy() {
562
+ var _this$saveExperience4, _this$createExperienc2, _this$deleteExperienc4;
601
563
  this.syncBlockCache.clear();
602
564
  this.confirmationCallback = undefined;
603
565
  this.pendingResourceId = undefined;
604
566
  this.creationCallback = undefined;
605
567
  this.dataProvider = undefined;
568
+ (_this$saveExperience4 = this.saveExperience) === null || _this$saveExperience4 === void 0 || _this$saveExperience4.abort({
569
+ reason: 'editor-destroyed'
570
+ });
571
+ (_this$createExperienc2 = this.createExperience) === null || _this$createExperienc2 === void 0 || _this$createExperienc2.abort({
572
+ reason: 'editor-destroyed'
573
+ });
574
+ (_this$deleteExperienc4 = this.deleteExperience) === null || _this$deleteExperienc4 === void 0 || _this$deleteExperienc4.abort({
575
+ reason: 'editor-destroyed'
576
+ });
606
577
  this.clearPendingDeletion();
607
578
  }
608
579
  }]);
@@ -1,10 +1,15 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
6
- exports.updateReferenceErrorPayload = exports.updateErrorPayload = exports.updateCacheErrorPayload = exports.stringifyError = exports.getSourceInfoErrorPayload = exports.getErrorPayload = exports.fetchReferencesErrorPayload = exports.fetchErrorPayload = exports.deleteErrorPayload = 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.createSuccessPayload = exports.createErrorPayload = void 0;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
7
9
  var _analytics = require("@atlaskit/editor-common/analytics");
10
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
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; }
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; }
8
13
  var stringifyError = exports.stringifyError = function stringifyError(error) {
9
14
  try {
10
15
  return JSON.stringify(error);
@@ -12,38 +17,93 @@ var stringifyError = exports.stringifyError = function stringifyError(error) {
12
17
  return undefined;
13
18
  }
14
19
  };
15
- var getErrorPayload = exports.getErrorPayload = function getErrorPayload(actionSubjectId, error) {
20
+ var getErrorPayload = exports.getErrorPayload = function getErrorPayload(actionSubjectId, error, resourceId) {
16
21
  return {
17
22
  action: _analytics.ACTION.ERROR,
18
23
  actionSubject: _analytics.ACTION_SUBJECT.SYNCED_BLOCK,
19
24
  actionSubjectId: actionSubjectId,
20
25
  eventType: _analytics.EVENT_TYPE.OPERATIONAL,
21
- attributes: {
26
+ attributes: (0, _platformFeatureFlags.fg)('platform_synced_block_dogfooding') ? _objectSpread({
27
+ error: error
28
+ }, resourceId && {
29
+ resourceId: resourceId
30
+ }) : {
22
31
  error: error
23
32
  }
24
33
  };
25
34
  };
26
- var fetchErrorPayload = exports.fetchErrorPayload = function fetchErrorPayload(error) {
27
- return getErrorPayload(_analytics.ACTION_SUBJECT_ID.SYNCED_BLOCK_FETCH, error);
35
+ var fetchErrorPayload = exports.fetchErrorPayload = function fetchErrorPayload(error, resourceId) {
36
+ return getErrorPayload(_analytics.ACTION_SUBJECT_ID.SYNCED_BLOCK_FETCH, error, resourceId);
37
+ };
38
+ var getSourceInfoErrorPayload = exports.getSourceInfoErrorPayload = function getSourceInfoErrorPayload(error, resourceId) {
39
+ return getErrorPayload(_analytics.ACTION_SUBJECT_ID.SYNCED_BLOCK_GET_SOURCE_INFO, error, resourceId);
40
+ };
41
+ var updateErrorPayload = exports.updateErrorPayload = function updateErrorPayload(error, resourceId) {
42
+ return getErrorPayload(_analytics.ACTION_SUBJECT_ID.SYNCED_BLOCK_UPDATE, error, resourceId);
28
43
  };
29
- var getSourceInfoErrorPayload = exports.getSourceInfoErrorPayload = function getSourceInfoErrorPayload(error) {
30
- return getErrorPayload(_analytics.ACTION_SUBJECT_ID.SYNCED_BLOCK_GET_SOURCE_INFO, error);
44
+ var updateReferenceErrorPayload = exports.updateReferenceErrorPayload = function updateReferenceErrorPayload(error, resourceId) {
45
+ return getErrorPayload(_analytics.ACTION_SUBJECT_ID.REFERENCE_SYNCED_BLOCK_UPDATE, error, resourceId);
31
46
  };
32
- var updateErrorPayload = exports.updateErrorPayload = function updateErrorPayload(error) {
33
- return getErrorPayload(_analytics.ACTION_SUBJECT_ID.SYNCED_BLOCK_UPDATE, error);
47
+ var createErrorPayload = exports.createErrorPayload = function createErrorPayload(error, resourceId) {
48
+ return getErrorPayload(_analytics.ACTION_SUBJECT_ID.SYNCED_BLOCK_CREATE, error, resourceId);
34
49
  };
35
- var updateReferenceErrorPayload = exports.updateReferenceErrorPayload = function updateReferenceErrorPayload(error) {
36
- return getErrorPayload(_analytics.ACTION_SUBJECT_ID.REFERENCE_SYNCED_BLOCK_UPDATE, error);
50
+ var deleteErrorPayload = exports.deleteErrorPayload = function deleteErrorPayload(error, resourceId) {
51
+ return getErrorPayload(_analytics.ACTION_SUBJECT_ID.SYNCED_BLOCK_DELETE, error, resourceId);
37
52
  };
38
- var createErrorPayload = exports.createErrorPayload = function createErrorPayload(error) {
39
- return getErrorPayload(_analytics.ACTION_SUBJECT_ID.SYNCED_BLOCK_CREATE, error);
53
+ var updateCacheErrorPayload = exports.updateCacheErrorPayload = function updateCacheErrorPayload(error, resourceId) {
54
+ return getErrorPayload(_analytics.ACTION_SUBJECT_ID.SYNCED_BLOCK_UPDATE_CACHE, error, resourceId);
40
55
  };
41
- var deleteErrorPayload = exports.deleteErrorPayload = function deleteErrorPayload(error) {
42
- return getErrorPayload(_analytics.ACTION_SUBJECT_ID.SYNCED_BLOCK_DELETE, error);
56
+ var fetchReferencesErrorPayload = exports.fetchReferencesErrorPayload = function fetchReferencesErrorPayload(error, resourceId) {
57
+ return getErrorPayload(_analytics.ACTION_SUBJECT_ID.SYNCED_BLOCK_FETCH_REFERENCES, error, resourceId);
43
58
  };
44
- var updateCacheErrorPayload = exports.updateCacheErrorPayload = function updateCacheErrorPayload(error) {
45
- return getErrorPayload(_analytics.ACTION_SUBJECT_ID.SYNCED_BLOCK_UPDATE_CACHE, error);
59
+
60
+ // Success payloads
61
+ var fetchSuccessPayload = exports.fetchSuccessPayload = function fetchSuccessPayload(resourceId, blockInstanceId, sourceProduct) {
62
+ return {
63
+ action: _analytics.ACTION.FETCHED,
64
+ actionSubject: _analytics.ACTION_SUBJECT.SYNCED_BLOCK,
65
+ actionSubjectId: _analytics.ACTION_SUBJECT_ID.SYNCED_BLOCK_FETCH,
66
+ eventType: _analytics.EVENT_TYPE.OPERATIONAL,
67
+ attributes: _objectSpread({
68
+ resourceId: resourceId,
69
+ blockInstanceId: blockInstanceId
70
+ }, sourceProduct && {
71
+ sourceProduct: sourceProduct
72
+ })
73
+ };
46
74
  };
47
- var fetchReferencesErrorPayload = exports.fetchReferencesErrorPayload = function fetchReferencesErrorPayload(error) {
48
- return getErrorPayload(_analytics.ACTION_SUBJECT_ID.SYNCED_BLOCK_FETCH_REFERENCES, error);
75
+ var createSuccessPayload = exports.createSuccessPayload = function createSuccessPayload(resourceId) {
76
+ return {
77
+ action: _analytics.ACTION.INSERTED,
78
+ actionSubject: _analytics.ACTION_SUBJECT.SYNCED_BLOCK,
79
+ actionSubjectId: _analytics.ACTION_SUBJECT_ID.SYNCED_BLOCK_CREATE,
80
+ eventType: _analytics.EVENT_TYPE.OPERATIONAL,
81
+ attributes: {
82
+ resourceId: resourceId
83
+ }
84
+ };
85
+ };
86
+ var updateSuccessPayload = exports.updateSuccessPayload = function updateSuccessPayload(resourceId, hasReference) {
87
+ return {
88
+ action: _analytics.ACTION.UPDATED,
89
+ actionSubject: _analytics.ACTION_SUBJECT.SYNCED_BLOCK,
90
+ actionSubjectId: _analytics.ACTION_SUBJECT_ID.SYNCED_BLOCK_UPDATE,
91
+ eventType: _analytics.EVENT_TYPE.OPERATIONAL,
92
+ attributes: _objectSpread({
93
+ resourceId: resourceId
94
+ }, hasReference !== undefined && {
95
+ hasReference: hasReference
96
+ })
97
+ };
98
+ };
99
+ var deleteSuccessPayload = exports.deleteSuccessPayload = function deleteSuccessPayload(resourceId) {
100
+ return {
101
+ action: _analytics.ACTION.DELETED,
102
+ actionSubject: _analytics.ACTION_SUBJECT.SYNCED_BLOCK,
103
+ actionSubjectId: _analytics.ACTION_SUBJECT_ID.SYNCED_BLOCK_DELETE,
104
+ eventType: _analytics.EVENT_TYPE.OPERATIONAL,
105
+ attributes: {
106
+ resourceId: resourceId
107
+ }
108
+ };
49
109
  };
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getSaveSourceExperience = exports.getSaveReferenceExperience = exports.getFetchSourceInfoExperience = exports.getFetchExperience = exports.getDeleteSourceExperience = exports.getCreateSourceExperience = exports.createExperienceDispatcher = void 0;
7
+ var _analytics = require("@atlaskit/editor-common/analytics");
8
+ var _experiences = require("@atlaskit/editor-common/experiences");
9
+ var TIMEOUT_DURATION = 30000;
10
+ var createExperienceDispatcher = exports.createExperienceDispatcher = function createExperienceDispatcher(fireAnalyticsEvent) {
11
+ return function (payload) {
12
+ // Runtime type guard - only forward experience events
13
+ if (payload.action === _analytics.ACTION.EXPERIENCE_MEASURED || payload.action === _analytics.ACTION.EXPERIENCE_SAMPLED) {
14
+ fireAnalyticsEvent === null || fireAnalyticsEvent === void 0 || fireAnalyticsEvent(payload);
15
+ }
16
+ };
17
+ };
18
+
19
+ /**
20
+ * This experience tracks when a source sync block is saved to the BE.
21
+ *
22
+ * Start: When the flush source sync block function is called.
23
+ * Success: When the sync block save is successful within the timeout duration of start.
24
+ * Failure: When the timeout duration passes without the sync block being successfully saved
25
+ */
26
+ var getSaveSourceExperience = exports.getSaveSourceExperience = function getSaveSourceExperience(fireAnalyticsEvent) {
27
+ return new _experiences.Experience(_experiences.EXPERIENCE_ID.ASYNC_OPERATION, {
28
+ action: _analytics.ACTION.SYNCED_BLOCK_UPDATE,
29
+ dispatchAnalyticsEvent: createExperienceDispatcher(fireAnalyticsEvent),
30
+ checks: [new _experiences.ExperienceCheckTimeout({
31
+ durationMs: TIMEOUT_DURATION
32
+ })]
33
+ });
34
+ };
35
+
36
+ /**
37
+ * This experience tracks when a reference sync block is saved to the BE.
38
+ *
39
+ * Start: When the flush sync block function is called.
40
+ * Success: When the sync block save is successful within the timeout duration of start.
41
+ * Failure: When the timeout duration passes without the sync block being successfully saved
42
+ */
43
+ var getSaveReferenceExperience = exports.getSaveReferenceExperience = function getSaveReferenceExperience(fireAnalyticsEvent) {
44
+ return new _experiences.Experience(_experiences.EXPERIENCE_ID.ASYNC_OPERATION, {
45
+ action: _analytics.ACTION.REFERENCE_SYNCED_BLOCK_UPDATE,
46
+ dispatchAnalyticsEvent: createExperienceDispatcher(fireAnalyticsEvent),
47
+ checks: [new _experiences.ExperienceCheckTimeout({
48
+ durationMs: TIMEOUT_DURATION
49
+ })]
50
+ });
51
+ };
52
+
53
+ /**
54
+ * This experience tracks when a reference sync block data is fetched from the BE.
55
+ *
56
+ * Start: When the fetchNodesData function is called.
57
+ * Success: When the fetching the data is successful within the timeout duration of start.
58
+ * Failure: When the timeout duration passes without the data being successfully fetched, or the fetch fails
59
+ */
60
+ var getFetchExperience = exports.getFetchExperience = function getFetchExperience(fireAnalyticsEvent) {
61
+ return new _experiences.Experience(_experiences.EXPERIENCE_ID.ASYNC_OPERATION, {
62
+ action: _analytics.ACTION.SYNCED_BLOCK_FETCH,
63
+ dispatchAnalyticsEvent: createExperienceDispatcher(fireAnalyticsEvent),
64
+ checks: [new _experiences.ExperienceCheckTimeout({
65
+ durationMs: TIMEOUT_DURATION
66
+ })]
67
+ });
68
+ };
69
+
70
+ /**
71
+ * This experience tracks when a reference sync block source info data (title, url) is fetched from the BE.
72
+ *
73
+ * Start: When the fetchSourceInfo function is called.
74
+ * Success: When the fetching the data is successful within the timeout duration of start.
75
+ * Failure: When the timeout duration passes without the data being successfully fetched, or the fetch fails
76
+ */
77
+ var getFetchSourceInfoExperience = exports.getFetchSourceInfoExperience = function getFetchSourceInfoExperience(fireAnalyticsEvent) {
78
+ return new _experiences.Experience(_experiences.EXPERIENCE_ID.ASYNC_OPERATION, {
79
+ action: _analytics.ACTION.SYNCED_BLOCK_GET_SOURCE_INFO,
80
+ dispatchAnalyticsEvent: createExperienceDispatcher(fireAnalyticsEvent),
81
+ checks: [new _experiences.ExperienceCheckTimeout({
82
+ durationMs: TIMEOUT_DURATION
83
+ })]
84
+ });
85
+ };
86
+
87
+ /**
88
+ * This experience tracks when a source sync block is deleted from the BE.
89
+ *
90
+ * Start: When the fetchSourceInfo function is called.
91
+ * Success: When the fetching the data is successful within the timeout duration of start.
92
+ * Failure: When the timeout duration passes without the data being successfully fetched, or the fetch fails
93
+ */
94
+ var getDeleteSourceExperience = exports.getDeleteSourceExperience = function getDeleteSourceExperience(fireAnalyticsEvent) {
95
+ return new _experiences.Experience(_experiences.EXPERIENCE_ID.ASYNC_OPERATION, {
96
+ action: _analytics.ACTION.SYNCED_BLOCK_DELETE,
97
+ dispatchAnalyticsEvent: createExperienceDispatcher(fireAnalyticsEvent),
98
+ checks: [new _experiences.ExperienceCheckTimeout({
99
+ durationMs: TIMEOUT_DURATION
100
+ })]
101
+ });
102
+ };
103
+
104
+ /**
105
+ * This experience tracks when a source sync block is created and registered to the BE.
106
+ *
107
+ * Start: When the fetchSourceInfo function is called.
108
+ * Success: When the fetching the data is successful within the timeout duration of start.
109
+ * Failure: When the timeout duration passes without the data being successfully fetched, or the fetch fails
110
+ */
111
+ var getCreateSourceExperience = exports.getCreateSourceExperience = function getCreateSourceExperience(fireAnalyticsEvent) {
112
+ return new _experiences.Experience(_experiences.EXPERIENCE_ID.ASYNC_OPERATION, {
113
+ action: _analytics.ACTION.SYNCED_BLOCK_CREATE,
114
+ dispatchAnalyticsEvent: createExperienceDispatcher(fireAnalyticsEvent),
115
+ checks: [new _experiences.ExperienceCheckTimeout({
116
+ durationMs: TIMEOUT_DURATION
117
+ })]
118
+ });
119
+ };