@atlaskit/link-datasource 6.1.12 → 6.2.0

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 (35) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/cjs/hooks/useAssetsClient.js +63 -33
  3. package/dist/cjs/services/cmdbService.js +76 -40
  4. package/dist/cjs/services/getMeta.js +33 -0
  5. package/dist/cjs/types/assets/types.js +5 -0
  6. package/dist/cjs/ui/assets-modal/modal/index.js +2 -2
  7. package/dist/cjs/ui/confluence-search-modal/modal/index.js +2 -2
  8. package/dist/cjs/ui/datasource-table-view/datasourceTableView.js +2 -2
  9. package/dist/cjs/ui/jira-issues-modal/modal/index.js +2 -2
  10. package/dist/es2019/hooks/useAssetsClient.js +22 -3
  11. package/dist/es2019/services/cmdbService.js +16 -0
  12. package/dist/es2019/services/getMeta.js +27 -0
  13. package/dist/es2019/types/assets/types.js +5 -0
  14. package/dist/es2019/ui/assets-modal/modal/index.js +1 -1
  15. package/dist/es2019/ui/confluence-search-modal/modal/index.js +1 -1
  16. package/dist/es2019/ui/datasource-table-view/datasourceTableView.js +1 -1
  17. package/dist/es2019/ui/jira-issues-modal/modal/index.js +1 -1
  18. package/dist/esm/hooks/useAssetsClient.js +64 -34
  19. package/dist/esm/services/cmdbService.js +75 -39
  20. package/dist/esm/services/getMeta.js +27 -0
  21. package/dist/esm/types/assets/types.js +5 -0
  22. package/dist/esm/ui/assets-modal/modal/index.js +1 -1
  23. package/dist/esm/ui/confluence-search-modal/modal/index.js +1 -1
  24. package/dist/esm/ui/datasource-table-view/datasourceTableView.js +1 -1
  25. package/dist/esm/ui/jira-issues-modal/modal/index.js +1 -1
  26. package/dist/types/common/utils/locale/fetch-messages-for-locale.d.ts +1 -1
  27. package/dist/types/services/cmdbService.d.ts +3 -0
  28. package/dist/types/services/getMeta.d.ts +5 -0
  29. package/dist/types/types/assets/types.d.ts +9 -0
  30. package/examples-helpers/buildAssetsIssuesTable.tsx +1 -1
  31. package/examples-helpers/buildConfluenceSearchTable.tsx +1 -1
  32. package/examples-helpers/buildIssueLikeTable.tsx +1 -1
  33. package/examples-helpers/buildIssueLikeTableLoadingError.tsx +1 -1
  34. package/examples-helpers/buildJiraIssuesTable.tsx +1 -1
  35. package/package.json +7 -4
package/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # @atlaskit/link-datasource
2
2
 
3
+ ## 6.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`fea8ee4d97d15`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/fea8ee4d97d15) -
8
+ Assets macro in Confluence now resolves the primary Unit workspace on non-primary sites via an
9
+ in-package unit-aware resolver, behind the astral_units_workspace_host_resolver gate (default
10
+ off). Gate-off and single-site behaviour is unchanged.
11
+
3
12
  ## 6.1.12
4
13
 
5
14
  ### Patch Changes
@@ -9,8 +9,10 @@ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"))
9
9
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
10
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
11
  var _react = require("react");
12
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
12
13
  var _analytics = require("../analytics");
13
14
  var _cmdbService = require("../services/cmdbService");
15
+ var _getMeta2 = require("../services/getMeta");
14
16
  var handleAssetsClientErrors = function handleAssetsClientErrors(errorSetter, error) {
15
17
  if (error instanceof Error) {
16
18
  errorSetter(error);
@@ -19,6 +21,7 @@ var handleAssetsClientErrors = function handleAssetsClientErrors(errorSetter, er
19
21
  }
20
22
  };
21
23
  var useAssetsClient = exports.useAssetsClient = function useAssetsClient(initialParameters) {
24
+ var _getMeta;
22
25
  var _useState = (0, _react.useState)(false),
23
26
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
24
27
  loading = _useState2[0],
@@ -54,6 +57,9 @@ var useAssetsClient = exports.useAssetsClient = function useAssetsClient(initial
54
57
  var _useDatasourceAnalyti = (0, _analytics.useDatasourceAnalyticsEvents)(),
55
58
  fireEvent = _useDatasourceAnalyti.fireEvent;
56
59
 
60
+ // cloudId resolved from <meta name="ajs-cloud-id"> rendered by the host page.
61
+ var cloudId = (_getMeta = (0, _getMeta2.getMeta)('ajs-cloud-id')) !== null && _getMeta !== void 0 ? _getMeta : '';
62
+
57
63
  /*
58
64
  * We wrap this in nested try/catch blocks because we want to handle
59
65
  * workspaceError/existingObjectSchemaError/objectSchemasError differently
@@ -61,67 +67,91 @@ var useAssetsClient = exports.useAssetsClient = function useAssetsClient(initial
61
67
  */
62
68
  (0, _react.useEffect)(function () {
63
69
  (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
64
- var _workspaceId, fetchedObjectSchema, fetchedObjectSchemasResponse, _t, _t2, _t3;
70
+ var _workspaceId, _yield$resolvePrimary, fetchedObjectSchema, fetchedObjectSchemasResponse, _t, _t2, _t3, _t4;
65
71
  return _regenerator.default.wrap(function (_context) {
66
72
  while (1) switch (_context.prev = _context.next) {
67
73
  case 0:
68
74
  setLoading(true);
69
75
  setWorkspaceError(undefined);
70
76
  _context.prev = 1;
71
- _context.next = 2;
77
+ if (!(cloudId && (0, _platformFeatureFlags.fg)('astral_units_workspace_host_resolver'))) {
78
+ _context.next = 7;
79
+ break;
80
+ }
81
+ _context.prev = 2;
82
+ _context.next = 3;
83
+ return (0, _cmdbService.resolvePrimaryWorkspace)(cloudId);
84
+ case 3:
85
+ _yield$resolvePrimary = _context.sent;
86
+ _workspaceId = _yield$resolvePrimary.workspaceId;
87
+ _context.next = 6;
88
+ break;
89
+ case 4:
90
+ _context.prev = 4;
91
+ _t = _context["catch"](2);
92
+ _context.next = 5;
93
+ return (0, _cmdbService.getWorkspaceId)(fireEvent);
94
+ case 5:
95
+ _workspaceId = _context.sent;
96
+ case 6:
97
+ _context.next = 9;
98
+ break;
99
+ case 7:
100
+ _context.next = 8;
72
101
  return (0, _cmdbService.getWorkspaceId)(fireEvent);
73
- case 2:
102
+ case 8:
74
103
  _workspaceId = _context.sent;
104
+ case 9:
75
105
  setWorkspaceId(_workspaceId);
76
106
  // Check schema from initial parameters still exists and fetch name/permissions for schema select
77
107
  if (!(initialParameters !== null && initialParameters !== void 0 && initialParameters.schemaId)) {
78
- _context.next = 6;
108
+ _context.next = 13;
79
109
  break;
80
110
  }
81
- _context.prev = 3;
82
- _context.next = 4;
111
+ _context.prev = 10;
112
+ _context.next = 11;
83
113
  return (0, _cmdbService.fetchObjectSchema)(_workspaceId, initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.schemaId, fireEvent);
84
- case 4:
114
+ case 11:
85
115
  fetchedObjectSchema = _context.sent;
86
116
  setExistingObjectSchema(fetchedObjectSchema);
87
- _context.next = 6;
117
+ _context.next = 13;
88
118
  break;
89
- case 5:
90
- _context.prev = 5;
91
- _t = _context["catch"](3);
92
- handleAssetsClientErrors(setExistingObjectSchemaError, _t);
93
- case 6:
94
- _context.prev = 6;
95
- _context.next = 7;
119
+ case 12:
120
+ _context.prev = 12;
121
+ _t2 = _context["catch"](10);
122
+ handleAssetsClientErrors(setExistingObjectSchemaError, _t2);
123
+ case 13:
124
+ _context.prev = 13;
125
+ _context.next = 14;
96
126
  return (0, _cmdbService.fetchObjectSchemas)(_workspaceId, undefined, fireEvent);
97
- case 7:
127
+ case 14:
98
128
  fetchedObjectSchemasResponse = _context.sent;
99
129
  setObjectSchemas(fetchedObjectSchemasResponse.values);
100
130
  setTotalObjectSchemas(fetchedObjectSchemasResponse.total);
101
- _context.next = 9;
131
+ _context.next = 16;
102
132
  break;
103
- case 8:
104
- _context.prev = 8;
105
- _t2 = _context["catch"](6);
106
- handleAssetsClientErrors(setObjectSchemasError, _t2);
107
- case 9:
108
- _context.next = 11;
133
+ case 15:
134
+ _context.prev = 15;
135
+ _t3 = _context["catch"](13);
136
+ handleAssetsClientErrors(setObjectSchemasError, _t3);
137
+ case 16:
138
+ _context.next = 18;
109
139
  break;
110
- case 10:
111
- _context.prev = 10;
112
- _t3 = _context["catch"](1);
113
- handleAssetsClientErrors(setWorkspaceError, _t3);
114
- case 11:
115
- _context.prev = 11;
140
+ case 17:
141
+ _context.prev = 17;
142
+ _t4 = _context["catch"](1);
143
+ handleAssetsClientErrors(setWorkspaceError, _t4);
144
+ case 18:
145
+ _context.prev = 18;
116
146
  setLoading(false);
117
- return _context.finish(11);
118
- case 12:
147
+ return _context.finish(18);
148
+ case 19:
119
149
  case "end":
120
150
  return _context.stop();
121
151
  }
122
- }, _callee, null, [[1, 10, 11, 12], [3, 5], [6, 8]]);
152
+ }, _callee, null, [[1, 17, 18, 19], [2, 4], [10, 12], [13, 15]]);
123
153
  }))();
124
- }, [initialParameters, fireEvent]);
154
+ }, [initialParameters, fireEvent, cloudId]);
125
155
  return {
126
156
  workspaceId: workspaceId,
127
157
  workspaceError: workspaceError,
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.validateAql = exports.getWorkspaceId = exports.fetchObjectSchemas = exports.fetchObjectSchema = void 0;
7
+ exports.validateAql = exports.resolvePrimaryWorkspace = exports.getWorkspaceId = exports.fetchObjectSchemas = exports.fetchObjectSchema = void 0;
8
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
9
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
10
  var _linkingCommon = require("@atlaskit/linking-common");
@@ -53,26 +53,62 @@ var getWorkspaceId = exports.getWorkspaceId = /*#__PURE__*/function () {
53
53
  return _ref.apply(this, arguments);
54
54
  };
55
55
  }();
56
- var validateAql = exports.validateAql = /*#__PURE__*/function () {
57
- var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(workspaceId, data, fireEvent) {
58
- var url, response, error, _t2;
56
+
57
+ // Resolves the primary Unit workspace via the unit-aware resolver, keyed by the
58
+ // current-site cloudId. Gated at the call-site behind
59
+ // `astral_units_workspace_host_resolver`.
60
+ var resolvePrimaryWorkspace = exports.resolvePrimaryWorkspace = /*#__PURE__*/function () {
61
+ var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(cloudId) {
62
+ var url, res;
59
63
  return _regenerator.default.wrap(function (_context2) {
60
64
  while (1) switch (_context2.prev = _context2.next) {
65
+ case 0:
66
+ url = '/assets/internal/workspace?productContext=confluence';
67
+ _context2.next = 1;
68
+ return (0, _linkingCommon.request)('get', url, undefined, {
69
+ 'x-atlassian-cloud-id': cloudId
70
+ }, [200]);
71
+ case 1:
72
+ res = _context2.sent;
73
+ if (res !== null && res !== void 0 && res.linkedAssetsWorkspaceId) {
74
+ _context2.next = 2;
75
+ break;
76
+ }
77
+ throw new Error('Assets workspace resolver returned no workspaceId');
78
+ case 2:
79
+ return _context2.abrupt("return", {
80
+ workspaceId: res.linkedAssetsWorkspaceId
81
+ });
82
+ case 3:
83
+ case "end":
84
+ return _context2.stop();
85
+ }
86
+ }, _callee2);
87
+ }));
88
+ return function resolvePrimaryWorkspace(_x2) {
89
+ return _ref2.apply(this, arguments);
90
+ };
91
+ }();
92
+ var validateAql = exports.validateAql = /*#__PURE__*/function () {
93
+ var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(workspaceId, data, fireEvent) {
94
+ var url, response, error, _t2;
95
+ return _regenerator.default.wrap(function (_context3) {
96
+ while (1) switch (_context3.prev = _context3.next) {
61
97
  case 0:
62
98
  url = "/gateway/api/jsm/assets/workspace/".concat(workspaceId, "/v1/aql/validate");
63
- _context2.prev = 1;
64
- _context2.next = 2;
99
+ _context3.prev = 1;
100
+ _context3.next = 2;
65
101
  return (0, _linkingCommon.request)('post', url, {
66
102
  qlQuery: data.qlQuery,
67
103
  context: 'SMART_LINKS'
68
104
  }, undefined, [200, 201, 202, 203, 204]);
69
105
  case 2:
70
- response = _context2.sent;
106
+ response = _context3.sent;
71
107
  fireEvent && fireEvent('operational.validateAql.success', {});
72
- return _context2.abrupt("return", response);
108
+ return _context3.abrupt("return", response);
73
109
  case 3:
74
- _context2.prev = 3;
75
- _t2 = _context2["catch"](1);
110
+ _context3.prev = 3;
111
+ _t2 = _context3["catch"](1);
76
112
  error = (0, _cmdbService.mapFetchErrors)(_t2);
77
113
  if (error instanceof _cmdbService.FetchError) {
78
114
  fireEvent && fireEvent('operational.validateAql.failed', {
@@ -85,31 +121,31 @@ var validateAql = exports.validateAql = /*#__PURE__*/function () {
85
121
  throw error;
86
122
  case 4:
87
123
  case "end":
88
- return _context2.stop();
124
+ return _context3.stop();
89
125
  }
90
- }, _callee2, null, [[1, 3]]);
126
+ }, _callee3, null, [[1, 3]]);
91
127
  }));
92
- return function validateAql(_x2, _x3, _x4) {
93
- return _ref2.apply(this, arguments);
128
+ return function validateAql(_x3, _x4, _x5) {
129
+ return _ref3.apply(this, arguments);
94
130
  };
95
131
  }();
96
132
  var fetchObjectSchema = exports.fetchObjectSchema = /*#__PURE__*/function () {
97
- var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(workspaceId, schemaId, fireEvent) {
133
+ var _ref4 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(workspaceId, schemaId, fireEvent) {
98
134
  var url, response, error, _t3;
99
- return _regenerator.default.wrap(function (_context3) {
100
- while (1) switch (_context3.prev = _context3.next) {
135
+ return _regenerator.default.wrap(function (_context4) {
136
+ while (1) switch (_context4.prev = _context4.next) {
101
137
  case 0:
102
138
  url = "/gateway/api/jsm/assets/workspace/".concat(workspaceId, "/v1/objectschema/").concat(schemaId);
103
- _context3.prev = 1;
104
- _context3.next = 2;
139
+ _context4.prev = 1;
140
+ _context4.next = 2;
105
141
  return (0, _linkingCommon.request)('get', url, undefined, undefined, [200, 201, 202, 203, 204]);
106
142
  case 2:
107
- response = _context3.sent;
143
+ response = _context4.sent;
108
144
  fireEvent && fireEvent('operational.objectSchema.success', {});
109
- return _context3.abrupt("return", response);
145
+ return _context4.abrupt("return", response);
110
146
  case 3:
111
- _context3.prev = 3;
112
- _t3 = _context3["catch"](1);
147
+ _context4.prev = 3;
148
+ _t3 = _context4["catch"](1);
113
149
  error = (0, _cmdbService.mapFetchErrors)(_t3);
114
150
  if (error instanceof _cmdbService.FetchError) {
115
151
  fireEvent && fireEvent('operational.objectSchema.failed', {
@@ -122,35 +158,35 @@ var fetchObjectSchema = exports.fetchObjectSchema = /*#__PURE__*/function () {
122
158
  throw error;
123
159
  case 4:
124
160
  case "end":
125
- return _context3.stop();
161
+ return _context4.stop();
126
162
  }
127
- }, _callee3, null, [[1, 3]]);
163
+ }, _callee4, null, [[1, 3]]);
128
164
  }));
129
- return function fetchObjectSchema(_x5, _x6, _x7) {
130
- return _ref3.apply(this, arguments);
165
+ return function fetchObjectSchema(_x6, _x7, _x8) {
166
+ return _ref4.apply(this, arguments);
131
167
  };
132
168
  }();
133
169
  var fetchObjectSchemas = exports.fetchObjectSchemas = /*#__PURE__*/function () {
134
- var _ref4 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(workspaceId, query, fireEvent) {
170
+ var _ref5 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(workspaceId, query, fireEvent) {
135
171
  var queryParams, url, response, error, _t4;
136
- return _regenerator.default.wrap(function (_context4) {
137
- while (1) switch (_context4.prev = _context4.next) {
172
+ return _regenerator.default.wrap(function (_context5) {
173
+ while (1) switch (_context5.prev = _context5.next) {
138
174
  case 0:
139
175
  queryParams = new URLSearchParams();
140
176
  queryParams.set('maxResults', '20');
141
177
  queryParams.set('includeCounts', 'false');
142
178
  query && queryParams.set('query', query);
143
179
  url = "/gateway/api/jsm/assets/workspace/".concat(workspaceId, "/v1/objectschema/list?").concat(queryParams);
144
- _context4.prev = 1;
145
- _context4.next = 2;
180
+ _context5.prev = 1;
181
+ _context5.next = 2;
146
182
  return (0, _linkingCommon.request)('get', url, undefined, undefined, [200, 201, 202, 203, 204]);
147
183
  case 2:
148
- response = _context4.sent;
184
+ response = _context5.sent;
149
185
  fireEvent && fireEvent('operational.objectSchemas.success', {});
150
- return _context4.abrupt("return", response);
186
+ return _context5.abrupt("return", response);
151
187
  case 3:
152
- _context4.prev = 3;
153
- _t4 = _context4["catch"](1);
188
+ _context5.prev = 3;
189
+ _t4 = _context5["catch"](1);
154
190
  error = (0, _cmdbService.mapFetchErrors)(_t4);
155
191
  if (error instanceof _cmdbService.FetchError) {
156
192
  fireEvent && fireEvent('operational.objectSchemas.failed', {
@@ -163,11 +199,11 @@ var fetchObjectSchemas = exports.fetchObjectSchemas = /*#__PURE__*/function () {
163
199
  throw error;
164
200
  case 4:
165
201
  case "end":
166
- return _context4.stop();
202
+ return _context5.stop();
167
203
  }
168
- }, _callee4, null, [[1, 3]]);
204
+ }, _callee5, null, [[1, 3]]);
169
205
  }));
170
- return function fetchObjectSchemas(_x8, _x9, _x0) {
171
- return _ref4.apply(this, arguments);
206
+ return function fetchObjectSchemas(_x9, _x0, _x1) {
207
+ return _ref5.apply(this, arguments);
172
208
  };
173
209
  }();
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getMeta = exports.__clearMetaCacheForTests = void 0;
7
+ /**
8
+ * Read a `<meta name="...">` tag's content from the current document, with
9
+ * per-name caching. Browser-only: returns `undefined` under SSR or when absent.
10
+ */
11
+ var cache = new Map();
12
+ var getMeta = exports.getMeta = function getMeta(name) {
13
+ var _document$querySelect, _document$querySelect2;
14
+ if (typeof document === 'undefined') {
15
+ return undefined;
16
+ }
17
+ if (cache.has(name)) {
18
+ return cache.get(name);
19
+ }
20
+
21
+ // `name` is interpolated into a CSS attribute selector
22
+ var escapedName = typeof CSS !== 'undefined' && CSS.escape ? CSS.escape(name) : name;
23
+ var value = (_document$querySelect = (_document$querySelect2 = document.querySelector("meta[name=\"".concat(escapedName, "\"]"))) === null || _document$querySelect2 === void 0 ? void 0 : _document$querySelect2.getAttribute('content')) !== null && _document$querySelect !== void 0 ? _document$querySelect : undefined;
24
+ cache.set(name, value);
25
+ return value;
26
+ };
27
+
28
+ /**
29
+ * Test-only: clear the cache so each test starts with a clean slate.
30
+ */
31
+ var __clearMetaCacheForTests = exports.__clearMetaCacheForTests = function __clearMetaCacheForTests() {
32
+ cache.clear();
33
+ };
@@ -4,6 +4,11 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.objectSchemaKey = exports.aqlKey = void 0;
7
+ /**
8
+ * Wire shape of the unit-aware `/assets/internal/workspace` resolver response.
9
+ * `linkedAssetsWorkspaceId` is the workspace of the Unit's primary Assets site.
10
+ */
11
+
7
12
  // These are to enforce the field "name" property and keep everything typed
8
13
  var objectSchemaKey = exports.objectSchemaKey = 'objectSchema';
9
14
  var aqlKey = exports.aqlKey = 'aql';
@@ -17,7 +17,7 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/sli
17
17
  var _reactIntl = require("react-intl");
18
18
  var _analyticsNext = require("@atlaskit/analytics-next");
19
19
  var _standardButton = _interopRequireDefault(require("@atlaskit/button/standard-button"));
20
- var _intlMessagesProvider = require("@atlaskit/intl-messages-provider");
20
+ var _main = _interopRequireDefault(require("@atlaskit/intl-messages-provider/main"));
21
21
  var _modalDialog = require("@atlaskit/modal-dialog");
22
22
  var _analytics = require("../../../analytics");
23
23
  var _constants = require("../../../analytics/constants");
@@ -335,7 +335,7 @@ var PlainAssetsConfigModal = function PlainAssetsConfigModal(props) {
335
335
  actions: userInteractions.get()
336
336
  });
337
337
  }, [analyticsPayload, userInteractions]);
338
- return /*#__PURE__*/React.createElement(_intlMessagesProvider.IntlMessagesProvider, {
338
+ return /*#__PURE__*/React.createElement(_main.default, {
339
339
  defaultMessages: _en.default,
340
340
  loaderFn: _fetchMessagesForLocale.fetchMessagesForLocale
341
341
  }, /*#__PURE__*/React.createElement(_modalDialog.ModalTransition, null, /*#__PURE__*/React.createElement(_datasourceModal.DatasourceModal, {
@@ -14,7 +14,7 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
14
14
  var _react = _interopRequireWildcard(require("react"));
15
15
  var _reactIntl = require("react-intl");
16
16
  var _featureGateJsClient = _interopRequireDefault(require("@atlaskit/feature-gate-js-client"));
17
- var _intlMessagesProvider = require("@atlaskit/intl-messages-provider");
17
+ var _main = _interopRequireDefault(require("@atlaskit/intl-messages-provider/main"));
18
18
  var _link = _interopRequireDefault(require("@atlaskit/link"));
19
19
  var _modalDialog = require("@atlaskit/modal-dialog");
20
20
  var _compiled = require("@atlaskit/primitives/compiled");
@@ -334,7 +334,7 @@ var PlainConfluenceSearchConfigModal = exports.PlainConfluenceSearchConfigModal
334
334
  actions: userInteractions.get()
335
335
  };
336
336
  }, [destinationObjectTypes, extensionKey, userInteractions]);
337
- return /*#__PURE__*/_react.default.createElement(_intlMessagesProvider.IntlMessagesProvider, {
337
+ return /*#__PURE__*/_react.default.createElement(_main.default, {
338
338
  defaultMessages: _en.default,
339
339
  loaderFn: _fetchMessagesForLocale.fetchMessagesForLocale
340
340
  }, /*#__PURE__*/_react.default.createElement(_datasourceModal.DatasourceModal, {
@@ -15,7 +15,7 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
15
15
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
16
16
  var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
17
17
  var _analyticsNext = require("@atlaskit/analytics-next");
18
- var _intlMessagesProvider = require("@atlaskit/intl-messages-provider");
18
+ var _main = _interopRequireDefault(require("@atlaskit/intl-messages-provider/main"));
19
19
  var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
20
20
  var _analytics = require("../../analytics");
21
21
  var _constants = require("../../analytics/constants");
@@ -209,7 +209,7 @@ var DatasourceTableViewWithoutAnalytics = function DatasourceTableViewWithoutAna
209
209
  url: url
210
210
  });
211
211
  }
212
- return /*#__PURE__*/React.createElement(_intlMessagesProvider.IntlMessagesProvider, {
212
+ return /*#__PURE__*/React.createElement(_main.default, {
213
213
  defaultMessages: _en.default,
214
214
  loaderFn: _fetchMessagesForLocale.fetchMessagesForLocale
215
215
  }, /*#__PURE__*/React.createElement("div", {
@@ -15,7 +15,7 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/sli
15
15
  var _react = _interopRequireWildcard(require("react"));
16
16
  var _reactIntl = require("react-intl");
17
17
  var _featureGateJsClient = _interopRequireDefault(require("@atlaskit/feature-gate-js-client"));
18
- var _intlMessagesProvider = require("@atlaskit/intl-messages-provider");
18
+ var _main = _interopRequireDefault(require("@atlaskit/intl-messages-provider/main"));
19
19
  var _link = _interopRequireDefault(require("@atlaskit/link"));
20
20
  var _modalDialog = require("@atlaskit/modal-dialog");
21
21
  var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
@@ -382,7 +382,7 @@ var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(props) {
382
382
  var updateParametersJql = (0, _react.useCallback)(function (parameters) {
383
383
  parameters.jql = searchBarJql;
384
384
  }, [searchBarJql]);
385
- return /*#__PURE__*/_react.default.createElement(_intlMessagesProvider.IntlMessagesProvider, {
385
+ return /*#__PURE__*/_react.default.createElement(_main.default, {
386
386
  defaultMessages: _en.default,
387
387
  loaderFn: _fetchMessagesForLocale.fetchMessagesForLocale
388
388
  }, /*#__PURE__*/_react.default.createElement(_modalDialog.ModalTransition, null, /*#__PURE__*/_react.default.createElement(_datasourceModal.DatasourceModal, {
@@ -1,6 +1,8 @@
1
1
  import { useEffect, useState } from 'react';
2
+ import { fg } from '@atlaskit/platform-feature-flags';
2
3
  import { useDatasourceAnalyticsEvents } from '../analytics';
3
- import { fetchObjectSchema, fetchObjectSchemas, getWorkspaceId } from '../services/cmdbService';
4
+ import { fetchObjectSchema, fetchObjectSchemas, getWorkspaceId, resolvePrimaryWorkspace } from '../services/cmdbService';
5
+ import { getMeta } from '../services/getMeta';
4
6
  const handleAssetsClientErrors = (errorSetter, error) => {
5
7
  if (error instanceof Error) {
6
8
  errorSetter(error);
@@ -9,6 +11,7 @@ const handleAssetsClientErrors = (errorSetter, error) => {
9
11
  }
10
12
  };
11
13
  export const useAssetsClient = initialParameters => {
14
+ var _getMeta;
12
15
  const [loading, setLoading] = useState(false);
13
16
  const [workspaceId, setWorkspaceId] = useState();
14
17
  const [workspaceError, setWorkspaceError] = useState();
@@ -21,6 +24,9 @@ export const useAssetsClient = initialParameters => {
21
24
  fireEvent
22
25
  } = useDatasourceAnalyticsEvents();
23
26
 
27
+ // cloudId resolved from <meta name="ajs-cloud-id"> rendered by the host page.
28
+ const cloudId = (_getMeta = getMeta('ajs-cloud-id')) !== null && _getMeta !== void 0 ? _getMeta : '';
29
+
24
30
  /*
25
31
  * We wrap this in nested try/catch blocks because we want to handle
26
32
  * workspaceError/existingObjectSchemaError/objectSchemasError differently
@@ -31,7 +37,20 @@ export const useAssetsClient = initialParameters => {
31
37
  setLoading(true);
32
38
  setWorkspaceError(undefined);
33
39
  try {
34
- const workspaceId = await getWorkspaceId(fireEvent);
40
+ // When the gate is on and a cloudId is present, resolve the primary Unit
41
+ // workspace; on any failure fall back to the legacy current-site lookup.
42
+ let workspaceId;
43
+ if (cloudId && fg('astral_units_workspace_host_resolver')) {
44
+ try {
45
+ ({
46
+ workspaceId
47
+ } = await resolvePrimaryWorkspace(cloudId));
48
+ } catch (resolvePrimaryWorkspaceError) {
49
+ workspaceId = await getWorkspaceId(fireEvent);
50
+ }
51
+ } else {
52
+ workspaceId = await getWorkspaceId(fireEvent);
53
+ }
35
54
  setWorkspaceId(workspaceId);
36
55
  // Check schema from initial parameters still exists and fetch name/permissions for schema select
37
56
  if (initialParameters !== null && initialParameters !== void 0 && initialParameters.schemaId) {
@@ -55,7 +74,7 @@ export const useAssetsClient = initialParameters => {
55
74
  setLoading(false);
56
75
  }
57
76
  })();
58
- }, [initialParameters, fireEvent]);
77
+ }, [initialParameters, fireEvent, cloudId]);
59
78
  return {
60
79
  workspaceId,
61
80
  workspaceError,
@@ -24,6 +24,22 @@ export const getWorkspaceId = async fireEvent => {
24
24
  throw error;
25
25
  }
26
26
  };
27
+
28
+ // Resolves the primary Unit workspace via the unit-aware resolver, keyed by the
29
+ // current-site cloudId. Gated at the call-site behind
30
+ // `astral_units_workspace_host_resolver`.
31
+ export const resolvePrimaryWorkspace = async cloudId => {
32
+ const url = '/assets/internal/workspace?productContext=confluence';
33
+ const res = await request('get', url, undefined, {
34
+ 'x-atlassian-cloud-id': cloudId
35
+ }, [200]);
36
+ if (!(res !== null && res !== void 0 && res.linkedAssetsWorkspaceId)) {
37
+ throw new Error('Assets workspace resolver returned no workspaceId');
38
+ }
39
+ return {
40
+ workspaceId: res.linkedAssetsWorkspaceId
41
+ };
42
+ };
27
43
  export const validateAql = async (workspaceId, data, fireEvent) => {
28
44
  const url = `/gateway/api/jsm/assets/workspace/${workspaceId}/v1/aql/validate`;
29
45
  try {
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Read a `<meta name="...">` tag's content from the current document, with
3
+ * per-name caching. Browser-only: returns `undefined` under SSR or when absent.
4
+ */
5
+ const cache = new Map();
6
+ export const getMeta = name => {
7
+ var _document$querySelect, _document$querySelect2;
8
+ if (typeof document === 'undefined') {
9
+ return undefined;
10
+ }
11
+ if (cache.has(name)) {
12
+ return cache.get(name);
13
+ }
14
+
15
+ // `name` is interpolated into a CSS attribute selector
16
+ const escapedName = typeof CSS !== 'undefined' && CSS.escape ? CSS.escape(name) : name;
17
+ const value = (_document$querySelect = (_document$querySelect2 = document.querySelector(`meta[name="${escapedName}"]`)) === null || _document$querySelect2 === void 0 ? void 0 : _document$querySelect2.getAttribute('content')) !== null && _document$querySelect !== void 0 ? _document$querySelect : undefined;
18
+ cache.set(name, value);
19
+ return value;
20
+ };
21
+
22
+ /**
23
+ * Test-only: clear the cache so each test starts with a clean slate.
24
+ */
25
+ export const __clearMetaCacheForTests = () => {
26
+ cache.clear();
27
+ };
@@ -1,3 +1,8 @@
1
+ /**
2
+ * Wire shape of the unit-aware `/assets/internal/workspace` resolver response.
3
+ * `linkedAssetsWorkspaceId` is the workspace of the Unit's primary Assets site.
4
+ */
5
+
1
6
  // These are to enforce the field "name" property and keep everything typed
2
7
  export const objectSchemaKey = 'objectSchema';
3
8
  export const aqlKey = 'aql';
@@ -7,7 +7,7 @@ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
7
7
  import { FormattedMessage } from 'react-intl';
8
8
  import { withAnalyticsContext } from '@atlaskit/analytics-next';
9
9
  import Button from '@atlaskit/button/standard-button';
10
- import { IntlMessagesProvider } from '@atlaskit/intl-messages-provider';
10
+ import IntlMessagesProvider from '@atlaskit/intl-messages-provider/main';
11
11
  import { ModalBody, ModalFooter, ModalHeader, ModalTitle, ModalTransition } from '@atlaskit/modal-dialog';
12
12
  import { EVENT_CHANNEL, useDatasourceAnalyticsEvents } from '../../../analytics';
13
13
  import { componentMetadata } from '../../../analytics/constants';
@@ -5,7 +5,7 @@ import { ax, ix } from "@compiled/react/runtime";
5
5
  import React, { Fragment, useCallback, useEffect, useMemo, useRef } from 'react';
6
6
  import { FormattedMessage, useIntl } from 'react-intl';
7
7
  import FeatureGates from '@atlaskit/feature-gate-js-client';
8
- import { IntlMessagesProvider } from '@atlaskit/intl-messages-provider';
8
+ import IntlMessagesProvider from '@atlaskit/intl-messages-provider/main';
9
9
  import LinkComponent from '@atlaskit/link';
10
10
  import { CloseButton, ModalBody, ModalFooter, ModalHeader, ModalTitle } from '@atlaskit/modal-dialog';
11
11
  import { Box, Flex } from '@atlaskit/primitives/compiled';
@@ -6,7 +6,7 @@ import { ax, ix } from "@compiled/react/runtime";
6
6
  import { useCallback, useEffect, useRef, useState } from 'react';
7
7
  import isEqual from 'lodash/isEqual';
8
8
  import { withAnalyticsContext } from '@atlaskit/analytics-next';
9
- import { IntlMessagesProvider } from '@atlaskit/intl-messages-provider';
9
+ import IntlMessagesProvider from '@atlaskit/intl-messages-provider/main';
10
10
  import { fg } from '@atlaskit/platform-feature-flags';
11
11
  import { useDatasourceAnalyticsEvents } from '../../analytics';
12
12
  import { componentMetadata } from '../../analytics/constants';
@@ -6,7 +6,7 @@ import { ax, ix } from "@compiled/react/runtime";
6
6
  import React, { Fragment, useCallback, useEffect, useMemo, useRef, useState } from 'react';
7
7
  import { FormattedMessage, useIntl } from 'react-intl';
8
8
  import FeatureGates from '@atlaskit/feature-gate-js-client';
9
- import { IntlMessagesProvider } from '@atlaskit/intl-messages-provider';
9
+ import IntlMessagesProvider from '@atlaskit/intl-messages-provider/main';
10
10
  import LinkComponent from '@atlaskit/link';
11
11
  import { CloseButton, ModalBody, ModalFooter, ModalHeader, ModalTitle, ModalTransition } from '@atlaskit/modal-dialog';
12
12
  import { fg } from '@atlaskit/platform-feature-flags';
@@ -2,8 +2,10 @@ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
2
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
3
  import _regeneratorRuntime from "@babel/runtime/regenerator";
4
4
  import { useEffect, useState } from 'react';
5
+ import { fg } from '@atlaskit/platform-feature-flags';
5
6
  import { useDatasourceAnalyticsEvents } from '../analytics';
6
- import { fetchObjectSchema, fetchObjectSchemas, getWorkspaceId } from '../services/cmdbService';
7
+ import { fetchObjectSchema, fetchObjectSchemas, getWorkspaceId, resolvePrimaryWorkspace } from '../services/cmdbService';
8
+ import { getMeta } from '../services/getMeta';
7
9
  var handleAssetsClientErrors = function handleAssetsClientErrors(errorSetter, error) {
8
10
  if (error instanceof Error) {
9
11
  errorSetter(error);
@@ -12,6 +14,7 @@ var handleAssetsClientErrors = function handleAssetsClientErrors(errorSetter, er
12
14
  }
13
15
  };
14
16
  export var useAssetsClient = function useAssetsClient(initialParameters) {
17
+ var _getMeta;
15
18
  var _useState = useState(false),
16
19
  _useState2 = _slicedToArray(_useState, 2),
17
20
  loading = _useState2[0],
@@ -47,6 +50,9 @@ export var useAssetsClient = function useAssetsClient(initialParameters) {
47
50
  var _useDatasourceAnalyti = useDatasourceAnalyticsEvents(),
48
51
  fireEvent = _useDatasourceAnalyti.fireEvent;
49
52
 
53
+ // cloudId resolved from <meta name="ajs-cloud-id"> rendered by the host page.
54
+ var cloudId = (_getMeta = getMeta('ajs-cloud-id')) !== null && _getMeta !== void 0 ? _getMeta : '';
55
+
50
56
  /*
51
57
  * We wrap this in nested try/catch blocks because we want to handle
52
58
  * workspaceError/existingObjectSchemaError/objectSchemasError differently
@@ -54,67 +60,91 @@ export var useAssetsClient = function useAssetsClient(initialParameters) {
54
60
  */
55
61
  useEffect(function () {
56
62
  _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
57
- var _workspaceId, fetchedObjectSchema, fetchedObjectSchemasResponse, _t, _t2, _t3;
63
+ var _workspaceId, _yield$resolvePrimary, fetchedObjectSchema, fetchedObjectSchemasResponse, _t, _t2, _t3, _t4;
58
64
  return _regeneratorRuntime.wrap(function (_context) {
59
65
  while (1) switch (_context.prev = _context.next) {
60
66
  case 0:
61
67
  setLoading(true);
62
68
  setWorkspaceError(undefined);
63
69
  _context.prev = 1;
64
- _context.next = 2;
70
+ if (!(cloudId && fg('astral_units_workspace_host_resolver'))) {
71
+ _context.next = 7;
72
+ break;
73
+ }
74
+ _context.prev = 2;
75
+ _context.next = 3;
76
+ return resolvePrimaryWorkspace(cloudId);
77
+ case 3:
78
+ _yield$resolvePrimary = _context.sent;
79
+ _workspaceId = _yield$resolvePrimary.workspaceId;
80
+ _context.next = 6;
81
+ break;
82
+ case 4:
83
+ _context.prev = 4;
84
+ _t = _context["catch"](2);
85
+ _context.next = 5;
86
+ return getWorkspaceId(fireEvent);
87
+ case 5:
88
+ _workspaceId = _context.sent;
89
+ case 6:
90
+ _context.next = 9;
91
+ break;
92
+ case 7:
93
+ _context.next = 8;
65
94
  return getWorkspaceId(fireEvent);
66
- case 2:
95
+ case 8:
67
96
  _workspaceId = _context.sent;
97
+ case 9:
68
98
  setWorkspaceId(_workspaceId);
69
99
  // Check schema from initial parameters still exists and fetch name/permissions for schema select
70
100
  if (!(initialParameters !== null && initialParameters !== void 0 && initialParameters.schemaId)) {
71
- _context.next = 6;
101
+ _context.next = 13;
72
102
  break;
73
103
  }
74
- _context.prev = 3;
75
- _context.next = 4;
104
+ _context.prev = 10;
105
+ _context.next = 11;
76
106
  return fetchObjectSchema(_workspaceId, initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.schemaId, fireEvent);
77
- case 4:
107
+ case 11:
78
108
  fetchedObjectSchema = _context.sent;
79
109
  setExistingObjectSchema(fetchedObjectSchema);
80
- _context.next = 6;
110
+ _context.next = 13;
81
111
  break;
82
- case 5:
83
- _context.prev = 5;
84
- _t = _context["catch"](3);
85
- handleAssetsClientErrors(setExistingObjectSchemaError, _t);
86
- case 6:
87
- _context.prev = 6;
88
- _context.next = 7;
112
+ case 12:
113
+ _context.prev = 12;
114
+ _t2 = _context["catch"](10);
115
+ handleAssetsClientErrors(setExistingObjectSchemaError, _t2);
116
+ case 13:
117
+ _context.prev = 13;
118
+ _context.next = 14;
89
119
  return fetchObjectSchemas(_workspaceId, undefined, fireEvent);
90
- case 7:
120
+ case 14:
91
121
  fetchedObjectSchemasResponse = _context.sent;
92
122
  setObjectSchemas(fetchedObjectSchemasResponse.values);
93
123
  setTotalObjectSchemas(fetchedObjectSchemasResponse.total);
94
- _context.next = 9;
124
+ _context.next = 16;
95
125
  break;
96
- case 8:
97
- _context.prev = 8;
98
- _t2 = _context["catch"](6);
99
- handleAssetsClientErrors(setObjectSchemasError, _t2);
100
- case 9:
101
- _context.next = 11;
126
+ case 15:
127
+ _context.prev = 15;
128
+ _t3 = _context["catch"](13);
129
+ handleAssetsClientErrors(setObjectSchemasError, _t3);
130
+ case 16:
131
+ _context.next = 18;
102
132
  break;
103
- case 10:
104
- _context.prev = 10;
105
- _t3 = _context["catch"](1);
106
- handleAssetsClientErrors(setWorkspaceError, _t3);
107
- case 11:
108
- _context.prev = 11;
133
+ case 17:
134
+ _context.prev = 17;
135
+ _t4 = _context["catch"](1);
136
+ handleAssetsClientErrors(setWorkspaceError, _t4);
137
+ case 18:
138
+ _context.prev = 18;
109
139
  setLoading(false);
110
- return _context.finish(11);
111
- case 12:
140
+ return _context.finish(18);
141
+ case 19:
112
142
  case "end":
113
143
  return _context.stop();
114
144
  }
115
- }, _callee, null, [[1, 10, 11, 12], [3, 5], [6, 8]]);
145
+ }, _callee, null, [[1, 17, 18, 19], [2, 4], [10, 12], [13, 15]]);
116
146
  }))();
117
- }, [initialParameters, fireEvent]);
147
+ }, [initialParameters, fireEvent, cloudId]);
118
148
  return {
119
149
  workspaceId: workspaceId,
120
150
  workspaceError: workspaceError,
@@ -46,26 +46,62 @@ export var getWorkspaceId = /*#__PURE__*/function () {
46
46
  return _ref.apply(this, arguments);
47
47
  };
48
48
  }();
49
- export var validateAql = /*#__PURE__*/function () {
50
- var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(workspaceId, data, fireEvent) {
51
- var url, response, error, _t2;
49
+
50
+ // Resolves the primary Unit workspace via the unit-aware resolver, keyed by the
51
+ // current-site cloudId. Gated at the call-site behind
52
+ // `astral_units_workspace_host_resolver`.
53
+ export var resolvePrimaryWorkspace = /*#__PURE__*/function () {
54
+ var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(cloudId) {
55
+ var url, res;
52
56
  return _regeneratorRuntime.wrap(function (_context2) {
53
57
  while (1) switch (_context2.prev = _context2.next) {
58
+ case 0:
59
+ url = '/assets/internal/workspace?productContext=confluence';
60
+ _context2.next = 1;
61
+ return request('get', url, undefined, {
62
+ 'x-atlassian-cloud-id': cloudId
63
+ }, [200]);
64
+ case 1:
65
+ res = _context2.sent;
66
+ if (res !== null && res !== void 0 && res.linkedAssetsWorkspaceId) {
67
+ _context2.next = 2;
68
+ break;
69
+ }
70
+ throw new Error('Assets workspace resolver returned no workspaceId');
71
+ case 2:
72
+ return _context2.abrupt("return", {
73
+ workspaceId: res.linkedAssetsWorkspaceId
74
+ });
75
+ case 3:
76
+ case "end":
77
+ return _context2.stop();
78
+ }
79
+ }, _callee2);
80
+ }));
81
+ return function resolvePrimaryWorkspace(_x2) {
82
+ return _ref2.apply(this, arguments);
83
+ };
84
+ }();
85
+ export var validateAql = /*#__PURE__*/function () {
86
+ var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(workspaceId, data, fireEvent) {
87
+ var url, response, error, _t2;
88
+ return _regeneratorRuntime.wrap(function (_context3) {
89
+ while (1) switch (_context3.prev = _context3.next) {
54
90
  case 0:
55
91
  url = "/gateway/api/jsm/assets/workspace/".concat(workspaceId, "/v1/aql/validate");
56
- _context2.prev = 1;
57
- _context2.next = 2;
92
+ _context3.prev = 1;
93
+ _context3.next = 2;
58
94
  return request('post', url, {
59
95
  qlQuery: data.qlQuery,
60
96
  context: 'SMART_LINKS'
61
97
  }, undefined, [200, 201, 202, 203, 204]);
62
98
  case 2:
63
- response = _context2.sent;
99
+ response = _context3.sent;
64
100
  fireEvent && fireEvent('operational.validateAql.success', {});
65
- return _context2.abrupt("return", response);
101
+ return _context3.abrupt("return", response);
66
102
  case 3:
67
- _context2.prev = 3;
68
- _t2 = _context2["catch"](1);
103
+ _context3.prev = 3;
104
+ _t2 = _context3["catch"](1);
69
105
  error = mapFetchErrors(_t2);
70
106
  if (error instanceof FetchError) {
71
107
  fireEvent && fireEvent('operational.validateAql.failed', {
@@ -78,31 +114,31 @@ export var validateAql = /*#__PURE__*/function () {
78
114
  throw error;
79
115
  case 4:
80
116
  case "end":
81
- return _context2.stop();
117
+ return _context3.stop();
82
118
  }
83
- }, _callee2, null, [[1, 3]]);
119
+ }, _callee3, null, [[1, 3]]);
84
120
  }));
85
- return function validateAql(_x2, _x3, _x4) {
86
- return _ref2.apply(this, arguments);
121
+ return function validateAql(_x3, _x4, _x5) {
122
+ return _ref3.apply(this, arguments);
87
123
  };
88
124
  }();
89
125
  export var fetchObjectSchema = /*#__PURE__*/function () {
90
- var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(workspaceId, schemaId, fireEvent) {
126
+ var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4(workspaceId, schemaId, fireEvent) {
91
127
  var url, response, error, _t3;
92
- return _regeneratorRuntime.wrap(function (_context3) {
93
- while (1) switch (_context3.prev = _context3.next) {
128
+ return _regeneratorRuntime.wrap(function (_context4) {
129
+ while (1) switch (_context4.prev = _context4.next) {
94
130
  case 0:
95
131
  url = "/gateway/api/jsm/assets/workspace/".concat(workspaceId, "/v1/objectschema/").concat(schemaId);
96
- _context3.prev = 1;
97
- _context3.next = 2;
132
+ _context4.prev = 1;
133
+ _context4.next = 2;
98
134
  return request('get', url, undefined, undefined, [200, 201, 202, 203, 204]);
99
135
  case 2:
100
- response = _context3.sent;
136
+ response = _context4.sent;
101
137
  fireEvent && fireEvent('operational.objectSchema.success', {});
102
- return _context3.abrupt("return", response);
138
+ return _context4.abrupt("return", response);
103
139
  case 3:
104
- _context3.prev = 3;
105
- _t3 = _context3["catch"](1);
140
+ _context4.prev = 3;
141
+ _t3 = _context4["catch"](1);
106
142
  error = mapFetchErrors(_t3);
107
143
  if (error instanceof FetchError) {
108
144
  fireEvent && fireEvent('operational.objectSchema.failed', {
@@ -115,35 +151,35 @@ export var fetchObjectSchema = /*#__PURE__*/function () {
115
151
  throw error;
116
152
  case 4:
117
153
  case "end":
118
- return _context3.stop();
154
+ return _context4.stop();
119
155
  }
120
- }, _callee3, null, [[1, 3]]);
156
+ }, _callee4, null, [[1, 3]]);
121
157
  }));
122
- return function fetchObjectSchema(_x5, _x6, _x7) {
123
- return _ref3.apply(this, arguments);
158
+ return function fetchObjectSchema(_x6, _x7, _x8) {
159
+ return _ref4.apply(this, arguments);
124
160
  };
125
161
  }();
126
162
  export var fetchObjectSchemas = /*#__PURE__*/function () {
127
- var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4(workspaceId, query, fireEvent) {
163
+ var _ref5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee5(workspaceId, query, fireEvent) {
128
164
  var queryParams, url, response, error, _t4;
129
- return _regeneratorRuntime.wrap(function (_context4) {
130
- while (1) switch (_context4.prev = _context4.next) {
165
+ return _regeneratorRuntime.wrap(function (_context5) {
166
+ while (1) switch (_context5.prev = _context5.next) {
131
167
  case 0:
132
168
  queryParams = new URLSearchParams();
133
169
  queryParams.set('maxResults', '20');
134
170
  queryParams.set('includeCounts', 'false');
135
171
  query && queryParams.set('query', query);
136
172
  url = "/gateway/api/jsm/assets/workspace/".concat(workspaceId, "/v1/objectschema/list?").concat(queryParams);
137
- _context4.prev = 1;
138
- _context4.next = 2;
173
+ _context5.prev = 1;
174
+ _context5.next = 2;
139
175
  return request('get', url, undefined, undefined, [200, 201, 202, 203, 204]);
140
176
  case 2:
141
- response = _context4.sent;
177
+ response = _context5.sent;
142
178
  fireEvent && fireEvent('operational.objectSchemas.success', {});
143
- return _context4.abrupt("return", response);
179
+ return _context5.abrupt("return", response);
144
180
  case 3:
145
- _context4.prev = 3;
146
- _t4 = _context4["catch"](1);
181
+ _context5.prev = 3;
182
+ _t4 = _context5["catch"](1);
147
183
  error = mapFetchErrors(_t4);
148
184
  if (error instanceof FetchError) {
149
185
  fireEvent && fireEvent('operational.objectSchemas.failed', {
@@ -156,11 +192,11 @@ export var fetchObjectSchemas = /*#__PURE__*/function () {
156
192
  throw error;
157
193
  case 4:
158
194
  case "end":
159
- return _context4.stop();
195
+ return _context5.stop();
160
196
  }
161
- }, _callee4, null, [[1, 3]]);
197
+ }, _callee5, null, [[1, 3]]);
162
198
  }));
163
- return function fetchObjectSchemas(_x8, _x9, _x0) {
164
- return _ref4.apply(this, arguments);
199
+ return function fetchObjectSchemas(_x9, _x0, _x1) {
200
+ return _ref5.apply(this, arguments);
165
201
  };
166
202
  }();
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Read a `<meta name="...">` tag's content from the current document, with
3
+ * per-name caching. Browser-only: returns `undefined` under SSR or when absent.
4
+ */
5
+ var cache = new Map();
6
+ export var getMeta = function getMeta(name) {
7
+ var _document$querySelect, _document$querySelect2;
8
+ if (typeof document === 'undefined') {
9
+ return undefined;
10
+ }
11
+ if (cache.has(name)) {
12
+ return cache.get(name);
13
+ }
14
+
15
+ // `name` is interpolated into a CSS attribute selector
16
+ var escapedName = typeof CSS !== 'undefined' && CSS.escape ? CSS.escape(name) : name;
17
+ var value = (_document$querySelect = (_document$querySelect2 = document.querySelector("meta[name=\"".concat(escapedName, "\"]"))) === null || _document$querySelect2 === void 0 ? void 0 : _document$querySelect2.getAttribute('content')) !== null && _document$querySelect !== void 0 ? _document$querySelect : undefined;
18
+ cache.set(name, value);
19
+ return value;
20
+ };
21
+
22
+ /**
23
+ * Test-only: clear the cache so each test starts with a clean slate.
24
+ */
25
+ export var __clearMetaCacheForTests = function __clearMetaCacheForTests() {
26
+ cache.clear();
27
+ };
@@ -1,3 +1,8 @@
1
+ /**
2
+ * Wire shape of the unit-aware `/assets/internal/workspace` resolver response.
3
+ * `linkedAssetsWorkspaceId` is the workspace of the Unit's primary Assets site.
4
+ */
5
+
1
6
  // These are to enforce the field "name" property and keep everything typed
2
7
  export var objectSchemaKey = 'objectSchema';
3
8
  export var aqlKey = 'aql';
@@ -11,7 +11,7 @@ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
11
11
  import { FormattedMessage } from 'react-intl';
12
12
  import { withAnalyticsContext } from '@atlaskit/analytics-next';
13
13
  import Button from '@atlaskit/button/standard-button';
14
- import { IntlMessagesProvider } from '@atlaskit/intl-messages-provider';
14
+ import IntlMessagesProvider from '@atlaskit/intl-messages-provider/main';
15
15
  import { ModalBody, ModalFooter, ModalHeader, ModalTitle, ModalTransition } from '@atlaskit/modal-dialog';
16
16
  import { EVENT_CHANNEL, useDatasourceAnalyticsEvents } from '../../../analytics';
17
17
  import { componentMetadata } from '../../../analytics/constants';
@@ -8,7 +8,7 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
8
8
  import React, { Fragment, useCallback, useEffect, useMemo, useRef } from 'react';
9
9
  import { FormattedMessage, useIntl } from 'react-intl';
10
10
  import FeatureGates from '@atlaskit/feature-gate-js-client';
11
- import { IntlMessagesProvider } from '@atlaskit/intl-messages-provider';
11
+ import IntlMessagesProvider from '@atlaskit/intl-messages-provider/main';
12
12
  import LinkComponent from '@atlaskit/link';
13
13
  import { CloseButton, ModalBody, ModalFooter, ModalHeader, ModalTitle } from '@atlaskit/modal-dialog';
14
14
  import { Box, Flex } from '@atlaskit/primitives/compiled';
@@ -7,7 +7,7 @@ import { ax, ix } from "@compiled/react/runtime";
7
7
  import { useCallback, useEffect, useRef, useState } from 'react';
8
8
  import isEqual from 'lodash/isEqual';
9
9
  import { withAnalyticsContext } from '@atlaskit/analytics-next';
10
- import { IntlMessagesProvider } from '@atlaskit/intl-messages-provider';
10
+ import IntlMessagesProvider from '@atlaskit/intl-messages-provider/main';
11
11
  import { fg } from '@atlaskit/platform-feature-flags';
12
12
  import { useDatasourceAnalyticsEvents } from '../../analytics';
13
13
  import { componentMetadata } from '../../analytics/constants';
@@ -10,7 +10,7 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
10
10
  import React, { Fragment, useCallback, useEffect, useMemo, useRef, useState } from 'react';
11
11
  import { FormattedMessage, useIntl } from 'react-intl';
12
12
  import FeatureGates from '@atlaskit/feature-gate-js-client';
13
- import { IntlMessagesProvider } from '@atlaskit/intl-messages-provider';
13
+ import IntlMessagesProvider from '@atlaskit/intl-messages-provider/main';
14
14
  import LinkComponent from '@atlaskit/link';
15
15
  import { CloseButton, ModalBody, ModalFooter, ModalHeader, ModalTitle, ModalTransition } from '@atlaskit/modal-dialog';
16
16
  import { fg } from '@atlaskit/platform-feature-flags';
@@ -1,2 +1,2 @@
1
- import { type I18NMessages } from '@atlaskit/intl-messages-provider';
1
+ import type { I18NMessages } from '@atlaskit/intl-messages-provider/types';
2
2
  export declare const fetchMessagesForLocale: (locale: string) => Promise<I18NMessages | undefined>;
@@ -3,6 +3,9 @@ import type createEventPayload from '../analytics/generated/create-event-payload
3
3
  import { type AqlValidateResponse, type FetchObjectSchemasResponse, type ObjectSchema } from '../types/assets/types';
4
4
  type AnalyticsFireEvent = <K extends EventKey>(...params: Parameters<typeof createEventPayload<K>>) => void;
5
5
  export declare const getWorkspaceId: (fireEvent?: AnalyticsFireEvent) => Promise<string>;
6
+ export declare const resolvePrimaryWorkspace: (cloudId: string) => Promise<{
7
+ workspaceId: string;
8
+ }>;
6
9
  export declare const validateAql: (workspaceId: string, data: {
7
10
  qlQuery: string;
8
11
  }, fireEvent?: AnalyticsFireEvent) => Promise<AqlValidateResponse>;
@@ -0,0 +1,5 @@
1
+ export declare const getMeta: (name: string) => string | undefined;
2
+ /**
3
+ * Test-only: clear the cache so each test starts with a clean slate.
4
+ */
5
+ export declare const __clearMetaCacheForTests: () => void;
@@ -5,6 +5,15 @@ export type GetWorkspaceDetailsResponse = {
5
5
  }
6
6
  ];
7
7
  };
8
+ /**
9
+ * Wire shape of the unit-aware `/assets/internal/workspace` resolver response.
10
+ * `linkedAssetsWorkspaceId` is the workspace of the Unit's primary Assets site.
11
+ */
12
+ export type ResolvePrimaryWorkspaceResponse = {
13
+ linkedAssetsSiteCloudId?: string;
14
+ linkedAssetsWorkspaceId?: string;
15
+ siteWithJiraUrl?: string;
16
+ };
8
17
  export type ObjectSchema = {
9
18
  id: string;
10
19
  name: string;
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
 
3
- import { IntlMessagesProvider } from '@atlaskit/intl-messages-provider';
3
+ import IntlMessagesProvider from '@atlaskit/intl-messages-provider/main';
4
4
  import type { DatasourceTableView } from '@atlaskit/link-datasource';
5
5
  import { SmartCardProvider } from '@atlaskit/link-provider';
6
6
  import { type DatasourceParameters } from '@atlaskit/linking-types';
@@ -1,6 +1,6 @@
1
1
  import React, { useEffect, useMemo } from 'react';
2
2
 
3
- import { IntlMessagesProvider } from '@atlaskit/intl-messages-provider';
3
+ import IntlMessagesProvider from '@atlaskit/intl-messages-provider/main';
4
4
  import { SmartCardProvider } from '@atlaskit/link-provider';
5
5
  import { mockDatasourceFetchRequests } from '@atlaskit/link-test-helpers/datasource';
6
6
  import { type DatasourceParameters } from '@atlaskit/linking-types';
@@ -6,7 +6,7 @@ import { useEffect, useMemo } from 'react';
6
6
 
7
7
  import { jsx, styled } from '@compiled/react';
8
8
 
9
- import { IntlMessagesProvider } from '@atlaskit/intl-messages-provider';
9
+ import IntlMessagesProvider from '@atlaskit/intl-messages-provider/main';
10
10
  import { SmartCardProvider } from '@atlaskit/link-provider';
11
11
  import { mockDatasourceFetchRequests } from '@atlaskit/link-test-helpers/datasource';
12
12
  import { Text } from '@atlaskit/primitives/compiled';
@@ -4,7 +4,7 @@
4
4
  */
5
5
  import { jsx, styled } from '@compiled/react';
6
6
 
7
- import { IntlMessagesProvider } from '@atlaskit/intl-messages-provider';
7
+ import IntlMessagesProvider from '@atlaskit/intl-messages-provider/main';
8
8
  import { SmartCardProvider } from '@atlaskit/link-provider';
9
9
  import { token } from '@atlaskit/tokens';
10
10
 
@@ -1,6 +1,6 @@
1
1
  import React, { useMemo } from 'react';
2
2
 
3
- import { IntlMessagesProvider } from '@atlaskit/intl-messages-provider';
3
+ import IntlMessagesProvider from '@atlaskit/intl-messages-provider/main';
4
4
  import { type ProviderProps, SmartCardProvider } from '@atlaskit/link-provider';
5
5
  import { mockDatasourceFetchRequests } from '@atlaskit/link-test-helpers/datasource';
6
6
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/link-datasource",
3
- "version": "6.1.12",
3
+ "version": "6.2.0",
4
4
  "description": "UI Components to support linking platform dataset feature",
5
5
  "author": "Atlassian Pty Ltd",
6
6
  "license": "Apache-2.0",
@@ -55,7 +55,7 @@
55
55
  "@atlaskit/icon": "^37.1.0",
56
56
  "@atlaskit/image": "^4.2.0",
57
57
  "@atlaskit/inline-edit": "^16.2.0",
58
- "@atlaskit/intl-messages-provider": "^4.1.0",
58
+ "@atlaskit/intl-messages-provider": "^4.2.0",
59
59
  "@atlaskit/jql-ast": "^4.0.0",
60
60
  "@atlaskit/jql-editor": "^7.4.0",
61
61
  "@atlaskit/jql-editor-autocomplete-rest": "^4.2.0",
@@ -80,13 +80,13 @@
80
80
  "@atlaskit/react-compiler-gating": "^0.2.0",
81
81
  "@atlaskit/react-select": "^4.5.0",
82
82
  "@atlaskit/select": "^22.5.0",
83
- "@atlaskit/smart-card": "^45.11.0",
83
+ "@atlaskit/smart-card": "^45.12.0",
84
84
  "@atlaskit/smart-user-picker": "^11.1.0",
85
85
  "@atlaskit/spinner": "^20.1.0",
86
86
  "@atlaskit/tag": "^15.4.0",
87
87
  "@atlaskit/textfield": "^9.1.0",
88
88
  "@atlaskit/theme": "^26.1.0",
89
- "@atlaskit/tokens": "^16.2.0",
89
+ "@atlaskit/tokens": "^16.3.0",
90
90
  "@atlaskit/tooltip": "^23.1.0",
91
91
  "@atlaskit/ufo": "^1.0.0",
92
92
  "@atlaskit/visually-hidden": "^4.2.0",
@@ -196,6 +196,9 @@
196
196
  },
197
197
  "navx-5290-sllv-modal-a11y-updates": {
198
198
  "type": "boolean"
199
+ },
200
+ "astral_units_workspace_host_resolver": {
201
+ "type": "boolean"
199
202
  }
200
203
  },
201
204
  "compassUnitTestMetricSourceId": "ari:cloud:compass:a436116f-02ce-4520-8fbb-7301462a1674:metric-source/c5751cc6-3513-4070-9deb-af31e86aed34/9c893299-a527-4457-9b46-f3bc4c828766"