@atlaskit/profilecard 19.5.9 → 19.5.11

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 (47) hide show
  1. package/CHANGELOG.md +120 -108
  2. package/dist/cjs/client/TeamCentralCardClient.js +2 -2
  3. package/dist/cjs/client/UserProfileCardClient.js +1 -1
  4. package/dist/cjs/client/errorUtils.js +67 -14
  5. package/dist/cjs/client/getTeamFromAGG.js +5 -5
  6. package/dist/cjs/client/graphqlUtils.js +106 -36
  7. package/dist/cjs/client/types.js +5 -0
  8. package/dist/cjs/mocks/mock-team-client.js +6 -1
  9. package/dist/cjs/styled/ReportingLines.js +1 -1
  10. package/dist/cjs/styled/TeamCard.js +2 -2
  11. package/dist/cjs/util/analytics.js +1 -1
  12. package/dist/cjs/util/errors.js +114 -0
  13. package/dist/es2019/client/TeamCentralCardClient.js +3 -3
  14. package/dist/es2019/client/UserProfileCardClient.js +2 -2
  15. package/dist/es2019/client/errorUtils.js +63 -12
  16. package/dist/es2019/client/getTeamFromAGG.js +3 -3
  17. package/dist/es2019/client/graphqlUtils.js +28 -26
  18. package/dist/es2019/client/types.js +1 -0
  19. package/dist/es2019/mocks/mock-team-client.js +6 -1
  20. package/dist/es2019/styled/ReportingLines.js +1 -1
  21. package/dist/es2019/styled/TeamCard.js +3 -3
  22. package/dist/es2019/util/analytics.js +1 -1
  23. package/dist/es2019/util/errors.js +59 -0
  24. package/dist/esm/client/TeamCentralCardClient.js +3 -3
  25. package/dist/esm/client/UserProfileCardClient.js +2 -2
  26. package/dist/esm/client/errorUtils.js +63 -12
  27. package/dist/esm/client/getTeamFromAGG.js +6 -6
  28. package/dist/esm/client/graphqlUtils.js +104 -35
  29. package/dist/esm/client/types.js +1 -0
  30. package/dist/esm/mocks/mock-team-client.js +6 -1
  31. package/dist/esm/styled/ReportingLines.js +1 -1
  32. package/dist/esm/styled/TeamCard.js +2 -2
  33. package/dist/esm/util/analytics.js +1 -1
  34. package/dist/esm/util/errors.js +102 -0
  35. package/dist/types/client/errorUtils.d.ts +5 -9
  36. package/dist/types/client/graphqlUtils.d.ts +13 -1
  37. package/dist/types/client/types.d.ts +12 -0
  38. package/dist/types/mocks/mock-team-client.d.ts +1 -0
  39. package/dist/types/util/analytics.d.ts +2 -1
  40. package/dist/types/util/errors.d.ts +43 -0
  41. package/dist/types-ts4.5/client/errorUtils.d.ts +5 -9
  42. package/dist/types-ts4.5/client/graphqlUtils.d.ts +13 -1
  43. package/dist/types-ts4.5/client/types.d.ts +12 -0
  44. package/dist/types-ts4.5/mocks/mock-team-client.d.ts +1 -0
  45. package/dist/types-ts4.5/util/analytics.d.ts +2 -1
  46. package/dist/types-ts4.5/util/errors.d.ts +43 -0
  47. package/package.json +6 -6
@@ -90,7 +90,7 @@ var TeamCentralCardClient = /*#__PURE__*/function (_CachingClient) {
90
90
  case 2:
91
91
  query = buildCheckFeatureFlagQuery(featureKey, context);
92
92
  _context.next = 5;
93
- return (0, _graphqlUtils.graphqlQuery)("".concat(this.options.teamCentralUrl, "?operationName=isFeatureKeyEnabled"), query);
93
+ return (0, _graphqlUtils.directoryGraphqlQuery)("".concat(this.options.teamCentralUrl, "?operationName=isFeatureKeyEnabled"), query);
94
94
  case 5:
95
95
  response = _context.sent;
96
96
  return _context.abrupt("return", response.isFeatureEnabled.enabled);
@@ -121,7 +121,7 @@ var TeamCentralCardClient = /*#__PURE__*/function (_CachingClient) {
121
121
  case 2:
122
122
  query = buildReportingLinesQuery(userId);
123
123
  _context2.next = 5;
124
- return (0, _graphqlUtils.graphqlQuery)("".concat(this.options.teamCentralUrl, "?operationName=ReportingLines"), query);
124
+ return (0, _graphqlUtils.directoryGraphqlQuery)("".concat(this.options.teamCentralUrl, "?operationName=ReportingLines"), query);
125
125
  case 5:
126
126
  response = _context2.sent;
127
127
  return _context2.abrupt("return", response.reportingLines);
@@ -93,7 +93,7 @@ var UserProfileCardClient = /*#__PURE__*/function (_CachingClient) {
93
93
  case 2:
94
94
  query = buildUserQuery(cloudId, userId);
95
95
  _context.next = 5;
96
- return (0, _graphqlUtils.graphqlQuery)(this.options.url, query);
96
+ return (0, _graphqlUtils.directoryGraphqlQuery)(this.options.url, query);
97
97
  case 5:
98
98
  response = _context.sent;
99
99
  return _context.abrupt("return", modifyResponse(response));
@@ -3,24 +3,77 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.getErrorAttributes = void 0;
7
- var IGNORED_ERRORS = [
6
+ exports.handleDirectoryGraphQLErrors = exports.handleAGGErrors = exports.getErrorAttributes = void 0;
7
+ var _errors = require("../util/errors");
8
+ var IGNORED_ERROR_REASONS_DIRECTORY = [
8
9
  // Error categories from pf-directory
9
- 'NotPermitted', 'Gone',
10
- // Error categories from AGG
11
- 'TEAMS_FORBIDDEN', 'TEAMS_TEAM_DELETED'];
10
+ 'NotPermitted', 'Gone'];
11
+ var IGNORE_ERROR_TYPES_AGG = ['IdentityUserNotFoundError', 'TEAMS_FORBIDDEN', 'TEAMS_TEAM_DELETED'];
12
+ var IGNORE_ERROR_CLASSIFICATIONS_AGG = ['Gone'];
12
13
  function isIgnoredError(error) {
13
- return !!error && !!error.reason && IGNORED_ERRORS.includes(error.reason);
14
+ if (!error) {
15
+ return false;
16
+ }
17
+ if (error instanceof _errors.DirectoryGraphQLError) {
18
+ return !!error && IGNORED_ERROR_REASONS_DIRECTORY.includes(error.type);
19
+ } else if (error instanceof _errors.AGGError) {
20
+ return !!error.errorType && IGNORE_ERROR_TYPES_AGG.includes(error.errorType) || !!error.classification && IGNORE_ERROR_CLASSIFICATIONS_AGG.includes(error.classification);
21
+ }
22
+ return false;
14
23
  }
15
24
  var getErrorAttributes = function getErrorAttributes(error) {
16
- var _error$traceId;
25
+ if (error instanceof _errors.DirectoryGraphQLErrors) {
26
+ return {
27
+ errorMessage: error.message,
28
+ errorCount: error.errors.length,
29
+ errorDetails: error.errors.map(getErrorAttributes),
30
+ isSLOFailure: !error.errors.every(isIgnoredError),
31
+ traceId: error.traceId
32
+ };
33
+ } else if (error instanceof _errors.DirectoryGraphQLError) {
34
+ return {
35
+ errorMessage: error.message,
36
+ errorCategory: error.category,
37
+ errorType: error.type,
38
+ errorPath: error.path,
39
+ errorNumber: error.errorNumber,
40
+ isSLOFailure: !isIgnoredError(error)
41
+ };
42
+ } else if (error instanceof _errors.AGGErrors) {
43
+ return {
44
+ errorMessage: error.message,
45
+ errorCount: error.errors.length,
46
+ errorDetails: error.errors.map(getErrorAttributes),
47
+ isSLOFailure: !error.errors.every(isIgnoredError),
48
+ traceId: error.traceId
49
+ };
50
+ } else if (error instanceof _errors.AGGError) {
51
+ return {
52
+ errorMessage: error.message,
53
+ errorType: error.errorType,
54
+ errorStatusCode: error.statusCode,
55
+ isSLOFailure: !isIgnoredError(error),
56
+ errorCategory: error.classification
57
+ };
58
+ } else if (error instanceof Error) {
59
+ return {
60
+ errorMessage: error.message,
61
+ isSLOFailure: true
62
+ };
63
+ }
64
+
65
+ // Unknown
17
66
  return {
18
- errorMessage: error === null || error === void 0 ? void 0 : error.message,
19
- errorStatus: error === null || error === void 0 ? void 0 : error.code,
20
- errorReason: (error === null || error === void 0 ? void 0 : error.reason) || 'default',
21
- errorSource: error === null || error === void 0 ? void 0 : error.source,
22
- isSLOFailure: !isIgnoredError(error),
23
- traceId: (_error$traceId = error === null || error === void 0 ? void 0 : error.traceId) !== null && _error$traceId !== void 0 ? _error$traceId : undefined
67
+ errorMessage: 'Unknown error',
68
+ isSLOFailure: true
24
69
  };
25
70
  };
26
- exports.getErrorAttributes = getErrorAttributes;
71
+ exports.getErrorAttributes = getErrorAttributes;
72
+ var handleDirectoryGraphQLErrors = function handleDirectoryGraphQLErrors(errors, traceId) {
73
+ throw new _errors.DirectoryGraphQLErrors(errors, traceId);
74
+ };
75
+ exports.handleDirectoryGraphQLErrors = handleDirectoryGraphQLErrors;
76
+ var handleAGGErrors = function handleAGGErrors(errors, traceId) {
77
+ throw new _errors.AGGErrors(errors, traceId);
78
+ };
79
+ exports.handleAGGErrors = handleAGGErrors;
@@ -66,7 +66,7 @@ var addHeaders = function addHeaders(headers) {
66
66
  headers.append('X-ExperimentalApi', 'teams-beta');
67
67
  headers.append('X-ExperimentalApi', 'team-members-beta');
68
68
  headers.append('atl-client-name', "@atlaskit/profilecard");
69
- headers.append('atl-client-version', "19.5.9");
69
+ headers.append('atl-client-version', "19.5.11");
70
70
  return headers;
71
71
  };
72
72
  exports.addHeaders = addHeaders;
@@ -75,7 +75,7 @@ function getTeamFromAGG(_x, _x2, _x3) {
75
75
  }
76
76
  function _getTeamFromAGG() {
77
77
  _getTeamFromAGG = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(url, teamId, siteId) {
78
- var query, _yield$graphqlQuery, Team;
78
+ var query, _yield$AGGQuery, Team;
79
79
  return _regenerator.default.wrap(function _callee$(_context) {
80
80
  while (1) switch (_context.prev = _context.next) {
81
81
  case 0:
@@ -84,10 +84,10 @@ function _getTeamFromAGG() {
84
84
  siteId: siteId
85
85
  });
86
86
  _context.next = 3;
87
- return (0, _graphqlUtils.graphqlQuery)(url, query, addHeaders);
87
+ return (0, _graphqlUtils.AGGQuery)(url, query, addHeaders);
88
88
  case 3:
89
- _yield$graphqlQuery = _context.sent;
90
- Team = _yield$graphqlQuery.Team;
89
+ _yield$AGGQuery = _context.sent;
90
+ Team = _yield$AGGQuery.Team;
91
91
  return _context.abrupt("return", convertTeam(Team));
92
92
  case 6:
93
93
  case "end":
@@ -1,9 +1,15 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
6
- exports.graphqlQuery = graphqlQuery;
7
+ exports.AGGQuery = AGGQuery;
8
+ exports.directoryGraphqlQuery = directoryGraphqlQuery;
9
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
10
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
11
+ var _errors = require("../util/errors");
12
+ var _errorUtils = require("./errorUtils");
7
13
  var buildHeaders = function buildHeaders() {
8
14
  var headers = new Headers();
9
15
  headers.append('Content-Type', 'application/json');
@@ -18,39 +24,103 @@ var id = function id(headers) {
18
24
  * @param {Query} query - GraphQL query
19
25
  * @param {HeaderProcessor} processHeaders - a function to add extra headers to the request
20
26
  */
21
- function graphqlQuery(serviceUrl, query) {
22
- var processHeaders = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : id;
23
- var headers = processHeaders(buildHeaders());
24
- return fetch(new Request(serviceUrl, {
25
- method: 'POST',
26
- credentials: 'include',
27
- mode: 'cors',
28
- headers: headers,
29
- body: JSON.stringify(query)
30
- })).then(function (response) {
31
- if (!response.ok) {
32
- var _response$headers;
33
- var traceIdFromHeaders = response === null || response === void 0 ? void 0 : (_response$headers = response.headers) === null || _response$headers === void 0 ? void 0 : _response$headers.get('atl-traceid');
34
- return Promise.reject({
35
- code: response.status,
36
- reason: response.statusText,
37
- traceId: traceIdFromHeaders
38
- });
39
- }
40
- return response;
41
- }).then(function (response) {
42
- return response.json();
43
- }).then(function (json) {
44
- if (json.errors) {
45
- var _json$errors$, _json$errors$2, _json$errors$2$extens, _json$errors$3, _json$errors$3$extens, _json$errors$4, _json$errors$4$extens, _json$extensions, _json$extensions$gate;
46
- return Promise.reject({
47
- reason: ((_json$errors$ = json.errors[0]) === null || _json$errors$ === void 0 ? void 0 : _json$errors$.category) || ((_json$errors$2 = json.errors[0]) === null || _json$errors$2 === void 0 ? void 0 : (_json$errors$2$extens = _json$errors$2.extensions) === null || _json$errors$2$extens === void 0 ? void 0 : _json$errors$2$extens.classification) || 'default',
48
- code: (_json$errors$3 = json.errors[0]) === null || _json$errors$3 === void 0 ? void 0 : (_json$errors$3$extens = _json$errors$3.extensions) === null || _json$errors$3$extens === void 0 ? void 0 : _json$errors$3$extens.statusCode,
49
- source: (_json$errors$4 = json.errors[0]) === null || _json$errors$4 === void 0 ? void 0 : (_json$errors$4$extens = _json$errors$4.extensions) === null || _json$errors$4$extens === void 0 ? void 0 : _json$errors$4$extens.errorSource,
50
- message: json.errors[0].message,
51
- traceId: (_json$extensions = json.extensions) === null || _json$extensions === void 0 ? void 0 : (_json$extensions$gate = _json$extensions.gateway) === null || _json$extensions$gate === void 0 ? void 0 : _json$extensions$gate.request_id
52
- });
53
- }
54
- return json.data;
55
- });
27
+ function directoryGraphqlQuery(_x, _x2) {
28
+ return _directoryGraphqlQuery.apply(this, arguments);
29
+ }
30
+ /**
31
+ * @param {string} serviceUrl - GraphQL service endpoint
32
+ * @param {Query} query - GraphQL query
33
+ * @param {HeaderProcessor} processHeaders - a function to add extra headers to the request
34
+ */
35
+ function _directoryGraphqlQuery() {
36
+ _directoryGraphqlQuery = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(serviceUrl, query) {
37
+ var processHeaders,
38
+ _args = arguments;
39
+ return _regenerator.default.wrap(function _callee$(_context) {
40
+ while (1) switch (_context.prev = _context.next) {
41
+ case 0:
42
+ processHeaders = _args.length > 2 && _args[2] !== undefined ? _args[2] : id;
43
+ return _context.abrupt("return", graphQLQuery(serviceUrl, query, processHeaders, _errorUtils.handleDirectoryGraphQLErrors));
44
+ case 2:
45
+ case "end":
46
+ return _context.stop();
47
+ }
48
+ }, _callee);
49
+ }));
50
+ return _directoryGraphqlQuery.apply(this, arguments);
51
+ }
52
+ function AGGQuery(_x3, _x4) {
53
+ return _AGGQuery.apply(this, arguments);
54
+ }
55
+ function _AGGQuery() {
56
+ _AGGQuery = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(serviceUrl, query) {
57
+ var processHeaders,
58
+ _args2 = arguments;
59
+ return _regenerator.default.wrap(function _callee2$(_context2) {
60
+ while (1) switch (_context2.prev = _context2.next) {
61
+ case 0:
62
+ processHeaders = _args2.length > 2 && _args2[2] !== undefined ? _args2[2] : id;
63
+ return _context2.abrupt("return", graphQLQuery(serviceUrl, query, processHeaders, _errorUtils.handleAGGErrors));
64
+ case 2:
65
+ case "end":
66
+ return _context2.stop();
67
+ }
68
+ }, _callee2);
69
+ }));
70
+ return _AGGQuery.apply(this, arguments);
71
+ }
72
+ function graphQLQuery(_x5, _x6) {
73
+ return _graphQLQuery.apply(this, arguments);
74
+ }
75
+ function _graphQLQuery() {
76
+ _graphQLQuery = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(serviceUrl, query) {
77
+ var _response$headers;
78
+ var processHeaders,
79
+ handleErrors,
80
+ headers,
81
+ response,
82
+ traceIdFromHeaders,
83
+ json,
84
+ _json$extensions$gate,
85
+ _json$extensions,
86
+ _json$extensions$gate2,
87
+ _args3 = arguments;
88
+ return _regenerator.default.wrap(function _callee3$(_context3) {
89
+ while (1) switch (_context3.prev = _context3.next) {
90
+ case 0:
91
+ processHeaders = _args3.length > 2 && _args3[2] !== undefined ? _args3[2] : id;
92
+ handleErrors = _args3.length > 3 ? _args3[3] : undefined;
93
+ headers = processHeaders(buildHeaders());
94
+ _context3.next = 5;
95
+ return fetch(new Request(serviceUrl, {
96
+ method: 'POST',
97
+ credentials: 'include',
98
+ mode: 'cors',
99
+ headers: headers,
100
+ body: JSON.stringify(query)
101
+ }));
102
+ case 5:
103
+ response = _context3.sent;
104
+ traceIdFromHeaders = response === null || response === void 0 ? void 0 : (_response$headers = response.headers) === null || _response$headers === void 0 ? void 0 : _response$headers.get('atl-traceid');
105
+ if (response.ok) {
106
+ _context3.next = 9;
107
+ break;
108
+ }
109
+ throw new _errors.HttpError(response.status, response.statusText, traceIdFromHeaders);
110
+ case 9:
111
+ _context3.next = 11;
112
+ return response.json();
113
+ case 11:
114
+ json = _context3.sent;
115
+ if (json.errors) {
116
+ handleErrors(json.errors, (_json$extensions$gate = (_json$extensions = json.extensions) === null || _json$extensions === void 0 ? void 0 : (_json$extensions$gate2 = _json$extensions.gateway) === null || _json$extensions$gate2 === void 0 ? void 0 : _json$extensions$gate2.request_id) !== null && _json$extensions$gate !== void 0 ? _json$extensions$gate : traceIdFromHeaders);
117
+ }
118
+ return _context3.abrupt("return", json.data);
119
+ case 14:
120
+ case "end":
121
+ return _context3.stop();
122
+ }
123
+ }, _callee3);
124
+ }));
125
+ return _graphQLQuery.apply(this, arguments);
56
126
  }
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -10,6 +10,7 @@ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/creat
10
10
  var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
11
11
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
12
12
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
13
+ var _errorUtils = require("../client/errorUtils");
13
14
  var _TeamProfileCardClient = _interopRequireDefault(require("../client/TeamProfileCardClient"));
14
15
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
15
16
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
@@ -34,7 +35,11 @@ function getMockTeamClient(data) {
34
35
  };
35
36
  if (!data.timeout) {
36
37
  if (data.error && Math.random() < data.errorRate) {
37
- return Promise.reject(errorResponse);
38
+ try {
39
+ (0, _errorUtils.handleAGGErrors)(data.error, data.traceId);
40
+ } catch (e) {
41
+ return Promise.reject(e);
42
+ }
38
43
  }
39
44
  return Promise.resolve(data.team);
40
45
  }
@@ -18,5 +18,5 @@ var ManagerSection = _styled.default.div(_templateObject3 || (_templateObject3 =
18
18
  exports.ManagerSection = ManagerSection;
19
19
  var ManagerName = _styled.default.span(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2.default)(["\n font-size: ", "px;\n margin-left: ", ";\n"])), (0, _constants.gridSize)() * 1.5, "var(--ds-space-100, 8px)");
20
20
  exports.ManagerName = ManagerName;
21
- var OffsetWrapper = _styled.default.div(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2.default)(["\n margin-top: ", ";\n // Offset left margin so the avatar aligns with the heading\n margin-left: calc(-1 * ", ");\n"])), "var(--ds-space-050, 4px)", "var(--ds-space-050, 4px)");
21
+ var OffsetWrapper = _styled.default.div(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2.default)(["\n margin-top: ", ";\n // Offset left margin so the avatar aligns with the heading\n margin-left: ", ";\n"])), "var(--ds-space-050, 4px)", "var(--ds-space-negative-050, -4px)");
22
22
  exports.OffsetWrapper = OffsetWrapper;
@@ -30,13 +30,13 @@ var TeamName = _styled.default.h6(_templateObject6 || (_templateObject6 = (0, _t
30
30
  exports.TeamName = TeamName;
31
31
  var MemberCount = _styled.default.div(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2.default)(["\n color: ", ";\n margin-top: ", ";\n"])), "var(--ds-text-subtlest, ".concat(_colors.N200, ")"), "var(--ds-space-050, 4px)");
32
32
  exports.MemberCount = MemberCount;
33
- var AvatarSection = _styled.default.div(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2.default)(["\n margin-top: ", ";\n margin-left: calc(-1 * ", ");\n"])), "var(--ds-space-200, 16px)", "var(--ds-space-025, 2px)");
33
+ var AvatarSection = _styled.default.div(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2.default)(["\n margin-top: ", ";\n margin-left: ", ";\n"])), "var(--ds-space-200, 16px)", "var(--ds-space-negative-025, -2px)");
34
34
  exports.AvatarSection = AvatarSection;
35
35
  var DescriptionWrapper = _styled.default.div(_templateObject9 || (_templateObject9 = (0, _taggedTemplateLiteral2.default)(["\n margin-top: ", ";\n align-items: center;\n display: flex;\n"])), "var(--ds-space-200, 16px)");
36
36
  exports.DescriptionWrapper = DescriptionWrapper;
37
37
  var Description = _styled.default.span(_templateObject10 || (_templateObject10 = (0, _taggedTemplateLiteral2.default)(["\n overflow: hidden;\n max-height: 60px;\n display: -webkit-box;\n -webkit-line-clamp: 3;\n -webkit-box-orient: vertical;\n"])));
38
38
  exports.Description = Description;
39
- var ActionButtons = _styled.default.div(_templateObject11 || (_templateObject11 = (0, _taggedTemplateLiteral2.default)(["\n width: calc(100% + 8px);\n display: flex;\n justify-content: space-between;\n margin: ", " calc(-1 * ", ")\n 0 calc(-1 * ", ");\n background-color: ", ";\n"])), "var(--ds-space-300, 24px)", "var(--ds-space-300, 24px)", "var(--ds-space-100, 8px)", "var(--ds-surface-overlay, hsla(0, 100%, 100%, 0.2))");
39
+ var ActionButtons = _styled.default.div(_templateObject11 || (_templateObject11 = (0, _taggedTemplateLiteral2.default)(["\n width: calc(100% + 8px);\n display: flex;\n justify-content: space-between;\n margin: ", " ", "\n 0 ", ";\n background-color: ", ";\n"])), "var(--ds-space-300, 24px)", "var(--ds-space-negative-300, -24px)", "var(--ds-space-negative-100, -8px)", "var(--ds-surface-overlay, hsla(0, 100%, 100%, 0.2))");
40
40
  exports.ActionButtons = ActionButtons;
41
41
  var WrappedButton = _styled.default.div(_templateObject12 || (_templateObject12 = (0, _taggedTemplateLiteral2.default)(["\n flex-basis: 0;\n flex-grow: 1;\n margin-left: ", ";\n"])), "var(--ds-space-100, 8px)");
42
42
  exports.WrappedButton = WrappedButton;
@@ -44,7 +44,7 @@ var createEvent = function createEvent(eventType, action, actionSubject, actionS
44
44
  actionSubjectId: actionSubjectId,
45
45
  attributes: _objectSpread(_objectSpread({
46
46
  packageName: "@atlaskit/profilecard",
47
- packageVersion: "19.5.9"
47
+ packageVersion: "19.5.11"
48
48
  }, attributes), {}, {
49
49
  firedAt: Math.round((0, _performance.getPageTime)())
50
50
  })
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.HttpError = exports.DirectoryGraphQLErrors = exports.DirectoryGraphQLError = exports.AGGErrors = exports.AGGError = void 0;
8
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
9
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
10
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
12
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
13
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
14
+ var _wrapNativeSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/wrapNativeSuper"));
15
+ var _excluded = ["errorNumber"],
16
+ _excluded2 = ["statusCode", "errorType", "classification"];
17
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
18
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
19
+ var HttpError = /*#__PURE__*/function (_Error) {
20
+ (0, _inherits2.default)(HttpError, _Error);
21
+ var _super = _createSuper(HttpError);
22
+ function HttpError(code, reason, traceId) {
23
+ var _this;
24
+ (0, _classCallCheck2.default)(this, HttpError);
25
+ _this = _super.call(this, reason);
26
+ _this.code = code;
27
+ _this.traceId = traceId;
28
+ return _this;
29
+ }
30
+ return (0, _createClass2.default)(HttpError);
31
+ }( /*#__PURE__*/(0, _wrapNativeSuper2.default)(Error));
32
+ exports.HttpError = HttpError;
33
+ var DirectoryGraphQLError = /*#__PURE__*/function (_Error2) {
34
+ (0, _inherits2.default)(DirectoryGraphQLError, _Error2);
35
+ var _super2 = _createSuper(DirectoryGraphQLError);
36
+ function DirectoryGraphQLError(message, category, type, extensions) {
37
+ var _this2;
38
+ var path = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : [];
39
+ (0, _classCallCheck2.default)(this, DirectoryGraphQLError);
40
+ _this2 = _super2.call(this, message);
41
+ _this2.category = category;
42
+ _this2.type = type;
43
+ _this2.path = path.join('.');
44
+ var errorNumber = extensions.errorNumber,
45
+ unknownExtension = (0, _objectWithoutProperties2.default)(extensions, _excluded);
46
+ _this2.errorNumber = extensions.errorNumber;
47
+ _this2.extensions = unknownExtension;
48
+ return _this2;
49
+ }
50
+ return (0, _createClass2.default)(DirectoryGraphQLError);
51
+ }( /*#__PURE__*/(0, _wrapNativeSuper2.default)(Error));
52
+ exports.DirectoryGraphQLError = DirectoryGraphQLError;
53
+ var DirectoryGraphQLErrors = /*#__PURE__*/function (_Error3) {
54
+ (0, _inherits2.default)(DirectoryGraphQLErrors, _Error3);
55
+ var _super3 = _createSuper(DirectoryGraphQLErrors);
56
+ function DirectoryGraphQLErrors(errors, traceId) {
57
+ var _this3;
58
+ (0, _classCallCheck2.default)(this, DirectoryGraphQLErrors);
59
+ _this3 = _super3.call(this, 'DirectoryGraphQLErrors');
60
+ _this3.traceId = traceId;
61
+ if (Array.isArray(errors)) {
62
+ _this3.errors = errors.map(function (error) {
63
+ return new DirectoryGraphQLError(error.message, error.category, error.type, error.extensions, error.path);
64
+ });
65
+ } else {
66
+ _this3.errors = [];
67
+ }
68
+ return _this3;
69
+ }
70
+ return (0, _createClass2.default)(DirectoryGraphQLErrors);
71
+ }( /*#__PURE__*/(0, _wrapNativeSuper2.default)(Error));
72
+ exports.DirectoryGraphQLErrors = DirectoryGraphQLErrors;
73
+ var AGGError = /*#__PURE__*/function (_Error4) {
74
+ (0, _inherits2.default)(AGGError, _Error4);
75
+ var _super4 = _createSuper(AGGError);
76
+ function AGGError(message, extensions) {
77
+ var _this4;
78
+ var path = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
79
+ (0, _classCallCheck2.default)(this, AGGError);
80
+ _this4 = _super4.call(this, message);
81
+ _this4.path = path === null || path === void 0 ? void 0 : path.join('.');
82
+ var statusCode = extensions.statusCode,
83
+ errorType = extensions.errorType,
84
+ classification = extensions.classification,
85
+ unknownExtension = (0, _objectWithoutProperties2.default)(extensions, _excluded2);
86
+ _this4.statusCode = statusCode;
87
+ _this4.errorType = errorType;
88
+ _this4.classification = classification;
89
+ _this4.extensions = unknownExtension;
90
+ return _this4;
91
+ }
92
+ return (0, _createClass2.default)(AGGError);
93
+ }( /*#__PURE__*/(0, _wrapNativeSuper2.default)(Error));
94
+ exports.AGGError = AGGError;
95
+ var AGGErrors = /*#__PURE__*/function (_Error5) {
96
+ (0, _inherits2.default)(AGGErrors, _Error5);
97
+ var _super5 = _createSuper(AGGErrors);
98
+ function AGGErrors(errors, traceId) {
99
+ var _this5;
100
+ (0, _classCallCheck2.default)(this, AGGErrors);
101
+ _this5 = _super5.call(this, 'AGGErrors');
102
+ _this5.traceId = traceId;
103
+ if (Array.isArray(errors)) {
104
+ _this5.errors = errors.map(function (error) {
105
+ return new AGGError(error.message, error.extensions, error.path);
106
+ });
107
+ } else {
108
+ _this5.errors = [];
109
+ }
110
+ return _this5;
111
+ }
112
+ return (0, _createClass2.default)(AGGErrors);
113
+ }( /*#__PURE__*/(0, _wrapNativeSuper2.default)(Error));
114
+ exports.AGGErrors = AGGErrors;
@@ -1,5 +1,5 @@
1
1
  import CachingClient from './CachingClient';
2
- import { graphqlQuery } from './graphqlUtils';
2
+ import { directoryGraphqlQuery } from './graphqlUtils';
3
3
  const buildReportingLinesQuery = aaid => ({
4
4
  query: `
5
5
  fragment ReportingLinesUserPII on UserPII {
@@ -82,7 +82,7 @@ class TeamCentralCardClient extends CachingClient {
82
82
  throw new Error('options.teamCentralUrl is a required parameter for retrieving Team Central data');
83
83
  }
84
84
  const query = buildCheckFeatureFlagQuery(featureKey, context);
85
- const response = await graphqlQuery(`${this.options.teamCentralUrl}?operationName=isFeatureKeyEnabled`, query);
85
+ const response = await directoryGraphqlQuery(`${this.options.teamCentralUrl}?operationName=isFeatureKeyEnabled`, query);
86
86
  return response.isFeatureEnabled.enabled;
87
87
  }
88
88
  async makeRequest(userId) {
@@ -90,7 +90,7 @@ class TeamCentralCardClient extends CachingClient {
90
90
  throw new Error('options.teamCentralUrl is a required parameter for retrieving Team Central data');
91
91
  }
92
92
  const query = buildReportingLinesQuery(userId);
93
- const response = await graphqlQuery(`${this.options.teamCentralUrl}?operationName=ReportingLines`, query);
93
+ const response = await directoryGraphqlQuery(`${this.options.teamCentralUrl}?operationName=ReportingLines`, query);
94
94
  return response.reportingLines;
95
95
  }
96
96
  getReportingLines(userId) {
@@ -2,7 +2,7 @@ import { userRequestAnalytics } from '../util/analytics';
2
2
  import { getPageTime } from '../util/performance';
3
3
  import CachingClient from './CachingClient';
4
4
  import { getErrorAttributes } from './errorUtils';
5
- import { graphqlQuery } from './graphqlUtils';
5
+ import { directoryGraphqlQuery } from './graphqlUtils';
6
6
 
7
7
  /**
8
8
  * Transform response from GraphQL
@@ -77,7 +77,7 @@ export default class UserProfileCardClient extends CachingClient {
77
77
  throw new Error('options.url is a required parameter');
78
78
  }
79
79
  const query = buildUserQuery(cloudId, userId);
80
- const response = await graphqlQuery(this.options.url, query);
80
+ const response = await directoryGraphqlQuery(this.options.url, query);
81
81
  return modifyResponse(response);
82
82
  }
83
83
  getProfile(cloudId, userId, analytics) {
@@ -1,19 +1,70 @@
1
- const IGNORED_ERRORS = [
1
+ import { AGGError, AGGErrors, DirectoryGraphQLError, DirectoryGraphQLErrors } from '../util/errors';
2
+ const IGNORED_ERROR_REASONS_DIRECTORY = [
2
3
  // Error categories from pf-directory
3
- 'NotPermitted', 'Gone',
4
- // Error categories from AGG
5
- 'TEAMS_FORBIDDEN', 'TEAMS_TEAM_DELETED'];
4
+ 'NotPermitted', 'Gone'];
5
+ const IGNORE_ERROR_TYPES_AGG = ['IdentityUserNotFoundError', 'TEAMS_FORBIDDEN', 'TEAMS_TEAM_DELETED'];
6
+ const IGNORE_ERROR_CLASSIFICATIONS_AGG = ['Gone'];
6
7
  function isIgnoredError(error) {
7
- return !!error && !!error.reason && IGNORED_ERRORS.includes(error.reason);
8
+ if (!error) {
9
+ return false;
10
+ }
11
+ if (error instanceof DirectoryGraphQLError) {
12
+ return !!error && IGNORED_ERROR_REASONS_DIRECTORY.includes(error.type);
13
+ } else if (error instanceof AGGError) {
14
+ return !!error.errorType && IGNORE_ERROR_TYPES_AGG.includes(error.errorType) || !!error.classification && IGNORE_ERROR_CLASSIFICATIONS_AGG.includes(error.classification);
15
+ }
16
+ return false;
8
17
  }
9
18
  export const getErrorAttributes = error => {
10
- var _error$traceId;
19
+ if (error instanceof DirectoryGraphQLErrors) {
20
+ return {
21
+ errorMessage: error.message,
22
+ errorCount: error.errors.length,
23
+ errorDetails: error.errors.map(getErrorAttributes),
24
+ isSLOFailure: !error.errors.every(isIgnoredError),
25
+ traceId: error.traceId
26
+ };
27
+ } else if (error instanceof DirectoryGraphQLError) {
28
+ return {
29
+ errorMessage: error.message,
30
+ errorCategory: error.category,
31
+ errorType: error.type,
32
+ errorPath: error.path,
33
+ errorNumber: error.errorNumber,
34
+ isSLOFailure: !isIgnoredError(error)
35
+ };
36
+ } else if (error instanceof AGGErrors) {
37
+ return {
38
+ errorMessage: error.message,
39
+ errorCount: error.errors.length,
40
+ errorDetails: error.errors.map(getErrorAttributes),
41
+ isSLOFailure: !error.errors.every(isIgnoredError),
42
+ traceId: error.traceId
43
+ };
44
+ } else if (error instanceof AGGError) {
45
+ return {
46
+ errorMessage: error.message,
47
+ errorType: error.errorType,
48
+ errorStatusCode: error.statusCode,
49
+ isSLOFailure: !isIgnoredError(error),
50
+ errorCategory: error.classification
51
+ };
52
+ } else if (error instanceof Error) {
53
+ return {
54
+ errorMessage: error.message,
55
+ isSLOFailure: true
56
+ };
57
+ }
58
+
59
+ // Unknown
11
60
  return {
12
- errorMessage: error === null || error === void 0 ? void 0 : error.message,
13
- errorStatus: error === null || error === void 0 ? void 0 : error.code,
14
- errorReason: (error === null || error === void 0 ? void 0 : error.reason) || 'default',
15
- errorSource: error === null || error === void 0 ? void 0 : error.source,
16
- isSLOFailure: !isIgnoredError(error),
17
- traceId: (_error$traceId = error === null || error === void 0 ? void 0 : error.traceId) !== null && _error$traceId !== void 0 ? _error$traceId : undefined
61
+ errorMessage: 'Unknown error',
62
+ isSLOFailure: true
18
63
  };
64
+ };
65
+ export const handleDirectoryGraphQLErrors = (errors, traceId) => {
66
+ throw new DirectoryGraphQLErrors(errors, traceId);
67
+ };
68
+ export const handleAGGErrors = (errors, traceId) => {
69
+ throw new AGGErrors(errors, traceId);
19
70
  };
@@ -1,5 +1,5 @@
1
1
  import { getBooleanFF } from '@atlaskit/platform-feature-flags';
2
- import { graphqlQuery } from './graphqlUtils';
2
+ import { AGGQuery } from './graphqlUtils';
3
3
  export const extractIdFromAri = ari => {
4
4
  const slashPos = ari.indexOf('/');
5
5
  const id = ari.slice(slashPos + 1);
@@ -77,7 +77,7 @@ export const addHeaders = headers => {
77
77
  headers.append('X-ExperimentalApi', 'teams-beta');
78
78
  headers.append('X-ExperimentalApi', 'team-members-beta');
79
79
  headers.append('atl-client-name', "@atlaskit/profilecard");
80
- headers.append('atl-client-version', "19.5.9");
80
+ headers.append('atl-client-version', "19.5.11");
81
81
  return headers;
82
82
  };
83
83
  export async function getTeamFromAGG(url, teamId, siteId) {
@@ -87,6 +87,6 @@ export async function getTeamFromAGG(url, teamId, siteId) {
87
87
  });
88
88
  const {
89
89
  Team
90
- } = await graphqlQuery(url, query, addHeaders);
90
+ } = await AGGQuery(url, query, addHeaders);
91
91
  return convertTeam(Team);
92
92
  }