@strapi/admin 5.56.0 → 5.58.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/components/Filters.js +1 -1
- package/dist/admin/admin/src/components/Filters.js.map +1 -1
- package/dist/admin/admin/src/components/Filters.mjs +1 -1
- package/dist/admin/admin/src/components/Filters.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 -2
- package/dist/admin/admin/src/components/FormInputs/Enumeration.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs +2 -2
- package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs.map +1 -1
- package/dist/admin/admin/src/components/MediaLibraryBanner.js +38 -2
- package/dist/admin/admin/src/components/MediaLibraryBanner.js.map +1 -1
- package/dist/admin/admin/src/components/MediaLibraryBanner.mjs +18 -2
- package/dist/admin/admin/src/components/MediaLibraryBanner.mjs.map +1 -1
- package/dist/admin/admin/src/components/RelativeTime.js +9 -0
- package/dist/admin/admin/src/components/RelativeTime.js.map +1 -1
- package/dist/admin/admin/src/components/RelativeTime.mjs +10 -1
- package/dist/admin/admin/src/components/RelativeTime.mjs.map +1 -1
- package/dist/admin/admin/src/components/TopBanners.js +52 -0
- package/dist/admin/admin/src/components/TopBanners.js.map +1 -0
- package/dist/admin/admin/src/components/TopBanners.mjs +30 -0
- package/dist/admin/admin/src/components/TopBanners.mjs.map +1 -0
- 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/features/Tracking.js +28 -8
- package/dist/admin/admin/src/features/Tracking.js.map +1 -1
- package/dist/admin/admin/src/features/Tracking.mjs +29 -10
- package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.js +4 -20
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.js.map +1 -1
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs +4 -20
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs.map +1 -1
- package/dist/admin/admin/src/layouts/useAuthenticatedAccessTracking.js +59 -0
- package/dist/admin/admin/src/layouts/useAuthenticatedAccessTracking.js.map +1 -0
- package/dist/admin/admin/src/layouts/useAuthenticatedAccessTracking.mjs +37 -0
- package/dist/admin/admin/src/layouts/useAuthenticatedAccessTracking.mjs.map +1 -0
- 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/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/pages/ApplicationInfo/ApplicationInfoPage.js +6 -56
- 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 +6 -56
- 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/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/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/translations/en.json.js +76 -4
- package/dist/admin/admin/src/translations/en.json.js.map +1 -1
- package/dist/admin/admin/src/translations/en.json.mjs +76 -4
- package/dist/admin/admin/src/translations/en.json.mjs.map +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/getFetchClient.js +27 -3
- package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
- package/dist/admin/admin/src/utils/getFetchClient.mjs +26 -3
- package/dist/admin/admin/src/utils/getFetchClient.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 +8 -1
- 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 +8 -1
- 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/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/MediaLibraryBanner.d.ts +10 -1
- package/dist/admin/src/components/TopBanners.d.ts +8 -0
- package/dist/admin/src/constants.d.ts +10 -0
- package/dist/admin/src/features/Tracking.d.ts +12 -1
- package/dist/admin/src/layouts/useAuthenticatedAccessTracking.d.ts +6 -0
- 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/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 +7 -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/authentication-utils/utils.d.ts +8 -2
- package/dist/ee/server/src/controllers/authentication-utils/utils.d.ts.map +1 -1
- package/dist/ee/server/src/controllers/authentication.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/controllers/user.d.ts.map +1 -1
- package/dist/ee/server/src/index.d.ts +40 -11
- package/dist/ee/server/src/index.d.ts.map +1 -1
- package/dist/ee/server/src/services/index.d.ts +4 -1
- package/dist/ee/server/src/services/index.d.ts.map +1 -1
- package/dist/ee/server/src/services/metrics.d.ts.map +1 -1
- package/dist/ee/server/src/services/persist-tables.d.ts.map +1 -1
- package/dist/ee/server/src/services/seat-enforcement.d.ts +3 -1
- package/dist/ee/server/src/services/seat-enforcement.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/controllers/admin.js +79 -7
- package/dist/server/ee/server/src/controllers/admin.js.map +1 -1
- package/dist/server/ee/server/src/controllers/admin.mjs +79 -7
- 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/controllers/authentication-utils/utils.js +2 -2
- package/dist/server/ee/server/src/controllers/authentication-utils/utils.js.map +1 -1
- package/dist/server/ee/server/src/controllers/authentication-utils/utils.mjs +2 -2
- package/dist/server/ee/server/src/controllers/authentication-utils/utils.mjs.map +1 -1
- package/dist/server/ee/server/src/controllers/authentication.js +11 -11
- package/dist/server/ee/server/src/controllers/authentication.js.map +1 -1
- package/dist/server/ee/server/src/controllers/authentication.mjs +11 -11
- package/dist/server/ee/server/src/controllers/authentication.mjs.map +1 -1
- package/dist/server/ee/server/src/controllers/user.js +7 -8
- package/dist/server/ee/server/src/controllers/user.js.map +1 -1
- package/dist/server/ee/server/src/controllers/user.mjs +8 -9
- package/dist/server/ee/server/src/controllers/user.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/metrics.js +9 -7
- package/dist/server/ee/server/src/services/metrics.js.map +1 -1
- package/dist/server/ee/server/src/services/metrics.mjs +9 -7
- package/dist/server/ee/server/src/services/metrics.mjs.map +1 -1
- package/dist/server/ee/server/src/services/persist-tables.js +3 -4
- package/dist/server/ee/server/src/services/persist-tables.js.map +1 -1
- package/dist/server/ee/server/src/services/persist-tables.mjs +3 -4
- package/dist/server/ee/server/src/services/persist-tables.mjs.map +1 -1
- package/dist/server/ee/server/src/services/role.js +2 -2
- package/dist/server/ee/server/src/services/role.js.map +1 -1
- package/dist/server/ee/server/src/services/role.mjs +1 -1
- package/dist/server/ee/server/src/services/role.mjs.map +1 -1
- package/dist/server/ee/server/src/services/seat-enforcement.js +20 -20
- package/dist/server/ee/server/src/services/seat-enforcement.js.map +1 -1
- package/dist/server/ee/server/src/services/seat-enforcement.mjs +20 -20
- package/dist/server/ee/server/src/services/seat-enforcement.mjs.map +1 -1
- package/dist/server/ee/server/src/services/user.js +1 -2
- package/dist/server/ee/server/src/services/user.js.map +1 -1
- package/dist/server/ee/server/src/services/user.mjs +2 -3
- package/dist/server/ee/server/src/services/user.mjs.map +1 -1
- package/dist/server/ee/server/src/utils/sso-lock.js +2 -2
- package/dist/server/ee/server/src/utils/sso-lock.js.map +1 -1
- package/dist/server/ee/server/src/utils/sso-lock.mjs +1 -1
- package/dist/server/ee/server/src/utils/sso-lock.mjs.map +1 -1
- package/dist/server/server/src/audit-logs/admin-users.js +3 -3
- package/dist/server/server/src/audit-logs/admin-users.js.map +1 -1
- package/dist/server/server/src/audit-logs/admin-users.mjs +2 -2
- package/dist/server/server/src/audit-logs/admin-users.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/audit-logs/tokens.js +3 -3
- package/dist/server/server/src/audit-logs/tokens.js.map +1 -1
- package/dist/server/server/src/audit-logs/tokens.mjs +2 -2
- package/dist/server/server/src/audit-logs/tokens.mjs.map +1 -1
- package/dist/server/server/src/audit-logs/webhooks.js +2 -2
- package/dist/server/server/src/audit-logs/webhooks.js.map +1 -1
- package/dist/server/server/src/audit-logs/webhooks.mjs +1 -1
- package/dist/server/server/src/audit-logs/webhooks.mjs.map +1 -1
- package/dist/server/server/src/bootstrap.js +6 -4
- package/dist/server/server/src/bootstrap.js.map +1 -1
- package/dist/server/server/src/bootstrap.mjs +6 -4
- package/dist/server/server/src/bootstrap.mjs.map +1 -1
- 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-token.js +8 -8
- package/dist/server/server/src/controllers/admin-token.js.map +1 -1
- package/dist/server/server/src/controllers/admin-token.mjs +4 -4
- package/dist/server/server/src/controllers/admin-token.mjs.map +1 -1
- package/dist/server/server/src/controllers/admin.js +9 -5
- package/dist/server/server/src/controllers/admin.js.map +1 -1
- package/dist/server/server/src/controllers/admin.mjs +8 -4
- package/dist/server/server/src/controllers/admin.mjs.map +1 -1
- package/dist/server/server/src/controllers/api-token.js +8 -8
- package/dist/server/server/src/controllers/api-token.js.map +1 -1
- package/dist/server/server/src/controllers/api-token.mjs +4 -4
- package/dist/server/server/src/controllers/api-token.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/controllers/formatters/conditions.js +2 -2
- package/dist/server/server/src/controllers/formatters/conditions.js.map +1 -1
- package/dist/server/server/src/controllers/formatters/conditions.mjs +2 -2
- package/dist/server/server/src/controllers/formatters/conditions.mjs.map +1 -1
- package/dist/server/server/src/controllers/transfer/index.js +2 -2
- package/dist/server/server/src/controllers/transfer/index.js.map +1 -1
- package/dist/server/server/src/controllers/transfer/index.mjs +2 -2
- package/dist/server/server/src/controllers/transfer/index.mjs.map +1 -1
- package/dist/server/server/src/controllers/transfer/token.js +8 -8
- package/dist/server/server/src/controllers/transfer/token.js.map +1 -1
- package/dist/server/server/src/controllers/transfer/token.mjs +4 -4
- package/dist/server/server/src/controllers/transfer/token.mjs.map +1 -1
- package/dist/server/server/src/domain/action/index.js +18 -16
- package/dist/server/server/src/domain/action/index.js.map +1 -1
- package/dist/server/server/src/domain/action/index.mjs +16 -14
- package/dist/server/server/src/domain/action/index.mjs.map +1 -1
- package/dist/server/server/src/domain/action/provider.mjs +4 -4
- package/dist/server/server/src/domain/action/provider.mjs.map +1 -1
- package/dist/server/server/src/domain/condition/index.js +7 -4
- package/dist/server/server/src/domain/condition/index.js.map +1 -1
- package/dist/server/server/src/domain/condition/index.mjs +7 -4
- package/dist/server/server/src/domain/condition/index.mjs.map +1 -1
- package/dist/server/server/src/domain/permission/index.js +24 -15
- package/dist/server/server/src/domain/permission/index.js.map +1 -1
- package/dist/server/server/src/domain/permission/index.mjs +21 -12
- package/dist/server/server/src/domain/permission/index.mjs.map +1 -1
- package/dist/server/server/src/middlewares/rateLimit.js +5 -5
- package/dist/server/server/src/middlewares/rateLimit.js.map +1 -1
- package/dist/server/server/src/middlewares/rateLimit.mjs +4 -4
- package/dist/server/server/src/middlewares/rateLimit.mjs.map +1 -1
- package/dist/server/server/src/register.js +10 -0
- package/dist/server/server/src/register.js.map +1 -1
- package/dist/server/server/src/register.mjs +10 -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/action.js +1 -2
- package/dist/server/server/src/services/action.js.map +1 -1
- package/dist/server/server/src/services/action.mjs +1 -2
- package/dist/server/server/src/services/action.mjs.map +1 -1
- package/dist/server/server/src/services/api-token.js +61 -49
- package/dist/server/server/src/services/api-token.js.map +1 -1
- package/dist/server/server/src/services/api-token.mjs +53 -41
- 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/condition.js +2 -2
- package/dist/server/server/src/services/condition.js.map +1 -1
- package/dist/server/server/src/services/condition.mjs +1 -1
- package/dist/server/server/src/services/condition.mjs.map +1 -1
- package/dist/server/server/src/services/content-type.js +5 -4
- package/dist/server/server/src/services/content-type.js.map +1 -1
- package/dist/server/server/src/services/content-type.mjs +8 -7
- package/dist/server/server/src/services/content-type.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/homepage.js +2 -1
- package/dist/server/server/src/services/homepage.js.map +1 -1
- package/dist/server/server/src/services/homepage.mjs +2 -1
- package/dist/server/server/src/services/homepage.mjs.map +1 -1
- 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/passport/local-strategy.js +2 -2
- package/dist/server/server/src/services/passport/local-strategy.js.map +1 -1
- package/dist/server/server/src/services/passport/local-strategy.mjs +1 -1
- package/dist/server/server/src/services/passport/local-strategy.mjs.map +1 -1
- package/dist/server/server/src/services/passport.js +1 -2
- package/dist/server/server/src/services/passport.js.map +1 -1
- package/dist/server/server/src/services/passport.mjs +1 -2
- package/dist/server/server/src/services/passport.mjs.map +1 -1
- package/dist/server/server/src/services/permission/engine.js +4 -4
- package/dist/server/server/src/services/permission/engine.js.map +1 -1
- package/dist/server/server/src/services/permission/engine.mjs +2 -2
- package/dist/server/server/src/services/permission/engine.mjs.map +1 -1
- package/dist/server/server/src/services/permission/permissions-manager/index.js +2 -3
- package/dist/server/server/src/services/permission/permissions-manager/index.js.map +1 -1
- package/dist/server/server/src/services/permission/permissions-manager/index.mjs +1 -2
- package/dist/server/server/src/services/permission/permissions-manager/index.mjs.map +1 -1
- package/dist/server/server/src/services/permission/permissions-manager/permission-fields.js +6 -6
- package/dist/server/server/src/services/permission/permissions-manager/permission-fields.js.map +1 -1
- package/dist/server/server/src/services/permission/permissions-manager/permission-fields.mjs +4 -4
- package/dist/server/server/src/services/permission/permissions-manager/permission-fields.mjs.map +1 -1
- package/dist/server/server/src/services/permission/permissions-manager/sanitize.js +47 -41
- package/dist/server/server/src/services/permission/permissions-manager/sanitize.js.map +1 -1
- package/dist/server/server/src/services/permission/permissions-manager/sanitize.mjs +44 -38
- package/dist/server/server/src/services/permission/permissions-manager/sanitize.mjs.map +1 -1
- package/dist/server/server/src/services/permission/permissions-manager/validate.js +30 -26
- package/dist/server/server/src/services/permission/permissions-manager/validate.js.map +1 -1
- package/dist/server/server/src/services/permission/permissions-manager/validate.mjs +28 -24
- package/dist/server/server/src/services/permission/permissions-manager/validate.mjs.map +1 -1
- package/dist/server/server/src/services/permission/queries.js +9 -9
- package/dist/server/server/src/services/permission/queries.js.map +1 -1
- package/dist/server/server/src/services/permission/queries.mjs +9 -9
- package/dist/server/server/src/services/permission/queries.mjs.map +1 -1
- package/dist/server/server/src/services/permission/rename-fields.js +118 -0
- package/dist/server/server/src/services/permission/rename-fields.js.map +1 -0
- package/dist/server/server/src/services/permission/rename-fields.mjs +116 -0
- package/dist/server/server/src/services/permission/rename-fields.mjs.map +1 -0
- package/dist/server/server/src/services/permission/sections-builder/index.js +2 -2
- package/dist/server/server/src/services/permission/sections-builder/index.js.map +1 -1
- package/dist/server/server/src/services/permission/sections-builder/index.mjs +2 -2
- package/dist/server/server/src/services/permission/sections-builder/index.mjs.map +1 -1
- package/dist/server/server/src/services/permission/sections-builder/section.js +1 -2
- package/dist/server/server/src/services/permission/sections-builder/section.js.map +1 -1
- package/dist/server/server/src/services/permission/sections-builder/section.mjs +1 -2
- package/dist/server/server/src/services/permission/sections-builder/section.mjs.map +1 -1
- package/dist/server/server/src/services/permission/sections-builder/utils.js +6 -6
- package/dist/server/server/src/services/permission/sections-builder/utils.js.map +1 -1
- package/dist/server/server/src/services/permission/sections-builder/utils.mjs +4 -4
- package/dist/server/server/src/services/permission/sections-builder/utils.mjs.map +1 -1
- package/dist/server/server/src/services/role.js +20 -19
- package/dist/server/server/src/services/role.js.map +1 -1
- package/dist/server/server/src/services/role.mjs +20 -19
- package/dist/server/server/src/services/role.mjs.map +1 -1
- package/dist/server/server/src/services/transfer/token.js +20 -16
- package/dist/server/server/src/services/transfer/token.js.map +1 -1
- package/dist/server/server/src/services/transfer/token.mjs +14 -10
- package/dist/server/server/src/services/transfer/token.mjs.map +1 -1
- package/dist/server/server/src/services/user.js +2 -3
- package/dist/server/server/src/services/user.js.map +1 -1
- package/dist/server/server/src/services/user.mjs +3 -4
- package/dist/server/server/src/services/user.mjs.map +1 -1
- package/dist/server/server/src/strategies/api-token-utils.js +2 -3
- package/dist/server/server/src/strategies/api-token-utils.js.map +1 -1
- package/dist/server/server/src/strategies/api-token-utils.mjs +2 -3
- package/dist/server/server/src/strategies/api-token-utils.mjs.map +1 -1
- package/dist/server/server/src/strategies/content-api-token.js +3 -3
- package/dist/server/server/src/strategies/content-api-token.js.map +1 -1
- package/dist/server/server/src/strategies/content-api-token.mjs +1 -1
- package/dist/server/server/src/strategies/content-api-token.mjs.map +1 -1
- package/dist/server/server/src/strategies/data-transfer.js +4 -4
- package/dist/server/server/src/strategies/data-transfer.js.map +1 -1
- package/dist/server/server/src/strategies/data-transfer.mjs +3 -3
- package/dist/server/server/src/strategies/data-transfer.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/common-validators.js +9 -10
- package/dist/server/server/src/validation/common-validators.js.map +1 -1
- package/dist/server/server/src/validation/common-validators.mjs +13 -14
- package/dist/server/server/src/validation/common-validators.mjs.map +1 -1
- package/dist/server/server/src/validation/user.js +1 -2
- package/dist/server/server/src/validation/user.js.map +1 -1
- package/dist/server/server/src/validation/user.mjs +1 -2
- package/dist/server/server/src/validation/user.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/src/audit-logs/auth.d.ts +72 -0
- package/dist/server/src/audit-logs/auth.d.ts.map +1 -0
- package/dist/server/src/audit-logs/tokens.d.ts.map +1 -1
- package/dist/server/src/bootstrap.d.ts.map +1 -1
- package/dist/server/src/config/admin-actions.d.ts.map +1 -1
- package/dist/server/src/controllers/admin-token.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/api-token.d.ts.map +1 -1
- package/dist/server/src/controllers/authentication.d.ts.map +1 -1
- package/dist/server/src/controllers/formatters/conditions.d.ts +1 -1
- package/dist/server/src/controllers/formatters/conditions.d.ts.map +1 -1
- package/dist/server/src/controllers/homepage.d.ts +1 -1
- package/dist/server/src/controllers/index.d.ts +4 -1
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/controllers/transfer/index.d.ts.map +1 -1
- package/dist/server/src/controllers/transfer/token.d.ts.map +1 -1
- package/dist/server/src/domain/action/index.d.ts +1 -0
- package/dist/server/src/domain/action/index.d.ts.map +1 -1
- package/dist/server/src/domain/condition/index.d.ts +2 -2
- package/dist/server/src/domain/condition/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 +11 -3
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/middlewares/index.d.ts.map +1 -1
- package/dist/server/src/middlewares/rateLimit.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/action.d.ts.map +1 -1
- package/dist/server/src/services/api-token.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/condition.d.ts.map +1 -1
- package/dist/server/src/services/content-type.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/homepage.d.ts +1 -1
- package/dist/server/src/services/homepage.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +7 -2
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/passport/local-strategy.d.ts.map +1 -1
- package/dist/server/src/services/passport.d.ts.map +1 -1
- package/dist/server/src/services/permission/engine.d.ts.map +1 -1
- package/dist/server/src/services/permission/permissions-manager/permission-fields.d.ts.map +1 -1
- package/dist/server/src/services/permission/permissions-manager/sanitize.d.ts.map +1 -1
- package/dist/server/src/services/permission/permissions-manager/validate.d.ts.map +1 -1
- package/dist/server/src/services/permission/queries.d.ts.map +1 -1
- package/dist/server/src/services/permission/rename-fields.d.ts +21 -0
- package/dist/server/src/services/permission/rename-fields.d.ts.map +1 -0
- package/dist/server/src/services/permission/sections-builder/section.d.ts.map +1 -1
- package/dist/server/src/services/permission/sections-builder/utils.d.ts +1 -1
- package/dist/server/src/services/permission/sections-builder/utils.d.ts.map +1 -1
- package/dist/server/src/services/role.d.ts +1 -1
- package/dist/server/src/services/role.d.ts.map +1 -1
- package/dist/server/src/services/transfer/token.d.ts.map +1 -1
- package/dist/server/src/strategies/content-api-token.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/user.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/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/get-project-type.d.ts +37 -0
- package/dist/shared/utils/get-project-type.d.ts.map +1 -0
- package/package.json +10 -10
- 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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../../../../server/src/domain/action/index.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../../../server/src/domain/action/index.ts"],"sourcesContent":["import { pick, includes, merge, get, curry, flow, omit } from 'lodash';\nimport type { Utils } from '@strapi/types';\n\nexport interface ActionAlias {\n /**\n * The action ID to alias\n */\n actionId: string;\n\n /**\n * An optional array of subject to restrict the alias usage\n */\n subjects?: string[];\n}\n\nexport type Action = {\n /**\n * The unique identifier of the action\n */\n actionId: string;\n\n /**\n * The section linked to the action - These can be 'contentTypes' | 'plugins' | 'settings' | 'internal'\n */\n section: string;\n\n /**\n * The human readable name of an action\n */\n displayName: string;\n\n /**\n * The main category of an action\n */\n category: string;\n\n /**\n * The secondary category of an action (only for settings and plugins section)\n */\n subCategory?: string;\n\n /**\n * The plugin that provides the action\n */\n pluginName?: string;\n\n /**\n * A list of subjects on which the action can be applied\n */\n subjects?: string[];\n\n /**\n * The options of an action\n */\n options: {\n /**\n * The list of properties that can be associated with an action\n */\n applyToProperties: string[] | null;\n };\n\n /**\n * An optional array of @see {@link ActionAlias}.\n *\n * It represents the possible aliases for the current action.\n *\n * Aliases are unidirectional.\n *\n * Note: This is an internal property and probably shouldn't be used outside Strapi core features.\n * Its behavior might change at any time without notice.\n *\n * @internal\n */\n aliases?: ActionAlias[];\n};\n\n/**\n * Set of attributes used to create a new {@link Action} object\n * @typedef {Action, { uid: string }} CreateActionPayload\n */\nexport type CreateActionPayload = Utils.Intersect<\n [\n Utils.Object.PartialBy<\n // Action Id is computed from the uid value\n Omit<Action, 'actionId'>,\n // Options is filled with default values\n 'options'\n >,\n { uid: string },\n ]\n>;\n\n/**\n * Return the default attributes of a new {@link Action}\n * @return Partial<Action>\n */\nconst getDefaultActionAttributes = (): Partial<Action> => ({\n options: {\n applyToProperties: null,\n },\n});\n\n/**\n * Get the list of all the valid attributes of an {@link Action}\n */\nconst actionFields = [\n 'section',\n 'displayName',\n 'category',\n 'subCategory',\n 'pluginName',\n 'subjects',\n 'options',\n 'actionId',\n 'aliases',\n] as const;\n\n/**\n * Remove unwanted attributes from an {@link Action}\n */\nconst sanitizeActionAttributes = (action: Action | CreateActionPayload): Action =>\n pick(action, actionFields) as Action;\n\n/**\n * Create and return an identifier for an {@link CreateActionPayload}.\n * The format is based on the action's source ({@link CreateActionPayload.pluginName} or 'application') and {@link CreateActionPayload.uid}.\n * @param {CreateActionPayload} attributes\n * @return {string}\n */\n// TODO: TS - Use Common.UID\nconst computeActionId = (attributes: CreateActionPayload): string => {\n const { pluginName, uid } = attributes;\n\n if (!pluginName) {\n return `api::${uid}`;\n }\n\n if (pluginName === 'admin') {\n return `admin::${uid}`;\n }\n\n return `plugin::${pluginName}.${uid}`;\n};\n\n/**\n * Assign an actionId attribute to an {@link CreateActionPayload} object\n */\nconst assignActionId = (attrs: CreateActionPayload) => ({\n ...attrs,\n actionId: computeActionId(attrs),\n});\n\n/**\n * Transform an action by adding or removing the {@link Action.subCategory} attribute\n * @param {Action} action - The action to process\n * @return {Action}\n */\nconst assignOrOmitSubCategory = (action: Action): Action => {\n const shouldHaveSubCategory = ['settings', 'plugins'].includes(action.section);\n\n return shouldHaveSubCategory\n ? { ...action, subCategory: action.subCategory || 'general' }\n : omit(action, 'subCategory');\n};\n\n/**\n * Check if a property can be applied to an {@link Action}\n */\nconst appliesToProperty = curry((property: string, action: Action): boolean => {\n return includes(get(action, 'options.applyToProperties'), property);\n});\n\n/**\n * Check if an action applies to a subject\n */\nconst appliesToSubject = curry((subject: string, action: Action): boolean => {\n return Array.isArray(action.subjects) && action.subjects.includes(subject);\n});\n\n/**\n * Transform the given attributes into a domain representation of an Action\n */\nconst create: (payload: CreateActionPayload) => Action = flow(\n // Assign the action identifier before sanitization removes the uid.\n assignActionId,\n assignOrOmitSubCategory,\n sanitizeActionAttributes,\n (action) => merge({}, getDefaultActionAttributes(), action)\n);\n\nexport default {\n actionFields,\n appliesToProperty,\n appliesToSubject,\n assignActionId,\n assignOrOmitSubCategory,\n create,\n computeActionId,\n getDefaultActionAttributes,\n sanitizeActionAttributes,\n};\n"],"names":["getDefaultActionAttributes","options","applyToProperties","actionFields","sanitizeActionAttributes","action","pick","computeActionId","attributes","pluginName","uid","assignActionId","attrs","actionId","assignOrOmitSubCategory","shouldHaveSubCategory","includes","section","subCategory","omit","appliesToProperty","curry","property","get","appliesToSubject","subject","Array","isArray","subjects","create","flow","merge"],"mappings":";;AA4FA;;;IAIA,MAAMA,0BAAAA,GAA6B,KAAwB;QACzDC,OAAAA,EAAS;YACPC,iBAAAA,EAAmB;AACrB;KACF,CAAA;AAEA;;AAEC,IACD,MAAMC,YAAAA,GAAe;AACnB,IAAA,SAAA;AACA,IAAA,aAAA;AACA,IAAA,UAAA;AACA,IAAA,aAAA;AACA,IAAA,YAAA;AACA,IAAA,UAAA;AACA,IAAA,SAAA;AACA,IAAA,UAAA;AACA,IAAA;AACD,CAAA;AAED;;AAEC,IACD,MAAMC,wBAAAA,GAA2B,CAACC,MAAAA,GAChCC,KAAKD,MAAAA,EAAQF,YAAAA,CAAAA;AAEf;;;;;AAKC;AAED,MAAMI,kBAAkB,CAACC,UAAAA,GAAAA;AACvB,IAAA,MAAM,EAAEC,UAAU,EAAEC,GAAG,EAAE,GAAGF,UAAAA;AAE5B,IAAA,IAAI,CAACC,UAAAA,EAAY;QACf,OAAO,CAAC,KAAK,EAAEC,GAAAA,CAAAA,CAAK;AACtB,IAAA;AAEA,IAAA,IAAID,eAAe,OAAA,EAAS;QAC1B,OAAO,CAAC,OAAO,EAAEC,GAAAA,CAAAA,CAAK;AACxB,IAAA;AAEA,IAAA,OAAO,CAAC,QAAQ,EAAED,UAAAA,CAAW,CAAC,EAAEC,GAAAA,CAAAA,CAAK;AACvC,CAAA;AAEA;;AAEC,IACD,MAAMC,cAAAA,GAAiB,CAACC,KAAAA,IAAgC;AACtD,QAAA,GAAGA,KAAK;AACRC,QAAAA,QAAAA,EAAUN,eAAAA,CAAgBK,KAAAA;KAC5B,CAAA;AAEA;;;;IAKA,MAAME,0BAA0B,CAACT,MAAAA,GAAAA;AAC/B,IAAA,MAAMU,qBAAAA,GAAwB;AAAC,QAAA,UAAA;AAAY,QAAA;KAAU,CAACC,QAAQ,CAACX,MAAAA,CAAOY,OAAO,CAAA;AAE7E,IAAA,OAAOF,qBAAAA,GACH;AAAE,QAAA,GAAGV,MAAM;QAAEa,WAAAA,EAAab,MAAAA,CAAOa,WAAW,IAAI;AAAU,KAAA,GAC1DC,KAAKd,MAAAA,EAAQ,aAAA,CAAA;AACnB,CAAA;AAEA;;AAEC,IACD,MAAMe,iBAAAA,GAAoBC,KAAAA,CAAM,CAACC,QAAAA,EAAkBjB,MAAAA,GAAAA;IACjD,OAAOW,QAAAA,CAASO,GAAAA,CAAIlB,MAAAA,EAAQ,2BAAA,CAAA,EAA8BiB,QAAAA,CAAAA;AAC5D,CAAA,CAAA;AAEA;;AAEC,IACD,MAAME,gBAAAA,GAAmBH,KAAAA,CAAM,CAACI,OAAAA,EAAiBpB,MAAAA,GAAAA;IAC/C,OAAOqB,KAAAA,CAAMC,OAAO,CAACtB,MAAAA,CAAOuB,QAAQ,KAAKvB,MAAAA,CAAOuB,QAAQ,CAACZ,QAAQ,CAACS,OAAAA,CAAAA;AACpE,CAAA,CAAA;AAEA;;IAGA,MAAMI,MAAAA,GAAmDC,IAAAA;AAEvDnB,cAAAA,EACAG,yBACAV,wBAAAA,EACA,CAACC,SAAW0B,KAAAA,CAAM,IAAI/B,0BAAAA,EAAAA,EAA8BK,MAAAA,CAAAA,CAAAA;AAGtD,aAAe;AACbF,IAAAA,YAAAA;AACAiB,IAAAA,iBAAAA;AACAI,IAAAA,gBAAAA;AACAb,IAAAA,cAAAA;AACAG,IAAAA,uBAAAA;AACAe,IAAAA,MAAAA;AACAtB,IAAAA,eAAAA;AACAP,IAAAA,0BAAAA;AACAI,IAAAA;AACF,CAAA;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { errors, providerFactory, hooks } from '@strapi/utils';
|
|
2
2
|
import { validateRegisterProviderAction } from '../../validation/action-provider.mjs';
|
|
3
|
-
import
|
|
3
|
+
import domain from './index.mjs';
|
|
4
4
|
|
|
5
5
|
const { ApplicationError } = errors;
|
|
6
6
|
/**
|
|
@@ -23,7 +23,7 @@ const { ApplicationError } = errors;
|
|
|
23
23
|
validateRegisterProviderAction([
|
|
24
24
|
actionAttributes
|
|
25
25
|
]);
|
|
26
|
-
const action =
|
|
26
|
+
const action = domain.create(actionAttributes);
|
|
27
27
|
return provider.register(action.actionId, action);
|
|
28
28
|
},
|
|
29
29
|
async registerMany (actionsAttributes) {
|
|
@@ -38,7 +38,7 @@ const { ApplicationError } = errors;
|
|
|
38
38
|
if (!action) {
|
|
39
39
|
throw new ApplicationError(`No action found with id "${actionId}"`);
|
|
40
40
|
}
|
|
41
|
-
const appliesToAction =
|
|
41
|
+
const appliesToAction = domain.appliesToProperty(property, action);
|
|
42
42
|
// If the property isn't valid for this action, ignore the rest of the checks
|
|
43
43
|
if (!appliesToAction) {
|
|
44
44
|
return false;
|
|
@@ -48,7 +48,7 @@ const { ApplicationError } = errors;
|
|
|
48
48
|
return true;
|
|
49
49
|
}
|
|
50
50
|
// If the property is valid for this action and the subject is not handled by the action
|
|
51
|
-
if (!
|
|
51
|
+
if (!domain.appliesToSubject(subject, action)) {
|
|
52
52
|
return false;
|
|
53
53
|
}
|
|
54
54
|
const results = await actionHooks.appliesPropertyToSubject.call({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.mjs","sources":["../../../../../../server/src/domain/action/provider.ts"],"sourcesContent":["import { providerFactory, hooks, errors } from '@strapi/utils';\nimport { validateRegisterProviderAction } from '../../validation/action-provider';\n\nimport domain from './index';\nimport type { Action, CreateActionPayload } from './index';\nimport type { Permission } from '../../../../shared/contracts/shared';\n\ntype Options = Parameters<typeof providerFactory>['0'];\n\nconst { ApplicationError } = errors;\n\n/**\n * Creates a new instance of an action provider\n */\nconst createActionProvider = (options?: Options) => {\n const provider = providerFactory<Action>(options);\n const actionHooks = {\n appliesPropertyToSubject: hooks.createAsyncParallelHook(),\n };\n\n return {\n ...provider,\n\n hooks: {\n ...provider.hooks,\n ...actionHooks,\n },\n\n async register(actionAttributes: CreateActionPayload) {\n if (strapi.isLoaded) {\n throw new Error(`You can't register new actions outside of the bootstrap function.`);\n }\n\n validateRegisterProviderAction([actionAttributes]);\n\n const action = domain.create(actionAttributes);\n\n return provider.register(action.actionId, action);\n },\n\n async registerMany(actionsAttributes: CreateActionPayload[]) {\n validateRegisterProviderAction(actionsAttributes);\n\n for (const attributes of actionsAttributes) {\n await this.register(attributes);\n }\n\n return this;\n },\n\n async appliesToProperty(property: string, actionId: string, subject: Permission['subject']) {\n const action = provider.get(actionId) as Action | undefined;\n if (!action) {\n throw new ApplicationError(`No action found with id \"${actionId}\"`);\n }\n\n const appliesToAction = domain.appliesToProperty(property, action);\n\n // If the property isn't valid for this action, ignore the rest of the checks\n if (!appliesToAction) {\n return false;\n }\n\n // If the property is valid for this action and there isn't any subject\n if (!subject) {\n return true;\n }\n\n // If the property is valid for this action and the subject is not handled by the action\n if (!domain.appliesToSubject(subject, action)) {\n return false;\n }\n\n const results = await actionHooks.appliesPropertyToSubject.call({\n property,\n action,\n subject,\n });\n\n return results.every((result) => result !== false);\n },\n\n /**\n * @experimental\n */\n unstable_aliases(actionId: string, subject?: string | null): string[] {\n const isRegistered = this.has(actionId);\n\n if (!isRegistered) {\n return [];\n }\n\n return this.values()\n .filter((action) =>\n action.aliases?.some((alias) => {\n // Only look at alias with the correct actionId\n if (alias.actionId !== actionId) {\n return false;\n }\n\n // If the alias don't have a list of required subjects, keep it\n if (!Array.isArray(alias.subjects)) {\n return true;\n }\n\n // If the alias require specific subjects but none is provided, skip it\n if (!subject) {\n return false;\n }\n\n // Else, make sure the given subject is allowed\n return alias.subjects.includes(subject);\n })\n )\n .map((action) => action.actionId);\n },\n };\n};\n\nexport default createActionProvider;\n"],"names":["ApplicationError","errors","createActionProvider","options","provider","providerFactory","actionHooks","appliesPropertyToSubject","hooks","createAsyncParallelHook","register","actionAttributes","strapi","isLoaded","Error","validateRegisterProviderAction","action","domain","create","actionId","registerMany","actionsAttributes","attributes","appliesToProperty","property","subject","get","appliesToAction","appliesToSubject","results","call","every","result","unstable_aliases","isRegistered","has","values","filter","aliases","some","alias","Array","isArray","subjects","includes","map"],"mappings":";;;;AASA,MAAM,EAAEA,gBAAgB,EAAE,GAAGC,MAAAA;AAE7B;;IAGA,MAAMC,uBAAuB,CAACC,OAAAA,GAAAA;AAC5B,IAAA,MAAMC,WAAWC,eAAAA,CAAwBF,OAAAA,CAAAA;AACzC,IAAA,MAAMG,WAAAA,GAAc;AAClBC,QAAAA,wBAAAA,EAA0BC,MAAMC,uBAAuB;AACzD,KAAA;IAEA,OAAO;AACL,QAAA,GAAGL,QAAQ;QAEXI,KAAAA,EAAO;AACL,YAAA,GAAGJ,SAASI,KAAK;AACjB,YAAA,GAAGF;AACL,SAAA;AAEA,QAAA,MAAMI,UAASC,gBAAqC,EAAA;YAClD,IAAIC,MAAAA,CAAOC,QAAQ,EAAE;AACnB,gBAAA,MAAM,IAAIC,KAAAA,CAAM,CAAC,iEAAiE,CAAC,CAAA;AACrF,YAAA;YAEAC,8BAAAA,CAA+B;AAACJ,gBAAAA;AAAiB,aAAA,CAAA;YAEjD,MAAMK,MAAAA,GAASC,
|
|
1
|
+
{"version":3,"file":"provider.mjs","sources":["../../../../../../server/src/domain/action/provider.ts"],"sourcesContent":["import { providerFactory, hooks, errors } from '@strapi/utils';\nimport { validateRegisterProviderAction } from '../../validation/action-provider';\n\nimport domain from './index';\nimport type { Action, CreateActionPayload } from './index';\nimport type { Permission } from '../../../../shared/contracts/shared';\n\ntype Options = Parameters<typeof providerFactory>['0'];\n\nconst { ApplicationError } = errors;\n\n/**\n * Creates a new instance of an action provider\n */\nconst createActionProvider = (options?: Options) => {\n const provider = providerFactory<Action>(options);\n const actionHooks = {\n appliesPropertyToSubject: hooks.createAsyncParallelHook(),\n };\n\n return {\n ...provider,\n\n hooks: {\n ...provider.hooks,\n ...actionHooks,\n },\n\n async register(actionAttributes: CreateActionPayload) {\n if (strapi.isLoaded) {\n throw new Error(`You can't register new actions outside of the bootstrap function.`);\n }\n\n validateRegisterProviderAction([actionAttributes]);\n\n const action = domain.create(actionAttributes);\n\n return provider.register(action.actionId, action);\n },\n\n async registerMany(actionsAttributes: CreateActionPayload[]) {\n validateRegisterProviderAction(actionsAttributes);\n\n for (const attributes of actionsAttributes) {\n await this.register(attributes);\n }\n\n return this;\n },\n\n async appliesToProperty(property: string, actionId: string, subject: Permission['subject']) {\n const action = provider.get(actionId) as Action | undefined;\n if (!action) {\n throw new ApplicationError(`No action found with id \"${actionId}\"`);\n }\n\n const appliesToAction = domain.appliesToProperty(property, action);\n\n // If the property isn't valid for this action, ignore the rest of the checks\n if (!appliesToAction) {\n return false;\n }\n\n // If the property is valid for this action and there isn't any subject\n if (!subject) {\n return true;\n }\n\n // If the property is valid for this action and the subject is not handled by the action\n if (!domain.appliesToSubject(subject, action)) {\n return false;\n }\n\n const results = await actionHooks.appliesPropertyToSubject.call({\n property,\n action,\n subject,\n });\n\n return results.every((result) => result !== false);\n },\n\n /**\n * @experimental\n */\n unstable_aliases(actionId: string, subject?: string | null): string[] {\n const isRegistered = this.has(actionId);\n\n if (!isRegistered) {\n return [];\n }\n\n return this.values()\n .filter((action) =>\n action.aliases?.some((alias) => {\n // Only look at alias with the correct actionId\n if (alias.actionId !== actionId) {\n return false;\n }\n\n // If the alias don't have a list of required subjects, keep it\n if (!Array.isArray(alias.subjects)) {\n return true;\n }\n\n // If the alias require specific subjects but none is provided, skip it\n if (!subject) {\n return false;\n }\n\n // Else, make sure the given subject is allowed\n return alias.subjects.includes(subject);\n })\n )\n .map((action) => action.actionId);\n },\n };\n};\n\nexport default createActionProvider;\n"],"names":["ApplicationError","errors","createActionProvider","options","provider","providerFactory","actionHooks","appliesPropertyToSubject","hooks","createAsyncParallelHook","register","actionAttributes","strapi","isLoaded","Error","validateRegisterProviderAction","action","domain","create","actionId","registerMany","actionsAttributes","attributes","appliesToProperty","property","subject","get","appliesToAction","appliesToSubject","results","call","every","result","unstable_aliases","isRegistered","has","values","filter","aliases","some","alias","Array","isArray","subjects","includes","map"],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var
|
|
5
|
+
var _ = require('lodash');
|
|
6
6
|
|
|
7
7
|
const DEFAULT_CATEGORY = 'default';
|
|
8
8
|
/**
|
|
@@ -23,7 +23,7 @@ const DEFAULT_CATEGORY = 'default';
|
|
|
23
23
|
];
|
|
24
24
|
/**
|
|
25
25
|
* Remove unwanted attributes from a {@link Condition}
|
|
26
|
-
*/ const sanitizeConditionAttributes =
|
|
26
|
+
*/ const sanitizeConditionAttributes = (condition)=>_.pick(condition, conditionFields);
|
|
27
27
|
const computeConditionId = (condition)=>{
|
|
28
28
|
const { name, plugin } = condition;
|
|
29
29
|
if (!plugin) {
|
|
@@ -38,13 +38,16 @@ const computeConditionId = (condition)=>{
|
|
|
38
38
|
* Assign an id attribute to a {@link CreateConditionPayload} object
|
|
39
39
|
* @param attrs - Payload used to create a condition
|
|
40
40
|
*/ const assignConditionId = (attrs)=>{
|
|
41
|
-
const condition =
|
|
41
|
+
const condition = {
|
|
42
|
+
...attrs,
|
|
43
|
+
id: computeConditionId(attrs)
|
|
44
|
+
};
|
|
42
45
|
return condition;
|
|
43
46
|
};
|
|
44
47
|
/**
|
|
45
48
|
* Transform the given attributes into a domain representation of a Condition
|
|
46
49
|
* @param payload - The condition payload containing the attributes needed to create a {@link Condition}
|
|
47
|
-
*/ const create =
|
|
50
|
+
*/ const create = _.flow(assignConditionId, sanitizeConditionAttributes, (condition)=>_.merge({}, getDefaultConditionAttributes(), condition));
|
|
48
51
|
var domain = {
|
|
49
52
|
assignConditionId,
|
|
50
53
|
computeConditionId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../../server/src/domain/condition/index.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../../server/src/domain/condition/index.ts"],"sourcesContent":["import { pick, merge, flow } from 'lodash';\n\nexport type Condition = {\n id: string;\n displayName: string;\n name: string;\n plugin?: string;\n category?: string;\n /**\n * The handler of a {@link Condition}\n */\n handler: (user: object, options: object) => object | boolean;\n};\n\n/**\n * Set of attributes used to create a new {@link Action} object\n */\nexport type CreateConditionPayload = Omit<Condition, 'id'>;\n\nconst DEFAULT_CATEGORY = 'default';\n\n/**\n * Get the default value used for every condition\n * @return {Condition}\n */\nexport const getDefaultConditionAttributes = () => ({\n category: DEFAULT_CATEGORY,\n});\n\n/**\n * Get the list of all the valid attributes of a {@link Condition}\n * @return {string[]}\n */\nexport const conditionFields = ['id', 'displayName', 'handler', 'plugin', 'category'] as const;\n\n/**\n * Remove unwanted attributes from a {@link Condition}\n */\nexport const sanitizeConditionAttributes = (condition: Partial<Condition>) =>\n pick(condition, conditionFields);\n\nexport const computeConditionId = (condition: CreateConditionPayload) => {\n const { name, plugin } = condition;\n\n if (!plugin) {\n return `api::${name}`;\n }\n\n if (plugin === 'admin') {\n return `admin::${name}`;\n }\n\n return `plugin::${plugin}.${name}`;\n};\n\n/**\n * Assign an id attribute to a {@link CreateConditionPayload} object\n * @param attrs - Payload used to create a condition\n */\nexport const assignConditionId = (attrs: CreateConditionPayload): Condition => {\n const condition = { ...attrs, id: computeConditionId(attrs) } as CreateConditionPayload & {\n id: string;\n };\n return condition;\n};\n\n/**\n * Transform the given attributes into a domain representation of a Condition\n * @param payload - The condition payload containing the attributes needed to create a {@link Condition}\n */\nexport const create = flow(assignConditionId, sanitizeConditionAttributes, (condition) =>\n merge({}, getDefaultConditionAttributes(), condition)\n) as (payload: CreateConditionPayload) => Condition;\n\nexport default {\n assignConditionId,\n computeConditionId,\n conditionFields,\n create,\n getDefaultConditionAttributes,\n sanitizeConditionAttributes,\n};\n"],"names":["DEFAULT_CATEGORY","getDefaultConditionAttributes","category","conditionFields","sanitizeConditionAttributes","condition","pick","computeConditionId","name","plugin","assignConditionId","attrs","id","create","flow","merge"],"mappings":";;;;;;AAmBA,MAAMA,gBAAAA,GAAmB,SAAA;AAEzB;;;AAGC,IACM,MAAMC,6BAAAA,GAAgC,KAAO;QAClDC,QAAAA,EAAUF;AACZ,KAAA;AAEA;;;UAIaG,eAAAA,GAAkB;AAAC,IAAA,IAAA;AAAM,IAAA,aAAA;AAAe,IAAA,SAAA;AAAW,IAAA,QAAA;AAAU,IAAA;;AAE1E;;AAEC,IACM,MAAMC,2BAAAA,GAA8B,CAACC,SAAAA,GAC1CC,MAAAA,CAAKD,WAAWF,eAAAA;AAEX,MAAMI,qBAAqB,CAACF,SAAAA,GAAAA;AACjC,IAAA,MAAM,EAAEG,IAAI,EAAEC,MAAM,EAAE,GAAGJ,SAAAA;AAEzB,IAAA,IAAI,CAACI,MAAAA,EAAQ;QACX,OAAO,CAAC,KAAK,EAAED,IAAAA,CAAAA,CAAM;AACvB,IAAA;AAEA,IAAA,IAAIC,WAAW,OAAA,EAAS;QACtB,OAAO,CAAC,OAAO,EAAED,IAAAA,CAAAA,CAAM;AACzB,IAAA;AAEA,IAAA,OAAO,CAAC,QAAQ,EAAEC,MAAAA,CAAO,CAAC,EAAED,IAAAA,CAAAA,CAAM;AACpC;AAEA;;;IAIO,MAAME,iBAAAA,GAAoB,CAACC,KAAAA,GAAAA;AAChC,IAAA,MAAMN,SAAAA,GAAY;AAAE,QAAA,GAAGM,KAAK;AAAEC,QAAAA,EAAAA,EAAIL,kBAAAA,CAAmBI,KAAAA;AAAO,KAAA;IAG5D,OAAON,SAAAA;AACT;AAEA;;;AAGC,IACM,MAAMQ,MAAAA,GAASC,MAAAA,CAAKJ,iBAAAA,EAAmBN,2BAAAA,EAA6B,CAACC,SAAAA,GAC1EU,OAAAA,CAAM,EAAC,EAAGd,6BAAAA,EAAAA,EAAiCI,SAAAA,CAAAA;AAG7C,aAAe;AACbK,IAAAA,iBAAAA;AACAH,IAAAA,kBAAAA;AACAJ,IAAAA,eAAAA;AACAU,IAAAA,MAAAA;AACAZ,IAAAA,6BAAAA;AACAG,IAAAA;AACF,CAAA;;;;;;;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { flow, merge, pick } from 'lodash';
|
|
2
2
|
|
|
3
3
|
const DEFAULT_CATEGORY = 'default';
|
|
4
4
|
/**
|
|
@@ -19,7 +19,7 @@ const DEFAULT_CATEGORY = 'default';
|
|
|
19
19
|
];
|
|
20
20
|
/**
|
|
21
21
|
* Remove unwanted attributes from a {@link Condition}
|
|
22
|
-
*/ const sanitizeConditionAttributes = pick(conditionFields);
|
|
22
|
+
*/ const sanitizeConditionAttributes = (condition)=>pick(condition, conditionFields);
|
|
23
23
|
const computeConditionId = (condition)=>{
|
|
24
24
|
const { name, plugin } = condition;
|
|
25
25
|
if (!plugin) {
|
|
@@ -34,13 +34,16 @@ const computeConditionId = (condition)=>{
|
|
|
34
34
|
* Assign an id attribute to a {@link CreateConditionPayload} object
|
|
35
35
|
* @param attrs - Payload used to create a condition
|
|
36
36
|
*/ const assignConditionId = (attrs)=>{
|
|
37
|
-
const condition =
|
|
37
|
+
const condition = {
|
|
38
|
+
...attrs,
|
|
39
|
+
id: computeConditionId(attrs)
|
|
40
|
+
};
|
|
38
41
|
return condition;
|
|
39
42
|
};
|
|
40
43
|
/**
|
|
41
44
|
* Transform the given attributes into a domain representation of a Condition
|
|
42
45
|
* @param payload - The condition payload containing the attributes needed to create a {@link Condition}
|
|
43
|
-
*/ const create =
|
|
46
|
+
*/ const create = flow(assignConditionId, sanitizeConditionAttributes, (condition)=>merge({}, getDefaultConditionAttributes(), condition));
|
|
44
47
|
var domain = {
|
|
45
48
|
assignConditionId,
|
|
46
49
|
computeConditionId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../../../../server/src/domain/condition/index.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../../../server/src/domain/condition/index.ts"],"sourcesContent":["import { pick, merge, flow } from 'lodash';\n\nexport type Condition = {\n id: string;\n displayName: string;\n name: string;\n plugin?: string;\n category?: string;\n /**\n * The handler of a {@link Condition}\n */\n handler: (user: object, options: object) => object | boolean;\n};\n\n/**\n * Set of attributes used to create a new {@link Action} object\n */\nexport type CreateConditionPayload = Omit<Condition, 'id'>;\n\nconst DEFAULT_CATEGORY = 'default';\n\n/**\n * Get the default value used for every condition\n * @return {Condition}\n */\nexport const getDefaultConditionAttributes = () => ({\n category: DEFAULT_CATEGORY,\n});\n\n/**\n * Get the list of all the valid attributes of a {@link Condition}\n * @return {string[]}\n */\nexport const conditionFields = ['id', 'displayName', 'handler', 'plugin', 'category'] as const;\n\n/**\n * Remove unwanted attributes from a {@link Condition}\n */\nexport const sanitizeConditionAttributes = (condition: Partial<Condition>) =>\n pick(condition, conditionFields);\n\nexport const computeConditionId = (condition: CreateConditionPayload) => {\n const { name, plugin } = condition;\n\n if (!plugin) {\n return `api::${name}`;\n }\n\n if (plugin === 'admin') {\n return `admin::${name}`;\n }\n\n return `plugin::${plugin}.${name}`;\n};\n\n/**\n * Assign an id attribute to a {@link CreateConditionPayload} object\n * @param attrs - Payload used to create a condition\n */\nexport const assignConditionId = (attrs: CreateConditionPayload): Condition => {\n const condition = { ...attrs, id: computeConditionId(attrs) } as CreateConditionPayload & {\n id: string;\n };\n return condition;\n};\n\n/**\n * Transform the given attributes into a domain representation of a Condition\n * @param payload - The condition payload containing the attributes needed to create a {@link Condition}\n */\nexport const create = flow(assignConditionId, sanitizeConditionAttributes, (condition) =>\n merge({}, getDefaultConditionAttributes(), condition)\n) as (payload: CreateConditionPayload) => Condition;\n\nexport default {\n assignConditionId,\n computeConditionId,\n conditionFields,\n create,\n getDefaultConditionAttributes,\n sanitizeConditionAttributes,\n};\n"],"names":["DEFAULT_CATEGORY","getDefaultConditionAttributes","category","conditionFields","sanitizeConditionAttributes","condition","pick","computeConditionId","name","plugin","assignConditionId","attrs","id","create","flow","merge"],"mappings":";;AAmBA,MAAMA,gBAAAA,GAAmB,SAAA;AAEzB;;;AAGC,IACM,MAAMC,6BAAAA,GAAgC,KAAO;QAClDC,QAAAA,EAAUF;AACZ,KAAA;AAEA;;;UAIaG,eAAAA,GAAkB;AAAC,IAAA,IAAA;AAAM,IAAA,aAAA;AAAe,IAAA,SAAA;AAAW,IAAA,QAAA;AAAU,IAAA;;AAE1E;;AAEC,IACM,MAAMC,2BAAAA,GAA8B,CAACC,SAAAA,GAC1CC,IAAAA,CAAKD,WAAWF,eAAAA;AAEX,MAAMI,qBAAqB,CAACF,SAAAA,GAAAA;AACjC,IAAA,MAAM,EAAEG,IAAI,EAAEC,MAAM,EAAE,GAAGJ,SAAAA;AAEzB,IAAA,IAAI,CAACI,MAAAA,EAAQ;QACX,OAAO,CAAC,KAAK,EAAED,IAAAA,CAAAA,CAAM;AACvB,IAAA;AAEA,IAAA,IAAIC,WAAW,OAAA,EAAS;QACtB,OAAO,CAAC,OAAO,EAAED,IAAAA,CAAAA,CAAM;AACzB,IAAA;AAEA,IAAA,OAAO,CAAC,QAAQ,EAAEC,MAAAA,CAAO,CAAC,EAAED,IAAAA,CAAAA,CAAM;AACpC;AAEA;;;IAIO,MAAME,iBAAAA,GAAoB,CAACC,KAAAA,GAAAA;AAChC,IAAA,MAAMN,SAAAA,GAAY;AAAE,QAAA,GAAGM,KAAK;AAAEC,QAAAA,EAAAA,EAAIL,kBAAAA,CAAmBI,KAAAA;AAAO,KAAA;IAG5D,OAAON,SAAAA;AACT;AAEA;;;AAGC,IACM,MAAMQ,MAAAA,GAASC,IAAAA,CAAKJ,iBAAAA,EAAmBN,2BAAAA,EAA6B,CAACC,SAAAA,GAC1EU,KAAAA,CAAM,EAAC,EAAGd,6BAAAA,EAAAA,EAAiCI,SAAAA,CAAAA;AAG7C,aAAe;AACbK,IAAAA,iBAAAA;AACAH,IAAAA,kBAAAA;AACAJ,IAAAA,eAAAA;AACAU,IAAAA,MAAAA;AACAZ,IAAAA,6BAAAA;AACAG,IAAAA;AACF,CAAA;;;;"}
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var
|
|
5
|
+
var utils = require('@strapi/utils');
|
|
6
|
+
var _ = require('lodash');
|
|
6
7
|
|
|
7
8
|
const permissionFields = [
|
|
8
9
|
'id',
|
|
@@ -22,7 +23,7 @@ const sanitizedPermissionFields = [
|
|
|
22
23
|
'properties',
|
|
23
24
|
'conditions'
|
|
24
25
|
];
|
|
25
|
-
const sanitizePermissionFields =
|
|
26
|
+
const sanitizePermissionFields = (permission)=>_.pick(permission, sanitizedPermissionFields);
|
|
26
27
|
/**
|
|
27
28
|
* Creates a permission with default values
|
|
28
29
|
*/ const getDefaultPermission = ()=>({
|
|
@@ -36,57 +37,65 @@ const sanitizePermissionFields = fp.pick(sanitizedPermissionFields);
|
|
|
36
37
|
* @param condition - The condition to add
|
|
37
38
|
* @param permission - The permission on which we want to add the condition
|
|
38
39
|
* @return
|
|
39
|
-
*/ const addCondition =
|
|
40
|
+
*/ const addCondition = _.curry((condition, permission)=>{
|
|
40
41
|
const { conditions } = permission;
|
|
41
|
-
const newConditions = Array.isArray(conditions) ?
|
|
42
|
+
const newConditions = Array.isArray(conditions) ? [
|
|
43
|
+
...new Set(conditions.concat(condition))
|
|
44
|
+
] : [
|
|
42
45
|
condition
|
|
43
46
|
];
|
|
44
|
-
return
|
|
47
|
+
return {
|
|
48
|
+
...permission,
|
|
49
|
+
conditions: newConditions
|
|
50
|
+
};
|
|
45
51
|
});
|
|
46
52
|
/**
|
|
47
53
|
* Returns a new permission without the given condition
|
|
48
54
|
* @param condition - The condition to remove
|
|
49
55
|
* @param permission - The permission on which we want to remove the condition
|
|
50
|
-
*/ const removeCondition =
|
|
51
|
-
return
|
|
56
|
+
*/ const removeCondition = _.curry((condition, permission)=>{
|
|
57
|
+
return {
|
|
58
|
+
...permission,
|
|
59
|
+
conditions: _.reject(permission.conditions, (value)=>value === condition)
|
|
60
|
+
};
|
|
52
61
|
});
|
|
53
62
|
/**
|
|
54
63
|
* Gets a property or a part of a property from a permission.
|
|
55
64
|
* @param property - The property to get
|
|
56
65
|
* @param permission - The permission on which we want to access the property
|
|
57
|
-
*/ const getProperty =
|
|
66
|
+
*/ const getProperty = _.curry((property, permission)=>_.get(permission, `properties.${property}`));
|
|
58
67
|
/**
|
|
59
68
|
* Set a value for a given property on a new permission object
|
|
60
69
|
* @param property - The name of the property
|
|
61
70
|
* @param value - The value of the property
|
|
62
71
|
* @param permission - The permission on which we want to set the property
|
|
63
72
|
*/ const setProperty = (property, value, permission)=>{
|
|
64
|
-
return
|
|
73
|
+
return utils.objects.set(permission, `properties.${property}`, value);
|
|
65
74
|
};
|
|
66
75
|
/**
|
|
67
76
|
* Returns a new permission without the given property name set
|
|
68
77
|
* @param property - The name of the property to delete
|
|
69
78
|
* @param permission - The permission on which we want to remove the property
|
|
70
|
-
*/ const deleteProperty = (property, permission)=>
|
|
79
|
+
*/ const deleteProperty = (property, permission)=>_.omit(permission, `properties.${property}`);
|
|
71
80
|
/**
|
|
72
81
|
* Creates a new {@link Permission} object from raw attributes. Set default values for certain fields
|
|
73
82
|
* @param attributes
|
|
74
83
|
*/ const create = (attributes)=>{
|
|
75
|
-
return
|
|
84
|
+
return _.merge({}, getDefaultPermission(), _.pick(attributes, permissionFields));
|
|
76
85
|
};
|
|
77
86
|
/**
|
|
78
87
|
* Using the given condition provider, check and remove invalid condition from the permission's condition array.
|
|
79
88
|
* @param provider - The condition provider used to do the checks
|
|
80
89
|
* @param permission - The condition to sanitize
|
|
81
|
-
*/ const sanitizeConditions =
|
|
82
|
-
if (!
|
|
90
|
+
*/ const sanitizeConditions = _.curry((provider, permission)=>{
|
|
91
|
+
if (!Array.isArray(permission.conditions)) {
|
|
83
92
|
return permission;
|
|
84
93
|
}
|
|
85
94
|
return permission.conditions.filter((condition)=>!provider.has(condition)).reduce((perm, condition)=>removeCondition(condition, perm), permission);
|
|
86
95
|
});
|
|
87
96
|
function toPermission(payload) {
|
|
88
|
-
if (
|
|
89
|
-
return
|
|
97
|
+
if (Array.isArray(payload)) {
|
|
98
|
+
return Array.from(payload, (value)=>create(value));
|
|
90
99
|
}
|
|
91
100
|
return create(payload);
|
|
92
101
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../../server/src/domain/permission/index.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../../server/src/domain/permission/index.ts"],"sourcesContent":["import { objects, providerFactory } from '@strapi/utils';\nimport { pick, reject, merge, omit, get, curry } from 'lodash';\nimport type { Utils } from '@strapi/types';\n\nimport { Permission } from '../../../../shared/contracts/shared';\nimport { SanitizedPermission } from '../../../../shared/contracts/roles';\n\nexport type CreatePermissionPayload = Utils.Object.PartialBy<\n Permission,\n 'actionParameters' | 'conditions' | 'properties' | 'subject' | 'id' | 'createdAt' | 'updatedAt'\n>;\n\ntype Provider = ReturnType<typeof providerFactory>;\n\nexport const permissionFields = [\n 'id',\n 'action',\n 'actionParameters',\n 'subject',\n 'properties',\n 'conditions',\n 'role',\n 'apiToken',\n];\nexport const sanitizedPermissionFields = [\n 'id',\n 'action',\n 'actionParameters',\n 'subject',\n 'properties',\n 'conditions',\n] as const;\n\nexport const sanitizePermissionFields: (p: Permission) => SanitizedPermission = (permission) =>\n pick(permission, sanitizedPermissionFields);\n\n/**\n * Creates a permission with default values\n */\nconst getDefaultPermission = () => ({\n actionParameters: {},\n conditions: [],\n properties: {},\n subject: null,\n});\n\n/**\n * Returns a new permission with the given condition\n * @param condition - The condition to add\n * @param permission - The permission on which we want to add the condition\n * @return\n */\nexport const addCondition = curry((condition: string, permission: Permission): Permission => {\n const { conditions } = permission;\n const newConditions = Array.isArray(conditions)\n ? [...new Set(conditions.concat(condition))]\n : [condition];\n\n return { ...permission, conditions: newConditions };\n});\n\n/**\n * Returns a new permission without the given condition\n * @param condition - The condition to remove\n * @param permission - The permission on which we want to remove the condition\n */\nexport const removeCondition = curry((condition: string, permission: Permission): Permission => {\n return {\n ...permission,\n conditions: reject(permission.conditions, (value) => value === condition),\n };\n});\n\n/**\n * Gets a property or a part of a property from a permission.\n * @param property - The property to get\n * @param permission - The permission on which we want to access the property\n */\nexport const getProperty = curry(\n (property: string, permission: Permission): Permission =>\n get(permission, `properties.${property}`)\n);\n\n/**\n * Set a value for a given property on a new permission object\n * @param property - The name of the property\n * @param value - The value of the property\n * @param permission - The permission on which we want to set the property\n */\nexport const setProperty = (\n property: string,\n value: unknown,\n permission: Permission\n): Permission => {\n return objects.set(permission, `properties.${property}`, value);\n};\n\n/**\n * Returns a new permission without the given property name set\n * @param property - The name of the property to delete\n * @param permission - The permission on which we want to remove the property\n */\nexport const deleteProperty = <TProperty extends string>(\n property: TProperty,\n permission: Permission\n) => omit(permission, `properties.${property}` as string) as Omit<Permission, TProperty>;\n\n/**\n * Creates a new {@link Permission} object from raw attributes. Set default values for certain fields\n * @param attributes\n */\nexport const create = (attributes: CreatePermissionPayload) => {\n return merge({}, getDefaultPermission(), pick(attributes, permissionFields)) as Permission;\n};\n\n/**\n * Using the given condition provider, check and remove invalid condition from the permission's condition array.\n * @param provider - The condition provider used to do the checks\n * @param permission - The condition to sanitize\n */\nexport const sanitizeConditions = curry(\n (provider: Provider, permission: Permission): Permission => {\n if (!Array.isArray(permission.conditions)) {\n return permission;\n }\n\n return permission.conditions\n .filter((condition: string) => !provider.has(condition))\n .reduce(\n (perm: Permission, condition: string) => removeCondition(condition, perm),\n permission\n );\n }\n);\n\n/**\n * Transform raw attributes into valid permissions using the create domain function.\n * @param payload - Can either be a single object of attributes or an array of those objects.\n */\n\nfunction toPermission<T extends CreatePermissionPayload>(payload: T[]): Permission[];\nfunction toPermission<T extends CreatePermissionPayload>(payload: T): Permission;\nfunction toPermission<T extends CreatePermissionPayload>(\n payload: T[] | T\n): Permission[] | Permission {\n if (Array.isArray(payload)) {\n return Array.from(payload, (value) => create(value));\n }\n\n return create(payload);\n}\n\nexport { toPermission };\n\nexport default {\n addCondition,\n removeCondition,\n create,\n deleteProperty,\n permissionFields,\n getProperty,\n sanitizedPermissionFields,\n sanitizeConditions,\n sanitizePermissionFields,\n setProperty,\n toPermission,\n};\n"],"names":["permissionFields","sanitizedPermissionFields","sanitizePermissionFields","permission","pick","getDefaultPermission","actionParameters","conditions","properties","subject","addCondition","curry","condition","newConditions","Array","isArray","Set","concat","removeCondition","reject","value","getProperty","property","get","setProperty","objects","set","deleteProperty","omit","create","attributes","merge","sanitizeConditions","provider","filter","has","reduce","perm","toPermission","payload","from"],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { objects } from '@strapi/utils';
|
|
2
|
+
import { curry, reject, get, omit, pick, merge } from 'lodash';
|
|
2
3
|
|
|
3
4
|
const permissionFields = [
|
|
4
5
|
'id',
|
|
@@ -18,7 +19,7 @@ const sanitizedPermissionFields = [
|
|
|
18
19
|
'properties',
|
|
19
20
|
'conditions'
|
|
20
21
|
];
|
|
21
|
-
const sanitizePermissionFields = pick(sanitizedPermissionFields);
|
|
22
|
+
const sanitizePermissionFields = (permission)=>pick(permission, sanitizedPermissionFields);
|
|
22
23
|
/**
|
|
23
24
|
* Creates a permission with default values
|
|
24
25
|
*/ const getDefaultPermission = ()=>({
|
|
@@ -34,55 +35,63 @@ const sanitizePermissionFields = pick(sanitizedPermissionFields);
|
|
|
34
35
|
* @return
|
|
35
36
|
*/ const addCondition = curry((condition, permission)=>{
|
|
36
37
|
const { conditions } = permission;
|
|
37
|
-
const newConditions = Array.isArray(conditions) ?
|
|
38
|
+
const newConditions = Array.isArray(conditions) ? [
|
|
39
|
+
...new Set(conditions.concat(condition))
|
|
40
|
+
] : [
|
|
38
41
|
condition
|
|
39
42
|
];
|
|
40
|
-
return
|
|
43
|
+
return {
|
|
44
|
+
...permission,
|
|
45
|
+
conditions: newConditions
|
|
46
|
+
};
|
|
41
47
|
});
|
|
42
48
|
/**
|
|
43
49
|
* Returns a new permission without the given condition
|
|
44
50
|
* @param condition - The condition to remove
|
|
45
51
|
* @param permission - The permission on which we want to remove the condition
|
|
46
52
|
*/ const removeCondition = curry((condition, permission)=>{
|
|
47
|
-
return
|
|
53
|
+
return {
|
|
54
|
+
...permission,
|
|
55
|
+
conditions: reject(permission.conditions, (value)=>value === condition)
|
|
56
|
+
};
|
|
48
57
|
});
|
|
49
58
|
/**
|
|
50
59
|
* Gets a property or a part of a property from a permission.
|
|
51
60
|
* @param property - The property to get
|
|
52
61
|
* @param permission - The permission on which we want to access the property
|
|
53
|
-
*/ const getProperty = curry((property, permission)=>get(`properties.${property}
|
|
62
|
+
*/ const getProperty = curry((property, permission)=>get(permission, `properties.${property}`));
|
|
54
63
|
/**
|
|
55
64
|
* Set a value for a given property on a new permission object
|
|
56
65
|
* @param property - The name of the property
|
|
57
66
|
* @param value - The value of the property
|
|
58
67
|
* @param permission - The permission on which we want to set the property
|
|
59
68
|
*/ const setProperty = (property, value, permission)=>{
|
|
60
|
-
return set(`properties.${property}`, value
|
|
69
|
+
return objects.set(permission, `properties.${property}`, value);
|
|
61
70
|
};
|
|
62
71
|
/**
|
|
63
72
|
* Returns a new permission without the given property name set
|
|
64
73
|
* @param property - The name of the property to delete
|
|
65
74
|
* @param permission - The permission on which we want to remove the property
|
|
66
|
-
*/ const deleteProperty = (property, permission)=>omit(`properties.${property}
|
|
75
|
+
*/ const deleteProperty = (property, permission)=>omit(permission, `properties.${property}`);
|
|
67
76
|
/**
|
|
68
77
|
* Creates a new {@link Permission} object from raw attributes. Set default values for certain fields
|
|
69
78
|
* @param attributes
|
|
70
79
|
*/ const create = (attributes)=>{
|
|
71
|
-
return
|
|
80
|
+
return merge({}, getDefaultPermission(), pick(attributes, permissionFields));
|
|
72
81
|
};
|
|
73
82
|
/**
|
|
74
83
|
* Using the given condition provider, check and remove invalid condition from the permission's condition array.
|
|
75
84
|
* @param provider - The condition provider used to do the checks
|
|
76
85
|
* @param permission - The condition to sanitize
|
|
77
86
|
*/ const sanitizeConditions = curry((provider, permission)=>{
|
|
78
|
-
if (!isArray(permission.conditions)) {
|
|
87
|
+
if (!Array.isArray(permission.conditions)) {
|
|
79
88
|
return permission;
|
|
80
89
|
}
|
|
81
90
|
return permission.conditions.filter((condition)=>!provider.has(condition)).reduce((perm, condition)=>removeCondition(condition, perm), permission);
|
|
82
91
|
});
|
|
83
92
|
function toPermission(payload) {
|
|
84
|
-
if (isArray(payload)) {
|
|
85
|
-
return
|
|
93
|
+
if (Array.isArray(payload)) {
|
|
94
|
+
return Array.from(payload, (value)=>create(value));
|
|
86
95
|
}
|
|
87
96
|
return create(payload);
|
|
88
97
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../../../../server/src/domain/permission/index.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../../../server/src/domain/permission/index.ts"],"sourcesContent":["import { objects, providerFactory } from '@strapi/utils';\nimport { pick, reject, merge, omit, get, curry } from 'lodash';\nimport type { Utils } from '@strapi/types';\n\nimport { Permission } from '../../../../shared/contracts/shared';\nimport { SanitizedPermission } from '../../../../shared/contracts/roles';\n\nexport type CreatePermissionPayload = Utils.Object.PartialBy<\n Permission,\n 'actionParameters' | 'conditions' | 'properties' | 'subject' | 'id' | 'createdAt' | 'updatedAt'\n>;\n\ntype Provider = ReturnType<typeof providerFactory>;\n\nexport const permissionFields = [\n 'id',\n 'action',\n 'actionParameters',\n 'subject',\n 'properties',\n 'conditions',\n 'role',\n 'apiToken',\n];\nexport const sanitizedPermissionFields = [\n 'id',\n 'action',\n 'actionParameters',\n 'subject',\n 'properties',\n 'conditions',\n] as const;\n\nexport const sanitizePermissionFields: (p: Permission) => SanitizedPermission = (permission) =>\n pick(permission, sanitizedPermissionFields);\n\n/**\n * Creates a permission with default values\n */\nconst getDefaultPermission = () => ({\n actionParameters: {},\n conditions: [],\n properties: {},\n subject: null,\n});\n\n/**\n * Returns a new permission with the given condition\n * @param condition - The condition to add\n * @param permission - The permission on which we want to add the condition\n * @return\n */\nexport const addCondition = curry((condition: string, permission: Permission): Permission => {\n const { conditions } = permission;\n const newConditions = Array.isArray(conditions)\n ? [...new Set(conditions.concat(condition))]\n : [condition];\n\n return { ...permission, conditions: newConditions };\n});\n\n/**\n * Returns a new permission without the given condition\n * @param condition - The condition to remove\n * @param permission - The permission on which we want to remove the condition\n */\nexport const removeCondition = curry((condition: string, permission: Permission): Permission => {\n return {\n ...permission,\n conditions: reject(permission.conditions, (value) => value === condition),\n };\n});\n\n/**\n * Gets a property or a part of a property from a permission.\n * @param property - The property to get\n * @param permission - The permission on which we want to access the property\n */\nexport const getProperty = curry(\n (property: string, permission: Permission): Permission =>\n get(permission, `properties.${property}`)\n);\n\n/**\n * Set a value for a given property on a new permission object\n * @param property - The name of the property\n * @param value - The value of the property\n * @param permission - The permission on which we want to set the property\n */\nexport const setProperty = (\n property: string,\n value: unknown,\n permission: Permission\n): Permission => {\n return objects.set(permission, `properties.${property}`, value);\n};\n\n/**\n * Returns a new permission without the given property name set\n * @param property - The name of the property to delete\n * @param permission - The permission on which we want to remove the property\n */\nexport const deleteProperty = <TProperty extends string>(\n property: TProperty,\n permission: Permission\n) => omit(permission, `properties.${property}` as string) as Omit<Permission, TProperty>;\n\n/**\n * Creates a new {@link Permission} object from raw attributes. Set default values for certain fields\n * @param attributes\n */\nexport const create = (attributes: CreatePermissionPayload) => {\n return merge({}, getDefaultPermission(), pick(attributes, permissionFields)) as Permission;\n};\n\n/**\n * Using the given condition provider, check and remove invalid condition from the permission's condition array.\n * @param provider - The condition provider used to do the checks\n * @param permission - The condition to sanitize\n */\nexport const sanitizeConditions = curry(\n (provider: Provider, permission: Permission): Permission => {\n if (!Array.isArray(permission.conditions)) {\n return permission;\n }\n\n return permission.conditions\n .filter((condition: string) => !provider.has(condition))\n .reduce(\n (perm: Permission, condition: string) => removeCondition(condition, perm),\n permission\n );\n }\n);\n\n/**\n * Transform raw attributes into valid permissions using the create domain function.\n * @param payload - Can either be a single object of attributes or an array of those objects.\n */\n\nfunction toPermission<T extends CreatePermissionPayload>(payload: T[]): Permission[];\nfunction toPermission<T extends CreatePermissionPayload>(payload: T): Permission;\nfunction toPermission<T extends CreatePermissionPayload>(\n payload: T[] | T\n): Permission[] | Permission {\n if (Array.isArray(payload)) {\n return Array.from(payload, (value) => create(value));\n }\n\n return create(payload);\n}\n\nexport { toPermission };\n\nexport default {\n addCondition,\n removeCondition,\n create,\n deleteProperty,\n permissionFields,\n getProperty,\n sanitizedPermissionFields,\n sanitizeConditions,\n sanitizePermissionFields,\n setProperty,\n toPermission,\n};\n"],"names":["permissionFields","sanitizedPermissionFields","sanitizePermissionFields","permission","pick","getDefaultPermission","actionParameters","conditions","properties","subject","addCondition","curry","condition","newConditions","Array","isArray","Set","concat","removeCondition","reject","value","getProperty","property","get","setProperty","objects","set","deleteProperty","omit","create","attributes","merge","sanitizeConditions","provider","filter","has","reduce","perm","toPermission","payload","from"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var _ = require('lodash');
|
|
3
4
|
var path = require('path');
|
|
4
5
|
var utils = require('@strapi/utils');
|
|
5
|
-
var fp = require('lodash/fp');
|
|
6
6
|
|
|
7
7
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
8
8
|
|
|
@@ -16,16 +16,16 @@ var rateLimit = ((config, { strapi })=>async (ctx, next)=>{
|
|
|
16
16
|
enabled: true
|
|
17
17
|
};
|
|
18
18
|
}
|
|
19
|
-
if (!
|
|
19
|
+
if (!_.has(rateLimitConfig, 'enabled')) {
|
|
20
20
|
rateLimitConfig.enabled = true;
|
|
21
21
|
}
|
|
22
22
|
if (rateLimitConfig.enabled === true) {
|
|
23
23
|
// TODO: TS - Do the dynamic import
|
|
24
24
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
25
25
|
const rateLimit = require('koa2-ratelimit').RateLimit;
|
|
26
|
-
const requestEmail =
|
|
27
|
-
const userEmail =
|
|
28
|
-
const requestPath =
|
|
26
|
+
const requestEmail = _.get(ctx, 'request.body.email');
|
|
27
|
+
const userEmail = _.isString(requestEmail) ? requestEmail.toLowerCase() : 'unknownEmail';
|
|
28
|
+
const requestPath = _.isString(ctx.request.path) ? path__default.default.normalize(ctx.request.path).toLowerCase().replace(/\/$/, '') : 'invalidPath';
|
|
29
29
|
const loadConfig = {
|
|
30
30
|
interval: {
|
|
31
31
|
min: 5
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rateLimit.js","sources":["../../../../../server/src/middlewares/rateLimit.ts"],"sourcesContent":["import type { Context, Next } from 'koa';\nimport path from 'path';\nimport { errors } from '@strapi/utils';\nimport
|
|
1
|
+
{"version":3,"file":"rateLimit.js","sources":["../../../../../server/src/middlewares/rateLimit.ts"],"sourcesContent":["import { get, isString, has } from 'lodash';\nimport type { Context, Next } from 'koa';\nimport path from 'path';\nimport { errors } from '@strapi/utils';\n\nimport type { Core } from '@strapi/types';\n\nconst { RateLimitError } = errors;\n\nexport default (config: any, { strapi }: { strapi: Core.Strapi }) =>\n async (ctx: Context, next: Next) => {\n let rateLimitConfig = strapi.config.get('admin.rateLimit') as any;\n\n if (!rateLimitConfig) {\n rateLimitConfig = {\n enabled: true,\n };\n }\n\n if (!has(rateLimitConfig, 'enabled')) {\n rateLimitConfig.enabled = true;\n }\n\n if (rateLimitConfig.enabled === true) {\n // TODO: TS - Do the dynamic import\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const rateLimit = require('koa2-ratelimit').RateLimit;\n\n const requestEmail = get(ctx, 'request.body.email');\n const userEmail = isString(requestEmail) ? requestEmail.toLowerCase() : 'unknownEmail';\n\n const requestPath = isString(ctx.request.path)\n ? path.normalize(ctx.request.path).toLowerCase().replace(/\\/$/, '')\n : 'invalidPath';\n\n const loadConfig = {\n interval: { min: 5 },\n max: 5,\n prefixKey: `${userEmail}:${requestPath}:${ctx.request.ip}`,\n handler() {\n throw new RateLimitError();\n },\n ...rateLimitConfig,\n ...config,\n };\n\n return rateLimit.middleware(loadConfig)(ctx, next);\n }\n\n return next();\n };\n"],"names":["RateLimitError","errors","config","strapi","ctx","next","rateLimitConfig","get","enabled","has","rateLimit","require","RateLimit","requestEmail","userEmail","isString","toLowerCase","requestPath","request","path","normalize","replace","loadConfig","interval","min","max","prefixKey","ip","handler","middleware"],"mappings":";;;;;;;;;;AAOA,MAAM,EAAEA,cAAc,EAAE,GAAGC,YAAAA;AAE3B,gBAAe,CAAA,CAACC,MAAAA,EAAa,EAAEC,MAAM,EAA2B,GAC9D,OAAOC,GAAAA,EAAcC,IAAAA,GAAAA;AACnB,QAAA,IAAIC,eAAAA,GAAkBH,MAAAA,CAAOD,MAAM,CAACK,GAAG,CAAC,iBAAA,CAAA;AAExC,QAAA,IAAI,CAACD,eAAAA,EAAiB;YACpBA,eAAAA,GAAkB;gBAChBE,OAAAA,EAAS;AACX,aAAA;AACF,QAAA;QAEA,IAAI,CAACC,KAAAA,CAAIH,eAAAA,EAAiB,SAAA,CAAA,EAAY;AACpCA,YAAAA,eAAAA,CAAgBE,OAAO,GAAG,IAAA;AAC5B,QAAA;QAEA,IAAIF,eAAAA,CAAgBE,OAAO,KAAK,IAAA,EAAM;;;YAGpC,MAAME,SAAAA,GAAYC,OAAAA,CAAQ,gBAAA,CAAA,CAAkBC,SAAS;YAErD,MAAMC,YAAAA,GAAeN,MAAIH,GAAAA,EAAK,oBAAA,CAAA;AAC9B,YAAA,MAAMU,SAAAA,GAAYC,UAAAA,CAASF,YAAAA,CAAAA,GAAgBA,YAAAA,CAAaG,WAAW,EAAA,GAAK,cAAA;YAExE,MAAMC,WAAAA,GAAcF,WAASX,GAAAA,CAAIc,OAAO,CAACC,IAAI,CAAA,GACzCA,sBAAKC,SAAS,CAAChB,IAAIc,OAAO,CAACC,IAAI,CAAA,CAAEH,WAAW,GAAGK,OAAO,CAAC,OAAO,EAAA,CAAA,GAC9D,aAAA;AAEJ,YAAA,MAAMC,UAAAA,GAAa;gBACjBC,QAAAA,EAAU;oBAAEC,GAAAA,EAAK;AAAE,iBAAA;gBACnBC,GAAAA,EAAK,CAAA;gBACLC,SAAAA,EAAW,CAAA,EAAGZ,SAAAA,CAAU,CAAC,EAAEG,WAAAA,CAAY,CAAC,EAAEb,GAAAA,CAAIc,OAAO,CAACS,EAAE,CAAA,CAAE;AAC1DC,gBAAAA,OAAAA,CAAAA,GAAAA;AACE,oBAAA,MAAM,IAAI5B,cAAAA,EAAAA;AACZ,gBAAA,CAAA;AACA,gBAAA,GAAGM,eAAe;AAClB,gBAAA,GAAGJ;AACL,aAAA;AAEA,YAAA,OAAOQ,SAAAA,CAAUmB,UAAU,CAACP,UAAAA,CAAAA,CAAYlB,GAAAA,EAAKC,IAAAA,CAAAA;AAC/C,QAAA;QAEA,OAAOA,IAAAA,EAAAA;AACT,IAAA,CAAA;;;;"}
|