@atlaskit/smart-card 40.19.0 → 40.19.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # @atlaskit/smart-card
2
2
 
3
+ ## 40.19.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [`4f8a989dc9242`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/4f8a989dc9242) -
8
+ Fix regex and tests
9
+ - Updated dependencies
10
+
3
11
  ## 40.19.0
4
12
 
5
13
  ### Minor Changes
@@ -40,6 +40,12 @@ var getThirdPartyARI = exports.getThirdPartyARI = function getThirdPartyARI(deta
40
40
  if (details !== null && details !== void 0 && details.entityData && 'thirdPartyAri' in details.entityData && details.entityData.thirdPartyAri) {
41
41
  return details.entityData.thirdPartyAri;
42
42
  }
43
+ if (details !== null && details !== void 0 && details.data && 'atlassian:ari' in details.data && typeof details.data['atlassian:ari'] === 'string') {
44
+ var ari = details.data['atlassian:ari'];
45
+ if (ari.includes('ari:third-party')) {
46
+ return ari;
47
+ }
48
+ }
43
49
  }
44
50
  return undefined;
45
51
  };
@@ -126,22 +132,24 @@ var hasAuthScopeOverrides = exports.hasAuthScopeOverrides = function hasAuthScop
126
132
  // Helper function to extract page ID from standard Confluence page URLs
127
133
  var extractPageIdFromURL = function extractPageIdFromURL(url) {
128
134
  try {
135
+ var urlObj = new URL(url);
136
+
129
137
  // Following this pattern for confluence URL -> /wiki/spaces/{space}/pages/{pageId}/{title}
130
- var pagesMatch = url.match(/(?!pages)(\d+)/);
131
- if (pagesMatch && pagesMatch[0]) {
132
- return pagesMatch[0];
138
+ var pagesMatch = urlObj.pathname.match(/\/wiki\/spaces\/[^\/]+\/pages\/(\d+)(?:\/|$)/);
139
+ if (pagesMatch && pagesMatch[1]) {
140
+ return pagesMatch[1];
133
141
  }
134
142
 
135
143
  // Following this pattern for confluence URL -> /wiki/pages/viewpage.action?pageId={pageId}
136
- var pageIdParam = url.match(/(?!pageId=)(\d+)/);
137
- if (pageIdParam && pageIdParam[0]) {
138
- return pageIdParam[0];
144
+ var pageIdParam = urlObj.searchParams.get('pageId');
145
+ if (pageIdParam) {
146
+ return pageIdParam;
139
147
  }
140
148
 
141
149
  // Following this pattern for confluence URL -> /wiki/display/{space}/{pageId}
142
- var displayMatch = url.match(/(?!display\/)(\d+)/);
143
- if (displayMatch && displayMatch[0]) {
144
- return displayMatch[0];
150
+ var displayMatch = urlObj.pathname.match(/\/wiki\/display\/[^\/]+\/(\d+)/);
151
+ if (displayMatch && displayMatch[1]) {
152
+ return displayMatch[1];
145
153
  }
146
154
  } catch (_unused) {
147
155
  return undefined;
@@ -150,10 +158,19 @@ var extractPageIdFromURL = function extractPageIdFromURL(url) {
150
158
  };
151
159
  var extractContentIdFromURL = function extractContentIdFromURL(url) {
152
160
  try {
153
- var contentId = url.match(/content\.id=(\d+)/);
154
- if (contentId && contentId[1]) {
155
- // contentId[1] contains just the number
156
- return contentId[1];
161
+ var urlObj = new URL(url);
162
+
163
+ // Pattern: ?content.id={contentId} (for app connector URLs and plugin servlet URLs)
164
+ var contentId = urlObj.searchParams.get('content.id');
165
+ if (contentId) {
166
+ return contentId;
167
+ }
168
+
169
+ // Also support URLs where content.id is in the query string but not parsed by URL (edge case)
170
+ // e.g., /wiki/plugins/servlet/ac/com.atlassian.perspectiveretros/perspective-retros?content.id=5662725850
171
+ var match = url.match(/[?&]content\.id=(\d+)/);
172
+ if (match && match[1]) {
173
+ return match[1];
157
174
  }
158
175
  } catch (_unused2) {
159
176
  return undefined;
@@ -162,9 +179,30 @@ var extractContentIdFromURL = function extractContentIdFromURL(url) {
162
179
  };
163
180
  var extractJiraIssueIdFromURL = function extractJiraIssueIdFromURL(url) {
164
181
  try {
165
- var browseMatch = url.match(/[A-Z0-9]+-\d+/);
166
- if (browseMatch && browseMatch[0]) {
167
- return browseMatch[0];
182
+ var urlObj = new URL(url);
183
+
184
+ // Support any case for Jira keys (e.g., AI3W-864, ai3w-864, Ai3W-864)
185
+ var browseMatch = urlObj.pathname.match(/\/browse\/([A-Za-z0-9]+-\d+)/);
186
+ if (browseMatch && browseMatch[1]) {
187
+ return browseMatch[1];
188
+ }
189
+
190
+ // /jira/browse/{issueKey}
191
+ var jiraBrowseMatch = urlObj.pathname.match(/\/jira\/browse\/([A-Za-z0-9]+-\d+)/);
192
+ if (jiraBrowseMatch && jiraBrowseMatch[1]) {
193
+ return jiraBrowseMatch[1];
194
+ }
195
+
196
+ // Query parameter ?selectedIssue={issueKey}
197
+ var selectedIssue = urlObj.searchParams.get('selectedIssue');
198
+ if (selectedIssue && /^[A-Za-z0-9]+-\d+$/.test(selectedIssue)) {
199
+ return selectedIssue;
200
+ }
201
+
202
+ // Query parameter ?issueKey={issueKey}
203
+ var issueKeyParam = urlObj.searchParams.get('issueKey');
204
+ if (issueKeyParam && /^[A-Za-z0-9]+-\d+$/.test(issueKeyParam)) {
205
+ return issueKeyParam;
168
206
  }
169
207
  } catch (_unused3) {
170
208
  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: "0.0.0-development"
14
+ packageVersion: "40.19.0"
15
15
  };
16
16
  var TrackQuickActionType = exports.TrackQuickActionType = /*#__PURE__*/function (TrackQuickActionType) {
17
17
  TrackQuickActionType["StatusUpdate"] = "StatusUpdate";
@@ -21,7 +21,7 @@ var _excluded = ["href", "children", "checkSafety", "onClick", "testId", "isLink
21
21
  _excluded2 = ["isLinkSafe", "showSafetyWarningModal"];
22
22
  var PACKAGE_DATA = {
23
23
  packageName: "@atlaskit/smart-card",
24
- packageVersion: "0.0.0-development",
24
+ packageVersion: "40.19.0",
25
25
  componentName: 'linkUrl'
26
26
  };
27
27
  var Anchor = (0, _click.withLinkClickedEvent)('a');
@@ -32,6 +32,12 @@ export const getThirdPartyARI = details => {
32
32
  if (details !== null && details !== void 0 && details.entityData && 'thirdPartyAri' in details.entityData && details.entityData.thirdPartyAri) {
33
33
  return details.entityData.thirdPartyAri;
34
34
  }
35
+ if (details !== null && details !== void 0 && details.data && 'atlassian:ari' in details.data && typeof details.data['atlassian:ari'] === 'string') {
36
+ const ari = details.data['atlassian:ari'];
37
+ if (ari.includes('ari:third-party')) {
38
+ return ari;
39
+ }
40
+ }
35
41
  }
36
42
  return undefined;
37
43
  };
@@ -110,22 +116,24 @@ export const hasAuthScopeOverrides = details => !!(details !== null && details !
110
116
  // Helper function to extract page ID from standard Confluence page URLs
111
117
  const extractPageIdFromURL = url => {
112
118
  try {
119
+ const urlObj = new URL(url);
120
+
113
121
  // Following this pattern for confluence URL -> /wiki/spaces/{space}/pages/{pageId}/{title}
114
- const pagesMatch = url.match(/(?!pages)(\d+)/);
115
- if (pagesMatch && pagesMatch[0]) {
116
- return pagesMatch[0];
122
+ const pagesMatch = urlObj.pathname.match(/\/wiki\/spaces\/[^\/]+\/pages\/(\d+)(?:\/|$)/);
123
+ if (pagesMatch && pagesMatch[1]) {
124
+ return pagesMatch[1];
117
125
  }
118
126
 
119
127
  // Following this pattern for confluence URL -> /wiki/pages/viewpage.action?pageId={pageId}
120
- const pageIdParam = url.match(/(?!pageId=)(\d+)/);
121
- if (pageIdParam && pageIdParam[0]) {
122
- return pageIdParam[0];
128
+ const pageIdParam = urlObj.searchParams.get('pageId');
129
+ if (pageIdParam) {
130
+ return pageIdParam;
123
131
  }
124
132
 
125
133
  // Following this pattern for confluence URL -> /wiki/display/{space}/{pageId}
126
- const displayMatch = url.match(/(?!display\/)(\d+)/);
127
- if (displayMatch && displayMatch[0]) {
128
- return displayMatch[0];
134
+ const displayMatch = urlObj.pathname.match(/\/wiki\/display\/[^\/]+\/(\d+)/);
135
+ if (displayMatch && displayMatch[1]) {
136
+ return displayMatch[1];
129
137
  }
130
138
  } catch {
131
139
  return undefined;
@@ -134,10 +142,19 @@ const extractPageIdFromURL = url => {
134
142
  };
135
143
  const extractContentIdFromURL = url => {
136
144
  try {
137
- const contentId = url.match(/content\.id=(\d+)/);
138
- if (contentId && contentId[1]) {
139
- // contentId[1] contains just the number
140
- return contentId[1];
145
+ const urlObj = new URL(url);
146
+
147
+ // Pattern: ?content.id={contentId} (for app connector URLs and plugin servlet URLs)
148
+ const contentId = urlObj.searchParams.get('content.id');
149
+ if (contentId) {
150
+ return contentId;
151
+ }
152
+
153
+ // Also support URLs where content.id is in the query string but not parsed by URL (edge case)
154
+ // e.g., /wiki/plugins/servlet/ac/com.atlassian.perspectiveretros/perspective-retros?content.id=5662725850
155
+ const match = url.match(/[?&]content\.id=(\d+)/);
156
+ if (match && match[1]) {
157
+ return match[1];
141
158
  }
142
159
  } catch {
143
160
  return undefined;
@@ -146,9 +163,30 @@ const extractContentIdFromURL = url => {
146
163
  };
147
164
  const extractJiraIssueIdFromURL = url => {
148
165
  try {
149
- const browseMatch = url.match(/[A-Z0-9]+-\d+/);
150
- if (browseMatch && browseMatch[0]) {
151
- return browseMatch[0];
166
+ const urlObj = new URL(url);
167
+
168
+ // Support any case for Jira keys (e.g., AI3W-864, ai3w-864, Ai3W-864)
169
+ const browseMatch = urlObj.pathname.match(/\/browse\/([A-Za-z0-9]+-\d+)/);
170
+ if (browseMatch && browseMatch[1]) {
171
+ return browseMatch[1];
172
+ }
173
+
174
+ // /jira/browse/{issueKey}
175
+ const jiraBrowseMatch = urlObj.pathname.match(/\/jira\/browse\/([A-Za-z0-9]+-\d+)/);
176
+ if (jiraBrowseMatch && jiraBrowseMatch[1]) {
177
+ return jiraBrowseMatch[1];
178
+ }
179
+
180
+ // Query parameter ?selectedIssue={issueKey}
181
+ const selectedIssue = urlObj.searchParams.get('selectedIssue');
182
+ if (selectedIssue && /^[A-Za-z0-9]+-\d+$/.test(selectedIssue)) {
183
+ return selectedIssue;
184
+ }
185
+
186
+ // Query parameter ?issueKey={issueKey}
187
+ const issueKeyParam = urlObj.searchParams.get('issueKey');
188
+ if (issueKeyParam && /^[A-Za-z0-9]+-\d+$/.test(issueKeyParam)) {
189
+ return issueKeyParam;
152
190
  }
153
191
  } catch {
154
192
  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: "0.0.0-development"
5
+ packageVersion: "40.19.0"
6
6
  };
7
7
  export let TrackQuickActionType = /*#__PURE__*/function (TrackQuickActionType) {
8
8
  TrackQuickActionType["StatusUpdate"] = "StatusUpdate";
@@ -11,7 +11,7 @@ import LinkWarningModal from './LinkWarningModal';
11
11
  import { useLinkWarningModal } from './LinkWarningModal/hooks/use-link-warning-modal';
12
12
  const PACKAGE_DATA = {
13
13
  packageName: "@atlaskit/smart-card",
14
- packageVersion: "0.0.0-development",
14
+ packageVersion: "40.19.0",
15
15
  componentName: 'linkUrl'
16
16
  };
17
17
  const Anchor = withLinkClickedEvent('a');
@@ -33,6 +33,12 @@ export var getThirdPartyARI = function getThirdPartyARI(details) {
33
33
  if (details !== null && details !== void 0 && details.entityData && 'thirdPartyAri' in details.entityData && details.entityData.thirdPartyAri) {
34
34
  return details.entityData.thirdPartyAri;
35
35
  }
36
+ if (details !== null && details !== void 0 && details.data && 'atlassian:ari' in details.data && typeof details.data['atlassian:ari'] === 'string') {
37
+ var ari = details.data['atlassian:ari'];
38
+ if (ari.includes('ari:third-party')) {
39
+ return ari;
40
+ }
41
+ }
36
42
  }
37
43
  return undefined;
38
44
  };
@@ -119,22 +125,24 @@ export var hasAuthScopeOverrides = function hasAuthScopeOverrides(details) {
119
125
  // Helper function to extract page ID from standard Confluence page URLs
120
126
  var extractPageIdFromURL = function extractPageIdFromURL(url) {
121
127
  try {
128
+ var urlObj = new URL(url);
129
+
122
130
  // Following this pattern for confluence URL -> /wiki/spaces/{space}/pages/{pageId}/{title}
123
- var pagesMatch = url.match(/(?!pages)(\d+)/);
124
- if (pagesMatch && pagesMatch[0]) {
125
- return pagesMatch[0];
131
+ var pagesMatch = urlObj.pathname.match(/\/wiki\/spaces\/[^\/]+\/pages\/(\d+)(?:\/|$)/);
132
+ if (pagesMatch && pagesMatch[1]) {
133
+ return pagesMatch[1];
126
134
  }
127
135
 
128
136
  // Following this pattern for confluence URL -> /wiki/pages/viewpage.action?pageId={pageId}
129
- var pageIdParam = url.match(/(?!pageId=)(\d+)/);
130
- if (pageIdParam && pageIdParam[0]) {
131
- return pageIdParam[0];
137
+ var pageIdParam = urlObj.searchParams.get('pageId');
138
+ if (pageIdParam) {
139
+ return pageIdParam;
132
140
  }
133
141
 
134
142
  // Following this pattern for confluence URL -> /wiki/display/{space}/{pageId}
135
- var displayMatch = url.match(/(?!display\/)(\d+)/);
136
- if (displayMatch && displayMatch[0]) {
137
- return displayMatch[0];
143
+ var displayMatch = urlObj.pathname.match(/\/wiki\/display\/[^\/]+\/(\d+)/);
144
+ if (displayMatch && displayMatch[1]) {
145
+ return displayMatch[1];
138
146
  }
139
147
  } catch (_unused) {
140
148
  return undefined;
@@ -143,10 +151,19 @@ var extractPageIdFromURL = function extractPageIdFromURL(url) {
143
151
  };
144
152
  var extractContentIdFromURL = function extractContentIdFromURL(url) {
145
153
  try {
146
- var contentId = url.match(/content\.id=(\d+)/);
147
- if (contentId && contentId[1]) {
148
- // contentId[1] contains just the number
149
- return contentId[1];
154
+ var urlObj = new URL(url);
155
+
156
+ // Pattern: ?content.id={contentId} (for app connector URLs and plugin servlet URLs)
157
+ var contentId = urlObj.searchParams.get('content.id');
158
+ if (contentId) {
159
+ return contentId;
160
+ }
161
+
162
+ // Also support URLs where content.id is in the query string but not parsed by URL (edge case)
163
+ // e.g., /wiki/plugins/servlet/ac/com.atlassian.perspectiveretros/perspective-retros?content.id=5662725850
164
+ var match = url.match(/[?&]content\.id=(\d+)/);
165
+ if (match && match[1]) {
166
+ return match[1];
150
167
  }
151
168
  } catch (_unused2) {
152
169
  return undefined;
@@ -155,9 +172,30 @@ var extractContentIdFromURL = function extractContentIdFromURL(url) {
155
172
  };
156
173
  var extractJiraIssueIdFromURL = function extractJiraIssueIdFromURL(url) {
157
174
  try {
158
- var browseMatch = url.match(/[A-Z0-9]+-\d+/);
159
- if (browseMatch && browseMatch[0]) {
160
- return browseMatch[0];
175
+ var urlObj = new URL(url);
176
+
177
+ // Support any case for Jira keys (e.g., AI3W-864, ai3w-864, Ai3W-864)
178
+ var browseMatch = urlObj.pathname.match(/\/browse\/([A-Za-z0-9]+-\d+)/);
179
+ if (browseMatch && browseMatch[1]) {
180
+ return browseMatch[1];
181
+ }
182
+
183
+ // /jira/browse/{issueKey}
184
+ var jiraBrowseMatch = urlObj.pathname.match(/\/jira\/browse\/([A-Za-z0-9]+-\d+)/);
185
+ if (jiraBrowseMatch && jiraBrowseMatch[1]) {
186
+ return jiraBrowseMatch[1];
187
+ }
188
+
189
+ // Query parameter ?selectedIssue={issueKey}
190
+ var selectedIssue = urlObj.searchParams.get('selectedIssue');
191
+ if (selectedIssue && /^[A-Za-z0-9]+-\d+$/.test(selectedIssue)) {
192
+ return selectedIssue;
193
+ }
194
+
195
+ // Query parameter ?issueKey={issueKey}
196
+ var issueKeyParam = urlObj.searchParams.get('issueKey');
197
+ if (issueKeyParam && /^[A-Za-z0-9]+-\d+$/.test(issueKeyParam)) {
198
+ return issueKeyParam;
161
199
  }
162
200
  } catch (_unused3) {
163
201
  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: "0.0.0-development"
7
+ packageVersion: "40.19.0"
8
8
  };
9
9
  export var TrackQuickActionType = /*#__PURE__*/function (TrackQuickActionType) {
10
10
  TrackQuickActionType["StatusUpdate"] = "StatusUpdate";
@@ -14,7 +14,7 @@ import LinkWarningModal from './LinkWarningModal';
14
14
  import { useLinkWarningModal } from './LinkWarningModal/hooks/use-link-warning-modal';
15
15
  var PACKAGE_DATA = {
16
16
  packageName: "@atlaskit/smart-card",
17
- packageVersion: "0.0.0-development",
17
+ packageVersion: "40.19.0",
18
18
  componentName: 'linkUrl'
19
19
  };
20
20
  var Anchor = withLinkClickedEvent('a');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/smart-card",
3
- "version": "40.19.0",
3
+ "version": "40.19.1",
4
4
  "description": "Smart card component",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -68,7 +68,7 @@
68
68
  "@atlaskit/textarea": "^8.0.0",
69
69
  "@atlaskit/textfield": "^8.0.0",
70
70
  "@atlaskit/theme": "^20.0.0",
71
- "@atlaskit/tmp-editor-statsig": "^12.4.0",
71
+ "@atlaskit/tmp-editor-statsig": "^12.5.0",
72
72
  "@atlaskit/tokens": "^6.2.0",
73
73
  "@atlaskit/tooltip": "^20.4.0",
74
74
  "@atlaskit/ufo": "^0.4.0",