@atlaskit/teams-client 4.0.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.
- package/CHANGELOG.md +1061 -0
- package/LICENSE.md +11 -0
- package/README.md +9 -0
- package/client/package.json +15 -0
- package/dist/cjs/common/types.js +8 -0
- package/dist/cjs/common/utils/ari.js +31 -0
- package/dist/cjs/common/utils/error/index.js +182 -0
- package/dist/cjs/common/utils/filter-null.js +9 -0
- package/dist/cjs/common/utils/http.js +119 -0
- package/dist/cjs/common/utils/index.js +37 -0
- package/dist/cjs/common/utils/permissions/constants.js +68 -0
- package/dist/cjs/common/utils/permissions/has-permission.js +42 -0
- package/dist/cjs/common/utils/permissions/index.js +31 -0
- package/dist/cjs/common/utils/permissions/types.js +11 -0
- package/dist/cjs/common/utils/sort-teams.js +52 -0
- package/dist/cjs/common/utils/status-code-handlers-provider.js +30 -0
- package/dist/cjs/common/utils/team.js +19 -0
- package/dist/cjs/common/utils/ufo/constants.js +22 -0
- package/dist/cjs/common/utils/ufo/index.js +69 -0
- package/dist/cjs/common/utils/ufo/utils.js +26 -0
- package/dist/cjs/index.js +166 -0
- package/dist/cjs/mocks/endpoints.js +267 -0
- package/dist/cjs/mocks/generate-data.js +115 -0
- package/dist/cjs/mocks/index.js +61 -0
- package/dist/cjs/mocks/invitations.js +21 -0
- package/dist/cjs/mocks/responses.js +480 -0
- package/dist/cjs/mocks/team-link.js +26 -0
- package/dist/cjs/mocks/team.js +150 -0
- package/dist/cjs/mocks/user.js +102 -0
- package/dist/cjs/mocks/with-faker.js +16 -0
- package/dist/cjs/services/agg-client/index.js +137 -0
- package/dist/cjs/services/agg-client/mocks/index.js +71 -0
- package/dist/cjs/services/agg-client/types.js +10 -0
- package/dist/cjs/services/agg-client/utils/queries/team-membership-query.js +8 -0
- package/dist/cjs/services/agg-client/utils/queries/user-query.js +12 -0
- package/dist/cjs/services/agg-client/utils/user-type.js +18 -0
- package/dist/cjs/services/base-client/index.js +94 -0
- package/dist/cjs/services/collaborationgraph-client/index.js +58 -0
- package/dist/cjs/services/constants.js +13 -0
- package/dist/cjs/services/directory-client/index.js +241 -0
- package/dist/cjs/services/graphql-client/index.js +12 -0
- package/dist/cjs/services/graphql-client/main.js +69 -0
- package/dist/cjs/services/graphql-client/types.js +5 -0
- package/dist/cjs/services/graphql-client/utils/index.js +157 -0
- package/dist/cjs/services/hooks/use-teams-client-setup.js +44 -0
- package/dist/cjs/services/identity-client/index.js +171 -0
- package/dist/cjs/services/identity-client/utils.js +183 -0
- package/dist/cjs/services/index.js +18 -0
- package/dist/cjs/services/invitations-client/index.js +168 -0
- package/dist/cjs/services/invitations-client/types.js +1 -0
- package/dist/cjs/services/invitations-client/utils/index.js +115 -0
- package/dist/cjs/services/invitations-client/utils/types.js +5 -0
- package/dist/cjs/services/legion-client/index.js +1160 -0
- package/dist/cjs/services/legion-client/types.js +5 -0
- package/dist/cjs/services/main.js +1941 -0
- package/dist/cjs/services/mutability-client/index.js +97 -0
- package/dist/cjs/services/mutability-client/types.js +1 -0
- package/dist/cjs/services/object-resolver-client/index.js +60 -0
- package/dist/cjs/services/object-resolver-client/types.js +17 -0
- package/dist/cjs/services/object-resolver-client/utils.js +67 -0
- package/dist/cjs/services/perms-client/index.js +48 -0
- package/dist/cjs/services/public-api-client/generated/data-contracts.js +1 -0
- package/dist/cjs/services/public-api-client/index.js +264 -0
- package/dist/cjs/services/rest-client/index.js +381 -0
- package/dist/cjs/services/rest-client/utils/cookie.js +23 -0
- package/dist/cjs/services/rest-client/utils/parse-error-message.js +62 -0
- package/dist/cjs/services/rest-client/utils/parse-response.js +20 -0
- package/dist/cjs/services/rest-client/utils/strip-uuid.js +10 -0
- package/dist/cjs/services/sentry/constants.js +15 -0
- package/dist/cjs/services/sentry/index.js +67 -0
- package/dist/cjs/services/sentry/main.js +196 -0
- package/dist/cjs/services/sentry/types.js +5 -0
- package/dist/cjs/services/sentry/utils/get-sentry-config.js +45 -0
- package/dist/cjs/services/sentry/utils/initialise-sentry.js +55 -0
- package/dist/cjs/services/sentry/utils/sentry-client.js +121 -0
- package/dist/cjs/services/sentry/utils/use-teams-sentry-client-setup.js +40 -0
- package/dist/cjs/services/teams-in-slack-client/index.js +103 -0
- package/dist/cjs/services/types.js +1 -0
- package/dist/cjs/services/use-query-light/index.js +25 -0
- package/dist/cjs/services/use-query-light/main.js +232 -0
- package/dist/cjs/services/use-query-light/types.js +52 -0
- package/dist/cjs/services/user-info-provider/index.js +18 -0
- package/dist/cjs/services/user-info-provider/main.js +72 -0
- package/dist/cjs/services/user-preferences-client/index.js +98 -0
- package/dist/cjs/types/config.js +1 -0
- package/dist/cjs/types/index.js +19 -0
- package/dist/cjs/types/links.js +22 -0
- package/dist/cjs/types/media.js +1 -0
- package/dist/cjs/types/membership.js +24 -0
- package/dist/cjs/types/slack.js +1 -0
- package/dist/cjs/types/team.js +5 -0
- package/dist/cjs/types/user.js +10 -0
- package/dist/es2019/common/types.js +2 -0
- package/dist/es2019/common/utils/ari.js +21 -0
- package/dist/es2019/common/utils/error/index.js +142 -0
- package/dist/es2019/common/utils/filter-null.js +3 -0
- package/dist/es2019/common/utils/http.js +82 -0
- package/dist/es2019/common/utils/index.js +2 -0
- package/dist/es2019/common/utils/permissions/constants.js +59 -0
- package/dist/es2019/common/utils/permissions/has-permission.js +33 -0
- package/dist/es2019/common/utils/permissions/index.js +2 -0
- package/dist/es2019/common/utils/permissions/types.js +5 -0
- package/dist/es2019/common/utils/sort-teams.js +45 -0
- package/dist/es2019/common/utils/status-code-handlers-provider.js +25 -0
- package/dist/es2019/common/utils/team.js +6 -0
- package/dist/es2019/common/utils/ufo/constants.js +12 -0
- package/dist/es2019/common/utils/ufo/index.js +43 -0
- package/dist/es2019/common/utils/ufo/utils.js +18 -0
- package/dist/es2019/index.js +19 -0
- package/dist/es2019/mocks/endpoints.js +250 -0
- package/dist/es2019/mocks/generate-data.js +96 -0
- package/dist/es2019/mocks/index.js +2 -0
- package/dist/es2019/mocks/invitations.js +11 -0
- package/dist/es2019/mocks/responses.js +478 -0
- package/dist/es2019/mocks/team-link.js +14 -0
- package/dist/es2019/mocks/team.js +127 -0
- package/dist/es2019/mocks/user.js +79 -0
- package/dist/es2019/mocks/with-faker.js +8 -0
- package/dist/es2019/services/agg-client/index.js +70 -0
- package/dist/es2019/services/agg-client/mocks/index.js +64 -0
- package/dist/es2019/services/agg-client/types.js +4 -0
- package/dist/es2019/services/agg-client/utils/queries/team-membership-query.js +36 -0
- package/dist/es2019/services/agg-client/utils/queries/user-query.js +39 -0
- package/dist/es2019/services/agg-client/utils/user-type.js +13 -0
- package/dist/es2019/services/base-client/index.js +66 -0
- package/dist/es2019/services/collaborationgraph-client/index.js +37 -0
- package/dist/es2019/services/constants.js +7 -0
- package/dist/es2019/services/directory-client/index.js +155 -0
- package/dist/es2019/services/graphql-client/index.js +1 -0
- package/dist/es2019/services/graphql-client/main.js +23 -0
- package/dist/es2019/services/graphql-client/types.js +1 -0
- package/dist/es2019/services/graphql-client/utils/index.js +76 -0
- package/dist/es2019/services/hooks/use-teams-client-setup.js +40 -0
- package/dist/es2019/services/identity-client/index.js +53 -0
- package/dist/es2019/services/identity-client/utils.js +167 -0
- package/dist/es2019/services/index.js +1 -0
- package/dist/es2019/services/invitations-client/index.js +65 -0
- package/dist/es2019/services/invitations-client/types.js +0 -0
- package/dist/es2019/services/invitations-client/utils/index.js +101 -0
- package/dist/es2019/services/invitations-client/utils/types.js +1 -0
- package/dist/es2019/services/legion-client/index.js +484 -0
- package/dist/es2019/services/legion-client/types.js +1 -0
- package/dist/es2019/services/main.js +541 -0
- package/dist/es2019/services/mutability-client/index.js +49 -0
- package/dist/es2019/services/mutability-client/types.js +0 -0
- package/dist/es2019/services/object-resolver-client/index.js +21 -0
- package/dist/es2019/services/object-resolver-client/types.js +12 -0
- package/dist/es2019/services/object-resolver-client/utils.js +53 -0
- package/dist/es2019/services/perms-client/index.js +25 -0
- package/dist/es2019/services/public-api-client/generated/data-contracts.js +0 -0
- package/dist/es2019/services/public-api-client/index.js +120 -0
- package/dist/es2019/services/rest-client/index.js +177 -0
- package/dist/es2019/services/rest-client/utils/cookie.js +13 -0
- package/dist/es2019/services/rest-client/utils/parse-error-message.js +20 -0
- package/dist/es2019/services/rest-client/utils/parse-response.js +14 -0
- package/dist/es2019/services/rest-client/utils/strip-uuid.js +4 -0
- package/dist/es2019/services/sentry/constants.js +10 -0
- package/dist/es2019/services/sentry/index.js +2 -0
- package/dist/es2019/services/sentry/main.js +107 -0
- package/dist/es2019/services/sentry/types.js +1 -0
- package/dist/es2019/services/sentry/utils/get-sentry-config.js +37 -0
- package/dist/es2019/services/sentry/utils/initialise-sentry.js +23 -0
- package/dist/es2019/services/sentry/utils/sentry-client.js +57 -0
- package/dist/es2019/services/sentry/utils/use-teams-sentry-client-setup.js +14 -0
- package/dist/es2019/services/teams-in-slack-client/index.js +32 -0
- package/dist/es2019/services/types.js +0 -0
- package/dist/es2019/services/use-query-light/index.js +2 -0
- package/dist/es2019/services/use-query-light/main.js +162 -0
- package/dist/es2019/services/use-query-light/types.js +27 -0
- package/dist/es2019/services/user-info-provider/index.js +1 -0
- package/dist/es2019/services/user-info-provider/main.js +44 -0
- package/dist/es2019/services/user-preferences-client/index.js +19 -0
- package/dist/es2019/types/config.js +0 -0
- package/dist/es2019/types/index.js +2 -0
- package/dist/es2019/types/links.js +16 -0
- package/dist/es2019/types/media.js +0 -0
- package/dist/es2019/types/membership.js +16 -0
- package/dist/es2019/types/slack.js +0 -0
- package/dist/es2019/types/team.js +1 -0
- package/dist/es2019/types/user.js +4 -0
- package/dist/esm/common/types.js +2 -0
- package/dist/esm/common/utils/ari.js +25 -0
- package/dist/esm/common/utils/error/index.js +176 -0
- package/dist/esm/common/utils/filter-null.js +3 -0
- package/dist/esm/common/utils/http.js +109 -0
- package/dist/esm/common/utils/index.js +2 -0
- package/dist/esm/common/utils/permissions/constants.js +61 -0
- package/dist/esm/common/utils/permissions/has-permission.js +34 -0
- package/dist/esm/common/utils/permissions/index.js +2 -0
- package/dist/esm/common/utils/permissions/types.js +5 -0
- package/dist/esm/common/utils/sort-teams.js +46 -0
- package/dist/esm/common/utils/status-code-handlers-provider.js +23 -0
- package/dist/esm/common/utils/team.js +12 -0
- package/dist/esm/common/utils/ufo/constants.js +15 -0
- package/dist/esm/common/utils/ufo/index.js +62 -0
- package/dist/esm/common/utils/ufo/utils.js +20 -0
- package/dist/esm/index.js +19 -0
- package/dist/esm/mocks/endpoints.js +261 -0
- package/dist/esm/mocks/generate-data.js +106 -0
- package/dist/esm/mocks/index.js +2 -0
- package/dist/esm/mocks/invitations.js +14 -0
- package/dist/esm/mocks/responses.js +473 -0
- package/dist/esm/mocks/team-link.js +19 -0
- package/dist/esm/mocks/team.js +143 -0
- package/dist/esm/mocks/user.js +95 -0
- package/dist/esm/mocks/with-faker.js +10 -0
- package/dist/esm/services/agg-client/index.js +130 -0
- package/dist/esm/services/agg-client/mocks/index.js +64 -0
- package/dist/esm/services/agg-client/types.js +4 -0
- package/dist/esm/services/agg-client/utils/queries/team-membership-query.js +2 -0
- package/dist/esm/services/agg-client/utils/queries/user-query.js +5 -0
- package/dist/esm/services/agg-client/utils/user-type.js +12 -0
- package/dist/esm/services/base-client/index.js +87 -0
- package/dist/esm/services/collaborationgraph-client/index.js +51 -0
- package/dist/esm/services/constants.js +7 -0
- package/dist/esm/services/directory-client/index.js +234 -0
- package/dist/esm/services/graphql-client/index.js +1 -0
- package/dist/esm/services/graphql-client/main.js +62 -0
- package/dist/esm/services/graphql-client/types.js +1 -0
- package/dist/esm/services/graphql-client/utils/index.js +149 -0
- package/dist/esm/services/hooks/use-teams-client-setup.js +39 -0
- package/dist/esm/services/identity-client/index.js +164 -0
- package/dist/esm/services/identity-client/utils.js +174 -0
- package/dist/esm/services/index.js +1 -0
- package/dist/esm/services/invitations-client/index.js +163 -0
- package/dist/esm/services/invitations-client/types.js +0 -0
- package/dist/esm/services/invitations-client/utils/index.js +108 -0
- package/dist/esm/services/invitations-client/utils/types.js +1 -0
- package/dist/esm/services/legion-client/index.js +1154 -0
- package/dist/esm/services/legion-client/types.js +1 -0
- package/dist/esm/services/main.js +1936 -0
- package/dist/esm/services/mutability-client/index.js +90 -0
- package/dist/esm/services/mutability-client/types.js +0 -0
- package/dist/esm/services/object-resolver-client/index.js +53 -0
- package/dist/esm/services/object-resolver-client/types.js +12 -0
- package/dist/esm/services/object-resolver-client/utils.js +61 -0
- package/dist/esm/services/perms-client/index.js +42 -0
- package/dist/esm/services/public-api-client/generated/data-contracts.js +0 -0
- package/dist/esm/services/public-api-client/index.js +260 -0
- package/dist/esm/services/rest-client/index.js +373 -0
- package/dist/esm/services/rest-client/utils/cookie.js +14 -0
- package/dist/esm/services/rest-client/utils/parse-error-message.js +55 -0
- package/dist/esm/services/rest-client/utils/parse-response.js +14 -0
- package/dist/esm/services/rest-client/utils/strip-uuid.js +4 -0
- package/dist/esm/services/sentry/constants.js +10 -0
- package/dist/esm/services/sentry/index.js +2 -0
- package/dist/esm/services/sentry/main.js +186 -0
- package/dist/esm/services/sentry/types.js +1 -0
- package/dist/esm/services/sentry/utils/get-sentry-config.js +38 -0
- package/dist/esm/services/sentry/utils/initialise-sentry.js +48 -0
- package/dist/esm/services/sentry/utils/sentry-client.js +108 -0
- package/dist/esm/services/sentry/utils/use-teams-sentry-client-setup.js +33 -0
- package/dist/esm/services/teams-in-slack-client/index.js +96 -0
- package/dist/esm/services/types.js +0 -0
- package/dist/esm/services/use-query-light/index.js +2 -0
- package/dist/esm/services/use-query-light/main.js +225 -0
- package/dist/esm/services/use-query-light/types.js +45 -0
- package/dist/esm/services/user-info-provider/index.js +1 -0
- package/dist/esm/services/user-info-provider/main.js +66 -0
- package/dist/esm/services/user-preferences-client/index.js +91 -0
- package/dist/esm/types/config.js +0 -0
- package/dist/esm/types/index.js +2 -0
- package/dist/esm/types/links.js +16 -0
- package/dist/esm/types/media.js +0 -0
- package/dist/esm/types/membership.js +17 -0
- package/dist/esm/types/slack.js +0 -0
- package/dist/esm/types/team.js +1 -0
- package/dist/esm/types/user.js +4 -0
- package/dist/types/common/types.d.ts +4 -0
- package/dist/types/common/utils/ari.d.ts +7 -0
- package/dist/types/common/utils/error/index.d.ts +91 -0
- package/dist/types/common/utils/filter-null.d.ts +1 -0
- package/dist/types/common/utils/http.d.ts +31 -0
- package/dist/types/common/utils/index.d.ts +2 -0
- package/dist/types/common/utils/permissions/constants.d.ts +23 -0
- package/dist/types/common/utils/permissions/has-permission.d.ts +31 -0
- package/dist/types/common/utils/permissions/index.d.ts +3 -0
- package/dist/types/common/utils/permissions/types.d.ts +7 -0
- package/dist/types/common/utils/sort-teams.d.ts +2 -0
- package/dist/types/common/utils/status-code-handlers-provider.d.ts +17 -0
- package/dist/types/common/utils/team.d.ts +5 -0
- package/dist/types/common/utils/ufo/constants.d.ts +5 -0
- package/dist/types/common/utils/ufo/index.d.ts +6 -0
- package/dist/types/common/utils/ufo/utils.d.ts +11 -0
- package/dist/types/index.d.ts +15 -0
- package/dist/types/mocks/endpoints.d.ts +22 -0
- package/dist/types/mocks/generate-data.d.ts +16 -0
- package/dist/types/mocks/index.d.ts +2 -0
- package/dist/types/mocks/invitations.d.ts +11 -0
- package/dist/types/mocks/responses.d.ts +75 -0
- package/dist/types/mocks/team-link.d.ts +7 -0
- package/dist/types/mocks/team.d.ts +14 -0
- package/dist/types/mocks/user.d.ts +15 -0
- package/dist/types/mocks/with-faker.d.ts +11 -0
- package/dist/types/services/agg-client/index.d.ts +12 -0
- package/dist/types/services/agg-client/mocks/index.d.ts +49 -0
- package/dist/types/services/agg-client/types.d.ts +13 -0
- package/dist/types/services/agg-client/utils/queries/team-membership-query.d.ts +33 -0
- package/dist/types/services/agg-client/utils/queries/user-query.d.ts +31 -0
- package/dist/types/services/agg-client/utils/user-type.d.ts +7 -0
- package/dist/types/services/base-client/index.d.ts +37 -0
- package/dist/types/services/collaborationgraph-client/index.d.ts +37 -0
- package/dist/types/services/constants.d.ts +2 -0
- package/dist/types/services/directory-client/index.d.ts +53 -0
- package/dist/types/services/graphql-client/index.d.ts +1 -0
- package/dist/types/services/graphql-client/main.d.ts +8 -0
- package/dist/types/services/graphql-client/types.d.ts +19 -0
- package/dist/types/services/graphql-client/utils/index.d.ts +3 -0
- package/dist/types/services/hooks/use-teams-client-setup.d.ts +12 -0
- package/dist/types/services/identity-client/index.d.ts +33 -0
- package/dist/types/services/identity-client/utils.d.ts +81 -0
- package/dist/types/services/index.d.ts +1 -0
- package/dist/types/services/invitations-client/index.d.ts +11 -0
- package/dist/types/services/invitations-client/types.d.ts +67 -0
- package/dist/types/services/invitations-client/utils/index.d.ts +7 -0
- package/dist/types/services/invitations-client/utils/types.d.ts +7 -0
- package/dist/types/services/legion-client/index.d.ts +133 -0
- package/dist/types/services/legion-client/types.d.ts +107 -0
- package/dist/types/services/main.d.ts +316 -0
- package/dist/types/services/mutability-client/index.d.ts +8 -0
- package/dist/types/services/mutability-client/types.d.ts +5 -0
- package/dist/types/services/object-resolver-client/index.d.ts +8 -0
- package/dist/types/services/object-resolver-client/types.d.ts +38 -0
- package/dist/types/services/object-resolver-client/utils.d.ts +18 -0
- package/dist/types/services/perms-client/index.d.ts +16 -0
- package/dist/types/services/public-api-client/generated/data-contracts.d.ts +112 -0
- package/dist/types/services/public-api-client/index.d.ts +41 -0
- package/dist/types/services/rest-client/index.d.ts +40 -0
- package/dist/types/services/rest-client/utils/cookie.d.ts +5 -0
- package/dist/types/services/rest-client/utils/parse-error-message.d.ts +1 -0
- package/dist/types/services/rest-client/utils/parse-response.d.ts +1 -0
- package/dist/types/services/rest-client/utils/strip-uuid.d.ts +1 -0
- package/dist/types/services/sentry/constants.d.ts +5 -0
- package/dist/types/services/sentry/index.d.ts +3 -0
- package/dist/types/services/sentry/main.d.ts +36 -0
- package/dist/types/services/sentry/types.d.ts +36 -0
- package/dist/types/services/sentry/utils/get-sentry-config.d.ts +2 -0
- package/dist/types/services/sentry/utils/initialise-sentry.d.ts +2 -0
- package/dist/types/services/sentry/utils/sentry-client.d.ts +9 -0
- package/dist/types/services/sentry/utils/use-teams-sentry-client-setup.d.ts +2 -0
- package/dist/types/services/teams-in-slack-client/index.d.ts +27 -0
- package/dist/types/services/types.d.ts +10 -0
- package/dist/types/services/use-query-light/index.d.ts +3 -0
- package/dist/types/services/use-query-light/main.d.ts +4 -0
- package/dist/types/services/use-query-light/types.d.ts +57 -0
- package/dist/types/services/user-info-provider/index.d.ts +1 -0
- package/dist/types/services/user-info-provider/main.d.ts +14 -0
- package/dist/types/services/user-preferences-client/index.d.ts +9 -0
- package/dist/types/types/config.d.ts +7 -0
- package/dist/types/types/index.d.ts +10 -0
- package/dist/types/types/links.d.ts +31 -0
- package/dist/types/types/media.d.ts +6 -0
- package/dist/types/types/membership.d.ts +35 -0
- package/dist/types/types/slack.d.ts +7 -0
- package/dist/types/types/team.d.ts +117 -0
- package/dist/types/types/user.d.ts +41 -0
- package/dist/types-ts4.5/common/types.d.ts +4 -0
- package/dist/types-ts4.5/common/utils/ari.d.ts +7 -0
- package/dist/types-ts4.5/common/utils/error/index.d.ts +91 -0
- package/dist/types-ts4.5/common/utils/filter-null.d.ts +1 -0
- package/dist/types-ts4.5/common/utils/http.d.ts +31 -0
- package/dist/types-ts4.5/common/utils/index.d.ts +2 -0
- package/dist/types-ts4.5/common/utils/permissions/constants.d.ts +23 -0
- package/dist/types-ts4.5/common/utils/permissions/has-permission.d.ts +31 -0
- package/dist/types-ts4.5/common/utils/permissions/index.d.ts +3 -0
- package/dist/types-ts4.5/common/utils/permissions/types.d.ts +26 -0
- package/dist/types-ts4.5/common/utils/sort-teams.d.ts +2 -0
- package/dist/types-ts4.5/common/utils/status-code-handlers-provider.d.ts +17 -0
- package/dist/types-ts4.5/common/utils/team.d.ts +5 -0
- package/dist/types-ts4.5/common/utils/ufo/constants.d.ts +64 -0
- package/dist/types-ts4.5/common/utils/ufo/index.d.ts +6 -0
- package/dist/types-ts4.5/common/utils/ufo/utils.d.ts +11 -0
- package/dist/types-ts4.5/index.d.ts +15 -0
- package/dist/types-ts4.5/mocks/endpoints.d.ts +22 -0
- package/dist/types-ts4.5/mocks/generate-data.d.ts +16 -0
- package/dist/types-ts4.5/mocks/index.d.ts +2 -0
- package/dist/types-ts4.5/mocks/invitations.d.ts +11 -0
- package/dist/types-ts4.5/mocks/responses.d.ts +75 -0
- package/dist/types-ts4.5/mocks/team-link.d.ts +7 -0
- package/dist/types-ts4.5/mocks/team.d.ts +14 -0
- package/dist/types-ts4.5/mocks/user.d.ts +15 -0
- package/dist/types-ts4.5/mocks/with-faker.d.ts +11 -0
- package/dist/types-ts4.5/services/agg-client/index.d.ts +12 -0
- package/dist/types-ts4.5/services/agg-client/mocks/index.d.ts +49 -0
- package/dist/types-ts4.5/services/agg-client/types.d.ts +13 -0
- package/dist/types-ts4.5/services/agg-client/utils/queries/team-membership-query.d.ts +33 -0
- package/dist/types-ts4.5/services/agg-client/utils/queries/user-query.d.ts +31 -0
- package/dist/types-ts4.5/services/agg-client/utils/user-type.d.ts +7 -0
- package/dist/types-ts4.5/services/base-client/index.d.ts +37 -0
- package/dist/types-ts4.5/services/collaborationgraph-client/index.d.ts +37 -0
- package/dist/types-ts4.5/services/constants.d.ts +2 -0
- package/dist/types-ts4.5/services/directory-client/index.d.ts +53 -0
- package/dist/types-ts4.5/services/graphql-client/index.d.ts +1 -0
- package/dist/types-ts4.5/services/graphql-client/main.d.ts +8 -0
- package/dist/types-ts4.5/services/graphql-client/types.d.ts +19 -0
- package/dist/types-ts4.5/services/graphql-client/utils/index.d.ts +3 -0
- package/dist/types-ts4.5/services/hooks/use-teams-client-setup.d.ts +12 -0
- package/dist/types-ts4.5/services/identity-client/index.d.ts +33 -0
- package/dist/types-ts4.5/services/identity-client/utils.d.ts +81 -0
- package/dist/types-ts4.5/services/index.d.ts +1 -0
- package/dist/types-ts4.5/services/invitations-client/index.d.ts +11 -0
- package/dist/types-ts4.5/services/invitations-client/types.d.ts +67 -0
- package/dist/types-ts4.5/services/invitations-client/utils/index.d.ts +7 -0
- package/dist/types-ts4.5/services/invitations-client/utils/types.d.ts +7 -0
- package/dist/types-ts4.5/services/legion-client/index.d.ts +133 -0
- package/dist/types-ts4.5/services/legion-client/types.d.ts +107 -0
- package/dist/types-ts4.5/services/main.d.ts +316 -0
- package/dist/types-ts4.5/services/mutability-client/index.d.ts +8 -0
- package/dist/types-ts4.5/services/mutability-client/types.d.ts +5 -0
- package/dist/types-ts4.5/services/object-resolver-client/index.d.ts +8 -0
- package/dist/types-ts4.5/services/object-resolver-client/types.d.ts +38 -0
- package/dist/types-ts4.5/services/object-resolver-client/utils.d.ts +18 -0
- package/dist/types-ts4.5/services/perms-client/index.d.ts +16 -0
- package/dist/types-ts4.5/services/public-api-client/generated/data-contracts.d.ts +112 -0
- package/dist/types-ts4.5/services/public-api-client/index.d.ts +41 -0
- package/dist/types-ts4.5/services/rest-client/index.d.ts +40 -0
- package/dist/types-ts4.5/services/rest-client/utils/cookie.d.ts +5 -0
- package/dist/types-ts4.5/services/rest-client/utils/parse-error-message.d.ts +1 -0
- package/dist/types-ts4.5/services/rest-client/utils/parse-response.d.ts +1 -0
- package/dist/types-ts4.5/services/rest-client/utils/strip-uuid.d.ts +1 -0
- package/dist/types-ts4.5/services/sentry/constants.d.ts +5 -0
- package/dist/types-ts4.5/services/sentry/index.d.ts +3 -0
- package/dist/types-ts4.5/services/sentry/main.d.ts +36 -0
- package/dist/types-ts4.5/services/sentry/types.d.ts +36 -0
- package/dist/types-ts4.5/services/sentry/utils/get-sentry-config.d.ts +2 -0
- package/dist/types-ts4.5/services/sentry/utils/initialise-sentry.d.ts +2 -0
- package/dist/types-ts4.5/services/sentry/utils/sentry-client.d.ts +9 -0
- package/dist/types-ts4.5/services/sentry/utils/use-teams-sentry-client-setup.d.ts +2 -0
- package/dist/types-ts4.5/services/teams-in-slack-client/index.d.ts +27 -0
- package/dist/types-ts4.5/services/types.d.ts +10 -0
- package/dist/types-ts4.5/services/use-query-light/index.d.ts +3 -0
- package/dist/types-ts4.5/services/use-query-light/main.d.ts +7 -0
- package/dist/types-ts4.5/services/use-query-light/types.d.ts +57 -0
- package/dist/types-ts4.5/services/user-info-provider/index.d.ts +1 -0
- package/dist/types-ts4.5/services/user-info-provider/main.d.ts +14 -0
- package/dist/types-ts4.5/services/user-preferences-client/index.d.ts +9 -0
- package/dist/types-ts4.5/types/config.d.ts +7 -0
- package/dist/types-ts4.5/types/index.d.ts +10 -0
- package/dist/types-ts4.5/types/links.d.ts +31 -0
- package/dist/types-ts4.5/types/media.d.ts +6 -0
- package/dist/types-ts4.5/types/membership.d.ts +35 -0
- package/dist/types-ts4.5/types/slack.d.ts +7 -0
- package/dist/types-ts4.5/types/team.d.ts +117 -0
- package/dist/types-ts4.5/types/user.d.ts +51 -0
- package/mocks/package.json +15 -0
- package/package.json +111 -0
- package/permissions/package.json +15 -0
- package/public/package.json +15 -0
- package/report.api.md +1210 -0
- package/scripts/generate-docs.ts +31 -0
- package/scripts/utils.ts +269 -0
- package/sentry/package.json +15 -0
- package/types/package.json +15 -0
- package/ufo/package.json +15 -0
- package/use-query-light/package.json +15 -0
- package/user-info-provider/package.json +15 -0
- package/utils/package.json +15 -0
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { DEFAULT_CONFIG } from '../constants';
|
|
2
|
+
import { RestClient } from '../rest-client';
|
|
3
|
+
import { dataURItoFile, toManageAPIInput, transformUserManageConfig } from './utils';
|
|
4
|
+
const defaultConfig = {
|
|
5
|
+
serviceUrl: `${DEFAULT_CONFIG.stargateRoot}/users`
|
|
6
|
+
};
|
|
7
|
+
export class IdentityClient extends RestClient {
|
|
8
|
+
constructor(config = {}) {
|
|
9
|
+
super({
|
|
10
|
+
...defaultConfig,
|
|
11
|
+
...config
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
async getUserManageConfig(userId) {
|
|
15
|
+
return this.getResourceCached(`/${userId}/manage`).then(resp => {
|
|
16
|
+
return transformUserManageConfig(resp);
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* @deprecated
|
|
22
|
+
* User fetchUserAvatarInfo instead
|
|
23
|
+
*/
|
|
24
|
+
async getMyAvatarUploadedStatus(userId) {
|
|
25
|
+
return this.fetchUserAvatarInfo(userId);
|
|
26
|
+
}
|
|
27
|
+
async deleteAvatar(userId) {
|
|
28
|
+
return this.deleteResource(`/${userId}/manage/avatar`);
|
|
29
|
+
}
|
|
30
|
+
async fetchUserAvatarInfo(userId) {
|
|
31
|
+
return this.getResource(`/${userId}/manage/avatar`);
|
|
32
|
+
}
|
|
33
|
+
async updateUser({
|
|
34
|
+
id,
|
|
35
|
+
...user
|
|
36
|
+
}) {
|
|
37
|
+
return this.patchResource(`/${id}/manage/profile`, toManageAPIInput(user));
|
|
38
|
+
}
|
|
39
|
+
async updateUserAvatar({
|
|
40
|
+
id,
|
|
41
|
+
fileURI
|
|
42
|
+
}) {
|
|
43
|
+
const fileObject = dataURItoFile(fileURI);
|
|
44
|
+
const formData = new FormData();
|
|
45
|
+
formData.append('file', fileObject);
|
|
46
|
+
const response = await this.makeRequest(`/${id}/manage/avatar`, {
|
|
47
|
+
method: 'PUT',
|
|
48
|
+
body: formData
|
|
49
|
+
});
|
|
50
|
+
return response.url;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
export default new IdentityClient();
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { formatInTimeZone } from 'date-fns-tz';
|
|
2
|
+
// Key (left-side) is field name which is used in our app.
|
|
3
|
+
// Value (right-side) is field name which is used by data in services
|
|
4
|
+
const PROFILE_PROPS_MAP = new Map([['id', 'account_id'], ['fullName', 'name'], ['nickname', 'nickname'], ['timezone', 'zoneinfo'], ['locale', 'locale'], ['avatarUrl', 'picture'], ['email', 'email']]);
|
|
5
|
+
|
|
6
|
+
// Key (left-side) is field name which is used in our app.
|
|
7
|
+
// Value (right-side) is field name which is used by data in services
|
|
8
|
+
const EXTENDED_PROFILE_PROPS_MAP = new Map([['title', 'job_title'], ['department', 'department'], ['companyName', 'organization'], ['location', 'location'], ['phoneNumber', 'phone_number']]);
|
|
9
|
+
export const fromManageAPIResponse = res => {
|
|
10
|
+
const data = res.account;
|
|
11
|
+
const extendedData = data && data.extended_profile || {};
|
|
12
|
+
if (!data) {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
const timeZone = data.zoneinfo;
|
|
16
|
+
const localTime = ({
|
|
17
|
+
format
|
|
18
|
+
}) => {
|
|
19
|
+
if (!timeZone) {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
try {
|
|
23
|
+
return formatInTimeZone(new Date(), timeZone, format);
|
|
24
|
+
} catch (error) {
|
|
25
|
+
// TODO: PTC-4908 send error to sentry for reporting
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
const profileProps = Array.from(PROFILE_PROPS_MAP.keys()).reduce((acc, key) => {
|
|
30
|
+
if (PROFILE_PROPS_MAP.has(key)) {
|
|
31
|
+
acc[key] = data[PROFILE_PROPS_MAP.get(key)];
|
|
32
|
+
}
|
|
33
|
+
return acc;
|
|
34
|
+
}, {});
|
|
35
|
+
const extendedProfileProps = Array.from(EXTENDED_PROFILE_PROPS_MAP.keys()).reduce((acc, key) => {
|
|
36
|
+
if (EXTENDED_PROFILE_PROPS_MAP.has(key)) {
|
|
37
|
+
acc[key] = extendedData[EXTENDED_PROFILE_PROPS_MAP.get(key)];
|
|
38
|
+
}
|
|
39
|
+
return acc;
|
|
40
|
+
}, {});
|
|
41
|
+
return {
|
|
42
|
+
...profileProps,
|
|
43
|
+
...extendedProfileProps,
|
|
44
|
+
localTime
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
// Copied from ptc-common/user type to not messing up dependency
|
|
49
|
+
export let FieldType = /*#__PURE__*/function (FieldType) {
|
|
50
|
+
FieldType["FullName"] = "fullName";
|
|
51
|
+
FieldType["Nickname"] = "nickname";
|
|
52
|
+
// aka `Public name`
|
|
53
|
+
FieldType["Title"] = "title";
|
|
54
|
+
FieldType["Department"] = "department";
|
|
55
|
+
FieldType["CompanyName"] = "companyName";
|
|
56
|
+
FieldType["Location"] = "location";
|
|
57
|
+
FieldType["Timezone"] = "timezone";
|
|
58
|
+
FieldType["Email"] = "email";
|
|
59
|
+
FieldType["PhoneNumber"] = "phoneNumber";
|
|
60
|
+
FieldType["Avatar"] = "picture";
|
|
61
|
+
FieldType["Language"] = "language";
|
|
62
|
+
FieldType["LocalTime"] = "localTime";
|
|
63
|
+
FieldType["RemoteWeekdayIndex"] = "remoteWeekdayIndex";
|
|
64
|
+
FieldType["RemoteWeekdayString"] = "remoteWeekdayString";
|
|
65
|
+
FieldType["RemoteTimeString"] = "remoteTimeString";
|
|
66
|
+
return FieldType;
|
|
67
|
+
}({});
|
|
68
|
+
export const MUTABILITY_DETAILS_MAP = {
|
|
69
|
+
fullName: 'name',
|
|
70
|
+
nickname: 'nickname',
|
|
71
|
+
timezone: 'zoneinfo',
|
|
72
|
+
locale: 'locale',
|
|
73
|
+
email: 'email',
|
|
74
|
+
// extended profile
|
|
75
|
+
title: 'extended_profile.job_title',
|
|
76
|
+
phoneNumber: 'extended_profile.phone_number',
|
|
77
|
+
companyName: 'extended_profile.organization',
|
|
78
|
+
department: 'extended_profile.department',
|
|
79
|
+
location: 'extended_profile.location'
|
|
80
|
+
};
|
|
81
|
+
export const CUSTOM_FIELD_PLACE = {
|
|
82
|
+
email: 'email.initiateChange',
|
|
83
|
+
picture: 'avatar'
|
|
84
|
+
};
|
|
85
|
+
const getFieldConfig = (data, field) => {
|
|
86
|
+
if ((field === 'email' || field === 'picture') && CUSTOM_FIELD_PLACE[field]) {
|
|
87
|
+
return data[CUSTOM_FIELD_PLACE[field]];
|
|
88
|
+
}
|
|
89
|
+
const mappedFieldKey = field in MUTABILITY_DETAILS_MAP ? MUTABILITY_DETAILS_MAP[field] : undefined;
|
|
90
|
+
if (!mappedFieldKey) {
|
|
91
|
+
return undefined;
|
|
92
|
+
}
|
|
93
|
+
const profileWrite = data['profile.write'];
|
|
94
|
+
return profileWrite[mappedFieldKey];
|
|
95
|
+
};
|
|
96
|
+
const convertFieldKeyToFieldType = key => {
|
|
97
|
+
// Check if the key can be mapped to a FieldType value
|
|
98
|
+
if (Object.values(FieldType).includes(key)) {
|
|
99
|
+
return key;
|
|
100
|
+
}
|
|
101
|
+
return undefined;
|
|
102
|
+
};
|
|
103
|
+
const getMutabilityConstraintFor = (data, field) => {
|
|
104
|
+
const fieldConfig = getFieldConfig(data, field);
|
|
105
|
+
if (!fieldConfig || fieldConfig.allowed) {
|
|
106
|
+
return undefined;
|
|
107
|
+
}
|
|
108
|
+
const convertedField = convertFieldKeyToFieldType(field);
|
|
109
|
+
if (!convertedField) {
|
|
110
|
+
return undefined;
|
|
111
|
+
}
|
|
112
|
+
const reason = fieldConfig.reason;
|
|
113
|
+
return {
|
|
114
|
+
field: convertedField,
|
|
115
|
+
reason: reason && reason.key || null
|
|
116
|
+
};
|
|
117
|
+
};
|
|
118
|
+
export const transformUserManageConfig = data => ({
|
|
119
|
+
mutabilityConstraints: Object.keys(MUTABILITY_DETAILS_MAP).map(field => getMutabilityConstraintFor(data, field)).filter(constraint => constraint !== undefined)
|
|
120
|
+
});
|
|
121
|
+
export const toManageAPIInput = input => {
|
|
122
|
+
const output = {
|
|
123
|
+
extended_profile: {}
|
|
124
|
+
};
|
|
125
|
+
Object.keys(input).forEach(key => {
|
|
126
|
+
if (PROFILE_PROPS_MAP.has(key)) {
|
|
127
|
+
output[PROFILE_PROPS_MAP.get(key)] = input[key];
|
|
128
|
+
}
|
|
129
|
+
if (EXTENDED_PROFILE_PROPS_MAP.has(key)) {
|
|
130
|
+
output.extended_profile[EXTENDED_PROFILE_PROPS_MAP.get(key)] = input[key];
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
return output;
|
|
134
|
+
};
|
|
135
|
+
export function dataURItoFile(dataURI, filename = 'untitled') {
|
|
136
|
+
if (dataURI.length === 0) {
|
|
137
|
+
throw new Error('dataURI not found');
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// convert base64/URLEncoded data component to raw binary data held in a string
|
|
141
|
+
const byteString = dataURI.split(',')[0].includes('base64') ? atob(dataURI.split(',')[1]) : decodeURIComponent(dataURI.split(',')[1]);
|
|
142
|
+
|
|
143
|
+
// separate out the mime component
|
|
144
|
+
let mimeString;
|
|
145
|
+
try {
|
|
146
|
+
mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
|
|
147
|
+
} catch (e) {
|
|
148
|
+
mimeString = 'unknown';
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// write the bytes of the string to a typed array
|
|
152
|
+
const intArray = new Uint8Array(byteString.length);
|
|
153
|
+
for (let i = 0; i < byteString.length; i++) {
|
|
154
|
+
intArray[i] = byteString.charCodeAt(i);
|
|
155
|
+
}
|
|
156
|
+
const blob = new Blob([intArray], {
|
|
157
|
+
type: mimeString
|
|
158
|
+
});
|
|
159
|
+
try {
|
|
160
|
+
return new File([blob], filename, {
|
|
161
|
+
type: mimeString
|
|
162
|
+
});
|
|
163
|
+
} catch (e) {
|
|
164
|
+
// IE11 and Safari does not support the File constructor.
|
|
165
|
+
return blob;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { teamsClient, TeamsClient } from './main';
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { DEFAULT_CONFIG } from '../constants';
|
|
2
|
+
import { RestClient } from '../rest-client';
|
|
3
|
+
import { logException } from '../sentry/main';
|
|
4
|
+
import { removeDuplicateRecommendations } from './utils';
|
|
5
|
+
const PRODUCT_RECCOMENDATIONS = '/v1/product-recommendations';
|
|
6
|
+
const PRODUCT_JOIN_OR_REQUEST_BULK = '/v1/access-requests/bulk/request';
|
|
7
|
+
const ALL_SUPPORTED_PRODUCTS = ['confluence', 'jira', 'jira-core', 'jira-servicedesk', 'jira-software', 'jira-incident-manager', 'jira-product-discovery', 'opsgenie', 'statuspage', 'avocado', 'townsquare', 'compass', 'avp', 'beacon', 'mercury'];
|
|
8
|
+
export class InvitationsClient extends RestClient {
|
|
9
|
+
constructor(serviceUrl, config) {
|
|
10
|
+
super({
|
|
11
|
+
serviceUrl,
|
|
12
|
+
config
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
async getProductRecommendationsInner(supportedProducts = ALL_SUPPORTED_PRODUCTS, capabilities) {
|
|
16
|
+
try {
|
|
17
|
+
const orgId = this.getOrgId();
|
|
18
|
+
const queryProducts = supportedProducts && supportedProducts.length > 0 ? supportedProducts : ALL_SUPPORTED_PRODUCTS;
|
|
19
|
+
const productQueryParams = queryProducts.map(product => `product=${product}`).join('&');
|
|
20
|
+
const capabilityQueryParams = capabilities && capabilities.length > 0 ? '&' + capabilities.map(capability => `capability=${capability}`).join('&') : '';
|
|
21
|
+
const url = `${PRODUCT_RECCOMENDATIONS}?orgId=${orgId}&${productQueryParams}${capabilityQueryParams}`;
|
|
22
|
+
return await this.getResource(url);
|
|
23
|
+
} catch (error) {
|
|
24
|
+
this.logException(error, 'An error occurred while getting product recommendations.');
|
|
25
|
+
throw error;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
async getProductRecommendations(supportedProducts = ALL_SUPPORTED_PRODUCTS, capabilities) {
|
|
29
|
+
// This endpoint may return duplicate resource ARIs with a different mode.
|
|
30
|
+
const result = await this.getProductRecommendationsInner(supportedProducts, capabilities);
|
|
31
|
+
try {
|
|
32
|
+
const deduplicatedResult = removeDuplicateRecommendations(result);
|
|
33
|
+
return deduplicatedResult;
|
|
34
|
+
} catch (error) {
|
|
35
|
+
this.logException(error, 'An error occurred while deduplicating product recommendations.');
|
|
36
|
+
throw error;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
async joinOrRequestDefaultAccessToProductsBulk(simplifiedRequest) {
|
|
40
|
+
if (simplifiedRequest.productAris.length === 0) {
|
|
41
|
+
return Promise.resolve([]);
|
|
42
|
+
}
|
|
43
|
+
try {
|
|
44
|
+
const resources = simplifiedRequest.productAris.map(ari => ({
|
|
45
|
+
ari,
|
|
46
|
+
role: 'product/member'
|
|
47
|
+
}));
|
|
48
|
+
const request = {
|
|
49
|
+
resources,
|
|
50
|
+
note: simplifiedRequest.note,
|
|
51
|
+
accessMode: simplifiedRequest.accessMode,
|
|
52
|
+
source: simplifiedRequest.source
|
|
53
|
+
};
|
|
54
|
+
return await this.postResource(PRODUCT_JOIN_OR_REQUEST_BULK, request);
|
|
55
|
+
} catch (error) {
|
|
56
|
+
this.logException(error, 'An error occurred while joining or requesting access to products.');
|
|
57
|
+
throw error;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// eslint-disable-next-line import/no-anonymous-default-export
|
|
63
|
+
export default new InvitationsClient(DEFAULT_CONFIG.invitationsServiceUrl, {
|
|
64
|
+
logException
|
|
65
|
+
});
|
|
File without changes
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Determines which capability is more desirable.
|
|
3
|
+
* Users desire direct access over request access since it's instant.
|
|
4
|
+
* @returns 0 if equal, -1 if a is more desirable, 1 if b is more desirable.
|
|
5
|
+
*/
|
|
6
|
+
const compareCapability = (a, b) => {
|
|
7
|
+
if (a === b) {
|
|
8
|
+
return 0;
|
|
9
|
+
}
|
|
10
|
+
return a === 'DIRECT_ACCESS' ? -1 : 1;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Determines which mode is more desirable.
|
|
15
|
+
* Atlassian prefers to provide open access over domain restricted access.
|
|
16
|
+
* Both of these modes have already been enabled by an admin.
|
|
17
|
+
* If mode is undefined, it is deemed least desirable.
|
|
18
|
+
* @returns 0 if equal, -1 if a is more open, 1 if b is more open.
|
|
19
|
+
*/
|
|
20
|
+
const compareMode = (a, b) => {
|
|
21
|
+
if (a === b) {
|
|
22
|
+
return 0;
|
|
23
|
+
}
|
|
24
|
+
if (!a) {
|
|
25
|
+
return 1;
|
|
26
|
+
}
|
|
27
|
+
if (!b) {
|
|
28
|
+
return -1;
|
|
29
|
+
}
|
|
30
|
+
return a === 'OPEN' ? -1 : 1;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Determine if a recommendation is more desirable than another.
|
|
35
|
+
* Atlassian prefers a better capability over any mode setting.
|
|
36
|
+
* The mode will only be compared if the capabilities are equal.
|
|
37
|
+
* If both capability and mode are equal, the recommendations are considered the same.
|
|
38
|
+
*
|
|
39
|
+
* Assumes recommendations have the same resource ID.
|
|
40
|
+
* Do not compare recommendations with different resource IDs, as it does not make sense.
|
|
41
|
+
*
|
|
42
|
+
* @returns 0 if capability and mode are equal, -1 if a is more desirable, 1 if b is more desirable.
|
|
43
|
+
*/
|
|
44
|
+
const compareRecommendations = (a, b) => {
|
|
45
|
+
if (a.resourceId !== b.resourceId) {
|
|
46
|
+
throw new Error('Recommendations must have the same resource ID');
|
|
47
|
+
}
|
|
48
|
+
if (compareCapability(a.capability, b.capability) < 0) {
|
|
49
|
+
return -1;
|
|
50
|
+
} else if (compareCapability(a.capability, b.capability) > 0) {
|
|
51
|
+
return 1;
|
|
52
|
+
} else if (compareMode(a.mode, b.mode) < 0) {
|
|
53
|
+
return -1;
|
|
54
|
+
} else if (compareMode(a.mode, b.mode) > 0) {
|
|
55
|
+
return 1;
|
|
56
|
+
}
|
|
57
|
+
return 0;
|
|
58
|
+
};
|
|
59
|
+
const toRecommendation = recommendation => {
|
|
60
|
+
const {
|
|
61
|
+
capability,
|
|
62
|
+
...rest
|
|
63
|
+
} = recommendation;
|
|
64
|
+
return {
|
|
65
|
+
...rest
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Removes duplicate recommendations with the same resource ARI.
|
|
71
|
+
* When a collision occurs, select the recommendation with the most desirable capability and mode.
|
|
72
|
+
* @returns a recommendation response with unique resource ARIs.
|
|
73
|
+
*/
|
|
74
|
+
export const removeDuplicateRecommendations = recommendations => {
|
|
75
|
+
const {
|
|
76
|
+
DIRECT_ACCESS,
|
|
77
|
+
REQUEST_ACCESS
|
|
78
|
+
} = recommendations.capability;
|
|
79
|
+
const uniqueRecommendations = {};
|
|
80
|
+
const allRecommendations = [...DIRECT_ACCESS.map(recommendation => ({
|
|
81
|
+
...recommendation,
|
|
82
|
+
capability: 'DIRECT_ACCESS'
|
|
83
|
+
})), ...REQUEST_ACCESS.map(recommendation => ({
|
|
84
|
+
...recommendation,
|
|
85
|
+
capability: 'REQUEST_ACCESS'
|
|
86
|
+
}))];
|
|
87
|
+
allRecommendations.forEach(recommendation => {
|
|
88
|
+
const existing = uniqueRecommendations[recommendation.resourceId];
|
|
89
|
+
if (existing && compareRecommendations(existing, recommendation) <= 0) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
uniqueRecommendations[recommendation.resourceId] = recommendation;
|
|
93
|
+
});
|
|
94
|
+
const allUniqueRecommendations = Object.values(uniqueRecommendations);
|
|
95
|
+
return {
|
|
96
|
+
capability: {
|
|
97
|
+
DIRECT_ACCESS: allUniqueRecommendations.filter(recommendation => recommendation.capability === 'DIRECT_ACCESS').map(toRecommendation),
|
|
98
|
+
REQUEST_ACCESS: allUniqueRecommendations.filter(recommendation => recommendation.capability === 'REQUEST_ACCESS').map(toRecommendation)
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|