@fraza/core 0.0.0-stage → 0.3.6

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 (592) hide show
  1. package/.env.example +55 -0
  2. package/CHANGELOG.md +410 -0
  3. package/LICENSE +21 -0
  4. package/README.md +56 -2
  5. package/THIRD-PARTY-NOTICES.md +548 -0
  6. package/changelog.json +1987 -0
  7. package/dist/blocks-registry/client.client.js +21 -0
  8. package/dist/blocks-registry/columns-layout.js +29 -0
  9. package/dist/blocks-registry/fields-schema.js +36 -0
  10. package/dist/blocks-registry/fields-ui.client.js +213 -0
  11. package/dist/blocks-registry/index.server.js +38 -0
  12. package/dist/blocks-registry/render.server.js +260 -0
  13. package/dist/blocks-registry/url.js +15 -0
  14. package/dist/blocks-registry/walk.js +38 -0
  15. package/dist/core/api/after-response.js +25 -0
  16. package/dist/core/api/body.js +106 -0
  17. package/dist/core/api/core-routes.js +14 -0
  18. package/dist/core/api/define.js +92 -0
  19. package/dist/core/api/errors.js +90 -0
  20. package/dist/core/api/file-not-found.js +10 -0
  21. package/dist/core/api/file-response.server.js +305 -0
  22. package/dist/core/api/health.js +14 -0
  23. package/dist/core/api/index.js +36 -0
  24. package/dist/core/api/respond.js +32 -0
  25. package/dist/core/api/route-handler.js +35 -0
  26. package/dist/core/api/router.js +250 -0
  27. package/dist/core/api/runtime.js +75 -0
  28. package/dist/core/cron/index.server.js +456 -0
  29. package/dist/core/cron/maintenance.server.js +37 -0
  30. package/dist/core/cron/system.server.js +33 -0
  31. package/dist/core/crypto/index.js +136 -0
  32. package/dist/core/database/cli.js +167 -0
  33. package/dist/core/database/crud.js +188 -0
  34. package/dist/core/database/db.server.js +353 -0
  35. package/dist/core/database/index.js +84 -0
  36. package/dist/core/database/migrations/index.js +279 -0
  37. package/dist/core/database/migrations.server.js +235 -0
  38. package/dist/core/database/sql.server.js +147 -0
  39. package/dist/core/doctor/audit.server.js +75 -0
  40. package/dist/core/doctor/cli.js +124 -0
  41. package/dist/core/doctor/contract.js +285 -0
  42. package/dist/core/doctor/contract.server.js +214 -0
  43. package/dist/core/doctor/env.js +79 -0
  44. package/dist/core/doctor/env.server.js +219 -0
  45. package/dist/core/doctor/imports.server.js +181 -0
  46. package/dist/core/doctor/patches.js +214 -0
  47. package/dist/core/doctor/report.server.js +45 -0
  48. package/dist/core/doctor/secrets.server.js +93 -0
  49. package/dist/core/doctor/versions.server.js +143 -0
  50. package/dist/core/email/address.js +4 -0
  51. package/dist/core/email/classes.js +236 -0
  52. package/dist/core/email/components.js +128 -0
  53. package/dist/core/email/index.js +56 -0
  54. package/dist/core/email/mime.js +140 -0
  55. package/dist/core/email/outbox.server.js +288 -0
  56. package/dist/core/email/parts.js +97 -0
  57. package/dist/core/email/render.js +246 -0
  58. package/dist/core/email/resend.js +105 -0
  59. package/dist/core/email/smtp.server.js +395 -0
  60. package/dist/core/email/templates/BaseLayout.js +59 -0
  61. package/dist/core/email/templates/index.js +6 -0
  62. package/dist/core/env/load.server.js +48 -0
  63. package/dist/core/modules/cli.js +363 -0
  64. package/dist/core/modules/contract.js +101 -0
  65. package/dist/core/modules/discover.server.js +278 -0
  66. package/dist/core/modules/index.js +29 -0
  67. package/dist/core/modules/lifecycle.js +35 -0
  68. package/dist/core/modules/order.js +44 -0
  69. package/dist/core/modules/registry.js +31 -0
  70. package/dist/core/notifications/NotificationEmail.js +30 -0
  71. package/dist/core/notifications/api.js +85 -0
  72. package/dist/core/notifications/devkit.server.js +45 -0
  73. package/dist/core/notifications/format.js +34 -0
  74. package/dist/core/notifications/index.server.js +31 -0
  75. package/dist/core/notifications/notify.server.js +105 -0
  76. package/dist/core/notifications/queries.server.js +131 -0
  77. package/dist/core/notifications/refresh.js +9 -0
  78. package/dist/core/notifications/validation.js +98 -0
  79. package/dist/core/payments/api.js +23 -0
  80. package/dist/core/payments/index.js +8 -0
  81. package/dist/core/payments/signature.js +78 -0
  82. package/dist/core/payments/webhook.js +60 -0
  83. package/dist/core/public-content/index.js +16 -0
  84. package/dist/core/public-content/registry.js +96 -0
  85. package/dist/core/public-pages/PublicModulePage.server.js +37 -0
  86. package/dist/core/public-pages/index.js +6 -0
  87. package/dist/core/public-pages/registry.js +37 -0
  88. package/dist/core/registry/cli.js +123 -0
  89. package/dist/core/registry/index.js +38 -0
  90. package/dist/core/registry/key.server.js +260 -0
  91. package/dist/core/storage/api.js +78 -0
  92. package/dist/core/storage/backblaze.js +22 -0
  93. package/dist/core/storage/cloudflare-r2.js +19 -0
  94. package/dist/core/storage/crc32.server.js +23 -0
  95. package/dist/core/storage/image.server.js +173 -0
  96. package/dist/core/storage/index.js +414 -0
  97. package/dist/core/storage/multipart.js +208 -0
  98. package/dist/core/storage/provider.js +34 -0
  99. package/dist/core/storage/signing.js +147 -0
  100. package/dist/core/storage/storage-config.js +96 -0
  101. package/dist/core/storage/transport.js +74 -0
  102. package/dist/core/storage/utils.js +212 -0
  103. package/dist/core/storage/zip.server.js +358 -0
  104. package/dist/core/templates/index.js +6 -0
  105. package/dist/core/templates/registry.js +41 -0
  106. package/dist/core/themes/ThemeStyle.server.js +35 -0
  107. package/dist/core/themes/color.js +107 -0
  108. package/dist/core/themes/define.js +232 -0
  109. package/dist/core/themes/index.js +103 -0
  110. package/dist/core/themes/index.server.js +10 -0
  111. package/dist/core/themes/registry.js +48 -0
  112. package/dist/core/themes/tokens.js +186 -0
  113. package/dist/core/toast/Toast.js +114 -0
  114. package/dist/core/toast/ToastContainer.js +115 -0
  115. package/dist/core/toast/ToastContext.js +99 -0
  116. package/dist/core/toast/index.js +10 -0
  117. package/dist/core/update/changelog.server.js +56 -0
  118. package/dist/core/update/check-cache.server.js +68 -0
  119. package/dist/core/update/cli.js +212 -0
  120. package/dist/core/update/npm.server.js +70 -0
  121. package/dist/core/update/plan.server.js +54 -0
  122. package/dist/core/users/accounts.js +218 -0
  123. package/dist/core/users/auth.js +255 -0
  124. package/dist/core/users/authorization.js +198 -0
  125. package/dist/core/users/constants.js +39 -0
  126. package/dist/core/users/db.js +162 -0
  127. package/dist/core/users/emailChange.js +43 -0
  128. package/dist/core/users/errors.js +19 -0
  129. package/dist/core/users/index.js +142 -0
  130. package/dist/core/users/password.js +98 -0
  131. package/dist/core/users/permissions-registry.js +43 -0
  132. package/dist/core/users/permissions.js +35 -0
  133. package/dist/core/users/queries.js +19 -0
  134. package/dist/core/users/roles.js +145 -0
  135. package/dist/core/users/session.js +116 -0
  136. package/dist/core/users/validation.js +59 -0
  137. package/dist/core/users/verifications.js +58 -0
  138. package/dist/docs/00-decouverte/01-qu-est-ce-que-fraza.md +76 -0
  139. package/dist/docs/00-decouverte/02-concepts.md +62 -0
  140. package/dist/docs/00-decouverte/03-comment-ca-fonctionne.md +78 -0
  141. package/dist/docs/00-decouverte/04-que-peut-on-construire.md +61 -0
  142. package/dist/docs/00-decouverte/index.md +20 -0
  143. package/dist/docs/01-demarrage/01-installation.md +159 -0
  144. package/dist/docs/01-demarrage/02-tour-du-proprietaire.md +91 -0
  145. package/dist/docs/01-demarrage/03-configuration.md +251 -0
  146. package/dist/docs/01-demarrage/04-base-de-donnees.md +208 -0
  147. package/dist/docs/01-demarrage/05-authentification.md +163 -0
  148. package/dist/docs/01-demarrage/06-structure-du-projet.md +241 -0
  149. package/dist/docs/01-demarrage/07-administration.md +181 -0
  150. package/dist/docs/01-demarrage/08-premier-module.md +301 -0
  151. package/dist/docs/01-demarrage/09-deploiement.md +186 -0
  152. package/dist/docs/01-demarrage/index.md +29 -0
  153. package/dist/docs/02-guides/accepter-des-paiements.md +155 -0
  154. package/dist/docs/02-guides/ajouter-une-route-api.md +208 -0
  155. package/dist/docs/02-guides/basculer-sur-le-registre-de-secours.md +68 -0
  156. package/dist/docs/02-guides/blocs-personnalises.md +223 -0
  157. package/dist/docs/02-guides/chiffrer-des-secrets.md +134 -0
  158. package/dist/docs/02-guides/contenu-public-et-templates.md +190 -0
  159. package/dist/docs/02-guides/creer-un-module.md +503 -0
  160. package/dist/docs/02-guides/cycle-de-vie-d-un-module.md +197 -0
  161. package/dist/docs/02-guides/ecrire-une-migration.md +140 -0
  162. package/dist/docs/02-guides/envoyer-un-courriel.md +220 -0
  163. package/dist/docs/02-guides/etendre-l-admin.md +267 -0
  164. package/dist/docs/02-guides/generer-un-pdf.md +204 -0
  165. package/dist/docs/02-guides/gerer-les-medias.md +205 -0
  166. package/dist/docs/02-guides/index.md +61 -0
  167. package/dist/docs/02-guides/mettre-a-jour-un-projet.md +123 -0
  168. package/dist/docs/02-guides/notifier-un-utilisateur.md +96 -0
  169. package/dist/docs/02-guides/permissions-et-roles.md +168 -0
  170. package/dist/docs/02-guides/personnaliser-l-apparence.md +148 -0
  171. package/dist/docs/02-guides/personnaliser-la-connexion.md +178 -0
  172. package/dist/docs/02-guides/planifier-des-taches.md +166 -0
  173. package/dist/docs/02-guides/seo-et-metadonnees.md +185 -0
  174. package/dist/docs/02-guides/stocker-des-fichiers.md +200 -0
  175. package/dist/docs/02-guides/themes-et-mode-sombre.md +124 -0
  176. package/dist/docs/03-reference/01-cores/api.md +515 -0
  177. package/dist/docs/03-reference/01-cores/cron.md +204 -0
  178. package/dist/docs/03-reference/01-cores/crypto.md +126 -0
  179. package/dist/docs/03-reference/01-cores/database.md +402 -0
  180. package/dist/docs/03-reference/01-cores/email.md +445 -0
  181. package/dist/docs/03-reference/01-cores/image.md +102 -0
  182. package/dist/docs/03-reference/01-cores/index.md +52 -0
  183. package/dist/docs/03-reference/01-cores/modules.md +183 -0
  184. package/dist/docs/03-reference/01-cores/notifications.md +147 -0
  185. package/dist/docs/03-reference/01-cores/payments.md +127 -0
  186. package/dist/docs/03-reference/01-cores/public-content.md +120 -0
  187. package/dist/docs/03-reference/01-cores/public-pages.md +144 -0
  188. package/dist/docs/03-reference/01-cores/registry.md +93 -0
  189. package/dist/docs/03-reference/01-cores/sql.md +117 -0
  190. package/dist/docs/03-reference/01-cores/storage.md +393 -0
  191. package/dist/docs/03-reference/01-cores/templates.md +89 -0
  192. package/dist/docs/03-reference/01-cores/themes.md +300 -0
  193. package/dist/docs/03-reference/01-cores/toast.md +154 -0
  194. package/dist/docs/03-reference/01-cores/users.md +549 -0
  195. package/dist/docs/03-reference/01-cores/zip.md +85 -0
  196. package/dist/docs/03-reference/02-features/admin.md +646 -0
  197. package/dist/docs/03-reference/02-features/auth.md +416 -0
  198. package/dist/docs/03-reference/02-features/index.md +19 -0
  199. package/dist/docs/03-reference/02-features/initialisation.md +80 -0
  200. package/dist/docs/03-reference/02-features/provider.md +67 -0
  201. package/dist/docs/03-reference/03-registres/block-editor.md +491 -0
  202. package/dist/docs/03-reference/03-registres/blocks-registry.md +188 -0
  203. package/dist/docs/03-reference/03-registres/index.md +19 -0
  204. package/dist/docs/03-reference/03-registres/media-registry.md +200 -0
  205. package/dist/docs/03-reference/04-partage/composants.md +823 -0
  206. package/dist/docs/03-reference/04-partage/configuration-app.md +87 -0
  207. package/dist/docs/03-reference/04-partage/dates.md +158 -0
  208. package/dist/docs/03-reference/04-partage/hooks.md +153 -0
  209. package/dist/docs/03-reference/04-partage/http.md +121 -0
  210. package/dist/docs/03-reference/04-partage/icones.md +214 -0
  211. package/dist/docs/03-reference/04-partage/index.md +43 -0
  212. package/dist/docs/03-reference/04-partage/logger.md +103 -0
  213. package/dist/docs/03-reference/04-partage/metadata.md +93 -0
  214. package/dist/docs/03-reference/04-partage/rate-limit.md +195 -0
  215. package/dist/docs/03-reference/04-partage/seo.md +172 -0
  216. package/dist/docs/03-reference/04-partage/slug.md +74 -0
  217. package/dist/docs/03-reference/04-partage/styles.md +131 -0
  218. package/dist/docs/03-reference/04-partage/utilitaires.md +44 -0
  219. package/dist/docs/03-reference/05-cli/fraza-db.md +120 -0
  220. package/dist/docs/03-reference/05-cli/fraza-doctor.md +227 -0
  221. package/dist/docs/03-reference/05-cli/fraza-key.md +94 -0
  222. package/dist/docs/03-reference/05-cli/fraza-module.md +308 -0
  223. package/dist/docs/03-reference/05-cli/fraza-modules.md +96 -0
  224. package/dist/docs/03-reference/05-cli/fraza-update.md +115 -0
  225. package/dist/docs/03-reference/05-cli/index.md +38 -0
  226. package/dist/docs/03-reference/06-configuration/index.md +20 -0
  227. package/dist/docs/03-reference/06-configuration/paquets-supportes.md +81 -0
  228. package/dist/docs/03-reference/06-configuration/points-d-entree.md +248 -0
  229. package/dist/docs/03-reference/06-configuration/variables-d-environnement.md +217 -0
  230. package/dist/docs/03-reference/index.md +40 -0
  231. package/dist/docs/04-architecture/01-principes.md +56 -0
  232. package/dist/docs/04-architecture/02-frontieres-serveur-client.md +153 -0
  233. package/dist/docs/04-architecture/03-build-et-exports.md +159 -0
  234. package/dist/docs/04-architecture/04-registres-et-singletons.md +159 -0
  235. package/dist/docs/04-architecture/05-securite.md +165 -0
  236. package/dist/docs/04-architecture/06-design-system.md +571 -0
  237. package/dist/docs/04-architecture/07-licence-et-propriete.md +138 -0
  238. package/dist/docs/04-architecture/index.md +21 -0
  239. package/dist/docs/05-contribution/01-conventions-de-code.md +79 -0
  240. package/dist/docs/05-contribution/02-langue.md +53 -0
  241. package/dist/docs/05-contribution/03-redaction.md +187 -0
  242. package/dist/docs/05-contribution/04-commits.md +87 -0
  243. package/dist/docs/05-contribution/05-publication.md +172 -0
  244. package/dist/docs/05-contribution/06-registre-verdaccio.md +144 -0
  245. package/dist/docs/05-contribution/07-changelog.md +88 -0
  246. package/dist/docs/05-contribution/08-tests.md +150 -0
  247. package/dist/docs/05-contribution/index.md +34 -0
  248. package/dist/docs/06-modules/booking/admin.md +133 -0
  249. package/dist/docs/06-modules/booking/api.md +106 -0
  250. package/dist/docs/06-modules/booking/configuration.md +124 -0
  251. package/dist/docs/06-modules/booking/courriels.md +57 -0
  252. package/dist/docs/06-modules/booking/index.md +79 -0
  253. package/dist/docs/06-modules/booking/installation.md +89 -0
  254. package/dist/docs/06-modules/booking/modele-de-donnees.md +86 -0
  255. package/dist/docs/06-modules/booking/reservation-en-ligne.md +145 -0
  256. package/dist/docs/06-modules/drive/admin.md +278 -0
  257. package/dist/docs/06-modules/drive/api.md +287 -0
  258. package/dist/docs/06-modules/drive/configuration.md +120 -0
  259. package/dist/docs/06-modules/drive/fichiers.md +97 -0
  260. package/dist/docs/06-modules/drive/index.md +65 -0
  261. package/dist/docs/06-modules/drive/installation.md +69 -0
  262. package/dist/docs/06-modules/drive/modele-de-donnees.md +159 -0
  263. package/dist/docs/06-modules/drive/partages.md +286 -0
  264. package/dist/docs/06-modules/facturation/api.md +188 -0
  265. package/dist/docs/06-modules/facturation/configuration.md +170 -0
  266. package/dist/docs/06-modules/facturation/courriels.md +80 -0
  267. package/dist/docs/06-modules/facturation/facturation.md +104 -0
  268. package/dist/docs/06-modules/facturation/index.md +73 -0
  269. package/dist/docs/06-modules/facturation/installation.md +162 -0
  270. package/dist/docs/06-modules/facturation/modele-de-donnees.md +171 -0
  271. package/dist/docs/06-modules/facturation/paiements.md +130 -0
  272. package/dist/docs/06-modules/facturation/recurrences-et-rappels.md +111 -0
  273. package/dist/docs/06-modules/facturation/taxes.md +79 -0
  274. package/dist/docs/06-modules/forms/admin.md +105 -0
  275. package/dist/docs/06-modules/forms/affichage.md +127 -0
  276. package/dist/docs/06-modules/forms/api.md +118 -0
  277. package/dist/docs/06-modules/forms/champs.md +144 -0
  278. package/dist/docs/06-modules/forms/configuration.md +106 -0
  279. package/dist/docs/06-modules/forms/index.md +65 -0
  280. package/dist/docs/06-modules/forms/installation.md +128 -0
  281. package/dist/docs/06-modules/forms/modele-de-donnees.md +138 -0
  282. package/dist/docs/06-modules/forms/soumissions.md +149 -0
  283. package/dist/docs/06-modules/index.md +69 -0
  284. package/dist/docs/06-modules/medias/admin.md +147 -0
  285. package/dist/docs/06-modules/medias/api.md +90 -0
  286. package/dist/docs/06-modules/medias/configuration.md +88 -0
  287. package/dist/docs/06-modules/medias/index.md +64 -0
  288. package/dist/docs/06-modules/medias/installation.md +104 -0
  289. package/dist/docs/06-modules/medias/integration.md +210 -0
  290. package/dist/docs/06-modules/medias/modele-de-donnees.md +106 -0
  291. package/dist/docs/06-modules/medias/televersement.md +115 -0
  292. package/dist/docs/06-modules/pages/admin.md +98 -0
  293. package/dist/docs/06-modules/pages/api.md +151 -0
  294. package/dist/docs/06-modules/pages/configuration.md +65 -0
  295. package/dist/docs/06-modules/pages/index.md +51 -0
  296. package/dist/docs/06-modules/pages/installation.md +98 -0
  297. package/dist/docs/06-modules/pages/modele-de-donnees.md +114 -0
  298. package/dist/docs/06-modules/pages/templates.md +118 -0
  299. package/dist/docs/06-modules/posts/admin.md +199 -0
  300. package/dist/docs/06-modules/posts/api.md +165 -0
  301. package/dist/docs/06-modules/posts/configuration.md +81 -0
  302. package/dist/docs/06-modules/posts/index.md +62 -0
  303. package/dist/docs/06-modules/posts/installation.md +113 -0
  304. package/dist/docs/06-modules/posts/modele-de-donnees.md +169 -0
  305. package/dist/docs/06-modules/posts/taxonomies-et-relations.md +129 -0
  306. package/dist/docs/06-modules/posts/templates.md +141 -0
  307. package/dist/docs/06-modules/posts/types-et-champs.md +275 -0
  308. package/dist/docs/assets/decouverte/tableau-de-bord.dark.webp +0 -0
  309. package/dist/docs/assets/decouverte/tableau-de-bord.light.webp +0 -0
  310. package/dist/docs/assets/demarrage/connexion.dark.webp +0 -0
  311. package/dist/docs/assets/demarrage/connexion.light.webp +0 -0
  312. package/dist/docs/assets/demarrage/roles.dark.webp +0 -0
  313. package/dist/docs/assets/demarrage/roles.light.webp +0 -0
  314. package/dist/docs/assets/demarrage/tableau-de-bord-neuf.dark.webp +0 -0
  315. package/dist/docs/assets/demarrage/tableau-de-bord-neuf.light.webp +0 -0
  316. package/dist/docs/assets/modules/booking/agenda.dark.webp +0 -0
  317. package/dist/docs/assets/modules/booking/agenda.light.webp +0 -0
  318. package/dist/docs/assets/modules/drive/navigateur.dark.webp +0 -0
  319. package/dist/docs/assets/modules/drive/navigateur.light.webp +0 -0
  320. package/dist/docs/assets/modules/facturation/factures.dark.webp +0 -0
  321. package/dist/docs/assets/modules/facturation/factures.light.webp +0 -0
  322. package/dist/docs/assets/modules/forms/constructeur.dark.webp +0 -0
  323. package/dist/docs/assets/modules/forms/constructeur.light.webp +0 -0
  324. package/dist/docs/assets/modules/medias/mediatheque.dark.webp +0 -0
  325. package/dist/docs/assets/modules/medias/mediatheque.light.webp +0 -0
  326. package/dist/docs/assets/modules/pages/liste.dark.webp +0 -0
  327. package/dist/docs/assets/modules/pages/liste.light.webp +0 -0
  328. package/dist/docs/assets/modules/posts/liste.dark.webp +0 -0
  329. package/dist/docs/assets/modules/posts/liste.light.webp +0 -0
  330. package/dist/docs/index.md +67 -0
  331. package/dist/features/admin/AdminError.client.js +26 -0
  332. package/dist/features/admin/AdminErrorBoundary.client.js +34 -0
  333. package/dist/features/admin/AdminLayout.server.js +67 -0
  334. package/dist/features/admin/AdminLoading.js +11 -0
  335. package/dist/features/admin/AdminNotFound.js +14 -0
  336. package/dist/features/admin/AdminPage.client.js +72 -0
  337. package/dist/features/admin/AdminPage.server.js +54 -0
  338. package/dist/features/admin/AdminPageLayout.server.js +9 -0
  339. package/dist/features/admin/components/AdminBrand.js +21 -0
  340. package/dist/features/admin/components/AdminHeader.js +23 -0
  341. package/dist/features/admin/components/AdminShell.js +65 -0
  342. package/dist/features/admin/components/AdminSidebar.js +292 -0
  343. package/dist/features/admin/components/AdminTop.js +106 -0
  344. package/dist/features/admin/components/AdminTopbar.js +125 -0
  345. package/dist/features/admin/components/NotificationBell.client.js +338 -0
  346. package/dist/features/admin/components/RoleEditModal.client.js +179 -0
  347. package/dist/features/admin/components/SiteLinkButton.js +23 -0
  348. package/dist/features/admin/components/ThemeToggle.js +22 -0
  349. package/dist/features/admin/components/TopbarItems.js +11 -0
  350. package/dist/features/admin/components/UserCreateModal.client.js +152 -0
  351. package/dist/features/admin/components/UserEditModal.client.js +342 -0
  352. package/dist/features/admin/components/UserMenu.js +54 -0
  353. package/dist/features/admin/components/configContext.client.js +15 -0
  354. package/dist/features/admin/components/dashboard/AddWidgetModal.client.js +27 -0
  355. package/dist/features/admin/components/dashboard/DashboardGrid.client.js +367 -0
  356. package/dist/features/admin/components/index.js +22 -0
  357. package/dist/features/admin/dashboard-api.js +25 -0
  358. package/dist/features/admin/dashboard-layout.js +105 -0
  359. package/dist/features/admin/dashboard-layout.server.js +43 -0
  360. package/dist/features/admin/devkit/ColorsPage.client.js +184 -0
  361. package/dist/features/admin/devkit/ComponentsPage.client.js +629 -0
  362. package/dist/features/admin/devkit/DevkitPage.client.js +15 -0
  363. package/dist/features/admin/devkit/IconsPage.client.js +102 -0
  364. package/dist/features/admin/devkit/colors.server.js +26 -0
  365. package/dist/features/admin/icons.js +66 -0
  366. package/dist/features/admin/index.js +49 -0
  367. package/dist/features/admin/navigation.js +111 -0
  368. package/dist/features/admin/page-access.server.js +20 -0
  369. package/dist/features/admin/pages/ConfirmEmailChangePage.client.js +54 -0
  370. package/dist/features/admin/pages/DashboardPage.client.js +96 -0
  371. package/dist/features/admin/pages/ProfilePage.client.js +536 -0
  372. package/dist/features/admin/pages/RolesPage.client.js +233 -0
  373. package/dist/features/admin/pages/UsersPage.client.js +210 -0
  374. package/dist/features/admin/pages/metadata.js +38 -0
  375. package/dist/features/admin/pages/register.client.js +10 -0
  376. package/dist/features/admin/protect.js +20 -0
  377. package/dist/features/admin/registry.js +231 -0
  378. package/dist/features/admin/widgets/health.client.js +36 -0
  379. package/dist/features/admin/widgets/health.server.js +50 -0
  380. package/dist/features/admin/widgets/index.client.js +4 -0
  381. package/dist/features/admin/widgets/index.server.js +2 -0
  382. package/dist/features/admin/widgets/links.client.js +40 -0
  383. package/dist/features/admin/widgets/update.client.js +81 -0
  384. package/dist/features/admin/widgets/update.server.js +89 -0
  385. package/dist/features/auth/AuthPage.client.js +92 -0
  386. package/dist/features/auth/AuthPage.server.js +88 -0
  387. package/dist/features/auth/actions.js +325 -0
  388. package/dist/features/auth/anti-bot.server.js +48 -0
  389. package/dist/features/auth/api.js +546 -0
  390. package/dist/features/auth/auth.js +44 -0
  391. package/dist/features/auth/components/AuthAlert.js +26 -0
  392. package/dist/features/auth/components/AuthCard.js +21 -0
  393. package/dist/features/auth/components/AuthFooterLink.js +18 -0
  394. package/dist/features/auth/components/Honeypot.js +25 -0
  395. package/dist/features/auth/components/useFillTime.js +11 -0
  396. package/dist/features/auth/db.js +129 -0
  397. package/dist/features/auth/email.js +147 -0
  398. package/dist/features/auth/index.js +76 -0
  399. package/dist/features/auth/pages/ConfirmEmailPage.client.js +74 -0
  400. package/dist/features/auth/pages/FirstRunPage.client.js +153 -0
  401. package/dist/features/auth/pages/ForgotPasswordPage.client.js +106 -0
  402. package/dist/features/auth/pages/LoginPage.client.js +186 -0
  403. package/dist/features/auth/pages/LogoutPage.client.js +64 -0
  404. package/dist/features/auth/pages/RegisterPage.client.js +184 -0
  405. package/dist/features/auth/pages/ResetPasswordPage.client.js +114 -0
  406. package/dist/features/auth/pages/SetupAccountPage.client.js +114 -0
  407. package/dist/features/auth/pages/index.js +18 -0
  408. package/dist/features/auth/pages/validation.js +46 -0
  409. package/dist/features/auth/rate-limit.server.js +74 -0
  410. package/dist/features/auth/storage-policies.js +7 -0
  411. package/dist/features/auth/templates/AccountExistsEmail.js +36 -0
  412. package/dist/features/auth/templates/EmailChangeConfirmEmail.js +41 -0
  413. package/dist/features/auth/templates/EmailChangeNotifyEmail.js +50 -0
  414. package/dist/features/auth/templates/InvitationEmail.js +36 -0
  415. package/dist/features/auth/templates/PasswordChangedEmail.js +27 -0
  416. package/dist/features/auth/templates/PasswordResetEmail.js +36 -0
  417. package/dist/features/auth/templates/VerificationEmail.js +36 -0
  418. package/dist/features/auth/templates/index.js +16 -0
  419. package/dist/features/init.js +129 -0
  420. package/dist/features/provider/FrazaProvider.js +14 -0
  421. package/dist/features/provider/index.js +5 -0
  422. package/dist/index.js +21 -0
  423. package/dist/media-registry/block-editor.server.js +21 -0
  424. package/dist/media-registry/file-route.server.js +19 -0
  425. package/dist/media-registry/index.client.js +25 -0
  426. package/dist/media-registry/index.server.js +109 -0
  427. package/dist/shared/components/Badge.js +103 -0
  428. package/dist/shared/components/BlockEditor/Block.client.js +731 -0
  429. package/dist/shared/components/BlockEditor/BlockEditor.client.js +1186 -0
  430. package/dist/shared/components/BlockEditor/BlockInserter.client.js +74 -0
  431. package/dist/shared/components/BlockEditor/SlashMenu.client.js +179 -0
  432. package/dist/shared/components/BlockEditor/blockRegistry.js +36 -0
  433. package/dist/shared/components/BlockEditor/blockTypes/BulletList.js +30 -0
  434. package/dist/shared/components/BlockEditor/blockTypes/Checklist.js +47 -0
  435. package/dist/shared/components/BlockEditor/blockTypes/Code.js +23 -0
  436. package/dist/shared/components/BlockEditor/blockTypes/Columns.client.js +190 -0
  437. package/dist/shared/components/BlockEditor/blockTypes/Divider.js +22 -0
  438. package/dist/shared/components/BlockEditor/blockTypes/Heading.js +57 -0
  439. package/dist/shared/components/BlockEditor/blockTypes/Image.client.js +655 -0
  440. package/dist/shared/components/BlockEditor/blockTypes/NumberedList.js +35 -0
  441. package/dist/shared/components/BlockEditor/blockTypes/Paragraph.js +36 -0
  442. package/dist/shared/components/BlockEditor/blockTypes/Quote.js +21 -0
  443. package/dist/shared/components/BlockEditor/blockTypes/Spacer.client.js +105 -0
  444. package/dist/shared/components/BlockEditor/blockTypes/Video.client.js +548 -0
  445. package/dist/shared/components/BlockEditor/blockTypes/index.js +34 -0
  446. package/dist/shared/components/BlockEditor/helpers.js +53 -0
  447. package/dist/shared/components/BlockEditor/index.js +67 -0
  448. package/dist/shared/components/BlockEditor/inline/LinkPopover.client.js +137 -0
  449. package/dist/shared/components/BlockEditor/inline/Toolbar.client.js +387 -0
  450. package/dist/shared/components/BlockEditor/inline/clipboard.js +639 -0
  451. package/dist/shared/components/BlockEditor/inline/link.js +35 -0
  452. package/dist/shared/components/BlockEditor/inline/menuStyles.js +50 -0
  453. package/dist/shared/components/BlockEditor/inline/serialize.js +162 -0
  454. package/dist/shared/components/BlockEditor/inline/types.js +305 -0
  455. package/dist/shared/components/BlockEditor/insertMenu.client.js +76 -0
  456. package/dist/shared/components/BlockEditor/nestedEditorContext.js +10 -0
  457. package/dist/shared/components/BlockEditor/selection.js +57 -0
  458. package/dist/shared/components/BlockEditor/utils/caret.js +147 -0
  459. package/dist/shared/components/BlockEditor/utils/documentListener.js +45 -0
  460. package/dist/shared/components/BlockEditor/utils/ids.js +9 -0
  461. package/dist/shared/components/Breadcrumb.js +33 -0
  462. package/dist/shared/components/Button.js +92 -0
  463. package/dist/shared/components/Calendar.client.js +474 -0
  464. package/dist/shared/components/Card.js +67 -0
  465. package/dist/shared/components/Checkbox.js +43 -0
  466. package/dist/shared/components/ColorPicker.client.js +148 -0
  467. package/dist/shared/components/Combobox.client.js +250 -0
  468. package/dist/shared/components/ContextMenu.client.js +36 -0
  469. package/dist/shared/components/DropdownMenu.client.js +73 -0
  470. package/dist/shared/components/FilterTabs.js +29 -0
  471. package/dist/shared/components/FloatingActionBar.client.js +73 -0
  472. package/dist/shared/components/FrazaLogo.js +45 -0
  473. package/dist/shared/components/Icon.server.js +13 -0
  474. package/dist/shared/components/IconPicker.client.js +161 -0
  475. package/dist/shared/components/Input.js +159 -0
  476. package/dist/shared/components/Loading.js +16 -0
  477. package/dist/shared/components/LoadingMark.js +22 -0
  478. package/dist/shared/components/LoadingState.js +125 -0
  479. package/dist/shared/components/MarkdownEditor.js +231 -0
  480. package/dist/shared/components/Modal.js +345 -0
  481. package/dist/shared/components/PasswordStrengthIndicator.js +142 -0
  482. package/dist/shared/components/RelativeDate.client.js +31 -0
  483. package/dist/shared/components/Select.js +66 -0
  484. package/dist/shared/components/SeoFields.client.js +296 -0
  485. package/dist/shared/components/SeoFieldsPreviews.client.js +150 -0
  486. package/dist/shared/components/SeoFieldsScore.client.js +93 -0
  487. package/dist/shared/components/SeoScoreBadge.client.js +33 -0
  488. package/dist/shared/components/SplitButton.client.js +82 -0
  489. package/dist/shared/components/StatCard.js +65 -0
  490. package/dist/shared/components/Switch.js +61 -0
  491. package/dist/shared/components/TabNav.js +28 -0
  492. package/dist/shared/components/Table.js +454 -0
  493. package/dist/shared/components/TagInput.js +209 -0
  494. package/dist/shared/components/Textarea.js +55 -0
  495. package/dist/shared/components/UnsavedChangesBar.client.js +64 -0
  496. package/dist/shared/components/UserAvatar.js +37 -0
  497. package/dist/shared/components/button-styles.js +61 -0
  498. package/dist/shared/components/field-ids.js +23 -0
  499. package/dist/shared/components/field-styles.js +60 -0
  500. package/dist/shared/components/floating-position.js +53 -0
  501. package/dist/shared/components/floating.client.js +209 -0
  502. package/dist/shared/components/icon-catalog.js +29 -0
  503. package/dist/shared/components/index.js +96 -0
  504. package/dist/shared/components/layer.client.js +46 -0
  505. package/dist/shared/components/menu-item.client.js +18 -0
  506. package/dist/shared/components/menu-styles.js +20 -0
  507. package/dist/shared/components/menu.client.js +150 -0
  508. package/dist/shared/components/table-cells.js +58 -0
  509. package/dist/shared/components/table-list.client.js +174 -0
  510. package/dist/shared/components/table-roles.js +58 -0
  511. package/dist/shared/fonts/IBMPlexMono-Bold-Latin1.woff2 +0 -0
  512. package/dist/shared/fonts/IBMPlexMono-Bold-Latin2.woff2 +0 -0
  513. package/dist/shared/fonts/IBMPlexMono-Bold-Latin3.woff2 +0 -0
  514. package/dist/shared/fonts/IBMPlexMono-Bold-Pi.woff2 +0 -0
  515. package/dist/shared/fonts/IBMPlexMono-Italic-Latin1.woff2 +0 -0
  516. package/dist/shared/fonts/IBMPlexMono-Italic-Latin2.woff2 +0 -0
  517. package/dist/shared/fonts/IBMPlexMono-Italic-Latin3.woff2 +0 -0
  518. package/dist/shared/fonts/IBMPlexMono-Italic-Pi.woff2 +0 -0
  519. package/dist/shared/fonts/IBMPlexMono-Medium-Latin1.woff2 +0 -0
  520. package/dist/shared/fonts/IBMPlexMono-Medium-Latin2.woff2 +0 -0
  521. package/dist/shared/fonts/IBMPlexMono-Medium-Latin3.woff2 +0 -0
  522. package/dist/shared/fonts/IBMPlexMono-Medium-Pi.woff2 +0 -0
  523. package/dist/shared/fonts/IBMPlexMono-Regular-Latin1.woff2 +0 -0
  524. package/dist/shared/fonts/IBMPlexMono-Regular-Latin2.woff2 +0 -0
  525. package/dist/shared/fonts/IBMPlexMono-Regular-Latin3.woff2 +0 -0
  526. package/dist/shared/fonts/IBMPlexMono-Regular-Pi.woff2 +0 -0
  527. package/dist/shared/fonts/IBMPlexMono-SemiBold-Latin1.woff2 +0 -0
  528. package/dist/shared/fonts/IBMPlexMono-SemiBold-Latin2.woff2 +0 -0
  529. package/dist/shared/fonts/IBMPlexMono-SemiBold-Latin3.woff2 +0 -0
  530. package/dist/shared/fonts/IBMPlexMono-SemiBold-Pi.woff2 +0 -0
  531. package/dist/shared/fonts/IBMPlexSansVar-Italic-Latin1.woff2 +0 -0
  532. package/dist/shared/fonts/IBMPlexSansVar-Italic-Latin2.woff2 +0 -0
  533. package/dist/shared/fonts/IBMPlexSansVar-Italic-Latin3.woff2 +0 -0
  534. package/dist/shared/fonts/IBMPlexSansVar-Italic-Pi.woff2 +0 -0
  535. package/dist/shared/fonts/IBMPlexSansVar-Roman-Latin1.woff2 +0 -0
  536. package/dist/shared/fonts/IBMPlexSansVar-Roman-Latin2.woff2 +0 -0
  537. package/dist/shared/fonts/IBMPlexSansVar-Roman-Latin3.woff2 +0 -0
  538. package/dist/shared/fonts/IBMPlexSansVar-Roman-Pi.woff2 +0 -0
  539. package/dist/shared/fonts/OFL.txt +92 -0
  540. package/dist/shared/hooks/history-guard.js +101 -0
  541. package/dist/shared/hooks/index.js +11 -0
  542. package/dist/shared/hooks/scroll-lock.js +41 -0
  543. package/dist/shared/hooks/unsaved-state.js +56 -0
  544. package/dist/shared/hooks/useErrorRetry.js +19 -0
  545. package/dist/shared/hooks/useInView.js +27 -0
  546. package/dist/shared/hooks/useMediaQuery.js +17 -0
  547. package/dist/shared/hooks/useUnsavedChanges.js +75 -0
  548. package/dist/shared/lib/appConfig.js +64 -0
  549. package/dist/shared/lib/compat.server.js +68 -0
  550. package/dist/shared/lib/dates.js +298 -0
  551. package/dist/shared/lib/http/api-fetch.js +62 -0
  552. package/dist/shared/lib/http/index.js +8 -0
  553. package/dist/shared/lib/http/ip.js +135 -0
  554. package/dist/shared/lib/init.js +99 -0
  555. package/dist/shared/lib/logger.js +125 -0
  556. package/dist/shared/lib/metadata/index.js +64 -0
  557. package/dist/shared/lib/npm.server.js +21 -0
  558. package/dist/shared/lib/rateLimit.server.js +339 -0
  559. package/dist/shared/lib/registry.js +144 -0
  560. package/dist/shared/lib/request-boundary.js +11 -0
  561. package/dist/shared/lib/semver.js +72 -0
  562. package/dist/shared/lib/seo/index.js +195 -0
  563. package/dist/shared/lib/slug.js +15 -0
  564. package/dist/shared/lib/supported.server.js +22 -0
  565. package/dist/shared/lib/version.js +4 -0
  566. package/dist/shared/public/GlobalError.client.js +59 -0
  567. package/dist/shared/public/PublicError.client.js +23 -0
  568. package/dist/shared/public/PublicShell.client.js +157 -0
  569. package/dist/shared/public/ThemeToggle.client.js +22 -0
  570. package/dist/shared/public/index.js +8 -0
  571. package/dist/shared/styles/core.css +548 -0
  572. package/dist/shared/utils/currency.js +26 -0
  573. package/dist/tools/build.server.js +22 -0
  574. package/dist/tools/changelog.server.js +295 -0
  575. package/dist/tools/check-bundle.server.js +211 -0
  576. package/dist/tools/check-colors.server.js +81 -0
  577. package/dist/tools/cli.js +182 -0
  578. package/dist/tools/contract.server.js +169 -0
  579. package/dist/tools/effects.server.js +352 -0
  580. package/dist/tools/notices.server.js +197 -0
  581. package/dist/tools/package.server.js +128 -0
  582. package/dist/tools/publish.server.js +162 -0
  583. package/dist/tools/release-check.server.js +80 -0
  584. package/dist/tools/release.server.js +387 -0
  585. package/dist/tools/run.server.js +37 -0
  586. package/dist/tools/sync-version.server.js +30 -0
  587. package/dist/tools/test-clean.server.js +68 -0
  588. package/dist/tools/test-schemas.server.js +98 -0
  589. package/dist/tools/test.server.js +197 -0
  590. package/dist/tools/tsup.server.js +33 -0
  591. package/package.json +435 -4
  592. package/supported.json +34 -0
package/.env.example ADDED
@@ -0,0 +1,55 @@
1
+ # Modèle des variables du projet, suivi par git. Il ne porte aucune valeur
2
+ # secrète et n'est lu par rien : copier ce fichier en .env.local, puis le
3
+ # remplir. .env.local reste sur la machine, git l'ignore.
4
+ #
5
+ # En production, saisir ces variables dans la plateforme d'hébergement
6
+ # (Coolify, par exemple), jamais dans un fichier suivi par git.
7
+ # FRAZA_ENCRYPTION_KEY s'y copie telle quelle depuis .env.local : elle ne doit
8
+ # jamais changer.
9
+
10
+ # CORE
11
+ NEXT_PUBLIC_URL=http://localhost:3000
12
+ FRAZA_NAME=Fraza
13
+
14
+ # PROXY (activer si derrière un reverse proxy)
15
+ FRAZA_TRUST_PROXY=false
16
+
17
+ # DATABASE
18
+ # postgres://utilisateur:mot-de-passe@hôte:5432/base
19
+ FRAZA_DATABASE_URL=
20
+
21
+ # CHIFFREMENT
22
+ # 64 caractères hexadécimaux, générés par npx @fraza/start dans .env.local.
23
+ FRAZA_ENCRYPTION_KEY=
24
+
25
+ # STORAGE
26
+ # Fournisseur : 'backblaze' (défaut) ou 'r2'
27
+ FRAZA_STORAGE_PROVIDER=backblaze
28
+ # Backblaze : s3.<region>.backblazeb2.com | R2 : <accountId>.r2.cloudflarestorage.com
29
+ FRAZA_STORAGE_ENDPOINT=
30
+ FRAZA_STORAGE_REGION=
31
+ FRAZA_STORAGE_BUCKET=
32
+ FRAZA_STORAGE_ACCESS_KEY=
33
+ FRAZA_STORAGE_SECRET_KEY=
34
+
35
+ # EMAIL
36
+ # Fournisseur : 'resend' (défaut) ou 'smtp'
37
+ FRAZA_EMAIL_PROVIDER=resend
38
+ FRAZA_EMAIL_FROM_NAME="EXEMPLE"
39
+ FRAZA_EMAIL_FROM_ADDRESS=app@exemple.com
40
+ # RESEND
41
+ FRAZA_EMAIL_RESEND_APIKEY=
42
+
43
+ # AUTH SETTINGS
44
+ FRAZA_AUTH_REDIRECT_AFTER_LOGIN=/admin
45
+ FRAZA_AUTH_SESSION_COOKIE_NAME=fraza_session
46
+ FRAZA_AUTH_REGISTRATION=true
47
+
48
+ # UPDATES
49
+ FRAZA_UPDATE_CHECK=true
50
+
51
+ # OTHERS
52
+ NEXT_TELEMETRY_DISABLED=1
53
+
54
+ # DEVKIT (developer tools)
55
+ FRAZA_DEVKIT=false
package/CHANGELOG.md ADDED
@@ -0,0 +1,410 @@
1
+ # Journal des versions
2
+
3
+ Historique des versions publiées de `@fraza/core`.
4
+
5
+ Ce fichier est généré par `fraza-module changelog` à partir des messages de commit. Ne pas le modifier à la main.
6
+
7
+ ## 0.3.6 (2026-10-25)
8
+
9
+ Maintenance interne, aucun changement de comportement.
10
+
11
+ ## 0.3.5 (2026-10-25)
12
+
13
+ ### Refontes
14
+
15
+ - **docs, src/tools, test/tools** : update documentation and CLI for version intermediately published on Fraza registry (0595be8)
16
+
17
+ ## 0.3.4 (2026-10-24)
18
+
19
+ ### Refontes
20
+
21
+ - **docs/00-decouverte/01-qu-est-ce-que-fraza.md, docs/01-demarrage/01-installation.md, etc.** : update registry and installation documentation (5867afc)
22
+
23
+ ## 0.3.3 (2026-10-24)
24
+
25
+ ### Corrections
26
+
27
+ - update icons and documentation (c0bb07e)
28
+
29
+ ## 0.3.2 (2026-10-24)
30
+
31
+ ### Refontes
32
+
33
+ - **plan.server.js** : extract npm view value handling into a reusable function (94c0231)
34
+
35
+ ## 0.3.1 (2026-10-24)
36
+
37
+ ### Ruptures
38
+
39
+ - answer every API error from a French catalogue, let handlers throw ApiError
40
+ - version the module contract, refuse an unknown one at startup
41
+ - refuse an upload in French, with a stable code per layer
42
+ - keep only the Stripe webhook, verify its signature without the SDK
43
+ - publish a digest of a file's etag, never the value itself
44
+ - answer 404 for an unknown or refused admin page, inside the shell
45
+ - render Table as a compact list on narrow screens, open its rows from the keyboard
46
+ - replace Headless UI with a native dialog and a shared menu primitive
47
+ - ship IBM's own WOFF2 subsets of Plex Sans and Plex Mono
48
+ - resolve a path once per request, keep a failing resolver from taking the others down
49
+ - answer ETag, 304, byte ranges and Cache-Control in buildFileResponse
50
+ - declare a page's title and permission on the server, load its code on demand
51
+ - declare in sideEffects only the files that act when imported
52
+ - give each shared component its own entry, fail a module public page on a heavy barrel
53
+ - boot from @fraza/core/init, keep only the boot and the config at the root
54
+ - drop the public loading screen, which made every unknown URL answer 200
55
+ - answer a sign-up the same way whether or not the address has an account
56
+ - hash a new account's password before its transaction opens
57
+ - keep the admin role on its last holder
58
+ - refuse the admin password, address and reset routes on one's own account
59
+ - ship .env.example as a secret-free template, keep values in .env.local
60
+ - write the project .npmrc in mode 0600 and warn about a token that can publish
61
+ - store only the SHA-256 of session and link tokens, spend links atomically
62
+ - read admin.access from the roles, drop the legacy role column
63
+ - grant only what one holds, change only accounts one outranks
64
+ - move account rules into a core/users service, written in transactions
65
+ - refuse register() on an empty database
66
+ - find system roles by a stable key and lock their name
67
+ - store e-mail addresses normalized, unique regardless of case
68
+ - stop exposing setSessionCookie and refreshSessionCookie as actions
69
+ - remove dead user queries, refreshSession and the auth re-export shims
70
+ - stop the per-email counter from locking the owner out of their account
71
+ - throw from queueEmail when it cannot queue inside a transaction
72
+ - require Next.js 16
73
+ - call the Resend REST API with fetch instead of the SDK
74
+ - load the project env files without dotenv, require Node 20.12
75
+ - render emails with the core's own components instead of react-email
76
+ - validate storage policies and refuse an unknown type
77
+ - refuse an extension key or a route already taken by another source
78
+ - lock jobs across instances in fraza_cron_runs and record every run
79
+ - share counters through PostgreSQL, keep unknown addresses limited
80
+ - encode S3 metadata values and send the URL that was signed
81
+ - cap request bodies per route, answer 405 and 413
82
+ - add the shared http entry with apiFetch and the client IP readers
83
+ - add civil date helpers and todayInZone, format in fr-CA by default
84
+ - bound migration lock waits and reject malformed migrations
85
+ - verify the TLS certificate by default, whatever NODE_ENV says
86
+
87
+ ### Action requise
88
+
89
+ - `npx fraza-db migrate`
90
+ - `npx fraza-doctor --fix`
91
+
92
+ ### Variables d'environnement
93
+
94
+ - Ajoutée : `FRAZA_ADMIN_SITE_LINK`
95
+ - Ajoutée : `FRAZA_AUTH_REDIRECT_AFTER_LOGIN`
96
+ - Ajoutée : `FRAZA_AUTH_REGISTRATION`
97
+ - Ajoutée : `FRAZA_AUTH_SESSION_COOKIE_NAME`
98
+ - Ajoutée : `FRAZA_AUTH_SESSION_MAX_AGE_DAYS`
99
+ - Ajoutée : `FRAZA_CURRENCY`
100
+ - Ajoutée : `FRAZA_CURRENCY_SYMBOL`
101
+ - Ajoutée : `FRAZA_DATABASE_URL`
102
+ - Ajoutée : `FRAZA_DATE_FORMAT`
103
+ - Ajoutée : `FRAZA_DB_CONNECT_TIMEOUT_MS`
104
+ - Ajoutée : `FRAZA_DB_MIGRATION_LOCK_TIMEOUT_MS`
105
+ - Ajoutée : `FRAZA_DB_POOL_MAX`
106
+ - Ajoutée : `FRAZA_DB_SSL_CA`
107
+ - Ajoutée : `FRAZA_DB_STATEMENT_TIMEOUT_MS`
108
+ - Ajoutée : `FRAZA_DEVKIT`
109
+ - Ajoutée : `FRAZA_EMAIL_FROM_ADDRESS`
110
+ - Ajoutée : `FRAZA_EMAIL_FROM_NAME`
111
+ - Ajoutée : `FRAZA_EMAIL_LOGO`
112
+ - Ajoutée : `FRAZA_EMAIL_LOGO_URL`
113
+ - Ajoutée : `FRAZA_EMAIL_OUTBOX_RETENTION_DAYS`
114
+ - Ajoutée : `FRAZA_EMAIL_PROVIDER`
115
+ - Ajoutée : `FRAZA_EMAIL_RESEND_APIKEY`
116
+ - Ajoutée : `FRAZA_EMAIL_SMTP_HOST`
117
+ - Ajoutée : `FRAZA_EMAIL_SMTP_PASSWORD`
118
+ - Ajoutée : `FRAZA_EMAIL_SMTP_PORT`
119
+ - Ajoutée : `FRAZA_EMAIL_SMTP_REQUIRE_TLS`
120
+ - Ajoutée : `FRAZA_EMAIL_SMTP_SECURE`
121
+ - Ajoutée : `FRAZA_EMAIL_SMTP_TIMEOUT_MS`
122
+ - Ajoutée : `FRAZA_EMAIL_SMTP_TLS_NO_VERIFY`
123
+ - Ajoutée : `FRAZA_EMAIL_SMTP_USER`
124
+ - Ajoutée : `FRAZA_ENCRYPTION_KEY`
125
+ - Ajoutée : `FRAZA_IMAGE_CONCURRENCY`
126
+ - Ajoutée : `FRAZA_IMAGE_MAX_PIXELS`
127
+ - Ajoutée : `FRAZA_LOGO_URL`
128
+ - Ajoutée : `FRAZA_LOGO_URL_DARK`
129
+ - Ajoutée : `FRAZA_LOG_FORMAT`
130
+ - Ajoutée : `FRAZA_LOG_LEVEL`
131
+ - Ajoutée : `FRAZA_NAME`
132
+ - Ajoutée : `FRAZA_SEO`
133
+ - Ajoutée : `FRAZA_SEO_SEPARATOR`
134
+ - Ajoutée : `FRAZA_SEO_TITLE_TEMPLATE`
135
+ - Ajoutée : `FRAZA_SITE_URL`
136
+ - Ajoutée : `FRAZA_STORAGE_ACCESS_KEY`
137
+ - Ajoutée : `FRAZA_STORAGE_BUCKET`
138
+ - Ajoutée : `FRAZA_STORAGE_ENDPOINT`
139
+ - Ajoutée : `FRAZA_STORAGE_PROVIDER`
140
+ - Ajoutée : `FRAZA_STORAGE_REGION`
141
+ - Ajoutée : `FRAZA_STORAGE_SECRET_KEY`
142
+ - Ajoutée : `FRAZA_STORAGE_TIMEOUT_MS`
143
+ - Ajoutée : `FRAZA_SUPPORT_EMAIL`
144
+ - Ajoutée : `FRAZA_TEST_DATABASE_URL`
145
+ - Ajoutée : `FRAZA_TEST_SCHEMA_TTL_HOURS`
146
+ - Ajoutée : `FRAZA_TIMEZONE`
147
+ - Ajoutée : `FRAZA_TRUST_PROXY`
148
+ - Ajoutée : `FRAZA_UPDATE_CHAIN`
149
+ - Ajoutée : `FRAZA_UPDATE_CHECK`
150
+ - Ajoutée : `NEXT_PUBLIC_URL`
151
+ - Ajoutée : `NEXT_TELEMETRY_DISABLED`
152
+ - Ajoutée : `STRIPE_WEBHOOK_SECRET`
153
+
154
+ ### Ajouts
155
+
156
+ - **test/tools.test.js** : add tests for icons package refactor(package.server.js): add ICONS_NAME constant and update package profile (4e0aebe)
157
+ - add devkit colors page (867fcee)
158
+ - **core** : add `markUnread` and `deleteNotification` functions and routes (43c92ad)
159
+ - **admin** : add devkit scenario endpoint (a711593)
160
+ - **core** : add notification system (1a03ce5)
161
+ - **tools** : accept an exact version in fraza-module release (11c0951)
162
+ - **tools** : bump the version in fraza-module release, patch by default (a2e7a44)
163
+ - **CHANGELOG, package.json** : update version and changelog content (5fc6b48)
164
+ - **api** : answer every API error from a French catalogue, let handlers throw ApiError (3891bc9)
165
+ - **modules** : declare soft dependencies with manifest.optionalModules (e99f9af)
166
+ - **modules** : version the module contract, refuse an unknown one at startup (f43e006)
167
+ - **compat** : check the peer range of a module even when it declares requiresCore (73f4252)
168
+ - **tools** : add fraza-module test-clean to drop the leftover test schemas (309a0d6)
169
+ - **tools** : drop the live test schemas on SIGINT and SIGTERM (264637d)
170
+ - **tools** : date the test schemas and sweep the ones a killed process left (f723e01)
171
+ - **api** : measure a file read on demand, answer its length and its ranges (d14fc9d)
172
+ - **api** : let a file descriptor add X- headers to its response (76e18ff)
173
+ - **api** : let the read of a file refuse it with a status of its own (941eada)
174
+ - **users** : export the account input rules from a neutral @fraza/core/users/validation (dd1f281)
175
+ - **ui** : let Combobox search on the server (1d27120)
176
+ - **ui** : let a Table offer its own page sizes (6a0fefd)
177
+ - **tools** : give module tests the core tables, the migration context and the Next hook (e344924)
178
+ - **crypto** : derive a key per purpose, sign and verify short tokens (756d4e5)
179
+ - **database** : leave expected SQLSTATE codes out of the logs, add isUniqueViolation (49adbfc)
180
+ - **sql** : add escapeLike and containsPattern, clamp a limit of many digits to max (1e78a3b)
181
+ - **http** : add truncateIp, the network of an address in CIDR form (a9099aa)
182
+ - **storage** : add isStorageConfigured and deletePrefix (e9206a8)
183
+ - **api** : export runAfterResponse and parseFormData (220cf1b)
184
+ - **email** : export ADDRESS from a neutral @fraza/core/email/address entry (d09af47)
185
+ - **dates** : edit an instant in a time zone, hand the site's zone to the admin pages (e67d95c)
186
+ - **api** : answer 502 and 503, let apiSuccess carry response headers (7d04124)
187
+ - **api** : let a file response refuse conditional requests (472c6d2)
188
+ - **api** : answer 404 when the read of a file finds the object gone (d948c67)
189
+ - **ui** : render Table as a compact list on narrow screens, open its rows from the keyboard (13de5f7)
190
+ - **ui** : replace Headless UI with a native dialog and a shared menu primitive (5796f75)
191
+ - **ui** : read the session of the admin and auth routes in a Suspense boundary under Cache Components (d340754)
192
+ - **public-content** : add revalidatePublicContent(tag) for a module's cached public reads (899b46d)
193
+ - **api** : answer ETag, 304, byte ranges and Cache-Control in buildFileResponse (c1f3ca9)
194
+ - **admin** : declare a page's title and permission on the server, load its code on demand (3f1dff6)
195
+ - **tools** : check a module's ./client entry for server code (aea6541)
196
+ - **components** : give each shared component its own entry, fail a module public page on a heavy barrel (74ae803)
197
+ - **init** : boot from @fraza/core/init, keep only the boot and the config at the root (2d8e93a)
198
+ - **doctor** : expect the error, loading and global error files in the project contract (1789380)
199
+ - **ui** : add the error, loading and global error screens a project re-exports (cd62024)
200
+ - **doctor** : warn when a FRAZA_MODULE_* flag differs from the generated manifest (f07ef03)
201
+ - **doctor** : report an env file tracked by git that carries a secret (3abb245)
202
+ - **env** : ship .env.example as a secret-free template, keep values in .env.local (07dabdd)
203
+ - **auth** : read a session with its user in one query and end it after an absolute lifetime (79412f2)
204
+ - **auth** : hash passwords in a versioned scrypt format and rehash old ones at sign-in (15aabe1)
205
+ - **admin** : check a new user's fields with the shared rules before sending (226cdb9)
206
+ - **users** : find system roles by a stable key and lock their name (8f9b94c)
207
+ - **users** : store e-mail addresses normalized, unique regardless of case (ea9ca43)
208
+ - **email** : send a Resend idempotency key with every outbox attempt (498fcf9)
209
+ - **email** : add the shared email parts entry (7ab6d6a)
210
+ - **email** : render emails with the core's own components instead of react-email (6ab8c5b)
211
+ - **registry** : refuse an extension key or a route already taken by another source (4966e45)
212
+ - **cron** : purge expired sessions, tokens, counters and old outbox rows hourly (43a1eb2)
213
+ - **email** : add an outbox that stores emails before sending and retries them (529616f)
214
+ - **cron** : lock jobs across instances in fraza_cron_runs and record every run (d76fd47)
215
+ - **rate-limit** : share counters through PostgreSQL, keep unknown addresses limited (fd77c93)
216
+ - **api** : cap request bodies per route, answer 405 and 413 (d827533)
217
+ - **storage** : add bounded image processing on a lazily loaded sharp (569aeac)
218
+ - **storage** : add a streamed ZIP writer with ZIP64 (b5d42c2)
219
+ - **tools** : fail the core build when a client-safe entry reaches server code (af9f894)
220
+ - **http** : add the shared http entry with apiFetch and the client IP readers (c812919)
221
+ - **dates** : add civil date helpers and todayInZone, format in fr-CA by default (d4b1828)
222
+ - **slug** : add a shared slugify and a database uniqueSlug (7cc6315)
223
+ - **database** : add the shared sql helpers entry (8974e89)
224
+ - **database** : show the env files and the target database before fraza-db writes (e187b63)
225
+ - **database** : make the pool configurable, keep it on globalThis, return DATE as strings (9e79fcc)
226
+ - **logger** : keep error stacks, write failures to stderr, add json format and email masking (10f1d39)
227
+ - **tools** : add the fraza-module command shared by every package (d9b2418)
228
+ - **modules** : recognise the @fraza-pro scope for Pro modules (6a9db8f)
229
+ - **docs** : add icon support and documentation (231d39d)
230
+ - initial Fraza 0.1.0 codebase (f99a054)
231
+
232
+ ### Corrections
233
+
234
+ - **docs** : remove and rephrase description of `requiresCore` in module creation guide (5488a6f)
235
+ - **api** : remove redundant sibling handling logic (f0fade0)
236
+ - **src/shared/icons** : remove deprecated components (8ce40e5)
237
+ - **core** : update documentation for authentication page handling (420f4b1)
238
+ - **shared-icons** : update icon sources and documentation (36b1c20)
239
+ - **src/features/admin/components/AdminShell.js** : set `position: relative` on shell and main for better overflow handling (b77a521)
240
+ - update paths in package.json and documentation (3dc2ee3)
241
+ - **tools** : warn about breaking changes in a patch release instead of refusing it (2a9758a)
242
+ - **tools** : find each dependency on disk instead of trusting npm's path (092beeb)
243
+ - **tools** : refuse to bump again over a release stopped after its commit (52fb015)
244
+ - **tools** : push the release branch and its tag atomically (fbc577a)
245
+ - **tools** : fetch before a release, refuse a branch behind its remote (3551bba)
246
+ - **tools** : refuse a release level below the breaking changes waiting (cbbb6b5)
247
+ - **package** : bump version to 0.2.0 (f2c5876)
248
+ - **api** : percent-encode ' ( ) * in filename* as RFC 8187 asks (cf35ac0)
249
+ - **admin** : show the French message of a refused profile or user call (a2f011b)
250
+ - **media-registry** : answer a write without the media module in French, with a code (1b0038e)
251
+ - **api** : give Content-Disposition a readable ASCII filename fallback (afd0e6f)
252
+ - **payments** : answer the Stripe webhook refusals in French (eeb573a)
253
+ - **storage** : refuse a file in French, answer a storage outage with a 502 (c75cfcf)
254
+ - **auth** : answer the user and role routes in French, leave internal errors to the router (612b405)
255
+ - **admin** : clear a page's error when its path changes under the same slug (e63ff8e)
256
+ - **storage** : refuse an upload in French, with a stable code per layer (df7f4f3)
257
+ - **media-registry** : pass client to the block helpers and getMediaByIds, keep the 404 out of caches (93caa5f)
258
+ - **admin** : pass the server title down to the header of the roles page (14d1567)
259
+ - **ui** : name each selection checkbox of a table after its row (ca9b573)
260
+ - **ui** : open a table row from a real button on its title, not a focusable tr (b34cd19)
261
+ - **ui** : keep a disabled menu item focusable, announced as disabled (d36ed0f)
262
+ - **ui** : describe a dialog by its sentence, make a confirmation an alert dialog (4b788fe)
263
+ - **ui** : open a dialog again after a native close its caller did not follow (597cd55)
264
+ - **ui** : let Escape close the « Aucun résultat » panel of TagInput, not its dialog (2fafc4c)
265
+ - **tools** : count a call in an initializer, a default export or a top-level if as an effect (6bc9d89)
266
+ - **admin** : download a page again after a failed chunk, on the way back too (6710b2c)
267
+ - **admin** : hide a nav item without the permission of the page it opens (b99ed26)
268
+ - **api** : publish a digest of a file's etag, never the value itself (b94bd18)
269
+ - **admin** : answer 404 for an unknown or refused admin page, inside the shell (13e8a79)
270
+ - **admin** : make the closed mobile drawer inert, close it on Escape, size it by dvh (7699d7e)
271
+ - **ui** : label the core form fields by useId, describe them and mark their errors (674d526)
272
+ - **blocks** : render a linked image from the filename the Medias module resolves (233ea1b)
273
+ - **hooks** : remove the mirror history entry of useUnsavedChanges once clean (394777a)
274
+ - **editor** : keep the block selection keys inside the editor that holds them (e4344c8)
275
+ - **blocks** : keep block links to http, https, mailto, tel and relative addresses (44c0753)
276
+ - **admin** : filter the bottom nav items by permission, mark them active in the browser (f06c2df)
277
+ - **ui** : drop the public loading screen, which made every unknown URL answer 200 (4b76a20)
278
+ - **auth** : apply the name rules on PUT /users/:id (b3cc93d)
279
+ - **users** : bound the memory a stored password hash may ask for, not each parameter (094963d)
280
+ - **auth** : check an older password hash in the time of a current one at sign-in (6a205a3)
281
+ - **auth** : answer a sign-up the same way whether or not the address has an account (c73232a)
282
+ - **auth** : issue and queue the verification link after the response of resendVerificationAction (1fb6d1a)
283
+ - **users** : hash a new account's password before its transaction opens (2c31327)
284
+ - **auth** : check the password before the address, count wrong current passwords (01ddfde)
285
+ - **auth** : let an invited account whose invitation is gone still be activated (4dc7242)
286
+ - **auth** : keep the admin role on its last holder (28a9c01)
287
+ - **auth** : refuse the admin password, address and reset routes on one's own account (9a6c7a5)
288
+ - **registry** : write the project .npmrc in mode 0600 and warn about a token that can publish (6f1f2c1)
289
+ - **auth** : issue and queue the reset link after the response of forgotPasswordAction (a95496e)
290
+ - **auth** : close the other sessions on a password or address change (8ed0db9)
291
+ - **auth** : stop writing the session cookie while rendering, make it last the whole session (60ba193)
292
+ - **auth** : store only the SHA-256 of session and link tokens, spend links atomically (b6f0836)
293
+ - **storage** : read admin.access from the roles, drop the legacy role column (01f5e8d)
294
+ - **auth** : grant only what one holds, change only accounts one outranks (1781737)
295
+ - **auth** : refuse register() on an empty database (0d73bed)
296
+ - **auth** : stop exposing setSessionCookie and refreshSessionCookie as actions (44067c3)
297
+ - **auth** : log a wrong password as one warning line, not an error with its stack (f6e8cfd)
298
+ - **auth** : rethrow Next.js control flow from getSession instead of logging it (fed7991)
299
+ - **auth** : stop the per-email counter from locking the owner out of their account (5f11241)
300
+ - **rate-limit** : keep the public guessing presets on the caller's address (00cb0ba)
301
+ - **cron** : run a locked job once per tick, not once per instance (521bc57)
302
+ - **maintenance** : purge in batches so a first purge fits under statement_timeout (4e4e638)
303
+ - **email** : throw from queueEmail when it cannot queue inside a transaction (5db9b9a)
304
+ - **database** : raise when PostgreSQL turns the COMMIT of transaction() into a ROLLBACK (ca574a0)
305
+ - **release** : annotate the version tag so git push --follow-tags sends it (fd1ae7a)
306
+ - **dates** : read the years 0 to 99 as given in daysBetweenISO (863db7a)
307
+ - **slug** : spell the combining marks range with escapes (4f6e83f)
308
+ - **storage** : validate storage policies and refuse an unknown type (436a050)
309
+ - **api** : apply a route's permission on user routes too (d4e5ccb)
310
+ - **auth** : rate limit sign-in and password flows per targeted e-mail too (3e0992d)
311
+ - **email** : bound SMTP connection, TLS handshake and whole send, add REQUIRE_TLS (db5d32e)
312
+ - **storage** : bound every S3 request, retry idempotent ones, batch deletes (3f32632)
313
+ - **storage** : encode S3 metadata values and send the URL that was signed (89f9f0a)
314
+ - **payments** : rate limit the Stripe webhook and cap its body at 64 KiB (b502d15)
315
+ - **database** : bound migration lock waits and reject malformed migrations (19a8742)
316
+ - **database** : verify the TLS certificate by default, whatever NODE_ENV says (c285388)
317
+ - **database** : rethrow non-database errors from transaction() untouched (658f551)
318
+ - **database** : check table, column and index existence in the current schema (8880c81)
319
+ - Correct dimensions and descriptions for the admin bar (2af9ab7)
320
+
321
+ ### Performance
322
+
323
+ - **fonts** : ship IBM's own WOFF2 subsets of Plex Sans and Plex Mono (2415acb)
324
+ - **public-content** : resolve a path once per request, keep a failing resolver from taking the others down (7b2b365)
325
+ - **hooks** : track the dirty state of useUnsavedChanges with a revision counter (8488ba6)
326
+ - **editor** : render only the changed block on a keystroke (445b283)
327
+ - **build** : declare in sideEffects only the files that act when imported (e1072ae)
328
+ - **api** : check admin.access and a route's permission with one read (23891d7)
329
+ - **users** : count a role's permissions and holders with subqueries (6998ed1)
330
+ - **auth** : ask once per request whether an account exists (e542776)
331
+ - **auth** : read the session and the permissions once per request (3e79232)
332
+
333
+ ### Refontes
334
+
335
+ - **ui** : update icon references in multiple documents and code files (35d3dc6)
336
+ - **cli** : update `release` command to include adjacent packages and Fraza dependency versions (1419609)
337
+ - **core** : align dependencies with core range (2af2390)
338
+ - **shared** : update documentation and component descriptions (42af50a)
339
+ - **drive** : update icon logic and documentation (1307692)
340
+ - **admin** : update widget registration with title, description, and size (af76bd2)
341
+ - **shared/components/Modal.js** : handle `close` event delay during reopens (32f6f23)
342
+ - **admin** : update breadcrumb logic and documentation (f1fbb40)
343
+ - **api, docs, style** : update theme descriptions and styles (c14e0ae)
344
+ - **admin** : reorganize and improve components layout (2495abc)
345
+ - **auth** : add anti-bot feature and update security guidelines (a6e3238)
346
+ - **payments** : keep only the Stripe webhook, verify its signature without the SDK (6507f25)
347
+ - **users** : move account rules into a core/users service, written in transactions (3af5f0e)
348
+ - **users** : keep the password and name rules in one shared module (71418a8)
349
+ - **users** : remove dead user queries, refreshSession and the auth re-export shims (b544c28)
350
+ - **email** : call the Resend REST API with fetch instead of the SDK (98fc714)
351
+ - **admin** : enhance sidebar section toggle and state persistence (018c0df)
352
+ - **admin** : update navigation sections and groups (16c98bc)
353
+ - **auth** : update logo positioning and page dimensions (b29dbb9)
354
+ - **auth** : removed unused AuthLogoContext (78a5e2c)
355
+ - **icons** : remove old icons (e43e7f5)
356
+
357
+ ### Documentation
358
+
359
+ - **03-reference/04-partage/icones.md** : improve usage instructions for icon package (ea5aebe)
360
+ - **module** : update package notices and documentation (68e8baf)
361
+ - **docs/03-reference/04-partage/icones.md** : add detailed drawing rules for icons (74fbb08)
362
+ - update permissions and roles documentation (5b22cff)
363
+ - enhance installation and tour guides (e69f488)
364
+ - **00-decouverte, 01-demarrage, 06-structure-du-projet** : update API route paths (68826b2)
365
+ - **publication** : describe how @fraza/start runs fraza-module and its version module (fbc8221)
366
+ - **posts** : document the term_taken refusal of a duplicate term title (88f3f72)
367
+ - **design-system** : describe the inert mobile drawer and the title button of a table row (ad65d74)
368
+ - **guides** : answer a storage failure with a 502 and a failed job with the catalogue 500 (44aad16)
369
+ - **posts** : document the French refusals and codes of the post and term routes (f2ff9c8)
370
+ - **pages** : document the codes of the conflicts of a page (6a56782)
371
+ - **medias** : document the codes of a refused media and the French file route texts (f038c48)
372
+ - **forms** : document details.fieldErrors and the codes of a refusal (530b1bd)
373
+ - **drive** : document the error codes of the drive routes (fba1ea0)
374
+ - **booking** : document the error answers and their codes (cdb0a96)
375
+ - **facturation** : document the error answers of the billing routes (dc43d3e)
376
+ - **pages, posts** : the media module is an optional module, reminded by fraza-doctor (bc89a79)
377
+ - drop the long dash inside sentences of the api barrel, the logger and the handler signature comments (351dac1)
378
+ - **drive** : link listCronRuns to the cron reference without a guessed anchor (1b8d2b0)
379
+ - **medias** : getMediaByIds reads on the caller's client (877ee6e)
380
+ - **drive** : describe the bounded history, the share unlock counter, the deletion queue and the core zip (9aae20f)
381
+ - **booking** : describe one slot rule, the signed form token, framing, the outbox and theme colours (e020a91)
382
+ - **billing** : describe the serialized ledger, the module's own Stripe and PDF, credit notes and the outbox (070d78e)
383
+ - **posts** : describe strict declarations, private fields everywhere, batched reads and transactional writes (31c47a5)
384
+ - **pages** : describe the server-paged tree, the restricted delete, the recursive resolution and the cache tag (b99c499)
385
+ - **medias** : describe the type table, the core image pipeline and the references in a transaction (2dfb5c4)
386
+ - **forms** : describe the per-type validation, the signed delay token, privacy and retention (156700b)
387
+ - **pages, posts** : the compact list keeps the depth of a child (14d9dea)
388
+ - **billing** : the public invoice sends both layouts of its lines (3016f6b)
389
+ - **posts** : the block editor loads with the form, not with the lists (39c37c3)
390
+ - **pages** : the block editor loads with the form, not with the list (fdcb93c)
391
+ - **drive** : the counted download refuses conditional requests (b6514e5)
392
+ - **drive** : a preview or thumbnail whose object is gone answers 404 (cc082f8)
393
+ - **modules** : describe the admin 404 without the read permission, the compact lists and the file answers of the adapted modules (a3a86ee)
394
+ - **drive** : the unlock route counts on the share_unlock preset (2d04f23)
395
+ - **env** : align the env file comments with .env.local and the platform variables (d26fc96)
396
+ - **users** : name consumeEmailChangeToken, which replaced verifyEmailChangeToken (15c04d9)
397
+ - **modules** : say the version module comes from fraza-module sync-version (8eb61fc)
398
+ - **database** : say which hosted databases need FRAZA_DB_SSL_CA (666372a)
399
+ - **drive** : say the blocklist reads the raw suffix of the name (8fcd793)
400
+ - **modules** : document the body ceilings of the drive, medias and forms uploads (4639e2f)
401
+ - **http** : point the proxy settings at the http page (b5050dc)
402
+ - split modules into Gratuit and Pro, drop login from getting started (f1907fc)
403
+ - **admin** : remove unused mention from sidebar description (fa9701b)
404
+
405
+ ### Autres
406
+
407
+ - docs/refactor: add documentation for fraza-update and fraza-doctor (b096e8f)
408
+ - docs/02-guides/mettre-a-jour-un-projet.md,.docs/03-reference/05-cli/fraza-doctor.md,src/core/doctor/imports.server.js,test/doctor-imports.test.js: Update deprecated imports for @fraza/icons (0.2.22) (c5e7954)
409
+ - docs/drive): Improve menu actions and add copy functionality (f5def22)
410
+ - Initial commit (7eda0fc)
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 HYKO
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,57 @@
1
- # Temporary Holding Version
1
+ # Fraza
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ Fraza est un starter kit Next.js avec un back-office modulaire, conçu au Québec. `@fraza/core` est son paquet principal : il apporte à un projet Next.js ordinaire les comptes, la connexion, les rôles, une administration complète et les services que tout projet web refait à chaque fois. Les fonctionnalités s'ajoutent par des modules `@fraza/module-*`, et le projet reste le vôtre.
4
+
5
+ > [!WARNING]
6
+ > Fraza est en version `0.x`. L'API, la structure et les fonctionnalités peuvent encore changer : une nouvelle version mineure peut contenir un changement cassant.
7
+
8
+ ## Fonctionnalités
9
+
10
+ - **Authentification** : inscription, connexion, mot de passe oublié, vérification du courriel, invitations.
11
+ - **Administration** : tableau de bord avec widgets, utilisateurs, rôles et permissions, profil, mode sombre.
12
+ - **Modules** : chaque module apporte ses tables, ses écrans d'admin, ses permissions et ses routes, sans modifier le core.
13
+ - **Site public** : pages servies à la racine du domaine, avec un système de templates.
14
+ - **Routeur API** : API REST avec authentification, protection CSRF et limitation du débit.
15
+ - **Courriels** : gabarits écrits avec React Email.
16
+ - **Stockage** : fichiers sur un stockage objet compatible S3.
17
+ - **Paiements** : intégration Stripe.
18
+ - **Tâches planifiées** : exécution de tâches programmées.
19
+ - **Outillage** : commandes `fraza-db`, `fraza-modules`, `fraza-key`, `fraza-doctor` et `fraza-update`.
20
+
21
+ ## Documentation
22
+
23
+ Toute la documentation vit dans [docs/](./docs/index.md).
24
+
25
+ | Section | Contenu |
26
+ |---|---|
27
+ | [Démarrage](./docs/01-demarrage/index.md) | De l'installation au premier module, à lire dans l'ordre. |
28
+ | [Guides](./docs/02-guides/index.md) | Un cas d'usage par page. |
29
+ | [Référence](./docs/03-reference/index.md) | Chaque module, fonction, commande et variable d'environnement. |
30
+ | [Architecture](./docs/04-architecture/index.md) | Principes, frontières serveur/client, build, sécurité, design system. |
31
+ | [Contribution](./docs/05-contribution/index.md) | Conventions de code, de rédaction, de commit et publication. |
32
+ | [Modules](./docs/06-modules/index.md) | Usage des modules officiels `@fraza/module-*` et `@fraza-pro/module-*`. |
33
+
34
+ La documentation est **livrée dans le package** : un projet qui installe `@fraza/core` la trouve sous `node_modules/@fraza/core/dist/docs/`, pour la version exacte qu'il utilise.
35
+
36
+ ## Démarrage rapide
37
+
38
+ ```bash
39
+ npm config set "@fraza:registry" https://registry.fraza.ca/
40
+ npx @fraza/start
41
+ npx fraza-db init
42
+ npm run dev
43
+ ```
44
+
45
+ Aucun compte n'est demandé : le core et les modules gratuits se lisent librement sur le registre. Le détail, et la connexion pour les modules Pro, est dans [Installation](./docs/01-demarrage/01-installation.md).
46
+
47
+ ## Sécurité
48
+
49
+ Pour signaler une faille de sécurité, voir [SECURITY.md](./SECURITY.md).
50
+
51
+ ## Licence
52
+
53
+ Licence MIT. Copyright (c) 2026 HYKO. Voir [LICENSE](./LICENSE).
54
+
55
+ Ce paquet fait partie de Fraza Libre. Les dépendances tierces et leurs licences sont listées dans [THIRD-PARTY-NOTICES.md](./THIRD-PARTY-NOTICES.md).
56
+
57
+ Les modules Facturation, Rendez-vous et Fichiers (`@fraza-pro/module-billing`, `@fraza-pro/module-booking`, `@fraza-pro/module-drive`) sont distribués à part, sous la licence Fraza Pro. Leur installation demande un compte sur le registre. Le modèle est expliqué dans [Licence et propriété](./docs/04-architecture/07-licence-et-propriete.md).