@strapi/admin 5.58.0 → 5.59.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/dist/admin/admin/src/StrapiApp.js.map +1 -1
- package/dist/admin/admin/src/StrapiApp.mjs.map +1 -1
- package/dist/admin/admin/src/components/ConfirmDialog.js +10 -9
- package/dist/admin/admin/src/components/ConfirmDialog.js.map +1 -1
- package/dist/admin/admin/src/components/ConfirmDialog.mjs +10 -9
- package/dist/admin/admin/src/components/ConfirmDialog.mjs.map +1 -1
- package/dist/admin/admin/src/components/Filters.js +57 -12
- package/dist/admin/admin/src/components/Filters.js.map +1 -1
- package/dist/admin/admin/src/components/Filters.mjs +57 -12
- package/dist/admin/admin/src/components/Filters.mjs.map +1 -1
- package/dist/admin/admin/src/components/Form.js +3 -1
- package/dist/admin/admin/src/components/Form.js.map +1 -1
- package/dist/admin/admin/src/components/Form.mjs +3 -1
- package/dist/admin/admin/src/components/Form.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Enumeration.js +2 -1
- package/dist/admin/admin/src/components/FormInputs/Enumeration.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs +2 -1
- package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs.map +1 -1
- package/dist/admin/admin/src/components/LeftMenu.js +5 -1
- package/dist/admin/admin/src/components/LeftMenu.js.map +1 -1
- package/dist/admin/admin/src/components/LeftMenu.mjs +5 -1
- package/dist/admin/admin/src/components/LeftMenu.mjs.map +1 -1
- package/dist/admin/admin/src/components/PageHelpers.js +2 -1
- package/dist/admin/admin/src/components/PageHelpers.js.map +1 -1
- package/dist/admin/admin/src/components/PageHelpers.mjs +2 -1
- package/dist/admin/admin/src/components/PageHelpers.mjs.map +1 -1
- package/dist/admin/admin/src/components/Pagination.js +7 -6
- package/dist/admin/admin/src/components/Pagination.js.map +1 -1
- package/dist/admin/admin/src/components/Pagination.mjs +7 -6
- package/dist/admin/admin/src/components/Pagination.mjs.map +1 -1
- package/dist/admin/admin/src/components/RelativeTime.js +2 -1
- package/dist/admin/admin/src/components/RelativeTime.js.map +1 -1
- package/dist/admin/admin/src/components/RelativeTime.mjs +2 -1
- package/dist/admin/admin/src/components/RelativeTime.mjs.map +1 -1
- package/dist/admin/admin/src/components/SubNav.js +6 -12
- package/dist/admin/admin/src/components/SubNav.js.map +1 -1
- package/dist/admin/admin/src/components/SubNav.mjs +7 -13
- package/dist/admin/admin/src/components/SubNav.mjs.map +1 -1
- package/dist/admin/admin/src/components/Table.js +3 -1
- package/dist/admin/admin/src/components/Table.js.map +1 -1
- package/dist/admin/admin/src/components/Table.mjs +3 -1
- package/dist/admin/admin/src/components/Table.mjs.map +1 -1
- package/dist/admin/admin/src/components/UpsellBanner.js.map +1 -1
- package/dist/admin/admin/src/components/UpsellBanner.mjs.map +1 -1
- package/dist/admin/admin/src/components/WidgetRoot.js.map +1 -1
- package/dist/admin/admin/src/components/WidgetRoot.mjs.map +1 -1
- package/dist/admin/admin/src/constants.js.map +1 -1
- package/dist/admin/admin/src/constants.mjs.map +1 -1
- package/dist/admin/admin/src/core/apis/Plugin.js.map +1 -1
- package/dist/admin/admin/src/core/apis/Plugin.mjs.map +1 -1
- package/dist/admin/admin/src/features/Auth.js +2 -1
- package/dist/admin/admin/src/features/Auth.js.map +1 -1
- package/dist/admin/admin/src/features/Auth.mjs +2 -1
- package/dist/admin/admin/src/features/Auth.mjs.map +1 -1
- package/dist/admin/admin/src/features/StrapiApp.js.map +1 -1
- package/dist/admin/admin/src/features/StrapiApp.mjs.map +1 -1
- package/dist/admin/admin/src/features/Tracking.js.map +1 -1
- package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.js.map +1 -1
- package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.mjs.map +1 -1
- package/dist/admin/admin/src/pages/ProfilePage.js +2 -2
- package/dist/admin/admin/src/pages/ProfilePage.js.map +1 -1
- package/dist/admin/admin/src/pages/ProfilePage.mjs +2 -2
- package/dist/admin/admin/src/pages/ProfilePage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/SettingsNav.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.js +4 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.mjs +4 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js +3 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.mjs +3 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenTypeSelect.js +2 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenTypeSelect.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenTypeSelect.mjs +2 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenTypeSelect.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.js +6 -5
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.mjs +6 -5
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.js +2 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.mjs +2 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/transformPermissionsData.js +4 -4
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/transformPermissionsData.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/transformPermissionsData.mjs +4 -4
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/transformPermissionsData.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js +1 -2
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs +1 -2
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.js +9 -4
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.mjs +9 -4
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.js +15 -9
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.mjs +15 -9
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.js +5 -2
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.mjs +5 -2
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.js +2 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.mjs +2 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js +2 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.mjs +2 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js +2 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.mjs +2 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js +3 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.mjs +3 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/components/NewUserForm.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/components/NewUserForm.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.js +4 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.mjs +4 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.js +18 -3
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.mjs +18 -3
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.mjs.map +1 -1
- package/dist/admin/admin/src/router.js.map +1 -1
- package/dist/admin/admin/src/router.mjs.map +1 -1
- package/dist/admin/admin/src/services/users.js.map +1 -1
- package/dist/admin/admin/src/services/users.mjs.map +1 -1
- package/dist/admin/admin/src/translations/eu.json.js +1 -1
- package/dist/admin/admin/src/translations/eu.json.mjs +1 -1
- package/dist/admin/admin/src/utils/cookies.js +7 -6
- package/dist/admin/admin/src/utils/cookies.js.map +1 -1
- package/dist/admin/admin/src/utils/cookies.mjs +7 -6
- package/dist/admin/admin/src/utils/cookies.mjs.map +1 -1
- package/dist/admin/admin/tests/utils.js +2 -1
- package/dist/admin/admin/tests/utils.js.map +1 -1
- package/dist/admin/admin/tests/utils.mjs +2 -1
- package/dist/admin/admin/tests/utils.mjs.map +1 -1
- package/dist/admin/shared/utils/auth-cookie-path.js +13 -10
- package/dist/admin/shared/utils/auth-cookie-path.js.map +1 -1
- package/dist/admin/shared/utils/auth-cookie-path.mjs +13 -10
- package/dist/admin/shared/utils/auth-cookie-path.mjs.map +1 -1
- package/dist/admin/shared/utils/get-project-type.js +3 -3
- package/dist/admin/shared/utils/get-project-type.js.map +1 -1
- package/dist/admin/shared/utils/get-project-type.mjs +3 -3
- package/dist/admin/shared/utils/get-project-type.mjs.map +1 -1
- package/dist/admin/src/components/Filters.d.ts +1 -1
- package/dist/admin/src/components/Form.d.ts +1 -1
- package/dist/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.d.ts +1 -1
- package/dist/admin/src/utils/cookies.d.ts +7 -6
- package/dist/ee/server/src/services/seat-enforcement.d.ts.map +1 -1
- package/dist/ee/server/src/validation/role.d.ts.map +1 -1
- package/dist/server/ee/server/src/audit-logs/utils/csv.js +3 -3
- package/dist/server/ee/server/src/audit-logs/utils/csv.js.map +1 -1
- package/dist/server/ee/server/src/audit-logs/utils/csv.mjs +3 -3
- package/dist/server/ee/server/src/audit-logs/utils/csv.mjs.map +1 -1
- package/dist/server/ee/server/src/services/seat-enforcement.js.map +1 -1
- package/dist/server/ee/server/src/services/seat-enforcement.mjs.map +1 -1
- package/dist/server/ee/server/src/validation/role.js +4 -2
- package/dist/server/ee/server/src/validation/role.js.map +1 -1
- package/dist/server/ee/server/src/validation/role.mjs +4 -2
- package/dist/server/ee/server/src/validation/role.mjs.map +1 -1
- package/dist/server/server/src/ai/services/ai.js.map +1 -1
- package/dist/server/server/src/ai/services/ai.mjs.map +1 -1
- package/dist/server/server/src/controllers/admin.js +11 -12
- package/dist/server/server/src/controllers/admin.js.map +1 -1
- package/dist/server/server/src/controllers/admin.mjs +11 -12
- package/dist/server/server/src/controllers/admin.mjs.map +1 -1
- package/dist/server/server/src/domain/permission/index.js.map +1 -1
- package/dist/server/server/src/domain/permission/index.mjs.map +1 -1
- package/dist/server/server/src/services/api-token.js +4 -8
- package/dist/server/server/src/services/api-token.js.map +1 -1
- package/dist/server/server/src/services/api-token.mjs +4 -8
- package/dist/server/server/src/services/api-token.mjs.map +1 -1
- package/dist/server/server/src/services/constants.js +4 -0
- package/dist/server/server/src/services/constants.js.map +1 -1
- package/dist/server/server/src/services/constants.mjs +4 -0
- package/dist/server/server/src/services/constants.mjs.map +1 -1
- package/dist/server/server/src/services/permission/rename-fields.js.map +1 -1
- package/dist/server/server/src/services/permission/rename-fields.mjs.map +1 -1
- package/dist/server/server/src/services/permission/sections-builder/handlers.js.map +1 -1
- package/dist/server/server/src/services/permission/sections-builder/handlers.mjs.map +1 -1
- package/dist/server/server/src/services/role.js +8 -5
- package/dist/server/server/src/services/role.js.map +1 -1
- package/dist/server/server/src/services/role.mjs +8 -5
- package/dist/server/server/src/services/role.mjs.map +1 -1
- package/dist/server/server/src/validation/admin-tokens.js +4 -4
- package/dist/server/server/src/validation/admin-tokens.js.map +1 -1
- package/dist/server/server/src/validation/admin-tokens.mjs +4 -4
- package/dist/server/server/src/validation/admin-tokens.mjs.map +1 -1
- package/dist/server/server/src/validation/api-tokens.js +4 -4
- package/dist/server/server/src/validation/api-tokens.js.map +1 -1
- package/dist/server/server/src/validation/api-tokens.mjs +4 -4
- package/dist/server/server/src/validation/api-tokens.mjs.map +1 -1
- package/dist/server/server/src/validation/role.js +6 -4
- package/dist/server/server/src/validation/role.js.map +1 -1
- package/dist/server/server/src/validation/role.mjs +6 -4
- package/dist/server/server/src/validation/role.mjs.map +1 -1
- package/dist/server/server/src/validation/transfer/token.js +4 -4
- package/dist/server/server/src/validation/transfer/token.js.map +1 -1
- package/dist/server/server/src/validation/transfer/token.mjs +4 -4
- package/dist/server/server/src/validation/transfer/token.mjs.map +1 -1
- package/dist/server/shared/utils/auth-cookie-path.js +13 -10
- package/dist/server/shared/utils/auth-cookie-path.js.map +1 -1
- package/dist/server/shared/utils/auth-cookie-path.mjs +13 -10
- package/dist/server/shared/utils/auth-cookie-path.mjs.map +1 -1
- package/dist/server/shared/utils/get-project-type.js +3 -3
- package/dist/server/shared/utils/get-project-type.js.map +1 -1
- package/dist/server/shared/utils/get-project-type.mjs +3 -3
- package/dist/server/shared/utils/get-project-type.mjs.map +1 -1
- package/dist/server/shared/utils/session-auth.js +70 -3
- package/dist/server/shared/utils/session-auth.js.map +1 -1
- package/dist/server/shared/utils/session-auth.mjs +70 -4
- package/dist/server/shared/utils/session-auth.mjs.map +1 -1
- package/dist/server/src/ai/services/ai.d.ts.map +1 -1
- package/dist/server/src/controllers/admin.d.ts.map +1 -1
- package/dist/server/src/domain/permission/index.d.ts.map +1 -1
- package/dist/server/src/services/constants.d.ts +2 -0
- package/dist/server/src/services/constants.d.ts.map +1 -1
- package/dist/server/src/services/permission/rename-fields.d.ts.map +1 -1
- package/dist/server/src/services/permission/sections-builder/handlers.d.ts.map +1 -1
- package/dist/server/src/services/role.d.ts.map +1 -1
- package/dist/server/src/validation/role.d.ts.map +1 -1
- package/dist/shared/contracts/transfer.d.ts.map +1 -1
- package/dist/shared/utils/auth-cookie-path.d.ts +13 -10
- package/dist/shared/utils/auth-cookie-path.d.ts.map +1 -1
- package/dist/shared/utils/session-auth.d.ts +16 -0
- package/dist/shared/utils/session-auth.d.ts.map +1 -1
- package/package.json +7 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"users.mjs","sources":["../../../../../admin/src/services/users.ts"],"sourcesContent":["import * as Permissions from '../../../shared/contracts/permissions';\nimport * as Roles from '../../../shared/contracts/roles';\nimport * as Users from '../../../shared/contracts/user';\n\nimport { adminApi } from './api';\n\nimport type { Data } from '@strapi/types';\n\nconst usersService = adminApi\n .enhanceEndpoints({\n addTagTypes: ['LicenseLimits', 'User', 'Role', 'RolePermissions'],\n })\n .injectEndpoints({\n endpoints: (builder) => ({\n /**\n * users\n */\n createUser: builder.mutation<Users.Create.Response['data'], Users.Create.Request['body']>({\n query: (body) => ({\n url: '/admin/users',\n method: 'POST',\n data: body,\n }),\n transformResponse: (response: Users.Create.Response) => response.data,\n invalidatesTags: ['LicenseLimits', { type: 'User', id: 'LIST' }, 'HomepageKeyStatistics'],\n }),\n updateUser: builder.mutation<\n Users.Update.Response['data'],\n Omit<Users.Update.Request['body'] & Users.Update.Params, 'blocked'>\n >({\n query: ({ id, ...body }) => ({\n url: `/admin/users/${id}`,\n method: 'PUT',\n data: body,\n }),\n invalidatesTags: (_res, _err, { id }) => [\n { type: 'User', id },\n { type: 'User', id: 'LIST' },\n ],\n }),\n getUsers: builder.query<\n {\n users: Users.FindAll.Response['data']['results'];\n pagination: Users.FindAll.Response['data']['pagination'] | null;\n },\n GetUsersParams\n >({\n query: ({ id, ...params } = {}) => ({\n url: `/admin/users/${id ?? ''}`,\n method: 'GET',\n config: {\n params,\n },\n }),\n transformResponse: (res: Users.FindAll.Response | Users.FindOne.Response) => {\n let users: Users.FindAll.Response['data']['results'] = [];\n\n if (res.data) {\n if ('results' in res.data) {\n if (Array.isArray(res.data.results)) {\n users = res.data.results;\n }\n } else {\n users = [res.data];\n }\n }\n\n return {\n users,\n pagination: 'pagination' in res.data ? res.data.pagination : null,\n };\n },\n providesTags: (res, _err, arg) => {\n if (typeof arg === 'object' && 'id' in arg) {\n return [{ type: 'User' as const, id: arg.id }];\n } else {\n return [\n ...(res?.users.map(({ id }) => ({ type: 'User' as const, id })) ?? []),\n { type: 'User' as const, id: 'LIST' },\n ];\n }\n },\n }),\n deleteManyUsers: builder.mutation<\n Users.DeleteMany.Response['data'],\n Users.DeleteMany.Request['body']\n >({\n query: (body) => ({\n url: '/admin/users/batch-delete',\n method: 'POST',\n data: body,\n }),\n transformResponse: (res: Users.DeleteMany.Response) => res.data,\n invalidatesTags: ['LicenseLimits', { type: 'User', id: 'LIST' }, 'HomepageKeyStatistics'],\n }),\n /**\n * roles\n */\n createRole: builder.mutation<Roles.Create.Response['data'], Roles.Create.Request['body']>({\n query: (body) => ({\n url: '/admin/roles',\n method: 'POST',\n data: body,\n }),\n transformResponse: (res: Roles.Create.Response) => res.data,\n invalidatesTags: [{ type: 'Role', id: 'LIST' }],\n }),\n getRoles: builder.query<Roles.FindRoles.Response['data'], GetRolesParams | void>({\n query: ({ id, ...params } = {}) => ({\n url: `/admin/roles/${id ?? ''}`,\n method: 'GET',\n config: {\n params,\n },\n }),\n transformResponse: (res: Roles.FindRole.Response | Roles.FindRoles.Response) => {\n let roles: Roles.FindRoles.Response['data'] = [];\n\n if (res.data) {\n if (Array.isArray(res.data)) {\n roles = res.data;\n } else {\n roles = [res.data];\n }\n }\n\n return roles;\n },\n providesTags: (res, _err, arg) => {\n if (typeof arg === 'object' && 'id' in arg) {\n return [{ type: 'Role' as const, id: arg.id }];\n } else {\n return [\n ...(res?.map(({ id }) => ({ type: 'Role' as const, id })) ?? []),\n { type: 'Role' as const, id: 'LIST' },\n ];\n }\n },\n }),\n updateRole: builder.mutation<\n Roles.Update.Response['data'],\n Roles.Update.Request['body'] & Roles.Update.Request['params']\n >({\n query: ({ id, ...body }) => ({\n url: `/admin/roles/${id}`,\n method: 'PUT',\n data: body,\n }),\n transformResponse: (res: Roles.Create.Response) => res.data,\n invalidatesTags: (_res, _err, { id }) => [{ type: 'Role' as const, id }],\n }),\n getRolePermissions: builder.query<\n Roles.GetPermissions.Response['data'],\n GetRolePermissionsParams\n >({\n query: ({ id, ...params }) => ({\n url: `/admin/roles/${id}/permissions`,\n method: 'GET',\n config: {\n params,\n },\n }),\n transformResponse: (res: Roles.GetPermissions.Response) => res.data,\n providesTags: (_res, _err, { id }) => [{ type: 'RolePermissions' as const, id }],\n }),\n updateRolePermissions: builder.mutation<\n Roles.UpdatePermissions.Response['data'],\n Roles.UpdatePermissions.Request['body'] & Roles.UpdatePermissions.Request['params']\n >({\n query: ({ id, ...body }) => ({\n url: `/admin/roles/${id}/permissions`,\n method: 'PUT',\n data: body,\n }),\n transformResponse: (res: Roles.UpdatePermissions.Response) => res.data,\n invalidatesTags: (_res, _err, { id }) => [{ type: 'RolePermissions' as const, id }],\n }),\n /**\n * Permissions\n */\n getRolePermissionLayout: builder.query<\n Permissions.GetAll.Response['data'],\n Permissions.GetAll.Request['params']\n >({\n query: (params) => ({\n url: '/admin/permissions',\n method: 'GET',\n config: {\n params,\n },\n }),\n transformResponse: (res: Permissions.GetAll.Response) => res.data,\n }),\n }),\n overrideExisting: false,\n });\n\ntype GetUsersParams =\n | Users.FindOne.Params\n | (Users.FindAll.Request['query'] & { id?: never })\n | void;\ntype GetRolesParams =\n | Roles.FindRole.Request['params']\n | (Roles.FindRoles.Request['query'] & { id?: never });\ninterface GetRolePermissionsParams {\n id: Data.ID;\n}\n\nconst {\n useCreateUserMutation,\n useGetUsersQuery,\n useUpdateUserMutation,\n useDeleteManyUsersMutation,\n useGetRolesQuery,\n useCreateRoleMutation,\n useUpdateRoleMutation,\n useGetRolePermissionsQuery,\n useGetRolePermissionLayoutQuery,\n useUpdateRolePermissionsMutation,\n} = usersService;\n\nconst useAdminUsers = useGetUsersQuery;\n\nexport {\n useUpdateUserMutation,\n useGetRolesQuery,\n useAdminUsers,\n useDeleteManyUsersMutation,\n useCreateUserMutation,\n useGetRolePermissionsQuery,\n useGetRolePermissionLayoutQuery,\n useCreateRoleMutation,\n useUpdateRolePermissionsMutation,\n useUpdateRoleMutation,\n};\nexport type { GetRolesParams, GetUsersParams, GetRolePermissionsParams };\n"],"names":["usersService","adminApi","enhanceEndpoints","addTagTypes","injectEndpoints","endpoints","builder","createUser","mutation","query","body","url","method","data","transformResponse","response","invalidatesTags","type","id","updateUser","_res","_err","getUsers","params","config","res","users","Array","isArray","results","pagination","providesTags","arg","map","deleteManyUsers","createRole","getRoles","roles","updateRole","getRolePermissions","updateRolePermissions","getRolePermissionLayout","overrideExisting","useCreateUserMutation","useGetUsersQuery","useUpdateUserMutation","useDeleteManyUsersMutation","useGetRolesQuery","useCreateRoleMutation","useUpdateRoleMutation","useGetRolePermissionsQuery","useGetRolePermissionLayoutQuery","useUpdateRolePermissionsMutation","useAdminUsers"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"users.mjs","sources":["../../../../../admin/src/services/users.ts"],"sourcesContent":["import * as Permissions from '../../../shared/contracts/permissions';\nimport * as Roles from '../../../shared/contracts/roles';\nimport * as Users from '../../../shared/contracts/user';\n\nimport { adminApi } from './api';\n\nimport type { Data } from '@strapi/types';\n\nconst usersService = adminApi\n .enhanceEndpoints({\n addTagTypes: ['LicenseLimits', 'User', 'Role', 'RolePermissions'],\n })\n .injectEndpoints({\n endpoints: (builder) => ({\n /**\n * users\n */\n createUser: builder.mutation<Users.Create.Response['data'], Users.Create.Request['body']>({\n query: (body) => ({\n url: '/admin/users',\n method: 'POST',\n data: body,\n }),\n transformResponse: (response: Users.Create.Response) => response.data,\n invalidatesTags: ['LicenseLimits', { type: 'User', id: 'LIST' }, 'HomepageKeyStatistics'],\n }),\n updateUser: builder.mutation<\n Users.Update.Response['data'],\n Omit<Users.Update.Request['body'] & Users.Update.Params, 'blocked'>\n >({\n query: ({ id, ...body }) => ({\n url: `/admin/users/${id}`,\n method: 'PUT',\n data: body,\n }),\n invalidatesTags: (_res, _err, { id }) => [\n { type: 'User', id },\n { type: 'User', id: 'LIST' },\n ],\n }),\n getUsers: builder.query<\n {\n users: Users.FindAll.Response['data']['results'];\n pagination: Users.FindAll.Response['data']['pagination'] | null;\n },\n GetUsersParams\n >({\n query: ({ id, ...params } = {}) => ({\n url: `/admin/users/${id ?? ''}`,\n method: 'GET',\n config: {\n params,\n },\n }),\n transformResponse: (res: Users.FindAll.Response | Users.FindOne.Response) => {\n let users: Users.FindAll.Response['data']['results'] = [];\n\n if (res.data) {\n if ('results' in res.data) {\n if (Array.isArray(res.data.results)) {\n users = res.data.results;\n }\n } else {\n users = [res.data];\n }\n }\n\n return {\n users,\n pagination: 'pagination' in res.data ? res.data.pagination : null,\n };\n },\n providesTags: (res, _err, arg) => {\n if (typeof arg === 'object' && 'id' in arg) {\n return [{ type: 'User' as const, id: arg.id }];\n } else {\n return [\n ...(res?.users.map(({ id }) => ({ type: 'User' as const, id })) ?? []),\n { type: 'User' as const, id: 'LIST' },\n ];\n }\n },\n }),\n deleteManyUsers: builder.mutation<\n Users.DeleteMany.Response['data'],\n Users.DeleteMany.Request['body']\n >({\n query: (body) => ({\n url: '/admin/users/batch-delete',\n method: 'POST',\n data: body,\n }),\n transformResponse: (res: Users.DeleteMany.Response) => res.data,\n invalidatesTags: ['LicenseLimits', { type: 'User', id: 'LIST' }, 'HomepageKeyStatistics'],\n }),\n /**\n * roles\n */\n createRole: builder.mutation<Roles.Create.Response['data'], Roles.Create.Request['body']>({\n query: (body) => ({\n url: '/admin/roles',\n method: 'POST',\n data: body,\n }),\n transformResponse: (res: Roles.Create.Response) => res.data,\n invalidatesTags: [{ type: 'Role', id: 'LIST' }],\n }),\n getRoles: builder.query<Roles.FindRoles.Response['data'], GetRolesParams | void>({\n query: ({ id, ...params } = {}) => ({\n url: `/admin/roles/${id ?? ''}`,\n method: 'GET',\n config: {\n params,\n },\n }),\n transformResponse: (res: Roles.FindRole.Response | Roles.FindRoles.Response) => {\n let roles: Roles.FindRoles.Response['data'] = [];\n\n if (res.data) {\n if (Array.isArray(res.data)) {\n roles = res.data;\n } else {\n roles = [res.data];\n }\n }\n\n return roles;\n },\n providesTags: (res, _err, arg) => {\n if (typeof arg === 'object' && 'id' in arg) {\n return [{ type: 'Role' as const, id: arg.id }];\n } else {\n return [\n ...(res?.map(({ id }) => ({ type: 'Role' as const, id })) ?? []),\n { type: 'Role' as const, id: 'LIST' },\n ];\n }\n },\n }),\n updateRole: builder.mutation<\n Roles.Update.Response['data'],\n Roles.Update.Request['body'] & Roles.Update.Request['params']\n >({\n query: ({ id, ...body }) => ({\n url: `/admin/roles/${id}`,\n method: 'PUT',\n data: body,\n }),\n transformResponse: (res: Roles.Create.Response) => res.data,\n invalidatesTags: (_res, _err, { id }) => [{ type: 'Role' as const, id }],\n }),\n getRolePermissions: builder.query<\n Roles.GetPermissions.Response['data'],\n GetRolePermissionsParams\n >({\n query: ({ id, ...params }) => ({\n url: `/admin/roles/${id}/permissions`,\n method: 'GET',\n config: {\n params,\n },\n }),\n transformResponse: (res: Roles.GetPermissions.Response) => res.data,\n providesTags: (_res, _err, { id }) => [{ type: 'RolePermissions' as const, id }],\n }),\n updateRolePermissions: builder.mutation<\n Roles.UpdatePermissions.Response['data'],\n Roles.UpdatePermissions.Request['body'] & Roles.UpdatePermissions.Request['params']\n >({\n query: ({ id, ...body }) => ({\n url: `/admin/roles/${id}/permissions`,\n method: 'PUT',\n data: body,\n }),\n transformResponse: (res: Roles.UpdatePermissions.Response) => res.data,\n invalidatesTags: (_res, _err, { id }) => [{ type: 'RolePermissions' as const, id }],\n }),\n /**\n * Permissions\n */\n getRolePermissionLayout: builder.query<\n Permissions.GetAll.Response['data'],\n Permissions.GetAll.Request['params']\n >({\n query: (params) => ({\n url: '/admin/permissions',\n method: 'GET',\n config: {\n params,\n },\n }),\n transformResponse: (res: Permissions.GetAll.Response) => res.data,\n }),\n }),\n overrideExisting: false,\n });\n\ntype GetUsersParams =\n Users.FindOne.Params | (Users.FindAll.Request['query'] & { id?: never }) | void;\ntype GetRolesParams =\n Roles.FindRole.Request['params'] | (Roles.FindRoles.Request['query'] & { id?: never });\ninterface GetRolePermissionsParams {\n id: Data.ID;\n}\n\nconst {\n useCreateUserMutation,\n useGetUsersQuery,\n useUpdateUserMutation,\n useDeleteManyUsersMutation,\n useGetRolesQuery,\n useCreateRoleMutation,\n useUpdateRoleMutation,\n useGetRolePermissionsQuery,\n useGetRolePermissionLayoutQuery,\n useUpdateRolePermissionsMutation,\n} = usersService;\n\nconst useAdminUsers = useGetUsersQuery;\n\nexport {\n useUpdateUserMutation,\n useGetRolesQuery,\n useAdminUsers,\n useDeleteManyUsersMutation,\n useCreateUserMutation,\n useGetRolePermissionsQuery,\n useGetRolePermissionLayoutQuery,\n useCreateRoleMutation,\n useUpdateRolePermissionsMutation,\n useUpdateRoleMutation,\n};\nexport type { GetRolesParams, GetUsersParams, GetRolePermissionsParams };\n"],"names":["usersService","adminApi","enhanceEndpoints","addTagTypes","injectEndpoints","endpoints","builder","createUser","mutation","query","body","url","method","data","transformResponse","response","invalidatesTags","type","id","updateUser","_res","_err","getUsers","params","config","res","users","Array","isArray","results","pagination","providesTags","arg","map","deleteManyUsers","createRole","getRoles","roles","updateRole","getRolePermissions","updateRolePermissions","getRolePermissionLayout","overrideExisting","useCreateUserMutation","useGetUsersQuery","useUpdateUserMutation","useDeleteManyUsersMutation","useGetRolesQuery","useCreateRoleMutation","useUpdateRoleMutation","useGetRolePermissionsQuery","useGetRolePermissionLayoutQuery","useUpdateRolePermissionsMutation","useAdminUsers"],"mappings":";;AAQA,MAAMA,YAAAA,GAAeC,QAAAA,CAClBC,gBAAgB,CAAC;IAChBC,WAAAA,EAAa;AAAC,QAAA,eAAA;AAAiB,QAAA,MAAA;AAAQ,QAAA,MAAA;AAAQ,QAAA;AAAkB;AACnE,CAAA,CAAA,CACCC,eAAe,CAAC;IACfC,SAAAA,EAAW,CAACC,WAAa;AACvB;;UAGAC,UAAAA,EAAYD,OAAAA,CAAQE,QAAQ,CAA8D;gBACxFC,KAAAA,EAAO,CAACC,QAAU;wBAChBC,GAAAA,EAAK,cAAA;wBACLC,MAAAA,EAAQ,MAAA;wBACRC,IAAAA,EAAMH;qBACR,CAAA;gBACAI,iBAAAA,EAAmB,CAACC,QAAAA,GAAoCA,QAAAA,CAASF,IAAI;gBACrEG,eAAAA,EAAiB;AAAC,oBAAA,eAAA;AAAiB,oBAAA;wBAAEC,IAAAA,EAAM,MAAA;wBAAQC,EAAAA,EAAI;AAAO,qBAAA;AAAG,oBAAA;AAAwB;AAC3F,aAAA,CAAA;YACAC,UAAAA,EAAYb,OAAAA,CAAQE,QAAQ,CAG1B;AACAC,gBAAAA,KAAAA,EAAO,CAAC,EAAES,EAAE,EAAE,GAAGR,IAAAA,EAAM,IAAM;wBAC3BC,GAAAA,EAAK,CAAC,aAAa,EAAEO,EAAAA,CAAAA,CAAI;wBACzBN,MAAAA,EAAQ,KAAA;wBACRC,IAAAA,EAAMH;qBACR,CAAA;AACAM,gBAAAA,eAAAA,EAAiB,CAACI,IAAAA,EAAMC,IAAAA,EAAM,EAAEH,EAAE,EAAE,GAAK;AACvC,wBAAA;4BAAED,IAAAA,EAAM,MAAA;AAAQC,4BAAAA;AAAG,yBAAA;AACnB,wBAAA;4BAAED,IAAAA,EAAM,MAAA;4BAAQC,EAAAA,EAAI;AAAO;AAC5B;AACH,aAAA,CAAA;YACAI,QAAAA,EAAUhB,OAAAA,CAAQG,KAAK,CAMrB;gBACAA,KAAAA,EAAO,CAAC,EAAES,EAAE,EAAE,GAAGK,QAAQ,GAAG,EAAE,IAAM;AAClCZ,wBAAAA,GAAAA,EAAK,CAAC,aAAa,EAAEO,EAAAA,IAAM,EAAA,CAAA,CAAI;wBAC/BN,MAAAA,EAAQ,KAAA;wBACRY,MAAAA,EAAQ;AACND,4BAAAA;AACF;qBACF,CAAA;AACAT,gBAAAA,iBAAAA,EAAmB,CAACW,GAAAA,GAAAA;AAClB,oBAAA,IAAIC,QAAmD,EAAE;oBAEzD,IAAID,GAAAA,CAAIZ,IAAI,EAAE;wBACZ,IAAI,SAAA,IAAaY,GAAAA,CAAIZ,IAAI,EAAE;AACzB,4BAAA,IAAIc,MAAMC,OAAO,CAACH,IAAIZ,IAAI,CAACgB,OAAO,CAAA,EAAG;gCACnCH,KAAAA,GAAQD,GAAAA,CAAIZ,IAAI,CAACgB,OAAO;AAC1B,4BAAA;wBACF,CAAA,MAAO;4BACLH,KAAAA,GAAQ;AAACD,gCAAAA,GAAAA,CAAIZ;AAAK,6BAAA;AACpB,wBAAA;AACF,oBAAA;oBAEA,OAAO;AACLa,wBAAAA,KAAAA;wBACAI,UAAAA,EAAY,YAAA,IAAgBL,IAAIZ,IAAI,GAAGY,IAAIZ,IAAI,CAACiB,UAAU,GAAG;AAC/D,qBAAA;AACF,gBAAA,CAAA;gBACAC,YAAAA,EAAc,CAACN,KAAKJ,IAAAA,EAAMW,GAAAA,GAAAA;AACxB,oBAAA,IAAI,OAAOA,GAAAA,KAAQ,QAAA,IAAY,IAAA,IAAQA,GAAAA,EAAK;wBAC1C,OAAO;AAAC,4BAAA;gCAAEf,IAAAA,EAAM,MAAA;AAAiBC,gCAAAA,EAAAA,EAAIc,IAAId;AAAG;AAAE,yBAAA;oBAChD,CAAA,MAAO;wBACL,OAAO;AACDO,4BAAAA,GAAAA,GAAAA,EAAKC,MAAMO,GAAAA,CAAI,CAAC,EAAEf,EAAE,EAAE,IAAM;oCAAED,IAAAA,EAAM,MAAA;AAAiBC,oCAAAA;AAAG,iCAAA,MAAO,EAAE;AACrE,4BAAA;gCAAED,IAAAA,EAAM,MAAA;gCAAiBC,EAAAA,EAAI;AAAO;AACrC,yBAAA;AACH,oBAAA;AACF,gBAAA;AACF,aAAA,CAAA;YACAgB,eAAAA,EAAiB5B,OAAAA,CAAQE,QAAQ,CAG/B;gBACAC,KAAAA,EAAO,CAACC,QAAU;wBAChBC,GAAAA,EAAK,2BAAA;wBACLC,MAAAA,EAAQ,MAAA;wBACRC,IAAAA,EAAMH;qBACR,CAAA;gBACAI,iBAAAA,EAAmB,CAACW,GAAAA,GAAmCA,GAAAA,CAAIZ,IAAI;gBAC/DG,eAAAA,EAAiB;AAAC,oBAAA,eAAA;AAAiB,oBAAA;wBAAEC,IAAAA,EAAM,MAAA;wBAAQC,EAAAA,EAAI;AAAO,qBAAA;AAAG,oBAAA;AAAwB;AAC3F,aAAA,CAAA;AACA;;UAGAiB,UAAAA,EAAY7B,OAAAA,CAAQE,QAAQ,CAA8D;gBACxFC,KAAAA,EAAO,CAACC,QAAU;wBAChBC,GAAAA,EAAK,cAAA;wBACLC,MAAAA,EAAQ,MAAA;wBACRC,IAAAA,EAAMH;qBACR,CAAA;gBACAI,iBAAAA,EAAmB,CAACW,GAAAA,GAA+BA,GAAAA,CAAIZ,IAAI;gBAC3DG,eAAAA,EAAiB;AAAC,oBAAA;wBAAEC,IAAAA,EAAM,MAAA;wBAAQC,EAAAA,EAAI;AAAO;AAAE;AACjD,aAAA,CAAA;YACAkB,QAAAA,EAAU9B,OAAAA,CAAQG,KAAK,CAA0D;gBAC/EA,KAAAA,EAAO,CAAC,EAAES,EAAE,EAAE,GAAGK,QAAQ,GAAG,EAAE,IAAM;AAClCZ,wBAAAA,GAAAA,EAAK,CAAC,aAAa,EAAEO,EAAAA,IAAM,EAAA,CAAA,CAAI;wBAC/BN,MAAAA,EAAQ,KAAA;wBACRY,MAAAA,EAAQ;AACND,4BAAAA;AACF;qBACF,CAAA;AACAT,gBAAAA,iBAAAA,EAAmB,CAACW,GAAAA,GAAAA;AAClB,oBAAA,IAAIY,QAA0C,EAAE;oBAEhD,IAAIZ,GAAAA,CAAIZ,IAAI,EAAE;AACZ,wBAAA,IAAIc,KAAAA,CAAMC,OAAO,CAACH,GAAAA,CAAIZ,IAAI,CAAA,EAAG;AAC3BwB,4BAAAA,KAAAA,GAAQZ,IAAIZ,IAAI;wBAClB,CAAA,MAAO;4BACLwB,KAAAA,GAAQ;AAACZ,gCAAAA,GAAAA,CAAIZ;AAAK,6BAAA;AACpB,wBAAA;AACF,oBAAA;oBAEA,OAAOwB,KAAAA;AACT,gBAAA,CAAA;gBACAN,YAAAA,EAAc,CAACN,KAAKJ,IAAAA,EAAMW,GAAAA,GAAAA;AACxB,oBAAA,IAAI,OAAOA,GAAAA,KAAQ,QAAA,IAAY,IAAA,IAAQA,GAAAA,EAAK;wBAC1C,OAAO;AAAC,4BAAA;gCAAEf,IAAAA,EAAM,MAAA;AAAiBC,gCAAAA,EAAAA,EAAIc,IAAId;AAAG;AAAE,yBAAA;oBAChD,CAAA,MAAO;wBACL,OAAO;AACDO,4BAAAA,GAAAA,GAAAA,EAAKQ,IAAI,CAAC,EAAEf,EAAE,EAAE,IAAM;oCAAED,IAAAA,EAAM,MAAA;AAAiBC,oCAAAA;AAAG,iCAAA,MAAO,EAAE;AAC/D,4BAAA;gCAAED,IAAAA,EAAM,MAAA;gCAAiBC,EAAAA,EAAI;AAAO;AACrC,yBAAA;AACH,oBAAA;AACF,gBAAA;AACF,aAAA,CAAA;YACAoB,UAAAA,EAAYhC,OAAAA,CAAQE,QAAQ,CAG1B;AACAC,gBAAAA,KAAAA,EAAO,CAAC,EAAES,EAAE,EAAE,GAAGR,IAAAA,EAAM,IAAM;wBAC3BC,GAAAA,EAAK,CAAC,aAAa,EAAEO,EAAAA,CAAAA,CAAI;wBACzBN,MAAAA,EAAQ,KAAA;wBACRC,IAAAA,EAAMH;qBACR,CAAA;gBACAI,iBAAAA,EAAmB,CAACW,GAAAA,GAA+BA,GAAAA,CAAIZ,IAAI;AAC3DG,gBAAAA,eAAAA,EAAiB,CAACI,IAAAA,EAAMC,IAAAA,EAAM,EAAEH,EAAE,EAAE,GAAK;AAAC,wBAAA;4BAAED,IAAAA,EAAM,MAAA;AAAiBC,4BAAAA;AAAG;AAAE;AAC1E,aAAA,CAAA;YACAqB,kBAAAA,EAAoBjC,OAAAA,CAAQG,KAAK,CAG/B;AACAA,gBAAAA,KAAAA,EAAO,CAAC,EAAES,EAAE,EAAE,GAAGK,MAAAA,EAAQ,IAAM;AAC7BZ,wBAAAA,GAAAA,EAAK,CAAC,aAAa,EAAEO,EAAAA,CAAG,YAAY,CAAC;wBACrCN,MAAAA,EAAQ,KAAA;wBACRY,MAAAA,EAAQ;AACND,4BAAAA;AACF;qBACF,CAAA;gBACAT,iBAAAA,EAAmB,CAACW,GAAAA,GAAuCA,GAAAA,CAAIZ,IAAI;AACnEkB,gBAAAA,YAAAA,EAAc,CAACX,IAAAA,EAAMC,IAAAA,EAAM,EAAEH,EAAE,EAAE,GAAK;AAAC,wBAAA;4BAAED,IAAAA,EAAM,iBAAA;AAA4BC,4BAAAA;AAAG;AAAE;AAClF,aAAA,CAAA;YACAsB,qBAAAA,EAAuBlC,OAAAA,CAAQE,QAAQ,CAGrC;AACAC,gBAAAA,KAAAA,EAAO,CAAC,EAAES,EAAE,EAAE,GAAGR,IAAAA,EAAM,IAAM;AAC3BC,wBAAAA,GAAAA,EAAK,CAAC,aAAa,EAAEO,EAAAA,CAAG,YAAY,CAAC;wBACrCN,MAAAA,EAAQ,KAAA;wBACRC,IAAAA,EAAMH;qBACR,CAAA;gBACAI,iBAAAA,EAAmB,CAACW,GAAAA,GAA0CA,GAAAA,CAAIZ,IAAI;AACtEG,gBAAAA,eAAAA,EAAiB,CAACI,IAAAA,EAAMC,IAAAA,EAAM,EAAEH,EAAE,EAAE,GAAK;AAAC,wBAAA;4BAAED,IAAAA,EAAM,iBAAA;AAA4BC,4BAAAA;AAAG;AAAE;AACrF,aAAA,CAAA;AACA;;UAGAuB,uBAAAA,EAAyBnC,OAAAA,CAAQG,KAAK,CAGpC;gBACAA,KAAAA,EAAO,CAACc,UAAY;wBAClBZ,GAAAA,EAAK,oBAAA;wBACLC,MAAAA,EAAQ,KAAA;wBACRY,MAAAA,EAAQ;AACND,4BAAAA;AACF;qBACF,CAAA;gBACAT,iBAAAA,EAAmB,CAACW,GAAAA,GAAqCA,GAAAA,CAAIZ;AAC/D,aAAA;SACF,CAAA;IACA6B,gBAAAA,EAAkB;AACpB,CAAA,CAAA;AAUF,MAAM,EACJC,qBAAqB,EACrBC,gBAAgB,EAChBC,qBAAqB,EACrBC,0BAA0B,EAC1BC,gBAAgB,EAChBC,qBAAqB,EACrBC,qBAAqB,EACrBC,0BAA0B,EAC1BC,+BAA+B,EAC/BC,gCAAgC,EACjC,GAAGpD;AAEJ,MAAMqD,aAAAA,GAAgBT;;;;"}
|
|
@@ -98,7 +98,7 @@ var eu = {
|
|
|
98
98
|
"Roles.RoleRow.select-all": "Hautatu {name} ekintza masiboetarako",
|
|
99
99
|
"Roles.RoleRow.user-count": "{number, plural, =0 {# user} one {# user} other {# users}}",
|
|
100
100
|
"Roles.components.List.empty.withSearch": "Ez dago bilaketari dagokion paperik ({search})...",
|
|
101
|
-
"Settings.PageTitle": "Konfigurazioa - {name}
|
|
101
|
+
"Settings.PageTitle": "Konfigurazioa - {name}",
|
|
102
102
|
"Settings.apiTokens.addFirstToken": "Gehitu zure lehen API Token",
|
|
103
103
|
"Settings.apiTokens.addNewToken": "Gehitu API Token berri bat",
|
|
104
104
|
"Settings.tokens.copy.editMessage": "Segurtasun arrazoiengatik, behin bakarrik ikus dezakezu zure tokena",
|
|
@@ -94,7 +94,7 @@ var eu = {
|
|
|
94
94
|
"Roles.RoleRow.select-all": "Hautatu {name} ekintza masiboetarako",
|
|
95
95
|
"Roles.RoleRow.user-count": "{number, plural, =0 {# user} one {# user} other {# users}}",
|
|
96
96
|
"Roles.components.List.empty.withSearch": "Ez dago bilaketari dagokion paperik ({search})...",
|
|
97
|
-
"Settings.PageTitle": "Konfigurazioa - {name}
|
|
97
|
+
"Settings.PageTitle": "Konfigurazioa - {name}",
|
|
98
98
|
"Settings.apiTokens.addFirstToken": "Gehitu zure lehen API Token",
|
|
99
99
|
"Settings.apiTokens.addNewToken": "Gehitu API Token berri bat",
|
|
100
100
|
"Settings.tokens.copy.editMessage": "Segurtasun arrazoiengatik, behin bakarrik ikus dezakezu zure tokena",
|
|
@@ -9,8 +9,9 @@ var authCookiePath = require('../../../shared/utils/auth-cookie-path.js');
|
|
|
9
9
|
* into the bundle as `STRAPI_ADMIN_AUTH_COOKIE_NAME`.
|
|
10
10
|
*/ const AUTH_COOKIE_NAME = authCookieName.resolveAuthCookieName(process.env.STRAPI_ADMIN_AUTH_COOKIE_NAME);
|
|
11
11
|
/**
|
|
12
|
-
* Resolved once at module load: the build inlines `admin.auth.cookie.path
|
|
13
|
-
* into the bundle as
|
|
12
|
+
* Resolved once at module load: the build inlines `admin.auth.cookie.path`,
|
|
13
|
+
* or the path the panel is served from when it is unset, into the bundle as
|
|
14
|
+
* `STRAPI_ADMIN_AUTH_COOKIE_PATH`.
|
|
14
15
|
*/ const AUTH_COOKIE_PATH = authCookiePath.resolveAuthCookiePath(process.env.STRAPI_ADMIN_AUTH_COOKIE_PATH);
|
|
15
16
|
/**
|
|
16
17
|
* Resolved once at module load: the build inlines `admin.auth.cookie.domain`
|
|
@@ -67,10 +68,10 @@ const expireCookieAt = (name, path, domain)=>{
|
|
|
67
68
|
};
|
|
68
69
|
/**
|
|
69
70
|
* Sets a cookie with the given name, value, and optional expiration time.
|
|
70
|
-
* Uses
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
71
|
+
* Uses the access cookie path and `admin.auth.cookie.domain` (both inlined at
|
|
72
|
+
* build time) so the cookie lands on the same path and domain as the EE SSO
|
|
73
|
+
* access cookie written by the server. The cookie is marked `Secure` whenever
|
|
74
|
+
* the page is served over TLS.
|
|
74
75
|
*
|
|
75
76
|
* @param name - The name of the cookie.
|
|
76
77
|
* @param value - The value of the cookie.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cookies.js","sources":["../../../../../admin/src/utils/cookies.ts"],"sourcesContent":["import { resolveAuthCookieDomain } from '../../../shared/utils/auth-cookie-domain';\nimport { resolveAuthCookieName } from '../../../shared/utils/auth-cookie-name';\nimport { resolveAuthCookiePath } from '../../../shared/utils/auth-cookie-path';\n\n/**\n * Resolved once at module load: the build inlines `admin.auth.cookie.name`\n * into the bundle as `STRAPI_ADMIN_AUTH_COOKIE_NAME`.\n */\nexport const AUTH_COOKIE_NAME = resolveAuthCookieName(process.env.STRAPI_ADMIN_AUTH_COOKIE_NAME);\n\n/**\n * Resolved once at module load: the build inlines `admin.auth.cookie.path
|
|
1
|
+
{"version":3,"file":"cookies.js","sources":["../../../../../admin/src/utils/cookies.ts"],"sourcesContent":["import { resolveAuthCookieDomain } from '../../../shared/utils/auth-cookie-domain';\nimport { resolveAuthCookieName } from '../../../shared/utils/auth-cookie-name';\nimport { resolveAuthCookiePath } from '../../../shared/utils/auth-cookie-path';\n\n/**\n * Resolved once at module load: the build inlines `admin.auth.cookie.name`\n * into the bundle as `STRAPI_ADMIN_AUTH_COOKIE_NAME`.\n */\nexport const AUTH_COOKIE_NAME = resolveAuthCookieName(process.env.STRAPI_ADMIN_AUTH_COOKIE_NAME);\n\n/**\n * Resolved once at module load: the build inlines `admin.auth.cookie.path`,\n * or the path the panel is served from when it is unset, into the bundle as\n * `STRAPI_ADMIN_AUTH_COOKIE_PATH`.\n */\nexport const AUTH_COOKIE_PATH = resolveAuthCookiePath(process.env.STRAPI_ADMIN_AUTH_COOKIE_PATH);\n\n/**\n * Resolved once at module load: the build inlines `admin.auth.cookie.domain`\n * into the bundle as `STRAPI_ADMIN_AUTH_COOKIE_DOMAIN`. `undefined` means the\n * cookie is host-only.\n */\nexport const AUTH_COOKIE_DOMAIN = resolveAuthCookieDomain(\n process.env.STRAPI_ADMIN_AUTH_COOKIE_DOMAIN\n);\n\n/** Paths previously used by the client for the access cookie; cleared on set/delete. */\nconst LEGACY_AUTH_COOKIE_PATHS = ['/'] as const;\n\nconst expireCookieAt = (name: string, path: string, domain?: string): void => {\n const domainAttr = domain ? `; Domain=${domain}` : '';\n document.cookie = `${name}=; Path=${path}${domainAttr}; Expires=Thu, 01 Jan 1970 00:00:01 GMT;`;\n};\n\n/**\n * Every `(path, domain)` key the access cookie may live under: the configured\n * key plus the legacy-path and host-only variants written by older versions or\n * previous configs. The browser cookie store keys entries by\n * `(name, domain, path)`, so each combination is a distinct entry.\n */\nconst cookieKeyMatrix = (): Array<{ path: string; domain: string | undefined }> => {\n const paths = new Set<string>([AUTH_COOKIE_PATH, ...LEGACY_AUTH_COOKIE_PATHS]);\n const domains = new Set<string | undefined>([undefined, AUTH_COOKIE_DOMAIN]);\n\n const matrix: Array<{ path: string; domain: string | undefined }> = [];\n for (const path of paths) {\n for (const domain of domains) {\n matrix.push({ path, domain });\n }\n }\n return matrix;\n};\n\n/**\n * Retrieves the value of a specified cookie.\n *\n * @param name - The name of the cookie to retrieve.\n * @returns The decoded cookie value if found, otherwise null.\n */\nexport const getCookieValue = (name: string): string | null => {\n let result = null;\n const cookieArray = document.cookie.split(';');\n cookieArray.forEach((cookie) => {\n const [key, value] = cookie.split('=').map((item) => item.trim());\n if (key === name) {\n result = decodeURIComponent(value);\n }\n });\n return result;\n};\n\n/**\n * Sets a cookie with the given name, value, and optional expiration time.\n * Uses the access cookie path and `admin.auth.cookie.domain` (both inlined at\n * build time) so the cookie lands on the same path and domain as the EE SSO\n * access cookie written by the server. The cookie is marked `Secure` whenever\n * the page is served over TLS.\n *\n * @param name - The name of the cookie.\n * @param value - The value of the cookie.\n * @param days - (Optional) Number of days until the cookie expires. If omitted, the cookie is a session cookie.\n */\nexport const setCookie = (name: string, value: string, days?: number): void => {\n let expires = '';\n if (days) {\n const date = new Date();\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n expires = `; Expires=${date.toUTCString()}`;\n }\n\n // Expire every other key the cookie may live under (legacy Path=/, host-only\n // copies written before a domain was configured). A stale same-name entry at\n // an equal-length path sorts first in document.cookie by creation time\n // (RFC 6265 §5.4), so leaving one behind would shadow the token written below.\n for (const { path, domain } of cookieKeyMatrix()) {\n if (path !== AUTH_COOKIE_PATH || domain !== AUTH_COOKIE_DOMAIN) {\n expireCookieAt(name, path, domain);\n }\n }\n\n const domainAttr = AUTH_COOKIE_DOMAIN ? `; Domain=${AUTH_COOKIE_DOMAIN}` : '';\n // Mark the token Secure when the page itself is served over TLS — the\n // browser's own criterion — so it is never attached to plain-http requests.\n // Expiry writes stay flag-free on purpose: deletion targets the (name,\n // domain, path) key regardless of Secure, and from an http origin a\n // flag-free write can still clear non-Secure entries (no origin can carry\n // the Secure flag over http, and Secure entries are untouchable from there\n // either way).\n const secureAttr = window.location.protocol === 'https:' ? '; Secure' : '';\n document.cookie = `${name}=${encodeURIComponent(value)}; Path=${AUTH_COOKIE_PATH}${domainAttr}${expires}${secureAttr}`;\n};\n\n/**\n * Deletes a cookie by setting its expiration date to a past date.\n *\n * Expires every combination of {configured path, legacy Path=/} and\n * {configured domain, host-only}. A `Domain`-scoped cookie is a distinct entry\n * from a host-only one in the browser cookie store, so both must be cleared or\n * remote logout leaves the EE SSO cookie (written with `Domain` by the server)\n * behind, rehydrating a dead session into an infinite login redirect.\n *\n * @param name - The name of the cookie to delete.\n */\nexport const deleteCookie = (name: string): void => {\n for (const { path, domain } of cookieKeyMatrix()) {\n expireCookieAt(name, path, domain);\n }\n};\n"],"names":["AUTH_COOKIE_NAME","resolveAuthCookieName","process","env","STRAPI_ADMIN_AUTH_COOKIE_NAME","AUTH_COOKIE_PATH","resolveAuthCookiePath","STRAPI_ADMIN_AUTH_COOKIE_PATH","AUTH_COOKIE_DOMAIN","resolveAuthCookieDomain","STRAPI_ADMIN_AUTH_COOKIE_DOMAIN","LEGACY_AUTH_COOKIE_PATHS","expireCookieAt","name","path","domain","domainAttr","document","cookie","cookieKeyMatrix","paths","Set","domains","undefined","matrix","push","getCookieValue","result","cookieArray","split","forEach","key","value","map","item","trim","decodeURIComponent","setCookie","days","expires","secureAttr","window","location","protocol","encodeURIComponent","deleteCookie"],"mappings":";;;;;;AAIA;;;UAIaA,gBAAAA,GAAmBC,oCAAAA,CAAsBC,QAAQC,GAAG,CAACC,6BAA6B;AAE/F;;;;UAKaC,gBAAAA,GAAmBC,oCAAAA,CAAsBJ,QAAQC,GAAG,CAACI,6BAA6B;AAE/F;;;;UAKaC,kBAAAA,GAAqBC,wCAAAA,CAChCP,QAAQC,GAAG,CAACO,+BAA+B;AAG7C,yFACA,MAAMC,wBAAAA,GAA2B;AAAC,IAAA;AAAI,CAAA;AAEtC,MAAMC,cAAAA,GAAiB,CAACC,IAAAA,EAAcC,IAAAA,EAAcC,MAAAA,GAAAA;AAClD,IAAA,MAAMC,aAAaD,MAAAA,GAAS,CAAC,SAAS,EAAEA,QAAQ,GAAG,EAAA;IACnDE,QAAAA,CAASC,MAAM,GAAG,CAAA,EAAGL,IAAAA,CAAK,QAAQ,EAAEC,IAAAA,CAAAA,EAAOE,UAAAA,CAAW,wCAAwC,CAAC;AACjG,CAAA;AAEA;;;;;AAKC,IACD,MAAMG,eAAAA,GAAkB,IAAA;IACtB,MAAMC,KAAAA,GAAQ,IAAIC,GAAAA,CAAY;AAAChB,QAAAA,gBAAAA;AAAqBM,QAAAA,GAAAA;AAAyB,KAAA,CAAA;IAC7E,MAAMW,OAAAA,GAAU,IAAID,GAAAA,CAAwB;AAACE,QAAAA,SAAAA;AAAWf,QAAAA;AAAmB,KAAA,CAAA;AAE3E,IAAA,MAAMgB,SAA8D,EAAE;IACtE,KAAK,MAAMV,QAAQM,KAAAA,CAAO;QACxB,KAAK,MAAML,UAAUO,OAAAA,CAAS;AAC5BE,YAAAA,MAAAA,CAAOC,IAAI,CAAC;AAAEX,gBAAAA,IAAAA;AAAMC,gBAAAA;AAAO,aAAA,CAAA;AAC7B,QAAA;AACF,IAAA;IACA,OAAOS,MAAAA;AACT,CAAA;AAEA;;;;;IAMO,MAAME,cAAAA,GAAiB,CAACb,IAAAA,GAAAA;AAC7B,IAAA,IAAIc,MAAAA,GAAS,IAAA;AACb,IAAA,MAAMC,WAAAA,GAAcX,QAAAA,CAASC,MAAM,CAACW,KAAK,CAAC,GAAA,CAAA;IAC1CD,WAAAA,CAAYE,OAAO,CAAC,CAACZ,MAAAA,GAAAA;AACnB,QAAA,MAAM,CAACa,GAAAA,EAAKC,KAAAA,CAAM,GAAGd,MAAAA,CAAOW,KAAK,CAAC,GAAA,CAAA,CAAKI,GAAG,CAAC,CAACC,IAAAA,GAASA,KAAKC,IAAI,EAAA,CAAA;AAC9D,QAAA,IAAIJ,QAAQlB,IAAAA,EAAM;AAChBc,YAAAA,MAAAA,GAASS,kBAAAA,CAAmBJ,KAAAA,CAAAA;AAC9B,QAAA;AACF,IAAA,CAAA,CAAA;IACA,OAAOL,MAAAA;AACT;AAEA;;;;;;;;;;AAUC,IACM,MAAMU,SAAAA,GAAY,CAACxB,MAAcmB,KAAAA,EAAeM,IAAAA,GAAAA;AACrD,IAAA,IAAIC,OAAAA,GAAU,EAAA;;;;;AAWd,IAAA,KAAK,MAAM,EAAEzB,IAAI,EAAEC,MAAM,EAAE,IAAII,eAAAA,EAAAA,CAAmB;QAChD,IAAIL,IAAAA,KAAST,gBAAAA,IAAoBU,MAAAA,KAAWP,kBAAAA,EAAoB;AAC9DI,YAAAA,cAAAA,CAAeC,MAAMC,IAAAA,EAAMC,MAAAA,CAAAA;AAC7B,QAAA;AACF,IAAA;AAEA,IAAA,MAAMC,aAAaR,kBAAAA,GAAqB,CAAC,SAAS,EAAEA,oBAAoB,GAAG,EAAA;;;;;;;;AAQ3E,IAAA,MAAMgC,aAAaC,MAAAA,CAAOC,QAAQ,CAACC,QAAQ,KAAK,WAAW,UAAA,GAAa,EAAA;AACxE1B,IAAAA,QAAAA,CAASC,MAAM,GAAG,CAAA,EAAGL,IAAAA,CAAK,CAAC,EAAE+B,kBAAAA,CAAmBZ,KAAAA,CAAAA,CAAO,OAAO,EAAE3B,gBAAAA,CAAAA,EAAmBW,UAAAA,CAAAA,EAAauB,UAAUC,UAAAA,CAAAA,CAAY;AACxH;AAEA;;;;;;;;;;IAWO,MAAMK,YAAAA,GAAe,CAAChC,IAAAA,GAAAA;AAC3B,IAAA,KAAK,MAAM,EAAEC,IAAI,EAAEC,MAAM,EAAE,IAAII,eAAAA,EAAAA,CAAmB;AAChDP,QAAAA,cAAAA,CAAeC,MAAMC,IAAAA,EAAMC,MAAAA,CAAAA;AAC7B,IAAA;AACF;;;;;;;;;"}
|
|
@@ -7,8 +7,9 @@ import { resolveAuthCookiePath } from '../../../shared/utils/auth-cookie-path.mj
|
|
|
7
7
|
* into the bundle as `STRAPI_ADMIN_AUTH_COOKIE_NAME`.
|
|
8
8
|
*/ const AUTH_COOKIE_NAME = resolveAuthCookieName(process.env.STRAPI_ADMIN_AUTH_COOKIE_NAME);
|
|
9
9
|
/**
|
|
10
|
-
* Resolved once at module load: the build inlines `admin.auth.cookie.path
|
|
11
|
-
* into the bundle as
|
|
10
|
+
* Resolved once at module load: the build inlines `admin.auth.cookie.path`,
|
|
11
|
+
* or the path the panel is served from when it is unset, into the bundle as
|
|
12
|
+
* `STRAPI_ADMIN_AUTH_COOKIE_PATH`.
|
|
12
13
|
*/ const AUTH_COOKIE_PATH = resolveAuthCookiePath(process.env.STRAPI_ADMIN_AUTH_COOKIE_PATH);
|
|
13
14
|
/**
|
|
14
15
|
* Resolved once at module load: the build inlines `admin.auth.cookie.domain`
|
|
@@ -65,10 +66,10 @@ const expireCookieAt = (name, path, domain)=>{
|
|
|
65
66
|
};
|
|
66
67
|
/**
|
|
67
68
|
* Sets a cookie with the given name, value, and optional expiration time.
|
|
68
|
-
* Uses
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
69
|
+
* Uses the access cookie path and `admin.auth.cookie.domain` (both inlined at
|
|
70
|
+
* build time) so the cookie lands on the same path and domain as the EE SSO
|
|
71
|
+
* access cookie written by the server. The cookie is marked `Secure` whenever
|
|
72
|
+
* the page is served over TLS.
|
|
72
73
|
*
|
|
73
74
|
* @param name - The name of the cookie.
|
|
74
75
|
* @param value - The value of the cookie.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cookies.mjs","sources":["../../../../../admin/src/utils/cookies.ts"],"sourcesContent":["import { resolveAuthCookieDomain } from '../../../shared/utils/auth-cookie-domain';\nimport { resolveAuthCookieName } from '../../../shared/utils/auth-cookie-name';\nimport { resolveAuthCookiePath } from '../../../shared/utils/auth-cookie-path';\n\n/**\n * Resolved once at module load: the build inlines `admin.auth.cookie.name`\n * into the bundle as `STRAPI_ADMIN_AUTH_COOKIE_NAME`.\n */\nexport const AUTH_COOKIE_NAME = resolveAuthCookieName(process.env.STRAPI_ADMIN_AUTH_COOKIE_NAME);\n\n/**\n * Resolved once at module load: the build inlines `admin.auth.cookie.path
|
|
1
|
+
{"version":3,"file":"cookies.mjs","sources":["../../../../../admin/src/utils/cookies.ts"],"sourcesContent":["import { resolveAuthCookieDomain } from '../../../shared/utils/auth-cookie-domain';\nimport { resolveAuthCookieName } from '../../../shared/utils/auth-cookie-name';\nimport { resolveAuthCookiePath } from '../../../shared/utils/auth-cookie-path';\n\n/**\n * Resolved once at module load: the build inlines `admin.auth.cookie.name`\n * into the bundle as `STRAPI_ADMIN_AUTH_COOKIE_NAME`.\n */\nexport const AUTH_COOKIE_NAME = resolveAuthCookieName(process.env.STRAPI_ADMIN_AUTH_COOKIE_NAME);\n\n/**\n * Resolved once at module load: the build inlines `admin.auth.cookie.path`,\n * or the path the panel is served from when it is unset, into the bundle as\n * `STRAPI_ADMIN_AUTH_COOKIE_PATH`.\n */\nexport const AUTH_COOKIE_PATH = resolveAuthCookiePath(process.env.STRAPI_ADMIN_AUTH_COOKIE_PATH);\n\n/**\n * Resolved once at module load: the build inlines `admin.auth.cookie.domain`\n * into the bundle as `STRAPI_ADMIN_AUTH_COOKIE_DOMAIN`. `undefined` means the\n * cookie is host-only.\n */\nexport const AUTH_COOKIE_DOMAIN = resolveAuthCookieDomain(\n process.env.STRAPI_ADMIN_AUTH_COOKIE_DOMAIN\n);\n\n/** Paths previously used by the client for the access cookie; cleared on set/delete. */\nconst LEGACY_AUTH_COOKIE_PATHS = ['/'] as const;\n\nconst expireCookieAt = (name: string, path: string, domain?: string): void => {\n const domainAttr = domain ? `; Domain=${domain}` : '';\n document.cookie = `${name}=; Path=${path}${domainAttr}; Expires=Thu, 01 Jan 1970 00:00:01 GMT;`;\n};\n\n/**\n * Every `(path, domain)` key the access cookie may live under: the configured\n * key plus the legacy-path and host-only variants written by older versions or\n * previous configs. The browser cookie store keys entries by\n * `(name, domain, path)`, so each combination is a distinct entry.\n */\nconst cookieKeyMatrix = (): Array<{ path: string; domain: string | undefined }> => {\n const paths = new Set<string>([AUTH_COOKIE_PATH, ...LEGACY_AUTH_COOKIE_PATHS]);\n const domains = new Set<string | undefined>([undefined, AUTH_COOKIE_DOMAIN]);\n\n const matrix: Array<{ path: string; domain: string | undefined }> = [];\n for (const path of paths) {\n for (const domain of domains) {\n matrix.push({ path, domain });\n }\n }\n return matrix;\n};\n\n/**\n * Retrieves the value of a specified cookie.\n *\n * @param name - The name of the cookie to retrieve.\n * @returns The decoded cookie value if found, otherwise null.\n */\nexport const getCookieValue = (name: string): string | null => {\n let result = null;\n const cookieArray = document.cookie.split(';');\n cookieArray.forEach((cookie) => {\n const [key, value] = cookie.split('=').map((item) => item.trim());\n if (key === name) {\n result = decodeURIComponent(value);\n }\n });\n return result;\n};\n\n/**\n * Sets a cookie with the given name, value, and optional expiration time.\n * Uses the access cookie path and `admin.auth.cookie.domain` (both inlined at\n * build time) so the cookie lands on the same path and domain as the EE SSO\n * access cookie written by the server. The cookie is marked `Secure` whenever\n * the page is served over TLS.\n *\n * @param name - The name of the cookie.\n * @param value - The value of the cookie.\n * @param days - (Optional) Number of days until the cookie expires. If omitted, the cookie is a session cookie.\n */\nexport const setCookie = (name: string, value: string, days?: number): void => {\n let expires = '';\n if (days) {\n const date = new Date();\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n expires = `; Expires=${date.toUTCString()}`;\n }\n\n // Expire every other key the cookie may live under (legacy Path=/, host-only\n // copies written before a domain was configured). A stale same-name entry at\n // an equal-length path sorts first in document.cookie by creation time\n // (RFC 6265 §5.4), so leaving one behind would shadow the token written below.\n for (const { path, domain } of cookieKeyMatrix()) {\n if (path !== AUTH_COOKIE_PATH || domain !== AUTH_COOKIE_DOMAIN) {\n expireCookieAt(name, path, domain);\n }\n }\n\n const domainAttr = AUTH_COOKIE_DOMAIN ? `; Domain=${AUTH_COOKIE_DOMAIN}` : '';\n // Mark the token Secure when the page itself is served over TLS — the\n // browser's own criterion — so it is never attached to plain-http requests.\n // Expiry writes stay flag-free on purpose: deletion targets the (name,\n // domain, path) key regardless of Secure, and from an http origin a\n // flag-free write can still clear non-Secure entries (no origin can carry\n // the Secure flag over http, and Secure entries are untouchable from there\n // either way).\n const secureAttr = window.location.protocol === 'https:' ? '; Secure' : '';\n document.cookie = `${name}=${encodeURIComponent(value)}; Path=${AUTH_COOKIE_PATH}${domainAttr}${expires}${secureAttr}`;\n};\n\n/**\n * Deletes a cookie by setting its expiration date to a past date.\n *\n * Expires every combination of {configured path, legacy Path=/} and\n * {configured domain, host-only}. A `Domain`-scoped cookie is a distinct entry\n * from a host-only one in the browser cookie store, so both must be cleared or\n * remote logout leaves the EE SSO cookie (written with `Domain` by the server)\n * behind, rehydrating a dead session into an infinite login redirect.\n *\n * @param name - The name of the cookie to delete.\n */\nexport const deleteCookie = (name: string): void => {\n for (const { path, domain } of cookieKeyMatrix()) {\n expireCookieAt(name, path, domain);\n }\n};\n"],"names":["AUTH_COOKIE_NAME","resolveAuthCookieName","process","env","STRAPI_ADMIN_AUTH_COOKIE_NAME","AUTH_COOKIE_PATH","resolveAuthCookiePath","STRAPI_ADMIN_AUTH_COOKIE_PATH","AUTH_COOKIE_DOMAIN","resolveAuthCookieDomain","STRAPI_ADMIN_AUTH_COOKIE_DOMAIN","LEGACY_AUTH_COOKIE_PATHS","expireCookieAt","name","path","domain","domainAttr","document","cookie","cookieKeyMatrix","paths","Set","domains","undefined","matrix","push","getCookieValue","result","cookieArray","split","forEach","key","value","map","item","trim","decodeURIComponent","setCookie","days","expires","secureAttr","window","location","protocol","encodeURIComponent","deleteCookie"],"mappings":"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"}
|
|
@@ -46,6 +46,7 @@ function _interopNamespace(e) {
|
|
|
46
46
|
|
|
47
47
|
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
48
48
|
|
|
49
|
+
const EMPTY_PERMISSIONS = [];
|
|
49
50
|
reactQuery.setLogger({
|
|
50
51
|
log: ()=>{},
|
|
51
52
|
warn: ()=>{},
|
|
@@ -92,7 +93,7 @@ const DEFAULT_PERMISSIONS = [
|
|
|
92
93
|
actionParameters: {}
|
|
93
94
|
}
|
|
94
95
|
];
|
|
95
|
-
const Providers = ({ children, initialEntries, storeConfig, permissions =
|
|
96
|
+
const Providers = ({ children, initialEntries, storeConfig, permissions = EMPTY_PERMISSIONS })=>{
|
|
96
97
|
/**
|
|
97
98
|
* Keep these instances stable for the lifetime of the render.
|
|
98
99
|
* Recreating the data router on rerenders can crash React Router.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../../../admin/tests/utils.tsx"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\n\nimport * as React from 'react';\n\nimport { ConfigureStoreOptions, configureStore } from '@reduxjs/toolkit';\nimport { fixtures } from '@strapi/admin-test-utils';\nimport { darkTheme, lightTheme } from '@strapi/design-system';\nimport {\n fireEvent,\n renderHook as renderHookRTL,\n render as renderRTL,\n waitFor,\n RenderOptions as RTLRenderOptions,\n RenderResult,\n act,\n screen,\n RenderHookOptions,\n RenderHookResult,\n Queries,\n} from '@testing-library/react';\nimport { userEvent } from '@testing-library/user-event';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { QueryClient, QueryClientProvider, setLogger } from 'react-query';\nimport { Provider } from 'react-redux';\nimport { MemoryRouterProps, RouterProvider, createMemoryRouter } from 'react-router-dom';\n\nimport { GuidedTourContext } from '../src/components/GuidedTour/Context';\nimport { LanguageProvider } from '../src/components/LanguageProvider';\nimport { Theme } from '../src/components/Theme';\nimport { RBAC } from '../src/core/apis/rbac';\nimport { AppInfoProvider } from '../src/features/AppInfo';\nimport { AuthProvider, type Permission } from '../src/features/Auth';\nimport { _internalConfigurationContextProvider as ConfigurationContextProvider } from '../src/features/Configuration';\nimport { NotificationsProvider } from '../src/features/Notifications';\nimport { StrapiAppProvider } from '../src/features/StrapiApp';\nimport { reducer as appReducer } from '../src/reducer';\nimport { adminApi } from '../src/services/api';\n\nimport { server } from './server';\nimport { initialState } from './store';\n\nsetLogger({\n log: () => {},\n warn: () => {},\n error: () => {},\n});\n\n/**\n * RTL's `rerender()` updates the `children` passed to our test `render()` helper.\n * However, we keep a stable `routerRef` to avoid recreating the data router (which\n * can crash React Router). That means the route element tree would otherwise keep\n * rendering the initial children forever.\n *\n * We solve this by passing `children` via React context, so consumers inside the\n * router element tree still update on rerenders without recreating the router.\n */\nconst TestChildrenContext = React.createContext<React.ReactNode>(null);\n\nconst TestChildrenOutlet = () => {\n return <>{React.useContext(TestChildrenContext)}</>;\n};\n\ninterface ProvidersProps {\n children: React.ReactNode;\n initialEntries?: MemoryRouterProps['initialEntries'];\n storeConfig?: Partial<ConfigureStoreOptions>;\n permissions?: Permission[] | ((defaultPermissions: Permission[]) => Permission[] | undefined);\n}\n\nconst defaultTestStoreConfig = () => ({\n preloadedState: initialState(),\n reducer: {\n [adminApi.reducerPath]: adminApi.reducer,\n admin_app: appReducer,\n },\n // @ts-expect-error – this fails.\n middleware: (getDefaultMiddleware) => [\n ...getDefaultMiddleware({\n // Disable timing checks for test env\n immutableCheck: false,\n serializableCheck: false,\n }),\n adminApi.middleware,\n ],\n});\n\nconst DEFAULT_PERMISSIONS = [\n ...fixtures.permissions.allPermissions,\n {\n id: 314,\n action: 'admin::users.read',\n subject: null,\n properties: {},\n conditions: [],\n actionParameters: {},\n },\n];\n\nconst Providers = ({ children, initialEntries, storeConfig, permissions = [] }: ProvidersProps) => {\n /**\n * Keep these instances stable for the lifetime of the render.\n * Recreating the data router on rerenders can crash React Router.\n */\n const queryClientRef = React.useRef<QueryClient | null>(null);\n const storeRef = React.useRef<ReturnType<typeof configureStore> | null>(null);\n const routerRef = React.useRef<ReturnType<typeof createMemoryRouter> | null>(null);\n\n if (queryClientRef.current === null) {\n queryClientRef.current = new QueryClient({\n defaultOptions: {\n queries: {\n retry: false,\n },\n },\n });\n }\n\n if (storeRef.current === null) {\n storeRef.current = configureStore({\n ...defaultTestStoreConfig(),\n ...storeConfig,\n });\n }\n\n let allPermissions: Permission[];\n\n if (typeof permissions === 'function') {\n /**\n * The callback form can return `undefined` to mean \"use defaults\".\n * Guard against passing `undefined` into AuthProvider.\n */\n allPermissions = permissions(DEFAULT_PERMISSIONS) ?? DEFAULT_PERMISSIONS;\n } else {\n allPermissions = [...DEFAULT_PERMISSIONS, ...permissions];\n }\n\n if (routerRef.current === null) {\n routerRef.current = createMemoryRouter(\n [\n {\n path: '/*',\n element: (\n <StrapiAppProvider\n components={{}}\n rbac={new RBAC()}\n widgets={\n {\n widgets: [],\n getAll: jest.fn(),\n register: jest.fn(),\n } as unknown as React.ComponentProps<typeof StrapiAppProvider>['widgets']\n }\n customFields={{\n customFields: {},\n get: jest.fn().mockReturnValue({\n name: 'color',\n pluginId: 'mycustomfields',\n type: 'text',\n icon: jest.fn(),\n intlLabel: {\n id: 'mycustomfields.color.label',\n defaultMessage: 'Color',\n },\n intlDescription: {\n id: 'mycustomfields.color.description',\n defaultMessage: 'Select any color',\n },\n components: {\n Input: jest.fn().mockResolvedValue({ default: jest.fn() }),\n },\n }),\n getAll: jest.fn(),\n register: jest.fn(),\n }}\n fields={{}}\n menu={[]}\n getAdminInjectedComponents={jest.fn()}\n getPlugin={jest.fn()}\n plugins={{}}\n runHookParallel={jest.fn()}\n runHookWaterfall={jest.fn().mockImplementation((_name, initialValue) => initialValue)}\n runHookSeries={jest.fn()}\n settings={{}}\n >\n <Provider store={storeRef.current!}>\n <LanguageProvider messages={{}}>\n <Theme\n themes={{\n dark: darkTheme,\n light: lightTheme,\n }}\n >\n <AuthProvider _defaultPermissions={allPermissions} _disableRenewToken={true}>\n <QueryClientProvider client={queryClientRef.current!}>\n <DndProvider backend={HTML5Backend}>\n <NotificationsProvider>\n <GuidedTourContext enabled={false}>\n <ConfigurationContextProvider\n showReleaseNotification={false}\n logos={{\n auth: { default: 'default' },\n menu: { default: 'default' },\n }}\n updateProjectSettings={jest.fn()}\n >\n <AppInfoProvider\n autoReload\n useYarn\n dependencies={{\n '@strapi/plugin-documentation': '4.2.0',\n '@strapi/provider-upload-cloudinary': '4.2.0',\n }}\n strapiVersion=\"4.1.0\"\n communityEdition\n shouldUpdateStrapi={false}\n >\n <TestChildrenOutlet />\n </AppInfoProvider>\n </ConfigurationContextProvider>\n </GuidedTourContext>\n </NotificationsProvider>\n </DndProvider>\n </QueryClientProvider>\n </AuthProvider>\n </Theme>\n </LanguageProvider>\n </Provider>\n </StrapiAppProvider>\n ),\n },\n ],\n {\n initialEntries,\n }\n );\n }\n\n // en is the default locale of the admin app.\n return (\n <TestChildrenContext.Provider value={children}>\n <RouterProvider router={routerRef.current!} />\n </TestChildrenContext.Provider>\n );\n};\n\n// eslint-disable-next-line react/jsx-no-useless-fragment\nconst fallbackWrapper = ({ children }: { children: React.ReactNode }) => <>{children}</>;\n\nexport interface RenderOptions {\n renderOptions?: RTLRenderOptions;\n userEventOptions?: Parameters<typeof userEvent.setup>[0];\n initialEntries?: MemoryRouterProps['initialEntries'];\n providerOptions?: Pick<ProvidersProps, 'storeConfig' | 'permissions'>;\n}\n\n/**\n * @alpha\n * @description A custom render function that wraps the component with the necessary providers,\n * for use of testing components within the Strapi Admin.\n */\nconst render = (\n ui: React.ReactElement,\n { renderOptions, userEventOptions, initialEntries, providerOptions }: RenderOptions = {}\n): RenderResult & { user: ReturnType<typeof userEvent.setup> } => {\n const { wrapper: Wrapper = fallbackWrapper, ...restOptions } = renderOptions ?? {};\n\n return {\n ...renderRTL(ui, {\n wrapper: ({ children }) => (\n <Providers initialEntries={initialEntries} {...providerOptions}>\n <Wrapper>{children}</Wrapper>\n </Providers>\n ),\n ...restOptions,\n }),\n user: userEvent.setup({\n skipHover: true,\n ...userEventOptions,\n }),\n };\n};\n\n/**\n * @alpha\n * @description A custom render-hook function that wraps the component with the necessary providers,\n * for use of testing hooks within the Strapi Admin.\n */\nconst renderHook = <\n Result,\n Props,\n Q extends Queries,\n Container extends Element | DocumentFragment = HTMLElement,\n BaseElement extends Element | DocumentFragment = Container,\n>(\n hook: (initialProps: Props) => Result,\n options?: RenderHookOptions<Props, Q, Container, BaseElement> &\n Pick<RenderOptions, 'initialEntries' | 'providerOptions'>\n): RenderHookResult<Result, Props> => {\n const {\n wrapper: Wrapper = fallbackWrapper,\n initialEntries,\n providerOptions,\n ...restOptions\n } = options ?? {};\n\n return renderHookRTL(hook, {\n wrapper: ({ children }) => (\n <Providers initialEntries={initialEntries} {...providerOptions}>\n <Wrapper>{children}</Wrapper>\n </Providers>\n ),\n ...restOptions,\n });\n};\n\nexport { render, renderHook, waitFor, server, act, screen, fireEvent, defaultTestStoreConfig };\n"],"names":["setLogger","log","warn","error","TestChildrenContext","React","createContext","TestChildrenOutlet","_jsx","_Fragment","useContext","defaultTestStoreConfig","preloadedState","initialState","reducer","adminApi","reducerPath","admin_app","appReducer","middleware","getDefaultMiddleware","immutableCheck","serializableCheck","DEFAULT_PERMISSIONS","fixtures","permissions","allPermissions","id","action","subject","properties","conditions","actionParameters","Providers","children","initialEntries","storeConfig","queryClientRef","useRef","storeRef","routerRef","current","QueryClient","defaultOptions","queries","retry","configureStore","createMemoryRouter","path","element","StrapiAppProvider","components","rbac","RBAC","widgets","getAll","jest","fn","register","customFields","get","mockReturnValue","name","pluginId","type","icon","intlLabel","defaultMessage","intlDescription","Input","mockResolvedValue","default","fields","menu","getAdminInjectedComponents","getPlugin","plugins","runHookParallel","runHookWaterfall","mockImplementation","_name","initialValue","runHookSeries","settings","Provider","store","LanguageProvider","messages","Theme","themes","dark","darkTheme","light","lightTheme","AuthProvider","_defaultPermissions","_disableRenewToken","QueryClientProvider","client","DndProvider","backend","HTML5Backend","NotificationsProvider","GuidedTourContext","enabled","ConfigurationContextProvider","showReleaseNotification","logos","auth","updateProjectSettings","AppInfoProvider","autoReload","useYarn","dependencies","strapiVersion","communityEdition","shouldUpdateStrapi","value","RouterProvider","router","fallbackWrapper","render","ui","renderOptions","userEventOptions","providerOptions","wrapper","Wrapper","restOptions","renderRTL","user","userEvent","setup","skipHover","renderHook","hook","options","renderHookRTL"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../../admin/tests/utils.tsx"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\n\nimport * as React from 'react';\n\nimport { ConfigureStoreOptions, configureStore } from '@reduxjs/toolkit';\nimport { fixtures } from '@strapi/admin-test-utils';\nimport { darkTheme, lightTheme } from '@strapi/design-system';\nimport {\n fireEvent,\n renderHook as renderHookRTL,\n render as renderRTL,\n waitFor,\n RenderOptions as RTLRenderOptions,\n RenderResult,\n act,\n screen,\n RenderHookOptions,\n RenderHookResult,\n Queries,\n} from '@testing-library/react';\nimport { userEvent } from '@testing-library/user-event';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { QueryClient, QueryClientProvider, setLogger } from 'react-query';\nimport { Provider } from 'react-redux';\nimport { MemoryRouterProps, RouterProvider, createMemoryRouter } from 'react-router-dom';\n\nimport { GuidedTourContext } from '../src/components/GuidedTour/Context';\nimport { LanguageProvider } from '../src/components/LanguageProvider';\nimport { Theme } from '../src/components/Theme';\nimport { RBAC } from '../src/core/apis/rbac';\nimport { AppInfoProvider } from '../src/features/AppInfo';\nimport { AuthProvider, type Permission } from '../src/features/Auth';\nimport { _internalConfigurationContextProvider as ConfigurationContextProvider } from '../src/features/Configuration';\nimport { NotificationsProvider } from '../src/features/Notifications';\nimport { StrapiAppProvider } from '../src/features/StrapiApp';\nimport { reducer as appReducer } from '../src/reducer';\nimport { adminApi } from '../src/services/api';\n\nimport { server } from './server';\nimport { initialState } from './store';\n\nconst EMPTY_PERMISSIONS: NonNullable<ProvidersProps['permissions']> = [];\n\nsetLogger({\n log: () => {},\n warn: () => {},\n error: () => {},\n});\n\n/**\n * RTL's `rerender()` updates the `children` passed to our test `render()` helper.\n * However, we keep a stable `routerRef` to avoid recreating the data router (which\n * can crash React Router). That means the route element tree would otherwise keep\n * rendering the initial children forever.\n *\n * We solve this by passing `children` via React context, so consumers inside the\n * router element tree still update on rerenders without recreating the router.\n */\nconst TestChildrenContext = React.createContext<React.ReactNode>(null);\n\nconst TestChildrenOutlet = () => {\n return <>{React.useContext(TestChildrenContext)}</>;\n};\n\ninterface ProvidersProps {\n children: React.ReactNode;\n initialEntries?: MemoryRouterProps['initialEntries'];\n storeConfig?: Partial<ConfigureStoreOptions>;\n permissions?: Permission[] | ((defaultPermissions: Permission[]) => Permission[] | undefined);\n}\n\nconst defaultTestStoreConfig = () => ({\n preloadedState: initialState(),\n reducer: {\n [adminApi.reducerPath]: adminApi.reducer,\n admin_app: appReducer,\n },\n // @ts-expect-error – this fails.\n middleware: (getDefaultMiddleware) => [\n ...getDefaultMiddleware({\n // Disable timing checks for test env\n immutableCheck: false,\n serializableCheck: false,\n }),\n adminApi.middleware,\n ],\n});\n\nconst DEFAULT_PERMISSIONS = [\n ...fixtures.permissions.allPermissions,\n {\n id: 314,\n action: 'admin::users.read',\n subject: null,\n properties: {},\n conditions: [],\n actionParameters: {},\n },\n];\n\nconst Providers = ({\n children,\n initialEntries,\n storeConfig,\n permissions = EMPTY_PERMISSIONS,\n}: ProvidersProps) => {\n /**\n * Keep these instances stable for the lifetime of the render.\n * Recreating the data router on rerenders can crash React Router.\n */\n const queryClientRef = React.useRef<QueryClient | null>(null);\n const storeRef = React.useRef<ReturnType<typeof configureStore> | null>(null);\n const routerRef = React.useRef<ReturnType<typeof createMemoryRouter> | null>(null);\n\n if (queryClientRef.current === null) {\n queryClientRef.current = new QueryClient({\n defaultOptions: {\n queries: {\n retry: false,\n },\n },\n });\n }\n\n if (storeRef.current === null) {\n storeRef.current = configureStore({\n ...defaultTestStoreConfig(),\n ...storeConfig,\n });\n }\n\n let allPermissions: Permission[];\n\n if (typeof permissions === 'function') {\n /**\n * The callback form can return `undefined` to mean \"use defaults\".\n * Guard against passing `undefined` into AuthProvider.\n */\n allPermissions = permissions(DEFAULT_PERMISSIONS) ?? DEFAULT_PERMISSIONS;\n } else {\n allPermissions = [...DEFAULT_PERMISSIONS, ...permissions];\n }\n\n if (routerRef.current === null) {\n routerRef.current = createMemoryRouter(\n [\n {\n path: '/*',\n element: (\n <StrapiAppProvider\n components={{}}\n rbac={new RBAC()}\n widgets={\n {\n widgets: [],\n getAll: jest.fn(),\n register: jest.fn(),\n } as unknown as React.ComponentProps<typeof StrapiAppProvider>['widgets']\n }\n customFields={{\n customFields: {},\n get: jest.fn().mockReturnValue({\n name: 'color',\n pluginId: 'mycustomfields',\n type: 'text',\n icon: jest.fn(),\n intlLabel: {\n id: 'mycustomfields.color.label',\n defaultMessage: 'Color',\n },\n intlDescription: {\n id: 'mycustomfields.color.description',\n defaultMessage: 'Select any color',\n },\n components: {\n Input: jest.fn().mockResolvedValue({ default: jest.fn() }),\n },\n }),\n getAll: jest.fn(),\n register: jest.fn(),\n }}\n fields={{}}\n menu={[]}\n getAdminInjectedComponents={jest.fn()}\n getPlugin={jest.fn()}\n plugins={{}}\n runHookParallel={jest.fn()}\n runHookWaterfall={jest.fn().mockImplementation((_name, initialValue) => initialValue)}\n runHookSeries={jest.fn()}\n settings={{}}\n >\n <Provider store={storeRef.current!}>\n <LanguageProvider messages={{}}>\n <Theme\n themes={{\n dark: darkTheme,\n light: lightTheme,\n }}\n >\n <AuthProvider _defaultPermissions={allPermissions} _disableRenewToken={true}>\n <QueryClientProvider client={queryClientRef.current!}>\n <DndProvider backend={HTML5Backend}>\n <NotificationsProvider>\n <GuidedTourContext enabled={false}>\n <ConfigurationContextProvider\n showReleaseNotification={false}\n logos={{\n auth: { default: 'default' },\n menu: { default: 'default' },\n }}\n updateProjectSettings={jest.fn()}\n >\n <AppInfoProvider\n autoReload\n useYarn\n dependencies={{\n '@strapi/plugin-documentation': '4.2.0',\n '@strapi/provider-upload-cloudinary': '4.2.0',\n }}\n strapiVersion=\"4.1.0\"\n communityEdition\n shouldUpdateStrapi={false}\n >\n <TestChildrenOutlet />\n </AppInfoProvider>\n </ConfigurationContextProvider>\n </GuidedTourContext>\n </NotificationsProvider>\n </DndProvider>\n </QueryClientProvider>\n </AuthProvider>\n </Theme>\n </LanguageProvider>\n </Provider>\n </StrapiAppProvider>\n ),\n },\n ],\n {\n initialEntries,\n }\n );\n }\n\n // en is the default locale of the admin app.\n return (\n <TestChildrenContext.Provider value={children}>\n <RouterProvider router={routerRef.current!} />\n </TestChildrenContext.Provider>\n );\n};\n\n// eslint-disable-next-line react/jsx-no-useless-fragment\nconst fallbackWrapper = ({ children }: { children: React.ReactNode }) => <>{children}</>;\n\nexport interface RenderOptions {\n renderOptions?: RTLRenderOptions;\n userEventOptions?: Parameters<typeof userEvent.setup>[0];\n initialEntries?: MemoryRouterProps['initialEntries'];\n providerOptions?: Pick<ProvidersProps, 'storeConfig' | 'permissions'>;\n}\n\n/**\n * @alpha\n * @description A custom render function that wraps the component with the necessary providers,\n * for use of testing components within the Strapi Admin.\n */\nconst render = (\n ui: React.ReactElement,\n { renderOptions, userEventOptions, initialEntries, providerOptions }: RenderOptions = {}\n): RenderResult & { user: ReturnType<typeof userEvent.setup> } => {\n const { wrapper: Wrapper = fallbackWrapper, ...restOptions } = renderOptions ?? {};\n\n return {\n ...renderRTL(ui, {\n wrapper: ({ children }) => (\n <Providers initialEntries={initialEntries} {...providerOptions}>\n <Wrapper>{children}</Wrapper>\n </Providers>\n ),\n ...restOptions,\n }),\n user: userEvent.setup({\n skipHover: true,\n ...userEventOptions,\n }),\n };\n};\n\n/**\n * @alpha\n * @description A custom render-hook function that wraps the component with the necessary providers,\n * for use of testing hooks within the Strapi Admin.\n */\nconst renderHook = <\n Result,\n Props,\n Q extends Queries,\n Container extends Element | DocumentFragment = HTMLElement,\n BaseElement extends Element | DocumentFragment = Container,\n>(\n hook: (initialProps: Props) => Result,\n options?: RenderHookOptions<Props, Q, Container, BaseElement> &\n Pick<RenderOptions, 'initialEntries' | 'providerOptions'>\n): RenderHookResult<Result, Props> => {\n const {\n wrapper: Wrapper = fallbackWrapper,\n initialEntries,\n providerOptions,\n ...restOptions\n } = options ?? {};\n\n return renderHookRTL(hook, {\n wrapper: ({ children }) => (\n <Providers initialEntries={initialEntries} {...providerOptions}>\n <Wrapper>{children}</Wrapper>\n </Providers>\n ),\n ...restOptions,\n });\n};\n\nexport { render, renderHook, waitFor, server, act, screen, fireEvent, defaultTestStoreConfig };\n"],"names":["EMPTY_PERMISSIONS","setLogger","log","warn","error","TestChildrenContext","React","createContext","TestChildrenOutlet","_jsx","_Fragment","useContext","defaultTestStoreConfig","preloadedState","initialState","reducer","adminApi","reducerPath","admin_app","appReducer","middleware","getDefaultMiddleware","immutableCheck","serializableCheck","DEFAULT_PERMISSIONS","fixtures","permissions","allPermissions","id","action","subject","properties","conditions","actionParameters","Providers","children","initialEntries","storeConfig","queryClientRef","useRef","storeRef","routerRef","current","QueryClient","defaultOptions","queries","retry","configureStore","createMemoryRouter","path","element","StrapiAppProvider","components","rbac","RBAC","widgets","getAll","jest","fn","register","customFields","get","mockReturnValue","name","pluginId","type","icon","intlLabel","defaultMessage","intlDescription","Input","mockResolvedValue","default","fields","menu","getAdminInjectedComponents","getPlugin","plugins","runHookParallel","runHookWaterfall","mockImplementation","_name","initialValue","runHookSeries","settings","Provider","store","LanguageProvider","messages","Theme","themes","dark","darkTheme","light","lightTheme","AuthProvider","_defaultPermissions","_disableRenewToken","QueryClientProvider","client","DndProvider","backend","HTML5Backend","NotificationsProvider","GuidedTourContext","enabled","ConfigurationContextProvider","showReleaseNotification","logos","auth","updateProjectSettings","AppInfoProvider","autoReload","useYarn","dependencies","strapiVersion","communityEdition","shouldUpdateStrapi","value","RouterProvider","router","fallbackWrapper","render","ui","renderOptions","userEventOptions","providerOptions","wrapper","Wrapper","restOptions","renderRTL","user","userEvent","setup","skipHover","renderHook","hook","options","renderHookRTL"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CA,MAAMA,oBAAgE,EAAE;AAExEC,oBAAAA,CAAU;AACRC,IAAAA,GAAAA,EAAK,IAAA,CAAO,CAAA;AACZC,IAAAA,IAAAA,EAAM,IAAA,CAAO,CAAA;AACbC,IAAAA,KAAAA,EAAO,IAAA,CAAO;AAChB,CAAA,CAAA;AAEA;;;;;;;;AAQC,IACD,MAAMC,mBAAAA,iBAAsBC,gBAAAA,CAAMC,aAAa,CAAkB,IAAA,CAAA;AAEjE,MAAMC,kBAAAA,GAAqB,IAAA;IACzB,qBAAOC,cAAA,CAAAC,mBAAA,EAAA;AAAGJ,QAAAA,QAAAA,EAAAA,gBAAAA,CAAMK,UAAU,CAACN,mBAAAA;;AAC7B,CAAA;AASA,MAAMO,sBAAAA,GAAyB,KAAO;QACpCC,cAAAA,EAAgBC,kBAAAA,EAAAA;QAChBC,OAAAA,EAAS;AACP,YAAA,CAACC,YAAAA,CAASC,WAAW,GAAGD,aAASD,OAAO;YACxCG,SAAAA,EAAWC;AACb,SAAA;;AAEAC,QAAAA,UAAAA,EAAY,CAACC,oBAAAA,GAAyB;mBACjCA,oBAAAA,CAAqB;;oBAEtBC,cAAAA,EAAgB,KAAA;oBAChBC,iBAAAA,EAAmB;AACrB,iBAAA,CAAA;AACAP,gBAAAA,YAAAA,CAASI;AACV;KACH;AAEA,MAAMI,mBAAAA,GAAsB;OACvBC,uBAAAA,CAASC,WAAW,CAACC,cAAc;AACtC,IAAA;QACEC,EAAAA,EAAI,GAAA;QACJC,MAAAA,EAAQ,mBAAA;QACRC,OAAAA,EAAS,IAAA;AACTC,QAAAA,UAAAA,EAAY,EAAC;AACbC,QAAAA,UAAAA,EAAY,EAAE;AACdC,QAAAA,gBAAAA,EAAkB;AACpB;AACD,CAAA;AAED,MAAMC,SAAAA,GAAY,CAAC,EACjBC,QAAQ,EACRC,cAAc,EACdC,WAAW,EACXX,WAAAA,GAAc1B,iBAAiB,EAChB,GAAA;AACf;;;AAGC,MACD,MAAMsC,cAAAA,GAAiBhC,gBAAAA,CAAMiC,MAAM,CAAqB,IAAA,CAAA;IACxD,MAAMC,QAAAA,GAAWlC,gBAAAA,CAAMiC,MAAM,CAA2C,IAAA,CAAA;IACxE,MAAME,SAAAA,GAAYnC,gBAAAA,CAAMiC,MAAM,CAA+C,IAAA,CAAA;IAE7E,IAAID,cAAAA,CAAeI,OAAO,KAAK,IAAA,EAAM;QACnCJ,cAAAA,CAAeI,OAAO,GAAG,IAAIC,sBAAAA,CAAY;YACvCC,cAAAA,EAAgB;gBACdC,OAAAA,EAAS;oBACPC,KAAAA,EAAO;AACT;AACF;AACF,SAAA,CAAA;AACF,IAAA;IAEA,IAAIN,QAAAA,CAASE,OAAO,KAAK,IAAA,EAAM;QAC7BF,QAAAA,CAASE,OAAO,GAAGK,sBAAAA,CAAe;AAChC,YAAA,GAAGnC,sBAAAA,EAAwB;AAC3B,YAAA,GAAGyB;AACL,SAAA,CAAA;AACF,IAAA;IAEA,IAAIV,cAAAA;IAEJ,IAAI,OAAOD,gBAAgB,UAAA,EAAY;AACrC;;;QAIAC,cAAAA,GAAiBD,YAAYF,mBAAAA,CAAAA,IAAwBA,mBAAAA;IACvD,CAAA,MAAO;QACLG,cAAAA,GAAiB;AAAIH,YAAAA,GAAAA,mBAAAA;AAAwBE,YAAAA,GAAAA;AAAY,SAAA;AAC3D,IAAA;IAEA,IAAIe,SAAAA,CAAUC,OAAO,KAAK,IAAA,EAAM;QAC9BD,SAAAA,CAAUC,OAAO,GAAGM,iCAAAA,CAClB;AACE,YAAA;gBACEC,IAAAA,EAAM,IAAA;AACNC,gBAAAA,OAAAA,gBACEzC,cAAA,CAAC0C,2BAAAA,EAAAA;AACCC,oBAAAA,UAAAA,EAAY,EAAC;AACbC,oBAAAA,IAAAA,EAAM,IAAIC,SAAAA,EAAAA;oBACVC,OAAAA,EACE;AACEA,wBAAAA,OAAAA,EAAS,EAAE;AACXC,wBAAAA,MAAAA,EAAQC,KAAKC,EAAE,EAAA;AACfC,wBAAAA,QAAAA,EAAUF,KAAKC,EAAE;AACnB,qBAAA;oBAEFE,YAAAA,EAAc;AACZA,wBAAAA,YAAAA,EAAc,EAAC;AACfC,wBAAAA,GAAAA,EAAKJ,IAAAA,CAAKC,EAAE,EAAA,CAAGI,eAAe,CAAC;4BAC7BC,IAAAA,EAAM,OAAA;4BACNC,QAAAA,EAAU,gBAAA;4BACVC,IAAAA,EAAM,MAAA;AACNC,4BAAAA,IAAAA,EAAMT,KAAKC,EAAE,EAAA;4BACbS,SAAAA,EAAW;gCACTvC,EAAAA,EAAI,4BAAA;gCACJwC,cAAAA,EAAgB;AAClB,6BAAA;4BACAC,eAAAA,EAAiB;gCACfzC,EAAAA,EAAI,kCAAA;gCACJwC,cAAAA,EAAgB;AAClB,6BAAA;4BACAhB,UAAAA,EAAY;AACVkB,gCAAAA,KAAAA,EAAOb,IAAAA,CAAKC,EAAE,EAAA,CAAGa,iBAAiB,CAAC;AAAEC,oCAAAA,OAAAA,EAASf,KAAKC,EAAE;AAAG,iCAAA;AAC1D;AACF,yBAAA,CAAA;AACAF,wBAAAA,MAAAA,EAAQC,KAAKC,EAAE,EAAA;AACfC,wBAAAA,QAAAA,EAAUF,KAAKC,EAAE;AACnB,qBAAA;AACAe,oBAAAA,MAAAA,EAAQ,EAAC;AACTC,oBAAAA,IAAAA,EAAM,EAAE;AACRC,oBAAAA,0BAAAA,EAA4BlB,KAAKC,EAAE,EAAA;AACnCkB,oBAAAA,SAAAA,EAAWnB,KAAKC,EAAE,EAAA;AAClBmB,oBAAAA,OAAAA,EAAS,EAAC;AACVC,oBAAAA,eAAAA,EAAiBrB,KAAKC,EAAE,EAAA;AACxBqB,oBAAAA,gBAAAA,EAAkBtB,KAAKC,EAAE,EAAA,CAAGsB,kBAAkB,CAAC,CAACC,OAAOC,YAAAA,GAAiBA,YAAAA,CAAAA;AACxEC,oBAAAA,aAAAA,EAAe1B,KAAKC,EAAE,EAAA;AACtB0B,oBAAAA,QAAAA,EAAU,EAAC;AAEX,oBAAA,QAAA,gBAAA3E,cAAA,CAAC4E,mBAAAA,EAAAA;AAASC,wBAAAA,KAAAA,EAAO9C,SAASE,OAAO;AAC/B,wBAAA,QAAA,gBAAAjC,cAAA,CAAC8E,iCAAAA,EAAAA;AAAiBC,4BAAAA,QAAAA,EAAU,EAAC;AAC3B,4BAAA,QAAA,gBAAA/E,cAAA,CAACgF,WAAAA,EAAAA;gCACCC,MAAAA,EAAQ;oCACNC,IAAAA,EAAMC,sBAAAA;oCACNC,KAAAA,EAAOC;AACT,iCAAA;AAEA,gCAAA,QAAA,gBAAArF,cAAA,CAACsF,iBAAAA,EAAAA;oCAAaC,mBAAAA,EAAqBrE,cAAAA;oCAAgBsE,kBAAAA,EAAoB,IAAA;AACrE,oCAAA,QAAA,gBAAAxF,cAAA,CAACyF,8BAAAA,EAAAA;AAAoBC,wCAAAA,MAAAA,EAAQ7D,eAAeI,OAAO;AACjD,wCAAA,QAAA,gBAAAjC,cAAA,CAAC2F,oBAAAA,EAAAA;4CAAYC,OAAAA,EAASC,iCAAAA;AACpB,4CAAA,QAAA,gBAAA7F,cAAA,CAAC8F,mCAAAA,EAAAA;AACC,gDAAA,QAAA,gBAAA9F,cAAA,CAAC+F,yBAAAA,EAAAA;oDAAkBC,OAAAA,EAAS,KAAA;AAC1B,oDAAA,QAAA,gBAAAhG,cAAA,CAACiG,mDAAAA,EAAAA;wDACCC,uBAAAA,EAAyB,KAAA;wDACzBC,KAAAA,EAAO;4DACLC,IAAAA,EAAM;gEAAErC,OAAAA,EAAS;AAAU,6DAAA;4DAC3BE,IAAAA,EAAM;gEAAEF,OAAAA,EAAS;AAAU;AAC7B,yDAAA;AACAsC,wDAAAA,qBAAAA,EAAuBrD,KAAKC,EAAE,EAAA;AAE9B,wDAAA,QAAA,gBAAAjD,cAAA,CAACsG,uBAAAA,EAAAA;4DACCC,UAAU,EAAA,IAAA;4DACVC,OAAO,EAAA,IAAA;4DACPC,YAAAA,EAAc;gEACZ,8BAAA,EAAgC,OAAA;gEAChC,oCAAA,EAAsC;AACxC,6DAAA;4DACAC,aAAAA,EAAc,OAAA;4DACdC,gBAAgB,EAAA,IAAA;4DAChBC,kBAAAA,EAAoB,KAAA;AAEpB,4DAAA,QAAA,gBAAA5G,cAAA,CAACD,kBAAAA,EAAAA,EAAAA;;;;;;;;;;;;AAa3B;SACD,EACD;AACE4B,YAAAA;AACF,SAAA,CAAA;AAEJ,IAAA;;IAGA,qBACE3B,cAAA,CAACJ,oBAAoBgF,QAAQ,EAAA;QAACiC,KAAAA,EAAOnF,QAAAA;AACnC,QAAA,QAAA,gBAAA1B,cAAA,CAAC8G,6BAAAA,EAAAA;AAAeC,YAAAA,MAAAA,EAAQ/E,UAAUC;;;AAGxC,CAAA;AAEA;AACA,MAAM+E,eAAAA,GAAkB,CAAC,EAAEtF,QAAQ,EAAiC,iBAAK1B,cAAA,CAAAC,mBAAA,EAAA;AAAGyB,QAAAA,QAAAA,EAAAA;;AAS5E;;;;AAIC,IACD,MAAMuF,MAAAA,GAAS,CACbC,EAAAA,EACA,EAAEC,aAAa,EAAEC,gBAAgB,EAAEzF,cAAc,EAAE0F,eAAe,EAAiB,GAAG,EAAE,GAAA;IAExF,MAAM,EAAEC,SAASC,OAAAA,GAAUP,eAAe,EAAE,GAAGQ,WAAAA,EAAa,GAAGL,aAAAA,IAAiB,EAAC;IAEjF,OAAO;AACL,QAAA,GAAGM,aAAUP,EAAAA,EAAI;AACfI,YAAAA,OAAAA,EAAS,CAAC,EAAE5F,QAAQ,EAAE,iBACpB1B,cAAA,CAACyB,SAAAA,EAAAA;oBAAUE,cAAAA,EAAgBA,cAAAA;AAAiB,oBAAA,GAAG0F,eAAe;AAC5D,oBAAA,QAAA,gBAAArH,cAAA,CAACuH,OAAAA,EAAAA;AAAS7F,wBAAAA,QAAAA,EAAAA;;;AAGd,YAAA,GAAG8F;SACL,CAAE;QACFE,IAAAA,EAAMC,mBAAAA,CAAUC,KAAK,CAAC;YACpBC,SAAAA,EAAW,IAAA;AACX,YAAA,GAAGT;AACL,SAAA;AACF,KAAA;AACF;AAEA;;;;IAKA,MAAMU,UAAAA,GAAa,CAOjBC,IAAAA,EACAC,OAAAA,GAAAA;AAGA,IAAA,MAAM,EACJV,OAAAA,EAASC,OAAAA,GAAUP,eAAe,EAClCrF,cAAc,EACd0F,eAAe,EACf,GAAGG,WAAAA,EACJ,GAAGQ,WAAW,EAAC;AAEhB,IAAA,OAAOC,iBAAcF,IAAAA,EAAM;AACzBT,QAAAA,OAAAA,EAAS,CAAC,EAAE5F,QAAQ,EAAE,iBACpB1B,cAAA,CAACyB,SAAAA,EAAAA;gBAAUE,cAAAA,EAAgBA,cAAAA;AAAiB,gBAAA,GAAG0F,eAAe;AAC5D,gBAAA,QAAA,gBAAArH,cAAA,CAACuH,OAAAA,EAAAA;AAAS7F,oBAAAA,QAAAA,EAAAA;;;AAGd,QAAA,GAAG8F;AACL,KAAA,CAAA;AACF;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -25,6 +25,7 @@ import { adminApi } from '../src/services/api.mjs';
|
|
|
25
25
|
export { server } from './server.mjs';
|
|
26
26
|
import { initialState } from './store.mjs';
|
|
27
27
|
|
|
28
|
+
const EMPTY_PERMISSIONS = [];
|
|
28
29
|
setLogger({
|
|
29
30
|
log: ()=>{},
|
|
30
31
|
warn: ()=>{},
|
|
@@ -71,7 +72,7 @@ const DEFAULT_PERMISSIONS = [
|
|
|
71
72
|
actionParameters: {}
|
|
72
73
|
}
|
|
73
74
|
];
|
|
74
|
-
const Providers = ({ children, initialEntries, storeConfig, permissions =
|
|
75
|
+
const Providers = ({ children, initialEntries, storeConfig, permissions = EMPTY_PERMISSIONS })=>{
|
|
75
76
|
/**
|
|
76
77
|
* Keep these instances stable for the lifetime of the render.
|
|
77
78
|
* Recreating the data router on rerenders can crash React Router.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.mjs","sources":["../../../../admin/tests/utils.tsx"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\n\nimport * as React from 'react';\n\nimport { ConfigureStoreOptions, configureStore } from '@reduxjs/toolkit';\nimport { fixtures } from '@strapi/admin-test-utils';\nimport { darkTheme, lightTheme } from '@strapi/design-system';\nimport {\n fireEvent,\n renderHook as renderHookRTL,\n render as renderRTL,\n waitFor,\n RenderOptions as RTLRenderOptions,\n RenderResult,\n act,\n screen,\n RenderHookOptions,\n RenderHookResult,\n Queries,\n} from '@testing-library/react';\nimport { userEvent } from '@testing-library/user-event';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { QueryClient, QueryClientProvider, setLogger } from 'react-query';\nimport { Provider } from 'react-redux';\nimport { MemoryRouterProps, RouterProvider, createMemoryRouter } from 'react-router-dom';\n\nimport { GuidedTourContext } from '../src/components/GuidedTour/Context';\nimport { LanguageProvider } from '../src/components/LanguageProvider';\nimport { Theme } from '../src/components/Theme';\nimport { RBAC } from '../src/core/apis/rbac';\nimport { AppInfoProvider } from '../src/features/AppInfo';\nimport { AuthProvider, type Permission } from '../src/features/Auth';\nimport { _internalConfigurationContextProvider as ConfigurationContextProvider } from '../src/features/Configuration';\nimport { NotificationsProvider } from '../src/features/Notifications';\nimport { StrapiAppProvider } from '../src/features/StrapiApp';\nimport { reducer as appReducer } from '../src/reducer';\nimport { adminApi } from '../src/services/api';\n\nimport { server } from './server';\nimport { initialState } from './store';\n\nsetLogger({\n log: () => {},\n warn: () => {},\n error: () => {},\n});\n\n/**\n * RTL's `rerender()` updates the `children` passed to our test `render()` helper.\n * However, we keep a stable `routerRef` to avoid recreating the data router (which\n * can crash React Router). That means the route element tree would otherwise keep\n * rendering the initial children forever.\n *\n * We solve this by passing `children` via React context, so consumers inside the\n * router element tree still update on rerenders without recreating the router.\n */\nconst TestChildrenContext = React.createContext<React.ReactNode>(null);\n\nconst TestChildrenOutlet = () => {\n return <>{React.useContext(TestChildrenContext)}</>;\n};\n\ninterface ProvidersProps {\n children: React.ReactNode;\n initialEntries?: MemoryRouterProps['initialEntries'];\n storeConfig?: Partial<ConfigureStoreOptions>;\n permissions?: Permission[] | ((defaultPermissions: Permission[]) => Permission[] | undefined);\n}\n\nconst defaultTestStoreConfig = () => ({\n preloadedState: initialState(),\n reducer: {\n [adminApi.reducerPath]: adminApi.reducer,\n admin_app: appReducer,\n },\n // @ts-expect-error – this fails.\n middleware: (getDefaultMiddleware) => [\n ...getDefaultMiddleware({\n // Disable timing checks for test env\n immutableCheck: false,\n serializableCheck: false,\n }),\n adminApi.middleware,\n ],\n});\n\nconst DEFAULT_PERMISSIONS = [\n ...fixtures.permissions.allPermissions,\n {\n id: 314,\n action: 'admin::users.read',\n subject: null,\n properties: {},\n conditions: [],\n actionParameters: {},\n },\n];\n\nconst Providers = ({ children, initialEntries, storeConfig, permissions = [] }: ProvidersProps) => {\n /**\n * Keep these instances stable for the lifetime of the render.\n * Recreating the data router on rerenders can crash React Router.\n */\n const queryClientRef = React.useRef<QueryClient | null>(null);\n const storeRef = React.useRef<ReturnType<typeof configureStore> | null>(null);\n const routerRef = React.useRef<ReturnType<typeof createMemoryRouter> | null>(null);\n\n if (queryClientRef.current === null) {\n queryClientRef.current = new QueryClient({\n defaultOptions: {\n queries: {\n retry: false,\n },\n },\n });\n }\n\n if (storeRef.current === null) {\n storeRef.current = configureStore({\n ...defaultTestStoreConfig(),\n ...storeConfig,\n });\n }\n\n let allPermissions: Permission[];\n\n if (typeof permissions === 'function') {\n /**\n * The callback form can return `undefined` to mean \"use defaults\".\n * Guard against passing `undefined` into AuthProvider.\n */\n allPermissions = permissions(DEFAULT_PERMISSIONS) ?? DEFAULT_PERMISSIONS;\n } else {\n allPermissions = [...DEFAULT_PERMISSIONS, ...permissions];\n }\n\n if (routerRef.current === null) {\n routerRef.current = createMemoryRouter(\n [\n {\n path: '/*',\n element: (\n <StrapiAppProvider\n components={{}}\n rbac={new RBAC()}\n widgets={\n {\n widgets: [],\n getAll: jest.fn(),\n register: jest.fn(),\n } as unknown as React.ComponentProps<typeof StrapiAppProvider>['widgets']\n }\n customFields={{\n customFields: {},\n get: jest.fn().mockReturnValue({\n name: 'color',\n pluginId: 'mycustomfields',\n type: 'text',\n icon: jest.fn(),\n intlLabel: {\n id: 'mycustomfields.color.label',\n defaultMessage: 'Color',\n },\n intlDescription: {\n id: 'mycustomfields.color.description',\n defaultMessage: 'Select any color',\n },\n components: {\n Input: jest.fn().mockResolvedValue({ default: jest.fn() }),\n },\n }),\n getAll: jest.fn(),\n register: jest.fn(),\n }}\n fields={{}}\n menu={[]}\n getAdminInjectedComponents={jest.fn()}\n getPlugin={jest.fn()}\n plugins={{}}\n runHookParallel={jest.fn()}\n runHookWaterfall={jest.fn().mockImplementation((_name, initialValue) => initialValue)}\n runHookSeries={jest.fn()}\n settings={{}}\n >\n <Provider store={storeRef.current!}>\n <LanguageProvider messages={{}}>\n <Theme\n themes={{\n dark: darkTheme,\n light: lightTheme,\n }}\n >\n <AuthProvider _defaultPermissions={allPermissions} _disableRenewToken={true}>\n <QueryClientProvider client={queryClientRef.current!}>\n <DndProvider backend={HTML5Backend}>\n <NotificationsProvider>\n <GuidedTourContext enabled={false}>\n <ConfigurationContextProvider\n showReleaseNotification={false}\n logos={{\n auth: { default: 'default' },\n menu: { default: 'default' },\n }}\n updateProjectSettings={jest.fn()}\n >\n <AppInfoProvider\n autoReload\n useYarn\n dependencies={{\n '@strapi/plugin-documentation': '4.2.0',\n '@strapi/provider-upload-cloudinary': '4.2.0',\n }}\n strapiVersion=\"4.1.0\"\n communityEdition\n shouldUpdateStrapi={false}\n >\n <TestChildrenOutlet />\n </AppInfoProvider>\n </ConfigurationContextProvider>\n </GuidedTourContext>\n </NotificationsProvider>\n </DndProvider>\n </QueryClientProvider>\n </AuthProvider>\n </Theme>\n </LanguageProvider>\n </Provider>\n </StrapiAppProvider>\n ),\n },\n ],\n {\n initialEntries,\n }\n );\n }\n\n // en is the default locale of the admin app.\n return (\n <TestChildrenContext.Provider value={children}>\n <RouterProvider router={routerRef.current!} />\n </TestChildrenContext.Provider>\n );\n};\n\n// eslint-disable-next-line react/jsx-no-useless-fragment\nconst fallbackWrapper = ({ children }: { children: React.ReactNode }) => <>{children}</>;\n\nexport interface RenderOptions {\n renderOptions?: RTLRenderOptions;\n userEventOptions?: Parameters<typeof userEvent.setup>[0];\n initialEntries?: MemoryRouterProps['initialEntries'];\n providerOptions?: Pick<ProvidersProps, 'storeConfig' | 'permissions'>;\n}\n\n/**\n * @alpha\n * @description A custom render function that wraps the component with the necessary providers,\n * for use of testing components within the Strapi Admin.\n */\nconst render = (\n ui: React.ReactElement,\n { renderOptions, userEventOptions, initialEntries, providerOptions }: RenderOptions = {}\n): RenderResult & { user: ReturnType<typeof userEvent.setup> } => {\n const { wrapper: Wrapper = fallbackWrapper, ...restOptions } = renderOptions ?? {};\n\n return {\n ...renderRTL(ui, {\n wrapper: ({ children }) => (\n <Providers initialEntries={initialEntries} {...providerOptions}>\n <Wrapper>{children}</Wrapper>\n </Providers>\n ),\n ...restOptions,\n }),\n user: userEvent.setup({\n skipHover: true,\n ...userEventOptions,\n }),\n };\n};\n\n/**\n * @alpha\n * @description A custom render-hook function that wraps the component with the necessary providers,\n * for use of testing hooks within the Strapi Admin.\n */\nconst renderHook = <\n Result,\n Props,\n Q extends Queries,\n Container extends Element | DocumentFragment = HTMLElement,\n BaseElement extends Element | DocumentFragment = Container,\n>(\n hook: (initialProps: Props) => Result,\n options?: RenderHookOptions<Props, Q, Container, BaseElement> &\n Pick<RenderOptions, 'initialEntries' | 'providerOptions'>\n): RenderHookResult<Result, Props> => {\n const {\n wrapper: Wrapper = fallbackWrapper,\n initialEntries,\n providerOptions,\n ...restOptions\n } = options ?? {};\n\n return renderHookRTL(hook, {\n wrapper: ({ children }) => (\n <Providers initialEntries={initialEntries} {...providerOptions}>\n <Wrapper>{children}</Wrapper>\n </Providers>\n ),\n ...restOptions,\n });\n};\n\nexport { render, renderHook, waitFor, server, act, screen, fireEvent, defaultTestStoreConfig };\n"],"names":["setLogger","log","warn","error","TestChildrenContext","React","createContext","TestChildrenOutlet","_jsx","_Fragment","useContext","defaultTestStoreConfig","preloadedState","initialState","reducer","adminApi","reducerPath","admin_app","appReducer","middleware","getDefaultMiddleware","immutableCheck","serializableCheck","DEFAULT_PERMISSIONS","fixtures","permissions","allPermissions","id","action","subject","properties","conditions","actionParameters","Providers","children","initialEntries","storeConfig","queryClientRef","useRef","storeRef","routerRef","current","QueryClient","defaultOptions","queries","retry","configureStore","createMemoryRouter","path","element","StrapiAppProvider","components","rbac","RBAC","widgets","getAll","jest","fn","register","customFields","get","mockReturnValue","name","pluginId","type","icon","intlLabel","defaultMessage","intlDescription","Input","mockResolvedValue","default","fields","menu","getAdminInjectedComponents","getPlugin","plugins","runHookParallel","runHookWaterfall","mockImplementation","_name","initialValue","runHookSeries","settings","Provider","store","LanguageProvider","messages","Theme","themes","dark","darkTheme","light","lightTheme","AuthProvider","_defaultPermissions","_disableRenewToken","QueryClientProvider","client","DndProvider","backend","HTML5Backend","NotificationsProvider","GuidedTourContext","enabled","ConfigurationContextProvider","showReleaseNotification","logos","auth","updateProjectSettings","AppInfoProvider","autoReload","useYarn","dependencies","strapiVersion","communityEdition","shouldUpdateStrapi","value","RouterProvider","router","fallbackWrapper","render","ui","renderOptions","userEventOptions","providerOptions","wrapper","Wrapper","restOptions","renderRTL","user","userEvent","setup","skipHover","renderHook","hook","options","renderHookRTL"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.mjs","sources":["../../../../admin/tests/utils.tsx"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\n\nimport * as React from 'react';\n\nimport { ConfigureStoreOptions, configureStore } from '@reduxjs/toolkit';\nimport { fixtures } from '@strapi/admin-test-utils';\nimport { darkTheme, lightTheme } from '@strapi/design-system';\nimport {\n fireEvent,\n renderHook as renderHookRTL,\n render as renderRTL,\n waitFor,\n RenderOptions as RTLRenderOptions,\n RenderResult,\n act,\n screen,\n RenderHookOptions,\n RenderHookResult,\n Queries,\n} from '@testing-library/react';\nimport { userEvent } from '@testing-library/user-event';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { QueryClient, QueryClientProvider, setLogger } from 'react-query';\nimport { Provider } from 'react-redux';\nimport { MemoryRouterProps, RouterProvider, createMemoryRouter } from 'react-router-dom';\n\nimport { GuidedTourContext } from '../src/components/GuidedTour/Context';\nimport { LanguageProvider } from '../src/components/LanguageProvider';\nimport { Theme } from '../src/components/Theme';\nimport { RBAC } from '../src/core/apis/rbac';\nimport { AppInfoProvider } from '../src/features/AppInfo';\nimport { AuthProvider, type Permission } from '../src/features/Auth';\nimport { _internalConfigurationContextProvider as ConfigurationContextProvider } from '../src/features/Configuration';\nimport { NotificationsProvider } from '../src/features/Notifications';\nimport { StrapiAppProvider } from '../src/features/StrapiApp';\nimport { reducer as appReducer } from '../src/reducer';\nimport { adminApi } from '../src/services/api';\n\nimport { server } from './server';\nimport { initialState } from './store';\n\nconst EMPTY_PERMISSIONS: NonNullable<ProvidersProps['permissions']> = [];\n\nsetLogger({\n log: () => {},\n warn: () => {},\n error: () => {},\n});\n\n/**\n * RTL's `rerender()` updates the `children` passed to our test `render()` helper.\n * However, we keep a stable `routerRef` to avoid recreating the data router (which\n * can crash React Router). That means the route element tree would otherwise keep\n * rendering the initial children forever.\n *\n * We solve this by passing `children` via React context, so consumers inside the\n * router element tree still update on rerenders without recreating the router.\n */\nconst TestChildrenContext = React.createContext<React.ReactNode>(null);\n\nconst TestChildrenOutlet = () => {\n return <>{React.useContext(TestChildrenContext)}</>;\n};\n\ninterface ProvidersProps {\n children: React.ReactNode;\n initialEntries?: MemoryRouterProps['initialEntries'];\n storeConfig?: Partial<ConfigureStoreOptions>;\n permissions?: Permission[] | ((defaultPermissions: Permission[]) => Permission[] | undefined);\n}\n\nconst defaultTestStoreConfig = () => ({\n preloadedState: initialState(),\n reducer: {\n [adminApi.reducerPath]: adminApi.reducer,\n admin_app: appReducer,\n },\n // @ts-expect-error – this fails.\n middleware: (getDefaultMiddleware) => [\n ...getDefaultMiddleware({\n // Disable timing checks for test env\n immutableCheck: false,\n serializableCheck: false,\n }),\n adminApi.middleware,\n ],\n});\n\nconst DEFAULT_PERMISSIONS = [\n ...fixtures.permissions.allPermissions,\n {\n id: 314,\n action: 'admin::users.read',\n subject: null,\n properties: {},\n conditions: [],\n actionParameters: {},\n },\n];\n\nconst Providers = ({\n children,\n initialEntries,\n storeConfig,\n permissions = EMPTY_PERMISSIONS,\n}: ProvidersProps) => {\n /**\n * Keep these instances stable for the lifetime of the render.\n * Recreating the data router on rerenders can crash React Router.\n */\n const queryClientRef = React.useRef<QueryClient | null>(null);\n const storeRef = React.useRef<ReturnType<typeof configureStore> | null>(null);\n const routerRef = React.useRef<ReturnType<typeof createMemoryRouter> | null>(null);\n\n if (queryClientRef.current === null) {\n queryClientRef.current = new QueryClient({\n defaultOptions: {\n queries: {\n retry: false,\n },\n },\n });\n }\n\n if (storeRef.current === null) {\n storeRef.current = configureStore({\n ...defaultTestStoreConfig(),\n ...storeConfig,\n });\n }\n\n let allPermissions: Permission[];\n\n if (typeof permissions === 'function') {\n /**\n * The callback form can return `undefined` to mean \"use defaults\".\n * Guard against passing `undefined` into AuthProvider.\n */\n allPermissions = permissions(DEFAULT_PERMISSIONS) ?? DEFAULT_PERMISSIONS;\n } else {\n allPermissions = [...DEFAULT_PERMISSIONS, ...permissions];\n }\n\n if (routerRef.current === null) {\n routerRef.current = createMemoryRouter(\n [\n {\n path: '/*',\n element: (\n <StrapiAppProvider\n components={{}}\n rbac={new RBAC()}\n widgets={\n {\n widgets: [],\n getAll: jest.fn(),\n register: jest.fn(),\n } as unknown as React.ComponentProps<typeof StrapiAppProvider>['widgets']\n }\n customFields={{\n customFields: {},\n get: jest.fn().mockReturnValue({\n name: 'color',\n pluginId: 'mycustomfields',\n type: 'text',\n icon: jest.fn(),\n intlLabel: {\n id: 'mycustomfields.color.label',\n defaultMessage: 'Color',\n },\n intlDescription: {\n id: 'mycustomfields.color.description',\n defaultMessage: 'Select any color',\n },\n components: {\n Input: jest.fn().mockResolvedValue({ default: jest.fn() }),\n },\n }),\n getAll: jest.fn(),\n register: jest.fn(),\n }}\n fields={{}}\n menu={[]}\n getAdminInjectedComponents={jest.fn()}\n getPlugin={jest.fn()}\n plugins={{}}\n runHookParallel={jest.fn()}\n runHookWaterfall={jest.fn().mockImplementation((_name, initialValue) => initialValue)}\n runHookSeries={jest.fn()}\n settings={{}}\n >\n <Provider store={storeRef.current!}>\n <LanguageProvider messages={{}}>\n <Theme\n themes={{\n dark: darkTheme,\n light: lightTheme,\n }}\n >\n <AuthProvider _defaultPermissions={allPermissions} _disableRenewToken={true}>\n <QueryClientProvider client={queryClientRef.current!}>\n <DndProvider backend={HTML5Backend}>\n <NotificationsProvider>\n <GuidedTourContext enabled={false}>\n <ConfigurationContextProvider\n showReleaseNotification={false}\n logos={{\n auth: { default: 'default' },\n menu: { default: 'default' },\n }}\n updateProjectSettings={jest.fn()}\n >\n <AppInfoProvider\n autoReload\n useYarn\n dependencies={{\n '@strapi/plugin-documentation': '4.2.0',\n '@strapi/provider-upload-cloudinary': '4.2.0',\n }}\n strapiVersion=\"4.1.0\"\n communityEdition\n shouldUpdateStrapi={false}\n >\n <TestChildrenOutlet />\n </AppInfoProvider>\n </ConfigurationContextProvider>\n </GuidedTourContext>\n </NotificationsProvider>\n </DndProvider>\n </QueryClientProvider>\n </AuthProvider>\n </Theme>\n </LanguageProvider>\n </Provider>\n </StrapiAppProvider>\n ),\n },\n ],\n {\n initialEntries,\n }\n );\n }\n\n // en is the default locale of the admin app.\n return (\n <TestChildrenContext.Provider value={children}>\n <RouterProvider router={routerRef.current!} />\n </TestChildrenContext.Provider>\n );\n};\n\n// eslint-disable-next-line react/jsx-no-useless-fragment\nconst fallbackWrapper = ({ children }: { children: React.ReactNode }) => <>{children}</>;\n\nexport interface RenderOptions {\n renderOptions?: RTLRenderOptions;\n userEventOptions?: Parameters<typeof userEvent.setup>[0];\n initialEntries?: MemoryRouterProps['initialEntries'];\n providerOptions?: Pick<ProvidersProps, 'storeConfig' | 'permissions'>;\n}\n\n/**\n * @alpha\n * @description A custom render function that wraps the component with the necessary providers,\n * for use of testing components within the Strapi Admin.\n */\nconst render = (\n ui: React.ReactElement,\n { renderOptions, userEventOptions, initialEntries, providerOptions }: RenderOptions = {}\n): RenderResult & { user: ReturnType<typeof userEvent.setup> } => {\n const { wrapper: Wrapper = fallbackWrapper, ...restOptions } = renderOptions ?? {};\n\n return {\n ...renderRTL(ui, {\n wrapper: ({ children }) => (\n <Providers initialEntries={initialEntries} {...providerOptions}>\n <Wrapper>{children}</Wrapper>\n </Providers>\n ),\n ...restOptions,\n }),\n user: userEvent.setup({\n skipHover: true,\n ...userEventOptions,\n }),\n };\n};\n\n/**\n * @alpha\n * @description A custom render-hook function that wraps the component with the necessary providers,\n * for use of testing hooks within the Strapi Admin.\n */\nconst renderHook = <\n Result,\n Props,\n Q extends Queries,\n Container extends Element | DocumentFragment = HTMLElement,\n BaseElement extends Element | DocumentFragment = Container,\n>(\n hook: (initialProps: Props) => Result,\n options?: RenderHookOptions<Props, Q, Container, BaseElement> &\n Pick<RenderOptions, 'initialEntries' | 'providerOptions'>\n): RenderHookResult<Result, Props> => {\n const {\n wrapper: Wrapper = fallbackWrapper,\n initialEntries,\n providerOptions,\n ...restOptions\n } = options ?? {};\n\n return renderHookRTL(hook, {\n wrapper: ({ children }) => (\n <Providers initialEntries={initialEntries} {...providerOptions}>\n <Wrapper>{children}</Wrapper>\n </Providers>\n ),\n ...restOptions,\n });\n};\n\nexport { render, renderHook, waitFor, server, act, screen, fireEvent, defaultTestStoreConfig };\n"],"names":["EMPTY_PERMISSIONS","setLogger","log","warn","error","TestChildrenContext","React","createContext","TestChildrenOutlet","_jsx","_Fragment","useContext","defaultTestStoreConfig","preloadedState","initialState","reducer","adminApi","reducerPath","admin_app","appReducer","middleware","getDefaultMiddleware","immutableCheck","serializableCheck","DEFAULT_PERMISSIONS","fixtures","permissions","allPermissions","id","action","subject","properties","conditions","actionParameters","Providers","children","initialEntries","storeConfig","queryClientRef","useRef","storeRef","routerRef","current","QueryClient","defaultOptions","queries","retry","configureStore","createMemoryRouter","path","element","StrapiAppProvider","components","rbac","RBAC","widgets","getAll","jest","fn","register","customFields","get","mockReturnValue","name","pluginId","type","icon","intlLabel","defaultMessage","intlDescription","Input","mockResolvedValue","default","fields","menu","getAdminInjectedComponents","getPlugin","plugins","runHookParallel","runHookWaterfall","mockImplementation","_name","initialValue","runHookSeries","settings","Provider","store","LanguageProvider","messages","Theme","themes","dark","darkTheme","light","lightTheme","AuthProvider","_defaultPermissions","_disableRenewToken","QueryClientProvider","client","DndProvider","backend","HTML5Backend","NotificationsProvider","GuidedTourContext","enabled","ConfigurationContextProvider","showReleaseNotification","logos","auth","updateProjectSettings","AppInfoProvider","autoReload","useYarn","dependencies","strapiVersion","communityEdition","shouldUpdateStrapi","value","RouterProvider","router","fallbackWrapper","render","ui","renderOptions","userEventOptions","providerOptions","wrapper","Wrapper","restOptions","renderRTL","user","userEvent","setup","skipHover","renderHook","hook","options","renderHookRTL"],"mappings":"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"}
|
|
@@ -1,19 +1,22 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* Path attribute of the admin auth
|
|
5
|
-
* through `admin.auth.cookie.path` so multiple Strapi instances
|
|
6
|
-
* parent domain can keep separate cookies (e.g. `/strapi-de/admin`).
|
|
4
|
+
* Validates the Path attribute of the admin auth cookies. The path is
|
|
5
|
+
* configurable through `admin.auth.cookie.path` so multiple Strapi instances
|
|
6
|
+
* on the same parent domain can keep separate cookies (e.g. `/strapi-de/admin`).
|
|
7
7
|
*
|
|
8
8
|
* Browser-safe single source for both sides of the handoff: the admin panel
|
|
9
|
-
* cannot read server config, so the build transports the
|
|
10
|
-
* the bundle through the internal `STRAPI_ADMIN_AUTH_COOKIE_PATH`
|
|
11
|
-
* (see create-build-context.ts in @strapi/strapi); the server
|
|
12
|
-
* same config at runtime. Changing the path requires an admin
|
|
13
|
-
* any other admin config change.
|
|
9
|
+
* cannot read server config, so the build transports the access cookie path
|
|
10
|
+
* into the bundle through the internal `STRAPI_ADMIN_AUTH_COOKIE_PATH`
|
|
11
|
+
* variable (see create-build-context.ts in @strapi/strapi); the server
|
|
12
|
+
* resolves the same config at runtime. Changing the path requires an admin
|
|
13
|
+
* rebuild, like any other admin config change.
|
|
14
14
|
*
|
|
15
|
-
*
|
|
16
|
-
* `
|
|
15
|
+
* The callers pick the value to validate (see session-auth.ts). When
|
|
16
|
+
* `admin.auth.cookie.path` is unset, the access cookie follows the path the
|
|
17
|
+
* panel is served from (`admin.url`) and the refresh cookie follows the admin
|
|
18
|
+
* API (`/admin`), each behind any `server.url` subpath.
|
|
19
|
+
* `DEFAULT_AUTH_COOKIE_PATH` is only the fallback for a missing or invalid value.
|
|
17
20
|
*/ const DEFAULT_AUTH_COOKIE_PATH = '/admin';
|
|
18
21
|
const isValidCookiePath = (path)=>{
|
|
19
22
|
if (!path.startsWith('/')) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-cookie-path.js","sources":["../../../../shared/utils/auth-cookie-path.ts"],"sourcesContent":["/**\n * Path attribute of the admin auth
|
|
1
|
+
{"version":3,"file":"auth-cookie-path.js","sources":["../../../../shared/utils/auth-cookie-path.ts"],"sourcesContent":["/**\n * Validates the Path attribute of the admin auth cookies. The path is\n * configurable through `admin.auth.cookie.path` so multiple Strapi instances\n * on the same parent domain can keep separate cookies (e.g. `/strapi-de/admin`).\n *\n * Browser-safe single source for both sides of the handoff: the admin panel\n * cannot read server config, so the build transports the access cookie path\n * into the bundle through the internal `STRAPI_ADMIN_AUTH_COOKIE_PATH`\n * variable (see create-build-context.ts in @strapi/strapi); the server\n * resolves the same config at runtime. Changing the path requires an admin\n * rebuild, like any other admin config change.\n *\n * The callers pick the value to validate (see session-auth.ts). When\n * `admin.auth.cookie.path` is unset, the access cookie follows the path the\n * panel is served from (`admin.url`) and the refresh cookie follows the admin\n * API (`/admin`), each behind any `server.url` subpath.\n * `DEFAULT_AUTH_COOKIE_PATH` is only the fallback for a missing or invalid value.\n */\nexport const DEFAULT_AUTH_COOKIE_PATH = '/admin';\n\nconst isValidCookiePath = (path: string): boolean => {\n if (!path.startsWith('/')) {\n return false;\n }\n\n // RFC 6265 path-av: any CHAR except CTLs or \";\".\n // eslint-disable-next-line no-control-regex -- CTL chars are exactly what RFC 6265 forbids\n return !/[\\x00-\\x1F\\x7F;]/.test(path);\n};\n\nexport const resolveAuthCookiePath = (\n configuredPath?: string,\n warn: (message: string) => void = console.warn\n): string => {\n const cookiePath = (configuredPath || '').trim();\n\n if (!cookiePath) {\n return DEFAULT_AUTH_COOKIE_PATH;\n }\n\n if (!isValidCookiePath(cookiePath)) {\n warn(\n `Ignoring invalid admin auth cookie path \"${cookiePath}\" (must be an absolute path without \";\"); using \"${DEFAULT_AUTH_COOKIE_PATH}\" instead.`\n );\n return DEFAULT_AUTH_COOKIE_PATH;\n }\n\n return cookiePath;\n};\n"],"names":["DEFAULT_AUTH_COOKIE_PATH","isValidCookiePath","path","startsWith","test","resolveAuthCookiePath","configuredPath","warn","console","cookiePath","trim"],"mappings":";;AAAA;;;;;;;;;;;;;;;;;IAkBO,MAAMA,wBAAAA,GAA2B;AAExC,MAAMC,oBAAoB,CAACC,IAAAA,GAAAA;AACzB,IAAA,IAAI,CAACA,IAAAA,CAAKC,UAAU,CAAC,GAAA,CAAA,EAAM;QACzB,OAAO,KAAA;AACT,IAAA;;;IAIA,OAAO,CAAC,kBAAA,CAAmBC,IAAI,CAACF,IAAAA,CAAAA;AAClC,CAAA;MAEaG,qBAAAA,GAAwB,CACnCC,cAAAA,EACAC,IAAAA,GAAkCC,QAAQD,IAAI,GAAA;AAE9C,IAAA,MAAME,aAAa,CAACH,cAAAA,IAAkB,EAAC,EAAGI,IAAI,EAAA;AAE9C,IAAA,IAAI,CAACD,UAAAA,EAAY;QACf,OAAOT,wBAAAA;AACT,IAAA;IAEA,IAAI,CAACC,kBAAkBQ,UAAAA,CAAAA,EAAa;QAClCF,IAAAA,CACE,CAAC,yCAAyC,EAAEE,UAAAA,CAAW,iDAAiD,EAAET,wBAAAA,CAAyB,UAAU,CAAC,CAAA;QAEhJ,OAAOA,wBAAAA;AACT,IAAA;IAEA,OAAOS,UAAAA;AACT;;;;;"}
|
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Path attribute of the admin auth
|
|
3
|
-
* through `admin.auth.cookie.path` so multiple Strapi instances
|
|
4
|
-
* parent domain can keep separate cookies (e.g. `/strapi-de/admin`).
|
|
2
|
+
* Validates the Path attribute of the admin auth cookies. The path is
|
|
3
|
+
* configurable through `admin.auth.cookie.path` so multiple Strapi instances
|
|
4
|
+
* on the same parent domain can keep separate cookies (e.g. `/strapi-de/admin`).
|
|
5
5
|
*
|
|
6
6
|
* Browser-safe single source for both sides of the handoff: the admin panel
|
|
7
|
-
* cannot read server config, so the build transports the
|
|
8
|
-
* the bundle through the internal `STRAPI_ADMIN_AUTH_COOKIE_PATH`
|
|
9
|
-
* (see create-build-context.ts in @strapi/strapi); the server
|
|
10
|
-
* same config at runtime. Changing the path requires an admin
|
|
11
|
-
* any other admin config change.
|
|
7
|
+
* cannot read server config, so the build transports the access cookie path
|
|
8
|
+
* into the bundle through the internal `STRAPI_ADMIN_AUTH_COOKIE_PATH`
|
|
9
|
+
* variable (see create-build-context.ts in @strapi/strapi); the server
|
|
10
|
+
* resolves the same config at runtime. Changing the path requires an admin
|
|
11
|
+
* rebuild, like any other admin config change.
|
|
12
12
|
*
|
|
13
|
-
*
|
|
14
|
-
* `
|
|
13
|
+
* The callers pick the value to validate (see session-auth.ts). When
|
|
14
|
+
* `admin.auth.cookie.path` is unset, the access cookie follows the path the
|
|
15
|
+
* panel is served from (`admin.url`) and the refresh cookie follows the admin
|
|
16
|
+
* API (`/admin`), each behind any `server.url` subpath.
|
|
17
|
+
* `DEFAULT_AUTH_COOKIE_PATH` is only the fallback for a missing or invalid value.
|
|
15
18
|
*/ const DEFAULT_AUTH_COOKIE_PATH = '/admin';
|
|
16
19
|
const isValidCookiePath = (path)=>{
|
|
17
20
|
if (!path.startsWith('/')) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-cookie-path.mjs","sources":["../../../../shared/utils/auth-cookie-path.ts"],"sourcesContent":["/**\n * Path attribute of the admin auth
|
|
1
|
+
{"version":3,"file":"auth-cookie-path.mjs","sources":["../../../../shared/utils/auth-cookie-path.ts"],"sourcesContent":["/**\n * Validates the Path attribute of the admin auth cookies. The path is\n * configurable through `admin.auth.cookie.path` so multiple Strapi instances\n * on the same parent domain can keep separate cookies (e.g. `/strapi-de/admin`).\n *\n * Browser-safe single source for both sides of the handoff: the admin panel\n * cannot read server config, so the build transports the access cookie path\n * into the bundle through the internal `STRAPI_ADMIN_AUTH_COOKIE_PATH`\n * variable (see create-build-context.ts in @strapi/strapi); the server\n * resolves the same config at runtime. Changing the path requires an admin\n * rebuild, like any other admin config change.\n *\n * The callers pick the value to validate (see session-auth.ts). When\n * `admin.auth.cookie.path` is unset, the access cookie follows the path the\n * panel is served from (`admin.url`) and the refresh cookie follows the admin\n * API (`/admin`), each behind any `server.url` subpath.\n * `DEFAULT_AUTH_COOKIE_PATH` is only the fallback for a missing or invalid value.\n */\nexport const DEFAULT_AUTH_COOKIE_PATH = '/admin';\n\nconst isValidCookiePath = (path: string): boolean => {\n if (!path.startsWith('/')) {\n return false;\n }\n\n // RFC 6265 path-av: any CHAR except CTLs or \";\".\n // eslint-disable-next-line no-control-regex -- CTL chars are exactly what RFC 6265 forbids\n return !/[\\x00-\\x1F\\x7F;]/.test(path);\n};\n\nexport const resolveAuthCookiePath = (\n configuredPath?: string,\n warn: (message: string) => void = console.warn\n): string => {\n const cookiePath = (configuredPath || '').trim();\n\n if (!cookiePath) {\n return DEFAULT_AUTH_COOKIE_PATH;\n }\n\n if (!isValidCookiePath(cookiePath)) {\n warn(\n `Ignoring invalid admin auth cookie path \"${cookiePath}\" (must be an absolute path without \";\"); using \"${DEFAULT_AUTH_COOKIE_PATH}\" instead.`\n );\n return DEFAULT_AUTH_COOKIE_PATH;\n }\n\n return cookiePath;\n};\n"],"names":["DEFAULT_AUTH_COOKIE_PATH","isValidCookiePath","path","startsWith","test","resolveAuthCookiePath","configuredPath","warn","console","cookiePath","trim"],"mappings":"AAAA;;;;;;;;;;;;;;;;;IAkBO,MAAMA,wBAAAA,GAA2B;AAExC,MAAMC,oBAAoB,CAACC,IAAAA,GAAAA;AACzB,IAAA,IAAI,CAACA,IAAAA,CAAKC,UAAU,CAAC,GAAA,CAAA,EAAM;QACzB,OAAO,KAAA;AACT,IAAA;;;IAIA,OAAO,CAAC,kBAAA,CAAmBC,IAAI,CAACF,IAAAA,CAAAA;AAClC,CAAA;MAEaG,qBAAAA,GAAwB,CACnCC,cAAAA,EACAC,IAAAA,GAAkCC,QAAQD,IAAI,GAAA;AAE9C,IAAA,MAAME,aAAa,CAACH,cAAAA,IAAkB,EAAC,EAAGI,IAAI,EAAA;AAE9C,IAAA,IAAI,CAACD,UAAAA,EAAY;QACf,OAAOT,wBAAAA;AACT,IAAA;IAEA,IAAI,CAACC,kBAAkBQ,UAAAA,CAAAA,EAAa;QAClCF,IAAAA,CACE,CAAC,yCAAyC,EAAEE,UAAAA,CAAW,iDAAiD,EAAET,wBAAAA,CAAyB,UAAU,CAAC,CAAA;QAEhJ,OAAOA,wBAAAA;AACT,IAAA;IAEA,OAAOS,UAAAA;AACT;;;;"}
|