@atlaskit/teams-client 4.26.0 → 4.28.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 (48) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/cjs/common/utils/permissions/constants.js +5 -4
  3. package/dist/cjs/common/utils/ufo/constants.js +1 -1
  4. package/dist/cjs/common/utils/ufo/index.js +2 -2
  5. package/dist/cjs/services/agg-client/utils/query-context-headers.js +19 -0
  6. package/dist/cjs/services/collaborationgraph-client/index.js +24 -0
  7. package/dist/cjs/services/graphql-client/main.js +34 -7
  8. package/dist/cjs/services/graphql-client/utils/index.js +5 -2
  9. package/dist/cjs/services/legion-client/index.js +3 -1
  10. package/dist/cjs/services/main.js +243 -209
  11. package/dist/cjs/services/sentry/utils/get-sentry-config.js +1 -1
  12. package/dist/es2019/common/utils/permissions/constants.js +5 -4
  13. package/dist/es2019/common/utils/ufo/constants.js +1 -1
  14. package/dist/es2019/common/utils/ufo/index.js +2 -2
  15. package/dist/es2019/services/agg-client/utils/query-context-headers.js +14 -0
  16. package/dist/es2019/services/collaborationgraph-client/index.js +21 -0
  17. package/dist/es2019/services/graphql-client/main.js +26 -1
  18. package/dist/es2019/services/graphql-client/utils/index.js +2 -1
  19. package/dist/es2019/services/legion-client/index.js +3 -1
  20. package/dist/es2019/services/main.js +7 -0
  21. package/dist/es2019/services/sentry/utils/get-sentry-config.js +1 -1
  22. package/dist/esm/common/utils/permissions/constants.js +5 -4
  23. package/dist/esm/common/utils/ufo/constants.js +1 -1
  24. package/dist/esm/common/utils/ufo/index.js +2 -2
  25. package/dist/esm/services/agg-client/utils/query-context-headers.js +14 -0
  26. package/dist/esm/services/collaborationgraph-client/index.js +24 -0
  27. package/dist/esm/services/graphql-client/main.js +34 -7
  28. package/dist/esm/services/graphql-client/utils/index.js +5 -2
  29. package/dist/esm/services/legion-client/index.js +3 -1
  30. package/dist/esm/services/main.js +243 -209
  31. package/dist/esm/services/sentry/utils/get-sentry-config.js +1 -1
  32. package/dist/types/common/utils/permissions/constants.d.ts +1 -0
  33. package/dist/types/common/utils/ufo/constants.d.ts +2 -2
  34. package/dist/types/services/agg-client/utils/query-context-headers.d.ts +5 -0
  35. package/dist/types/services/collaborationgraph-client/index.d.ts +25 -0
  36. package/dist/types/services/graphql-client/main.d.ts +4 -0
  37. package/dist/types/services/graphql-client/types.d.ts +1 -0
  38. package/dist/types/services/legion-client/index.d.ts +2 -0
  39. package/dist/types/services/main.d.ts +4 -0
  40. package/dist/types-ts4.5/common/utils/permissions/constants.d.ts +1 -0
  41. package/dist/types-ts4.5/common/utils/ufo/constants.d.ts +2 -1
  42. package/dist/types-ts4.5/services/agg-client/utils/query-context-headers.d.ts +5 -0
  43. package/dist/types-ts4.5/services/collaborationgraph-client/index.d.ts +25 -0
  44. package/dist/types-ts4.5/services/graphql-client/main.d.ts +4 -0
  45. package/dist/types-ts4.5/services/graphql-client/types.d.ts +1 -0
  46. package/dist/types-ts4.5/services/legion-client/index.d.ts +2 -0
  47. package/dist/types-ts4.5/services/main.d.ts +4 -0
  48. package/package.json +4 -1
@@ -36,7 +36,7 @@ function getSentryConfig(options) {
36
36
  return _objectSpread(_objectSpread(_objectSpread({}, otherOptions), DEFAULT_SENTRY_CONFIG), {}, {
37
37
  // Standalone __VERSION__ is set from `bin/set-release-version.sh`
38
38
  // when building to deploy to production
39
- release: "".concat("@atlaskit/teams-client", "@").concat("0.0.0-development") ||
39
+ release: "".concat("@atlaskit/teams-client", "@").concat("4.27.0") ||
40
40
  // @ts-ignore Jira - window.BUILD_KEY
41
41
  window.BUILD_KEY || ( // @ts-ignore Confluence - window.__buildInfo
42
42
  (_window$__buildInfo = window.__buildInfo) === null || _window$__buildInfo === void 0 ? void 0 : _window$__buildInfo.FRONTEND_VERSION) || '---',
@@ -22,7 +22,7 @@ export const allPermissions = (defaultPermission, isMember, isOrgAdmin) => ({
22
22
  ADD_AGENT_TO_TEAM: defaultPermission,
23
23
  ARCHIVE_TEAM: defaultPermission && isMember,
24
24
  UNARCHIVE_TEAM: false,
25
- CAN_EDIT_HIERARCHY: defaultPermission && isMember,
25
+ CAN_EDIT_HIERARCHY: defaultPermission,
26
26
  CAN_CHANGE_MEMBERSHIP_SETTINGS: defaultPermission
27
27
  });
28
28
  export const vanityActions = ['EDIT_DESCRIPTION', 'EDIT_TEAM_NAME', 'EDIT_PROFILE_HEADER', 'EDIT_TEAM_LINK'];
@@ -41,7 +41,9 @@ export const SCIMSyncTeamPermissions = (isMember, isOrgAdmin, source) => ({
41
41
  EDIT_DESCRIPTION: isMember || isOrgAdmin,
42
42
  EDIT_TEAM_SETTINGS: isMember || isOrgAdmin,
43
43
  EDIT_TEAM_LINK: isMember || isOrgAdmin,
44
- EDIT_TEAM_NAME: isOrgAdmin && source === 'ATLASSIAN_GROUP' && fg('enable_edit_team_name_external_type_teams')
44
+ EDIT_TEAM_NAME: isOrgAdmin && source === 'ATLASSIAN_GROUP' && fg('enable_edit_team_name_external_type_teams'),
45
+ //Org admins should not be able to edit hierarchies of HRIS synced teams
46
+ CAN_EDIT_HIERARCHY: source === 'ATLASSIAN_GROUP' && isOrgAdmin
45
47
  });
46
48
 
47
49
  /**
@@ -99,8 +101,7 @@ const getActiveTeamPermissionMap = (settings, permission, isMember, isOrgAdmin,
99
101
  ...SCIMSyncTeamPermissions(isMember, isOrgAdmin, source),
100
102
  ADD_AGENT_TO_TEAM: newTeamProfileEnabled && (isMember || isOrgAdmin),
101
103
  REMOVE_AGENT_FROM_TEAM: newTeamProfileEnabled && (isMember || isOrgAdmin),
102
- ARCHIVE_TEAM: isArchiveTeamEnabled && isOrgAdmin,
103
- CAN_EDIT_HIERARCHY: permission === 'FULL_WRITE' && isOrgAdmin
104
+ ARCHIVE_TEAM: isArchiveTeamEnabled && isOrgAdmin
104
105
  };
105
106
  } else if (settings === 'ORG_ADMIN_MANAGED') {
106
107
  // NOTE: Only org admins will received FULL_WRITE permission
@@ -1,6 +1,6 @@
1
1
  import { ExperiencePerformanceTypes, ExperienceTypes } from '@atlaskit/ufo';
2
2
  import { TeamsUFOExperience } from './index';
3
- const TeamsClientExperienceKeyList = ['getAllTeams', 'getTeamById', 'updateTeamById', 'querySettings', 'queryFeatureFlags', 'queryTeamMemberships', 'queryUser', 'inviteUsersToTeam', 'getMyTeamMembership', 'getTeamLinksByTeamId', 'createTeamLink', 'updateTeamLink', 'deleteTeamLink', 'reorderTeamLink', 'acceptTeamInvitation', 'declineTeamInvitation', 'selfJoinTeam', 'cancelJoinRequest', 'acceptJoinRequest', 'declineJoinRequest', 'deleteTeamMembership', 'revokeTeamInvite', 'deleteTeam', 'archiveTeam', 'unarchiveTeam', 'unlinkTeamFromGroup', 'isSingleFullMemberTeam', 'createTeam', 'createTeamContainers', 'createExternalTeam', 'getProfileWithMutability', 'getIsSiteAdmin', 'addUsersToTeam', 'removeTeamMemberships', 'getRecommendedProducts', 'joinOrRequestDefaultAccessToProductsBulk', 'getReadMediaToken', 'getWriteUserMediaToken', 'updateUserHeaderImage', 'getWriteTeamMediaToken', 'getSoftDeletedTeamById', 'restoreTeam', 'getUserInSiteUserBase', 'getLinkedTeamsBulk', 'getTeamProfileDetails', 'getUserContainers', 'getPermissions', 'getUserManageConfig', 'getMyAvatarUploadedStatus', 'deleteUserAvatar', 'getTeamLinkIcons', 'getTeamInSlack', 'getOrgScope', 'restoreTeamToSyncedGroup', 'getTeamAndGroupDiff', 'linkExistingTeamToGroup', 'fetchUserAvatarInfo', 'getOrgEligibilityForManagedTeams', 'updateUser', 'updateUserAvatar', 'disconnectTeamInSlack', 'updateTeamInSlack', 'getUserTenure', 'getAriFromUrl', 'getWebLinkTitle', 'addAgentToTeam', 'getTeamEnabledSites', 'assignTeamsToSites', 'removeAgentTeamAssociation', 'getAssignedTeams', 'setTeamSiteAssignmentPermission', 'getUnassignedTeams', 'getTeamSiteAssignmentOrgDetails', 'getTeamsToBeClonedToJsmSites', 'getReportingLines'];
3
+ const TeamsClientExperienceKeyList = ['getAllTeams', 'getTeamById', 'updateTeamById', 'querySettings', 'queryFeatureFlags', 'queryTeamMemberships', 'queryUser', 'inviteUsersToTeam', 'getMyTeamMembership', 'getTeamLinksByTeamId', 'createTeamLink', 'updateTeamLink', 'deleteTeamLink', 'reorderTeamLink', 'acceptTeamInvitation', 'declineTeamInvitation', 'selfJoinTeam', 'cancelJoinRequest', 'acceptJoinRequest', 'declineJoinRequest', 'deleteTeamMembership', 'revokeTeamInvite', 'deleteTeam', 'archiveTeam', 'unarchiveTeam', 'unlinkTeamFromGroup', 'isSingleFullMemberTeam', 'createTeam', 'createTeamContainers', 'createExternalTeam', 'getProfileWithMutability', 'getIsSiteAdmin', 'addUsersToTeam', 'removeTeamMemberships', 'getRecommendedProducts', 'joinOrRequestDefaultAccessToProductsBulk', 'getReadMediaToken', 'getWriteUserMediaToken', 'updateUserHeaderImage', 'getWriteTeamMediaToken', 'getSoftDeletedTeamById', 'restoreTeam', 'getUserInSiteUserBase', 'getLinkedTeamsBulk', 'getTeamProfileDetails', 'getUserContainers', 'getRecommendedUsers', 'getPermissions', 'getUserManageConfig', 'getMyAvatarUploadedStatus', 'deleteUserAvatar', 'getTeamLinkIcons', 'getTeamInSlack', 'getOrgScope', 'restoreTeamToSyncedGroup', 'getTeamAndGroupDiff', 'linkExistingTeamToGroup', 'fetchUserAvatarInfo', 'getOrgEligibilityForManagedTeams', 'updateUser', 'updateUserAvatar', 'disconnectTeamInSlack', 'updateTeamInSlack', 'getUserTenure', 'getAriFromUrl', 'getWebLinkTitle', 'addAgentToTeam', 'getTeamEnabledSites', 'assignTeamsToSites', 'removeAgentTeamAssociation', 'getAssignedTeams', 'setTeamSiteAssignmentPermission', 'getUnassignedTeams', 'getTeamSiteAssignmentOrgDetails', 'getTeamsToBeClonedToJsmSites', 'getReportingLines'];
4
4
  export const TEAMS_CLIENT_EXPERIENCES = new Map([...TeamsClientExperienceKeyList.map(key => [key,
5
5
  // camelCase to kebab-case
6
6
  new TeamsUFOExperience(`teams-client-${key.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase()}`, {
@@ -27,7 +27,7 @@ export class TeamsUFOExperience extends UFOExperience {
27
27
  return super.failure({
28
28
  metadata: {
29
29
  error: createErrorMetadata(error),
30
- packageVersion: "0.0.0-development",
30
+ packageVersion: "4.27.0",
31
31
  packageName: "@atlaskit/teams-client"
32
32
  }
33
33
  });
@@ -35,7 +35,7 @@ export class TeamsUFOExperience extends UFOExperience {
35
35
  return super.failure({
36
36
  metadata: {
37
37
  error: 'unknown error',
38
- packageVersion: "0.0.0-development",
38
+ packageVersion: "4.27.0",
39
39
  packageName: "@atlaskit/teams-client"
40
40
  }
41
41
  });
@@ -0,0 +1,14 @@
1
+ import { fg } from '@atlaskit/platform-feature-flags';
2
+
3
+ /**
4
+ * Creates headers object with X-Query-Context header if cloudId is provided and feature flag is enabled.
5
+ * Use this for AGG client makeGraphQLRequest calls.
6
+ */
7
+ export function createQueryContextHeaders(cloudId) {
8
+ if (!cloudId || !fg('enable_x_query_context_header')) {
9
+ return undefined;
10
+ }
11
+ return {
12
+ 'X-Query-Context': `ari:cloud:platform::site/${cloudId}`
13
+ };
14
+ }
@@ -31,6 +31,27 @@ export class CollaborationGraphClient extends RestClient {
31
31
  expanded: true
32
32
  });
33
33
  }
34
+ getRecommendedUsers({
35
+ accountId,
36
+ cloudId,
37
+ maxNumberOfResults = 12,
38
+ filter = 'account_status:"active" AND (NOT email_domain:"connect.atlassian.com") AND (NOT account_type:"app")'
39
+ }) {
40
+ return this.postResource('/v2/recommend/user', {
41
+ context: {
42
+ userId: accountId,
43
+ tenantId: cloudId
44
+ },
45
+ modelRequestParams: {
46
+ experience: 'CgUserNearbyUser',
47
+ caller: 'atlas'
48
+ },
49
+ requestingUserId: accountId,
50
+ expand: 'existing',
51
+ maxNumberOfResults,
52
+ filter
53
+ });
54
+ }
34
55
  }
35
56
  export default new CollaborationGraphClient({
36
57
  serviceUrl: DEFAULT_CONFIG.collaborationGraphUrl
@@ -1,3 +1,4 @@
1
+ import { fg } from '@atlaskit/platform-feature-flags';
1
2
  import { DefaultError, GraphQLError } from '../../common/utils/error';
2
3
  import { BaseClient } from '../base-client';
3
4
  import { handleGraphQLRequest } from './utils';
@@ -9,9 +10,33 @@ export class BaseGraphQlClient extends BaseClient {
9
10
  setServiceUrl(serviceUrl) {
10
11
  this.serviceUrl = serviceUrl;
11
12
  }
13
+
14
+ /**
15
+ * Creates query context headers if cloudId is available and feature flag is enabled.
16
+ */
17
+ createQueryContextHeaders(cloudId) {
18
+ if (!cloudId || !fg('enable_x_query_context_header')) {
19
+ return undefined;
20
+ }
21
+ return {
22
+ 'X-Query-Context': `ari:cloud:platform::site/${cloudId}`
23
+ };
24
+ }
12
25
  async makeGraphQLRequest(body, options = {}) {
13
26
  try {
14
- return handleGraphQLRequest(this.serviceUrl, body, options);
27
+ // Automatically add X-Query-Context header if cloudId is available in context
28
+ const cloudId = this.getCloudId();
29
+ const queryContextHeaders = this.createQueryContextHeaders(cloudId);
30
+
31
+ // Merge headers: query context headers first, then provided headers (provided headers take precedence)
32
+ const mergedOptions = {
33
+ ...options,
34
+ headers: {
35
+ ...queryContextHeaders,
36
+ ...options.headers
37
+ }
38
+ };
39
+ return handleGraphQLRequest(this.serviceUrl, body, mergedOptions);
15
40
  } catch (error) {
16
41
  if (error instanceof GraphQLError) {
17
42
  throw error;
@@ -8,7 +8,8 @@ export async function makeGraphQLRequestWithoutRetries(serviceUrl, body, options
8
8
  const request = fetch(url, {
9
9
  method: 'POST',
10
10
  headers: new Headers({
11
- 'Content-Type': 'application/json'
11
+ 'Content-Type': 'application/json',
12
+ ...(options.headers || {})
12
13
  }),
13
14
  credentials: 'include',
14
15
  body: JSON.stringify(body)
@@ -11,6 +11,7 @@ import { RestClient } from '../rest-client';
11
11
  * @property {string[]} memberAccountIds - List of member account IDs to filter teams
12
12
  * @property {boolean} useDefaultSort - Whether to use the default sort order
13
13
  * @property {boolean} showEmptyTeams - Whether to return empty teams in the search
14
+ * @property {string[]} teamTypeIdsFilter - List of team type IDs to filter teams
14
15
  */
15
16
 
16
17
  /**
@@ -77,7 +78,8 @@ export class LegionClient extends RestClient {
77
78
  membership: {
78
79
  memberAccountIds: allTeamsQuery.memberAccountIds
79
80
  },
80
- showEmptyTeams: allTeamsQuery.showEmptyTeams
81
+ showEmptyTeams: allTeamsQuery.showEmptyTeams,
82
+ teamTypeIdsFilter: allTeamsQuery.teamTypeIdsFilter
81
83
  });
82
84
  const teams = entities.map(t => this.mapTeamSearchResponseV4ToTeamWithMembership(t));
83
85
  return {
@@ -603,6 +603,13 @@ export class TeamsClient {
603
603
  return this.measurePerformance('getUserContainers', () => this._collaborationGraphClient.getUserContainers(...args));
604
604
  }
605
605
 
606
+ /**
607
+ * Fetch recommended users from collaboration graph
608
+ */
609
+ async getRecommendedUsers(...args) {
610
+ return this.measurePerformance('getRecommendedUsers', () => this._collaborationGraphClient.getRecommendedUsers(...args));
611
+ }
612
+
606
613
  /**
607
614
  * Fetch mutatability of external managed user fields
608
615
  */
@@ -28,7 +28,7 @@ export function getSentryConfig(options) {
28
28
  ...DEFAULT_SENTRY_CONFIG,
29
29
  // Standalone __VERSION__ is set from `bin/set-release-version.sh`
30
30
  // when building to deploy to production
31
- release: `${"@atlaskit/teams-client"}@${"0.0.0-development"}` ||
31
+ release: `${"@atlaskit/teams-client"}@${"4.27.0"}` ||
32
32
  // @ts-ignore Jira - window.BUILD_KEY
33
33
  window.BUILD_KEY || ( // @ts-ignore Confluence - window.__buildInfo
34
34
  (_window$__buildInfo = window.__buildInfo) === null || _window$__buildInfo === void 0 ? void 0 : _window$__buildInfo.FRONTEND_VERSION) || '---',
@@ -26,7 +26,7 @@ export var allPermissions = function allPermissions(defaultPermission, isMember,
26
26
  ADD_AGENT_TO_TEAM: defaultPermission,
27
27
  ARCHIVE_TEAM: defaultPermission && isMember,
28
28
  UNARCHIVE_TEAM: false,
29
- CAN_EDIT_HIERARCHY: defaultPermission && isMember,
29
+ CAN_EDIT_HIERARCHY: defaultPermission,
30
30
  CAN_CHANGE_MEMBERSHIP_SETTINGS: defaultPermission
31
31
  };
32
32
  };
@@ -51,7 +51,9 @@ export var SCIMSyncTeamPermissions = function SCIMSyncTeamPermissions(isMember,
51
51
  EDIT_DESCRIPTION: isMember || isOrgAdmin,
52
52
  EDIT_TEAM_SETTINGS: isMember || isOrgAdmin,
53
53
  EDIT_TEAM_LINK: isMember || isOrgAdmin,
54
- EDIT_TEAM_NAME: isOrgAdmin && source === 'ATLASSIAN_GROUP' && fg('enable_edit_team_name_external_type_teams')
54
+ EDIT_TEAM_NAME: isOrgAdmin && source === 'ATLASSIAN_GROUP' && fg('enable_edit_team_name_external_type_teams'),
55
+ //Org admins should not be able to edit hierarchies of HRIS synced teams
56
+ CAN_EDIT_HIERARCHY: source === 'ATLASSIAN_GROUP' && isOrgAdmin
55
57
  };
56
58
  };
57
59
 
@@ -103,8 +105,7 @@ var getActiveTeamPermissionMap = function getActiveTeamPermissionMap(settings, p
103
105
  return _objectSpread(_objectSpread(_objectSpread({}, allPermissions(false, isMember, isOrgAdmin)), SCIMSyncTeamPermissions(isMember, isOrgAdmin, source)), {}, {
104
106
  ADD_AGENT_TO_TEAM: newTeamProfileEnabled && (isMember || isOrgAdmin),
105
107
  REMOVE_AGENT_FROM_TEAM: newTeamProfileEnabled && (isMember || isOrgAdmin),
106
- ARCHIVE_TEAM: isArchiveTeamEnabled && isOrgAdmin,
107
- CAN_EDIT_HIERARCHY: permission === 'FULL_WRITE' && isOrgAdmin
108
+ ARCHIVE_TEAM: isArchiveTeamEnabled && isOrgAdmin
108
109
  });
109
110
  } else if (settings === 'ORG_ADMIN_MANAGED') {
110
111
  // NOTE: Only org admins will received FULL_WRITE permission
@@ -1,7 +1,7 @@
1
1
  import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
2
  import { ExperiencePerformanceTypes, ExperienceTypes } from '@atlaskit/ufo';
3
3
  import { TeamsUFOExperience } from './index';
4
- var TeamsClientExperienceKeyList = ['getAllTeams', 'getTeamById', 'updateTeamById', 'querySettings', 'queryFeatureFlags', 'queryTeamMemberships', 'queryUser', 'inviteUsersToTeam', 'getMyTeamMembership', 'getTeamLinksByTeamId', 'createTeamLink', 'updateTeamLink', 'deleteTeamLink', 'reorderTeamLink', 'acceptTeamInvitation', 'declineTeamInvitation', 'selfJoinTeam', 'cancelJoinRequest', 'acceptJoinRequest', 'declineJoinRequest', 'deleteTeamMembership', 'revokeTeamInvite', 'deleteTeam', 'archiveTeam', 'unarchiveTeam', 'unlinkTeamFromGroup', 'isSingleFullMemberTeam', 'createTeam', 'createTeamContainers', 'createExternalTeam', 'getProfileWithMutability', 'getIsSiteAdmin', 'addUsersToTeam', 'removeTeamMemberships', 'getRecommendedProducts', 'joinOrRequestDefaultAccessToProductsBulk', 'getReadMediaToken', 'getWriteUserMediaToken', 'updateUserHeaderImage', 'getWriteTeamMediaToken', 'getSoftDeletedTeamById', 'restoreTeam', 'getUserInSiteUserBase', 'getLinkedTeamsBulk', 'getTeamProfileDetails', 'getUserContainers', 'getPermissions', 'getUserManageConfig', 'getMyAvatarUploadedStatus', 'deleteUserAvatar', 'getTeamLinkIcons', 'getTeamInSlack', 'getOrgScope', 'restoreTeamToSyncedGroup', 'getTeamAndGroupDiff', 'linkExistingTeamToGroup', 'fetchUserAvatarInfo', 'getOrgEligibilityForManagedTeams', 'updateUser', 'updateUserAvatar', 'disconnectTeamInSlack', 'updateTeamInSlack', 'getUserTenure', 'getAriFromUrl', 'getWebLinkTitle', 'addAgentToTeam', 'getTeamEnabledSites', 'assignTeamsToSites', 'removeAgentTeamAssociation', 'getAssignedTeams', 'setTeamSiteAssignmentPermission', 'getUnassignedTeams', 'getTeamSiteAssignmentOrgDetails', 'getTeamsToBeClonedToJsmSites', 'getReportingLines'];
4
+ var TeamsClientExperienceKeyList = ['getAllTeams', 'getTeamById', 'updateTeamById', 'querySettings', 'queryFeatureFlags', 'queryTeamMemberships', 'queryUser', 'inviteUsersToTeam', 'getMyTeamMembership', 'getTeamLinksByTeamId', 'createTeamLink', 'updateTeamLink', 'deleteTeamLink', 'reorderTeamLink', 'acceptTeamInvitation', 'declineTeamInvitation', 'selfJoinTeam', 'cancelJoinRequest', 'acceptJoinRequest', 'declineJoinRequest', 'deleteTeamMembership', 'revokeTeamInvite', 'deleteTeam', 'archiveTeam', 'unarchiveTeam', 'unlinkTeamFromGroup', 'isSingleFullMemberTeam', 'createTeam', 'createTeamContainers', 'createExternalTeam', 'getProfileWithMutability', 'getIsSiteAdmin', 'addUsersToTeam', 'removeTeamMemberships', 'getRecommendedProducts', 'joinOrRequestDefaultAccessToProductsBulk', 'getReadMediaToken', 'getWriteUserMediaToken', 'updateUserHeaderImage', 'getWriteTeamMediaToken', 'getSoftDeletedTeamById', 'restoreTeam', 'getUserInSiteUserBase', 'getLinkedTeamsBulk', 'getTeamProfileDetails', 'getUserContainers', 'getRecommendedUsers', 'getPermissions', 'getUserManageConfig', 'getMyAvatarUploadedStatus', 'deleteUserAvatar', 'getTeamLinkIcons', 'getTeamInSlack', 'getOrgScope', 'restoreTeamToSyncedGroup', 'getTeamAndGroupDiff', 'linkExistingTeamToGroup', 'fetchUserAvatarInfo', 'getOrgEligibilityForManagedTeams', 'updateUser', 'updateUserAvatar', 'disconnectTeamInSlack', 'updateTeamInSlack', 'getUserTenure', 'getAriFromUrl', 'getWebLinkTitle', 'addAgentToTeam', 'getTeamEnabledSites', 'assignTeamsToSites', 'removeAgentTeamAssociation', 'getAssignedTeams', 'setTeamSiteAssignmentPermission', 'getUnassignedTeams', 'getTeamSiteAssignmentOrgDetails', 'getTeamsToBeClonedToJsmSites', 'getReportingLines'];
5
5
  export var TEAMS_CLIENT_EXPERIENCES = new Map(_toConsumableArray(TeamsClientExperienceKeyList.map(function (key) {
6
6
  return [key,
7
7
  // camelCase to kebab-case
@@ -45,7 +45,7 @@ export var TeamsUFOExperience = /*#__PURE__*/function (_UFOExperience) {
45
45
  return _superPropGet(TeamsUFOExperience, "failure", this, 3)([{
46
46
  metadata: {
47
47
  error: createErrorMetadata(error),
48
- packageVersion: "0.0.0-development",
48
+ packageVersion: "4.27.0",
49
49
  packageName: "@atlaskit/teams-client"
50
50
  }
51
51
  }]);
@@ -53,7 +53,7 @@ export var TeamsUFOExperience = /*#__PURE__*/function (_UFOExperience) {
53
53
  return _superPropGet(TeamsUFOExperience, "failure", this, 3)([{
54
54
  metadata: {
55
55
  error: 'unknown error',
56
- packageVersion: "0.0.0-development",
56
+ packageVersion: "4.27.0",
57
57
  packageName: "@atlaskit/teams-client"
58
58
  }
59
59
  }]);
@@ -0,0 +1,14 @@
1
+ import { fg } from '@atlaskit/platform-feature-flags';
2
+
3
+ /**
4
+ * Creates headers object with X-Query-Context header if cloudId is provided and feature flag is enabled.
5
+ * Use this for AGG client makeGraphQLRequest calls.
6
+ */
7
+ export function createQueryContextHeaders(cloudId) {
8
+ if (!cloudId || !fg('enable_x_query_context_header')) {
9
+ return undefined;
10
+ }
11
+ return {
12
+ 'X-Query-Context': "ari:cloud:platform::site/".concat(cloudId)
13
+ };
14
+ }
@@ -44,6 +44,30 @@ export var CollaborationGraphClient = /*#__PURE__*/function (_RestClient) {
44
44
  expanded: true
45
45
  });
46
46
  }
47
+ }, {
48
+ key: "getRecommendedUsers",
49
+ value: function getRecommendedUsers(_ref2) {
50
+ var accountId = _ref2.accountId,
51
+ cloudId = _ref2.cloudId,
52
+ _ref2$maxNumberOfResu = _ref2.maxNumberOfResults,
53
+ maxNumberOfResults = _ref2$maxNumberOfResu === void 0 ? 12 : _ref2$maxNumberOfResu,
54
+ _ref2$filter = _ref2.filter,
55
+ filter = _ref2$filter === void 0 ? 'account_status:"active" AND (NOT email_domain:"connect.atlassian.com") AND (NOT account_type:"app")' : _ref2$filter;
56
+ return this.postResource('/v2/recommend/user', {
57
+ context: {
58
+ userId: accountId,
59
+ tenantId: cloudId
60
+ },
61
+ modelRequestParams: {
62
+ experience: 'CgUserNearbyUser',
63
+ caller: 'atlas'
64
+ },
65
+ requestingUserId: accountId,
66
+ expand: 'existing',
67
+ maxNumberOfResults: maxNumberOfResults,
68
+ filter: filter
69
+ });
70
+ }
47
71
  }]);
48
72
  }(RestClient);
49
73
  export default new CollaborationGraphClient({
@@ -1,3 +1,4 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
1
2
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
3
  import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
3
4
  import _createClass from "@babel/runtime/helpers/createClass";
@@ -5,8 +6,11 @@ import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstruct
5
6
  import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf";
6
7
  import _inherits from "@babel/runtime/helpers/inherits";
7
8
  import _regeneratorRuntime from "@babel/runtime/regenerator";
9
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
10
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
8
11
  function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
9
12
  function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
13
+ import { fg } from '@atlaskit/platform-feature-flags';
10
14
  import { DefaultError, GraphQLError } from '../../common/utils/error';
11
15
  import { BaseClient } from '../base-client';
12
16
  import { handleGraphQLRequest } from './utils';
@@ -24,34 +28,57 @@ export var BaseGraphQlClient = /*#__PURE__*/function (_BaseClient) {
24
28
  value: function setServiceUrl(serviceUrl) {
25
29
  this.serviceUrl = serviceUrl;
26
30
  }
31
+
32
+ /**
33
+ * Creates query context headers if cloudId is available and feature flag is enabled.
34
+ */
35
+ }, {
36
+ key: "createQueryContextHeaders",
37
+ value: function createQueryContextHeaders(cloudId) {
38
+ if (!cloudId || !fg('enable_x_query_context_header')) {
39
+ return undefined;
40
+ }
41
+ return {
42
+ 'X-Query-Context': "ari:cloud:platform::site/".concat(cloudId)
43
+ };
44
+ }
27
45
  }, {
28
46
  key: "makeGraphQLRequest",
29
47
  value: function () {
30
48
  var _makeGraphQLRequest = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(body) {
31
49
  var options,
50
+ cloudId,
51
+ queryContextHeaders,
52
+ mergedOptions,
32
53
  _args = arguments;
33
54
  return _regeneratorRuntime.wrap(function _callee$(_context) {
34
55
  while (1) switch (_context.prev = _context.next) {
35
56
  case 0:
36
57
  options = _args.length > 1 && _args[1] !== undefined ? _args[1] : {};
37
58
  _context.prev = 1;
38
- return _context.abrupt("return", handleGraphQLRequest(this.serviceUrl, body, options));
39
- case 5:
40
- _context.prev = 5;
59
+ // Automatically add X-Query-Context header if cloudId is available in context
60
+ cloudId = this.getCloudId();
61
+ queryContextHeaders = this.createQueryContextHeaders(cloudId); // Merge headers: query context headers first, then provided headers (provided headers take precedence)
62
+ mergedOptions = _objectSpread(_objectSpread({}, options), {}, {
63
+ headers: _objectSpread(_objectSpread({}, queryContextHeaders), options.headers)
64
+ });
65
+ return _context.abrupt("return", handleGraphQLRequest(this.serviceUrl, body, mergedOptions));
66
+ case 8:
67
+ _context.prev = 8;
41
68
  _context.t0 = _context["catch"](1);
42
69
  if (!(_context.t0 instanceof GraphQLError)) {
43
- _context.next = 9;
70
+ _context.next = 12;
44
71
  break;
45
72
  }
46
73
  throw _context.t0;
47
- case 9:
74
+ case 12:
48
75
  this.logException(_context.t0, 'UnknownError in GraphQLClient.makeGraphQLRequestWithoutRetries');
49
76
  throw new DefaultError({});
50
- case 11:
77
+ case 14:
51
78
  case "end":
52
79
  return _context.stop();
53
80
  }
54
- }, _callee, this, [[1, 5]]);
81
+ }, _callee, this, [[1, 8]]);
55
82
  }));
56
83
  function makeGraphQLRequest(_x) {
57
84
  return _makeGraphQLRequest.apply(this, arguments);
@@ -1,5 +1,8 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
1
2
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
3
  import _regeneratorRuntime from "@babel/runtime/regenerator";
4
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
5
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
3
6
  import { GraphQLError, HttpError } from '../../../common/utils/error';
4
7
  import { EXPONENTIAL_BACKOFF_RETRY_POLICY, is5xx, isFetchResponse, withExponentialBackoff } from '../../../common/utils/http';
5
8
  import { handleResponse } from '../../../common/utils/status-code-handlers-provider';
@@ -25,9 +28,9 @@ function _makeGraphQLRequestWithoutRetries() {
25
28
  url = serviceUrl + operationNameQuery;
26
29
  request = fetch(url, {
27
30
  method: 'POST',
28
- headers: new Headers({
31
+ headers: new Headers(_objectSpread({
29
32
  'Content-Type': 'application/json'
30
- }),
33
+ }, options.headers || {})),
31
34
  credentials: 'include',
32
35
  body: JSON.stringify(body)
33
36
  }).then(function (res) {
@@ -26,6 +26,7 @@ import { RestClient } from '../rest-client';
26
26
  * @property {string[]} memberAccountIds - List of member account IDs to filter teams
27
27
  * @property {boolean} useDefaultSort - Whether to use the default sort order
28
28
  * @property {boolean} showEmptyTeams - Whether to return empty teams in the search
29
+ * @property {string[]} teamTypeIdsFilter - List of team type IDs to filter teams
29
30
  */
30
31
 
31
32
  /**
@@ -124,7 +125,8 @@ export var LegionClient = /*#__PURE__*/function (_RestClient) {
124
125
  membership: {
125
126
  memberAccountIds: allTeamsQuery.memberAccountIds
126
127
  },
127
- showEmptyTeams: allTeamsQuery.showEmptyTeams
128
+ showEmptyTeams: allTeamsQuery.showEmptyTeams,
129
+ teamTypeIdsFilter: allTeamsQuery.teamTypeIdsFilter
128
130
  });
129
131
  case 5:
130
132
  _yield$this$postResou = _context2.sent;