@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.
Files changed (249) hide show
  1. package/dist/admin/admin/src/StrapiApp.js.map +1 -1
  2. package/dist/admin/admin/src/StrapiApp.mjs.map +1 -1
  3. package/dist/admin/admin/src/components/ConfirmDialog.js +10 -9
  4. package/dist/admin/admin/src/components/ConfirmDialog.js.map +1 -1
  5. package/dist/admin/admin/src/components/ConfirmDialog.mjs +10 -9
  6. package/dist/admin/admin/src/components/ConfirmDialog.mjs.map +1 -1
  7. package/dist/admin/admin/src/components/Filters.js +57 -12
  8. package/dist/admin/admin/src/components/Filters.js.map +1 -1
  9. package/dist/admin/admin/src/components/Filters.mjs +57 -12
  10. package/dist/admin/admin/src/components/Filters.mjs.map +1 -1
  11. package/dist/admin/admin/src/components/Form.js +3 -1
  12. package/dist/admin/admin/src/components/Form.js.map +1 -1
  13. package/dist/admin/admin/src/components/Form.mjs +3 -1
  14. package/dist/admin/admin/src/components/Form.mjs.map +1 -1
  15. package/dist/admin/admin/src/components/FormInputs/Enumeration.js +2 -1
  16. package/dist/admin/admin/src/components/FormInputs/Enumeration.js.map +1 -1
  17. package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs +2 -1
  18. package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs.map +1 -1
  19. package/dist/admin/admin/src/components/LeftMenu.js +5 -1
  20. package/dist/admin/admin/src/components/LeftMenu.js.map +1 -1
  21. package/dist/admin/admin/src/components/LeftMenu.mjs +5 -1
  22. package/dist/admin/admin/src/components/LeftMenu.mjs.map +1 -1
  23. package/dist/admin/admin/src/components/PageHelpers.js +2 -1
  24. package/dist/admin/admin/src/components/PageHelpers.js.map +1 -1
  25. package/dist/admin/admin/src/components/PageHelpers.mjs +2 -1
  26. package/dist/admin/admin/src/components/PageHelpers.mjs.map +1 -1
  27. package/dist/admin/admin/src/components/Pagination.js +7 -6
  28. package/dist/admin/admin/src/components/Pagination.js.map +1 -1
  29. package/dist/admin/admin/src/components/Pagination.mjs +7 -6
  30. package/dist/admin/admin/src/components/Pagination.mjs.map +1 -1
  31. package/dist/admin/admin/src/components/RelativeTime.js +2 -1
  32. package/dist/admin/admin/src/components/RelativeTime.js.map +1 -1
  33. package/dist/admin/admin/src/components/RelativeTime.mjs +2 -1
  34. package/dist/admin/admin/src/components/RelativeTime.mjs.map +1 -1
  35. package/dist/admin/admin/src/components/SubNav.js +6 -12
  36. package/dist/admin/admin/src/components/SubNav.js.map +1 -1
  37. package/dist/admin/admin/src/components/SubNav.mjs +7 -13
  38. package/dist/admin/admin/src/components/SubNav.mjs.map +1 -1
  39. package/dist/admin/admin/src/components/Table.js +3 -1
  40. package/dist/admin/admin/src/components/Table.js.map +1 -1
  41. package/dist/admin/admin/src/components/Table.mjs +3 -1
  42. package/dist/admin/admin/src/components/Table.mjs.map +1 -1
  43. package/dist/admin/admin/src/components/UpsellBanner.js.map +1 -1
  44. package/dist/admin/admin/src/components/UpsellBanner.mjs.map +1 -1
  45. package/dist/admin/admin/src/components/WidgetRoot.js.map +1 -1
  46. package/dist/admin/admin/src/components/WidgetRoot.mjs.map +1 -1
  47. package/dist/admin/admin/src/constants.js.map +1 -1
  48. package/dist/admin/admin/src/constants.mjs.map +1 -1
  49. package/dist/admin/admin/src/core/apis/Plugin.js.map +1 -1
  50. package/dist/admin/admin/src/core/apis/Plugin.mjs.map +1 -1
  51. package/dist/admin/admin/src/features/Auth.js +2 -1
  52. package/dist/admin/admin/src/features/Auth.js.map +1 -1
  53. package/dist/admin/admin/src/features/Auth.mjs +2 -1
  54. package/dist/admin/admin/src/features/Auth.mjs.map +1 -1
  55. package/dist/admin/admin/src/features/StrapiApp.js.map +1 -1
  56. package/dist/admin/admin/src/features/StrapiApp.mjs.map +1 -1
  57. package/dist/admin/admin/src/features/Tracking.js.map +1 -1
  58. package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
  59. package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.js.map +1 -1
  60. package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.mjs.map +1 -1
  61. package/dist/admin/admin/src/pages/ProfilePage.js +2 -2
  62. package/dist/admin/admin/src/pages/ProfilePage.js.map +1 -1
  63. package/dist/admin/admin/src/pages/ProfilePage.mjs +2 -2
  64. package/dist/admin/admin/src/pages/ProfilePage.mjs.map +1 -1
  65. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js.map +1 -1
  66. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.mjs.map +1 -1
  67. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.js +4 -1
  68. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.js.map +1 -1
  69. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.mjs +4 -1
  70. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.mjs.map +1 -1
  71. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js +3 -1
  72. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js.map +1 -1
  73. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.mjs +3 -1
  74. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.mjs.map +1 -1
  75. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenTypeSelect.js +2 -1
  76. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenTypeSelect.js.map +1 -1
  77. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenTypeSelect.mjs +2 -1
  78. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenTypeSelect.mjs.map +1 -1
  79. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.js +6 -5
  80. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.js.map +1 -1
  81. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.mjs +6 -5
  82. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.mjs.map +1 -1
  83. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.js +2 -1
  84. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.js.map +1 -1
  85. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.mjs +2 -1
  86. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.mjs.map +1 -1
  87. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/transformPermissionsData.js +4 -4
  88. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/transformPermissionsData.js.map +1 -1
  89. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/transformPermissionsData.mjs +4 -4
  90. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/transformPermissionsData.mjs.map +1 -1
  91. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js +1 -2
  92. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js.map +1 -1
  93. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs +1 -2
  94. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs.map +1 -1
  95. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.js.map +1 -1
  96. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.mjs.map +1 -1
  97. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.js.map +1 -1
  98. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.mjs.map +1 -1
  99. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.js +9 -4
  100. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.js.map +1 -1
  101. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.mjs +9 -4
  102. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.mjs.map +1 -1
  103. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.js +15 -9
  104. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.js.map +1 -1
  105. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.mjs +15 -9
  106. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.mjs.map +1 -1
  107. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.js +5 -2
  108. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.js.map +1 -1
  109. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.mjs +5 -2
  110. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.mjs.map +1 -1
  111. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.js +2 -1
  112. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.js.map +1 -1
  113. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.mjs +2 -1
  114. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.mjs.map +1 -1
  115. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js +2 -1
  116. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js.map +1 -1
  117. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.mjs +2 -1
  118. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.mjs.map +1 -1
  119. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js +2 -1
  120. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js.map +1 -1
  121. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.mjs +2 -1
  122. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.mjs.map +1 -1
  123. package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.js.map +1 -1
  124. package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.mjs.map +1 -1
  125. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js +3 -1
  126. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js.map +1 -1
  127. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.mjs +3 -1
  128. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.mjs.map +1 -1
  129. package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.js.map +1 -1
  130. package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.mjs.map +1 -1
  131. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js.map +1 -1
  132. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.mjs.map +1 -1
  133. package/dist/admin/admin/src/pages/Settings/pages/Users/components/NewUserForm.js.map +1 -1
  134. package/dist/admin/admin/src/pages/Settings/pages/Users/components/NewUserForm.mjs.map +1 -1
  135. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.js +4 -1
  136. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.js.map +1 -1
  137. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.mjs +4 -1
  138. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.mjs.map +1 -1
  139. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.js +18 -3
  140. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.js.map +1 -1
  141. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.mjs +18 -3
  142. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.mjs.map +1 -1
  143. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.js.map +1 -1
  144. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.mjs.map +1 -1
  145. package/dist/admin/admin/src/router.js.map +1 -1
  146. package/dist/admin/admin/src/router.mjs.map +1 -1
  147. package/dist/admin/admin/src/services/users.js.map +1 -1
  148. package/dist/admin/admin/src/services/users.mjs.map +1 -1
  149. package/dist/admin/admin/src/translations/eu.json.js +1 -1
  150. package/dist/admin/admin/src/translations/eu.json.mjs +1 -1
  151. package/dist/admin/admin/src/utils/cookies.js +7 -6
  152. package/dist/admin/admin/src/utils/cookies.js.map +1 -1
  153. package/dist/admin/admin/src/utils/cookies.mjs +7 -6
  154. package/dist/admin/admin/src/utils/cookies.mjs.map +1 -1
  155. package/dist/admin/admin/tests/utils.js +2 -1
  156. package/dist/admin/admin/tests/utils.js.map +1 -1
  157. package/dist/admin/admin/tests/utils.mjs +2 -1
  158. package/dist/admin/admin/tests/utils.mjs.map +1 -1
  159. package/dist/admin/shared/utils/auth-cookie-path.js +13 -10
  160. package/dist/admin/shared/utils/auth-cookie-path.js.map +1 -1
  161. package/dist/admin/shared/utils/auth-cookie-path.mjs +13 -10
  162. package/dist/admin/shared/utils/auth-cookie-path.mjs.map +1 -1
  163. package/dist/admin/shared/utils/get-project-type.js +3 -3
  164. package/dist/admin/shared/utils/get-project-type.js.map +1 -1
  165. package/dist/admin/shared/utils/get-project-type.mjs +3 -3
  166. package/dist/admin/shared/utils/get-project-type.mjs.map +1 -1
  167. package/dist/admin/src/components/Filters.d.ts +1 -1
  168. package/dist/admin/src/components/Form.d.ts +1 -1
  169. package/dist/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.d.ts +1 -1
  170. package/dist/admin/src/utils/cookies.d.ts +7 -6
  171. package/dist/ee/server/src/services/seat-enforcement.d.ts.map +1 -1
  172. package/dist/ee/server/src/validation/role.d.ts.map +1 -1
  173. package/dist/server/ee/server/src/audit-logs/utils/csv.js +3 -3
  174. package/dist/server/ee/server/src/audit-logs/utils/csv.js.map +1 -1
  175. package/dist/server/ee/server/src/audit-logs/utils/csv.mjs +3 -3
  176. package/dist/server/ee/server/src/audit-logs/utils/csv.mjs.map +1 -1
  177. package/dist/server/ee/server/src/services/seat-enforcement.js.map +1 -1
  178. package/dist/server/ee/server/src/services/seat-enforcement.mjs.map +1 -1
  179. package/dist/server/ee/server/src/validation/role.js +4 -2
  180. package/dist/server/ee/server/src/validation/role.js.map +1 -1
  181. package/dist/server/ee/server/src/validation/role.mjs +4 -2
  182. package/dist/server/ee/server/src/validation/role.mjs.map +1 -1
  183. package/dist/server/server/src/ai/services/ai.js.map +1 -1
  184. package/dist/server/server/src/ai/services/ai.mjs.map +1 -1
  185. package/dist/server/server/src/controllers/admin.js +11 -12
  186. package/dist/server/server/src/controllers/admin.js.map +1 -1
  187. package/dist/server/server/src/controllers/admin.mjs +11 -12
  188. package/dist/server/server/src/controllers/admin.mjs.map +1 -1
  189. package/dist/server/server/src/domain/permission/index.js.map +1 -1
  190. package/dist/server/server/src/domain/permission/index.mjs.map +1 -1
  191. package/dist/server/server/src/services/api-token.js +4 -8
  192. package/dist/server/server/src/services/api-token.js.map +1 -1
  193. package/dist/server/server/src/services/api-token.mjs +4 -8
  194. package/dist/server/server/src/services/api-token.mjs.map +1 -1
  195. package/dist/server/server/src/services/constants.js +4 -0
  196. package/dist/server/server/src/services/constants.js.map +1 -1
  197. package/dist/server/server/src/services/constants.mjs +4 -0
  198. package/dist/server/server/src/services/constants.mjs.map +1 -1
  199. package/dist/server/server/src/services/permission/rename-fields.js.map +1 -1
  200. package/dist/server/server/src/services/permission/rename-fields.mjs.map +1 -1
  201. package/dist/server/server/src/services/permission/sections-builder/handlers.js.map +1 -1
  202. package/dist/server/server/src/services/permission/sections-builder/handlers.mjs.map +1 -1
  203. package/dist/server/server/src/services/role.js +8 -5
  204. package/dist/server/server/src/services/role.js.map +1 -1
  205. package/dist/server/server/src/services/role.mjs +8 -5
  206. package/dist/server/server/src/services/role.mjs.map +1 -1
  207. package/dist/server/server/src/validation/admin-tokens.js +4 -4
  208. package/dist/server/server/src/validation/admin-tokens.js.map +1 -1
  209. package/dist/server/server/src/validation/admin-tokens.mjs +4 -4
  210. package/dist/server/server/src/validation/admin-tokens.mjs.map +1 -1
  211. package/dist/server/server/src/validation/api-tokens.js +4 -4
  212. package/dist/server/server/src/validation/api-tokens.js.map +1 -1
  213. package/dist/server/server/src/validation/api-tokens.mjs +4 -4
  214. package/dist/server/server/src/validation/api-tokens.mjs.map +1 -1
  215. package/dist/server/server/src/validation/role.js +6 -4
  216. package/dist/server/server/src/validation/role.js.map +1 -1
  217. package/dist/server/server/src/validation/role.mjs +6 -4
  218. package/dist/server/server/src/validation/role.mjs.map +1 -1
  219. package/dist/server/server/src/validation/transfer/token.js +4 -4
  220. package/dist/server/server/src/validation/transfer/token.js.map +1 -1
  221. package/dist/server/server/src/validation/transfer/token.mjs +4 -4
  222. package/dist/server/server/src/validation/transfer/token.mjs.map +1 -1
  223. package/dist/server/shared/utils/auth-cookie-path.js +13 -10
  224. package/dist/server/shared/utils/auth-cookie-path.js.map +1 -1
  225. package/dist/server/shared/utils/auth-cookie-path.mjs +13 -10
  226. package/dist/server/shared/utils/auth-cookie-path.mjs.map +1 -1
  227. package/dist/server/shared/utils/get-project-type.js +3 -3
  228. package/dist/server/shared/utils/get-project-type.js.map +1 -1
  229. package/dist/server/shared/utils/get-project-type.mjs +3 -3
  230. package/dist/server/shared/utils/get-project-type.mjs.map +1 -1
  231. package/dist/server/shared/utils/session-auth.js +70 -3
  232. package/dist/server/shared/utils/session-auth.js.map +1 -1
  233. package/dist/server/shared/utils/session-auth.mjs +70 -4
  234. package/dist/server/shared/utils/session-auth.mjs.map +1 -1
  235. package/dist/server/src/ai/services/ai.d.ts.map +1 -1
  236. package/dist/server/src/controllers/admin.d.ts.map +1 -1
  237. package/dist/server/src/domain/permission/index.d.ts.map +1 -1
  238. package/dist/server/src/services/constants.d.ts +2 -0
  239. package/dist/server/src/services/constants.d.ts.map +1 -1
  240. package/dist/server/src/services/permission/rename-fields.d.ts.map +1 -1
  241. package/dist/server/src/services/permission/sections-builder/handlers.d.ts.map +1 -1
  242. package/dist/server/src/services/role.d.ts.map +1 -1
  243. package/dist/server/src/validation/role.d.ts.map +1 -1
  244. package/dist/shared/contracts/transfer.d.ts.map +1 -1
  245. package/dist/shared/utils/auth-cookie-path.d.ts +13 -10
  246. package/dist/shared/utils/auth-cookie-path.d.ts.map +1 -1
  247. package/dist/shared/utils/session-auth.d.ts +16 -0
  248. package/dist/shared/utils/session-auth.d.ts.map +1 -1
  249. 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":"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"}
@@ -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 `STRAPI_ADMIN_AUTH_COOKIE_PATH`.
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 `admin.auth.cookie.path` and `admin.auth.cookie.domain` (both inlined
71
- * at build time) so the access cookie stays scoped to the same path and domain
72
- * as the httpOnly refresh cookie and the EE SSO access cookie. The cookie is
73
- * marked `Secure` whenever the page is served over TLS.
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`\n * into the bundle as `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 `admin.auth.cookie.path` and `admin.auth.cookie.domain` (both inlined\n * at build time) so the access cookie stays scoped to the same path and domain\n * as the httpOnly refresh cookie and the EE SSO access cookie. The cookie is\n * marked `Secure` whenever 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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"}
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":"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"}
@@ -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 `STRAPI_ADMIN_AUTH_COOKIE_PATH`.
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 `admin.auth.cookie.path` and `admin.auth.cookie.domain` (both inlined
69
- * at build time) so the access cookie stays scoped to the same path and domain
70
- * as the httpOnly refresh cookie and the EE SSO access cookie. The cookie is
71
- * marked `Secure` whenever the page is served over TLS.
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`\n * into the bundle as `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 `admin.auth.cookie.path` and `admin.auth.cookie.domain` (both inlined\n * at build time) so the access cookie stays scoped to the same path and domain\n * as the httpOnly refresh cookie and the EE SSO access cookie. The cookie is\n * marked `Secure` whenever 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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"}
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":"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"}
@@ -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":";;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CA,MAAMA,oBAAgE,EAAE;AAExEC,SAAAA,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,KAAAA,CAAMC,aAAa,CAAkB,IAAA,CAAA;AAEjE,MAAMC,kBAAAA,GAAqB,IAAA;IACzB,qBAAOC,GAAA,CAAAC,QAAA,EAAA;AAAGJ,QAAAA,QAAAA,EAAAA,KAAAA,CAAMK,UAAU,CAACN,mBAAAA;;AAC7B,CAAA;AASA,MAAMO,sBAAAA,GAAyB,KAAO;QACpCC,cAAAA,EAAgBC,YAAAA,EAAAA;QAChBC,OAAAA,EAAS;AACP,YAAA,CAACC,QAAAA,CAASC,WAAW,GAAGD,SAASD,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,QAAAA,CAASI;AACV;KACH;AAEA,MAAMI,mBAAAA,GAAsB;OACvBC,QAAAA,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,KAAAA,CAAMiC,MAAM,CAAqB,IAAA,CAAA;IACxD,MAAMC,QAAAA,GAAWlC,KAAAA,CAAMiC,MAAM,CAA2C,IAAA,CAAA;IACxE,MAAME,SAAAA,GAAYnC,KAAAA,CAAMiC,MAAM,CAA+C,IAAA,CAAA;IAE7E,IAAID,cAAAA,CAAeI,OAAO,KAAK,IAAA,EAAM;QACnCJ,cAAAA,CAAeI,OAAO,GAAG,IAAIC,WAAAA,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,cAAAA,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,kBAAAA,CAClB;AACE,YAAA;gBACEC,IAAAA,EAAM,IAAA;AACNC,gBAAAA,OAAAA,gBACEzC,GAAA,CAAC0C,iBAAAA,EAAAA;AACCC,oBAAAA,UAAAA,EAAY,EAAC;AACbC,oBAAAA,IAAAA,EAAM,IAAIC,IAAAA,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,GAAA,CAAC4E,QAAAA,EAAAA;AAASC,wBAAAA,KAAAA,EAAO9C,SAASE,OAAO;AAC/B,wBAAA,QAAA,gBAAAjC,GAAA,CAAC8E,gBAAAA,EAAAA;AAAiBC,4BAAAA,QAAAA,EAAU,EAAC;AAC3B,4BAAA,QAAA,gBAAA/E,GAAA,CAACgF,KAAAA,EAAAA;gCACCC,MAAAA,EAAQ;oCACNC,IAAAA,EAAMC,SAAAA;oCACNC,KAAAA,EAAOC;AACT,iCAAA;AAEA,gCAAA,QAAA,gBAAArF,GAAA,CAACsF,YAAAA,EAAAA;oCAAaC,mBAAAA,EAAqBrE,cAAAA;oCAAgBsE,kBAAAA,EAAoB,IAAA;AACrE,oCAAA,QAAA,gBAAAxF,GAAA,CAACyF,mBAAAA,EAAAA;AAAoBC,wCAAAA,MAAAA,EAAQ7D,eAAeI,OAAO;AACjD,wCAAA,QAAA,gBAAAjC,GAAA,CAAC2F,WAAAA,EAAAA;4CAAYC,OAAAA,EAASC,YAAAA;AACpB,4CAAA,QAAA,gBAAA7F,GAAA,CAAC8F,qBAAAA,EAAAA;AACC,gDAAA,QAAA,gBAAA9F,GAAA,CAAC+F,iBAAAA,EAAAA;oDAAkBC,OAAAA,EAAS,KAAA;AAC1B,oDAAA,QAAA,gBAAAhG,GAAA,CAACiG,4BAAAA,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,GAAA,CAACsG,eAAAA,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,GAAA,CAACD,kBAAAA,EAAAA,EAAAA;;;;;;;;;;;;AAa3B;SACD,EACD;AACE4B,YAAAA;AACF,SAAA,CAAA;AAEJ,IAAA;;IAGA,qBACE3B,GAAA,CAACJ,oBAAoBgF,QAAQ,EAAA;QAACiC,KAAAA,EAAOnF,QAAAA;AACnC,QAAA,QAAA,gBAAA1B,GAAA,CAAC8G,cAAAA,EAAAA;AAAeC,YAAAA,MAAAA,EAAQ/E,UAAUC;;;AAGxC,CAAA;AAEA;AACA,MAAM+E,eAAAA,GAAkB,CAAC,EAAEtF,QAAQ,EAAiC,iBAAK1B,GAAA,CAAAC,QAAA,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,SAAUP,EAAAA,EAAI;AACfI,YAAAA,OAAAA,EAAS,CAAC,EAAE5F,QAAQ,EAAE,iBACpB1B,GAAA,CAACyB,SAAAA,EAAAA;oBAAUE,cAAAA,EAAgBA,cAAAA;AAAiB,oBAAA,GAAG0F,eAAe;AAC5D,oBAAA,QAAA,gBAAArH,GAAA,CAACuH,OAAAA,EAAAA;AAAS7F,wBAAAA,QAAAA,EAAAA;;;AAGd,YAAA,GAAG8F;SACL,CAAE;QACFE,IAAAA,EAAMC,SAAAA,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,aAAcF,IAAAA,EAAM;AACzBT,QAAAA,OAAAA,EAAS,CAAC,EAAE5F,QAAQ,EAAE,iBACpB1B,GAAA,CAACyB,SAAAA,EAAAA;gBAAUE,cAAAA,EAAgBA,cAAAA;AAAiB,gBAAA,GAAG0F,eAAe;AAC5D,gBAAA,QAAA,gBAAArH,GAAA,CAACuH,OAAAA,EAAAA;AAAS7F,oBAAAA,QAAAA,EAAAA;;;AAGd,QAAA,GAAG8F;AACL,KAAA,CAAA;AACF;;;;"}
@@ -1,19 +1,22 @@
1
1
  'use strict';
2
2
 
3
3
  /**
4
- * Path attribute of the admin auth (access) token cookie, configurable
5
- * through `admin.auth.cookie.path` so multiple Strapi instances on the same
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 config value into
10
- * the bundle through the internal `STRAPI_ADMIN_AUTH_COOKIE_PATH` variable
11
- * (see create-build-context.ts in @strapi/strapi); the server resolves the
12
- * same config at runtime. Changing the path requires an admin rebuild, like
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
- * Defaults to `/admin` to match the refresh-cookie path used by
16
- * `getRefreshCookieOptions`.
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 (access) token cookie, configurable\n * through `admin.auth.cookie.path` so multiple Strapi instances on the same\n * 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 config value into\n * the bundle through the internal `STRAPI_ADMIN_AUTH_COOKIE_PATH` variable\n * (see create-build-context.ts in @strapi/strapi); the server resolves the\n * same config at runtime. Changing the path requires an admin rebuild, like\n * any other admin config change.\n *\n * Defaults to `/admin` to match the refresh-cookie path used by\n * `getRefreshCookieOptions`.\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;;;;;;;;;;;;;;IAeO,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
+ {"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 (access) token cookie, configurable
3
- * through `admin.auth.cookie.path` so multiple Strapi instances on the same
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 config value into
8
- * the bundle through the internal `STRAPI_ADMIN_AUTH_COOKIE_PATH` variable
9
- * (see create-build-context.ts in @strapi/strapi); the server resolves the
10
- * same config at runtime. Changing the path requires an admin rebuild, like
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
- * Defaults to `/admin` to match the refresh-cookie path used by
14
- * `getRefreshCookieOptions`.
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 (access) token cookie, configurable\n * through `admin.auth.cookie.path` so multiple Strapi instances on the same\n * 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 config value into\n * the bundle through the internal `STRAPI_ADMIN_AUTH_COOKIE_PATH` variable\n * (see create-build-context.ts in @strapi/strapi); the server resolves the\n * same config at runtime. Changing the path requires an admin rebuild, like\n * any other admin config change.\n *\n * Defaults to `/admin` to match the refresh-cookie path used by\n * `getRefreshCookieOptions`.\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;;;;;;;;;;;;;;IAeO,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
+ {"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;;;;"}