@actuate-media/cms-core 0.82.0 → 0.84.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 (780) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/api/routes/seo-public.d.ts.map +1 -1
  3. package/dist/api/routes/seo-public.js +45 -12
  4. package/dist/api/routes/seo-public.js.map +1 -1
  5. package/dist/content/structured-data.d.ts +1 -0
  6. package/dist/content/structured-data.d.ts.map +1 -1
  7. package/dist/content/structured-data.js +1 -1
  8. package/dist/content/structured-data.js.map +1 -1
  9. package/dist/next-site.d.ts +28 -0
  10. package/dist/next-site.d.ts.map +1 -0
  11. package/dist/next-site.js +58 -0
  12. package/dist/next-site.js.map +1 -0
  13. package/dist/sections/index.d.ts +2 -0
  14. package/dist/sections/index.d.ts.map +1 -1
  15. package/dist/sections/index.js +1 -0
  16. package/dist/sections/index.js.map +1 -1
  17. package/dist/sections/registry.d.ts.map +1 -1
  18. package/dist/sections/registry.js +86 -0
  19. package/dist/sections/registry.js.map +1 -1
  20. package/dist/sections/types.d.ts +1 -1
  21. package/dist/sections/types.d.ts.map +1 -1
  22. package/dist/sections/validate.d.ts.map +1 -1
  23. package/dist/sections/validate.js +23 -0
  24. package/dist/sections/validate.js.map +1 -1
  25. package/dist/sections/widget-embed.d.ts +45 -0
  26. package/dist/sections/widget-embed.d.ts.map +1 -0
  27. package/dist/sections/widget-embed.js +129 -0
  28. package/dist/sections/widget-embed.js.map +1 -0
  29. package/dist/seo/page-meta.d.ts.map +1 -1
  30. package/dist/seo/page-meta.js +11 -0
  31. package/dist/seo/page-meta.js.map +1 -1
  32. package/dist/seo/sitemap-public.d.ts +43 -0
  33. package/dist/seo/sitemap-public.d.ts.map +1 -0
  34. package/dist/seo/sitemap-public.js +213 -0
  35. package/dist/seo/sitemap-public.js.map +1 -0
  36. package/package.json +21 -1
  37. package/dist/__tests__/actions/document-crud.test.d.ts +0 -2
  38. package/dist/__tests__/actions/document-crud.test.d.ts.map +0 -1
  39. package/dist/__tests__/actions/document-crud.test.js +0 -442
  40. package/dist/__tests__/actions/document-crud.test.js.map +0 -1
  41. package/dist/__tests__/actions/seo-fields-update.test.d.ts +0 -2
  42. package/dist/__tests__/actions/seo-fields-update.test.d.ts.map +0 -1
  43. package/dist/__tests__/actions/seo-fields-update.test.js +0 -93
  44. package/dist/__tests__/actions/seo-fields-update.test.js.map +0 -1
  45. package/dist/__tests__/ai/ai.test.d.ts +0 -2
  46. package/dist/__tests__/ai/ai.test.d.ts.map +0 -1
  47. package/dist/__tests__/ai/ai.test.js +0 -266
  48. package/dist/__tests__/ai/ai.test.js.map +0 -1
  49. package/dist/__tests__/ai/brand-voice-alignment.test.d.ts +0 -2
  50. package/dist/__tests__/ai/brand-voice-alignment.test.d.ts.map +0 -1
  51. package/dist/__tests__/ai/brand-voice-alignment.test.js +0 -38
  52. package/dist/__tests__/ai/brand-voice-alignment.test.js.map +0 -1
  53. package/dist/__tests__/ai/brand-voice-analyze.test.d.ts +0 -2
  54. package/dist/__tests__/ai/brand-voice-analyze.test.d.ts.map +0 -1
  55. package/dist/__tests__/ai/brand-voice-analyze.test.js +0 -117
  56. package/dist/__tests__/ai/brand-voice-analyze.test.js.map +0 -1
  57. package/dist/__tests__/ai/brand-voice-document.test.d.ts +0 -2
  58. package/dist/__tests__/ai/brand-voice-document.test.d.ts.map +0 -1
  59. package/dist/__tests__/ai/brand-voice-document.test.js +0 -74
  60. package/dist/__tests__/ai/brand-voice-document.test.js.map +0 -1
  61. package/dist/__tests__/ai/brand-voice-fix.test.d.ts +0 -2
  62. package/dist/__tests__/ai/brand-voice-fix.test.d.ts.map +0 -1
  63. package/dist/__tests__/ai/brand-voice-fix.test.js +0 -34
  64. package/dist/__tests__/ai/brand-voice-fix.test.js.map +0 -1
  65. package/dist/__tests__/ai/brand-voice-sources.test.d.ts +0 -2
  66. package/dist/__tests__/ai/brand-voice-sources.test.d.ts.map +0 -1
  67. package/dist/__tests__/ai/brand-voice-sources.test.js +0 -14
  68. package/dist/__tests__/ai/brand-voice-sources.test.js.map +0 -1
  69. package/dist/__tests__/ai/brand-voice-structured.test.d.ts +0 -2
  70. package/dist/__tests__/ai/brand-voice-structured.test.d.ts.map +0 -1
  71. package/dist/__tests__/ai/brand-voice-structured.test.js +0 -49
  72. package/dist/__tests__/ai/brand-voice-structured.test.js.map +0 -1
  73. package/dist/__tests__/ai/brand-voice.test.d.ts +0 -2
  74. package/dist/__tests__/ai/brand-voice.test.d.ts.map +0 -1
  75. package/dist/__tests__/ai/brand-voice.test.js +0 -82
  76. package/dist/__tests__/ai/brand-voice.test.js.map +0 -1
  77. package/dist/__tests__/ai/content-writing-generate.test.d.ts +0 -2
  78. package/dist/__tests__/ai/content-writing-generate.test.d.ts.map +0 -1
  79. package/dist/__tests__/ai/content-writing-generate.test.js +0 -38
  80. package/dist/__tests__/ai/content-writing-generate.test.js.map +0 -1
  81. package/dist/__tests__/ai/resolve.test.d.ts +0 -2
  82. package/dist/__tests__/ai/resolve.test.d.ts.map +0 -1
  83. package/dist/__tests__/ai/resolve.test.js +0 -164
  84. package/dist/__tests__/ai/resolve.test.js.map +0 -1
  85. package/dist/__tests__/ai/runtime.test.d.ts +0 -2
  86. package/dist/__tests__/ai/runtime.test.d.ts.map +0 -1
  87. package/dist/__tests__/ai/runtime.test.js +0 -392
  88. package/dist/__tests__/ai/runtime.test.js.map +0 -1
  89. package/dist/__tests__/ai/sampling.test.d.ts +0 -2
  90. package/dist/__tests__/ai/sampling.test.d.ts.map +0 -1
  91. package/dist/__tests__/ai/sampling.test.js +0 -25
  92. package/dist/__tests__/ai/sampling.test.js.map +0 -1
  93. package/dist/__tests__/api/admin-contracts.test.d.ts +0 -2
  94. package/dist/__tests__/api/admin-contracts.test.d.ts.map +0 -1
  95. package/dist/__tests__/api/admin-contracts.test.js +0 -186
  96. package/dist/__tests__/api/admin-contracts.test.js.map +0 -1
  97. package/dist/__tests__/api/ai-crawlers.test.d.ts +0 -2
  98. package/dist/__tests__/api/ai-crawlers.test.d.ts.map +0 -1
  99. package/dist/__tests__/api/ai-crawlers.test.js +0 -194
  100. package/dist/__tests__/api/ai-crawlers.test.js.map +0 -1
  101. package/dist/__tests__/api/ai-quality.test.d.ts +0 -2
  102. package/dist/__tests__/api/ai-quality.test.d.ts.map +0 -1
  103. package/dist/__tests__/api/ai-quality.test.js +0 -721
  104. package/dist/__tests__/api/ai-quality.test.js.map +0 -1
  105. package/dist/__tests__/api/ai-status.test.d.ts +0 -2
  106. package/dist/__tests__/api/ai-status.test.d.ts.map +0 -1
  107. package/dist/__tests__/api/ai-status.test.js +0 -110
  108. package/dist/__tests__/api/ai-status.test.js.map +0 -1
  109. package/dist/__tests__/api/api-key-auth.test.d.ts +0 -2
  110. package/dist/__tests__/api/api-key-auth.test.d.ts.map +0 -1
  111. package/dist/__tests__/api/api-key-auth.test.js +0 -254
  112. package/dist/__tests__/api/api-key-auth.test.js.map +0 -1
  113. package/dist/__tests__/api/appearance-routes.test.d.ts +0 -2
  114. package/dist/__tests__/api/appearance-routes.test.d.ts.map +0 -1
  115. package/dist/__tests__/api/appearance-routes.test.js +0 -134
  116. package/dist/__tests__/api/appearance-routes.test.js.map +0 -1
  117. package/dist/__tests__/api/cache-headers.test.d.ts +0 -2
  118. package/dist/__tests__/api/cache-headers.test.d.ts.map +0 -1
  119. package/dist/__tests__/api/cache-headers.test.js +0 -135
  120. package/dist/__tests__/api/cache-headers.test.js.map +0 -1
  121. package/dist/__tests__/api/collection-introspection.test.d.ts +0 -2
  122. package/dist/__tests__/api/collection-introspection.test.d.ts.map +0 -1
  123. package/dist/__tests__/api/collection-introspection.test.js +0 -129
  124. package/dist/__tests__/api/collection-introspection.test.js.map +0 -1
  125. package/dist/__tests__/api/collection-read-access.test.d.ts +0 -2
  126. package/dist/__tests__/api/collection-read-access.test.d.ts.map +0 -1
  127. package/dist/__tests__/api/collection-read-access.test.js +0 -140
  128. package/dist/__tests__/api/collection-read-access.test.js.map +0 -1
  129. package/dist/__tests__/api/collections-ai-create.test.d.ts +0 -2
  130. package/dist/__tests__/api/collections-ai-create.test.d.ts.map +0 -1
  131. package/dist/__tests__/api/collections-ai-create.test.js +0 -313
  132. package/dist/__tests__/api/collections-ai-create.test.js.map +0 -1
  133. package/dist/__tests__/api/collections-discovery.test.d.ts +0 -2
  134. package/dist/__tests__/api/collections-discovery.test.d.ts.map +0 -1
  135. package/dist/__tests__/api/collections-discovery.test.js +0 -348
  136. package/dist/__tests__/api/collections-discovery.test.js.map +0 -1
  137. package/dist/__tests__/api/comments-routes.test.d.ts +0 -2
  138. package/dist/__tests__/api/comments-routes.test.d.ts.map +0 -1
  139. package/dist/__tests__/api/comments-routes.test.js +0 -266
  140. package/dist/__tests__/api/comments-routes.test.js.map +0 -1
  141. package/dist/__tests__/api/cron-routes.test.d.ts +0 -2
  142. package/dist/__tests__/api/cron-routes.test.d.ts.map +0 -1
  143. package/dist/__tests__/api/cron-routes.test.js +0 -67
  144. package/dist/__tests__/api/cron-routes.test.js.map +0 -1
  145. package/dist/__tests__/api/data-filters-routes.test.d.ts +0 -2
  146. package/dist/__tests__/api/data-filters-routes.test.d.ts.map +0 -1
  147. package/dist/__tests__/api/data-filters-routes.test.js +0 -131
  148. package/dist/__tests__/api/data-filters-routes.test.js.map +0 -1
  149. package/dist/__tests__/api/email-settings-routes.test.d.ts +0 -2
  150. package/dist/__tests__/api/email-settings-routes.test.d.ts.map +0 -1
  151. package/dist/__tests__/api/email-settings-routes.test.js +0 -240
  152. package/dist/__tests__/api/email-settings-routes.test.js.map +0 -1
  153. package/dist/__tests__/api/field-values-routes.test.d.ts +0 -2
  154. package/dist/__tests__/api/field-values-routes.test.d.ts.map +0 -1
  155. package/dist/__tests__/api/field-values-routes.test.js +0 -147
  156. package/dist/__tests__/api/field-values-routes.test.js.map +0 -1
  157. package/dist/__tests__/api/form-webhooks.test.d.ts +0 -2
  158. package/dist/__tests__/api/form-webhooks.test.d.ts.map +0 -1
  159. package/dist/__tests__/api/form-webhooks.test.js +0 -162
  160. package/dist/__tests__/api/form-webhooks.test.js.map +0 -1
  161. package/dist/__tests__/api/globals-routes.test.d.ts +0 -2
  162. package/dist/__tests__/api/globals-routes.test.d.ts.map +0 -1
  163. package/dist/__tests__/api/globals-routes.test.js +0 -100
  164. package/dist/__tests__/api/globals-routes.test.js.map +0 -1
  165. package/dist/__tests__/api/health.test.d.ts +0 -2
  166. package/dist/__tests__/api/health.test.d.ts.map +0 -1
  167. package/dist/__tests__/api/health.test.js +0 -144
  168. package/dist/__tests__/api/health.test.js.map +0 -1
  169. package/dist/__tests__/api/llms-txt.test.d.ts +0 -2
  170. package/dist/__tests__/api/llms-txt.test.d.ts.map +0 -1
  171. package/dist/__tests__/api/llms-txt.test.js +0 -423
  172. package/dist/__tests__/api/llms-txt.test.js.map +0 -1
  173. package/dist/__tests__/api/md-route.test.d.ts +0 -2
  174. package/dist/__tests__/api/md-route.test.d.ts.map +0 -1
  175. package/dist/__tests__/api/md-route.test.js +0 -106
  176. package/dist/__tests__/api/md-route.test.js.map +0 -1
  177. package/dist/__tests__/api/media-upload-storage.test.d.ts +0 -2
  178. package/dist/__tests__/api/media-upload-storage.test.d.ts.map +0 -1
  179. package/dist/__tests__/api/media-upload-storage.test.js +0 -171
  180. package/dist/__tests__/api/media-upload-storage.test.js.map +0 -1
  181. package/dist/__tests__/api/notifications-routes.test.d.ts +0 -2
  182. package/dist/__tests__/api/notifications-routes.test.d.ts.map +0 -1
  183. package/dist/__tests__/api/notifications-routes.test.js +0 -270
  184. package/dist/__tests__/api/notifications-routes.test.js.map +0 -1
  185. package/dist/__tests__/api/page-sections-routes.test.d.ts +0 -2
  186. package/dist/__tests__/api/page-sections-routes.test.d.ts.map +0 -1
  187. package/dist/__tests__/api/page-sections-routes.test.js +0 -501
  188. package/dist/__tests__/api/page-sections-routes.test.js.map +0 -1
  189. package/dist/__tests__/api/preview-and-scheduling.test.d.ts +0 -2
  190. package/dist/__tests__/api/preview-and-scheduling.test.d.ts.map +0 -1
  191. package/dist/__tests__/api/preview-and-scheduling.test.js +0 -479
  192. package/dist/__tests__/api/preview-and-scheduling.test.js.map +0 -1
  193. package/dist/__tests__/api/public-forms.test.d.ts +0 -2
  194. package/dist/__tests__/api/public-forms.test.d.ts.map +0 -1
  195. package/dist/__tests__/api/public-forms.test.js +0 -125
  196. package/dist/__tests__/api/public-forms.test.js.map +0 -1
  197. package/dist/__tests__/api/public-globals.test.d.ts +0 -2
  198. package/dist/__tests__/api/public-globals.test.d.ts.map +0 -1
  199. package/dist/__tests__/api/public-globals.test.js +0 -96
  200. package/dist/__tests__/api/public-globals.test.js.map +0 -1
  201. package/dist/__tests__/api/public-navigations.test.d.ts +0 -2
  202. package/dist/__tests__/api/public-navigations.test.d.ts.map +0 -1
  203. package/dist/__tests__/api/public-navigations.test.js +0 -77
  204. package/dist/__tests__/api/public-navigations.test.js.map +0 -1
  205. package/dist/__tests__/api/public-seo.test.d.ts +0 -2
  206. package/dist/__tests__/api/public-seo.test.d.ts.map +0 -1
  207. package/dist/__tests__/api/public-seo.test.js +0 -833
  208. package/dist/__tests__/api/public-seo.test.js.map +0 -1
  209. package/dist/__tests__/api/resolve-layout-bridge.test.d.ts +0 -2
  210. package/dist/__tests__/api/resolve-layout-bridge.test.d.ts.map +0 -1
  211. package/dist/__tests__/api/resolve-layout-bridge.test.js +0 -165
  212. package/dist/__tests__/api/resolve-layout-bridge.test.js.map +0 -1
  213. package/dist/__tests__/api/route-contracts.test.d.ts +0 -2
  214. package/dist/__tests__/api/route-contracts.test.d.ts.map +0 -1
  215. package/dist/__tests__/api/route-contracts.test.js +0 -462
  216. package/dist/__tests__/api/route-contracts.test.js.map +0 -1
  217. package/dist/__tests__/api/security-routes.test.d.ts +0 -2
  218. package/dist/__tests__/api/security-routes.test.d.ts.map +0 -1
  219. package/dist/__tests__/api/security-routes.test.js +0 -212
  220. package/dist/__tests__/api/security-routes.test.js.map +0 -1
  221. package/dist/__tests__/api/seo-read-access.test.d.ts +0 -2
  222. package/dist/__tests__/api/seo-read-access.test.d.ts.map +0 -1
  223. package/dist/__tests__/api/seo-read-access.test.js +0 -101
  224. package/dist/__tests__/api/seo-read-access.test.js.map +0 -1
  225. package/dist/__tests__/api/seo-summary-ssrf.test.d.ts +0 -2
  226. package/dist/__tests__/api/seo-summary-ssrf.test.d.ts.map +0 -1
  227. package/dist/__tests__/api/seo-summary-ssrf.test.js +0 -80
  228. package/dist/__tests__/api/seo-summary-ssrf.test.js.map +0 -1
  229. package/dist/__tests__/api/sitemap-pagination.test.d.ts +0 -2
  230. package/dist/__tests__/api/sitemap-pagination.test.d.ts.map +0 -1
  231. package/dist/__tests__/api/sitemap-pagination.test.js +0 -100
  232. package/dist/__tests__/api/sitemap-pagination.test.js.map +0 -1
  233. package/dist/__tests__/api/stats-collection-filter.test.d.ts +0 -2
  234. package/dist/__tests__/api/stats-collection-filter.test.d.ts.map +0 -1
  235. package/dist/__tests__/api/stats-collection-filter.test.js +0 -190
  236. package/dist/__tests__/api/stats-collection-filter.test.js.map +0 -1
  237. package/dist/__tests__/api/stats-routes.test.d.ts +0 -2
  238. package/dist/__tests__/api/stats-routes.test.d.ts.map +0 -1
  239. package/dist/__tests__/api/stats-routes.test.js +0 -251
  240. package/dist/__tests__/api/stats-routes.test.js.map +0 -1
  241. package/dist/__tests__/api/stats-seo-cache.test.d.ts +0 -2
  242. package/dist/__tests__/api/stats-seo-cache.test.d.ts.map +0 -1
  243. package/dist/__tests__/api/stats-seo-cache.test.js +0 -96
  244. package/dist/__tests__/api/stats-seo-cache.test.js.map +0 -1
  245. package/dist/__tests__/api/totp-login.test.d.ts +0 -2
  246. package/dist/__tests__/api/totp-login.test.d.ts.map +0 -1
  247. package/dist/__tests__/api/totp-login.test.js +0 -115
  248. package/dist/__tests__/api/totp-login.test.js.map +0 -1
  249. package/dist/__tests__/api/updates-routes.test.d.ts +0 -2
  250. package/dist/__tests__/api/updates-routes.test.d.ts.map +0 -1
  251. package/dist/__tests__/api/updates-routes.test.js +0 -248
  252. package/dist/__tests__/api/updates-routes.test.js.map +0 -1
  253. package/dist/__tests__/api/users-detail.test.d.ts +0 -2
  254. package/dist/__tests__/api/users-detail.test.d.ts.map +0 -1
  255. package/dist/__tests__/api/users-detail.test.js +0 -401
  256. package/dist/__tests__/api/users-detail.test.js.map +0 -1
  257. package/dist/__tests__/api/users-invite.test.d.ts +0 -2
  258. package/dist/__tests__/api/users-invite.test.d.ts.map +0 -1
  259. package/dist/__tests__/api/users-invite.test.js +0 -221
  260. package/dist/__tests__/api/users-invite.test.js.map +0 -1
  261. package/dist/__tests__/api/users-search.test.d.ts +0 -2
  262. package/dist/__tests__/api/users-search.test.d.ts.map +0 -1
  263. package/dist/__tests__/api/users-search.test.js +0 -182
  264. package/dist/__tests__/api/users-search.test.js.map +0 -1
  265. package/dist/__tests__/appearance/appearance.test.d.ts +0 -2
  266. package/dist/__tests__/appearance/appearance.test.d.ts.map +0 -1
  267. package/dist/__tests__/appearance/appearance.test.js +0 -287
  268. package/dist/__tests__/appearance/appearance.test.js.map +0 -1
  269. package/dist/__tests__/appearance/favicon-icon.test.d.ts +0 -2
  270. package/dist/__tests__/appearance/favicon-icon.test.d.ts.map +0 -1
  271. package/dist/__tests__/appearance/favicon-icon.test.js +0 -12
  272. package/dist/__tests__/appearance/favicon-icon.test.js.map +0 -1
  273. package/dist/__tests__/auth/invites.test.d.ts +0 -2
  274. package/dist/__tests__/auth/invites.test.d.ts.map +0 -1
  275. package/dist/__tests__/auth/invites.test.js +0 -181
  276. package/dist/__tests__/auth/invites.test.js.map +0 -1
  277. package/dist/__tests__/auth/oauth.test.d.ts +0 -2
  278. package/dist/__tests__/auth/oauth.test.d.ts.map +0 -1
  279. package/dist/__tests__/auth/oauth.test.js +0 -408
  280. package/dist/__tests__/auth/oauth.test.js.map +0 -1
  281. package/dist/__tests__/auth/password.test.d.ts +0 -2
  282. package/dist/__tests__/auth/password.test.d.ts.map +0 -1
  283. package/dist/__tests__/auth/password.test.js +0 -226
  284. package/dist/__tests__/auth/password.test.js.map +0 -1
  285. package/dist/__tests__/auth/reset.test.d.ts +0 -2
  286. package/dist/__tests__/auth/reset.test.d.ts.map +0 -1
  287. package/dist/__tests__/auth/reset.test.js +0 -355
  288. package/dist/__tests__/auth/reset.test.js.map +0 -1
  289. package/dist/__tests__/auth/roles.test.d.ts +0 -2
  290. package/dist/__tests__/auth/roles.test.d.ts.map +0 -1
  291. package/dist/__tests__/auth/roles.test.js +0 -60
  292. package/dist/__tests__/auth/roles.test.js.map +0 -1
  293. package/dist/__tests__/auth/session.test.d.ts +0 -2
  294. package/dist/__tests__/auth/session.test.d.ts.map +0 -1
  295. package/dist/__tests__/auth/session.test.js +0 -119
  296. package/dist/__tests__/auth/session.test.js.map +0 -1
  297. package/dist/__tests__/auth/team.test.d.ts +0 -2
  298. package/dist/__tests__/auth/team.test.d.ts.map +0 -1
  299. package/dist/__tests__/auth/team.test.js +0 -154
  300. package/dist/__tests__/auth/team.test.js.map +0 -1
  301. package/dist/__tests__/auth/totp.test.d.ts +0 -2
  302. package/dist/__tests__/auth/totp.test.d.ts.map +0 -1
  303. package/dist/__tests__/auth/totp.test.js +0 -52
  304. package/dist/__tests__/auth/totp.test.js.map +0 -1
  305. package/dist/__tests__/auth/user-admin.test.d.ts +0 -2
  306. package/dist/__tests__/auth/user-admin.test.d.ts.map +0 -1
  307. package/dist/__tests__/auth/user-admin.test.js +0 -200
  308. package/dist/__tests__/auth/user-admin.test.js.map +0 -1
  309. package/dist/__tests__/billing/stripe-meter.test.d.ts +0 -2
  310. package/dist/__tests__/billing/stripe-meter.test.d.ts.map +0 -1
  311. package/dist/__tests__/billing/stripe-meter.test.js +0 -86
  312. package/dist/__tests__/billing/stripe-meter.test.js.map +0 -1
  313. package/dist/__tests__/codegen/generate-types.test.d.ts +0 -2
  314. package/dist/__tests__/codegen/generate-types.test.d.ts.map +0 -1
  315. package/dist/__tests__/codegen/generate-types.test.js +0 -173
  316. package/dist/__tests__/codegen/generate-types.test.js.map +0 -1
  317. package/dist/__tests__/collections/presets.test.d.ts +0 -2
  318. package/dist/__tests__/collections/presets.test.d.ts.map +0 -1
  319. package/dist/__tests__/collections/presets.test.js +0 -184
  320. package/dist/__tests__/collections/presets.test.js.map +0 -1
  321. package/dist/__tests__/config/runtime.test.d.ts +0 -2
  322. package/dist/__tests__/config/runtime.test.d.ts.map +0 -1
  323. package/dist/__tests__/config/runtime.test.js +0 -65
  324. package/dist/__tests__/config/runtime.test.js.map +0 -1
  325. package/dist/__tests__/content/slug.test.d.ts +0 -2
  326. package/dist/__tests__/content/slug.test.d.ts.map +0 -1
  327. package/dist/__tests__/content/slug.test.js +0 -68
  328. package/dist/__tests__/content/slug.test.js.map +0 -1
  329. package/dist/__tests__/content-health/scanner.test.d.ts +0 -2
  330. package/dist/__tests__/content-health/scanner.test.d.ts.map +0 -1
  331. package/dist/__tests__/content-health/scanner.test.js +0 -151
  332. package/dist/__tests__/content-health/scanner.test.js.map +0 -1
  333. package/dist/__tests__/cron/cron.test.d.ts +0 -2
  334. package/dist/__tests__/cron/cron.test.d.ts.map +0 -1
  335. package/dist/__tests__/cron/cron.test.js +0 -340
  336. package/dist/__tests__/cron/cron.test.js.map +0 -1
  337. package/dist/__tests__/db/model-types-freshness.test.d.ts +0 -2
  338. package/dist/__tests__/db/model-types-freshness.test.d.ts.map +0 -1
  339. package/dist/__tests__/db/model-types-freshness.test.js +0 -46
  340. package/dist/__tests__/db/model-types-freshness.test.js.map +0 -1
  341. package/dist/__tests__/diagnostics/api-metrics.test.d.ts +0 -2
  342. package/dist/__tests__/diagnostics/api-metrics.test.d.ts.map +0 -1
  343. package/dist/__tests__/diagnostics/api-metrics.test.js +0 -153
  344. package/dist/__tests__/diagnostics/api-metrics.test.js.map +0 -1
  345. package/dist/__tests__/diagnostics/env.test.d.ts +0 -2
  346. package/dist/__tests__/diagnostics/env.test.d.ts.map +0 -1
  347. package/dist/__tests__/diagnostics/env.test.js +0 -247
  348. package/dist/__tests__/diagnostics/env.test.js.map +0 -1
  349. package/dist/__tests__/diagnostics/logger.test.d.ts +0 -2
  350. package/dist/__tests__/diagnostics/logger.test.d.ts.map +0 -1
  351. package/dist/__tests__/diagnostics/logger.test.js +0 -111
  352. package/dist/__tests__/diagnostics/logger.test.js.map +0 -1
  353. package/dist/__tests__/diagnostics/sentry.test.d.ts +0 -2
  354. package/dist/__tests__/diagnostics/sentry.test.d.ts.map +0 -1
  355. package/dist/__tests__/diagnostics/sentry.test.js +0 -60
  356. package/dist/__tests__/diagnostics/sentry.test.js.map +0 -1
  357. package/dist/__tests__/email/resolve.test.d.ts +0 -2
  358. package/dist/__tests__/email/resolve.test.d.ts.map +0 -1
  359. package/dist/__tests__/email/resolve.test.js +0 -90
  360. package/dist/__tests__/email/resolve.test.js.map +0 -1
  361. package/dist/__tests__/email/sender.test.d.ts +0 -2
  362. package/dist/__tests__/email/sender.test.d.ts.map +0 -1
  363. package/dist/__tests__/email/sender.test.js +0 -33
  364. package/dist/__tests__/email/sender.test.js.map +0 -1
  365. package/dist/__tests__/email/settings-store.test.d.ts +0 -2
  366. package/dist/__tests__/email/settings-store.test.d.ts.map +0 -1
  367. package/dist/__tests__/email/settings-store.test.js +0 -149
  368. package/dist/__tests__/email/settings-store.test.js.map +0 -1
  369. package/dist/__tests__/fields/component-block.test.d.ts +0 -2
  370. package/dist/__tests__/fields/component-block.test.d.ts.map +0 -1
  371. package/dist/__tests__/fields/component-block.test.js +0 -129
  372. package/dist/__tests__/fields/component-block.test.js.map +0 -1
  373. package/dist/__tests__/fields/presets.test.d.ts +0 -2
  374. package/dist/__tests__/fields/presets.test.d.ts.map +0 -1
  375. package/dist/__tests__/fields/presets.test.js +0 -99
  376. package/dist/__tests__/fields/presets.test.js.map +0 -1
  377. package/dist/__tests__/fields/relations.test.d.ts +0 -2
  378. package/dist/__tests__/fields/relations.test.d.ts.map +0 -1
  379. package/dist/__tests__/fields/relations.test.js +0 -297
  380. package/dist/__tests__/fields/relations.test.js.map +0 -1
  381. package/dist/__tests__/forms/client-validation.test.d.ts +0 -2
  382. package/dist/__tests__/forms/client-validation.test.d.ts.map +0 -1
  383. package/dist/__tests__/forms/client-validation.test.js +0 -98
  384. package/dist/__tests__/forms/client-validation.test.js.map +0 -1
  385. package/dist/__tests__/forms/encryption.test.d.ts +0 -2
  386. package/dist/__tests__/forms/encryption.test.d.ts.map +0 -1
  387. package/dist/__tests__/forms/encryption.test.js +0 -84
  388. package/dist/__tests__/forms/encryption.test.js.map +0 -1
  389. package/dist/__tests__/forms/entries-export.test.d.ts +0 -2
  390. package/dist/__tests__/forms/entries-export.test.d.ts.map +0 -1
  391. package/dist/__tests__/forms/entries-export.test.js +0 -69
  392. package/dist/__tests__/forms/entries-export.test.js.map +0 -1
  393. package/dist/__tests__/forms/forms-service.test.d.ts +0 -2
  394. package/dist/__tests__/forms/forms-service.test.d.ts.map +0 -1
  395. package/dist/__tests__/forms/forms-service.test.js +0 -193
  396. package/dist/__tests__/forms/forms-service.test.js.map +0 -1
  397. package/dist/__tests__/forms/notify.test.d.ts +0 -2
  398. package/dist/__tests__/forms/notify.test.d.ts.map +0 -1
  399. package/dist/__tests__/forms/notify.test.js +0 -114
  400. package/dist/__tests__/forms/notify.test.js.map +0 -1
  401. package/dist/__tests__/forms/spam.test.d.ts +0 -2
  402. package/dist/__tests__/forms/spam.test.d.ts.map +0 -1
  403. package/dist/__tests__/forms/spam.test.js +0 -115
  404. package/dist/__tests__/forms/spam.test.js.map +0 -1
  405. package/dist/__tests__/forms/submission-files.test.d.ts +0 -2
  406. package/dist/__tests__/forms/submission-files.test.d.ts.map +0 -1
  407. package/dist/__tests__/forms/submission-files.test.js +0 -65
  408. package/dist/__tests__/forms/submission-files.test.js.map +0 -1
  409. package/dist/__tests__/forms/submission-pipeline.test.d.ts +0 -2
  410. package/dist/__tests__/forms/submission-pipeline.test.d.ts.map +0 -1
  411. package/dist/__tests__/forms/submission-pipeline.test.js +0 -131
  412. package/dist/__tests__/forms/submission-pipeline.test.js.map +0 -1
  413. package/dist/__tests__/forms/submission-validation.test.d.ts +0 -2
  414. package/dist/__tests__/forms/submission-validation.test.d.ts.map +0 -1
  415. package/dist/__tests__/forms/submission-validation.test.js +0 -108
  416. package/dist/__tests__/forms/submission-validation.test.js.map +0 -1
  417. package/dist/__tests__/forms/webhooks.test.d.ts +0 -2
  418. package/dist/__tests__/forms/webhooks.test.d.ts.map +0 -1
  419. package/dist/__tests__/forms/webhooks.test.js +0 -203
  420. package/dist/__tests__/forms/webhooks.test.js.map +0 -1
  421. package/dist/__tests__/media/seo.test.d.ts +0 -2
  422. package/dist/__tests__/media/seo.test.d.ts.map +0 -1
  423. package/dist/__tests__/media/seo.test.js +0 -186
  424. package/dist/__tests__/media/seo.test.js.map +0 -1
  425. package/dist/__tests__/middleware.test.d.ts +0 -2
  426. package/dist/__tests__/middleware.test.d.ts.map +0 -1
  427. package/dist/__tests__/middleware.test.js +0 -127
  428. package/dist/__tests__/middleware.test.js.map +0 -1
  429. package/dist/__tests__/next.test.d.ts +0 -2
  430. package/dist/__tests__/next.test.d.ts.map +0 -1
  431. package/dist/__tests__/next.test.js +0 -118
  432. package/dist/__tests__/next.test.js.map +0 -1
  433. package/dist/__tests__/plan/features.test.d.ts +0 -2
  434. package/dist/__tests__/plan/features.test.d.ts.map +0 -1
  435. package/dist/__tests__/plan/features.test.js +0 -35
  436. package/dist/__tests__/plan/features.test.js.map +0 -1
  437. package/dist/__tests__/preview-event-bus.test.d.ts +0 -2
  438. package/dist/__tests__/preview-event-bus.test.d.ts.map +0 -1
  439. package/dist/__tests__/preview-event-bus.test.js +0 -89
  440. package/dist/__tests__/preview-event-bus.test.js.map +0 -1
  441. package/dist/__tests__/preview-sse-stream.test.d.ts +0 -2
  442. package/dist/__tests__/preview-sse-stream.test.d.ts.map +0 -1
  443. package/dist/__tests__/preview-sse-stream.test.js +0 -117
  444. package/dist/__tests__/preview-sse-stream.test.js.map +0 -1
  445. package/dist/__tests__/preview.test.d.ts +0 -2
  446. package/dist/__tests__/preview.test.d.ts.map +0 -1
  447. package/dist/__tests__/preview.test.js +0 -71
  448. package/dist/__tests__/preview.test.js.map +0 -1
  449. package/dist/__tests__/realtime/comments.test.d.ts +0 -2
  450. package/dist/__tests__/realtime/comments.test.d.ts.map +0 -1
  451. package/dist/__tests__/realtime/comments.test.js +0 -508
  452. package/dist/__tests__/realtime/comments.test.js.map +0 -1
  453. package/dist/__tests__/realtime/gateway-ws-integration.test.d.ts +0 -2
  454. package/dist/__tests__/realtime/gateway-ws-integration.test.d.ts.map +0 -1
  455. package/dist/__tests__/realtime/gateway-ws-integration.test.js +0 -170
  456. package/dist/__tests__/realtime/gateway-ws-integration.test.js.map +0 -1
  457. package/dist/__tests__/realtime/gateway.test.d.ts +0 -2
  458. package/dist/__tests__/realtime/gateway.test.d.ts.map +0 -1
  459. package/dist/__tests__/realtime/gateway.test.js +0 -402
  460. package/dist/__tests__/realtime/gateway.test.js.map +0 -1
  461. package/dist/__tests__/realtime/notification-bus.test.d.ts +0 -2
  462. package/dist/__tests__/realtime/notification-bus.test.d.ts.map +0 -1
  463. package/dist/__tests__/realtime/notification-bus.test.js +0 -79
  464. package/dist/__tests__/realtime/notification-bus.test.js.map +0 -1
  465. package/dist/__tests__/realtime/notification-stream.test.d.ts +0 -2
  466. package/dist/__tests__/realtime/notification-stream.test.d.ts.map +0 -1
  467. package/dist/__tests__/realtime/notification-stream.test.js +0 -157
  468. package/dist/__tests__/realtime/notification-stream.test.js.map +0 -1
  469. package/dist/__tests__/realtime/notifications.test.d.ts +0 -2
  470. package/dist/__tests__/realtime/notifications.test.d.ts.map +0 -1
  471. package/dist/__tests__/realtime/notifications.test.js +0 -330
  472. package/dist/__tests__/realtime/notifications.test.js.map +0 -1
  473. package/dist/__tests__/realtime/persistence.test.d.ts +0 -2
  474. package/dist/__tests__/realtime/persistence.test.d.ts.map +0 -1
  475. package/dist/__tests__/realtime/persistence.test.js +0 -124
  476. package/dist/__tests__/realtime/persistence.test.js.map +0 -1
  477. package/dist/__tests__/redirects/auto-301.test.d.ts +0 -2
  478. package/dist/__tests__/redirects/auto-301.test.d.ts.map +0 -1
  479. package/dist/__tests__/redirects/auto-301.test.js +0 -172
  480. package/dist/__tests__/redirects/auto-301.test.js.map +0 -1
  481. package/dist/__tests__/redirects/graph.test.d.ts +0 -2
  482. package/dist/__tests__/redirects/graph.test.d.ts.map +0 -1
  483. package/dist/__tests__/redirects/graph.test.js +0 -104
  484. package/dist/__tests__/redirects/graph.test.js.map +0 -1
  485. package/dist/__tests__/redirects/suggest.test.d.ts +0 -2
  486. package/dist/__tests__/redirects/suggest.test.d.ts.map +0 -1
  487. package/dist/__tests__/redirects/suggest.test.js +0 -28
  488. package/dist/__tests__/redirects/suggest.test.js.map +0 -1
  489. package/dist/__tests__/scheduling/scheduling.test.d.ts +0 -2
  490. package/dist/__tests__/scheduling/scheduling.test.d.ts.map +0 -1
  491. package/dist/__tests__/scheduling/scheduling.test.js +0 -110
  492. package/dist/__tests__/scheduling/scheduling.test.js.map +0 -1
  493. package/dist/__tests__/schema-preview-features.test.d.ts +0 -2
  494. package/dist/__tests__/schema-preview-features.test.d.ts.map +0 -1
  495. package/dist/__tests__/schema-preview-features.test.js +0 -42
  496. package/dist/__tests__/schema-preview-features.test.js.map +0 -1
  497. package/dist/__tests__/sections/sections-migrate.test.d.ts +0 -2
  498. package/dist/__tests__/sections/sections-migrate.test.d.ts.map +0 -1
  499. package/dist/__tests__/sections/sections-migrate.test.js +0 -145
  500. package/dist/__tests__/sections/sections-migrate.test.js.map +0 -1
  501. package/dist/__tests__/security/access.test.d.ts +0 -2
  502. package/dist/__tests__/security/access.test.d.ts.map +0 -1
  503. package/dist/__tests__/security/access.test.js +0 -181
  504. package/dist/__tests__/security/access.test.js.map +0 -1
  505. package/dist/__tests__/security/api-key-enhanced.test.d.ts +0 -2
  506. package/dist/__tests__/security/api-key-enhanced.test.d.ts.map +0 -1
  507. package/dist/__tests__/security/api-key-enhanced.test.js +0 -110
  508. package/dist/__tests__/security/api-key-enhanced.test.js.map +0 -1
  509. package/dist/__tests__/security/audit.test.d.ts +0 -2
  510. package/dist/__tests__/security/audit.test.d.ts.map +0 -1
  511. package/dist/__tests__/security/audit.test.js +0 -50
  512. package/dist/__tests__/security/audit.test.js.map +0 -1
  513. package/dist/__tests__/security/center.test.d.ts +0 -2
  514. package/dist/__tests__/security/center.test.d.ts.map +0 -1
  515. package/dist/__tests__/security/center.test.js +0 -226
  516. package/dist/__tests__/security/center.test.js.map +0 -1
  517. package/dist/__tests__/security/client-ip.test.d.ts +0 -2
  518. package/dist/__tests__/security/client-ip.test.d.ts.map +0 -1
  519. package/dist/__tests__/security/client-ip.test.js +0 -37
  520. package/dist/__tests__/security/client-ip.test.js.map +0 -1
  521. package/dist/__tests__/security/csrf.test.d.ts +0 -2
  522. package/dist/__tests__/security/csrf.test.d.ts.map +0 -1
  523. package/dist/__tests__/security/csrf.test.js +0 -40
  524. package/dist/__tests__/security/csrf.test.js.map +0 -1
  525. package/dist/__tests__/security/encrypted-fields.test.d.ts +0 -2
  526. package/dist/__tests__/security/encrypted-fields.test.d.ts.map +0 -1
  527. package/dist/__tests__/security/encrypted-fields.test.js +0 -60
  528. package/dist/__tests__/security/encrypted-fields.test.js.map +0 -1
  529. package/dist/__tests__/security/ip-allowlist.test.d.ts +0 -2
  530. package/dist/__tests__/security/ip-allowlist.test.d.ts.map +0 -1
  531. package/dist/__tests__/security/ip-allowlist.test.js +0 -40
  532. package/dist/__tests__/security/ip-allowlist.test.js.map +0 -1
  533. package/dist/__tests__/security/rate-limit.test.d.ts +0 -2
  534. package/dist/__tests__/security/rate-limit.test.d.ts.map +0 -1
  535. package/dist/__tests__/security/rate-limit.test.js +0 -199
  536. package/dist/__tests__/security/rate-limit.test.js.map +0 -1
  537. package/dist/__tests__/security/reauth.test.d.ts +0 -2
  538. package/dist/__tests__/security/reauth.test.d.ts.map +0 -1
  539. package/dist/__tests__/security/reauth.test.js +0 -30
  540. package/dist/__tests__/security/reauth.test.js.map +0 -1
  541. package/dist/__tests__/security/redact.test.d.ts +0 -2
  542. package/dist/__tests__/security/redact.test.d.ts.map +0 -1
  543. package/dist/__tests__/security/redact.test.js +0 -31
  544. package/dist/__tests__/security/redact.test.js.map +0 -1
  545. package/dist/__tests__/security/safe-fetch.test.d.ts +0 -2
  546. package/dist/__tests__/security/safe-fetch.test.d.ts.map +0 -1
  547. package/dist/__tests__/security/safe-fetch.test.js +0 -97
  548. package/dist/__tests__/security/safe-fetch.test.js.map +0 -1
  549. package/dist/__tests__/security/sanitize-document.test.d.ts +0 -2
  550. package/dist/__tests__/security/sanitize-document.test.d.ts.map +0 -1
  551. package/dist/__tests__/security/sanitize-document.test.js +0 -146
  552. package/dist/__tests__/security/sanitize-document.test.js.map +0 -1
  553. package/dist/__tests__/security/sanitize.test.d.ts +0 -2
  554. package/dist/__tests__/security/sanitize.test.d.ts.map +0 -1
  555. package/dist/__tests__/security/sanitize.test.js +0 -75
  556. package/dist/__tests__/security/sanitize.test.js.map +0 -1
  557. package/dist/__tests__/security/secret-storage.test.d.ts +0 -2
  558. package/dist/__tests__/security/secret-storage.test.d.ts.map +0 -1
  559. package/dist/__tests__/security/secret-storage.test.js +0 -42
  560. package/dist/__tests__/security/secret-storage.test.js.map +0 -1
  561. package/dist/__tests__/security/ssrf.test.d.ts +0 -2
  562. package/dist/__tests__/security/ssrf.test.d.ts.map +0 -1
  563. package/dist/__tests__/security/ssrf.test.js +0 -209
  564. package/dist/__tests__/security/ssrf.test.js.map +0 -1
  565. package/dist/__tests__/security/upload-magic.test.d.ts +0 -2
  566. package/dist/__tests__/security/upload-magic.test.d.ts.map +0 -1
  567. package/dist/__tests__/security/upload-magic.test.js +0 -55
  568. package/dist/__tests__/security/upload-magic.test.js.map +0 -1
  569. package/dist/__tests__/seo/ai-bots.test.d.ts +0 -2
  570. package/dist/__tests__/seo/ai-bots.test.d.ts.map +0 -1
  571. package/dist/__tests__/seo/ai-bots.test.js +0 -92
  572. package/dist/__tests__/seo/ai-bots.test.js.map +0 -1
  573. package/dist/__tests__/seo/alt-text.test.d.ts +0 -2
  574. package/dist/__tests__/seo/alt-text.test.d.ts.map +0 -1
  575. package/dist/__tests__/seo/alt-text.test.js +0 -47
  576. package/dist/__tests__/seo/alt-text.test.js.map +0 -1
  577. package/dist/__tests__/seo/analysis-markdown.test.d.ts +0 -2
  578. package/dist/__tests__/seo/analysis-markdown.test.d.ts.map +0 -1
  579. package/dist/__tests__/seo/analysis-markdown.test.js +0 -57
  580. package/dist/__tests__/seo/analysis-markdown.test.js.map +0 -1
  581. package/dist/__tests__/seo/audit-engine.test.d.ts +0 -2
  582. package/dist/__tests__/seo/audit-engine.test.d.ts.map +0 -1
  583. package/dist/__tests__/seo/audit-engine.test.js +0 -181
  584. package/dist/__tests__/seo/audit-engine.test.js.map +0 -1
  585. package/dist/__tests__/seo/audit-runner.test.d.ts +0 -2
  586. package/dist/__tests__/seo/audit-runner.test.d.ts.map +0 -1
  587. package/dist/__tests__/seo/audit-runner.test.js +0 -204
  588. package/dist/__tests__/seo/audit-runner.test.js.map +0 -1
  589. package/dist/__tests__/seo/audit-signals.test.d.ts +0 -2
  590. package/dist/__tests__/seo/audit-signals.test.d.ts.map +0 -1
  591. package/dist/__tests__/seo/audit-signals.test.js +0 -30
  592. package/dist/__tests__/seo/audit-signals.test.js.map +0 -1
  593. package/dist/__tests__/seo/config-store.test.d.ts +0 -2
  594. package/dist/__tests__/seo/config-store.test.d.ts.map +0 -1
  595. package/dist/__tests__/seo/config-store.test.js +0 -31
  596. package/dist/__tests__/seo/config-store.test.js.map +0 -1
  597. package/dist/__tests__/seo/content-markdown.test.d.ts +0 -2
  598. package/dist/__tests__/seo/content-markdown.test.d.ts.map +0 -1
  599. package/dist/__tests__/seo/content-markdown.test.js +0 -124
  600. package/dist/__tests__/seo/content-markdown.test.js.map +0 -1
  601. package/dist/__tests__/seo/effective-meta.test.d.ts +0 -2
  602. package/dist/__tests__/seo/effective-meta.test.d.ts.map +0 -1
  603. package/dist/__tests__/seo/effective-meta.test.js +0 -58
  604. package/dist/__tests__/seo/effective-meta.test.js.map +0 -1
  605. package/dist/__tests__/seo/feeds.test.d.ts +0 -2
  606. package/dist/__tests__/seo/feeds.test.d.ts.map +0 -1
  607. package/dist/__tests__/seo/feeds.test.js +0 -61
  608. package/dist/__tests__/seo/feeds.test.js.map +0 -1
  609. package/dist/__tests__/seo/fix-brief-export.test.d.ts +0 -2
  610. package/dist/__tests__/seo/fix-brief-export.test.d.ts.map +0 -1
  611. package/dist/__tests__/seo/fix-brief-export.test.js +0 -153
  612. package/dist/__tests__/seo/fix-brief-export.test.js.map +0 -1
  613. package/dist/__tests__/seo/freshness.test.d.ts +0 -2
  614. package/dist/__tests__/seo/freshness.test.d.ts.map +0 -1
  615. package/dist/__tests__/seo/freshness.test.js +0 -89
  616. package/dist/__tests__/seo/freshness.test.js.map +0 -1
  617. package/dist/__tests__/seo/index-status.test.d.ts +0 -2
  618. package/dist/__tests__/seo/index-status.test.d.ts.map +0 -1
  619. package/dist/__tests__/seo/index-status.test.js +0 -140
  620. package/dist/__tests__/seo/index-status.test.js.map +0 -1
  621. package/dist/__tests__/seo/internal-collections.test.d.ts +0 -2
  622. package/dist/__tests__/seo/internal-collections.test.d.ts.map +0 -1
  623. package/dist/__tests__/seo/internal-collections.test.js +0 -27
  624. package/dist/__tests__/seo/internal-collections.test.js.map +0 -1
  625. package/dist/__tests__/seo/issue-batch-briefs.test.d.ts +0 -2
  626. package/dist/__tests__/seo/issue-batch-briefs.test.d.ts.map +0 -1
  627. package/dist/__tests__/seo/issue-batch-briefs.test.js +0 -64
  628. package/dist/__tests__/seo/issue-batch-briefs.test.js.map +0 -1
  629. package/dist/__tests__/seo/issue-content-brief.test.d.ts +0 -2
  630. package/dist/__tests__/seo/issue-content-brief.test.d.ts.map +0 -1
  631. package/dist/__tests__/seo/issue-content-brief.test.js +0 -107
  632. package/dist/__tests__/seo/issue-content-brief.test.js.map +0 -1
  633. package/dist/__tests__/seo/issue-content-research.test.d.ts +0 -2
  634. package/dist/__tests__/seo/issue-content-research.test.d.ts.map +0 -1
  635. package/dist/__tests__/seo/issue-content-research.test.js +0 -114
  636. package/dist/__tests__/seo/issue-content-research.test.js.map +0 -1
  637. package/dist/__tests__/seo/issue-fix-ai.test.d.ts +0 -2
  638. package/dist/__tests__/seo/issue-fix-ai.test.d.ts.map +0 -1
  639. package/dist/__tests__/seo/issue-fix-ai.test.js +0 -96
  640. package/dist/__tests__/seo/issue-fix-ai.test.js.map +0 -1
  641. package/dist/__tests__/seo/issue-fix-orchestrator.test.d.ts +0 -2
  642. package/dist/__tests__/seo/issue-fix-orchestrator.test.d.ts.map +0 -1
  643. package/dist/__tests__/seo/issue-fix-orchestrator.test.js +0 -48
  644. package/dist/__tests__/seo/issue-fix-orchestrator.test.js.map +0 -1
  645. package/dist/__tests__/seo/issue-fix.test.d.ts +0 -2
  646. package/dist/__tests__/seo/issue-fix.test.d.ts.map +0 -1
  647. package/dist/__tests__/seo/issue-fix.test.js +0 -98
  648. package/dist/__tests__/seo/issue-fix.test.js.map +0 -1
  649. package/dist/__tests__/seo/llms-sanitize.test.d.ts +0 -2
  650. package/dist/__tests__/seo/llms-sanitize.test.d.ts.map +0 -1
  651. package/dist/__tests__/seo/llms-sanitize.test.js +0 -74
  652. package/dist/__tests__/seo/llms-sanitize.test.js.map +0 -1
  653. package/dist/__tests__/seo/meta-tags-alternates.test.d.ts +0 -2
  654. package/dist/__tests__/seo/meta-tags-alternates.test.d.ts.map +0 -1
  655. package/dist/__tests__/seo/meta-tags-alternates.test.js +0 -52
  656. package/dist/__tests__/seo/meta-tags-alternates.test.js.map +0 -1
  657. package/dist/__tests__/seo/migrate-meta.test.d.ts +0 -2
  658. package/dist/__tests__/seo/migrate-meta.test.d.ts.map +0 -1
  659. package/dist/__tests__/seo/migrate-meta.test.js +0 -75
  660. package/dist/__tests__/seo/migrate-meta.test.js.map +0 -1
  661. package/dist/__tests__/seo/migrate-schema.test.d.ts +0 -2
  662. package/dist/__tests__/seo/migrate-schema.test.d.ts.map +0 -1
  663. package/dist/__tests__/seo/migrate-schema.test.js +0 -97
  664. package/dist/__tests__/seo/migrate-schema.test.js.map +0 -1
  665. package/dist/__tests__/seo/page-meta.test.d.ts +0 -2
  666. package/dist/__tests__/seo/page-meta.test.d.ts.map +0 -1
  667. package/dist/__tests__/seo/page-meta.test.js +0 -452
  668. package/dist/__tests__/seo/page-meta.test.js.map +0 -1
  669. package/dist/__tests__/seo/resolve-path.test.d.ts +0 -2
  670. package/dist/__tests__/seo/resolve-path.test.d.ts.map +0 -1
  671. package/dist/__tests__/seo/resolve-path.test.js +0 -46
  672. package/dist/__tests__/seo/resolve-path.test.js.map +0 -1
  673. package/dist/__tests__/seo/robots.test.d.ts +0 -2
  674. package/dist/__tests__/seo/robots.test.d.ts.map +0 -1
  675. package/dist/__tests__/seo/robots.test.js +0 -72
  676. package/dist/__tests__/seo/robots.test.js.map +0 -1
  677. package/dist/__tests__/seo/schema-sync.test.d.ts +0 -2
  678. package/dist/__tests__/seo/schema-sync.test.d.ts.map +0 -1
  679. package/dist/__tests__/seo/schema-sync.test.js +0 -59
  680. package/dist/__tests__/seo/schema-sync.test.js.map +0 -1
  681. package/dist/__tests__/seo/score.test.d.ts +0 -2
  682. package/dist/__tests__/seo/score.test.d.ts.map +0 -1
  683. package/dist/__tests__/seo/score.test.js +0 -152
  684. package/dist/__tests__/seo/score.test.js.map +0 -1
  685. package/dist/__tests__/seo/settings-defaults.test.d.ts +0 -2
  686. package/dist/__tests__/seo/settings-defaults.test.d.ts.map +0 -1
  687. package/dist/__tests__/seo/settings-defaults.test.js +0 -189
  688. package/dist/__tests__/seo/settings-defaults.test.js.map +0 -1
  689. package/dist/__tests__/seo/sitemap-notify.test.d.ts +0 -2
  690. package/dist/__tests__/seo/sitemap-notify.test.d.ts.map +0 -1
  691. package/dist/__tests__/seo/sitemap-notify.test.js +0 -267
  692. package/dist/__tests__/seo/sitemap-notify.test.js.map +0 -1
  693. package/dist/__tests__/server-site.test.d.ts +0 -2
  694. package/dist/__tests__/server-site.test.d.ts.map +0 -1
  695. package/dist/__tests__/server-site.test.js +0 -173
  696. package/dist/__tests__/server-site.test.js.map +0 -1
  697. package/dist/__tests__/setup/index.test.d.ts +0 -2
  698. package/dist/__tests__/setup/index.test.d.ts.map +0 -1
  699. package/dist/__tests__/setup/index.test.js +0 -128
  700. package/dist/__tests__/setup/index.test.js.map +0 -1
  701. package/dist/__tests__/site.test.d.ts +0 -2
  702. package/dist/__tests__/site.test.d.ts.map +0 -1
  703. package/dist/__tests__/site.test.js +0 -81
  704. package/dist/__tests__/site.test.js.map +0 -1
  705. package/dist/__tests__/storage/auto-wire.test.d.ts +0 -2
  706. package/dist/__tests__/storage/auto-wire.test.d.ts.map +0 -1
  707. package/dist/__tests__/storage/auto-wire.test.js +0 -73
  708. package/dist/__tests__/storage/auto-wire.test.js.map +0 -1
  709. package/dist/__tests__/upgrade/version-check.test.d.ts +0 -2
  710. package/dist/__tests__/upgrade/version-check.test.d.ts.map +0 -1
  711. package/dist/__tests__/upgrade/version-check.test.js +0 -98
  712. package/dist/__tests__/upgrade/version-check.test.js.map +0 -1
  713. package/dist/__tests__/validation/publish.test.d.ts +0 -2
  714. package/dist/__tests__/validation/publish.test.d.ts.map +0 -1
  715. package/dist/__tests__/validation/publish.test.js +0 -164
  716. package/dist/__tests__/validation/publish.test.js.map +0 -1
  717. package/dist/__tests__/webhooks/webhooks.test.d.ts +0 -2
  718. package/dist/__tests__/webhooks/webhooks.test.d.ts.map +0 -1
  719. package/dist/__tests__/webhooks/webhooks.test.js +0 -96
  720. package/dist/__tests__/webhooks/webhooks.test.js.map +0 -1
  721. package/dist/cache/__tests__/http.test.d.ts +0 -2
  722. package/dist/cache/__tests__/http.test.d.ts.map +0 -1
  723. package/dist/cache/__tests__/http.test.js +0 -285
  724. package/dist/cache/__tests__/http.test.js.map +0 -1
  725. package/dist/db/__tests__/find-in-batches.test.d.ts +0 -2
  726. package/dist/db/__tests__/find-in-batches.test.d.ts.map +0 -1
  727. package/dist/db/__tests__/find-in-batches.test.js +0 -26
  728. package/dist/db/__tests__/find-in-batches.test.js.map +0 -1
  729. package/dist/fields/__tests__/presets.test.d.ts +0 -2
  730. package/dist/fields/__tests__/presets.test.d.ts.map +0 -1
  731. package/dist/fields/__tests__/presets.test.js +0 -29
  732. package/dist/fields/__tests__/presets.test.js.map +0 -1
  733. package/dist/page-builder/__tests__/a11y-fix.test.d.ts +0 -2
  734. package/dist/page-builder/__tests__/a11y-fix.test.d.ts.map +0 -1
  735. package/dist/page-builder/__tests__/a11y-fix.test.js +0 -242
  736. package/dist/page-builder/__tests__/a11y-fix.test.js.map +0 -1
  737. package/dist/page-builder/__tests__/blocks.test.d.ts +0 -2
  738. package/dist/page-builder/__tests__/blocks.test.d.ts.map +0 -1
  739. package/dist/page-builder/__tests__/blocks.test.js +0 -194
  740. package/dist/page-builder/__tests__/blocks.test.js.map +0 -1
  741. package/dist/page-builder/__tests__/design-scorer.test.d.ts +0 -2
  742. package/dist/page-builder/__tests__/design-scorer.test.d.ts.map +0 -1
  743. package/dist/page-builder/__tests__/design-scorer.test.js +0 -301
  744. package/dist/page-builder/__tests__/design-scorer.test.js.map +0 -1
  745. package/dist/page-builder/__tests__/schema.test.d.ts +0 -2
  746. package/dist/page-builder/__tests__/schema.test.d.ts.map +0 -1
  747. package/dist/page-builder/__tests__/schema.test.js +0 -191
  748. package/dist/page-builder/__tests__/schema.test.js.map +0 -1
  749. package/dist/page-builder/__tests__/seo-analyzer.test.d.ts +0 -2
  750. package/dist/page-builder/__tests__/seo-analyzer.test.d.ts.map +0 -1
  751. package/dist/page-builder/__tests__/seo-analyzer.test.js +0 -346
  752. package/dist/page-builder/__tests__/seo-analyzer.test.js.map +0 -1
  753. package/dist/page-builder/__tests__/tree.test.d.ts +0 -2
  754. package/dist/page-builder/__tests__/tree.test.d.ts.map +0 -1
  755. package/dist/page-builder/__tests__/tree.test.js +0 -257
  756. package/dist/page-builder/__tests__/tree.test.js.map +0 -1
  757. package/dist/posts/__tests__/query.test.d.ts +0 -2
  758. package/dist/posts/__tests__/query.test.d.ts.map +0 -1
  759. package/dist/posts/__tests__/query.test.js +0 -70
  760. package/dist/posts/__tests__/query.test.js.map +0 -1
  761. package/dist/sections/__tests__/bridge.test.d.ts +0 -2
  762. package/dist/sections/__tests__/bridge.test.d.ts.map +0 -1
  763. package/dist/sections/__tests__/bridge.test.js +0 -171
  764. package/dist/sections/__tests__/bridge.test.js.map +0 -1
  765. package/dist/sections/__tests__/define.test.d.ts +0 -2
  766. package/dist/sections/__tests__/define.test.d.ts.map +0 -1
  767. package/dist/sections/__tests__/define.test.js +0 -132
  768. package/dist/sections/__tests__/define.test.js.map +0 -1
  769. package/dist/sections/__tests__/embed.test.d.ts +0 -2
  770. package/dist/sections/__tests__/embed.test.d.ts.map +0 -1
  771. package/dist/sections/__tests__/embed.test.js +0 -54
  772. package/dist/sections/__tests__/embed.test.js.map +0 -1
  773. package/dist/sections/__tests__/media-enrich.test.d.ts +0 -2
  774. package/dist/sections/__tests__/media-enrich.test.d.ts.map +0 -1
  775. package/dist/sections/__tests__/media-enrich.test.js +0 -97
  776. package/dist/sections/__tests__/media-enrich.test.js.map +0 -1
  777. package/dist/sections/__tests__/sections.test.d.ts +0 -2
  778. package/dist/sections/__tests__/sections.test.d.ts.map +0 -1
  779. package/dist/sections/__tests__/sections.test.js +0 -453
  780. package/dist/sections/__tests__/sections.test.js.map +0 -1
@@ -1,226 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { hashPassword, verifyPassword, validatePasswordPolicy, needsRehash, compareToDummyHash, _waitForDummyHashReady, PBKDF2_ITERATIONS, } from '../../auth/password.js';
3
- describe('hashPassword', () => {
4
- it(`returns a string in format "pbkdf2:${PBKDF2_ITERATIONS}:salt:hash"`, async () => {
5
- const hash = await hashPassword('MySecret123!');
6
- const parts = hash.split(':');
7
- expect(parts).toHaveLength(4);
8
- expect(parts[0]).toBe('pbkdf2');
9
- expect(parts[1]).toBe(String(PBKDF2_ITERATIONS));
10
- expect(parts[2]).toMatch(/^[0-9a-f]{32}$/);
11
- expect(parts[3]).toMatch(/^[0-9a-f]{64}$/);
12
- });
13
- it('uses at least 600,000 iterations (OWASP 2023+ guidance)', () => {
14
- expect(PBKDF2_ITERATIONS).toBeGreaterThanOrEqual(600_000);
15
- });
16
- it('produces different hashes for the same password (random salt)', async () => {
17
- const hash1 = await hashPassword('SamePassword');
18
- const hash2 = await hashPassword('SamePassword');
19
- expect(hash1).not.toBe(hash2);
20
- });
21
- });
22
- describe('verifyPassword', () => {
23
- it('returns true for correct password', async () => {
24
- const hash = await hashPassword('Correct!Horse1');
25
- const result = await verifyPassword('Correct!Horse1', hash);
26
- expect(result).toBe(true);
27
- });
28
- it('returns false for wrong password', async () => {
29
- const hash = await hashPassword('Correct!Horse1');
30
- const result = await verifyPassword('WrongPassword9!', hash);
31
- expect(result).toBe(false);
32
- });
33
- it('returns false for malformed hash (missing parts)', async () => {
34
- const result = await verifyPassword('anything', 'not-a-valid-hash');
35
- expect(result).toBe(false);
36
- });
37
- it('returns false for malformed hash (empty segments)', async () => {
38
- const result = await verifyPassword('anything', 'pbkdf2:100000::');
39
- expect(result).toBe(false);
40
- });
41
- it('verifies legacy 100k-iteration hashes (back-compat)', async () => {
42
- // Build a legacy-style hash by hand with 100k iterations.
43
- const password = 'LegacyPass1!';
44
- const salt = crypto.getRandomValues(new Uint8Array(16));
45
- const key = await crypto.subtle.importKey('raw', new TextEncoder().encode(password), 'PBKDF2', false, ['deriveBits']);
46
- const derived = await crypto.subtle.deriveBits({ name: 'PBKDF2', salt, iterations: 100_000, hash: 'SHA-256' }, key, 256);
47
- const legacy = `pbkdf2:100000:${Buffer.from(salt).toString('hex')}:${Buffer.from(derived).toString('hex')}`;
48
- expect(await verifyPassword(password, legacy)).toBe(true);
49
- expect(await verifyPassword('wrong', legacy)).toBe(false);
50
- });
51
- it('rejects absurdly low iteration counts (corruption guard)', async () => {
52
- const result = await verifyPassword('anything', 'pbkdf2:100:abc:def');
53
- expect(result).toBe(false);
54
- });
55
- it('rejects absurdly high iteration counts (DoS guard)', async () => {
56
- const result = await verifyPassword('anything', 'pbkdf2:99999999:abc:def');
57
- expect(result).toBe(false);
58
- });
59
- });
60
- describe('needsRehash', () => {
61
- it('returns true for old 100k-iteration hashes', () => {
62
- expect(needsRehash('pbkdf2:100000:abc:def')).toBe(true);
63
- });
64
- it('returns false for current 600k-iteration hashes', async () => {
65
- const hash = await hashPassword('Test1234!');
66
- expect(needsRehash(hash)).toBe(false);
67
- });
68
- it('returns false for malformed hash', () => {
69
- expect(needsRehash('not-a-hash')).toBe(false);
70
- expect(needsRehash('pbkdf2:notanumber:abc:def')).toBe(false);
71
- });
72
- });
73
- describe('compareToDummyHash', () => {
74
- it('always returns false (dummy hash never matches a real password)', async () => {
75
- const a = await compareToDummyHash('any password');
76
- const b = await compareToDummyHash('different password');
77
- const c = await compareToDummyHash('');
78
- expect(a).toBe(false);
79
- expect(b).toBe(false);
80
- expect(c).toBe(false);
81
- });
82
- it('takes meaningful CPU time (defends user-enumeration timing channel)', async () => {
83
- // The whole point is that this isn't a no-op. We can't assert exact ms in
84
- // CI, but we can confirm it doesn't return synchronously.
85
- const start = performance.now();
86
- await compareToDummyHash('Some submitted password');
87
- const elapsed = performance.now() - start;
88
- // 600k iterations of PBKDF2-HMAC-SHA256 takes ~50-300ms on a typical CI
89
- // worker. We assert >5ms as a generous lower bound that still catches
90
- // a stub returning instantly.
91
- expect(elapsed).toBeGreaterThan(5);
92
- });
93
- // Bugbot review #4 (PR #40): the original implementation lazily
94
- // initialised the dummy hash on first call, making the first non-existent
95
- // user login take ~2× the time of subsequent ones (one hashPassword +
96
- // one verifyPassword vs just verifyPassword). That recreated the
97
- // user-enumeration timing channel the dummy hash exists to close. The
98
- // fix precomputes the hash via a top-level Promise — by the time the
99
- // first user request arrives, the work is either done or already
100
- // in-flight.
101
- //
102
- // Two warmups needed to measure verify-only cost on CI:
103
- // 1. `_waitForDummyHashReady()` — wait for the eager hash precompute
104
- // so the first measured call isn't paying that extra ~150ms.
105
- // 2. Throwaway `compareToDummyHash('worker-warmup')` — warm Node's
106
- // libuv worker pool used by `crypto.pbkdf2`. The first PBKDF2
107
- // call across the entire process pays a ~100-150ms cold-start
108
- // to spawn the worker thread + initialise the C++ binding
109
- // context; subsequent calls reuse it. Without this warmup, the
110
- // test failed on `main` (run 26599207053) with e1=291ms vs
111
- // e2=150ms — same ~2× ratio as the historical lazy-init bug it
112
- // was meant to catch, but caused by worker-pool warmup rather
113
- // than a regression in the dummy-hash path.
114
- //
115
- // After both warmups, e1 and e2 measure the *same* verifyPassword
116
- // path. Reverting PR #40 (re-introducing lazy init) would make e1
117
- // also include a fresh hashPassword call (~150ms) — still ~2× e2 —
118
- // and the bound would catch it.
119
- it('first measured call has parity with subsequent calls after eager init resolves', async () => {
120
- await _waitForDummyHashReady();
121
- // Throwaway: warm Node's libuv crypto worker pool (see comment above).
122
- await compareToDummyHash('worker-warmup');
123
- // Timing assertions on shared CI runners are noisy: a single GC pause or
124
- // scheduler quantum on either sample can spike the e1/e2 ratio (see this
125
- // file's history — runs 26599207053 and 27183423830 both flaked here, the
126
- // latter blocking a publish). A genuine lazy-init regression is *consistent*
127
- // (~2× on every iteration, because the first call would also pay for a full
128
- // hashPassword), whereas noise is intermittent. So take a best-of-N: pass as
129
- // soon as one iteration is within tolerance, and only fail if EVERY attempt
130
- // exceeds it. The eager-init contract itself is independently guarded by the
131
- // structural test below (`_waitForDummyHashReady` resolving).
132
- const ATTEMPTS = 5;
133
- let lastE1 = 0;
134
- let lastBound = 0;
135
- let withinTolerance = false;
136
- for (let i = 0; i < ATTEMPTS && !withinTolerance; i++) {
137
- const t1 = performance.now();
138
- await compareToDummyHash('first');
139
- const e1 = performance.now() - t1;
140
- const t2 = performance.now();
141
- await compareToDummyHash('second');
142
- const e2 = performance.now() - t2;
143
- // Both calls run only verifyPassword on a warm worker pool. The tolerance
144
- // (1.6× + 50ms) absorbs GC pauses and scheduler quanta; without eager init
145
- // the ratio is ~2× and would blow this bound on every attempt.
146
- lastE1 = e1;
147
- lastBound = e2 * 1.6 + 50;
148
- withinTolerance = e1 < lastBound;
149
- }
150
- expect(withinTolerance, `e1=${lastE1.toFixed(1)}ms exceeded the ${lastBound.toFixed(1)}ms bound on all ${ATTEMPTS} attempts ` +
151
- `(consistent ~2× ratio suggests lazy-init regression; intermittent would have passed one attempt)`).toBe(true);
152
- });
153
- it('exposes the eager-init promise for direct verification', async () => {
154
- // Module-load contract: `_waitForDummyHashReady()` MUST return a
155
- // promise that resolves with no work pending on the consumer side.
156
- // If a future refactor accidentally drops the top-level invocation
157
- // and switches back to lazy init, this test catches it because the
158
- // promise either won't exist or won't resolve without a triggering
159
- // call.
160
- await expect(_waitForDummyHashReady()).resolves.toBeUndefined();
161
- });
162
- });
163
- describe('validatePasswordPolicy', () => {
164
- it('passes when password meets all requirements', () => {
165
- const result = validatePasswordPolicy('Str0ng!Pass', {
166
- minLength: 8,
167
- requireUppercase: true,
168
- requireLowercase: true,
169
- requireNumbers: true,
170
- requireSpecialChars: true,
171
- });
172
- expect(result.valid).toBe(true);
173
- expect(result.errors).toHaveLength(0);
174
- });
175
- it('fails when password is too short', () => {
176
- const result = validatePasswordPolicy('Sh1!', {
177
- minLength: 8,
178
- });
179
- expect(result.valid).toBe(false);
180
- expect(result.errors).toContain('Password must be at least 8 characters');
181
- });
182
- it('fails when missing uppercase', () => {
183
- const result = validatePasswordPolicy('alllowercase1!', {
184
- requireUppercase: true,
185
- });
186
- expect(result.valid).toBe(false);
187
- expect(result.errors).toContain('Password must contain an uppercase letter');
188
- });
189
- it('fails when missing lowercase', () => {
190
- const result = validatePasswordPolicy('ALLUPPERCASE1!', {
191
- requireLowercase: true,
192
- });
193
- expect(result.valid).toBe(false);
194
- expect(result.errors).toContain('Password must contain a lowercase letter');
195
- });
196
- it('fails when missing digits', () => {
197
- const result = validatePasswordPolicy('NoDigits!Here', {
198
- requireNumbers: true,
199
- });
200
- expect(result.valid).toBe(false);
201
- expect(result.errors).toContain('Password must contain a digit');
202
- });
203
- it('fails when missing special characters', () => {
204
- const result = validatePasswordPolicy('NoSpecial1Chars', {
205
- requireSpecialChars: true,
206
- });
207
- expect(result.valid).toBe(false);
208
- expect(result.errors).toContain('Password must contain a special character');
209
- });
210
- it('accumulates multiple errors', () => {
211
- const result = validatePasswordPolicy('abc', {
212
- minLength: 8,
213
- requireUppercase: true,
214
- requireNumbers: true,
215
- requireSpecialChars: true,
216
- });
217
- expect(result.valid).toBe(false);
218
- expect(result.errors).toHaveLength(4);
219
- });
220
- it('passes with empty policy', () => {
221
- const result = validatePasswordPolicy('anything', {});
222
- expect(result.valid).toBe(true);
223
- expect(result.errors).toHaveLength(0);
224
- });
225
- });
226
- //# sourceMappingURL=password.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"password.test.js","sourceRoot":"","sources":["../../../src/__tests__/auth/password.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=reset.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reset.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/auth/reset.test.ts"],"names":[],"mappings":""}
@@ -1,355 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
- import { generateResetToken, hashToken, createPasswordReset, executePasswordReset, } from '../../auth/reset.js';
3
- import { verifyPassword } from '../../auth/password.js';
4
- import { setEmailSender } from '../../email/sender.js';
5
- function createFakeDb(initial = {}) {
6
- const users = initial.users ?? [];
7
- const tokens = [];
8
- const sessions = initial.sessions ?? [];
9
- const emailsSent = [];
10
- const db = {
11
- users,
12
- tokens,
13
- sessions,
14
- emailsSent,
15
- user: {
16
- findFirst: vi.fn(async ({ where }) => {
17
- const target = where.email.equals.toLowerCase();
18
- return users.find((u) => u.email.toLowerCase() === target) ?? null;
19
- }),
20
- update: vi.fn(async ({ where, data }) => {
21
- const u = users.find((u) => u.id === where.id);
22
- if (u)
23
- Object.assign(u, data);
24
- return u;
25
- }),
26
- },
27
- passwordResetToken: {
28
- findFirst: vi.fn(async ({ where }) => {
29
- return (tokens.find((t) => t.tokenHash === where.tokenHash && t.usedAt === where.usedAt) ?? null);
30
- }),
31
- create: vi.fn(async ({ data }) => {
32
- const user = users.find((u) => u.id === data.userId);
33
- const t = {
34
- id: `rt_${tokens.length + 1}`,
35
- userId: data.userId,
36
- tokenHash: data.tokenHash,
37
- expiresAt: data.expiresAt,
38
- usedAt: null,
39
- user,
40
- };
41
- tokens.push(t);
42
- return t;
43
- }),
44
- update: vi.fn(async ({ where, data }) => {
45
- const t = tokens.find((t) => t.id === where.id);
46
- if (t)
47
- Object.assign(t, data);
48
- return t;
49
- }),
50
- updateMany: vi.fn(async ({ where, data }) => {
51
- let count = 0;
52
- for (const t of tokens) {
53
- if (t.userId === where.userId && t.usedAt === where.usedAt) {
54
- Object.assign(t, data);
55
- count++;
56
- }
57
- }
58
- return { count };
59
- }),
60
- },
61
- session: {
62
- updateMany: vi.fn(async ({ where, data }) => {
63
- let count = 0;
64
- for (const s of sessions) {
65
- if (s.userId === where.userId && s.revokedAt === where.revokedAt) {
66
- Object.assign(s, data);
67
- count++;
68
- }
69
- }
70
- return { count };
71
- }),
72
- },
73
- $transaction: vi.fn(async (ops) => Promise.all(ops)),
74
- };
75
- // Partial mock — intersection keeps the vi.fn types visible to assertions.
76
- return db;
77
- }
78
- const TEST_CONFIG = {
79
- siteUrl: 'https://example.com',
80
- platform: {
81
- email: {
82
- send: vi.fn(),
83
- },
84
- },
85
- };
86
- beforeEach(() => {
87
- TEST_CONFIG.platform.email.send.mockClear();
88
- });
89
- // ─── Token generation ───────────────────────────────────────────────────
90
- describe('generateResetToken', () => {
91
- it('returns a 64-char hex raw token (32 random bytes)', () => {
92
- const t = generateResetToken();
93
- expect(t.raw).toMatch(/^[0-9a-f]{64}$/);
94
- });
95
- it('returns a SHA-256 hash of the raw token', () => {
96
- const t = generateResetToken();
97
- expect(t.hash).toBe(hashToken(t.raw));
98
- expect(t.hash).toMatch(/^[0-9a-f]{64}$/);
99
- });
100
- it('produces unique tokens (≥ 100 entropy bits)', () => {
101
- const set = new Set(Array.from({ length: 200 }, () => generateResetToken().raw));
102
- expect(set.size).toBe(200);
103
- });
104
- });
105
- // ─── createPasswordReset (request flow) ─────────────────────────────────
106
- describe('createPasswordReset', () => {
107
- it('silently succeeds for an unknown email (user enumeration defence)', async () => {
108
- const db = createFakeDb();
109
- await expect(createPasswordReset(db, 'unknown@example.com', TEST_CONFIG)).resolves.toBeUndefined();
110
- expect(db.passwordResetToken.create).not.toHaveBeenCalled();
111
- expect(TEST_CONFIG.platform.email.send).not.toHaveBeenCalled();
112
- });
113
- it('silently succeeds for a deactivated user (no token, no email)', async () => {
114
- const db = createFakeDb({
115
- users: [
116
- {
117
- id: 'u_off',
118
- email: 'off@example.com',
119
- name: 'Off',
120
- isActive: false,
121
- passwordHash: 'pbkdf2:600000:a:b',
122
- },
123
- ],
124
- });
125
- await createPasswordReset(db, 'off@example.com', TEST_CONFIG);
126
- expect(db.passwordResetToken.create).not.toHaveBeenCalled();
127
- expect(TEST_CONFIG.platform.email.send).not.toHaveBeenCalled();
128
- });
129
- it('creates a token, expires prior outstanding tokens, and sends an email', async () => {
130
- const db = createFakeDb({
131
- users: [
132
- {
133
- id: 'u_1',
134
- email: 'a@example.com',
135
- name: 'A',
136
- isActive: true,
137
- passwordHash: 'pbkdf2:600000:a:b',
138
- },
139
- ],
140
- });
141
- await createPasswordReset(db, 'a@example.com', TEST_CONFIG);
142
- expect(db.passwordResetToken.updateMany).toHaveBeenCalledWith({
143
- where: { userId: 'u_1', usedAt: null },
144
- data: { usedAt: expect.any(Date) },
145
- });
146
- expect(db.passwordResetToken.create).toHaveBeenCalledOnce();
147
- expect(TEST_CONFIG.platform.email.send).toHaveBeenCalledOnce();
148
- const tokenRecord = db.tokens[0];
149
- // Stored value is the hash, not the raw token
150
- expect(tokenRecord.tokenHash).toMatch(/^[0-9a-f]{64}$/);
151
- // 1 hour expiry, give or take a few seconds
152
- const ttlMs = tokenRecord.expiresAt.getTime() - Date.now();
153
- expect(ttlMs).toBeGreaterThan(59 * 60 * 1000);
154
- expect(ttlMs).toBeLessThanOrEqual(60 * 60 * 1000 + 5_000);
155
- });
156
- it('puts a fresh raw token into the email URL (not the hash)', async () => {
157
- const db = createFakeDb({
158
- users: [
159
- {
160
- id: 'u_1',
161
- email: 'a@example.com',
162
- name: 'A',
163
- isActive: true,
164
- passwordHash: null,
165
- },
166
- ],
167
- });
168
- await createPasswordReset(db, 'A@Example.com ', TEST_CONFIG);
169
- const sent = TEST_CONFIG.platform.email.send.mock.calls[0][0];
170
- const tokenInUrl = sent.html.match(/token=([0-9a-f]{64})/)?.[1];
171
- expect(tokenInUrl).toBeDefined();
172
- expect(hashToken(tokenInUrl)).toBe(db.tokens[0].tokenHash);
173
- });
174
- it('normalises email casing/whitespace before lookup', async () => {
175
- const db = createFakeDb({
176
- users: [
177
- {
178
- id: 'u_1',
179
- email: 'a@example.com',
180
- name: 'A',
181
- isActive: true,
182
- passwordHash: null,
183
- },
184
- ],
185
- });
186
- await createPasswordReset(db, ' A@Example.COM ', TEST_CONFIG);
187
- expect(db.passwordResetToken.create).toHaveBeenCalledOnce();
188
- });
189
- it('does nothing when the email is empty / whitespace-only', async () => {
190
- const db = createFakeDb();
191
- await createPasswordReset(db, ' ', TEST_CONFIG);
192
- expect(db.user.findFirst).not.toHaveBeenCalled();
193
- });
194
- it('skips email send gracefully when no email adapter is configured', async () => {
195
- const db = createFakeDb({
196
- users: [
197
- {
198
- id: 'u_1',
199
- email: 'a@example.com',
200
- name: 'A',
201
- isActive: true,
202
- passwordHash: null,
203
- },
204
- ],
205
- });
206
- await createPasswordReset(db, 'a@example.com', { siteUrl: 'https://e.com' });
207
- expect(db.passwordResetToken.create).toHaveBeenCalledOnce();
208
- expect(TEST_CONFIG.platform.email.send).not.toHaveBeenCalled();
209
- });
210
- it('builds the reset link from the configured admin path (not a hardcoded /admin)', async () => {
211
- const db = createFakeDb({
212
- users: [{ id: 'u_1', email: 'a@example.com', name: 'A', isActive: true, passwordHash: null }],
213
- });
214
- await createPasswordReset(db, 'a@example.com', {
215
- siteUrl: 'https://example.com/',
216
- adminPath: '/securelogin',
217
- platform: TEST_CONFIG.platform,
218
- });
219
- const sent = TEST_CONFIG.platform.email.send.mock.calls[0][0];
220
- expect(sent.html).toContain('https://example.com/securelogin/reset-password?token=');
221
- expect(sent.html).not.toContain('//securelogin');
222
- });
223
- });
224
- // ─── Registered email sender fallback ───────────────────────────────────
225
- //
226
- // Regression: createPasswordReset previously only sent when an explicit
227
- // `platform.email` adapter was passed. Apps that configure email purely via
228
- // `emailPlugin()` (the common case) register a sender through the core email
229
- // registry instead, so the reset flow must fall back to it.
230
- describe('createPasswordReset — registered sender fallback', () => {
231
- afterEach(() => {
232
- setEmailSender(null);
233
- });
234
- it('sends via the registered sender when no platform adapter is passed', async () => {
235
- const send = vi.fn(async (_o) => { });
236
- setEmailSender({ send });
237
- const db = createFakeDb({
238
- users: [{ id: 'u_1', email: 'a@example.com', name: 'A', isActive: true, passwordHash: null }],
239
- });
240
- await createPasswordReset(db, 'a@example.com', { siteUrl: 'https://e.com' });
241
- expect(db.passwordResetToken.create).toHaveBeenCalledOnce();
242
- expect(send).toHaveBeenCalledOnce();
243
- const sent = send.mock.calls[0][0];
244
- expect(sent.to).toBe('a@example.com');
245
- expect(sent.html).toContain('/admin/reset-password?token=');
246
- });
247
- it('prefers an explicit platform adapter over the registered sender', async () => {
248
- const registered = vi.fn(async (_o) => { });
249
- setEmailSender({ send: registered });
250
- const db = createFakeDb({
251
- users: [{ id: 'u_1', email: 'a@example.com', name: 'A', isActive: true, passwordHash: null }],
252
- });
253
- await createPasswordReset(db, 'a@example.com', {
254
- siteUrl: 'https://e.com',
255
- platform: TEST_CONFIG.platform,
256
- });
257
- expect(TEST_CONFIG.platform.email.send).toHaveBeenCalledOnce();
258
- expect(registered).not.toHaveBeenCalled();
259
- });
260
- });
261
- // ─── executePasswordReset (consume flow) ────────────────────────────────
262
- describe('executePasswordReset', () => {
263
- function seedDbWithToken(opts = {}) {
264
- const raw = '0'.repeat(64);
265
- const db = createFakeDb({
266
- users: [
267
- {
268
- id: 'u_1',
269
- email: 'a@example.com',
270
- name: 'A',
271
- isActive: opts.isActive ?? true,
272
- passwordHash: null,
273
- },
274
- ],
275
- sessions: [
276
- { id: 's_active', userId: 'u_1', revokedAt: null },
277
- { id: 's_other', userId: 'u_1', revokedAt: null },
278
- ],
279
- });
280
- const t = {
281
- id: 'rt_1',
282
- userId: 'u_1',
283
- tokenHash: hashToken(raw),
284
- expiresAt: opts.expiresAt ?? new Date(Date.now() + 30 * 60 * 1000),
285
- usedAt: opts.usedAt ?? null,
286
- user: db.users[0],
287
- };
288
- db.tokens.push(t);
289
- return { db, raw };
290
- }
291
- it('rejects an unknown token without leaking which user it belonged to', async () => {
292
- const { db } = seedDbWithToken();
293
- const result = await executePasswordReset(db, 'a-token-that-does-not-exist', 'P@ssword1234');
294
- expect(result.success).toBe(false);
295
- expect(result.error).toBe('Invalid or expired reset link.');
296
- expect(db.user.update).not.toHaveBeenCalled();
297
- });
298
- it('rejects an expired token', async () => {
299
- const { db, raw } = seedDbWithToken({
300
- expiresAt: new Date(Date.now() - 60 * 1000),
301
- });
302
- const result = await executePasswordReset(db, raw, 'P@ssword1234');
303
- expect(result.success).toBe(false);
304
- expect(result.error).toMatch(/expired/i);
305
- expect(db.user.update).not.toHaveBeenCalled();
306
- });
307
- it('rejects a token that has already been used (single-use)', async () => {
308
- const { db, raw } = seedDbWithToken({ usedAt: new Date(Date.now() - 1000) });
309
- const result = await executePasswordReset(db, raw, 'P@ssword1234');
310
- expect(result.success).toBe(false);
311
- // The "usedAt: null" filter means the token isn't found -> generic error.
312
- expect(result.error).toBe('Invalid or expired reset link.');
313
- });
314
- it('rejects when the underlying user is deactivated', async () => {
315
- const { db, raw } = seedDbWithToken({ isActive: false });
316
- const result = await executePasswordReset(db, raw, 'P@ssword1234');
317
- expect(result.success).toBe(false);
318
- expect(result.error).toMatch(/deactivated/i);
319
- });
320
- it('rejects passwords that do not meet the default policy', async () => {
321
- const { db, raw } = seedDbWithToken();
322
- const tooShort = await executePasswordReset(db, raw, 'short1A');
323
- expect(tooShort.success).toBe(false);
324
- const noUpper = await executePasswordReset(db, raw, 'lowercase-only-1234');
325
- expect(noUpper.success).toBe(false);
326
- const noNumber = await executePasswordReset(db, raw, 'NoNumbersAtAll!');
327
- expect(noNumber.success).toBe(false);
328
- });
329
- it('updates the password, marks the token used, and revokes all sessions atomically', async () => {
330
- const { db, raw } = seedDbWithToken();
331
- const result = await executePasswordReset(db, raw, 'F#reshPassword2026!');
332
- expect(result.success).toBe(true);
333
- expect(db.$transaction).toHaveBeenCalledOnce();
334
- // 1. Password hash was updated
335
- const user = db.users[0];
336
- expect(user.passwordHash).toBeTruthy();
337
- expect(user.passwordHash).toMatch(/^pbkdf2:/);
338
- // 2. New password actually verifies against the stored hash
339
- expect(await verifyPassword('F#reshPassword2026!', user.passwordHash)).toBe(true);
340
- // 3. Token is marked used (single-use enforced for replay attempts)
341
- const t = db.tokens[0];
342
- expect(t.usedAt).toBeInstanceOf(Date);
343
- // 4. All non-revoked sessions revoked
344
- expect(db.sessions.every((s) => s.revokedAt !== null)).toBe(true);
345
- });
346
- it('a second use of the same token after a successful reset is rejected', async () => {
347
- const { db, raw } = seedDbWithToken();
348
- const first = await executePasswordReset(db, raw, 'F#reshPassword2026!');
349
- expect(first.success).toBe(true);
350
- const second = await executePasswordReset(db, raw, 'AnotherV@lidPwd2026!');
351
- expect(second.success).toBe(false);
352
- expect(second.error).toBe('Invalid or expired reset link.');
353
- });
354
- });
355
- //# sourceMappingURL=reset.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reset.test.js","sourceRoot":"","sources":["../../../src/__tests__/auth/reset.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=roles.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"roles.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/auth/roles.test.ts"],"names":[],"mappings":""}