@atlaskit/editor-synced-block-provider 6.5.2 → 6.5.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 (51) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/cjs/clients/jira/sourceInfo.js +63 -10
  3. package/dist/cjs/hooks/useFetchSyncBlockData.js +1 -1
  4. package/dist/cjs/providers/types.js +6 -0
  5. package/dist/cjs/store-manager/referenceSyncBlockStoreManager.js +24 -12
  6. package/dist/cjs/store-manager/sourceSyncBlockStoreManager.js +18 -15
  7. package/dist/cjs/store-manager/syncBlockBatchFetcher.js +1 -1
  8. package/dist/cjs/store-manager/syncBlockProviderFactoryManager.js +6 -4
  9. package/dist/cjs/store-manager/syncBlockStoreManager.js +2 -1
  10. package/dist/cjs/store-manager/syncBlockSubscriptionManager.js +9 -5
  11. package/dist/cjs/utils/errorHandling.js +41 -26
  12. package/dist/cjs/utils/resolveSyncBlockInstance.js +11 -10
  13. package/dist/cjs/utils/utils.js +30 -2
  14. package/dist/es2019/clients/jira/sourceInfo.js +64 -4
  15. package/dist/es2019/hooks/useFetchSyncBlockData.js +2 -2
  16. package/dist/es2019/providers/syncBlockProvider.js +4 -2
  17. package/dist/es2019/providers/types.js +7 -0
  18. package/dist/es2019/store-manager/referenceSyncBlockStoreManager.js +25 -13
  19. package/dist/es2019/store-manager/sourceSyncBlockStoreManager.js +19 -16
  20. package/dist/es2019/store-manager/syncBlockBatchFetcher.js +2 -2
  21. package/dist/es2019/store-manager/syncBlockProviderFactoryManager.js +6 -4
  22. package/dist/es2019/store-manager/syncBlockStoreManager.js +2 -1
  23. package/dist/es2019/store-manager/syncBlockSubscriptionManager.js +9 -5
  24. package/dist/es2019/utils/errorHandling.js +33 -14
  25. package/dist/es2019/utils/resolveSyncBlockInstance.js +11 -10
  26. package/dist/es2019/utils/utils.js +26 -0
  27. package/dist/esm/clients/jira/sourceInfo.js +63 -11
  28. package/dist/esm/hooks/useFetchSyncBlockData.js +2 -2
  29. package/dist/esm/providers/types.js +7 -0
  30. package/dist/esm/store-manager/referenceSyncBlockStoreManager.js +25 -13
  31. package/dist/esm/store-manager/sourceSyncBlockStoreManager.js +19 -16
  32. package/dist/esm/store-manager/syncBlockBatchFetcher.js +2 -2
  33. package/dist/esm/store-manager/syncBlockProviderFactoryManager.js +6 -4
  34. package/dist/esm/store-manager/syncBlockStoreManager.js +2 -1
  35. package/dist/esm/store-manager/syncBlockSubscriptionManager.js +9 -5
  36. package/dist/esm/utils/errorHandling.js +41 -26
  37. package/dist/esm/utils/resolveSyncBlockInstance.js +11 -10
  38. package/dist/esm/utils/utils.js +29 -1
  39. package/dist/types/clients/jira/sourceInfo.d.ts +20 -0
  40. package/dist/types/common/types.d.ts +2 -1
  41. package/dist/types/providers/types.d.ts +17 -0
  42. package/dist/types/utils/errorHandling.d.ts +13 -12
  43. package/dist/types/utils/utils.d.ts +3 -1
  44. package/dist/types-ts4.5/clients/jira/sourceInfo.d.ts +20 -0
  45. package/dist/types-ts4.5/common/types.d.ts +2 -1
  46. package/dist/types-ts4.5/providers/types.d.ts +17 -0
  47. package/dist/types-ts4.5/utils/errorHandling.d.ts +13 -12
  48. package/dist/types-ts4.5/utils/utils.d.ts +3 -1
  49. package/package.json +6 -3
  50. package/types/package.json +17 -0
  51. package/utils/package.json +17 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # @atlaskit/editor-synced-block-provider
2
2
 
3
+ ## 6.5.3
4
+
5
+ ### Patch Changes
6
+
7
+ - [`9784984097a8a`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/9784984097a8a) -
8
+ [ux] Improves synced block support for Jira work items, including product-specific copy,
9
+ issue-type icons, and enhanced analytics.
10
+ - Updated dependencies
11
+
3
12
  ## 6.5.2
4
13
 
5
14
  ### Patch Changes
@@ -8,6 +8,7 @@ exports.fetchJiraWorkItemInfo = void 0;
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 _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
11
12
  var _retry = require("../../utils/retry");
12
13
  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; }
13
14
  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; } /* eslint-disable require-unicode-regexp */
@@ -25,7 +26,11 @@ var GET_SOURCE_INFO_OPERATION_NAME = 'EDITOR_SYNCED_BLOCK_GET_SOURCE_INFO';
25
26
  * @param id - the ID of the work item
26
27
  * @returns url of the work item
27
28
  */
28
- var GET_SOURCE_INFO_QUERY = "query ".concat(GET_SOURCE_INFO_OPERATION_NAME, " ($id: ID!) {\n jira {\n issueById(id: $id) {\n id\n webUrl\n summary\n }\n }}");
29
+ // `issueType` is requested unconditionally because GraphQL field selection cannot be
30
+ // gated at the network layer without a separate operation; AGG ignores unknown
31
+ // front-end gating. The runtime mapping into `SyncBlockSourceInfo.issueType` is gated
32
+ // by `platform_synced_block_patch_11` below.
33
+ var GET_SOURCE_INFO_QUERY = "query ".concat(GET_SOURCE_INFO_OPERATION_NAME, " ($id: ID!) {\n jira {\n issueById(id: $id) {\n id\n webUrl\n summary\n issueType {\n name\n avatar {\n xsmall\n }\n }\n }\n }}");
29
34
  var getJiraWorkItemSourceInfo = /*#__PURE__*/function () {
30
35
  var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(ari) {
31
36
  var bodyData, response;
@@ -113,34 +118,82 @@ var resolveNoAccessWorkItemInfo = /*#__PURE__*/function () {
113
118
  return _ref2.apply(this, arguments);
114
119
  };
115
120
  }();
121
+
122
+ /**
123
+ * Fetch source-info metadata for a Jira work item used by reference sync blocks.
124
+ *
125
+ * Parity notes vs the Confluence equivalent (`fetchConfluencePageInfo`):
126
+ *
127
+ * - **Archived / draft URL variants** are intentionally omitted. Confluence pages can be
128
+ * "unpublished" (draft, archived, in-trash) and need REST fallbacks plus alternate URL
129
+ * shapes. Jira work items have no equivalent lifecycle — an issue either exists in AGG
130
+ * or it does not — so a single `webUrl` is sufficient.
131
+ *
132
+ * - **`#block-{localId}` deep-link anchor** is intentionally not appended. The current
133
+ * Jira issue view does not implement scroll-to-anchor for unknown fragments, so the
134
+ * anchor would be dead weight on the URL. The dispatching code in
135
+ * `syncBlockProvider.fetchSyncBlockSourceInfo` deliberately does not pass `localId`
136
+ * here for the same reason. If/when Jira issue view supports anchor scrolling for
137
+ * sync-block local IDs, accept `localId?: string` here and append `#block-{localId}`.
138
+ *
139
+ * - **`subType` / page-type variants** are not modeled — Jira issue type is exposed via
140
+ * the separate `issueType` field returned alongside `summary` / `webUrl`.
141
+ */
116
142
  var fetchJiraWorkItemInfo = exports.fetchJiraWorkItemInfo = /*#__PURE__*/function () {
117
143
  var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(workItemAri, hasAccess) {
118
- var _response$data, response, contentData, webUrl, summary;
144
+ var _response$data, _contentData$webUrl, _contentData$summary, response, contentData, _rawIssueType$avatar, _webUrl, _summary, rawIssueType, issueTypeName, issueType, webUrl, summary;
119
145
  return _regenerator.default.wrap(function _callee3$(_context3) {
120
146
  while (1) switch (_context3.prev = _context3.next) {
121
147
  case 0:
122
148
  if (!hasAccess) {
123
- _context3.next = 10;
149
+ _context3.next = 17;
124
150
  break;
125
151
  }
126
152
  _context3.next = 3;
127
153
  return getJiraWorkItemSourceInfo(workItemAri);
128
154
  case 3:
129
155
  response = _context3.sent;
130
- contentData = (_response$data = response.data) === null || _response$data === void 0 || (_response$data = _response$data.jira) === null || _response$data === void 0 ? void 0 : _response$data.issueById;
131
- webUrl = contentData === null || contentData === void 0 ? void 0 : contentData.webUrl;
132
- summary = contentData === null || contentData === void 0 ? void 0 : contentData.summary;
156
+ contentData = (_response$data = response.data) === null || _response$data === void 0 || (_response$data = _response$data.jira) === null || _response$data === void 0 ? void 0 : _response$data.issueById; // Defensive narrowing (gated by `platform_synced_block_patch_11`):
157
+ // AGG may return `null` (not just omit the field) for `webUrl` / `summary` on
158
+ // partially indexed issues. Without these guards, downstream consumers that
159
+ // expect `string | undefined` would receive `null` and either crash or render
160
+ // the literal string "null". The pre-gate path preserves the legacy behaviour
161
+ // so this can be dialled off independently.
162
+ if (!(0, _platformFeatureFlags.fg)('platform_synced_block_patch_11')) {
163
+ _context3.next = 12;
164
+ break;
165
+ }
166
+ _webUrl = typeof (contentData === null || contentData === void 0 ? void 0 : contentData.webUrl) === 'string' ? contentData.webUrl : undefined;
167
+ _summary = typeof (contentData === null || contentData === void 0 ? void 0 : contentData.summary) === 'string' ? contentData.summary : undefined; // Surface issue-type metadata so consumers can render the correct ADS issue-type
168
+ // icon. Defensive narrowing mirrors the webUrl/summary treatment above: only
169
+ // surfaced when `name` is a non-empty string; AGG values like `{ name: null }`
170
+ // collapse back to `undefined`.
171
+ rawIssueType = contentData === null || contentData === void 0 ? void 0 : contentData.issueType;
172
+ issueTypeName = typeof (rawIssueType === null || rawIssueType === void 0 ? void 0 : rawIssueType.name) === 'string' && rawIssueType.name.length > 0 ? rawIssueType.name : undefined;
173
+ issueType = issueTypeName ? {
174
+ name: issueTypeName,
175
+ iconUrl: typeof (rawIssueType === null || rawIssueType === void 0 || (_rawIssueType$avatar = rawIssueType.avatar) === null || _rawIssueType$avatar === void 0 ? void 0 : _rawIssueType$avatar.xsmall) === 'string' ? rawIssueType.avatar.xsmall : undefined
176
+ } : undefined;
177
+ return _context3.abrupt("return", Promise.resolve({
178
+ url: _webUrl,
179
+ sourceAri: workItemAri,
180
+ title: _summary,
181
+ issueType: issueType
182
+ }));
183
+ case 12:
184
+ webUrl = (_contentData$webUrl = contentData === null || contentData === void 0 ? void 0 : contentData.webUrl) !== null && _contentData$webUrl !== void 0 ? _contentData$webUrl : undefined;
185
+ summary = (_contentData$summary = contentData === null || contentData === void 0 ? void 0 : contentData.summary) !== null && _contentData$summary !== void 0 ? _contentData$summary : undefined;
133
186
  return _context3.abrupt("return", Promise.resolve({
134
187
  url: webUrl,
135
188
  sourceAri: workItemAri,
136
189
  title: summary
137
190
  }));
138
- case 10:
139
- _context3.next = 12;
191
+ case 17:
192
+ _context3.next = 19;
140
193
  return resolveNoAccessWorkItemInfo(workItemAri);
141
- case 12:
194
+ case 19:
142
195
  return _context3.abrupt("return", _context3.sent);
143
- case 13:
196
+ case 20:
144
197
  case "end":
145
198
  return _context3.stop();
146
199
  }
@@ -78,7 +78,7 @@ var useFetchSyncBlockData = exports.useFetchSyncBlockData = function useFetchSyn
78
78
  (0, _monitoring.logException)(_context.t0, {
79
79
  location: 'editor-synced-block-provider/useFetchSyncBlockData'
80
80
  });
81
- fireAnalyticsEvent === null || fireAnalyticsEvent === void 0 || fireAnalyticsEvent((0, _errorHandling.fetchErrorPayload)(_context.t0.message));
81
+ fireAnalyticsEvent === null || fireAnalyticsEvent === void 0 || fireAnalyticsEvent((0, _errorHandling.fetchErrorPayload)(_context.t0.message, resourceId, (0, _utils.productAttrIfGateOn)(resourceId)));
82
82
 
83
83
  // Set error state if fetching fails
84
84
  setFetchState({
@@ -18,6 +18,12 @@ 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
+ /**
22
+ * Lightweight metadata for a Jira issue's type, surfaced so consumers can render the
23
+ * correct ADS issue-type icon (Task / Bug / Story / Epic / Subtask) or fall back to the
24
+ * AGG-provided `iconUrl` for custom types. Optional throughout — Confluence references
25
+ * leave it `undefined`.
26
+ */
21
27
  /**
22
28
  * Configuration options for batch fetch operations
23
29
  */
@@ -300,7 +300,8 @@ var ReferenceSyncBlockStoreManager = exports.ReferenceSyncBlockStoreManager = /*
300
300
  sourceURL = _ref.sourceURL,
301
301
  sourceTitle = _ref.sourceTitle,
302
302
  onSameDocument = _ref.onSameDocument,
303
- sourceSubType = _ref.sourceSubType;
303
+ sourceSubType = _ref.sourceSubType,
304
+ issueType = _ref.issueType;
304
305
  // skip if source URL and title are already present
305
306
  if (sourceURL && sourceTitle) {
306
307
  return Promise.resolve({
@@ -309,12 +310,18 @@ var ReferenceSyncBlockStoreManager = exports.ReferenceSyncBlockStoreManager = /*
309
310
  subType: sourceSubType,
310
311
  sourceAri: sourceAri || '',
311
312
  onSameDocument: onSameDocument,
312
- productType: product
313
+ productType: product,
314
+ issueType: issueType
313
315
  });
314
316
  }
317
+
318
+ // Derive once per call so we don't re-parse on every analytics event below.
319
+ // `product` from cached data is preferred when available; fall back to parsing
320
+ // the resourceId.
321
+ var sourceProduct = (0, _platformFeatureFlags.fg)('platform_synced_block_patch_11') ? product !== null && product !== void 0 ? product : (0, _utils.getSourceProductFromResourceIdSafe)(resourceId) : undefined;
315
322
  if (!sourceAri || !product || !blockInstanceId) {
316
323
  var _this$fireAnalyticsEv3;
317
- (_this$fireAnalyticsEv3 = this.fireAnalyticsEvent) === null || _this$fireAnalyticsEv3 === void 0 || _this$fireAnalyticsEv3.call(this, (0, _errorHandling.getSourceInfoErrorPayload)('SourceAri, product or blockInstanceId missing', resourceId));
324
+ (_this$fireAnalyticsEv3 = this.fireAnalyticsEvent) === null || _this$fireAnalyticsEv3 === void 0 || _this$fireAnalyticsEv3.call(this, (0, _errorHandling.getSourceInfoErrorPayload)('SourceAri, product or blockInstanceId missing', resourceId, sourceProduct));
318
325
  return Promise.resolve(undefined);
319
326
  }
320
327
  (_this$fetchSourceInfo = this.fetchSourceInfoExperience) === null || _this$fetchSourceInfo === void 0 || _this$fetchSourceInfo.start({});
@@ -325,7 +332,7 @@ var ReferenceSyncBlockStoreManager = exports.ReferenceSyncBlockStoreManager = /*
325
332
  (_this2$fetchSourceInf = _this2.fetchSourceInfoExperience) === null || _this2$fetchSourceInf === void 0 || _this2$fetchSourceInf.failure({
326
333
  reason: 'No source info returned'
327
334
  });
328
- (_this2$fireAnalyticsE = _this2.fireAnalyticsEvent) === null || _this2$fireAnalyticsE === void 0 || _this2$fireAnalyticsE.call(_this2, (0, _errorHandling.getSourceInfoErrorPayload)('No source info returned', resourceId));
335
+ (_this2$fireAnalyticsE = _this2.fireAnalyticsEvent) === null || _this2$fireAnalyticsE === void 0 || _this2$fireAnalyticsE.call(_this2, (0, _errorHandling.getSourceInfoErrorPayload)('No source info returned', resourceId, sourceProduct));
329
336
  return undefined;
330
337
  }
331
338
  _this2.updateCacheWithSourceInfo(resourceId, sourceInfo);
@@ -340,7 +347,7 @@ var ReferenceSyncBlockStoreManager = exports.ReferenceSyncBlockStoreManager = /*
340
347
  (_this2$fetchSourceInf3 = _this2.fetchSourceInfoExperience) === null || _this2$fetchSourceInf3 === void 0 || _this2$fetchSourceInf3.failure({
341
348
  reason: 'Missing title or url'
342
349
  });
343
- (_this2$fireAnalyticsE2 = _this2.fireAnalyticsEvent) === null || _this2$fireAnalyticsE2 === void 0 || _this2$fireAnalyticsE2.call(_this2, (0, _errorHandling.getSourceInfoErrorPayload)('Missing title or url', resourceId));
350
+ (_this2$fireAnalyticsE2 = _this2.fireAnalyticsEvent) === null || _this2$fireAnalyticsE2 === void 0 || _this2$fireAnalyticsE2.call(_this2, (0, _errorHandling.getSourceInfoErrorPayload)('Missing title or url', resourceId, sourceProduct));
344
351
  }
345
352
  return sourceInfo;
346
353
  }).catch(function (error) {
@@ -348,7 +355,7 @@ var ReferenceSyncBlockStoreManager = exports.ReferenceSyncBlockStoreManager = /*
348
355
  (_this2$fetchSourceInf4 = _this2.fetchSourceInfoExperience) === null || _this2$fetchSourceInf4 === void 0 || _this2$fetchSourceInf4.failure({
349
356
  reason: error.message
350
357
  });
351
- (_this2$fireAnalyticsE3 = _this2.fireAnalyticsEvent) === null || _this2$fireAnalyticsE3 === void 0 || _this2$fireAnalyticsE3.call(_this2, (0, _errorHandling.getSourceInfoErrorPayload)(error.message, resourceId));
358
+ (_this2$fireAnalyticsE3 = _this2.fireAnalyticsEvent) === null || _this2$fireAnalyticsE3 === void 0 || _this2$fireAnalyticsE3.call(_this2, (0, _errorHandling.getSourceInfoErrorPayload)(error.message, resourceId, sourceProduct));
352
359
  return undefined;
353
360
  }).finally(function () {
354
361
  _this2.syncBlockSourceInfoRequests.delete(resourceId);
@@ -360,7 +367,7 @@ var ReferenceSyncBlockStoreManager = exports.ReferenceSyncBlockStoreManager = /*
360
367
  (0, _monitoring.logException)(error, {
361
368
  location: 'editor-synced-block-provider/referenceSyncBlockStoreManager'
362
369
  });
363
- (_this$fireAnalyticsEv4 = this.fireAnalyticsEvent) === null || _this$fireAnalyticsEv4 === void 0 || _this$fireAnalyticsEv4.call(this, (0, _errorHandling.getSourceInfoErrorPayload)(error.message, resourceId));
370
+ (_this$fireAnalyticsEv4 = this.fireAnalyticsEvent) === null || _this$fireAnalyticsEv4 === void 0 || _this$fireAnalyticsEv4.call(this, (0, _errorHandling.getSourceInfoErrorPayload)(error.message, resourceId, (0, _utils.productAttrIfGateOn)(resourceId)));
364
371
  }
365
372
  return Promise.resolve(undefined);
366
373
  }
@@ -535,6 +542,7 @@ var ReferenceSyncBlockStoreManager = exports.ReferenceSyncBlockStoreManager = /*
535
542
  if (!syncBlockInstance.resourceId) {
536
543
  var _syncBlockInstance$er, _syncBlockInstance$er2, _this5$fireAnalyticsE;
537
544
  var payload = ((_syncBlockInstance$er = syncBlockInstance.error) === null || _syncBlockInstance$er === void 0 ? void 0 : _syncBlockInstance$er.reason) || ((_syncBlockInstance$er2 = syncBlockInstance.error) === null || _syncBlockInstance$er2 === void 0 ? void 0 : _syncBlockInstance$er2.type) || 'Returned sync block instance does not have resource id';
545
+ // No resourceId means we cannot derive a sourceProduct here; intentionally omit.
538
546
  (_this5$fireAnalyticsE = _this5.fireAnalyticsEvent) === null || _this5$fireAnalyticsE === void 0 || _this5$fireAnalyticsE.call(_this5, (0, _errorHandling.fetchErrorPayload)(payload));
539
547
  return;
540
548
  }
@@ -553,8 +561,8 @@ var ReferenceSyncBlockStoreManager = exports.ReferenceSyncBlockStoreManager = /*
553
561
  _this5.newlyAddedSyncBlocks.delete(syncBlockInstance.resourceId);
554
562
  }
555
563
  if (syncBlockInstance.error) {
556
- var _this5$fireAnalyticsE2;
557
- (_this5$fireAnalyticsE2 = _this5.fireAnalyticsEvent) === null || _this5$fireAnalyticsE2 === void 0 || _this5$fireAnalyticsE2.call(_this5, (0, _errorHandling.fetchErrorPayload)(syncBlockInstance.error.reason || syncBlockInstance.error.type, syncBlockInstance.resourceId));
564
+ var _this5$fireAnalyticsE2, _syncBlockInstance$da, _syncBlockInstance$da2;
565
+ (_this5$fireAnalyticsE2 = _this5.fireAnalyticsEvent) === null || _this5$fireAnalyticsE2 === void 0 || _this5$fireAnalyticsE2.call(_this5, (0, _errorHandling.fetchErrorPayload)(syncBlockInstance.error.reason || syncBlockInstance.error.type, syncBlockInstance.resourceId, (0, _platformFeatureFlags.fg)('platform_synced_block_patch_11') ? (_syncBlockInstance$da = (_syncBlockInstance$da2 = syncBlockInstance.data) === null || _syncBlockInstance$da2 === void 0 ? void 0 : _syncBlockInstance$da2.product) !== null && _syncBlockInstance$da !== void 0 ? _syncBlockInstance$da : (0, _utils.getSourceProductFromResourceIdSafe)(syncBlockInstance.resourceId) : undefined));
558
566
  if (syncBlockInstance.error.type === _types.SyncBlockError.NotFound || syncBlockInstance.error.type === _types.SyncBlockError.Forbidden) {
559
567
  hasExpectedError = true;
560
568
  } else if (syncBlockInstance.error) {
@@ -565,8 +573,10 @@ var ReferenceSyncBlockStoreManager = exports.ReferenceSyncBlockStoreManager = /*
565
573
  var callbacks = _this5._subscriptionManager.getSubscriptions().get(syncBlockInstance.resourceId);
566
574
  var localIds = callbacks ? Object.keys(callbacks) : [];
567
575
  localIds.forEach(function (localId) {
568
- var _this5$fireAnalyticsE3, _syncBlockInstance$da;
569
- (_this5$fireAnalyticsE3 = _this5.fireAnalyticsEvent) === null || _this5$fireAnalyticsE3 === void 0 || _this5$fireAnalyticsE3.call(_this5, (0, _errorHandling.fetchSuccessPayload)(syncBlockInstance.resourceId, localId, (_syncBlockInstance$da = syncBlockInstance.data) === null || _syncBlockInstance$da === void 0 ? void 0 : _syncBlockInstance$da.product));
576
+ var _this5$fireAnalyticsE3, _syncBlockInstance$da3, _syncBlockInstance$da4;
577
+ (_this5$fireAnalyticsE3 = _this5.fireAnalyticsEvent) === null || _this5$fireAnalyticsE3 === void 0 || _this5$fireAnalyticsE3.call(_this5, (0, _errorHandling.fetchSuccessPayload)(syncBlockInstance.resourceId, localId,
578
+ // Prefer cached product when available; fall back to parsing the resourceId.
579
+ (0, _platformFeatureFlags.fg)('platform_synced_block_patch_11') ? (_syncBlockInstance$da3 = (_syncBlockInstance$da4 = syncBlockInstance.data) === null || _syncBlockInstance$da4 === void 0 ? void 0 : _syncBlockInstance$da4.product) !== null && _syncBlockInstance$da3 !== void 0 ? _syncBlockInstance$da3 : (0, _utils.getSourceProductFromResourceIdSafe)(syncBlockInstance.resourceId) : undefined));
570
580
  });
571
581
  _this5.fetchSyncBlockSourceInfo(resolvedSyncBlockInstance.resourceId);
572
582
  });
@@ -585,7 +595,8 @@ var ReferenceSyncBlockStoreManager = exports.ReferenceSyncBlockStoreManager = /*
585
595
  sourceURL: sourceInfo === null || sourceInfo === void 0 ? void 0 : sourceInfo.url,
586
596
  sourceTitle: sourceInfo === null || sourceInfo === void 0 ? void 0 : sourceInfo.title,
587
597
  onSameDocument: sourceInfo === null || sourceInfo === void 0 ? void 0 : sourceInfo.onSameDocument,
588
- sourceSubType: sourceInfo === null || sourceInfo === void 0 ? void 0 : sourceInfo.subType
598
+ sourceSubType: sourceInfo === null || sourceInfo === void 0 ? void 0 : sourceInfo.subType,
599
+ issueType: sourceInfo === null || sourceInfo === void 0 ? void 0 : sourceInfo.issueType
589
600
  });
590
601
  this.updateCache(existingSyncBlock);
591
602
  }
@@ -825,6 +836,7 @@ var ReferenceSyncBlockStoreManager = exports.ReferenceSyncBlockStoreManager = /*
825
836
  (_this$saveExperience3 = this.saveExperience) === null || _this$saveExperience3 === void 0 || _this$saveExperience3.failure({
826
837
  reason: _context4.t2.message
827
838
  });
839
+ // No `resourceId` available in this catch — sourceProduct is intentionally omitted.
828
840
  (_this$fireAnalyticsEv7 = this.fireAnalyticsEvent) === null || _this$fireAnalyticsEv7 === void 0 || _this$fireAnalyticsEv7.call(this, (0, _errorHandling.updateReferenceErrorPayload)(_context4.t2.message));
829
841
  case 49:
830
842
  _context4.prev = 49;
@@ -128,11 +128,13 @@ var SourceSyncBlockStoreManager = exports.SourceSyncBlockStoreManager = /*#__PUR
128
128
  }
129
129
  return true;
130
130
  } catch (error) {
131
- var _this$fireAnalyticsEv;
131
+ var _this$fireAnalyticsEv, _syncBlockNode$attrs2, _syncBlockNode$attrs3;
132
132
  (0, _monitoring.logException)(error, {
133
133
  location: 'editor-synced-block-provider/sourceSyncBlockStoreManager'
134
134
  });
135
- (_this$fireAnalyticsEv = this.fireAnalyticsEvent) === null || _this$fireAnalyticsEv === void 0 || _this$fireAnalyticsEv.call(this, (0, _errorHandling.updateCacheErrorPayload)(error.message));
135
+ // We can derive the product from `syncBlockNode.attrs.resourceId` even though
136
+ // the variable wasn't destructured (the destructuring step itself may have thrown).
137
+ (_this$fireAnalyticsEv = this.fireAnalyticsEvent) === null || _this$fireAnalyticsEv === void 0 || _this$fireAnalyticsEv.call(this, (0, _errorHandling.updateCacheErrorPayload)(error.message, syncBlockNode === null || syncBlockNode === void 0 || (_syncBlockNode$attrs2 = syncBlockNode.attrs) === null || _syncBlockNode$attrs2 === void 0 ? void 0 : _syncBlockNode$attrs2.resourceId, (0, _utils.productAttrIfGateOn)(syncBlockNode === null || syncBlockNode === void 0 || (_syncBlockNode$attrs3 = syncBlockNode.attrs) === null || _syncBlockNode$attrs3 === void 0 ? void 0 : _syncBlockNode$attrs3.resourceId)));
136
138
  return false;
137
139
  }
138
140
  }
@@ -229,7 +231,7 @@ var SourceSyncBlockStoreManager = exports.SourceSyncBlockStoreManager = /*#__PUR
229
231
  cachedData.status = result.status;
230
232
  }
231
233
  }
232
- (_this2$fireAnalyticsE = _this2.fireAnalyticsEvent) === null || _this2$fireAnalyticsE === void 0 || _this2$fireAnalyticsE.call(_this2, (0, _errorHandling.updateSuccessPayload)(result.resourceId, false));
234
+ (_this2$fireAnalyticsE = _this2.fireAnalyticsEvent) === null || _this2$fireAnalyticsE === void 0 || _this2$fireAnalyticsE.call(_this2, (0, _errorHandling.updateSuccessPayload)(result.resourceId, false, (0, _utils.productAttrIfGateOn)(result.resourceId)));
233
235
  }
234
236
  });
235
237
  return _context.abrupt("return", true);
@@ -239,7 +241,7 @@ var SourceSyncBlockStoreManager = exports.SourceSyncBlockStoreManager = /*#__PUR
239
241
  return !result.resourceId || result.error;
240
242
  }).forEach(function (result) {
241
243
  var _this2$fireAnalyticsE2;
242
- (_this2$fireAnalyticsE2 = _this2.fireAnalyticsEvent) === null || _this2$fireAnalyticsE2 === void 0 || _this2$fireAnalyticsE2.call(_this2, (0, _errorHandling.updateErrorPayload)(result.error || 'Failed to write data', result.resourceId));
244
+ (_this2$fireAnalyticsE2 = _this2.fireAnalyticsEvent) === null || _this2$fireAnalyticsE2 === void 0 || _this2$fireAnalyticsE2.call(_this2, (0, _errorHandling.updateErrorPayload)(result.error || 'Failed to write data', result.resourceId, (0, _utils.productAttrIfGateOn)(result.resourceId)));
243
245
  });
244
246
  return _context.abrupt("return", false);
245
247
  case 24:
@@ -251,6 +253,7 @@ var SourceSyncBlockStoreManager = exports.SourceSyncBlockStoreManager = /*#__PUR
251
253
  (0, _monitoring.logException)(_context.t0, {
252
254
  location: 'editor-synced-block-provider/sourceSyncBlockStoreManager'
253
255
  });
256
+ // Top-level flush failure is not tied to a single resourceId.
254
257
  (_this$fireAnalyticsEv2 = this.fireAnalyticsEvent) === null || _this$fireAnalyticsEv2 === void 0 || _this$fireAnalyticsEv2.call(this, (0, _errorHandling.updateErrorPayload)(_context.t0.message));
255
258
  return _context.abrupt("return", false);
256
259
  case 31:
@@ -326,16 +329,16 @@ var SourceSyncBlockStoreManager = exports.SourceSyncBlockStoreManager = /*#__PUR
326
329
  }
327
330
  } else {
328
331
  var _this$fireAnalyticsEv3;
329
- (_this$fireAnalyticsEv3 = this.fireAnalyticsEvent) === null || _this$fireAnalyticsEv3 === void 0 || _this$fireAnalyticsEv3.call(this, (0, _errorHandling.createErrorPayload)('creation complete callback missing', resourceId));
332
+ (_this$fireAnalyticsEv3 = this.fireAnalyticsEvent) === null || _this$fireAnalyticsEv3 === void 0 || _this$fireAnalyticsEv3.call(this, (0, _errorHandling.createErrorPayload)('creation complete callback missing', resourceId, (0, _utils.productAttrIfGateOn)(resourceId)));
330
333
  }
331
334
  if (success) {
332
335
  var _this$fireAnalyticsEv4;
333
- (_this$fireAnalyticsEv4 = this.fireAnalyticsEvent) === null || _this$fireAnalyticsEv4 === void 0 || _this$fireAnalyticsEv4.call(this, (0, _errorHandling.createSuccessPayload)(resourceId || ''));
336
+ (_this$fireAnalyticsEv4 = this.fireAnalyticsEvent) === null || _this$fireAnalyticsEv4 === void 0 || _this$fireAnalyticsEv4.call(this, (0, _errorHandling.createSuccessPayload)(resourceId || '', (0, _utils.productAttrIfGateOn)(resourceId)));
334
337
  } else {
335
338
  var _this$fireAnalyticsEv5;
336
339
  // Delete the node from cache if fail to create so it's not flushed to BE
337
340
  this.syncBlockCache.delete(resourceId || '');
338
- (_this$fireAnalyticsEv5 = this.fireAnalyticsEvent) === null || _this$fireAnalyticsEv5 === void 0 || _this$fireAnalyticsEv5.call(this, (0, _errorHandling.createErrorPayload)('Fail to create bodied sync block', resourceId));
341
+ (_this$fireAnalyticsEv5 = this.fireAnalyticsEvent) === null || _this$fireAnalyticsEv5 === void 0 || _this$fireAnalyticsEv5.call(this, (0, _errorHandling.createErrorPayload)('Fail to create bodied sync block', resourceId, (0, _utils.productAttrIfGateOn)(resourceId)));
339
342
  }
340
343
  }
341
344
  }, {
@@ -421,7 +424,7 @@ var SourceSyncBlockStoreManager = exports.SourceSyncBlockStoreManager = /*#__PUR
421
424
  (_this4$createExperien2 = _this4.createExperience) === null || _this4$createExperien2 === void 0 || _this4$createExperien2.failure({
422
425
  reason: result.error || 'Failed to create bodied sync block'
423
426
  });
424
- (_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));
427
+ (_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, (0, _utils.productAttrIfGateOn)(resourceId)));
425
428
  }
426
429
  }).catch(function (error) {
427
430
  var _this4$createExperien3, _this4$fireAnalyticsE2;
@@ -432,7 +435,7 @@ var SourceSyncBlockStoreManager = exports.SourceSyncBlockStoreManager = /*#__PUR
432
435
  (_this4$createExperien3 = _this4.createExperience) === null || _this4$createExperien3 === void 0 || _this4$createExperien3.failure({
433
436
  reason: error.message
434
437
  });
435
- (_this4$fireAnalyticsE2 = _this4.fireAnalyticsEvent) === null || _this4$fireAnalyticsE2 === void 0 || _this4$fireAnalyticsE2.call(_this4, (0, _errorHandling.createErrorPayload)(error.message, resourceId));
438
+ (_this4$fireAnalyticsE2 = _this4.fireAnalyticsEvent) === null || _this4$fireAnalyticsE2 === void 0 || _this4$fireAnalyticsE2.call(_this4, (0, _errorHandling.createErrorPayload)(error.message, resourceId, (0, _utils.productAttrIfGateOn)(resourceId)));
436
439
  });
437
440
  } catch (error) {
438
441
  var _this$fireAnalyticsEv6;
@@ -442,7 +445,7 @@ var SourceSyncBlockStoreManager = exports.SourceSyncBlockStoreManager = /*#__PUR
442
445
  (0, _monitoring.logException)(error, {
443
446
  location: 'editor-synced-block-provider/sourceSyncBlockStoreManager'
444
447
  });
445
- (_this$fireAnalyticsEv6 = this.fireAnalyticsEvent) === null || _this$fireAnalyticsEv6 === void 0 || _this$fireAnalyticsEv6.call(this, (0, _errorHandling.createErrorPayload)(error.message));
448
+ (_this$fireAnalyticsEv6 = this.fireAnalyticsEvent) === null || _this$fireAnalyticsEv6 === void 0 || _this$fireAnalyticsEv6.call(this, (0, _errorHandling.createErrorPayload)(error.message, resourceId, (0, _utils.productAttrIfGateOn)(resourceId)));
446
449
  }
447
450
  }
448
451
  }, {
@@ -490,7 +493,7 @@ var SourceSyncBlockStoreManager = exports.SourceSyncBlockStoreManager = /*#__PUR
490
493
  (_this$deleteExperienc2 = this.deleteExperience) === null || _this$deleteExperienc2 === void 0 || _this$deleteExperienc2.success();
491
494
  results.forEach(function (result) {
492
495
  var _this5$fireAnalyticsE;
493
- (_this5$fireAnalyticsE = _this5.fireAnalyticsEvent) === null || _this5$fireAnalyticsE === void 0 || _this5$fireAnalyticsE.call(_this5, (0, _errorHandling.deleteSuccessPayload)(result.resourceId));
496
+ (_this5$fireAnalyticsE = _this5.fireAnalyticsEvent) === null || _this5$fireAnalyticsE === void 0 || _this5$fireAnalyticsE.call(_this5, (0, _errorHandling.deleteSuccessPayload)(result.resourceId, (0, _utils.productAttrIfGateOn)(result.resourceId)));
494
497
  });
495
498
  } else {
496
499
  callback = function callback(Ids) {
@@ -500,10 +503,10 @@ var SourceSyncBlockStoreManager = exports.SourceSyncBlockStoreManager = /*#__PUR
500
503
  results.forEach(function (result) {
501
504
  if (result.success) {
502
505
  var _this5$fireAnalyticsE2;
503
- (_this5$fireAnalyticsE2 = _this5.fireAnalyticsEvent) === null || _this5$fireAnalyticsE2 === void 0 || _this5$fireAnalyticsE2.call(_this5, (0, _errorHandling.deleteSuccessPayload)(result.resourceId));
506
+ (_this5$fireAnalyticsE2 = _this5.fireAnalyticsEvent) === null || _this5$fireAnalyticsE2 === void 0 || _this5$fireAnalyticsE2.call(_this5, (0, _errorHandling.deleteSuccessPayload)(result.resourceId, (0, _utils.productAttrIfGateOn)(result.resourceId)));
504
507
  } else {
505
508
  var _this5$fireAnalyticsE3;
506
- (_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));
509
+ (_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, (0, _utils.productAttrIfGateOn)(result.resourceId)));
507
510
  }
508
511
  });
509
512
  }
@@ -515,7 +518,7 @@ var SourceSyncBlockStoreManager = exports.SourceSyncBlockStoreManager = /*#__PUR
515
518
  syncBlockIds.forEach(function (Ids) {
516
519
  var _this5$fireAnalyticsE4;
517
520
  _this5.setPendingDeletion(Ids, false);
518
- (_this5$fireAnalyticsE4 = _this5.fireAnalyticsEvent) === null || _this5$fireAnalyticsE4 === void 0 || _this5$fireAnalyticsE4.call(_this5, (0, _errorHandling.deleteErrorPayload)(_context2.t0.message, Ids.resourceId));
521
+ (_this5$fireAnalyticsE4 = _this5.fireAnalyticsEvent) === null || _this5$fireAnalyticsE4 === void 0 || _this5$fireAnalyticsE4.call(_this5, (0, _errorHandling.deleteErrorPayload)(_context2.t0.message, Ids.resourceId, (0, _utils.productAttrIfGateOn)(Ids.resourceId)));
519
522
  });
520
523
  (0, _monitoring.logException)(_context2.t0, {
521
524
  location: 'editor-synced-block-provider/sourceSyncBlockStoreManager'
@@ -809,7 +812,7 @@ var SourceSyncBlockStoreManager = exports.SourceSyncBlockStoreManager = /*#__PUR
809
812
  (0, _monitoring.logException)(error, {
810
813
  location: 'editor-synced-block-provider/sourceSyncBlockStoreManager'
811
814
  });
812
- (_this$fireAnalyticsEv8 = this.fireAnalyticsEvent) === null || _this$fireAnalyticsEv8 === void 0 || _this$fireAnalyticsEv8.call(this, (0, _errorHandling.fetchReferencesErrorPayload)(error.message));
815
+ (_this$fireAnalyticsEv8 = this.fireAnalyticsEvent) === null || _this$fireAnalyticsEv8 === void 0 || _this$fireAnalyticsEv8.call(this, (0, _errorHandling.fetchReferencesErrorPayload)(error.message, resourceId, (0, _utils.productAttrIfGateOn)(resourceId)));
813
816
  return Promise.resolve({
814
817
  error: _types.SyncBlockError.Errored
815
818
  });
@@ -40,7 +40,7 @@ var SyncBlockBatchFetcher = exports.SyncBlockBatchFetcher = /*#__PURE__*/functio
40
40
  });
41
41
  resourceIds.forEach(function (resId) {
42
42
  var _this$deps$getFireAna;
43
- (_this$deps$getFireAna = _this.deps.getFireAnalyticsEvent()) === null || _this$deps$getFireAna === void 0 || _this$deps$getFireAna((0, _errorHandling.fetchErrorPayload)(error.message, resId));
43
+ (_this$deps$getFireAna = _this.deps.getFireAnalyticsEvent()) === null || _this$deps$getFireAna === void 0 || _this$deps$getFireAna((0, _errorHandling.fetchErrorPayload)(error.message, resId, (0, _utils.productAttrIfGateOn)(resId)));
44
44
  });
45
45
  });
46
46
  });
@@ -12,6 +12,7 @@ var _monitoring = require("@atlaskit/editor-common/monitoring");
12
12
  var _providerFactory = require("@atlaskit/editor-common/provider-factory");
13
13
  var _errorHandling = require("../utils/errorHandling");
14
14
  var _resourceId = require("../utils/resourceId");
15
+ var _utils = require("../utils/utils");
15
16
  /**
16
17
  * Manages creation and caching of ProviderFactory instances used to
17
18
  * render synced block content (media, emoji, smart links, etc.).
@@ -32,7 +33,7 @@ var SyncBlockProviderFactoryManager = exports.SyncBlockProviderFactoryManager =
32
33
  (0, _monitoring.logException)(error, {
33
34
  location: 'editor-synced-block-provider/syncBlockProviderFactoryManager'
34
35
  });
35
- (_this$deps$getFireAna = this.deps.getFireAnalyticsEvent()) === null || _this$deps$getFireAna === void 0 || _this$deps$getFireAna((0, _errorHandling.fetchErrorPayload)(error.message));
36
+ (_this$deps$getFireAna = this.deps.getFireAnalyticsEvent()) === null || _this$deps$getFireAna === void 0 || _this$deps$getFireAna((0, _errorHandling.fetchErrorPayload)(error.message, resourceId, (0, _utils.productAttrIfGateOn)(resourceId)));
36
37
  return undefined;
37
38
  }
38
39
  var _dataProvider$getSync = dataProvider.getSyncedBlockRendererProviderOptions(),
@@ -65,7 +66,7 @@ var SyncBlockProviderFactoryManager = exports.SyncBlockProviderFactoryManager =
65
66
  (0, _monitoring.logException)(error, {
66
67
  location: 'editor-synced-block-provider/syncBlockProviderFactoryManager'
67
68
  });
68
- (_this$deps$getFireAna2 = this.deps.getFireAnalyticsEvent()) === null || _this$deps$getFireAna2 === void 0 || _this$deps$getFireAna2((0, _errorHandling.fetchErrorPayload)(error.message, resourceId));
69
+ (_this$deps$getFireAna2 = this.deps.getFireAnalyticsEvent()) === null || _this$deps$getFireAna2 === void 0 || _this$deps$getFireAna2((0, _errorHandling.fetchErrorPayload)(error.message, resourceId, (0, _utils.productAttrIfGateOn)(resourceId)));
69
70
  }
70
71
  }
71
72
  return providerFactory;
@@ -148,8 +149,9 @@ var SyncBlockProviderFactoryManager = exports.SyncBlockProviderFactoryManager =
148
149
  return;
149
150
  }
150
151
  if (!syncBlock.data.sourceAri || !syncBlock.data.product) {
151
- var _this$deps$getFireAna3;
152
- (_this$deps$getFireAna3 = this.deps.getFireAnalyticsEvent()) === null || _this$deps$getFireAna3 === void 0 || _this$deps$getFireAna3((0, _errorHandling.fetchErrorPayload)('Sync block source ari or product not found'));
152
+ var _this$deps$getFireAna3, _syncBlock$data$produ;
153
+ (_this$deps$getFireAna3 = this.deps.getFireAnalyticsEvent()) === null || _this$deps$getFireAna3 === void 0 || _this$deps$getFireAna3((0, _errorHandling.fetchErrorPayload)('Sync block source ari or product not found', resourceId, // Prefer cached product when available; fall back to parsing resourceId.
154
+ (_syncBlock$data$produ = syncBlock.data.product) !== null && _syncBlock$data$produ !== void 0 ? _syncBlock$data$produ : (0, _utils.productAttrIfGateOn)(resourceId)));
153
155
  return;
154
156
  }
155
157
  var parentInfo = dataProvider.retrieveSyncBlockParentInfo(syncBlock.data.sourceAri, syncBlock.data.product);
@@ -17,6 +17,7 @@ var _ari = require("../clients/block-service/ari");
17
17
  var _types = require("../common/types");
18
18
  var _errorHandling = require("../utils/errorHandling");
19
19
  var _experienceTracking = require("../utils/experienceTracking");
20
+ var _utils = require("../utils/utils");
20
21
  var _referenceSyncBlockStoreManager = require("./referenceSyncBlockStoreManager");
21
22
  var _sourceSyncBlockStoreManager = require("./sourceSyncBlockStoreManager");
22
23
  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; }
@@ -160,7 +161,7 @@ var SyncBlockStoreManager = exports.SyncBlockStoreManager = /*#__PURE__*/functio
160
161
  (0, _monitoring.logException)(_context2.t0, {
161
162
  location: 'editor-synced-block-provider/syncBlockStoreManager'
162
163
  });
163
- (_this$fireAnalyticsEv = this.fireAnalyticsEvent) === null || _this$fireAnalyticsEv === void 0 || _this$fireAnalyticsEv.call(this, (0, _errorHandling.fetchReferencesErrorPayload)(_context2.t0.message));
164
+ (_this$fireAnalyticsEv = this.fireAnalyticsEvent) === null || _this$fireAnalyticsEv === void 0 || _this$fireAnalyticsEv.call(this, (0, _errorHandling.fetchReferencesErrorPayload)(_context2.t0.message, resourceId, (0, _utils.productAttrIfGateOn)(resourceId)));
164
165
  return _context2.abrupt("return", {
165
166
  error: _types.SyncBlockError.Errored
166
167
  });
@@ -9,8 +9,10 @@ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/cl
9
9
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
10
10
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
11
  var _monitoring = require("@atlaskit/editor-common/monitoring");
12
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
12
13
  var _errorHandling = require("../utils/errorHandling");
13
14
  var _resolveSyncBlockInstance = require("../utils/resolveSyncBlockInstance");
15
+ var _utils = require("../utils/utils");
14
16
  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; } } }; }
15
17
  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; } }
16
18
  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; }
@@ -256,7 +258,7 @@ var SyncBlockSubscriptionManager = exports.SyncBlockSubscriptionManager = /*#__P
256
258
  (0, _monitoring.logException)(error, {
257
259
  location: 'editor-synced-block-provider/syncBlockSubscriptionManager/graphql-subscription'
258
260
  });
259
- (_this5$deps$getFireAn = _this5.deps.getFireAnalyticsEvent()) === null || _this5$deps$getFireAn === void 0 || _this5$deps$getFireAn((0, _errorHandling.fetchErrorPayload)(error.message));
261
+ (_this5$deps$getFireAn = _this5.deps.getFireAnalyticsEvent()) === null || _this5$deps$getFireAn === void 0 || _this5$deps$getFireAn((0, _errorHandling.fetchErrorPayload)(error.message, resourceId, (0, _utils.productAttrIfGateOn)(resourceId)));
260
262
  });
261
263
  if (unsubscribe) {
262
264
  this.graphqlSubscriptions.set(resourceId, unsubscribe);
@@ -347,14 +349,16 @@ var SyncBlockSubscriptionManager = exports.SyncBlockSubscriptionManager = /*#__P
347
349
  var callbacks = this.subscriptions.get(syncBlockInstance.resourceId);
348
350
  var localIds = callbacks ? Object.keys(callbacks) : [];
349
351
  localIds.forEach(function (localId) {
350
- var _this6$deps$getFireAn, _syncBlockInstance$da;
351
- (_this6$deps$getFireAn = _this6.deps.getFireAnalyticsEvent()) === null || _this6$deps$getFireAn === void 0 || _this6$deps$getFireAn((0, _errorHandling.fetchSuccessPayload)(syncBlockInstance.resourceId, localId, (_syncBlockInstance$da = syncBlockInstance.data) === null || _syncBlockInstance$da === void 0 ? void 0 : _syncBlockInstance$da.product));
352
+ var _this6$deps$getFireAn, _syncBlockInstance$da, _syncBlockInstance$da2;
353
+ (_this6$deps$getFireAn = _this6.deps.getFireAnalyticsEvent()) === null || _this6$deps$getFireAn === void 0 || _this6$deps$getFireAn((0, _errorHandling.fetchSuccessPayload)(syncBlockInstance.resourceId, localId,
354
+ // Prefer cached product when available; fall back to parsing the resourceId.
355
+ (0, _platformFeatureFlags.fg)('platform_synced_block_patch_11') ? (_syncBlockInstance$da = (_syncBlockInstance$da2 = syncBlockInstance.data) === null || _syncBlockInstance$da2 === void 0 ? void 0 : _syncBlockInstance$da2.product) !== null && _syncBlockInstance$da !== void 0 ? _syncBlockInstance$da : (0, _utils.getSourceProductFromResourceIdSafe)(syncBlockInstance.resourceId) : undefined));
352
356
  });
353
357
  this.deps.fetchSyncBlockSourceInfo(resolved.resourceId);
354
358
  } else {
355
- var _syncBlockInstance$er, _syncBlockInstance$er2, _this$deps$getFireAna;
359
+ var _syncBlockInstance$er, _syncBlockInstance$er2, _this$deps$getFireAna, _syncBlockInstance$da3, _syncBlockInstance$da4;
356
360
  var errorMessage = ((_syncBlockInstance$er = syncBlockInstance.error) === null || _syncBlockInstance$er === void 0 ? void 0 : _syncBlockInstance$er.reason) || ((_syncBlockInstance$er2 = syncBlockInstance.error) === null || _syncBlockInstance$er2 === void 0 ? void 0 : _syncBlockInstance$er2.type);
357
- (_this$deps$getFireAna = this.deps.getFireAnalyticsEvent()) === null || _this$deps$getFireAna === void 0 || _this$deps$getFireAna((0, _errorHandling.fetchErrorPayload)(errorMessage, syncBlockInstance.resourceId));
361
+ (_this$deps$getFireAna = this.deps.getFireAnalyticsEvent()) === null || _this$deps$getFireAna === void 0 || _this$deps$getFireAna((0, _errorHandling.fetchErrorPayload)(errorMessage, syncBlockInstance.resourceId, (0, _platformFeatureFlags.fg)('platform_synced_block_patch_11') ? (_syncBlockInstance$da3 = (_syncBlockInstance$da4 = syncBlockInstance.data) === null || _syncBlockInstance$da4 === void 0 ? void 0 : _syncBlockInstance$da4.product) !== null && _syncBlockInstance$da3 !== void 0 ? _syncBlockInstance$da3 : (0, _utils.getSourceProductFromResourceIdSafe)(syncBlockInstance.resourceId) : undefined));
358
362
  }
359
363
  }
360
364
  }]);