@strapi/admin 5.45.0 → 5.46.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.
Files changed (59) hide show
  1. package/dist/admin/admin/src/components/UpsellBanner.js +112 -61
  2. package/dist/admin/admin/src/components/UpsellBanner.js.map +1 -1
  3. package/dist/admin/admin/src/components/UpsellBanner.mjs +115 -64
  4. package/dist/admin/admin/src/components/UpsellBanner.mjs.map +1 -1
  5. package/dist/admin/admin/src/pages/ProfilePage.js +1 -1
  6. package/dist/admin/admin/src/pages/ProfilePage.js.map +1 -1
  7. package/dist/admin/admin/src/pages/ProfilePage.mjs +1 -1
  8. package/dist/admin/admin/src/pages/ProfilePage.mjs.map +1 -1
  9. package/dist/admin/admin/src/translations/de.json.js +2 -0
  10. package/dist/admin/admin/src/translations/de.json.js.map +1 -1
  11. package/dist/admin/admin/src/translations/de.json.mjs +2 -0
  12. package/dist/admin/admin/src/translations/de.json.mjs.map +1 -1
  13. package/dist/admin/admin/src/translations/en.json.js +3 -0
  14. package/dist/admin/admin/src/translations/en.json.js.map +1 -1
  15. package/dist/admin/admin/src/translations/en.json.mjs +3 -0
  16. package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
  17. package/dist/admin/admin/src/translations/es.json.js +3 -0
  18. package/dist/admin/admin/src/translations/es.json.js.map +1 -1
  19. package/dist/admin/admin/src/translations/es.json.mjs +3 -0
  20. package/dist/admin/admin/src/translations/es.json.mjs.map +1 -1
  21. package/dist/admin/admin/src/translations/fr.json.js +2 -0
  22. package/dist/admin/admin/src/translations/fr.json.js.map +1 -1
  23. package/dist/admin/admin/src/translations/fr.json.mjs +2 -0
  24. package/dist/admin/admin/src/translations/fr.json.mjs.map +1 -1
  25. package/dist/admin/admin/src/translations/tr.json.js +216 -1
  26. package/dist/admin/admin/src/translations/tr.json.js.map +1 -1
  27. package/dist/admin/admin/src/translations/tr.json.mjs +215 -2
  28. package/dist/admin/admin/src/translations/tr.json.mjs.map +1 -1
  29. package/dist/admin/admin/src/utils/getFetchClient.js +15 -7
  30. package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
  31. package/dist/admin/admin/src/utils/getFetchClient.mjs +15 -7
  32. package/dist/admin/admin/src/utils/getFetchClient.mjs.map +1 -1
  33. package/dist/admin/admin/tests/server.js +123 -119
  34. package/dist/admin/admin/tests/server.js.map +1 -1
  35. package/dist/admin/admin/tests/server.mjs +124 -120
  36. package/dist/admin/admin/tests/server.mjs.map +1 -1
  37. package/dist/server/server/src/controllers/api-token.js +4 -5
  38. package/dist/server/server/src/controllers/api-token.js.map +1 -1
  39. package/dist/server/server/src/controllers/api-token.mjs +4 -5
  40. package/dist/server/server/src/controllers/api-token.mjs.map +1 -1
  41. package/dist/server/server/src/services/api-token.js +37 -18
  42. package/dist/server/server/src/services/api-token.js.map +1 -1
  43. package/dist/server/server/src/services/api-token.mjs +38 -19
  44. package/dist/server/server/src/services/api-token.mjs.map +1 -1
  45. package/dist/server/server/src/services/index.js +5 -2
  46. package/dist/server/server/src/services/index.js.map +1 -1
  47. package/dist/server/server/src/services/index.mjs +5 -2
  48. package/dist/server/server/src/services/index.mjs.map +1 -1
  49. package/dist/server/server/src/strategies/content-api-token.js +1 -1
  50. package/dist/server/server/src/strategies/content-api-token.js.map +1 -1
  51. package/dist/server/server/src/strategies/content-api-token.mjs +1 -1
  52. package/dist/server/server/src/strategies/content-api-token.mjs.map +1 -1
  53. package/dist/server/src/controllers/api-token.d.ts.map +1 -1
  54. package/dist/server/src/index.d.ts +1 -0
  55. package/dist/server/src/index.d.ts.map +1 -1
  56. package/dist/server/src/services/api-token.d.ts.map +1 -1
  57. package/dist/server/src/services/index.d.ts +2 -0
  58. package/dist/server/src/services/index.d.ts.map +1 -1
  59. package/package.json +8 -8
@@ -1 +1 @@
1
- {"version":3,"file":"server.mjs","sources":["../../../../admin/tests/server.ts"],"sourcesContent":["import { rest } from 'msw';\nimport { type SetupServer, setupServer } from 'msw/node';\n\nimport { mockData } from './mockData';\n\nexport const server: SetupServer = setupServer(\n ...[\n /**\n * TRACKING\n */\n rest.post('https://analytics.strapi.io/api/v2/track', (req, res, ctx) => {\n return res(ctx.status(200));\n }),\n /**\n *\n * ADMIN ROLES\n *\n */\n rest.get('/admin/roles', (req, res, ctx) =>\n res(\n ctx.json({\n data: [\n {\n id: 1,\n code: 'strapi-editor',\n name: 'Editor',\n },\n {\n id: 2,\n code: 'strapi-author',\n name: 'Author',\n },\n ],\n })\n )\n ),\n\n rest.get('/admin/roles/1', (req, res, ctx) =>\n res(\n ctx.json({\n data: {\n id: 1,\n code: 'strapi-editor',\n params: {\n filters: req.url.searchParams.get('filters'),\n },\n },\n })\n )\n ),\n rest.get('/admin/roles/:id/permissions', (req, res, ctx) => {\n return res(\n ctx.json({\n data: [\n {\n id: 1,\n action: 'plugin::content-manager.explorer.create',\n subject: 'api::address.address',\n properties: {\n fields: ['postal_code', 'categories'],\n },\n conditions: [],\n\n params: {\n filters: req.url.searchParams.get('filters'),\n },\n },\n ],\n })\n );\n }),\n /**\n *\n * ADMIN USERS\n *\n */\n rest.get('/admin/users', (req, res, ctx) => {\n return res(\n ctx.json({\n data: {\n results: [\n { id: 1, firstname: 'John', lastname: 'Doe', roles: [] },\n { id: 2, firstname: 'Kai', lastname: 'Doe', roles: [] },\n ],\n pagination: {\n page: 1,\n },\n },\n })\n );\n }),\n rest.get('/admin/users/1', (req, res, ctx) =>\n res(\n ctx.json({\n data: {\n id: 1,\n firstname: 'John',\n lastname: 'Doe',\n emai: 'test@testing.com',\n roles: [\n { id: 1, code: 'strapi-editor', name: 'Editor' },\n { id: 2, code: 'strapi-super-admin', name: 'Super Admin' },\n ],\n params: {\n some: req.url.searchParams.get('some'),\n },\n },\n })\n )\n ),\n rest.get('/admin/users/me', (req, res, ctx) => {\n return res(\n ctx.json({\n data: {\n id: 1,\n email: 'michka@michka.fr',\n firstname: 'michoko',\n lastname: 'ronronscelestes',\n username: 'yolo',\n preferedLanguage: 'en',\n roles: [\n {\n id: 2,\n },\n ],\n },\n })\n );\n }),\n rest.get('/admin/users/me/permissions', (req, res, ctx) => res(ctx.json({ data: [] }))),\n /**\n *\n * ADMIN PROVIDERS\n *\n */\n rest.get('/admin/providers/isSSOLocked', (req, res, ctx) => {\n return res(\n ctx.json({\n data: {\n isSSOLocked: false,\n },\n })\n );\n }),\n rest.put('/admin/providers/options', (req, res, ctx) =>\n res(\n ctx.json({\n data: {\n autoRegister: false,\n defaultRole: '1',\n ssoLockedRoles: ['1', '2', '3'],\n },\n })\n )\n ),\n rest.get('/admin/providers/options', (req, res, ctx) =>\n res(\n ctx.json({\n data: {\n autoRegister: false,\n defaultRole: '1',\n ssoLockedRoles: ['1', '2'],\n },\n })\n )\n ),\n /**\n *\n * ADMIN PERMISSIONS\n *\n */\n rest.get('/admin/permissions', (req, res, ctx) => {\n const role = req.url.searchParams.get('role');\n\n const permissionsData = {\n conditions: [\n {\n id: 'admin::is-creator',\n displayName: 'Is creator',\n category: 'default',\n },\n ],\n sections: {\n collectionTypes: {\n actions: [],\n subjects: [],\n },\n singleTypes: {\n actions: [],\n subjects: [],\n },\n plugins: [],\n settings: [\n {\n displayName: 'Access the Email Settings page',\n category: 'email',\n subCategory: 'general',\n action: 'plugin::email.settings.read',\n },\n ],\n },\n };\n\n // role === '' is used by AdminPermissions (token permission layout, no role scoping)\n if (role === '1' || role === '') {\n return res(ctx.json({ data: permissionsData }));\n }\n\n return res(ctx.status(404));\n }),\n /**\n *\n * ADMIN MISC\n *\n */\n rest.get('/admin/init', (req, res, ctx) => {\n return res(\n ctx.json({\n data: {},\n })\n );\n }),\n rest.get('/admin/information', (req, res, ctx) =>\n res(\n ctx.json({\n autoReload: true,\n communityEdition: false,\n currentEnvironment: 'development',\n nodeVersion: 'v14.13.1',\n strapiVersion: '3.6.0',\n })\n )\n ),\n rest.get('/admin/license-limit-information', (req, res, ctx) => {\n return res(\n ctx.json({\n data: {\n attribute: 1,\n\n features: [{ name: 'sso' }, { name: 'audit-logs', options: { retentionDays: 1 } }],\n },\n })\n );\n }),\n rest.get('/admin/project-settings', (req, res, ctx) => {\n return res(\n ctx.json({\n menuLogo: {\n ext: '.svg',\n height: 256,\n name: 'michka.svg',\n size: 1.3,\n url: '/uploads/michka.svg',\n width: 256,\n },\n })\n );\n }),\n rest.post('/admin/project-settings', (req, res, ctx) => {\n return res(\n ctx.json({\n menuLogo: {\n ext: '.svg',\n height: 256,\n name: 'michka.svg',\n size: 1.3,\n url: '/uploads/michka.svg',\n width: 256,\n },\n })\n );\n }),\n rest.get('/admin/transfer/tokens', (req, res, ctx) => {\n return res(\n ctx.json({\n data: [\n {\n id: 1,\n name: 'My super token',\n description: 'This describe my super token',\n type: 'read-only',\n createdAt: '2021-11-15T00:00:00.000Z',\n permissions: [],\n },\n ],\n })\n );\n }),\n rest.get('/admin/transfer/tokens/:id', (req, res, ctx) => {\n return res(\n ctx.json({\n data: {\n id: 1,\n name: 'My super token',\n description: 'This describe my super token',\n type: 'read-only',\n createdAt: '2021-11-15T00:00:00.000Z',\n permissions: [],\n },\n })\n );\n }),\n rest.get('/admin/registration-info', async (req, res, ctx) => {\n const token = req.url.searchParams.get('registrationToken');\n\n if (token === 'error') {\n return res(ctx.status(500), ctx.json({}));\n }\n\n return res(\n ctx.json({\n data: {\n firstname: 'Token firstname',\n lastname: 'Token lastname',\n email: 'test+register-token@strapi.io',\n },\n })\n );\n }),\n rest.post('/admin/renew-token', (req, res, ctx) => {\n return res(\n ctx.json({\n data: {\n token: 'renewed-test-token',\n },\n })\n );\n }),\n rest.get('/admin/guided-tour-meta', (req, res, ctx) => {\n return res(\n ctx.json({\n data: {\n isFirstSuperAdminUser: false,\n completedActions: [],\n },\n })\n );\n }),\n /**\n * WEBHOOKS\n */\n rest.get('/admin/webhooks', (req, res, ctx) => {\n return res(\n ctx.json({\n data: mockData.webhooks,\n })\n );\n }),\n rest.post('/admin/webhooks/batch-delete', async (req, res, ctx) => {\n const { ids } = await req.json<{ ids: number[] }>();\n\n return res(\n ctx.json({\n data: mockData.webhooks.filter((webhook) => !ids.includes(webhook.id)),\n })\n );\n }),\n rest.put('/admin/webhooks/:id', async (req, res, ctx) => {\n const { id } = req.params;\n const { isEnabled } = await req.json<{ isEnabled: boolean }>();\n\n return res(\n ctx.json({\n data: mockData.webhooks.map((webhook) =>\n webhook.id === Number(id) ? { ...webhook, isEnabled } : webhook\n ),\n })\n );\n }),\n /**\n *\n * CONTENT_MANAGER\n *\n */\n rest.get('/content-manager/content-types', (req, res, ctx) =>\n res(\n ctx.json({\n data: [\n {\n uid: 'admin::collectionType',\n isDisplayed: true,\n apiID: 'permission',\n kind: 'collectionType',\n },\n\n {\n uid: 'admin::collectionTypeNotDispalyed',\n isDisplayed: false,\n apiID: 'permission',\n kind: 'collectionType',\n },\n\n {\n uid: 'admin::singleType',\n isDisplayed: true,\n kind: 'singleType',\n },\n\n {\n uid: 'admin::singleTypeNotDispalyed',\n isDisplayed: false,\n kind: 'singleType',\n },\n ],\n })\n )\n ),\n rest.get('/content-manager/components', (req, res, ctx) =>\n res(\n ctx.json({\n data: [\n {\n uid: 'basic.relation',\n isDisplayed: true,\n apiID: 'relation',\n category: 'basic',\n info: {\n displayName: 'Relation',\n },\n options: {},\n attributes: {\n id: {\n type: 'integer',\n },\n categories: {\n type: 'relation',\n relation: 'oneToMany',\n target: 'api::category.category',\n targetModel: 'api::category.category',\n relationType: 'oneToMany',\n },\n },\n },\n ],\n })\n )\n ),\n /**\n *\n * NPS SURVEY\n *\n */\n rest.post('https://analytics.strapi.io/submit-nps', (req, res, ctx) => {\n return res(ctx.status(200));\n }),\n /**\n * CONTENT-API (API TOKENS)\n */\n rest.get('/admin/content-api/permissions', (req, res, ctx) => {\n return res(\n ctx.json({\n data: {\n 'api::address': {\n controllers: {\n address: ['find', 'findOne'],\n },\n },\n 'plugin::myplugin': {\n controllers: {\n test: ['findOne', 'find'],\n },\n },\n },\n })\n );\n }),\n rest.get('/admin/content-api/routes', (req, res, ctx) => {\n return res(\n ctx.json({\n data: {\n 'api::address': [\n {\n method: 'GET',\n path: '/api/addresses',\n handler: 'api::address.address.find',\n config: {\n auth: {\n scope: ['api::address.address.find'],\n },\n },\n info: {\n apiName: 'address',\n type: 'content-api',\n },\n },\n {\n method: 'GET',\n path: '/api/addresses/:id',\n handler: 'api::address.address.findOne',\n config: {\n auth: {\n scope: ['api::address.address.findOne'],\n },\n },\n info: {\n apiName: 'address',\n type: 'content-api',\n },\n },\n ],\n 'plugin::myplugin': [\n {\n method: 'GET',\n path: '/api/myplugin/tests',\n handler: 'plugin::myplugin.test.find',\n config: {\n auth: {\n scope: ['plugin::myplugin.test.find'],\n },\n },\n info: {\n pluginName: 'myplugin',\n type: 'content-api',\n },\n },\n {\n method: 'GET',\n path: '/api/myplugin/tests/:id',\n handler: 'plugin::myplugin.test.findOne',\n config: {\n auth: {\n scope: ['plugin::myplugin.test.findOne'],\n },\n },\n info: {\n pluginName: 'myplugin',\n type: 'content-api',\n },\n },\n ],\n },\n })\n );\n }),\n /**\n * API TOKENS\n */\n rest.get('/admin/api-tokens', (req, res, ctx) => {\n return res(\n ctx.json({\n data: [\n {\n id: '1',\n name: 'My super token',\n description: 'This describe my super token',\n kind: 'content-api',\n type: 'read-only',\n createdAt: '2021-11-15T00:00:00.000Z',\n permissions: [],\n },\n ],\n })\n );\n }),\n rest.get('/admin/api-tokens/:id', (req, res, ctx) => {\n const { id } = req.params;\n\n if (id === '2') {\n return res(\n ctx.json({\n data: {\n id: '2',\n name: 'My admin token',\n description: 'This is an admin token',\n kind: 'admin',\n adminPermissions: [],\n adminUserOwner: {\n id: 1,\n firstname: 'John',\n lastname: 'Doe',\n email: 'john@example.com',\n },\n createdAt: '2021-11-15T00:00:00.000Z',\n },\n })\n );\n }\n\n return res(\n ctx.json({\n data: {\n id: '1',\n name: 'My super token',\n description: 'This describe my super token',\n kind: 'content-api',\n type: 'read-only',\n createdAt: '2021-11-15T00:00:00.000Z',\n permissions: [],\n },\n })\n );\n }),\n /**\n * ADMIN TOKENS\n */\n rest.get('/admin/admin-tokens', (req, res, ctx) => {\n return res(\n ctx.json({\n data: [\n {\n id: '1',\n name: 'My admin token',\n description: 'This is an admin token',\n kind: 'admin',\n adminPermissions: [],\n adminUserOwner: {\n id: 1,\n firstname: 'John',\n lastname: 'Doe',\n email: 'john@example.com',\n },\n createdAt: '2021-11-15T00:00:00.000Z',\n },\n ],\n })\n );\n }),\n rest.get('/admin/admin-tokens/:id', (req, res, ctx) => {\n return res(\n ctx.json({\n data: {\n id: '1',\n name: 'My admin token',\n description: 'This is an admin token',\n kind: 'admin',\n adminPermissions: [],\n adminUserOwner: {\n id: 1,\n firstname: 'John',\n lastname: 'Doe',\n email: 'john@example.com',\n },\n createdAt: '2021-11-15T00:00:00.000Z',\n },\n })\n );\n }),\n rest.get('/admin/admin-tokens/:id/owner-permissions', (req, res, ctx) => {\n return res(ctx.json({ data: [] }));\n }),\n /**\n * Audit Logs\n */\n rest.get('/admin/audit-logs', (req, res, ctx) => {\n return res(\n ctx.json({\n results: [\n {\n id: 1,\n action: 'admin.logout',\n date: '2023-10-31T15:56:54.873Z',\n payload: {\n user: {\n id: 1,\n firstname: 'test',\n lastname: 'testing',\n username: null,\n email: 'test@testing.com',\n isActive: true,\n blocked: false,\n preferedLanguage: null,\n createdAt: '2023-10-26T19:19:38.245Z',\n updatedAt: '2023-10-26T19:19:38.245Z',\n roles: [\n {\n id: 1,\n name: 'Super Admin',\n description: 'Super Admins can access and manage all features and settings.',\n code: 'strapi-super-admin',\n },\n ],\n },\n },\n user: {\n id: 1,\n email: 'test@testing.com',\n displayName: 'test testing',\n },\n },\n {\n id: 2,\n action: 'user.create',\n date: '2023-10-31T15:57:38.957Z',\n payload: {\n user: {\n id: 2,\n firstname: 'editor',\n lastname: 'test',\n username: null,\n email: 'editor@testing.com',\n isActive: true,\n blocked: false,\n preferedLanguage: null,\n createdAt: '2023-10-31T15:57:38.948Z',\n updatedAt: '2023-10-31T15:57:38.948Z',\n roles: [\n {\n id: 2,\n name: 'Editor',\n description:\n 'Editors can manage and publish contents including those of other users.',\n code: 'strapi-editor',\n },\n ],\n },\n },\n user: {\n id: 1,\n email: 'test@testing.com',\n displayName: 'test testing',\n },\n },\n ],\n pagination: {\n page: 1,\n pageSize: 2,\n pageCount: 1,\n total: 2,\n },\n })\n );\n }),\n rest.get('/admin/audit-logs/:id', (req, res, ctx) => {\n return res(\n ctx.json({\n id: 1,\n action: 'admin.logout',\n date: '2023-10-31T15:56:54.873Z',\n payload: {\n user: {\n id: 1,\n firstname: 'test',\n lastname: 'testing',\n username: null,\n email: 'test@testing.com',\n isActive: true,\n blocked: false,\n preferedLanguage: null,\n createdAt: '2023-10-26T19:19:38.245Z',\n updatedAt: '2023-10-26T19:19:38.245Z',\n roles: [\n {\n id: 1,\n name: 'Super Admin',\n description: 'Super Admins can access and manage all features and settings.',\n code: 'strapi-super-admin',\n },\n ],\n },\n },\n user: {\n id: 1,\n email: 'test@testing.com',\n displayName: 'test testing',\n },\n })\n );\n }),\n /**\n *\n * fetchClient, useFetchClient and getFetchClient\n *\n */\n rest.get('/use-fetch-client-test', (req, res, ctx) => {\n return res(\n ctx.json({\n data: {\n results: [\n { id: 2, name: 'newest', publishedAt: null },\n { id: 1, name: 'oldest', publishedAt: null },\n ],\n pagination: { page: 1, pageCount: 10 },\n },\n })\n );\n }),\n rest.get('/test-fetch-client', (req, res, ctx) => {\n return res(ctx.status(200));\n }),\n ]\n);\n"],"names":["server","setupServer","rest","post","req","res","ctx","status","get","json","data","id","code","name","params","filters","url","searchParams","action","subject","properties","fields","conditions","results","firstname","lastname","roles","pagination","page","emai","some","email","username","preferedLanguage","isSSOLocked","put","autoRegister","defaultRole","ssoLockedRoles","role","permissionsData","displayName","category","sections","collectionTypes","actions","subjects","singleTypes","plugins","settings","subCategory","autoReload","communityEdition","currentEnvironment","nodeVersion","strapiVersion","attribute","features","options","retentionDays","menuLogo","ext","height","size","width","description","type","createdAt","permissions","token","isFirstSuperAdminUser","completedActions","mockData","webhooks","ids","filter","webhook","includes","isEnabled","map","Number","uid","isDisplayed","apiID","kind","info","attributes","categories","relation","target","targetModel","relationType","controllers","address","test","method","path","handler","config","auth","scope","apiName","pluginName","adminPermissions","adminUserOwner","date","payload","user","isActive","blocked","updatedAt","pageSize","pageCount","total","publishedAt"],"mappings":"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"}
1
+ {"version":3,"file":"server.mjs","sources":["../../../../admin/tests/server.ts"],"sourcesContent":["import { http, HttpResponse } from 'msw';\nimport { type SetupServer, setupServer } from 'msw/node';\n\nimport { mockData } from './mockData';\n\nexport const server: SetupServer = setupServer(\n ...[\n /**\n * TRACKING\n */\n http.post('https://analytics.strapi.io/api/v2/track', () => {\n return new HttpResponse();\n }),\n /**\n *\n * ADMIN ROLES\n *\n */\n http.get('/admin/roles', () =>\n HttpResponse.json({\n data: [\n {\n id: 1,\n code: 'strapi-editor',\n name: 'Editor',\n },\n {\n id: 2,\n code: 'strapi-author',\n name: 'Author',\n },\n ],\n })\n ),\n\n http.get('/admin/roles/1', ({ request }) =>\n HttpResponse.json({\n data: {\n id: 1,\n code: 'strapi-editor',\n params: {\n filters: new URL(request.url).searchParams.get('filters'),\n },\n },\n })\n ),\n http.get('/admin/roles/:id/permissions', ({ request }) => {\n return HttpResponse.json({\n data: [\n {\n id: 1,\n action: 'plugin::content-manager.explorer.create',\n subject: 'api::address.address',\n properties: {\n fields: ['postal_code', 'categories'],\n },\n conditions: [],\n\n params: {\n filters: new URL(request.url).searchParams.get('filters'),\n },\n },\n ],\n });\n }),\n /**\n *\n * ADMIN USERS\n *\n */\n http.get('/admin/users', () => {\n return HttpResponse.json({\n data: {\n results: [\n { id: 1, firstname: 'John', lastname: 'Doe', roles: [] },\n { id: 2, firstname: 'Kai', lastname: 'Doe', roles: [] },\n ],\n pagination: {\n page: 1,\n },\n },\n });\n }),\n http.get('/admin/users/1', ({ request }) =>\n HttpResponse.json({\n data: {\n id: 1,\n firstname: 'John',\n lastname: 'Doe',\n emai: 'test@testing.com',\n roles: [\n { id: 1, code: 'strapi-editor', name: 'Editor' },\n { id: 2, code: 'strapi-super-admin', name: 'Super Admin' },\n ],\n params: {\n some: new URL(request.url).searchParams.get('some'),\n },\n },\n })\n ),\n http.get('/admin/users/me', () => {\n return HttpResponse.json({\n data: {\n id: 1,\n email: 'michka@michka.fr',\n firstname: 'michoko',\n lastname: 'ronronscelestes',\n username: 'yolo',\n preferedLanguage: 'en',\n roles: [\n {\n id: 2,\n },\n ],\n },\n });\n }),\n http.get('/admin/users/me/permissions', () => HttpResponse.json({ data: [] })),\n /**\n *\n * ADMIN PROVIDERS\n *\n */\n http.get('/admin/providers/isSSOLocked', () => {\n return HttpResponse.json({\n data: {\n isSSOLocked: false,\n },\n });\n }),\n http.put('/admin/providers/options', () =>\n HttpResponse.json({\n data: {\n autoRegister: false,\n defaultRole: '1',\n ssoLockedRoles: ['1', '2', '3'],\n },\n })\n ),\n http.get('/admin/providers/options', () =>\n HttpResponse.json({\n data: {\n autoRegister: false,\n defaultRole: '1',\n ssoLockedRoles: ['1', '2'],\n },\n })\n ),\n /**\n *\n * ADMIN PERMISSIONS\n *\n */\n http.get('/admin/permissions', ({ request }) => {\n const role = new URL(request.url).searchParams.get('role');\n\n const permissionsData = {\n conditions: [\n {\n id: 'admin::is-creator',\n displayName: 'Is creator',\n category: 'default',\n },\n ],\n sections: {\n collectionTypes: {\n actions: [],\n subjects: [],\n },\n singleTypes: {\n actions: [],\n subjects: [],\n },\n plugins: [],\n settings: [\n {\n displayName: 'Access the Email Settings page',\n category: 'email',\n subCategory: 'general',\n action: 'plugin::email.settings.read',\n },\n ],\n },\n };\n\n // role === '' used by AdminPermissions (token permission layout, no role scoping)\n if (role === '1' || role === '') {\n return HttpResponse.json({ data: permissionsData });\n }\n\n return new HttpResponse(null, { status: 404 });\n }),\n /**\n *\n * ADMIN MISC\n *\n */\n http.get('/admin/init', () => {\n return HttpResponse.json({\n data: {},\n });\n }),\n http.get('/admin/information', () =>\n HttpResponse.json({\n autoReload: true,\n communityEdition: false,\n currentEnvironment: 'development',\n nodeVersion: 'v14.13.1',\n strapiVersion: '3.6.0',\n })\n ),\n http.get('/admin/license-limit-information', () => {\n return HttpResponse.json({\n data: {\n attribute: 1,\n\n features: [{ name: 'sso' }, { name: 'audit-logs', options: { retentionDays: 1 } }],\n },\n });\n }),\n http.get('/admin/project-settings', () => {\n return HttpResponse.json({\n menuLogo: {\n ext: '.svg',\n height: 256,\n name: 'michka.svg',\n size: 1.3,\n url: '/uploads/michka.svg',\n width: 256,\n },\n });\n }),\n http.post('/admin/project-settings', () => {\n return HttpResponse.json({\n menuLogo: {\n ext: '.svg',\n height: 256,\n name: 'michka.svg',\n size: 1.3,\n url: '/uploads/michka.svg',\n width: 256,\n },\n });\n }),\n http.get('/admin/transfer/tokens', () => {\n return HttpResponse.json({\n data: [\n {\n id: 1,\n name: 'My super token',\n description: 'This describe my super token',\n type: 'read-only',\n createdAt: '2021-11-15T00:00:00.000Z',\n permissions: [],\n },\n ],\n });\n }),\n http.get('/admin/transfer/tokens/:id', () => {\n return HttpResponse.json({\n data: {\n id: 1,\n name: 'My super token',\n description: 'This describe my super token',\n type: 'read-only',\n createdAt: '2021-11-15T00:00:00.000Z',\n permissions: [],\n },\n });\n }),\n http.get('/admin/registration-info', ({ request }) => {\n const token = new URL(request.url).searchParams.get('registrationToken');\n\n if (token === 'error') {\n return HttpResponse.json({}, { status: 500 });\n }\n\n return HttpResponse.json({\n data: {\n firstname: 'Token firstname',\n lastname: 'Token lastname',\n email: 'test+register-token@strapi.io',\n },\n });\n }),\n http.post('/admin/renew-token', () => {\n return HttpResponse.json({\n data: {\n token: 'renewed-test-token',\n },\n });\n }),\n http.get('/admin/guided-tour-meta', () => {\n return HttpResponse.json({\n data: {\n isFirstSuperAdminUser: false,\n completedActions: [],\n },\n });\n }),\n /**\n * WEBHOOKS\n */\n http.get('/admin/webhooks', () => {\n return HttpResponse.json({\n data: mockData.webhooks,\n });\n }),\n http.post<Record<string, never>, { ids: number[] }>(\n '/admin/webhooks/batch-delete',\n async ({ request }) => {\n const { ids } = await request.json();\n\n return HttpResponse.json({\n data: mockData.webhooks.filter((webhook) => !ids.includes(webhook.id)),\n });\n }\n ),\n http.put<{ id: string }, { isEnabled: boolean }>(\n '/admin/webhooks/:id',\n async ({ request, params }) => {\n const { id } = params;\n const { isEnabled } = await request.json();\n\n return HttpResponse.json({\n data: mockData.webhooks.map((webhook) =>\n webhook.id === Number(id) ? { ...webhook, isEnabled } : webhook\n ),\n });\n }\n ),\n /**\n *\n * CONTENT_MANAGER\n *\n */\n http.get('/content-manager/content-types', () =>\n HttpResponse.json({\n data: [\n {\n uid: 'admin::collectionType',\n isDisplayed: true,\n apiID: 'permission',\n kind: 'collectionType',\n },\n\n {\n uid: 'admin::collectionTypeNotDispalyed',\n isDisplayed: false,\n apiID: 'permission',\n kind: 'collectionType',\n },\n\n {\n uid: 'admin::singleType',\n isDisplayed: true,\n kind: 'singleType',\n },\n\n {\n uid: 'admin::singleTypeNotDispalyed',\n isDisplayed: false,\n kind: 'singleType',\n },\n ],\n })\n ),\n http.get('/content-manager/components', () =>\n HttpResponse.json({\n data: [\n {\n uid: 'basic.relation',\n isDisplayed: true,\n apiID: 'relation',\n category: 'basic',\n info: {\n displayName: 'Relation',\n },\n options: {},\n attributes: {\n id: {\n type: 'integer',\n },\n categories: {\n type: 'relation',\n relation: 'oneToMany',\n target: 'api::category.category',\n targetModel: 'api::category.category',\n relationType: 'oneToMany',\n },\n },\n },\n ],\n })\n ),\n /**\n *\n * NPS SURVEY\n *\n */\n http.post('https://analytics.strapi.io/submit-nps', () => {\n return new HttpResponse();\n }),\n /**\n * CONTENT-API (API TOKENS)\n */\n http.get('/admin/content-api/permissions', () => {\n return HttpResponse.json({\n data: {\n 'api::address': {\n controllers: {\n address: ['find', 'findOne'],\n },\n },\n 'plugin::myplugin': {\n controllers: {\n test: ['findOne', 'find'],\n },\n },\n },\n });\n }),\n http.get('/admin/content-api/routes', () => {\n return HttpResponse.json({\n data: {\n 'api::address': [\n {\n method: 'GET',\n path: '/api/addresses',\n handler: 'api::address.address.find',\n config: {\n auth: {\n scope: ['api::address.address.find'],\n },\n },\n info: {\n apiName: 'address',\n type: 'content-api',\n },\n },\n {\n method: 'GET',\n path: '/api/addresses/:id',\n handler: 'api::address.address.findOne',\n config: {\n auth: {\n scope: ['api::address.address.findOne'],\n },\n },\n info: {\n apiName: 'address',\n type: 'content-api',\n },\n },\n ],\n 'plugin::myplugin': [\n {\n method: 'GET',\n path: '/api/myplugin/tests',\n handler: 'plugin::myplugin.test.find',\n config: {\n auth: {\n scope: ['plugin::myplugin.test.find'],\n },\n },\n info: {\n pluginName: 'myplugin',\n type: 'content-api',\n },\n },\n {\n method: 'GET',\n path: '/api/myplugin/tests/:id',\n handler: 'plugin::myplugin.test.findOne',\n config: {\n auth: {\n scope: ['plugin::myplugin.test.findOne'],\n },\n },\n info: {\n pluginName: 'myplugin',\n type: 'content-api',\n },\n },\n ],\n },\n });\n }),\n /**\n * API TOKENS\n */\n http.get('/admin/api-tokens', () => {\n return HttpResponse.json({\n data: [\n {\n id: '1',\n name: 'My super token',\n description: 'This describe my super token',\n kind: 'content-api',\n type: 'read-only',\n createdAt: '2021-11-15T00:00:00.000Z',\n permissions: [],\n },\n ],\n });\n }),\n http.get('/admin/api-tokens/:id', ({ params }) => {\n const { id } = params;\n\n if (id === '2') {\n return HttpResponse.json({\n data: {\n id: '2',\n name: 'My admin token',\n description: 'This is an admin token',\n kind: 'admin',\n adminPermissions: [],\n adminUserOwner: {\n id: 1,\n firstname: 'John',\n lastname: 'Doe',\n email: 'john@example.com',\n },\n createdAt: '2021-11-15T00:00:00.000Z',\n },\n });\n }\n\n return HttpResponse.json({\n data: {\n id: '1',\n name: 'My super token',\n description: 'This describe my super token',\n kind: 'content-api',\n type: 'read-only',\n createdAt: '2021-11-15T00:00:00.000Z',\n permissions: [],\n },\n });\n }),\n /**\n * ADMIN TOKENS\n */\n http.get('/admin/admin-tokens', () => {\n return HttpResponse.json({\n data: [\n {\n id: '1',\n name: 'My admin token',\n description: 'This is an admin token',\n kind: 'admin',\n adminPermissions: [],\n adminUserOwner: {\n id: 1,\n firstname: 'John',\n lastname: 'Doe',\n email: 'john@example.com',\n },\n createdAt: '2021-11-15T00:00:00.000Z',\n },\n ],\n });\n }),\n http.get('/admin/admin-tokens/:id', () => {\n return HttpResponse.json({\n data: {\n id: '1',\n name: 'My admin token',\n description: 'This is an admin token',\n kind: 'admin',\n adminPermissions: [],\n adminUserOwner: {\n id: 1,\n firstname: 'John',\n lastname: 'Doe',\n email: 'john@example.com',\n },\n createdAt: '2021-11-15T00:00:00.000Z',\n },\n });\n }),\n http.get('/admin/admin-tokens/:id/owner-permissions', () => {\n return HttpResponse.json({ data: [] });\n }),\n /**\n * Audit Logs\n */\n http.get('/admin/audit-logs', () => {\n return HttpResponse.json({\n results: [\n {\n id: 1,\n action: 'admin.logout',\n date: '2023-10-31T15:56:54.873Z',\n payload: {\n user: {\n id: 1,\n firstname: 'test',\n lastname: 'testing',\n username: null,\n email: 'test@testing.com',\n isActive: true,\n blocked: false,\n preferedLanguage: null,\n createdAt: '2023-10-26T19:19:38.245Z',\n updatedAt: '2023-10-26T19:19:38.245Z',\n roles: [\n {\n id: 1,\n name: 'Super Admin',\n description: 'Super Admins can access and manage all features and settings.',\n code: 'strapi-super-admin',\n },\n ],\n },\n },\n user: {\n id: 1,\n email: 'test@testing.com',\n displayName: 'test testing',\n },\n },\n {\n id: 2,\n action: 'user.create',\n date: '2023-10-31T15:57:38.957Z',\n payload: {\n user: {\n id: 2,\n firstname: 'editor',\n lastname: 'test',\n username: null,\n email: 'editor@testing.com',\n isActive: true,\n blocked: false,\n preferedLanguage: null,\n createdAt: '2023-10-31T15:57:38.948Z',\n updatedAt: '2023-10-31T15:57:38.948Z',\n roles: [\n {\n id: 2,\n name: 'Editor',\n description:\n 'Editors can manage and publish contents including those of other users.',\n code: 'strapi-editor',\n },\n ],\n },\n },\n user: {\n id: 1,\n email: 'test@testing.com',\n displayName: 'test testing',\n },\n },\n ],\n pagination: {\n page: 1,\n pageSize: 2,\n pageCount: 1,\n total: 2,\n },\n });\n }),\n http.get('/admin/audit-logs/:id', () => {\n return HttpResponse.json({\n id: 1,\n action: 'admin.logout',\n date: '2023-10-31T15:56:54.873Z',\n payload: {\n user: {\n id: 1,\n firstname: 'test',\n lastname: 'testing',\n username: null,\n email: 'test@testing.com',\n isActive: true,\n blocked: false,\n preferedLanguage: null,\n createdAt: '2023-10-26T19:19:38.245Z',\n updatedAt: '2023-10-26T19:19:38.245Z',\n roles: [\n {\n id: 1,\n name: 'Super Admin',\n description: 'Super Admins can access and manage all features and settings.',\n code: 'strapi-super-admin',\n },\n ],\n },\n },\n user: {\n id: 1,\n email: 'test@testing.com',\n displayName: 'test testing',\n },\n });\n }),\n /**\n *\n * fetchClient, useFetchClient and getFetchClient\n *\n */\n http.get('/use-fetch-client-test', () => {\n return HttpResponse.json({\n data: {\n results: [\n { id: 2, name: 'newest', publishedAt: null },\n { id: 1, name: 'oldest', publishedAt: null },\n ],\n pagination: { page: 1, pageCount: 10 },\n },\n });\n }),\n http.get('/test-fetch-client', () => {\n return new HttpResponse();\n }),\n ]\n);\n"],"names":["server","setupServer","http","post","HttpResponse","get","json","data","id","code","name","request","params","filters","URL","url","searchParams","action","subject","properties","fields","conditions","results","firstname","lastname","roles","pagination","page","emai","some","email","username","preferedLanguage","isSSOLocked","put","autoRegister","defaultRole","ssoLockedRoles","role","permissionsData","displayName","category","sections","collectionTypes","actions","subjects","singleTypes","plugins","settings","subCategory","status","autoReload","communityEdition","currentEnvironment","nodeVersion","strapiVersion","attribute","features","options","retentionDays","menuLogo","ext","height","size","width","description","type","createdAt","permissions","token","isFirstSuperAdminUser","completedActions","mockData","webhooks","ids","filter","webhook","includes","isEnabled","map","Number","uid","isDisplayed","apiID","kind","info","attributes","categories","relation","target","targetModel","relationType","controllers","address","test","method","path","handler","config","auth","scope","apiName","pluginName","adminPermissions","adminUserOwner","date","payload","user","isActive","blocked","updatedAt","pageSize","pageCount","total","publishedAt"],"mappings":"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"}
@@ -76,16 +76,15 @@ var apiToken = {
76
76
  async get (ctx) {
77
77
  const { id } = ctx.params;
78
78
  const apiTokenService = index.getService('api-token-content-api');
79
- const token = await apiTokenService.getById(id);
79
+ const token = await apiTokenService.getById(id, {
80
+ includeDecryptedKey: true
81
+ });
80
82
  if (!token) {
81
83
  ctx.notFound('API Token not found');
82
84
  return;
83
85
  }
84
- const withKey = await apiTokenService.getById(id, {
85
- includeDecryptedKey: true
86
- });
87
86
  ctx.send({
88
- data: withKey ?? token
87
+ data: token
89
88
  });
90
89
  },
91
90
  // -------------------------------------------------------------------------
@@ -1 +1 @@
1
- {"version":3,"file":"api-token.js","sources":["../../../../../server/src/controllers/api-token.ts"],"sourcesContent":["import type { Context } from 'koa';\n\nimport { strings, errors } from '@strapi/utils';\nimport { trim, has } from 'lodash/fp';\nimport { getService } from '../utils';\nimport {\n validateApiTokenCreationInput,\n validateApiTokenUpdateInput,\n} from '../validation/api-tokens';\n\nimport { Create, List, Revoke, Get, Update } from '../../../shared/contracts/api-token';\n\nconst { ApplicationError } = errors;\n\nexport default {\n // -------------------------------------------------------------------------\n // Create\n // -------------------------------------------------------------------------\n async create(ctx: Context) {\n const { body } = ctx.request as Create.Request;\n const apiTokenService = getService('api-token-content-api');\n\n const attributes = {\n kind: 'content-api' as const,\n name: trim(body.name),\n description: trim(body.description),\n type: body.type,\n permissions: body.permissions,\n lifespan: body.lifespan,\n };\n\n await validateApiTokenCreationInput(attributes);\n\n const alreadyExists = await apiTokenService.exists({ name: attributes.name });\n if (alreadyExists) {\n throw new ApplicationError('Name already taken');\n }\n\n const apiToken = await apiTokenService.create(attributes, ctx.state.user);\n ctx.created({ data: apiToken } satisfies Create.Response);\n },\n\n // -------------------------------------------------------------------------\n // Regenerate\n // -------------------------------------------------------------------------\n async regenerate(ctx: Context) {\n const { id } = ctx.params;\n const apiTokenService = getService('api-token-content-api');\n\n const token = await apiTokenService.getById(id);\n if (!token) {\n ctx.notFound('API Token not found');\n return;\n }\n\n const accessToken = await apiTokenService.regenerate(id);\n ctx.created({ data: accessToken });\n },\n\n // -------------------------------------------------------------------------\n // List — always content-api\n // -------------------------------------------------------------------------\n async list(ctx: Context) {\n const apiTokenService = getService('api-token-content-api');\n const apiTokens = await apiTokenService.list(ctx.state.user);\n\n ctx.send({ data: apiTokens } satisfies List.Response);\n },\n\n // -------------------------------------------------------------------------\n // Revoke\n // -------------------------------------------------------------------------\n async revoke(ctx: Context) {\n const { id } = ctx.params as Revoke.Params;\n const apiTokenService = getService('api-token-content-api');\n const apiToken = await apiTokenService.revoke(id);\n\n ctx.deleted({ data: apiToken } satisfies Revoke.Response);\n },\n\n // -------------------------------------------------------------------------\n // Get — always expose the decrypted key (content-api back-compat)\n // -------------------------------------------------------------------------\n async get(ctx: Context) {\n const { id } = ctx.params;\n const apiTokenService = getService('api-token-content-api');\n\n const token = await apiTokenService.getById(id);\n if (!token) {\n ctx.notFound('API Token not found');\n return;\n }\n\n const withKey = await apiTokenService.getById(id, { includeDecryptedKey: true });\n ctx.send({ data: withKey ?? token } satisfies Get.Response);\n },\n\n // -------------------------------------------------------------------------\n // Update\n // -------------------------------------------------------------------------\n async update(ctx: Context) {\n const { body } = ctx.request as Update.Request;\n const { id } = ctx.params as Update.Params;\n const apiTokenService = getService('api-token-content-api');\n\n const mutableBody = body as Record<string, unknown>;\n if (has('name', mutableBody)) {\n mutableBody.name = trim(body.name ?? '');\n }\n if (has('description', mutableBody) || mutableBody.description === null) {\n mutableBody.description = trim(body.description ?? '');\n }\n\n await validateApiTokenUpdateInput(body);\n\n const existingToken = await apiTokenService.getById(id);\n if (!existingToken) {\n return ctx.notFound('API Token not found');\n }\n\n if (has('name', body)) {\n const nameAlreadyTaken = await apiTokenService.getByName(body.name!);\n if (nameAlreadyTaken !== null && !strings.isEqual(nameAlreadyTaken.id, id)) {\n throw new ApplicationError('Name already taken');\n }\n }\n\n const apiToken = await apiTokenService.update(id, body);\n ctx.send({ data: apiToken } satisfies Update.Response);\n },\n};\n"],"names":["ApplicationError","errors","create","ctx","body","request","apiTokenService","getService","attributes","kind","name","trim","description","type","permissions","lifespan","validateApiTokenCreationInput","alreadyExists","exists","apiToken","state","user","created","data","regenerate","id","params","token","getById","notFound","accessToken","list","apiTokens","send","revoke","deleted","get","withKey","includeDecryptedKey","update","mutableBody","has","validateApiTokenUpdateInput","existingToken","nameAlreadyTaken","getByName","strings","isEqual"],"mappings":";;;;;;;AAYA,MAAM,EAAEA,gBAAgB,EAAE,GAAGC,YAAAA;AAE7B,eAAe;;;;AAIb,IAAA,MAAMC,QAAOC,GAAY,EAAA;AACvB,QAAA,MAAM,EAAEC,IAAI,EAAE,GAAGD,IAAIE,OAAO;AAC5B,QAAA,MAAMC,kBAAkBC,gBAAAA,CAAW,uBAAA,CAAA;AAEnC,QAAA,MAAMC,UAAAA,GAAa;YACjBC,IAAAA,EAAM,aAAA;YACNC,IAAAA,EAAMC,OAAAA,CAAKP,KAAKM,IAAI,CAAA;YACpBE,WAAAA,EAAaD,OAAAA,CAAKP,KAAKQ,WAAW,CAAA;AAClCC,YAAAA,IAAAA,EAAMT,KAAKS,IAAI;AACfC,YAAAA,WAAAA,EAAaV,KAAKU,WAAW;AAC7BC,YAAAA,QAAAA,EAAUX,KAAKW;AACjB,SAAA;AAEA,QAAA,MAAMC,uCAAAA,CAA8BR,UAAAA,CAAAA;AAEpC,QAAA,MAAMS,aAAAA,GAAgB,MAAMX,eAAAA,CAAgBY,MAAM,CAAC;AAAER,YAAAA,IAAAA,EAAMF,WAAWE;AAAK,SAAA,CAAA;AAC3E,QAAA,IAAIO,aAAAA,EAAe;AACjB,YAAA,MAAM,IAAIjB,gBAAAA,CAAiB,oBAAA,CAAA;AAC7B,QAAA;QAEA,MAAMmB,QAAAA,GAAW,MAAMb,eAAAA,CAAgBJ,MAAM,CAACM,UAAAA,EAAYL,GAAAA,CAAIiB,KAAK,CAACC,IAAI,CAAA;AACxElB,QAAAA,GAAAA,CAAImB,OAAO,CAAC;YAAEC,IAAAA,EAAMJ;AAAS,SAAA,CAAA;AAC/B,IAAA,CAAA;;;;AAKA,IAAA,MAAMK,YAAWrB,GAAY,EAAA;AAC3B,QAAA,MAAM,EAAEsB,EAAE,EAAE,GAAGtB,IAAIuB,MAAM;AACzB,QAAA,MAAMpB,kBAAkBC,gBAAAA,CAAW,uBAAA,CAAA;AAEnC,QAAA,MAAMoB,KAAAA,GAAQ,MAAMrB,eAAAA,CAAgBsB,OAAO,CAACH,EAAAA,CAAAA;AAC5C,QAAA,IAAI,CAACE,KAAAA,EAAO;AACVxB,YAAAA,GAAAA,CAAI0B,QAAQ,CAAC,qBAAA,CAAA;AACb,YAAA;AACF,QAAA;AAEA,QAAA,MAAMC,WAAAA,GAAc,MAAMxB,eAAAA,CAAgBkB,UAAU,CAACC,EAAAA,CAAAA;AACrDtB,QAAAA,GAAAA,CAAImB,OAAO,CAAC;YAAEC,IAAAA,EAAMO;AAAY,SAAA,CAAA;AAClC,IAAA,CAAA;;;;AAKA,IAAA,MAAMC,MAAK5B,GAAY,EAAA;AACrB,QAAA,MAAMG,kBAAkBC,gBAAAA,CAAW,uBAAA,CAAA;QACnC,MAAMyB,SAAAA,GAAY,MAAM1B,eAAAA,CAAgByB,IAAI,CAAC5B,GAAAA,CAAIiB,KAAK,CAACC,IAAI,CAAA;AAE3DlB,QAAAA,GAAAA,CAAI8B,IAAI,CAAC;YAAEV,IAAAA,EAAMS;AAAU,SAAA,CAAA;AAC7B,IAAA,CAAA;;;;AAKA,IAAA,MAAME,QAAO/B,GAAY,EAAA;AACvB,QAAA,MAAM,EAAEsB,EAAE,EAAE,GAAGtB,IAAIuB,MAAM;AACzB,QAAA,MAAMpB,kBAAkBC,gBAAAA,CAAW,uBAAA,CAAA;AACnC,QAAA,MAAMY,QAAAA,GAAW,MAAMb,eAAAA,CAAgB4B,MAAM,CAACT,EAAAA,CAAAA;AAE9CtB,QAAAA,GAAAA,CAAIgC,OAAO,CAAC;YAAEZ,IAAAA,EAAMJ;AAAS,SAAA,CAAA;AAC/B,IAAA,CAAA;;;;AAKA,IAAA,MAAMiB,KAAIjC,GAAY,EAAA;AACpB,QAAA,MAAM,EAAEsB,EAAE,EAAE,GAAGtB,IAAIuB,MAAM;AACzB,QAAA,MAAMpB,kBAAkBC,gBAAAA,CAAW,uBAAA,CAAA;AAEnC,QAAA,MAAMoB,KAAAA,GAAQ,MAAMrB,eAAAA,CAAgBsB,OAAO,CAACH,EAAAA,CAAAA;AAC5C,QAAA,IAAI,CAACE,KAAAA,EAAO;AACVxB,YAAAA,GAAAA,CAAI0B,QAAQ,CAAC,qBAAA,CAAA;AACb,YAAA;AACF,QAAA;AAEA,QAAA,MAAMQ,OAAAA,GAAU,MAAM/B,eAAAA,CAAgBsB,OAAO,CAACH,EAAAA,EAAI;YAAEa,mBAAAA,EAAqB;AAAK,SAAA,CAAA;AAC9EnC,QAAAA,GAAAA,CAAI8B,IAAI,CAAC;AAAEV,YAAAA,IAAAA,EAAMc,OAAAA,IAAWV;AAAM,SAAA,CAAA;AACpC,IAAA,CAAA;;;;AAKA,IAAA,MAAMY,QAAOpC,GAAY,EAAA;AACvB,QAAA,MAAM,EAAEC,IAAI,EAAE,GAAGD,IAAIE,OAAO;AAC5B,QAAA,MAAM,EAAEoB,EAAE,EAAE,GAAGtB,IAAIuB,MAAM;AACzB,QAAA,MAAMpB,kBAAkBC,gBAAAA,CAAW,uBAAA,CAAA;AAEnC,QAAA,MAAMiC,WAAAA,GAAcpC,IAAAA;QACpB,IAAIqC,MAAAA,CAAI,QAAQD,WAAAA,CAAAA,EAAc;AAC5BA,YAAAA,WAAAA,CAAY9B,IAAI,GAAGC,OAAAA,CAAKP,IAAAA,CAAKM,IAAI,IAAI,EAAA,CAAA;AACvC,QAAA;AACA,QAAA,IAAI+B,OAAI,aAAA,EAAeD,WAAAA,CAAAA,IAAgBA,WAAAA,CAAY5B,WAAW,KAAK,IAAA,EAAM;AACvE4B,YAAAA,WAAAA,CAAY5B,WAAW,GAAGD,OAAAA,CAAKP,IAAAA,CAAKQ,WAAW,IAAI,EAAA,CAAA;AACrD,QAAA;AAEA,QAAA,MAAM8B,qCAAAA,CAA4BtC,IAAAA,CAAAA;AAElC,QAAA,MAAMuC,aAAAA,GAAgB,MAAMrC,eAAAA,CAAgBsB,OAAO,CAACH,EAAAA,CAAAA;AACpD,QAAA,IAAI,CAACkB,aAAAA,EAAe;YAClB,OAAOxC,GAAAA,CAAI0B,QAAQ,CAAC,qBAAA,CAAA;AACtB,QAAA;QAEA,IAAIY,MAAAA,CAAI,QAAQrC,IAAAA,CAAAA,EAAO;AACrB,YAAA,MAAMwC,mBAAmB,MAAMtC,eAAAA,CAAgBuC,SAAS,CAACzC,KAAKM,IAAI,CAAA;YAClE,IAAIkC,gBAAAA,KAAqB,QAAQ,CAACE,aAAAA,CAAQC,OAAO,CAACH,gBAAAA,CAAiBnB,EAAE,EAAEA,EAAAA,CAAAA,EAAK;AAC1E,gBAAA,MAAM,IAAIzB,gBAAAA,CAAiB,oBAAA,CAAA;AAC7B,YAAA;AACF,QAAA;AAEA,QAAA,MAAMmB,QAAAA,GAAW,MAAMb,eAAAA,CAAgBiC,MAAM,CAACd,EAAAA,EAAIrB,IAAAA,CAAAA;AAClDD,QAAAA,GAAAA,CAAI8B,IAAI,CAAC;YAAEV,IAAAA,EAAMJ;AAAS,SAAA,CAAA;AAC5B,IAAA;AACF,CAAA;;;;"}
1
+ {"version":3,"file":"api-token.js","sources":["../../../../../server/src/controllers/api-token.ts"],"sourcesContent":["import type { Context } from 'koa';\n\nimport { strings, errors } from '@strapi/utils';\nimport { trim, has } from 'lodash/fp';\nimport { getService } from '../utils';\nimport {\n validateApiTokenCreationInput,\n validateApiTokenUpdateInput,\n} from '../validation/api-tokens';\n\nimport { Create, List, Revoke, Get, Update } from '../../../shared/contracts/api-token';\n\nconst { ApplicationError } = errors;\n\nexport default {\n // -------------------------------------------------------------------------\n // Create\n // -------------------------------------------------------------------------\n async create(ctx: Context) {\n const { body } = ctx.request as Create.Request;\n const apiTokenService = getService('api-token-content-api');\n\n const attributes = {\n kind: 'content-api' as const,\n name: trim(body.name),\n description: trim(body.description),\n type: body.type,\n permissions: body.permissions,\n lifespan: body.lifespan,\n };\n\n await validateApiTokenCreationInput(attributes);\n\n const alreadyExists = await apiTokenService.exists({ name: attributes.name });\n if (alreadyExists) {\n throw new ApplicationError('Name already taken');\n }\n\n const apiToken = await apiTokenService.create(attributes, ctx.state.user);\n ctx.created({ data: apiToken } satisfies Create.Response);\n },\n\n // -------------------------------------------------------------------------\n // Regenerate\n // -------------------------------------------------------------------------\n async regenerate(ctx: Context) {\n const { id } = ctx.params;\n const apiTokenService = getService('api-token-content-api');\n\n const token = await apiTokenService.getById(id);\n if (!token) {\n ctx.notFound('API Token not found');\n return;\n }\n\n const accessToken = await apiTokenService.regenerate(id);\n ctx.created({ data: accessToken });\n },\n\n // -------------------------------------------------------------------------\n // List — always content-api\n // -------------------------------------------------------------------------\n async list(ctx: Context) {\n const apiTokenService = getService('api-token-content-api');\n const apiTokens = await apiTokenService.list(ctx.state.user);\n\n ctx.send({ data: apiTokens } satisfies List.Response);\n },\n\n // -------------------------------------------------------------------------\n // Revoke\n // -------------------------------------------------------------------------\n async revoke(ctx: Context) {\n const { id } = ctx.params as Revoke.Params;\n const apiTokenService = getService('api-token-content-api');\n const apiToken = await apiTokenService.revoke(id);\n\n ctx.deleted({ data: apiToken } satisfies Revoke.Response);\n },\n\n // -------------------------------------------------------------------------\n // Get — always expose the decrypted key (content-api back-compat)\n // -------------------------------------------------------------------------\n async get(ctx: Context) {\n const { id } = ctx.params;\n const apiTokenService = getService('api-token-content-api');\n\n const token = await apiTokenService.getById(id, { includeDecryptedKey: true });\n if (!token) {\n ctx.notFound('API Token not found');\n return;\n }\n\n ctx.send({ data: token } satisfies Get.Response);\n },\n\n // -------------------------------------------------------------------------\n // Update\n // -------------------------------------------------------------------------\n async update(ctx: Context) {\n const { body } = ctx.request as Update.Request;\n const { id } = ctx.params as Update.Params;\n const apiTokenService = getService('api-token-content-api');\n\n const mutableBody = body as Record<string, unknown>;\n if (has('name', mutableBody)) {\n mutableBody.name = trim(body.name ?? '');\n }\n if (has('description', mutableBody) || mutableBody.description === null) {\n mutableBody.description = trim(body.description ?? '');\n }\n\n await validateApiTokenUpdateInput(body);\n\n const existingToken = await apiTokenService.getById(id);\n if (!existingToken) {\n return ctx.notFound('API Token not found');\n }\n\n if (has('name', body)) {\n const nameAlreadyTaken = await apiTokenService.getByName(body.name!);\n if (nameAlreadyTaken !== null && !strings.isEqual(nameAlreadyTaken.id, id)) {\n throw new ApplicationError('Name already taken');\n }\n }\n\n const apiToken = await apiTokenService.update(id, body);\n ctx.send({ data: apiToken } satisfies Update.Response);\n },\n};\n"],"names":["ApplicationError","errors","create","ctx","body","request","apiTokenService","getService","attributes","kind","name","trim","description","type","permissions","lifespan","validateApiTokenCreationInput","alreadyExists","exists","apiToken","state","user","created","data","regenerate","id","params","token","getById","notFound","accessToken","list","apiTokens","send","revoke","deleted","get","includeDecryptedKey","update","mutableBody","has","validateApiTokenUpdateInput","existingToken","nameAlreadyTaken","getByName","strings","isEqual"],"mappings":"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"}
@@ -74,16 +74,15 @@ var apiToken = {
74
74
  async get (ctx) {
75
75
  const { id } = ctx.params;
76
76
  const apiTokenService = getService('api-token-content-api');
77
- const token = await apiTokenService.getById(id);
77
+ const token = await apiTokenService.getById(id, {
78
+ includeDecryptedKey: true
79
+ });
78
80
  if (!token) {
79
81
  ctx.notFound('API Token not found');
80
82
  return;
81
83
  }
82
- const withKey = await apiTokenService.getById(id, {
83
- includeDecryptedKey: true
84
- });
85
84
  ctx.send({
86
- data: withKey ?? token
85
+ data: token
87
86
  });
88
87
  },
89
88
  // -------------------------------------------------------------------------
@@ -1 +1 @@
1
- {"version":3,"file":"api-token.mjs","sources":["../../../../../server/src/controllers/api-token.ts"],"sourcesContent":["import type { Context } from 'koa';\n\nimport { strings, errors } from '@strapi/utils';\nimport { trim, has } from 'lodash/fp';\nimport { getService } from '../utils';\nimport {\n validateApiTokenCreationInput,\n validateApiTokenUpdateInput,\n} from '../validation/api-tokens';\n\nimport { Create, List, Revoke, Get, Update } from '../../../shared/contracts/api-token';\n\nconst { ApplicationError } = errors;\n\nexport default {\n // -------------------------------------------------------------------------\n // Create\n // -------------------------------------------------------------------------\n async create(ctx: Context) {\n const { body } = ctx.request as Create.Request;\n const apiTokenService = getService('api-token-content-api');\n\n const attributes = {\n kind: 'content-api' as const,\n name: trim(body.name),\n description: trim(body.description),\n type: body.type,\n permissions: body.permissions,\n lifespan: body.lifespan,\n };\n\n await validateApiTokenCreationInput(attributes);\n\n const alreadyExists = await apiTokenService.exists({ name: attributes.name });\n if (alreadyExists) {\n throw new ApplicationError('Name already taken');\n }\n\n const apiToken = await apiTokenService.create(attributes, ctx.state.user);\n ctx.created({ data: apiToken } satisfies Create.Response);\n },\n\n // -------------------------------------------------------------------------\n // Regenerate\n // -------------------------------------------------------------------------\n async regenerate(ctx: Context) {\n const { id } = ctx.params;\n const apiTokenService = getService('api-token-content-api');\n\n const token = await apiTokenService.getById(id);\n if (!token) {\n ctx.notFound('API Token not found');\n return;\n }\n\n const accessToken = await apiTokenService.regenerate(id);\n ctx.created({ data: accessToken });\n },\n\n // -------------------------------------------------------------------------\n // List — always content-api\n // -------------------------------------------------------------------------\n async list(ctx: Context) {\n const apiTokenService = getService('api-token-content-api');\n const apiTokens = await apiTokenService.list(ctx.state.user);\n\n ctx.send({ data: apiTokens } satisfies List.Response);\n },\n\n // -------------------------------------------------------------------------\n // Revoke\n // -------------------------------------------------------------------------\n async revoke(ctx: Context) {\n const { id } = ctx.params as Revoke.Params;\n const apiTokenService = getService('api-token-content-api');\n const apiToken = await apiTokenService.revoke(id);\n\n ctx.deleted({ data: apiToken } satisfies Revoke.Response);\n },\n\n // -------------------------------------------------------------------------\n // Get — always expose the decrypted key (content-api back-compat)\n // -------------------------------------------------------------------------\n async get(ctx: Context) {\n const { id } = ctx.params;\n const apiTokenService = getService('api-token-content-api');\n\n const token = await apiTokenService.getById(id);\n if (!token) {\n ctx.notFound('API Token not found');\n return;\n }\n\n const withKey = await apiTokenService.getById(id, { includeDecryptedKey: true });\n ctx.send({ data: withKey ?? token } satisfies Get.Response);\n },\n\n // -------------------------------------------------------------------------\n // Update\n // -------------------------------------------------------------------------\n async update(ctx: Context) {\n const { body } = ctx.request as Update.Request;\n const { id } = ctx.params as Update.Params;\n const apiTokenService = getService('api-token-content-api');\n\n const mutableBody = body as Record<string, unknown>;\n if (has('name', mutableBody)) {\n mutableBody.name = trim(body.name ?? '');\n }\n if (has('description', mutableBody) || mutableBody.description === null) {\n mutableBody.description = trim(body.description ?? '');\n }\n\n await validateApiTokenUpdateInput(body);\n\n const existingToken = await apiTokenService.getById(id);\n if (!existingToken) {\n return ctx.notFound('API Token not found');\n }\n\n if (has('name', body)) {\n const nameAlreadyTaken = await apiTokenService.getByName(body.name!);\n if (nameAlreadyTaken !== null && !strings.isEqual(nameAlreadyTaken.id, id)) {\n throw new ApplicationError('Name already taken');\n }\n }\n\n const apiToken = await apiTokenService.update(id, body);\n ctx.send({ data: apiToken } satisfies Update.Response);\n },\n};\n"],"names":["ApplicationError","errors","create","ctx","body","request","apiTokenService","getService","attributes","kind","name","trim","description","type","permissions","lifespan","validateApiTokenCreationInput","alreadyExists","exists","apiToken","state","user","created","data","regenerate","id","params","token","getById","notFound","accessToken","list","apiTokens","send","revoke","deleted","get","withKey","includeDecryptedKey","update","mutableBody","has","validateApiTokenUpdateInput","existingToken","nameAlreadyTaken","getByName","strings","isEqual"],"mappings":"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"}
1
+ {"version":3,"file":"api-token.mjs","sources":["../../../../../server/src/controllers/api-token.ts"],"sourcesContent":["import type { Context } from 'koa';\n\nimport { strings, errors } from '@strapi/utils';\nimport { trim, has } from 'lodash/fp';\nimport { getService } from '../utils';\nimport {\n validateApiTokenCreationInput,\n validateApiTokenUpdateInput,\n} from '../validation/api-tokens';\n\nimport { Create, List, Revoke, Get, Update } from '../../../shared/contracts/api-token';\n\nconst { ApplicationError } = errors;\n\nexport default {\n // -------------------------------------------------------------------------\n // Create\n // -------------------------------------------------------------------------\n async create(ctx: Context) {\n const { body } = ctx.request as Create.Request;\n const apiTokenService = getService('api-token-content-api');\n\n const attributes = {\n kind: 'content-api' as const,\n name: trim(body.name),\n description: trim(body.description),\n type: body.type,\n permissions: body.permissions,\n lifespan: body.lifespan,\n };\n\n await validateApiTokenCreationInput(attributes);\n\n const alreadyExists = await apiTokenService.exists({ name: attributes.name });\n if (alreadyExists) {\n throw new ApplicationError('Name already taken');\n }\n\n const apiToken = await apiTokenService.create(attributes, ctx.state.user);\n ctx.created({ data: apiToken } satisfies Create.Response);\n },\n\n // -------------------------------------------------------------------------\n // Regenerate\n // -------------------------------------------------------------------------\n async regenerate(ctx: Context) {\n const { id } = ctx.params;\n const apiTokenService = getService('api-token-content-api');\n\n const token = await apiTokenService.getById(id);\n if (!token) {\n ctx.notFound('API Token not found');\n return;\n }\n\n const accessToken = await apiTokenService.regenerate(id);\n ctx.created({ data: accessToken });\n },\n\n // -------------------------------------------------------------------------\n // List — always content-api\n // -------------------------------------------------------------------------\n async list(ctx: Context) {\n const apiTokenService = getService('api-token-content-api');\n const apiTokens = await apiTokenService.list(ctx.state.user);\n\n ctx.send({ data: apiTokens } satisfies List.Response);\n },\n\n // -------------------------------------------------------------------------\n // Revoke\n // -------------------------------------------------------------------------\n async revoke(ctx: Context) {\n const { id } = ctx.params as Revoke.Params;\n const apiTokenService = getService('api-token-content-api');\n const apiToken = await apiTokenService.revoke(id);\n\n ctx.deleted({ data: apiToken } satisfies Revoke.Response);\n },\n\n // -------------------------------------------------------------------------\n // Get — always expose the decrypted key (content-api back-compat)\n // -------------------------------------------------------------------------\n async get(ctx: Context) {\n const { id } = ctx.params;\n const apiTokenService = getService('api-token-content-api');\n\n const token = await apiTokenService.getById(id, { includeDecryptedKey: true });\n if (!token) {\n ctx.notFound('API Token not found');\n return;\n }\n\n ctx.send({ data: token } satisfies Get.Response);\n },\n\n // -------------------------------------------------------------------------\n // Update\n // -------------------------------------------------------------------------\n async update(ctx: Context) {\n const { body } = ctx.request as Update.Request;\n const { id } = ctx.params as Update.Params;\n const apiTokenService = getService('api-token-content-api');\n\n const mutableBody = body as Record<string, unknown>;\n if (has('name', mutableBody)) {\n mutableBody.name = trim(body.name ?? '');\n }\n if (has('description', mutableBody) || mutableBody.description === null) {\n mutableBody.description = trim(body.description ?? '');\n }\n\n await validateApiTokenUpdateInput(body);\n\n const existingToken = await apiTokenService.getById(id);\n if (!existingToken) {\n return ctx.notFound('API Token not found');\n }\n\n if (has('name', body)) {\n const nameAlreadyTaken = await apiTokenService.getByName(body.name!);\n if (nameAlreadyTaken !== null && !strings.isEqual(nameAlreadyTaken.id, id)) {\n throw new ApplicationError('Name already taken');\n }\n }\n\n const apiToken = await apiTokenService.update(id, body);\n ctx.send({ data: apiToken } satisfies Update.Response);\n },\n};\n"],"names":["ApplicationError","errors","create","ctx","body","request","apiTokenService","getService","attributes","kind","name","trim","description","type","permissions","lifespan","validateApiTokenCreationInput","alreadyExists","exists","apiToken","state","user","created","data","regenerate","id","params","token","getById","notFound","accessToken","list","apiTokens","send","revoke","deleted","get","includeDecryptedKey","update","mutableBody","has","validateApiTokenUpdateInput","existingToken","nameAlreadyTaken","getByName","strings","isEqual"],"mappings":"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"}
@@ -69,6 +69,11 @@ const POPULATE_FIELDS = [
69
69
  'adminPermissions',
70
70
  'adminUserOwner'
71
71
  ];
72
+ const UPDATABLE_FIELDS = [
73
+ 'name',
74
+ 'description',
75
+ 'type'
76
+ ];
72
77
  // TODO: we need to ensure the permissions are actually valid registered permissions!
73
78
  /**
74
79
  * Assert that a token's permissions attribute is valid for its type
@@ -624,7 +629,8 @@ const regenerate = async (id)=>{
624
629
  const apiToken = await strapi.db.query('admin::api-token').update({
625
630
  select: [
626
631
  'id',
627
- 'accessKey'
632
+ 'accessKey',
633
+ 'kind'
628
634
  ],
629
635
  where: {
630
636
  id
@@ -639,6 +645,7 @@ const regenerate = async (id)=>{
639
645
  }
640
646
  return {
641
647
  ...apiToken,
648
+ kind: apiToken.kind ?? 'content-api',
642
649
  accessKey
643
650
  };
644
651
  };
@@ -719,7 +726,7 @@ For security reasons, prefer storing the secret in an environment variable and r
719
726
  ...fp.omit([
720
727
  'permissions'
721
728
  ], token),
722
- adminUserOwner: toAdminTokenOwner(token.adminUserOwner)
729
+ adminUserOwner: token.adminUserOwner !== null && token.adminUserOwner !== undefined ? toAdminTokenOwner(token.adminUserOwner) : null
723
730
  });
724
731
  };
725
732
  /**
@@ -749,13 +756,24 @@ For security reasons, prefer storing the secret in an environment variable and r
749
756
  id
750
757
  }
751
758
  });
752
- if (deletedToken === null || deletedToken === undefined || deletedToken.kind !== 'admin') {
759
+ if (deletedToken === null || deletedToken === undefined) {
753
760
  return deletedToken;
754
761
  }
755
- return {
762
+ if (deletedToken.kind === 'admin') {
763
+ return {
764
+ ...deletedToken,
765
+ adminUserOwner: toAdminTokenOwner(deletedToken.adminUserOwner)
766
+ };
767
+ }
768
+ // content-api tokens (including legacy null-kind rows): normalise shape
769
+ return fp.omit([
770
+ 'adminPermissions',
771
+ 'adminUserOwner'
772
+ ], {
756
773
  ...deletedToken,
757
- adminUserOwner: toAdminTokenOwner(deletedToken.adminUserOwner)
758
- };
774
+ kind: 'content-api',
775
+ permissions: flattenTokenPermissions(deletedToken.permissions)
776
+ });
759
777
  };
760
778
  /**
761
779
  * Update a token and its permissions
@@ -773,14 +791,16 @@ For security reasons, prefer storing the secret in an environment variable and r
773
791
  throw new NotFoundError('Token not found');
774
792
  }
775
793
  const raw = attributes;
776
- // kind is immutable after creation
777
- if (raw.kind !== undefined && raw.kind !== null && raw.kind !== originalToken.kind) {
794
+ // kind is immutable after creation.
795
+ // Null-kind rows are legacy content-api tokens — treat null and 'content-api' as the same
796
+ // effective value so that clients echoing back the normalised kind from a GET don't get rejected.
797
+ const effectiveStoredKind = originalToken.kind ?? 'content-api';
798
+ if (raw.kind !== undefined && raw.kind !== null && raw.kind !== effectiveStoredKind) {
778
799
  throw new ValidationError('kind is immutable after creation');
779
800
  }
780
- assertValidLifespan(attributes.lifespan);
781
801
  let clampedAdminPermissions;
782
802
  let tokenOwnerUser;
783
- if (originalToken.kind === 'content-api') {
803
+ if (originalToken.kind === null || originalToken.kind === 'content-api') {
784
804
  assertLegacyKindFields(attributes);
785
805
  const incomingType = raw.type;
786
806
  const incomingPermissions = raw.permissions;
@@ -816,20 +836,19 @@ For security reasons, prefer storing the secret in an environment variable and r
816
836
  }
817
837
  }
818
838
  }
839
+ const baseData = fp.pick(UPDATABLE_FIELDS, attributes);
840
+ // Migrate legacy null-kind rows to the explicit value on first write
841
+ if (originalToken.kind === null) {
842
+ baseData.kind = 'content-api';
843
+ }
819
844
  const updatedToken = await strapi.db.query('admin::api-token').update({
820
845
  select: SELECT_FIELDS,
821
846
  where: {
822
847
  id
823
848
  },
824
- // kind is immutable — strip it along with relation fields so the DB write is clean
825
- data: fp.omit([
826
- 'kind',
827
- 'permissions',
828
- 'adminPermissions',
829
- 'adminUserOwner'
830
- ], attributes)
849
+ data: baseData
831
850
  });
832
- if (originalToken.kind === 'content-api') {
851
+ if (originalToken.kind === null || originalToken.kind === 'content-api') {
833
852
  const incomingPermissions = raw.permissions;
834
853
  // custom tokens need to have their permissions updated as well
835
854
  if (updatedToken.type === constants.API_TOKEN_TYPE.CUSTOM && incomingPermissions !== undefined) {