@strapi/admin 5.43.0 → 5.45.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/admin/src/StrapiApp.js +17 -4
- package/dist/admin/admin/src/StrapiApp.js.map +1 -1
- package/dist/admin/admin/src/StrapiApp.mjs +18 -5
- package/dist/admin/admin/src/StrapiApp.mjs.map +1 -1
- package/dist/admin/admin/src/components/Form.js +18 -8
- package/dist/admin/admin/src/components/Form.js.map +1 -1
- package/dist/admin/admin/src/components/Form.mjs +18 -8
- package/dist/admin/admin/src/components/Form.mjs.map +1 -1
- package/dist/admin/admin/src/components/Layouts/Layout.js +1 -0
- package/dist/admin/admin/src/components/Layouts/Layout.js.map +1 -1
- package/dist/admin/admin/src/components/Layouts/Layout.mjs +1 -0
- package/dist/admin/admin/src/components/Layouts/Layout.mjs.map +1 -1
- package/dist/admin/admin/src/components/Table.js.map +1 -1
- package/dist/admin/admin/src/components/Table.mjs.map +1 -1
- package/dist/admin/admin/src/components/Widgets.js +52 -0
- package/dist/admin/admin/src/components/Widgets.js.map +1 -1
- package/dist/admin/admin/src/components/Widgets.mjs +54 -3
- package/dist/admin/admin/src/components/Widgets.mjs.map +1 -1
- package/dist/admin/admin/src/constants.js +49 -0
- package/dist/admin/admin/src/constants.js.map +1 -1
- package/dist/admin/admin/src/constants.mjs +49 -0
- package/dist/admin/admin/src/constants.mjs.map +1 -1
- package/dist/admin/admin/src/core/apis/router.js +4 -4
- package/dist/admin/admin/src/core/apis/router.js.map +1 -1
- package/dist/admin/admin/src/core/apis/router.mjs +4 -4
- package/dist/admin/admin/src/core/apis/router.mjs.map +1 -1
- package/dist/admin/admin/src/features/Tracking.js.map +1 -1
- package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/{pages/ApiTokens/EditView/components → components/Tokens}/FormApiTokenContainer.js +48 -11
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.js.map +1 -0
- package/dist/admin/admin/src/pages/Settings/{pages/ApiTokens/EditView/components → components/Tokens}/FormApiTokenContainer.mjs +49 -12
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.mjs.map +1 -0
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js +1 -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 +1 -1
- 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 +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 +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 +21 -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 +21 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.mjs +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/constants.js +33 -0
- package/dist/admin/admin/src/pages/Settings/components/Tokens/constants.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/constants.mjs +14 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/constants.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/{pages/ApiTokens/EditView → components/Tokens}/utils/getDateOfExpiration.js +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/utils/getDateOfExpiration.js.map +1 -0
- package/dist/admin/admin/src/pages/Settings/{pages/ApiTokens/EditView → components/Tokens}/utils/getDateOfExpiration.mjs +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/utils/getDateOfExpiration.mjs.map +1 -0
- package/dist/admin/admin/src/pages/Settings/constants.js +182 -151
- package/dist/admin/admin/src/pages/Settings/constants.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/constants.mjs +182 -151
- package/dist/admin/admin/src/pages/Settings/constants.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/CreateView.js +17 -0
- package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/CreateView.js.map +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/CreateView.mjs +15 -0
- package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/CreateView.mjs.map +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/EditViewPage.js +314 -0
- package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/EditViewPage.js.map +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/EditViewPage.mjs +292 -0
- package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/EditViewPage.mjs.map +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/components/AdminPermissions.js +70 -0
- package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/components/AdminPermissions.js.map +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/components/AdminPermissions.mjs +49 -0
- package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/components/AdminPermissions.mjs.map +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/ListView.js +254 -0
- package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/ListView.js.map +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/ListView.mjs +231 -0
- package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/ListView.mjs.map +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.js +42 -33
- 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 +43 -34
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js +3 -2
- 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 +3 -2
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.js +23 -12
- 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 +23 -12
- 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 +124 -35
- 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 +126 -37
- 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 +24 -9
- 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 +24 -9
- 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 +5 -3
- 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 +5 -3
- 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 +171 -36
- 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 +172 -37
- 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 +5 -3
- 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 +5 -3
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.js +59 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.mjs +40 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/createPermissionChecker.js +89 -0
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/createPermissionChecker.js.map +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/createPermissionChecker.mjs +86 -0
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/createPermissionChecker.mjs.map +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/updateValues.js +35 -9
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/updateValues.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/updateValues.mjs +35 -10
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/updateValues.mjs.map +1 -1
- package/dist/admin/admin/src/render.js +6 -3
- package/dist/admin/admin/src/render.js.map +1 -1
- package/dist/admin/admin/src/render.mjs +6 -3
- package/dist/admin/admin/src/render.mjs.map +1 -1
- package/dist/admin/admin/src/router.js +4 -4
- package/dist/admin/admin/src/router.js.map +1 -1
- package/dist/admin/admin/src/router.mjs +1 -1
- package/dist/admin/admin/src/router.mjs.map +1 -1
- package/dist/admin/admin/src/services/apiTokens.js +85 -2
- package/dist/admin/admin/src/services/apiTokens.js.map +1 -1
- package/dist/admin/admin/src/services/apiTokens.mjs +80 -3
- package/dist/admin/admin/src/services/apiTokens.mjs.map +1 -1
- package/dist/admin/admin/src/translations/ar.json.js +4 -1
- package/dist/admin/admin/src/translations/ar.json.js.map +1 -1
- package/dist/admin/admin/src/translations/ar.json.mjs +4 -1
- package/dist/admin/admin/src/translations/ar.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/cs.json.js +736 -13
- package/dist/admin/admin/src/translations/cs.json.js.map +1 -1
- package/dist/admin/admin/src/translations/cs.json.mjs +728 -14
- package/dist/admin/admin/src/translations/cs.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/de.json.js +4 -1
- package/dist/admin/admin/src/translations/de.json.js.map +1 -1
- package/dist/admin/admin/src/translations/de.json.mjs +4 -1
- package/dist/admin/admin/src/translations/de.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/en.json.js +20 -2
- package/dist/admin/admin/src/translations/en.json.js.map +1 -1
- package/dist/admin/admin/src/translations/en.json.mjs +20 -2
- package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/es.json.js +4 -1
- package/dist/admin/admin/src/translations/es.json.js.map +1 -1
- package/dist/admin/admin/src/translations/es.json.mjs +4 -1
- package/dist/admin/admin/src/translations/es.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/fr.json.js +4 -1
- package/dist/admin/admin/src/translations/fr.json.js.map +1 -1
- package/dist/admin/admin/src/translations/fr.json.mjs +4 -1
- package/dist/admin/admin/src/translations/fr.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/it.json.js +4 -1
- package/dist/admin/admin/src/translations/it.json.js.map +1 -1
- package/dist/admin/admin/src/translations/it.json.mjs +4 -1
- package/dist/admin/admin/src/translations/it.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/ru.json.js +32 -19
- package/dist/admin/admin/src/translations/ru.json.js.map +1 -1
- package/dist/admin/admin/src/translations/ru.json.mjs +32 -19
- package/dist/admin/admin/src/translations/ru.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/zh-Hans.json.js +4 -1
- package/dist/admin/admin/src/translations/zh-Hans.json.js.map +1 -1
- package/dist/admin/admin/src/translations/zh-Hans.json.mjs +4 -1
- package/dist/admin/admin/src/translations/zh-Hans.json.mjs.map +1 -1
- package/dist/admin/admin/src/utils/getFetchClient.js +33 -4
- package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
- package/dist/admin/admin/src/utils/getFetchClient.mjs +33 -4
- package/dist/admin/admin/src/utils/getFetchClient.mjs.map +1 -1
- package/dist/admin/admin/tests/server.js +99 -21
- package/dist/admin/admin/tests/server.js.map +1 -1
- package/dist/admin/admin/tests/server.mjs +99 -21
- package/dist/admin/admin/tests/server.mjs.map +1 -1
- package/dist/admin/src/components/Widgets.d.ts +2 -1
- package/dist/admin/src/constants.d.ts +26 -0
- package/dist/admin/src/core/apis/router.d.ts +1 -1
- package/dist/admin/src/features/Tracking.d.ts +2 -1
- package/dist/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.d.ts +24 -0
- package/dist/admin/src/pages/Settings/components/Tokens/Table.d.ts +2 -1
- package/dist/admin/src/pages/Settings/components/Tokens/constants.d.ts +17 -0
- package/dist/admin/src/pages/Settings/constants.d.ts +1 -1
- package/dist/admin/src/pages/Settings/pages/AdminTokens/CreateView.d.ts +1 -0
- package/dist/admin/src/pages/Settings/pages/AdminTokens/EditView/EditViewPage.d.ts +2 -0
- package/dist/admin/src/pages/Settings/pages/AdminTokens/EditView/components/AdminPermissions.d.ts +13 -0
- package/dist/admin/src/pages/Settings/pages/AdminTokens/ListView.d.ts +2 -0
- package/dist/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.d.ts +4 -3
- package/dist/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.d.ts +3 -1
- package/dist/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.d.ts +1 -0
- package/dist/admin/src/pages/Settings/pages/Roles/components/Permissions.d.ts +5 -0
- package/dist/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.d.ts +8 -7
- package/dist/admin/src/pages/Settings/pages/Roles/utils/createPermissionChecker.d.ts +27 -0
- package/dist/admin/src/pages/Settings/pages/Roles/utils/updateValues.d.ts +8 -2
- package/dist/admin/src/services/apiTokens.d.ts +5 -2
- package/dist/admin/src/types/permissions.d.ts +1 -1
- package/dist/admin/src/utils/getFetchClient.d.ts +14 -1
- package/dist/server/server/src/bootstrap.js +37 -5
- package/dist/server/server/src/bootstrap.js.map +1 -1
- package/dist/server/server/src/bootstrap.mjs +37 -5
- package/dist/server/server/src/bootstrap.mjs.map +1 -1
- package/dist/server/server/src/config/admin-actions.js +48 -0
- package/dist/server/server/src/config/admin-actions.js.map +1 -1
- package/dist/server/server/src/config/admin-actions.mjs +48 -0
- package/dist/server/server/src/config/admin-actions.mjs.map +1 -1
- package/dist/server/server/src/content-types/Permission.js +10 -1
- package/dist/server/server/src/content-types/Permission.js.map +1 -1
- package/dist/server/server/src/content-types/Permission.mjs +10 -1
- package/dist/server/server/src/content-types/Permission.mjs.map +1 -1
- package/dist/server/server/src/content-types/User.js +8 -0
- package/dist/server/server/src/content-types/User.js.map +1 -1
- package/dist/server/server/src/content-types/User.mjs +8 -0
- package/dist/server/server/src/content-types/User.mjs.map +1 -1
- package/dist/server/server/src/content-types/api-token.js +27 -1
- package/dist/server/server/src/content-types/api-token.js.map +1 -1
- package/dist/server/server/src/content-types/api-token.mjs +27 -1
- package/dist/server/server/src/content-types/api-token.mjs.map +1 -1
- package/dist/server/server/src/controllers/admin-token.js +194 -0
- package/dist/server/server/src/controllers/admin-token.js.map +1 -0
- package/dist/server/server/src/controllers/admin-token.mjs +192 -0
- package/dist/server/server/src/controllers/admin-token.mjs.map +1 -0
- package/dist/server/server/src/controllers/api-token.js +48 -47
- package/dist/server/server/src/controllers/api-token.js.map +1 -1
- package/dist/server/server/src/controllers/api-token.mjs +48 -47
- package/dist/server/server/src/controllers/api-token.mjs.map +1 -1
- package/dist/server/server/src/controllers/index.js +2 -0
- package/dist/server/server/src/controllers/index.js.map +1 -1
- package/dist/server/server/src/controllers/index.mjs +2 -0
- package/dist/server/server/src/controllers/index.mjs.map +1 -1
- package/dist/server/server/src/domain/permission/index.js +2 -1
- package/dist/server/server/src/domain/permission/index.js.map +1 -1
- package/dist/server/server/src/domain/permission/index.mjs +2 -1
- package/dist/server/server/src/domain/permission/index.mjs.map +1 -1
- package/dist/server/server/src/policies/index.js +2 -0
- package/dist/server/server/src/policies/index.js.map +1 -1
- package/dist/server/server/src/policies/index.mjs +2 -0
- package/dist/server/server/src/policies/index.mjs.map +1 -1
- package/dist/server/server/src/policies/isAdminTokensEnabled.js +16 -0
- package/dist/server/server/src/policies/isAdminTokensEnabled.js.map +1 -0
- package/dist/server/server/src/policies/isAdminTokensEnabled.mjs +14 -0
- package/dist/server/server/src/policies/isAdminTokensEnabled.mjs.map +1 -0
- package/dist/server/server/src/register.js +4 -2
- package/dist/server/server/src/register.js.map +1 -1
- package/dist/server/server/src/register.mjs +4 -2
- package/dist/server/server/src/register.mjs.map +1 -1
- package/dist/server/server/src/routes/admin-tokens.js +140 -0
- package/dist/server/server/src/routes/admin-tokens.js.map +1 -0
- package/dist/server/server/src/routes/admin-tokens.mjs +138 -0
- package/dist/server/server/src/routes/admin-tokens.mjs.map +1 -0
- package/dist/server/server/src/routes/index.js +2 -0
- package/dist/server/server/src/routes/index.js.map +1 -1
- package/dist/server/server/src/routes/index.mjs +2 -0
- package/dist/server/server/src/routes/index.mjs.map +1 -1
- package/dist/server/server/src/services/api-token.js +805 -101
- package/dist/server/server/src/services/api-token.js.map +1 -1
- package/dist/server/server/src/services/api-token.mjs +800 -101
- package/dist/server/server/src/services/api-token.mjs.map +1 -1
- package/dist/server/server/src/services/constants.js +2 -0
- package/dist/server/server/src/services/constants.js.map +1 -1
- package/dist/server/server/src/services/constants.mjs +2 -0
- package/dist/server/server/src/services/constants.mjs.map +1 -1
- package/dist/server/server/src/services/homepage.js +1 -1
- package/dist/server/server/src/services/homepage.js.map +1 -1
- package/dist/server/server/src/services/homepage.mjs +1 -1
- package/dist/server/server/src/services/homepage.mjs.map +1 -1
- package/dist/server/server/src/services/index.js +2 -1
- package/dist/server/server/src/services/index.js.map +1 -1
- package/dist/server/server/src/services/index.mjs +3 -2
- package/dist/server/server/src/services/index.mjs.map +1 -1
- package/dist/server/server/src/services/permission/engine.js +6 -0
- package/dist/server/server/src/services/permission/engine.js.map +1 -1
- package/dist/server/server/src/services/permission/engine.mjs +6 -0
- package/dist/server/server/src/services/permission/engine.mjs.map +1 -1
- package/dist/server/server/src/services/permission/queries.js +11 -2
- package/dist/server/server/src/services/permission/queries.js.map +1 -1
- package/dist/server/server/src/services/permission/queries.mjs +12 -3
- package/dist/server/server/src/services/permission/queries.mjs.map +1 -1
- package/dist/server/server/src/services/role.js +3 -0
- package/dist/server/server/src/services/role.js.map +1 -1
- package/dist/server/server/src/services/role.mjs +3 -0
- package/dist/server/server/src/services/role.mjs.map +1 -1
- package/dist/server/server/src/strategies/admin-token.js +110 -0
- package/dist/server/server/src/strategies/admin-token.js.map +1 -0
- package/dist/server/server/src/strategies/admin-token.mjs +104 -0
- package/dist/server/server/src/strategies/admin-token.mjs.map +1 -0
- package/dist/server/server/src/strategies/api-token-utils.js +56 -0
- package/dist/server/server/src/strategies/api-token-utils.js.map +1 -0
- package/dist/server/server/src/strategies/api-token-utils.mjs +52 -0
- package/dist/server/server/src/strategies/api-token-utils.mjs.map +1 -0
- package/dist/server/server/src/strategies/content-api-token.js +104 -0
- package/dist/server/server/src/strategies/content-api-token.js.map +1 -0
- package/dist/server/server/src/strategies/content-api-token.mjs +98 -0
- package/dist/server/server/src/strategies/content-api-token.mjs.map +1 -0
- package/dist/server/server/src/validation/admin-tokens.js +28 -0
- package/dist/server/server/src/validation/admin-tokens.js.map +1 -0
- package/dist/server/server/src/validation/admin-tokens.mjs +25 -0
- package/dist/server/server/src/validation/admin-tokens.mjs.map +1 -0
- package/dist/server/server/src/validation/api-tokens.js +5 -2
- package/dist/server/server/src/validation/api-tokens.js.map +1 -1
- package/dist/server/server/src/validation/api-tokens.mjs +5 -2
- package/dist/server/server/src/validation/api-tokens.mjs.map +1 -1
- package/dist/server/server/src/validation/project-settings.js +15 -16
- package/dist/server/server/src/validation/project-settings.js.map +1 -1
- package/dist/server/server/src/validation/project-settings.mjs +4 -5
- package/dist/server/server/src/validation/project-settings.mjs.map +1 -1
- package/dist/server/src/bootstrap.d.ts.map +1 -1
- package/dist/server/src/config/admin-actions.d.ts.map +1 -1
- package/dist/server/src/content-types/Permission.d.ts +9 -0
- package/dist/server/src/content-types/Permission.d.ts.map +1 -1
- package/dist/server/src/content-types/User.d.ts +8 -0
- package/dist/server/src/content-types/User.d.ts.map +1 -1
- package/dist/server/src/content-types/api-token.d.ts +23 -0
- package/dist/server/src/content-types/api-token.d.ts.map +1 -1
- package/dist/server/src/content-types/index.d.ts +40 -0
- package/dist/server/src/content-types/index.d.ts.map +1 -1
- package/dist/server/src/controllers/admin-token.d.ts +12 -0
- package/dist/server/src/controllers/admin-token.d.ts.map +1 -0
- package/dist/server/src/controllers/api-token.d.ts +0 -1
- package/dist/server/src/controllers/api-token.d.ts.map +1 -1
- package/dist/server/src/controllers/index.d.ts +9 -1
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/domain/permission/index.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +56 -2
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/policies/index.d.ts +5 -0
- package/dist/server/src/policies/index.d.ts.map +1 -1
- package/dist/server/src/policies/isAdminTokensEnabled.d.ts +7 -0
- package/dist/server/src/policies/isAdminTokensEnabled.d.ts.map +1 -0
- package/dist/server/src/register.d.ts.map +1 -1
- package/dist/server/src/routes/admin-tokens.d.ts +15 -0
- package/dist/server/src/routes/admin-tokens.d.ts.map +1 -0
- package/dist/server/src/routes/index.d.ts.map +1 -1
- package/dist/server/src/services/api-token.d.ts +136 -12
- package/dist/server/src/services/api-token.d.ts.map +1 -1
- package/dist/server/src/services/constants.d.ts +13 -11
- package/dist/server/src/services/constants.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +2 -2
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/permission/engine.d.ts +5 -0
- package/dist/server/src/services/permission/engine.d.ts.map +1 -1
- package/dist/server/src/services/permission/queries.d.ts.map +1 -1
- package/dist/server/src/services/permission.d.ts +1 -0
- package/dist/server/src/services/permission.d.ts.map +1 -1
- package/dist/server/src/services/role.d.ts.map +1 -1
- package/dist/server/src/strategies/admin-token.d.ts +51 -0
- package/dist/server/src/strategies/admin-token.d.ts.map +1 -0
- package/dist/server/src/strategies/api-token-utils.d.ts +13 -0
- package/dist/server/src/strategies/api-token-utils.d.ts.map +1 -0
- package/dist/server/src/strategies/{api-token.d.ts → content-api-token.d.ts} +10 -11
- package/dist/server/src/strategies/content-api-token.d.ts.map +1 -0
- package/dist/server/src/strategies/index.d.ts +2 -1
- package/dist/server/src/strategies/index.d.ts.map +1 -1
- package/dist/server/src/validation/admin-tokens.d.ts +75 -0
- package/dist/server/src/validation/admin-tokens.d.ts.map +1 -0
- package/dist/server/src/validation/api-tokens.d.ts +4 -2
- package/dist/server/src/validation/api-tokens.d.ts.map +1 -1
- package/dist/server/src/validation/project-settings.d.ts +10 -10
- package/dist/server/src/validation/project-settings.d.ts.map +1 -1
- package/dist/shared/contracts/admin-token.d.ts +122 -0
- package/dist/shared/contracts/admin-token.d.ts.map +1 -0
- package/dist/shared/contracts/api-token.d.ts +6 -95
- package/dist/shared/contracts/api-token.d.ts.map +1 -1
- package/dist/shared/contracts/content-api-token.d.ts +97 -0
- package/dist/shared/contracts/content-api-token.d.ts.map +1 -0
- package/dist/shared/contracts/shared.d.ts +1 -0
- package/dist/shared/contracts/shared.d.ts.map +1 -1
- package/package.json +10 -10
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/FormApiTokenContainer.js.map +0 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/FormApiTokenContainer.mjs.map +0 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/constants.js +0 -37
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/constants.js.map +0 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/constants.mjs +0 -16
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/constants.mjs.map +0 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/getDateOfExpiration.js.map +0 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/getDateOfExpiration.mjs.map +0 -1
- package/dist/admin/src/pages/Settings/pages/ApiTokens/EditView/components/FormApiTokenContainer.d.ts +0 -20
- package/dist/admin/src/pages/Settings/pages/ApiTokens/EditView/constants.d.ts +0 -17
- package/dist/server/server/src/strategies/api-token.js +0 -144
- package/dist/server/server/src/strategies/api-token.js.map +0 -1
- package/dist/server/server/src/strategies/api-token.mjs +0 -138
- package/dist/server/server/src/strategies/api-token.mjs.map +0 -1
- package/dist/server/src/strategies/api-token.d.ts.map +0 -1
- /package/dist/admin/src/pages/Settings/{pages/ApiTokens/EditView → components/Tokens}/utils/getDateOfExpiration.d.ts +0 -0
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { LinkButton, EmptyStateLayout } from '@strapi/design-system';
|
|
4
|
+
import { Plus } from '@strapi/icons';
|
|
5
|
+
import { EmptyDocuments } from '@strapi/icons/symbols';
|
|
6
|
+
import * as qs from 'qs';
|
|
7
|
+
import { useIntl } from 'react-intl';
|
|
8
|
+
import { useNavigate, Link } from 'react-router-dom';
|
|
9
|
+
import { Layouts } from '../../../../components/Layouts/Layout.mjs';
|
|
10
|
+
import { Page } from '../../../../components/PageHelpers.mjs';
|
|
11
|
+
import { useTypedSelector } from '../../../../core/store/hooks.mjs';
|
|
12
|
+
import { useNotification } from '../../../../features/Notifications.mjs';
|
|
13
|
+
import { useTracking } from '../../../../features/Tracking.mjs';
|
|
14
|
+
import { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler.mjs';
|
|
15
|
+
import { useOnce } from '../../../../hooks/useOnce.mjs';
|
|
16
|
+
import { useRBAC } from '../../../../hooks/useRBAC.mjs';
|
|
17
|
+
import { useGetAdminTokensQuery, useDeleteAdminTokenMutation } from '../../../../services/apiTokens.mjs';
|
|
18
|
+
import { API_TOKEN_TYPE } from '../../components/Tokens/constants.mjs';
|
|
19
|
+
import { Table } from '../../components/Tokens/Table.mjs';
|
|
20
|
+
|
|
21
|
+
const TABLE_HEADERS = [
|
|
22
|
+
{
|
|
23
|
+
name: 'name',
|
|
24
|
+
label: {
|
|
25
|
+
id: 'Settings.adminTokens.ListView.headers.name',
|
|
26
|
+
defaultMessage: 'Name'
|
|
27
|
+
},
|
|
28
|
+
sortable: true
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
name: 'description',
|
|
32
|
+
label: {
|
|
33
|
+
id: 'Settings.adminTokens.ListView.headers.description',
|
|
34
|
+
defaultMessage: 'Description'
|
|
35
|
+
},
|
|
36
|
+
sortable: false
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: 'createdAt',
|
|
40
|
+
label: {
|
|
41
|
+
id: 'Settings.adminTokens.ListView.headers.createdAt',
|
|
42
|
+
defaultMessage: 'Created at'
|
|
43
|
+
},
|
|
44
|
+
sortable: false
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: 'lastUsedAt',
|
|
48
|
+
label: {
|
|
49
|
+
id: 'Settings.adminTokens.ListView.headers.lastUsedAt',
|
|
50
|
+
defaultMessage: 'Last used'
|
|
51
|
+
},
|
|
52
|
+
sortable: false
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
name: 'adminUserOwner',
|
|
56
|
+
label: {
|
|
57
|
+
id: 'Settings.adminTokens.ListView.headers.owner',
|
|
58
|
+
defaultMessage: 'Owner'
|
|
59
|
+
},
|
|
60
|
+
sortable: false
|
|
61
|
+
}
|
|
62
|
+
];
|
|
63
|
+
const ListView = ()=>{
|
|
64
|
+
const { formatMessage } = useIntl();
|
|
65
|
+
const { toggleNotification } = useNotification();
|
|
66
|
+
const permissions = useTypedSelector((state)=>state.admin_app.permissions.settings?.['admin-tokens']);
|
|
67
|
+
const { allowedActions: { canRead, canCreate, canDelete, canUpdate } } = useRBAC(permissions);
|
|
68
|
+
const navigate = useNavigate();
|
|
69
|
+
const { trackUsage } = useTracking();
|
|
70
|
+
const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();
|
|
71
|
+
React.useEffect(()=>{
|
|
72
|
+
navigate({
|
|
73
|
+
search: qs.stringify({
|
|
74
|
+
sort: 'name:ASC'
|
|
75
|
+
}, {
|
|
76
|
+
encode: false
|
|
77
|
+
})
|
|
78
|
+
}, {
|
|
79
|
+
replace: true
|
|
80
|
+
});
|
|
81
|
+
}, [
|
|
82
|
+
navigate
|
|
83
|
+
]);
|
|
84
|
+
const headers = TABLE_HEADERS.map((header)=>({
|
|
85
|
+
...header,
|
|
86
|
+
label: formatMessage(header.label)
|
|
87
|
+
}));
|
|
88
|
+
useOnce(()=>{
|
|
89
|
+
trackUsage('willAccessTokenList', {
|
|
90
|
+
tokenType: API_TOKEN_TYPE
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
const { data: adminTokens = [], isLoading, error } = useGetAdminTokensQuery();
|
|
94
|
+
React.useEffect(()=>{
|
|
95
|
+
if (error) {
|
|
96
|
+
toggleNotification({
|
|
97
|
+
type: 'danger',
|
|
98
|
+
message: formatAPIError(error)
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
}, [
|
|
102
|
+
error,
|
|
103
|
+
formatAPIError,
|
|
104
|
+
toggleNotification
|
|
105
|
+
]);
|
|
106
|
+
React.useEffect(()=>{
|
|
107
|
+
trackUsage('didAccessTokenList', {
|
|
108
|
+
number: adminTokens.length,
|
|
109
|
+
tokenType: API_TOKEN_TYPE
|
|
110
|
+
});
|
|
111
|
+
}, [
|
|
112
|
+
adminTokens,
|
|
113
|
+
trackUsage
|
|
114
|
+
]);
|
|
115
|
+
const [deleteToken] = useDeleteAdminTokenMutation();
|
|
116
|
+
const handleDelete = async (id)=>{
|
|
117
|
+
try {
|
|
118
|
+
const res = await deleteToken(id);
|
|
119
|
+
if ('error' in res) {
|
|
120
|
+
toggleNotification({
|
|
121
|
+
type: 'danger',
|
|
122
|
+
message: formatAPIError(res.error)
|
|
123
|
+
});
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
trackUsage('didDeleteToken');
|
|
127
|
+
} catch {
|
|
128
|
+
toggleNotification({
|
|
129
|
+
type: 'danger',
|
|
130
|
+
message: formatMessage({
|
|
131
|
+
id: 'notification.error',
|
|
132
|
+
defaultMessage: 'Something went wrong'
|
|
133
|
+
})
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
return /*#__PURE__*/ jsxs(Fragment, {
|
|
138
|
+
children: [
|
|
139
|
+
/*#__PURE__*/ jsx(Page.Title, {
|
|
140
|
+
children: formatMessage({
|
|
141
|
+
id: 'Settings.PageTitle',
|
|
142
|
+
defaultMessage: 'Settings - {name}'
|
|
143
|
+
}, {
|
|
144
|
+
name: 'Admin Tokens'
|
|
145
|
+
})
|
|
146
|
+
}),
|
|
147
|
+
/*#__PURE__*/ jsx(Layouts.Header, {
|
|
148
|
+
title: formatMessage({
|
|
149
|
+
id: 'Settings.adminTokens.title',
|
|
150
|
+
defaultMessage: 'Admin Tokens'
|
|
151
|
+
}),
|
|
152
|
+
subtitle: formatMessage({
|
|
153
|
+
id: 'Settings.adminTokens.description',
|
|
154
|
+
defaultMessage: 'List of generated tokens to programmatically access the admin features'
|
|
155
|
+
}),
|
|
156
|
+
primaryAction: canCreate && /*#__PURE__*/ jsx(LinkButton, {
|
|
157
|
+
tag: Link,
|
|
158
|
+
"data-testid": "create-admin-token-button",
|
|
159
|
+
startIcon: /*#__PURE__*/ jsx(Plus, {}),
|
|
160
|
+
size: "S",
|
|
161
|
+
onClick: ()=>trackUsage('willAddTokenFromList', {
|
|
162
|
+
tokenType: API_TOKEN_TYPE
|
|
163
|
+
}),
|
|
164
|
+
to: "/settings/admin-tokens/create",
|
|
165
|
+
children: formatMessage({
|
|
166
|
+
id: 'Settings.adminTokens.create',
|
|
167
|
+
defaultMessage: 'Create new Admin Token'
|
|
168
|
+
})
|
|
169
|
+
})
|
|
170
|
+
}),
|
|
171
|
+
!canRead ? /*#__PURE__*/ jsx(Page.NoPermissions, {}) : /*#__PURE__*/ jsx(Page.Main, {
|
|
172
|
+
"aria-busy": isLoading,
|
|
173
|
+
children: /*#__PURE__*/ jsxs(Layouts.Content, {
|
|
174
|
+
children: [
|
|
175
|
+
adminTokens.length > 0 && /*#__PURE__*/ jsx(Table, {
|
|
176
|
+
permissions: {
|
|
177
|
+
canRead,
|
|
178
|
+
canDelete,
|
|
179
|
+
canUpdate
|
|
180
|
+
},
|
|
181
|
+
headers: headers,
|
|
182
|
+
isLoading: isLoading,
|
|
183
|
+
onConfirmDelete: handleDelete,
|
|
184
|
+
tokens: adminTokens,
|
|
185
|
+
tokenType: API_TOKEN_TYPE,
|
|
186
|
+
showOwner: true
|
|
187
|
+
}),
|
|
188
|
+
canCreate && adminTokens.length === 0 ? /*#__PURE__*/ jsx(EmptyStateLayout, {
|
|
189
|
+
icon: /*#__PURE__*/ jsx(EmptyDocuments, {
|
|
190
|
+
width: "16rem"
|
|
191
|
+
}),
|
|
192
|
+
content: formatMessage({
|
|
193
|
+
id: 'Settings.adminTokens.addFirstToken',
|
|
194
|
+
defaultMessage: 'Create your first Admin Token'
|
|
195
|
+
}),
|
|
196
|
+
action: /*#__PURE__*/ jsx(LinkButton, {
|
|
197
|
+
tag: Link,
|
|
198
|
+
variant: "secondary",
|
|
199
|
+
startIcon: /*#__PURE__*/ jsx(Plus, {}),
|
|
200
|
+
to: "/settings/admin-tokens/create",
|
|
201
|
+
children: formatMessage({
|
|
202
|
+
id: 'Settings.adminTokens.create',
|
|
203
|
+
defaultMessage: 'Create new Admin Token'
|
|
204
|
+
})
|
|
205
|
+
})
|
|
206
|
+
}) : null,
|
|
207
|
+
!canCreate && adminTokens.length === 0 ? /*#__PURE__*/ jsx(EmptyStateLayout, {
|
|
208
|
+
icon: /*#__PURE__*/ jsx(EmptyDocuments, {
|
|
209
|
+
width: "16rem"
|
|
210
|
+
}),
|
|
211
|
+
content: formatMessage({
|
|
212
|
+
id: 'Settings.adminTokens.emptyStateLayout',
|
|
213
|
+
defaultMessage: "You don't have any content yet..."
|
|
214
|
+
})
|
|
215
|
+
}) : null
|
|
216
|
+
]
|
|
217
|
+
})
|
|
218
|
+
})
|
|
219
|
+
]
|
|
220
|
+
});
|
|
221
|
+
};
|
|
222
|
+
const ProtectedListView = ()=>{
|
|
223
|
+
const permissions = useTypedSelector((state)=>state.admin_app.permissions.settings?.['admin-tokens']?.main);
|
|
224
|
+
return /*#__PURE__*/ jsx(Page.Protect, {
|
|
225
|
+
permissions: permissions,
|
|
226
|
+
children: /*#__PURE__*/ jsx(ListView, {})
|
|
227
|
+
});
|
|
228
|
+
};
|
|
229
|
+
|
|
230
|
+
export { ListView, ProtectedListView };
|
|
231
|
+
//# sourceMappingURL=ListView.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ListView.mjs","sources":["../../../../../../../../admin/src/pages/Settings/pages/AdminTokens/ListView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { EmptyStateLayout, LinkButton } from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport * as qs from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link, useNavigate } from 'react-router-dom';\n\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport { useOnce } from '../../../../hooks/useOnce';\nimport { useRBAC } from '../../../../hooks/useRBAC';\nimport {\n useDeleteAdminTokenMutation,\n useGetAdminTokensQuery,\n} from '../../../../services/apiTokens';\nimport { API_TOKEN_TYPE } from '../../components/Tokens/constants';\nimport { Table } from '../../components/Tokens/Table';\n\nimport type { Data } from '@strapi/types';\n\nconst TABLE_HEADERS = [\n {\n name: 'name',\n label: {\n id: 'Settings.adminTokens.ListView.headers.name',\n defaultMessage: 'Name',\n },\n sortable: true,\n },\n {\n name: 'description',\n label: {\n id: 'Settings.adminTokens.ListView.headers.description',\n defaultMessage: 'Description',\n },\n sortable: false,\n },\n {\n name: 'createdAt',\n label: {\n id: 'Settings.adminTokens.ListView.headers.createdAt',\n defaultMessage: 'Created at',\n },\n sortable: false,\n },\n {\n name: 'lastUsedAt',\n label: {\n id: 'Settings.adminTokens.ListView.headers.lastUsedAt',\n defaultMessage: 'Last used',\n },\n sortable: false,\n },\n {\n name: 'adminUserOwner',\n label: {\n id: 'Settings.adminTokens.ListView.headers.owner',\n defaultMessage: 'Owner',\n },\n sortable: false,\n },\n];\n\nexport const ListView = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['admin-tokens']\n );\n const {\n allowedActions: { canRead, canCreate, canDelete, canUpdate },\n } = useRBAC(permissions);\n const navigate = useNavigate();\n const { trackUsage } = useTracking();\n\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n React.useEffect(() => {\n navigate({ search: qs.stringify({ sort: 'name:ASC' }, { encode: false }) }, { replace: true });\n }, [navigate]);\n\n const headers = TABLE_HEADERS.map((header) => ({\n ...header,\n label: formatMessage(header.label),\n }));\n\n useOnce(() => {\n trackUsage('willAccessTokenList', {\n tokenType: API_TOKEN_TYPE,\n });\n });\n\n const { data: adminTokens = [], isLoading, error } = useGetAdminTokensQuery();\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n trackUsage('didAccessTokenList', { number: adminTokens.length, tokenType: API_TOKEN_TYPE });\n }, [adminTokens, trackUsage]);\n\n const [deleteToken] = useDeleteAdminTokenMutation();\n\n const handleDelete = async (id: Data.ID) => {\n try {\n const res = await deleteToken(id);\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return;\n }\n\n trackUsage('didDeleteToken');\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'Something went wrong',\n }),\n });\n }\n };\n\n return (\n <>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: 'Admin Tokens' }\n )}\n </Page.Title>\n <Layouts.Header\n title={formatMessage({ id: 'Settings.adminTokens.title', defaultMessage: 'Admin Tokens' })}\n subtitle={formatMessage({\n id: 'Settings.adminTokens.description',\n defaultMessage: 'List of generated tokens to programmatically access the admin features',\n })}\n primaryAction={\n canCreate && (\n <LinkButton\n tag={Link}\n data-testid=\"create-admin-token-button\"\n startIcon={<Plus />}\n size=\"S\"\n onClick={() => trackUsage('willAddTokenFromList', { tokenType: API_TOKEN_TYPE })}\n to=\"/settings/admin-tokens/create\"\n >\n {formatMessage({\n id: 'Settings.adminTokens.create',\n defaultMessage: 'Create new Admin Token',\n })}\n </LinkButton>\n )\n }\n />\n {!canRead ? (\n <Page.NoPermissions />\n ) : (\n <Page.Main aria-busy={isLoading}>\n <Layouts.Content>\n {adminTokens.length > 0 && (\n <Table\n permissions={{ canRead, canDelete, canUpdate }}\n headers={headers}\n isLoading={isLoading}\n onConfirmDelete={handleDelete}\n tokens={adminTokens}\n tokenType={API_TOKEN_TYPE}\n showOwner\n />\n )}\n {canCreate && adminTokens.length === 0 ? (\n <EmptyStateLayout\n icon={<EmptyDocuments width=\"16rem\" />}\n content={formatMessage({\n id: 'Settings.adminTokens.addFirstToken',\n defaultMessage: 'Create your first Admin Token',\n })}\n action={\n <LinkButton\n tag={Link}\n variant=\"secondary\"\n startIcon={<Plus />}\n to=\"/settings/admin-tokens/create\"\n >\n {formatMessage({\n id: 'Settings.adminTokens.create',\n defaultMessage: 'Create new Admin Token',\n })}\n </LinkButton>\n }\n />\n ) : null}\n {!canCreate && adminTokens.length === 0 ? (\n <EmptyStateLayout\n icon={<EmptyDocuments width=\"16rem\" />}\n content={formatMessage({\n id: 'Settings.adminTokens.emptyStateLayout',\n defaultMessage: \"You don't have any content yet...\",\n })}\n />\n ) : null}\n </Layouts.Content>\n </Page.Main>\n )}\n </>\n );\n};\n\nexport const ProtectedListView = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['admin-tokens']?.main\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <ListView />\n </Page.Protect>\n );\n};\n"],"names":["TABLE_HEADERS","name","label","id","defaultMessage","sortable","ListView","formatMessage","useIntl","toggleNotification","useNotification","permissions","useTypedSelector","state","admin_app","settings","allowedActions","canRead","canCreate","canDelete","canUpdate","useRBAC","navigate","useNavigate","trackUsage","useTracking","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","React","useEffect","search","qs","stringify","sort","encode","replace","headers","map","header","useOnce","tokenType","API_TOKEN_TYPE","data","adminTokens","isLoading","error","useGetAdminTokensQuery","type","message","number","length","deleteToken","useDeleteAdminTokenMutation","handleDelete","res","_jsxs","_Fragment","_jsx","Page","Title","Layouts","Header","title","subtitle","primaryAction","LinkButton","tag","Link","data-testid","startIcon","Plus","size","onClick","to","NoPermissions","Main","aria-busy","Content","Table","onConfirmDelete","tokens","showOwner","EmptyStateLayout","icon","EmptyDocuments","width","content","action","variant","ProtectedListView","main","Protect"],"mappings":"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"}
|
|
@@ -17,12 +17,11 @@ var apiTokens = require('../../../../../services/apiTokens.js');
|
|
|
17
17
|
var contentApi = require('../../../../../services/contentApi.js');
|
|
18
18
|
var baseQuery = require('../../../../../utils/baseQuery.js');
|
|
19
19
|
var constants = require('../../../components/Tokens/constants.js');
|
|
20
|
+
var FormApiTokenContainer = require('../../../components/Tokens/FormApiTokenContainer.js');
|
|
20
21
|
var FormHead = require('../../../components/Tokens/FormHead.js');
|
|
21
22
|
var TokenBox = require('../../../components/Tokens/TokenBox.js');
|
|
22
23
|
var apiTokenPermissions = require('./apiTokenPermissions.js');
|
|
23
|
-
var FormApiTokenContainer = require('./components/FormApiTokenContainer.js');
|
|
24
24
|
var Permissions = require('./components/Permissions.js');
|
|
25
|
-
var constants$1 = require('./constants.js');
|
|
26
25
|
var reducer = require('./reducer.js');
|
|
27
26
|
|
|
28
27
|
function _interopNamespaceDefault(e) {
|
|
@@ -52,10 +51,10 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
|
52
51
|
const { toggleNotification } = Notifications.useNotification();
|
|
53
52
|
const { state: locationState } = reactRouterDom.useLocation();
|
|
54
53
|
const permissions = hooks.useTypedSelector((state)=>state.admin_app.permissions);
|
|
55
|
-
const [apiToken, setApiToken] = React__namespace.useState(locationState?.apiToken?.accessKey ? {
|
|
54
|
+
const [apiToken, setApiToken] = React__namespace.useState(locationState?.apiToken?.accessKey !== undefined && locationState?.apiToken?.accessKey !== '' ? {
|
|
56
55
|
...locationState.apiToken
|
|
57
56
|
} : null);
|
|
58
|
-
const [showToken, setShowToken] = React__namespace.useState(
|
|
57
|
+
const [showToken, setShowToken] = React__namespace.useState(locationState?.apiToken?.accessKey !== undefined && locationState?.apiToken?.accessKey !== '');
|
|
59
58
|
const hideTimerRef = React__namespace.useRef(null);
|
|
60
59
|
const { trackUsage } = Tracking.useTracking();
|
|
61
60
|
const { allowedActions: { canCreate, canUpdate, canRegenerate } } = useRBAC.useRBAC(permissions.settings?.['api-tokens']);
|
|
@@ -63,7 +62,7 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
|
63
62
|
const match = reactRouterDom.useMatch('/settings/api-tokens/:id');
|
|
64
63
|
const id = match?.params?.id;
|
|
65
64
|
const isCreating = id === 'create';
|
|
66
|
-
const { _unstableFormatAPIError: formatAPIError, _unstableFormatValidationErrors:
|
|
65
|
+
const { _unstableFormatAPIError: formatAPIError, _unstableFormatValidationErrors: formatValidationErrors } = useAPIErrorHandler.useAPIErrorHandler();
|
|
67
66
|
const navigate = reactRouterDom.useNavigate();
|
|
68
67
|
const contentAPIPermissionsQuery = contentApi.useGetPermissionsQuery();
|
|
69
68
|
const contentAPIRoutesQuery = contentApi.useGetRoutesQuery();
|
|
@@ -115,7 +114,7 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
|
115
114
|
contentAPIRoutesQuery.data
|
|
116
115
|
]);
|
|
117
116
|
React__namespace.useEffect(()=>{
|
|
118
|
-
if (apiToken) {
|
|
117
|
+
if (apiToken !== null) {
|
|
119
118
|
if (apiToken.type === 'read-only') {
|
|
120
119
|
dispatch({
|
|
121
120
|
type: 'ON_CHANGE_READ_ONLY'
|
|
@@ -129,7 +128,7 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
|
129
128
|
if (apiToken.type === 'custom') {
|
|
130
129
|
dispatch({
|
|
131
130
|
type: 'UPDATE_PERMISSIONS',
|
|
132
|
-
value: apiToken
|
|
131
|
+
value: apiToken.permissions
|
|
133
132
|
});
|
|
134
133
|
}
|
|
135
134
|
}
|
|
@@ -162,21 +161,23 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
|
162
161
|
React__namespace.useEffect(()=>{
|
|
163
162
|
if (data) {
|
|
164
163
|
setApiToken(data);
|
|
165
|
-
if (data.
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
164
|
+
if (data.kind === 'content-api') {
|
|
165
|
+
if (data.type === 'read-only') {
|
|
166
|
+
dispatch({
|
|
167
|
+
type: 'ON_CHANGE_READ_ONLY'
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
if (data.type === 'full-access') {
|
|
171
|
+
dispatch({
|
|
172
|
+
type: 'SELECT_ALL_ACTIONS'
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
if (data.type === 'custom') {
|
|
176
|
+
dispatch({
|
|
177
|
+
type: 'UPDATE_PERMISSIONS',
|
|
178
|
+
value: data.permissions
|
|
179
|
+
});
|
|
180
|
+
}
|
|
180
181
|
}
|
|
181
182
|
}
|
|
182
183
|
}, [
|
|
@@ -201,6 +202,7 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
|
201
202
|
]);
|
|
202
203
|
const [createToken] = apiTokens.useCreateAPITokenMutation();
|
|
203
204
|
const [updateToken] = apiTokens.useUpdateAPITokenMutation();
|
|
205
|
+
const buildLifespan = (raw)=>raw && raw !== '0' ? parseInt(raw.toString(), 10) : null;
|
|
204
206
|
const handleSubmit = async (body, formik)=>{
|
|
205
207
|
trackUsage(isCreating ? 'willCreateToken' : 'willEditToken', {
|
|
206
208
|
tokenType: constants.API_TOKEN_TYPE
|
|
@@ -208,14 +210,15 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
|
208
210
|
try {
|
|
209
211
|
if (isCreating) {
|
|
210
212
|
const res = await createToken({
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
213
|
+
name: body.name,
|
|
214
|
+
description: body.description,
|
|
215
|
+
type: body.type,
|
|
216
|
+
lifespan: buildLifespan(body.lifespan),
|
|
214
217
|
permissions: body.type === 'custom' ? state.selectedActions : null
|
|
215
218
|
});
|
|
216
219
|
if ('error' in res) {
|
|
217
220
|
if (baseQuery.isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
|
|
218
|
-
formik.setErrors(
|
|
221
|
+
formik.setErrors(formatValidationErrors(res.error));
|
|
219
222
|
} else {
|
|
220
223
|
toggleNotification({
|
|
221
224
|
type: 'danger',
|
|
@@ -232,7 +235,7 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
|
232
235
|
})
|
|
233
236
|
});
|
|
234
237
|
trackUsage('didCreateToken', {
|
|
235
|
-
|
|
238
|
+
kind: 'content-api',
|
|
236
239
|
tokenType: constants.API_TOKEN_TYPE
|
|
237
240
|
});
|
|
238
241
|
navigate(`../api-tokens/${res.data.id.toString()}`, {
|
|
@@ -251,7 +254,7 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
|
251
254
|
});
|
|
252
255
|
if ('error' in res) {
|
|
253
256
|
if (baseQuery.isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
|
|
254
|
-
formik.setErrors(
|
|
257
|
+
formik.setErrors(formatValidationErrors(res.error));
|
|
255
258
|
} else {
|
|
256
259
|
toggleNotification({
|
|
257
260
|
type: 'danger',
|
|
@@ -268,6 +271,7 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
|
268
271
|
})
|
|
269
272
|
});
|
|
270
273
|
trackUsage('didEditToken', {
|
|
274
|
+
kind: res.data.kind,
|
|
271
275
|
type: res.data.type,
|
|
272
276
|
tokenType: constants.API_TOKEN_TYPE
|
|
273
277
|
});
|
|
@@ -317,7 +321,8 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
|
317
321
|
setSelectedAction
|
|
318
322
|
};
|
|
319
323
|
const canEditInputs = canUpdate && !isCreating || canCreate && isCreating;
|
|
320
|
-
const canShowToken =
|
|
324
|
+
const canShowToken = apiToken?.accessKey !== undefined && apiToken.accessKey !== '';
|
|
325
|
+
const initialType = apiToken !== null && apiToken.kind === 'content-api' ? apiToken.type : undefined;
|
|
321
326
|
if (isLoading) {
|
|
322
327
|
return /*#__PURE__*/ jsxRuntime.jsx(PageHelpers.Page.Loading, {});
|
|
323
328
|
}
|
|
@@ -334,12 +339,12 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
|
334
339
|
})
|
|
335
340
|
}),
|
|
336
341
|
/*#__PURE__*/ jsxRuntime.jsx(formik.Formik, {
|
|
337
|
-
validationSchema: constants
|
|
342
|
+
validationSchema: constants.apiTokenInformationSchema,
|
|
338
343
|
validateOnChange: false,
|
|
339
344
|
initialValues: {
|
|
340
345
|
name: apiToken?.name || '',
|
|
341
346
|
description: apiToken?.description || '',
|
|
342
|
-
type:
|
|
347
|
+
type: initialType,
|
|
343
348
|
lifespan: apiToken?.lifespan
|
|
344
349
|
},
|
|
345
350
|
enableReinitialize: true,
|
|
@@ -351,9 +356,12 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
|
351
356
|
return /*#__PURE__*/ jsxRuntime.jsxs(formik.Form, {
|
|
352
357
|
children: [
|
|
353
358
|
/*#__PURE__*/ jsxRuntime.jsx(FormHead.FormHead, {
|
|
354
|
-
title: {
|
|
359
|
+
title: isCreating ? {
|
|
355
360
|
id: 'Settings.apiTokens.createPage.title',
|
|
356
361
|
defaultMessage: 'Create API Token'
|
|
362
|
+
} : {
|
|
363
|
+
id: 'Settings.apiTokens.createPage.title',
|
|
364
|
+
defaultMessage: 'Edit API Token'
|
|
357
365
|
},
|
|
358
366
|
token: apiToken,
|
|
359
367
|
setToken: setApiToken,
|
|
@@ -371,7 +379,7 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
|
371
379
|
alignItems: "stretch",
|
|
372
380
|
gap: 6,
|
|
373
381
|
children: [
|
|
374
|
-
apiToken?.accessKey && showToken && /*#__PURE__*/ jsxRuntime.jsx(jsxRuntime.Fragment, {
|
|
382
|
+
apiToken?.accessKey !== undefined && apiToken.accessKey !== '' && showToken === true && /*#__PURE__*/ jsxRuntime.jsx(jsxRuntime.Fragment, {
|
|
375
383
|
children: /*#__PURE__*/ jsxRuntime.jsx(TokenBox.ApiTokenBox, {
|
|
376
384
|
token: apiToken.accessKey,
|
|
377
385
|
tokenType: constants.API_TOKEN_TYPE
|
|
@@ -384,6 +392,7 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
|
384
392
|
isCreating: isCreating,
|
|
385
393
|
values: values,
|
|
386
394
|
apiToken: apiToken,
|
|
395
|
+
kind: "content-api",
|
|
387
396
|
onDispatch: dispatch,
|
|
388
397
|
setHasChangedPermissions: setHasChangedPermissions
|
|
389
398
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditViewPage.js","sources":["../../../../../../../../../admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flex } from '@strapi/design-system';\nimport { Formik, Form, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useLocation, useMatch, useNavigate } from 'react-router-dom';\n\nimport { Layouts } from '../../../../../components/Layouts/Layout';\nimport { Page } from '../../../../../components/PageHelpers';\nimport { useTypedSelector } from '../../../../../core/store/hooks';\nimport { useNotification } from '../../../../../features/Notifications';\nimport { useTracking } from '../../../../../features/Tracking';\nimport { useAPIErrorHandler } from '../../../../../hooks/useAPIErrorHandler';\nimport { useRBAC } from '../../../../../hooks/useRBAC';\nimport {\n useCreateAPITokenMutation,\n useGetAPITokenQuery,\n useUpdateAPITokenMutation,\n} from '../../../../../services/apiTokens';\nimport { useGetPermissionsQuery, useGetRoutesQuery } from '../../../../../services/contentApi';\nimport { isBaseQueryError } from '../../../../../utils/baseQuery';\nimport { API_TOKEN_TYPE } from '../../../components/Tokens/constants';\nimport { FormHead } from '../../../components/Tokens/FormHead';\nimport { ApiTokenBox } from '../../../components/Tokens/TokenBox';\n\nimport {\n ApiTokenPermissionsContextValue,\n ApiTokenPermissionsProvider,\n} from './apiTokenPermissions';\nimport { FormApiTokenContainer } from './components/FormApiTokenContainer';\nimport { Permissions } from './components/Permissions';\nimport { schema } from './constants';\nimport { initialState, reducer } from './reducer';\n\nimport type { Get, ApiToken } from '../../../../../../../shared/contracts/api-token';\n\n/**\n * TODO: this could definitely be refactored to avoid using redux and instead just use the\n * server response as the source of the truth for the data.\n */\nexport const EditView = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { state: locationState } = useLocation();\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n const [apiToken, setApiToken] = React.useState<ApiToken | null>(\n locationState?.apiToken?.accessKey\n ? {\n ...locationState.apiToken,\n }\n : null\n );\n\n const [showToken, setShowToken] = React.useState(Boolean(locationState?.apiToken?.accessKey));\n const hideTimerRef = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n const { trackUsage } = useTracking();\n const {\n allowedActions: { canCreate, canUpdate, canRegenerate },\n } = useRBAC(permissions.settings?.['api-tokens']);\n const [state, dispatch] = React.useReducer(reducer, initialState);\n const match = useMatch('/settings/api-tokens/:id');\n const id = match?.params?.id;\n const isCreating = id === 'create';\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidtionErrors,\n } = useAPIErrorHandler();\n\n const navigate = useNavigate();\n\n const contentAPIPermissionsQuery = useGetPermissionsQuery();\n const contentAPIRoutesQuery = useGetRoutesQuery();\n /**\n * Separate effects otherwise we could end\n * up duplicating the same notification.\n */\n React.useEffect(() => {\n if (contentAPIPermissionsQuery.error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(contentAPIPermissionsQuery.error),\n });\n }\n }, [contentAPIPermissionsQuery.error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n if (contentAPIRoutesQuery.error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(contentAPIRoutesQuery.error),\n });\n }\n }, [contentAPIRoutesQuery.error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n if (contentAPIPermissionsQuery.data) {\n dispatch({\n type: 'UPDATE_PERMISSIONS_LAYOUT',\n value: contentAPIPermissionsQuery.data,\n });\n }\n }, [contentAPIPermissionsQuery.data]);\n\n React.useEffect(() => {\n if (contentAPIRoutesQuery.data) {\n dispatch({\n type: 'UPDATE_ROUTES',\n value: contentAPIRoutesQuery.data,\n });\n }\n }, [contentAPIRoutesQuery.data]);\n\n React.useEffect(() => {\n if (apiToken) {\n if (apiToken.type === 'read-only') {\n dispatch({\n type: 'ON_CHANGE_READ_ONLY',\n });\n }\n if (apiToken.type === 'full-access') {\n dispatch({\n type: 'SELECT_ALL_ACTIONS',\n });\n }\n if (apiToken.type === 'custom') {\n dispatch({\n type: 'UPDATE_PERMISSIONS',\n value: apiToken?.permissions,\n });\n }\n }\n }, [apiToken]);\n\n React.useEffect(() => {\n trackUsage(isCreating ? 'didAddTokenFromList' : 'didEditTokenFromList', {\n tokenType: API_TOKEN_TYPE,\n });\n }, [isCreating, trackUsage]);\n\n const { data, error, isLoading } = useGetAPITokenQuery(id!, {\n skip: !id || isCreating || !!apiToken,\n });\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n if (data) {\n setApiToken(data);\n\n if (data.type === 'read-only') {\n dispatch({\n type: 'ON_CHANGE_READ_ONLY',\n });\n }\n if (data.type === 'full-access') {\n dispatch({\n type: 'SELECT_ALL_ACTIONS',\n });\n }\n if (data.type === 'custom') {\n dispatch({\n type: 'UPDATE_PERMISSIONS',\n value: data?.permissions,\n });\n }\n }\n }, [data]);\n\n React.useEffect(() => {\n // Only set up timer when token is shown\n if (showToken) {\n hideTimerRef.current = setTimeout(() => {\n setShowToken(false);\n }, 30000); // 30 seconds\n\n // Cleanup on unmount or when showToken changes\n return () => {\n if (hideTimerRef.current) {\n clearTimeout(hideTimerRef.current);\n hideTimerRef.current = null;\n }\n };\n }\n }, [showToken]);\n\n const [createToken] = useCreateAPITokenMutation();\n const [updateToken] = useUpdateAPITokenMutation();\n\n interface FormValues extends Pick<Get.Response['data'], 'name' | 'description'> {\n lifespan: Get.Response['data']['lifespan'] | undefined;\n type: Get.Response['data']['type'] | undefined;\n }\n\n const handleSubmit = async (body: FormValues, formik: FormikHelpers<FormValues>) => {\n trackUsage(isCreating ? 'willCreateToken' : 'willEditToken', {\n tokenType: API_TOKEN_TYPE,\n });\n\n try {\n if (isCreating) {\n const res = await createToken({\n ...body,\n // lifespan must be \"null\" for unlimited (0 would mean instantly expired and isn't accepted)\n lifespan:\n body?.lifespan && body.lifespan !== '0' ? parseInt(body.lifespan.toString(), 10) : null,\n permissions: body.type === 'custom' ? state.selectedActions : null,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidtionErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'notification.success.apitokencreated',\n defaultMessage: 'API Token successfully created',\n }),\n });\n\n trackUsage('didCreateToken', {\n type: res.data.type,\n tokenType: API_TOKEN_TYPE,\n });\n\n navigate(`../api-tokens/${res.data.id.toString()}`, {\n state: { apiToken: res.data },\n replace: true,\n });\n } else {\n const res = await updateToken({\n id: id!,\n name: body.name,\n description: body.description,\n type: body.type,\n permissions: body.type === 'custom' ? state.selectedActions : null,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidtionErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'notification.success.apitokenedited',\n defaultMessage: 'API Token successfully edited',\n }),\n });\n\n trackUsage('didEditToken', {\n type: res.data.type,\n tokenType: API_TOKEN_TYPE,\n });\n }\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'Something went wrong',\n }),\n });\n }\n };\n\n const [hasChangedPermissions, setHasChangedPermissions] = React.useState(false);\n\n const handleChangeCheckbox = ({\n target: { value },\n }: Parameters<ApiTokenPermissionsContextValue['value']['onChange']>[0]) => {\n setHasChangedPermissions(true);\n dispatch({\n type: 'ON_CHANGE',\n value,\n });\n };\n\n const handleChangeSelectAllCheckbox = ({\n target: { value },\n }: Parameters<ApiTokenPermissionsContextValue['value']['onChangeSelectAll']>[0]) => {\n setHasChangedPermissions(true);\n dispatch({\n type: 'SELECT_ALL_IN_PERMISSION',\n value,\n });\n };\n\n const setSelectedAction = ({\n target: { value },\n }: Parameters<ApiTokenPermissionsContextValue['value']['setSelectedAction']>[0]) => {\n dispatch({\n type: 'SET_SELECTED_ACTION',\n value,\n });\n };\n\n const toggleToken = () => {\n setShowToken((prev) => !prev);\n if (hideTimerRef.current) {\n clearTimeout(hideTimerRef.current);\n hideTimerRef.current = null;\n }\n };\n\n const providerValue = {\n ...state,\n onChange: handleChangeCheckbox,\n onChangeSelectAll: handleChangeSelectAllCheckbox,\n setSelectedAction,\n };\n\n const canEditInputs = (canUpdate && !isCreating) || (canCreate && isCreating);\n const canShowToken = !!apiToken?.accessKey;\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <ApiTokenPermissionsProvider value={providerValue}>\n <Page.Main>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: 'API Tokens' }\n )}\n </Page.Title>\n <Formik\n validationSchema={schema}\n validateOnChange={false}\n initialValues={{\n name: apiToken?.name || '',\n description: apiToken?.description || '',\n type: apiToken?.type,\n lifespan: apiToken?.lifespan,\n }}\n enableReinitialize\n onSubmit={(body, actions) => handleSubmit(body, actions)}\n >\n {({ errors, handleChange, isSubmitting, values, setFieldValue }) => {\n if (hasChangedPermissions && values?.type !== 'custom') {\n setFieldValue('type', 'custom');\n }\n\n return (\n <Form>\n <FormHead\n title={{\n id: 'Settings.apiTokens.createPage.title',\n defaultMessage: 'Create API Token',\n }}\n token={apiToken}\n setToken={setApiToken}\n toggleToken={toggleToken}\n showToken={showToken}\n canEditInputs={canEditInputs}\n canRegenerate={canRegenerate}\n canShowToken={canShowToken}\n isSubmitting={isSubmitting}\n regenerateUrl=\"/admin/api-tokens/\"\n />\n\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {apiToken?.accessKey && showToken && (\n <>\n <ApiTokenBox token={apiToken.accessKey} tokenType={API_TOKEN_TYPE} />\n </>\n )}\n\n <FormApiTokenContainer\n errors={errors}\n onChange={handleChange}\n canEditInputs={canEditInputs}\n isCreating={isCreating}\n values={values}\n apiToken={apiToken}\n onDispatch={dispatch}\n setHasChangedPermissions={setHasChangedPermissions}\n />\n <Permissions\n disabled={\n !canEditInputs ||\n values?.type === 'read-only' ||\n values?.type === 'full-access'\n }\n />\n </Flex>\n </Layouts.Content>\n </Form>\n );\n }}\n </Formik>\n </Page.Main>\n </ApiTokenPermissionsProvider>\n );\n};\n\nexport const ProtectedEditView = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['api-tokens'].read\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <EditView />\n </Page.Protect>\n );\n};\n"],"names":["EditView","formatMessage","useIntl","toggleNotification","useNotification","state","locationState","useLocation","permissions","useTypedSelector","admin_app","apiToken","setApiToken","React","useState","accessKey","showToken","setShowToken","Boolean","hideTimerRef","useRef","trackUsage","useTracking","allowedActions","canCreate","canUpdate","canRegenerate","useRBAC","settings","dispatch","useReducer","reducer","initialState","match","useMatch","id","params","isCreating","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidtionErrors","useAPIErrorHandler","navigate","useNavigate","contentAPIPermissionsQuery","useGetPermissionsQuery","contentAPIRoutesQuery","useGetRoutesQuery","useEffect","error","type","message","data","value","tokenType","API_TOKEN_TYPE","isLoading","useGetAPITokenQuery","skip","current","setTimeout","clearTimeout","createToken","useCreateAPITokenMutation","updateToken","useUpdateAPITokenMutation","handleSubmit","body","formik","res","lifespan","parseInt","toString","selectedActions","isBaseQueryError","name","setErrors","defaultMessage","replace","description","hasChangedPermissions","setHasChangedPermissions","handleChangeCheckbox","target","handleChangeSelectAllCheckbox","setSelectedAction","toggleToken","prev","providerValue","onChange","onChangeSelectAll","canEditInputs","canShowToken","_jsx","Page","Loading","ApiTokenPermissionsProvider","_jsxs","Main","Title","Formik","validationSchema","schema","validateOnChange","initialValues","enableReinitialize","onSubmit","actions","errors","handleChange","isSubmitting","values","setFieldValue","Form","FormHead","title","token","setToken","regenerateUrl","Layouts","Content","Flex","direction","alignItems","gap","_Fragment","ApiTokenBox","FormApiTokenContainer","onDispatch","Permissions","disabled","ProtectedEditView","read","Protect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EditViewPage.js","sources":["../../../../../../../../../admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flex } from '@strapi/design-system';\nimport { Formik, Form, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useLocation, useMatch, useNavigate } from 'react-router-dom';\n\nimport { Layouts } from '../../../../../components/Layouts/Layout';\nimport { Page } from '../../../../../components/PageHelpers';\nimport { useTypedSelector } from '../../../../../core/store/hooks';\nimport { useNotification } from '../../../../../features/Notifications';\nimport { useTracking } from '../../../../../features/Tracking';\nimport { useAPIErrorHandler } from '../../../../../hooks/useAPIErrorHandler';\nimport { useRBAC } from '../../../../../hooks/useRBAC';\nimport {\n useCreateAPITokenMutation,\n useGetAPITokenQuery,\n useUpdateAPITokenMutation,\n} from '../../../../../services/apiTokens';\nimport { useGetPermissionsQuery, useGetRoutesQuery } from '../../../../../services/contentApi';\nimport { isBaseQueryError } from '../../../../../utils/baseQuery';\nimport { API_TOKEN_TYPE, apiTokenInformationSchema } from '../../../components/Tokens/constants';\nimport { FormApiTokenContainer } from '../../../components/Tokens/FormApiTokenContainer';\nimport { FormHead } from '../../../components/Tokens/FormHead';\nimport { ApiTokenBox } from '../../../components/Tokens/TokenBox';\n\nimport {\n ApiTokenPermissionsContextValue,\n ApiTokenPermissionsProvider,\n} from './apiTokenPermissions';\nimport { Permissions } from './components/Permissions';\nimport { initialState, reducer } from './reducer';\n\nimport type { ContentApiApiToken, Get } from '../../../../../../../shared/contracts/api-token';\n\n/**\n * TODO: this could definitely be refactored to avoid using redux and instead just use the\n * server response as the source of the truth for the data.\n */\nexport const EditView = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { state: locationState } = useLocation();\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n const [apiToken, setApiToken] = React.useState<ContentApiApiToken | null>(\n locationState?.apiToken?.accessKey !== undefined && locationState?.apiToken?.accessKey !== ''\n ? {\n ...locationState.apiToken,\n }\n : null\n );\n\n const [showToken, setShowToken] = React.useState(\n locationState?.apiToken?.accessKey !== undefined && locationState?.apiToken?.accessKey !== ''\n );\n const hideTimerRef = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n const { trackUsage } = useTracking();\n const {\n allowedActions: { canCreate, canUpdate, canRegenerate },\n } = useRBAC(permissions.settings?.['api-tokens']);\n const [state, dispatch] = React.useReducer(reducer, initialState);\n const match = useMatch('/settings/api-tokens/:id');\n const id = match?.params?.id;\n const isCreating = id === 'create';\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n\n const navigate = useNavigate();\n\n const contentAPIPermissionsQuery = useGetPermissionsQuery();\n const contentAPIRoutesQuery = useGetRoutesQuery();\n /**\n * Separate effects otherwise we could end\n * up duplicating the same notification.\n */\n React.useEffect(() => {\n if (contentAPIPermissionsQuery.error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(contentAPIPermissionsQuery.error),\n });\n }\n }, [contentAPIPermissionsQuery.error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n if (contentAPIRoutesQuery.error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(contentAPIRoutesQuery.error),\n });\n }\n }, [contentAPIRoutesQuery.error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n if (contentAPIPermissionsQuery.data) {\n dispatch({\n type: 'UPDATE_PERMISSIONS_LAYOUT',\n value: contentAPIPermissionsQuery.data,\n });\n }\n }, [contentAPIPermissionsQuery.data]);\n\n React.useEffect(() => {\n if (contentAPIRoutesQuery.data) {\n dispatch({\n type: 'UPDATE_ROUTES',\n value: contentAPIRoutesQuery.data,\n });\n }\n }, [contentAPIRoutesQuery.data]);\n\n React.useEffect(() => {\n if (apiToken !== null) {\n if (apiToken.type === 'read-only') {\n dispatch({ type: 'ON_CHANGE_READ_ONLY' });\n }\n if (apiToken.type === 'full-access') {\n dispatch({ type: 'SELECT_ALL_ACTIONS' });\n }\n if (apiToken.type === 'custom') {\n dispatch({ type: 'UPDATE_PERMISSIONS', value: apiToken.permissions });\n }\n }\n }, [apiToken]);\n\n React.useEffect(() => {\n trackUsage(isCreating ? 'didAddTokenFromList' : 'didEditTokenFromList', {\n tokenType: API_TOKEN_TYPE,\n });\n }, [isCreating, trackUsage]);\n\n const { data, error, isLoading } = useGetAPITokenQuery(id!, {\n skip: !id || isCreating || !!apiToken,\n });\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n if (data) {\n setApiToken(data);\n\n if (data.kind === 'content-api') {\n if (data.type === 'read-only') {\n dispatch({ type: 'ON_CHANGE_READ_ONLY' });\n }\n if (data.type === 'full-access') {\n dispatch({ type: 'SELECT_ALL_ACTIONS' });\n }\n if (data.type === 'custom') {\n dispatch({ type: 'UPDATE_PERMISSIONS', value: data.permissions });\n }\n }\n }\n }, [data]);\n\n React.useEffect(() => {\n // Only set up timer when token is shown\n if (showToken) {\n hideTimerRef.current = setTimeout(() => {\n setShowToken(false);\n }, 30000); // 30 seconds\n\n // Cleanup on unmount or when showToken changes\n return () => {\n if (hideTimerRef.current) {\n clearTimeout(hideTimerRef.current);\n hideTimerRef.current = null;\n }\n };\n }\n }, [showToken]);\n\n const [createToken] = useCreateAPITokenMutation();\n const [updateToken] = useUpdateAPITokenMutation();\n\n interface FormValues extends Pick<Get.Response['data'], 'name' | 'description'> {\n lifespan: Get.Response['data']['lifespan'] | undefined;\n type: ContentApiApiToken['type'] | undefined;\n }\n\n const buildLifespan = (raw: FormValues['lifespan']): number | null =>\n raw && raw !== '0' ? parseInt(raw.toString(), 10) : null;\n\n const handleSubmit = async (body: FormValues, formik: FormikHelpers<FormValues>) => {\n trackUsage(isCreating ? 'willCreateToken' : 'willEditToken', {\n tokenType: API_TOKEN_TYPE,\n });\n\n try {\n if (isCreating) {\n const res = await createToken({\n name: body.name,\n description: body.description,\n type: body.type!,\n lifespan: buildLifespan(body.lifespan),\n permissions: body.type === 'custom' ? state.selectedActions : null,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'notification.success.apitokencreated',\n defaultMessage: 'API Token successfully created',\n }),\n });\n\n trackUsage('didCreateToken', {\n kind: 'content-api',\n tokenType: API_TOKEN_TYPE,\n });\n\n navigate(`../api-tokens/${res.data.id.toString()}`, {\n state: { apiToken: res.data },\n replace: true,\n });\n } else {\n const res = await updateToken({\n id: id!,\n name: body.name,\n description: body.description,\n type: body.type!,\n permissions: body.type === 'custom' ? state.selectedActions : null,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'notification.success.apitokenedited',\n defaultMessage: 'API Token successfully edited',\n }),\n });\n\n trackUsage('didEditToken', {\n kind: res.data.kind,\n type: (res.data as ContentApiApiToken).type,\n tokenType: API_TOKEN_TYPE,\n });\n }\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'Something went wrong',\n }),\n });\n }\n };\n\n const [hasChangedPermissions, setHasChangedPermissions] = React.useState(false);\n\n const handleChangeCheckbox = ({\n target: { value },\n }: Parameters<ApiTokenPermissionsContextValue['value']['onChange']>[0]) => {\n setHasChangedPermissions(true);\n dispatch({\n type: 'ON_CHANGE',\n value,\n });\n };\n\n const handleChangeSelectAllCheckbox = ({\n target: { value },\n }: Parameters<ApiTokenPermissionsContextValue['value']['onChangeSelectAll']>[0]) => {\n setHasChangedPermissions(true);\n dispatch({\n type: 'SELECT_ALL_IN_PERMISSION',\n value,\n });\n };\n\n const setSelectedAction = ({\n target: { value },\n }: Parameters<ApiTokenPermissionsContextValue['value']['setSelectedAction']>[0]) => {\n dispatch({\n type: 'SET_SELECTED_ACTION',\n value,\n });\n };\n\n const toggleToken = () => {\n setShowToken((prev) => !prev);\n if (hideTimerRef.current) {\n clearTimeout(hideTimerRef.current);\n hideTimerRef.current = null;\n }\n };\n\n const providerValue = {\n ...state,\n onChange: handleChangeCheckbox,\n onChangeSelectAll: handleChangeSelectAllCheckbox,\n setSelectedAction,\n };\n\n const canEditInputs = (canUpdate && !isCreating) || (canCreate && isCreating);\n const canShowToken = apiToken?.accessKey !== undefined && apiToken.accessKey !== '';\n\n const initialType =\n apiToken !== null && apiToken.kind === 'content-api' ? apiToken.type : undefined;\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <ApiTokenPermissionsProvider value={providerValue}>\n <Page.Main>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: 'API Tokens' }\n )}\n </Page.Title>\n <Formik\n validationSchema={apiTokenInformationSchema}\n validateOnChange={false}\n initialValues={{\n name: apiToken?.name || '',\n description: apiToken?.description || '',\n type: initialType,\n lifespan: apiToken?.lifespan,\n }}\n enableReinitialize\n onSubmit={(body, actions) => handleSubmit(body, actions)}\n >\n {({ errors, handleChange, isSubmitting, values, setFieldValue }) => {\n if (hasChangedPermissions && values?.type !== 'custom') {\n setFieldValue('type', 'custom');\n }\n\n return (\n <Form>\n <FormHead\n title={\n isCreating\n ? {\n id: 'Settings.apiTokens.createPage.title',\n defaultMessage: 'Create API Token',\n }\n : {\n id: 'Settings.apiTokens.createPage.title',\n defaultMessage: 'Edit API Token',\n }\n }\n token={apiToken}\n setToken={setApiToken}\n toggleToken={toggleToken}\n showToken={showToken}\n canEditInputs={canEditInputs}\n canRegenerate={canRegenerate}\n canShowToken={canShowToken}\n isSubmitting={isSubmitting}\n regenerateUrl=\"/admin/api-tokens/\"\n />\n\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {apiToken?.accessKey !== undefined &&\n apiToken.accessKey !== '' &&\n showToken === true && (\n <>\n <ApiTokenBox token={apiToken.accessKey} tokenType={API_TOKEN_TYPE} />\n </>\n )}\n\n <FormApiTokenContainer\n errors={errors}\n onChange={handleChange}\n canEditInputs={canEditInputs}\n isCreating={isCreating}\n values={values}\n apiToken={apiToken}\n kind=\"content-api\"\n onDispatch={dispatch}\n setHasChangedPermissions={setHasChangedPermissions}\n />\n\n <Permissions\n disabled={\n !canEditInputs ||\n values?.type === 'read-only' ||\n values?.type === 'full-access'\n }\n />\n </Flex>\n </Layouts.Content>\n </Form>\n );\n }}\n </Formik>\n </Page.Main>\n </ApiTokenPermissionsProvider>\n );\n};\n\nexport const ProtectedEditView = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['api-tokens'].read\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <EditView />\n </Page.Protect>\n );\n};\n"],"names":["EditView","formatMessage","useIntl","toggleNotification","useNotification","state","locationState","useLocation","permissions","useTypedSelector","admin_app","apiToken","setApiToken","React","useState","accessKey","undefined","showToken","setShowToken","hideTimerRef","useRef","trackUsage","useTracking","allowedActions","canCreate","canUpdate","canRegenerate","useRBAC","settings","dispatch","useReducer","reducer","initialState","match","useMatch","id","params","isCreating","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","navigate","useNavigate","contentAPIPermissionsQuery","useGetPermissionsQuery","contentAPIRoutesQuery","useGetRoutesQuery","useEffect","error","type","message","data","value","tokenType","API_TOKEN_TYPE","isLoading","useGetAPITokenQuery","skip","kind","current","setTimeout","clearTimeout","createToken","useCreateAPITokenMutation","updateToken","useUpdateAPITokenMutation","buildLifespan","raw","parseInt","toString","handleSubmit","body","formik","res","name","description","lifespan","selectedActions","isBaseQueryError","setErrors","defaultMessage","replace","hasChangedPermissions","setHasChangedPermissions","handleChangeCheckbox","target","handleChangeSelectAllCheckbox","setSelectedAction","toggleToken","prev","providerValue","onChange","onChangeSelectAll","canEditInputs","canShowToken","initialType","_jsx","Page","Loading","ApiTokenPermissionsProvider","_jsxs","Main","Title","Formik","validationSchema","apiTokenInformationSchema","validateOnChange","initialValues","enableReinitialize","onSubmit","actions","errors","handleChange","isSubmitting","values","setFieldValue","Form","FormHead","title","token","setToken","regenerateUrl","Layouts","Content","Flex","direction","alignItems","gap","_Fragment","ApiTokenBox","FormApiTokenContainer","onDispatch","Permissions","disabled","ProtectedEditView","read","Protect"],"mappings":"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"}
|