@atlaskit/smart-card 40.10.4 → 40.10.6

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 (41) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/analytics.spec.yaml +4 -0
  3. package/dist/cjs/extractors/action/extract-invoke-copy-link-action.js +1 -3
  4. package/dist/cjs/extractors/action/extract-invoke-download-action.js +1 -3
  5. package/dist/cjs/extractors/action/extract-invoke-preview-action.js +5 -7
  6. package/dist/cjs/extractors/common/primitives/extractSummary.js +3 -6
  7. package/dist/cjs/extractors/embed/index.js +1 -14
  8. package/dist/cjs/extractors/flexible/actions/extract-view-related-links-action.js +1 -2
  9. package/dist/cjs/extractors/flexible/extract-preview.js +0 -5
  10. package/dist/cjs/state/helpers.js +22 -49
  11. package/dist/cjs/utils/analytics/analytics.js +1 -1
  12. package/dist/cjs/view/BlockCard/views/utils/index.js +21 -0
  13. package/dist/cjs/view/CardWithUrl/component.js +3 -2
  14. package/dist/cjs/view/LinkUrl/index.js +1 -1
  15. package/dist/es2019/extractors/action/extract-invoke-copy-link-action.js +2 -4
  16. package/dist/es2019/extractors/action/extract-invoke-download-action.js +1 -3
  17. package/dist/es2019/extractors/action/extract-invoke-preview-action.js +6 -8
  18. package/dist/es2019/extractors/common/primitives/extractSummary.js +3 -7
  19. package/dist/es2019/extractors/embed/index.js +2 -12
  20. package/dist/es2019/extractors/flexible/actions/extract-view-related-links-action.js +2 -3
  21. package/dist/es2019/extractors/flexible/extract-preview.js +1 -6
  22. package/dist/es2019/state/helpers.js +22 -49
  23. package/dist/es2019/utils/analytics/analytics.js +1 -1
  24. package/dist/es2019/view/BlockCard/views/utils/index.js +21 -0
  25. package/dist/es2019/view/CardWithUrl/component.js +3 -2
  26. package/dist/es2019/view/LinkUrl/index.js +1 -1
  27. package/dist/esm/extractors/action/extract-invoke-copy-link-action.js +2 -4
  28. package/dist/esm/extractors/action/extract-invoke-download-action.js +1 -3
  29. package/dist/esm/extractors/action/extract-invoke-preview-action.js +6 -8
  30. package/dist/esm/extractors/common/primitives/extractSummary.js +3 -7
  31. package/dist/esm/extractors/embed/index.js +2 -14
  32. package/dist/esm/extractors/flexible/actions/extract-view-related-links-action.js +2 -3
  33. package/dist/esm/extractors/flexible/extract-preview.js +1 -6
  34. package/dist/esm/state/helpers.js +22 -49
  35. package/dist/esm/utils/analytics/analytics.js +1 -1
  36. package/dist/esm/view/BlockCard/views/utils/index.js +21 -0
  37. package/dist/esm/view/CardWithUrl/component.js +3 -2
  38. package/dist/esm/view/LinkUrl/index.js +1 -1
  39. package/dist/types/common/analytics/generated/analytics.types.d.ts +2 -1
  40. package/dist/types-ts4.5/common/analytics/generated/analytics.types.d.ts +2 -1
  41. package/package.json +8 -8
package/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # @atlaskit/smart-card
2
2
 
3
+ ## 40.10.6
4
+
5
+ ### Patch Changes
6
+
7
+ - [`1d8918dd67a21`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/1d8918dd67a21) -
8
+ Update smartLinkClickedSmartLinkClickAnalyticsWorkflowsAttributesType to include clickedAt field
9
+ in yaml file and codegen'd file as well as update component to pass it along as
10
+ Date.now().toString()
11
+
12
+ ## 40.10.5
13
+
14
+ ### Patch Changes
15
+
16
+ - [`2a46c52a9d189`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/2a46c52a9d189) -
17
+ NAVX-1307 cleaning up smart-links-noun-support
18
+ - [`f72b5d8c897b8`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/f72b5d8c897b8) -
19
+ [ux] Add ownedBy support for passionfruit-object-provider smart-link resolver under
20
+ `passionfruit_ask_smart_links_enabled` feature-gate
21
+ - Updated dependencies
22
+
3
23
  ## 40.10.4
4
24
 
5
25
  ### Patch Changes
@@ -771,3 +771,7 @@ events:
771
771
  A null-capable field representing the Confluence content ID, Confluence page ID, or Jira
772
772
  issue key. This can be null if it is a value for an unsupported 1P provider (eg,
773
773
  Bitbucket, Loom), and will be prefixed by an identifier based on the source product.
774
+ clickedAt:
775
+ required: true
776
+ type: string
777
+ description: The timestamp when the event was clicked
@@ -8,7 +8,6 @@ exports.extractInvokeCopyLinkAction = void 0;
8
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
9
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
10
  var _linkExtractors = require("@atlaskit/link-extractors");
11
- var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
12
11
  var _index = require("../../index");
13
12
  var _helpers = require("../../state/helpers");
14
13
  var _canShowAction = require("../../utils/actions/can-show-action");
@@ -20,8 +19,7 @@ var extractInvokeCopyLinkAction = exports.extractInvokeCopyLinkAction = function
20
19
  if (!(0, _canShowAction.canShowAction)(_index.CardAction.CopyLinkAction, actionOptions)) {
21
20
  return;
22
21
  }
23
- var data = response.data;
24
- var url = (0, _platformFeatureFlags.fg)('smart_links_noun_support') ? (0, _linkExtractors.extractSmartLinkUrl)(response) : (0, _linkExtractors.extractLink)(data);
22
+ var url = (0, _linkExtractors.extractSmartLinkUrl)(response);
25
23
  if (!url) {
26
24
  return;
27
25
  }
@@ -8,13 +8,11 @@ exports.extractInvokeDownloadAction = void 0;
8
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
9
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
10
  var _linkExtractors = require("@atlaskit/link-extractors");
11
- var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
12
11
  var _index = require("../../index");
13
12
  var _helpers = require("../../state/helpers");
14
13
  var _utils = require("../../utils");
15
14
  var _canShowAction = require("../../utils/actions/can-show-action");
16
15
  var _extractActions = require("../common/actions/extractActions");
17
- var _extractDownloadUrl = require("../common/download/extractDownloadUrl");
18
16
  var extractInvokeDownloadAction = exports.extractInvokeDownloadAction = function extractInvokeDownloadAction(_ref) {
19
17
  var actionOptions = _ref.actionOptions,
20
18
  appearance = _ref.appearance,
@@ -28,7 +26,7 @@ var extractInvokeDownloadAction = exports.extractInvokeDownloadAction = function
28
26
  return action['@type'] === 'DownloadAction';
29
27
  });
30
28
  if (downloadActionExists) {
31
- var downloadUrl = (0, _platformFeatureFlags.fg)('smart_links_noun_support') ? (0, _linkExtractors.extractSmartLinkDownloadUrl)(response) : (0, _extractDownloadUrl.extractDownloadUrl)(data);
29
+ var downloadUrl = (0, _linkExtractors.extractSmartLinkDownloadUrl)(response);
32
30
  return {
33
31
  actionFn: function () {
34
32
  var _actionFn = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
@@ -8,7 +8,6 @@ exports.extractInvokePreviewAction = void 0;
8
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
9
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
10
  var _linkExtractors = require("@atlaskit/link-extractors");
11
- var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
12
11
  var _index = require("../../index");
13
12
  var _helpers = require("../../state/helpers");
14
13
  var _canShowAction = require("../../utils/actions/can-show-action");
@@ -34,12 +33,11 @@ var extractInvokePreviewAction = exports.extractInvokePreviewAction = function e
34
33
  var meta = response.meta;
35
34
  var src = (_extractPreviewData = (0, _linkExtractors.extractPreview)(data, 'web')) === null || _extractPreviewData === void 0 ? void 0 : _extractPreviewData.src;
36
35
  if (src) {
37
- var url = (0, _linkExtractors.extractLink)(data);
38
36
  var extensionKey = (0, _helpers.getExtensionKey)(response);
39
37
  return {
40
38
  actionFn: function () {
41
39
  var _actionFn = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
42
- var _extractSmartLinkProv, _extractProvider, _extractSmartLinkEmbe;
40
+ var _extractSmartLinkProv, _extractSmartLinkEmbe;
43
41
  return _regenerator.default.wrap(function _callee$(_context) {
44
42
  while (1) switch (_context.prev = _context.next) {
45
43
  case 0:
@@ -52,12 +50,12 @@ var extractInvokePreviewAction = exports.extractInvokePreviewAction = function e
52
50
  isSupportTheming: (0, _extractIsSupportTheming.extractIsSupportTheming)(meta),
53
51
  isTrusted: (0, _extractIsTrusted.extractIsTrusted)(meta),
54
52
  linkIcon: (0, _icon.extractLinkIcon)(response),
55
- providerName: (0, _platformFeatureFlags.fg)('smart_links_noun_support') ? (_extractSmartLinkProv = (0, _linkExtractors.extractSmartLinkProvider)(response)) === null || _extractSmartLinkProv === void 0 ? void 0 : _extractSmartLinkProv.text : (_extractProvider = (0, _linkExtractors.extractProvider)(data)) === null || _extractProvider === void 0 ? void 0 : _extractProvider.text,
53
+ providerName: (_extractSmartLinkProv = (0, _linkExtractors.extractSmartLinkProvider)(response)) === null || _extractSmartLinkProv === void 0 ? void 0 : _extractSmartLinkProv.text,
56
54
  onClose: onClose,
57
55
  origin: origin,
58
- src: (0, _platformFeatureFlags.fg)('smart_links_noun_support') ? (_extractSmartLinkEmbe = (0, _linkExtractors.extractSmartLinkEmbed)(response)) === null || _extractSmartLinkEmbe === void 0 ? void 0 : _extractSmartLinkEmbe.src : src,
59
- title: (0, _platformFeatureFlags.fg)('smart_links_noun_support') ? (0, _linkExtractors.extractSmartLinkTitle)(response) : (0, _linkExtractors.extractTitle)(data),
60
- url: (0, _platformFeatureFlags.fg)('smart_links_noun_support') ? (0, _linkExtractors.extractSmartLinkUrl)(response) : url
56
+ src: (_extractSmartLinkEmbe = (0, _linkExtractors.extractSmartLinkEmbed)(response)) === null || _extractSmartLinkEmbe === void 0 ? void 0 : _extractSmartLinkEmbe.src,
57
+ title: (0, _linkExtractors.extractSmartLinkTitle)(response),
58
+ url: (0, _linkExtractors.extractSmartLinkUrl)(response)
61
59
  }));
62
60
  case 1:
63
61
  case "end":
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.extractSummary = exports.extractSmartLinkSummary = void 0;
7
7
  var _linkExtractors = require("@atlaskit/link-extractors");
8
- var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
9
8
  /**
10
9
  * Return link summary
11
10
  */
@@ -20,11 +19,9 @@ var extractSummary = exports.extractSummary = function extractSummary(jsonLd) {
20
19
  * Return link summary
21
20
  */
22
21
  var extractSmartLinkSummary = exports.extractSmartLinkSummary = function extractSmartLinkSummary(response) {
23
- if ((0, _platformFeatureFlags.fg)('smart_links_noun_support')) {
24
- if ((0, _linkExtractors.isEntityPresent)(response)) {
25
- var _extractEntity;
26
- return (_extractEntity = (0, _linkExtractors.extractEntity)(response)) === null || _extractEntity === void 0 ? void 0 : _extractEntity.description;
27
- }
22
+ if ((0, _linkExtractors.isEntityPresent)(response)) {
23
+ var _extractEntity;
24
+ return (_extractEntity = (0, _linkExtractors.extractEntity)(response)) === null || _extractEntity === void 0 ? void 0 : _extractEntity.description;
28
25
  }
29
26
  return (response === null || response === void 0 ? void 0 : response.data) && extractSummary(response.data);
30
27
  };
@@ -1,27 +1,14 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
3
  Object.defineProperty(exports, "__esModule", {
5
4
  value: true
6
5
  });
7
6
  exports.extractEmbedProps = void 0;
8
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
7
  var _linkExtractors = require("@atlaskit/link-extractors");
10
- var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
11
8
  var _jsonld = require("../../utils/jsonld");
12
9
  var _context = require("../common/context");
13
10
  var _extractIsSupportTheming = require("../common/meta/extractIsSupportTheming");
14
11
  var _extractIsTrusted = require("../common/meta/extractIsTrusted");
15
- 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; }
16
- 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; }
17
- var extractEmbedPreview = function extractEmbedPreview(jsonLd, platform, iframeUrlType) {
18
- var preview = (0, _linkExtractors.extractPreview)(jsonLd, platform, iframeUrlType);
19
- if (preview && preview.src) {
20
- return _objectSpread(_objectSpread({}, preview), {}, {
21
- src: preview.src
22
- });
23
- }
24
- };
25
12
  var extractEmbedProps = exports.extractEmbedProps = function extractEmbedProps(response, platform, iframeUrlType) {
26
13
  var meta = response === null || response === void 0 ? void 0 : response.meta;
27
14
  var jsonLd = (response === null || response === void 0 ? void 0 : response.data) || (0, _jsonld.getEmptyJsonLd)();
@@ -29,7 +16,7 @@ var extractEmbedProps = exports.extractEmbedProps = function extractEmbedProps(r
29
16
  link: (0, _linkExtractors.extractSmartLinkUrl)(response) || '',
30
17
  title: (0, _linkExtractors.extractSmartLinkTitle)(response),
31
18
  context: (0, _context.extractSmartLinkContext)(response),
32
- preview: (0, _platformFeatureFlags.fg)('smart_links_noun_support') ? (0, _linkExtractors.extractSmartLinkEmbed)(response, iframeUrlType) : extractEmbedPreview(jsonLd, platform, iframeUrlType),
19
+ preview: (0, _linkExtractors.extractSmartLinkEmbed)(response, iframeUrlType),
33
20
  isTrusted: (0, _extractIsTrusted.extractIsTrusted)(meta),
34
21
  isSupportTheming: (0, _extractIsSupportTheming.extractIsSupportTheming)(meta),
35
22
  type: (0, _linkExtractors.extractType)(jsonLd)
@@ -5,13 +5,12 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.extractViewRelatedLinksAction = void 0;
7
7
  var _linkExtractors = require("@atlaskit/link-extractors");
8
- var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
9
8
  var extractViewRelatedLinksAction = exports.extractViewRelatedLinksAction = function extractViewRelatedLinksAction(response) {
10
9
  var _response$meta;
11
10
  if (!(response !== null && response !== void 0 && (_response$meta = response.meta) !== null && _response$meta !== void 0 && (_response$meta = _response$meta.supportedFeature) !== null && _response$meta !== void 0 && _response$meta.includes('RelatedLinks'))) {
12
11
  return;
13
12
  }
14
- var ari = (0, _platformFeatureFlags.fg)('smart_links_noun_support') ? (0, _linkExtractors.extractSmartLinkAri)(response) : (0, _linkExtractors.extractAri)(response.data);
13
+ var ari = (0, _linkExtractors.extractSmartLinkAri)(response);
15
14
  if (!ari) {
16
15
  return;
17
16
  }
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.extractSmartLinkPreviewImage = exports.default = void 0;
7
7
  var _linkExtractors = require("@atlaskit/link-extractors");
8
- var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
9
8
  var _constants = require("../../constants");
10
9
  var extractPreview = function extractPreview(data) {
11
10
  if (!data) {
@@ -29,10 +28,6 @@ var extractSmartLinkPreviewImage = exports.extractSmartLinkPreviewImage = functi
29
28
  var _entity$thumbnail;
30
29
  var entity = (0, _linkExtractors.extractEntity)(response);
31
30
  var url = entity === null || entity === void 0 || (_entity$thumbnail = entity.thumbnail) === null || _entity$thumbnail === void 0 ? void 0 : _entity$thumbnail.externalUrl;
32
- if (!url && !(0, _platformFeatureFlags.fg)('smart_links_noun_support')) {
33
- var provider = (0, _linkExtractors.extractEntityProvider)(response);
34
- url = provider === null || provider === void 0 ? void 0 : provider.image;
35
- }
36
31
  return url ? {
37
32
  type: _constants.MediaType.Image,
38
33
  url: url
@@ -50,9 +50,11 @@ var getFirstPartyIdentifier = exports.getFirstPartyIdentifier = function getFirs
50
50
  var product = getProductFromWindowURL();
51
51
  var currentURL = window.location.href;
52
52
  if (product === 'confluence') {
53
- var contentId = extractContentIdFromURL(currentURL);
54
- if (contentId) {
55
- return "ConfluenceContentId:".concat(contentId);
53
+ if (currentURL.includes('content.id')) {
54
+ var contentId = extractContentIdFromURL(currentURL);
55
+ if (contentId) {
56
+ return "ConfluenceContentId:".concat(contentId);
57
+ }
56
58
  }
57
59
  var pageId = extractPageIdFromURL(currentURL);
58
60
  if (pageId) {
@@ -63,9 +65,8 @@ var getFirstPartyIdentifier = exports.getFirstPartyIdentifier = function getFirs
63
65
  if (issueKey) {
64
66
  return "JiraIssueKey:".concat(issueKey);
65
67
  }
66
- } else {
67
- return undefined;
68
68
  }
69
+ return undefined;
69
70
  };
70
71
  var getObjectName = exports.getObjectName = function getObjectName(details) {
71
72
  return (details === null || details === void 0 ? void 0 : details.data) && 'name' in details.data && details.data.name || undefined;
@@ -125,40 +126,34 @@ var hasAuthScopeOverrides = exports.hasAuthScopeOverrides = function hasAuthScop
125
126
  // Helper function to extract page ID from standard Confluence page URLs
126
127
  var extractPageIdFromURL = function extractPageIdFromURL(url) {
127
128
  try {
128
- var urlObj = new URL(url);
129
-
130
129
  // Following this pattern for confluence URL -> /wiki/spaces/{space}/pages/{pageId}/{title}
131
- var pagesMatch = urlObj.pathname.match(/\/wiki\/spaces\/[^\/]+\/pages\/(\d+)/);
132
- if (pagesMatch && pagesMatch[1]) {
133
- return pagesMatch[1];
130
+ var pagesMatch = url.match(/(?!pages)(\d+)/);
131
+ if (pagesMatch && pagesMatch[0]) {
132
+ return pagesMatch[0];
134
133
  }
135
134
 
136
135
  // Following this pattern for confluence URL -> /wiki/pages/viewpage.action?pageId={pageId}
137
- var pageIdParam = urlObj.searchParams.get('pageId');
138
- if (pageIdParam) {
139
- return pageIdParam;
136
+ var pageIdParam = url.match(/(?!pageId=)(\d+)/);
137
+ if (pageIdParam && pageIdParam[0]) {
138
+ return pageIdParam[0];
140
139
  }
141
140
 
142
141
  // Following this pattern for confluence URL -> /wiki/display/{space}/{pageId}
143
- var displayMatch = urlObj.pathname.match(/\/wiki\/display\/[^\/]+\/(\d+)/);
144
- if (displayMatch && displayMatch[1]) {
145
- return displayMatch[1];
142
+ var displayMatch = url.match(/(?!display\/)(\d+)/);
143
+ if (displayMatch && displayMatch[0]) {
144
+ return displayMatch[0];
146
145
  }
147
146
  } catch (_unused) {
148
147
  return undefined;
149
148
  }
150
149
  return undefined;
151
150
  };
152
-
153
- // Helper function to extract content ID from app connector URLs
154
151
  var extractContentIdFromURL = function extractContentIdFromURL(url) {
155
152
  try {
156
- var urlObj = new URL(url);
157
-
158
- // Pattern: ?content.id={contentId} (for app connector URLs)
159
- var contentId = urlObj.searchParams.get('content.id');
160
- if (contentId) {
161
- return contentId;
153
+ var contentId = url.match(/content\.id=(\d+)/);
154
+ if (contentId && contentId[1]) {
155
+ // contentId[1] contains just the number
156
+ return contentId[1];
162
157
  }
163
158
  } catch (_unused2) {
164
159
  return undefined;
@@ -167,31 +162,9 @@ var extractContentIdFromURL = function extractContentIdFromURL(url) {
167
162
  };
168
163
  var extractJiraIssueIdFromURL = function extractJiraIssueIdFromURL(url) {
169
164
  try {
170
- var urlObj = new URL(url);
171
-
172
- // Following this pattern for jira URL -> /browse/{issueKey} (most common)
173
- // Example: https://product-fabric.atlassian.net/browse/AI3W-1064
174
- var browseMatch = urlObj.pathname.match(/\/browse\/([A-Z]+-\d+)/);
175
- if (browseMatch && browseMatch[1]) {
176
- return browseMatch[1];
177
- }
178
-
179
- // Following this pattern for jira URL -> /jira/browse/{issueKey} (for some installations)
180
- var jiraBrowseMatch = urlObj.pathname.match(/\/jira\/browse\/([A-Z]+-\d+)/);
181
- if (jiraBrowseMatch && jiraBrowseMatch[1]) {
182
- return jiraBrowseMatch[1];
183
- }
184
-
185
- // Following this pattern for jira URL -> Query parameter ?selectedIssue={issueKey}
186
- var selectedIssue = urlObj.searchParams.get('selectedIssue');
187
- if (selectedIssue && /^[A-Z]+-\d+$/.test(selectedIssue)) {
188
- return selectedIssue;
189
- }
190
-
191
- // Following this pattern for jira URL -> Query parameter ?issueKey={issueKey}
192
- var issueKeyParam = urlObj.searchParams.get('issueKey');
193
- if (issueKeyParam && /^[A-Z]+-\d+$/.test(issueKeyParam)) {
194
- return issueKeyParam;
165
+ var browseMatch = url.match(/[A-Z0-9]+-\d+/);
166
+ if (browseMatch && browseMatch[0]) {
167
+ return browseMatch[0];
195
168
  }
196
169
  } catch (_unused3) {
197
170
  return undefined;
@@ -11,7 +11,7 @@ var ANALYTICS_CHANNEL = exports.ANALYTICS_CHANNEL = 'media';
11
11
  var context = exports.context = {
12
12
  componentName: 'smart-cards',
13
13
  packageName: "@atlaskit/smart-card",
14
- packageVersion: "40.10.3"
14
+ packageVersion: "40.10.5"
15
15
  };
16
16
  var TrackQuickActionType = exports.TrackQuickActionType = /*#__PURE__*/function (TrackQuickActionType) {
17
17
  TrackQuickActionType["StatusUpdate"] = "StatusUpdate";
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.titleBlockOptions = exports.getSimulatedBetterMetadata = exports.PreviewBlockOptions = exports.FlexibleCardUiOptions = void 0;
7
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
7
8
  var _constants = require("../../../../constants");
8
9
  var _utils = require("../../../../extractors/flexible/utils");
9
10
  var _helpers = require("../../../../state/helpers");
@@ -73,6 +74,26 @@ var getSimulatedBetterMetadata = exports.getSimulatedBetterMetadata = function g
73
74
  name: _constants.ElementName.AppliedToComponentsCount
74
75
  }].concat(baseBottomMetaData)
75
76
  };
77
+ case 'passionfruit-object-provider':
78
+ if ((0, _platformFeatureFlags.fg)('passionfruit_ask_smart_links_enabled')) {
79
+ return {
80
+ titleMetadata: defaultTitleMetadata,
81
+ topMetadata: (0, _utils.extractOwnedBy)(data) ? [{
82
+ name: _constants.ElementName.OwnedByGroup
83
+ }, {
84
+ name: _constants.ElementName.OwnedBy
85
+ }].concat(baseTopMetadata) : defaultTopMetadata,
86
+ bottomMetadata: [{
87
+ name: _constants.ElementName.AppliedToComponentsCount
88
+ }].concat(baseBottomMetaData)
89
+ };
90
+ } else {
91
+ return {
92
+ titleMetadata: defaultTitleMetadata,
93
+ topMetadata: defaultTopMetadata,
94
+ bottomMetadata: defaultBottomMetadata
95
+ };
96
+ }
76
97
  case 'confluence-object-provider':
77
98
  return {
78
99
  titleMetadata: defaultTitleMetadata,
@@ -102,10 +102,11 @@ function Component(_ref) {
102
102
  action: 'clicked',
103
103
  actionSubject: 'smartLink',
104
104
  actionSubjectId: 'smartlinkClickAnalyticsWorkflows',
105
- eventType: 'ui',
105
+ eventType: 'screen',
106
106
  attributes: {
107
107
  eventName: 'smartLinkClickAnalyticsThirdPartyWorkflows',
108
- firstPartyIdentifier: firstPartyIdentifier
108
+ firstPartyIdentifier: firstPartyIdentifier,
109
+ clickedAt: Date.now().toString()
109
110
  },
110
111
  nonPrivacySafeAttributes: {
111
112
  thirdPartyARI: thirdPartyARI
@@ -19,7 +19,7 @@ var _excluded = ["href", "children", "checkSafety", "onClick", "testId", "isLink
19
19
  _excluded2 = ["isLinkSafe", "showSafetyWarningModal"];
20
20
  var PACKAGE_DATA = {
21
21
  packageName: "@atlaskit/smart-card",
22
- packageVersion: "40.10.3",
22
+ packageVersion: "40.10.5",
23
23
  componentName: 'linkUrl'
24
24
  };
25
25
  var Anchor = (0, _click.withLinkClickedEvent)('a');
@@ -1,5 +1,4 @@
1
- import { extractLink, extractSmartLinkUrl } from '@atlaskit/link-extractors';
2
- import { fg } from '@atlaskit/platform-feature-flags';
1
+ import { extractSmartLinkUrl } from '@atlaskit/link-extractors';
3
2
  import { ActionName, CardAction } from '../../index';
4
3
  import { getDefinitionId, getExtensionKey, getResourceType } from '../../state/helpers';
5
4
  import { canShowAction } from '../../utils/actions/can-show-action';
@@ -12,8 +11,7 @@ export const extractInvokeCopyLinkAction = ({
12
11
  if (!canShowAction(CardAction.CopyLinkAction, actionOptions)) {
13
12
  return;
14
13
  }
15
- const data = response.data;
16
- const url = fg('smart_links_noun_support') ? extractSmartLinkUrl(response) : extractLink(data);
14
+ const url = extractSmartLinkUrl(response);
17
15
  if (!url) {
18
16
  return;
19
17
  }
@@ -1,11 +1,9 @@
1
1
  import { extractSmartLinkDownloadUrl } from '@atlaskit/link-extractors';
2
- import { fg } from '@atlaskit/platform-feature-flags';
3
2
  import { ActionName, CardAction } from '../../index';
4
3
  import { getDefinitionId, getExtensionKey, getResourceType } from '../../state/helpers';
5
4
  import { downloadUrl as download } from '../../utils';
6
5
  import { canShowAction } from '../../utils/actions/can-show-action';
7
6
  import { getActionsFromJsonLd } from '../common/actions/extractActions';
8
- import { extractDownloadUrl } from '../common/download/extractDownloadUrl';
9
7
  export const extractInvokeDownloadAction = ({
10
8
  actionOptions,
11
9
  appearance,
@@ -18,7 +16,7 @@ export const extractInvokeDownloadAction = ({
18
16
  const data = response.data;
19
17
  const downloadActionExists = getActionsFromJsonLd(data).find(action => action['@type'] === 'DownloadAction');
20
18
  if (downloadActionExists) {
21
- const downloadUrl = fg('smart_links_noun_support') ? extractSmartLinkDownloadUrl(response) : extractDownloadUrl(data);
19
+ const downloadUrl = extractSmartLinkDownloadUrl(response);
22
20
  return {
23
21
  actionFn: async () => download(downloadUrl),
24
22
  actionSubjectId: 'downloadDocument',
@@ -1,5 +1,4 @@
1
- import { extractLink, extractPreview as extractPreviewData, extractProvider, extractSmartLinkEmbed, extractSmartLinkProvider, extractSmartLinkTitle, extractSmartLinkUrl, extractTitle } from '@atlaskit/link-extractors';
2
- import { fg } from '@atlaskit/platform-feature-flags';
1
+ import { extractPreview as extractPreviewData, extractSmartLinkEmbed, extractSmartLinkProvider, extractSmartLinkTitle, extractSmartLinkUrl } from '@atlaskit/link-extractors';
3
2
  import { ActionName, CardAction } from '../../index';
4
3
  import { getExtensionKey } from '../../state/helpers';
5
4
  import { canShowAction } from '../../utils/actions/can-show-action';
@@ -27,11 +26,10 @@ export const extractInvokePreviewAction = param => {
27
26
  const meta = response.meta;
28
27
  const src = (_extractPreviewData = extractPreviewData(data, 'web')) === null || _extractPreviewData === void 0 ? void 0 : _extractPreviewData.src;
29
28
  if (src) {
30
- const url = extractLink(data);
31
29
  const extensionKey = getExtensionKey(response);
32
30
  return {
33
31
  actionFn: async () => {
34
- var _extractSmartLinkProv, _extractProvider, _extractSmartLinkEmbe;
32
+ var _extractSmartLinkProv, _extractSmartLinkEmbe;
35
33
  return openEmbedModal({
36
34
  fireEvent,
37
35
  extensionKey,
@@ -41,12 +39,12 @@ export const extractInvokePreviewAction = param => {
41
39
  isSupportTheming: extractIsSupportTheming(meta),
42
40
  isTrusted: extractIsTrusted(meta),
43
41
  linkIcon: extractLinkIcon(response),
44
- providerName: fg('smart_links_noun_support') ? (_extractSmartLinkProv = extractSmartLinkProvider(response)) === null || _extractSmartLinkProv === void 0 ? void 0 : _extractSmartLinkProv.text : (_extractProvider = extractProvider(data)) === null || _extractProvider === void 0 ? void 0 : _extractProvider.text,
42
+ providerName: (_extractSmartLinkProv = extractSmartLinkProvider(response)) === null || _extractSmartLinkProv === void 0 ? void 0 : _extractSmartLinkProv.text,
45
43
  onClose,
46
44
  origin,
47
- src: fg('smart_links_noun_support') ? (_extractSmartLinkEmbe = extractSmartLinkEmbed(response)) === null || _extractSmartLinkEmbe === void 0 ? void 0 : _extractSmartLinkEmbe.src : src,
48
- title: fg('smart_links_noun_support') ? extractSmartLinkTitle(response) : extractTitle(data),
49
- url: fg('smart_links_noun_support') ? extractSmartLinkUrl(response) : url
45
+ src: (_extractSmartLinkEmbe = extractSmartLinkEmbed(response)) === null || _extractSmartLinkEmbe === void 0 ? void 0 : _extractSmartLinkEmbe.src,
46
+ title: extractSmartLinkTitle(response),
47
+ url: extractSmartLinkUrl(response)
50
48
  });
51
49
  },
52
50
  actionSubjectId: 'invokePreviewScreen',
@@ -1,6 +1,4 @@
1
1
  import { extractEntity, isEntityPresent } from '@atlaskit/link-extractors';
2
- import { fg } from '@atlaskit/platform-feature-flags';
3
-
4
2
  /**
5
3
  * Return link summary
6
4
  */
@@ -15,11 +13,9 @@ export const extractSummary = jsonLd => {
15
13
  * Return link summary
16
14
  */
17
15
  export const extractSmartLinkSummary = response => {
18
- if (fg('smart_links_noun_support')) {
19
- if (isEntityPresent(response)) {
20
- var _extractEntity;
21
- return (_extractEntity = extractEntity(response)) === null || _extractEntity === void 0 ? void 0 : _extractEntity.description;
22
- }
16
+ if (isEntityPresent(response)) {
17
+ var _extractEntity;
18
+ return (_extractEntity = extractEntity(response)) === null || _extractEntity === void 0 ? void 0 : _extractEntity.description;
23
19
  }
24
20
  return (response === null || response === void 0 ? void 0 : response.data) && extractSummary(response.data);
25
21
  };
@@ -1,18 +1,8 @@
1
- import { extractPreview, extractSmartLinkEmbed, extractSmartLinkTitle, extractSmartLinkUrl, extractType } from '@atlaskit/link-extractors';
2
- import { fg } from '@atlaskit/platform-feature-flags';
1
+ import { extractSmartLinkEmbed, extractSmartLinkTitle, extractSmartLinkUrl, extractType } from '@atlaskit/link-extractors';
3
2
  import { getEmptyJsonLd } from '../../utils/jsonld';
4
3
  import { extractSmartLinkContext } from '../common/context';
5
4
  import { extractIsSupportTheming } from '../common/meta/extractIsSupportTheming';
6
5
  import { extractIsTrusted } from '../common/meta/extractIsTrusted';
7
- const extractEmbedPreview = (jsonLd, platform, iframeUrlType) => {
8
- const preview = extractPreview(jsonLd, platform, iframeUrlType);
9
- if (preview && preview.src) {
10
- return {
11
- ...preview,
12
- src: preview.src
13
- };
14
- }
15
- };
16
6
  export const extractEmbedProps = (response, platform, iframeUrlType) => {
17
7
  const meta = response === null || response === void 0 ? void 0 : response.meta;
18
8
  const jsonLd = (response === null || response === void 0 ? void 0 : response.data) || getEmptyJsonLd();
@@ -20,7 +10,7 @@ export const extractEmbedProps = (response, platform, iframeUrlType) => {
20
10
  link: extractSmartLinkUrl(response) || '',
21
11
  title: extractSmartLinkTitle(response),
22
12
  context: extractSmartLinkContext(response),
23
- preview: fg('smart_links_noun_support') ? extractSmartLinkEmbed(response, iframeUrlType) : extractEmbedPreview(jsonLd, platform, iframeUrlType),
13
+ preview: extractSmartLinkEmbed(response, iframeUrlType),
24
14
  isTrusted: extractIsTrusted(meta),
25
15
  isSupportTheming: extractIsSupportTheming(meta),
26
16
  type: extractType(jsonLd)
@@ -1,11 +1,10 @@
1
- import { extractAri, extractSmartLinkAri } from '@atlaskit/link-extractors';
2
- import { fg } from '@atlaskit/platform-feature-flags';
1
+ import { extractSmartLinkAri } from '@atlaskit/link-extractors';
3
2
  export const extractViewRelatedLinksAction = response => {
4
3
  var _response$meta, _response$meta$suppor;
5
4
  if (!(response !== null && response !== void 0 && (_response$meta = response.meta) !== null && _response$meta !== void 0 && (_response$meta$suppor = _response$meta.supportedFeature) !== null && _response$meta$suppor !== void 0 && _response$meta$suppor.includes('RelatedLinks'))) {
6
5
  return;
7
6
  }
8
- const ari = fg('smart_links_noun_support') ? extractSmartLinkAri(response) : extractAri(response.data);
7
+ const ari = extractSmartLinkAri(response);
9
8
  if (!ari) {
10
9
  return;
11
10
  }
@@ -1,5 +1,4 @@
1
- import { extractEntity, extractEntityProvider, extractImage, isEntityPresent } from '@atlaskit/link-extractors';
2
- import { fg } from '@atlaskit/platform-feature-flags';
1
+ import { extractEntity, extractImage, isEntityPresent } from '@atlaskit/link-extractors';
3
2
  import { MediaType } from '../../constants';
4
3
  const extractPreview = data => {
5
4
  if (!data) {
@@ -24,10 +23,6 @@ export const extractSmartLinkPreviewImage = response => {
24
23
  var _entity$thumbnail;
25
24
  const entity = extractEntity(response);
26
25
  let url = entity === null || entity === void 0 ? void 0 : (_entity$thumbnail = entity.thumbnail) === null || _entity$thumbnail === void 0 ? void 0 : _entity$thumbnail.externalUrl;
27
- if (!url && !fg('smart_links_noun_support')) {
28
- const provider = extractEntityProvider(response);
29
- url = provider === null || provider === void 0 ? void 0 : provider.image;
30
- }
31
26
  return url ? {
32
27
  type: MediaType.Image,
33
28
  url
@@ -42,9 +42,11 @@ export const getFirstPartyIdentifier = () => {
42
42
  const product = getProductFromWindowURL();
43
43
  const currentURL = window.location.href;
44
44
  if (product === 'confluence') {
45
- const contentId = extractContentIdFromURL(currentURL);
46
- if (contentId) {
47
- return `ConfluenceContentId:${contentId}`;
45
+ if (currentURL.includes('content.id')) {
46
+ const contentId = extractContentIdFromURL(currentURL);
47
+ if (contentId) {
48
+ return `ConfluenceContentId:${contentId}`;
49
+ }
48
50
  }
49
51
  const pageId = extractPageIdFromURL(currentURL);
50
52
  if (pageId) {
@@ -55,9 +57,8 @@ export const getFirstPartyIdentifier = () => {
55
57
  if (issueKey) {
56
58
  return `JiraIssueKey:${issueKey}`;
57
59
  }
58
- } else {
59
- return undefined;
60
60
  }
61
+ return undefined;
61
62
  };
62
63
  export const getObjectName = details => (details === null || details === void 0 ? void 0 : details.data) && 'name' in details.data && details.data.name || undefined;
63
64
  export const getObjectIconUrl = details => {
@@ -109,40 +110,34 @@ export const hasAuthScopeOverrides = details => !!(details !== null && details !
109
110
  // Helper function to extract page ID from standard Confluence page URLs
110
111
  const extractPageIdFromURL = url => {
111
112
  try {
112
- const urlObj = new URL(url);
113
-
114
113
  // Following this pattern for confluence URL -> /wiki/spaces/{space}/pages/{pageId}/{title}
115
- const pagesMatch = urlObj.pathname.match(/\/wiki\/spaces\/[^\/]+\/pages\/(\d+)/);
116
- if (pagesMatch && pagesMatch[1]) {
117
- return pagesMatch[1];
114
+ const pagesMatch = url.match(/(?!pages)(\d+)/);
115
+ if (pagesMatch && pagesMatch[0]) {
116
+ return pagesMatch[0];
118
117
  }
119
118
 
120
119
  // Following this pattern for confluence URL -> /wiki/pages/viewpage.action?pageId={pageId}
121
- const pageIdParam = urlObj.searchParams.get('pageId');
122
- if (pageIdParam) {
123
- return pageIdParam;
120
+ const pageIdParam = url.match(/(?!pageId=)(\d+)/);
121
+ if (pageIdParam && pageIdParam[0]) {
122
+ return pageIdParam[0];
124
123
  }
125
124
 
126
125
  // Following this pattern for confluence URL -> /wiki/display/{space}/{pageId}
127
- const displayMatch = urlObj.pathname.match(/\/wiki\/display\/[^\/]+\/(\d+)/);
128
- if (displayMatch && displayMatch[1]) {
129
- return displayMatch[1];
126
+ const displayMatch = url.match(/(?!display\/)(\d+)/);
127
+ if (displayMatch && displayMatch[0]) {
128
+ return displayMatch[0];
130
129
  }
131
130
  } catch {
132
131
  return undefined;
133
132
  }
134
133
  return undefined;
135
134
  };
136
-
137
- // Helper function to extract content ID from app connector URLs
138
135
  const extractContentIdFromURL = url => {
139
136
  try {
140
- const urlObj = new URL(url);
141
-
142
- // Pattern: ?content.id={contentId} (for app connector URLs)
143
- const contentId = urlObj.searchParams.get('content.id');
144
- if (contentId) {
145
- return contentId;
137
+ const contentId = url.match(/content\.id=(\d+)/);
138
+ if (contentId && contentId[1]) {
139
+ // contentId[1] contains just the number
140
+ return contentId[1];
146
141
  }
147
142
  } catch {
148
143
  return undefined;
@@ -151,31 +146,9 @@ const extractContentIdFromURL = url => {
151
146
  };
152
147
  const extractJiraIssueIdFromURL = url => {
153
148
  try {
154
- const urlObj = new URL(url);
155
-
156
- // Following this pattern for jira URL -> /browse/{issueKey} (most common)
157
- // Example: https://product-fabric.atlassian.net/browse/AI3W-1064
158
- const browseMatch = urlObj.pathname.match(/\/browse\/([A-Z]+-\d+)/);
159
- if (browseMatch && browseMatch[1]) {
160
- return browseMatch[1];
161
- }
162
-
163
- // Following this pattern for jira URL -> /jira/browse/{issueKey} (for some installations)
164
- const jiraBrowseMatch = urlObj.pathname.match(/\/jira\/browse\/([A-Z]+-\d+)/);
165
- if (jiraBrowseMatch && jiraBrowseMatch[1]) {
166
- return jiraBrowseMatch[1];
167
- }
168
-
169
- // Following this pattern for jira URL -> Query parameter ?selectedIssue={issueKey}
170
- const selectedIssue = urlObj.searchParams.get('selectedIssue');
171
- if (selectedIssue && /^[A-Z]+-\d+$/.test(selectedIssue)) {
172
- return selectedIssue;
173
- }
174
-
175
- // Following this pattern for jira URL -> Query parameter ?issueKey={issueKey}
176
- const issueKeyParam = urlObj.searchParams.get('issueKey');
177
- if (issueKeyParam && /^[A-Z]+-\d+$/.test(issueKeyParam)) {
178
- return issueKeyParam;
149
+ const browseMatch = url.match(/[A-Z0-9]+-\d+/);
150
+ if (browseMatch && browseMatch[0]) {
151
+ return browseMatch[0];
179
152
  }
180
153
  } catch {
181
154
  return undefined;
@@ -2,7 +2,7 @@ export const ANALYTICS_CHANNEL = 'media';
2
2
  export const context = {
3
3
  componentName: 'smart-cards',
4
4
  packageName: "@atlaskit/smart-card",
5
- packageVersion: "40.10.3"
5
+ packageVersion: "40.10.5"
6
6
  };
7
7
  export let TrackQuickActionType = /*#__PURE__*/function (TrackQuickActionType) {
8
8
  TrackQuickActionType["StatusUpdate"] = "StatusUpdate";
@@ -1,3 +1,4 @@
1
+ import { fg } from '@atlaskit/platform-feature-flags';
1
2
  import { ElementName, MediaPlacement, SmartLinkPosition, SmartLinkSize } from '../../../../constants';
2
3
  import { extractOwnedBy } from '../../../../extractors/flexible/utils';
3
4
  import { getExtensionKey } from '../../../../state/helpers';
@@ -67,6 +68,26 @@ export const getSimulatedBetterMetadata = cardDetails => {
67
68
  name: ElementName.AppliedToComponentsCount
68
69
  }, ...baseBottomMetaData]
69
70
  };
71
+ case 'passionfruit-object-provider':
72
+ if (fg('passionfruit_ask_smart_links_enabled')) {
73
+ return {
74
+ titleMetadata: defaultTitleMetadata,
75
+ topMetadata: extractOwnedBy(data) ? [{
76
+ name: ElementName.OwnedByGroup
77
+ }, {
78
+ name: ElementName.OwnedBy
79
+ }, ...baseTopMetadata] : defaultTopMetadata,
80
+ bottomMetadata: [{
81
+ name: ElementName.AppliedToComponentsCount
82
+ }, ...baseBottomMetaData]
83
+ };
84
+ } else {
85
+ return {
86
+ titleMetadata: defaultTitleMetadata,
87
+ topMetadata: defaultTopMetadata,
88
+ bottomMetadata: defaultBottomMetadata
89
+ };
90
+ }
70
91
  case 'confluence-object-provider':
71
92
  return {
72
93
  titleMetadata: defaultTitleMetadata,
@@ -95,10 +95,11 @@ function Component({
95
95
  action: 'clicked',
96
96
  actionSubject: 'smartLink',
97
97
  actionSubjectId: 'smartlinkClickAnalyticsWorkflows',
98
- eventType: 'ui',
98
+ eventType: 'screen',
99
99
  attributes: {
100
100
  eventName: 'smartLinkClickAnalyticsThirdPartyWorkflows',
101
- firstPartyIdentifier: firstPartyIdentifier
101
+ firstPartyIdentifier: firstPartyIdentifier,
102
+ clickedAt: Date.now().toString()
102
103
  },
103
104
  nonPrivacySafeAttributes: {
104
105
  thirdPartyARI: thirdPartyARI
@@ -9,7 +9,7 @@ import LinkWarningModal from './LinkWarningModal';
9
9
  import { useLinkWarningModal } from './LinkWarningModal/hooks/use-link-warning-modal';
10
10
  const PACKAGE_DATA = {
11
11
  packageName: "@atlaskit/smart-card",
12
- packageVersion: "40.10.3",
12
+ packageVersion: "40.10.5",
13
13
  componentName: 'linkUrl'
14
14
  };
15
15
  const Anchor = withLinkClickedEvent('a');
@@ -1,7 +1,6 @@
1
1
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
2
  import _regeneratorRuntime from "@babel/runtime/regenerator";
3
- import { extractLink, extractSmartLinkUrl } from '@atlaskit/link-extractors';
4
- import { fg } from '@atlaskit/platform-feature-flags';
3
+ import { extractSmartLinkUrl } from '@atlaskit/link-extractors';
5
4
  import { ActionName, CardAction } from '../../index';
6
5
  import { getDefinitionId, getExtensionKey, getResourceType } from '../../state/helpers';
7
6
  import { canShowAction } from '../../utils/actions/can-show-action';
@@ -13,8 +12,7 @@ export var extractInvokeCopyLinkAction = function extractInvokeCopyLinkAction(_r
13
12
  if (!canShowAction(CardAction.CopyLinkAction, actionOptions)) {
14
13
  return;
15
14
  }
16
- var data = response.data;
17
- var url = fg('smart_links_noun_support') ? extractSmartLinkUrl(response) : extractLink(data);
15
+ var url = extractSmartLinkUrl(response);
18
16
  if (!url) {
19
17
  return;
20
18
  }
@@ -1,13 +1,11 @@
1
1
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
2
  import _regeneratorRuntime from "@babel/runtime/regenerator";
3
3
  import { extractSmartLinkDownloadUrl } from '@atlaskit/link-extractors';
4
- import { fg } from '@atlaskit/platform-feature-flags';
5
4
  import { ActionName, CardAction } from '../../index';
6
5
  import { getDefinitionId, getExtensionKey, getResourceType } from '../../state/helpers';
7
6
  import { downloadUrl as download } from '../../utils';
8
7
  import { canShowAction } from '../../utils/actions/can-show-action';
9
8
  import { getActionsFromJsonLd } from '../common/actions/extractActions';
10
- import { extractDownloadUrl } from '../common/download/extractDownloadUrl';
11
9
  export var extractInvokeDownloadAction = function extractInvokeDownloadAction(_ref) {
12
10
  var actionOptions = _ref.actionOptions,
13
11
  appearance = _ref.appearance,
@@ -21,7 +19,7 @@ export var extractInvokeDownloadAction = function extractInvokeDownloadAction(_r
21
19
  return action['@type'] === 'DownloadAction';
22
20
  });
23
21
  if (downloadActionExists) {
24
- var downloadUrl = fg('smart_links_noun_support') ? extractSmartLinkDownloadUrl(response) : extractDownloadUrl(data);
22
+ var downloadUrl = extractSmartLinkDownloadUrl(response);
25
23
  return {
26
24
  actionFn: function () {
27
25
  var _actionFn = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
@@ -1,7 +1,6 @@
1
1
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
2
  import _regeneratorRuntime from "@babel/runtime/regenerator";
3
- import { extractLink, extractPreview as extractPreviewData, extractProvider, extractSmartLinkEmbed, extractSmartLinkProvider, extractSmartLinkTitle, extractSmartLinkUrl, extractTitle } from '@atlaskit/link-extractors';
4
- import { fg } from '@atlaskit/platform-feature-flags';
3
+ import { extractPreview as extractPreviewData, extractSmartLinkEmbed, extractSmartLinkProvider, extractSmartLinkTitle, extractSmartLinkUrl } from '@atlaskit/link-extractors';
5
4
  import { ActionName, CardAction } from '../../index';
6
5
  import { getExtensionKey } from '../../state/helpers';
7
6
  import { canShowAction } from '../../utils/actions/can-show-action';
@@ -27,12 +26,11 @@ export var extractInvokePreviewAction = function extractInvokePreviewAction(para
27
26
  var meta = response.meta;
28
27
  var src = (_extractPreviewData = extractPreviewData(data, 'web')) === null || _extractPreviewData === void 0 ? void 0 : _extractPreviewData.src;
29
28
  if (src) {
30
- var url = extractLink(data);
31
29
  var extensionKey = getExtensionKey(response);
32
30
  return {
33
31
  actionFn: function () {
34
32
  var _actionFn = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
35
- var _extractSmartLinkProv, _extractProvider, _extractSmartLinkEmbe;
33
+ var _extractSmartLinkProv, _extractSmartLinkEmbe;
36
34
  return _regeneratorRuntime.wrap(function _callee$(_context) {
37
35
  while (1) switch (_context.prev = _context.next) {
38
36
  case 0:
@@ -45,12 +43,12 @@ export var extractInvokePreviewAction = function extractInvokePreviewAction(para
45
43
  isSupportTheming: extractIsSupportTheming(meta),
46
44
  isTrusted: extractIsTrusted(meta),
47
45
  linkIcon: extractLinkIcon(response),
48
- providerName: fg('smart_links_noun_support') ? (_extractSmartLinkProv = extractSmartLinkProvider(response)) === null || _extractSmartLinkProv === void 0 ? void 0 : _extractSmartLinkProv.text : (_extractProvider = extractProvider(data)) === null || _extractProvider === void 0 ? void 0 : _extractProvider.text,
46
+ providerName: (_extractSmartLinkProv = extractSmartLinkProvider(response)) === null || _extractSmartLinkProv === void 0 ? void 0 : _extractSmartLinkProv.text,
49
47
  onClose: onClose,
50
48
  origin: origin,
51
- src: fg('smart_links_noun_support') ? (_extractSmartLinkEmbe = extractSmartLinkEmbed(response)) === null || _extractSmartLinkEmbe === void 0 ? void 0 : _extractSmartLinkEmbe.src : src,
52
- title: fg('smart_links_noun_support') ? extractSmartLinkTitle(response) : extractTitle(data),
53
- url: fg('smart_links_noun_support') ? extractSmartLinkUrl(response) : url
49
+ src: (_extractSmartLinkEmbe = extractSmartLinkEmbed(response)) === null || _extractSmartLinkEmbe === void 0 ? void 0 : _extractSmartLinkEmbe.src,
50
+ title: extractSmartLinkTitle(response),
51
+ url: extractSmartLinkUrl(response)
54
52
  }));
55
53
  case 1:
56
54
  case "end":
@@ -1,6 +1,4 @@
1
1
  import { extractEntity, isEntityPresent } from '@atlaskit/link-extractors';
2
- import { fg } from '@atlaskit/platform-feature-flags';
3
-
4
2
  /**
5
3
  * Return link summary
6
4
  */
@@ -15,11 +13,9 @@ export var extractSummary = function extractSummary(jsonLd) {
15
13
  * Return link summary
16
14
  */
17
15
  export var extractSmartLinkSummary = function extractSmartLinkSummary(response) {
18
- if (fg('smart_links_noun_support')) {
19
- if (isEntityPresent(response)) {
20
- var _extractEntity;
21
- return (_extractEntity = extractEntity(response)) === null || _extractEntity === void 0 ? void 0 : _extractEntity.description;
22
- }
16
+ if (isEntityPresent(response)) {
17
+ var _extractEntity;
18
+ return (_extractEntity = extractEntity(response)) === null || _extractEntity === void 0 ? void 0 : _extractEntity.description;
23
19
  }
24
20
  return (response === null || response === void 0 ? void 0 : response.data) && extractSummary(response.data);
25
21
  };
@@ -1,20 +1,8 @@
1
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
- 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; }
3
- 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) { _defineProperty(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; }
4
- import { extractPreview, extractSmartLinkEmbed, extractSmartLinkTitle, extractSmartLinkUrl, extractType } from '@atlaskit/link-extractors';
5
- import { fg } from '@atlaskit/platform-feature-flags';
1
+ import { extractSmartLinkEmbed, extractSmartLinkTitle, extractSmartLinkUrl, extractType } from '@atlaskit/link-extractors';
6
2
  import { getEmptyJsonLd } from '../../utils/jsonld';
7
3
  import { extractSmartLinkContext } from '../common/context';
8
4
  import { extractIsSupportTheming } from '../common/meta/extractIsSupportTheming';
9
5
  import { extractIsTrusted } from '../common/meta/extractIsTrusted';
10
- var extractEmbedPreview = function extractEmbedPreview(jsonLd, platform, iframeUrlType) {
11
- var preview = extractPreview(jsonLd, platform, iframeUrlType);
12
- if (preview && preview.src) {
13
- return _objectSpread(_objectSpread({}, preview), {}, {
14
- src: preview.src
15
- });
16
- }
17
- };
18
6
  export var extractEmbedProps = function extractEmbedProps(response, platform, iframeUrlType) {
19
7
  var meta = response === null || response === void 0 ? void 0 : response.meta;
20
8
  var jsonLd = (response === null || response === void 0 ? void 0 : response.data) || getEmptyJsonLd();
@@ -22,7 +10,7 @@ export var extractEmbedProps = function extractEmbedProps(response, platform, if
22
10
  link: extractSmartLinkUrl(response) || '',
23
11
  title: extractSmartLinkTitle(response),
24
12
  context: extractSmartLinkContext(response),
25
- preview: fg('smart_links_noun_support') ? extractSmartLinkEmbed(response, iframeUrlType) : extractEmbedPreview(jsonLd, platform, iframeUrlType),
13
+ preview: extractSmartLinkEmbed(response, iframeUrlType),
26
14
  isTrusted: extractIsTrusted(meta),
27
15
  isSupportTheming: extractIsSupportTheming(meta),
28
16
  type: extractType(jsonLd)
@@ -1,11 +1,10 @@
1
- import { extractAri, extractSmartLinkAri } from '@atlaskit/link-extractors';
2
- import { fg } from '@atlaskit/platform-feature-flags';
1
+ import { extractSmartLinkAri } from '@atlaskit/link-extractors';
3
2
  export var extractViewRelatedLinksAction = function extractViewRelatedLinksAction(response) {
4
3
  var _response$meta;
5
4
  if (!(response !== null && response !== void 0 && (_response$meta = response.meta) !== null && _response$meta !== void 0 && (_response$meta = _response$meta.supportedFeature) !== null && _response$meta !== void 0 && _response$meta.includes('RelatedLinks'))) {
6
5
  return;
7
6
  }
8
- var ari = fg('smart_links_noun_support') ? extractSmartLinkAri(response) : extractAri(response.data);
7
+ var ari = extractSmartLinkAri(response);
9
8
  if (!ari) {
10
9
  return;
11
10
  }
@@ -1,5 +1,4 @@
1
- import { extractEntity, extractEntityProvider, extractImage, isEntityPresent } from '@atlaskit/link-extractors';
2
- import { fg } from '@atlaskit/platform-feature-flags';
1
+ import { extractEntity, extractImage, isEntityPresent } from '@atlaskit/link-extractors';
3
2
  import { MediaType } from '../../constants';
4
3
  var extractPreview = function extractPreview(data) {
5
4
  if (!data) {
@@ -24,10 +23,6 @@ export var extractSmartLinkPreviewImage = function extractSmartLinkPreviewImage(
24
23
  var _entity$thumbnail;
25
24
  var entity = extractEntity(response);
26
25
  var url = entity === null || entity === void 0 || (_entity$thumbnail = entity.thumbnail) === null || _entity$thumbnail === void 0 ? void 0 : _entity$thumbnail.externalUrl;
27
- if (!url && !fg('smart_links_noun_support')) {
28
- var provider = extractEntityProvider(response);
29
- url = provider === null || provider === void 0 ? void 0 : provider.image;
30
- }
31
26
  return url ? {
32
27
  type: MediaType.Image,
33
28
  url: url
@@ -43,9 +43,11 @@ export var getFirstPartyIdentifier = function getFirstPartyIdentifier() {
43
43
  var product = getProductFromWindowURL();
44
44
  var currentURL = window.location.href;
45
45
  if (product === 'confluence') {
46
- var contentId = extractContentIdFromURL(currentURL);
47
- if (contentId) {
48
- return "ConfluenceContentId:".concat(contentId);
46
+ if (currentURL.includes('content.id')) {
47
+ var contentId = extractContentIdFromURL(currentURL);
48
+ if (contentId) {
49
+ return "ConfluenceContentId:".concat(contentId);
50
+ }
49
51
  }
50
52
  var pageId = extractPageIdFromURL(currentURL);
51
53
  if (pageId) {
@@ -56,9 +58,8 @@ export var getFirstPartyIdentifier = function getFirstPartyIdentifier() {
56
58
  if (issueKey) {
57
59
  return "JiraIssueKey:".concat(issueKey);
58
60
  }
59
- } else {
60
- return undefined;
61
61
  }
62
+ return undefined;
62
63
  };
63
64
  export var getObjectName = function getObjectName(details) {
64
65
  return (details === null || details === void 0 ? void 0 : details.data) && 'name' in details.data && details.data.name || undefined;
@@ -118,40 +119,34 @@ export var hasAuthScopeOverrides = function hasAuthScopeOverrides(details) {
118
119
  // Helper function to extract page ID from standard Confluence page URLs
119
120
  var extractPageIdFromURL = function extractPageIdFromURL(url) {
120
121
  try {
121
- var urlObj = new URL(url);
122
-
123
122
  // Following this pattern for confluence URL -> /wiki/spaces/{space}/pages/{pageId}/{title}
124
- var pagesMatch = urlObj.pathname.match(/\/wiki\/spaces\/[^\/]+\/pages\/(\d+)/);
125
- if (pagesMatch && pagesMatch[1]) {
126
- return pagesMatch[1];
123
+ var pagesMatch = url.match(/(?!pages)(\d+)/);
124
+ if (pagesMatch && pagesMatch[0]) {
125
+ return pagesMatch[0];
127
126
  }
128
127
 
129
128
  // Following this pattern for confluence URL -> /wiki/pages/viewpage.action?pageId={pageId}
130
- var pageIdParam = urlObj.searchParams.get('pageId');
131
- if (pageIdParam) {
132
- return pageIdParam;
129
+ var pageIdParam = url.match(/(?!pageId=)(\d+)/);
130
+ if (pageIdParam && pageIdParam[0]) {
131
+ return pageIdParam[0];
133
132
  }
134
133
 
135
134
  // Following this pattern for confluence URL -> /wiki/display/{space}/{pageId}
136
- var displayMatch = urlObj.pathname.match(/\/wiki\/display\/[^\/]+\/(\d+)/);
137
- if (displayMatch && displayMatch[1]) {
138
- return displayMatch[1];
135
+ var displayMatch = url.match(/(?!display\/)(\d+)/);
136
+ if (displayMatch && displayMatch[0]) {
137
+ return displayMatch[0];
139
138
  }
140
139
  } catch (_unused) {
141
140
  return undefined;
142
141
  }
143
142
  return undefined;
144
143
  };
145
-
146
- // Helper function to extract content ID from app connector URLs
147
144
  var extractContentIdFromURL = function extractContentIdFromURL(url) {
148
145
  try {
149
- var urlObj = new URL(url);
150
-
151
- // Pattern: ?content.id={contentId} (for app connector URLs)
152
- var contentId = urlObj.searchParams.get('content.id');
153
- if (contentId) {
154
- return contentId;
146
+ var contentId = url.match(/content\.id=(\d+)/);
147
+ if (contentId && contentId[1]) {
148
+ // contentId[1] contains just the number
149
+ return contentId[1];
155
150
  }
156
151
  } catch (_unused2) {
157
152
  return undefined;
@@ -160,31 +155,9 @@ var extractContentIdFromURL = function extractContentIdFromURL(url) {
160
155
  };
161
156
  var extractJiraIssueIdFromURL = function extractJiraIssueIdFromURL(url) {
162
157
  try {
163
- var urlObj = new URL(url);
164
-
165
- // Following this pattern for jira URL -> /browse/{issueKey} (most common)
166
- // Example: https://product-fabric.atlassian.net/browse/AI3W-1064
167
- var browseMatch = urlObj.pathname.match(/\/browse\/([A-Z]+-\d+)/);
168
- if (browseMatch && browseMatch[1]) {
169
- return browseMatch[1];
170
- }
171
-
172
- // Following this pattern for jira URL -> /jira/browse/{issueKey} (for some installations)
173
- var jiraBrowseMatch = urlObj.pathname.match(/\/jira\/browse\/([A-Z]+-\d+)/);
174
- if (jiraBrowseMatch && jiraBrowseMatch[1]) {
175
- return jiraBrowseMatch[1];
176
- }
177
-
178
- // Following this pattern for jira URL -> Query parameter ?selectedIssue={issueKey}
179
- var selectedIssue = urlObj.searchParams.get('selectedIssue');
180
- if (selectedIssue && /^[A-Z]+-\d+$/.test(selectedIssue)) {
181
- return selectedIssue;
182
- }
183
-
184
- // Following this pattern for jira URL -> Query parameter ?issueKey={issueKey}
185
- var issueKeyParam = urlObj.searchParams.get('issueKey');
186
- if (issueKeyParam && /^[A-Z]+-\d+$/.test(issueKeyParam)) {
187
- return issueKeyParam;
158
+ var browseMatch = url.match(/[A-Z0-9]+-\d+/);
159
+ if (browseMatch && browseMatch[0]) {
160
+ return browseMatch[0];
188
161
  }
189
162
  } catch (_unused3) {
190
163
  return undefined;
@@ -4,7 +4,7 @@ export var ANALYTICS_CHANNEL = 'media';
4
4
  export var context = {
5
5
  componentName: 'smart-cards',
6
6
  packageName: "@atlaskit/smart-card",
7
- packageVersion: "40.10.3"
7
+ packageVersion: "40.10.5"
8
8
  };
9
9
  export var TrackQuickActionType = /*#__PURE__*/function (TrackQuickActionType) {
10
10
  TrackQuickActionType["StatusUpdate"] = "StatusUpdate";
@@ -1,3 +1,4 @@
1
+ import { fg } from '@atlaskit/platform-feature-flags';
1
2
  import { ElementName, MediaPlacement, SmartLinkPosition, SmartLinkSize } from '../../../../constants';
2
3
  import { extractOwnedBy } from '../../../../extractors/flexible/utils';
3
4
  import { getExtensionKey } from '../../../../state/helpers';
@@ -67,6 +68,26 @@ export var getSimulatedBetterMetadata = function getSimulatedBetterMetadata(card
67
68
  name: ElementName.AppliedToComponentsCount
68
69
  }].concat(baseBottomMetaData)
69
70
  };
71
+ case 'passionfruit-object-provider':
72
+ if (fg('passionfruit_ask_smart_links_enabled')) {
73
+ return {
74
+ titleMetadata: defaultTitleMetadata,
75
+ topMetadata: extractOwnedBy(data) ? [{
76
+ name: ElementName.OwnedByGroup
77
+ }, {
78
+ name: ElementName.OwnedBy
79
+ }].concat(baseTopMetadata) : defaultTopMetadata,
80
+ bottomMetadata: [{
81
+ name: ElementName.AppliedToComponentsCount
82
+ }].concat(baseBottomMetaData)
83
+ };
84
+ } else {
85
+ return {
86
+ titleMetadata: defaultTitleMetadata,
87
+ topMetadata: defaultTopMetadata,
88
+ bottomMetadata: defaultBottomMetadata
89
+ };
90
+ }
70
91
  case 'confluence-object-provider':
71
92
  return {
72
93
  titleMetadata: defaultTitleMetadata,
@@ -93,10 +93,11 @@ function Component(_ref) {
93
93
  action: 'clicked',
94
94
  actionSubject: 'smartLink',
95
95
  actionSubjectId: 'smartlinkClickAnalyticsWorkflows',
96
- eventType: 'ui',
96
+ eventType: 'screen',
97
97
  attributes: {
98
98
  eventName: 'smartLinkClickAnalyticsThirdPartyWorkflows',
99
- firstPartyIdentifier: firstPartyIdentifier
99
+ firstPartyIdentifier: firstPartyIdentifier,
100
+ clickedAt: Date.now().toString()
100
101
  },
101
102
  nonPrivacySafeAttributes: {
102
103
  thirdPartyARI: thirdPartyARI
@@ -12,7 +12,7 @@ import LinkWarningModal from './LinkWarningModal';
12
12
  import { useLinkWarningModal } from './LinkWarningModal/hooks/use-link-warning-modal';
13
13
  var PACKAGE_DATA = {
14
14
  packageName: "@atlaskit/smart-card",
15
- packageVersion: "40.10.3",
15
+ packageVersion: "40.10.5",
16
16
  componentName: 'linkUrl'
17
17
  };
18
18
  var Anchor = withLinkClickedEvent('a');
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Generates Typescript types for analytics events from analytics.spec.yaml
5
5
  *
6
- * @codegen <<SignedSource::2d9f03b82528803f03b90d6cae5d690d>>
6
+ * @codegen <<SignedSource::8ebf07690deae06cee97fcbba4bb8eb0>>
7
7
  * @codegenCommand yarn workspace @atlassian/analytics-tooling run analytics:codegen smart-card
8
8
  */
9
9
  export type PackageMetaDataContextType = {
@@ -234,6 +234,7 @@ export type SmartLinkClickedSmartlinkClickAnalyticsWorkflowsAttributesType = {
234
234
  thirdPartyARI: string;
235
235
  eventName: string;
236
236
  firstPartyIdentifier: string | null;
237
+ clickedAt: string;
237
238
  };
238
239
  export type AnalyticsEventAttributes = {
239
240
  /**
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Generates Typescript types for analytics events from analytics.spec.yaml
5
5
  *
6
- * @codegen <<SignedSource::2d9f03b82528803f03b90d6cae5d690d>>
6
+ * @codegen <<SignedSource::8ebf07690deae06cee97fcbba4bb8eb0>>
7
7
  * @codegenCommand yarn workspace @atlassian/analytics-tooling run analytics:codegen smart-card
8
8
  */
9
9
  export type PackageMetaDataContextType = {
@@ -234,6 +234,7 @@ export type SmartLinkClickedSmartlinkClickAnalyticsWorkflowsAttributesType = {
234
234
  thirdPartyARI: string;
235
235
  eventName: string;
236
236
  firstPartyIdentifier: string | null;
237
+ clickedAt: string;
237
238
  };
238
239
  export type AnalyticsEventAttributes = {
239
240
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/smart-card",
3
- "version": "40.10.4",
3
+ "version": "40.10.6",
4
4
  "description": "Smart card component",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -31,7 +31,7 @@
31
31
  "@atlaskit/avatar": "^25.1.0",
32
32
  "@atlaskit/avatar-group": "^12.2.0",
33
33
  "@atlaskit/badge": "^18.1.0",
34
- "@atlaskit/button": "^23.3.0",
34
+ "@atlaskit/button": "^23.4.0",
35
35
  "@atlaskit/checkbox": "^17.1.0",
36
36
  "@atlaskit/css": "^0.12.0",
37
37
  "@atlaskit/dropdown-menu": "^16.3.0",
@@ -52,9 +52,9 @@
52
52
  "@atlaskit/link-client-extension": "^5.0.0",
53
53
  "@atlaskit/link-extractors": "^2.4.0",
54
54
  "@atlaskit/link-test-helpers": "^8.3.0",
55
- "@atlaskit/linking-common": "^9.2.0",
55
+ "@atlaskit/linking-common": "^9.3.0",
56
56
  "@atlaskit/linking-types": "^14.0.0",
57
- "@atlaskit/logo": "^19.6.0",
57
+ "@atlaskit/logo": "^19.7.0",
58
58
  "@atlaskit/lozenge": "^13.0.0",
59
59
  "@atlaskit/menu": "^8.3.0",
60
60
  "@atlaskit/modal-dialog": "^14.3.0",
@@ -86,7 +86,7 @@
86
86
  "uuid": "^3.1.0"
87
87
  },
88
88
  "peerDependencies": {
89
- "@atlaskit/link-provider": "^3.4.0",
89
+ "@atlaskit/link-provider": "^3.5.0",
90
90
  "react": "^18.2.0",
91
91
  "react-dom": "^18.2.0",
92
92
  "react-intl-next": "npm:react-intl@^5.18.1"
@@ -190,9 +190,6 @@
190
190
  "platform_smart_links_controlled_dsp_export_view": {
191
191
  "type": "boolean"
192
192
  },
193
- "smart_links_noun_support": {
194
- "type": "boolean"
195
- },
196
193
  "platform-linking-ai-summary-migration-to-convo-ai": {
197
194
  "type": "boolean"
198
195
  },
@@ -235,6 +232,9 @@
235
232
  "platform_smartlink_3pclick_analytics": {
236
233
  "type": "boolean"
237
234
  },
235
+ "passionfruit_ask_smart_links_enabled": {
236
+ "type": "boolean"
237
+ },
238
238
  "ptc-enable-embed-team-smart-links": {
239
239
  "type": "boolean"
240
240
  }