@strapi/admin 5.44.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/components/Table.js.map +1 -1
- package/dist/admin/admin/src/components/Table.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/en.json.js +16 -1
- package/dist/admin/admin/src/translations/en.json.js.map +1 -1
- package/dist/admin/admin/src/translations/en.json.mjs +16 -1
- package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
- package/dist/admin/admin/src/utils/getFetchClient.js +4 -1
- package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
- package/dist/admin/admin/src/utils/getFetchClient.mjs +4 -1
- 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/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/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 +7 -7
- 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
|
@@ -14,13 +14,12 @@ import { useRBAC } from '../../../../../hooks/useRBAC.mjs';
|
|
|
14
14
|
import { useGetAPITokenQuery, useCreateAPITokenMutation, useUpdateAPITokenMutation } from '../../../../../services/apiTokens.mjs';
|
|
15
15
|
import { useGetPermissionsQuery, useGetRoutesQuery } from '../../../../../services/contentApi.mjs';
|
|
16
16
|
import { isBaseQueryError } from '../../../../../utils/baseQuery.mjs';
|
|
17
|
-
import { API_TOKEN_TYPE } from '../../../components/Tokens/constants.mjs';
|
|
17
|
+
import { API_TOKEN_TYPE, apiTokenInformationSchema } from '../../../components/Tokens/constants.mjs';
|
|
18
|
+
import { FormApiTokenContainer } from '../../../components/Tokens/FormApiTokenContainer.mjs';
|
|
18
19
|
import { FormHead } from '../../../components/Tokens/FormHead.mjs';
|
|
19
20
|
import { ApiTokenBox } from '../../../components/Tokens/TokenBox.mjs';
|
|
20
21
|
import { ApiTokenPermissionsProvider } from './apiTokenPermissions.mjs';
|
|
21
|
-
import { FormApiTokenContainer } from './components/FormApiTokenContainer.mjs';
|
|
22
22
|
import { Permissions } from './components/Permissions.mjs';
|
|
23
|
-
import { schema } from './constants.mjs';
|
|
24
23
|
import { reducer, initialState } from './reducer.mjs';
|
|
25
24
|
|
|
26
25
|
/**
|
|
@@ -31,10 +30,10 @@ import { reducer, initialState } from './reducer.mjs';
|
|
|
31
30
|
const { toggleNotification } = useNotification();
|
|
32
31
|
const { state: locationState } = useLocation();
|
|
33
32
|
const permissions = useTypedSelector((state)=>state.admin_app.permissions);
|
|
34
|
-
const [apiToken, setApiToken] = React.useState(locationState?.apiToken?.accessKey ? {
|
|
33
|
+
const [apiToken, setApiToken] = React.useState(locationState?.apiToken?.accessKey !== undefined && locationState?.apiToken?.accessKey !== '' ? {
|
|
35
34
|
...locationState.apiToken
|
|
36
35
|
} : null);
|
|
37
|
-
const [showToken, setShowToken] = React.useState(
|
|
36
|
+
const [showToken, setShowToken] = React.useState(locationState?.apiToken?.accessKey !== undefined && locationState?.apiToken?.accessKey !== '');
|
|
38
37
|
const hideTimerRef = React.useRef(null);
|
|
39
38
|
const { trackUsage } = useTracking();
|
|
40
39
|
const { allowedActions: { canCreate, canUpdate, canRegenerate } } = useRBAC(permissions.settings?.['api-tokens']);
|
|
@@ -42,7 +41,7 @@ import { reducer, initialState } from './reducer.mjs';
|
|
|
42
41
|
const match = useMatch('/settings/api-tokens/:id');
|
|
43
42
|
const id = match?.params?.id;
|
|
44
43
|
const isCreating = id === 'create';
|
|
45
|
-
const { _unstableFormatAPIError: formatAPIError, _unstableFormatValidationErrors:
|
|
44
|
+
const { _unstableFormatAPIError: formatAPIError, _unstableFormatValidationErrors: formatValidationErrors } = useAPIErrorHandler();
|
|
46
45
|
const navigate = useNavigate();
|
|
47
46
|
const contentAPIPermissionsQuery = useGetPermissionsQuery();
|
|
48
47
|
const contentAPIRoutesQuery = useGetRoutesQuery();
|
|
@@ -94,7 +93,7 @@ import { reducer, initialState } from './reducer.mjs';
|
|
|
94
93
|
contentAPIRoutesQuery.data
|
|
95
94
|
]);
|
|
96
95
|
React.useEffect(()=>{
|
|
97
|
-
if (apiToken) {
|
|
96
|
+
if (apiToken !== null) {
|
|
98
97
|
if (apiToken.type === 'read-only') {
|
|
99
98
|
dispatch({
|
|
100
99
|
type: 'ON_CHANGE_READ_ONLY'
|
|
@@ -108,7 +107,7 @@ import { reducer, initialState } from './reducer.mjs';
|
|
|
108
107
|
if (apiToken.type === 'custom') {
|
|
109
108
|
dispatch({
|
|
110
109
|
type: 'UPDATE_PERMISSIONS',
|
|
111
|
-
value: apiToken
|
|
110
|
+
value: apiToken.permissions
|
|
112
111
|
});
|
|
113
112
|
}
|
|
114
113
|
}
|
|
@@ -141,21 +140,23 @@ import { reducer, initialState } from './reducer.mjs';
|
|
|
141
140
|
React.useEffect(()=>{
|
|
142
141
|
if (data) {
|
|
143
142
|
setApiToken(data);
|
|
144
|
-
if (data.
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
143
|
+
if (data.kind === 'content-api') {
|
|
144
|
+
if (data.type === 'read-only') {
|
|
145
|
+
dispatch({
|
|
146
|
+
type: 'ON_CHANGE_READ_ONLY'
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
if (data.type === 'full-access') {
|
|
150
|
+
dispatch({
|
|
151
|
+
type: 'SELECT_ALL_ACTIONS'
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
if (data.type === 'custom') {
|
|
155
|
+
dispatch({
|
|
156
|
+
type: 'UPDATE_PERMISSIONS',
|
|
157
|
+
value: data.permissions
|
|
158
|
+
});
|
|
159
|
+
}
|
|
159
160
|
}
|
|
160
161
|
}
|
|
161
162
|
}, [
|
|
@@ -180,6 +181,7 @@ import { reducer, initialState } from './reducer.mjs';
|
|
|
180
181
|
]);
|
|
181
182
|
const [createToken] = useCreateAPITokenMutation();
|
|
182
183
|
const [updateToken] = useUpdateAPITokenMutation();
|
|
184
|
+
const buildLifespan = (raw)=>raw && raw !== '0' ? parseInt(raw.toString(), 10) : null;
|
|
183
185
|
const handleSubmit = async (body, formik)=>{
|
|
184
186
|
trackUsage(isCreating ? 'willCreateToken' : 'willEditToken', {
|
|
185
187
|
tokenType: API_TOKEN_TYPE
|
|
@@ -187,14 +189,15 @@ import { reducer, initialState } from './reducer.mjs';
|
|
|
187
189
|
try {
|
|
188
190
|
if (isCreating) {
|
|
189
191
|
const res = await createToken({
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
192
|
+
name: body.name,
|
|
193
|
+
description: body.description,
|
|
194
|
+
type: body.type,
|
|
195
|
+
lifespan: buildLifespan(body.lifespan),
|
|
193
196
|
permissions: body.type === 'custom' ? state.selectedActions : null
|
|
194
197
|
});
|
|
195
198
|
if ('error' in res) {
|
|
196
199
|
if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
|
|
197
|
-
formik.setErrors(
|
|
200
|
+
formik.setErrors(formatValidationErrors(res.error));
|
|
198
201
|
} else {
|
|
199
202
|
toggleNotification({
|
|
200
203
|
type: 'danger',
|
|
@@ -211,7 +214,7 @@ import { reducer, initialState } from './reducer.mjs';
|
|
|
211
214
|
})
|
|
212
215
|
});
|
|
213
216
|
trackUsage('didCreateToken', {
|
|
214
|
-
|
|
217
|
+
kind: 'content-api',
|
|
215
218
|
tokenType: API_TOKEN_TYPE
|
|
216
219
|
});
|
|
217
220
|
navigate(`../api-tokens/${res.data.id.toString()}`, {
|
|
@@ -230,7 +233,7 @@ import { reducer, initialState } from './reducer.mjs';
|
|
|
230
233
|
});
|
|
231
234
|
if ('error' in res) {
|
|
232
235
|
if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
|
|
233
|
-
formik.setErrors(
|
|
236
|
+
formik.setErrors(formatValidationErrors(res.error));
|
|
234
237
|
} else {
|
|
235
238
|
toggleNotification({
|
|
236
239
|
type: 'danger',
|
|
@@ -247,6 +250,7 @@ import { reducer, initialState } from './reducer.mjs';
|
|
|
247
250
|
})
|
|
248
251
|
});
|
|
249
252
|
trackUsage('didEditToken', {
|
|
253
|
+
kind: res.data.kind,
|
|
250
254
|
type: res.data.type,
|
|
251
255
|
tokenType: API_TOKEN_TYPE
|
|
252
256
|
});
|
|
@@ -296,7 +300,8 @@ import { reducer, initialState } from './reducer.mjs';
|
|
|
296
300
|
setSelectedAction
|
|
297
301
|
};
|
|
298
302
|
const canEditInputs = canUpdate && !isCreating || canCreate && isCreating;
|
|
299
|
-
const canShowToken =
|
|
303
|
+
const canShowToken = apiToken?.accessKey !== undefined && apiToken.accessKey !== '';
|
|
304
|
+
const initialType = apiToken !== null && apiToken.kind === 'content-api' ? apiToken.type : undefined;
|
|
300
305
|
if (isLoading) {
|
|
301
306
|
return /*#__PURE__*/ jsx(Page.Loading, {});
|
|
302
307
|
}
|
|
@@ -313,12 +318,12 @@ import { reducer, initialState } from './reducer.mjs';
|
|
|
313
318
|
})
|
|
314
319
|
}),
|
|
315
320
|
/*#__PURE__*/ jsx(Formik, {
|
|
316
|
-
validationSchema:
|
|
321
|
+
validationSchema: apiTokenInformationSchema,
|
|
317
322
|
validateOnChange: false,
|
|
318
323
|
initialValues: {
|
|
319
324
|
name: apiToken?.name || '',
|
|
320
325
|
description: apiToken?.description || '',
|
|
321
|
-
type:
|
|
326
|
+
type: initialType,
|
|
322
327
|
lifespan: apiToken?.lifespan
|
|
323
328
|
},
|
|
324
329
|
enableReinitialize: true,
|
|
@@ -330,9 +335,12 @@ import { reducer, initialState } from './reducer.mjs';
|
|
|
330
335
|
return /*#__PURE__*/ jsxs(Form, {
|
|
331
336
|
children: [
|
|
332
337
|
/*#__PURE__*/ jsx(FormHead, {
|
|
333
|
-
title: {
|
|
338
|
+
title: isCreating ? {
|
|
334
339
|
id: 'Settings.apiTokens.createPage.title',
|
|
335
340
|
defaultMessage: 'Create API Token'
|
|
341
|
+
} : {
|
|
342
|
+
id: 'Settings.apiTokens.createPage.title',
|
|
343
|
+
defaultMessage: 'Edit API Token'
|
|
336
344
|
},
|
|
337
345
|
token: apiToken,
|
|
338
346
|
setToken: setApiToken,
|
|
@@ -350,7 +358,7 @@ import { reducer, initialState } from './reducer.mjs';
|
|
|
350
358
|
alignItems: "stretch",
|
|
351
359
|
gap: 6,
|
|
352
360
|
children: [
|
|
353
|
-
apiToken?.accessKey && showToken && /*#__PURE__*/ jsx(Fragment, {
|
|
361
|
+
apiToken?.accessKey !== undefined && apiToken.accessKey !== '' && showToken === true && /*#__PURE__*/ jsx(Fragment, {
|
|
354
362
|
children: /*#__PURE__*/ jsx(ApiTokenBox, {
|
|
355
363
|
token: apiToken.accessKey,
|
|
356
364
|
tokenType: API_TOKEN_TYPE
|
|
@@ -363,6 +371,7 @@ import { reducer, initialState } from './reducer.mjs';
|
|
|
363
371
|
isCreating: isCreating,
|
|
364
372
|
values: values,
|
|
365
373
|
apiToken: apiToken,
|
|
374
|
+
kind: "content-api",
|
|
366
375
|
onDispatch: dispatch,
|
|
367
376
|
setHasChangedPermissions: setHasChangedPermissions
|
|
368
377
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditViewPage.mjs","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.mjs","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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"}
|
|
@@ -105,7 +105,9 @@ const ListView = ()=>{
|
|
|
105
105
|
tokenType: constants.API_TOKEN_TYPE
|
|
106
106
|
});
|
|
107
107
|
});
|
|
108
|
-
const { data: apiTokens$1 = [], isLoading, error } = apiTokens.useGetAPITokensQuery(
|
|
108
|
+
const { data: apiTokens$1 = [], isLoading, error } = apiTokens.useGetAPITokensQuery({
|
|
109
|
+
kind: 'content-api'
|
|
110
|
+
});
|
|
109
111
|
React__namespace.useEffect(()=>{
|
|
110
112
|
if (error) {
|
|
111
113
|
toggleNotification({
|
|
@@ -180,7 +182,6 @@ const ListView = ()=>{
|
|
|
180
182
|
tokenType: constants.API_TOKEN_TYPE
|
|
181
183
|
}),
|
|
182
184
|
to: "/settings/api-tokens/create",
|
|
183
|
-
fullWidth: true,
|
|
184
185
|
children: formatMessage({
|
|
185
186
|
id: 'Settings.apiTokens.create',
|
|
186
187
|
defaultMessage: 'Create new API Token'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListView.js","sources":["../../../../../../../../admin/src/pages/Settings/pages/ApiTokens/ListView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, 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 { tours } from '../../../../components/GuidedTour/Tours';\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 { useDeleteAPITokenMutation, useGetAPITokensQuery } 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.apiTokens.ListView.headers.name',\n defaultMessage: 'Name',\n },\n sortable: true,\n },\n {\n name: 'description',\n label: {\n id: 'Settings.apiTokens.ListView.headers.description',\n defaultMessage: 'Description',\n },\n sortable: false,\n },\n {\n name: 'createdAt',\n label: {\n id: 'Settings.apiTokens.ListView.headers.createdAt',\n defaultMessage: 'Created at',\n },\n sortable: false,\n },\n {\n name: 'lastUsedAt',\n label: {\n id: 'Settings.apiTokens.ListView.headers.lastUsedAt',\n defaultMessage: 'Last used',\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?.['api-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: apiTokens = [], isLoading, error } = useGetAPITokensQuery();\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: apiTokens.length, tokenType: API_TOKEN_TYPE });\n }, [apiTokens, trackUsage]);\n\n const [deleteToken] = useDeleteAPITokenMutation();\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 {apiTokens.length > 0 && (\n <tours.apiTokens.Introduction>\n {/* Invisible Anchor */}\n <Box />\n </tours.apiTokens.Introduction>\n )}\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: 'API Tokens' }\n )}\n </Page.Title>\n <Layouts.Header\n title={formatMessage({ id: 'Settings.apiTokens.title', defaultMessage: 'API Tokens' })}\n subtitle={formatMessage({\n id: 'Settings.apiTokens.description',\n defaultMessage: 'List of generated tokens to consume the API',\n })}\n primaryAction={\n canCreate && (\n <LinkButton\n tag={Link}\n data-testid=\"create-api-token-button\"\n startIcon={<Plus />}\n size=\"S\"\n onClick={() =>\n trackUsage('willAddTokenFromList', {\n tokenType: API_TOKEN_TYPE,\n })\n }\n to=\"/settings/api-tokens/create\"\n fullWidth\n >\n {formatMessage({\n id: 'Settings.apiTokens.create',\n defaultMessage: 'Create new API Token',\n })}\n </LinkButton>\n )\n }\n />\n {!canRead ? (\n <Page.NoPermissions />\n ) : (\n <Page.Main aria-busy={isLoading}>\n <Layouts.Content>\n {apiTokens.length > 0 && (\n <Table\n permissions={{ canRead, canDelete, canUpdate }}\n headers={headers}\n isLoading={isLoading}\n onConfirmDelete={handleDelete}\n tokens={apiTokens}\n tokenType={API_TOKEN_TYPE}\n />\n )}\n {canCreate && apiTokens.length === 0 ? (\n <EmptyStateLayout\n icon={<EmptyDocuments width=\"16rem\" />}\n content={formatMessage({\n id: 'Settings.apiTokens.addFirstToken',\n defaultMessage: 'Add your first API Token',\n })}\n action={\n <LinkButton\n tag={Link}\n variant=\"secondary\"\n startIcon={<Plus />}\n to=\"/settings/api-tokens/create\"\n >\n {formatMessage({\n id: 'Settings.apiTokens.addNewToken',\n defaultMessage: 'Add new API Token',\n })}\n </LinkButton>\n }\n />\n ) : null}\n {!canCreate && apiTokens.length === 0 ? (\n <EmptyStateLayout\n icon={<EmptyDocuments width=\"16rem\" />}\n content={formatMessage({\n id: 'Settings.apiTokens.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?.['api-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","apiTokens","isLoading","error","useGetAPITokensQuery","type","message","number","length","deleteToken","useDeleteAPITokenMutation","handleDelete","res","_jsxs","_Fragment","_jsx","tours","Introduction","Box","Page","Title","Layouts","Header","title","subtitle","primaryAction","LinkButton","tag","Link","data-testid","startIcon","Plus","size","onClick","to","fullWidth","NoPermissions","Main","aria-busy","Content","Table","onConfirmDelete","tokens","EmptyStateLayout","icon","EmptyDocuments","width","content","action","variant","ProtectedListView","main","Protect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ListView.js","sources":["../../../../../../../../admin/src/pages/Settings/pages/ApiTokens/ListView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, 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 { tours } from '../../../../components/GuidedTour/Tours';\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 { useDeleteAPITokenMutation, useGetAPITokensQuery } 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.apiTokens.ListView.headers.name',\n defaultMessage: 'Name',\n },\n sortable: true,\n },\n {\n name: 'description',\n label: {\n id: 'Settings.apiTokens.ListView.headers.description',\n defaultMessage: 'Description',\n },\n sortable: false,\n },\n {\n name: 'createdAt',\n label: {\n id: 'Settings.apiTokens.ListView.headers.createdAt',\n defaultMessage: 'Created at',\n },\n sortable: false,\n },\n {\n name: 'lastUsedAt',\n label: {\n id: 'Settings.apiTokens.ListView.headers.lastUsedAt',\n defaultMessage: 'Last used',\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?.['api-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: apiTokens = [], isLoading, error } = useGetAPITokensQuery({ kind: 'content-api' });\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: apiTokens.length, tokenType: API_TOKEN_TYPE });\n }, [apiTokens, trackUsage]);\n\n const [deleteToken] = useDeleteAPITokenMutation();\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 {apiTokens.length > 0 && (\n <tours.apiTokens.Introduction>\n {/* Invisible Anchor */}\n <Box />\n </tours.apiTokens.Introduction>\n )}\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: 'API Tokens' }\n )}\n </Page.Title>\n <Layouts.Header\n title={formatMessage({ id: 'Settings.apiTokens.title', defaultMessage: 'API Tokens' })}\n subtitle={formatMessage({\n id: 'Settings.apiTokens.description',\n defaultMessage: 'List of generated tokens to consume the API',\n })}\n primaryAction={\n canCreate && (\n <LinkButton\n tag={Link}\n data-testid=\"create-api-token-button\"\n startIcon={<Plus />}\n size=\"S\"\n onClick={() => trackUsage('willAddTokenFromList', { tokenType: API_TOKEN_TYPE })}\n to=\"/settings/api-tokens/create\"\n >\n {formatMessage({\n id: 'Settings.apiTokens.create',\n defaultMessage: 'Create new API Token',\n })}\n </LinkButton>\n )\n }\n />\n {!canRead ? (\n <Page.NoPermissions />\n ) : (\n <Page.Main aria-busy={isLoading}>\n <Layouts.Content>\n {apiTokens.length > 0 && (\n <Table\n permissions={{ canRead, canDelete, canUpdate }}\n headers={headers}\n isLoading={isLoading}\n onConfirmDelete={handleDelete}\n tokens={apiTokens}\n tokenType={API_TOKEN_TYPE}\n />\n )}\n {canCreate && apiTokens.length === 0 ? (\n <EmptyStateLayout\n icon={<EmptyDocuments width=\"16rem\" />}\n content={formatMessage({\n id: 'Settings.apiTokens.addFirstToken',\n defaultMessage: 'Add your first API Token',\n })}\n action={\n <LinkButton\n tag={Link}\n variant=\"secondary\"\n startIcon={<Plus />}\n to=\"/settings/api-tokens/create\"\n >\n {formatMessage({\n id: 'Settings.apiTokens.addNewToken',\n defaultMessage: 'Add new API Token',\n })}\n </LinkButton>\n }\n />\n ) : null}\n {!canCreate && apiTokens.length === 0 ? (\n <EmptyStateLayout\n icon={<EmptyDocuments width=\"16rem\" />}\n content={formatMessage({\n id: 'Settings.apiTokens.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?.['api-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","apiTokens","isLoading","error","useGetAPITokensQuery","kind","type","message","number","length","deleteToken","useDeleteAPITokenMutation","handleDelete","res","_jsxs","_Fragment","_jsx","tours","Introduction","Box","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","EmptyStateLayout","icon","EmptyDocuments","width","content","action","variant","ProtectedListView","main","Protect"],"mappings":"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"}
|
|
@@ -83,7 +83,9 @@ const ListView = ()=>{
|
|
|
83
83
|
tokenType: API_TOKEN_TYPE
|
|
84
84
|
});
|
|
85
85
|
});
|
|
86
|
-
const { data: apiTokens = [], isLoading, error } = useGetAPITokensQuery(
|
|
86
|
+
const { data: apiTokens = [], isLoading, error } = useGetAPITokensQuery({
|
|
87
|
+
kind: 'content-api'
|
|
88
|
+
});
|
|
87
89
|
React.useEffect(()=>{
|
|
88
90
|
if (error) {
|
|
89
91
|
toggleNotification({
|
|
@@ -158,7 +160,6 @@ const ListView = ()=>{
|
|
|
158
160
|
tokenType: API_TOKEN_TYPE
|
|
159
161
|
}),
|
|
160
162
|
to: "/settings/api-tokens/create",
|
|
161
|
-
fullWidth: true,
|
|
162
163
|
children: formatMessage({
|
|
163
164
|
id: 'Settings.apiTokens.create',
|
|
164
165
|
defaultMessage: 'Create new API Token'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListView.mjs","sources":["../../../../../../../../admin/src/pages/Settings/pages/ApiTokens/ListView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, 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 { tours } from '../../../../components/GuidedTour/Tours';\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 { useDeleteAPITokenMutation, useGetAPITokensQuery } 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.apiTokens.ListView.headers.name',\n defaultMessage: 'Name',\n },\n sortable: true,\n },\n {\n name: 'description',\n label: {\n id: 'Settings.apiTokens.ListView.headers.description',\n defaultMessage: 'Description',\n },\n sortable: false,\n },\n {\n name: 'createdAt',\n label: {\n id: 'Settings.apiTokens.ListView.headers.createdAt',\n defaultMessage: 'Created at',\n },\n sortable: false,\n },\n {\n name: 'lastUsedAt',\n label: {\n id: 'Settings.apiTokens.ListView.headers.lastUsedAt',\n defaultMessage: 'Last used',\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?.['api-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: apiTokens = [], isLoading, error } = useGetAPITokensQuery();\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: apiTokens.length, tokenType: API_TOKEN_TYPE });\n }, [apiTokens, trackUsage]);\n\n const [deleteToken] = useDeleteAPITokenMutation();\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 {apiTokens.length > 0 && (\n <tours.apiTokens.Introduction>\n {/* Invisible Anchor */}\n <Box />\n </tours.apiTokens.Introduction>\n )}\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: 'API Tokens' }\n )}\n </Page.Title>\n <Layouts.Header\n title={formatMessage({ id: 'Settings.apiTokens.title', defaultMessage: 'API Tokens' })}\n subtitle={formatMessage({\n id: 'Settings.apiTokens.description',\n defaultMessage: 'List of generated tokens to consume the API',\n })}\n primaryAction={\n canCreate && (\n <LinkButton\n tag={Link}\n data-testid=\"create-api-token-button\"\n startIcon={<Plus />}\n size=\"S\"\n onClick={() =>\n trackUsage('willAddTokenFromList', {\n tokenType: API_TOKEN_TYPE,\n })\n }\n to=\"/settings/api-tokens/create\"\n fullWidth\n >\n {formatMessage({\n id: 'Settings.apiTokens.create',\n defaultMessage: 'Create new API Token',\n })}\n </LinkButton>\n )\n }\n />\n {!canRead ? (\n <Page.NoPermissions />\n ) : (\n <Page.Main aria-busy={isLoading}>\n <Layouts.Content>\n {apiTokens.length > 0 && (\n <Table\n permissions={{ canRead, canDelete, canUpdate }}\n headers={headers}\n isLoading={isLoading}\n onConfirmDelete={handleDelete}\n tokens={apiTokens}\n tokenType={API_TOKEN_TYPE}\n />\n )}\n {canCreate && apiTokens.length === 0 ? (\n <EmptyStateLayout\n icon={<EmptyDocuments width=\"16rem\" />}\n content={formatMessage({\n id: 'Settings.apiTokens.addFirstToken',\n defaultMessage: 'Add your first API Token',\n })}\n action={\n <LinkButton\n tag={Link}\n variant=\"secondary\"\n startIcon={<Plus />}\n to=\"/settings/api-tokens/create\"\n >\n {formatMessage({\n id: 'Settings.apiTokens.addNewToken',\n defaultMessage: 'Add new API Token',\n })}\n </LinkButton>\n }\n />\n ) : null}\n {!canCreate && apiTokens.length === 0 ? (\n <EmptyStateLayout\n icon={<EmptyDocuments width=\"16rem\" />}\n content={formatMessage({\n id: 'Settings.apiTokens.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?.['api-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","apiTokens","isLoading","error","useGetAPITokensQuery","type","message","number","length","deleteToken","useDeleteAPITokenMutation","handleDelete","res","_jsxs","_Fragment","_jsx","tours","Introduction","Box","Page","Title","Layouts","Header","title","subtitle","primaryAction","LinkButton","tag","Link","data-testid","startIcon","Plus","size","onClick","to","fullWidth","NoPermissions","Main","aria-busy","Content","Table","onConfirmDelete","tokens","EmptyStateLayout","icon","EmptyDocuments","width","content","action","variant","ProtectedListView","main","Protect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ListView.mjs","sources":["../../../../../../../../admin/src/pages/Settings/pages/ApiTokens/ListView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, 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 { tours } from '../../../../components/GuidedTour/Tours';\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 { useDeleteAPITokenMutation, useGetAPITokensQuery } 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.apiTokens.ListView.headers.name',\n defaultMessage: 'Name',\n },\n sortable: true,\n },\n {\n name: 'description',\n label: {\n id: 'Settings.apiTokens.ListView.headers.description',\n defaultMessage: 'Description',\n },\n sortable: false,\n },\n {\n name: 'createdAt',\n label: {\n id: 'Settings.apiTokens.ListView.headers.createdAt',\n defaultMessage: 'Created at',\n },\n sortable: false,\n },\n {\n name: 'lastUsedAt',\n label: {\n id: 'Settings.apiTokens.ListView.headers.lastUsedAt',\n defaultMessage: 'Last used',\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?.['api-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: apiTokens = [], isLoading, error } = useGetAPITokensQuery({ kind: 'content-api' });\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: apiTokens.length, tokenType: API_TOKEN_TYPE });\n }, [apiTokens, trackUsage]);\n\n const [deleteToken] = useDeleteAPITokenMutation();\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 {apiTokens.length > 0 && (\n <tours.apiTokens.Introduction>\n {/* Invisible Anchor */}\n <Box />\n </tours.apiTokens.Introduction>\n )}\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: 'API Tokens' }\n )}\n </Page.Title>\n <Layouts.Header\n title={formatMessage({ id: 'Settings.apiTokens.title', defaultMessage: 'API Tokens' })}\n subtitle={formatMessage({\n id: 'Settings.apiTokens.description',\n defaultMessage: 'List of generated tokens to consume the API',\n })}\n primaryAction={\n canCreate && (\n <LinkButton\n tag={Link}\n data-testid=\"create-api-token-button\"\n startIcon={<Plus />}\n size=\"S\"\n onClick={() => trackUsage('willAddTokenFromList', { tokenType: API_TOKEN_TYPE })}\n to=\"/settings/api-tokens/create\"\n >\n {formatMessage({\n id: 'Settings.apiTokens.create',\n defaultMessage: 'Create new API Token',\n })}\n </LinkButton>\n )\n }\n />\n {!canRead ? (\n <Page.NoPermissions />\n ) : (\n <Page.Main aria-busy={isLoading}>\n <Layouts.Content>\n {apiTokens.length > 0 && (\n <Table\n permissions={{ canRead, canDelete, canUpdate }}\n headers={headers}\n isLoading={isLoading}\n onConfirmDelete={handleDelete}\n tokens={apiTokens}\n tokenType={API_TOKEN_TYPE}\n />\n )}\n {canCreate && apiTokens.length === 0 ? (\n <EmptyStateLayout\n icon={<EmptyDocuments width=\"16rem\" />}\n content={formatMessage({\n id: 'Settings.apiTokens.addFirstToken',\n defaultMessage: 'Add your first API Token',\n })}\n action={\n <LinkButton\n tag={Link}\n variant=\"secondary\"\n startIcon={<Plus />}\n to=\"/settings/api-tokens/create\"\n >\n {formatMessage({\n id: 'Settings.apiTokens.addNewToken',\n defaultMessage: 'Add new API Token',\n })}\n </LinkButton>\n }\n />\n ) : null}\n {!canCreate && apiTokens.length === 0 ? (\n <EmptyStateLayout\n icon={<EmptyDocuments width=\"16rem\" />}\n content={formatMessage({\n id: 'Settings.apiTokens.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?.['api-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","apiTokens","isLoading","error","useGetAPITokensQuery","kind","type","message","number","length","deleteToken","useDeleteAPITokenMutation","handleDelete","res","_jsxs","_Fragment","_jsx","tours","Introduction","Box","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","EmptyStateLayout","icon","EmptyDocuments","width","content","action","variant","ProtectedListView","main","Protect"],"mappings":"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"}
|