@strapi/admin 5.23.6 → 5.24.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 (108) hide show
  1. package/dist/admin/admin/src/features/Auth.js +9 -28
  2. package/dist/admin/admin/src/features/Auth.js.map +1 -1
  3. package/dist/admin/admin/src/features/Auth.mjs +11 -30
  4. package/dist/admin/admin/src/features/Auth.mjs.map +1 -1
  5. package/dist/admin/admin/src/pages/Auth/components/Register.js +9 -2
  6. package/dist/admin/admin/src/pages/Auth/components/Register.js.map +1 -1
  7. package/dist/admin/admin/src/pages/Auth/components/Register.mjs +9 -2
  8. package/dist/admin/admin/src/pages/Auth/components/Register.mjs.map +1 -1
  9. package/dist/admin/admin/src/services/auth.js +7 -6
  10. package/dist/admin/admin/src/services/auth.js.map +1 -1
  11. package/dist/admin/admin/src/services/auth.mjs +7 -6
  12. package/dist/admin/admin/src/services/auth.mjs.map +1 -1
  13. package/dist/admin/admin/src/utils/baseQuery.js +78 -42
  14. package/dist/admin/admin/src/utils/baseQuery.js.map +1 -1
  15. package/dist/admin/admin/src/utils/baseQuery.mjs +79 -43
  16. package/dist/admin/admin/src/utils/baseQuery.mjs.map +1 -1
  17. package/dist/admin/admin/src/utils/deviceId.js +38 -0
  18. package/dist/admin/admin/src/utils/deviceId.js.map +1 -0
  19. package/dist/admin/admin/src/utils/deviceId.mjs +36 -0
  20. package/dist/admin/admin/src/utils/deviceId.mjs.map +1 -0
  21. package/dist/admin/src/services/auth.d.ts +19 -10
  22. package/dist/admin/src/utils/deviceId.d.ts +5 -0
  23. package/dist/ee/server/src/controllers/authentication-utils/middlewares.d.ts.map +1 -1
  24. package/dist/ee/server/src/services/user.d.ts.map +1 -1
  25. package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.js +43 -17
  26. package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.js.map +1 -1
  27. package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.mjs +43 -17
  28. package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.mjs.map +1 -1
  29. package/dist/server/ee/server/src/services/user.js +14 -0
  30. package/dist/server/ee/server/src/services/user.js.map +1 -1
  31. package/dist/server/ee/server/src/services/user.mjs +14 -0
  32. package/dist/server/ee/server/src/services/user.mjs.map +1 -1
  33. package/dist/server/server/src/bootstrap.js +22 -0
  34. package/dist/server/server/src/bootstrap.js.map +1 -1
  35. package/dist/server/server/src/bootstrap.mjs +22 -0
  36. package/dist/server/server/src/bootstrap.mjs.map +1 -1
  37. package/dist/server/server/src/content-types/index.js +4 -0
  38. package/dist/server/server/src/content-types/index.js.map +1 -1
  39. package/dist/server/server/src/content-types/index.mjs +4 -0
  40. package/dist/server/server/src/content-types/index.mjs.map +1 -1
  41. package/dist/server/server/src/content-types/session.js +91 -0
  42. package/dist/server/server/src/content-types/session.js.map +1 -0
  43. package/dist/server/server/src/content-types/session.mjs +89 -0
  44. package/dist/server/server/src/content-types/session.mjs.map +1 -0
  45. package/dist/server/server/src/controllers/authentication.js +169 -38
  46. package/dist/server/server/src/controllers/authentication.js.map +1 -1
  47. package/dist/server/server/src/controllers/authentication.mjs +169 -38
  48. package/dist/server/server/src/controllers/authentication.mjs.map +1 -1
  49. package/dist/server/server/src/routes/authentication.js +2 -2
  50. package/dist/server/server/src/routes/authentication.js.map +1 -1
  51. package/dist/server/server/src/routes/authentication.mjs +2 -2
  52. package/dist/server/server/src/routes/authentication.mjs.map +1 -1
  53. package/dist/server/server/src/services/token.js +44 -31
  54. package/dist/server/server/src/services/token.js.map +1 -1
  55. package/dist/server/server/src/services/token.mjs +44 -30
  56. package/dist/server/server/src/services/token.mjs.map +1 -1
  57. package/dist/server/server/src/services/user.js +14 -0
  58. package/dist/server/server/src/services/user.js.map +1 -1
  59. package/dist/server/server/src/services/user.mjs +14 -0
  60. package/dist/server/server/src/services/user.mjs.map +1 -1
  61. package/dist/server/server/src/strategies/admin.js +23 -3
  62. package/dist/server/server/src/strategies/admin.js.map +1 -1
  63. package/dist/server/server/src/strategies/admin.mjs +23 -3
  64. package/dist/server/server/src/strategies/admin.mjs.map +1 -1
  65. package/dist/server/server/src/validation/authentication/login.js +16 -0
  66. package/dist/server/server/src/validation/authentication/login.js.map +1 -0
  67. package/dist/server/server/src/validation/authentication/login.mjs +14 -0
  68. package/dist/server/server/src/validation/authentication/login.mjs.map +1 -0
  69. package/dist/server/server/src/validation/authentication/register.js +6 -2
  70. package/dist/server/server/src/validation/authentication/register.js.map +1 -1
  71. package/dist/server/server/src/validation/authentication/register.mjs +6 -2
  72. package/dist/server/server/src/validation/authentication/register.mjs.map +1 -1
  73. package/dist/server/shared/utils/session-auth.js +76 -0
  74. package/dist/server/shared/utils/session-auth.js.map +1 -0
  75. package/dist/server/shared/utils/session-auth.mjs +65 -0
  76. package/dist/server/shared/utils/session-auth.mjs.map +1 -0
  77. package/dist/server/src/bootstrap.d.ts.map +1 -1
  78. package/dist/server/src/content-types/index.d.ts +88 -0
  79. package/dist/server/src/content-types/index.d.ts.map +1 -1
  80. package/dist/server/src/content-types/session.d.ts +88 -0
  81. package/dist/server/src/content-types/session.d.ts.map +1 -0
  82. package/dist/server/src/controllers/authentication.d.ts +5 -5
  83. package/dist/server/src/controllers/authentication.d.ts.map +1 -1
  84. package/dist/server/src/controllers/index.d.ts +5 -5
  85. package/dist/server/src/index.d.ts +93 -5
  86. package/dist/server/src/index.d.ts.map +1 -1
  87. package/dist/server/src/routes/authentication.d.ts.map +1 -1
  88. package/dist/server/src/services/token.d.ts +11 -19
  89. package/dist/server/src/services/token.d.ts.map +1 -1
  90. package/dist/server/src/services/user.d.ts.map +1 -1
  91. package/dist/server/src/strategies/admin.d.ts.map +1 -1
  92. package/dist/server/src/validation/authentication/index.d.ts +1 -1
  93. package/dist/server/src/validation/authentication/index.d.ts.map +1 -1
  94. package/dist/server/src/validation/authentication/login.d.ts +7 -0
  95. package/dist/server/src/validation/authentication/login.d.ts.map +1 -0
  96. package/dist/server/src/validation/authentication/register.d.ts +5 -0
  97. package/dist/server/src/validation/authentication/register.d.ts.map +1 -1
  98. package/dist/shared/contracts/authentication.d.ts +20 -10
  99. package/dist/shared/contracts/authentication.d.ts.map +1 -1
  100. package/dist/shared/utils/session-auth.d.ts +39 -0
  101. package/dist/shared/utils/session-auth.d.ts.map +1 -0
  102. package/package.json +7 -7
  103. package/dist/server/server/src/validation/authentication/renew-token.js +0 -11
  104. package/dist/server/server/src/validation/authentication/renew-token.js.map +0 -1
  105. package/dist/server/server/src/validation/authentication/renew-token.mjs +0 -9
  106. package/dist/server/server/src/validation/authentication/renew-token.mjs.map +0 -1
  107. package/dist/server/src/validation/authentication/renew-token.d.ts +0 -3
  108. package/dist/server/src/validation/authentication/renew-token.d.ts.map +0 -1
@@ -7,7 +7,9 @@ const registrationSchema = yup.object().shape({
7
7
  firstname: validators.firstname.required(),
8
8
  lastname: validators.lastname.nullable(),
9
9
  password: validators.password.required()
10
- }).required().noUnknown()
10
+ }).required().noUnknown(),
11
+ deviceId: yup.string().uuid().optional(),
12
+ rememberMe: yup.boolean().optional()
11
13
  }).noUnknown();
12
14
  const registrationInfoQuerySchema = yup.object().shape({
13
15
  registrationToken: yup.string().required()
@@ -16,7 +18,9 @@ const adminRegistrationSchema = yup.object().shape({
16
18
  email: validators.email.required(),
17
19
  firstname: validators.firstname.required(),
18
20
  lastname: validators.lastname.nullable(),
19
- password: validators.password.required()
21
+ password: validators.password.required(),
22
+ deviceId: yup.string().uuid().optional(),
23
+ rememberMe: yup.boolean().optional()
20
24
  }).required().noUnknown();
21
25
  const validateRegistrationInput = validateYupSchema(registrationSchema);
22
26
  const validateRegistrationInfoQuery = validateYupSchema(registrationInfoQuerySchema);
@@ -1 +1 @@
1
- {"version":3,"file":"register.mjs","sources":["../../../../../../server/src/validation/authentication/register.ts"],"sourcesContent":["import { yup, validateYupSchema } from '@strapi/utils';\nimport validators from '../common-validators';\n\nconst registrationSchema = yup\n .object()\n .shape({\n registrationToken: yup.string().required(),\n userInfo: yup\n .object()\n .shape({\n firstname: validators.firstname.required(),\n lastname: validators.lastname.nullable(),\n password: validators.password.required(),\n })\n .required()\n .noUnknown(),\n })\n .noUnknown();\n\nconst registrationInfoQuerySchema = yup\n .object()\n .shape({\n registrationToken: yup.string().required(),\n })\n .required()\n .noUnknown();\n\nconst adminRegistrationSchema = yup\n .object()\n .shape({\n email: validators.email.required(),\n firstname: validators.firstname.required(),\n lastname: validators.lastname.nullable(),\n password: validators.password.required(),\n })\n .required()\n .noUnknown();\n\nexport const validateRegistrationInput = validateYupSchema(registrationSchema);\nexport const validateRegistrationInfoQuery = validateYupSchema(registrationInfoQuerySchema);\nexport const validateAdminRegistrationInput = validateYupSchema(adminRegistrationSchema);\n\nexport default {\n validateRegistrationInput,\n validateRegistrationInfoQuery,\n validateAdminRegistrationInput,\n};\n"],"names":["registrationSchema","yup","object","shape","registrationToken","string","required","userInfo","firstname","validators","lastname","nullable","password","noUnknown","registrationInfoQuerySchema","adminRegistrationSchema","email","validateRegistrationInput","validateYupSchema","validateRegistrationInfoQuery","validateAdminRegistrationInput"],"mappings":";;;AAGA,MAAMA,kBAAqBC,GAAAA,GAAAA,CACxBC,MAAM,EAAA,CACNC,KAAK,CAAC;IACLC,iBAAmBH,EAAAA,GAAAA,CAAII,MAAM,EAAA,CAAGC,QAAQ,EAAA;AACxCC,IAAAA,QAAAA,EAAUN,GACPC,CAAAA,MAAM,EACNC,CAAAA,KAAK,CAAC;QACLK,SAAWC,EAAAA,UAAAA,CAAWD,SAAS,CAACF,QAAQ,EAAA;QACxCI,QAAUD,EAAAA,UAAAA,CAAWC,QAAQ,CAACC,QAAQ,EAAA;QACtCC,QAAUH,EAAAA,UAAAA,CAAWG,QAAQ,CAACN,QAAQ;KAEvCA,CAAAA,CAAAA,QAAQ,GACRO,SAAS;AACd,CAAA,CAAA,CACCA,SAAS,EAAA;AAEZ,MAAMC,2BAA8Bb,GAAAA,GAAAA,CACjCC,MAAM,EAAA,CACNC,KAAK,CAAC;IACLC,iBAAmBH,EAAAA,GAAAA,CAAII,MAAM,EAAA,CAAGC,QAAQ;AAC1C,CACCA,CAAAA,CAAAA,QAAQ,GACRO,SAAS,EAAA;AAEZ,MAAME,uBAA0Bd,GAAAA,GAAAA,CAC7BC,MAAM,EAAA,CACNC,KAAK,CAAC;IACLa,KAAOP,EAAAA,UAAAA,CAAWO,KAAK,CAACV,QAAQ,EAAA;IAChCE,SAAWC,EAAAA,UAAAA,CAAWD,SAAS,CAACF,QAAQ,EAAA;IACxCI,QAAUD,EAAAA,UAAAA,CAAWC,QAAQ,CAACC,QAAQ,EAAA;IACtCC,QAAUH,EAAAA,UAAAA,CAAWG,QAAQ,CAACN,QAAQ;AACxC,CACCA,CAAAA,CAAAA,QAAQ,GACRO,SAAS,EAAA;AAEL,MAAMI,yBAA4BC,GAAAA,iBAAAA,CAAkBlB,kBAAoB;AACxE,MAAMmB,6BAAgCD,GAAAA,iBAAAA,CAAkBJ,2BAA6B;AACrF,MAAMM,8BAAiCF,GAAAA,iBAAAA,CAAkBH,uBAAyB;;;;"}
1
+ {"version":3,"file":"register.mjs","sources":["../../../../../../server/src/validation/authentication/register.ts"],"sourcesContent":["import { yup, validateYupSchema } from '@strapi/utils';\nimport validators from '../common-validators';\n\nconst registrationSchema = yup\n .object()\n .shape({\n registrationToken: yup.string().required(),\n userInfo: yup\n .object()\n .shape({\n firstname: validators.firstname.required(),\n lastname: validators.lastname.nullable(),\n password: validators.password.required(),\n })\n .required()\n .noUnknown(),\n deviceId: yup.string().uuid().optional(),\n rememberMe: yup.boolean().optional(),\n })\n .noUnknown();\n\nconst registrationInfoQuerySchema = yup\n .object()\n .shape({\n registrationToken: yup.string().required(),\n })\n .required()\n .noUnknown();\n\nconst adminRegistrationSchema = yup\n .object()\n .shape({\n email: validators.email.required(),\n firstname: validators.firstname.required(),\n lastname: validators.lastname.nullable(),\n password: validators.password.required(),\n deviceId: yup.string().uuid().optional(),\n rememberMe: yup.boolean().optional(),\n })\n .required()\n .noUnknown();\n\nexport const validateRegistrationInput = validateYupSchema(registrationSchema);\nexport const validateRegistrationInfoQuery = validateYupSchema(registrationInfoQuerySchema);\nexport const validateAdminRegistrationInput = validateYupSchema(adminRegistrationSchema);\n\nexport default {\n validateRegistrationInput,\n validateRegistrationInfoQuery,\n validateAdminRegistrationInput,\n};\n"],"names":["registrationSchema","yup","object","shape","registrationToken","string","required","userInfo","firstname","validators","lastname","nullable","password","noUnknown","deviceId","uuid","optional","rememberMe","boolean","registrationInfoQuerySchema","adminRegistrationSchema","email","validateRegistrationInput","validateYupSchema","validateRegistrationInfoQuery","validateAdminRegistrationInput"],"mappings":";;;AAGA,MAAMA,kBAAqBC,GAAAA,GAAAA,CACxBC,MAAM,EAAA,CACNC,KAAK,CAAC;IACLC,iBAAmBH,EAAAA,GAAAA,CAAII,MAAM,EAAA,CAAGC,QAAQ,EAAA;AACxCC,IAAAA,QAAAA,EAAUN,GACPC,CAAAA,MAAM,EACNC,CAAAA,KAAK,CAAC;QACLK,SAAWC,EAAAA,UAAAA,CAAWD,SAAS,CAACF,QAAQ,EAAA;QACxCI,QAAUD,EAAAA,UAAAA,CAAWC,QAAQ,CAACC,QAAQ,EAAA;QACtCC,QAAUH,EAAAA,UAAAA,CAAWG,QAAQ,CAACN,QAAQ;KAEvCA,CAAAA,CAAAA,QAAQ,GACRO,SAAS,EAAA;AACZC,IAAAA,QAAAA,EAAUb,GAAII,CAAAA,MAAM,EAAGU,CAAAA,IAAI,GAAGC,QAAQ,EAAA;IACtCC,UAAYhB,EAAAA,GAAAA,CAAIiB,OAAO,EAAA,CAAGF,QAAQ;AACpC,CAAA,CAAA,CACCH,SAAS,EAAA;AAEZ,MAAMM,2BAA8BlB,GAAAA,GAAAA,CACjCC,MAAM,EAAA,CACNC,KAAK,CAAC;IACLC,iBAAmBH,EAAAA,GAAAA,CAAII,MAAM,EAAA,CAAGC,QAAQ;AAC1C,CACCA,CAAAA,CAAAA,QAAQ,GACRO,SAAS,EAAA;AAEZ,MAAMO,uBAA0BnB,GAAAA,GAAAA,CAC7BC,MAAM,EAAA,CACNC,KAAK,CAAC;IACLkB,KAAOZ,EAAAA,UAAAA,CAAWY,KAAK,CAACf,QAAQ,EAAA;IAChCE,SAAWC,EAAAA,UAAAA,CAAWD,SAAS,CAACF,QAAQ,EAAA;IACxCI,QAAUD,EAAAA,UAAAA,CAAWC,QAAQ,CAACC,QAAQ,EAAA;IACtCC,QAAUH,EAAAA,UAAAA,CAAWG,QAAQ,CAACN,QAAQ,EAAA;AACtCQ,IAAAA,QAAAA,EAAUb,GAAII,CAAAA,MAAM,EAAGU,CAAAA,IAAI,GAAGC,QAAQ,EAAA;IACtCC,UAAYhB,EAAAA,GAAAA,CAAIiB,OAAO,EAAA,CAAGF,QAAQ;AACpC,CACCV,CAAAA,CAAAA,QAAQ,GACRO,SAAS,EAAA;AAEL,MAAMS,yBAA4BC,GAAAA,iBAAAA,CAAkBvB,kBAAoB;AACxE,MAAMwB,6BAAgCD,GAAAA,iBAAAA,CAAkBJ,2BAA6B;AACrF,MAAMM,8BAAiCF,GAAAA,iBAAAA,CAAkBH,uBAAyB;;;;"}
@@ -0,0 +1,76 @@
1
+ 'use strict';
2
+
3
+ var crypto = require('crypto');
4
+
5
+ const REFRESH_COOKIE_NAME = 'strapi_admin_refresh';
6
+ const DEFAULT_MAX_REFRESH_TOKEN_LIFESPAN = 30 * 24 * 60 * 60;
7
+ const DEFAULT_IDLE_REFRESH_TOKEN_LIFESPAN = 14 * 24 * 60 * 60;
8
+ const DEFAULT_MAX_SESSION_LIFESPAN = 1 * 24 * 60 * 60;
9
+ const DEFAULT_IDLE_SESSION_LIFESPAN = 2 * 60 * 60;
10
+ const getRefreshCookieOptions = ()=>{
11
+ const isProduction = strapi.config.get('environment') === 'production';
12
+ const domain = strapi.config.get('admin.auth.cookie.domain') || strapi.config.get('admin.auth.domain');
13
+ const path = strapi.config.get('admin.auth.cookie.path', '/admin');
14
+ const sameSite = strapi.config.get('admin.auth.cookie.sameSite') ?? 'lax';
15
+ return {
16
+ httpOnly: true,
17
+ secure: isProduction,
18
+ overwrite: true,
19
+ domain,
20
+ path,
21
+ sameSite,
22
+ maxAge: undefined
23
+ };
24
+ };
25
+ const getLifespansForType = (type)=>{
26
+ {
27
+ const idleSeconds = Number(strapi.config.get('admin.auth.sessions.idleRefreshTokenLifespan', DEFAULT_IDLE_REFRESH_TOKEN_LIFESPAN));
28
+ const maxSeconds = Number(strapi.config.get('admin.auth.sessions.maxRefreshTokenLifespan', DEFAULT_MAX_REFRESH_TOKEN_LIFESPAN));
29
+ return {
30
+ idleSeconds,
31
+ maxSeconds
32
+ };
33
+ }
34
+ };
35
+ const buildCookieOptionsWithExpiry = (type, absoluteExpiresAtISO)=>{
36
+ const base = getRefreshCookieOptions();
37
+ if (type === 'session') {
38
+ return base;
39
+ }
40
+ const { idleSeconds } = getLifespansForType();
41
+ const now = Date.now();
42
+ const idleExpiry = now + idleSeconds * 1000;
43
+ const absoluteExpiry = absoluteExpiresAtISO ? new Date(absoluteExpiresAtISO).getTime() : idleExpiry;
44
+ const chosen = new Date(Math.min(idleExpiry, absoluteExpiry));
45
+ return {
46
+ ...base,
47
+ expires: chosen,
48
+ maxAge: Math.max(0, chosen.getTime() - now)
49
+ };
50
+ };
51
+ const getSessionManager = ()=>{
52
+ const manager = strapi.sessionManager;
53
+ return manager ?? null;
54
+ };
55
+ const generateDeviceId = ()=>crypto.randomUUID();
56
+ const extractDeviceParams = (requestBody)=>{
57
+ const body = requestBody ?? {};
58
+ const deviceId = body.deviceId || generateDeviceId();
59
+ const rememberMe = Boolean(body.rememberMe);
60
+ return {
61
+ deviceId,
62
+ rememberMe
63
+ };
64
+ };
65
+
66
+ exports.DEFAULT_IDLE_REFRESH_TOKEN_LIFESPAN = DEFAULT_IDLE_REFRESH_TOKEN_LIFESPAN;
67
+ exports.DEFAULT_IDLE_SESSION_LIFESPAN = DEFAULT_IDLE_SESSION_LIFESPAN;
68
+ exports.DEFAULT_MAX_REFRESH_TOKEN_LIFESPAN = DEFAULT_MAX_REFRESH_TOKEN_LIFESPAN;
69
+ exports.DEFAULT_MAX_SESSION_LIFESPAN = DEFAULT_MAX_SESSION_LIFESPAN;
70
+ exports.REFRESH_COOKIE_NAME = REFRESH_COOKIE_NAME;
71
+ exports.buildCookieOptionsWithExpiry = buildCookieOptionsWithExpiry;
72
+ exports.extractDeviceParams = extractDeviceParams;
73
+ exports.generateDeviceId = generateDeviceId;
74
+ exports.getRefreshCookieOptions = getRefreshCookieOptions;
75
+ exports.getSessionManager = getSessionManager;
76
+ //# sourceMappingURL=session-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-auth.js","sources":["../../../../shared/utils/session-auth.ts"],"sourcesContent":["import crypto from 'crypto';\nimport type { Modules } from '@strapi/types';\n\nexport const REFRESH_COOKIE_NAME = 'strapi_admin_refresh';\n\nexport const DEFAULT_MAX_REFRESH_TOKEN_LIFESPAN = 30 * 24 * 60 * 60;\nexport const DEFAULT_IDLE_REFRESH_TOKEN_LIFESPAN = 14 * 24 * 60 * 60;\nexport const DEFAULT_MAX_SESSION_LIFESPAN = 1 * 24 * 60 * 60;\nexport const DEFAULT_IDLE_SESSION_LIFESPAN = 2 * 60 * 60;\n\nexport const getRefreshCookieOptions = () => {\n const isProduction = strapi.config.get('environment') === 'production';\n const domain: string | undefined =\n strapi.config.get('admin.auth.cookie.domain') || strapi.config.get('admin.auth.domain');\n const path: string = strapi.config.get('admin.auth.cookie.path', '/admin');\n\n const sameSite: boolean | 'lax' | 'strict' | 'none' =\n strapi.config.get('admin.auth.cookie.sameSite') ?? 'lax';\n\n return {\n httpOnly: true,\n secure: isProduction,\n overwrite: true,\n domain,\n path,\n sameSite,\n maxAge: undefined,\n };\n};\n\nconst getLifespansForType = (\n type: 'refresh' | 'session'\n): { idleSeconds: number; maxSeconds: number } => {\n if (type === 'refresh') {\n const idleSeconds = Number(\n strapi.config.get(\n 'admin.auth.sessions.idleRefreshTokenLifespan',\n DEFAULT_IDLE_REFRESH_TOKEN_LIFESPAN\n )\n );\n const maxSeconds = Number(\n strapi.config.get(\n 'admin.auth.sessions.maxRefreshTokenLifespan',\n DEFAULT_MAX_REFRESH_TOKEN_LIFESPAN\n )\n );\n\n return { idleSeconds, maxSeconds };\n }\n\n const idleSeconds = Number(\n strapi.config.get('admin.auth.sessions.idleSessionLifespan', DEFAULT_IDLE_SESSION_LIFESPAN)\n );\n const maxSeconds = Number(\n strapi.config.get('admin.auth.sessions.maxSessionLifespan', DEFAULT_MAX_SESSION_LIFESPAN)\n );\n\n return { idleSeconds, maxSeconds };\n};\n\nexport const buildCookieOptionsWithExpiry = (\n type: 'refresh' | 'session',\n absoluteExpiresAtISO?: string\n) => {\n const base = getRefreshCookieOptions();\n if (type === 'session') {\n return base;\n }\n\n const { idleSeconds } = getLifespansForType('refresh');\n const now = Date.now();\n const idleExpiry = now + idleSeconds * 1000;\n const absoluteExpiry = absoluteExpiresAtISO\n ? new Date(absoluteExpiresAtISO).getTime()\n : idleExpiry;\n const chosen = new Date(Math.min(idleExpiry, absoluteExpiry));\n\n return { ...base, expires: chosen, maxAge: Math.max(0, chosen.getTime() - now) };\n};\n\nexport const getSessionManager = (): Modules.SessionManager.SessionManagerService | null => {\n const manager = strapi.sessionManager as Modules.SessionManager.SessionManagerService | undefined;\n return manager ?? null;\n};\n\nexport const generateDeviceId = (): string => crypto.randomUUID();\n\nexport const extractDeviceParams = (\n requestBody: unknown\n): { deviceId: string; rememberMe: boolean } => {\n const body = (requestBody ?? {}) as { deviceId?: string; rememberMe?: boolean };\n const deviceId = body.deviceId || generateDeviceId();\n const rememberMe = Boolean(body.rememberMe);\n\n return { deviceId, rememberMe };\n};\n"],"names":["REFRESH_COOKIE_NAME","DEFAULT_MAX_REFRESH_TOKEN_LIFESPAN","DEFAULT_IDLE_REFRESH_TOKEN_LIFESPAN","DEFAULT_MAX_SESSION_LIFESPAN","DEFAULT_IDLE_SESSION_LIFESPAN","getRefreshCookieOptions","isProduction","strapi","config","get","domain","path","sameSite","httpOnly","secure","overwrite","maxAge","undefined","getLifespansForType","type","idleSeconds","Number","maxSeconds","buildCookieOptionsWithExpiry","absoluteExpiresAtISO","base","now","Date","idleExpiry","absoluteExpiry","getTime","chosen","Math","min","expires","max","getSessionManager","manager","sessionManager","generateDeviceId","crypto","randomUUID","extractDeviceParams","requestBody","body","deviceId","rememberMe","Boolean"],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import crypto from 'crypto';
2
+
3
+ const REFRESH_COOKIE_NAME = 'strapi_admin_refresh';
4
+ const DEFAULT_MAX_REFRESH_TOKEN_LIFESPAN = 30 * 24 * 60 * 60;
5
+ const DEFAULT_IDLE_REFRESH_TOKEN_LIFESPAN = 14 * 24 * 60 * 60;
6
+ const DEFAULT_MAX_SESSION_LIFESPAN = 1 * 24 * 60 * 60;
7
+ const DEFAULT_IDLE_SESSION_LIFESPAN = 2 * 60 * 60;
8
+ const getRefreshCookieOptions = ()=>{
9
+ const isProduction = strapi.config.get('environment') === 'production';
10
+ const domain = strapi.config.get('admin.auth.cookie.domain') || strapi.config.get('admin.auth.domain');
11
+ const path = strapi.config.get('admin.auth.cookie.path', '/admin');
12
+ const sameSite = strapi.config.get('admin.auth.cookie.sameSite') ?? 'lax';
13
+ return {
14
+ httpOnly: true,
15
+ secure: isProduction,
16
+ overwrite: true,
17
+ domain,
18
+ path,
19
+ sameSite,
20
+ maxAge: undefined
21
+ };
22
+ };
23
+ const getLifespansForType = (type)=>{
24
+ {
25
+ const idleSeconds = Number(strapi.config.get('admin.auth.sessions.idleRefreshTokenLifespan', DEFAULT_IDLE_REFRESH_TOKEN_LIFESPAN));
26
+ const maxSeconds = Number(strapi.config.get('admin.auth.sessions.maxRefreshTokenLifespan', DEFAULT_MAX_REFRESH_TOKEN_LIFESPAN));
27
+ return {
28
+ idleSeconds,
29
+ maxSeconds
30
+ };
31
+ }
32
+ };
33
+ const buildCookieOptionsWithExpiry = (type, absoluteExpiresAtISO)=>{
34
+ const base = getRefreshCookieOptions();
35
+ if (type === 'session') {
36
+ return base;
37
+ }
38
+ const { idleSeconds } = getLifespansForType();
39
+ const now = Date.now();
40
+ const idleExpiry = now + idleSeconds * 1000;
41
+ const absoluteExpiry = absoluteExpiresAtISO ? new Date(absoluteExpiresAtISO).getTime() : idleExpiry;
42
+ const chosen = new Date(Math.min(idleExpiry, absoluteExpiry));
43
+ return {
44
+ ...base,
45
+ expires: chosen,
46
+ maxAge: Math.max(0, chosen.getTime() - now)
47
+ };
48
+ };
49
+ const getSessionManager = ()=>{
50
+ const manager = strapi.sessionManager;
51
+ return manager ?? null;
52
+ };
53
+ const generateDeviceId = ()=>crypto.randomUUID();
54
+ const extractDeviceParams = (requestBody)=>{
55
+ const body = requestBody ?? {};
56
+ const deviceId = body.deviceId || generateDeviceId();
57
+ const rememberMe = Boolean(body.rememberMe);
58
+ return {
59
+ deviceId,
60
+ rememberMe
61
+ };
62
+ };
63
+
64
+ export { DEFAULT_IDLE_REFRESH_TOKEN_LIFESPAN, DEFAULT_IDLE_SESSION_LIFESPAN, DEFAULT_MAX_REFRESH_TOKEN_LIFESPAN, DEFAULT_MAX_SESSION_LIFESPAN, REFRESH_COOKIE_NAME, buildCookieOptionsWithExpiry, extractDeviceParams, generateDeviceId, getRefreshCookieOptions, getSessionManager };
65
+ //# sourceMappingURL=session-auth.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-auth.mjs","sources":["../../../../shared/utils/session-auth.ts"],"sourcesContent":["import crypto from 'crypto';\nimport type { Modules } from '@strapi/types';\n\nexport const REFRESH_COOKIE_NAME = 'strapi_admin_refresh';\n\nexport const DEFAULT_MAX_REFRESH_TOKEN_LIFESPAN = 30 * 24 * 60 * 60;\nexport const DEFAULT_IDLE_REFRESH_TOKEN_LIFESPAN = 14 * 24 * 60 * 60;\nexport const DEFAULT_MAX_SESSION_LIFESPAN = 1 * 24 * 60 * 60;\nexport const DEFAULT_IDLE_SESSION_LIFESPAN = 2 * 60 * 60;\n\nexport const getRefreshCookieOptions = () => {\n const isProduction = strapi.config.get('environment') === 'production';\n const domain: string | undefined =\n strapi.config.get('admin.auth.cookie.domain') || strapi.config.get('admin.auth.domain');\n const path: string = strapi.config.get('admin.auth.cookie.path', '/admin');\n\n const sameSite: boolean | 'lax' | 'strict' | 'none' =\n strapi.config.get('admin.auth.cookie.sameSite') ?? 'lax';\n\n return {\n httpOnly: true,\n secure: isProduction,\n overwrite: true,\n domain,\n path,\n sameSite,\n maxAge: undefined,\n };\n};\n\nconst getLifespansForType = (\n type: 'refresh' | 'session'\n): { idleSeconds: number; maxSeconds: number } => {\n if (type === 'refresh') {\n const idleSeconds = Number(\n strapi.config.get(\n 'admin.auth.sessions.idleRefreshTokenLifespan',\n DEFAULT_IDLE_REFRESH_TOKEN_LIFESPAN\n )\n );\n const maxSeconds = Number(\n strapi.config.get(\n 'admin.auth.sessions.maxRefreshTokenLifespan',\n DEFAULT_MAX_REFRESH_TOKEN_LIFESPAN\n )\n );\n\n return { idleSeconds, maxSeconds };\n }\n\n const idleSeconds = Number(\n strapi.config.get('admin.auth.sessions.idleSessionLifespan', DEFAULT_IDLE_SESSION_LIFESPAN)\n );\n const maxSeconds = Number(\n strapi.config.get('admin.auth.sessions.maxSessionLifespan', DEFAULT_MAX_SESSION_LIFESPAN)\n );\n\n return { idleSeconds, maxSeconds };\n};\n\nexport const buildCookieOptionsWithExpiry = (\n type: 'refresh' | 'session',\n absoluteExpiresAtISO?: string\n) => {\n const base = getRefreshCookieOptions();\n if (type === 'session') {\n return base;\n }\n\n const { idleSeconds } = getLifespansForType('refresh');\n const now = Date.now();\n const idleExpiry = now + idleSeconds * 1000;\n const absoluteExpiry = absoluteExpiresAtISO\n ? new Date(absoluteExpiresAtISO).getTime()\n : idleExpiry;\n const chosen = new Date(Math.min(idleExpiry, absoluteExpiry));\n\n return { ...base, expires: chosen, maxAge: Math.max(0, chosen.getTime() - now) };\n};\n\nexport const getSessionManager = (): Modules.SessionManager.SessionManagerService | null => {\n const manager = strapi.sessionManager as Modules.SessionManager.SessionManagerService | undefined;\n return manager ?? null;\n};\n\nexport const generateDeviceId = (): string => crypto.randomUUID();\n\nexport const extractDeviceParams = (\n requestBody: unknown\n): { deviceId: string; rememberMe: boolean } => {\n const body = (requestBody ?? {}) as { deviceId?: string; rememberMe?: boolean };\n const deviceId = body.deviceId || generateDeviceId();\n const rememberMe = Boolean(body.rememberMe);\n\n return { deviceId, rememberMe };\n};\n"],"names":["REFRESH_COOKIE_NAME","DEFAULT_MAX_REFRESH_TOKEN_LIFESPAN","DEFAULT_IDLE_REFRESH_TOKEN_LIFESPAN","DEFAULT_MAX_SESSION_LIFESPAN","DEFAULT_IDLE_SESSION_LIFESPAN","getRefreshCookieOptions","isProduction","strapi","config","get","domain","path","sameSite","httpOnly","secure","overwrite","maxAge","undefined","getLifespansForType","type","idleSeconds","Number","maxSeconds","buildCookieOptionsWithExpiry","absoluteExpiresAtISO","base","now","Date","idleExpiry","absoluteExpiry","getTime","chosen","Math","min","expires","max","getSessionManager","manager","sessionManager","generateDeviceId","crypto","randomUUID","extractDeviceParams","requestBody","body","deviceId","rememberMe","Boolean"],"mappings":"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"}
@@ -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;qCAgGR;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE;AAAzD,wBA+BE"}
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../../server/src/bootstrap.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;qCAuGR;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE;AAAzD,wBAuEE"}
@@ -440,6 +440,94 @@ declare const _default: {
440
440
  };
441
441
  };
442
442
  };
443
+ session: {
444
+ schema: {
445
+ collectionName: string;
446
+ info: {
447
+ name: string;
448
+ description: string;
449
+ singularName: string;
450
+ pluralName: string;
451
+ displayName: string;
452
+ };
453
+ options: {
454
+ draftAndPublish: boolean;
455
+ };
456
+ pluginOptions: {
457
+ 'content-manager': {
458
+ visible: boolean;
459
+ };
460
+ 'content-type-builder': {
461
+ visible: boolean;
462
+ };
463
+ i18n: {
464
+ localized: boolean;
465
+ };
466
+ };
467
+ attributes: {
468
+ userId: {
469
+ type: string;
470
+ required: boolean;
471
+ configurable: boolean;
472
+ private: boolean;
473
+ searchable: boolean;
474
+ };
475
+ sessionId: {
476
+ type: string;
477
+ unique: boolean;
478
+ required: boolean;
479
+ configurable: boolean;
480
+ private: boolean;
481
+ searchable: boolean;
482
+ };
483
+ childId: {
484
+ type: string;
485
+ configurable: boolean;
486
+ private: boolean;
487
+ searchable: boolean;
488
+ };
489
+ deviceId: {
490
+ type: string;
491
+ required: boolean;
492
+ configurable: boolean;
493
+ private: boolean;
494
+ searchable: boolean;
495
+ };
496
+ origin: {
497
+ type: string;
498
+ required: boolean;
499
+ configurable: boolean;
500
+ private: boolean;
501
+ searchable: boolean;
502
+ };
503
+ expiresAt: {
504
+ type: string;
505
+ required: boolean;
506
+ configurable: boolean;
507
+ private: boolean;
508
+ searchable: boolean;
509
+ };
510
+ absoluteExpiresAt: {
511
+ type: string;
512
+ configurable: boolean;
513
+ private: boolean;
514
+ searchable: boolean;
515
+ };
516
+ status: {
517
+ type: string;
518
+ configurable: boolean;
519
+ private: boolean;
520
+ searchable: boolean;
521
+ };
522
+ type: {
523
+ type: string;
524
+ configurable: boolean;
525
+ private: boolean;
526
+ searchable: boolean;
527
+ };
528
+ };
529
+ };
530
+ };
443
531
  };
444
532
  export default _default;
445
533
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/content-types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,wBAQE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/content-types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,wBASE"}
@@ -0,0 +1,88 @@
1
+ declare const _default: {
2
+ collectionName: string;
3
+ info: {
4
+ name: string;
5
+ description: string;
6
+ singularName: string;
7
+ pluralName: string;
8
+ displayName: string;
9
+ };
10
+ options: {
11
+ draftAndPublish: boolean;
12
+ };
13
+ pluginOptions: {
14
+ 'content-manager': {
15
+ visible: boolean;
16
+ };
17
+ 'content-type-builder': {
18
+ visible: boolean;
19
+ };
20
+ i18n: {
21
+ localized: boolean;
22
+ };
23
+ };
24
+ attributes: {
25
+ userId: {
26
+ type: string;
27
+ required: boolean;
28
+ configurable: boolean;
29
+ private: boolean;
30
+ searchable: boolean;
31
+ };
32
+ sessionId: {
33
+ type: string;
34
+ unique: boolean;
35
+ required: boolean;
36
+ configurable: boolean;
37
+ private: boolean;
38
+ searchable: boolean;
39
+ };
40
+ childId: {
41
+ type: string;
42
+ configurable: boolean;
43
+ private: boolean;
44
+ searchable: boolean;
45
+ };
46
+ deviceId: {
47
+ type: string;
48
+ required: boolean;
49
+ configurable: boolean;
50
+ private: boolean;
51
+ searchable: boolean;
52
+ };
53
+ origin: {
54
+ type: string;
55
+ required: boolean;
56
+ configurable: boolean;
57
+ private: boolean;
58
+ searchable: boolean;
59
+ };
60
+ expiresAt: {
61
+ type: string;
62
+ required: boolean;
63
+ configurable: boolean;
64
+ private: boolean;
65
+ searchable: boolean;
66
+ };
67
+ absoluteExpiresAt: {
68
+ type: string;
69
+ configurable: boolean;
70
+ private: boolean;
71
+ searchable: boolean;
72
+ };
73
+ status: {
74
+ type: string;
75
+ configurable: boolean;
76
+ private: boolean;
77
+ searchable: boolean;
78
+ };
79
+ type: {
80
+ type: string;
81
+ configurable: boolean;
82
+ private: boolean;
83
+ searchable: boolean;
84
+ };
85
+ };
86
+ };
87
+ export default _default;
88
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../../server/src/content-types/session.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBAqFE"}
@@ -2,13 +2,13 @@ import type { Context } from 'koa';
2
2
  import '@strapi/types';
3
3
  declare const _default: {
4
4
  login: import("koa").Middleware<import("koa").DefaultState, Context, any>;
5
- renewToken(ctx: Context): Promise<void>;
6
5
  registrationInfo(ctx: Context): Promise<void>;
7
- register(ctx: Context): Promise<void>;
8
- registerAdmin(ctx: Context): Promise<void>;
6
+ register(ctx: Context): Promise<Context | undefined>;
7
+ registerAdmin(ctx: Context): Promise<Context | undefined>;
9
8
  forgotPassword(ctx: Context): Promise<void>;
10
- resetPassword(ctx: Context): Promise<void>;
11
- logout(ctx: Context): void;
9
+ resetPassword(ctx: Context): Promise<Context | undefined>;
10
+ accessToken(ctx: Context): Promise<Context | undefined>;
11
+ logout(ctx: Context): Promise<void>;
12
12
  };
13
13
  export default _default;
14
14
  //# sourceMappingURL=authentication.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"authentication.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/authentication.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAQ,MAAM,KAAK,CAAC;AAGzC,OAAO,eAAe,CAAC;;;oBAoEC,OAAO;0BAkBD,OAAO;kBAcf,OAAO;uBAeF,OAAO;wBAoCN,OAAO;uBAUR,OAAO;gBAepB,OAAO;;AAxJrB,wBA6JE"}
1
+ {"version":3,"file":"authentication.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/authentication.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAQ,MAAM,KAAK,CAAC;AAGzC,OAAO,eAAe,CAAC;;;0BAgHO,OAAO;kBAcf,OAAO;uBA6CF,OAAO;wBAkEN,OAAO;uBAUR,OAAO;qBA+CT,OAAO;gBAqCZ,OAAO;;AA3S3B,wBAoUE"}
@@ -67,13 +67,13 @@ declare const _default: {
67
67
  };
68
68
  authentication: {
69
69
  login: import("koa").Middleware<import("koa").DefaultState, import("koa").Context, any>;
70
- renewToken(ctx: import("koa").Context): Promise<void>;
71
70
  registrationInfo(ctx: import("koa").Context): Promise<void>;
72
- register(ctx: import("koa").Context): Promise<void>;
73
- registerAdmin(ctx: import("koa").Context): Promise<void>;
71
+ register(ctx: import("koa").Context): Promise<import("koa").Context | undefined>;
72
+ registerAdmin(ctx: import("koa").Context): Promise<import("koa").Context | undefined>;
74
73
  forgotPassword(ctx: import("koa").Context): Promise<void>;
75
- resetPassword(ctx: import("koa").Context): Promise<void>;
76
- logout(ctx: import("koa").Context): void;
74
+ resetPassword(ctx: import("koa").Context): Promise<import("koa").Context | undefined>;
75
+ accessToken(ctx: import("koa").Context): Promise<import("koa").Context | undefined>;
76
+ logout(ctx: import("koa").Context): Promise<void>;
77
77
  };
78
78
  permission: {
79
79
  check(ctx: import("koa").Context): Promise<void>;
@@ -272,13 +272,13 @@ declare let admin: {
272
272
  };
273
273
  authentication: {
274
274
  login: import("koa").Middleware<import("koa").DefaultState, import("koa").Context, any>;
275
- renewToken(ctx: import("koa").Context): Promise<void>;
276
275
  registrationInfo(ctx: import("koa").Context): Promise<void>;
277
- register(ctx: import("koa").Context): Promise<void>;
278
- registerAdmin(ctx: import("koa").Context): Promise<void>;
276
+ register(ctx: import("koa").Context): Promise<import("koa").Context | undefined>;
277
+ registerAdmin(ctx: import("koa").Context): Promise<import("koa").Context | undefined>;
279
278
  forgotPassword(ctx: import("koa").Context): Promise<void>;
280
- resetPassword(ctx: import("koa").Context): Promise<void>;
281
- logout(ctx: import("koa").Context): void;
279
+ resetPassword(ctx: import("koa").Context): Promise<import("koa").Context | undefined>;
280
+ accessToken(ctx: import("koa").Context): Promise<import("koa").Context | undefined>;
281
+ logout(ctx: import("koa").Context): Promise<void>;
282
282
  };
283
283
  permission: {
284
284
  check(ctx: import("koa").Context): Promise<void>;
@@ -774,6 +774,94 @@ declare let admin: {
774
774
  };
775
775
  };
776
776
  };
777
+ session: {
778
+ schema: {
779
+ collectionName: string;
780
+ info: {
781
+ name: string;
782
+ description: string;
783
+ singularName: string;
784
+ pluralName: string;
785
+ displayName: string;
786
+ };
787
+ options: {
788
+ draftAndPublish: boolean;
789
+ };
790
+ pluginOptions: {
791
+ 'content-manager': {
792
+ visible: boolean;
793
+ };
794
+ 'content-type-builder': {
795
+ visible: boolean;
796
+ };
797
+ i18n: {
798
+ localized: boolean;
799
+ };
800
+ };
801
+ attributes: {
802
+ userId: {
803
+ type: string;
804
+ required: boolean;
805
+ configurable: boolean;
806
+ private: boolean;
807
+ searchable: boolean;
808
+ };
809
+ sessionId: {
810
+ type: string;
811
+ unique: boolean;
812
+ required: boolean;
813
+ configurable: boolean;
814
+ private: boolean;
815
+ searchable: boolean;
816
+ };
817
+ childId: {
818
+ type: string;
819
+ configurable: boolean;
820
+ private: boolean;
821
+ searchable: boolean;
822
+ };
823
+ deviceId: {
824
+ type: string;
825
+ required: boolean;
826
+ configurable: boolean;
827
+ private: boolean;
828
+ searchable: boolean;
829
+ };
830
+ origin: {
831
+ type: string;
832
+ required: boolean;
833
+ configurable: boolean;
834
+ private: boolean;
835
+ searchable: boolean;
836
+ };
837
+ expiresAt: {
838
+ type: string;
839
+ required: boolean;
840
+ configurable: boolean;
841
+ private: boolean;
842
+ searchable: boolean;
843
+ };
844
+ absoluteExpiresAt: {
845
+ type: string;
846
+ configurable: boolean;
847
+ private: boolean;
848
+ searchable: boolean;
849
+ };
850
+ status: {
851
+ type: string;
852
+ configurable: boolean;
853
+ private: boolean;
854
+ searchable: boolean;
855
+ };
856
+ type: {
857
+ type: string;
858
+ configurable: boolean;
859
+ private: boolean;
860
+ searchable: boolean;
861
+ };
862
+ };
863
+ };
864
+ };
777
865
  };
778
866
  middlewares: {
779
867
  rateLimit: (config: any, { strapi }: {
@@ -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"}
@@ -1 +1 @@
1
- {"version":3,"file":"authentication.d.ts","sourceRoot":"","sources":["../../../../server/src/routes/authentication.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBAyDE"}
1
+ {"version":3,"file":"authentication.d.ts","sourceRoot":"","sources":["../../../../server/src/routes/authentication.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBA2DE"}
@@ -1,6 +1,8 @@
1
+ import type { Algorithm } from 'jsonwebtoken';
1
2
  import type { AdminUser } from '../../../shared/contracts/shared';
2
3
  export type TokenOptions = {
3
4
  expiresIn?: string;
5
+ algorithm?: Algorithm;
4
6
  [key: string]: unknown;
5
7
  };
6
8
  export type TokenPayload = {
@@ -20,25 +22,15 @@ declare const getTokenOptions: () => {
20
22
  * Create a random token
21
23
  */
22
24
  declare const createToken: () => string;
25
+ declare const checkSecretIsDefined: () => void;
26
+ export { createToken, getTokenOptions, checkSecretIsDefined };
23
27
  /**
24
- * Creates a JWT token for an administration user
25
- * @param user - admin user
26
- */
27
- declare const createJwtToken: (user: {
28
- id: AdminUser['id'];
29
- }) => string;
30
- /**
31
- * Tries to decode a token an return its payload and if it is valid
32
- * @param token - a token to decode
33
- * @return decodeInfo - the decoded info
28
+ * Convert an expiresIn value (string or number) into seconds.
29
+ * Supported formats:
30
+ * - number: treated as seconds
31
+ * - numeric string (e.g. "180"): treated as seconds
32
+ * - shorthand string: "Xs", "Xm", "Xh", "Xd", "Xw" (case-insensitive)
33
+ * Returns undefined when value is not set or invalid.
34
34
  */
35
- declare const decodeJwtToken: (token: string) => {
36
- payload: TokenPayload;
37
- isValid: true;
38
- } | {
39
- payload: null;
40
- isValid: false;
41
- };
42
- declare const checkSecretIsDefined: () => void;
43
- export { createToken, createJwtToken, getTokenOptions, decodeJwtToken, checkSecretIsDefined };
35
+ export declare const expiresInToSeconds: (expiresIn: unknown) => number | undefined;
44
36
  //# sourceMappingURL=token.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../../../server/src/services/token.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAIlE,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,YAAY,CAAC;CACvB,CAAC;AAEF,QAAA,MAAM,eAAe;;;;;CAUpB,CAAC;AAEF;;GAEG;AACH,QAAA,MAAM,WAAW,QAAO,MAEvB,CAAC;AAEF;;;GAGG;AACH,QAAA,MAAM,cAAc,SAAU;IAAE,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC,CAAA;CAAE,WAIpD,CAAC;AAEF;;;;GAIG;AACH,QAAA,MAAM,cAAc,UACX,MAAM,KACZ;IAAE,OAAO,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,KAAK,CAAA;CAS5E,CAAC;AAEF,QAAA,MAAM,oBAAoB,YAOzB,CAAC;AAEF,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,oBAAoB,EAAE,CAAC"}
1
+ {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../../../server/src/services/token.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAIlE,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,YAAY,CAAC;CACvB,CAAC;AAEF,QAAA,MAAM,eAAe;;;;;CAUpB,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 +1 @@
1
- {"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../../../server/src/services/user.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,KAAK,EACV,SAAS,EAET,wBAAwB,EACxB,kBAAkB,EAElB,sBAAsB,EAEvB,MAAM,kCAAkC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;AAiY1C,wBAmBE"}
1
+ {"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../../../server/src/services/user.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,KAAK,EACV,SAAS,EAET,wBAAwB,EACxB,kBAAkB,EAElB,sBAAsB,EAEvB,MAAM,kCAAkC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;AAkZ1C,wBAmBE"}
@@ -1 +1 @@
1
- {"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../../../server/src/strategies/admin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAGnC,+CAA+C;AAC/C,eAAO,MAAM,YAAY,QAAe,OAAO;;;;;;;;EAwC9C,CAAC;AAEF,eAAO,MAAM,IAAI,UAAU,CAAC;AAE5B,uCAAuC;;;;;;;;;;;;;AACvC,wBAGE"}
1
+ {"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../../../server/src/strategies/admin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAUnC,+CAA+C;AAC/C,eAAO,MAAM,YAAY,QAAe,OAAO;;;;;;;;EA0D9C,CAAC;AAEF,eAAO,MAAM,IAAI,UAAU,CAAC;AAE5B,uCAAuC;;;;;;;;;;;;;AACvC,wBAGE"}