@strapi/core 0.0.0-experimental.1e4c115f717b021ca11c139584d4519db28ba786 → 0.0.0-experimental.1f56e9319665c8cc385eb5e4178ceb6741c6d490

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.

Potentially problematic release.


This version of @strapi/core might be problematic. Click here for more details.

Files changed (230) hide show
  1. package/dist/Strapi.d.ts +1 -0
  2. package/dist/Strapi.d.ts.map +1 -1
  3. package/dist/Strapi.js +23 -2
  4. package/dist/Strapi.js.map +1 -1
  5. package/dist/Strapi.mjs +23 -2
  6. package/dist/Strapi.mjs.map +1 -1
  7. package/dist/constants.d.ts +3 -0
  8. package/dist/constants.d.ts.map +1 -0
  9. package/dist/constants.js +6 -0
  10. package/dist/constants.js.map +1 -0
  11. package/dist/constants.mjs +4 -0
  12. package/dist/constants.mjs.map +1 -0
  13. package/dist/core-api/controller/index.d.ts.map +1 -1
  14. package/dist/core-api/controller/index.js +2 -1
  15. package/dist/core-api/controller/index.js.map +1 -1
  16. package/dist/core-api/controller/index.mjs +2 -1
  17. package/dist/core-api/controller/index.mjs.map +1 -1
  18. package/dist/core-api/controller/transform.d.ts +3 -2
  19. package/dist/core-api/controller/transform.d.ts.map +1 -1
  20. package/dist/core-api/controller/transform.js +13 -3
  21. package/dist/core-api/controller/transform.js.map +1 -1
  22. package/dist/core-api/controller/transform.mjs +13 -3
  23. package/dist/core-api/controller/transform.mjs.map +1 -1
  24. package/dist/core-api/routes/index.d.ts.map +1 -1
  25. package/dist/core-api/routes/index.js +28 -9
  26. package/dist/core-api/routes/index.js.map +1 -1
  27. package/dist/core-api/routes/index.mjs +1 -1
  28. package/dist/core-api/routes/index.mjs.map +1 -1
  29. package/dist/core-api/routes/validation/attributes.d.ts +243 -90
  30. package/dist/core-api/routes/validation/attributes.d.ts.map +1 -1
  31. package/dist/core-api/routes/validation/attributes.js +541 -564
  32. package/dist/core-api/routes/validation/attributes.js.map +1 -1
  33. package/dist/core-api/routes/validation/attributes.mjs +505 -564
  34. package/dist/core-api/routes/validation/attributes.mjs.map +1 -1
  35. package/dist/core-api/routes/validation/common.d.ts +7 -5
  36. package/dist/core-api/routes/validation/common.d.ts.map +1 -1
  37. package/dist/core-api/routes/validation/common.js +29 -8
  38. package/dist/core-api/routes/validation/common.js.map +1 -1
  39. package/dist/core-api/routes/validation/common.mjs +6 -4
  40. package/dist/core-api/routes/validation/common.mjs.map +1 -1
  41. package/dist/core-api/routes/validation/component.d.ts +2 -10
  42. package/dist/core-api/routes/validation/component.d.ts.map +1 -1
  43. package/dist/core-api/routes/validation/component.js +3 -17
  44. package/dist/core-api/routes/validation/component.js.map +1 -1
  45. package/dist/core-api/routes/validation/component.mjs +3 -17
  46. package/dist/core-api/routes/validation/component.mjs.map +1 -1
  47. package/dist/core-api/routes/validation/constants.d.ts +6 -0
  48. package/dist/core-api/routes/validation/constants.d.ts.map +1 -1
  49. package/dist/core-api/routes/validation/constants.js +6 -1
  50. package/dist/core-api/routes/validation/constants.js.map +1 -1
  51. package/dist/core-api/routes/validation/constants.mjs +6 -1
  52. package/dist/core-api/routes/validation/constants.mjs.map +1 -1
  53. package/dist/core-api/routes/validation/content-type.d.ts +28 -71
  54. package/dist/core-api/routes/validation/content-type.d.ts.map +1 -1
  55. package/dist/core-api/routes/validation/content-type.js +67 -112
  56. package/dist/core-api/routes/validation/content-type.js.map +1 -1
  57. package/dist/core-api/routes/validation/content-type.mjs +36 -100
  58. package/dist/core-api/routes/validation/content-type.mjs.map +1 -1
  59. package/dist/core-api/routes/validation/index.d.ts +1 -1
  60. package/dist/core-api/routes/validation/index.d.ts.map +1 -1
  61. package/dist/core-api/routes/validation/mappers.d.ts +105 -0
  62. package/dist/core-api/routes/validation/mappers.d.ts.map +1 -0
  63. package/dist/core-api/routes/validation/mappers.js +273 -0
  64. package/dist/core-api/routes/validation/mappers.js.map +1 -0
  65. package/dist/core-api/routes/validation/mappers.mjs +249 -0
  66. package/dist/core-api/routes/validation/mappers.mjs.map +1 -0
  67. package/dist/core-api/routes/validation/utils.d.ts +47 -0
  68. package/dist/core-api/routes/validation/utils.d.ts.map +1 -0
  69. package/dist/core-api/routes/validation/utils.js +128 -0
  70. package/dist/core-api/routes/validation/utils.js.map +1 -0
  71. package/dist/core-api/routes/validation/utils.mjs +106 -0
  72. package/dist/core-api/routes/validation/utils.mjs.map +1 -0
  73. package/dist/domain/content-type/index.d.ts.map +1 -1
  74. package/dist/domain/content-type/index.js +17 -1
  75. package/dist/domain/content-type/index.js.map +1 -1
  76. package/dist/domain/content-type/index.mjs +17 -1
  77. package/dist/domain/content-type/index.mjs.map +1 -1
  78. package/dist/ee/index.d.ts +6 -0
  79. package/dist/ee/index.d.ts.map +1 -1
  80. package/dist/ee/index.js +29 -3
  81. package/dist/ee/index.js.map +1 -1
  82. package/dist/ee/index.mjs +30 -4
  83. package/dist/ee/index.mjs.map +1 -1
  84. package/dist/ee/license.d.ts +3 -1
  85. package/dist/ee/license.d.ts.map +1 -1
  86. package/dist/ee/license.js +6 -1
  87. package/dist/ee/license.js.map +1 -1
  88. package/dist/ee/license.mjs +6 -2
  89. package/dist/ee/license.mjs.map +1 -1
  90. package/dist/factories.js +1 -1
  91. package/dist/factories.mjs +1 -1
  92. package/dist/index.js +1 -1
  93. package/dist/index.mjs +1 -1
  94. package/dist/loaders/plugins/index.js +1 -1
  95. package/dist/loaders/plugins/index.js.map +1 -1
  96. package/dist/loaders/plugins/index.mjs +1 -1
  97. package/dist/loaders/plugins/index.mjs.map +1 -1
  98. package/dist/middlewares/cors.d.ts +9 -1
  99. package/dist/middlewares/cors.d.ts.map +1 -1
  100. package/dist/middlewares/cors.js +39 -17
  101. package/dist/middlewares/cors.js.map +1 -1
  102. package/dist/middlewares/cors.mjs +39 -18
  103. package/dist/middlewares/cors.mjs.map +1 -1
  104. package/dist/migrations/first-published-at.d.ts +4 -0
  105. package/dist/migrations/first-published-at.d.ts.map +1 -0
  106. package/dist/migrations/first-published-at.js +51 -0
  107. package/dist/migrations/first-published-at.js.map +1 -0
  108. package/dist/migrations/first-published-at.mjs +49 -0
  109. package/dist/migrations/first-published-at.mjs.map +1 -0
  110. package/dist/migrations/index.d.ts.map +1 -1
  111. package/dist/migrations/index.js +5 -0
  112. package/dist/migrations/index.js.map +1 -1
  113. package/dist/migrations/index.mjs +5 -0
  114. package/dist/migrations/index.mjs.map +1 -1
  115. package/dist/package.json.js +17 -13
  116. package/dist/package.json.js.map +1 -1
  117. package/dist/package.json.mjs +17 -13
  118. package/dist/package.json.mjs.map +1 -1
  119. package/dist/providers/index.d.ts.map +1 -1
  120. package/dist/providers/index.js +2 -0
  121. package/dist/providers/index.js.map +1 -1
  122. package/dist/providers/index.mjs +2 -0
  123. package/dist/providers/index.mjs.map +1 -1
  124. package/dist/providers/session-manager.d.ts +3 -0
  125. package/dist/providers/session-manager.d.ts.map +1 -0
  126. package/dist/providers/session-manager.js +23 -0
  127. package/dist/providers/session-manager.js.map +1 -0
  128. package/dist/providers/session-manager.mjs +21 -0
  129. package/dist/providers/session-manager.mjs.map +1 -0
  130. package/dist/services/content-api/index.d.ts +1 -1
  131. package/dist/services/content-api/index.d.ts.map +1 -1
  132. package/dist/services/content-api/index.js +1 -1
  133. package/dist/services/content-api/index.js.map +1 -1
  134. package/dist/services/content-api/index.mjs +2 -2
  135. package/dist/services/content-api/index.mjs.map +1 -1
  136. package/dist/services/content-source-maps.d.ts +13 -0
  137. package/dist/services/content-source-maps.d.ts.map +1 -0
  138. package/dist/services/content-source-maps.js +108 -0
  139. package/dist/services/content-source-maps.js.map +1 -0
  140. package/dist/services/content-source-maps.mjs +106 -0
  141. package/dist/services/content-source-maps.mjs.map +1 -0
  142. package/dist/services/core-store.d.ts +2 -2
  143. package/dist/services/core-store.d.ts.map +1 -1
  144. package/dist/services/core-store.js.map +1 -1
  145. package/dist/services/core-store.mjs.map +1 -1
  146. package/dist/services/document-service/components.d.ts +31 -1
  147. package/dist/services/document-service/components.d.ts.map +1 -1
  148. package/dist/services/document-service/components.js +109 -0
  149. package/dist/services/document-service/components.js.map +1 -1
  150. package/dist/services/document-service/components.mjs +107 -1
  151. package/dist/services/document-service/components.mjs.map +1 -1
  152. package/dist/services/document-service/entries.d.ts.map +1 -1
  153. package/dist/services/document-service/entries.js +42 -0
  154. package/dist/services/document-service/entries.js.map +1 -1
  155. package/dist/services/document-service/entries.mjs +43 -1
  156. package/dist/services/document-service/entries.mjs.map +1 -1
  157. package/dist/services/document-service/first-published-at.d.ts +7 -0
  158. package/dist/services/document-service/first-published-at.d.ts.map +1 -0
  159. package/dist/services/document-service/first-published-at.js +31 -0
  160. package/dist/services/document-service/first-published-at.js.map +1 -0
  161. package/dist/services/document-service/first-published-at.mjs +28 -0
  162. package/dist/services/document-service/first-published-at.mjs.map +1 -0
  163. package/dist/services/document-service/internationalization.d.ts +6 -1
  164. package/dist/services/document-service/internationalization.d.ts.map +1 -1
  165. package/dist/services/document-service/internationalization.js +32 -0
  166. package/dist/services/document-service/internationalization.js.map +1 -1
  167. package/dist/services/document-service/internationalization.mjs +32 -1
  168. package/dist/services/document-service/internationalization.mjs.map +1 -1
  169. package/dist/services/document-service/repository.d.ts.map +1 -1
  170. package/dist/services/document-service/repository.js +16 -8
  171. package/dist/services/document-service/repository.js.map +1 -1
  172. package/dist/services/document-service/repository.mjs +18 -10
  173. package/dist/services/document-service/repository.mjs.map +1 -1
  174. package/dist/services/document-service/utils/clean-component-join-table.d.ts +7 -0
  175. package/dist/services/document-service/utils/clean-component-join-table.d.ts.map +1 -0
  176. package/dist/services/document-service/utils/unidirectional-relations.d.ts +19 -2
  177. package/dist/services/document-service/utils/unidirectional-relations.d.ts.map +1 -1
  178. package/dist/services/document-service/utils/unidirectional-relations.js +21 -6
  179. package/dist/services/document-service/utils/unidirectional-relations.js.map +1 -1
  180. package/dist/services/document-service/utils/unidirectional-relations.mjs +21 -6
  181. package/dist/services/document-service/utils/unidirectional-relations.mjs.map +1 -1
  182. package/dist/services/entity-validator/index.d.ts.map +1 -1
  183. package/dist/services/entity-validator/index.js +9 -0
  184. package/dist/services/entity-validator/index.js.map +1 -1
  185. package/dist/services/entity-validator/index.mjs +9 -0
  186. package/dist/services/entity-validator/index.mjs.map +1 -1
  187. package/dist/services/entity-validator/validators.d.ts +1 -0
  188. package/dist/services/entity-validator/validators.d.ts.map +1 -1
  189. package/dist/services/entity-validator/validators.js +3 -0
  190. package/dist/services/entity-validator/validators.js.map +1 -1
  191. package/dist/services/entity-validator/validators.mjs +3 -0
  192. package/dist/services/entity-validator/validators.mjs.map +1 -1
  193. package/dist/services/metrics/index.d.ts +1 -1
  194. package/dist/services/metrics/index.d.ts.map +1 -1
  195. package/dist/services/metrics/index.js +11 -9
  196. package/dist/services/metrics/index.js.map +1 -1
  197. package/dist/services/metrics/index.mjs +11 -9
  198. package/dist/services/metrics/index.mjs.map +1 -1
  199. package/dist/services/metrics/middleware.d.ts +2 -1
  200. package/dist/services/metrics/middleware.d.ts.map +1 -1
  201. package/dist/services/metrics/middleware.js +2 -2
  202. package/dist/services/metrics/middleware.js.map +1 -1
  203. package/dist/services/metrics/middleware.mjs +2 -2
  204. package/dist/services/metrics/middleware.mjs.map +1 -1
  205. package/dist/services/metrics/sender.d.ts.map +1 -1
  206. package/dist/services/metrics/sender.js +4 -3
  207. package/dist/services/metrics/sender.js.map +1 -1
  208. package/dist/services/metrics/sender.mjs +4 -3
  209. package/dist/services/metrics/sender.mjs.map +1 -1
  210. package/dist/services/session-manager.d.ts +167 -0
  211. package/dist/services/session-manager.d.ts.map +1 -0
  212. package/dist/services/session-manager.js +529 -0
  213. package/dist/services/session-manager.js.map +1 -0
  214. package/dist/services/session-manager.mjs +526 -0
  215. package/dist/services/session-manager.mjs.map +1 -0
  216. package/dist/services/utils/conditional-fields.d.ts +3 -0
  217. package/dist/services/utils/conditional-fields.d.ts.map +1 -0
  218. package/dist/services/utils/conditional-fields.js +22 -0
  219. package/dist/services/utils/conditional-fields.js.map +1 -0
  220. package/dist/services/utils/conditional-fields.mjs +20 -0
  221. package/dist/services/utils/conditional-fields.mjs.map +1 -0
  222. package/dist/utils/fetch.d.ts +5 -1
  223. package/dist/utils/fetch.d.ts.map +1 -1
  224. package/dist/utils/fetch.js +8 -4
  225. package/dist/utils/fetch.js.map +1 -1
  226. package/dist/utils/fetch.mjs +8 -4
  227. package/dist/utils/fetch.mjs.map +1 -1
  228. package/dist/utils/transform-content-types-to-models.d.ts +197 -0
  229. package/dist/utils/transform-content-types-to-models.d.ts.map +1 -1
  230. package/package.json +17 -13
@@ -1 +1 @@
1
- {"version":3,"file":"cors.js","sources":["../../src/middlewares/cors.ts"],"sourcesContent":["import koaCors from '@koa/cors';\n\nimport type { Core } from '@strapi/types';\n\nexport type Config = {\n enabled?: boolean;\n origin: string | string[] | ((ctx: any) => string | string[]);\n expose?: string | string[];\n maxAge?: number;\n credentials?: boolean;\n methods?: string | string[];\n headers?: string | string[];\n keepHeadersOnError?: boolean;\n};\n\nconst defaults: Config = {\n origin: '*',\n maxAge: 31536000,\n credentials: true,\n methods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'],\n headers: ['Content-Type', 'Authorization', 'Origin', 'Accept'],\n keepHeadersOnError: false,\n};\n\nexport const cors: Core.MiddlewareFactory<Config> = (config) => {\n const { origin, expose, maxAge, credentials, methods, headers, keepHeadersOnError } = {\n ...defaults,\n ...config,\n };\n\n if (config.enabled !== undefined) {\n strapi.log.warn(\n 'The strapi::cors middleware no longer supports the `enabled` option. Using it' +\n ' to conditionally enable CORS might cause an insecure default. To disable strapi::cors, remove it from' +\n ' the exported array in config/middleware.js'\n );\n }\n\n return koaCors({\n async origin(ctx) {\n if (!ctx.get('Origin')) {\n return '*';\n }\n\n let originList: string | string[];\n\n if (typeof origin === 'function') {\n originList = await origin(ctx);\n } else {\n originList = origin;\n }\n\n if (Array.isArray(originList)) {\n return originList.includes(ctx.get('Origin')) ? ctx.get('Origin') : '';\n }\n\n const parsedOrigin = originList.split(',').map((origin) => origin.trim());\n if (parsedOrigin.length > 1) {\n return parsedOrigin.includes(ctx.get('Origin')) ? ctx.get('Origin') : '';\n }\n\n return originList;\n },\n exposeHeaders: expose,\n maxAge,\n credentials,\n allowMethods: methods,\n allowHeaders: headers,\n keepHeadersOnError,\n });\n};\n"],"names":["defaults","origin","maxAge","credentials","methods","headers","keepHeadersOnError","cors","config","expose","enabled","undefined","strapi","log","warn","koaCors","ctx","get","originList","Array","isArray","includes","parsedOrigin","split","map","trim","length","exposeHeaders","allowMethods","allowHeaders"],"mappings":";;;;AAeA,MAAMA,QAAmB,GAAA;IACvBC,MAAQ,EAAA,GAAA;IACRC,MAAQ,EAAA,QAAA;IACRC,WAAa,EAAA,IAAA;IACbC,OAAS,EAAA;AAAC,QAAA,KAAA;AAAO,QAAA,MAAA;AAAQ,QAAA,KAAA;AAAO,QAAA,OAAA;AAAS,QAAA,QAAA;AAAU,QAAA,MAAA;AAAQ,QAAA;AAAU,KAAA;IACrEC,OAAS,EAAA;AAAC,QAAA,cAAA;AAAgB,QAAA,eAAA;AAAiB,QAAA,QAAA;AAAU,QAAA;AAAS,KAAA;IAC9DC,kBAAoB,EAAA;AACtB,CAAA;AAEO,MAAMC,OAAuC,CAACC,MAAAA,GAAAA;AACnD,IAAA,MAAM,EAAEP,MAAM,EAAEQ,MAAM,EAAEP,MAAM,EAAEC,WAAW,EAAEC,OAAO,EAAEC,OAAO,EAAEC,kBAAkB,EAAE,GAAG;AACpF,QAAA,GAAGN,QAAQ;AACX,QAAA,GAAGQ;AACL,KAAA;IAEA,IAAIA,MAAAA,CAAOE,OAAO,KAAKC,SAAW,EAAA;AAChCC,QAAAA,MAAAA,CAAOC,GAAG,CAACC,IAAI,CACb,kFACE,wGACA,GAAA,6CAAA,CAAA;AAEN;AAEA,IAAA,OAAOC,OAAQ,CAAA;AACb,QAAA,MAAMd,QAAOe,GAAG,EAAA;AACd,YAAA,IAAI,CAACA,GAAAA,CAAIC,GAAG,CAAC,QAAW,CAAA,EAAA;gBACtB,OAAO,GAAA;AACT;YAEA,IAAIC,UAAAA;YAEJ,IAAI,OAAOjB,WAAW,UAAY,EAAA;AAChCiB,gBAAAA,UAAAA,GAAa,MAAMjB,MAAOe,CAAAA,GAAAA,CAAAA;aACrB,MAAA;gBACLE,UAAajB,GAAAA,MAAAA;AACf;YAEA,IAAIkB,KAAAA,CAAMC,OAAO,CAACF,UAAa,CAAA,EAAA;gBAC7B,OAAOA,UAAAA,CAAWG,QAAQ,CAACL,GAAIC,CAAAA,GAAG,CAAC,QAAaD,CAAAA,CAAAA,GAAAA,GAAAA,CAAIC,GAAG,CAAC,QAAY,CAAA,GAAA,EAAA;AACtE;YAEA,MAAMK,YAAAA,GAAeJ,UAAWK,CAAAA,KAAK,CAAC,GAAA,CAAA,CAAKC,GAAG,CAAC,CAACvB,MAAWA,GAAAA,MAAAA,CAAOwB,IAAI,EAAA,CAAA;YACtE,IAAIH,YAAAA,CAAaI,MAAM,GAAG,CAAG,EAAA;gBAC3B,OAAOJ,YAAAA,CAAaD,QAAQ,CAACL,GAAIC,CAAAA,GAAG,CAAC,QAAaD,CAAAA,CAAAA,GAAAA,GAAAA,CAAIC,GAAG,CAAC,QAAY,CAAA,GAAA,EAAA;AACxE;YAEA,OAAOC,UAAAA;AACT,SAAA;QACAS,aAAelB,EAAAA,MAAAA;AACfP,QAAAA,MAAAA;AACAC,QAAAA,WAAAA;QACAyB,YAAcxB,EAAAA,OAAAA;QACdyB,YAAcxB,EAAAA,OAAAA;AACdC,QAAAA;AACF,KAAA,CAAA;AACF;;;;"}
1
+ {"version":3,"file":"cors.js","sources":["../../src/middlewares/cors.ts"],"sourcesContent":["import koaCors from '@koa/cors';\n\nimport type { Core } from '@strapi/types';\n\nexport type Config = {\n enabled?: boolean;\n origin: string | string[] | ((ctx: any) => string | string[] | Promise<string | string[]>);\n expose?: string | string[];\n maxAge?: number;\n credentials?: boolean;\n methods?: string | string[];\n headers?: string | string[];\n keepHeadersOnError?: boolean;\n};\n\nconst defaults: Config = {\n origin: '*',\n maxAge: 31536000,\n credentials: true,\n methods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'],\n headers: ['Content-Type', 'Authorization', 'Origin', 'Accept'],\n keepHeadersOnError: false,\n};\n\n/**\n * Determines if a request origin is allowed based on the configured origin list\n * @param requestOrigin - The origin from the request header\n * @param configuredOrigin - The origin configuration (string, array, or function)\n * @param ctx - The Koa context (for function-based origin)\n * @returns The allowed origin string or empty string if blocked\n */\nexport const matchOrigin = async (\n requestOrigin: string | undefined,\n configuredOrigin:\n | string\n | string[]\n | ((ctx: any) => string | string[] | Promise<string | string[]>),\n ctx?: any\n): Promise<string> => {\n if (!requestOrigin) {\n return '*';\n }\n\n let originList: string | string[];\n\n if (typeof configuredOrigin === 'function') {\n originList = await configuredOrigin(ctx);\n } else {\n originList = configuredOrigin;\n }\n\n // Normalize originList into an array\n let normalizedOrigins: string[];\n if (Array.isArray(originList)) {\n normalizedOrigins = originList;\n } else if (originList === undefined || originList === null) {\n // Handle undefined/null - treat as wildcard\n normalizedOrigins = ['*'];\n } else {\n // Handle comma-separated string of origins\n normalizedOrigins = originList.split(',').map((origin) => origin.trim());\n }\n\n // Check if wildcard is in the normalized origins\n if (normalizedOrigins.includes('*')) {\n return requestOrigin;\n }\n\n // Check if request origin is in the normalized origins\n return normalizedOrigins.includes(requestOrigin) ? requestOrigin : '';\n};\n\nexport const cors: Core.MiddlewareFactory<Config> = (config) => {\n const { origin, expose, maxAge, credentials, methods, headers, keepHeadersOnError } = {\n ...defaults,\n ...config,\n };\n\n if (config.enabled !== undefined) {\n strapi.log.warn(\n 'The strapi::cors middleware no longer supports the `enabled` option. Using it' +\n ' to conditionally enable CORS might cause an insecure default. To disable strapi::cors, remove it from' +\n ' the exported array in config/middleware.js'\n );\n }\n\n return koaCors({\n async origin(ctx) {\n const requestOrigin = ctx.get('Origin');\n return matchOrigin(requestOrigin, origin, ctx);\n },\n exposeHeaders: expose,\n maxAge,\n credentials,\n allowMethods: methods,\n allowHeaders: headers,\n keepHeadersOnError,\n });\n};\n"],"names":["defaults","origin","maxAge","credentials","methods","headers","keepHeadersOnError","matchOrigin","requestOrigin","configuredOrigin","ctx","originList","normalizedOrigins","Array","isArray","undefined","split","map","trim","includes","cors","config","expose","enabled","strapi","log","warn","koaCors","get","exposeHeaders","allowMethods","allowHeaders"],"mappings":";;;;AAeA,MAAMA,QAAmB,GAAA;IACvBC,MAAQ,EAAA,GAAA;IACRC,MAAQ,EAAA,QAAA;IACRC,WAAa,EAAA,IAAA;IACbC,OAAS,EAAA;AAAC,QAAA,KAAA;AAAO,QAAA,MAAA;AAAQ,QAAA,KAAA;AAAO,QAAA,OAAA;AAAS,QAAA,QAAA;AAAU,QAAA,MAAA;AAAQ,QAAA;AAAU,KAAA;IACrEC,OAAS,EAAA;AAAC,QAAA,cAAA;AAAgB,QAAA,eAAA;AAAiB,QAAA,QAAA;AAAU,QAAA;AAAS,KAAA;IAC9DC,kBAAoB,EAAA;AACtB,CAAA;AAEA;;;;;;AAMC,IACM,MAAMC,WAAc,GAAA,OACzBC,eACAC,gBAIAC,EAAAA,GAAAA,GAAAA;AAEA,IAAA,IAAI,CAACF,aAAe,EAAA;QAClB,OAAO,GAAA;AACT;IAEA,IAAIG,UAAAA;IAEJ,IAAI,OAAOF,qBAAqB,UAAY,EAAA;AAC1CE,QAAAA,UAAAA,GAAa,MAAMF,gBAAiBC,CAAAA,GAAAA,CAAAA;KAC/B,MAAA;QACLC,UAAaF,GAAAA,gBAAAA;AACf;;IAGA,IAAIG,iBAAAA;IACJ,IAAIC,KAAAA,CAAMC,OAAO,CAACH,UAAa,CAAA,EAAA;QAC7BC,iBAAoBD,GAAAA,UAAAA;AACtB,KAAA,MAAO,IAAIA,UAAAA,KAAeI,SAAaJ,IAAAA,UAAAA,KAAe,IAAM,EAAA;;QAE1DC,iBAAoB,GAAA;AAAC,YAAA;AAAI,SAAA;KACpB,MAAA;;QAELA,iBAAoBD,GAAAA,UAAAA,CAAWK,KAAK,CAAC,GAAA,CAAA,CAAKC,GAAG,CAAC,CAAChB,MAAWA,GAAAA,MAAAA,CAAOiB,IAAI,EAAA,CAAA;AACvE;;IAGA,IAAIN,iBAAAA,CAAkBO,QAAQ,CAAC,GAAM,CAAA,EAAA;QACnC,OAAOX,aAAAA;AACT;;AAGA,IAAA,OAAOI,iBAAkBO,CAAAA,QAAQ,CAACX,aAAAA,CAAAA,GAAiBA,aAAgB,GAAA,EAAA;AACrE;AAEO,MAAMY,OAAuC,CAACC,MAAAA,GAAAA;AACnD,IAAA,MAAM,EAAEpB,MAAM,EAAEqB,MAAM,EAAEpB,MAAM,EAAEC,WAAW,EAAEC,OAAO,EAAEC,OAAO,EAAEC,kBAAkB,EAAE,GAAG;AACpF,QAAA,GAAGN,QAAQ;AACX,QAAA,GAAGqB;AACL,KAAA;IAEA,IAAIA,MAAAA,CAAOE,OAAO,KAAKR,SAAW,EAAA;AAChCS,QAAAA,MAAAA,CAAOC,GAAG,CAACC,IAAI,CACb,kFACE,wGACA,GAAA,6CAAA,CAAA;AAEN;AAEA,IAAA,OAAOC,OAAQ,CAAA;AACb,QAAA,MAAM1B,QAAOS,GAAG,EAAA;YACd,MAAMF,aAAAA,GAAgBE,GAAIkB,CAAAA,GAAG,CAAC,QAAA,CAAA;YAC9B,OAAOrB,WAAAA,CAAYC,eAAeP,MAAQS,EAAAA,GAAAA,CAAAA;AAC5C,SAAA;QACAmB,aAAeP,EAAAA,MAAAA;AACfpB,QAAAA,MAAAA;AACAC,QAAAA,WAAAA;QACA2B,YAAc1B,EAAAA,OAAAA;QACd2B,YAAc1B,EAAAA,OAAAA;AACdC,QAAAA;AACF,KAAA,CAAA;AACF;;;;;"}
@@ -21,6 +21,42 @@ const defaults = {
21
21
  ],
22
22
  keepHeadersOnError: false
23
23
  };
24
+ /**
25
+ * Determines if a request origin is allowed based on the configured origin list
26
+ * @param requestOrigin - The origin from the request header
27
+ * @param configuredOrigin - The origin configuration (string, array, or function)
28
+ * @param ctx - The Koa context (for function-based origin)
29
+ * @returns The allowed origin string or empty string if blocked
30
+ */ const matchOrigin = async (requestOrigin, configuredOrigin, ctx)=>{
31
+ if (!requestOrigin) {
32
+ return '*';
33
+ }
34
+ let originList;
35
+ if (typeof configuredOrigin === 'function') {
36
+ originList = await configuredOrigin(ctx);
37
+ } else {
38
+ originList = configuredOrigin;
39
+ }
40
+ // Normalize originList into an array
41
+ let normalizedOrigins;
42
+ if (Array.isArray(originList)) {
43
+ normalizedOrigins = originList;
44
+ } else if (originList === undefined || originList === null) {
45
+ // Handle undefined/null - treat as wildcard
46
+ normalizedOrigins = [
47
+ '*'
48
+ ];
49
+ } else {
50
+ // Handle comma-separated string of origins
51
+ normalizedOrigins = originList.split(',').map((origin)=>origin.trim());
52
+ }
53
+ // Check if wildcard is in the normalized origins
54
+ if (normalizedOrigins.includes('*')) {
55
+ return requestOrigin;
56
+ }
57
+ // Check if request origin is in the normalized origins
58
+ return normalizedOrigins.includes(requestOrigin) ? requestOrigin : '';
59
+ };
24
60
  const cors = (config)=>{
25
61
  const { origin, expose, maxAge, credentials, methods, headers, keepHeadersOnError } = {
26
62
  ...defaults,
@@ -31,23 +67,8 @@ const cors = (config)=>{
31
67
  }
32
68
  return koaCors({
33
69
  async origin (ctx) {
34
- if (!ctx.get('Origin')) {
35
- return '*';
36
- }
37
- let originList;
38
- if (typeof origin === 'function') {
39
- originList = await origin(ctx);
40
- } else {
41
- originList = origin;
42
- }
43
- if (Array.isArray(originList)) {
44
- return originList.includes(ctx.get('Origin')) ? ctx.get('Origin') : '';
45
- }
46
- const parsedOrigin = originList.split(',').map((origin)=>origin.trim());
47
- if (parsedOrigin.length > 1) {
48
- return parsedOrigin.includes(ctx.get('Origin')) ? ctx.get('Origin') : '';
49
- }
50
- return originList;
70
+ const requestOrigin = ctx.get('Origin');
71
+ return matchOrigin(requestOrigin, origin, ctx);
51
72
  },
52
73
  exposeHeaders: expose,
53
74
  maxAge,
@@ -58,5 +79,5 @@ const cors = (config)=>{
58
79
  });
59
80
  };
60
81
 
61
- export { cors };
82
+ export { cors, matchOrigin };
62
83
  //# sourceMappingURL=cors.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"cors.mjs","sources":["../../src/middlewares/cors.ts"],"sourcesContent":["import koaCors from '@koa/cors';\n\nimport type { Core } from '@strapi/types';\n\nexport type Config = {\n enabled?: boolean;\n origin: string | string[] | ((ctx: any) => string | string[]);\n expose?: string | string[];\n maxAge?: number;\n credentials?: boolean;\n methods?: string | string[];\n headers?: string | string[];\n keepHeadersOnError?: boolean;\n};\n\nconst defaults: Config = {\n origin: '*',\n maxAge: 31536000,\n credentials: true,\n methods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'],\n headers: ['Content-Type', 'Authorization', 'Origin', 'Accept'],\n keepHeadersOnError: false,\n};\n\nexport const cors: Core.MiddlewareFactory<Config> = (config) => {\n const { origin, expose, maxAge, credentials, methods, headers, keepHeadersOnError } = {\n ...defaults,\n ...config,\n };\n\n if (config.enabled !== undefined) {\n strapi.log.warn(\n 'The strapi::cors middleware no longer supports the `enabled` option. Using it' +\n ' to conditionally enable CORS might cause an insecure default. To disable strapi::cors, remove it from' +\n ' the exported array in config/middleware.js'\n );\n }\n\n return koaCors({\n async origin(ctx) {\n if (!ctx.get('Origin')) {\n return '*';\n }\n\n let originList: string | string[];\n\n if (typeof origin === 'function') {\n originList = await origin(ctx);\n } else {\n originList = origin;\n }\n\n if (Array.isArray(originList)) {\n return originList.includes(ctx.get('Origin')) ? ctx.get('Origin') : '';\n }\n\n const parsedOrigin = originList.split(',').map((origin) => origin.trim());\n if (parsedOrigin.length > 1) {\n return parsedOrigin.includes(ctx.get('Origin')) ? ctx.get('Origin') : '';\n }\n\n return originList;\n },\n exposeHeaders: expose,\n maxAge,\n credentials,\n allowMethods: methods,\n allowHeaders: headers,\n keepHeadersOnError,\n });\n};\n"],"names":["defaults","origin","maxAge","credentials","methods","headers","keepHeadersOnError","cors","config","expose","enabled","undefined","strapi","log","warn","koaCors","ctx","get","originList","Array","isArray","includes","parsedOrigin","split","map","trim","length","exposeHeaders","allowMethods","allowHeaders"],"mappings":";;AAeA,MAAMA,QAAmB,GAAA;IACvBC,MAAQ,EAAA,GAAA;IACRC,MAAQ,EAAA,QAAA;IACRC,WAAa,EAAA,IAAA;IACbC,OAAS,EAAA;AAAC,QAAA,KAAA;AAAO,QAAA,MAAA;AAAQ,QAAA,KAAA;AAAO,QAAA,OAAA;AAAS,QAAA,QAAA;AAAU,QAAA,MAAA;AAAQ,QAAA;AAAU,KAAA;IACrEC,OAAS,EAAA;AAAC,QAAA,cAAA;AAAgB,QAAA,eAAA;AAAiB,QAAA,QAAA;AAAU,QAAA;AAAS,KAAA;IAC9DC,kBAAoB,EAAA;AACtB,CAAA;AAEO,MAAMC,OAAuC,CAACC,MAAAA,GAAAA;AACnD,IAAA,MAAM,EAAEP,MAAM,EAAEQ,MAAM,EAAEP,MAAM,EAAEC,WAAW,EAAEC,OAAO,EAAEC,OAAO,EAAEC,kBAAkB,EAAE,GAAG;AACpF,QAAA,GAAGN,QAAQ;AACX,QAAA,GAAGQ;AACL,KAAA;IAEA,IAAIA,MAAAA,CAAOE,OAAO,KAAKC,SAAW,EAAA;AAChCC,QAAAA,MAAAA,CAAOC,GAAG,CAACC,IAAI,CACb,kFACE,wGACA,GAAA,6CAAA,CAAA;AAEN;AAEA,IAAA,OAAOC,OAAQ,CAAA;AACb,QAAA,MAAMd,QAAOe,GAAG,EAAA;AACd,YAAA,IAAI,CAACA,GAAAA,CAAIC,GAAG,CAAC,QAAW,CAAA,EAAA;gBACtB,OAAO,GAAA;AACT;YAEA,IAAIC,UAAAA;YAEJ,IAAI,OAAOjB,WAAW,UAAY,EAAA;AAChCiB,gBAAAA,UAAAA,GAAa,MAAMjB,MAAOe,CAAAA,GAAAA,CAAAA;aACrB,MAAA;gBACLE,UAAajB,GAAAA,MAAAA;AACf;YAEA,IAAIkB,KAAAA,CAAMC,OAAO,CAACF,UAAa,CAAA,EAAA;gBAC7B,OAAOA,UAAAA,CAAWG,QAAQ,CAACL,GAAIC,CAAAA,GAAG,CAAC,QAAaD,CAAAA,CAAAA,GAAAA,GAAAA,CAAIC,GAAG,CAAC,QAAY,CAAA,GAAA,EAAA;AACtE;YAEA,MAAMK,YAAAA,GAAeJ,UAAWK,CAAAA,KAAK,CAAC,GAAA,CAAA,CAAKC,GAAG,CAAC,CAACvB,MAAWA,GAAAA,MAAAA,CAAOwB,IAAI,EAAA,CAAA;YACtE,IAAIH,YAAAA,CAAaI,MAAM,GAAG,CAAG,EAAA;gBAC3B,OAAOJ,YAAAA,CAAaD,QAAQ,CAACL,GAAIC,CAAAA,GAAG,CAAC,QAAaD,CAAAA,CAAAA,GAAAA,GAAAA,CAAIC,GAAG,CAAC,QAAY,CAAA,GAAA,EAAA;AACxE;YAEA,OAAOC,UAAAA;AACT,SAAA;QACAS,aAAelB,EAAAA,MAAAA;AACfP,QAAAA,MAAAA;AACAC,QAAAA,WAAAA;QACAyB,YAAcxB,EAAAA,OAAAA;QACdyB,YAAcxB,EAAAA,OAAAA;AACdC,QAAAA;AACF,KAAA,CAAA;AACF;;;;"}
1
+ {"version":3,"file":"cors.mjs","sources":["../../src/middlewares/cors.ts"],"sourcesContent":["import koaCors from '@koa/cors';\n\nimport type { Core } from '@strapi/types';\n\nexport type Config = {\n enabled?: boolean;\n origin: string | string[] | ((ctx: any) => string | string[] | Promise<string | string[]>);\n expose?: string | string[];\n maxAge?: number;\n credentials?: boolean;\n methods?: string | string[];\n headers?: string | string[];\n keepHeadersOnError?: boolean;\n};\n\nconst defaults: Config = {\n origin: '*',\n maxAge: 31536000,\n credentials: true,\n methods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'],\n headers: ['Content-Type', 'Authorization', 'Origin', 'Accept'],\n keepHeadersOnError: false,\n};\n\n/**\n * Determines if a request origin is allowed based on the configured origin list\n * @param requestOrigin - The origin from the request header\n * @param configuredOrigin - The origin configuration (string, array, or function)\n * @param ctx - The Koa context (for function-based origin)\n * @returns The allowed origin string or empty string if blocked\n */\nexport const matchOrigin = async (\n requestOrigin: string | undefined,\n configuredOrigin:\n | string\n | string[]\n | ((ctx: any) => string | string[] | Promise<string | string[]>),\n ctx?: any\n): Promise<string> => {\n if (!requestOrigin) {\n return '*';\n }\n\n let originList: string | string[];\n\n if (typeof configuredOrigin === 'function') {\n originList = await configuredOrigin(ctx);\n } else {\n originList = configuredOrigin;\n }\n\n // Normalize originList into an array\n let normalizedOrigins: string[];\n if (Array.isArray(originList)) {\n normalizedOrigins = originList;\n } else if (originList === undefined || originList === null) {\n // Handle undefined/null - treat as wildcard\n normalizedOrigins = ['*'];\n } else {\n // Handle comma-separated string of origins\n normalizedOrigins = originList.split(',').map((origin) => origin.trim());\n }\n\n // Check if wildcard is in the normalized origins\n if (normalizedOrigins.includes('*')) {\n return requestOrigin;\n }\n\n // Check if request origin is in the normalized origins\n return normalizedOrigins.includes(requestOrigin) ? requestOrigin : '';\n};\n\nexport const cors: Core.MiddlewareFactory<Config> = (config) => {\n const { origin, expose, maxAge, credentials, methods, headers, keepHeadersOnError } = {\n ...defaults,\n ...config,\n };\n\n if (config.enabled !== undefined) {\n strapi.log.warn(\n 'The strapi::cors middleware no longer supports the `enabled` option. Using it' +\n ' to conditionally enable CORS might cause an insecure default. To disable strapi::cors, remove it from' +\n ' the exported array in config/middleware.js'\n );\n }\n\n return koaCors({\n async origin(ctx) {\n const requestOrigin = ctx.get('Origin');\n return matchOrigin(requestOrigin, origin, ctx);\n },\n exposeHeaders: expose,\n maxAge,\n credentials,\n allowMethods: methods,\n allowHeaders: headers,\n keepHeadersOnError,\n });\n};\n"],"names":["defaults","origin","maxAge","credentials","methods","headers","keepHeadersOnError","matchOrigin","requestOrigin","configuredOrigin","ctx","originList","normalizedOrigins","Array","isArray","undefined","split","map","trim","includes","cors","config","expose","enabled","strapi","log","warn","koaCors","get","exposeHeaders","allowMethods","allowHeaders"],"mappings":";;AAeA,MAAMA,QAAmB,GAAA;IACvBC,MAAQ,EAAA,GAAA;IACRC,MAAQ,EAAA,QAAA;IACRC,WAAa,EAAA,IAAA;IACbC,OAAS,EAAA;AAAC,QAAA,KAAA;AAAO,QAAA,MAAA;AAAQ,QAAA,KAAA;AAAO,QAAA,OAAA;AAAS,QAAA,QAAA;AAAU,QAAA,MAAA;AAAQ,QAAA;AAAU,KAAA;IACrEC,OAAS,EAAA;AAAC,QAAA,cAAA;AAAgB,QAAA,eAAA;AAAiB,QAAA,QAAA;AAAU,QAAA;AAAS,KAAA;IAC9DC,kBAAoB,EAAA;AACtB,CAAA;AAEA;;;;;;AAMC,IACM,MAAMC,WAAc,GAAA,OACzBC,eACAC,gBAIAC,EAAAA,GAAAA,GAAAA;AAEA,IAAA,IAAI,CAACF,aAAe,EAAA;QAClB,OAAO,GAAA;AACT;IAEA,IAAIG,UAAAA;IAEJ,IAAI,OAAOF,qBAAqB,UAAY,EAAA;AAC1CE,QAAAA,UAAAA,GAAa,MAAMF,gBAAiBC,CAAAA,GAAAA,CAAAA;KAC/B,MAAA;QACLC,UAAaF,GAAAA,gBAAAA;AACf;;IAGA,IAAIG,iBAAAA;IACJ,IAAIC,KAAAA,CAAMC,OAAO,CAACH,UAAa,CAAA,EAAA;QAC7BC,iBAAoBD,GAAAA,UAAAA;AACtB,KAAA,MAAO,IAAIA,UAAAA,KAAeI,SAAaJ,IAAAA,UAAAA,KAAe,IAAM,EAAA;;QAE1DC,iBAAoB,GAAA;AAAC,YAAA;AAAI,SAAA;KACpB,MAAA;;QAELA,iBAAoBD,GAAAA,UAAAA,CAAWK,KAAK,CAAC,GAAA,CAAA,CAAKC,GAAG,CAAC,CAAChB,MAAWA,GAAAA,MAAAA,CAAOiB,IAAI,EAAA,CAAA;AACvE;;IAGA,IAAIN,iBAAAA,CAAkBO,QAAQ,CAAC,GAAM,CAAA,EAAA;QACnC,OAAOX,aAAAA;AACT;;AAGA,IAAA,OAAOI,iBAAkBO,CAAAA,QAAQ,CAACX,aAAAA,CAAAA,GAAiBA,aAAgB,GAAA,EAAA;AACrE;AAEO,MAAMY,OAAuC,CAACC,MAAAA,GAAAA;AACnD,IAAA,MAAM,EAAEpB,MAAM,EAAEqB,MAAM,EAAEpB,MAAM,EAAEC,WAAW,EAAEC,OAAO,EAAEC,OAAO,EAAEC,kBAAkB,EAAE,GAAG;AACpF,QAAA,GAAGN,QAAQ;AACX,QAAA,GAAGqB;AACL,KAAA;IAEA,IAAIA,MAAAA,CAAOE,OAAO,KAAKR,SAAW,EAAA;AAChCS,QAAAA,MAAAA,CAAOC,GAAG,CAACC,IAAI,CACb,kFACE,wGACA,GAAA,6CAAA,CAAA;AAEN;AAEA,IAAA,OAAOC,OAAQ,CAAA;AACb,QAAA,MAAM1B,QAAOS,GAAG,EAAA;YACd,MAAMF,aAAAA,GAAgBE,GAAIkB,CAAAA,GAAG,CAAC,QAAA,CAAA;YAC9B,OAAOrB,WAAAA,CAAYC,eAAeP,MAAQS,EAAAA,GAAAA,CAAAA;AAC5C,SAAA;QACAmB,aAAeP,EAAAA,MAAAA;AACfpB,QAAAA,MAAAA;AACAC,QAAAA,WAAAA;QACA2B,YAAc1B,EAAAA,OAAAA;QACd2B,YAAc1B,EAAAA,OAAAA;AACdC,QAAAA;AACF,KAAA,CAAA;AACF;;;;"}
@@ -0,0 +1,4 @@
1
+ import { Input } from './draft-publish';
2
+ declare const enableFirstPublishedAt: ({ oldContentTypes, contentTypes }: Input) => Promise<void>;
3
+ export { enableFirstPublishedAt as enable };
4
+ //# sourceMappingURL=first-published-at.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"first-published-at.d.ts","sourceRoot":"","sources":["../../src/migrations/first-published-at.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAUxC,QAAA,MAAM,sBAAsB,sCAA6C,KAAK,kBA6D7E,CAAC;AAEF,OAAO,EAAE,sBAAsB,IAAI,MAAM,EAAE,CAAC"}
@@ -0,0 +1,51 @@
1
+ 'use strict';
2
+
3
+ var strapiUtils = require('@strapi/utils');
4
+ var _ = require('lodash');
5
+
6
+ const enableFirstPublishedAt = async ({ oldContentTypes, contentTypes })=>{
7
+ if (!oldContentTypes) {
8
+ return;
9
+ }
10
+ return strapi.db.transaction(async (trx)=>{
11
+ for(const uid in contentTypes){
12
+ if (!oldContentTypes[uid]) {
13
+ continue;
14
+ }
15
+ const contentType = contentTypes[uid];
16
+ if (!strapiUtils.contentTypes.hasFirstPublishedAtField(contentType)) {
17
+ continue;
18
+ }
19
+ if (!contentType.attributes?.firstPublishedAt) {
20
+ continue;
21
+ }
22
+ const content = await strapi.db.queryBuilder(uid).select('*').transacting(trx).execute();
23
+ // Process content types in pairs: draft and published.
24
+ // If only one exist, which means the value is not published yet and we can ignore it
25
+ const groupedContent = _.groupBy(content, (item)=>`${item.documentId}-${item.locale}`);
26
+ for (const items of Object.values(groupedContent)){
27
+ // If there is only one item, which means nothing is published yet for this locale
28
+ if (items.length <= 1) {
29
+ continue;
30
+ }
31
+ // If firstPublishedAt is already present, do not do anything
32
+ if (items[0].firstPublishedAt != null && items[1].firstPublishedAt != null) {
33
+ continue;
34
+ }
35
+ const publishedContent = items.filter((item)=>item.publishedAt != null).at(0);
36
+ if (!publishedContent) {
37
+ continue;
38
+ }
39
+ await strapi.db.queryBuilder(uid).update({
40
+ firstPublishedAt: new Date(publishedContent.publishedAt)
41
+ }).where({
42
+ documentId: publishedContent.documentId,
43
+ locale: publishedContent.locale
44
+ }).transacting(trx).execute();
45
+ }
46
+ }
47
+ });
48
+ };
49
+
50
+ exports.enable = enableFirstPublishedAt;
51
+ //# sourceMappingURL=first-published-at.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"first-published-at.js","sources":["../../src/migrations/first-published-at.ts"],"sourcesContent":["import { contentTypes as contentTypesUtils } from '@strapi/utils';\nimport _ from 'lodash';\nimport { Input } from './draft-publish';\n\ninterface ContentTypeData {\n id: number;\n documentId: string;\n publishedAt: Date;\n firstPublishedAt: Date;\n locale: string;\n}\n\nconst enableFirstPublishedAt = async ({ oldContentTypes, contentTypes }: Input) => {\n if (!oldContentTypes) {\n return;\n }\n\n return strapi.db.transaction(async (trx) => {\n for (const uid in contentTypes) {\n if (!oldContentTypes[uid]) {\n continue;\n }\n\n const contentType = contentTypes[uid];\n\n if (!contentTypesUtils.hasFirstPublishedAtField(contentType)) {\n continue;\n }\n\n if (!contentType.attributes?.firstPublishedAt) {\n continue;\n }\n\n const content: ContentTypeData[] = await strapi.db\n .queryBuilder(uid)\n .select('*')\n .transacting(trx)\n .execute();\n\n // Process content types in pairs: draft and published.\n // If only one exist, which means the value is not published yet and we can ignore it\n const groupedContent = _.groupBy(content, (item) => `${item.documentId}-${item.locale}`);\n\n for (const items of Object.values(groupedContent)) {\n // If there is only one item, which means nothing is published yet for this locale\n if (items.length <= 1) {\n continue;\n }\n\n // If firstPublishedAt is already present, do not do anything\n if (items[0].firstPublishedAt != null && items[1].firstPublishedAt != null) {\n continue;\n }\n\n const publishedContent = items.filter((item) => item.publishedAt != null).at(0);\n if (!publishedContent) {\n continue;\n }\n\n await strapi.db\n .queryBuilder(uid)\n .update({\n firstPublishedAt: new Date(publishedContent.publishedAt),\n })\n .where({\n documentId: publishedContent.documentId,\n locale: publishedContent.locale,\n })\n .transacting(trx)\n .execute();\n }\n }\n });\n};\n\nexport { enableFirstPublishedAt as enable };\n"],"names":["enableFirstPublishedAt","oldContentTypes","contentTypes","strapi","db","transaction","trx","uid","contentType","contentTypesUtils","hasFirstPublishedAtField","attributes","firstPublishedAt","content","queryBuilder","select","transacting","execute","groupedContent","_","groupBy","item","documentId","locale","items","Object","values","length","publishedContent","filter","publishedAt","at","update","Date","where"],"mappings":";;;;;AAYA,MAAMA,yBAAyB,OAAO,EAAEC,eAAe,EAAEC,YAAY,EAAS,GAAA;AAC5E,IAAA,IAAI,CAACD,eAAiB,EAAA;AACpB,QAAA;AACF;AAEA,IAAA,OAAOE,MAAOC,CAAAA,EAAE,CAACC,WAAW,CAAC,OAAOC,GAAAA,GAAAA;QAClC,IAAK,MAAMC,OAAOL,YAAc,CAAA;AAC9B,YAAA,IAAI,CAACD,eAAe,CAACM,GAAAA,CAAI,EAAE;AACzB,gBAAA;AACF;YAEA,MAAMC,WAAAA,GAAcN,YAAY,CAACK,GAAI,CAAA;AAErC,YAAA,IAAI,CAACE,wBAAAA,CAAkBC,wBAAwB,CAACF,WAAc,CAAA,EAAA;AAC5D,gBAAA;AACF;AAEA,YAAA,IAAI,CAACA,WAAAA,CAAYG,UAAU,EAAEC,gBAAkB,EAAA;AAC7C,gBAAA;AACF;AAEA,YAAA,MAAMC,OAA6B,GAAA,MAAMV,MAAOC,CAAAA,EAAE,CAC/CU,YAAY,CAACP,GACbQ,CAAAA,CAAAA,MAAM,CAAC,GAAA,CAAA,CACPC,WAAW,CAACV,KACZW,OAAO,EAAA;;;AAIV,YAAA,MAAMC,iBAAiBC,CAAEC,CAAAA,OAAO,CAACP,OAAAA,EAAS,CAACQ,IAAS,GAAA,CAAC,EAAEA,IAAAA,CAAKC,UAAU,CAAC,CAAC,EAAED,IAAKE,CAAAA,MAAM,CAAC,CAAC,CAAA;AAEvF,YAAA,KAAK,MAAMC,KAAAA,IAASC,MAAOC,CAAAA,MAAM,CAACR,cAAiB,CAAA,CAAA;;gBAEjD,IAAIM,KAAAA,CAAMG,MAAM,IAAI,CAAG,EAAA;AACrB,oBAAA;AACF;;AAGA,gBAAA,IAAIH,KAAK,CAAC,CAAE,CAAA,CAACZ,gBAAgB,IAAI,IAAQY,IAAAA,KAAK,CAAC,CAAA,CAAE,CAACZ,gBAAgB,IAAI,IAAM,EAAA;AAC1E,oBAAA;AACF;gBAEA,MAAMgB,gBAAAA,GAAmBJ,KAAMK,CAAAA,MAAM,CAAC,CAACR,IAASA,GAAAA,IAAAA,CAAKS,WAAW,IAAI,IAAMC,CAAAA,CAAAA,EAAE,CAAC,CAAA,CAAA;AAC7E,gBAAA,IAAI,CAACH,gBAAkB,EAAA;AACrB,oBAAA;AACF;AAEA,gBAAA,MAAMzB,OAAOC,EAAE,CACZU,YAAY,CAACP,GAAAA,CAAAA,CACbyB,MAAM,CAAC;oBACNpB,gBAAkB,EAAA,IAAIqB,IAAKL,CAAAA,gBAAAA,CAAiBE,WAAW;AACzD,iBAAA,CAAA,CACCI,KAAK,CAAC;AACLZ,oBAAAA,UAAAA,EAAYM,iBAAiBN,UAAU;AACvCC,oBAAAA,MAAAA,EAAQK,iBAAiBL;iBAE1BP,CAAAA,CAAAA,WAAW,CAACV,GAAAA,CAAAA,CACZW,OAAO,EAAA;AACZ;AACF;AACF,KAAA,CAAA;AACF;;;;"}
@@ -0,0 +1,49 @@
1
+ import { contentTypes } from '@strapi/utils';
2
+ import _ from 'lodash';
3
+
4
+ const enableFirstPublishedAt = async ({ oldContentTypes, contentTypes: contentTypes$1 })=>{
5
+ if (!oldContentTypes) {
6
+ return;
7
+ }
8
+ return strapi.db.transaction(async (trx)=>{
9
+ for(const uid in contentTypes$1){
10
+ if (!oldContentTypes[uid]) {
11
+ continue;
12
+ }
13
+ const contentType = contentTypes$1[uid];
14
+ if (!contentTypes.hasFirstPublishedAtField(contentType)) {
15
+ continue;
16
+ }
17
+ if (!contentType.attributes?.firstPublishedAt) {
18
+ continue;
19
+ }
20
+ const content = await strapi.db.queryBuilder(uid).select('*').transacting(trx).execute();
21
+ // Process content types in pairs: draft and published.
22
+ // If only one exist, which means the value is not published yet and we can ignore it
23
+ const groupedContent = _.groupBy(content, (item)=>`${item.documentId}-${item.locale}`);
24
+ for (const items of Object.values(groupedContent)){
25
+ // If there is only one item, which means nothing is published yet for this locale
26
+ if (items.length <= 1) {
27
+ continue;
28
+ }
29
+ // If firstPublishedAt is already present, do not do anything
30
+ if (items[0].firstPublishedAt != null && items[1].firstPublishedAt != null) {
31
+ continue;
32
+ }
33
+ const publishedContent = items.filter((item)=>item.publishedAt != null).at(0);
34
+ if (!publishedContent) {
35
+ continue;
36
+ }
37
+ await strapi.db.queryBuilder(uid).update({
38
+ firstPublishedAt: new Date(publishedContent.publishedAt)
39
+ }).where({
40
+ documentId: publishedContent.documentId,
41
+ locale: publishedContent.locale
42
+ }).transacting(trx).execute();
43
+ }
44
+ }
45
+ });
46
+ };
47
+
48
+ export { enableFirstPublishedAt as enable };
49
+ //# sourceMappingURL=first-published-at.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"first-published-at.mjs","sources":["../../src/migrations/first-published-at.ts"],"sourcesContent":["import { contentTypes as contentTypesUtils } from '@strapi/utils';\nimport _ from 'lodash';\nimport { Input } from './draft-publish';\n\ninterface ContentTypeData {\n id: number;\n documentId: string;\n publishedAt: Date;\n firstPublishedAt: Date;\n locale: string;\n}\n\nconst enableFirstPublishedAt = async ({ oldContentTypes, contentTypes }: Input) => {\n if (!oldContentTypes) {\n return;\n }\n\n return strapi.db.transaction(async (trx) => {\n for (const uid in contentTypes) {\n if (!oldContentTypes[uid]) {\n continue;\n }\n\n const contentType = contentTypes[uid];\n\n if (!contentTypesUtils.hasFirstPublishedAtField(contentType)) {\n continue;\n }\n\n if (!contentType.attributes?.firstPublishedAt) {\n continue;\n }\n\n const content: ContentTypeData[] = await strapi.db\n .queryBuilder(uid)\n .select('*')\n .transacting(trx)\n .execute();\n\n // Process content types in pairs: draft and published.\n // If only one exist, which means the value is not published yet and we can ignore it\n const groupedContent = _.groupBy(content, (item) => `${item.documentId}-${item.locale}`);\n\n for (const items of Object.values(groupedContent)) {\n // If there is only one item, which means nothing is published yet for this locale\n if (items.length <= 1) {\n continue;\n }\n\n // If firstPublishedAt is already present, do not do anything\n if (items[0].firstPublishedAt != null && items[1].firstPublishedAt != null) {\n continue;\n }\n\n const publishedContent = items.filter((item) => item.publishedAt != null).at(0);\n if (!publishedContent) {\n continue;\n }\n\n await strapi.db\n .queryBuilder(uid)\n .update({\n firstPublishedAt: new Date(publishedContent.publishedAt),\n })\n .where({\n documentId: publishedContent.documentId,\n locale: publishedContent.locale,\n })\n .transacting(trx)\n .execute();\n }\n }\n });\n};\n\nexport { enableFirstPublishedAt as enable };\n"],"names":["enableFirstPublishedAt","oldContentTypes","contentTypes","strapi","db","transaction","trx","uid","contentType","contentTypesUtils","hasFirstPublishedAtField","attributes","firstPublishedAt","content","queryBuilder","select","transacting","execute","groupedContent","_","groupBy","item","documentId","locale","items","Object","values","length","publishedContent","filter","publishedAt","at","update","Date","where"],"mappings":";;;AAYA,MAAMA,yBAAyB,OAAO,EAAEC,eAAe,gBAAEC,cAAY,EAAS,GAAA;AAC5E,IAAA,IAAI,CAACD,eAAiB,EAAA;AACpB,QAAA;AACF;AAEA,IAAA,OAAOE,MAAOC,CAAAA,EAAE,CAACC,WAAW,CAAC,OAAOC,GAAAA,GAAAA;QAClC,IAAK,MAAMC,OAAOL,cAAc,CAAA;AAC9B,YAAA,IAAI,CAACD,eAAe,CAACM,GAAAA,CAAI,EAAE;AACzB,gBAAA;AACF;YAEA,MAAMC,WAAAA,GAAcN,cAAY,CAACK,GAAI,CAAA;AAErC,YAAA,IAAI,CAACE,YAAAA,CAAkBC,wBAAwB,CAACF,WAAc,CAAA,EAAA;AAC5D,gBAAA;AACF;AAEA,YAAA,IAAI,CAACA,WAAAA,CAAYG,UAAU,EAAEC,gBAAkB,EAAA;AAC7C,gBAAA;AACF;AAEA,YAAA,MAAMC,OAA6B,GAAA,MAAMV,MAAOC,CAAAA,EAAE,CAC/CU,YAAY,CAACP,GACbQ,CAAAA,CAAAA,MAAM,CAAC,GAAA,CAAA,CACPC,WAAW,CAACV,KACZW,OAAO,EAAA;;;AAIV,YAAA,MAAMC,iBAAiBC,CAAEC,CAAAA,OAAO,CAACP,OAAAA,EAAS,CAACQ,IAAS,GAAA,CAAC,EAAEA,IAAAA,CAAKC,UAAU,CAAC,CAAC,EAAED,IAAKE,CAAAA,MAAM,CAAC,CAAC,CAAA;AAEvF,YAAA,KAAK,MAAMC,KAAAA,IAASC,MAAOC,CAAAA,MAAM,CAACR,cAAiB,CAAA,CAAA;;gBAEjD,IAAIM,KAAAA,CAAMG,MAAM,IAAI,CAAG,EAAA;AACrB,oBAAA;AACF;;AAGA,gBAAA,IAAIH,KAAK,CAAC,CAAE,CAAA,CAACZ,gBAAgB,IAAI,IAAQY,IAAAA,KAAK,CAAC,CAAA,CAAE,CAACZ,gBAAgB,IAAI,IAAM,EAAA;AAC1E,oBAAA;AACF;gBAEA,MAAMgB,gBAAAA,GAAmBJ,KAAMK,CAAAA,MAAM,CAAC,CAACR,IAASA,GAAAA,IAAAA,CAAKS,WAAW,IAAI,IAAMC,CAAAA,CAAAA,EAAE,CAAC,CAAA,CAAA;AAC7E,gBAAA,IAAI,CAACH,gBAAkB,EAAA;AACrB,oBAAA;AACF;AAEA,gBAAA,MAAMzB,OAAOC,EAAE,CACZU,YAAY,CAACP,GAAAA,CAAAA,CACbyB,MAAM,CAAC;oBACNpB,gBAAkB,EAAA,IAAIqB,IAAKL,CAAAA,gBAAAA,CAAiBE,WAAW;AACzD,iBAAA,CAAA,CACCI,KAAK,CAAC;AACLZ,oBAAAA,UAAAA,EAAYM,iBAAiBN,UAAU;AACvCC,oBAAAA,MAAAA,EAAQK,iBAAiBL;iBAE1BP,CAAAA,CAAAA,WAAW,CAACV,GAAAA,CAAAA,CACZW,OAAO,EAAA;AACZ;AACF;AACF,KAAA,CAAA;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/migrations/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAE7C,QAAA,MAAM,MAAM,sCAA6C,KAAK,kBAG7D,CAAC;AAEF,QAAA,MAAM,OAAO,sCAA6C,KAAK,kBAG9D,CAAC;AAEF,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/migrations/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAE7C,QAAA,MAAM,MAAM,sCAA6C,KAAK,kBAI7D,CAAC;AAEF,QAAA,MAAM,OAAO,sCAA6C,KAAK,kBAG9D,CAAC;AAEF,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC"}
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var draftPublish = require('./draft-publish.js');
4
+ var firstPublishedAt = require('./first-published-at.js');
4
5
  var i18n = require('./i18n.js');
5
6
 
6
7
  const enable = async ({ oldContentTypes, contentTypes })=>{
@@ -12,6 +13,10 @@ const enable = async ({ oldContentTypes, contentTypes })=>{
12
13
  oldContentTypes,
13
14
  contentTypes
14
15
  });
16
+ await firstPublishedAt.enable({
17
+ oldContentTypes,
18
+ contentTypes
19
+ });
15
20
  };
16
21
  const disable = async ({ oldContentTypes, contentTypes })=>{
17
22
  await i18n.disable({
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/migrations/index.ts"],"sourcesContent":["import * as draftPublishMigrations from './draft-publish';\nimport * as i18nMigrations from './i18n';\nimport type { Input } from './draft-publish';\n\nconst enable = async ({ oldContentTypes, contentTypes }: Input) => {\n await i18nMigrations.enable({ oldContentTypes, contentTypes });\n await draftPublishMigrations.enable({ oldContentTypes, contentTypes });\n};\n\nconst disable = async ({ oldContentTypes, contentTypes }: Input) => {\n await i18nMigrations.disable({ oldContentTypes, contentTypes });\n await draftPublishMigrations.disable({ oldContentTypes, contentTypes });\n};\n\nexport { enable, disable };\n"],"names":["enable","oldContentTypes","contentTypes","i18nMigrations","draftPublishMigrations","disable"],"mappings":";;;;;AAIA,MAAMA,SAAS,OAAO,EAAEC,eAAe,EAAEC,YAAY,EAAS,GAAA;IAC5D,MAAMC,WAAqB,CAAC;AAAEF,QAAAA,eAAAA;AAAiBC,QAAAA;AAAa,KAAA,CAAA;IAC5D,MAAME,mBAA6B,CAAC;AAAEH,QAAAA,eAAAA;AAAiBC,QAAAA;AAAa,KAAA,CAAA;AACtE;AAEA,MAAMG,UAAU,OAAO,EAAEJ,eAAe,EAAEC,YAAY,EAAS,GAAA;IAC7D,MAAMC,YAAsB,CAAC;AAAEF,QAAAA,eAAAA;AAAiBC,QAAAA;AAAa,KAAA,CAAA;IAC7D,MAAME,oBAA8B,CAAC;AAAEH,QAAAA,eAAAA;AAAiBC,QAAAA;AAAa,KAAA,CAAA;AACvE;;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../src/migrations/index.ts"],"sourcesContent":["import * as draftPublishMigrations from './draft-publish';\nimport * as firstPublishedAt from './first-published-at';\nimport * as i18nMigrations from './i18n';\nimport type { Input } from './draft-publish';\n\nconst enable = async ({ oldContentTypes, contentTypes }: Input) => {\n await i18nMigrations.enable({ oldContentTypes, contentTypes });\n await draftPublishMigrations.enable({ oldContentTypes, contentTypes });\n await firstPublishedAt.enable({ oldContentTypes, contentTypes });\n};\n\nconst disable = async ({ oldContentTypes, contentTypes }: Input) => {\n await i18nMigrations.disable({ oldContentTypes, contentTypes });\n await draftPublishMigrations.disable({ oldContentTypes, contentTypes });\n};\n\nexport { enable, disable };\n"],"names":["enable","oldContentTypes","contentTypes","i18nMigrations","draftPublishMigrations","firstPublishedAt","disable"],"mappings":";;;;;;AAKA,MAAMA,SAAS,OAAO,EAAEC,eAAe,EAAEC,YAAY,EAAS,GAAA;IAC5D,MAAMC,WAAqB,CAAC;AAAEF,QAAAA,eAAAA;AAAiBC,QAAAA;AAAa,KAAA,CAAA;IAC5D,MAAME,mBAA6B,CAAC;AAAEH,QAAAA,eAAAA;AAAiBC,QAAAA;AAAa,KAAA,CAAA;IACpE,MAAMG,uBAAuB,CAAC;AAAEJ,QAAAA,eAAAA;AAAiBC,QAAAA;AAAa,KAAA,CAAA;AAChE;AAEA,MAAMI,UAAU,OAAO,EAAEL,eAAe,EAAEC,YAAY,EAAS,GAAA;IAC7D,MAAMC,YAAsB,CAAC;AAAEF,QAAAA,eAAAA;AAAiBC,QAAAA;AAAa,KAAA,CAAA;IAC7D,MAAME,oBAA8B,CAAC;AAAEH,QAAAA,eAAAA;AAAiBC,QAAAA;AAAa,KAAA,CAAA;AACvE;;;;;"}
@@ -1,4 +1,5 @@
1
1
  import { enable as enableDraftAndPublish, disable as disableDraftAndPublish } from './draft-publish.mjs';
2
+ import { enable as enableFirstPublishedAt } from './first-published-at.mjs';
2
3
  import { enable as enableI18n, disable as disableI18n } from './i18n.mjs';
3
4
 
4
5
  const enable = async ({ oldContentTypes, contentTypes })=>{
@@ -10,6 +11,10 @@ const enable = async ({ oldContentTypes, contentTypes })=>{
10
11
  oldContentTypes,
11
12
  contentTypes
12
13
  });
14
+ await enableFirstPublishedAt({
15
+ oldContentTypes,
16
+ contentTypes
17
+ });
13
18
  };
14
19
  const disable = async ({ oldContentTypes, contentTypes })=>{
15
20
  await disableI18n({
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../src/migrations/index.ts"],"sourcesContent":["import * as draftPublishMigrations from './draft-publish';\nimport * as i18nMigrations from './i18n';\nimport type { Input } from './draft-publish';\n\nconst enable = async ({ oldContentTypes, contentTypes }: Input) => {\n await i18nMigrations.enable({ oldContentTypes, contentTypes });\n await draftPublishMigrations.enable({ oldContentTypes, contentTypes });\n};\n\nconst disable = async ({ oldContentTypes, contentTypes }: Input) => {\n await i18nMigrations.disable({ oldContentTypes, contentTypes });\n await draftPublishMigrations.disable({ oldContentTypes, contentTypes });\n};\n\nexport { enable, disable };\n"],"names":["enable","oldContentTypes","contentTypes","i18nMigrations","draftPublishMigrations","disable"],"mappings":";;;AAIA,MAAMA,SAAS,OAAO,EAAEC,eAAe,EAAEC,YAAY,EAAS,GAAA;IAC5D,MAAMC,UAAqB,CAAC;AAAEF,QAAAA,eAAAA;AAAiBC,QAAAA;AAAa,KAAA,CAAA;IAC5D,MAAME,qBAA6B,CAAC;AAAEH,QAAAA,eAAAA;AAAiBC,QAAAA;AAAa,KAAA,CAAA;AACtE;AAEA,MAAMG,UAAU,OAAO,EAAEJ,eAAe,EAAEC,YAAY,EAAS,GAAA;IAC7D,MAAMC,WAAsB,CAAC;AAAEF,QAAAA,eAAAA;AAAiBC,QAAAA;AAAa,KAAA,CAAA;IAC7D,MAAME,sBAA8B,CAAC;AAAEH,QAAAA,eAAAA;AAAiBC,QAAAA;AAAa,KAAA,CAAA;AACvE;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../src/migrations/index.ts"],"sourcesContent":["import * as draftPublishMigrations from './draft-publish';\nimport * as firstPublishedAt from './first-published-at';\nimport * as i18nMigrations from './i18n';\nimport type { Input } from './draft-publish';\n\nconst enable = async ({ oldContentTypes, contentTypes }: Input) => {\n await i18nMigrations.enable({ oldContentTypes, contentTypes });\n await draftPublishMigrations.enable({ oldContentTypes, contentTypes });\n await firstPublishedAt.enable({ oldContentTypes, contentTypes });\n};\n\nconst disable = async ({ oldContentTypes, contentTypes }: Input) => {\n await i18nMigrations.disable({ oldContentTypes, contentTypes });\n await draftPublishMigrations.disable({ oldContentTypes, contentTypes });\n};\n\nexport { enable, disable };\n"],"names":["enable","oldContentTypes","contentTypes","i18nMigrations","draftPublishMigrations","firstPublishedAt","disable"],"mappings":";;;;AAKA,MAAMA,SAAS,OAAO,EAAEC,eAAe,EAAEC,YAAY,EAAS,GAAA;IAC5D,MAAMC,UAAqB,CAAC;AAAEF,QAAAA,eAAAA;AAAiBC,QAAAA;AAAa,KAAA,CAAA;IAC5D,MAAME,qBAA6B,CAAC;AAAEH,QAAAA,eAAAA;AAAiBC,QAAAA;AAAa,KAAA,CAAA;IACpE,MAAMG,sBAAuB,CAAC;AAAEJ,QAAAA,eAAAA;AAAiBC,QAAAA;AAAa,KAAA,CAAA;AAChE;AAEA,MAAMI,UAAU,OAAO,EAAEL,eAAe,EAAEC,YAAY,EAAS,GAAA;IAC7D,MAAMC,WAAsB,CAAC;AAAEF,QAAAA,eAAAA;AAAiBC,QAAAA;AAAa,KAAA,CAAA;IAC7D,MAAME,sBAA8B,CAAC;AAAEH,QAAAA,eAAAA;AAAiBC,QAAAA;AAAa,KAAA,CAAA;AACvE;;;;"}
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var name = "@strapi/core";
6
- var version = "0.0.0-experimental.1e4c115f717b021ca11c139584d4519db28ba786";
6
+ var version = "0.0.0-experimental.1f56e9319665c8cc385eb5e4178ceb6741c6d490";
7
7
  var description = "Core of Strapi";
8
8
  var homepage = "https://strapi.io";
9
9
  var bugs = {
@@ -59,14 +59,15 @@ var dependencies = {
59
59
  "@koa/cors": "5.0.0",
60
60
  "@koa/router": "12.0.2",
61
61
  "@paralleldrive/cuid2": "2.2.2",
62
- "@strapi/admin": "0.0.0-experimental.1e4c115f717b021ca11c139584d4519db28ba786",
63
- "@strapi/database": "0.0.0-experimental.1e4c115f717b021ca11c139584d4519db28ba786",
64
- "@strapi/generators": "0.0.0-experimental.1e4c115f717b021ca11c139584d4519db28ba786",
65
- "@strapi/logger": "0.0.0-experimental.1e4c115f717b021ca11c139584d4519db28ba786",
66
- "@strapi/permissions": "0.0.0-experimental.1e4c115f717b021ca11c139584d4519db28ba786",
67
- "@strapi/types": "0.0.0-experimental.1e4c115f717b021ca11c139584d4519db28ba786",
68
- "@strapi/typescript-utils": "0.0.0-experimental.1e4c115f717b021ca11c139584d4519db28ba786",
69
- "@strapi/utils": "0.0.0-experimental.1e4c115f717b021ca11c139584d4519db28ba786",
62
+ "@strapi/admin": "0.0.0-experimental.1f56e9319665c8cc385eb5e4178ceb6741c6d490",
63
+ "@strapi/database": "0.0.0-experimental.1f56e9319665c8cc385eb5e4178ceb6741c6d490",
64
+ "@strapi/generators": "0.0.0-experimental.1f56e9319665c8cc385eb5e4178ceb6741c6d490",
65
+ "@strapi/logger": "0.0.0-experimental.1f56e9319665c8cc385eb5e4178ceb6741c6d490",
66
+ "@strapi/permissions": "0.0.0-experimental.1f56e9319665c8cc385eb5e4178ceb6741c6d490",
67
+ "@strapi/types": "0.0.0-experimental.1f56e9319665c8cc385eb5e4178ceb6741c6d490",
68
+ "@strapi/typescript-utils": "0.0.0-experimental.1f56e9319665c8cc385eb5e4178ceb6741c6d490",
69
+ "@strapi/utils": "0.0.0-experimental.1f56e9319665c8cc385eb5e4178ceb6741c6d490",
70
+ "@vercel/stega": "0.1.2",
70
71
  bcryptjs: "2.4.3",
71
72
  boxen: "5.1.2",
72
73
  chalk: "4.1.2",
@@ -85,7 +86,9 @@ var dependencies = {
85
86
  "http-errors": "2.0.0",
86
87
  inquirer: "8.2.5",
87
88
  "is-docker": "2.2.1",
88
- koa: "2.15.4",
89
+ "json-logic-js": "2.0.5",
90
+ jsonwebtoken: "9.0.0",
91
+ koa: "2.16.1",
89
92
  "koa-body": "6.0.1",
90
93
  "koa-compose": "4.1.0",
91
94
  "koa-compress": "5.1.1",
@@ -108,7 +111,7 @@ var dependencies = {
108
111
  typescript: "5.4.4",
109
112
  undici: "6.21.2",
110
113
  yup: "0.32.9",
111
- zod: "next"
114
+ zod: "3.25.67"
112
115
  };
113
116
  var devDependencies = {
114
117
  "@strapi/ts-zen": "^0.2.0",
@@ -120,6 +123,7 @@ var devDependencies = {
120
123
  "@types/global-agent": "2.1.3",
121
124
  "@types/http-errors": "2.0.4",
122
125
  "@types/jest": "29.5.2",
126
+ "@types/json-logic-js": "2.0.8",
123
127
  "@types/koa": "2.13.4",
124
128
  "@types/koa-compress": "4.0.3",
125
129
  "@types/koa-session": "6.4.1",
@@ -130,9 +134,9 @@ var devDependencies = {
130
134
  "@types/node": "18.19.24",
131
135
  "@types/node-schedule": "2.1.7",
132
136
  "@types/statuses": "2.0.1",
133
- "eslint-config-custom": "0.0.0-experimental.1e4c115f717b021ca11c139584d4519db28ba786",
137
+ "eslint-config-custom": "0.0.0-experimental.1f56e9319665c8cc385eb5e4178ceb6741c6d490",
134
138
  supertest: "6.3.3",
135
- tsconfig: "0.0.0-experimental.1e4c115f717b021ca11c139584d4519db28ba786"
139
+ tsconfig: "0.0.0-experimental.1f56e9319665c8cc385eb5e4178ceb6741c6d490"
136
140
  };
137
141
  var engines = {
138
142
  node: ">=18.0.0 <=22.x.x",
@@ -1 +1 @@
1
- {"version":3,"file":"package.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"package.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,5 +1,5 @@
1
1
  var name = "@strapi/core";
2
- var version = "0.0.0-experimental.1e4c115f717b021ca11c139584d4519db28ba786";
2
+ var version = "0.0.0-experimental.1f56e9319665c8cc385eb5e4178ceb6741c6d490";
3
3
  var description = "Core of Strapi";
4
4
  var homepage = "https://strapi.io";
5
5
  var bugs = {
@@ -55,14 +55,15 @@ var dependencies = {
55
55
  "@koa/cors": "5.0.0",
56
56
  "@koa/router": "12.0.2",
57
57
  "@paralleldrive/cuid2": "2.2.2",
58
- "@strapi/admin": "0.0.0-experimental.1e4c115f717b021ca11c139584d4519db28ba786",
59
- "@strapi/database": "0.0.0-experimental.1e4c115f717b021ca11c139584d4519db28ba786",
60
- "@strapi/generators": "0.0.0-experimental.1e4c115f717b021ca11c139584d4519db28ba786",
61
- "@strapi/logger": "0.0.0-experimental.1e4c115f717b021ca11c139584d4519db28ba786",
62
- "@strapi/permissions": "0.0.0-experimental.1e4c115f717b021ca11c139584d4519db28ba786",
63
- "@strapi/types": "0.0.0-experimental.1e4c115f717b021ca11c139584d4519db28ba786",
64
- "@strapi/typescript-utils": "0.0.0-experimental.1e4c115f717b021ca11c139584d4519db28ba786",
65
- "@strapi/utils": "0.0.0-experimental.1e4c115f717b021ca11c139584d4519db28ba786",
58
+ "@strapi/admin": "0.0.0-experimental.1f56e9319665c8cc385eb5e4178ceb6741c6d490",
59
+ "@strapi/database": "0.0.0-experimental.1f56e9319665c8cc385eb5e4178ceb6741c6d490",
60
+ "@strapi/generators": "0.0.0-experimental.1f56e9319665c8cc385eb5e4178ceb6741c6d490",
61
+ "@strapi/logger": "0.0.0-experimental.1f56e9319665c8cc385eb5e4178ceb6741c6d490",
62
+ "@strapi/permissions": "0.0.0-experimental.1f56e9319665c8cc385eb5e4178ceb6741c6d490",
63
+ "@strapi/types": "0.0.0-experimental.1f56e9319665c8cc385eb5e4178ceb6741c6d490",
64
+ "@strapi/typescript-utils": "0.0.0-experimental.1f56e9319665c8cc385eb5e4178ceb6741c6d490",
65
+ "@strapi/utils": "0.0.0-experimental.1f56e9319665c8cc385eb5e4178ceb6741c6d490",
66
+ "@vercel/stega": "0.1.2",
66
67
  bcryptjs: "2.4.3",
67
68
  boxen: "5.1.2",
68
69
  chalk: "4.1.2",
@@ -81,7 +82,9 @@ var dependencies = {
81
82
  "http-errors": "2.0.0",
82
83
  inquirer: "8.2.5",
83
84
  "is-docker": "2.2.1",
84
- koa: "2.15.4",
85
+ "json-logic-js": "2.0.5",
86
+ jsonwebtoken: "9.0.0",
87
+ koa: "2.16.1",
85
88
  "koa-body": "6.0.1",
86
89
  "koa-compose": "4.1.0",
87
90
  "koa-compress": "5.1.1",
@@ -104,7 +107,7 @@ var dependencies = {
104
107
  typescript: "5.4.4",
105
108
  undici: "6.21.2",
106
109
  yup: "0.32.9",
107
- zod: "next"
110
+ zod: "3.25.67"
108
111
  };
109
112
  var devDependencies = {
110
113
  "@strapi/ts-zen": "^0.2.0",
@@ -116,6 +119,7 @@ var devDependencies = {
116
119
  "@types/global-agent": "2.1.3",
117
120
  "@types/http-errors": "2.0.4",
118
121
  "@types/jest": "29.5.2",
122
+ "@types/json-logic-js": "2.0.8",
119
123
  "@types/koa": "2.13.4",
120
124
  "@types/koa-compress": "4.0.3",
121
125
  "@types/koa-session": "6.4.1",
@@ -126,9 +130,9 @@ var devDependencies = {
126
130
  "@types/node": "18.19.24",
127
131
  "@types/node-schedule": "2.1.7",
128
132
  "@types/statuses": "2.0.1",
129
- "eslint-config-custom": "0.0.0-experimental.1e4c115f717b021ca11c139584d4519db28ba786",
133
+ "eslint-config-custom": "0.0.0-experimental.1f56e9319665c8cc385eb5e4178ceb6741c6d490",
130
134
  supertest: "6.3.3",
131
- tsconfig: "0.0.0-experimental.1e4c115f717b021ca11c139584d4519db28ba786"
135
+ tsconfig: "0.0.0-experimental.1f56e9319665c8cc385eb5e4178ceb6741c6d490"
132
136
  };
133
137
  var engines = {
134
138
  node: ">=18.0.0 <=22.x.x",
@@ -1 +1 @@
1
- {"version":3,"file":"package.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"package.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,eAAO,MAAM,SAAS,EAAE,QAAQ,EAA8D,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,eAAO,MAAM,SAAS,EAAE,QAAQ,EAQ/B,CAAC"}
@@ -4,6 +4,7 @@ var admin = require('./admin.js');
4
4
  var coreStore = require('./coreStore.js');
5
5
  var cron = require('./cron.js');
6
6
  var registries = require('./registries.js');
7
+ var sessionManager = require('./session-manager.js');
7
8
  var telemetry = require('./telemetry.js');
8
9
  var webhooks = require('./webhooks.js');
9
10
 
@@ -11,6 +12,7 @@ const providers = [
11
12
  registries,
12
13
  admin,
13
14
  coreStore,
15
+ sessionManager,
14
16
  webhooks,
15
17
  telemetry,
16
18
  cron
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/providers/index.ts"],"sourcesContent":["import admin from './admin';\nimport coreStore from './coreStore';\nimport cron from './cron';\nimport registries from './registries';\nimport telemetry from './telemetry';\nimport webhooks from './webhooks';\n\nimport type { Provider } from './provider';\n\nexport const providers: Provider[] = [registries, admin, coreStore, webhooks, telemetry, cron];\n"],"names":["providers","registries","admin","coreStore","webhooks","telemetry","cron"],"mappings":";;;;;;;;;MASaA,SAAwB,GAAA;AAACC,IAAAA,UAAAA;AAAYC,IAAAA,KAAAA;AAAOC,IAAAA,SAAAA;AAAWC,IAAAA,QAAAA;AAAUC,IAAAA,SAAAA;AAAWC,IAAAA;;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../src/providers/index.ts"],"sourcesContent":["import admin from './admin';\nimport coreStore from './coreStore';\nimport cron from './cron';\nimport registries from './registries';\nimport sessionManager from './session-manager';\nimport telemetry from './telemetry';\nimport webhooks from './webhooks';\n\nimport type { Provider } from './provider';\n\nexport const providers: Provider[] = [\n registries,\n admin,\n coreStore,\n sessionManager,\n webhooks,\n telemetry,\n cron,\n];\n"],"names":["providers","registries","admin","coreStore","sessionManager","webhooks","telemetry","cron"],"mappings":";;;;;;;;;;MAUaA,SAAwB,GAAA;AACnCC,IAAAA,UAAAA;AACAC,IAAAA,KAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,cAAAA;AACAC,IAAAA,QAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA;;;;;"}
@@ -2,6 +2,7 @@ import admin from './admin.mjs';
2
2
  import coreStore from './coreStore.mjs';
3
3
  import cron from './cron.mjs';
4
4
  import registries from './registries.mjs';
5
+ import sessionManager from './session-manager.mjs';
5
6
  import telemetry from './telemetry.mjs';
6
7
  import webhooks from './webhooks.mjs';
7
8
 
@@ -9,6 +10,7 @@ const providers = [
9
10
  registries,
10
11
  admin,
11
12
  coreStore,
13
+ sessionManager,
12
14
  webhooks,
13
15
  telemetry,
14
16
  cron
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../src/providers/index.ts"],"sourcesContent":["import admin from './admin';\nimport coreStore from './coreStore';\nimport cron from './cron';\nimport registries from './registries';\nimport telemetry from './telemetry';\nimport webhooks from './webhooks';\n\nimport type { Provider } from './provider';\n\nexport const providers: Provider[] = [registries, admin, coreStore, webhooks, telemetry, cron];\n"],"names":["providers","registries","admin","coreStore","webhooks","telemetry","cron"],"mappings":";;;;;;;MASaA,SAAwB,GAAA;AAACC,IAAAA,UAAAA;AAAYC,IAAAA,KAAAA;AAAOC,IAAAA,SAAAA;AAAWC,IAAAA,QAAAA;AAAUC,IAAAA,SAAAA;AAAWC,IAAAA;;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../src/providers/index.ts"],"sourcesContent":["import admin from './admin';\nimport coreStore from './coreStore';\nimport cron from './cron';\nimport registries from './registries';\nimport sessionManager from './session-manager';\nimport telemetry from './telemetry';\nimport webhooks from './webhooks';\n\nimport type { Provider } from './provider';\n\nexport const providers: Provider[] = [\n registries,\n admin,\n coreStore,\n sessionManager,\n webhooks,\n telemetry,\n cron,\n];\n"],"names":["providers","registries","admin","coreStore","sessionManager","webhooks","telemetry","cron"],"mappings":";;;;;;;;MAUaA,SAAwB,GAAA;AACnCC,IAAAA,UAAAA;AACAC,IAAAA,KAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,cAAAA;AACAC,IAAAA,QAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA;;;;;"}
@@ -0,0 +1,3 @@
1
+ declare const _default: import("./provider").Provider;
2
+ export default _default;
3
+ //# sourceMappingURL=session-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/providers/session-manager.ts"],"names":[],"mappings":";AAYA,wBAoBG"}
@@ -0,0 +1,23 @@
1
+ 'use strict';
2
+
3
+ var provider = require('./provider.js');
4
+ var sessionManager$1 = require('../services/session-manager.js');
5
+
6
+ var sessionManager = provider.defineProvider({
7
+ init (strapi) {
8
+ strapi.add('sessionManager', ()=>sessionManager$1.createSessionManager({
9
+ db: strapi.db
10
+ }));
11
+ },
12
+ async register (strapi) {
13
+ // Get JWT secret from admin auth settings (same as admin token service)
14
+ const adminAuth = strapi.config.get('admin.auth', {});
15
+ const jwtSecret = adminAuth.secret;
16
+ if (!jwtSecret) {
17
+ throw new Error('Missing admin.auth.secret configuration. The SessionManager requires a JWT secret');
18
+ }
19
+ }
20
+ });
21
+
22
+ module.exports = sessionManager;
23
+ //# sourceMappingURL=session-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-manager.js","sources":["../../src/providers/session-manager.ts"],"sourcesContent":["import type { Algorithm } from 'jsonwebtoken';\nimport { defineProvider } from './provider';\nimport { createSessionManager } from '../services/session-manager';\n\ninterface AdminAuthConfig {\n secret?: string;\n options?: {\n algorithm?: Algorithm;\n [key: string]: unknown;\n };\n}\n\nexport default defineProvider({\n init(strapi) {\n strapi.add('sessionManager', () =>\n createSessionManager({\n db: strapi.db,\n })\n );\n },\n\n async register(strapi) {\n // Get JWT secret from admin auth settings (same as admin token service)\n const adminAuth = strapi.config.get<AdminAuthConfig>('admin.auth', {});\n const jwtSecret = adminAuth.secret;\n\n if (!jwtSecret) {\n throw new Error(\n 'Missing admin.auth.secret configuration. The SessionManager requires a JWT secret'\n );\n }\n },\n});\n"],"names":["defineProvider","init","strapi","add","createSessionManager","db","register","adminAuth","config","get","jwtSecret","secret","Error"],"mappings":";;;;;AAYA,qBAAeA,uBAAe,CAAA;AAC5BC,IAAAA,IAAAA,CAAAA,CAAKC,MAAM,EAAA;AACTA,QAAAA,MAAAA,CAAOC,GAAG,CAAC,gBAAkB,EAAA,IAC3BC,qCAAqB,CAAA;AACnBC,gBAAAA,EAAAA,EAAIH,OAAOG;AACb,aAAA,CAAA,CAAA;AAEJ,KAAA;AAEA,IAAA,MAAMC,UAASJ,MAAM,EAAA;;AAEnB,QAAA,MAAMK,YAAYL,MAAOM,CAAAA,MAAM,CAACC,GAAG,CAAkB,cAAc,EAAC,CAAA;QACpE,MAAMC,SAAAA,GAAYH,UAAUI,MAAM;AAElC,QAAA,IAAI,CAACD,SAAW,EAAA;AACd,YAAA,MAAM,IAAIE,KACR,CAAA,mFAAA,CAAA;AAEJ;AACF;AACF,CAAG,CAAA;;;;"}