@strapi/admin 5.57.0 → 5.59.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/admin/src/StrapiApp.js.map +1 -1
- package/dist/admin/admin/src/StrapiApp.mjs.map +1 -1
- package/dist/admin/admin/src/components/ConfirmDialog.js +10 -9
- package/dist/admin/admin/src/components/ConfirmDialog.js.map +1 -1
- package/dist/admin/admin/src/components/ConfirmDialog.mjs +10 -9
- package/dist/admin/admin/src/components/ConfirmDialog.mjs.map +1 -1
- package/dist/admin/admin/src/components/Filters.js +57 -12
- package/dist/admin/admin/src/components/Filters.js.map +1 -1
- package/dist/admin/admin/src/components/Filters.mjs +57 -12
- package/dist/admin/admin/src/components/Filters.mjs.map +1 -1
- package/dist/admin/admin/src/components/Form.js +3 -1
- package/dist/admin/admin/src/components/Form.js.map +1 -1
- package/dist/admin/admin/src/components/Form.mjs +3 -1
- package/dist/admin/admin/src/components/Form.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Boolean.js +3 -2
- package/dist/admin/admin/src/components/FormInputs/Boolean.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Boolean.mjs +3 -2
- package/dist/admin/admin/src/components/FormInputs/Boolean.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Enumeration.js +2 -1
- package/dist/admin/admin/src/components/FormInputs/Enumeration.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs +2 -1
- package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs.map +1 -1
- package/dist/admin/admin/src/components/LeftMenu.js +5 -1
- package/dist/admin/admin/src/components/LeftMenu.js.map +1 -1
- package/dist/admin/admin/src/components/LeftMenu.mjs +5 -1
- package/dist/admin/admin/src/components/LeftMenu.mjs.map +1 -1
- package/dist/admin/admin/src/components/PageHelpers.js +2 -1
- package/dist/admin/admin/src/components/PageHelpers.js.map +1 -1
- package/dist/admin/admin/src/components/PageHelpers.mjs +2 -1
- package/dist/admin/admin/src/components/PageHelpers.mjs.map +1 -1
- package/dist/admin/admin/src/components/Pagination.js +7 -6
- package/dist/admin/admin/src/components/Pagination.js.map +1 -1
- package/dist/admin/admin/src/components/Pagination.mjs +7 -6
- package/dist/admin/admin/src/components/Pagination.mjs.map +1 -1
- package/dist/admin/admin/src/components/RelativeTime.js +2 -1
- package/dist/admin/admin/src/components/RelativeTime.js.map +1 -1
- package/dist/admin/admin/src/components/RelativeTime.mjs +2 -1
- package/dist/admin/admin/src/components/RelativeTime.mjs.map +1 -1
- package/dist/admin/admin/src/components/SubNav.js +6 -12
- package/dist/admin/admin/src/components/SubNav.js.map +1 -1
- package/dist/admin/admin/src/components/SubNav.mjs +7 -13
- package/dist/admin/admin/src/components/SubNav.mjs.map +1 -1
- package/dist/admin/admin/src/components/Table.js +3 -1
- package/dist/admin/admin/src/components/Table.js.map +1 -1
- package/dist/admin/admin/src/components/Table.mjs +3 -1
- package/dist/admin/admin/src/components/Table.mjs.map +1 -1
- package/dist/admin/admin/src/components/UpsellBanner.js.map +1 -1
- package/dist/admin/admin/src/components/UpsellBanner.mjs.map +1 -1
- package/dist/admin/admin/src/components/WidgetRoot.js.map +1 -1
- package/dist/admin/admin/src/components/WidgetRoot.mjs.map +1 -1
- package/dist/admin/admin/src/constants.js +14 -0
- package/dist/admin/admin/src/constants.js.map +1 -1
- package/dist/admin/admin/src/constants.mjs +14 -0
- package/dist/admin/admin/src/constants.mjs.map +1 -1
- package/dist/admin/admin/src/core/apis/Plugin.js.map +1 -1
- package/dist/admin/admin/src/core/apis/Plugin.mjs.map +1 -1
- package/dist/admin/admin/src/features/Auth.js +2 -1
- package/dist/admin/admin/src/features/Auth.js.map +1 -1
- package/dist/admin/admin/src/features/Auth.mjs +2 -1
- package/dist/admin/admin/src/features/Auth.mjs.map +1 -1
- package/dist/admin/admin/src/features/StrapiApp.js.map +1 -1
- package/dist/admin/admin/src/features/StrapiApp.mjs.map +1 -1
- package/dist/admin/admin/src/features/Tracking.js.map +1 -1
- package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/ResetPassword.js +6 -12
- package/dist/admin/admin/src/pages/Auth/components/ResetPassword.js.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/ResetPassword.mjs +6 -12
- package/dist/admin/admin/src/pages/Auth/components/ResetPassword.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.js.map +1 -1
- package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.mjs.map +1 -1
- package/dist/admin/admin/src/pages/ProfilePage.js +2 -2
- package/dist/admin/admin/src/pages/ProfilePage.js.map +1 -1
- package/dist/admin/admin/src/pages/ProfilePage.mjs +2 -2
- package/dist/admin/admin/src/pages/ProfilePage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js +10 -2
- package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/SettingsNav.mjs +10 -2
- package/dist/admin/admin/src/pages/Settings/components/SettingsNav.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.js +4 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.mjs +4 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js +3 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.mjs +3 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenTypeSelect.js +2 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenTypeSelect.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenTypeSelect.mjs +2 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenTypeSelect.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.js +6 -5
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.mjs +6 -5
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.js +2 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.mjs +2 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/transformPermissionsData.js +4 -4
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/transformPermissionsData.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/transformPermissionsData.mjs +4 -4
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/transformPermissionsData.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js +7 -58
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs +7 -58
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/DiagnosticSnapshotModal.js +217 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/DiagnosticSnapshotModal.js.map +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/DiagnosticSnapshotModal.mjs +195 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/DiagnosticSnapshotModal.mjs.map +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.js +185 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.js.map +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.mjs +162 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.mjs.map +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/SupportCard.js +342 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/SupportCard.js.map +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/SupportCard.mjs +320 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/SupportCard.mjs.map +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.js +9 -4
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.mjs +9 -4
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.js +15 -9
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.mjs +15 -9
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.js +5 -2
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.mjs +5 -2
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.js +2 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.mjs +2 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js +2 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.mjs +2 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js +2 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.mjs +2 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js +3 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.mjs +3 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/components/NewUserForm.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/components/NewUserForm.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.js +4 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.mjs +4 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.js +18 -3
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.mjs +18 -3
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.mjs.map +1 -1
- package/dist/admin/admin/src/router.js.map +1 -1
- package/dist/admin/admin/src/router.mjs.map +1 -1
- package/dist/admin/admin/src/services/admin.js +11 -1
- package/dist/admin/admin/src/services/admin.js.map +1 -1
- package/dist/admin/admin/src/services/admin.mjs +11 -2
- package/dist/admin/admin/src/services/admin.mjs.map +1 -1
- package/dist/admin/admin/src/services/users.js.map +1 -1
- package/dist/admin/admin/src/services/users.mjs.map +1 -1
- package/dist/admin/admin/src/translations/en.json.js +71 -4
- package/dist/admin/admin/src/translations/en.json.js.map +1 -1
- package/dist/admin/admin/src/translations/en.json.mjs +71 -4
- package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/eu.json.js +1 -1
- package/dist/admin/admin/src/translations/eu.json.mjs +1 -1
- package/dist/admin/admin/src/utils/browserStrapi.js +1 -1
- package/dist/admin/admin/src/utils/browserStrapi.js.map +1 -1
- package/dist/admin/admin/src/utils/browserStrapi.mjs +1 -1
- package/dist/admin/admin/src/utils/browserStrapi.mjs.map +1 -1
- package/dist/admin/admin/src/utils/cookies.js +7 -6
- package/dist/admin/admin/src/utils/cookies.js.map +1 -1
- package/dist/admin/admin/src/utils/cookies.mjs +7 -6
- package/dist/admin/admin/src/utils/cookies.mjs.map +1 -1
- package/dist/admin/admin/src/utils/getFetchClient.js +24 -0
- package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
- package/dist/admin/admin/src/utils/getFetchClient.mjs +24 -1
- package/dist/admin/admin/src/utils/getFetchClient.mjs.map +1 -1
- package/dist/admin/admin/tests/utils.js +2 -1
- package/dist/admin/admin/tests/utils.js.map +1 -1
- package/dist/admin/admin/tests/utils.mjs +2 -1
- package/dist/admin/admin/tests/utils.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.js +52 -22
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.mjs +53 -23
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.js +16 -29
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.mjs +18 -31
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/LicenseInfo.js +473 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/LicenseInfo.js.map +1 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/LicenseInfo.mjs +471 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/LicenseInfo.mjs.map +1 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.js +2 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.mjs +2 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.mjs.map +1 -1
- package/dist/admin/index.js +1 -0
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/admin/shared/utils/auth-cookie-path.js +13 -10
- package/dist/admin/shared/utils/auth-cookie-path.js.map +1 -1
- package/dist/admin/shared/utils/auth-cookie-path.mjs +13 -10
- package/dist/admin/shared/utils/auth-cookie-path.mjs.map +1 -1
- package/dist/admin/shared/utils/get-project-type.js +49 -0
- package/dist/admin/shared/utils/get-project-type.js.map +1 -0
- package/dist/admin/shared/utils/get-project-type.mjs +46 -0
- package/dist/admin/shared/utils/get-project-type.mjs.map +1 -0
- package/dist/admin/src/components/Filters.d.ts +1 -1
- package/dist/admin/src/components/Form.d.ts +1 -1
- package/dist/admin/src/constants.d.ts +10 -0
- package/dist/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.d.ts +1 -1
- package/dist/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.d.ts +1 -1
- package/dist/admin/src/pages/Settings/pages/ApplicationInfo/components/DiagnosticSnapshotModal.d.ts +12 -0
- package/dist/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.d.ts +14 -0
- package/dist/admin/src/pages/Settings/pages/ApplicationInfo/components/SupportCard.d.ts +2 -0
- package/dist/admin/src/services/admin.d.ts +2 -2
- package/dist/admin/src/types/permissions.d.ts +1 -0
- package/dist/admin/src/utils/cookies.d.ts +7 -6
- package/dist/admin/src/utils/getFetchClient.d.ts +25 -0
- package/dist/ee/admin/src/hooks/useLicenseLimits.d.ts +29 -0
- package/dist/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.d.ts +6 -1
- package/dist/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/LicenseInfo.d.ts +2 -0
- package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.d.ts +2 -0
- package/dist/ee/server/src/audit-logs/entitlements.d.ts +8 -0
- package/dist/ee/server/src/audit-logs/entitlements.d.ts.map +1 -0
- package/dist/ee/server/src/audit-logs/services/lifecycles.d.ts +16 -0
- package/dist/ee/server/src/audit-logs/services/lifecycles.d.ts.map +1 -1
- package/dist/ee/server/src/controllers/admin.d.ts +36 -10
- package/dist/ee/server/src/controllers/admin.d.ts.map +1 -1
- package/dist/ee/server/src/controllers/authentication-utils/middlewares.d.ts.map +1 -1
- package/dist/ee/server/src/controllers/index.d.ts +36 -10
- package/dist/ee/server/src/controllers/index.d.ts.map +1 -1
- package/dist/ee/server/src/index.d.ts +36 -10
- package/dist/ee/server/src/index.d.ts.map +1 -1
- package/dist/ee/server/src/services/seat-enforcement.d.ts.map +1 -1
- package/dist/ee/server/src/validation/role.d.ts.map +1 -1
- package/dist/server/ee/server/src/audit-logs/entitlements.js +25 -0
- package/dist/server/ee/server/src/audit-logs/entitlements.js.map +1 -0
- package/dist/server/ee/server/src/audit-logs/entitlements.mjs +23 -0
- package/dist/server/ee/server/src/audit-logs/entitlements.mjs.map +1 -0
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.js +20 -8
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.js.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs +19 -9
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs.map +1 -1
- package/dist/server/ee/server/src/audit-logs/utils/csv.js +3 -3
- package/dist/server/ee/server/src/audit-logs/utils/csv.js.map +1 -1
- package/dist/server/ee/server/src/audit-logs/utils/csv.mjs +3 -3
- package/dist/server/ee/server/src/audit-logs/utils/csv.mjs.map +1 -1
- package/dist/server/ee/server/src/controllers/admin.js +76 -3
- package/dist/server/ee/server/src/controllers/admin.js.map +1 -1
- package/dist/server/ee/server/src/controllers/admin.mjs +76 -3
- package/dist/server/ee/server/src/controllers/admin.mjs.map +1 -1
- package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.js +28 -10
- package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.js.map +1 -1
- package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.mjs +28 -10
- package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.mjs.map +1 -1
- package/dist/server/ee/server/src/index.js +2 -0
- package/dist/server/ee/server/src/index.js.map +1 -1
- package/dist/server/ee/server/src/index.mjs +2 -0
- package/dist/server/ee/server/src/index.mjs.map +1 -1
- package/dist/server/ee/server/src/services/seat-enforcement.js.map +1 -1
- package/dist/server/ee/server/src/services/seat-enforcement.mjs.map +1 -1
- package/dist/server/ee/server/src/validation/role.js +4 -2
- package/dist/server/ee/server/src/validation/role.js.map +1 -1
- package/dist/server/ee/server/src/validation/role.mjs +4 -2
- package/dist/server/ee/server/src/validation/role.mjs.map +1 -1
- package/dist/server/server/src/ai/services/ai.js.map +1 -1
- package/dist/server/server/src/ai/services/ai.mjs.map +1 -1
- package/dist/server/server/src/audit-logs/auth.js +72 -0
- package/dist/server/server/src/audit-logs/auth.js.map +1 -0
- package/dist/server/server/src/audit-logs/auth.mjs +67 -0
- package/dist/server/server/src/audit-logs/auth.mjs.map +1 -0
- package/dist/server/server/src/config/admin-actions.js +7 -0
- package/dist/server/server/src/config/admin-actions.js.map +1 -1
- package/dist/server/server/src/config/admin-actions.mjs +7 -0
- package/dist/server/server/src/config/admin-actions.mjs.map +1 -1
- package/dist/server/server/src/controllers/admin.js +17 -12
- package/dist/server/server/src/controllers/admin.js.map +1 -1
- package/dist/server/server/src/controllers/admin.mjs +17 -12
- package/dist/server/server/src/controllers/admin.mjs.map +1 -1
- package/dist/server/server/src/controllers/authentication.js +34 -8
- package/dist/server/server/src/controllers/authentication.js.map +1 -1
- package/dist/server/server/src/controllers/authentication.mjs +34 -8
- package/dist/server/server/src/controllers/authentication.mjs.map +1 -1
- package/dist/server/server/src/domain/permission/index.js.map +1 -1
- package/dist/server/server/src/domain/permission/index.mjs.map +1 -1
- package/dist/server/server/src/register.js +4 -0
- package/dist/server/server/src/register.js.map +1 -1
- package/dist/server/server/src/register.mjs +4 -0
- package/dist/server/server/src/register.mjs.map +1 -1
- package/dist/server/server/src/routes/admin.js +18 -0
- package/dist/server/server/src/routes/admin.js.map +1 -1
- package/dist/server/server/src/routes/admin.mjs +18 -0
- package/dist/server/server/src/routes/admin.mjs.map +1 -1
- package/dist/server/server/src/services/api-token.js +4 -8
- package/dist/server/server/src/services/api-token.js.map +1 -1
- package/dist/server/server/src/services/api-token.mjs +4 -8
- package/dist/server/server/src/services/api-token.mjs.map +1 -1
- package/dist/server/server/src/services/auth.js +4 -2
- package/dist/server/server/src/services/auth.js.map +1 -1
- package/dist/server/server/src/services/auth.mjs +4 -3
- package/dist/server/server/src/services/auth.mjs.map +1 -1
- package/dist/server/server/src/services/constants.js +4 -0
- package/dist/server/server/src/services/constants.js.map +1 -1
- package/dist/server/server/src/services/constants.mjs +4 -0
- package/dist/server/server/src/services/constants.mjs.map +1 -1
- package/dist/server/server/src/services/debug-dump.js +173 -0
- package/dist/server/server/src/services/debug-dump.js.map +1 -0
- package/dist/server/server/src/services/debug-dump.mjs +166 -0
- package/dist/server/server/src/services/debug-dump.mjs.map +1 -0
- package/dist/server/server/src/services/index.js +3 -1
- package/dist/server/server/src/services/index.js.map +1 -1
- package/dist/server/server/src/services/index.mjs +3 -1
- package/dist/server/server/src/services/index.mjs.map +1 -1
- package/dist/server/server/src/services/permission/rename-fields.js.map +1 -1
- package/dist/server/server/src/services/permission/rename-fields.mjs.map +1 -1
- package/dist/server/server/src/services/permission/sections-builder/handlers.js.map +1 -1
- package/dist/server/server/src/services/permission/sections-builder/handlers.mjs.map +1 -1
- package/dist/server/server/src/services/role.js +8 -5
- package/dist/server/server/src/services/role.js.map +1 -1
- package/dist/server/server/src/services/role.mjs +8 -5
- package/dist/server/server/src/services/role.mjs.map +1 -1
- package/dist/server/server/src/utils/debug-dump/redact.js +197 -0
- package/dist/server/server/src/utils/debug-dump/redact.js.map +1 -0
- package/dist/server/server/src/utils/debug-dump/redact.mjs +194 -0
- package/dist/server/server/src/utils/debug-dump/redact.mjs.map +1 -0
- package/dist/server/server/src/validation/admin-tokens.js +4 -4
- package/dist/server/server/src/validation/admin-tokens.js.map +1 -1
- package/dist/server/server/src/validation/admin-tokens.mjs +4 -4
- package/dist/server/server/src/validation/admin-tokens.mjs.map +1 -1
- package/dist/server/server/src/validation/api-tokens.js +4 -4
- package/dist/server/server/src/validation/api-tokens.js.map +1 -1
- package/dist/server/server/src/validation/api-tokens.mjs +4 -4
- package/dist/server/server/src/validation/api-tokens.mjs.map +1 -1
- package/dist/server/server/src/validation/role.js +6 -4
- package/dist/server/server/src/validation/role.js.map +1 -1
- package/dist/server/server/src/validation/role.mjs +6 -4
- package/dist/server/server/src/validation/role.mjs.map +1 -1
- package/dist/server/server/src/validation/transfer/token.js +4 -4
- package/dist/server/server/src/validation/transfer/token.js.map +1 -1
- package/dist/server/server/src/validation/transfer/token.mjs +4 -4
- package/dist/server/server/src/validation/transfer/token.mjs.map +1 -1
- package/dist/server/shared/utils/auth-cookie-path.js +13 -10
- package/dist/server/shared/utils/auth-cookie-path.js.map +1 -1
- package/dist/server/shared/utils/auth-cookie-path.mjs +13 -10
- package/dist/server/shared/utils/auth-cookie-path.mjs.map +1 -1
- package/dist/server/shared/utils/get-project-type.js +49 -0
- package/dist/server/shared/utils/get-project-type.js.map +1 -0
- package/dist/server/shared/utils/get-project-type.mjs +46 -0
- package/dist/server/shared/utils/get-project-type.mjs.map +1 -0
- package/dist/server/shared/utils/session-auth.js +70 -3
- package/dist/server/shared/utils/session-auth.js.map +1 -1
- package/dist/server/shared/utils/session-auth.mjs +70 -4
- package/dist/server/shared/utils/session-auth.mjs.map +1 -1
- package/dist/server/src/ai/services/ai.d.ts.map +1 -1
- package/dist/server/src/audit-logs/auth.d.ts +72 -0
- package/dist/server/src/audit-logs/auth.d.ts.map +1 -0
- package/dist/server/src/config/admin-actions.d.ts.map +1 -1
- package/dist/server/src/controllers/admin.d.ts +3 -0
- package/dist/server/src/controllers/admin.d.ts.map +1 -1
- package/dist/server/src/controllers/authentication.d.ts.map +1 -1
- package/dist/server/src/controllers/index.d.ts +3 -0
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/domain/permission/index.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +8 -0
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/register.d.ts.map +1 -1
- package/dist/server/src/routes/admin.d.ts.map +1 -1
- package/dist/server/src/services/auth.d.ts +6 -0
- package/dist/server/src/services/auth.d.ts.map +1 -1
- package/dist/server/src/services/constants.d.ts +2 -0
- package/dist/server/src/services/constants.d.ts.map +1 -1
- package/dist/server/src/services/debug-dump.d.ts +9 -0
- package/dist/server/src/services/debug-dump.d.ts.map +1 -0
- package/dist/server/src/services/index.d.ts +5 -0
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/permission/rename-fields.d.ts.map +1 -1
- package/dist/server/src/services/permission/sections-builder/handlers.d.ts.map +1 -1
- package/dist/server/src/services/role.d.ts.map +1 -1
- package/dist/server/src/utils/debug-dump/redact.d.ts +8 -0
- package/dist/server/src/utils/debug-dump/redact.d.ts.map +1 -0
- package/dist/server/src/validation/role.d.ts.map +1 -1
- package/dist/shared/contracts/admin.d.ts +106 -0
- package/dist/shared/contracts/admin.d.ts.map +1 -1
- package/dist/shared/contracts/transfer.d.ts.map +1 -1
- package/dist/shared/utils/__tests__/get-project-type.test.d.ts +1 -0
- package/dist/shared/utils/__tests__/get-project-type.test.d.ts.map +1 -0
- package/dist/shared/utils/auth-cookie-path.d.ts +13 -10
- package/dist/shared/utils/auth-cookie-path.d.ts.map +1 -1
- package/dist/shared/utils/get-project-type.d.ts +37 -0
- package/dist/shared/utils/get-project-type.d.ts.map +1 -0
- package/dist/shared/utils/session-auth.d.ts +16 -0
- package/dist/shared/utils/session-auth.d.ts.map +1 -1
- package/package.json +8 -8
- package/dist/admin/admin/src/utils/getProjectType.js +0 -22
- package/dist/admin/admin/src/utils/getProjectType.js.map +0 -1
- package/dist/admin/admin/src/utils/getProjectType.mjs +0 -20
- package/dist/admin/admin/src/utils/getProjectType.mjs.map +0 -1
- package/dist/admin/src/utils/getProjectType.d.ts +0 -16
|
@@ -23,9 +23,75 @@ const getAccessCookieName = ()=>{
|
|
|
23
23
|
const configured = strapi.config.get('admin.auth.cookie.name');
|
|
24
24
|
return authCookieName.resolveAuthCookieName(configured, warnViaStrapiLog);
|
|
25
25
|
};
|
|
26
|
-
|
|
26
|
+
// The admin API routes are mounted under `/admin` whatever `admin.url` is.
|
|
27
|
+
const ADMIN_API_PREFIX = '/admin';
|
|
28
|
+
const getConfiguredCookiePath = ()=>{
|
|
27
29
|
const configured = strapi.config.get('admin.auth.cookie.path');
|
|
28
|
-
return
|
|
30
|
+
return typeof configured === 'string' && configured.trim() !== '' ? configured : undefined;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Path the browser sees for one of the resolved absolute URLs, so it includes
|
|
34
|
+
* a `server.url` subpath (`admin.path` does not). No trailing slash, except
|
|
35
|
+
* for the root.
|
|
36
|
+
*/ const getBrowserPath = (key)=>{
|
|
37
|
+
const absoluteUrl = strapi.config.get(key);
|
|
38
|
+
if (typeof absoluteUrl !== 'string' || absoluteUrl === '') {
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
try {
|
|
42
|
+
return new URL(absoluteUrl).pathname.replace(/\/+$/, '') || '/';
|
|
43
|
+
} catch {
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Path the browser uses for the admin API (`/admin/access-token`,
|
|
49
|
+
* `/admin/login`, `/admin/logout`): `/admin` behind any `server.url` subpath.
|
|
50
|
+
*/ const getAdminApiPath = ()=>{
|
|
51
|
+
const serverPath = getBrowserPath('server.absoluteUrl');
|
|
52
|
+
const apiPath = serverPath && serverPath !== '/' ? `${serverPath}${ADMIN_API_PREFIX}` : ADMIN_API_PREFIX;
|
|
53
|
+
return authCookiePath.resolveAuthCookiePath(apiPath, warnViaStrapiLog);
|
|
54
|
+
};
|
|
55
|
+
// RFC 6265 section 5.1.4: whether the browser attaches a cookie scoped to
|
|
56
|
+
// `cookiePath` to a request for `requestPath`.
|
|
57
|
+
const cookiePathMatches = (cookiePath, requestPath)=>{
|
|
58
|
+
if (requestPath === cookiePath) {
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
return requestPath.startsWith(cookiePath) && (cookiePath.endsWith('/') || requestPath.charAt(cookiePath.length) === '/');
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Path of the non-httpOnly access cookie. Only the admin panel reads it,
|
|
65
|
+
* through `document.cookie`, which exposes a cookie only on pages its path
|
|
66
|
+
* matches. So when `admin.auth.cookie.path` is unset it follows the path the
|
|
67
|
+
* browser loads the panel from (`admin.url`, behind any `server.url` subpath).
|
|
68
|
+
* The admin build resolves the same value (create-build-context.ts).
|
|
69
|
+
*/ const getAccessCookiePath = ()=>{
|
|
70
|
+
return authCookiePath.resolveAuthCookiePath(getConfiguredCookiePath() ?? getBrowserPath('admin.absoluteUrl'), warnViaStrapiLog);
|
|
71
|
+
};
|
|
72
|
+
const warnedRefreshCookiePaths = new Set();
|
|
73
|
+
/**
|
|
74
|
+
* Path of the httpOnly refresh cookie (and every other cookie built from
|
|
75
|
+
* `getRefreshCookieOptions`). Only the admin API reads it, and the API does not
|
|
76
|
+
* move with `admin.url`, so it follows the API path instead of the panel.
|
|
77
|
+
* `admin.auth.cookie.path` is kept when it covers the API path. Otherwise the
|
|
78
|
+
* browser would never send the cookie to `/admin/access-token` and every
|
|
79
|
+
* session would end when its access token expires, so the API path is used.
|
|
80
|
+
*/ const getRefreshCookiePath = ()=>{
|
|
81
|
+
const apiPath = getAdminApiPath();
|
|
82
|
+
const configured = getConfiguredCookiePath();
|
|
83
|
+
if (!configured) {
|
|
84
|
+
return apiPath;
|
|
85
|
+
}
|
|
86
|
+
const configuredPath = authCookiePath.resolveAuthCookiePath(configured, warnViaStrapiLog);
|
|
87
|
+
if (cookiePathMatches(configuredPath, apiPath)) {
|
|
88
|
+
return configuredPath;
|
|
89
|
+
}
|
|
90
|
+
if (!warnedRefreshCookiePaths.has(configuredPath)) {
|
|
91
|
+
warnedRefreshCookiePaths.add(configuredPath);
|
|
92
|
+
strapi.log.warn(`admin.auth.cookie.path "${configuredPath}" does not cover the admin API at "${apiPath}", so the browser would not send the refresh cookie to "${apiPath}/access-token". Using "${apiPath}" for the refresh cookie. The access cookie keeps "${configuredPath}".`);
|
|
93
|
+
}
|
|
94
|
+
return apiPath;
|
|
29
95
|
};
|
|
30
96
|
const getAccessCookieDomain = ()=>{
|
|
31
97
|
const configured = strapi.config.get('admin.auth.cookie.domain') || strapi.config.get('admin.auth.domain');
|
|
@@ -39,7 +105,7 @@ const getRefreshCookieOptions = (secureRequest)=>{
|
|
|
39
105
|
const configuredSecure = strapi.config.get('admin.auth.cookie.secure');
|
|
40
106
|
const isProduction = process.env.NODE_ENV === 'production';
|
|
41
107
|
const domain = getAccessCookieDomain();
|
|
42
|
-
const path =
|
|
108
|
+
const path = getRefreshCookiePath();
|
|
43
109
|
const sameSite = strapi.config.get('admin.auth.cookie.sameSite') ?? 'lax';
|
|
44
110
|
let isSecure;
|
|
45
111
|
if (typeof configuredSecure === 'boolean') {
|
|
@@ -141,6 +207,7 @@ exports.getAccessCookieDomain = getAccessCookieDomain;
|
|
|
141
207
|
exports.getAccessCookieName = getAccessCookieName;
|
|
142
208
|
exports.getAccessCookiePath = getAccessCookiePath;
|
|
143
209
|
exports.getRefreshCookieOptions = getRefreshCookieOptions;
|
|
210
|
+
exports.getRefreshCookiePath = getRefreshCookiePath;
|
|
144
211
|
exports.getSessionManager = getSessionManager;
|
|
145
212
|
exports.resolveLogoutDeviceId = resolveLogoutDeviceId;
|
|
146
213
|
//# sourceMappingURL=session-auth.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-auth.js","sources":["../../../../shared/utils/session-auth.ts"],"sourcesContent":["import crypto from 'crypto';\nimport type { Context } from 'koa';\nimport type { Modules } from '@strapi/types';\nimport { buildSessionMetadata } from '@strapi/utils';\n\nimport { resolveAuthCookieName } from './auth-cookie-name';\nimport { resolveAuthCookiePath } from './auth-cookie-path';\nimport { resolveAuthCookieDomain } from './auth-cookie-domain';\n\nconst ADMIN_ORIGIN = 'admin';\nconst SESSION_CONTENT_TYPE = 'admin::session';\n\nexport const REFRESH_COOKIE_NAME = 'strapi_admin_refresh';\n\n// The resolvers are browser-shared (also inlined into the admin bundle) so\n// they default to console.warn; on the server, route their warnings through\n// the Strapi logger instead.\nconst warnViaStrapiLog = (message: string): void => {\n strapi.log.warn(message);\n};\n\nexport const getAccessCookieName = (): string => {\n const configured: string | undefined = strapi.config.get('admin.auth.cookie.name');\n return resolveAuthCookieName(configured, warnViaStrapiLog);\n};\n\nexport const getAccessCookiePath = (): string => {\n const configured: string | undefined = strapi.config.get('admin.auth.cookie.path');\n return resolveAuthCookiePath(configured, warnViaStrapiLog);\n};\n\nexport const getAccessCookieDomain = (): string | undefined => {\n const configured: string | undefined =\n strapi.config.get('admin.auth.cookie.domain') || strapi.config.get('admin.auth.domain');\n return resolveAuthCookieDomain(configured, warnViaStrapiLog);\n};\n\nexport const DEFAULT_MAX_REFRESH_TOKEN_LIFESPAN = 30 * 24 * 60 * 60;\nexport const DEFAULT_IDLE_REFRESH_TOKEN_LIFESPAN = 14 * 24 * 60 * 60;\nexport const DEFAULT_MAX_SESSION_LIFESPAN = 1 * 24 * 60 * 60;\nexport const DEFAULT_IDLE_SESSION_LIFESPAN = 2 * 60 * 60;\n\nexport const getRefreshCookieOptions = (secureRequest?: boolean) => {\n const configuredSecure = strapi.config.get('admin.auth.cookie.secure');\n const isProduction = process.env.NODE_ENV === 'production';\n\n const domain = getAccessCookieDomain();\n const path = getAccessCookiePath();\n\n const sameSite: boolean | 'lax' | 'strict' | 'none' =\n strapi.config.get('admin.auth.cookie.sameSite') ?? 'lax';\n\n let isSecure: boolean;\n if (typeof configuredSecure === 'boolean') {\n isSecure = configuredSecure;\n } else if (secureRequest !== undefined) {\n isSecure = isProduction && secureRequest;\n } else {\n isSecure = isProduction;\n }\n\n return {\n httpOnly: true,\n secure: isSecure,\n overwrite: true,\n domain,\n path,\n sameSite,\n maxAge: undefined,\n };\n};\n\nconst getLifespansForType = (\n type: 'refresh' | 'session'\n): { idleSeconds: number; maxSeconds: number } => {\n if (type === 'refresh') {\n const idleSeconds = Number(\n strapi.config.get(\n 'admin.auth.sessions.idleRefreshTokenLifespan',\n DEFAULT_IDLE_REFRESH_TOKEN_LIFESPAN\n )\n );\n const maxSeconds = Number(\n strapi.config.get(\n 'admin.auth.sessions.maxRefreshTokenLifespan',\n DEFAULT_MAX_REFRESH_TOKEN_LIFESPAN\n )\n );\n\n return { idleSeconds, maxSeconds };\n }\n\n const idleSeconds = Number(\n strapi.config.get('admin.auth.sessions.idleSessionLifespan', DEFAULT_IDLE_SESSION_LIFESPAN)\n );\n const maxSeconds = Number(\n strapi.config.get('admin.auth.sessions.maxSessionLifespan', DEFAULT_MAX_SESSION_LIFESPAN)\n );\n\n return { idleSeconds, maxSeconds };\n};\n\nexport const buildCookieOptionsWithExpiry = (\n type: 'refresh' | 'session',\n absoluteExpiresAtISO?: string,\n secureRequest?: boolean\n) => {\n const base = getRefreshCookieOptions(secureRequest);\n if (type === 'session') {\n return base;\n }\n\n const { idleSeconds } = getLifespansForType('refresh');\n const now = Date.now();\n const idleExpiry = now + idleSeconds * 1000;\n const absoluteExpiry = absoluteExpiresAtISO\n ? new Date(absoluteExpiresAtISO).getTime()\n : idleExpiry;\n const chosen = new Date(Math.min(idleExpiry, absoluteExpiry));\n\n return { ...base, expires: chosen, maxAge: Math.max(0, chosen.getTime() - now) };\n};\n\nexport const getSessionManager = (): Modules.SessionManager.SessionManagerService | null => {\n const manager = strapi.sessionManager as Modules.SessionManager.SessionManagerService | undefined;\n return manager ?? null;\n};\n\nexport const generateDeviceId = (): string => crypto.randomUUID();\n\nexport const extractDeviceParams = (\n requestBody: unknown\n): { deviceId: string; rememberMe: boolean } => {\n const body = (requestBody ?? {}) as { deviceId?: string; rememberMe?: boolean };\n const deviceId = body.deviceId || generateDeviceId();\n const rememberMe = Boolean(body.rememberMe);\n\n return { deviceId, rememberMe };\n};\n\nexport const buildSessionMetadataFromContext = (ctx: Context) =>\n buildSessionMetadata({\n userAgent: ctx.request.headers['user-agent'],\n });\n\n/**\n * Resolves the device id to use when revoking sessions on logout.\n * SSO assigns deviceId server-side, so the client-provided value may not match\n * the active session row. Prefer the deviceId stored on the session backing\n * the current access token when available.\n *\n * Callers should pass `ctx.state.session.id` from the admin auth strategy and\n * the already-parsed body `deviceId` — the logout route requires authentication,\n * so sessionId is expected to be present.\n */\nexport const resolveLogoutDeviceId = async (\n userId: string,\n sessionId: string | undefined,\n clientDeviceId: string | undefined\n): Promise<string | undefined> => {\n if (!sessionId) {\n strapi.log.debug('resolveLogoutDeviceId: no sessionId; falling back to client deviceId');\n return clientDeviceId;\n }\n\n const session = await strapi.db.query(SESSION_CONTENT_TYPE).findOne({\n where: { sessionId },\n });\n\n if (session?.userId !== userId || session?.origin !== ADMIN_ORIGIN) {\n strapi.log.debug(\n 'resolveLogoutDeviceId: access-token session missing or not owned; falling back to client deviceId'\n );\n return clientDeviceId;\n }\n\n return typeof session.deviceId === 'string' ? session.deviceId : clientDeviceId;\n};\n"],"names":["ADMIN_ORIGIN","SESSION_CONTENT_TYPE","REFRESH_COOKIE_NAME","warnViaStrapiLog","message","strapi","log","warn","getAccessCookieName","configured","config","get","resolveAuthCookieName","getAccessCookiePath","resolveAuthCookiePath","getAccessCookieDomain","resolveAuthCookieDomain","DEFAULT_MAX_REFRESH_TOKEN_LIFESPAN","DEFAULT_IDLE_REFRESH_TOKEN_LIFESPAN","DEFAULT_MAX_SESSION_LIFESPAN","DEFAULT_IDLE_SESSION_LIFESPAN","getRefreshCookieOptions","secureRequest","configuredSecure","isProduction","process","env","NODE_ENV","domain","path","sameSite","isSecure","undefined","httpOnly","secure","overwrite","maxAge","getLifespansForType","type","idleSeconds","Number","maxSeconds","buildCookieOptionsWithExpiry","absoluteExpiresAtISO","base","now","Date","idleExpiry","absoluteExpiry","getTime","chosen","Math","min","expires","max","getSessionManager","manager","sessionManager","generateDeviceId","crypto","randomUUID","extractDeviceParams","requestBody","body","deviceId","rememberMe","Boolean","buildSessionMetadataFromContext","ctx","buildSessionMetadata","userAgent","request","headers","resolveLogoutDeviceId","userId","sessionId","clientDeviceId","debug","session","db","query","findOne","where","origin"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"session-auth.js","sources":["../../../../shared/utils/session-auth.ts"],"sourcesContent":["import crypto from 'crypto';\nimport type { Context } from 'koa';\nimport type { Modules } from '@strapi/types';\nimport { buildSessionMetadata } from '@strapi/utils';\n\nimport { resolveAuthCookieName } from './auth-cookie-name';\nimport { resolveAuthCookiePath } from './auth-cookie-path';\nimport { resolveAuthCookieDomain } from './auth-cookie-domain';\n\nconst ADMIN_ORIGIN = 'admin';\nconst SESSION_CONTENT_TYPE = 'admin::session';\n\nexport const REFRESH_COOKIE_NAME = 'strapi_admin_refresh';\n\n// The resolvers are browser-shared (also inlined into the admin bundle) so\n// they default to console.warn; on the server, route their warnings through\n// the Strapi logger instead.\nconst warnViaStrapiLog = (message: string): void => {\n strapi.log.warn(message);\n};\n\nexport const getAccessCookieName = (): string => {\n const configured: string | undefined = strapi.config.get('admin.auth.cookie.name');\n return resolveAuthCookieName(configured, warnViaStrapiLog);\n};\n\n// The admin API routes are mounted under `/admin` whatever `admin.url` is.\nconst ADMIN_API_PREFIX = '/admin';\n\nconst getConfiguredCookiePath = (): string | undefined => {\n const configured: unknown = strapi.config.get('admin.auth.cookie.path');\n return typeof configured === 'string' && configured.trim() !== '' ? configured : undefined;\n};\n\n/**\n * Path the browser sees for one of the resolved absolute URLs, so it includes\n * a `server.url` subpath (`admin.path` does not). No trailing slash, except\n * for the root.\n */\nconst getBrowserPath = (key: 'admin.absoluteUrl' | 'server.absoluteUrl'): string | undefined => {\n const absoluteUrl: unknown = strapi.config.get(key);\n if (typeof absoluteUrl !== 'string' || absoluteUrl === '') {\n return undefined;\n }\n\n try {\n return new URL(absoluteUrl).pathname.replace(/\\/+$/, '') || '/';\n } catch {\n return undefined;\n }\n};\n\n/**\n * Path the browser uses for the admin API (`/admin/access-token`,\n * `/admin/login`, `/admin/logout`): `/admin` behind any `server.url` subpath.\n */\nconst getAdminApiPath = (): string => {\n const serverPath = getBrowserPath('server.absoluteUrl');\n const apiPath =\n serverPath && serverPath !== '/' ? `${serverPath}${ADMIN_API_PREFIX}` : ADMIN_API_PREFIX;\n return resolveAuthCookiePath(apiPath, warnViaStrapiLog);\n};\n\n// RFC 6265 section 5.1.4: whether the browser attaches a cookie scoped to\n// `cookiePath` to a request for `requestPath`.\nconst cookiePathMatches = (cookiePath: string, requestPath: string): boolean => {\n if (requestPath === cookiePath) {\n return true;\n }\n\n return (\n requestPath.startsWith(cookiePath) &&\n (cookiePath.endsWith('/') || requestPath.charAt(cookiePath.length) === '/')\n );\n};\n\n/**\n * Path of the non-httpOnly access cookie. Only the admin panel reads it,\n * through `document.cookie`, which exposes a cookie only on pages its path\n * matches. So when `admin.auth.cookie.path` is unset it follows the path the\n * browser loads the panel from (`admin.url`, behind any `server.url` subpath).\n * The admin build resolves the same value (create-build-context.ts).\n */\nexport const getAccessCookiePath = (): string => {\n return resolveAuthCookiePath(\n getConfiguredCookiePath() ?? getBrowserPath('admin.absoluteUrl'),\n warnViaStrapiLog\n );\n};\n\nconst warnedRefreshCookiePaths = new Set<string>();\n\n/**\n * Path of the httpOnly refresh cookie (and every other cookie built from\n * `getRefreshCookieOptions`). Only the admin API reads it, and the API does not\n * move with `admin.url`, so it follows the API path instead of the panel.\n * `admin.auth.cookie.path` is kept when it covers the API path. Otherwise the\n * browser would never send the cookie to `/admin/access-token` and every\n * session would end when its access token expires, so the API path is used.\n */\nexport const getRefreshCookiePath = (): string => {\n const apiPath = getAdminApiPath();\n const configured = getConfiguredCookiePath();\n\n if (!configured) {\n return apiPath;\n }\n\n const configuredPath = resolveAuthCookiePath(configured, warnViaStrapiLog);\n if (cookiePathMatches(configuredPath, apiPath)) {\n return configuredPath;\n }\n\n if (!warnedRefreshCookiePaths.has(configuredPath)) {\n warnedRefreshCookiePaths.add(configuredPath);\n strapi.log.warn(\n `admin.auth.cookie.path \"${configuredPath}\" does not cover the admin API at \"${apiPath}\", so the browser would not send the refresh cookie to \"${apiPath}/access-token\". Using \"${apiPath}\" for the refresh cookie. The access cookie keeps \"${configuredPath}\".`\n );\n }\n\n return apiPath;\n};\n\nexport const getAccessCookieDomain = (): string | undefined => {\n const configured: string | undefined =\n strapi.config.get('admin.auth.cookie.domain') || strapi.config.get('admin.auth.domain');\n return resolveAuthCookieDomain(configured, warnViaStrapiLog);\n};\n\nexport const DEFAULT_MAX_REFRESH_TOKEN_LIFESPAN = 30 * 24 * 60 * 60;\nexport const DEFAULT_IDLE_REFRESH_TOKEN_LIFESPAN = 14 * 24 * 60 * 60;\nexport const DEFAULT_MAX_SESSION_LIFESPAN = 1 * 24 * 60 * 60;\nexport const DEFAULT_IDLE_SESSION_LIFESPAN = 2 * 60 * 60;\n\nexport const getRefreshCookieOptions = (secureRequest?: boolean) => {\n const configuredSecure = strapi.config.get('admin.auth.cookie.secure');\n const isProduction = process.env.NODE_ENV === 'production';\n\n const domain = getAccessCookieDomain();\n const path = getRefreshCookiePath();\n\n const sameSite: boolean | 'lax' | 'strict' | 'none' =\n strapi.config.get('admin.auth.cookie.sameSite') ?? 'lax';\n\n let isSecure: boolean;\n if (typeof configuredSecure === 'boolean') {\n isSecure = configuredSecure;\n } else if (secureRequest !== undefined) {\n isSecure = isProduction && secureRequest;\n } else {\n isSecure = isProduction;\n }\n\n return {\n httpOnly: true,\n secure: isSecure,\n overwrite: true,\n domain,\n path,\n sameSite,\n maxAge: undefined,\n };\n};\n\nconst getLifespansForType = (\n type: 'refresh' | 'session'\n): { idleSeconds: number; maxSeconds: number } => {\n if (type === 'refresh') {\n const idleSeconds = Number(\n strapi.config.get(\n 'admin.auth.sessions.idleRefreshTokenLifespan',\n DEFAULT_IDLE_REFRESH_TOKEN_LIFESPAN\n )\n );\n const maxSeconds = Number(\n strapi.config.get(\n 'admin.auth.sessions.maxRefreshTokenLifespan',\n DEFAULT_MAX_REFRESH_TOKEN_LIFESPAN\n )\n );\n\n return { idleSeconds, maxSeconds };\n }\n\n const idleSeconds = Number(\n strapi.config.get('admin.auth.sessions.idleSessionLifespan', DEFAULT_IDLE_SESSION_LIFESPAN)\n );\n const maxSeconds = Number(\n strapi.config.get('admin.auth.sessions.maxSessionLifespan', DEFAULT_MAX_SESSION_LIFESPAN)\n );\n\n return { idleSeconds, maxSeconds };\n};\n\nexport const buildCookieOptionsWithExpiry = (\n type: 'refresh' | 'session',\n absoluteExpiresAtISO?: string,\n secureRequest?: boolean\n) => {\n const base = getRefreshCookieOptions(secureRequest);\n if (type === 'session') {\n return base;\n }\n\n const { idleSeconds } = getLifespansForType('refresh');\n const now = Date.now();\n const idleExpiry = now + idleSeconds * 1000;\n const absoluteExpiry = absoluteExpiresAtISO\n ? new Date(absoluteExpiresAtISO).getTime()\n : idleExpiry;\n const chosen = new Date(Math.min(idleExpiry, absoluteExpiry));\n\n return { ...base, expires: chosen, maxAge: Math.max(0, chosen.getTime() - now) };\n};\n\nexport const getSessionManager = (): Modules.SessionManager.SessionManagerService | null => {\n const manager = strapi.sessionManager as Modules.SessionManager.SessionManagerService | undefined;\n return manager ?? null;\n};\n\nexport const generateDeviceId = (): string => crypto.randomUUID();\n\nexport const extractDeviceParams = (\n requestBody: unknown\n): { deviceId: string; rememberMe: boolean } => {\n const body = (requestBody ?? {}) as { deviceId?: string; rememberMe?: boolean };\n const deviceId = body.deviceId || generateDeviceId();\n const rememberMe = Boolean(body.rememberMe);\n\n return { deviceId, rememberMe };\n};\n\nexport const buildSessionMetadataFromContext = (ctx: Context) =>\n buildSessionMetadata({\n userAgent: ctx.request.headers['user-agent'],\n });\n\n/**\n * Resolves the device id to use when revoking sessions on logout.\n * SSO assigns deviceId server-side, so the client-provided value may not match\n * the active session row. Prefer the deviceId stored on the session backing\n * the current access token when available.\n *\n * Callers should pass `ctx.state.session.id` from the admin auth strategy and\n * the already-parsed body `deviceId` — the logout route requires authentication,\n * so sessionId is expected to be present.\n */\nexport const resolveLogoutDeviceId = async (\n userId: string,\n sessionId: string | undefined,\n clientDeviceId: string | undefined\n): Promise<string | undefined> => {\n if (!sessionId) {\n strapi.log.debug('resolveLogoutDeviceId: no sessionId; falling back to client deviceId');\n return clientDeviceId;\n }\n\n const session = await strapi.db.query(SESSION_CONTENT_TYPE).findOne({\n where: { sessionId },\n });\n\n if (session?.userId !== userId || session?.origin !== ADMIN_ORIGIN) {\n strapi.log.debug(\n 'resolveLogoutDeviceId: access-token session missing or not owned; falling back to client deviceId'\n );\n return clientDeviceId;\n }\n\n return typeof session.deviceId === 'string' ? session.deviceId : clientDeviceId;\n};\n"],"names":["ADMIN_ORIGIN","SESSION_CONTENT_TYPE","REFRESH_COOKIE_NAME","warnViaStrapiLog","message","strapi","log","warn","getAccessCookieName","configured","config","get","resolveAuthCookieName","ADMIN_API_PREFIX","getConfiguredCookiePath","trim","undefined","getBrowserPath","key","absoluteUrl","URL","pathname","replace","getAdminApiPath","serverPath","apiPath","resolveAuthCookiePath","cookiePathMatches","cookiePath","requestPath","startsWith","endsWith","charAt","length","getAccessCookiePath","warnedRefreshCookiePaths","Set","getRefreshCookiePath","configuredPath","has","add","getAccessCookieDomain","resolveAuthCookieDomain","DEFAULT_MAX_REFRESH_TOKEN_LIFESPAN","DEFAULT_IDLE_REFRESH_TOKEN_LIFESPAN","DEFAULT_MAX_SESSION_LIFESPAN","DEFAULT_IDLE_SESSION_LIFESPAN","getRefreshCookieOptions","secureRequest","configuredSecure","isProduction","process","env","NODE_ENV","domain","path","sameSite","isSecure","httpOnly","secure","overwrite","maxAge","getLifespansForType","type","idleSeconds","Number","maxSeconds","buildCookieOptionsWithExpiry","absoluteExpiresAtISO","base","now","Date","idleExpiry","absoluteExpiry","getTime","chosen","Math","min","expires","max","getSessionManager","manager","sessionManager","generateDeviceId","crypto","randomUUID","extractDeviceParams","requestBody","body","deviceId","rememberMe","Boolean","buildSessionMetadataFromContext","ctx","buildSessionMetadata","userAgent","request","headers","resolveLogoutDeviceId","userId","sessionId","clientDeviceId","debug","session","db","query","findOne","where","origin"],"mappings":"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"}
|
|
@@ -17,9 +17,75 @@ const getAccessCookieName = ()=>{
|
|
|
17
17
|
const configured = strapi.config.get('admin.auth.cookie.name');
|
|
18
18
|
return resolveAuthCookieName(configured, warnViaStrapiLog);
|
|
19
19
|
};
|
|
20
|
-
|
|
20
|
+
// The admin API routes are mounted under `/admin` whatever `admin.url` is.
|
|
21
|
+
const ADMIN_API_PREFIX = '/admin';
|
|
22
|
+
const getConfiguredCookiePath = ()=>{
|
|
21
23
|
const configured = strapi.config.get('admin.auth.cookie.path');
|
|
22
|
-
return
|
|
24
|
+
return typeof configured === 'string' && configured.trim() !== '' ? configured : undefined;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Path the browser sees for one of the resolved absolute URLs, so it includes
|
|
28
|
+
* a `server.url` subpath (`admin.path` does not). No trailing slash, except
|
|
29
|
+
* for the root.
|
|
30
|
+
*/ const getBrowserPath = (key)=>{
|
|
31
|
+
const absoluteUrl = strapi.config.get(key);
|
|
32
|
+
if (typeof absoluteUrl !== 'string' || absoluteUrl === '') {
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
return new URL(absoluteUrl).pathname.replace(/\/+$/, '') || '/';
|
|
37
|
+
} catch {
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Path the browser uses for the admin API (`/admin/access-token`,
|
|
43
|
+
* `/admin/login`, `/admin/logout`): `/admin` behind any `server.url` subpath.
|
|
44
|
+
*/ const getAdminApiPath = ()=>{
|
|
45
|
+
const serverPath = getBrowserPath('server.absoluteUrl');
|
|
46
|
+
const apiPath = serverPath && serverPath !== '/' ? `${serverPath}${ADMIN_API_PREFIX}` : ADMIN_API_PREFIX;
|
|
47
|
+
return resolveAuthCookiePath(apiPath, warnViaStrapiLog);
|
|
48
|
+
};
|
|
49
|
+
// RFC 6265 section 5.1.4: whether the browser attaches a cookie scoped to
|
|
50
|
+
// `cookiePath` to a request for `requestPath`.
|
|
51
|
+
const cookiePathMatches = (cookiePath, requestPath)=>{
|
|
52
|
+
if (requestPath === cookiePath) {
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
return requestPath.startsWith(cookiePath) && (cookiePath.endsWith('/') || requestPath.charAt(cookiePath.length) === '/');
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Path of the non-httpOnly access cookie. Only the admin panel reads it,
|
|
59
|
+
* through `document.cookie`, which exposes a cookie only on pages its path
|
|
60
|
+
* matches. So when `admin.auth.cookie.path` is unset it follows the path the
|
|
61
|
+
* browser loads the panel from (`admin.url`, behind any `server.url` subpath).
|
|
62
|
+
* The admin build resolves the same value (create-build-context.ts).
|
|
63
|
+
*/ const getAccessCookiePath = ()=>{
|
|
64
|
+
return resolveAuthCookiePath(getConfiguredCookiePath() ?? getBrowserPath('admin.absoluteUrl'), warnViaStrapiLog);
|
|
65
|
+
};
|
|
66
|
+
const warnedRefreshCookiePaths = new Set();
|
|
67
|
+
/**
|
|
68
|
+
* Path of the httpOnly refresh cookie (and every other cookie built from
|
|
69
|
+
* `getRefreshCookieOptions`). Only the admin API reads it, and the API does not
|
|
70
|
+
* move with `admin.url`, so it follows the API path instead of the panel.
|
|
71
|
+
* `admin.auth.cookie.path` is kept when it covers the API path. Otherwise the
|
|
72
|
+
* browser would never send the cookie to `/admin/access-token` and every
|
|
73
|
+
* session would end when its access token expires, so the API path is used.
|
|
74
|
+
*/ const getRefreshCookiePath = ()=>{
|
|
75
|
+
const apiPath = getAdminApiPath();
|
|
76
|
+
const configured = getConfiguredCookiePath();
|
|
77
|
+
if (!configured) {
|
|
78
|
+
return apiPath;
|
|
79
|
+
}
|
|
80
|
+
const configuredPath = resolveAuthCookiePath(configured, warnViaStrapiLog);
|
|
81
|
+
if (cookiePathMatches(configuredPath, apiPath)) {
|
|
82
|
+
return configuredPath;
|
|
83
|
+
}
|
|
84
|
+
if (!warnedRefreshCookiePaths.has(configuredPath)) {
|
|
85
|
+
warnedRefreshCookiePaths.add(configuredPath);
|
|
86
|
+
strapi.log.warn(`admin.auth.cookie.path "${configuredPath}" does not cover the admin API at "${apiPath}", so the browser would not send the refresh cookie to "${apiPath}/access-token". Using "${apiPath}" for the refresh cookie. The access cookie keeps "${configuredPath}".`);
|
|
87
|
+
}
|
|
88
|
+
return apiPath;
|
|
23
89
|
};
|
|
24
90
|
const getAccessCookieDomain = ()=>{
|
|
25
91
|
const configured = strapi.config.get('admin.auth.cookie.domain') || strapi.config.get('admin.auth.domain');
|
|
@@ -33,7 +99,7 @@ const getRefreshCookieOptions = (secureRequest)=>{
|
|
|
33
99
|
const configuredSecure = strapi.config.get('admin.auth.cookie.secure');
|
|
34
100
|
const isProduction = process.env.NODE_ENV === 'production';
|
|
35
101
|
const domain = getAccessCookieDomain();
|
|
36
|
-
const path =
|
|
102
|
+
const path = getRefreshCookiePath();
|
|
37
103
|
const sameSite = strapi.config.get('admin.auth.cookie.sameSite') ?? 'lax';
|
|
38
104
|
let isSecure;
|
|
39
105
|
if (typeof configuredSecure === 'boolean') {
|
|
@@ -122,5 +188,5 @@ const buildSessionMetadataFromContext = (ctx)=>buildSessionMetadata({
|
|
|
122
188
|
return typeof session.deviceId === 'string' ? session.deviceId : clientDeviceId;
|
|
123
189
|
};
|
|
124
190
|
|
|
125
|
-
export { DEFAULT_IDLE_REFRESH_TOKEN_LIFESPAN, DEFAULT_IDLE_SESSION_LIFESPAN, DEFAULT_MAX_REFRESH_TOKEN_LIFESPAN, DEFAULT_MAX_SESSION_LIFESPAN, REFRESH_COOKIE_NAME, buildCookieOptionsWithExpiry, buildSessionMetadataFromContext, extractDeviceParams, generateDeviceId, getAccessCookieDomain, getAccessCookieName, getAccessCookiePath, getRefreshCookieOptions, getSessionManager, resolveLogoutDeviceId };
|
|
191
|
+
export { DEFAULT_IDLE_REFRESH_TOKEN_LIFESPAN, DEFAULT_IDLE_SESSION_LIFESPAN, DEFAULT_MAX_REFRESH_TOKEN_LIFESPAN, DEFAULT_MAX_SESSION_LIFESPAN, REFRESH_COOKIE_NAME, buildCookieOptionsWithExpiry, buildSessionMetadataFromContext, extractDeviceParams, generateDeviceId, getAccessCookieDomain, getAccessCookieName, getAccessCookiePath, getRefreshCookieOptions, getRefreshCookiePath, getSessionManager, resolveLogoutDeviceId };
|
|
126
192
|
//# sourceMappingURL=session-auth.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-auth.mjs","sources":["../../../../shared/utils/session-auth.ts"],"sourcesContent":["import crypto from 'crypto';\nimport type { Context } from 'koa';\nimport type { Modules } from '@strapi/types';\nimport { buildSessionMetadata } from '@strapi/utils';\n\nimport { resolveAuthCookieName } from './auth-cookie-name';\nimport { resolveAuthCookiePath } from './auth-cookie-path';\nimport { resolveAuthCookieDomain } from './auth-cookie-domain';\n\nconst ADMIN_ORIGIN = 'admin';\nconst SESSION_CONTENT_TYPE = 'admin::session';\n\nexport const REFRESH_COOKIE_NAME = 'strapi_admin_refresh';\n\n// The resolvers are browser-shared (also inlined into the admin bundle) so\n// they default to console.warn; on the server, route their warnings through\n// the Strapi logger instead.\nconst warnViaStrapiLog = (message: string): void => {\n strapi.log.warn(message);\n};\n\nexport const getAccessCookieName = (): string => {\n const configured: string | undefined = strapi.config.get('admin.auth.cookie.name');\n return resolveAuthCookieName(configured, warnViaStrapiLog);\n};\n\nexport const getAccessCookiePath = (): string => {\n const configured: string | undefined = strapi.config.get('admin.auth.cookie.path');\n return resolveAuthCookiePath(configured, warnViaStrapiLog);\n};\n\nexport const getAccessCookieDomain = (): string | undefined => {\n const configured: string | undefined =\n strapi.config.get('admin.auth.cookie.domain') || strapi.config.get('admin.auth.domain');\n return resolveAuthCookieDomain(configured, warnViaStrapiLog);\n};\n\nexport const DEFAULT_MAX_REFRESH_TOKEN_LIFESPAN = 30 * 24 * 60 * 60;\nexport const DEFAULT_IDLE_REFRESH_TOKEN_LIFESPAN = 14 * 24 * 60 * 60;\nexport const DEFAULT_MAX_SESSION_LIFESPAN = 1 * 24 * 60 * 60;\nexport const DEFAULT_IDLE_SESSION_LIFESPAN = 2 * 60 * 60;\n\nexport const getRefreshCookieOptions = (secureRequest?: boolean) => {\n const configuredSecure = strapi.config.get('admin.auth.cookie.secure');\n const isProduction = process.env.NODE_ENV === 'production';\n\n const domain = getAccessCookieDomain();\n const path = getAccessCookiePath();\n\n const sameSite: boolean | 'lax' | 'strict' | 'none' =\n strapi.config.get('admin.auth.cookie.sameSite') ?? 'lax';\n\n let isSecure: boolean;\n if (typeof configuredSecure === 'boolean') {\n isSecure = configuredSecure;\n } else if (secureRequest !== undefined) {\n isSecure = isProduction && secureRequest;\n } else {\n isSecure = isProduction;\n }\n\n return {\n httpOnly: true,\n secure: isSecure,\n overwrite: true,\n domain,\n path,\n sameSite,\n maxAge: undefined,\n };\n};\n\nconst getLifespansForType = (\n type: 'refresh' | 'session'\n): { idleSeconds: number; maxSeconds: number } => {\n if (type === 'refresh') {\n const idleSeconds = Number(\n strapi.config.get(\n 'admin.auth.sessions.idleRefreshTokenLifespan',\n DEFAULT_IDLE_REFRESH_TOKEN_LIFESPAN\n )\n );\n const maxSeconds = Number(\n strapi.config.get(\n 'admin.auth.sessions.maxRefreshTokenLifespan',\n DEFAULT_MAX_REFRESH_TOKEN_LIFESPAN\n )\n );\n\n return { idleSeconds, maxSeconds };\n }\n\n const idleSeconds = Number(\n strapi.config.get('admin.auth.sessions.idleSessionLifespan', DEFAULT_IDLE_SESSION_LIFESPAN)\n );\n const maxSeconds = Number(\n strapi.config.get('admin.auth.sessions.maxSessionLifespan', DEFAULT_MAX_SESSION_LIFESPAN)\n );\n\n return { idleSeconds, maxSeconds };\n};\n\nexport const buildCookieOptionsWithExpiry = (\n type: 'refresh' | 'session',\n absoluteExpiresAtISO?: string,\n secureRequest?: boolean\n) => {\n const base = getRefreshCookieOptions(secureRequest);\n if (type === 'session') {\n return base;\n }\n\n const { idleSeconds } = getLifespansForType('refresh');\n const now = Date.now();\n const idleExpiry = now + idleSeconds * 1000;\n const absoluteExpiry = absoluteExpiresAtISO\n ? new Date(absoluteExpiresAtISO).getTime()\n : idleExpiry;\n const chosen = new Date(Math.min(idleExpiry, absoluteExpiry));\n\n return { ...base, expires: chosen, maxAge: Math.max(0, chosen.getTime() - now) };\n};\n\nexport const getSessionManager = (): Modules.SessionManager.SessionManagerService | null => {\n const manager = strapi.sessionManager as Modules.SessionManager.SessionManagerService | undefined;\n return manager ?? null;\n};\n\nexport const generateDeviceId = (): string => crypto.randomUUID();\n\nexport const extractDeviceParams = (\n requestBody: unknown\n): { deviceId: string; rememberMe: boolean } => {\n const body = (requestBody ?? {}) as { deviceId?: string; rememberMe?: boolean };\n const deviceId = body.deviceId || generateDeviceId();\n const rememberMe = Boolean(body.rememberMe);\n\n return { deviceId, rememberMe };\n};\n\nexport const buildSessionMetadataFromContext = (ctx: Context) =>\n buildSessionMetadata({\n userAgent: ctx.request.headers['user-agent'],\n });\n\n/**\n * Resolves the device id to use when revoking sessions on logout.\n * SSO assigns deviceId server-side, so the client-provided value may not match\n * the active session row. Prefer the deviceId stored on the session backing\n * the current access token when available.\n *\n * Callers should pass `ctx.state.session.id` from the admin auth strategy and\n * the already-parsed body `deviceId` — the logout route requires authentication,\n * so sessionId is expected to be present.\n */\nexport const resolveLogoutDeviceId = async (\n userId: string,\n sessionId: string | undefined,\n clientDeviceId: string | undefined\n): Promise<string | undefined> => {\n if (!sessionId) {\n strapi.log.debug('resolveLogoutDeviceId: no sessionId; falling back to client deviceId');\n return clientDeviceId;\n }\n\n const session = await strapi.db.query(SESSION_CONTENT_TYPE).findOne({\n where: { sessionId },\n });\n\n if (session?.userId !== userId || session?.origin !== ADMIN_ORIGIN) {\n strapi.log.debug(\n 'resolveLogoutDeviceId: access-token session missing or not owned; falling back to client deviceId'\n );\n return clientDeviceId;\n }\n\n return typeof session.deviceId === 'string' ? session.deviceId : clientDeviceId;\n};\n"],"names":["ADMIN_ORIGIN","SESSION_CONTENT_TYPE","REFRESH_COOKIE_NAME","warnViaStrapiLog","message","strapi","log","warn","getAccessCookieName","configured","config","get","resolveAuthCookieName","getAccessCookiePath","resolveAuthCookiePath","getAccessCookieDomain","resolveAuthCookieDomain","DEFAULT_MAX_REFRESH_TOKEN_LIFESPAN","DEFAULT_IDLE_REFRESH_TOKEN_LIFESPAN","DEFAULT_MAX_SESSION_LIFESPAN","DEFAULT_IDLE_SESSION_LIFESPAN","getRefreshCookieOptions","secureRequest","configuredSecure","isProduction","process","env","NODE_ENV","domain","path","sameSite","isSecure","undefined","httpOnly","secure","overwrite","maxAge","getLifespansForType","type","idleSeconds","Number","maxSeconds","buildCookieOptionsWithExpiry","absoluteExpiresAtISO","base","now","Date","idleExpiry","absoluteExpiry","getTime","chosen","Math","min","expires","max","getSessionManager","manager","sessionManager","generateDeviceId","crypto","randomUUID","extractDeviceParams","requestBody","body","deviceId","rememberMe","Boolean","buildSessionMetadataFromContext","ctx","buildSessionMetadata","userAgent","request","headers","resolveLogoutDeviceId","userId","sessionId","clientDeviceId","debug","session","db","query","findOne","where","origin"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"session-auth.mjs","sources":["../../../../shared/utils/session-auth.ts"],"sourcesContent":["import crypto from 'crypto';\nimport type { Context } from 'koa';\nimport type { Modules } from '@strapi/types';\nimport { buildSessionMetadata } from '@strapi/utils';\n\nimport { resolveAuthCookieName } from './auth-cookie-name';\nimport { resolveAuthCookiePath } from './auth-cookie-path';\nimport { resolveAuthCookieDomain } from './auth-cookie-domain';\n\nconst ADMIN_ORIGIN = 'admin';\nconst SESSION_CONTENT_TYPE = 'admin::session';\n\nexport const REFRESH_COOKIE_NAME = 'strapi_admin_refresh';\n\n// The resolvers are browser-shared (also inlined into the admin bundle) so\n// they default to console.warn; on the server, route their warnings through\n// the Strapi logger instead.\nconst warnViaStrapiLog = (message: string): void => {\n strapi.log.warn(message);\n};\n\nexport const getAccessCookieName = (): string => {\n const configured: string | undefined = strapi.config.get('admin.auth.cookie.name');\n return resolveAuthCookieName(configured, warnViaStrapiLog);\n};\n\n// The admin API routes are mounted under `/admin` whatever `admin.url` is.\nconst ADMIN_API_PREFIX = '/admin';\n\nconst getConfiguredCookiePath = (): string | undefined => {\n const configured: unknown = strapi.config.get('admin.auth.cookie.path');\n return typeof configured === 'string' && configured.trim() !== '' ? configured : undefined;\n};\n\n/**\n * Path the browser sees for one of the resolved absolute URLs, so it includes\n * a `server.url` subpath (`admin.path` does not). No trailing slash, except\n * for the root.\n */\nconst getBrowserPath = (key: 'admin.absoluteUrl' | 'server.absoluteUrl'): string | undefined => {\n const absoluteUrl: unknown = strapi.config.get(key);\n if (typeof absoluteUrl !== 'string' || absoluteUrl === '') {\n return undefined;\n }\n\n try {\n return new URL(absoluteUrl).pathname.replace(/\\/+$/, '') || '/';\n } catch {\n return undefined;\n }\n};\n\n/**\n * Path the browser uses for the admin API (`/admin/access-token`,\n * `/admin/login`, `/admin/logout`): `/admin` behind any `server.url` subpath.\n */\nconst getAdminApiPath = (): string => {\n const serverPath = getBrowserPath('server.absoluteUrl');\n const apiPath =\n serverPath && serverPath !== '/' ? `${serverPath}${ADMIN_API_PREFIX}` : ADMIN_API_PREFIX;\n return resolveAuthCookiePath(apiPath, warnViaStrapiLog);\n};\n\n// RFC 6265 section 5.1.4: whether the browser attaches a cookie scoped to\n// `cookiePath` to a request for `requestPath`.\nconst cookiePathMatches = (cookiePath: string, requestPath: string): boolean => {\n if (requestPath === cookiePath) {\n return true;\n }\n\n return (\n requestPath.startsWith(cookiePath) &&\n (cookiePath.endsWith('/') || requestPath.charAt(cookiePath.length) === '/')\n );\n};\n\n/**\n * Path of the non-httpOnly access cookie. Only the admin panel reads it,\n * through `document.cookie`, which exposes a cookie only on pages its path\n * matches. So when `admin.auth.cookie.path` is unset it follows the path the\n * browser loads the panel from (`admin.url`, behind any `server.url` subpath).\n * The admin build resolves the same value (create-build-context.ts).\n */\nexport const getAccessCookiePath = (): string => {\n return resolveAuthCookiePath(\n getConfiguredCookiePath() ?? getBrowserPath('admin.absoluteUrl'),\n warnViaStrapiLog\n );\n};\n\nconst warnedRefreshCookiePaths = new Set<string>();\n\n/**\n * Path of the httpOnly refresh cookie (and every other cookie built from\n * `getRefreshCookieOptions`). Only the admin API reads it, and the API does not\n * move with `admin.url`, so it follows the API path instead of the panel.\n * `admin.auth.cookie.path` is kept when it covers the API path. Otherwise the\n * browser would never send the cookie to `/admin/access-token` and every\n * session would end when its access token expires, so the API path is used.\n */\nexport const getRefreshCookiePath = (): string => {\n const apiPath = getAdminApiPath();\n const configured = getConfiguredCookiePath();\n\n if (!configured) {\n return apiPath;\n }\n\n const configuredPath = resolveAuthCookiePath(configured, warnViaStrapiLog);\n if (cookiePathMatches(configuredPath, apiPath)) {\n return configuredPath;\n }\n\n if (!warnedRefreshCookiePaths.has(configuredPath)) {\n warnedRefreshCookiePaths.add(configuredPath);\n strapi.log.warn(\n `admin.auth.cookie.path \"${configuredPath}\" does not cover the admin API at \"${apiPath}\", so the browser would not send the refresh cookie to \"${apiPath}/access-token\". Using \"${apiPath}\" for the refresh cookie. The access cookie keeps \"${configuredPath}\".`\n );\n }\n\n return apiPath;\n};\n\nexport const getAccessCookieDomain = (): string | undefined => {\n const configured: string | undefined =\n strapi.config.get('admin.auth.cookie.domain') || strapi.config.get('admin.auth.domain');\n return resolveAuthCookieDomain(configured, warnViaStrapiLog);\n};\n\nexport const DEFAULT_MAX_REFRESH_TOKEN_LIFESPAN = 30 * 24 * 60 * 60;\nexport const DEFAULT_IDLE_REFRESH_TOKEN_LIFESPAN = 14 * 24 * 60 * 60;\nexport const DEFAULT_MAX_SESSION_LIFESPAN = 1 * 24 * 60 * 60;\nexport const DEFAULT_IDLE_SESSION_LIFESPAN = 2 * 60 * 60;\n\nexport const getRefreshCookieOptions = (secureRequest?: boolean) => {\n const configuredSecure = strapi.config.get('admin.auth.cookie.secure');\n const isProduction = process.env.NODE_ENV === 'production';\n\n const domain = getAccessCookieDomain();\n const path = getRefreshCookiePath();\n\n const sameSite: boolean | 'lax' | 'strict' | 'none' =\n strapi.config.get('admin.auth.cookie.sameSite') ?? 'lax';\n\n let isSecure: boolean;\n if (typeof configuredSecure === 'boolean') {\n isSecure = configuredSecure;\n } else if (secureRequest !== undefined) {\n isSecure = isProduction && secureRequest;\n } else {\n isSecure = isProduction;\n }\n\n return {\n httpOnly: true,\n secure: isSecure,\n overwrite: true,\n domain,\n path,\n sameSite,\n maxAge: undefined,\n };\n};\n\nconst getLifespansForType = (\n type: 'refresh' | 'session'\n): { idleSeconds: number; maxSeconds: number } => {\n if (type === 'refresh') {\n const idleSeconds = Number(\n strapi.config.get(\n 'admin.auth.sessions.idleRefreshTokenLifespan',\n DEFAULT_IDLE_REFRESH_TOKEN_LIFESPAN\n )\n );\n const maxSeconds = Number(\n strapi.config.get(\n 'admin.auth.sessions.maxRefreshTokenLifespan',\n DEFAULT_MAX_REFRESH_TOKEN_LIFESPAN\n )\n );\n\n return { idleSeconds, maxSeconds };\n }\n\n const idleSeconds = Number(\n strapi.config.get('admin.auth.sessions.idleSessionLifespan', DEFAULT_IDLE_SESSION_LIFESPAN)\n );\n const maxSeconds = Number(\n strapi.config.get('admin.auth.sessions.maxSessionLifespan', DEFAULT_MAX_SESSION_LIFESPAN)\n );\n\n return { idleSeconds, maxSeconds };\n};\n\nexport const buildCookieOptionsWithExpiry = (\n type: 'refresh' | 'session',\n absoluteExpiresAtISO?: string,\n secureRequest?: boolean\n) => {\n const base = getRefreshCookieOptions(secureRequest);\n if (type === 'session') {\n return base;\n }\n\n const { idleSeconds } = getLifespansForType('refresh');\n const now = Date.now();\n const idleExpiry = now + idleSeconds * 1000;\n const absoluteExpiry = absoluteExpiresAtISO\n ? new Date(absoluteExpiresAtISO).getTime()\n : idleExpiry;\n const chosen = new Date(Math.min(idleExpiry, absoluteExpiry));\n\n return { ...base, expires: chosen, maxAge: Math.max(0, chosen.getTime() - now) };\n};\n\nexport const getSessionManager = (): Modules.SessionManager.SessionManagerService | null => {\n const manager = strapi.sessionManager as Modules.SessionManager.SessionManagerService | undefined;\n return manager ?? null;\n};\n\nexport const generateDeviceId = (): string => crypto.randomUUID();\n\nexport const extractDeviceParams = (\n requestBody: unknown\n): { deviceId: string; rememberMe: boolean } => {\n const body = (requestBody ?? {}) as { deviceId?: string; rememberMe?: boolean };\n const deviceId = body.deviceId || generateDeviceId();\n const rememberMe = Boolean(body.rememberMe);\n\n return { deviceId, rememberMe };\n};\n\nexport const buildSessionMetadataFromContext = (ctx: Context) =>\n buildSessionMetadata({\n userAgent: ctx.request.headers['user-agent'],\n });\n\n/**\n * Resolves the device id to use when revoking sessions on logout.\n * SSO assigns deviceId server-side, so the client-provided value may not match\n * the active session row. Prefer the deviceId stored on the session backing\n * the current access token when available.\n *\n * Callers should pass `ctx.state.session.id` from the admin auth strategy and\n * the already-parsed body `deviceId` — the logout route requires authentication,\n * so sessionId is expected to be present.\n */\nexport const resolveLogoutDeviceId = async (\n userId: string,\n sessionId: string | undefined,\n clientDeviceId: string | undefined\n): Promise<string | undefined> => {\n if (!sessionId) {\n strapi.log.debug('resolveLogoutDeviceId: no sessionId; falling back to client deviceId');\n return clientDeviceId;\n }\n\n const session = await strapi.db.query(SESSION_CONTENT_TYPE).findOne({\n where: { sessionId },\n });\n\n if (session?.userId !== userId || session?.origin !== ADMIN_ORIGIN) {\n strapi.log.debug(\n 'resolveLogoutDeviceId: access-token session missing or not owned; falling back to client deviceId'\n );\n return clientDeviceId;\n }\n\n return typeof session.deviceId === 'string' ? session.deviceId : clientDeviceId;\n};\n"],"names":["ADMIN_ORIGIN","SESSION_CONTENT_TYPE","REFRESH_COOKIE_NAME","warnViaStrapiLog","message","strapi","log","warn","getAccessCookieName","configured","config","get","resolveAuthCookieName","ADMIN_API_PREFIX","getConfiguredCookiePath","trim","undefined","getBrowserPath","key","absoluteUrl","URL","pathname","replace","getAdminApiPath","serverPath","apiPath","resolveAuthCookiePath","cookiePathMatches","cookiePath","requestPath","startsWith","endsWith","charAt","length","getAccessCookiePath","warnedRefreshCookiePaths","Set","getRefreshCookiePath","configuredPath","has","add","getAccessCookieDomain","resolveAuthCookieDomain","DEFAULT_MAX_REFRESH_TOKEN_LIFESPAN","DEFAULT_IDLE_REFRESH_TOKEN_LIFESPAN","DEFAULT_MAX_SESSION_LIFESPAN","DEFAULT_IDLE_SESSION_LIFESPAN","getRefreshCookieOptions","secureRequest","configuredSecure","isProduction","process","env","NODE_ENV","domain","path","sameSite","isSecure","httpOnly","secure","overwrite","maxAge","getLifespansForType","type","idleSeconds","Number","maxSeconds","buildCookieOptionsWithExpiry","absoluteExpiresAtISO","base","now","Date","idleExpiry","absoluteExpiry","getTime","chosen","Math","min","expires","max","getSessionManager","manager","sessionManager","generateDeviceId","crypto","randomUUID","extractDeviceParams","requestBody","body","deviceId","rememberMe","Boolean","buildSessionMetadataFromContext","ctx","buildSessionMetadata","userAgent","request","headers","resolveLogoutDeviceId","userId","sessionId","clientDeviceId","debug","session","db","query","findOne","where","origin"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../../../../server/src/ai/services/ai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAS1C,QAAA,MAAM,oBAAoB,GAAI,YAAY;IAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;CAAE;uBAkBvC,OAAO;oCAGM,OAAO;mCAKR,OAAO;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../../../../server/src/ai/services/ai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAS1C,QAAA,MAAM,oBAAoB,GAAI,YAAY;IAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;CAAE;uBAkBvC,OAAO;oCAGM,OAAO;mCAKR,OAAO;;;;;;;;;;;4BAgQjB,MAAM;yBACT,MAAM;gCACC,MAAM;kCACJ,OAAO;0BACf,OAAO;8BACH,MAAM;kCACF,MAAM;8BACV,MAAM;4BACR,MAAM;;0BAVE,MAAM;;CA4CzC,CAAC;AAEF,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { Data, Modules } from '@strapi/types';
|
|
2
|
+
import { emitAudit } from '@strapi/utils';
|
|
3
|
+
import { type AdminUserSnapshot } from './admin-users';
|
|
4
|
+
/**
|
|
5
|
+
* Event hub events bound to the `admin.auth.events` config callbacks
|
|
6
|
+
* (`onConnectionError`, `onSSOAutoRegistration`). Their names and payloads are public.
|
|
7
|
+
*/
|
|
8
|
+
export declare const AUTH_EVENTS: {
|
|
9
|
+
readonly LOGIN_FAILURE: "admin.auth.error";
|
|
10
|
+
readonly AUTO_REGISTRATION: "admin.auth.autoRegistration";
|
|
11
|
+
};
|
|
12
|
+
/** One fixed value per emit site. */
|
|
13
|
+
export type LoginFailureReason = 'login_not_allowed' | 'unexpected_error' | 'invalid_credentials' | 'account_inactive' | 'sso_connection_error' | 'sso_registration_disabled' | 'sso_role_misconfigured';
|
|
14
|
+
/**
|
|
15
|
+
* Payload of `admin.auth.error`, also passed to the `onConnectionError` callback.
|
|
16
|
+
* The audit log stores `provider`, `reason` and the account, never `error`.
|
|
17
|
+
*/
|
|
18
|
+
export interface LoginFailureEvent {
|
|
19
|
+
error: Error;
|
|
20
|
+
provider: string;
|
|
21
|
+
reason: LoginFailureReason;
|
|
22
|
+
/** The account the login was for, when known. */
|
|
23
|
+
user?: {
|
|
24
|
+
id: Data.ID;
|
|
25
|
+
email: string;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/** Payload of `admin.auth.autoRegistration`: the created `admin::user` row, roles populated. */
|
|
29
|
+
export interface AutoRegistrationEvent {
|
|
30
|
+
user: {
|
|
31
|
+
id: Data.ID;
|
|
32
|
+
email?: string | null;
|
|
33
|
+
roles?: AdminUserSnapshot['roles'];
|
|
34
|
+
};
|
|
35
|
+
provider: string;
|
|
36
|
+
}
|
|
37
|
+
export interface LoginFailureDetails {
|
|
38
|
+
provider: string;
|
|
39
|
+
reason: LoginFailureReason;
|
|
40
|
+
}
|
|
41
|
+
export interface AutoRegistrationDetails {
|
|
42
|
+
provider: string;
|
|
43
|
+
roles: Data.ID[];
|
|
44
|
+
}
|
|
45
|
+
type AuditStrapi = Parameters<typeof emitAudit>[0]['strapi'];
|
|
46
|
+
/**
|
|
47
|
+
* Emits without waiting: listeners bound to the event, such as the `onConnectionError`
|
|
48
|
+
* config callback, run before the audit subscriber and must not hold the login.
|
|
49
|
+
*/
|
|
50
|
+
export declare const emitLoginFailure: ({ strapi }: {
|
|
51
|
+
strapi: AuditStrapi;
|
|
52
|
+
}, event: LoginFailureEvent) => void;
|
|
53
|
+
/**
|
|
54
|
+
* Whether the audit log records a failed login. Not recorded: failures anyone can produce
|
|
55
|
+
* from outside before any verification, a local login for an email with no account and an
|
|
56
|
+
* SSO connection with no valid profile.
|
|
57
|
+
*/
|
|
58
|
+
export declare const isRecordedLoginFailure: (event: LoginFailureEvent) => boolean;
|
|
59
|
+
/**
|
|
60
|
+
* The part of the audit-logs lifecycle service used here.
|
|
61
|
+
* The full service type lives in the Admin EE package.
|
|
62
|
+
*/
|
|
63
|
+
interface AuditLogsLifecycle {
|
|
64
|
+
registerEvent<TDetails>(name: string, transform: Modules.AuditLogs.EventTransformer<TDetails>, options?: {
|
|
65
|
+
allowUnknownActor?: boolean;
|
|
66
|
+
alwaysUnknownActor?: boolean;
|
|
67
|
+
shouldRecord?: (...args: any[]) => boolean;
|
|
68
|
+
}): void;
|
|
69
|
+
}
|
|
70
|
+
export declare const registerAuthAuditEvents: (auditLogsLifecycle: AuditLogsLifecycle) => void;
|
|
71
|
+
export {};
|
|
72
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../../server/src/audit-logs/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAqC,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAE1F;;;GAGG;AACH,eAAO,MAAM,WAAW;;;CAGd,CAAC;AAEX,qCAAqC;AACrC,MAAM,MAAM,kBAAkB,GAC1B,mBAAmB,GACnB,kBAAkB,GAClB,qBAAqB,GACrB,kBAAkB,GAClB,sBAAsB,GACtB,2BAA2B,GAC3B,wBAAwB,CAAC;AAE7B;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,iDAAiD;IACjD,IAAI,CAAC,EAAE;QAAE,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CACvC;AAED,gGAAgG;AAChG,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE;QAAE,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,KAAK,CAAC,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAA;KAAE,CAAC;IACjF,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,kBAAkB,CAAC;CAC5B;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;CAClB;AAED,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAE7D;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAC3B,YAAY;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,EACnC,OAAO,iBAAiB,KACvB,IASF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GAAI,OAAO,iBAAiB,YAC0B,CAAC;AAE1F;;;GAGG;AACH,UAAU,kBAAkB;IAC1B,aAAa,CAAC,QAAQ,EACpB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EACvD,OAAO,CAAC,EAAE;QACR,iBAAiB,CAAC,EAAE,OAAO,CAAC;QAC5B,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,YAAY,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC;KAC5C,GACA,IAAI,CAAC;CACT;AAQD,eAAO,MAAM,uBAAuB,GAAI,oBAAoB,kBAAkB,SAkB7E,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-actions.d.ts","sourceRoot":"","sources":["../../../../server/src/config/admin-actions.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"admin-actions.d.ts","sourceRoot":"","sources":["../../../../server/src/config/admin-actions.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;IAsRnB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEF,wBAEE"}
|
|
@@ -38,6 +38,9 @@ declare const _default: {
|
|
|
38
38
|
useYarn: boolean;
|
|
39
39
|
};
|
|
40
40
|
}>;
|
|
41
|
+
debugDump(): Promise<{
|
|
42
|
+
data: import("../../../shared/contracts/admin").DebugDumpPayload;
|
|
43
|
+
}>;
|
|
41
44
|
plugins(ctx: Context): Promise<void>;
|
|
42
45
|
licenseTrialTimeLeft(): Promise<{
|
|
43
46
|
trialEndsAt: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/admin.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAcnC,OAAO,KAAK,EAEV,kBAAkB,EAClB,cAAc,
|
|
1
|
+
{"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/admin.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAcnC,OAAO,KAAK,EAEV,kBAAkB,EAClB,cAAc,EAOf,MAAM,iCAAiC,CAAC;AA0BzC;;GAEG;;sBAQuB,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC;;;;;;;;;;+BAmCvB,OAAO;6BAmBT,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;iBA4EnB,OAAO;;;;2BAuBG,OAAO;;;;;;;AAhKtC,wBA0KE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authentication.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/authentication.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAQ,MAAM,KAAK,CAAC;AAGzC,OAAO,eAAe,CAAC;;;
|
|
1
|
+
{"version":3,"file":"authentication.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/authentication.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAQ,MAAM,KAAK,CAAC;AAGzC,OAAO,eAAe,CAAC;;;0BA4JO,OAAO;kBAcf,OAAO;uBAiDF,OAAO;wBAmDN,OAAO;uBAeR,OAAO;qBAsDT,OAAO;gBAyCZ,OAAO;;AAvT3B,wBAqVE"}
|
|
@@ -34,6 +34,9 @@ declare const _default: {
|
|
|
34
34
|
useYarn: boolean;
|
|
35
35
|
};
|
|
36
36
|
}>;
|
|
37
|
+
debugDump(): Promise<{
|
|
38
|
+
data: import("../../../shared/contracts/admin").DebugDumpPayload;
|
|
39
|
+
}>;
|
|
37
40
|
plugins(ctx: import("koa").Context): Promise<void>;
|
|
38
41
|
licenseTrialTimeLeft(): Promise<{
|
|
39
42
|
trialEndsAt: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiBA,wBAeE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../server/src/domain/permission/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAEzE,MAAM,MAAM,uBAAuB,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAC1D,UAAU,EACV,kBAAkB,GAAG,YAAY,GAAG,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,WAAW,GAAG,WAAW,CAChG,CAAC;AAIF,eAAO,MAAM,gBAAgB,UAS5B,CAAC;AACF,eAAO,MAAM,yBAAyB,sFAO5B,CAAC;AAEX,eAAO,MAAM,wBAAwB,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,mBACb,CAAC;AAY9C;;;;;GAKG;AACH,eAAO,MAAM,YAAY,mEAOvB,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,eAAe,mEAK1B,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../server/src/domain/permission/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAEzE,MAAM,MAAM,uBAAuB,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAC1D,UAAU,EACV,kBAAkB,GAAG,YAAY,GAAG,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,WAAW,GAAG,WAAW,CAChG,CAAC;AAIF,eAAO,MAAM,gBAAgB,UAS5B,CAAC;AACF,eAAO,MAAM,yBAAyB,sFAO5B,CAAC;AAEX,eAAO,MAAM,wBAAwB,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,mBACb,CAAC;AAY9C;;;;;GAKG;AACH,eAAO,MAAM,YAAY,mEAOvB,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,eAAe,mEAK1B,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,WAAW,mEAEvB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GACtB,UAAU,MAAM,EAChB,OAAO,OAAO,EACd,YAAY,UAAU,KACrB,UAEF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,SAAS,SAAS,MAAM,EACrD,UAAU,SAAS,EACnB,YAAY,UAAU,KACqC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;AAEzF;;;GAGG;AACH,eAAO,MAAM,MAAM,GAAI,YAAY,uBAAuB,KACwB,UACjF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,4HAa9B,CAAC;AAEF;;;GAGG;AAEH,iBAAS,YAAY,CAAC,CAAC,SAAS,uBAAuB,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,UAAU,EAAE,CAAC;AACrF,iBAAS,YAAY,CAAC,CAAC,SAAS,uBAAuB,EAAE,OAAO,EAAE,CAAC,GAAG,UAAU,CAAC;AAWjF,OAAO,EAAE,YAAY,EAAE,CAAC;;;;yBAzCW,uBAAuB,KACwB,UAAU;qBAV7D,SAAS,SAAS,MAAM,YAC3C,SAAS,cACP,UAAU,KACqC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC;;;;;kCAvE7C,UAAU,KAAK,mBAAmB;4BAwDjE,MAAM,SACT,OAAO,cACF,UAAU,KACrB,UAAU;;;AA6Db,wBAYE"}
|
|
@@ -213,6 +213,11 @@ declare let admin: {
|
|
|
213
213
|
getHomepageLayout: (userId: number) => Promise<import("./controllers/validation/schema").HomepageLayout | null>;
|
|
214
214
|
updateHomepageLayout: (userId: number, input: unknown) => Promise<import("./controllers/validation/schema").HomepageLayout>;
|
|
215
215
|
};
|
|
216
|
+
'debug-dump': ({ strapi }: {
|
|
217
|
+
strapi: import("@strapi/types/dist/core/strapi.js").Strapi;
|
|
218
|
+
}) => {
|
|
219
|
+
generate(): Promise<import("../../shared/contracts/admin").DebugDumpPayload>;
|
|
220
|
+
};
|
|
216
221
|
};
|
|
217
222
|
controllers: {
|
|
218
223
|
admin: {
|
|
@@ -250,6 +255,9 @@ declare let admin: {
|
|
|
250
255
|
useYarn: boolean;
|
|
251
256
|
};
|
|
252
257
|
}>;
|
|
258
|
+
debugDump(): Promise<{
|
|
259
|
+
data: import("../../shared/contracts/admin").DebugDumpPayload;
|
|
260
|
+
}>;
|
|
253
261
|
plugins(ctx: import("koa").Context): Promise<void>;
|
|
254
262
|
licenseTrialTimeLeft(): Promise<{
|
|
255
263
|
trialEndsAt: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../server/src/index.ts"],"names":[],"mappings":"AAeA,QAAA,IAAI,KAAK;;;;;;;;;;;;;;;;;;;;;;sBAPG,GAAG;;;;;sBAAH,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBA6B2tD,CAAC
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../server/src/index.ts"],"names":[],"mappings":"AAeA,QAAA,IAAI,KAAK;;;;;;;;;;;;;;;;;;;;;;sBAPG,GAAG;;;;;sBAAH,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBA6B2tD,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eA3BnuD,0BAAY,EAAC,wBAAW;gCANjB,0BAAW,EAAC,wBACtB;;CAqBJ,CAAC;AAUF,eAAe,KAAK,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../server/src/register.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../server/src/register.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;yBAU1B,YAAY;IAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;CAAE;AAAnD,wBAwBE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../../../server/src/routes/admin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../../../server/src/routes/admin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,wBA+FE"}
|
|
@@ -22,6 +22,12 @@ declare const completePasswordReset: (user: AdminUser, password: string) => Prom
|
|
|
22
22
|
* cannot be retried. Shared by the CE and EE auth services. (GH#25711)
|
|
23
23
|
*/
|
|
24
24
|
declare const assertResetPasswordTokenIsValid: (user: AdminUser) => Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Check login credentials
|
|
27
|
+
* @param email the users email address
|
|
28
|
+
* @param password the users password
|
|
29
|
+
*/
|
|
30
|
+
export declare const USER_NOT_ACTIVE_MESSAGE = "User not active";
|
|
25
31
|
declare const _default: {
|
|
26
32
|
checkCredentials: ({ email, password }: {
|
|
27
33
|
email: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../../server/src/services/auth.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,eAAe,CAAC;AAQvB;;;GAGG;AACH,QAAA,MAAM,wBAAwB,QAAO,MASpC,CAAC;AAEF;;;;GAIG;AACH,QAAA,MAAM,wBAAwB,GAAU,QAAQ,SAAS,CAAC,IAAI,CAAC,KAAG,OAAO,CAAC,MAAM,CAkB/E,CAAC;AAEF;;;GAGG;AACH,QAAA,MAAM,qBAAqB,GAAU,MAAM,SAAS,EAAE,UAAU,MAAM,KAAG,OAAO,CAAC,SAAS,CAUzF,CAAC;AAEF;;;;GAIG;AACH,QAAA,MAAM,+BAA+B,GAAU,MAAM,SAAS,KAAG,OAAO,CAAC,IAAI,CAa5E,CAAC;;
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../../server/src/services/auth.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,eAAe,CAAC;AAQvB;;;GAGG;AACH,QAAA,MAAM,wBAAwB,QAAO,MASpC,CAAC;AAEF;;;;GAIG;AACH,QAAA,MAAM,wBAAwB,GAAU,QAAQ,SAAS,CAAC,IAAI,CAAC,KAAG,OAAO,CAAC,MAAM,CAkB/E,CAAC;AAEF;;;GAGG;AACH,QAAA,MAAM,qBAAqB,GAAU,MAAM,SAAS,EAAE,UAAU,MAAM,KAAG,OAAO,CAAC,SAAS,CAUzF,CAAC;AAEF;;;;GAIG;AACH,QAAA,MAAM,+BAA+B,GAAU,MAAM,SAAS,KAAG,OAAO,CAAC,IAAI,CAa5E,CAAC;AAiBF;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,oBAAoB,CAAC;;4CAEJ;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;;;iCATpD,MAAM,QAAQ,MAAM;6BARxB,MAAM;;eAyCmB,MAAM;;;4BA0CE,MAAM;kBAAY,MAAM;;;AAezF,wBAAmG;AACnG,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,+BAA+B,EAC/B,qBAAqB,GACtB,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
declare const constants: {
|
|
2
2
|
CONTENT_TYPE_SECTION: string;
|
|
3
3
|
SUPER_ADMIN_CODE: string;
|
|
4
|
+
ROLE_TEXT_MAX_LENGTH: number;
|
|
4
5
|
EDITOR_CODE: string;
|
|
5
6
|
AUTHOR_CODE: string;
|
|
6
7
|
READ_ACTION: string;
|
|
@@ -8,6 +9,7 @@ declare const constants: {
|
|
|
8
9
|
UPDATE_ACTION: string;
|
|
9
10
|
DELETE_ACTION: string;
|
|
10
11
|
PUBLISH_ACTION: string;
|
|
12
|
+
TOKEN_TEXT_MAX_LENGTH: number;
|
|
11
13
|
API_TOKEN_TYPE: {
|
|
12
14
|
READ_ONLY: string;
|
|
13
15
|
FULL_ACCESS: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../server/src/services/constants.ts"],"names":[],"mappings":"AAIA,QAAA,MAAM,SAAS
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../server/src/services/constants.ts"],"names":[],"mappings":"AAIA,QAAA,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyDd,CAAC;AAEF,eAAe,SAAS,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Core } from '@strapi/types';
|
|
2
|
+
import type { DebugDumpPayload } from '../../../shared/contracts/admin';
|
|
3
|
+
declare const debugDumpService: ({ strapi }: {
|
|
4
|
+
strapi: Core.Strapi;
|
|
5
|
+
}) => {
|
|
6
|
+
generate(): Promise<DebugDumpPayload>;
|
|
7
|
+
};
|
|
8
|
+
export default debugDumpService;
|
|
9
|
+
//# sourceMappingURL=debug-dump.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug-dump.d.ts","sourceRoot":"","sources":["../../../../server/src/services/debug-dump.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAwBxE,QAAA,MAAM,gBAAgB,GAAI,YAAY;IAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;CAAE;gBACzC,OAAO,CAAC,gBAAgB,CAAC;CAkI3C,CAAC;AAEH,eAAe,gBAAgB,CAAC"}
|
|
@@ -135,6 +135,11 @@ declare const _default: {
|
|
|
135
135
|
getHomepageLayout: (userId: number) => Promise<import("../controllers/validation/schema").HomepageLayout | null>;
|
|
136
136
|
updateHomepageLayout: (userId: number, input: unknown) => Promise<import("../controllers/validation/schema").HomepageLayout>;
|
|
137
137
|
};
|
|
138
|
+
'debug-dump': ({ strapi }: {
|
|
139
|
+
strapi: import("@strapi/types/dist/core/strapi.js").Strapi;
|
|
140
|
+
}) => {
|
|
141
|
+
generate(): Promise<import("../../../shared/contracts/admin").DebugDumpPayload>;
|
|
142
|
+
};
|
|
138
143
|
};
|
|
139
144
|
export default _default;
|
|
140
145
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/services/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,WAAW,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AAEnC,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,eAAe,MAAM,oBAAoB,CAAC;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/services/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,WAAW,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AAEnC,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,eAAe,MAAM,oBAAoB,CAAC;;;;;;;;;;;;;;;;;;;;;oBA8B2rC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAVhvC,sDAAsD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAZxD,wBAqBE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rename-fields.d.ts","sourceRoot":"","sources":["../../../../../server/src/services/permission/rename-fields.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAU,MAAM,eAAe,CAAC;AAIlD,KAAK,sBAAsB,GAAG,UAAU,CACtC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,gCAAgC,CAAC,CAC9D,CAAC,CAAC,CAAC,CAAC;AAYL;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,4BAA4B,GAAI,aAE1C;IACD,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;CACrB,KAAG,
|
|
1
|
+
{"version":3,"file":"rename-fields.d.ts","sourceRoot":"","sources":["../../../../../server/src/services/permission/rename-fields.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAU,MAAM,eAAe,CAAC;AAIlD,KAAK,sBAAsB,GAAG,UAAU,CACtC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,gCAAgC,CAAC,CAC9D,CAAC,CAAC,CAAC,CAAC;AAYL;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,4BAA4B,GAAI,aAE1C;IACD,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;CACrB,KAAG,sBA0GH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../../../../../server/src/services/permission/sections-builder/handlers.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAIrD,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,GAAG,EAAE,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,MAAM,EAAE,CAAC;AAE1C;;;;;;GAMG;AACH,QAAA,MAAM,QAAQ,GAAI,qBAAqB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,kBAAkB,CAAA;CAAE,SAWrF,CAAC;AAEF;;;;;;GAMG;AACH,QAAA,MAAM,OAAO,GAAI,qBAAqB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,kBAAkB,CAAA;CAAE,SAUpF,CAAC;AAEF;;;;;;GAMG;AACH,QAAA,MAAM,gBAAgB,GAAI,sBAGvB;IACD,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,mBAAmB,CAAC;CAC9B,
|
|
1
|
+
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../../../../../server/src/services/permission/sections-builder/handlers.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAIrD,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,GAAG,EAAE,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,MAAM,EAAE,CAAC;AAE1C;;;;;;GAMG;AACH,QAAA,MAAM,QAAQ,GAAI,qBAAqB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,kBAAkB,CAAA;CAAE,SAWrF,CAAC;AAEF;;;;;;GAMG;AACH,QAAA,MAAM,OAAO,GAAI,qBAAqB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,kBAAkB,CAAA;CAAE,SAUpF,CAAC;AAEF;;;;;;GAMG;AACH,QAAA,MAAM,gBAAgB,GAAI,sBAGvB;IACD,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,mBAAmB,CAAC;CAC9B,SAqBA,CAAC;AAEF;;GAEG;AACH,QAAA,MAAM,kBAAkB,GACrB,MAAM,MAAM,MACZ,0CAA0C;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,mBAAmB,CAAA;CAAE,SA2B1F,CAAC;AA2BJ;;GAEG;AACH,QAAA,MAAM,cAAc,GAAI,qBAAqB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,mBAAmB,CAAA;CAAE,SAkB5F,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,cAAc,EAAE,CAAC"}
|