@strapi/admin 5.46.1 → 5.47.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 (114) hide show
  1. package/dist/admin/admin/src/components/Layouts/HeaderLayout.js +51 -8
  2. package/dist/admin/admin/src/components/Layouts/HeaderLayout.js.map +1 -1
  3. package/dist/admin/admin/src/components/Layouts/HeaderLayout.mjs +52 -9
  4. package/dist/admin/admin/src/components/Layouts/HeaderLayout.mjs.map +1 -1
  5. package/dist/admin/admin/src/components/Layouts/utils/getMatchingDocLink.js +167 -0
  6. package/dist/admin/admin/src/components/Layouts/utils/getMatchingDocLink.js.map +1 -0
  7. package/dist/admin/admin/src/components/Layouts/utils/getMatchingDocLink.mjs +165 -0
  8. package/dist/admin/admin/src/components/Layouts/utils/getMatchingDocLink.mjs.map +1 -0
  9. package/dist/admin/admin/src/constants.js +8 -11
  10. package/dist/admin/admin/src/constants.js.map +1 -1
  11. package/dist/admin/admin/src/constants.mjs +8 -11
  12. package/dist/admin/admin/src/constants.mjs.map +1 -1
  13. package/dist/admin/admin/src/features/Auth.js +25 -0
  14. package/dist/admin/admin/src/features/Auth.js.map +1 -1
  15. package/dist/admin/admin/src/features/Auth.mjs +26 -1
  16. package/dist/admin/admin/src/features/Auth.mjs.map +1 -1
  17. package/dist/admin/admin/src/features/Tracking.js.map +1 -1
  18. package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
  19. package/dist/admin/admin/src/hooks/useIdleSessionLogout.js +62 -0
  20. package/dist/admin/admin/src/hooks/useIdleSessionLogout.js.map +1 -0
  21. package/dist/admin/admin/src/hooks/useIdleSessionLogout.mjs +40 -0
  22. package/dist/admin/admin/src/hooks/useIdleSessionLogout.mjs.map +1 -0
  23. package/dist/admin/admin/src/pages/Settings/constants.js +1 -2
  24. package/dist/admin/admin/src/pages/Settings/constants.js.map +1 -1
  25. package/dist/admin/admin/src/pages/Settings/constants.mjs +1 -2
  26. package/dist/admin/admin/src/pages/Settings/constants.mjs.map +1 -1
  27. package/dist/admin/admin/src/render.js +2 -1
  28. package/dist/admin/admin/src/render.js.map +1 -1
  29. package/dist/admin/admin/src/render.mjs +2 -1
  30. package/dist/admin/admin/src/render.mjs.map +1 -1
  31. package/dist/admin/admin/src/translations/en.json.js +1 -0
  32. package/dist/admin/admin/src/translations/en.json.js.map +1 -1
  33. package/dist/admin/admin/src/translations/en.json.mjs +1 -0
  34. package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
  35. package/dist/admin/admin/src/translations/sk.json.js +446 -42
  36. package/dist/admin/admin/src/translations/sk.json.js.map +1 -1
  37. package/dist/admin/admin/src/translations/sk.json.mjs +445 -43
  38. package/dist/admin/admin/src/translations/sk.json.mjs.map +1 -1
  39. package/dist/admin/admin/src/utils/baseQuery.js +5 -0
  40. package/dist/admin/admin/src/utils/baseQuery.js.map +1 -1
  41. package/dist/admin/admin/src/utils/baseQuery.mjs +6 -1
  42. package/dist/admin/admin/src/utils/baseQuery.mjs.map +1 -1
  43. package/dist/admin/admin/src/utils/getFetchClient.js +24 -0
  44. package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
  45. package/dist/admin/admin/src/utils/getFetchClient.mjs +23 -1
  46. package/dist/admin/admin/src/utils/getFetchClient.mjs.map +1 -1
  47. package/dist/admin/admin/src/utils/jwt.js +37 -0
  48. package/dist/admin/admin/src/utils/jwt.js.map +1 -0
  49. package/dist/admin/admin/src/utils/jwt.mjs +35 -0
  50. package/dist/admin/admin/src/utils/jwt.mjs.map +1 -0
  51. package/dist/admin/index.js +2 -0
  52. package/dist/admin/index.js.map +1 -1
  53. package/dist/admin/index.mjs +1 -1
  54. package/dist/admin/src/components/Layouts/HeaderLayout.d.ts +2 -0
  55. package/dist/admin/src/components/Layouts/utils/getMatchingDocLink.d.ts +6 -0
  56. package/dist/admin/src/features/Tracking.d.ts +8 -1
  57. package/dist/admin/src/hooks/useAdminRoles.d.ts +1 -1
  58. package/dist/admin/src/hooks/useIdleSessionLogout.d.ts +33 -0
  59. package/dist/admin/src/services/admin.d.ts +6 -6
  60. package/dist/admin/src/services/contentApi.d.ts +1 -1
  61. package/dist/admin/src/services/users.d.ts +8 -8
  62. package/dist/admin/src/utils/getFetchClient.d.ts +15 -1
  63. package/dist/admin/src/utils/jwt.d.ts +15 -0
  64. package/dist/server/server/src/bootstrap.js +3 -2
  65. package/dist/server/server/src/bootstrap.js.map +1 -1
  66. package/dist/server/server/src/bootstrap.mjs +4 -3
  67. package/dist/server/server/src/bootstrap.mjs.map +1 -1
  68. package/dist/server/server/src/policies/index.js +0 -2
  69. package/dist/server/server/src/policies/index.js.map +1 -1
  70. package/dist/server/server/src/policies/index.mjs +0 -2
  71. package/dist/server/server/src/policies/index.mjs.map +1 -1
  72. package/dist/server/server/src/register.js +1 -1
  73. package/dist/server/server/src/register.js.map +1 -1
  74. package/dist/server/server/src/routes/admin-tokens.js +0 -7
  75. package/dist/server/server/src/routes/admin-tokens.js.map +1 -1
  76. package/dist/server/server/src/routes/admin-tokens.mjs +0 -7
  77. package/dist/server/server/src/routes/admin-tokens.mjs.map +1 -1
  78. package/dist/server/server/src/routes/serve-admin-panel.js +8 -1
  79. package/dist/server/server/src/routes/serve-admin-panel.js.map +1 -1
  80. package/dist/server/server/src/routes/serve-admin-panel.mjs +6 -2
  81. package/dist/server/server/src/routes/serve-admin-panel.mjs.map +1 -1
  82. package/dist/server/server/src/services/api-token.js +71 -1
  83. package/dist/server/server/src/services/api-token.js.map +1 -1
  84. package/dist/server/server/src/services/api-token.mjs +71 -2
  85. package/dist/server/server/src/services/api-token.mjs.map +1 -1
  86. package/dist/server/server/src/services/token.js +11 -0
  87. package/dist/server/server/src/services/token.js.map +1 -1
  88. package/dist/server/server/src/services/token.mjs +11 -1
  89. package/dist/server/server/src/services/token.mjs.map +1 -1
  90. package/dist/server/server/src/strategies/admin-token.js +5 -63
  91. package/dist/server/server/src/strategies/admin-token.js.map +1 -1
  92. package/dist/server/server/src/strategies/admin-token.mjs +6 -64
  93. package/dist/server/server/src/strategies/admin-token.mjs.map +1 -1
  94. package/dist/server/src/bootstrap.d.ts.map +1 -1
  95. package/dist/server/src/index.d.ts +0 -5
  96. package/dist/server/src/index.d.ts.map +1 -1
  97. package/dist/server/src/policies/index.d.ts +0 -5
  98. package/dist/server/src/policies/index.d.ts.map +1 -1
  99. package/dist/server/src/routes/admin-tokens.d.ts.map +1 -1
  100. package/dist/server/src/routes/serve-admin-panel.d.ts +2 -0
  101. package/dist/server/src/routes/serve-admin-panel.d.ts.map +1 -1
  102. package/dist/server/src/services/api-token.d.ts +15 -1
  103. package/dist/server/src/services/api-token.d.ts.map +1 -1
  104. package/dist/server/src/services/token.d.ts +7 -1
  105. package/dist/server/src/services/token.d.ts.map +1 -1
  106. package/dist/server/src/strategies/admin-token.d.ts +12 -22
  107. package/dist/server/src/strategies/admin-token.d.ts.map +1 -1
  108. package/package.json +8 -8
  109. package/dist/server/server/src/policies/isAdminTokensEnabled.js +0 -16
  110. package/dist/server/server/src/policies/isAdminTokensEnabled.js.map +0 -1
  111. package/dist/server/server/src/policies/isAdminTokensEnabled.mjs +0 -14
  112. package/dist/server/server/src/policies/isAdminTokensEnabled.mjs.map +0 -1
  113. package/dist/server/src/policies/isAdminTokensEnabled.d.ts +0 -7
  114. package/dist/server/src/policies/isAdminTokensEnabled.d.ts.map +0 -1
@@ -11,11 +11,6 @@ const { UnauthorizedError } = utils.errors;
11
11
  /**
12
12
  * Authenticate an admin token. Rejects tokens with kind !== 'admin'.
13
13
  */ const authenticate = async (ctx)=>{
14
- if (strapi.features.future.isEnabled('adminTokens') !== true) {
15
- return {
16
- authenticated: false
17
- };
18
- }
19
14
  const apiTokenService = index.getService('api-token-admin');
20
15
  const token = apiTokenUtils.extractToken(ctx);
21
16
  if (token === null) {
@@ -23,65 +18,12 @@ const { UnauthorizedError } = utils.errors;
23
18
  authenticated: false
24
19
  };
25
20
  }
26
- const apiToken = await apiTokenService.getByAccessKey(apiTokenService.hash(token));
27
- if (apiToken === null || apiToken === undefined) {
28
- return {
29
- authenticated: false
30
- };
31
- }
32
- // Defensive kind check — only handle admin tokens
33
- if (apiToken.kind !== 'admin') {
34
- return {
35
- authenticated: false
36
- };
37
- }
38
- const expiryError = apiTokenUtils.checkExpiry(apiToken);
39
- if (expiryError !== null) {
40
- return {
41
- authenticated: false,
42
- error: expiryError
43
- };
44
- }
45
- await apiTokenUtils.updateLastUsedAt(apiToken);
46
- const owner = apiToken.adminUserOwner;
47
- const ownerId = // eslint-disable-next-line no-nested-ternary
48
- owner === null || owner === undefined ? null : typeof owner === 'object' ? owner.id : owner;
49
- if (ownerId === null) {
50
- return {
51
- authenticated: false,
52
- error: new UnauthorizedError('Token owner not found')
53
- };
54
- }
55
- // Token populate does not load `roles`; reload the user like session auth (`admin` strategy)
56
- // so `isSuperAdmin` and permission ceiling logic see the full admin user.
57
- const user = await strapi.db.query('admin::user').findOne({
58
- where: {
59
- id: ownerId
60
- },
61
- populate: [
62
- 'roles'
63
- ]
64
- });
65
- if (user === null || user === undefined) {
66
- return {
67
- authenticated: false,
68
- error: new UnauthorizedError('Token owner not found')
69
- };
70
- }
71
- if (user.isActive !== true || user.blocked === true) {
72
- return {
73
- authenticated: false,
74
- error: new UnauthorizedError('Token owner is deactivated')
75
- };
21
+ const authResult = await apiTokenService.authenticateAdminToken(token);
22
+ if (authResult.authenticated === true) {
23
+ ctx.state.userAbility = authResult.ability;
24
+ ctx.state.user = authResult.user;
76
25
  }
77
- const ability = await index.getService('permission').engine.generateTokenAbility(apiToken.adminPermissions ?? [], user);
78
- ctx.state.userAbility = ability;
79
- ctx.state.user = user;
80
- return {
81
- authenticated: true,
82
- credentials: apiToken,
83
- ability
84
- };
26
+ return authResult;
85
27
  };
86
28
  /**
87
29
  * Re-check presence and expiry at verify time.
@@ -1 +1 @@
1
- {"version":3,"file":"admin-token.js","sources":["../../../../../server/src/strategies/admin-token.ts"],"sourcesContent":["import type { Context } from 'koa';\nimport { errors } from '@strapi/utils';\nimport { getService } from '../utils';\nimport { extractToken, checkExpiry, updateLastUsedAt } from './api-token-utils';\nimport '@strapi/types';\n\nconst { UnauthorizedError } = errors;\n\n/**\n * Authenticate an admin token. Rejects tokens with kind !== 'admin'.\n */\nexport const authenticate = async (ctx: Context) => {\n if (strapi.features.future.isEnabled('adminTokens') !== true) {\n return { authenticated: false };\n }\n\n const apiTokenService = getService('api-token-admin');\n const token = extractToken(ctx);\n\n if (token === null) {\n return { authenticated: false };\n }\n\n const apiToken = await apiTokenService.getByAccessKey(apiTokenService.hash(token));\n\n if (apiToken === null || apiToken === undefined) {\n return { authenticated: false };\n }\n\n // Defensive kind check — only handle admin tokens\n if (apiToken.kind !== 'admin') {\n return { authenticated: false };\n }\n\n const expiryError = checkExpiry(apiToken);\n if (expiryError !== null) {\n return { authenticated: false, error: expiryError };\n }\n\n await updateLastUsedAt(apiToken);\n\n const owner = apiToken.adminUserOwner;\n const ownerId =\n // eslint-disable-next-line no-nested-ternary\n owner === null || owner === undefined ? null : typeof owner === 'object' ? owner.id : owner;\n\n if (ownerId === null) {\n return { authenticated: false, error: new UnauthorizedError('Token owner not found') };\n }\n\n // Token populate does not load `roles`; reload the user like session auth (`admin` strategy)\n // so `isSuperAdmin` and permission ceiling logic see the full admin user.\n const user = await strapi.db\n .query('admin::user')\n .findOne({ where: { id: ownerId }, populate: ['roles'] });\n\n if (user === null || user === undefined) {\n return { authenticated: false, error: new UnauthorizedError('Token owner not found') };\n }\n\n if (user.isActive !== true || user.blocked === true) {\n return { authenticated: false, error: new UnauthorizedError('Token owner is deactivated') };\n }\n\n const ability = await getService('permission').engine.generateTokenAbility(\n apiToken.adminPermissions ?? [],\n user\n );\n\n ctx.state.userAbility = ability;\n ctx.state.user = user;\n\n return { authenticated: true, credentials: apiToken, ability };\n};\n\n/**\n * Re-check presence and expiry at verify time.\n * Authorization is handled by isAuthenticatedAdmin + hasPermissions policies.\n *\n * @type {import('.').VerifyFunction}\n */\nexport const verify = (auth: any): void => {\n const { credentials: apiToken } = auth;\n\n if (apiToken === null || apiToken === undefined) {\n throw new UnauthorizedError('Token not found');\n }\n\n const expiryError = checkExpiry(apiToken);\n if (expiryError !== null) {\n throw expiryError;\n }\n};\n\nexport default {\n name: 'admin-token',\n authenticate,\n verify,\n};\n"],"names":["UnauthorizedError","errors","authenticate","ctx","strapi","features","future","isEnabled","authenticated","apiTokenService","getService","token","extractToken","apiToken","getByAccessKey","hash","undefined","kind","expiryError","checkExpiry","error","updateLastUsedAt","owner","adminUserOwner","ownerId","id","user","db","query","findOne","where","populate","isActive","blocked","ability","engine","generateTokenAbility","adminPermissions","state","userAbility","credentials","verify","auth","name"],"mappings":"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"}
1
+ {"version":3,"file":"admin-token.js","sources":["../../../../../server/src/strategies/admin-token.ts"],"sourcesContent":["import type { Context } from 'koa';\nimport { errors } from '@strapi/utils';\nimport { getService } from '../utils';\nimport { extractToken, checkExpiry } from './api-token-utils';\nimport '@strapi/types';\n\nconst { UnauthorizedError } = errors;\n\n/**\n * Authenticate an admin token. Rejects tokens with kind !== 'admin'.\n */\nexport const authenticate = async (ctx: Context) => {\n const apiTokenService = getService('api-token-admin');\n const token = extractToken(ctx);\n\n if (token === null) {\n return { authenticated: false };\n }\n\n const authResult = await apiTokenService.authenticateAdminToken(token);\n\n if (authResult.authenticated === true) {\n ctx.state.userAbility = authResult.ability;\n ctx.state.user = authResult.user;\n }\n\n return authResult;\n};\n\n/**\n * Re-check presence and expiry at verify time.\n * Authorization is handled by isAuthenticatedAdmin + hasPermissions policies.\n *\n * @type {import('.').VerifyFunction}\n */\nexport const verify = (auth: any): void => {\n const { credentials: apiToken } = auth;\n\n if (apiToken === null || apiToken === undefined) {\n throw new UnauthorizedError('Token not found');\n }\n\n const expiryError = checkExpiry(apiToken);\n if (expiryError !== null) {\n throw expiryError;\n }\n};\n\nexport default {\n name: 'admin-token',\n authenticate,\n verify,\n};\n"],"names":["UnauthorizedError","errors","authenticate","ctx","apiTokenService","getService","token","extractToken","authenticated","authResult","authenticateAdminToken","state","userAbility","ability","user","verify","auth","credentials","apiToken","undefined","expiryError","checkExpiry","name"],"mappings":";;;;;;;;;AAMA,MAAM,EAAEA,iBAAiB,EAAE,GAAGC,YAAAA;AAE9B;;IAGO,MAAMC,YAAAA,GAAe,OAAOC,GAAAA,GAAAA;AACjC,IAAA,MAAMC,kBAAkBC,gBAAAA,CAAW,iBAAA,CAAA;AACnC,IAAA,MAAMC,QAAQC,0BAAAA,CAAaJ,GAAAA,CAAAA;AAE3B,IAAA,IAAIG,UAAU,IAAA,EAAM;QAClB,OAAO;YAAEE,aAAAA,EAAe;AAAM,SAAA;AAChC,IAAA;AAEA,IAAA,MAAMC,UAAAA,GAAa,MAAML,eAAAA,CAAgBM,sBAAsB,CAACJ,KAAAA,CAAAA;IAEhE,IAAIG,UAAAA,CAAWD,aAAa,KAAK,IAAA,EAAM;AACrCL,QAAAA,GAAAA,CAAIQ,KAAK,CAACC,WAAW,GAAGH,WAAWI,OAAO;AAC1CV,QAAAA,GAAAA,CAAIQ,KAAK,CAACG,IAAI,GAAGL,WAAWK,IAAI;AAClC,IAAA;IAEA,OAAOL,UAAAA;AACT;AAEA;;;;;IAMO,MAAMM,MAAAA,GAAS,CAACC,IAAAA,GAAAA;AACrB,IAAA,MAAM,EAAEC,WAAAA,EAAaC,QAAQ,EAAE,GAAGF,IAAAA;IAElC,IAAIE,QAAAA,KAAa,IAAA,IAAQA,QAAAA,KAAaC,SAAAA,EAAW;AAC/C,QAAA,MAAM,IAAInB,iBAAAA,CAAkB,iBAAA,CAAA;AAC9B,IAAA;AAEA,IAAA,MAAMoB,cAAcC,yBAAAA,CAAYH,QAAAA,CAAAA;AAChC,IAAA,IAAIE,gBAAgB,IAAA,EAAM;QACxB,MAAMA,WAAAA;AACR,IAAA;AACF;AAEA,6BAAe;IACbE,IAAAA,EAAM,aAAA;AACNpB,IAAAA,YAAAA;AACAa,IAAAA;AACF,CAAA;;;;;;"}
@@ -1,17 +1,12 @@
1
1
  import { errors } from '@strapi/utils';
2
2
  import { getService } from '../utils/index.mjs';
3
- import { checkExpiry, extractToken, updateLastUsedAt } from './api-token-utils.mjs';
3
+ import { checkExpiry, extractToken } from './api-token-utils.mjs';
4
4
  import '@strapi/types';
5
5
 
6
6
  const { UnauthorizedError } = errors;
7
7
  /**
8
8
  * Authenticate an admin token. Rejects tokens with kind !== 'admin'.
9
9
  */ const authenticate = async (ctx)=>{
10
- if (strapi.features.future.isEnabled('adminTokens') !== true) {
11
- return {
12
- authenticated: false
13
- };
14
- }
15
10
  const apiTokenService = getService('api-token-admin');
16
11
  const token = extractToken(ctx);
17
12
  if (token === null) {
@@ -19,65 +14,12 @@ const { UnauthorizedError } = errors;
19
14
  authenticated: false
20
15
  };
21
16
  }
22
- const apiToken = await apiTokenService.getByAccessKey(apiTokenService.hash(token));
23
- if (apiToken === null || apiToken === undefined) {
24
- return {
25
- authenticated: false
26
- };
27
- }
28
- // Defensive kind check — only handle admin tokens
29
- if (apiToken.kind !== 'admin') {
30
- return {
31
- authenticated: false
32
- };
33
- }
34
- const expiryError = checkExpiry(apiToken);
35
- if (expiryError !== null) {
36
- return {
37
- authenticated: false,
38
- error: expiryError
39
- };
40
- }
41
- await updateLastUsedAt(apiToken);
42
- const owner = apiToken.adminUserOwner;
43
- const ownerId = // eslint-disable-next-line no-nested-ternary
44
- owner === null || owner === undefined ? null : typeof owner === 'object' ? owner.id : owner;
45
- if (ownerId === null) {
46
- return {
47
- authenticated: false,
48
- error: new UnauthorizedError('Token owner not found')
49
- };
50
- }
51
- // Token populate does not load `roles`; reload the user like session auth (`admin` strategy)
52
- // so `isSuperAdmin` and permission ceiling logic see the full admin user.
53
- const user = await strapi.db.query('admin::user').findOne({
54
- where: {
55
- id: ownerId
56
- },
57
- populate: [
58
- 'roles'
59
- ]
60
- });
61
- if (user === null || user === undefined) {
62
- return {
63
- authenticated: false,
64
- error: new UnauthorizedError('Token owner not found')
65
- };
66
- }
67
- if (user.isActive !== true || user.blocked === true) {
68
- return {
69
- authenticated: false,
70
- error: new UnauthorizedError('Token owner is deactivated')
71
- };
17
+ const authResult = await apiTokenService.authenticateAdminToken(token);
18
+ if (authResult.authenticated === true) {
19
+ ctx.state.userAbility = authResult.ability;
20
+ ctx.state.user = authResult.user;
72
21
  }
73
- const ability = await getService('permission').engine.generateTokenAbility(apiToken.adminPermissions ?? [], user);
74
- ctx.state.userAbility = ability;
75
- ctx.state.user = user;
76
- return {
77
- authenticated: true,
78
- credentials: apiToken,
79
- ability
80
- };
22
+ return authResult;
81
23
  };
82
24
  /**
83
25
  * Re-check presence and expiry at verify time.
@@ -1 +1 @@
1
- {"version":3,"file":"admin-token.mjs","sources":["../../../../../server/src/strategies/admin-token.ts"],"sourcesContent":["import type { Context } from 'koa';\nimport { errors } from '@strapi/utils';\nimport { getService } from '../utils';\nimport { extractToken, checkExpiry, updateLastUsedAt } from './api-token-utils';\nimport '@strapi/types';\n\nconst { UnauthorizedError } = errors;\n\n/**\n * Authenticate an admin token. Rejects tokens with kind !== 'admin'.\n */\nexport const authenticate = async (ctx: Context) => {\n if (strapi.features.future.isEnabled('adminTokens') !== true) {\n return { authenticated: false };\n }\n\n const apiTokenService = getService('api-token-admin');\n const token = extractToken(ctx);\n\n if (token === null) {\n return { authenticated: false };\n }\n\n const apiToken = await apiTokenService.getByAccessKey(apiTokenService.hash(token));\n\n if (apiToken === null || apiToken === undefined) {\n return { authenticated: false };\n }\n\n // Defensive kind check — only handle admin tokens\n if (apiToken.kind !== 'admin') {\n return { authenticated: false };\n }\n\n const expiryError = checkExpiry(apiToken);\n if (expiryError !== null) {\n return { authenticated: false, error: expiryError };\n }\n\n await updateLastUsedAt(apiToken);\n\n const owner = apiToken.adminUserOwner;\n const ownerId =\n // eslint-disable-next-line no-nested-ternary\n owner === null || owner === undefined ? null : typeof owner === 'object' ? owner.id : owner;\n\n if (ownerId === null) {\n return { authenticated: false, error: new UnauthorizedError('Token owner not found') };\n }\n\n // Token populate does not load `roles`; reload the user like session auth (`admin` strategy)\n // so `isSuperAdmin` and permission ceiling logic see the full admin user.\n const user = await strapi.db\n .query('admin::user')\n .findOne({ where: { id: ownerId }, populate: ['roles'] });\n\n if (user === null || user === undefined) {\n return { authenticated: false, error: new UnauthorizedError('Token owner not found') };\n }\n\n if (user.isActive !== true || user.blocked === true) {\n return { authenticated: false, error: new UnauthorizedError('Token owner is deactivated') };\n }\n\n const ability = await getService('permission').engine.generateTokenAbility(\n apiToken.adminPermissions ?? [],\n user\n );\n\n ctx.state.userAbility = ability;\n ctx.state.user = user;\n\n return { authenticated: true, credentials: apiToken, ability };\n};\n\n/**\n * Re-check presence and expiry at verify time.\n * Authorization is handled by isAuthenticatedAdmin + hasPermissions policies.\n *\n * @type {import('.').VerifyFunction}\n */\nexport const verify = (auth: any): void => {\n const { credentials: apiToken } = auth;\n\n if (apiToken === null || apiToken === undefined) {\n throw new UnauthorizedError('Token not found');\n }\n\n const expiryError = checkExpiry(apiToken);\n if (expiryError !== null) {\n throw expiryError;\n }\n};\n\nexport default {\n name: 'admin-token',\n authenticate,\n verify,\n};\n"],"names":["UnauthorizedError","errors","authenticate","ctx","strapi","features","future","isEnabled","authenticated","apiTokenService","getService","token","extractToken","apiToken","getByAccessKey","hash","undefined","kind","expiryError","checkExpiry","error","updateLastUsedAt","owner","adminUserOwner","ownerId","id","user","db","query","findOne","where","populate","isActive","blocked","ability","engine","generateTokenAbility","adminPermissions","state","userAbility","credentials","verify","auth","name"],"mappings":";;;;;AAMA,MAAM,EAAEA,iBAAiB,EAAE,GAAGC,MAAAA;AAE9B;;IAGO,MAAMC,YAAAA,GAAe,OAAOC,GAAAA,GAAAA;IACjC,IAAIC,MAAAA,CAAOC,QAAQ,CAACC,MAAM,CAACC,SAAS,CAAC,mBAAmB,IAAA,EAAM;QAC5D,OAAO;YAAEC,aAAAA,EAAe;AAAM,SAAA;AAChC,IAAA;AAEA,IAAA,MAAMC,kBAAkBC,UAAAA,CAAW,iBAAA,CAAA;AACnC,IAAA,MAAMC,QAAQC,YAAAA,CAAaT,GAAAA,CAAAA;AAE3B,IAAA,IAAIQ,UAAU,IAAA,EAAM;QAClB,OAAO;YAAEH,aAAAA,EAAe;AAAM,SAAA;AAChC,IAAA;AAEA,IAAA,MAAMK,WAAW,MAAMJ,eAAAA,CAAgBK,cAAc,CAACL,eAAAA,CAAgBM,IAAI,CAACJ,KAAAA,CAAAA,CAAAA;IAE3E,IAAIE,QAAAA,KAAa,IAAA,IAAQA,QAAAA,KAAaG,SAAAA,EAAW;QAC/C,OAAO;YAAER,aAAAA,EAAe;AAAM,SAAA;AAChC,IAAA;;IAGA,IAAIK,QAAAA,CAASI,IAAI,KAAK,OAAA,EAAS;QAC7B,OAAO;YAAET,aAAAA,EAAe;AAAM,SAAA;AAChC,IAAA;AAEA,IAAA,MAAMU,cAAcC,WAAAA,CAAYN,QAAAA,CAAAA;AAChC,IAAA,IAAIK,gBAAgB,IAAA,EAAM;QACxB,OAAO;YAAEV,aAAAA,EAAe,KAAA;YAAOY,KAAAA,EAAOF;AAAY,SAAA;AACpD,IAAA;AAEA,IAAA,MAAMG,gBAAAA,CAAiBR,QAAAA,CAAAA;IAEvB,MAAMS,KAAAA,GAAQT,SAASU,cAAc;AACrC,IAAA,MAAMC;IAEJF,KAAAA,KAAU,IAAA,IAAQA,UAAUN,SAAAA,GAAY,IAAA,GAAO,OAAOM,KAAAA,KAAU,QAAA,GAAWA,KAAAA,CAAMG,EAAE,GAAGH,KAAAA;AAExF,IAAA,IAAIE,YAAY,IAAA,EAAM;QACpB,OAAO;YAAEhB,aAAAA,EAAe,KAAA;AAAOY,YAAAA,KAAAA,EAAO,IAAIpB,iBAAAA,CAAkB,uBAAA;AAAyB,SAAA;AACvF,IAAA;;;IAIA,MAAM0B,IAAAA,GAAO,MAAMtB,MAAAA,CAAOuB,EAAE,CACzBC,KAAK,CAAC,aAAA,CAAA,CACNC,OAAO,CAAC;QAAEC,KAAAA,EAAO;YAAEL,EAAAA,EAAID;AAAQ,SAAA;QAAGO,QAAAA,EAAU;AAAC,YAAA;AAAQ;AAAC,KAAA,CAAA;IAEzD,IAAIL,IAAAA,KAAS,IAAA,IAAQA,IAAAA,KAASV,SAAAA,EAAW;QACvC,OAAO;YAAER,aAAAA,EAAe,KAAA;AAAOY,YAAAA,KAAAA,EAAO,IAAIpB,iBAAAA,CAAkB,uBAAA;AAAyB,SAAA;AACvF,IAAA;AAEA,IAAA,IAAI0B,KAAKM,QAAQ,KAAK,QAAQN,IAAAA,CAAKO,OAAO,KAAK,IAAA,EAAM;QACnD,OAAO;YAAEzB,aAAAA,EAAe,KAAA;AAAOY,YAAAA,KAAAA,EAAO,IAAIpB,iBAAAA,CAAkB,4BAAA;AAA8B,SAAA;AAC5F,IAAA;AAEA,IAAA,MAAMkC,OAAAA,GAAU,MAAMxB,UAAAA,CAAW,YAAA,CAAA,CAAcyB,MAAM,CAACC,oBAAoB,CACxEvB,QAAAA,CAASwB,gBAAgB,IAAI,EAAE,EAC/BX,IAAAA,CAAAA;IAGFvB,GAAAA,CAAImC,KAAK,CAACC,WAAW,GAAGL,OAAAA;IACxB/B,GAAAA,CAAImC,KAAK,CAACZ,IAAI,GAAGA,IAAAA;IAEjB,OAAO;QAAElB,aAAAA,EAAe,IAAA;QAAMgC,WAAAA,EAAa3B,QAAAA;AAAUqB,QAAAA;AAAQ,KAAA;AAC/D;AAEA;;;;;IAMO,MAAMO,MAAAA,GAAS,CAACC,IAAAA,GAAAA;AACrB,IAAA,MAAM,EAAEF,WAAAA,EAAa3B,QAAQ,EAAE,GAAG6B,IAAAA;IAElC,IAAI7B,QAAAA,KAAa,IAAA,IAAQA,QAAAA,KAAaG,SAAAA,EAAW;AAC/C,QAAA,MAAM,IAAIhB,iBAAAA,CAAkB,iBAAA,CAAA;AAC9B,IAAA;AAEA,IAAA,MAAMkB,cAAcC,WAAAA,CAAYN,QAAAA,CAAAA;AAChC,IAAA,IAAIK,gBAAgB,IAAA,EAAM;QACxB,MAAMA,WAAAA;AACR,IAAA;AACF;AAEA,6BAAe;IACbyB,IAAAA,EAAM,aAAA;AACNzC,IAAAA,YAAAA;AACAuC,IAAAA;AACF,CAAA;;;;"}
1
+ {"version":3,"file":"admin-token.mjs","sources":["../../../../../server/src/strategies/admin-token.ts"],"sourcesContent":["import type { Context } from 'koa';\nimport { errors } from '@strapi/utils';\nimport { getService } from '../utils';\nimport { extractToken, checkExpiry } from './api-token-utils';\nimport '@strapi/types';\n\nconst { UnauthorizedError } = errors;\n\n/**\n * Authenticate an admin token. Rejects tokens with kind !== 'admin'.\n */\nexport const authenticate = async (ctx: Context) => {\n const apiTokenService = getService('api-token-admin');\n const token = extractToken(ctx);\n\n if (token === null) {\n return { authenticated: false };\n }\n\n const authResult = await apiTokenService.authenticateAdminToken(token);\n\n if (authResult.authenticated === true) {\n ctx.state.userAbility = authResult.ability;\n ctx.state.user = authResult.user;\n }\n\n return authResult;\n};\n\n/**\n * Re-check presence and expiry at verify time.\n * Authorization is handled by isAuthenticatedAdmin + hasPermissions policies.\n *\n * @type {import('.').VerifyFunction}\n */\nexport const verify = (auth: any): void => {\n const { credentials: apiToken } = auth;\n\n if (apiToken === null || apiToken === undefined) {\n throw new UnauthorizedError('Token not found');\n }\n\n const expiryError = checkExpiry(apiToken);\n if (expiryError !== null) {\n throw expiryError;\n }\n};\n\nexport default {\n name: 'admin-token',\n authenticate,\n verify,\n};\n"],"names":["UnauthorizedError","errors","authenticate","ctx","apiTokenService","getService","token","extractToken","authenticated","authResult","authenticateAdminToken","state","userAbility","ability","user","verify","auth","credentials","apiToken","undefined","expiryError","checkExpiry","name"],"mappings":";;;;;AAMA,MAAM,EAAEA,iBAAiB,EAAE,GAAGC,MAAAA;AAE9B;;IAGO,MAAMC,YAAAA,GAAe,OAAOC,GAAAA,GAAAA;AACjC,IAAA,MAAMC,kBAAkBC,UAAAA,CAAW,iBAAA,CAAA;AACnC,IAAA,MAAMC,QAAQC,YAAAA,CAAaJ,GAAAA,CAAAA;AAE3B,IAAA,IAAIG,UAAU,IAAA,EAAM;QAClB,OAAO;YAAEE,aAAAA,EAAe;AAAM,SAAA;AAChC,IAAA;AAEA,IAAA,MAAMC,UAAAA,GAAa,MAAML,eAAAA,CAAgBM,sBAAsB,CAACJ,KAAAA,CAAAA;IAEhE,IAAIG,UAAAA,CAAWD,aAAa,KAAK,IAAA,EAAM;AACrCL,QAAAA,GAAAA,CAAIQ,KAAK,CAACC,WAAW,GAAGH,WAAWI,OAAO;AAC1CV,QAAAA,GAAAA,CAAIQ,KAAK,CAACG,IAAI,GAAGL,WAAWK,IAAI;AAClC,IAAA;IAEA,OAAOL,UAAAA;AACT;AAEA;;;;;IAMO,MAAMM,MAAAA,GAAS,CAACC,IAAAA,GAAAA;AACrB,IAAA,MAAM,EAAEC,WAAAA,EAAaC,QAAQ,EAAE,GAAGF,IAAAA;IAElC,IAAIE,QAAAA,KAAa,IAAA,IAAQA,QAAAA,KAAaC,SAAAA,EAAW;AAC/C,QAAA,MAAM,IAAInB,iBAAAA,CAAkB,iBAAA,CAAA;AAC9B,IAAA;AAEA,IAAA,MAAMoB,cAAcC,WAAAA,CAAYH,QAAAA,CAAAA;AAChC,IAAA,IAAIE,gBAAgB,IAAA,EAAM;QACxB,MAAMA,WAAAA;AACR,IAAA;AACF;AAEA,6BAAe;IACbE,IAAAA,EAAM,aAAA;AACNpB,IAAAA,YAAAA;AACAa,IAAAA;AACF,CAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../../server/src/bootstrap.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;qCAgIR;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE;AAAzD,wBAiFE"}
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../../server/src/bootstrap.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;qCAoIR;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE;AAAzD,wBAoFE"}
@@ -23,11 +23,6 @@ declare let admin: {
23
23
  validator: (config: unknown) => void;
24
24
  handler: (...args: any[]) => any;
25
25
  };
26
- isAdminTokensEnabled: {
27
- name: string;
28
- validator: (config: unknown) => void;
29
- handler: (...args: any[]) => any;
30
- };
31
26
  isTelemetryEnabled: {
32
27
  name: string;
33
28
  validator: (config: unknown) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../server/src/index.ts"],"names":[],"mappings":";AAeA,QAAA,IAAI,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAWR,CAAC;AAUF,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../server/src/index.ts"],"names":[],"mappings":";AAeA,QAAA,IAAI,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAWR,CAAC;AAUF,eAAe,KAAK,CAAC"}
@@ -5,11 +5,6 @@ declare const _default: {
5
5
  validator: (config: unknown) => void;
6
6
  handler: (...args: any[]) => any;
7
7
  };
8
- isAdminTokensEnabled: {
9
- name: string;
10
- validator: (config: unknown) => void;
11
- handler: (...args: any[]) => any;
12
- };
13
8
  isTelemetryEnabled: {
14
9
  name: string;
15
10
  validator: (config: unknown) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/policies/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAKA,wBAAkG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/policies/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAIA,wBAA4E"}
@@ -1 +1 @@
1
- {"version":3,"file":"admin-tokens.d.ts","sourceRoot":"","sources":["../../../../server/src/routes/admin-tokens.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,wBAqFE"}
1
+ {"version":3,"file":"admin-tokens.d.ts","sourceRoot":"","sources":["../../../../server/src/routes/admin-tokens.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,wBA8EE"}
@@ -1,6 +1,8 @@
1
+ import type { Context, Next } from 'koa';
1
2
  import type { Core } from '@strapi/types';
2
3
  declare const registerAdminPanelRoute: ({ strapi }: {
3
4
  strapi: Core.Strapi;
4
5
  }) => void;
6
+ export declare const serveStatic: (filesDir: any, koaStaticOptions?: {}) => (ctx: Context, next: Next) => Promise<void>;
5
7
  export default registerAdminPanelRoute;
6
8
  //# sourceMappingURL=serve-admin-panel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"serve-admin-panel.d.ts","sourceRoot":"","sources":["../../../../server/src/routes/serve-admin-panel.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,QAAA,MAAM,uBAAuB,eAAgB;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE,SA4CnE,CAAC;AAoBF,eAAe,uBAAuB,CAAC"}
1
+ {"version":3,"file":"serve-admin-panel.d.ts","sourceRoot":"","sources":["../../../../server/src/routes/serve-admin-panel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAIzC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,QAAA,MAAM,uBAAuB,eAAgB;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE,SA4CnE,CAAC;AAGF,eAAO,MAAM,WAAW,aAAc,GAAG,kCAGpB,OAAO,QAAQ,IAAI,kBAiBvC,CAAC;AAEF,eAAe,uBAAuB,CAAC"}
@@ -1,9 +1,21 @@
1
1
  /// <reference types="node" />
2
2
  import type { Data } from '@strapi/types';
3
+ import { errors } from '@strapi/utils';
4
+ import type { Ability } from '@casl/ability';
3
5
  import type { Update, ContentApiApiToken, ContentApiApiTokenBody } from '../../../shared/contracts/api-token';
4
6
  import type { AdminApiToken, AdminTokenBody } from '../../../shared/contracts/admin-token';
5
7
  import type { AdminUser, Permission } from '../../../shared/contracts/shared';
6
8
  type AnyApiToken = ContentApiApiToken | AdminApiToken;
9
+ declare const UnauthorizedError: typeof errors.UnauthorizedError;
10
+ export type AdminTokenAuthenticationResult = {
11
+ authenticated: false;
12
+ error?: InstanceType<typeof UnauthorizedError>;
13
+ } | {
14
+ authenticated: true;
15
+ credentials: AdminApiToken;
16
+ user: AdminUser;
17
+ ability: Ability;
18
+ };
7
19
  /** API/body shape: permission without ids/timestamps and without actionParameters (defaulted by domain when creating). */
8
20
  type PermissionInput = Omit<Permission, 'id' | 'createdAt' | 'updatedAt' | 'actionParameters'>;
9
21
  /**
@@ -87,6 +99,7 @@ declare const exists: (whereParams?: WhereParams) => Promise<boolean>;
87
99
  * Return a secure sha512 hash of an accessKey
88
100
  */
89
101
  declare const hash: (accessKey: string) => string;
102
+ declare const authenticateAdminToken: (accessToken: string) => Promise<AdminTokenAuthenticationResult>;
90
103
  /**
91
104
  * Create a token and its permissions
92
105
  */
@@ -153,6 +166,7 @@ export interface ContentApiTokenService extends SharedTokenMethods {
153
166
  count(where?: object): Promise<number>;
154
167
  }
155
168
  export interface AdminTokenService extends SharedTokenMethods {
169
+ authenticateAdminToken(accessToken: string): Promise<AdminTokenAuthenticationResult>;
156
170
  create(attributes: AdminTokenBody, callingUser: AdminUser): Promise<AdminApiToken>;
157
171
  list(callingUser: AdminUser): Promise<AdminApiToken[]>;
158
172
  getById(id: string | number, options?: GetByOptions): Promise<AdminApiToken | null>;
@@ -170,5 +184,5 @@ export interface AdminTokenService extends SharedTokenMethods {
170
184
  declare function createTokenService(kind: 'content-api'): ContentApiTokenService;
171
185
  declare function createTokenService(kind: 'admin'): AdminTokenService;
172
186
  export type { GetByOptions };
173
- export { createTokenService, create, count, regenerate, exists, checkSaltIsDefined, hash, list, revoke, getById, update, getByName, getBy, assignAdminPermissionsToToken, enforceAdminPermissionsCeiling, reconcileTokenPermissionsToUserCeiling, syncApiTokenPermissionsForUser, syncApiTokenPermissionsForRole, deleteAdminTokensForUser, };
187
+ export { createTokenService, create, count, regenerate, exists, checkSaltIsDefined, hash, list, revoke, getById, update, getByName, getBy, authenticateAdminToken, assignAdminPermissionsToToken, enforceAdminPermissionsCeiling, reconcileTokenPermissionsToUserCeiling, syncApiTokenPermissionsForUser, syncApiTokenPermissionsForRole, deleteAdminTokensForUser, };
174
188
  //# sourceMappingURL=api-token.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api-token.d.ts","sourceRoot":"","sources":["../../../../server/src/services/api-token.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-token.d.ts","sourceRoot":"","sources":["../../../../server/src/services/api-token.ts"],"names":[],"mappings":"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"}
@@ -7,12 +7,18 @@ declare const getTokenOptions: () => {
7
7
  expiresIn?: string | number | undefined;
8
8
  };
9
9
  };
10
+ /**
11
+ * True when the project set `admin.auth.options.expiresIn`.
12
+ * Do not use merged options from {@link getTokenOptions}: defaults always inject `expiresIn: '30d'`,
13
+ * which would make every install look like a legacy config (see GitHub #25989).
14
+ */
15
+ declare const hasUserConfiguredAuthOptionsExpiresIn: (adminAuthOptions: unknown) => boolean;
10
16
  /**
11
17
  * Create a random token
12
18
  */
13
19
  declare const createToken: () => string;
14
20
  declare const checkSecretIsDefined: () => void;
15
- export { createToken, getTokenOptions, checkSecretIsDefined };
21
+ export { createToken, getTokenOptions, checkSecretIsDefined, hasUserConfiguredAuthOptionsExpiresIn, };
16
22
  /**
17
23
  * Convert an expiresIn value (string or number) into seconds.
18
24
  * Supported formats:
@@ -1 +1 @@
1
- {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../../../server/src/services/token.ts"],"names":[],"mappings":"AAMA,QAAA,MAAM,eAAe;;;;;;;;CAgBpB,CAAC;AAEF;;GAEG;AACH,QAAA,MAAM,WAAW,QAAO,MAEvB,CAAC;AAEF,QAAA,MAAM,oBAAoB,YAOzB,CAAC;AAEF,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,oBAAoB,EAAE,CAAC;AAE9D;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,cAAe,OAAO,KAAG,MAAM,GAAG,SA0ChE,CAAC"}
1
+ {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../../../server/src/services/token.ts"],"names":[],"mappings":"AAMA,QAAA,MAAM,eAAe;;;;;;;;CAgBpB,CAAC;AAEF;;;;GAIG;AACH,QAAA,MAAM,qCAAqC,qBAAsB,OAAO,KAAG,OAK1E,CAAC;AAEF;;GAEG;AACH,QAAA,MAAM,WAAW,QAAO,MAEvB,CAAC;AAEF,QAAA,MAAM,oBAAoB,YAOzB,CAAC;AAEF,OAAO,EACL,WAAW,EACX,eAAe,EACf,oBAAoB,EACpB,qCAAqC,GACtC,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,cAAe,OAAO,KAAG,MAAM,GAAG,SA0ChE,CAAC"}
@@ -5,20 +5,15 @@ import '@strapi/types';
5
5
  * Authenticate an admin token. Rejects tokens with kind !== 'admin'.
6
6
  */
7
7
  export declare const authenticate: (ctx: Context) => Promise<{
8
- authenticated: boolean;
9
- error?: undefined;
10
- credentials?: undefined;
11
- ability?: undefined;
12
- } | {
13
- authenticated: boolean;
14
- error: errors.UnauthorizedError<string, unknown>;
15
- credentials?: undefined;
16
- ability?: undefined;
8
+ authenticated: false;
9
+ error?: errors.UnauthorizedError<string, unknown> | undefined;
17
10
  } | {
18
- authenticated: boolean;
11
+ authenticated: true;
19
12
  credentials: import("../../../shared/contracts/admin-token").AdminApiToken;
13
+ user: import("../../../shared/contracts/shared").AdminUser;
20
14
  ability: import("@casl/ability").Ability<import("@casl/ability").AbilityTuple, any>;
21
- error?: undefined;
15
+ } | {
16
+ authenticated: boolean;
22
17
  }>;
23
18
  /**
24
19
  * Re-check presence and expiry at verify time.
@@ -30,20 +25,15 @@ export declare const verify: (auth: any) => void;
30
25
  declare const _default: {
31
26
  name: string;
32
27
  authenticate: (ctx: Context) => Promise<{
33
- authenticated: boolean;
34
- error?: undefined;
35
- credentials?: undefined;
36
- ability?: undefined;
37
- } | {
38
- authenticated: boolean;
39
- error: errors.UnauthorizedError<string, unknown>;
40
- credentials?: undefined;
41
- ability?: undefined;
28
+ authenticated: false;
29
+ error?: errors.UnauthorizedError<string, unknown> | undefined;
42
30
  } | {
43
- authenticated: boolean;
31
+ authenticated: true;
44
32
  credentials: import("../../../shared/contracts/admin-token").AdminApiToken;
33
+ user: import("../../../shared/contracts/shared").AdminUser;
45
34
  ability: import("@casl/ability").Ability<import("@casl/ability").AbilityTuple, any>;
46
- error?: undefined;
35
+ } | {
36
+ authenticated: boolean;
47
37
  }>;
48
38
  verify: (auth: any) => void;
49
39
  };
@@ -1 +1 @@
1
- {"version":3,"file":"admin-token.d.ts","sourceRoot":"","sources":["../../../../server/src/strategies/admin-token.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAGvC,OAAO,eAAe,CAAC;AAIvB;;GAEG;AACH,eAAO,MAAM,YAAY,QAAe,OAAO;;;;;;;;;;;;;;;EA8D9C,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,MAAM,SAAU,GAAG,KAAG,IAWlC,CAAC;;;;;;;;;;;;;;;;;;;;;AAEF,wBAIE"}
1
+ {"version":3,"file":"admin-token.d.ts","sourceRoot":"","sources":["../../../../server/src/strategies/admin-token.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAGvC,OAAO,eAAe,CAAC;AAIvB;;GAEG;AACH,eAAO,MAAM,YAAY,QAAe,OAAO;;;;;;;;;;EAgB9C,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,MAAM,SAAU,GAAG,KAAG,IAWlC,CAAC;;;;;;;;;;;;;;;;AAEF,wBAIE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strapi/admin",
3
- "version": "5.46.1",
3
+ "version": "5.47.0",
4
4
  "description": "Strapi Admin",
5
5
  "homepage": "https://strapi.io",
6
6
  "bugs": {
@@ -91,10 +91,10 @@
91
91
  "@reduxjs/toolkit": "1.9.7",
92
92
  "@strapi/design-system": "2.2.0",
93
93
  "@strapi/icons": "2.2.0",
94
- "@strapi/permissions": "5.46.1",
95
- "@strapi/types": "5.46.1",
96
- "@strapi/typescript-utils": "5.46.1",
97
- "@strapi/utils": "5.46.1",
94
+ "@strapi/permissions": "5.47.0",
95
+ "@strapi/types": "5.47.0",
96
+ "@strapi/typescript-utils": "5.47.0",
97
+ "@strapi/utils": "5.47.0",
98
98
  "@testing-library/dom": "10.4.1",
99
99
  "@testing-library/react": "16.3.0",
100
100
  "@testing-library/user-event": "14.6.1",
@@ -139,7 +139,7 @@
139
139
  "react-select": "5.8.0",
140
140
  "react-window": "1.8.10",
141
141
  "rimraf": "6.1.3",
142
- "sanitize-html": "2.13.0",
142
+ "sanitize-html": "2.17.4",
143
143
  "scheduler": "0.23.0",
144
144
  "semver": "7.7.4",
145
145
  "sift": "16.0.1",
@@ -150,8 +150,8 @@
150
150
  "zod": "3.25.67"
151
151
  },
152
152
  "devDependencies": {
153
- "@strapi/admin-test-utils": "5.46.1",
154
- "@strapi/data-transfer": "5.46.1",
153
+ "@strapi/admin-test-utils": "5.47.0",
154
+ "@strapi/data-transfer": "5.47.0",
155
155
  "@types/codemirror5": "npm:@types/codemirror@^5.60.15",
156
156
  "@types/fs-extra": "11.0.4",
157
157
  "@types/invariant": "2.2.36",
@@ -1,16 +0,0 @@
1
- 'use strict';
2
-
3
- var utils = require('@strapi/utils');
4
-
5
- const { createPolicy } = utils.policy;
6
- var isAdminTokensEnabled = createPolicy({
7
- name: 'admin::isAdminTokensEnabled',
8
- handler (ctx, _config, { strapi }) {
9
- if (strapi.features.future.isEnabled('adminTokens') !== true) {
10
- throw new utils.errors.NotFoundError();
11
- }
12
- }
13
- });
14
-
15
- module.exports = isAdminTokensEnabled;
16
- //# sourceMappingURL=isAdminTokensEnabled.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"isAdminTokensEnabled.js","sources":["../../../../../server/src/policies/isAdminTokensEnabled.ts"],"sourcesContent":["import { policy, errors } from '@strapi/utils';\n\nconst { createPolicy } = policy;\n\nexport default createPolicy({\n name: 'admin::isAdminTokensEnabled',\n handler(ctx, _config, { strapi }) {\n if (strapi.features.future.isEnabled('adminTokens') !== true) {\n throw new errors.NotFoundError();\n }\n },\n});\n"],"names":["createPolicy","policy","name","handler","ctx","_config","strapi","features","future","isEnabled","errors","NotFoundError"],"mappings":";;;;AAEA,MAAM,EAAEA,YAAY,EAAE,GAAGC,YAAAA;AAEzB,2BAAeD,YAAAA,CAAa;IAC1BE,IAAAA,EAAM,6BAAA;AACNC,IAAAA,OAAAA,CAAAA,CAAQC,GAAG,EAAEC,OAAO,EAAE,EAAEC,MAAM,EAAE,EAAA;QAC9B,IAAIA,MAAAA,CAAOC,QAAQ,CAACC,MAAM,CAACC,SAAS,CAAC,mBAAmB,IAAA,EAAM;YAC5D,MAAM,IAAIC,aAAOC,aAAa,EAAA;AAChC,QAAA;AACF,IAAA;AACF,CAAA,CAAA;;;;"}
@@ -1,14 +0,0 @@
1
- import { policy, errors } from '@strapi/utils';
2
-
3
- const { createPolicy } = policy;
4
- var isAdminTokensEnabled = createPolicy({
5
- name: 'admin::isAdminTokensEnabled',
6
- handler (ctx, _config, { strapi }) {
7
- if (strapi.features.future.isEnabled('adminTokens') !== true) {
8
- throw new errors.NotFoundError();
9
- }
10
- }
11
- });
12
-
13
- export { isAdminTokensEnabled as default };
14
- //# sourceMappingURL=isAdminTokensEnabled.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"isAdminTokensEnabled.mjs","sources":["../../../../../server/src/policies/isAdminTokensEnabled.ts"],"sourcesContent":["import { policy, errors } from '@strapi/utils';\n\nconst { createPolicy } = policy;\n\nexport default createPolicy({\n name: 'admin::isAdminTokensEnabled',\n handler(ctx, _config, { strapi }) {\n if (strapi.features.future.isEnabled('adminTokens') !== true) {\n throw new errors.NotFoundError();\n }\n },\n});\n"],"names":["createPolicy","policy","name","handler","ctx","_config","strapi","features","future","isEnabled","errors","NotFoundError"],"mappings":";;AAEA,MAAM,EAAEA,YAAY,EAAE,GAAGC,MAAAA;AAEzB,2BAAeD,YAAAA,CAAa;IAC1BE,IAAAA,EAAM,6BAAA;AACNC,IAAAA,OAAAA,CAAAA,CAAQC,GAAG,EAAEC,OAAO,EAAE,EAAEC,MAAM,EAAE,EAAA;QAC9B,IAAIA,MAAAA,CAAOC,QAAQ,CAACC,MAAM,CAACC,SAAS,CAAC,mBAAmB,IAAA,EAAM;YAC5D,MAAM,IAAIC,OAAOC,aAAa,EAAA;AAChC,QAAA;AACF,IAAA;AACF,CAAA,CAAA;;;;"}
@@ -1,7 +0,0 @@
1
- declare const _default: {
2
- name: string;
3
- validator: (config: unknown) => void;
4
- handler: (...args: any[]) => any;
5
- };
6
- export default _default;
7
- //# sourceMappingURL=isAdminTokensEnabled.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"isAdminTokensEnabled.d.ts","sourceRoot":"","sources":["../../../../server/src/policies/isAdminTokensEnabled.ts"],"names":[],"mappings":";;;;;AAIA,wBAOG"}