@strapi/admin 5.30.0 → 5.30.1
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/ContentBox.js.map +1 -1
- package/dist/admin/admin/src/components/ContentBox.mjs.map +1 -1
- package/dist/admin/admin/src/components/DescriptionComponentRenderer.js.map +1 -1
- package/dist/admin/admin/src/components/DescriptionComponentRenderer.mjs.map +1 -1
- 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/Form.js +8 -3
- package/dist/admin/admin/src/components/Form.js.map +1 -1
- package/dist/admin/admin/src/components/Form.mjs +8 -3
- package/dist/admin/admin/src/components/Form.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Enumeration.js +1 -1
- package/dist/admin/admin/src/components/FormInputs/Enumeration.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs +1 -1
- package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Number.js +1 -1
- package/dist/admin/admin/src/components/FormInputs/Number.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Number.mjs +1 -1
- package/dist/admin/admin/src/components/FormInputs/Number.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Renderer.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Renderer.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Time.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Time.mjs.map +1 -1
- package/dist/admin/admin/src/components/GapDropZone.js.map +1 -1
- package/dist/admin/admin/src/components/GapDropZone.mjs.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Overview.js.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Overview.mjs.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.js.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.mjs.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Steps/Step.js.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Steps/Step.mjs.map +1 -1
- package/dist/admin/admin/src/components/Layouts/GridLayout.js.map +1 -1
- package/dist/admin/admin/src/components/Layouts/GridLayout.mjs.map +1 -1
- package/dist/admin/admin/src/components/Layouts/HeaderLayout.js +8 -4
- package/dist/admin/admin/src/components/Layouts/HeaderLayout.js.map +1 -1
- package/dist/admin/admin/src/components/Layouts/HeaderLayout.mjs +8 -4
- package/dist/admin/admin/src/components/Layouts/HeaderLayout.mjs.map +1 -1
- package/dist/admin/admin/src/components/NpsSurvey.js +5 -3
- package/dist/admin/admin/src/components/NpsSurvey.js.map +1 -1
- package/dist/admin/admin/src/components/NpsSurvey.mjs +5 -3
- package/dist/admin/admin/src/components/NpsSurvey.mjs.map +1 -1
- package/dist/admin/admin/src/components/PageHelpers.js.map +1 -1
- package/dist/admin/admin/src/components/PageHelpers.mjs.map +1 -1
- package/dist/admin/admin/src/components/PrivateRoute.js.map +1 -1
- package/dist/admin/admin/src/components/PrivateRoute.mjs.map +1 -1
- package/dist/admin/admin/src/components/RelativeTime.js.map +1 -1
- package/dist/admin/admin/src/components/RelativeTime.mjs.map +1 -1
- package/dist/admin/admin/src/components/ResizeIndicator.js.map +1 -1
- package/dist/admin/admin/src/components/ResizeIndicator.mjs.map +1 -1
- package/dist/admin/admin/src/components/Table.js +1 -1
- package/dist/admin/admin/src/components/Table.js.map +1 -1
- package/dist/admin/admin/src/components/Table.mjs +1 -1
- package/dist/admin/admin/src/components/Table.mjs.map +1 -1
- package/dist/admin/admin/src/components/Widgets.js.map +1 -1
- package/dist/admin/admin/src/components/Widgets.mjs.map +1 -1
- package/dist/admin/admin/src/core/apis/CustomFields.js.map +1 -1
- package/dist/admin/admin/src/core/apis/CustomFields.mjs.map +1 -1
- package/dist/admin/admin/src/core/apis/Plugin.js +0 -1
- package/dist/admin/admin/src/core/apis/Plugin.js.map +1 -1
- package/dist/admin/admin/src/core/apis/Plugin.mjs +0 -1
- package/dist/admin/admin/src/core/apis/Plugin.mjs.map +1 -1
- package/dist/admin/admin/src/core/apis/Widgets.js.map +1 -1
- package/dist/admin/admin/src/core/apis/Widgets.mjs.map +1 -1
- package/dist/admin/admin/src/core/apis/rbac.js.map +1 -1
- package/dist/admin/admin/src/core/apis/rbac.mjs.map +1 -1
- package/dist/admin/admin/src/core/apis/router.js.map +1 -1
- package/dist/admin/admin/src/core/apis/router.mjs.map +1 -1
- package/dist/admin/admin/src/features/BackButton.js.map +1 -1
- package/dist/admin/admin/src/features/BackButton.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/features/Widgets.js.map +1 -1
- package/dist/admin/admin/src/features/Widgets.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/usePersistentState.js.map +1 -1
- package/dist/admin/admin/src/hooks/usePersistentState.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/useRBAC.js.map +1 -1
- package/dist/admin/admin/src/hooks/useRBAC.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Register.js.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Register.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Home/HomePage.js.map +1 -1
- package/dist/admin/admin/src/pages/Home/HomePage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Marketplace/MarketplacePage.js +2 -2
- package/dist/admin/admin/src/pages/Marketplace/MarketplacePage.js.map +1 -1
- package/dist/admin/admin/src/pages/Marketplace/MarketplacePage.mjs +2 -2
- package/dist/admin/admin/src/pages/Marketplace/MarketplacePage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Marketplace/components/NpmPackageCard.js.map +1 -1
- package/dist/admin/admin/src/pages/Marketplace/components/NpmPackageCard.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Marketplace/components/NpmPackagesFilters.js.map +1 -1
- package/dist/admin/admin/src/pages/Marketplace/components/NpmPackagesFilters.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Marketplace/components/PageHeader.js.map +1 -1
- package/dist/admin/admin/src/pages/Marketplace/components/PageHeader.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Marketplace/hooks/useMarketplaceData.js.map +1 -1
- package/dist/admin/admin/src/pages/Marketplace/hooks/useMarketplaceData.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/SettingsNav.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js +8 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.mjs +9 -2
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/LifeSpanInput.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/LifeSpanInput.mjs.map +1 -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.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.mjs.map +1 -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.map +1 -1
- 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.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js +2 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs +2 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs.map +1 -1
- 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.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/utils/files.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/utils/files.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/InstalledPlugins.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/InstalledPlugins.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.js +9 -2
- package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.mjs +9 -2
- package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.js +9 -2
- package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.mjs +9 -2
- package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/ListPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/ListPage.mjs.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- 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.map +1 -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.map +1 -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.map +1 -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.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/forms.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/forms.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/permissions.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/permissions.mjs.map +1 -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.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/ListView.js +2 -0
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/ListView.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/ListView.mjs +2 -0
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/ListView.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.js +9 -2
- 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 +9 -2
- 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 +3 -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 +3 -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/MagicLinkCE.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/components/MagicLinkCE.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/components/SelectRoles.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/components/SelectRoles.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/EditPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/EditPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/ListPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/ListPage.mjs.map +1 -1
- 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.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.js +9 -2
- 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 +9 -2
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.mjs.map +1 -1
- package/dist/admin/admin/src/pages/UseCasePage.js.map +1 -1
- package/dist/admin/admin/src/pages/UseCasePage.mjs.map +1 -1
- package/dist/admin/admin/src/services/api.js +2 -1
- package/dist/admin/admin/src/services/api.js.map +1 -1
- package/dist/admin/admin/src/services/api.mjs +2 -1
- package/dist/admin/admin/src/services/api.mjs.map +1 -1
- package/dist/admin/admin/src/services/apiTokens.js.map +1 -1
- package/dist/admin/admin/src/services/apiTokens.mjs.map +1 -1
- package/dist/admin/admin/src/services/transferTokens.js.map +1 -1
- package/dist/admin/admin/src/services/transferTokens.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/services/webhooks.js.map +1 -1
- package/dist/admin/admin/src/services/webhooks.mjs.map +1 -1
- package/dist/admin/admin/src/utils/cookies.js.map +1 -1
- package/dist/admin/admin/src/utils/cookies.mjs.map +1 -1
- package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
- package/dist/admin/admin/src/utils/getFetchClient.mjs.map +1 -1
- package/dist/admin/admin/src/utils/getPrefixedId.js.map +1 -1
- package/dist/admin/admin/src/utils/getPrefixedId.mjs.map +1 -1
- package/dist/admin/admin/src/utils/rulesEngine.js.map +1 -1
- package/dist/admin/admin/src/utils/rulesEngine.mjs.map +1 -1
- package/dist/admin/admin/src/utils/urls.js.map +1 -1
- package/dist/admin/admin/src/utils/urls.mjs.map +1 -1
- package/dist/admin/admin/src/utils/users.js.map +1 -1
- package/dist/admin/admin/src/utils/users.mjs.map +1 -1
- package/dist/admin/ee/admin/src/components/AuditLogs/Widgets.js.map +1 -1
- package/dist/admin/ee/admin/src/components/AuditLogs/Widgets.mjs.map +1 -1
- package/dist/admin/ee/admin/src/hooks/useLicenseLimitNotification.js.map +1 -1
- package/dist/admin/ee/admin/src/hooks/useLicenseLimitNotification.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/AuthPage/components/SSOProviders.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/AuthPage/components/SSOProviders.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/AuthResponse.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/AuthResponse.mjs.map +1 -1
- 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.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.js +3 -3
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.mjs +3 -3
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/Modal.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/Modal.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useFormatTimeStamp.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useFormatTimeStamp.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/MagicLinkEE.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/MagicLinkEE.mjs.map +1 -1
- package/dist/admin/ee/admin/src/services/ai.js +14 -1
- package/dist/admin/ee/admin/src/services/ai.js.map +1 -1
- package/dist/admin/ee/admin/src/services/ai.mjs +14 -2
- package/dist/admin/ee/admin/src/services/ai.mjs.map +1 -1
- package/dist/admin/ee/admin/src/services/auditLogs.js.map +1 -1
- package/dist/admin/ee/admin/src/services/auditLogs.mjs.map +1 -1
- package/dist/admin/ee.js +1 -0
- package/dist/admin/ee.js.map +1 -1
- package/dist/admin/ee.mjs +1 -1
- package/dist/admin/src/components/Form.d.ts +1 -1
- package/dist/admin/src/core/store/configure.d.ts +2 -2
- package/dist/admin/src/core/store/hooks.d.ts +2 -2
- package/dist/admin/src/ee.d.ts +1 -1
- package/dist/admin/src/hooks/useAdminRoles.d.ts +1 -1
- package/dist/admin/src/pages/Settings/pages/Webhooks/hooks/useWebhooks.d.ts +4 -4
- package/dist/admin/src/selectors.d.ts +2 -2
- package/dist/admin/src/services/admin.d.ts +6 -6
- package/dist/admin/src/services/api.d.ts +1 -1
- package/dist/admin/src/services/apiTokens.d.ts +1 -1
- package/dist/admin/src/services/auth.d.ts +13 -13
- package/dist/admin/src/services/contentApi.d.ts +1 -1
- package/dist/admin/src/services/contentManager.d.ts +1 -1
- package/dist/admin/src/services/homepage.d.ts +3 -3
- package/dist/admin/src/services/transferTokens.d.ts +1 -1
- package/dist/admin/src/services/users.d.ts +8 -8
- package/dist/admin/src/services/webhooks.d.ts +2 -2
- package/dist/admin/tests/utils.d.ts +1 -1
- package/dist/ee/admin/src/services/ai.d.ts +6 -3
- package/dist/ee/admin/src/services/auditLogs.d.ts +1 -1
- package/dist/ee/server/src/ai/containers/ai.d.ts +11 -0
- package/dist/ee/server/src/ai/containers/ai.d.ts.map +1 -0
- package/dist/ee/server/src/ai/controllers/ai.d.ts +1 -0
- package/dist/ee/server/src/ai/controllers/ai.d.ts.map +1 -1
- package/dist/ee/server/src/ai/routes/ai.d.ts.map +1 -1
- package/dist/ee/server/src/index.d.ts +1 -0
- package/dist/ee/server/src/index.d.ts.map +1 -1
- package/dist/server/ee/server/src/ai/containers/ai.js +18 -0
- package/dist/server/ee/server/src/ai/containers/ai.js.map +1 -0
- package/dist/server/ee/server/src/ai/containers/ai.mjs +16 -0
- package/dist/server/ee/server/src/ai/containers/ai.mjs.map +1 -0
- package/dist/server/ee/server/src/ai/controllers/ai.js +6 -0
- package/dist/server/ee/server/src/ai/controllers/ai.js.map +1 -1
- package/dist/server/ee/server/src/ai/controllers/ai.mjs +6 -0
- package/dist/server/ee/server/src/ai/controllers/ai.mjs.map +1 -1
- package/dist/server/ee/server/src/ai/routes/ai.js +11 -0
- package/dist/server/ee/server/src/ai/routes/ai.js.map +1 -1
- package/dist/server/ee/server/src/ai/routes/ai.mjs +11 -0
- package/dist/server/ee/server/src/ai/routes/ai.mjs.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/audit-logs.js.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/audit-logs.mjs.map +1 -1
- package/dist/server/ee/server/src/controllers/authentication-utils/constants.js.map +1 -1
- package/dist/server/ee/server/src/controllers/authentication-utils/constants.mjs.map +1 -1
- 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.map +1 -1
- package/dist/server/ee/server/src/controllers/authentication.js.map +1 -1
- package/dist/server/ee/server/src/controllers/authentication.mjs.map +1 -1
- package/dist/server/ee/server/src/controllers/user.js.map +1 -1
- package/dist/server/ee/server/src/controllers/user.mjs.map +1 -1
- package/dist/server/ee/server/src/index.js +7 -0
- package/dist/server/ee/server/src/index.js.map +1 -1
- package/dist/server/ee/server/src/index.mjs +7 -0
- package/dist/server/ee/server/src/index.mjs.map +1 -1
- package/dist/server/ee/server/src/services/auth.js.map +1 -1
- package/dist/server/ee/server/src/services/auth.mjs.map +1 -1
- package/dist/server/ee/server/src/services/passport/sso.js.map +1 -1
- package/dist/server/ee/server/src/services/passport/sso.mjs.map +1 -1
- package/dist/server/ee/server/src/utils/index.js.map +1 -1
- package/dist/server/ee/server/src/utils/index.mjs.map +1 -1
- package/dist/server/server/src/controllers/transfer/index.js.map +1 -1
- package/dist/server/server/src/controllers/transfer/index.mjs.map +1 -1
- package/dist/server/server/src/controllers/user.js +10 -0
- package/dist/server/server/src/controllers/user.js.map +1 -1
- package/dist/server/server/src/controllers/user.mjs +10 -0
- package/dist/server/server/src/controllers/user.mjs.map +1 -1
- package/dist/server/server/src/domain/action/index.js.map +1 -1
- package/dist/server/server/src/domain/action/index.mjs.map +1 -1
- package/dist/server/server/src/domain/condition/index.js.map +1 -1
- package/dist/server/server/src/domain/condition/index.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/middlewares/rateLimit.js.map +1 -1
- package/dist/server/server/src/middlewares/rateLimit.mjs.map +1 -1
- package/dist/server/server/src/routes/serve-admin-panel.js.map +1 -1
- package/dist/server/server/src/routes/serve-admin-panel.mjs.map +1 -1
- package/dist/server/server/src/services/api-token.js.map +1 -1
- package/dist/server/server/src/services/api-token.mjs.map +1 -1
- package/dist/server/server/src/services/auth.js.map +1 -1
- package/dist/server/server/src/services/auth.mjs.map +1 -1
- package/dist/server/server/src/services/content-type.js.map +1 -1
- package/dist/server/server/src/services/content-type.mjs.map +1 -1
- package/dist/server/server/src/services/encryption.js.map +1 -1
- package/dist/server/server/src/services/encryption.mjs.map +1 -1
- package/dist/server/server/src/services/homepage.js.map +1 -1
- package/dist/server/server/src/services/homepage.mjs.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- package/dist/server/server/src/services/role.js.map +1 -1
- package/dist/server/server/src/services/role.mjs.map +1 -1
- package/dist/server/server/src/services/transfer/token.js.map +1 -1
- package/dist/server/server/src/services/transfer/token.mjs.map +1 -1
- package/dist/server/server/src/services/user.js.map +1 -1
- package/dist/server/server/src/services/user.mjs.map +1 -1
- package/dist/server/server/src/utils/index.js.map +1 -1
- package/dist/server/server/src/utils/index.mjs.map +1 -1
- package/dist/server/server/src/validation/action-provider.js.map +1 -1
- package/dist/server/server/src/validation/action-provider.mjs.map +1 -1
- package/dist/server/server/src/validation/common-functions/check-fields-are-correctly-nested.js.map +1 -1
- package/dist/server/server/src/validation/common-functions/check-fields-are-correctly-nested.mjs.map +1 -1
- package/dist/server/server/src/validation/common-validators.js.map +1 -1
- package/dist/server/server/src/validation/common-validators.mjs.map +1 -1
- package/dist/server/src/controllers/user.d.ts.map +1 -1
- package/dist/shared/contracts/ai.d.ts +16 -0
- package/dist/shared/contracts/ai.d.ts.map +1 -1
- package/package.json +7 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getFetchClient.js","sources":["../../../../../admin/src/utils/getFetchClient.ts"],"sourcesContent":["import pipe from 'lodash/fp/pipe';\nimport qs from 'qs';\n\nimport { getCookieValue } from './cookies';\n\nimport type { errors } from '@strapi/utils';\n\nexport type ApiError =\n | errors.ApplicationError\n | errors.ForbiddenError\n | errors.NotFoundError\n | errors.NotImplementedError\n | errors.PaginationError\n | errors.PayloadTooLargeError\n | errors.PolicyError\n | errors.RateLimitError\n | errors.UnauthorizedError\n | errors.ValidationError\n | errors.YupValidationError;\n\nconst STORAGE_KEYS = {\n TOKEN: 'jwtToken',\n USER: 'userInfo',\n};\n\ntype FetchResponse<TData = any> = {\n data: TData;\n status?: number;\n};\n\ntype FetchOptions = {\n params?: any;\n signal?: AbortSignal;\n headers?: Record<string, string>;\n validateStatus?: ((status: number) => boolean) | null;\n};\n\ntype FetchConfig = {\n signal?: AbortSignal;\n};\n\ninterface ErrorResponse {\n data: {\n data?: any;\n error: ApiError & { status?: number };\n };\n}\n\nclass FetchError extends Error {\n public name: string;\n public message: string;\n public response?: ErrorResponse;\n public code?: number;\n public status?: number;\n\n constructor(message: string, response?: ErrorResponse) {\n super(message);\n this.name = 'FetchError';\n this.message = message;\n this.response = response;\n this.code = response?.data?.error?.status;\n this.status = response?.data?.error?.status;\n\n // Ensure correct stack trace in error object\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, FetchError);\n }\n }\n}\n\nconst isFetchError = (error: unknown): error is FetchError => {\n return error instanceof FetchError;\n};\n\nconst getToken = (): string | null => {\n const fromLocalStorage = localStorage.getItem(STORAGE_KEYS.TOKEN);\n if (fromLocalStorage) {\n return JSON.parse(fromLocalStorage);\n }\n\n const fromCookie = getCookieValue(STORAGE_KEYS.TOKEN);\n return fromCookie ?? null;\n};\n\ntype FetchClient = {\n get: <TData = any>(url: string, config?: FetchOptions) => Promise<FetchResponse<TData>>;\n put: <TData = any, TSend = any>(\n url: string,\n data?: TSend,\n config?: FetchOptions\n ) => Promise<FetchResponse<TData>>;\n post: <TData = any, TSend = any>(\n url: string,\n data?: TSend,\n config?: FetchOptions\n ) => Promise<FetchResponse<TData>>;\n del: <TData = any>(url: string, config?: FetchOptions) => Promise<FetchResponse<TData>>;\n};\n\n/**\n * @public\n * @param {FetchConfig} [defaultOptions={}] - Fetch Configs.\n * @returns {FetchClient} A fetch client object with methods for making HTTP requests.\n * @description This is an abstraction around the native fetch exposed by a function. It provides a simple interface to handle API calls\n * to the Strapi backend.\n * @example\n * ```tsx\n * import { getFetchClient } from '@strapi/admin/admin';\n *\n * const myFunct = () => {\n * const { get } = getFetchClient();\n * const requestURL = \"/some-endpoint\";\n *\n * const { data } = await get(requestURL);\n *\n * return data;\n * };\n * ```\n */\nconst getFetchClient = (defaultOptions: FetchConfig = {}): FetchClient => {\n const backendURL = window.strapi.backendURL;\n const defaultHeader = {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${getToken()}`,\n };\n\n const isFormDataRequest = (body: unknown) => body instanceof FormData;\n const addPrependingSlash = (url: string) => (url.charAt(0) !== '/' ? `/${url}` : url);\n\n // This regular expression matches a string that starts with either \"http://\" or \"https://\" or any other protocol name in lower case letters, followed by \"://\" and ends with anything else\n const hasProtocol = (url: string) => new RegExp('^(?:[a-z+]+:)?//', 'i').test(url);\n\n // Check if the url has a prepending slash, if not add a slash\n const normalizeUrl = (url: string) => (hasProtocol(url) ? url : addPrependingSlash(url));\n\n // Add a response interceptor to return the response\n const responseInterceptor = async <TData = any>(\n response: Response,\n validateStatus?: FetchOptions['validateStatus']\n ): Promise<FetchResponse<TData>> => {\n try {\n const result = await response.json();\n\n /**\n * validateStatus allows us to customize when a response should throw an error\n * In native Fetch API, a response is considered \"not ok\"\n * when the status code falls in the 200 to 299 (inclusive) range\n */\n if (!response.ok && result.error && !validateStatus?.(response.status)) {\n throw new FetchError(result.error.message, { data: result });\n }\n\n if (!response.ok && !validateStatus?.(response.status)) {\n throw new FetchError('Unknown Server Error');\n }\n\n return { data: result };\n } catch (error) {\n if (error instanceof SyntaxError && response.ok) {\n // Making sure that a SyntaxError doesn't throw if it's successful\n return { data: [], status: response.status } as FetchResponse<any>;\n } else {\n throw error;\n }\n }\n };\n\n const paramsSerializer =\n <Param = unknown>(params?: Param) =>\n (url: string) => {\n if (params) {\n if (typeof params === 'string') {\n return `${url}?${params}`;\n }\n\n /**\n * TODO V6: Encoding should be enabled in this step\n * So the rest of the app doesn't have to worry about it,\n * It's considered a breaking change because it impacts any API request, including the user's custom code\n */\n const serializedParams = qs.stringify(params, { encode: false });\n return `${url}?${serializedParams}`;\n }\n return url;\n };\n\n const addBaseUrl = (url: Parameters<typeof fetch>[0]) => {\n return `${backendURL}${url}`;\n };\n\n /**\n * We use the factory method because the options\n * are unique to the individual request\n */\n const makeCreateRequestUrl = (options?: FetchOptions) =>\n pipe(normalizeUrl, addBaseUrl, paramsSerializer(options?.params));\n\n const fetchClient: FetchClient = {\n get: async <TData>(url: string, options?: FetchOptions): Promise<FetchResponse<TData>> => {\n const headers = new Headers({\n ...defaultHeader,\n ...options?.headers,\n });\n /**\n * this applies all our transformations to the URL\n * - normalizing (making sure it has the correct slash)\n * - appending our BaseURL which comes from the window.strapi object\n * - serializing our params with QS\n */\n const createRequestUrl = makeCreateRequestUrl(options);\n const response = await fetch(createRequestUrl(url), {\n signal: options?.signal ?? defaultOptions.signal,\n method: 'GET',\n headers,\n });\n\n return responseInterceptor<TData>(response, options?.validateStatus);\n },\n post: async <TData, TSend = any>(\n url: string,\n data?: TSend,\n options?: FetchOptions\n ): Promise<FetchResponse<TData>> => {\n const headers = new Headers({\n ...defaultHeader,\n ...options?.headers,\n });\n\n const createRequestUrl = makeCreateRequestUrl(options);\n\n /**\n * we have to remove the Content-Type value if it was a formData request\n * the browser will automatically set the header value\n */\n if (isFormDataRequest(data)) {\n headers.delete('Content-Type');\n }\n\n const response = await fetch(createRequestUrl(url), {\n signal: options?.signal ?? defaultOptions.signal,\n method: 'POST',\n headers,\n body: isFormDataRequest(data) ? (data as FormData) : JSON.stringify(data),\n });\n return responseInterceptor<TData>(response, options?.validateStatus);\n },\n put: async <TData, TSend = any>(\n url: string,\n data?: TSend,\n options?: FetchOptions\n ): Promise<FetchResponse<TData>> => {\n const headers = new Headers({\n ...defaultHeader,\n ...options?.headers,\n });\n\n const createRequestUrl = makeCreateRequestUrl(options);\n\n /**\n * we have to remove the Content-Type value if it was a formData request\n * the browser will automatically set the header value\n */\n if (isFormDataRequest(data)) {\n headers.delete('Content-Type');\n }\n\n const response = await fetch(createRequestUrl(url), {\n signal: options?.signal ?? defaultOptions.signal,\n method: 'PUT',\n headers,\n body: isFormDataRequest(data) ? (data as FormData) : JSON.stringify(data),\n });\n\n return responseInterceptor<TData>(response, options?.validateStatus);\n },\n del: async <TData>(url: string, options?: FetchOptions): Promise<FetchResponse<TData>> => {\n const headers = new Headers({\n ...defaultHeader,\n ...options?.headers,\n });\n\n const createRequestUrl = makeCreateRequestUrl(options);\n const response = await fetch(createRequestUrl(url), {\n signal: options?.signal ?? defaultOptions.signal,\n method: 'DELETE',\n headers,\n });\n return responseInterceptor<TData>(response, options?.validateStatus);\n },\n };\n\n return fetchClient;\n};\n\nexport { getFetchClient, isFetchError, FetchError };\nexport type { FetchOptions, FetchResponse, FetchConfig, FetchClient, ErrorResponse };\n"],"names":["STORAGE_KEYS","TOKEN","USER","FetchError","Error","constructor","message","response","name","code","data","error","status","captureStackTrace","isFetchError","getToken","fromLocalStorage","localStorage","getItem","JSON","parse","fromCookie","getCookieValue","getFetchClient","defaultOptions","backendURL","window","strapi","defaultHeader","Accept","Authorization","isFormDataRequest","body","FormData","addPrependingSlash","url","charAt","hasProtocol","RegExp","test","normalizeUrl","responseInterceptor","validateStatus","result","json","ok","SyntaxError","paramsSerializer","params","serializedParams","qs","stringify","encode","addBaseUrl","makeCreateRequestUrl","options","pipe","fetchClient","get","headers","Headers","createRequestUrl","fetch","signal","method","post","delete","put","del"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"getFetchClient.js","sources":["../../../../../admin/src/utils/getFetchClient.ts"],"sourcesContent":["import pipe from 'lodash/fp/pipe';\nimport qs from 'qs';\n\nimport { getCookieValue } from './cookies';\n\nimport type { errors } from '@strapi/utils';\n\nexport type ApiError =\n | errors.ApplicationError\n | errors.ForbiddenError\n | errors.NotFoundError\n | errors.NotImplementedError\n | errors.PaginationError\n | errors.PayloadTooLargeError\n | errors.PolicyError\n | errors.RateLimitError\n | errors.UnauthorizedError\n | errors.ValidationError\n | errors.YupValidationError;\n\nconst STORAGE_KEYS = {\n TOKEN: 'jwtToken',\n USER: 'userInfo',\n};\n\ntype FetchResponse<TData = any> = {\n data: TData;\n status?: number;\n};\n\ntype FetchOptions = {\n params?: any;\n signal?: AbortSignal;\n headers?: Record<string, string>;\n validateStatus?: ((status: number) => boolean) | null;\n};\n\ntype FetchConfig = {\n signal?: AbortSignal;\n};\n\ninterface ErrorResponse {\n data: {\n data?: any;\n error: ApiError & { status?: number };\n };\n}\n\nclass FetchError extends Error {\n public name: string;\n public message: string;\n public response?: ErrorResponse;\n public code?: number;\n public status?: number;\n\n constructor(message: string, response?: ErrorResponse) {\n super(message);\n this.name = 'FetchError';\n this.message = message;\n this.response = response;\n this.code = response?.data?.error?.status;\n this.status = response?.data?.error?.status;\n\n // Ensure correct stack trace in error object\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, FetchError);\n }\n }\n}\n\nconst isFetchError = (error: unknown): error is FetchError => {\n return error instanceof FetchError;\n};\n\nconst getToken = (): string | null => {\n const fromLocalStorage = localStorage.getItem(STORAGE_KEYS.TOKEN);\n if (fromLocalStorage) {\n return JSON.parse(fromLocalStorage);\n }\n\n const fromCookie = getCookieValue(STORAGE_KEYS.TOKEN);\n return fromCookie ?? null;\n};\n\ntype FetchClient = {\n get: <TData = any>(url: string, config?: FetchOptions) => Promise<FetchResponse<TData>>;\n put: <TData = any, TSend = any>(\n url: string,\n data?: TSend,\n config?: FetchOptions\n ) => Promise<FetchResponse<TData>>;\n post: <TData = any, TSend = any>(\n url: string,\n data?: TSend,\n config?: FetchOptions\n ) => Promise<FetchResponse<TData>>;\n del: <TData = any>(url: string, config?: FetchOptions) => Promise<FetchResponse<TData>>;\n};\n\n/**\n * @public\n * @param {FetchConfig} [defaultOptions={}] - Fetch Configs.\n * @returns {FetchClient} A fetch client object with methods for making HTTP requests.\n * @description This is an abstraction around the native fetch exposed by a function. It provides a simple interface to handle API calls\n * to the Strapi backend.\n * @example\n * ```tsx\n * import { getFetchClient } from '@strapi/admin/admin';\n *\n * const myFunct = () => {\n * const { get } = getFetchClient();\n * const requestURL = \"/some-endpoint\";\n *\n * const { data } = await get(requestURL);\n *\n * return data;\n * };\n * ```\n */\nconst getFetchClient = (defaultOptions: FetchConfig = {}): FetchClient => {\n const backendURL = window.strapi.backendURL;\n const defaultHeader = {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${getToken()}`,\n };\n\n const isFormDataRequest = (body: unknown) => body instanceof FormData;\n const addPrependingSlash = (url: string) => (url.charAt(0) !== '/' ? `/${url}` : url);\n\n // This regular expression matches a string that starts with either \"http://\" or \"https://\" or any other protocol name in lower case letters, followed by \"://\" and ends with anything else\n const hasProtocol = (url: string) => new RegExp('^(?:[a-z+]+:)?//', 'i').test(url);\n\n // Check if the url has a prepending slash, if not add a slash\n const normalizeUrl = (url: string) => (hasProtocol(url) ? url : addPrependingSlash(url));\n\n // Add a response interceptor to return the response\n const responseInterceptor = async <TData = any>(\n response: Response,\n validateStatus?: FetchOptions['validateStatus']\n ): Promise<FetchResponse<TData>> => {\n try {\n const result = await response.json();\n\n /**\n * validateStatus allows us to customize when a response should throw an error\n * In native Fetch API, a response is considered \"not ok\"\n * when the status code falls in the 200 to 299 (inclusive) range\n */\n if (!response.ok && result.error && !validateStatus?.(response.status)) {\n throw new FetchError(result.error.message, { data: result });\n }\n\n if (!response.ok && !validateStatus?.(response.status)) {\n throw new FetchError('Unknown Server Error');\n }\n\n return { data: result };\n } catch (error) {\n if (error instanceof SyntaxError && response.ok) {\n // Making sure that a SyntaxError doesn't throw if it's successful\n return { data: [], status: response.status } as FetchResponse<any>;\n } else {\n throw error;\n }\n }\n };\n\n const paramsSerializer =\n <Param = unknown>(params?: Param) =>\n (url: string) => {\n if (params) {\n if (typeof params === 'string') {\n return `${url}?${params}`;\n }\n\n /**\n * TODO V6: Encoding should be enabled in this step\n * So the rest of the app doesn't have to worry about it,\n * It's considered a breaking change because it impacts any API request, including the user's custom code\n */\n const serializedParams = qs.stringify(params, { encode: false });\n return `${url}?${serializedParams}`;\n }\n return url;\n };\n\n const addBaseUrl = (url: Parameters<typeof fetch>[0]) => {\n return `${backendURL}${url}`;\n };\n\n /**\n * We use the factory method because the options\n * are unique to the individual request\n */\n const makeCreateRequestUrl = (options?: FetchOptions) =>\n pipe(normalizeUrl, addBaseUrl, paramsSerializer(options?.params));\n\n const fetchClient: FetchClient = {\n get: async <TData>(url: string, options?: FetchOptions): Promise<FetchResponse<TData>> => {\n const headers = new Headers({\n ...defaultHeader,\n ...options?.headers,\n });\n /**\n * this applies all our transformations to the URL\n * - normalizing (making sure it has the correct slash)\n * - appending our BaseURL which comes from the window.strapi object\n * - serializing our params with QS\n */\n const createRequestUrl = makeCreateRequestUrl(options);\n const response = await fetch(createRequestUrl(url), {\n signal: options?.signal ?? defaultOptions.signal,\n method: 'GET',\n headers,\n });\n\n return responseInterceptor<TData>(response, options?.validateStatus);\n },\n post: async <TData, TSend = any>(\n url: string,\n data?: TSend,\n options?: FetchOptions\n ): Promise<FetchResponse<TData>> => {\n const headers = new Headers({\n ...defaultHeader,\n ...options?.headers,\n });\n\n const createRequestUrl = makeCreateRequestUrl(options);\n\n /**\n * we have to remove the Content-Type value if it was a formData request\n * the browser will automatically set the header value\n */\n if (isFormDataRequest(data)) {\n headers.delete('Content-Type');\n }\n\n const response = await fetch(createRequestUrl(url), {\n signal: options?.signal ?? defaultOptions.signal,\n method: 'POST',\n headers,\n body: isFormDataRequest(data) ? (data as FormData) : JSON.stringify(data),\n });\n return responseInterceptor<TData>(response, options?.validateStatus);\n },\n put: async <TData, TSend = any>(\n url: string,\n data?: TSend,\n options?: FetchOptions\n ): Promise<FetchResponse<TData>> => {\n const headers = new Headers({\n ...defaultHeader,\n ...options?.headers,\n });\n\n const createRequestUrl = makeCreateRequestUrl(options);\n\n /**\n * we have to remove the Content-Type value if it was a formData request\n * the browser will automatically set the header value\n */\n if (isFormDataRequest(data)) {\n headers.delete('Content-Type');\n }\n\n const response = await fetch(createRequestUrl(url), {\n signal: options?.signal ?? defaultOptions.signal,\n method: 'PUT',\n headers,\n body: isFormDataRequest(data) ? (data as FormData) : JSON.stringify(data),\n });\n\n return responseInterceptor<TData>(response, options?.validateStatus);\n },\n del: async <TData>(url: string, options?: FetchOptions): Promise<FetchResponse<TData>> => {\n const headers = new Headers({\n ...defaultHeader,\n ...options?.headers,\n });\n\n const createRequestUrl = makeCreateRequestUrl(options);\n const response = await fetch(createRequestUrl(url), {\n signal: options?.signal ?? defaultOptions.signal,\n method: 'DELETE',\n headers,\n });\n return responseInterceptor<TData>(response, options?.validateStatus);\n },\n };\n\n return fetchClient;\n};\n\nexport { getFetchClient, isFetchError, FetchError };\nexport type { FetchOptions, FetchResponse, FetchConfig, FetchClient, ErrorResponse };\n"],"names":["STORAGE_KEYS","TOKEN","USER","FetchError","Error","message","response","name","code","data","error","status","captureStackTrace","isFetchError","getToken","fromLocalStorage","localStorage","getItem","JSON","parse","fromCookie","getCookieValue","getFetchClient","defaultOptions","backendURL","window","strapi","defaultHeader","Accept","Authorization","isFormDataRequest","body","FormData","addPrependingSlash","url","charAt","hasProtocol","RegExp","test","normalizeUrl","responseInterceptor","validateStatus","result","json","ok","SyntaxError","paramsSerializer","params","serializedParams","qs","stringify","encode","addBaseUrl","makeCreateRequestUrl","options","pipe","fetchClient","get","headers","Headers","createRequestUrl","fetch","signal","method","post","delete","put","del"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getFetchClient.mjs","sources":["../../../../../admin/src/utils/getFetchClient.ts"],"sourcesContent":["import pipe from 'lodash/fp/pipe';\nimport qs from 'qs';\n\nimport { getCookieValue } from './cookies';\n\nimport type { errors } from '@strapi/utils';\n\nexport type ApiError =\n | errors.ApplicationError\n | errors.ForbiddenError\n | errors.NotFoundError\n | errors.NotImplementedError\n | errors.PaginationError\n | errors.PayloadTooLargeError\n | errors.PolicyError\n | errors.RateLimitError\n | errors.UnauthorizedError\n | errors.ValidationError\n | errors.YupValidationError;\n\nconst STORAGE_KEYS = {\n TOKEN: 'jwtToken',\n USER: 'userInfo',\n};\n\ntype FetchResponse<TData = any> = {\n data: TData;\n status?: number;\n};\n\ntype FetchOptions = {\n params?: any;\n signal?: AbortSignal;\n headers?: Record<string, string>;\n validateStatus?: ((status: number) => boolean) | null;\n};\n\ntype FetchConfig = {\n signal?: AbortSignal;\n};\n\ninterface ErrorResponse {\n data: {\n data?: any;\n error: ApiError & { status?: number };\n };\n}\n\nclass FetchError extends Error {\n public name: string;\n public message: string;\n public response?: ErrorResponse;\n public code?: number;\n public status?: number;\n\n constructor(message: string, response?: ErrorResponse) {\n super(message);\n this.name = 'FetchError';\n this.message = message;\n this.response = response;\n this.code = response?.data?.error?.status;\n this.status = response?.data?.error?.status;\n\n // Ensure correct stack trace in error object\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, FetchError);\n }\n }\n}\n\nconst isFetchError = (error: unknown): error is FetchError => {\n return error instanceof FetchError;\n};\n\nconst getToken = (): string | null => {\n const fromLocalStorage = localStorage.getItem(STORAGE_KEYS.TOKEN);\n if (fromLocalStorage) {\n return JSON.parse(fromLocalStorage);\n }\n\n const fromCookie = getCookieValue(STORAGE_KEYS.TOKEN);\n return fromCookie ?? null;\n};\n\ntype FetchClient = {\n get: <TData = any>(url: string, config?: FetchOptions) => Promise<FetchResponse<TData>>;\n put: <TData = any, TSend = any>(\n url: string,\n data?: TSend,\n config?: FetchOptions\n ) => Promise<FetchResponse<TData>>;\n post: <TData = any, TSend = any>(\n url: string,\n data?: TSend,\n config?: FetchOptions\n ) => Promise<FetchResponse<TData>>;\n del: <TData = any>(url: string, config?: FetchOptions) => Promise<FetchResponse<TData>>;\n};\n\n/**\n * @public\n * @param {FetchConfig} [defaultOptions={}] - Fetch Configs.\n * @returns {FetchClient} A fetch client object with methods for making HTTP requests.\n * @description This is an abstraction around the native fetch exposed by a function. It provides a simple interface to handle API calls\n * to the Strapi backend.\n * @example\n * ```tsx\n * import { getFetchClient } from '@strapi/admin/admin';\n *\n * const myFunct = () => {\n * const { get } = getFetchClient();\n * const requestURL = \"/some-endpoint\";\n *\n * const { data } = await get(requestURL);\n *\n * return data;\n * };\n * ```\n */\nconst getFetchClient = (defaultOptions: FetchConfig = {}): FetchClient => {\n const backendURL = window.strapi.backendURL;\n const defaultHeader = {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${getToken()}`,\n };\n\n const isFormDataRequest = (body: unknown) => body instanceof FormData;\n const addPrependingSlash = (url: string) => (url.charAt(0) !== '/' ? `/${url}` : url);\n\n // This regular expression matches a string that starts with either \"http://\" or \"https://\" or any other protocol name in lower case letters, followed by \"://\" and ends with anything else\n const hasProtocol = (url: string) => new RegExp('^(?:[a-z+]+:)?//', 'i').test(url);\n\n // Check if the url has a prepending slash, if not add a slash\n const normalizeUrl = (url: string) => (hasProtocol(url) ? url : addPrependingSlash(url));\n\n // Add a response interceptor to return the response\n const responseInterceptor = async <TData = any>(\n response: Response,\n validateStatus?: FetchOptions['validateStatus']\n ): Promise<FetchResponse<TData>> => {\n try {\n const result = await response.json();\n\n /**\n * validateStatus allows us to customize when a response should throw an error\n * In native Fetch API, a response is considered \"not ok\"\n * when the status code falls in the 200 to 299 (inclusive) range\n */\n if (!response.ok && result.error && !validateStatus?.(response.status)) {\n throw new FetchError(result.error.message, { data: result });\n }\n\n if (!response.ok && !validateStatus?.(response.status)) {\n throw new FetchError('Unknown Server Error');\n }\n\n return { data: result };\n } catch (error) {\n if (error instanceof SyntaxError && response.ok) {\n // Making sure that a SyntaxError doesn't throw if it's successful\n return { data: [], status: response.status } as FetchResponse<any>;\n } else {\n throw error;\n }\n }\n };\n\n const paramsSerializer =\n <Param = unknown>(params?: Param) =>\n (url: string) => {\n if (params) {\n if (typeof params === 'string') {\n return `${url}?${params}`;\n }\n\n /**\n * TODO V6: Encoding should be enabled in this step\n * So the rest of the app doesn't have to worry about it,\n * It's considered a breaking change because it impacts any API request, including the user's custom code\n */\n const serializedParams = qs.stringify(params, { encode: false });\n return `${url}?${serializedParams}`;\n }\n return url;\n };\n\n const addBaseUrl = (url: Parameters<typeof fetch>[0]) => {\n return `${backendURL}${url}`;\n };\n\n /**\n * We use the factory method because the options\n * are unique to the individual request\n */\n const makeCreateRequestUrl = (options?: FetchOptions) =>\n pipe(normalizeUrl, addBaseUrl, paramsSerializer(options?.params));\n\n const fetchClient: FetchClient = {\n get: async <TData>(url: string, options?: FetchOptions): Promise<FetchResponse<TData>> => {\n const headers = new Headers({\n ...defaultHeader,\n ...options?.headers,\n });\n /**\n * this applies all our transformations to the URL\n * - normalizing (making sure it has the correct slash)\n * - appending our BaseURL which comes from the window.strapi object\n * - serializing our params with QS\n */\n const createRequestUrl = makeCreateRequestUrl(options);\n const response = await fetch(createRequestUrl(url), {\n signal: options?.signal ?? defaultOptions.signal,\n method: 'GET',\n headers,\n });\n\n return responseInterceptor<TData>(response, options?.validateStatus);\n },\n post: async <TData, TSend = any>(\n url: string,\n data?: TSend,\n options?: FetchOptions\n ): Promise<FetchResponse<TData>> => {\n const headers = new Headers({\n ...defaultHeader,\n ...options?.headers,\n });\n\n const createRequestUrl = makeCreateRequestUrl(options);\n\n /**\n * we have to remove the Content-Type value if it was a formData request\n * the browser will automatically set the header value\n */\n if (isFormDataRequest(data)) {\n headers.delete('Content-Type');\n }\n\n const response = await fetch(createRequestUrl(url), {\n signal: options?.signal ?? defaultOptions.signal,\n method: 'POST',\n headers,\n body: isFormDataRequest(data) ? (data as FormData) : JSON.stringify(data),\n });\n return responseInterceptor<TData>(response, options?.validateStatus);\n },\n put: async <TData, TSend = any>(\n url: string,\n data?: TSend,\n options?: FetchOptions\n ): Promise<FetchResponse<TData>> => {\n const headers = new Headers({\n ...defaultHeader,\n ...options?.headers,\n });\n\n const createRequestUrl = makeCreateRequestUrl(options);\n\n /**\n * we have to remove the Content-Type value if it was a formData request\n * the browser will automatically set the header value\n */\n if (isFormDataRequest(data)) {\n headers.delete('Content-Type');\n }\n\n const response = await fetch(createRequestUrl(url), {\n signal: options?.signal ?? defaultOptions.signal,\n method: 'PUT',\n headers,\n body: isFormDataRequest(data) ? (data as FormData) : JSON.stringify(data),\n });\n\n return responseInterceptor<TData>(response, options?.validateStatus);\n },\n del: async <TData>(url: string, options?: FetchOptions): Promise<FetchResponse<TData>> => {\n const headers = new Headers({\n ...defaultHeader,\n ...options?.headers,\n });\n\n const createRequestUrl = makeCreateRequestUrl(options);\n const response = await fetch(createRequestUrl(url), {\n signal: options?.signal ?? defaultOptions.signal,\n method: 'DELETE',\n headers,\n });\n return responseInterceptor<TData>(response, options?.validateStatus);\n },\n };\n\n return fetchClient;\n};\n\nexport { getFetchClient, isFetchError, FetchError };\nexport type { FetchOptions, FetchResponse, FetchConfig, FetchClient, ErrorResponse };\n"],"names":["STORAGE_KEYS","TOKEN","USER","FetchError","Error","constructor","message","response","name","code","data","error","status","captureStackTrace","isFetchError","getToken","fromLocalStorage","localStorage","getItem","JSON","parse","fromCookie","getCookieValue","getFetchClient","defaultOptions","backendURL","window","strapi","defaultHeader","Accept","Authorization","isFormDataRequest","body","FormData","addPrependingSlash","url","charAt","hasProtocol","RegExp","test","normalizeUrl","responseInterceptor","validateStatus","result","json","ok","SyntaxError","paramsSerializer","params","serializedParams","qs","stringify","encode","addBaseUrl","makeCreateRequestUrl","options","pipe","fetchClient","get","headers","Headers","createRequestUrl","fetch","signal","method","post","delete","put","del"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"getFetchClient.mjs","sources":["../../../../../admin/src/utils/getFetchClient.ts"],"sourcesContent":["import pipe from 'lodash/fp/pipe';\nimport qs from 'qs';\n\nimport { getCookieValue } from './cookies';\n\nimport type { errors } from '@strapi/utils';\n\nexport type ApiError =\n | errors.ApplicationError\n | errors.ForbiddenError\n | errors.NotFoundError\n | errors.NotImplementedError\n | errors.PaginationError\n | errors.PayloadTooLargeError\n | errors.PolicyError\n | errors.RateLimitError\n | errors.UnauthorizedError\n | errors.ValidationError\n | errors.YupValidationError;\n\nconst STORAGE_KEYS = {\n TOKEN: 'jwtToken',\n USER: 'userInfo',\n};\n\ntype FetchResponse<TData = any> = {\n data: TData;\n status?: number;\n};\n\ntype FetchOptions = {\n params?: any;\n signal?: AbortSignal;\n headers?: Record<string, string>;\n validateStatus?: ((status: number) => boolean) | null;\n};\n\ntype FetchConfig = {\n signal?: AbortSignal;\n};\n\ninterface ErrorResponse {\n data: {\n data?: any;\n error: ApiError & { status?: number };\n };\n}\n\nclass FetchError extends Error {\n public name: string;\n public message: string;\n public response?: ErrorResponse;\n public code?: number;\n public status?: number;\n\n constructor(message: string, response?: ErrorResponse) {\n super(message);\n this.name = 'FetchError';\n this.message = message;\n this.response = response;\n this.code = response?.data?.error?.status;\n this.status = response?.data?.error?.status;\n\n // Ensure correct stack trace in error object\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, FetchError);\n }\n }\n}\n\nconst isFetchError = (error: unknown): error is FetchError => {\n return error instanceof FetchError;\n};\n\nconst getToken = (): string | null => {\n const fromLocalStorage = localStorage.getItem(STORAGE_KEYS.TOKEN);\n if (fromLocalStorage) {\n return JSON.parse(fromLocalStorage);\n }\n\n const fromCookie = getCookieValue(STORAGE_KEYS.TOKEN);\n return fromCookie ?? null;\n};\n\ntype FetchClient = {\n get: <TData = any>(url: string, config?: FetchOptions) => Promise<FetchResponse<TData>>;\n put: <TData = any, TSend = any>(\n url: string,\n data?: TSend,\n config?: FetchOptions\n ) => Promise<FetchResponse<TData>>;\n post: <TData = any, TSend = any>(\n url: string,\n data?: TSend,\n config?: FetchOptions\n ) => Promise<FetchResponse<TData>>;\n del: <TData = any>(url: string, config?: FetchOptions) => Promise<FetchResponse<TData>>;\n};\n\n/**\n * @public\n * @param {FetchConfig} [defaultOptions={}] - Fetch Configs.\n * @returns {FetchClient} A fetch client object with methods for making HTTP requests.\n * @description This is an abstraction around the native fetch exposed by a function. It provides a simple interface to handle API calls\n * to the Strapi backend.\n * @example\n * ```tsx\n * import { getFetchClient } from '@strapi/admin/admin';\n *\n * const myFunct = () => {\n * const { get } = getFetchClient();\n * const requestURL = \"/some-endpoint\";\n *\n * const { data } = await get(requestURL);\n *\n * return data;\n * };\n * ```\n */\nconst getFetchClient = (defaultOptions: FetchConfig = {}): FetchClient => {\n const backendURL = window.strapi.backendURL;\n const defaultHeader = {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${getToken()}`,\n };\n\n const isFormDataRequest = (body: unknown) => body instanceof FormData;\n const addPrependingSlash = (url: string) => (url.charAt(0) !== '/' ? `/${url}` : url);\n\n // This regular expression matches a string that starts with either \"http://\" or \"https://\" or any other protocol name in lower case letters, followed by \"://\" and ends with anything else\n const hasProtocol = (url: string) => new RegExp('^(?:[a-z+]+:)?//', 'i').test(url);\n\n // Check if the url has a prepending slash, if not add a slash\n const normalizeUrl = (url: string) => (hasProtocol(url) ? url : addPrependingSlash(url));\n\n // Add a response interceptor to return the response\n const responseInterceptor = async <TData = any>(\n response: Response,\n validateStatus?: FetchOptions['validateStatus']\n ): Promise<FetchResponse<TData>> => {\n try {\n const result = await response.json();\n\n /**\n * validateStatus allows us to customize when a response should throw an error\n * In native Fetch API, a response is considered \"not ok\"\n * when the status code falls in the 200 to 299 (inclusive) range\n */\n if (!response.ok && result.error && !validateStatus?.(response.status)) {\n throw new FetchError(result.error.message, { data: result });\n }\n\n if (!response.ok && !validateStatus?.(response.status)) {\n throw new FetchError('Unknown Server Error');\n }\n\n return { data: result };\n } catch (error) {\n if (error instanceof SyntaxError && response.ok) {\n // Making sure that a SyntaxError doesn't throw if it's successful\n return { data: [], status: response.status } as FetchResponse<any>;\n } else {\n throw error;\n }\n }\n };\n\n const paramsSerializer =\n <Param = unknown>(params?: Param) =>\n (url: string) => {\n if (params) {\n if (typeof params === 'string') {\n return `${url}?${params}`;\n }\n\n /**\n * TODO V6: Encoding should be enabled in this step\n * So the rest of the app doesn't have to worry about it,\n * It's considered a breaking change because it impacts any API request, including the user's custom code\n */\n const serializedParams = qs.stringify(params, { encode: false });\n return `${url}?${serializedParams}`;\n }\n return url;\n };\n\n const addBaseUrl = (url: Parameters<typeof fetch>[0]) => {\n return `${backendURL}${url}`;\n };\n\n /**\n * We use the factory method because the options\n * are unique to the individual request\n */\n const makeCreateRequestUrl = (options?: FetchOptions) =>\n pipe(normalizeUrl, addBaseUrl, paramsSerializer(options?.params));\n\n const fetchClient: FetchClient = {\n get: async <TData>(url: string, options?: FetchOptions): Promise<FetchResponse<TData>> => {\n const headers = new Headers({\n ...defaultHeader,\n ...options?.headers,\n });\n /**\n * this applies all our transformations to the URL\n * - normalizing (making sure it has the correct slash)\n * - appending our BaseURL which comes from the window.strapi object\n * - serializing our params with QS\n */\n const createRequestUrl = makeCreateRequestUrl(options);\n const response = await fetch(createRequestUrl(url), {\n signal: options?.signal ?? defaultOptions.signal,\n method: 'GET',\n headers,\n });\n\n return responseInterceptor<TData>(response, options?.validateStatus);\n },\n post: async <TData, TSend = any>(\n url: string,\n data?: TSend,\n options?: FetchOptions\n ): Promise<FetchResponse<TData>> => {\n const headers = new Headers({\n ...defaultHeader,\n ...options?.headers,\n });\n\n const createRequestUrl = makeCreateRequestUrl(options);\n\n /**\n * we have to remove the Content-Type value if it was a formData request\n * the browser will automatically set the header value\n */\n if (isFormDataRequest(data)) {\n headers.delete('Content-Type');\n }\n\n const response = await fetch(createRequestUrl(url), {\n signal: options?.signal ?? defaultOptions.signal,\n method: 'POST',\n headers,\n body: isFormDataRequest(data) ? (data as FormData) : JSON.stringify(data),\n });\n return responseInterceptor<TData>(response, options?.validateStatus);\n },\n put: async <TData, TSend = any>(\n url: string,\n data?: TSend,\n options?: FetchOptions\n ): Promise<FetchResponse<TData>> => {\n const headers = new Headers({\n ...defaultHeader,\n ...options?.headers,\n });\n\n const createRequestUrl = makeCreateRequestUrl(options);\n\n /**\n * we have to remove the Content-Type value if it was a formData request\n * the browser will automatically set the header value\n */\n if (isFormDataRequest(data)) {\n headers.delete('Content-Type');\n }\n\n const response = await fetch(createRequestUrl(url), {\n signal: options?.signal ?? defaultOptions.signal,\n method: 'PUT',\n headers,\n body: isFormDataRequest(data) ? (data as FormData) : JSON.stringify(data),\n });\n\n return responseInterceptor<TData>(response, options?.validateStatus);\n },\n del: async <TData>(url: string, options?: FetchOptions): Promise<FetchResponse<TData>> => {\n const headers = new Headers({\n ...defaultHeader,\n ...options?.headers,\n });\n\n const createRequestUrl = makeCreateRequestUrl(options);\n const response = await fetch(createRequestUrl(url), {\n signal: options?.signal ?? defaultOptions.signal,\n method: 'DELETE',\n headers,\n });\n return responseInterceptor<TData>(response, options?.validateStatus);\n },\n };\n\n return fetchClient;\n};\n\nexport { getFetchClient, isFetchError, FetchError };\nexport type { FetchOptions, FetchResponse, FetchConfig, FetchClient, ErrorResponse };\n"],"names":["STORAGE_KEYS","TOKEN","USER","FetchError","Error","message","response","name","code","data","error","status","captureStackTrace","isFetchError","getToken","fromLocalStorage","localStorage","getItem","JSON","parse","fromCookie","getCookieValue","getFetchClient","defaultOptions","backendURL","window","strapi","defaultHeader","Accept","Authorization","isFormDataRequest","body","FormData","addPrependingSlash","url","charAt","hasProtocol","RegExp","test","normalizeUrl","responseInterceptor","validateStatus","result","json","ok","SyntaxError","paramsSerializer","params","serializedParams","qs","stringify","encode","addBaseUrl","makeCreateRequestUrl","options","pipe","fetchClient","get","headers","Headers","createRequestUrl","fetch","signal","method","post","delete","put","del"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getPrefixedId.js","sources":["../../../../../admin/src/utils/getPrefixedId.ts"],"sourcesContent":["/**\n * Prefix message with 'apiError.'\n */\nexport function getPrefixedId(message: string, callback?: (prefixedMessage: string) => string) {\n const prefixedMessage = `apiError.${message}`;\n\n // if a prefix function has been passed in it is used to\n // prefix the id, e.g. to allow an error message to be\n // set only for a localization namespace\n if (typeof callback === 'function') {\n return callback(prefixedMessage);\n }\n\n return prefixedMessage;\n}\n"],"names":["getPrefixedId","message","callback","prefixedMessage"],"mappings":";;AAAA;;AAEC,IACM,SAASA,aAAcC,CAAAA,OAAe,EAAEC,QAA8C,EAAA;AAC3F,IAAA,MAAMC,eAAkB,GAAA,CAAC,SAAS,EAAEF,
|
|
1
|
+
{"version":3,"file":"getPrefixedId.js","sources":["../../../../../admin/src/utils/getPrefixedId.ts"],"sourcesContent":["/**\n * Prefix message with 'apiError.'\n */\nexport function getPrefixedId(message: string, callback?: (prefixedMessage: string) => string) {\n const prefixedMessage = `apiError.${message}`;\n\n // if a prefix function has been passed in it is used to\n // prefix the id, e.g. to allow an error message to be\n // set only for a localization namespace\n if (typeof callback === 'function') {\n return callback(prefixedMessage);\n }\n\n return prefixedMessage;\n}\n"],"names":["getPrefixedId","message","callback","prefixedMessage"],"mappings":";;AAAA;;AAEC,IACM,SAASA,aAAcC,CAAAA,OAAe,EAAEC,QAA8C,EAAA;AAC3F,IAAA,MAAMC,eAAkB,GAAA,CAAC,SAAS,EAAEF,OAAS,CAAA,CAAA;;;;IAK7C,IAAI,OAAOC,aAAa,UAAY,EAAA;AAClC,QAAA,OAAOA,QAASC,CAAAA,eAAAA,CAAAA;AAClB;IAEA,OAAOA,eAAAA;AACT;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getPrefixedId.mjs","sources":["../../../../../admin/src/utils/getPrefixedId.ts"],"sourcesContent":["/**\n * Prefix message with 'apiError.'\n */\nexport function getPrefixedId(message: string, callback?: (prefixedMessage: string) => string) {\n const prefixedMessage = `apiError.${message}`;\n\n // if a prefix function has been passed in it is used to\n // prefix the id, e.g. to allow an error message to be\n // set only for a localization namespace\n if (typeof callback === 'function') {\n return callback(prefixedMessage);\n }\n\n return prefixedMessage;\n}\n"],"names":["getPrefixedId","message","callback","prefixedMessage"],"mappings":"AAAA;;AAEC,IACM,SAASA,aAAcC,CAAAA,OAAe,EAAEC,QAA8C,EAAA;AAC3F,IAAA,MAAMC,eAAkB,GAAA,CAAC,SAAS,EAAEF,
|
|
1
|
+
{"version":3,"file":"getPrefixedId.mjs","sources":["../../../../../admin/src/utils/getPrefixedId.ts"],"sourcesContent":["/**\n * Prefix message with 'apiError.'\n */\nexport function getPrefixedId(message: string, callback?: (prefixedMessage: string) => string) {\n const prefixedMessage = `apiError.${message}`;\n\n // if a prefix function has been passed in it is used to\n // prefix the id, e.g. to allow an error message to be\n // set only for a localization namespace\n if (typeof callback === 'function') {\n return callback(prefixedMessage);\n }\n\n return prefixedMessage;\n}\n"],"names":["getPrefixedId","message","callback","prefixedMessage"],"mappings":"AAAA;;AAEC,IACM,SAASA,aAAcC,CAAAA,OAAe,EAAEC,QAA8C,EAAA;AAC3F,IAAA,MAAMC,eAAkB,GAAA,CAAC,SAAS,EAAEF,OAAS,CAAA,CAAA;;;;IAK7C,IAAI,OAAOC,aAAa,UAAY,EAAA;AAClC,QAAA,OAAOA,QAASC,CAAAA,eAAAA,CAAAA;AAClB;IAEA,OAAOA,eAAAA;AACT;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rulesEngine.js","sources":["../../../../../admin/src/utils/rulesEngine.ts"],"sourcesContent":["import jsonLogic from 'json-logic-js';\nimport { z } from 'zod';\n\nexport const ConditionSchema = z.object({\n dependsOn: z.string().min(1),\n operator: z.enum(['is', 'isNot']),\n value: z.union([z.string(), z.number(), z.boolean()]),\n});\n\nexport type Condition = z.infer<typeof ConditionSchema>;\nexport type JsonLogicCondition = jsonLogic.RulesLogic<jsonLogic.AdditionalOperation>;\nexport type RulesEngine = {\n generate: (condition: Condition) => JsonLogicCondition;\n validate: (condition: Condition) => void;\n evaluate: (condition: JsonLogicCondition, data: unknown) => boolean;\n};\n\nexport function createRulesEngine(): RulesEngine {\n /**\n * Transforms a high-level `Condition` object into a JSON Logic-compatible condition.\n *\n * Converts operators like 'is' and 'isNot' into their JSON Logic equivalents ('==' and '!=').\n * Throws an error if the operator is not supported.\n *\n * @param condition - The condition object to convert.\n * @returns A JSON Logic AST representing the condition.\n * @throws {Error} If the operator is not recognized.\n */\n const generate = (condition: Condition): JsonLogicCondition => {\n const { dependsOn, operator, value } = condition;\n const operatorsMap = {\n is: '==',\n isNot: '!=',\n };\n if (!operatorsMap[operator]) {\n throw new Error(`Invalid operator: ${operator}`);\n }\n return { [operatorsMap[operator]]: [{ var: dependsOn }, value] };\n };\n\n /**\n * Validates a condition object against the `ConditionSchema`.\n *\n * Ensures that the condition adheres to the expected structure and types.\n *\n * @param condition - The condition object to validate.\n * @throws {ZodError} If the condition is invalid.\n */\n const validate = (condition: Condition) => {\n ConditionSchema.parse(condition);\n };\n\n /**\n * Evaluates a JSON Logic condition against provided data.\n * @throws {Error} If the condition is invalid.\n */\n const evaluate = (\n condition: jsonLogic.RulesLogic<jsonLogic.AdditionalOperation>,\n data: unknown\n ): boolean => {\n try {\n return jsonLogic.apply(condition, data);\n } catch (err: any) {\n throw new Error(`Invalid condition: ${err.message}`);\n }\n };\n\n return {\n generate,\n validate,\n evaluate,\n };\n}\n"],"names":["ConditionSchema","z","object","dependsOn","string","min","operator","enum","value","union","number","boolean","createRulesEngine","generate","condition","operatorsMap","is","isNot","Error","var","validate","parse","evaluate","data","jsonLogic","apply","err","message"],"mappings":";;;;;AAGaA,MAAAA,eAAAA,GAAkBC,KAAEC,CAAAA,MAAM,CAAC;AACtCC,IAAAA,SAAAA,EAAWF,KAAEG,CAAAA,MAAM,EAAGC,CAAAA,GAAG,CAAC,CAAA,CAAA;IAC1BC,QAAUL,EAAAA,KAAAA,CAAEM,IAAI,CAAC;AAAC,QAAA,IAAA;AAAM,QAAA;AAAQ,KAAA,CAAA;IAChCC,KAAOP,EAAAA,KAAAA,CAAEQ,KAAK,CAAC;AAACR,QAAAA,KAAAA,CAAEG,MAAM,EAAA;AAAIH,QAAAA,KAAAA,CAAES,MAAM,EAAA;AAAIT,QAAAA,KAAAA,CAAEU,OAAO;AAAG,KAAA;AACtD,CAAG;AAUI,SAASC,iBAAAA,GAAAA;AACd;;;;;;;;;MAUA,MAAMC,WAAW,CAACC,SAAAA,GAAAA;AAChB,QAAA,MAAM,EAAEX,SAAS,EAAEG,QAAQ,EAAEE,KAAK,EAAE,GAAGM,SAAAA;AACvC,QAAA,MAAMC,YAAe,GAAA;YACnBC,EAAI,EAAA,IAAA;YACJC,KAAO,EAAA;AACT,SAAA;AACA,QAAA,IAAI,CAACF,YAAY,CAACT,QAAAA,CAAS,EAAE;AAC3B,YAAA,MAAM,IAAIY,
|
|
1
|
+
{"version":3,"file":"rulesEngine.js","sources":["../../../../../admin/src/utils/rulesEngine.ts"],"sourcesContent":["import jsonLogic from 'json-logic-js';\nimport { z } from 'zod';\n\nexport const ConditionSchema = z.object({\n dependsOn: z.string().min(1),\n operator: z.enum(['is', 'isNot']),\n value: z.union([z.string(), z.number(), z.boolean()]),\n});\n\nexport type Condition = z.infer<typeof ConditionSchema>;\nexport type JsonLogicCondition = jsonLogic.RulesLogic<jsonLogic.AdditionalOperation>;\nexport type RulesEngine = {\n generate: (condition: Condition) => JsonLogicCondition;\n validate: (condition: Condition) => void;\n evaluate: (condition: JsonLogicCondition, data: unknown) => boolean;\n};\n\nexport function createRulesEngine(): RulesEngine {\n /**\n * Transforms a high-level `Condition` object into a JSON Logic-compatible condition.\n *\n * Converts operators like 'is' and 'isNot' into their JSON Logic equivalents ('==' and '!=').\n * Throws an error if the operator is not supported.\n *\n * @param condition - The condition object to convert.\n * @returns A JSON Logic AST representing the condition.\n * @throws {Error} If the operator is not recognized.\n */\n const generate = (condition: Condition): JsonLogicCondition => {\n const { dependsOn, operator, value } = condition;\n const operatorsMap = {\n is: '==',\n isNot: '!=',\n };\n if (!operatorsMap[operator]) {\n throw new Error(`Invalid operator: ${operator}`);\n }\n return { [operatorsMap[operator]]: [{ var: dependsOn }, value] };\n };\n\n /**\n * Validates a condition object against the `ConditionSchema`.\n *\n * Ensures that the condition adheres to the expected structure and types.\n *\n * @param condition - The condition object to validate.\n * @throws {ZodError} If the condition is invalid.\n */\n const validate = (condition: Condition) => {\n ConditionSchema.parse(condition);\n };\n\n /**\n * Evaluates a JSON Logic condition against provided data.\n * @throws {Error} If the condition is invalid.\n */\n const evaluate = (\n condition: jsonLogic.RulesLogic<jsonLogic.AdditionalOperation>,\n data: unknown\n ): boolean => {\n try {\n return jsonLogic.apply(condition, data);\n } catch (err: any) {\n throw new Error(`Invalid condition: ${err.message}`);\n }\n };\n\n return {\n generate,\n validate,\n evaluate,\n };\n}\n"],"names":["ConditionSchema","z","object","dependsOn","string","min","operator","enum","value","union","number","boolean","createRulesEngine","generate","condition","operatorsMap","is","isNot","Error","var","validate","parse","evaluate","data","jsonLogic","apply","err","message"],"mappings":";;;;;AAGaA,MAAAA,eAAAA,GAAkBC,KAAEC,CAAAA,MAAM,CAAC;AACtCC,IAAAA,SAAAA,EAAWF,KAAEG,CAAAA,MAAM,EAAGC,CAAAA,GAAG,CAAC,CAAA,CAAA;IAC1BC,QAAUL,EAAAA,KAAAA,CAAEM,IAAI,CAAC;AAAC,QAAA,IAAA;AAAM,QAAA;AAAQ,KAAA,CAAA;IAChCC,KAAOP,EAAAA,KAAAA,CAAEQ,KAAK,CAAC;AAACR,QAAAA,KAAAA,CAAEG,MAAM,EAAA;AAAIH,QAAAA,KAAAA,CAAES,MAAM,EAAA;AAAIT,QAAAA,KAAAA,CAAEU,OAAO;AAAG,KAAA;AACtD,CAAG;AAUI,SAASC,iBAAAA,GAAAA;AACd;;;;;;;;;MAUA,MAAMC,WAAW,CAACC,SAAAA,GAAAA;AAChB,QAAA,MAAM,EAAEX,SAAS,EAAEG,QAAQ,EAAEE,KAAK,EAAE,GAAGM,SAAAA;AACvC,QAAA,MAAMC,YAAe,GAAA;YACnBC,EAAI,EAAA,IAAA;YACJC,KAAO,EAAA;AACT,SAAA;AACA,QAAA,IAAI,CAACF,YAAY,CAACT,QAAAA,CAAS,EAAE;AAC3B,YAAA,MAAM,IAAIY,KAAAA,CAAM,CAAC,kBAAkB,EAAEZ,QAAU,CAAA,CAAA,CAAA;AACjD;QACA,OAAO;AAAE,YAAA,CAACS,YAAY,CAACT,QAAS,CAAA,GAAG;AAAC,gBAAA;oBAAEa,GAAKhB,EAAAA;AAAU,iBAAA;AAAGK,gBAAAA;AAAM;AAAC,SAAA;AACjE,KAAA;AAEA;;;;;;;MAQA,MAAMY,WAAW,CAACN,SAAAA,GAAAA;AAChBd,QAAAA,eAAAA,CAAgBqB,KAAK,CAACP,SAAAA,CAAAA;AACxB,KAAA;AAEA;;;MAIA,MAAMQ,QAAW,GAAA,CACfR,SACAS,EAAAA,IAAAA,GAAAA;QAEA,IAAI;YACF,OAAOC,SAAAA,CAAUC,KAAK,CAACX,SAAWS,EAAAA,IAAAA,CAAAA;AACpC,SAAA,CAAE,OAAOG,GAAU,EAAA;AACjB,YAAA,MAAM,IAAIR,KAAM,CAAA,CAAC,mBAAmB,EAAEQ,GAAAA,CAAIC,OAAO,CAAE,CAAA,CAAA;AACrD;AACF,KAAA;IAEA,OAAO;AACLd,QAAAA,QAAAA;AACAO,QAAAA,QAAAA;AACAE,QAAAA;AACF,KAAA;AACF;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rulesEngine.mjs","sources":["../../../../../admin/src/utils/rulesEngine.ts"],"sourcesContent":["import jsonLogic from 'json-logic-js';\nimport { z } from 'zod';\n\nexport const ConditionSchema = z.object({\n dependsOn: z.string().min(1),\n operator: z.enum(['is', 'isNot']),\n value: z.union([z.string(), z.number(), z.boolean()]),\n});\n\nexport type Condition = z.infer<typeof ConditionSchema>;\nexport type JsonLogicCondition = jsonLogic.RulesLogic<jsonLogic.AdditionalOperation>;\nexport type RulesEngine = {\n generate: (condition: Condition) => JsonLogicCondition;\n validate: (condition: Condition) => void;\n evaluate: (condition: JsonLogicCondition, data: unknown) => boolean;\n};\n\nexport function createRulesEngine(): RulesEngine {\n /**\n * Transforms a high-level `Condition` object into a JSON Logic-compatible condition.\n *\n * Converts operators like 'is' and 'isNot' into their JSON Logic equivalents ('==' and '!=').\n * Throws an error if the operator is not supported.\n *\n * @param condition - The condition object to convert.\n * @returns A JSON Logic AST representing the condition.\n * @throws {Error} If the operator is not recognized.\n */\n const generate = (condition: Condition): JsonLogicCondition => {\n const { dependsOn, operator, value } = condition;\n const operatorsMap = {\n is: '==',\n isNot: '!=',\n };\n if (!operatorsMap[operator]) {\n throw new Error(`Invalid operator: ${operator}`);\n }\n return { [operatorsMap[operator]]: [{ var: dependsOn }, value] };\n };\n\n /**\n * Validates a condition object against the `ConditionSchema`.\n *\n * Ensures that the condition adheres to the expected structure and types.\n *\n * @param condition - The condition object to validate.\n * @throws {ZodError} If the condition is invalid.\n */\n const validate = (condition: Condition) => {\n ConditionSchema.parse(condition);\n };\n\n /**\n * Evaluates a JSON Logic condition against provided data.\n * @throws {Error} If the condition is invalid.\n */\n const evaluate = (\n condition: jsonLogic.RulesLogic<jsonLogic.AdditionalOperation>,\n data: unknown\n ): boolean => {\n try {\n return jsonLogic.apply(condition, data);\n } catch (err: any) {\n throw new Error(`Invalid condition: ${err.message}`);\n }\n };\n\n return {\n generate,\n validate,\n evaluate,\n };\n}\n"],"names":["ConditionSchema","z","object","dependsOn","string","min","operator","enum","value","union","number","boolean","createRulesEngine","generate","condition","operatorsMap","is","isNot","Error","var","validate","parse","evaluate","data","jsonLogic","apply","err","message"],"mappings":";;;AAGaA,MAAAA,eAAAA,GAAkBC,CAAEC,CAAAA,MAAM,CAAC;AACtCC,IAAAA,SAAAA,EAAWF,CAAEG,CAAAA,MAAM,EAAGC,CAAAA,GAAG,CAAC,CAAA,CAAA;IAC1BC,QAAUL,EAAAA,CAAAA,CAAEM,IAAI,CAAC;AAAC,QAAA,IAAA;AAAM,QAAA;AAAQ,KAAA,CAAA;IAChCC,KAAOP,EAAAA,CAAAA,CAAEQ,KAAK,CAAC;AAACR,QAAAA,CAAAA,CAAEG,MAAM,EAAA;AAAIH,QAAAA,CAAAA,CAAES,MAAM,EAAA;AAAIT,QAAAA,CAAAA,CAAEU,OAAO;AAAG,KAAA;AACtD,CAAG;AAUI,SAASC,iBAAAA,GAAAA;AACd;;;;;;;;;MAUA,MAAMC,WAAW,CAACC,SAAAA,GAAAA;AAChB,QAAA,MAAM,EAAEX,SAAS,EAAEG,QAAQ,EAAEE,KAAK,EAAE,GAAGM,SAAAA;AACvC,QAAA,MAAMC,YAAe,GAAA;YACnBC,EAAI,EAAA,IAAA;YACJC,KAAO,EAAA;AACT,SAAA;AACA,QAAA,IAAI,CAACF,YAAY,CAACT,QAAAA,CAAS,EAAE;AAC3B,YAAA,MAAM,IAAIY,
|
|
1
|
+
{"version":3,"file":"rulesEngine.mjs","sources":["../../../../../admin/src/utils/rulesEngine.ts"],"sourcesContent":["import jsonLogic from 'json-logic-js';\nimport { z } from 'zod';\n\nexport const ConditionSchema = z.object({\n dependsOn: z.string().min(1),\n operator: z.enum(['is', 'isNot']),\n value: z.union([z.string(), z.number(), z.boolean()]),\n});\n\nexport type Condition = z.infer<typeof ConditionSchema>;\nexport type JsonLogicCondition = jsonLogic.RulesLogic<jsonLogic.AdditionalOperation>;\nexport type RulesEngine = {\n generate: (condition: Condition) => JsonLogicCondition;\n validate: (condition: Condition) => void;\n evaluate: (condition: JsonLogicCondition, data: unknown) => boolean;\n};\n\nexport function createRulesEngine(): RulesEngine {\n /**\n * Transforms a high-level `Condition` object into a JSON Logic-compatible condition.\n *\n * Converts operators like 'is' and 'isNot' into their JSON Logic equivalents ('==' and '!=').\n * Throws an error if the operator is not supported.\n *\n * @param condition - The condition object to convert.\n * @returns A JSON Logic AST representing the condition.\n * @throws {Error} If the operator is not recognized.\n */\n const generate = (condition: Condition): JsonLogicCondition => {\n const { dependsOn, operator, value } = condition;\n const operatorsMap = {\n is: '==',\n isNot: '!=',\n };\n if (!operatorsMap[operator]) {\n throw new Error(`Invalid operator: ${operator}`);\n }\n return { [operatorsMap[operator]]: [{ var: dependsOn }, value] };\n };\n\n /**\n * Validates a condition object against the `ConditionSchema`.\n *\n * Ensures that the condition adheres to the expected structure and types.\n *\n * @param condition - The condition object to validate.\n * @throws {ZodError} If the condition is invalid.\n */\n const validate = (condition: Condition) => {\n ConditionSchema.parse(condition);\n };\n\n /**\n * Evaluates a JSON Logic condition against provided data.\n * @throws {Error} If the condition is invalid.\n */\n const evaluate = (\n condition: jsonLogic.RulesLogic<jsonLogic.AdditionalOperation>,\n data: unknown\n ): boolean => {\n try {\n return jsonLogic.apply(condition, data);\n } catch (err: any) {\n throw new Error(`Invalid condition: ${err.message}`);\n }\n };\n\n return {\n generate,\n validate,\n evaluate,\n };\n}\n"],"names":["ConditionSchema","z","object","dependsOn","string","min","operator","enum","value","union","number","boolean","createRulesEngine","generate","condition","operatorsMap","is","isNot","Error","var","validate","parse","evaluate","data","jsonLogic","apply","err","message"],"mappings":";;;AAGaA,MAAAA,eAAAA,GAAkBC,CAAEC,CAAAA,MAAM,CAAC;AACtCC,IAAAA,SAAAA,EAAWF,CAAEG,CAAAA,MAAM,EAAGC,CAAAA,GAAG,CAAC,CAAA,CAAA;IAC1BC,QAAUL,EAAAA,CAAAA,CAAEM,IAAI,CAAC;AAAC,QAAA,IAAA;AAAM,QAAA;AAAQ,KAAA,CAAA;IAChCC,KAAOP,EAAAA,CAAAA,CAAEQ,KAAK,CAAC;AAACR,QAAAA,CAAAA,CAAEG,MAAM,EAAA;AAAIH,QAAAA,CAAAA,CAAES,MAAM,EAAA;AAAIT,QAAAA,CAAAA,CAAEU,OAAO;AAAG,KAAA;AACtD,CAAG;AAUI,SAASC,iBAAAA,GAAAA;AACd;;;;;;;;;MAUA,MAAMC,WAAW,CAACC,SAAAA,GAAAA;AAChB,QAAA,MAAM,EAAEX,SAAS,EAAEG,QAAQ,EAAEE,KAAK,EAAE,GAAGM,SAAAA;AACvC,QAAA,MAAMC,YAAe,GAAA;YACnBC,EAAI,EAAA,IAAA;YACJC,KAAO,EAAA;AACT,SAAA;AACA,QAAA,IAAI,CAACF,YAAY,CAACT,QAAAA,CAAS,EAAE;AAC3B,YAAA,MAAM,IAAIY,KAAAA,CAAM,CAAC,kBAAkB,EAAEZ,QAAU,CAAA,CAAA,CAAA;AACjD;QACA,OAAO;AAAE,YAAA,CAACS,YAAY,CAACT,QAAS,CAAA,GAAG;AAAC,gBAAA;oBAAEa,GAAKhB,EAAAA;AAAU,iBAAA;AAAGK,gBAAAA;AAAM;AAAC,SAAA;AACjE,KAAA;AAEA;;;;;;;MAQA,MAAMY,WAAW,CAACN,SAAAA,GAAAA;AAChBd,QAAAA,eAAAA,CAAgBqB,KAAK,CAACP,SAAAA,CAAAA;AACxB,KAAA;AAEA;;;MAIA,MAAMQ,QAAW,GAAA,CACfR,SACAS,EAAAA,IAAAA,GAAAA;QAEA,IAAI;YACF,OAAOC,SAAAA,CAAUC,KAAK,CAACX,SAAWS,EAAAA,IAAAA,CAAAA;AACpC,SAAA,CAAE,OAAOG,GAAU,EAAA;AACjB,YAAA,MAAM,IAAIR,KAAM,CAAA,CAAC,mBAAmB,EAAEQ,GAAAA,CAAIC,OAAO,CAAE,CAAA,CAAA;AACrD;AACF,KAAA;IAEA,OAAO;AACLd,QAAAA,QAAAA;AACAO,QAAAA,QAAAA;AACAE,QAAAA;AACF,KAAA;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"urls.js","sources":["../../../../../admin/src/utils/urls.ts"],"sourcesContent":["import trimEnd from 'lodash/trimEnd';\n\nconst prefixFileUrlWithBackendUrl = (fileURL?: string): string | undefined => {\n return !!fileURL && fileURL.startsWith('/') ? `${window.strapi.backendURL}${fileURL}` : fileURL;\n};\n\n/**\n * @description Creates an absolute URL, if there is no URL or it\n * is relative, we use the `window.location.origin` as a fallback.\n * IF it's an absolute URL, we return it as is.\n */\nconst createAbsoluteUrl = (url?: string): string => {\n if (!url) {\n return window.location.origin;\n }\n if (url.startsWith('/')) {\n /**\n * This will also manage protocol relative URLs which is fine because\n * as we can see from the test, we still get the expected result.\n */\n return trimEnd(new URL(url, window.location.origin).toString(), '/');\n } else {\n return url;\n }\n};\n\nexport { createAbsoluteUrl, prefixFileUrlWithBackendUrl };\n"],"names":["prefixFileUrlWithBackendUrl","fileURL","startsWith","window","strapi","backendURL","createAbsoluteUrl","url","location","origin","trimEnd","URL","toString"],"mappings":";;;;AAEA,MAAMA,8BAA8B,CAACC,OAAAA,GAAAA;AACnC,IAAA,OAAO,CAAC,CAACA,
|
|
1
|
+
{"version":3,"file":"urls.js","sources":["../../../../../admin/src/utils/urls.ts"],"sourcesContent":["import trimEnd from 'lodash/trimEnd';\n\nconst prefixFileUrlWithBackendUrl = (fileURL?: string): string | undefined => {\n return !!fileURL && fileURL.startsWith('/') ? `${window.strapi.backendURL}${fileURL}` : fileURL;\n};\n\n/**\n * @description Creates an absolute URL, if there is no URL or it\n * is relative, we use the `window.location.origin` as a fallback.\n * IF it's an absolute URL, we return it as is.\n */\nconst createAbsoluteUrl = (url?: string): string => {\n if (!url) {\n return window.location.origin;\n }\n if (url.startsWith('/')) {\n /**\n * This will also manage protocol relative URLs which is fine because\n * as we can see from the test, we still get the expected result.\n */\n return trimEnd(new URL(url, window.location.origin).toString(), '/');\n } else {\n return url;\n }\n};\n\nexport { createAbsoluteUrl, prefixFileUrlWithBackendUrl };\n"],"names":["prefixFileUrlWithBackendUrl","fileURL","startsWith","window","strapi","backendURL","createAbsoluteUrl","url","location","origin","trimEnd","URL","toString"],"mappings":";;;;AAEA,MAAMA,8BAA8B,CAACC,OAAAA,GAAAA;AACnC,IAAA,OAAO,CAAC,CAACA,OAAWA,IAAAA,OAAAA,CAAQC,UAAU,CAAC,GAAA,CAAA,GAAO,CAAGC,EAAAA,MAAAA,CAAOC,MAAM,CAACC,UAAU,CAAA,EAAGJ,SAAS,GAAGA,OAAAA;AAC1F;AAEA;;;;IAKA,MAAMK,oBAAoB,CAACC,GAAAA,GAAAA;AACzB,IAAA,IAAI,CAACA,GAAK,EAAA;QACR,OAAOJ,MAAAA,CAAOK,QAAQ,CAACC,MAAM;AAC/B;IACA,IAAIF,GAAAA,CAAIL,UAAU,CAAC,GAAM,CAAA,EAAA;AACvB;;;QAIA,OAAOQ,OAAQ,CAAA,IAAIC,GAAIJ,CAAAA,GAAAA,EAAKJ,MAAOK,CAAAA,QAAQ,CAACC,MAAM,CAAEG,CAAAA,QAAQ,EAAI,EAAA,GAAA,CAAA;KAC3D,MAAA;QACL,OAAOL,GAAAA;AACT;AACF;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"urls.mjs","sources":["../../../../../admin/src/utils/urls.ts"],"sourcesContent":["import trimEnd from 'lodash/trimEnd';\n\nconst prefixFileUrlWithBackendUrl = (fileURL?: string): string | undefined => {\n return !!fileURL && fileURL.startsWith('/') ? `${window.strapi.backendURL}${fileURL}` : fileURL;\n};\n\n/**\n * @description Creates an absolute URL, if there is no URL or it\n * is relative, we use the `window.location.origin` as a fallback.\n * IF it's an absolute URL, we return it as is.\n */\nconst createAbsoluteUrl = (url?: string): string => {\n if (!url) {\n return window.location.origin;\n }\n if (url.startsWith('/')) {\n /**\n * This will also manage protocol relative URLs which is fine because\n * as we can see from the test, we still get the expected result.\n */\n return trimEnd(new URL(url, window.location.origin).toString(), '/');\n } else {\n return url;\n }\n};\n\nexport { createAbsoluteUrl, prefixFileUrlWithBackendUrl };\n"],"names":["prefixFileUrlWithBackendUrl","fileURL","startsWith","window","strapi","backendURL","createAbsoluteUrl","url","location","origin","trimEnd","URL","toString"],"mappings":";;AAEA,MAAMA,8BAA8B,CAACC,OAAAA,GAAAA;AACnC,IAAA,OAAO,CAAC,CAACA,
|
|
1
|
+
{"version":3,"file":"urls.mjs","sources":["../../../../../admin/src/utils/urls.ts"],"sourcesContent":["import trimEnd from 'lodash/trimEnd';\n\nconst prefixFileUrlWithBackendUrl = (fileURL?: string): string | undefined => {\n return !!fileURL && fileURL.startsWith('/') ? `${window.strapi.backendURL}${fileURL}` : fileURL;\n};\n\n/**\n * @description Creates an absolute URL, if there is no URL or it\n * is relative, we use the `window.location.origin` as a fallback.\n * IF it's an absolute URL, we return it as is.\n */\nconst createAbsoluteUrl = (url?: string): string => {\n if (!url) {\n return window.location.origin;\n }\n if (url.startsWith('/')) {\n /**\n * This will also manage protocol relative URLs which is fine because\n * as we can see from the test, we still get the expected result.\n */\n return trimEnd(new URL(url, window.location.origin).toString(), '/');\n } else {\n return url;\n }\n};\n\nexport { createAbsoluteUrl, prefixFileUrlWithBackendUrl };\n"],"names":["prefixFileUrlWithBackendUrl","fileURL","startsWith","window","strapi","backendURL","createAbsoluteUrl","url","location","origin","trimEnd","URL","toString"],"mappings":";;AAEA,MAAMA,8BAA8B,CAACC,OAAAA,GAAAA;AACnC,IAAA,OAAO,CAAC,CAACA,OAAWA,IAAAA,OAAAA,CAAQC,UAAU,CAAC,GAAA,CAAA,GAAO,CAAGC,EAAAA,MAAAA,CAAOC,MAAM,CAACC,UAAU,CAAA,EAAGJ,SAAS,GAAGA,OAAAA;AAC1F;AAEA;;;;IAKA,MAAMK,oBAAoB,CAACC,GAAAA,GAAAA;AACzB,IAAA,IAAI,CAACA,GAAK,EAAA;QACR,OAAOJ,MAAAA,CAAOK,QAAQ,CAACC,MAAM;AAC/B;IACA,IAAIF,GAAAA,CAAIL,UAAU,CAAC,GAAM,CAAA,EAAA;AACvB;;;QAIA,OAAOQ,OAAQ,CAAA,IAAIC,GAAIJ,CAAAA,GAAAA,EAAKJ,MAAOK,CAAAA,QAAQ,CAACC,MAAM,CAAEG,CAAAA,QAAQ,EAAI,EAAA,GAAA,CAAA;KAC3D,MAAA;QACL,OAAOL,GAAAA;AACT;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"users.js","sources":["../../../../../admin/src/utils/users.ts"],"sourcesContent":["import type { User } from '../features/Auth';\n\n/* -------------------------------------------------------------------------------------------------\n * getDisplayName\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * Retrieves the display name of an admin panel user\n */\nconst getDisplayName = ({ firstname, lastname, username, email }: Partial<User> = {}): string => {\n if (username) {\n return username;\n }\n\n // firstname is not required if the user is created with a username\n if (firstname) {\n return `${firstname} ${lastname ?? ''}`.trim();\n }\n\n return email ?? '';\n};\n\n/* -------------------------------------------------------------------------------------------------\n * getInitials\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * Retrieves the initials of the user (based on their firstname / lastname or their display name)\n */\nconst getInitials = (user: Partial<User> = {}): string => {\n return user?.firstname && user?.lastname\n ? `${user.firstname.substring(0, 1)}${user.lastname.substring(0, 1)}`\n : getDisplayName(user)\n .split(' ')\n .map((name) => name.substring(0, 1))\n .join('')\n .substring(0, 1)\n .toUpperCase();\n};\n\n/* -------------------------------------------------------------------------------------------------\n * hashAdminUserEmail\n * -----------------------------------------------------------------------------------------------*/\n\nconst hashAdminUserEmail = async (payload?: User) => {\n if (!payload || !payload.email) {\n return null;\n }\n\n try {\n return await digestMessage(payload.email);\n } catch (error) {\n return null;\n }\n};\n\nconst bufferToHex = (buffer: ArrayBuffer) => {\n return [...new Uint8Array(buffer)].map((b) => b.toString(16).padStart(2, '0')).join('');\n};\nconst digestMessage = async (message: string) => {\n const msgUint8 = new TextEncoder().encode(message);\n const hashBuffer = await crypto.subtle.digest('SHA-256', msgUint8);\n\n return bufferToHex(hashBuffer);\n};\n\nexport { getDisplayName, getInitials, hashAdminUserEmail };\n"],"names":["getDisplayName","firstname","lastname","username","email","trim","getInitials","user","substring","split","map","name","join","toUpperCase","hashAdminUserEmail","payload","digestMessage","error","bufferToHex","buffer","Uint8Array","b","toString","padStart","message","msgUint8","TextEncoder","encode","hashBuffer","crypto","subtle","digest"],"mappings":";;AAEA;;;;AAMC,IACKA,MAAAA,cAAAA,GAAiB,CAAC,EAAEC,SAAS,EAAEC,QAAQ,EAAEC,QAAQ,EAAEC,KAAK,EAAiB,GAAG,EAAE,GAAA;AAClF,IAAA,IAAID,QAAU,EAAA;QACZ,OAAOA,QAAAA;AACT;;AAGA,IAAA,IAAIF,SAAW,EAAA;
|
|
1
|
+
{"version":3,"file":"users.js","sources":["../../../../../admin/src/utils/users.ts"],"sourcesContent":["import type { User } from '../features/Auth';\n\n/* -------------------------------------------------------------------------------------------------\n * getDisplayName\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * Retrieves the display name of an admin panel user\n */\nconst getDisplayName = ({ firstname, lastname, username, email }: Partial<User> = {}): string => {\n if (username) {\n return username;\n }\n\n // firstname is not required if the user is created with a username\n if (firstname) {\n return `${firstname} ${lastname ?? ''}`.trim();\n }\n\n return email ?? '';\n};\n\n/* -------------------------------------------------------------------------------------------------\n * getInitials\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * Retrieves the initials of the user (based on their firstname / lastname or their display name)\n */\nconst getInitials = (user: Partial<User> = {}): string => {\n return user?.firstname && user?.lastname\n ? `${user.firstname.substring(0, 1)}${user.lastname.substring(0, 1)}`\n : getDisplayName(user)\n .split(' ')\n .map((name) => name.substring(0, 1))\n .join('')\n .substring(0, 1)\n .toUpperCase();\n};\n\n/* -------------------------------------------------------------------------------------------------\n * hashAdminUserEmail\n * -----------------------------------------------------------------------------------------------*/\n\nconst hashAdminUserEmail = async (payload?: User) => {\n if (!payload || !payload.email) {\n return null;\n }\n\n try {\n return await digestMessage(payload.email);\n } catch (error) {\n return null;\n }\n};\n\nconst bufferToHex = (buffer: ArrayBuffer) => {\n return [...new Uint8Array(buffer)].map((b) => b.toString(16).padStart(2, '0')).join('');\n};\nconst digestMessage = async (message: string) => {\n const msgUint8 = new TextEncoder().encode(message);\n const hashBuffer = await crypto.subtle.digest('SHA-256', msgUint8);\n\n return bufferToHex(hashBuffer);\n};\n\nexport { getDisplayName, getInitials, hashAdminUserEmail };\n"],"names":["getDisplayName","firstname","lastname","username","email","trim","getInitials","user","substring","split","map","name","join","toUpperCase","hashAdminUserEmail","payload","digestMessage","error","bufferToHex","buffer","Uint8Array","b","toString","padStart","message","msgUint8","TextEncoder","encode","hashBuffer","crypto","subtle","digest"],"mappings":";;AAEA;;;;AAMC,IACKA,MAAAA,cAAAA,GAAiB,CAAC,EAAEC,SAAS,EAAEC,QAAQ,EAAEC,QAAQ,EAAEC,KAAK,EAAiB,GAAG,EAAE,GAAA;AAClF,IAAA,IAAID,QAAU,EAAA;QACZ,OAAOA,QAAAA;AACT;;AAGA,IAAA,IAAIF,SAAW,EAAA;AACb,QAAA,OAAO,GAAGA,SAAU,CAAA,CAAC,EAAEC,QAAY,IAAA,EAAA,CAAA,CAAI,CAACG,IAAI,EAAA;AAC9C;AAEA,IAAA,OAAOD,KAAS,IAAA,EAAA;AAClB;AAEA;;;;AAMC,IACKE,MAAAA,WAAAA,GAAc,CAACC,IAAAA,GAAsB,EAAE,GAAA;AAC3C,IAAA,OAAOA,MAAMN,SAAaM,IAAAA,IAAAA,EAAML,WAC5B,CAAGK,EAAAA,IAAAA,CAAKN,SAAS,CAACO,SAAS,CAAC,CAAA,EAAG,KAAKD,IAAKL,CAAAA,QAAQ,CAACM,SAAS,CAAC,GAAG,CAAI,CAAA,CAAA,CAAA,GACnER,cAAeO,CAAAA,IAAAA,CAAAA,CACZE,KAAK,CAAC,GAAA,CAAA,CACNC,GAAG,CAAC,CAACC,OAASA,IAAKH,CAAAA,SAAS,CAAC,CAAG,EAAA,CAAA,CAAA,CAAA,CAChCI,IAAI,CAAC,EAAA,CAAA,CACLJ,SAAS,CAAC,CAAA,EAAG,GACbK,WAAW,EAAA;AACpB;AAEA;;qGAIA,MAAMC,qBAAqB,OAAOC,OAAAA,GAAAA;AAChC,IAAA,IAAI,CAACA,OAAAA,IAAW,CAACA,OAAAA,CAAQX,KAAK,EAAE;QAC9B,OAAO,IAAA;AACT;IAEA,IAAI;QACF,OAAO,MAAMY,aAAcD,CAAAA,OAAAA,CAAQX,KAAK,CAAA;AAC1C,KAAA,CAAE,OAAOa,KAAO,EAAA;QACd,OAAO,IAAA;AACT;AACF;AAEA,MAAMC,cAAc,CAACC,MAAAA,GAAAA;IACnB,OAAO;AAAI,QAAA,GAAA,IAAIC,UAAWD,CAAAA,MAAAA;AAAQ,KAAA,CAACT,GAAG,CAAC,CAACW,CAAAA,GAAMA,CAAEC,CAAAA,QAAQ,CAAC,EAAA,CAAA,CAAIC,QAAQ,CAAC,CAAG,EAAA,GAAA,CAAA,CAAA,CAAMX,IAAI,CAAC,EAAA,CAAA;AACtF,CAAA;AACA,MAAMI,gBAAgB,OAAOQ,OAAAA,GAAAA;AAC3B,IAAA,MAAMC,QAAW,GAAA,IAAIC,WAAcC,EAAAA,CAAAA,MAAM,CAACH,OAAAA,CAAAA;AAC1C,IAAA,MAAMI,aAAa,MAAMC,MAAAA,CAAOC,MAAM,CAACC,MAAM,CAAC,SAAWN,EAAAA,QAAAA,CAAAA;AAEzD,IAAA,OAAOP,WAAYU,CAAAA,UAAAA,CAAAA;AACrB,CAAA;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"users.mjs","sources":["../../../../../admin/src/utils/users.ts"],"sourcesContent":["import type { User } from '../features/Auth';\n\n/* -------------------------------------------------------------------------------------------------\n * getDisplayName\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * Retrieves the display name of an admin panel user\n */\nconst getDisplayName = ({ firstname, lastname, username, email }: Partial<User> = {}): string => {\n if (username) {\n return username;\n }\n\n // firstname is not required if the user is created with a username\n if (firstname) {\n return `${firstname} ${lastname ?? ''}`.trim();\n }\n\n return email ?? '';\n};\n\n/* -------------------------------------------------------------------------------------------------\n * getInitials\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * Retrieves the initials of the user (based on their firstname / lastname or their display name)\n */\nconst getInitials = (user: Partial<User> = {}): string => {\n return user?.firstname && user?.lastname\n ? `${user.firstname.substring(0, 1)}${user.lastname.substring(0, 1)}`\n : getDisplayName(user)\n .split(' ')\n .map((name) => name.substring(0, 1))\n .join('')\n .substring(0, 1)\n .toUpperCase();\n};\n\n/* -------------------------------------------------------------------------------------------------\n * hashAdminUserEmail\n * -----------------------------------------------------------------------------------------------*/\n\nconst hashAdminUserEmail = async (payload?: User) => {\n if (!payload || !payload.email) {\n return null;\n }\n\n try {\n return await digestMessage(payload.email);\n } catch (error) {\n return null;\n }\n};\n\nconst bufferToHex = (buffer: ArrayBuffer) => {\n return [...new Uint8Array(buffer)].map((b) => b.toString(16).padStart(2, '0')).join('');\n};\nconst digestMessage = async (message: string) => {\n const msgUint8 = new TextEncoder().encode(message);\n const hashBuffer = await crypto.subtle.digest('SHA-256', msgUint8);\n\n return bufferToHex(hashBuffer);\n};\n\nexport { getDisplayName, getInitials, hashAdminUserEmail };\n"],"names":["getDisplayName","firstname","lastname","username","email","trim","getInitials","user","substring","split","map","name","join","toUpperCase","hashAdminUserEmail","payload","digestMessage","error","bufferToHex","buffer","Uint8Array","b","toString","padStart","message","msgUint8","TextEncoder","encode","hashBuffer","crypto","subtle","digest"],"mappings":"AAEA;;;;AAMC,IACKA,MAAAA,cAAAA,GAAiB,CAAC,EAAEC,SAAS,EAAEC,QAAQ,EAAEC,QAAQ,EAAEC,KAAK,EAAiB,GAAG,EAAE,GAAA;AAClF,IAAA,IAAID,QAAU,EAAA;QACZ,OAAOA,QAAAA;AACT;;AAGA,IAAA,IAAIF,SAAW,EAAA;
|
|
1
|
+
{"version":3,"file":"users.mjs","sources":["../../../../../admin/src/utils/users.ts"],"sourcesContent":["import type { User } from '../features/Auth';\n\n/* -------------------------------------------------------------------------------------------------\n * getDisplayName\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * Retrieves the display name of an admin panel user\n */\nconst getDisplayName = ({ firstname, lastname, username, email }: Partial<User> = {}): string => {\n if (username) {\n return username;\n }\n\n // firstname is not required if the user is created with a username\n if (firstname) {\n return `${firstname} ${lastname ?? ''}`.trim();\n }\n\n return email ?? '';\n};\n\n/* -------------------------------------------------------------------------------------------------\n * getInitials\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * Retrieves the initials of the user (based on their firstname / lastname or their display name)\n */\nconst getInitials = (user: Partial<User> = {}): string => {\n return user?.firstname && user?.lastname\n ? `${user.firstname.substring(0, 1)}${user.lastname.substring(0, 1)}`\n : getDisplayName(user)\n .split(' ')\n .map((name) => name.substring(0, 1))\n .join('')\n .substring(0, 1)\n .toUpperCase();\n};\n\n/* -------------------------------------------------------------------------------------------------\n * hashAdminUserEmail\n * -----------------------------------------------------------------------------------------------*/\n\nconst hashAdminUserEmail = async (payload?: User) => {\n if (!payload || !payload.email) {\n return null;\n }\n\n try {\n return await digestMessage(payload.email);\n } catch (error) {\n return null;\n }\n};\n\nconst bufferToHex = (buffer: ArrayBuffer) => {\n return [...new Uint8Array(buffer)].map((b) => b.toString(16).padStart(2, '0')).join('');\n};\nconst digestMessage = async (message: string) => {\n const msgUint8 = new TextEncoder().encode(message);\n const hashBuffer = await crypto.subtle.digest('SHA-256', msgUint8);\n\n return bufferToHex(hashBuffer);\n};\n\nexport { getDisplayName, getInitials, hashAdminUserEmail };\n"],"names":["getDisplayName","firstname","lastname","username","email","trim","getInitials","user","substring","split","map","name","join","toUpperCase","hashAdminUserEmail","payload","digestMessage","error","bufferToHex","buffer","Uint8Array","b","toString","padStart","message","msgUint8","TextEncoder","encode","hashBuffer","crypto","subtle","digest"],"mappings":"AAEA;;;;AAMC,IACKA,MAAAA,cAAAA,GAAiB,CAAC,EAAEC,SAAS,EAAEC,QAAQ,EAAEC,QAAQ,EAAEC,KAAK,EAAiB,GAAG,EAAE,GAAA;AAClF,IAAA,IAAID,QAAU,EAAA;QACZ,OAAOA,QAAAA;AACT;;AAGA,IAAA,IAAIF,SAAW,EAAA;AACb,QAAA,OAAO,GAAGA,SAAU,CAAA,CAAC,EAAEC,QAAY,IAAA,EAAA,CAAA,CAAI,CAACG,IAAI,EAAA;AAC9C;AAEA,IAAA,OAAOD,KAAS,IAAA,EAAA;AAClB;AAEA;;;;AAMC,IACKE,MAAAA,WAAAA,GAAc,CAACC,IAAAA,GAAsB,EAAE,GAAA;AAC3C,IAAA,OAAOA,MAAMN,SAAaM,IAAAA,IAAAA,EAAML,WAC5B,CAAGK,EAAAA,IAAAA,CAAKN,SAAS,CAACO,SAAS,CAAC,CAAA,EAAG,KAAKD,IAAKL,CAAAA,QAAQ,CAACM,SAAS,CAAC,GAAG,CAAI,CAAA,CAAA,CAAA,GACnER,cAAeO,CAAAA,IAAAA,CAAAA,CACZE,KAAK,CAAC,GAAA,CAAA,CACNC,GAAG,CAAC,CAACC,OAASA,IAAKH,CAAAA,SAAS,CAAC,CAAG,EAAA,CAAA,CAAA,CAAA,CAChCI,IAAI,CAAC,EAAA,CAAA,CACLJ,SAAS,CAAC,CAAA,EAAG,GACbK,WAAW,EAAA;AACpB;AAEA;;qGAIA,MAAMC,qBAAqB,OAAOC,OAAAA,GAAAA;AAChC,IAAA,IAAI,CAACA,OAAAA,IAAW,CAACA,OAAAA,CAAQX,KAAK,EAAE;QAC9B,OAAO,IAAA;AACT;IAEA,IAAI;QACF,OAAO,MAAMY,aAAcD,CAAAA,OAAAA,CAAQX,KAAK,CAAA;AAC1C,KAAA,CAAE,OAAOa,KAAO,EAAA;QACd,OAAO,IAAA;AACT;AACF;AAEA,MAAMC,cAAc,CAACC,MAAAA,GAAAA;IACnB,OAAO;AAAI,QAAA,GAAA,IAAIC,UAAWD,CAAAA,MAAAA;AAAQ,KAAA,CAACT,GAAG,CAAC,CAACW,CAAAA,GAAMA,CAAEC,CAAAA,QAAQ,CAAC,EAAA,CAAA,CAAIC,QAAQ,CAAC,CAAG,EAAA,GAAA,CAAA,CAAA,CAAMX,IAAI,CAAC,EAAA,CAAA;AACtF,CAAA;AACA,MAAMI,gBAAgB,OAAOQ,OAAAA,GAAAA;AAC3B,IAAA,MAAMC,QAAW,GAAA,IAAIC,WAAcC,EAAAA,CAAAA,MAAM,CAACH,OAAAA,CAAAA;AAC1C,IAAA,MAAMI,aAAa,MAAMC,MAAAA,CAAOC,MAAM,CAACC,MAAM,CAAC,SAAWN,EAAAA,QAAAA,CAAAA;AAEzD,IAAA,OAAOP,WAAYU,CAAAA,UAAAA,CAAAA;AACrB,CAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Widgets.js","sources":["../../../../../../../ee/admin/src/components/AuditLogs/Widgets.tsx"],"sourcesContent":["import { useTracking, Widget } from '@strapi/admin/strapi-admin';\nimport { Box, IconButton, Table, Tbody, Td, Tr, Typography } from '@strapi/design-system';\nimport { Eye } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { Link, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { RelativeTime as BaseRelativeTime } from '../../../../../admin/src/components/RelativeTime';\nimport { useQueryParams } from '../../../../../admin/src/hooks/useQueryParams';\nimport { AuditLog } from '../../../../../shared/contracts/audit-logs';\nimport { AUDIT_LOGS_DEFAULT_PAGE_SIZE } from '../../constants';\nimport { getDefaultMessage } from '../../pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages';\nimport { useGetAuditLogsQuery } from '../../services/auditLogs';\n\nconst RelativeTime = styled(BaseRelativeTime)`\n display: inline-block;\n\n &::first-letter {\n text-transform: uppercase;\n }\n`;\n\nconst LastActivityTable = ({ items }: { items: AuditLog[] }) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const navigate = useNavigate();\n\n const getAuditLogDetailsLink = (item: AuditLog): string => {\n return `/settings/audit-logs?pageSize=${AUDIT_LOGS_DEFAULT_PAGE_SIZE}&page=1&sort=date:DESC&id=${item.id}`;\n };\n\n const handleRowClick = (document: AuditLog) => () => {\n trackUsage('willOpenAuditLogDetailsFromHome');\n const link = getAuditLogDetailsLink(document);\n navigate(link);\n };\n\n return (\n <Table colCount={4} rowCount={items?.length ?? 0}>\n <Tbody>\n {items?.map((item) => {\n const action = formatMessage(\n {\n id: `Settings.permissions.auditLogs.${item.action}`,\n // @ts-expect-error – getDefaultMessage probably doesn't benefit from being so strongly typed unless we just add string at the end.\n defaultMessage: getDefaultMessage(item.action),\n },\n { model: (item.payload.model as string) ?? '' }\n );\n const userDisplayName = item.user?.displayName ?? '-';\n return (\n <Tr\n onClick={handleRowClick(item)}\n cursor=\"pointer\"\n key={`lastActivity_auditLog_${item.id}`}\n >\n <Td>\n <Typography title={action} variant=\"omega\" textColor=\"neutral800\">\n {action}\n </Typography>\n </Td>\n <Td>\n <Typography variant=\"omega\" textColor=\"neutral800\">\n <RelativeTime timestamp={new Date(item.date)} />\n </Typography>\n </Td>\n <Td>\n <Typography title={userDisplayName} variant=\"omega\" textColor=\"neutral800\">\n {userDisplayName}\n </Typography>\n </Td>\n <Td onClick={(e) => e.stopPropagation()}>\n <Box display=\"inline-block\">\n <IconButton\n tag={Link}\n to={getAuditLogDetailsLink(item)}\n onClick={() => trackUsage('willOpenAuditLogDetailsFromHome')}\n label={formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n variant=\"ghost\"\n >\n <Eye />\n </IconButton>\n </Box>\n </Td>\n </Tr>\n );\n })}\n </Tbody>\n </Table>\n );\n};\n\nconst AuditLogsWidget = () => {\n const { formatMessage } = useIntl();\n const [{ query }] = useQueryParams();\n const { data, isLoading, error } = useGetAuditLogsQuery(\n {\n ...query,\n page: 1,\n pageSize: 4,\n sort: 'date:DESC',\n },\n {\n refetchOnMountOrArgChange: true,\n }\n );\n\n if (isLoading) {\n return <Widget.Loading />;\n }\n\n if (error || !data?.results) {\n return <Widget.Error />;\n }\n\n if (data.results.length === 0) {\n return (\n <Widget.NoData>\n {formatMessage({\n id: 'widget.last-activity.no-activity',\n defaultMessage: 'No activity',\n })}\n </Widget.NoData>\n );\n }\n\n return <LastActivityTable items={data.results ?? []} />;\n};\n\nexport { AuditLogsWidget };\n"],"names":["RelativeTime","styled","BaseRelativeTime","LastActivityTable","items","formatMessage","useIntl","trackUsage","useTracking","navigate","useNavigate","getAuditLogDetailsLink","item","AUDIT_LOGS_DEFAULT_PAGE_SIZE","id","handleRowClick","document","link","_jsx","Table","colCount","rowCount","length","Tbody","map","action","defaultMessage","getDefaultMessage","model","payload","userDisplayName","user","displayName","_jsxs","Tr","onClick","cursor","Td","Typography","title","variant","textColor","timestamp","Date","date","e","stopPropagation","Box","display","IconButton","tag","Link","to","label","Eye","AuditLogsWidget","query","useQueryParams","data","isLoading","error","useGetAuditLogsQuery","page","pageSize","sort","refetchOnMountOrArgChange","Widget","Loading","results","Error","NoData"],"mappings":";;;;;;;;;;;;;;;AAcA,MAAMA,YAAAA,GAAeC,aAAOC,CAAAA,2BAAAA,CAAiB;;;;;;AAM7C,CAAC;AAED,MAAMC,iBAAoB,GAAA,CAAC,EAAEC,KAAK,EAAyB,GAAA;IACzD,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAC1B,MAAM,EAAEC,UAAU,EAAE,GAAGC,uBAAAA,EAAAA;AACvB,IAAA,MAAMC,QAAWC,GAAAA,0BAAAA,EAAAA;AAEjB,IAAA,MAAMC,yBAAyB,CAACC,IAAAA,GAAAA;QAC9B,OAAO,CAAC,8BAA8B,EAAEC,sCAAAA,CAA6B,0BAA0B,EAAED,IAAAA,CAAKE,EAAE,
|
|
1
|
+
{"version":3,"file":"Widgets.js","sources":["../../../../../../../ee/admin/src/components/AuditLogs/Widgets.tsx"],"sourcesContent":["import { useTracking, Widget } from '@strapi/admin/strapi-admin';\nimport { Box, IconButton, Table, Tbody, Td, Tr, Typography } from '@strapi/design-system';\nimport { Eye } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { Link, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { RelativeTime as BaseRelativeTime } from '../../../../../admin/src/components/RelativeTime';\nimport { useQueryParams } from '../../../../../admin/src/hooks/useQueryParams';\nimport { AuditLog } from '../../../../../shared/contracts/audit-logs';\nimport { AUDIT_LOGS_DEFAULT_PAGE_SIZE } from '../../constants';\nimport { getDefaultMessage } from '../../pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages';\nimport { useGetAuditLogsQuery } from '../../services/auditLogs';\n\nconst RelativeTime = styled(BaseRelativeTime)`\n display: inline-block;\n\n &::first-letter {\n text-transform: uppercase;\n }\n`;\n\nconst LastActivityTable = ({ items }: { items: AuditLog[] }) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const navigate = useNavigate();\n\n const getAuditLogDetailsLink = (item: AuditLog): string => {\n return `/settings/audit-logs?pageSize=${AUDIT_LOGS_DEFAULT_PAGE_SIZE}&page=1&sort=date:DESC&id=${item.id}`;\n };\n\n const handleRowClick = (document: AuditLog) => () => {\n trackUsage('willOpenAuditLogDetailsFromHome');\n const link = getAuditLogDetailsLink(document);\n navigate(link);\n };\n\n return (\n <Table colCount={4} rowCount={items?.length ?? 0}>\n <Tbody>\n {items?.map((item) => {\n const action = formatMessage(\n {\n id: `Settings.permissions.auditLogs.${item.action}`,\n // @ts-expect-error – getDefaultMessage probably doesn't benefit from being so strongly typed unless we just add string at the end.\n defaultMessage: getDefaultMessage(item.action),\n },\n { model: (item.payload.model as string) ?? '' }\n );\n const userDisplayName = item.user?.displayName ?? '-';\n return (\n <Tr\n onClick={handleRowClick(item)}\n cursor=\"pointer\"\n key={`lastActivity_auditLog_${item.id}`}\n >\n <Td>\n <Typography title={action} variant=\"omega\" textColor=\"neutral800\">\n {action}\n </Typography>\n </Td>\n <Td>\n <Typography variant=\"omega\" textColor=\"neutral800\">\n <RelativeTime timestamp={new Date(item.date)} />\n </Typography>\n </Td>\n <Td>\n <Typography title={userDisplayName} variant=\"omega\" textColor=\"neutral800\">\n {userDisplayName}\n </Typography>\n </Td>\n <Td onClick={(e) => e.stopPropagation()}>\n <Box display=\"inline-block\">\n <IconButton\n tag={Link}\n to={getAuditLogDetailsLink(item)}\n onClick={() => trackUsage('willOpenAuditLogDetailsFromHome')}\n label={formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n variant=\"ghost\"\n >\n <Eye />\n </IconButton>\n </Box>\n </Td>\n </Tr>\n );\n })}\n </Tbody>\n </Table>\n );\n};\n\nconst AuditLogsWidget = () => {\n const { formatMessage } = useIntl();\n const [{ query }] = useQueryParams();\n const { data, isLoading, error } = useGetAuditLogsQuery(\n {\n ...query,\n page: 1,\n pageSize: 4,\n sort: 'date:DESC',\n },\n {\n refetchOnMountOrArgChange: true,\n }\n );\n\n if (isLoading) {\n return <Widget.Loading />;\n }\n\n if (error || !data?.results) {\n return <Widget.Error />;\n }\n\n if (data.results.length === 0) {\n return (\n <Widget.NoData>\n {formatMessage({\n id: 'widget.last-activity.no-activity',\n defaultMessage: 'No activity',\n })}\n </Widget.NoData>\n );\n }\n\n return <LastActivityTable items={data.results ?? []} />;\n};\n\nexport { AuditLogsWidget };\n"],"names":["RelativeTime","styled","BaseRelativeTime","LastActivityTable","items","formatMessage","useIntl","trackUsage","useTracking","navigate","useNavigate","getAuditLogDetailsLink","item","AUDIT_LOGS_DEFAULT_PAGE_SIZE","id","handleRowClick","document","link","_jsx","Table","colCount","rowCount","length","Tbody","map","action","defaultMessage","getDefaultMessage","model","payload","userDisplayName","user","displayName","_jsxs","Tr","onClick","cursor","Td","Typography","title","variant","textColor","timestamp","Date","date","e","stopPropagation","Box","display","IconButton","tag","Link","to","label","Eye","AuditLogsWidget","query","useQueryParams","data","isLoading","error","useGetAuditLogsQuery","page","pageSize","sort","refetchOnMountOrArgChange","Widget","Loading","results","Error","NoData"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Widgets.mjs","sources":["../../../../../../../ee/admin/src/components/AuditLogs/Widgets.tsx"],"sourcesContent":["import { useTracking, Widget } from '@strapi/admin/strapi-admin';\nimport { Box, IconButton, Table, Tbody, Td, Tr, Typography } from '@strapi/design-system';\nimport { Eye } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { Link, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { RelativeTime as BaseRelativeTime } from '../../../../../admin/src/components/RelativeTime';\nimport { useQueryParams } from '../../../../../admin/src/hooks/useQueryParams';\nimport { AuditLog } from '../../../../../shared/contracts/audit-logs';\nimport { AUDIT_LOGS_DEFAULT_PAGE_SIZE } from '../../constants';\nimport { getDefaultMessage } from '../../pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages';\nimport { useGetAuditLogsQuery } from '../../services/auditLogs';\n\nconst RelativeTime = styled(BaseRelativeTime)`\n display: inline-block;\n\n &::first-letter {\n text-transform: uppercase;\n }\n`;\n\nconst LastActivityTable = ({ items }: { items: AuditLog[] }) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const navigate = useNavigate();\n\n const getAuditLogDetailsLink = (item: AuditLog): string => {\n return `/settings/audit-logs?pageSize=${AUDIT_LOGS_DEFAULT_PAGE_SIZE}&page=1&sort=date:DESC&id=${item.id}`;\n };\n\n const handleRowClick = (document: AuditLog) => () => {\n trackUsage('willOpenAuditLogDetailsFromHome');\n const link = getAuditLogDetailsLink(document);\n navigate(link);\n };\n\n return (\n <Table colCount={4} rowCount={items?.length ?? 0}>\n <Tbody>\n {items?.map((item) => {\n const action = formatMessage(\n {\n id: `Settings.permissions.auditLogs.${item.action}`,\n // @ts-expect-error – getDefaultMessage probably doesn't benefit from being so strongly typed unless we just add string at the end.\n defaultMessage: getDefaultMessage(item.action),\n },\n { model: (item.payload.model as string) ?? '' }\n );\n const userDisplayName = item.user?.displayName ?? '-';\n return (\n <Tr\n onClick={handleRowClick(item)}\n cursor=\"pointer\"\n key={`lastActivity_auditLog_${item.id}`}\n >\n <Td>\n <Typography title={action} variant=\"omega\" textColor=\"neutral800\">\n {action}\n </Typography>\n </Td>\n <Td>\n <Typography variant=\"omega\" textColor=\"neutral800\">\n <RelativeTime timestamp={new Date(item.date)} />\n </Typography>\n </Td>\n <Td>\n <Typography title={userDisplayName} variant=\"omega\" textColor=\"neutral800\">\n {userDisplayName}\n </Typography>\n </Td>\n <Td onClick={(e) => e.stopPropagation()}>\n <Box display=\"inline-block\">\n <IconButton\n tag={Link}\n to={getAuditLogDetailsLink(item)}\n onClick={() => trackUsage('willOpenAuditLogDetailsFromHome')}\n label={formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n variant=\"ghost\"\n >\n <Eye />\n </IconButton>\n </Box>\n </Td>\n </Tr>\n );\n })}\n </Tbody>\n </Table>\n );\n};\n\nconst AuditLogsWidget = () => {\n const { formatMessage } = useIntl();\n const [{ query }] = useQueryParams();\n const { data, isLoading, error } = useGetAuditLogsQuery(\n {\n ...query,\n page: 1,\n pageSize: 4,\n sort: 'date:DESC',\n },\n {\n refetchOnMountOrArgChange: true,\n }\n );\n\n if (isLoading) {\n return <Widget.Loading />;\n }\n\n if (error || !data?.results) {\n return <Widget.Error />;\n }\n\n if (data.results.length === 0) {\n return (\n <Widget.NoData>\n {formatMessage({\n id: 'widget.last-activity.no-activity',\n defaultMessage: 'No activity',\n })}\n </Widget.NoData>\n );\n }\n\n return <LastActivityTable items={data.results ?? []} />;\n};\n\nexport { AuditLogsWidget };\n"],"names":["RelativeTime","styled","BaseRelativeTime","LastActivityTable","items","formatMessage","useIntl","trackUsage","useTracking","navigate","useNavigate","getAuditLogDetailsLink","item","AUDIT_LOGS_DEFAULT_PAGE_SIZE","id","handleRowClick","document","link","_jsx","Table","colCount","rowCount","length","Tbody","map","action","defaultMessage","getDefaultMessage","model","payload","userDisplayName","user","displayName","_jsxs","Tr","onClick","cursor","Td","Typography","title","variant","textColor","timestamp","Date","date","e","stopPropagation","Box","display","IconButton","tag","Link","to","label","Eye","AuditLogsWidget","query","useQueryParams","data","isLoading","error","useGetAuditLogsQuery","page","pageSize","sort","refetchOnMountOrArgChange","Widget","Loading","results","Error","NoData"],"mappings":";;;;;;;;;;;;;AAcA,MAAMA,YAAAA,GAAeC,MAAOC,CAAAA,cAAAA,CAAiB;;;;;;AAM7C,CAAC;AAED,MAAMC,iBAAoB,GAAA,CAAC,EAAEC,KAAK,EAAyB,GAAA;IACzD,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAM,EAAEC,UAAU,EAAE,GAAGC,WAAAA,EAAAA;AACvB,IAAA,MAAMC,QAAWC,GAAAA,WAAAA,EAAAA;AAEjB,IAAA,MAAMC,yBAAyB,CAACC,IAAAA,GAAAA;QAC9B,OAAO,CAAC,8BAA8B,EAAEC,4BAAAA,CAA6B,0BAA0B,EAAED,IAAAA,CAAKE,EAAE,
|
|
1
|
+
{"version":3,"file":"Widgets.mjs","sources":["../../../../../../../ee/admin/src/components/AuditLogs/Widgets.tsx"],"sourcesContent":["import { useTracking, Widget } from '@strapi/admin/strapi-admin';\nimport { Box, IconButton, Table, Tbody, Td, Tr, Typography } from '@strapi/design-system';\nimport { Eye } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { Link, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { RelativeTime as BaseRelativeTime } from '../../../../../admin/src/components/RelativeTime';\nimport { useQueryParams } from '../../../../../admin/src/hooks/useQueryParams';\nimport { AuditLog } from '../../../../../shared/contracts/audit-logs';\nimport { AUDIT_LOGS_DEFAULT_PAGE_SIZE } from '../../constants';\nimport { getDefaultMessage } from '../../pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages';\nimport { useGetAuditLogsQuery } from '../../services/auditLogs';\n\nconst RelativeTime = styled(BaseRelativeTime)`\n display: inline-block;\n\n &::first-letter {\n text-transform: uppercase;\n }\n`;\n\nconst LastActivityTable = ({ items }: { items: AuditLog[] }) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const navigate = useNavigate();\n\n const getAuditLogDetailsLink = (item: AuditLog): string => {\n return `/settings/audit-logs?pageSize=${AUDIT_LOGS_DEFAULT_PAGE_SIZE}&page=1&sort=date:DESC&id=${item.id}`;\n };\n\n const handleRowClick = (document: AuditLog) => () => {\n trackUsage('willOpenAuditLogDetailsFromHome');\n const link = getAuditLogDetailsLink(document);\n navigate(link);\n };\n\n return (\n <Table colCount={4} rowCount={items?.length ?? 0}>\n <Tbody>\n {items?.map((item) => {\n const action = formatMessage(\n {\n id: `Settings.permissions.auditLogs.${item.action}`,\n // @ts-expect-error – getDefaultMessage probably doesn't benefit from being so strongly typed unless we just add string at the end.\n defaultMessage: getDefaultMessage(item.action),\n },\n { model: (item.payload.model as string) ?? '' }\n );\n const userDisplayName = item.user?.displayName ?? '-';\n return (\n <Tr\n onClick={handleRowClick(item)}\n cursor=\"pointer\"\n key={`lastActivity_auditLog_${item.id}`}\n >\n <Td>\n <Typography title={action} variant=\"omega\" textColor=\"neutral800\">\n {action}\n </Typography>\n </Td>\n <Td>\n <Typography variant=\"omega\" textColor=\"neutral800\">\n <RelativeTime timestamp={new Date(item.date)} />\n </Typography>\n </Td>\n <Td>\n <Typography title={userDisplayName} variant=\"omega\" textColor=\"neutral800\">\n {userDisplayName}\n </Typography>\n </Td>\n <Td onClick={(e) => e.stopPropagation()}>\n <Box display=\"inline-block\">\n <IconButton\n tag={Link}\n to={getAuditLogDetailsLink(item)}\n onClick={() => trackUsage('willOpenAuditLogDetailsFromHome')}\n label={formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n variant=\"ghost\"\n >\n <Eye />\n </IconButton>\n </Box>\n </Td>\n </Tr>\n );\n })}\n </Tbody>\n </Table>\n );\n};\n\nconst AuditLogsWidget = () => {\n const { formatMessage } = useIntl();\n const [{ query }] = useQueryParams();\n const { data, isLoading, error } = useGetAuditLogsQuery(\n {\n ...query,\n page: 1,\n pageSize: 4,\n sort: 'date:DESC',\n },\n {\n refetchOnMountOrArgChange: true,\n }\n );\n\n if (isLoading) {\n return <Widget.Loading />;\n }\n\n if (error || !data?.results) {\n return <Widget.Error />;\n }\n\n if (data.results.length === 0) {\n return (\n <Widget.NoData>\n {formatMessage({\n id: 'widget.last-activity.no-activity',\n defaultMessage: 'No activity',\n })}\n </Widget.NoData>\n );\n }\n\n return <LastActivityTable items={data.results ?? []} />;\n};\n\nexport { AuditLogsWidget };\n"],"names":["RelativeTime","styled","BaseRelativeTime","LastActivityTable","items","formatMessage","useIntl","trackUsage","useTracking","navigate","useNavigate","getAuditLogDetailsLink","item","AUDIT_LOGS_DEFAULT_PAGE_SIZE","id","handleRowClick","document","link","_jsx","Table","colCount","rowCount","length","Tbody","map","action","defaultMessage","getDefaultMessage","model","payload","userDisplayName","user","displayName","_jsxs","Tr","onClick","cursor","Td","Typography","title","variant","textColor","timestamp","Date","date","e","stopPropagation","Box","display","IconButton","tag","Link","to","label","Eye","AuditLogsWidget","query","useQueryParams","data","isLoading","error","useGetAuditLogsQuery","page","pageSize","sort","refetchOnMountOrArgChange","Widget","Loading","results","Error","NoData"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLicenseLimitNotification.js","sources":["../../../../../../ee/admin/src/hooks/useLicenseLimitNotification.ts"],"sourcesContent":["/**\n *\n * useLicenseLimitNotification\n *\n */\nimport * as React from 'react';\n\nimport isNil from 'lodash/isNil';\nimport { useIntl } from 'react-intl';\nimport { useLocation } from 'react-router-dom';\n\nimport { NotificationConfig, useNotification } from '../../../../admin/src/features/Notifications';\n\nimport { useLicenseLimits } from './useLicenseLimits';\n\nconst STORAGE_KEY_PREFIX = 'strapi-notification-seat-limit';\n\nconst BILLING_SELF_HOSTED_URL = 'https://strapi.io/billing/request-seats';\nconst MANAGE_SEATS_URL = 'https://strapi.io/billing/manage-seats';\n\nexport const useLicenseLimitNotification = () => {\n const { formatMessage } = useIntl();\n const { license, isError, isLoading } = useLicenseLimits();\n const { toggleNotification } = useNotification();\n const { pathname } = useLocation();\n\n const { enforcementUserCount, permittedSeats, licenseLimitStatus, type } = license ?? {};\n\n React.useEffect(() => {\n if (isError || isLoading) {\n return;\n }\n\n const shouldDisplayNotification =\n !isNil(permittedSeats) &&\n !window.sessionStorage.getItem(`${STORAGE_KEY_PREFIX}-${pathname}`) &&\n licenseLimitStatus === 'OVER_LIMIT';\n\n let notificationType: NotificationConfig['type'];\n\n if (licenseLimitStatus === 'OVER_LIMIT') {\n notificationType = 'danger';\n }\n\n if (shouldDisplayNotification) {\n toggleNotification({\n type: notificationType,\n message: formatMessage(\n {\n id: 'notification.ee.warning.over-.message',\n defaultMessage:\n \"Add seats to {licenseLimitStatus, select, OVER_LIMIT {invite} other {re-enable}} Users. If you already did it but it's not reflected in Strapi yet, make sure to restart your app.\",\n },\n { licenseLimitStatus }\n ),\n title: formatMessage(\n {\n id: 'notification.ee.warning.at-seat-limit.title',\n defaultMessage:\n '{licenseLimitStatus, select, OVER_LIMIT {Over} other {At}} seat limit ({enforcementUserCount}/{permittedSeats})',\n },\n {\n licenseLimitStatus,\n enforcementUserCount,\n permittedSeats,\n }\n ),\n link: {\n url: type === 'gold' ? BILLING_SELF_HOSTED_URL : MANAGE_SEATS_URL,\n label: formatMessage({\n id: 'notification.ee.warning.seat-limit.link',\n defaultMessage: type === 'gold' ? 'Contact sales' : 'Manage seats',\n }),\n },\n blockTransition: true,\n onClose() {\n window.sessionStorage.setItem(`${STORAGE_KEY_PREFIX}-${pathname}`, 'true');\n },\n });\n }\n }, [\n toggleNotification,\n license,\n pathname,\n formatMessage,\n isLoading,\n permittedSeats,\n licenseLimitStatus,\n enforcementUserCount,\n isError,\n type,\n ]);\n};\n"],"names":["STORAGE_KEY_PREFIX","BILLING_SELF_HOSTED_URL","MANAGE_SEATS_URL","useLicenseLimitNotification","formatMessage","useIntl","license","isError","isLoading","useLicenseLimits","toggleNotification","useNotification","pathname","useLocation","enforcementUserCount","permittedSeats","licenseLimitStatus","type","React","useEffect","shouldDisplayNotification","isNil","window","sessionStorage","getItem","notificationType","message","id","defaultMessage","title","link","url","label","blockTransition","onClose","setItem"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeA,MAAMA,kBAAqB,GAAA,gCAAA;AAE3B,MAAMC,uBAA0B,GAAA,yCAAA;AAChC,MAAMC,gBAAmB,GAAA,wCAAA;MAEZC,2BAA8B,GAAA,IAAA;IACzC,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAM,EAAEC,OAAO,EAAEC,OAAO,EAAEC,SAAS,EAAE,GAAGC,iCAAAA,EAAAA;IACxC,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,6BAAAA,EAAAA;IAC/B,MAAM,EAAEC,QAAQ,EAAE,GAAGC,0BAAAA,EAAAA;IAErB,MAAM,EAAEC,oBAAoB,EAAEC,cAAc,EAAEC,kBAAkB,EAAEC,IAAI,EAAE,GAAGX,OAAAA,IAAW,EAAC;AAEvFY,IAAAA,gBAAAA,CAAMC,SAAS,CAAC,IAAA;AACd,QAAA,IAAIZ,WAAWC,SAAW,EAAA;AACxB,YAAA;AACF;AAEA,QAAA,MAAMY,4BACJ,CAACC,KAAAA,CAAMN,
|
|
1
|
+
{"version":3,"file":"useLicenseLimitNotification.js","sources":["../../../../../../ee/admin/src/hooks/useLicenseLimitNotification.ts"],"sourcesContent":["/**\n *\n * useLicenseLimitNotification\n *\n */\nimport * as React from 'react';\n\nimport isNil from 'lodash/isNil';\nimport { useIntl } from 'react-intl';\nimport { useLocation } from 'react-router-dom';\n\nimport { NotificationConfig, useNotification } from '../../../../admin/src/features/Notifications';\n\nimport { useLicenseLimits } from './useLicenseLimits';\n\nconst STORAGE_KEY_PREFIX = 'strapi-notification-seat-limit';\n\nconst BILLING_SELF_HOSTED_URL = 'https://strapi.io/billing/request-seats';\nconst MANAGE_SEATS_URL = 'https://strapi.io/billing/manage-seats';\n\nexport const useLicenseLimitNotification = () => {\n const { formatMessage } = useIntl();\n const { license, isError, isLoading } = useLicenseLimits();\n const { toggleNotification } = useNotification();\n const { pathname } = useLocation();\n\n const { enforcementUserCount, permittedSeats, licenseLimitStatus, type } = license ?? {};\n\n React.useEffect(() => {\n if (isError || isLoading) {\n return;\n }\n\n const shouldDisplayNotification =\n !isNil(permittedSeats) &&\n !window.sessionStorage.getItem(`${STORAGE_KEY_PREFIX}-${pathname}`) &&\n licenseLimitStatus === 'OVER_LIMIT';\n\n let notificationType: NotificationConfig['type'];\n\n if (licenseLimitStatus === 'OVER_LIMIT') {\n notificationType = 'danger';\n }\n\n if (shouldDisplayNotification) {\n toggleNotification({\n type: notificationType,\n message: formatMessage(\n {\n id: 'notification.ee.warning.over-.message',\n defaultMessage:\n \"Add seats to {licenseLimitStatus, select, OVER_LIMIT {invite} other {re-enable}} Users. If you already did it but it's not reflected in Strapi yet, make sure to restart your app.\",\n },\n { licenseLimitStatus }\n ),\n title: formatMessage(\n {\n id: 'notification.ee.warning.at-seat-limit.title',\n defaultMessage:\n '{licenseLimitStatus, select, OVER_LIMIT {Over} other {At}} seat limit ({enforcementUserCount}/{permittedSeats})',\n },\n {\n licenseLimitStatus,\n enforcementUserCount,\n permittedSeats,\n }\n ),\n link: {\n url: type === 'gold' ? BILLING_SELF_HOSTED_URL : MANAGE_SEATS_URL,\n label: formatMessage({\n id: 'notification.ee.warning.seat-limit.link',\n defaultMessage: type === 'gold' ? 'Contact sales' : 'Manage seats',\n }),\n },\n blockTransition: true,\n onClose() {\n window.sessionStorage.setItem(`${STORAGE_KEY_PREFIX}-${pathname}`, 'true');\n },\n });\n }\n }, [\n toggleNotification,\n license,\n pathname,\n formatMessage,\n isLoading,\n permittedSeats,\n licenseLimitStatus,\n enforcementUserCount,\n isError,\n type,\n ]);\n};\n"],"names":["STORAGE_KEY_PREFIX","BILLING_SELF_HOSTED_URL","MANAGE_SEATS_URL","useLicenseLimitNotification","formatMessage","useIntl","license","isError","isLoading","useLicenseLimits","toggleNotification","useNotification","pathname","useLocation","enforcementUserCount","permittedSeats","licenseLimitStatus","type","React","useEffect","shouldDisplayNotification","isNil","window","sessionStorage","getItem","notificationType","message","id","defaultMessage","title","link","url","label","blockTransition","onClose","setItem"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeA,MAAMA,kBAAqB,GAAA,gCAAA;AAE3B,MAAMC,uBAA0B,GAAA,yCAAA;AAChC,MAAMC,gBAAmB,GAAA,wCAAA;MAEZC,2BAA8B,GAAA,IAAA;IACzC,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAM,EAAEC,OAAO,EAAEC,OAAO,EAAEC,SAAS,EAAE,GAAGC,iCAAAA,EAAAA;IACxC,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,6BAAAA,EAAAA;IAC/B,MAAM,EAAEC,QAAQ,EAAE,GAAGC,0BAAAA,EAAAA;IAErB,MAAM,EAAEC,oBAAoB,EAAEC,cAAc,EAAEC,kBAAkB,EAAEC,IAAI,EAAE,GAAGX,OAAAA,IAAW,EAAC;AAEvFY,IAAAA,gBAAAA,CAAMC,SAAS,CAAC,IAAA;AACd,QAAA,IAAIZ,WAAWC,SAAW,EAAA;AACxB,YAAA;AACF;AAEA,QAAA,MAAMY,4BACJ,CAACC,KAAAA,CAAMN,cACP,CAAA,IAAA,CAACO,OAAOC,cAAc,CAACC,OAAO,CAAC,GAAGxB,kBAAmB,CAAA,CAAC,EAAEY,QAAAA,CAAAA,CAAU,KAClEI,kBAAuB,KAAA,YAAA;QAEzB,IAAIS,gBAAAA;AAEJ,QAAA,IAAIT,uBAAuB,YAAc,EAAA;YACvCS,gBAAmB,GAAA,QAAA;AACrB;AAEA,QAAA,IAAIL,yBAA2B,EAAA;YAC7BV,kBAAmB,CAAA;gBACjBO,IAAMQ,EAAAA,gBAAAA;AACNC,gBAAAA,OAAAA,EAAStB,aACP,CAAA;oBACEuB,EAAI,EAAA,uCAAA;oBACJC,cACE,EAAA;iBAEJ,EAAA;AAAEZ,oBAAAA;AAAmB,iBAAA,CAAA;AAEvBa,gBAAAA,KAAAA,EAAOzB,aACL,CAAA;oBACEuB,EAAI,EAAA,6CAAA;oBACJC,cACE,EAAA;iBAEJ,EAAA;AACEZ,oBAAAA,kBAAAA;AACAF,oBAAAA,oBAAAA;AACAC,oBAAAA;AACF,iBAAA,CAAA;gBAEFe,IAAM,EAAA;oBACJC,GAAKd,EAAAA,IAAAA,KAAS,SAAShB,uBAA0BC,GAAAA,gBAAAA;AACjD8B,oBAAAA,KAAAA,EAAO5B,aAAc,CAAA;wBACnBuB,EAAI,EAAA,yCAAA;wBACJC,cAAgBX,EAAAA,IAAAA,KAAS,SAAS,eAAkB,GAAA;AACtD,qBAAA;AACF,iBAAA;gBACAgB,eAAiB,EAAA,IAAA;AACjBC,gBAAAA,OAAAA,CAAAA,GAAAA;oBACEZ,MAAOC,CAAAA,cAAc,CAACY,OAAO,CAAC,GAAGnC,kBAAmB,CAAA,CAAC,EAAEY,QAAAA,CAAAA,CAAU,EAAE,MAAA,CAAA;AACrE;AACF,aAAA,CAAA;AACF;KACC,EAAA;AACDF,QAAAA,kBAAAA;AACAJ,QAAAA,OAAAA;AACAM,QAAAA,QAAAA;AACAR,QAAAA,aAAAA;AACAI,QAAAA,SAAAA;AACAO,QAAAA,cAAAA;AACAC,QAAAA,kBAAAA;AACAF,QAAAA,oBAAAA;AACAP,QAAAA,OAAAA;AACAU,QAAAA;AACD,KAAA,CAAA;AACH;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLicenseLimitNotification.mjs","sources":["../../../../../../ee/admin/src/hooks/useLicenseLimitNotification.ts"],"sourcesContent":["/**\n *\n * useLicenseLimitNotification\n *\n */\nimport * as React from 'react';\n\nimport isNil from 'lodash/isNil';\nimport { useIntl } from 'react-intl';\nimport { useLocation } from 'react-router-dom';\n\nimport { NotificationConfig, useNotification } from '../../../../admin/src/features/Notifications';\n\nimport { useLicenseLimits } from './useLicenseLimits';\n\nconst STORAGE_KEY_PREFIX = 'strapi-notification-seat-limit';\n\nconst BILLING_SELF_HOSTED_URL = 'https://strapi.io/billing/request-seats';\nconst MANAGE_SEATS_URL = 'https://strapi.io/billing/manage-seats';\n\nexport const useLicenseLimitNotification = () => {\n const { formatMessage } = useIntl();\n const { license, isError, isLoading } = useLicenseLimits();\n const { toggleNotification } = useNotification();\n const { pathname } = useLocation();\n\n const { enforcementUserCount, permittedSeats, licenseLimitStatus, type } = license ?? {};\n\n React.useEffect(() => {\n if (isError || isLoading) {\n return;\n }\n\n const shouldDisplayNotification =\n !isNil(permittedSeats) &&\n !window.sessionStorage.getItem(`${STORAGE_KEY_PREFIX}-${pathname}`) &&\n licenseLimitStatus === 'OVER_LIMIT';\n\n let notificationType: NotificationConfig['type'];\n\n if (licenseLimitStatus === 'OVER_LIMIT') {\n notificationType = 'danger';\n }\n\n if (shouldDisplayNotification) {\n toggleNotification({\n type: notificationType,\n message: formatMessage(\n {\n id: 'notification.ee.warning.over-.message',\n defaultMessage:\n \"Add seats to {licenseLimitStatus, select, OVER_LIMIT {invite} other {re-enable}} Users. If you already did it but it's not reflected in Strapi yet, make sure to restart your app.\",\n },\n { licenseLimitStatus }\n ),\n title: formatMessage(\n {\n id: 'notification.ee.warning.at-seat-limit.title',\n defaultMessage:\n '{licenseLimitStatus, select, OVER_LIMIT {Over} other {At}} seat limit ({enforcementUserCount}/{permittedSeats})',\n },\n {\n licenseLimitStatus,\n enforcementUserCount,\n permittedSeats,\n }\n ),\n link: {\n url: type === 'gold' ? BILLING_SELF_HOSTED_URL : MANAGE_SEATS_URL,\n label: formatMessage({\n id: 'notification.ee.warning.seat-limit.link',\n defaultMessage: type === 'gold' ? 'Contact sales' : 'Manage seats',\n }),\n },\n blockTransition: true,\n onClose() {\n window.sessionStorage.setItem(`${STORAGE_KEY_PREFIX}-${pathname}`, 'true');\n },\n });\n }\n }, [\n toggleNotification,\n license,\n pathname,\n formatMessage,\n isLoading,\n permittedSeats,\n licenseLimitStatus,\n enforcementUserCount,\n isError,\n type,\n ]);\n};\n"],"names":["STORAGE_KEY_PREFIX","BILLING_SELF_HOSTED_URL","MANAGE_SEATS_URL","useLicenseLimitNotification","formatMessage","useIntl","license","isError","isLoading","useLicenseLimits","toggleNotification","useNotification","pathname","useLocation","enforcementUserCount","permittedSeats","licenseLimitStatus","type","React","useEffect","shouldDisplayNotification","isNil","window","sessionStorage","getItem","notificationType","message","id","defaultMessage","title","link","url","label","blockTransition","onClose","setItem"],"mappings":";;;;;;;AAeA,MAAMA,kBAAqB,GAAA,gCAAA;AAE3B,MAAMC,uBAA0B,GAAA,yCAAA;AAChC,MAAMC,gBAAmB,GAAA,wCAAA;MAEZC,2BAA8B,GAAA,IAAA;IACzC,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAM,EAAEC,OAAO,EAAEC,OAAO,EAAEC,SAAS,EAAE,GAAGC,gBAAAA,EAAAA;IACxC,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;IAC/B,MAAM,EAAEC,QAAQ,EAAE,GAAGC,WAAAA,EAAAA;IAErB,MAAM,EAAEC,oBAAoB,EAAEC,cAAc,EAAEC,kBAAkB,EAAEC,IAAI,EAAE,GAAGX,OAAAA,IAAW,EAAC;AAEvFY,IAAAA,KAAAA,CAAMC,SAAS,CAAC,IAAA;AACd,QAAA,IAAIZ,WAAWC,SAAW,EAAA;AACxB,YAAA;AACF;AAEA,QAAA,MAAMY,4BACJ,CAACC,KAAAA,CAAMN,
|
|
1
|
+
{"version":3,"file":"useLicenseLimitNotification.mjs","sources":["../../../../../../ee/admin/src/hooks/useLicenseLimitNotification.ts"],"sourcesContent":["/**\n *\n * useLicenseLimitNotification\n *\n */\nimport * as React from 'react';\n\nimport isNil from 'lodash/isNil';\nimport { useIntl } from 'react-intl';\nimport { useLocation } from 'react-router-dom';\n\nimport { NotificationConfig, useNotification } from '../../../../admin/src/features/Notifications';\n\nimport { useLicenseLimits } from './useLicenseLimits';\n\nconst STORAGE_KEY_PREFIX = 'strapi-notification-seat-limit';\n\nconst BILLING_SELF_HOSTED_URL = 'https://strapi.io/billing/request-seats';\nconst MANAGE_SEATS_URL = 'https://strapi.io/billing/manage-seats';\n\nexport const useLicenseLimitNotification = () => {\n const { formatMessage } = useIntl();\n const { license, isError, isLoading } = useLicenseLimits();\n const { toggleNotification } = useNotification();\n const { pathname } = useLocation();\n\n const { enforcementUserCount, permittedSeats, licenseLimitStatus, type } = license ?? {};\n\n React.useEffect(() => {\n if (isError || isLoading) {\n return;\n }\n\n const shouldDisplayNotification =\n !isNil(permittedSeats) &&\n !window.sessionStorage.getItem(`${STORAGE_KEY_PREFIX}-${pathname}`) &&\n licenseLimitStatus === 'OVER_LIMIT';\n\n let notificationType: NotificationConfig['type'];\n\n if (licenseLimitStatus === 'OVER_LIMIT') {\n notificationType = 'danger';\n }\n\n if (shouldDisplayNotification) {\n toggleNotification({\n type: notificationType,\n message: formatMessage(\n {\n id: 'notification.ee.warning.over-.message',\n defaultMessage:\n \"Add seats to {licenseLimitStatus, select, OVER_LIMIT {invite} other {re-enable}} Users. If you already did it but it's not reflected in Strapi yet, make sure to restart your app.\",\n },\n { licenseLimitStatus }\n ),\n title: formatMessage(\n {\n id: 'notification.ee.warning.at-seat-limit.title',\n defaultMessage:\n '{licenseLimitStatus, select, OVER_LIMIT {Over} other {At}} seat limit ({enforcementUserCount}/{permittedSeats})',\n },\n {\n licenseLimitStatus,\n enforcementUserCount,\n permittedSeats,\n }\n ),\n link: {\n url: type === 'gold' ? BILLING_SELF_HOSTED_URL : MANAGE_SEATS_URL,\n label: formatMessage({\n id: 'notification.ee.warning.seat-limit.link',\n defaultMessage: type === 'gold' ? 'Contact sales' : 'Manage seats',\n }),\n },\n blockTransition: true,\n onClose() {\n window.sessionStorage.setItem(`${STORAGE_KEY_PREFIX}-${pathname}`, 'true');\n },\n });\n }\n }, [\n toggleNotification,\n license,\n pathname,\n formatMessage,\n isLoading,\n permittedSeats,\n licenseLimitStatus,\n enforcementUserCount,\n isError,\n type,\n ]);\n};\n"],"names":["STORAGE_KEY_PREFIX","BILLING_SELF_HOSTED_URL","MANAGE_SEATS_URL","useLicenseLimitNotification","formatMessage","useIntl","license","isError","isLoading","useLicenseLimits","toggleNotification","useNotification","pathname","useLocation","enforcementUserCount","permittedSeats","licenseLimitStatus","type","React","useEffect","shouldDisplayNotification","isNil","window","sessionStorage","getItem","notificationType","message","id","defaultMessage","title","link","url","label","blockTransition","onClose","setItem"],"mappings":";;;;;;;AAeA,MAAMA,kBAAqB,GAAA,gCAAA;AAE3B,MAAMC,uBAA0B,GAAA,yCAAA;AAChC,MAAMC,gBAAmB,GAAA,wCAAA;MAEZC,2BAA8B,GAAA,IAAA;IACzC,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAM,EAAEC,OAAO,EAAEC,OAAO,EAAEC,SAAS,EAAE,GAAGC,gBAAAA,EAAAA;IACxC,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;IAC/B,MAAM,EAAEC,QAAQ,EAAE,GAAGC,WAAAA,EAAAA;IAErB,MAAM,EAAEC,oBAAoB,EAAEC,cAAc,EAAEC,kBAAkB,EAAEC,IAAI,EAAE,GAAGX,OAAAA,IAAW,EAAC;AAEvFY,IAAAA,KAAAA,CAAMC,SAAS,CAAC,IAAA;AACd,QAAA,IAAIZ,WAAWC,SAAW,EAAA;AACxB,YAAA;AACF;AAEA,QAAA,MAAMY,4BACJ,CAACC,KAAAA,CAAMN,cACP,CAAA,IAAA,CAACO,OAAOC,cAAc,CAACC,OAAO,CAAC,GAAGxB,kBAAmB,CAAA,CAAC,EAAEY,QAAAA,CAAAA,CAAU,KAClEI,kBAAuB,KAAA,YAAA;QAEzB,IAAIS,gBAAAA;AAEJ,QAAA,IAAIT,uBAAuB,YAAc,EAAA;YACvCS,gBAAmB,GAAA,QAAA;AACrB;AAEA,QAAA,IAAIL,yBAA2B,EAAA;YAC7BV,kBAAmB,CAAA;gBACjBO,IAAMQ,EAAAA,gBAAAA;AACNC,gBAAAA,OAAAA,EAAStB,aACP,CAAA;oBACEuB,EAAI,EAAA,uCAAA;oBACJC,cACE,EAAA;iBAEJ,EAAA;AAAEZ,oBAAAA;AAAmB,iBAAA,CAAA;AAEvBa,gBAAAA,KAAAA,EAAOzB,aACL,CAAA;oBACEuB,EAAI,EAAA,6CAAA;oBACJC,cACE,EAAA;iBAEJ,EAAA;AACEZ,oBAAAA,kBAAAA;AACAF,oBAAAA,oBAAAA;AACAC,oBAAAA;AACF,iBAAA,CAAA;gBAEFe,IAAM,EAAA;oBACJC,GAAKd,EAAAA,IAAAA,KAAS,SAAShB,uBAA0BC,GAAAA,gBAAAA;AACjD8B,oBAAAA,KAAAA,EAAO5B,aAAc,CAAA;wBACnBuB,EAAI,EAAA,yCAAA;wBACJC,cAAgBX,EAAAA,IAAAA,KAAS,SAAS,eAAkB,GAAA;AACtD,qBAAA;AACF,iBAAA;gBACAgB,eAAiB,EAAA,IAAA;AACjBC,gBAAAA,OAAAA,CAAAA,GAAAA;oBACEZ,MAAOC,CAAAA,cAAc,CAACY,OAAO,CAAC,GAAGnC,kBAAmB,CAAA,CAAC,EAAEY,QAAAA,CAAAA,CAAU,EAAE,MAAA,CAAA;AACrE;AACF,aAAA,CAAA;AACF;KACC,EAAA;AACDF,QAAAA,kBAAAA;AACAJ,QAAAA,OAAAA;AACAM,QAAAA,QAAAA;AACAR,QAAAA,aAAAA;AACAI,QAAAA,SAAAA;AACAO,QAAAA,cAAAA;AACAC,QAAAA,kBAAAA;AACAF,QAAAA,oBAAAA;AACAP,QAAAA,OAAAA;AACAU,QAAAA;AACD,KAAA,CAAA;AACH;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SSOProviders.js","sources":["../../../../../../../../ee/admin/src/pages/AuthPage/components/SSOProviders.tsx"],"sourcesContent":["import { Flex, Grid, Tooltip, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { Link } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { GetProviders } from '../../../../../../shared/contracts/providers';\n\n/* -------------------------------------------------------------------------------------------------\n * SSOProviders\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SSOProvidersProps {\n providers: GetProviders.Response;\n displayAllProviders?: boolean;\n}\n\nconst SSOProviders = ({ providers, displayAllProviders }: SSOProvidersProps) => {\n const { formatMessage } = useIntl();\n\n if (displayAllProviders) {\n return (\n <Grid.Root gap={4}>\n {providers.map((provider) => (\n <Grid.Item key={provider.uid} col={4} direction=\"column\" alignItems=\"stretch\">\n <SSOProviderButton provider={provider} />\n </Grid.Item>\n ))}\n </Grid.Root>\n );\n }\n\n if (providers.length > 2 && !displayAllProviders) {\n return (\n <Grid.Root gap={4}>\n {providers.slice(0, 2).map((provider) => (\n <Grid.Item key={provider.uid} col={4} direction=\"column\" alignItems=\"stretch\">\n <SSOProviderButton provider={provider} />\n </Grid.Item>\n ))}\n <Grid.Item col={4} direction=\"column\" alignItems=\"stretch\">\n <Tooltip\n label={formatMessage({\n id: 'global.see-more',\n })}\n >\n <SSOButton as={Link} to=\"/auth/providers\">\n <span aria-hidden>•••</span>\n </SSOButton>\n </Tooltip>\n </Grid.Item>\n </Grid.Root>\n );\n }\n\n return (\n <SSOProvidersWrapper justifyContent=\"center\">\n {providers.map((provider) => (\n <SSOProviderButton key={provider.uid} provider={provider} />\n ))}\n </SSOProvidersWrapper>\n );\n};\n\nconst SSOProvidersWrapper = styled(Flex)`\n & a:not(:first-child):not(:last-child) {\n margin: 0 ${({ theme }) => theme.spaces[2]};\n }\n & a:first-child {\n margin-right: ${({ theme }) => theme.spaces[2]};\n }\n & a:last-child {\n margin-left: ${({ theme }) => theme.spaces[2]};\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * SSOProviderButton\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SSOProviderButtonProps {\n provider: GetProviders.Response[number];\n}\n\nconst SSOProviderButton = ({ provider }: SSOProviderButtonProps) => {\n return (\n <Tooltip label={provider.displayName}>\n <SSOButton href={`${window.strapi.backendURL}/admin/connect/${provider.uid}`}>\n {provider.icon ? (\n <img src={provider.icon} aria-hidden alt=\"\" height=\"32px\" />\n ) : (\n <Typography>{provider.displayName}</Typography>\n )}\n </SSOButton>\n </Tooltip>\n );\n};\n\nconst SSOButton = styled.a`\n width: 13.6rem;\n display: flex;\n justify-content: center;\n align-items: center;\n height: 4.8rem;\n border: 1px solid ${({ theme }) => theme.colors.neutral150};\n border-radius: ${({ theme }) => theme.borderRadius};\n text-decoration: inherit;\n &:link {\n text-decoration: none;\n }\n color: ${({ theme }) => theme.colors.neutral600};\n`;\n\nexport { SSOProviders };\nexport type { SSOProvidersProps };\n"],"names":["SSOProviders","providers","displayAllProviders","formatMessage","useIntl","_jsx","Grid","Root","gap","map","provider","Item","col","direction","alignItems","SSOProviderButton","uid","length","_jsxs","slice","Tooltip","label","id","SSOButton","as","Link","to","span","aria-hidden","SSOProvidersWrapper","justifyContent","styled","Flex","theme","spaces","displayName","href","window","strapi","backendURL","icon","img","src","alt","height","Typography","a","colors","neutral150","borderRadius","neutral600"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"SSOProviders.js","sources":["../../../../../../../../ee/admin/src/pages/AuthPage/components/SSOProviders.tsx"],"sourcesContent":["import { Flex, Grid, Tooltip, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { Link } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { GetProviders } from '../../../../../../shared/contracts/providers';\n\n/* -------------------------------------------------------------------------------------------------\n * SSOProviders\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SSOProvidersProps {\n providers: GetProviders.Response;\n displayAllProviders?: boolean;\n}\n\nconst SSOProviders = ({ providers, displayAllProviders }: SSOProvidersProps) => {\n const { formatMessage } = useIntl();\n\n if (displayAllProviders) {\n return (\n <Grid.Root gap={4}>\n {providers.map((provider) => (\n <Grid.Item key={provider.uid} col={4} direction=\"column\" alignItems=\"stretch\">\n <SSOProviderButton provider={provider} />\n </Grid.Item>\n ))}\n </Grid.Root>\n );\n }\n\n if (providers.length > 2 && !displayAllProviders) {\n return (\n <Grid.Root gap={4}>\n {providers.slice(0, 2).map((provider) => (\n <Grid.Item key={provider.uid} col={4} direction=\"column\" alignItems=\"stretch\">\n <SSOProviderButton provider={provider} />\n </Grid.Item>\n ))}\n <Grid.Item col={4} direction=\"column\" alignItems=\"stretch\">\n <Tooltip\n label={formatMessage({\n id: 'global.see-more',\n })}\n >\n <SSOButton as={Link} to=\"/auth/providers\">\n <span aria-hidden>•••</span>\n </SSOButton>\n </Tooltip>\n </Grid.Item>\n </Grid.Root>\n );\n }\n\n return (\n <SSOProvidersWrapper justifyContent=\"center\">\n {providers.map((provider) => (\n <SSOProviderButton key={provider.uid} provider={provider} />\n ))}\n </SSOProvidersWrapper>\n );\n};\n\nconst SSOProvidersWrapper = styled(Flex)`\n & a:not(:first-child):not(:last-child) {\n margin: 0 ${({ theme }) => theme.spaces[2]};\n }\n & a:first-child {\n margin-right: ${({ theme }) => theme.spaces[2]};\n }\n & a:last-child {\n margin-left: ${({ theme }) => theme.spaces[2]};\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * SSOProviderButton\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SSOProviderButtonProps {\n provider: GetProviders.Response[number];\n}\n\nconst SSOProviderButton = ({ provider }: SSOProviderButtonProps) => {\n return (\n <Tooltip label={provider.displayName}>\n <SSOButton href={`${window.strapi.backendURL}/admin/connect/${provider.uid}`}>\n {provider.icon ? (\n <img src={provider.icon} aria-hidden alt=\"\" height=\"32px\" />\n ) : (\n <Typography>{provider.displayName}</Typography>\n )}\n </SSOButton>\n </Tooltip>\n );\n};\n\nconst SSOButton = styled.a`\n width: 13.6rem;\n display: flex;\n justify-content: center;\n align-items: center;\n height: 4.8rem;\n border: 1px solid ${({ theme }) => theme.colors.neutral150};\n border-radius: ${({ theme }) => theme.borderRadius};\n text-decoration: inherit;\n &:link {\n text-decoration: none;\n }\n color: ${({ theme }) => theme.colors.neutral600};\n`;\n\nexport { SSOProviders };\nexport type { SSOProvidersProps };\n"],"names":["SSOProviders","providers","displayAllProviders","formatMessage","useIntl","_jsx","Grid","Root","gap","map","provider","Item","col","direction","alignItems","SSOProviderButton","uid","length","_jsxs","slice","Tooltip","label","id","SSOButton","as","Link","to","span","aria-hidden","SSOProvidersWrapper","justifyContent","styled","Flex","theme","spaces","displayName","href","window","strapi","backendURL","icon","img","src","alt","height","Typography","a","colors","neutral150","borderRadius","neutral600"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SSOProviders.mjs","sources":["../../../../../../../../ee/admin/src/pages/AuthPage/components/SSOProviders.tsx"],"sourcesContent":["import { Flex, Grid, Tooltip, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { Link } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { GetProviders } from '../../../../../../shared/contracts/providers';\n\n/* -------------------------------------------------------------------------------------------------\n * SSOProviders\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SSOProvidersProps {\n providers: GetProviders.Response;\n displayAllProviders?: boolean;\n}\n\nconst SSOProviders = ({ providers, displayAllProviders }: SSOProvidersProps) => {\n const { formatMessage } = useIntl();\n\n if (displayAllProviders) {\n return (\n <Grid.Root gap={4}>\n {providers.map((provider) => (\n <Grid.Item key={provider.uid} col={4} direction=\"column\" alignItems=\"stretch\">\n <SSOProviderButton provider={provider} />\n </Grid.Item>\n ))}\n </Grid.Root>\n );\n }\n\n if (providers.length > 2 && !displayAllProviders) {\n return (\n <Grid.Root gap={4}>\n {providers.slice(0, 2).map((provider) => (\n <Grid.Item key={provider.uid} col={4} direction=\"column\" alignItems=\"stretch\">\n <SSOProviderButton provider={provider} />\n </Grid.Item>\n ))}\n <Grid.Item col={4} direction=\"column\" alignItems=\"stretch\">\n <Tooltip\n label={formatMessage({\n id: 'global.see-more',\n })}\n >\n <SSOButton as={Link} to=\"/auth/providers\">\n <span aria-hidden>•••</span>\n </SSOButton>\n </Tooltip>\n </Grid.Item>\n </Grid.Root>\n );\n }\n\n return (\n <SSOProvidersWrapper justifyContent=\"center\">\n {providers.map((provider) => (\n <SSOProviderButton key={provider.uid} provider={provider} />\n ))}\n </SSOProvidersWrapper>\n );\n};\n\nconst SSOProvidersWrapper = styled(Flex)`\n & a:not(:first-child):not(:last-child) {\n margin: 0 ${({ theme }) => theme.spaces[2]};\n }\n & a:first-child {\n margin-right: ${({ theme }) => theme.spaces[2]};\n }\n & a:last-child {\n margin-left: ${({ theme }) => theme.spaces[2]};\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * SSOProviderButton\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SSOProviderButtonProps {\n provider: GetProviders.Response[number];\n}\n\nconst SSOProviderButton = ({ provider }: SSOProviderButtonProps) => {\n return (\n <Tooltip label={provider.displayName}>\n <SSOButton href={`${window.strapi.backendURL}/admin/connect/${provider.uid}`}>\n {provider.icon ? (\n <img src={provider.icon} aria-hidden alt=\"\" height=\"32px\" />\n ) : (\n <Typography>{provider.displayName}</Typography>\n )}\n </SSOButton>\n </Tooltip>\n );\n};\n\nconst SSOButton = styled.a`\n width: 13.6rem;\n display: flex;\n justify-content: center;\n align-items: center;\n height: 4.8rem;\n border: 1px solid ${({ theme }) => theme.colors.neutral150};\n border-radius: ${({ theme }) => theme.borderRadius};\n text-decoration: inherit;\n &:link {\n text-decoration: none;\n }\n color: ${({ theme }) => theme.colors.neutral600};\n`;\n\nexport { SSOProviders };\nexport type { SSOProvidersProps };\n"],"names":["SSOProviders","providers","displayAllProviders","formatMessage","useIntl","_jsx","Grid","Root","gap","map","provider","Item","col","direction","alignItems","SSOProviderButton","uid","length","_jsxs","slice","Tooltip","label","id","SSOButton","as","Link","to","span","aria-hidden","SSOProvidersWrapper","justifyContent","styled","Flex","theme","spaces","displayName","href","window","strapi","backendURL","icon","img","src","alt","height","Typography","a","colors","neutral150","borderRadius","neutral600"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"SSOProviders.mjs","sources":["../../../../../../../../ee/admin/src/pages/AuthPage/components/SSOProviders.tsx"],"sourcesContent":["import { Flex, Grid, Tooltip, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { Link } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { GetProviders } from '../../../../../../shared/contracts/providers';\n\n/* -------------------------------------------------------------------------------------------------\n * SSOProviders\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SSOProvidersProps {\n providers: GetProviders.Response;\n displayAllProviders?: boolean;\n}\n\nconst SSOProviders = ({ providers, displayAllProviders }: SSOProvidersProps) => {\n const { formatMessage } = useIntl();\n\n if (displayAllProviders) {\n return (\n <Grid.Root gap={4}>\n {providers.map((provider) => (\n <Grid.Item key={provider.uid} col={4} direction=\"column\" alignItems=\"stretch\">\n <SSOProviderButton provider={provider} />\n </Grid.Item>\n ))}\n </Grid.Root>\n );\n }\n\n if (providers.length > 2 && !displayAllProviders) {\n return (\n <Grid.Root gap={4}>\n {providers.slice(0, 2).map((provider) => (\n <Grid.Item key={provider.uid} col={4} direction=\"column\" alignItems=\"stretch\">\n <SSOProviderButton provider={provider} />\n </Grid.Item>\n ))}\n <Grid.Item col={4} direction=\"column\" alignItems=\"stretch\">\n <Tooltip\n label={formatMessage({\n id: 'global.see-more',\n })}\n >\n <SSOButton as={Link} to=\"/auth/providers\">\n <span aria-hidden>•••</span>\n </SSOButton>\n </Tooltip>\n </Grid.Item>\n </Grid.Root>\n );\n }\n\n return (\n <SSOProvidersWrapper justifyContent=\"center\">\n {providers.map((provider) => (\n <SSOProviderButton key={provider.uid} provider={provider} />\n ))}\n </SSOProvidersWrapper>\n );\n};\n\nconst SSOProvidersWrapper = styled(Flex)`\n & a:not(:first-child):not(:last-child) {\n margin: 0 ${({ theme }) => theme.spaces[2]};\n }\n & a:first-child {\n margin-right: ${({ theme }) => theme.spaces[2]};\n }\n & a:last-child {\n margin-left: ${({ theme }) => theme.spaces[2]};\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * SSOProviderButton\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SSOProviderButtonProps {\n provider: GetProviders.Response[number];\n}\n\nconst SSOProviderButton = ({ provider }: SSOProviderButtonProps) => {\n return (\n <Tooltip label={provider.displayName}>\n <SSOButton href={`${window.strapi.backendURL}/admin/connect/${provider.uid}`}>\n {provider.icon ? (\n <img src={provider.icon} aria-hidden alt=\"\" height=\"32px\" />\n ) : (\n <Typography>{provider.displayName}</Typography>\n )}\n </SSOButton>\n </Tooltip>\n );\n};\n\nconst SSOButton = styled.a`\n width: 13.6rem;\n display: flex;\n justify-content: center;\n align-items: center;\n height: 4.8rem;\n border: 1px solid ${({ theme }) => theme.colors.neutral150};\n border-radius: ${({ theme }) => theme.borderRadius};\n text-decoration: inherit;\n &:link {\n text-decoration: none;\n }\n color: ${({ theme }) => theme.colors.neutral600};\n`;\n\nexport { SSOProviders };\nexport type { SSOProvidersProps };\n"],"names":["SSOProviders","providers","displayAllProviders","formatMessage","useIntl","_jsx","Grid","Root","gap","map","provider","Item","col","direction","alignItems","SSOProviderButton","uid","length","_jsxs","slice","Tooltip","label","id","SSOButton","as","Link","to","span","aria-hidden","SSOProvidersWrapper","justifyContent","styled","Flex","theme","spaces","displayName","href","window","strapi","backendURL","icon","img","src","alt","height","Typography","a","colors","neutral150","borderRadius","neutral600"],"mappings":"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"}
|