nodefony 7.0.2 → 10.0.0-alpha.2

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 (903) hide show
  1. package/.ai/symbols.json +36135 -0
  2. package/LICENSE +544 -0
  3. package/README.md +316 -694
  4. package/bin/nodefony +2183 -85
  5. package/dist/client/Container.js +367 -0
  6. package/dist/client/Event.js +198 -0
  7. package/dist/client/Service.js +344 -0
  8. package/dist/client/Tools.js +162 -0
  9. package/dist/client/client/ClientKernel.js +276 -0
  10. package/dist/client/client/angular/index.js +352 -0
  11. package/dist/client/client/announce.js +212 -0
  12. package/dist/client/client/debugbar/DebugBar.js +1624 -0
  13. package/dist/client/client/debugbar/format.js +103 -0
  14. package/dist/client/client/debugbar/hmr.js +37 -0
  15. package/dist/client/client/debugbar/index.js +29 -0
  16. package/dist/client/client/debugbar/model.js +133 -0
  17. package/dist/client/client/debugbar/network.js +173 -0
  18. package/dist/client/client/debugbar/profile.js +114 -0
  19. package/dist/client/client/index.js +34 -0
  20. package/dist/client/client/react/index.js +268 -0
  21. package/dist/client/client/realtime/AdaptiveRate.js +240 -0
  22. package/dist/client/client/realtime/BrowserWsTransport.js +57 -0
  23. package/dist/client/client/realtime/RealtimeClient.js +898 -0
  24. package/dist/client/client/realtime/localEvents.js +56 -0
  25. package/dist/client/client/realtime/notice.js +125 -0
  26. package/dist/client/client/realtime/observe.js +280 -0
  27. package/dist/client/client/roles/index.js +3 -0
  28. package/dist/client/client/roles/registry.js +97 -0
  29. package/dist/client/client/roles/roles.js +91 -0
  30. package/dist/client/client/shim/events.js +88 -0
  31. package/dist/client/client/shim/util.js +20 -0
  32. package/dist/client/client/svelte/index.js +319 -0
  33. package/dist/client/client/syslog/context.js +122 -0
  34. package/dist/client/client/syslog/errors.js +49 -0
  35. package/dist/client/client/syslog/uplink.js +106 -0
  36. package/dist/client/client/vue/index.js +321 -0
  37. package/dist/client/colors.js +63 -0
  38. package/dist/client/debugbar.standalone.js +4274 -0
  39. package/dist/client/realtime/IRealtimeTransport.js +32 -0
  40. package/dist/client/realtime/JsonRpcPeer.js +251 -0
  41. package/dist/client/realtime/channelRate.js +39 -0
  42. package/dist/client/realtime/platformChannels.js +155 -0
  43. package/dist/client/syslog/Pdu.js +224 -0
  44. package/dist/client/syslog/Syslog.js +1159 -0
  45. package/dist/client/syslog/drivers/pduFlow.js +106 -0
  46. package/dist/client/syslog/drivers/pduProtocol.js +28 -0
  47. package/dist/client/syslog/logColor.js +80 -0
  48. package/dist/client/types/src/Container.d.ts +221 -0
  49. package/dist/client/types/src/Event.d.ts +171 -0
  50. package/dist/client/types/src/FileClass.d.ts +184 -0
  51. package/dist/client/types/src/Service.d.ts +165 -0
  52. package/dist/client/types/src/Tools.d.ts +116 -0
  53. package/dist/client/types/src/client/ClientKernel.d.ts +90 -0
  54. package/dist/client/types/src/client/IClientKernel.d.ts +195 -0
  55. package/dist/client/types/src/client/angular/index.d.ts +273 -0
  56. package/dist/client/types/src/client/announce.d.ts +74 -0
  57. package/dist/client/types/src/client/debugbar/DebugBar.d.ts +279 -0
  58. package/dist/client/types/src/client/debugbar/format.d.ts +48 -0
  59. package/dist/client/types/src/client/debugbar/hmr.d.ts +16 -0
  60. package/dist/client/types/src/client/debugbar/index.d.ts +30 -0
  61. package/dist/client/types/src/client/debugbar/model.d.ts +158 -0
  62. package/dist/client/types/src/client/debugbar/network.d.ts +55 -0
  63. package/dist/client/types/src/client/debugbar/profile.d.ts +99 -0
  64. package/dist/client/types/src/client/index.d.ts +47 -0
  65. package/dist/client/types/src/client/react/index.d.ts +207 -0
  66. package/dist/client/types/src/client/realtime/AdaptiveRate.d.ts +138 -0
  67. package/dist/client/types/src/client/realtime/BrowserWsTransport.d.ts +27 -0
  68. package/dist/client/types/src/client/realtime/RealtimeClient.d.ts +573 -0
  69. package/dist/client/types/src/client/realtime/localEvents.d.ts +53 -0
  70. package/dist/client/types/src/client/realtime/notice.d.ts +70 -0
  71. package/dist/client/types/src/client/realtime/observe.d.ts +284 -0
  72. package/dist/client/types/src/client/roles/index.d.ts +15 -0
  73. package/dist/client/types/src/client/roles/registry.d.ts +72 -0
  74. package/dist/client/types/src/client/roles/roles.d.ts +68 -0
  75. package/dist/client/types/src/client/shim/cli-color.d.ts +2 -0
  76. package/dist/client/types/src/client/shim/events.d.ts +39 -0
  77. package/dist/client/types/src/client/shim/util.d.ts +14 -0
  78. package/dist/client/types/src/client/svelte/index.d.ts +216 -0
  79. package/dist/client/types/src/client/syslog/context.d.ts +76 -0
  80. package/dist/client/types/src/client/syslog/errors.d.ts +46 -0
  81. package/dist/client/types/src/client/syslog/uplink.d.ts +89 -0
  82. package/dist/client/types/src/client/transport/websocket.d.ts +5 -0
  83. package/dist/client/types/src/client/vue/index.d.ts +234 -0
  84. package/dist/client/types/src/colors.d.ts +32 -0
  85. package/dist/client/types/src/config/infra.d.ts +171 -0
  86. package/dist/client/types/src/kernel/bootReport.d.ts +112 -0
  87. package/dist/client/types/src/kernel/readinessRegistry.d.ts +104 -0
  88. package/dist/client/types/src/realtime/IRealtimeSocket.d.ts +142 -0
  89. package/dist/client/types/src/realtime/IRealtimeTransport.d.ts +50 -0
  90. package/dist/client/types/src/realtime/JsonRpcPeer.d.ts +251 -0
  91. package/dist/client/types/src/realtime/RealtimeEventMap.d.ts +269 -0
  92. package/dist/client/types/src/realtime/channelRate.d.ts +55 -0
  93. package/dist/client/types/src/realtime/platformChannels.d.ts +147 -0
  94. package/dist/client/types/src/syslog/Pdu.d.ts +134 -0
  95. package/dist/client/types/src/syslog/Syslog.d.ts +482 -0
  96. package/dist/client/types/src/syslog/drivers/ILogDriver.d.ts +177 -0
  97. package/dist/client/types/src/syslog/drivers/pduFlow.d.ts +53 -0
  98. package/dist/client/types/src/syslog/drivers/pduProtocol.d.ts +20 -0
  99. package/dist/client/types/src/syslog/logColor.d.ts +59 -0
  100. package/dist/client/types/src/types/ICliKernel.d.ts +28 -0
  101. package/dist/client/types/src/types/ICommand.d.ts +14 -0
  102. package/dist/client/types/src/types/IContainer.d.ts +35 -0
  103. package/dist/client/types/src/types/IKernel.d.ts +138 -0
  104. package/dist/client/types/src/types/IMcpTool.d.ts +157 -0
  105. package/dist/client/types/src/types/IModule.d.ts +73 -0
  106. package/dist/client/types/src/types/IPage.d.ts +119 -0
  107. package/dist/client/types/src/types/IService.d.ts +62 -0
  108. package/dist/client/types/src/types/ISyslog.d.ts +58 -0
  109. package/dist/client/types/src/types/ITransport.d.ts +5 -0
  110. package/dist/client/types/src/types/globals.d.ts +47 -0
  111. package/dist/node/Cli.js +750 -0
  112. package/dist/node/Container.js +367 -0
  113. package/dist/node/Error.js +309 -0
  114. package/dist/node/Event.js +198 -0
  115. package/dist/node/FileClass.js +308 -0
  116. package/dist/node/Nodefony.js +78 -0
  117. package/dist/node/Service.js +344 -0
  118. package/dist/node/Tools.js +205 -0
  119. package/dist/node/bin/resolveLocalCli.js +10 -0
  120. package/dist/node/bundler/index.js +103 -0
  121. package/dist/node/cli/agentTargets.js +461 -0
  122. package/dist/node/cli/aiMcp.js +553 -0
  123. package/dist/node/cli/aiMcpReport.js +129 -0
  124. package/dist/node/cli/aiSync.js +323 -0
  125. package/dist/node/cli/aiSyncReport.js +142 -0
  126. package/dist/node/cli/card.js +186 -0
  127. package/dist/node/cli/cardReport.js +110 -0
  128. package/dist/node/cli/completion.js +415 -0
  129. package/dist/node/cli/create.js +805 -0
  130. package/dist/node/cli/env.js +332 -0
  131. package/dist/node/cli/envReport.js +159 -0
  132. package/dist/node/cli/execPortable.js +60 -0
  133. package/dist/node/cli/gitHooks.js +191 -0
  134. package/dist/node/cli/gitHooksReport.js +119 -0
  135. package/dist/node/cli/globalFlags.js +67 -0
  136. package/dist/node/cli/helpReport.js +288 -0
  137. package/dist/node/cli/manPage.js +165 -0
  138. package/dist/node/cli/nodefonyBin.js +61 -0
  139. package/dist/node/cli/outdated.js +144 -0
  140. package/dist/node/cli/progress.js +555 -0
  141. package/dist/node/cli/projectRoot.js +32 -0
  142. package/dist/node/cli/promptPassword.js +44 -0
  143. package/dist/node/cli/prompts.js +86 -0
  144. package/dist/node/cli/scaffold/destination.js +92 -0
  145. package/dist/node/cli/scaffold/engine.js +2156 -0
  146. package/dist/node/cli/scaffold/entityFields.js +589 -0
  147. package/dist/node/cli/scaffold/format.js +243 -0
  148. package/dist/node/cli/scaffold/interactive.js +124 -0
  149. package/dist/node/cli/scaffold/moduleLayout.js +38 -0
  150. package/dist/node/cli/scaffold/reservedEntities.js +74 -0
  151. package/dist/node/cli/scaffold/spec.js +704 -0
  152. package/dist/node/cli/scaffold/steps.js +40 -0
  153. package/dist/node/cli/scaffold/userContractSource.js +133 -0
  154. package/dist/node/cli/scaffold/versions.js +57 -0
  155. package/dist/node/cli/scaffold/writer.js +172 -0
  156. package/dist/node/cli/startMenu.js +496 -0
  157. package/dist/node/cli/symbols.js +205 -0
  158. package/dist/node/cli/sysexits.js +34 -0
  159. package/dist/node/cli/tableReport.js +184 -0
  160. package/dist/node/cli/usageReport.js +144 -0
  161. package/dist/node/colors.js +63 -0
  162. package/dist/node/command/Builder.js +153 -0
  163. package/dist/node/command/Command.js +348 -0
  164. package/dist/node/config/configProvenance.js +101 -0
  165. package/dist/node/config/defaults.js +39 -0
  166. package/dist/node/config/defineConfig.js +129 -0
  167. package/dist/node/config/defineEnv.js +264 -0
  168. package/dist/node/config/envExample.js +41 -0
  169. package/dist/node/config/envOverride.js +423 -0
  170. package/dist/node/config/infra.js +163 -0
  171. package/dist/node/config/reactivity.js +23 -0
  172. package/dist/node/config/reservedEnv.js +118 -0
  173. package/dist/node/config/schema.js +134 -0
  174. package/dist/node/config/use.js +24 -0
  175. package/dist/node/finder/File.js +49 -0
  176. package/dist/node/finder/FileResult.js +86 -0
  177. package/dist/node/finder/Finder.js +201 -0
  178. package/dist/node/finder/Result.js +45 -0
  179. package/dist/node/index.js +121 -0
  180. package/dist/node/kernel/BootConfigurationError.js +54 -0
  181. package/dist/node/kernel/CliKernel.js +630 -0
  182. package/dist/node/kernel/Kernel.js +2198 -0
  183. package/dist/node/kernel/Module.js +453 -0
  184. package/dist/node/kernel/adminPlane/adminCaller.js +98 -0
  185. package/dist/node/kernel/adminPlane/adminRbac.js +51 -0
  186. package/dist/node/kernel/adminPlane/catalog.js +158 -0
  187. package/dist/node/kernel/adminPlane/executeAdmin.js +78 -0
  188. package/dist/node/kernel/checks/deep.js +335 -0
  189. package/dist/node/kernel/checks/freshness.js +139 -0
  190. package/dist/node/kernel/checks/gating.js +231 -0
  191. package/dist/node/kernel/checks/guards.js +232 -0
  192. package/dist/node/kernel/checks/lastBoot.js +136 -0
  193. package/dist/node/kernel/checks/live.js +330 -0
  194. package/dist/node/kernel/checks/packageDeps.js +292 -0
  195. package/dist/node/kernel/checks/readiness.js +153 -0
  196. package/dist/node/kernel/checks/renderReport.js +780 -0
  197. package/dist/node/kernel/checks/report.js +421 -0
  198. package/dist/node/kernel/checks/runDoctor.js +731 -0
  199. package/dist/node/kernel/checks/surface.js +364 -0
  200. package/dist/node/kernel/checks/walk.js +100 -0
  201. package/dist/node/kernel/checks/wiring.js +450 -0
  202. package/dist/node/kernel/commands/AiMcpCommand.js +65 -0
  203. package/dist/node/kernel/commands/AiSyncCommand.js +48 -0
  204. package/dist/node/kernel/commands/BuildCommand.js +49 -0
  205. package/dist/node/kernel/commands/CardCommand.js +50 -0
  206. package/dist/node/kernel/commands/ClusterCommand.js +58 -0
  207. package/dist/node/kernel/commands/CompletionCommand.js +31 -0
  208. package/dist/node/kernel/commands/CreateCommand.js +45 -0
  209. package/dist/node/kernel/commands/DevCommand.js +99 -0
  210. package/dist/node/kernel/commands/DoctorCommand.js +115 -0
  211. package/dist/node/kernel/commands/EnvCommand.js +52 -0
  212. package/dist/node/kernel/commands/GitHooksCommand.js +47 -0
  213. package/dist/node/kernel/commands/InspectCommand.js +153 -0
  214. package/dist/node/kernel/commands/InstallCommand.js +20 -0
  215. package/dist/node/kernel/commands/MenuCommand.js +261 -0
  216. package/dist/node/kernel/commands/OutdatedCommand.js +164 -0
  217. package/dist/node/kernel/commands/ProdCommand.js +60 -0
  218. package/dist/node/kernel/commands/StatusCommand.js +30 -0
  219. package/dist/node/kernel/commands/StopCommand.js +35 -0
  220. package/dist/node/kernel/commands/SymbolsCommand.js +45 -0
  221. package/dist/node/kernel/commands/runtimeLauncher.js +95 -0
  222. package/dist/node/kernel/decorators/kernelDecorator.js +110 -0
  223. package/dist/node/kernel/injector/injector.js +137 -0
  224. package/dist/node/kernel/injector/serviceOrder.js +106 -0
  225. package/dist/node/kernel/inspect/adminSubjects.js +194 -0
  226. package/dist/node/kernel/inspect/docOutline.js +86 -0
  227. package/dist/node/kernel/lifecycleTags.js +76 -0
  228. package/dist/node/kernel/moduleConfig.js +75 -0
  229. package/dist/node/kernel/moduleGating.js +68 -0
  230. package/dist/node/kernel/readinessRegistry.js +98 -0
  231. package/dist/node/kernel/resolveModuleEntry.js +61 -0
  232. package/dist/node/mcp/caller.js +40 -0
  233. package/dist/node/mcp/guard.js +51 -0
  234. package/dist/node/mcp/protocol.js +157 -0
  235. package/dist/node/mcp/server.js +216 -0
  236. package/dist/node/mcp/tools.js +861 -0
  237. package/dist/node/oauth/authorizationServer.js +221 -0
  238. package/dist/node/oauth/protectedResource.js +293 -0
  239. package/dist/node/package.js +4 -0
  240. package/dist/node/realtime/IRealtimeTransport.js +32 -0
  241. package/dist/node/realtime/JsonRpcPeer.js +251 -0
  242. package/dist/node/realtime/RealtimeEventMap.js +15 -0
  243. package/dist/node/realtime/channelRate.js +39 -0
  244. package/dist/node/realtime/platformChannels.js +155 -0
  245. package/dist/node/runtime/GcScheduler.js +92 -0
  246. package/dist/node/runtime/RequestContext.js +76 -0
  247. package/dist/node/runtime/bearer.js +84 -0
  248. package/dist/node/runtime/engineEnvironment.js +79 -0
  249. package/dist/node/runtime/loadEnv.js +105 -0
  250. package/dist/node/runtime/pageFacets.js +85 -0
  251. package/dist/node/runtime/pageFilters.js +103 -0
  252. package/dist/node/runtime/pageGuard.js +84 -0
  253. package/dist/node/runtime/pageQuery.js +160 -0
  254. package/dist/node/runtime/pageSort.js +114 -0
  255. package/dist/node/runtime/redact.js +43 -0
  256. package/dist/node/runtime/withTimeout.js +71 -0
  257. package/dist/node/service/cluster/ClusterManager.js +202 -0
  258. package/dist/node/service/cluster/ClusterProbeAggregator.js +120 -0
  259. package/dist/node/service/cluster/ClusterRelay.js +74 -0
  260. package/dist/node/service/cluster/clusterMaster.js +65 -0
  261. package/dist/node/service/cluster/clusterMessage.js +70 -0
  262. package/dist/node/service/cluster/cpuQuota.js +59 -0
  263. package/dist/node/service/cluster/instanceProbe.js +52 -0
  264. package/dist/node/service/cluster/podEnvironment.js +48 -0
  265. package/dist/node/service/cluster/processProbe.js +70 -0
  266. package/dist/node/service/cluster/richProcessProbe.js +115 -0
  267. package/dist/node/service/cluster/topology.js +71 -0
  268. package/dist/node/service/dev/BootReporter.js +490 -0
  269. package/dist/node/service/dev/DevSupervisor.js +1004 -0
  270. package/dist/node/service/dev/bootVerdict.js +158 -0
  271. package/dist/node/service/dev/detachedStart.js +372 -0
  272. package/dist/node/service/dev/devProcess.js +1137 -0
  273. package/dist/node/service/dev/devProjects.js +138 -0
  274. package/dist/node/service/dev/devStatusReport.js +395 -0
  275. package/dist/node/service/dev/devStop.js +263 -0
  276. package/dist/node/service/fetchService.js +35 -0
  277. package/dist/node/service/gitService.js +62 -0
  278. package/dist/node/syslog/Pdu.js +224 -0
  279. package/dist/node/syslog/Syslog.js +1159 -0
  280. package/dist/node/syslog/drivers/ClusterFileLogDriver.js +114 -0
  281. package/dist/node/syslog/drivers/FileLogDriver.js +127 -0
  282. package/dist/node/syslog/drivers/ILogDriver.js +26 -0
  283. package/dist/node/syslog/drivers/LokiLogDriver.js +144 -0
  284. package/dist/node/syslog/drivers/MemoryLogDriver.js +33 -0
  285. package/dist/node/syslog/drivers/OpenSearchLogDriver.js +159 -0
  286. package/dist/node/syslog/drivers/builtinLogDrivers.js +114 -0
  287. package/dist/node/syslog/drivers/filterPdus.js +71 -0
  288. package/dist/node/syslog/drivers/logDriverRegistry.js +83 -0
  289. package/dist/node/syslog/drivers/opensearchShared.js +17 -0
  290. package/dist/node/syslog/drivers/pduFlow.js +106 -0
  291. package/dist/node/syslog/drivers/pduProtocol.js +28 -0
  292. package/dist/node/syslog/httpFetch.js +43 -0
  293. package/dist/node/syslog/logColor.js +80 -0
  294. package/dist/node/syslog/sinks/FileSink.js +142 -0
  295. package/dist/node/syslog/transports/BatchingHttpTransport.js +98 -0
  296. package/dist/node/syslog/transports/ConsoleTransport.js +14 -0
  297. package/dist/node/syslog/transports/FileTransport.js +17 -0
  298. package/dist/node/syslog/transports/HttpTransport.js +44 -0
  299. package/dist/node/syslog/transports/LokiTransport.js +80 -0
  300. package/dist/node/syslog/transports/OpenSearchTransport.js +53 -0
  301. package/dist/node/syslog/transports/SyslogTransport.js +13 -0
  302. package/dist/node/syslog/transports/index.js +8 -0
  303. package/dist/node/testing/index.js +190 -0
  304. package/dist/types/Cli.d.ts +177 -0
  305. package/dist/types/Container.d.ts +221 -0
  306. package/dist/types/Error.d.ts +162 -0
  307. package/dist/types/Event.d.ts +171 -0
  308. package/dist/types/FileClass.d.ts +184 -0
  309. package/dist/types/Nodefony.d.ts +66 -0
  310. package/dist/types/Service.d.ts +165 -0
  311. package/dist/types/Tools.d.ts +116 -0
  312. package/dist/types/bin/resolveLocalCli.d.ts +49 -0
  313. package/dist/types/bundler/index.d.ts +66 -0
  314. package/dist/types/cli/agentTargets.d.ts +378 -0
  315. package/dist/types/cli/aiMcp.d.ts +239 -0
  316. package/dist/types/cli/aiMcpReport.d.ts +113 -0
  317. package/dist/types/cli/aiSync.d.ts +68 -0
  318. package/dist/types/cli/aiSyncReport.d.ts +149 -0
  319. package/dist/types/cli/card.d.ts +49 -0
  320. package/dist/types/cli/cardReport.d.ts +127 -0
  321. package/dist/types/cli/completion.d.ts +154 -0
  322. package/dist/types/cli/create.d.ts +177 -0
  323. package/dist/types/cli/env.d.ts +103 -0
  324. package/dist/types/cli/envReport.d.ts +153 -0
  325. package/dist/types/cli/execPortable.d.ts +54 -0
  326. package/dist/types/cli/gitHooks.d.ts +48 -0
  327. package/dist/types/cli/gitHooksReport.d.ts +101 -0
  328. package/dist/types/cli/globalFlags.d.ts +48 -0
  329. package/dist/types/cli/helpReport.d.ts +110 -0
  330. package/dist/types/cli/manPage.d.ts +21 -0
  331. package/dist/types/cli/nodefonyBin.d.ts +45 -0
  332. package/dist/types/cli/outdated.d.ts +119 -0
  333. package/dist/types/cli/progress.d.ts +349 -0
  334. package/dist/types/cli/projectRoot.d.ts +19 -0
  335. package/dist/types/cli/promptPassword.d.ts +22 -0
  336. package/dist/types/cli/prompts.d.ts +102 -0
  337. package/dist/types/cli/scaffold/destination.d.ts +70 -0
  338. package/dist/types/cli/scaffold/engine.d.ts +545 -0
  339. package/dist/types/cli/scaffold/entityFields.d.ts +238 -0
  340. package/dist/types/cli/scaffold/format.d.ts +78 -0
  341. package/dist/types/cli/scaffold/interactive.d.ts +11 -0
  342. package/dist/types/cli/scaffold/moduleLayout.d.ts +69 -0
  343. package/dist/types/cli/scaffold/reservedEntities.d.ts +49 -0
  344. package/dist/types/cli/scaffold/spec.d.ts +159 -0
  345. package/dist/types/cli/scaffold/steps.d.ts +24 -0
  346. package/dist/types/cli/scaffold/userContractSource.d.ts +86 -0
  347. package/dist/types/cli/scaffold/versions.d.ts +14 -0
  348. package/dist/types/cli/scaffold/writer.d.ts +100 -0
  349. package/dist/types/cli/startMenu.d.ts +195 -0
  350. package/dist/types/cli/symbols.d.ts +84 -0
  351. package/dist/types/cli/sysexits.d.ts +31 -0
  352. package/dist/types/cli/tableReport.d.ts +44 -0
  353. package/dist/types/cli/usageReport.d.ts +108 -0
  354. package/dist/types/client/ClientKernel.d.ts +90 -0
  355. package/dist/types/client/IClientKernel.d.ts +195 -0
  356. package/dist/types/client/angular/index.d.ts +273 -0
  357. package/dist/types/client/announce.d.ts +74 -0
  358. package/dist/types/client/debugbar/DebugBar.d.ts +279 -0
  359. package/dist/types/client/debugbar/format.d.ts +48 -0
  360. package/dist/types/client/debugbar/hmr.d.ts +16 -0
  361. package/dist/types/client/debugbar/index.d.ts +30 -0
  362. package/dist/types/client/debugbar/model.d.ts +158 -0
  363. package/dist/types/client/debugbar/network.d.ts +55 -0
  364. package/dist/types/client/debugbar/profile.d.ts +99 -0
  365. package/dist/types/client/index.d.ts +47 -0
  366. package/dist/types/client/react/index.d.ts +207 -0
  367. package/dist/types/client/realtime/AdaptiveRate.d.ts +138 -0
  368. package/dist/types/client/realtime/BrowserWsTransport.d.ts +27 -0
  369. package/dist/types/client/realtime/RealtimeClient.d.ts +573 -0
  370. package/dist/types/client/realtime/localEvents.d.ts +53 -0
  371. package/dist/types/client/realtime/notice.d.ts +70 -0
  372. package/dist/types/client/realtime/observe.d.ts +284 -0
  373. package/dist/types/client/roles/index.d.ts +15 -0
  374. package/dist/types/client/roles/registry.d.ts +72 -0
  375. package/dist/types/client/roles/roles.d.ts +68 -0
  376. package/dist/types/client/shim/cli-color.d.ts +2 -0
  377. package/dist/types/client/shim/events.d.ts +39 -0
  378. package/dist/types/client/shim/util.d.ts +14 -0
  379. package/dist/types/client/svelte/index.d.ts +216 -0
  380. package/dist/types/client/syslog/context.d.ts +76 -0
  381. package/dist/types/client/syslog/errors.d.ts +46 -0
  382. package/dist/types/client/syslog/uplink.d.ts +89 -0
  383. package/dist/types/client/transport/websocket.d.ts +5 -0
  384. package/dist/types/client/vue/index.d.ts +234 -0
  385. package/dist/types/colors.d.ts +32 -0
  386. package/dist/types/command/Builder.d.ts +47 -0
  387. package/dist/types/command/Command.d.ts +268 -0
  388. package/dist/types/config/configMeta.d.ts +53 -0
  389. package/dist/types/config/configProvenance.d.ts +58 -0
  390. package/dist/types/config/defaults.d.ts +33 -0
  391. package/dist/types/config/defineConfig.d.ts +70 -0
  392. package/dist/types/config/defineEnv.d.ts +170 -0
  393. package/dist/types/config/envExample.d.ts +23 -0
  394. package/dist/types/config/envOverride.d.ts +236 -0
  395. package/dist/types/config/index.d.ts +23 -0
  396. package/dist/types/config/infra.d.ts +171 -0
  397. package/dist/types/config/reactivity.d.ts +36 -0
  398. package/dist/types/config/reservedEnv.d.ts +145 -0
  399. package/dist/types/config/schema.d.ts +113 -0
  400. package/dist/types/config/types.d.ts +374 -0
  401. package/dist/types/config/use.d.ts +80 -0
  402. package/dist/types/finder/File.d.ts +26 -0
  403. package/dist/types/finder/FileResult.d.ts +14 -0
  404. package/dist/types/finder/Finder.d.ts +51 -0
  405. package/dist/types/finder/Result.d.ts +10 -0
  406. package/dist/types/index.d.ts +205 -0
  407. package/dist/types/kernel/BootConfigurationError.d.ts +50 -0
  408. package/dist/types/kernel/CliKernel.d.ts +289 -0
  409. package/dist/types/kernel/Kernel.d.ts +1255 -0
  410. package/dist/types/kernel/Module.d.ts +326 -0
  411. package/dist/types/kernel/adminPlane/adminCaller.d.ts +105 -0
  412. package/dist/types/kernel/adminPlane/adminRbac.d.ts +44 -0
  413. package/dist/types/kernel/adminPlane/catalog.d.ts +122 -0
  414. package/dist/types/kernel/adminPlane/executeAdmin.d.ts +99 -0
  415. package/dist/types/kernel/bootReport.d.ts +112 -0
  416. package/dist/types/kernel/checks/deep.d.ts +122 -0
  417. package/dist/types/kernel/checks/freshness.d.ts +49 -0
  418. package/dist/types/kernel/checks/gating.d.ts +134 -0
  419. package/dist/types/kernel/checks/guards.d.ts +57 -0
  420. package/dist/types/kernel/checks/lastBoot.d.ts +189 -0
  421. package/dist/types/kernel/checks/live.d.ts +110 -0
  422. package/dist/types/kernel/checks/packageDeps.d.ts +44 -0
  423. package/dist/types/kernel/checks/readiness.d.ts +97 -0
  424. package/dist/types/kernel/checks/renderReport.d.ts +107 -0
  425. package/dist/types/kernel/checks/report.d.ts +414 -0
  426. package/dist/types/kernel/checks/runDoctor.d.ts +361 -0
  427. package/dist/types/kernel/checks/surface.d.ts +148 -0
  428. package/dist/types/kernel/checks/walk.d.ts +45 -0
  429. package/dist/types/kernel/checks/wiring.d.ts +54 -0
  430. package/dist/types/kernel/commands/AiMcpCommand.d.ts +39 -0
  431. package/dist/types/kernel/commands/AiSyncCommand.d.ts +28 -0
  432. package/dist/types/kernel/commands/BuildCommand.d.ts +13 -0
  433. package/dist/types/kernel/commands/CardCommand.d.ts +34 -0
  434. package/dist/types/kernel/commands/ClusterCommand.d.ts +29 -0
  435. package/dist/types/kernel/commands/CompletionCommand.d.ts +17 -0
  436. package/dist/types/kernel/commands/CreateCommand.d.ts +16 -0
  437. package/dist/types/kernel/commands/DevCommand.d.ts +40 -0
  438. package/dist/types/kernel/commands/DoctorCommand.d.ts +55 -0
  439. package/dist/types/kernel/commands/EnvCommand.d.ts +35 -0
  440. package/dist/types/kernel/commands/GitHooksCommand.d.ts +27 -0
  441. package/dist/types/kernel/commands/InspectCommand.d.ts +59 -0
  442. package/dist/types/kernel/commands/InstallCommand.d.ts +7 -0
  443. package/dist/types/kernel/commands/MenuCommand.d.ts +58 -0
  444. package/dist/types/kernel/commands/OutdatedCommand.d.ts +47 -0
  445. package/dist/types/kernel/commands/ProdCommand.d.ts +29 -0
  446. package/dist/types/kernel/commands/StatusCommand.d.ts +17 -0
  447. package/dist/types/kernel/commands/StopCommand.d.ts +17 -0
  448. package/dist/types/kernel/commands/SymbolsCommand.d.ts +29 -0
  449. package/dist/types/kernel/commands/runtimeLauncher.d.ts +76 -0
  450. package/dist/types/kernel/decorators/kernelDecorator.d.ts +76 -0
  451. package/dist/types/kernel/injector/injector.d.ts +47 -0
  452. package/dist/types/kernel/injector/serviceOrder.d.ts +29 -0
  453. package/dist/types/kernel/inspect/adminSubjects.d.ts +169 -0
  454. package/dist/types/kernel/inspect/docOutline.d.ts +53 -0
  455. package/dist/types/kernel/lifecycleTags.d.ts +79 -0
  456. package/dist/types/kernel/moduleConfig.d.ts +35 -0
  457. package/dist/types/kernel/moduleGating.d.ts +78 -0
  458. package/dist/types/kernel/readinessRegistry.d.ts +104 -0
  459. package/dist/types/kernel/resolveModuleEntry.d.ts +46 -0
  460. package/dist/types/mcp/caller.d.ts +55 -0
  461. package/dist/types/mcp/guard.d.ts +66 -0
  462. package/dist/types/mcp/protocol.d.ts +163 -0
  463. package/dist/types/mcp/server.d.ts +70 -0
  464. package/dist/types/mcp/tools.d.ts +209 -0
  465. package/dist/types/oauth/authorizationServer.d.ts +204 -0
  466. package/dist/types/oauth/protectedResource.d.ts +339 -0
  467. package/dist/types/realtime/IRealtimeSocket.d.ts +142 -0
  468. package/dist/types/realtime/IRealtimeTransport.d.ts +50 -0
  469. package/dist/types/realtime/JsonRpcPeer.d.ts +251 -0
  470. package/dist/types/realtime/RealtimeEventMap.d.ts +269 -0
  471. package/dist/types/realtime/channelRate.d.ts +55 -0
  472. package/dist/types/realtime/platformChannels.d.ts +147 -0
  473. package/dist/types/runtime/GcScheduler.d.ts +96 -0
  474. package/dist/types/runtime/RequestContext.d.ts +152 -0
  475. package/dist/types/runtime/bearer.d.ts +88 -0
  476. package/dist/types/runtime/engineEnvironment.d.ts +115 -0
  477. package/dist/types/runtime/loadEnv.d.ts +86 -0
  478. package/dist/types/runtime/pageFacets.d.ts +104 -0
  479. package/dist/types/runtime/pageFilters.d.ts +139 -0
  480. package/dist/types/runtime/pageGuard.d.ts +78 -0
  481. package/dist/types/runtime/pageQuery.d.ts +138 -0
  482. package/dist/types/runtime/pageSort.d.ts +86 -0
  483. package/dist/types/runtime/redact.d.ts +27 -0
  484. package/dist/types/runtime/withTimeout.d.ts +51 -0
  485. package/dist/types/service/cluster/ClusterManager.d.ts +112 -0
  486. package/dist/types/service/cluster/ClusterProbeAggregator.d.ts +68 -0
  487. package/dist/types/service/cluster/ClusterRelay.d.ts +57 -0
  488. package/dist/types/service/cluster/clusterMaster.d.ts +40 -0
  489. package/dist/types/service/cluster/clusterMessage.d.ts +94 -0
  490. package/dist/types/service/cluster/cpuQuota.d.ts +37 -0
  491. package/dist/types/service/cluster/instanceProbe.d.ts +82 -0
  492. package/dist/types/service/cluster/podEnvironment.d.ts +35 -0
  493. package/dist/types/service/cluster/processProbe.d.ts +53 -0
  494. package/dist/types/service/cluster/richProcessProbe.d.ts +77 -0
  495. package/dist/types/service/cluster/topology.d.ts +64 -0
  496. package/dist/types/service/dev/BootReporter.d.ts +67 -0
  497. package/dist/types/service/dev/DevSupervisor.d.ts +117 -0
  498. package/dist/types/service/dev/bootVerdict.d.ts +99 -0
  499. package/dist/types/service/dev/detachedStart.d.ts +164 -0
  500. package/dist/types/service/dev/devProcess.d.ts +638 -0
  501. package/dist/types/service/dev/devProjects.d.ts +121 -0
  502. package/dist/types/service/dev/devStatusReport.d.ts +141 -0
  503. package/dist/types/service/dev/devStop.d.ts +57 -0
  504. package/dist/types/service/fetchService.d.ts +29 -0
  505. package/dist/types/service/gitService.d.ts +24 -0
  506. package/dist/types/syslog/Pdu.d.ts +134 -0
  507. package/dist/types/syslog/Syslog.d.ts +482 -0
  508. package/dist/types/syslog/drivers/ClusterFileLogDriver.d.ts +40 -0
  509. package/dist/types/syslog/drivers/FileLogDriver.d.ts +55 -0
  510. package/dist/types/syslog/drivers/ILogDriver.d.ts +177 -0
  511. package/dist/types/syslog/drivers/LokiLogDriver.d.ts +44 -0
  512. package/dist/types/syslog/drivers/MemoryLogDriver.d.ts +20 -0
  513. package/dist/types/syslog/drivers/OpenSearchLogDriver.d.ts +40 -0
  514. package/dist/types/syslog/drivers/builtinLogDrivers.d.ts +43 -0
  515. package/dist/types/syslog/drivers/filterPdus.d.ts +21 -0
  516. package/dist/types/syslog/drivers/logDriverRegistry.d.ts +100 -0
  517. package/dist/types/syslog/drivers/opensearchShared.d.ts +11 -0
  518. package/dist/types/syslog/drivers/pduFlow.d.ts +53 -0
  519. package/dist/types/syslog/drivers/pduProtocol.d.ts +20 -0
  520. package/dist/types/syslog/httpFetch.d.ts +48 -0
  521. package/dist/types/syslog/logColor.d.ts +59 -0
  522. package/dist/types/syslog/sinks/FileSink.d.ts +78 -0
  523. package/dist/types/syslog/transports/BatchingHttpTransport.d.ts +59 -0
  524. package/dist/types/syslog/transports/ConsoleTransport.d.ts +8 -0
  525. package/dist/types/syslog/transports/FileTransport.d.ts +13 -0
  526. package/dist/types/syslog/transports/HttpTransport.d.ts +15 -0
  527. package/dist/types/syslog/transports/LokiTransport.d.ts +45 -0
  528. package/dist/types/syslog/transports/OpenSearchTransport.d.ts +40 -0
  529. package/dist/types/syslog/transports/SyslogTransport.d.ts +9 -0
  530. package/dist/types/syslog/transports/index.d.ts +12 -0
  531. package/dist/types/testing/index.d.ts +197 -0
  532. package/dist/types/types/IAdminApi.d.ts +246 -0
  533. package/dist/types/types/ICliKernel.d.ts +28 -0
  534. package/dist/types/types/ICommand.d.ts +14 -0
  535. package/dist/types/types/IContainer.d.ts +35 -0
  536. package/dist/types/types/IIdempotencyStore.d.ts +159 -0
  537. package/dist/types/types/IKernel.d.ts +138 -0
  538. package/dist/types/types/IMcpTool.d.ts +157 -0
  539. package/dist/types/types/IModule.d.ts +73 -0
  540. package/dist/types/types/IModuleManifest.d.ts +49 -0
  541. package/dist/types/types/IPage.d.ts +119 -0
  542. package/dist/types/types/IService.d.ts +62 -0
  543. package/dist/types/types/ISyslog.d.ts +58 -0
  544. package/dist/types/types/ITransport.d.ts +5 -0
  545. package/dist/types/types/globals.d.ts +47 -0
  546. package/docs/angular-services.md +318 -0
  547. package/docs/catalogue.md +184 -0
  548. package/docs/cli.md +369 -0
  549. package/docs/client.md +616 -0
  550. package/docs/debugbar.md +218 -0
  551. package/docs/environnement.md +308 -0
  552. package/docs/index.md +388 -0
  553. package/docs/kernel.md +670 -0
  554. package/docs/progression.md +228 -0
  555. package/docs/react-hooks.md +686 -0
  556. package/docs/request-context.md +507 -0
  557. package/docs/service.md +590 -0
  558. package/docs/svelte-reactivite.md +293 -0
  559. package/docs/syslog.md +848 -0
  560. package/docs/testing.md +203 -0
  561. package/docs/vue-composables.md +255 -0
  562. package/man/nodefony.1 +152 -0
  563. package/package.json +163 -83
  564. package/templates/app/agents/AGENTS.md.tpl +967 -0
  565. package/templates/app/agents/POINTEUR.md.tpl +12 -0
  566. package/templates/app/base/Dockerfile.tpl +104 -0
  567. package/templates/app/base/README.md.tpl +314 -0
  568. package/templates/app/base/dockerignore.tpl +28 -0
  569. package/templates/app/base/env.ts.tpl +130 -0
  570. package/templates/app/base/gitattributes.tpl +28 -0
  571. package/templates/app/base/github/workflows/ci.yml.tpl +91 -0
  572. package/templates/app/base/gitignore.tpl +46 -0
  573. package/templates/app/base/gitlab-ci.yml.tpl +42 -0
  574. package/templates/app/base/index.ts.tpl +69 -0
  575. package/templates/app/base/nodefony.config.ts.tpl +342 -0
  576. package/templates/app/base/oxlintrc.json.tpl +127 -0
  577. package/templates/app/base/package.json.tpl +75 -0
  578. package/templates/app/base/prettierignore.tpl +24 -0
  579. package/templates/app/base/prettierrc.json.tpl +12 -0
  580. package/templates/app/base/rolldown.config.ts.tpl +8 -0
  581. package/templates/app/base/tests/config.test.ts.tpl +29 -0
  582. package/templates/app/base/tests/e2e.setup.ts.tpl +181 -0
  583. package/templates/app/base/tests/e2e.test.ts.tpl +105 -0
  584. package/templates/app/base/tests/migrations.e2e.test.ts.tpl +579 -0
  585. package/templates/app/base/tsconfig.json.tpl +47 -0
  586. package/templates/app/base/vitest.config.ts.tpl +88 -0
  587. package/templates/app/base/vitest.e2e.config.ts.tpl +39 -0
  588. package/templates/app/complete/compose.yaml.tpl +328 -0
  589. package/templates/app/complete/deploy/migrate-job.yaml.tpl +100 -0
  590. package/templates/app/complete/docker/db/init-nodefony-e2e.sql.tpl +30 -0
  591. package/templates/app/complete/docker/grafana/provisioning/datasources/loki.yaml.tpl +15 -0
  592. package/templates/app/complete/env.local.tpl +11 -0
  593. package/templates/app/complete/env.tpl +53 -0
  594. package/templates/app/complete/nodefony/entity/User.ts.tpl +69 -0
  595. package/templates/app/complete/nodefony/security/provisionUsers.ts.tpl +124 -0
  596. package/templates/app/complete/nodefony/service/AppBannerService.ts.tpl +98 -0
  597. package/templates/app/complete/nodefony/service/AppInfoService.ts.tpl +85 -0
  598. package/templates/app/frontend/angular/frontend/src/accent.css.tpl +34 -0
  599. package/templates/app/frontend/angular/frontend/src/app/app.component.ts.tpl +400 -0
  600. package/templates/app/frontend/react/frontend/src/App.tsx.tpl +421 -0
  601. package/templates/app/frontend/react/frontend/src/accent.css.tpl +30 -0
  602. package/templates/app/frontend/shared/frontend/src/brand.ts.tpl +3 -0
  603. package/templates/app/frontend/shared/frontend/src/showcase.css.tpl +224 -0
  604. package/templates/app/frontend/shared/nodefony/controllers/AppController.ts.tpl +45 -0
  605. package/templates/app/frontend/svelte/frontend/src/App.svelte.tpl +371 -0
  606. package/templates/app/frontend/svelte/frontend/src/accent.css.tpl +34 -0
  607. package/templates/app/frontend/vue/frontend/src/App.vue.tpl +367 -0
  608. package/templates/app/frontend/vue/frontend/src/accent.css.tpl +34 -0
  609. package/templates/app/home/nodefony/controllers/HomeController.ts.tpl +38 -0
  610. package/templates/command/nodefony/command/__NAME__.ts.tpl +132 -0
  611. package/templates/controller/duplex/nodefony/controllers/__NAME__.ts.tpl +188 -0
  612. package/templates/controller/example/nodefony/controllers/__NAME__.ts.tpl +348 -0
  613. package/templates/controller/hello/nodefony/controllers/__NAME__.ts.tpl +143 -0
  614. package/templates/controller/realtime/nodefony/controllers/__NAME__.ts.tpl +153 -0
  615. package/templates/controller/realtime/tests/__KEBAB__-realtime.test.ts.tpl +79 -0
  616. package/templates/controller/rest/nodefony/controllers/__NAME__.ts.tpl +159 -0
  617. package/templates/entity/base/nodefony/entity/__PASCAL__.schema.ts.tpl +31 -0
  618. package/templates/entity/base/nodefony/entity/__PASCAL__.ts.tpl +68 -0
  619. package/templates/entity/controller/nodefony/controllers/__PASCAL__Controller.ts.tpl +335 -0
  620. package/templates/entity/service/nodefony/service/__PASCAL__Service.ts.tpl +126 -0
  621. package/templates/entity/tests/tests/__KEBAB__.e2e.test.ts.tpl +358 -0
  622. package/templates/entity/tests/tests/__KEBAB__.test.ts.tpl +87 -0
  623. package/templates/front/angular/frontend/src/app/app.component.ts.tpl +30 -0
  624. package/templates/front/base/nodefony/controllers/__NAME__.ts.tpl +60 -0
  625. package/templates/front/react/frontend/src/App.tsx.tpl +26 -0
  626. package/templates/front/svelte/frontend/src/App.svelte.tpl +19 -0
  627. package/templates/front/vue/frontend/src/App.vue.tpl +23 -0
  628. package/templates/module/ai/AGENTS.md.tpl +71 -0
  629. package/templates/module/base/README.md.tpl +62 -0
  630. package/templates/module/base/docs/index.md.tpl +55 -0
  631. package/templates/module/base/index.ts.tpl +50 -0
  632. package/templates/module/base/nodefony/config/config.ts.tpl +60 -0
  633. package/templates/module/base/nodefony/config/defineModuleConfig.ts.tpl +55 -0
  634. package/templates/module/base/nodefony/src/errors/__PASCAL__Error.ts.tpl +20 -0
  635. package/templates/module/base/package.json.tpl +53 -0
  636. package/templates/module/base/rolldown.config.ts.tpl +14 -0
  637. package/templates/module/base/tests/__KEBAB__.test.ts.tpl +39 -0
  638. package/templates/module/base/tsconfig.json.tpl +42 -0
  639. package/templates/module/base/vitest.config.ts.tpl +27 -0
  640. package/templates/module/packages/CLAUDE.md.tpl +51 -0
  641. package/templates/module/packages/MEMORY.md.tpl +39 -0
  642. package/templates/module/packages/tsconfig.declarations.json.tpl +19 -0
  643. package/templates/module/packages/tsconfig.tests.json.tpl +11 -0
  644. package/templates/module/service/nodefony/interfaces/I__PASCAL__Service.ts.tpl +14 -0
  645. package/templates/module/service/nodefony/interfaces/index.ts.tpl +1 -0
  646. package/templates/module/service/nodefony/service/__PASCAL__Service.ts.tpl +116 -0
  647. package/templates/service/nodefony/interfaces/I__PASCAL__Service.ts.tpl +19 -0
  648. package/templates/service/nodefony/service/__PASCAL__Service.ts.tpl +136 -0
  649. package/templates/service/tests/__PASCAL__Service.test.ts.tpl +53 -0
  650. package/templates/shared/front-entry/angular/frontend/src/main.ts.tpl +17 -0
  651. package/templates/shared/front-entry/react/frontend/src/main.tsx.tpl +11 -0
  652. package/templates/shared/front-entry/svelte/frontend/src/main.ts.tpl +13 -0
  653. package/templates/shared/front-entry/vue/frontend/src/main.ts.tpl +12 -0
  654. package/templates/shared/front-registrar/nodefony/frontend/register__PASCAL__Entry.ts.tpl +40 -0
  655. package/templates/shared/front-shell/frontend/index.html.tpl +39 -0
  656. package/templates/shared/ng-app-tsconfig/frontend/tsconfig.app.json.tpl +18 -0
  657. package/templates/shared/svelte-shim/frontend/src/env.d.ts.tpl +12 -0
  658. package/templates/shared/vue-shim/frontend/src/env.d.ts.tpl +15 -0
  659. package/.yarnclean +0 -45
  660. package/CHANGELOG.md +0 -406
  661. package/autoloader.es6 +0 -253
  662. package/builder.es6 +0 -366
  663. package/cli/builder/bundles/bundle.js +0 -328
  664. package/cli/builder/bundles/controller.js +0 -73
  665. package/cli/builder/bundles/users-bundle/.yarnclean +0 -45
  666. package/cli/builder/bundles/users-bundle/Command/fixtureTask.js +0 -47
  667. package/cli/builder/bundles/users-bundle/Command/usersCommand.js +0 -105
  668. package/cli/builder/bundles/users-bundle/Entity/mongoose/userEntity.js +0 -168
  669. package/cli/builder/bundles/users-bundle/Entity/sequelize/userEntity.js +0 -231
  670. package/cli/builder/bundles/users-bundle/Fixtures/users.js +0 -117
  671. package/cli/builder/bundles/users-bundle/Fixtures/usersFixtures.js +0 -114
  672. package/cli/builder/bundles/users-bundle/Resources/config/config.js +0 -90
  673. package/cli/builder/bundles/users-bundle/Resources/config/routing.js +0 -17
  674. package/cli/builder/bundles/users-bundle/Resources/config/security.js +0 -96
  675. package/cli/builder/bundles/users-bundle/Resources/config/services.js +0 -7
  676. package/cli/builder/bundles/users-bundle/Resources/config/webpack/webpack.dev.config.js +0 -13
  677. package/cli/builder/bundles/users-bundle/Resources/config/webpack/webpack.prod.config.js +0 -31
  678. package/cli/builder/bundles/users-bundle/Resources/config/webpack.config.js +0 -146
  679. package/cli/builder/bundles/users-bundle/Resources/js/users.js +0 -153
  680. package/cli/builder/bundles/users-bundle/Resources/public/favicon.ico +0 -0
  681. package/cli/builder/bundles/users-bundle/Resources/public/images/users-logo.png +0 -0
  682. package/cli/builder/bundles/users-bundle/Resources/scss/awesome/font-awesome.config.js +0 -11
  683. package/cli/builder/bundles/users-bundle/Resources/scss/custom.scss +0 -23
  684. package/cli/builder/bundles/users-bundle/Resources/scss/users.scss +0 -59
  685. package/cli/builder/bundles/users-bundle/Resources/swagger/openapi/login.js +0 -235
  686. package/cli/builder/bundles/users-bundle/Resources/swagger/openapi/users.js +0 -232
  687. package/cli/builder/bundles/users-bundle/Resources/translations/login.en_en.yml +0 -14
  688. package/cli/builder/bundles/users-bundle/Resources/translations/login.fr_fr.yml +0 -14
  689. package/cli/builder/bundles/users-bundle/Resources/translations/users.en_en.yml +0 -35
  690. package/cli/builder/bundles/users-bundle/Resources/translations/users.fr_fr.yml +0 -36
  691. package/cli/builder/bundles/users-bundle/Resources/views/base.html.twig +0 -32
  692. package/cli/builder/bundles/users-bundle/Resources/views/footer.html.twig +0 -7
  693. package/cli/builder/bundles/users-bundle/Resources/views/header.html.twig +0 -90
  694. package/cli/builder/bundles/users-bundle/Resources/views/login/login.html.twig +0 -43
  695. package/cli/builder/bundles/users-bundle/Resources/views/users/createUser.html.twig +0 -296
  696. package/cli/builder/bundles/users-bundle/Resources/views/users/readUsers.html.twig +0 -94
  697. package/cli/builder/bundles/users-bundle/controller/api/graphql/graphqlController.js +0 -56
  698. package/cli/builder/bundles/users-bundle/controller/api/graphql/userResolver.js +0 -121
  699. package/cli/builder/bundles/users-bundle/controller/api/graphql/usertype.js +0 -58
  700. package/cli/builder/bundles/users-bundle/controller/api/openapi/loginApiController.js +0 -210
  701. package/cli/builder/bundles/users-bundle/controller/api/openapi/restUserController.js +0 -244
  702. package/cli/builder/bundles/users-bundle/controller/loginController.js +0 -91
  703. package/cli/builder/bundles/users-bundle/controller/usersController.js +0 -332
  704. package/cli/builder/bundles/users-bundle/package.json +0 -58
  705. package/cli/builder/bundles/users-bundle/readme.md +0 -360
  706. package/cli/builder/bundles/users-bundle/services/usersService.js +0 -411
  707. package/cli/builder/bundles/users-bundle/src/providers/mongoose/userProvider.js +0 -47
  708. package/cli/builder/bundles/users-bundle/src/providers/sequelize/userProvider.js +0 -48
  709. package/cli/builder/bundles/users-bundle/tests/loginTest.js +0 -182
  710. package/cli/builder/bundles/users-bundle/usersBundle.js +0 -26
  711. package/cli/builder/microService/microService.js +0 -261
  712. package/cli/builder/microService/skeletons/.editorconfig +0 -18
  713. package/cli/builder/microService/skeletons/.env-cmdrc.js +0 -32
  714. package/cli/builder/microService/skeletons/.jshintrc +0 -37
  715. package/cli/builder/microService/skeletons/README.md +0 -117
  716. package/cli/builder/microService/skeletons/bin/bash/hello.sh +0 -5
  717. package/cli/builder/microService/skeletons/bin/cli +0 -13
  718. package/cli/builder/microService/skeletons/bin/python/hello.py +0 -20
  719. package/cli/builder/microService/skeletons/config/config.js +0 -29
  720. package/cli/builder/microService/skeletons/config/pm2.config.js +0 -72
  721. package/cli/builder/microService/skeletons/config/webpack/webpack.config.dev.js +0 -8
  722. package/cli/builder/microService/skeletons/config/webpack/webpack.config.prod.js +0 -25
  723. package/cli/builder/microService/skeletons/config/webpack.config.js +0 -114
  724. package/cli/builder/microService/skeletons/package.json +0 -76
  725. package/cli/builder/microService/skeletons/src/browser/index.css +0 -3
  726. package/cli/builder/microService/skeletons/src/browser/index.js +0 -16
  727. package/cli/builder/microService/skeletons/src/browser/socketio.js +0 -46
  728. package/cli/builder/microService/skeletons/src/cli/cli.js +0 -224
  729. package/cli/builder/microService/skeletons/src/cli/menu.js +0 -28
  730. package/cli/builder/microService/skeletons/src/n-api/README.md +0 -1
  731. package/cli/builder/microService/skeletons/src/n-api/binding.gyp +0 -14
  732. package/cli/builder/microService/skeletons/src/n-api/hello.cc +0 -14
  733. package/cli/builder/microService/skeletons/src/n-api/hello.js +0 -23
  734. package/cli/builder/microService/skeletons/src/n-api/package.json +0 -15
  735. package/cli/builder/microService/skeletons/src/node/examples/index.js +0 -120
  736. package/cli/builder/microService/skeletons/src/node/index.js +0 -102
  737. package/cli/builder/microService/skeletons/src/node/services/markdown/markdown.js +0 -27
  738. package/cli/builder/microService/skeletons/src/node/services/servers/http.js +0 -45
  739. package/cli/builder/microService/skeletons/src/node/services/servers/https.js +0 -44
  740. package/cli/builder/microService/skeletons/src/node/services/socketio/socketio.js +0 -46
  741. package/cli/builder/microService/skeletons/src/node/services/syscall/syscall.js +0 -111
  742. package/cli/builder/microService/skeletons/src/node/services/worker/thread.js +0 -59
  743. package/cli/builder/microService/skeletons/src/node/services/worker/worker.js +0 -60
  744. package/cli/builder/microService/skeletons/src/templates/base.html +0 -12
  745. package/cli/builder/microService/skeletons/src/templates/socket.html +0 -23
  746. package/cli/builder/microService/skeletons/tests/unit/serviceTest.js +0 -30
  747. package/cli/builder/project/project.js +0 -474
  748. package/cli/builder/project/skeletons/README.md +0 -778
  749. package/cli/builder/project/skeletons/bin/dev-deploy.sh +0 -5
  750. package/cli/builder/project/skeletons/bin/generateCertificates.sh.skeleton +0 -180
  751. package/cli/builder/project/skeletons/bin/prod-deploy.sh +0 -3
  752. package/cli/builder/project/skeletons/config/config.js.skeleton +0 -178
  753. package/cli/builder/project/skeletons/config/openssl/ca/openssl.cnf.skeleton +0 -150
  754. package/cli/builder/project/skeletons/config/openssl/ca_intermediate/openssl.cnf.skeleton +0 -152
  755. package/cli/builder/project/skeletons/config/pm2.config.js.skeleton +0 -62
  756. package/cli/builder/project/skeletons/documentation.html.twig +0 -24
  757. package/cli/builder/project/skeletons/editorconfig.skeleton +0 -18
  758. package/cli/builder/project/skeletons/eslintignore.skeleton +0 -15
  759. package/cli/builder/project/skeletons/eslintrc.js.skeleton +0 -97
  760. package/cli/builder/project/skeletons/gitignore.skeleton +0 -32
  761. package/cli/builder/project/skeletons/migrations/2022.12.25T17.37.37.entity-user.js +0 -137
  762. package/cli/builder/project/skeletons/migrations/2022.12.25T17.37.38.entity-session.js +0 -97
  763. package/cli/builder/project/skeletons/migrations/2022.12.25T17.37.39.entity-requests.js +0 -115
  764. package/cli/builder/project/skeletons/migrations/2022.12.25T17.37.40.entity-jwts.js +0 -97
  765. package/cli/builder/project/skeletons/migrations/migrations.skeleton.js +0 -101
  766. package/cli/builder/project/skeletons/package.json.twig +0 -71
  767. package/cli/builder/react/reactBuilder.js +0 -224
  768. package/cli/builder/react/skeletons/app/Resources/databases/nodefony.db +0 -0
  769. package/cli/builder/react/skeletons/app/Resources/translations/messages.en_en.yml +0 -5
  770. package/cli/builder/react/skeletons/app/Resources/translations/messages.fr_fr.yml +0 -5
  771. package/cli/builder/react/skeletons/app/Resources/views/base.html.twig +0 -33
  772. package/cli/builder/react/skeletons/app/config/config.js +0 -392
  773. package/cli/builder/react/skeletons/app/config/routing.js +0 -10
  774. package/cli/builder/react/skeletons/app/config/security.js +0 -74
  775. package/cli/builder/react/skeletons/app/controller/appController.js +0 -22
  776. package/cli/builder/sandbox/sandBoxBuilder.js +0 -610
  777. package/cli/builder/sandbox/skeletons/Resources/css/entry.css +0 -48
  778. package/cli/builder/sandbox/skeletons/Resources/js/entry.js +0 -60
  779. package/cli/builder/sandbox/skeletons/Resources/public/manifest.json +0 -32
  780. package/cli/builder/sandbox/skeletons/Resources/translations/messages.en_en.yml +0 -5
  781. package/cli/builder/sandbox/skeletons/Resources/translations/messages.fr_fr.yml +0 -5
  782. package/cli/builder/sandbox/skeletons/Resources/views/base.html.twig +0 -46
  783. package/cli/builder/sandbox/skeletons/Resources/views/index.html.twig +0 -34
  784. package/cli/builder/sandbox/skeletons/bootstrap/custom.scss +0 -27
  785. package/cli/builder/sandbox/skeletons/bootstrap/entry.scss +0 -60
  786. package/cli/builder/sandbox/skeletons/workbox/templates/index.html.twig +0 -32
  787. package/cli/builder/sandbox/skeletons/workbox/workers/service-worker.js +0 -196
  788. package/cli/builder/skeletons/Resources/public/favicon.ico +0 -0
  789. package/cli/builder/skeletons/Resources/public/images/app-logo.png +0 -0
  790. package/cli/builder/skeletons/Resources/views/framework-bundle/views/401.html.twig +0 -1
  791. package/cli/builder/skeletons/Resources/views/framework-bundle/views/401.json.twig +0 -24
  792. package/cli/builder/skeletons/Resources/views/framework-bundle/views/403.html.twig +0 -1
  793. package/cli/builder/skeletons/Resources/views/framework-bundle/views/403.json.twig +0 -20
  794. package/cli/builder/skeletons/Resources/views/framework-bundle/views/404.html.twig +0 -1
  795. package/cli/builder/skeletons/Resources/views/framework-bundle/views/404.json.twig +0 -20
  796. package/cli/builder/skeletons/Resources/views/framework-bundle/views/500.html.twig +0 -1
  797. package/cli/builder/skeletons/Resources/views/framework-bundle/views/base.html.twig +0 -30
  798. package/cli/builder/skeletons/Resources/views/framework-bundle/views/exception.html.twig +0 -1
  799. package/cli/builder/skeletons/Resources/views/framework-bundle/views/exception.json.twig +0 -24
  800. package/cli/builder/skeletons/Resources/views/framework-bundle/views/footer.html.twig +0 -33
  801. package/cli/builder/skeletons/Resources/views/framework-bundle/views/header.html.twig +0 -6
  802. package/cli/builder/skeletons/Resources/views/framework-bundle/views/index.html.twig +0 -6
  803. package/cli/builder/skeletons/Resources/views/framework-bundle/views/index.json.twig +0 -1
  804. package/cli/builder/skeletons/Resources/views/framework-bundle/views/layout.html.twig +0 -125
  805. package/cli/builder/skeletons/Resources/views/framework-bundle/views/layout.json.twig +0 -5
  806. package/cli/builder/skeletons/Resources/views/framework-bundle/views/timeout.html.twig +0 -1
  807. package/cli/builder/skeletons/Resources/views/framework-bundle/views/timeout.json.twig +0 -24
  808. package/cli/builder/skeletons/app/appKernel.js +0 -133
  809. package/cli/builder/skeletons/binding/binding.cc +0 -26
  810. package/cli/builder/skeletons/binding/binding.skeleton +0 -8
  811. package/cli/builder/skeletons/bundle/bundleClass.js +0 -37
  812. package/cli/builder/skeletons/command/commandClass.js +0 -11
  813. package/cli/builder/skeletons/command/taskClass.js +0 -20
  814. package/cli/builder/skeletons/config/config.js +0 -138
  815. package/cli/builder/skeletons/config/nodefony/elastic-bundle.js +0 -37
  816. package/cli/builder/skeletons/config/nodefony/framework-bundle.js +0 -22
  817. package/cli/builder/skeletons/config/nodefony/http-bundle.js +0 -104
  818. package/cli/builder/skeletons/config/nodefony/mail-bundle.js +0 -44
  819. package/cli/builder/skeletons/config/nodefony/mongoose-bundle.js +0 -51
  820. package/cli/builder/skeletons/config/nodefony/monitoring-bundle.js +0 -34
  821. package/cli/builder/skeletons/config/nodefony/realtime-bundle.js +0 -15
  822. package/cli/builder/skeletons/config/nodefony/redis-bundle.js +0 -44
  823. package/cli/builder/skeletons/config/nodefony/security-bundle.js +0 -25
  824. package/cli/builder/skeletons/config/nodefony/sequelize-bundle.js +0 -156
  825. package/cli/builder/skeletons/config/routing.js +0 -55
  826. package/cli/builder/skeletons/config/security.js +0 -102
  827. package/cli/builder/skeletons/config/services.js +0 -1
  828. package/cli/builder/skeletons/config/webpack/webpack.dev.config.js +0 -13
  829. package/cli/builder/skeletons/config/webpack/webpack.prod.config.js +0 -20
  830. package/cli/builder/skeletons/config/webpack.config.js +0 -148
  831. package/cli/builder/skeletons/controller/controllerClass.js +0 -75
  832. package/cli/builder/skeletons/package.json.twig +0 -57
  833. package/cli/builder/skeletons/unittest/testFile.js +0 -46
  834. package/cli/builder/vue/skeletons/Resources/public/images/app-logo.png +0 -0
  835. package/cli/builder/vue/skeletons/Resources/translations/messages.en_en.yml +0 -5
  836. package/cli/builder/vue/skeletons/Resources/translations/messages.fr_fr.yml +0 -5
  837. package/cli/builder/vue/skeletons/vue.config.js +0 -129
  838. package/cli/builder/vue/vueBuilder.js +0 -410
  839. package/cli/generate/generate.es6 +0 -103
  840. package/cli/install/install.js +0 -190
  841. package/cli/sequelize/sequelize.js +0 -94
  842. package/cli/start.js +0 -702
  843. package/cli/tools/pm2.es6 +0 -112
  844. package/cli/tools/tools.es6 +0 -97
  845. package/cli.es6 +0 -925
  846. package/container.es6 +0 -272
  847. package/error.es6 +0 -293
  848. package/fileClass.es6 +0 -242
  849. package/finder/file.es6 +0 -33
  850. package/finder/fileResult.es6 +0 -138
  851. package/finder/finder2.es6 +0 -275
  852. package/finder.es6 +0 -427
  853. package/kernel/annotations/annotations.es6 +0 -286
  854. package/kernel/api/api.es6 +0 -61
  855. package/kernel/api/graphqlApi.es6 +0 -107
  856. package/kernel/api/jsonApi.es6 +0 -177
  857. package/kernel/api/openApi.es6 +0 -139
  858. package/kernel/api/schemas/openApiSchema.js +0 -394
  859. package/kernel/babylon.es6 +0 -162
  860. package/kernel/bundle.es6 +0 -1200
  861. package/kernel/cliKernel.es6 +0 -869
  862. package/kernel/command.es6 +0 -78
  863. package/kernel/commands/nodefonyCommand.es6 +0 -247
  864. package/kernel/commands/tasks/bundlesTask.es6 +0 -59
  865. package/kernel/controllers/controller.es6 +0 -791
  866. package/kernel/fixture.es6 +0 -19
  867. package/kernel/injections/injections.es6 +0 -424
  868. package/kernel/kernel.es6 +0 -1960
  869. package/kernel/kernelWatcher.es6 +0 -387
  870. package/kernel/orm/entity.es6 +0 -59
  871. package/kernel/orm/orm.es6 +0 -139
  872. package/kernel/reader.es6 +0 -290
  873. package/kernel/security/encoder.es6 +0 -17
  874. package/kernel/security/factories/factory.es6 +0 -111
  875. package/kernel/security/factories/passeportFactory.es6 +0 -61
  876. package/kernel/security/provider.es6 +0 -58
  877. package/kernel/security/providers/chainProvider.es6 +0 -99
  878. package/kernel/security/providers/memoryProvider.es6 +0 -55
  879. package/kernel/security/providers/providerManager.es6 +0 -67
  880. package/kernel/security/providers/userEntityProvider.es6 +0 -50
  881. package/kernel/security/role.es6 +0 -12
  882. package/kernel/security/secureArea.es6 +0 -431
  883. package/kernel/security/tokens/token.es6 +0 -171
  884. package/kernel/security/user.es6 +0 -106
  885. package/kernel/serviceRealTime.es6 +0 -21
  886. package/kernel/services/connectionsService.es6 +0 -93
  887. package/kernel/services/cron/cronService.es6 +0 -123
  888. package/kernel/task.es6 +0 -80
  889. package/kernel/templates.es6 +0 -22
  890. package/kernel/templating/twig.es6 +0 -218
  891. package/kernel/tests/cliTest.js +0 -59
  892. package/kernel/tests/containerTest.js +0 -232
  893. package/kernel/tests/kernelTest.js +0 -39
  894. package/nodefony.es6 +0 -1084
  895. package/notificationsCenter.es6 +0 -118
  896. package/protocol.es6 +0 -86
  897. package/protocols/bayeux.es6 +0 -174
  898. package/protocols/jsonRpc/jsonrpc.es6 +0 -56
  899. package/result.es6 +0 -99
  900. package/service.es6 +0 -288
  901. package/syslog/pdu.es6 +0 -141
  902. package/syslog/syslog.es6 +0 -754
  903. package/watcher.es6 +0 -113
package/docs/syslog.md ADDED
@@ -0,0 +1,848 @@
1
+ ---
2
+ title: "Journalisation (Syslog)"
3
+ lang: fr
4
+ module: "@nodefony/core"
5
+ topic: syslog
6
+ coverageModule: nodefony-core
7
+ coveragePackage: "nodefony (cœur)"
8
+ coverageFiles: "syslog/Syslog.ts,syslog/Pdu.ts"
9
+ section: "Architecture"
10
+ audience: [developer, devops]
11
+ tags:
12
+ [
13
+ log,
14
+ syslog,
15
+ rfc5424,
16
+ pdu,
17
+ backplane,
18
+ driver,
19
+ transport,
20
+ observabilite,
21
+ redaction,
22
+ performance,
23
+ ]
24
+ version: "doc"
25
+ status: stable
26
+ updated: 2026-07-19
27
+ source: "src/nodefony/docs/syslog.md"
28
+ ---
29
+
30
+ # Journalisation (Syslog)
31
+
32
+ > Tout ce que Nodefony écrit — boot, requête, erreur, ligne de ton code — passe par **un seul hub**,
33
+ > `Syslog`. Il fabrique une unité structurée (`Pdu`, RFC 5424), la range dans un tampon circulaire
34
+ > O(1), la diffuse à N destinations d'écriture, et la rend **relisable et filtrable** par un driver
35
+ > de requête. Trois axes indépendants : où ça s'écrit, où ça se relit, ce qui part en direct.
36
+ > Ancré sur `src/nodefony/src/syslog/`.
37
+
38
+ 📍 [Documentation](../../../docs/index.md) › [@nodefony/core](index.md) › **Journalisation (Syslog)**
39
+
40
+ ## 🧠 Le modèle mental — un log, trois axes
41
+
42
+ Un logger naïf a une seule question : « où j'écris ? ». Un serveur en a **trois**, et les confondre
43
+ est la source de la moitié des malentendus sur les logs :
44
+
45
+ 1. **ÉCRIRE** — la ligne de texte part quelque part (terminal, fichier, nulle part).
46
+ 2. **RELIRE** — plus tard, un humain cherche « toutes les ERROR de la requête `abc` ».
47
+ 3. **DIFFUSER** — un écran de supervision veut les lignes **maintenant**, en direct.
48
+
49
+ Nodefony les traite comme trois axes **orthogonaux** : on peut écrire sur `stdout`, relire depuis
50
+ Loki, et diffuser vers Studio — les trois réglages ne se contraignent pas.
51
+
52
+ ```mermaid
53
+ flowchart LR
54
+ Src["service.log(…)"] --> G{"gate de sévérité<br/>+ debug ciblé + rateLimit"}
55
+ G -->|sous le seuil| DROP["rien créé<br/>0 Pdu · 0 allocation"]
56
+ G -->|passe| P["Pdu<br/>unité RFC 5424"]
57
+ P --> R["ring buffer<br/>CircularBuffer O(1)"]
58
+ P --> OL["fire « onLog »"]
59
+ P --> T["transports<br/>fan-out : console · file · loki · opensearch"]
60
+ OL --> W["coalescing<br/>1 write par tick, cap 64 Kio"]
61
+ W --> SK["sink<br/>stdout · file · null"]
62
+ R -.->|axe RELECTURE| Q["driver queryable<br/>memory · file · cluster-file · loki · opensearch"]
63
+ OL -.->|axe DIFFUSION| ST["bus « nodefony:syslog »<br/>écran Logs de Studio"]
64
+ ```
65
+
66
+ Trois idées à retenir avant tout le reste :
67
+
68
+ - **Rien n'est alloué sous le seuil.** La gate de sévérité coupe **avant** la création du `Pdu` : un
69
+ `log(…, "DEBUG")` en production ne coûte qu'un test d'entier.
70
+ - **Écriture = fan-out, relecture = un seul driver.** Une ligne peut partir vers 3 transports à la
71
+ fois ; on ne relit que dans **une** destination à la fois (celle qui est active).
72
+ - **Le ring buffer n'est pas un fichier.** C'est une fenêtre glissante en RAM (100 entrées par
73
+ défaut) — parfaite pour « qu'est-ce qui vient de se passer », inutile pour « la semaine dernière ».
74
+
75
+ ## 📖 Lexique
76
+
77
+ | Terme | Sens |
78
+ | --------------------- | ---------------------------------------------------------------------------------------------------- |
79
+ | **PDU** | _Protocol Data Unit_ : une entrée de log structurée (`Pdu`) — payload + sévérité + horodatage + IDs. |
80
+ | **Sévérité RFC 5424** | Niveau normalisé de 0 (`EMERGENCY`) à 7 (`DEBUG`). Plus le chiffre est petit, plus c'est grave. |
81
+ | **msgid** | Catégorie du message (RFC 5424 `MSGID`) — vaut par défaut le **nom du service** émetteur. |
82
+ | **procid** | Le PID du process émetteur (champ `pid`) — sert à grouper par worker en cluster. |
83
+ | **requestId** | Identifiant de la requête en cours, capté depuis l'ALS — corrèle toutes les lignes d'un appel. |
84
+ | **Ring buffer** | Tampon circulaire de taille fixe, push et éviction en O(1) (jamais de `Array.shift()` O(n)). |
85
+ | **Coalescing** | Regrouper les écritures d'un même tick d'event-loop en **un seul** appel système `write()`. |
86
+ | **Sink** | Cible finale de la **ligne de texte**, après coalescing : `stdout`, un fichier, ou rien. |
87
+ | **Transport** | Destination d'un **Pdu structuré** (console, fichier JSONL, Loki, OpenSearch) — c'est un fan-out. |
88
+ | **Driver (query)** | Destination **relisable** : celle qu'on interroge pour filtrer l'historique. |
89
+ | **Backplane** | _Fond de panier_ : la couche qui rassemble les logs de plusieurs process/pods en une vue. |
90
+ | **JSONL** | _JSON Lines_ : un objet JSON par ligne — format ingérable tel quel par Promtail/Filebeat. |
91
+ | **ALS** | _AsyncLocalStorage_ : le stockage Node qui suit une requête à travers ses `await`. |
92
+ | **TTY** | Un vrai terminal interactif (≠ un pipe, ≠ un fichier). Décide couleur et bufférisation. |
93
+
94
+ ## Qu'est-ce que journaliser dans un serveur — et pourquoi c'est un point chaud
95
+
96
+ Écrire une ligne semble trivial. Dans un serveur, c'est le code **le plus appelé de tout le
97
+ programme** : au moins une ligne par requête, souvent dix. Trois pièges classiques en découlent.
98
+
99
+ - **Le coût par requête.** Un `console.log` fait un appel système synchrone. À 2 000 requêtes par
100
+ seconde, c'est 2 000 appels système par seconde consacrés à… regarder le serveur travailler.
101
+ L'observabilité devient le goulet d'étranglement qu'elle est censée mesurer.
102
+ - **La ligne perdue.** Celle qui explique le crash est justement écrite **au moment** du crash. Un
103
+ buffer non vidé à la sortie du process, et c'est la seule ligne qui manque.
104
+ - **La vue tronquée.** En cluster ou en Kubernetes, chaque process ne connaît que ses propres
105
+ lignes. Relire « le » log sans agrégation, c'est relire **un pod sur dix** en croyant tout voir.
106
+
107
+ À cela s'ajoute une exigence de sécurité : un log est du texte qui **sort du process** (fichier,
108
+ collecteur, écran d'admin). Un mot de passe qui atterrit dans un `payload` a franchi la frontière.
109
+
110
+ ## La vision Nodefony
111
+
112
+ Nodefony répond à chacun de ces points par un mécanisme précis, pas par un réglage global.
113
+
114
+ - **Le coût** : une gate de sévérité à l'ENTRÉE (`Syslog.setSeverityThreshold()`,
115
+ `Syslog.ts:937`) court-circuite le log **avant** toute allocation, et le coalescing regroupe les
116
+ écritures d'un tick en un seul `write()` (`writeOut`, `Syslog.ts:162`).
117
+ - **La ligne perdue** : les sévérités graves (≤ 3) contournent le buffer et partent en écriture
118
+ durable immédiate (`FileSink.writeErr()`, `FileSink.ts:115`) ; un filet de sortie vide ce qui reste
119
+ au `exit` du process (`Syslog.ts:192`).
120
+ - **La vue tronquée** : le driver `cluster-file` agrège les JSONL de **tous** les workers et les
121
+ trie chronologiquement (`createClusterFileLogDriver()`, `ClusterFileLogDriver.ts:59`).
122
+ - **Les secrets** : une passe de masquage défensive (`redactSecrets()`, `redact.ts:52`) s'applique
123
+ avant d'exposer du texte hors du process.
124
+
125
+ Le tout reste **isomorphe** : le même `Syslog` tourne dans le navigateur (debug bar) — il n'y a pas
126
+ de `process` ni de `setImmediate` là-bas, donc pas de bufférisation, et l'ANSI est retiré
127
+ (`_stdoutSink`, `Syslog.ts:98`).
128
+
129
+ Et le compromis assumé : **le ring buffer est volatile et borné**. Nodefony ne prétend pas être une
130
+ base de logs. Il garde une fenêtre récente en RAM pour le diagnostic immédiat, et délègue la
131
+ rétention longue à une vraie destination (fichier JSONL, Loki, OpenSearch).
132
+
133
+ ## 🚀 Démarrage rapide
134
+
135
+ ### Dans une app `nodefony create app`, le journal est DÉJÀ actif
136
+
137
+ Rien à installer ni à instancier : chaque `Service` (donc chaque module, contrôleur, kernel) porte
138
+ son `syslog` et expose `this.log(…)`. Le scaffold n'écrit que ses **écarts** aux défauts :
139
+
140
+ ```typescript
141
+ // nodefony.config.ts (extrait généré par `nodefony create app`)
142
+ export default defineConfig((ctx) => ({
143
+ log: {
144
+ // Dev : tout passe (DEBUG compris). Prod : `[]` → gate à INFO, les DEBUG
145
+ // ne sont même pas construits (0 allocation).
146
+ debug: ctx.isProd ? [] : "*",
147
+ // stdout = contrat cloud-native : le collecteur de l'orchestrateur lit le flux.
148
+ driver: "stdout",
149
+ // "auto" = coalesce hors TTY (pipe/fichier = débit), immédiat sur terminal.
150
+ buffered: "auto",
151
+ // "auto" = relecture adaptée au lancement : mono-process → mémoire ;
152
+ // worker de cluster → vue unifiée `cluster-file`.
153
+ queryDriver: "auto",
154
+ },
155
+ modules: [use("@nodefony/http", {}), "@nodefony/framework"],
156
+ }));
157
+ ```
158
+
159
+ ### Ce que TU écris : un service qui journalise
160
+
161
+ ```typescript
162
+ // nodefony/service/InvoiceService.ts — complet, compile tel quel
163
+ import { Service } from "nodefony";
164
+
165
+ export class InvoiceService extends Service {
166
+ pay(id: string, amount: number): void {
167
+ // `msgid` non fourni → il vaut le NOM du service (ici « invoice »).
168
+ this.log(`facture ${id} payée (${amount} €)`, "INFO");
169
+ // Un objet est accepté tel quel : il sera inspecté à l'affichage, pas
170
+ // sérialisé au moment du log (le hot path ne fait pas de JSON.stringify).
171
+ this.log({ id, amount }, "DEBUG");
172
+ if (amount <= 0) {
173
+ // Une Error est un payload de première classe (stack conservée).
174
+ this.log(new Error(`montant invalide: ${amount}`), "ERROR", "BILLING");
175
+ }
176
+ }
177
+
178
+ audit(rows: unknown[]): void {
179
+ // Pattern « ne jamais FORMATER au-dessus du niveau actif » : la gate coupe
180
+ // déjà le log, mais pas le `JSON.stringify` qui le précède. On le teste.
181
+ if (this.syslog?.severityEnabled("DEBUG")) {
182
+ this.log(JSON.stringify(rows), "DEBUG");
183
+ }
184
+ }
185
+ }
186
+ ```
187
+
188
+ ### Ce qu'on observe
189
+
190
+ Le format est fixe — `HH:MM:SS.mmm SÉVÉRITÉ MSGID : payload`, colonnes alignées, couleurs
191
+ seulement sur un vrai terminal :
192
+
193
+ ```text
194
+ 14:32:01.247 INFO invoice : facture INV-42 payée (120 €)
195
+ 14:32:01.248 DEBUG invoice : { id: 'INV-42', amount: 120 }
196
+ 14:32:01.310 ERROR BILLING : Error: montant invalide: -5
197
+ ```
198
+
199
+ Les sévérités `ERROR` et plus graves partent sur **stderr**, le reste sur **stdout** — un
200
+ `2>/dev/null` ne masque donc jamais tes erreurs, et l'inverse non plus.
201
+
202
+ ### Passer les logs dans un fichier relisable
203
+
204
+ Deux réglages, deux axes différents : `driver` dit où part la **ligne de texte**, `queryDriver` dit
205
+ où l'on **relit** :
206
+
207
+ ```typescript
208
+ // nodefony.config.ts — écrire dans un fichier ET pouvoir le rejouer
209
+ export default defineConfig((ctx) => ({
210
+ log: {
211
+ // Axe ÉCRITURE : un fichier `.log` avec un descripteur PAR worker.
212
+ driver: "file",
213
+ file: { sync: true }, // fichier local rapide → l'écriture directe suffit
214
+ // Axe RELECTURE : en prod on interroge le JSONL du worker ; en dev on
215
+ // laisse « auto » (mémoire en mono-process, vue cluster si worker).
216
+ queryDriver: ctx.isProd ? "file" : "auto",
217
+ // Une URL déclarée SUFFIT à basculer la relecture sur Loki (un seul bouton).
218
+ ...(ctx.infra.logs?.lokiUrl
219
+ ? { loki: { url: ctx.infra.logs.lokiUrl } }
220
+ : {}),
221
+ },
222
+ }));
223
+ ```
224
+
225
+ > [!TIP]
226
+ > Besoin de rallumer le `DEBUG` d'**un seul module** en production, sans redéployer ? Lance avec
227
+ > `NF__DEBUG=FIREWALL,SESSION:NOTICE` — ou appelle `PATCH /nodefony/kernel/api/log/level` à chaud
228
+ > (auto-extinction imposée). Détail plus bas, section Configuration.
229
+
230
+ ## Les sévérités RFC 5424
231
+
232
+ Huit niveaux normalisés, plus une extension maison pour le CLI. L'enum `SysLogSeverity`
233
+ (`Pdu.ts:27`) est la source unique :
234
+
235
+ | # | Nom | Quand l'employer | Sortie |
236
+ | --- | ----------- | ----------------------------------------------- | ------ |
237
+ | 0 | `EMERGENCY` | Le système est inutilisable. | stderr |
238
+ | 1 | `ALERT` | Action humaine immédiate requise. | stderr |
239
+ | 2 | `CRITIC` | Condition critique (⚠️ **pas** `CRITICAL`). | stderr |
240
+ | 3 | `ERROR` | Une opération a échoué. | stderr |
241
+ | 4 | `WARNING` | Anomalie tolérée, à surveiller. | stdout |
242
+ | 5 | `NOTICE` | Normal mais notable (bascule, reconfiguration). | stdout |
243
+ | 6 | `INFO` | Déroulé nominal — **le défaut d'un `Service`**. | stdout |
244
+ | 7 | `DEBUG` | Détail de mise au point. | stdout |
245
+
246
+ Points de vigilance, tous vérifiables au code :
247
+
248
+ - **Le nom canonique est `CRITIC`.** `translateSeverity()` (`Pdu.ts:51`) **lève une exception** sur
249
+ un nom inconnu — `"CRITICAL"` compris.
250
+ - **Deux champs, deux usages** : `pdu.severity` est le **nombre** (comparaisons rapides),
251
+ `pdu.severityName` la **chaîne** (affichage). La correspondance passe par une map inverse
252
+ précalculée `severityNameMap` (`Pdu.ts:79`), O(1) par Pdu.
253
+ - **La classe d'erreur est « ≤ 3 »** : c'est ce seuil qui décide stderr, écriture durable, et
254
+ incrémentation des compteurs de santé (`Syslog.pushStack()`, `Syslog.ts:1133`).
255
+ - **Le seuil ne se devine pas côté entrée** : `Syslog.severityFromInput()` (`Syslog.ts:864`) valide
256
+ **strictement** un niveau fourni par un endpoint ou une variable d'environnement et **rejette**
257
+ l'inconnu, là où le hot path reste tolérant.
258
+
259
+ ## 🏗️ Architecture interne — le trajet d'un log
260
+
261
+ Le parcours du schéma d'ouverture, étape par étape et ancré :
262
+
263
+ 1. **Point d'entrée applicatif** — `Service.log()` (`Service.ts:209`) remplit `msgid` avec le nom du
264
+ service si tu ne le fournis pas, et garantit qu'un log ne lève **jamais** (un logger qui casse la
265
+ requête serait pire que pas de log).
266
+ 2. **Gate de sévérité** — `Syslog.log()` (`Syslog.ts:1161`) compare la sévérité au seuil effectif
267
+ (global, ou relevé pour ce module) **avant** de construire quoi que ce soit. Sous le seuil : un
268
+ `Pdu` singleton réutilisé est renvoyé pour honorer le contrat de type, rien d'autre n'existe.
269
+ 3. **Garde de débit** — si `rateLimit` est activé, seuls les `burstLimit` premiers logs de la
270
+ fenêtre passent ; les autres incrémentent `missed` et repartent en `DROPPED`.
271
+ 4. **Création du `Pdu`** (`Pdu.ts:132`) — horodatage `Date.now()` sans objet `Date`, `uid`
272
+ incrémental, `pid` constant capturé une seule fois au chargement (`Pdu.ts:175`), type du payload
273
+ déduit par un `fastTypeOf()` inline (`Pdu.ts:129`), et `requestId` lu via un fournisseur
274
+ injectable (`Pdu.ts:144`).
275
+ 5. **Ring buffer** — `pushStack()` (`Syslog.ts:1133`) range le Pdu dans le `CircularBuffer`
276
+ (`Syslog.ts:273`) et incrémente les compteurs de santé (`valid`, `errorTotal`, `criticTotal`).
277
+ 6. **Diffusion** — `fire("onLog")` alimente les listeners (dont l'impression console) ; le fan-out
278
+ transports n'est parcouru que s'il y en a au moins un (`_fireTransports`, `Syslog.ts:1503`), et
279
+ seulement pour les Pdu `ACCEPTED`.
280
+ 7. **Écriture** — `Syslog.rawLog()` (`Syslog.ts:1620`) formate la ligne via `Syslog.wrapper()`
281
+ (`Syslog.ts:1530`) puis la remet au coalescing, qui la donne au sink actif.
282
+
283
+ ### Le ring buffer — mémoire bornée, relecture O(1)
284
+
285
+ Le ring est un `CircularBuffer<Pdu>` (`Syslog.ts:273`) : `push()` écrase la plus vieille entrée et
286
+ avance la tête (`Syslog.ts:284`), `toArray()` restitue l'ordre FIFO du plus ancien au plus récent
287
+ (`Syslog.ts:311`). Un `Array.shift()` aurait été O(n) **à chaque ligne**.
288
+
289
+ - Capacité par défaut **100** (`defaultSettings`, `Syslog.ts:364`) ; le Kernel la porte à **2000 en
290
+ développement** pour qu'une requête complète tienne dans la fenêtre malgré le bruit
291
+ (`maxStack` résolu au boot, `Kernel.ts:2281`).
292
+ - Redimensionner = **au boot uniquement** : `setMaxStack()` (`Syslog.ts:799`) reconstruit le buffer
293
+ en préservant les Pdu existants.
294
+ - Le stockage lui-même se coupe à chaud (`setRingEnabled()`, `Syslog.ts:764`) : les compteurs de
295
+ santé continuent d'être tenus, mais plus rien n'est retenu en RAM.
296
+ - Lecture : le getter `ringStack` (`Syslog.ts:737`), et `getLogStack()` (`Syslog.ts:1286`) dont
297
+ l'appel **sans argument** renvoie le dernier Pdu en O(1) sans matérialiser le tableau.
298
+
299
+ ### Le filtrage conditionnel des listeners
300
+
301
+ Un listener peut n'écouter qu'une partie du flux, via `listenWithConditions()` (`Syslog.ts:1378`,
302
+ alias de `filter()`, `Syslog.ts:1367`) : conditions sur `severity`, `msgid` ou `date`, combinées en
303
+ `&&` (défaut) ou `||`. C'est ce mécanisme qui branche l'impression console au boot — `init()`
304
+ (`Syslog.ts:821`) attache un unique listener « sévérité ≤ 6, ou ≤ 7 si debug », après avoir purgé
305
+ les précédents (idempotence).
306
+
307
+ > [!NOTE]
308
+ > Ce filtrage agit **après** la création du Pdu : il choisit qui reçoit, pas ce qui est construit.
309
+ > L'économie d'allocation, elle, vient de la gate d'entrée (point 2 ci-dessus). Les deux se
310
+ > complètent, ils ne font pas doublon.
311
+
312
+ ## ⚙️ Configuration
313
+
314
+ Tout tient dans la clé `log` de `nodefony.config.ts`, typée par `LogConfig` (`types.ts:168`) et
315
+ validée au boot par le schéma Zod de l'application (`schema.ts:26`).
316
+
317
+ | Option | Type | Défaut | Effet | Chaud ? |
318
+ | ---------------- | ------------------------------------------- | ---------- | --------------------------------------------------------------------- | :-----: |
319
+ | `active` | `boolean` | `true` | Interrupteur général — `false` = silence total (bancs, tests). | oui |
320
+ | `debug` | `string \| string[]` | `[]` | `"*"` = tout ; `[]` = rien ; liste = modules ciblés. | oui |
321
+ | `requestFormat` | `"auto" \| "default" \| "pretty" \| "json"` | `"auto"` | Format de la ligne de fin de requête HTTP (dev lisible / prod JSON). | oui |
322
+ | `buffered` | `boolean \| "auto"` | `"auto"` | Coalescing par tick. `"auto"` = actif **hors** terminal. | boot |
323
+ | `driver` | `"stdout" \| "file" \| "null"` | `"stdout"` | Sink d'écriture de la ligne de texte. | boot |
324
+ | `file.sync` | `boolean` | `false` | Écriture directe au lieu du buffer asynchrone (fichier local rapide). | boot |
325
+ | `queryDriver` | `string` | `"auto"` | Destination **relisable**. `"auto"` s'adapte au mode de lancement. | boot |
326
+ | `loki.url` | `string` | — | Base Loki. Déclarée seule, elle **impose** la relecture Loki. | boot |
327
+ | `opensearch.url` | `string` | — | Base OpenSearch. Même logique de bouton unique. | boot |
328
+
329
+ ### Comment `queryDriver: "auto"` décide
330
+
331
+ `resolveQueryDriver()` (`builtinLogDrivers.ts:54`) est une fonction pure, testée seule. Elle
332
+ n'intervient **que** sur le défaut — une valeur explicite est toujours respectée :
333
+
334
+ | Situation | Driver retenu | Pourquoi |
335
+ | -------------------------------------- | -------------- | --------------------------------------------------- |
336
+ | Une URL Loki déclarée | `loki` | L'URL vaut la décision : un seul bouton à tourner. |
337
+ | Une URL OpenSearch déclarée | `opensearch` | Idem. |
338
+ | **Les deux** URL, sans choix explicite | **exception** | Aucun arbitrage silencieux entre deux destinations. |
339
+ | Worker d'un cluster | `cluster-file` | Vue **unifiée** de tous les workers, pas d'un seul. |
340
+ | Mono-process | `memory` | Zéro entrée/sortie : le ring buffer suffit. |
341
+
342
+ ### Le debug ciblé — relever la verbosité sans redéployer
343
+
344
+ En production, le seuil global est posé à `INFO` par le Kernel (`Kernel.ts:2368`). Trois leviers
345
+ permettent de rouvrir le robinet **sans redémarrer**, du plus opérationnel au plus fin :
346
+
347
+ 1. **Au lancement** — `NF__DEBUG` : `*` lève la gate globale, `FIREWALL` passe ce module en `DEBUG`,
348
+ `SESSION:NOTICE` le passe à un niveau précis. Analysé par `Syslog.parseDebugSpec()`
349
+ (`Syslog.ts:893`), appliqué au boot (`Kernel.ts:2378`).
350
+ 2. **À chaud, par module** — `setDebugOverride()` (`Syslog.ts:974`) relève le seuil **d'un seul**
351
+ module (clé = son `msgid`). Le joker `*` vaut « tout ». Un `ttlMs` arme une **auto-extinction**
352
+ (minuterie `unref`, ré-armable) : un debug oublié allumé n'existe pas.
353
+ 3. **Depuis l'admin** — `PATCH /nodefony/kernel/api/log/level` (`KernelAdminApi.ts:1044`), réservé
354
+ au rôle administrateur, **par module uniquement**, niveau validé strictement, durée de vie
355
+ imposée (défaut 15 min, plafond 60) et **auditée**.
356
+
357
+ > [!WARNING]
358
+ > Un override par module n'a **aucun effet** quand il n'y a pas de gate globale (cas du
359
+ > développement, seuil `null`) : tout passe déjà. Ce n'est pas une panne — c'est la conséquence
360
+ > logique d'un seuil qui ne peut que **relever** la verbosité.
361
+
362
+ ### Réglages non atteignables depuis `nodefony.config.ts`
363
+
364
+ Le Kernel lit quatre réglages supplémentaires (`log.dir`, `log.maxStack`, `log.file.path`,
365
+ `log.queryFile`) qui **ne figurent pas** dans le type public `LogConfig` (`types.ts:168`) : les
366
+ écrire dans `nodefony.config.ts` provoque une erreur TypeScript. Leurs valeurs par défaut
367
+ s'appliquent donc telles quelles — dossier `logs/`, fichiers `nodefony-<pid>.log` et
368
+ `nodefony-<pid>.jsonl`, ring de 100 (2000 en développement).
369
+
370
+ ## 🔌 Axe ÉCRITURE — le sink et les transports
371
+
372
+ Deux étages, souvent confondus. Le **sink** reçoit une **chaîne de texte** déjà mise en forme et
373
+ coalescée ; il y en a **un seul** par process. Les **transports** reçoivent le **Pdu structuré** ;
374
+ il y en a autant qu'on veut.
375
+
376
+ ### La coalescence — le vrai levier de débit
377
+
378
+ C'est le mécanisme qui fait la différence, bien avant le choix du sink. `writeOut()`
379
+ (`Syslog.ts:162`) empile les lignes d'un même tick et programme **un seul** `setImmediate` quel
380
+ qu'en soit le nombre ; `_flushOut()` (`Syslog.ts:137`) les concatène en **un** appel système. Un
381
+ plafond `FLUSH_BYTES` de 64 Kio (`Syslog.ts:55`) borne la rétention d'un tick — au-delà, on vide
382
+ tout de suite.
383
+
384
+ Deux garde-fous complètent le tableau :
385
+
386
+ - **stderr n'est jamais bufférisé** : `writeErr()` (`Syslog.ts:180`) vide d'abord stdout — pour que
387
+ l'ordre causal tienne dans une sortie fusionnée `2>&1` — puis écrit immédiatement.
388
+ - **Filet de sortie** : à l'`exit` et au `beforeExit`, le buffer est vidé puis le sink flushé en
389
+ synchrone (`Syslog.ts:192`). Aucun gestionnaire `SIGINT`/`SIGTERM` n'est posé, délibérément : cela
390
+ casserait le Ctrl+C et masquerait les plantages.
391
+
392
+ ### Les sinks disponibles
393
+
394
+ | Sink | Écrit vers | Quand le choisir |
395
+ | -------- | ----------------------------- | --------------------------------------------------------- |
396
+ | `stdout` | `process.stdout` / `stderr` | Défaut. Contrat cloud-native : le collecteur lit le flux. |
397
+ | `file` | un descripteur **par worker** | Bare-metal/VPS, ou besoin d'un fichier local. |
398
+ | `null` | nulle part | Bancs de charge : mesurer le plafond sans I/O de log. |
399
+
400
+ #### `stdout` — le défaut isomorphe
401
+
402
+ `_stdoutSink` (`Syslog.ts:98`) écrit directement sur les flux du process, sans passer par
403
+ `console.*` (zéro surcoût). Côté navigateur, où `process` n'existe pas, il retombe sur `console.*`
404
+ en retirant les codes ANSI — c'est ce qui rend le cœur réellement isomorphe.
405
+
406
+ #### `file` — un descripteur par worker
407
+
408
+ `FileSink` (`FileSink.ts:50`) ouvre le fichier en **ajout** (`O_APPEND`) et garde le descripteur.
409
+ Un fichier par worker signifie **zéro verrou d'inode partagé** entre process. Deux modes :
410
+
411
+ - **asynchrone** (défaut) : buffer applicatif borné, une seule écriture en vol pour garantir
412
+ l'ordre, abandon borné si le buffer sature (anti-saturation mémoire), et le morceau non confirmé
413
+ est réécrit en synchrone si le process sort avant le retour (`#drain()`, `FileSink.ts:107`).
414
+ - **`sync: true`** : écriture directe (`FileSink.ts:59`). Sur un fichier local — où l'écriture se
415
+ compte en microsecondes et où le tick a **déjà** coalescé — c'est le bon réglage : pas de
416
+ threadpool, rien à perdre.
417
+
418
+ Dans les deux cas, **stderr est toujours durable** : `writeErr()` (`FileSink.ts:115`) écrit en
419
+ synchrone même en mode asynchrone, pour qu'une erreur fatale survive à un `SIGKILL`. Compromis
420
+ assumé et documenté au code : un morceau stdout encore en vol n'est pas réémis (ce serait un
421
+ doublon système non annulable), donc un fatal peut précéder un `INFO` plus ancien — les horodatages
422
+ à la milliseconde font foi.
423
+
424
+ #### `null` — le plafond sans bruit
425
+
426
+ `NULL_LOG_SINK` (`Syslog.ts:113`) ne fait rien du tout. Sa seule raison d'être : mesurer ce que
427
+ coûte réellement le reste du pipeline.
428
+
429
+ ### Basculer et couper à chaud
430
+
431
+ - **Changer de sink** : `Syslog.setLogSink()` (`Syslog.ts:1674`). La bascule vide d'abord les
432
+ lignes en attente **puis** ferme l'ancien sink (`_setLogSink`, `Syslog.ts:154`) — jamais de ligne
433
+ perdue, jamais de descripteur fuité.
434
+ - **Couper sans changer de sink** : `Syslog.setSinkEnabled()` (`Syslog.ts:1697`) coupe l'écriture
435
+ tout en **préservant le nom** du sink (l'interface d'admin sait quoi réafficher). Coût sur le hot
436
+ path : un test booléen.
437
+ - **Forcer la bufférisation** : `Syslog.setOutputBuffering()` (`Syslog.ts:1658`) accepte `true`,
438
+ `false` ou `"auto"`.
439
+
440
+ ### Les transports — le fan-out structuré
441
+
442
+ Un transport reçoit le `Pdu` entier et l'envoie où il veut. Contrat minimal : un `name` et un
443
+ `send(pdu): Promise<void>`. Ils sont ajoutés (`addTransport()`, `Syslog.ts:1415`, dédupliqué **par
444
+ nom**), listés (`listTransports()`, `Syslog.ts:1463`) et activés/désactivés à chaud
445
+ (`setTransportEnabled()`, `Syslog.ts:1487` — un transport désactivé est **retiré** de la boucle,
446
+ donc sans surcoût). Une erreur d'envoi déclenche `onTransportError` : elle ne fait jamais tomber la
447
+ requête.
448
+
449
+ | Transport | Destination | À quoi il sert |
450
+ | ------------ | ------------------------- | ---------------------------------------------------- |
451
+ | `console` | la sortie formatée | Impression lisible par un humain. |
452
+ | `file` | un fichier JSONL ou texte | Persistance locale, ingérable par Promtail/Filebeat. |
453
+ | `http` | un endpoint HTTP(S) | Webhook maison, collecteur non standard. |
454
+ | `syslog` | un autre `Syslog` | Agrégation parent/enfant dans le même process. |
455
+ | `loki` | Grafana Loki (`/push`) | Production : envoi **groupé**, une requête par lot. |
456
+ | `opensearch` | OpenSearch (`_bulk`) | Production : NDJSON groupé. |
457
+
458
+ Les quatre premiers sont directs : `ConsoleTransport` (`ConsoleTransport.ts:5`) délègue l'impression
459
+ à `Syslog.normalizeLog()` (`Syslog.ts:1596`) ; `FileTransport` (`FileTransport.ts:10`) écrit **un
460
+ objet JSON par ligne**, exactement ce que relit le driver `file` — écriture et relecture sont
461
+ branchées **ensemble** par le Kernel, sur le même chemin, ce qui évite le classique « j'écris ici,
462
+ je relis là » ; `HttpTransport` (`HttpTransport.ts:12`) fait un `POST` par Pdu, sans regroupement
463
+ (volume faible uniquement) ; `SyslogTransport` (`SyslogTransport.ts:7`) réémet le **même** objet
464
+ `Pdu` vers un autre `Syslog`, pour qu'un sous-système remonte au journal principal.
465
+
466
+ ### `loki` / `opensearch` — les destinations de production
467
+
468
+ Les deux étendent `BatchingHttpTransport` (`BatchingHttpTransport.ts:47`), qui mutualise la file
469
+ bornée, l'abandon anti-saturation, le déclenchement par seuil ou par intervalle, et le vidage avant
470
+ sortie. **Une requête HTTP par lot, jamais par log.**
471
+
472
+ `LokiTransport` (`LokiTransport.ts:47`) groupe les Pdu par jeu d'étiquettes de **faible
473
+ cardinalité** (`app`, `severity`, `module`, `pid`) et convertit l'horodatage en nanosecondes.
474
+ Décision importante : le `requestId` **n'est pas une étiquette** — il resterait dans l'index de Loki
475
+ et le ferait exploser. Il voyage dans la ligne JSON et se filtre à la requête.
476
+
477
+ ## Axe RELECTURE — le Log Backplane
478
+
479
+ Le fan-out d'écriture ne dit pas comment **chercher**. C'est le rôle du contrat `ILogDriver`
480
+ (`ILogDriver.ts:23`) : un nom, des capacités déclarées (`write` / `query` / `stream`), une méthode
481
+ `query()` **asynchrone et froide** — jamais dans le pipeline d'une requête — et une sonde `probe()`
482
+ optionnelle pour les destinations distantes.
483
+
484
+ ### Une seule logique de filtrage, cinq façades
485
+
486
+ `filterPdus()` (`filterPdus.ts:45`) est un **filtre pur** : aucune I/O, aucun état, testable sans
487
+ serveur. Tous les drivers finissent par lui — y compris Loki et OpenSearch, qui ne sont que des
488
+ **adaptateurs** : le service distant borne le rapatriement (fenêtre de temps, limite, filtre
489
+ texte), puis `filterPdus` tranche. Résultat : la même sémantique de recherche partout.
490
+
491
+ Il travaille sur `IPduLike`, un **sous-ensemble structurel** des champs d'un Pdu — ce qui permet de
492
+ filtrer une ligne relue d'un fichier **sans instancier** un `Pdu` (dont le constructeur
493
+ incrémenterait un compteur et lirait l'ALS : des effets de bord inacceptables pour une simple
494
+ relecture).
495
+
496
+ Critères disponibles, combinés en ET :
497
+
498
+ | Critère | Comportement |
499
+ | ------------------ | ----------------------------------------------------------------------------------- |
500
+ | `requestId` | Égalité **exacte** — c'est la clé de la trace complète d'un appel. |
501
+ | `severity` | Un nom ou une liste (`["ERROR","CRITIC"]`), insensible à la casse. |
502
+ | `module` / `msgid` | Inclusion, insensible à la casse. |
503
+ | `from` / `to` | Bornes d'horodatage (epoch ms, incluses). |
504
+ | `text` | Recherche plein texte sur payload chaîne + `msg` + module + msgid. |
505
+ | `protocol` | `"ws"` ou `"http"` — classification pure (`pduProtocol()`, `pduProtocol.ts:29`). |
506
+ | `flow` | Étape du cycle de vie (`pduFlowStep()`, `pduFlow.ts:98`) : `ws-open`, `request-in`… |
507
+ | `limit` / `offset` | Pagination — défaut 200, **plafond dur 1000** (`filterPdus.ts:11`). |
508
+ | `order` | `"desc"` (défaut, plus récent d'abord) ou `"asc"` (lecture chronologique). |
509
+
510
+ L'ordre s'appuie sur l'`uid` du Pdu, un compteur monotone d'émission : la chronologie reste exacte
511
+ **même à horodatage égal** (plusieurs logs dans la même milliseconde).
512
+
513
+ ### Les drivers intégrés
514
+
515
+ | Driver | Relit | Persiste | Quand il est choisi |
516
+ | -------------- | ----------------------------- | :------: | -------------------------------------------- |
517
+ | `memory` | le ring buffer du process | non | Défaut mono-process. Zéro I/O. |
518
+ | `file` | le JSONL **de ce worker** | oui | Un process, historique au-delà du ring. |
519
+ | `cluster-file` | **tous** les JSONL du dossier | oui | Défaut d'un worker de cluster — vue unifiée. |
520
+ | `loki` | Grafana Loki, en LogQL | oui | Production avec Loki déjà en place. |
521
+ | `opensearch` | OpenSearch, en `_search` | oui | Production avec la pile OpenSearch. |
522
+
523
+ ### `memory` — la fenêtre récente, gratuite
524
+
525
+ `createMemoryLogDriver()` (`MemoryLogDriver.ts:22`) applique `filterPdus` sur `syslog.ringStack`,
526
+ lu **paresseusement** à chaque requête. Volatile par construction (`write: false`), isomorphe, et
527
+ sans le moindre accès disque. C'est ce qui alimente l'écran Logs en développement.
528
+
529
+ ### `file` — relire un JSONL sans le charger en mémoire
530
+
531
+ `createFileLogDriver()` (`FileLogDriver.ts:39`) ne lit **jamais** tout le fichier. `scanJsonlTail()`
532
+ (`FileLogDriver.ts:68`) ne rapatrie que les derniers octets (8 Mio par défaut,
533
+ `FileLogDriver.ts:6`), jette le premier fragment tronqué, parse ligne à ligne, et ignore
534
+ silencieusement ce qui n'est pas un enregistrement valide (`coerceRecord()`,
535
+ `FileLogDriver.ts:131`). Un fichier de 2 Gio se relit donc au même coût qu'un fichier de 10 Mio.
536
+
537
+ ### `cluster-file` — la vue honnête d'un cluster
538
+
539
+ `createClusterFileLogDriver()` (`ClusterFileLogDriver.ts:59`) balaie le dossier, scanne chaque
540
+ `nodefony-<pid>.jsonl` avec la **même** brique que le driver `file`, fusionne, **trie**, puis
541
+ filtre. Le tri est le point délicat : l'`uid` est un compteur **par process**, donc incomparable
542
+ entre workers. `byChrono()` (`ClusterFileLogDriver.ts:136`) trie donc par horodatage (partagé),
543
+ puis par `pid` (groupe par worker), puis par `uid` (chronologie exacte à l'intérieur d'un worker).
544
+
545
+ Double garde-fou mémoire : un plafond d'octets **par fichier**, et un plafond du **nombre de
546
+ fichiers** (les plus récents par date de modification, `ClusterFileLogDriver.ts:96`). Le coût d'une
547
+ requête est donc borné par construction.
548
+
549
+ ### `loki` / `opensearch` — adaptateurs, pas moteurs
550
+
551
+ `createLokiLogDriver()` (`LokiLogDriver.ts:86`) interroge `query_range` en LogQL ;
552
+ `createOpenSearchLogDriver()` (`OpenSearchLogDriver.ts:90`) fait un `_search` filtré et trié. Dans
553
+ les deux cas le distant **borne** le rapatriement, puis `filterPdus` fait autorité. Une erreur
554
+ réseau ou un 5xx **remonte** (une panne d'infrastructure doit se voir) ; un index absent renvoie une
555
+ liste vide. Chacun expose une `probe()` : joignabilité, latence, informations de version.
556
+
557
+ ### Le registre — comment un driver est monté
558
+
559
+ Aucun `if (nom === …)` dans le Kernel. `registerBuiltinLogDrivers()` (`builtinLogDrivers.ts:86`)
560
+ enregistre les cinq fabriques natives ; `Kernel.initializeLog()` (`Kernel.ts:2228`) résout le driver
561
+ demandé, monte `memory` en filet de sécurité, et — **en développement seulement** — tente de monter
562
+ **tous** les drivers enregistrés pour permettre la bascule à chaud depuis Studio. Chaque fabrique
563
+ s'auto-écarte si sa configuration manque (Loki sans URL, par exemple) : zéro I/O « au cas où ». En
564
+ production, c'est strictement ce qui est demandé.
565
+
566
+ Si le driver configuré n'est pas enregistré, le Kernel **ne plante pas** : il retombe sur `memory`
567
+ et l'annonce par un `WARNING` (`Kernel.ts:3193`) — le principe « pas de dégradation silencieuse ».
568
+
569
+ ## 🧰 API publique
570
+
571
+ Les signatures complètes vivent dans le graphe TSDoc (`.ai/symbols.json`) ; voici les usages réels.
572
+
573
+ ### Journaliser depuis un service
574
+
575
+ ```typescript
576
+ this.log("message"); // INFO — msgid = nom du service
577
+ this.log(err, "ERROR"); // sévérité explicite
578
+ this.log(data, "DEBUG", "MON_MSGID"); // catégorie personnalisée
579
+ ```
580
+
581
+ Toutes les variantes **renvoient le `Pdu`** — pratique pour un test ou un audit signé.
582
+
583
+ ### Journaliser depuis un `Syslog` direct
584
+
585
+ ```typescript
586
+ syslog.error(data); // = log(data, "ERROR")
587
+ syslog.warn(data);
588
+ syslog.info(data);
589
+ syslog.debug(data);
590
+ syslog.trace(data); // = NOTICE
591
+ syslog.print(a, b); // payload = [a, b] si plusieurs arguments
592
+ syslog.logMultiple("ERROR", a, b); // idem, sévérité explicite
593
+ ```
594
+
595
+ ### Ne pas payer un message qu'on ne verra pas
596
+
597
+ ```typescript
598
+ // ❌ le `stringify` s'exécute même si le DEBUG est gaté
599
+ this.log(JSON.stringify(hugePayload), "DEBUG");
600
+
601
+ // ✅ on demande d'abord si ça passerait — `severityEnabled` (Syslog.ts:951)
602
+ if (this.syslog?.severityEnabled("DEBUG")) {
603
+ this.log(JSON.stringify(hugePayload), "DEBUG");
604
+ }
605
+ ```
606
+
607
+ ### Interroger l'historique par le code
608
+
609
+ ```typescript
610
+ import { filterPdus, getActiveLogDriver } from "nodefony";
611
+
612
+ // A. Le filtre pur, sur n'importe quel tableau de Pdu (0 I/O, testable seul).
613
+ const recent = filterPdus(syslog.ringStack, {
614
+ severity: ["ERROR", "CRITIC"],
615
+ limit: 50,
616
+ });
617
+
618
+ // B. Le driver actif — quel qu'il soit (mémoire, fichier, Loki…).
619
+ const driver = getActiveLogDriver();
620
+ const trace = await driver?.query?.({ requestId, order: "asc" });
621
+ ```
622
+
623
+ ### Rejouer les lignes d'une requête
624
+
625
+ Chaque `Pdu` créé dans une bulle `RequestContext` porte le `requestId` courant, capté via le
626
+ fournisseur injectable `Pdu.requestIdProvider` (`Pdu.ts:192`), branché côté Node par le barrel du
627
+ cœur. Filtrer là-dessus donne la trace **complète et ordonnée** d'un appel — pipeline HTTP,
628
+ firewall, requêtes ORM, code applicatif — d'où l'écran de suivi de requête dans Studio.
629
+
630
+ Côté navigateur, le fournisseur reste `null` : un test de référence, aucune allocation. C'est ce qui
631
+ permet à `Pdu` de rester utilisable dans la debug bar.
632
+
633
+ ### Détourner `console.*` vers le journal
634
+
635
+ `Syslog.overrideConsole()` (`Syslog.ts:1712`) redirige `log/info/warn/error/debug/table/dir` vers un
636
+ `Syslog`. Effet **global au process** : un seul appel, et `restoreConsole()` pour revenir. Les
637
+ méthodes natives ont été capturées au chargement du module, ce qui évite toute récursion infinie
638
+ lors de l'impression.
639
+
640
+ ## 🔐 Sécurité — le masquage des secrets
641
+
642
+ `redactSecrets()` (`redact.ts:52`) masque par `***` trois familles de fuites fréquentes : les paires
643
+ JSON (`"password": "…"`), les paires texte (`token=…`, `Authorization: …`) et les schémas porteurs
644
+ (`Bearer …`, `Basic …`). La liste des clés sensibles couvre mots de passe, jetons, clés d'API,
645
+ cookies et clés privées (`redact.ts:20`).
646
+
647
+ Deux propriétés valent d'être connues :
648
+
649
+ - **L'ordre compte.** Le motif porteur s'applique **en premier** (`redact.ts:38`) : sinon
650
+ `authorization: Bearer <jwt>` ne verrait masquer que le mot `Bearer`, et le jeton fuirait.
651
+ - **La fonction est idempotente** : rejouer le masquage sur une ligne déjà masquée ne change rien.
652
+
653
+ > [!IMPORTANT]
654
+ > C'est une **défense en profondeur, pas un contrôle d'accès**. La règle reste « ne pas journaliser
655
+ > de secret ». Le masquage rattrape les fuites résiduelles au moment où le texte **sort** du
656
+ > process — par exemple à la lecture d'un fichier de log par l'API d'admin, où il est appliqué par
657
+ > défaut et ne se désactive que par un paramètre explicite (`SyslogAdminApi.ts:631`).
658
+
659
+ Deux autres points de sécurité, plus discrets :
660
+
661
+ - **Les chemins absolus ne sortent pas** : l'API d'admin expose le dossier de logs en **relatif** au
662
+ répertoire de travail, ou à défaut son seul nom de base — un chemin absolu révélerait
663
+ l'arborescence et le compte système (`SyslogAdminApi.ts:104`).
664
+ - **Le pilotage à chaud du niveau de log est audité** et réservé au rôle administrateur : c'est une
665
+ surface active en production, donc traitée comme telle (`KernelAdminApi.ts:1044`).
666
+
667
+ ## ⚡ Performance & mémoire
668
+
669
+ Les mécanismes, par ordre d'impact décroissant :
670
+
671
+ 1. **La coalescence** est le levier principal. Regrouper les écritures d'un tick divise le nombre
672
+ d'appels système par le nombre de lignes de ce tick. Ce n'est **pas** le descripteur par worker
673
+ qui fait le gros du travail : la contention d'inode ne se paie qu'en régime « une écriture par
674
+ ligne », c'est-à-dire quand la coalescence est désactivée.
675
+ 2. **La gate d'entrée** supprime intégralement le coût d'un log gaté : ni `Pdu`, ni `push` au ring,
676
+ ni parcours de listeners. Seul un compteur `gated` est incrémenté.
677
+ 3. **Les allocations paresseuses**, appliquées partout : le tampon de sortie n'existe qu'au premier
678
+ log bufférisé (`Syslog.ts:52`) ; la carte des overrides de debug reste `null` tant qu'aucun debug
679
+ ciblé n'est posé (`Syslog.ts:694`) et **redevient** `null` au dernier retrait ; la carte des
680
+ transports désactivés suit la même règle (`Syslog.ts:653`).
681
+ 4. **Les constantes captées une fois** : le PID au chargement du module (`Pdu.ts:98`), la décision
682
+ de couleur ANSI au boot (`setLogColor()`, `logColor.ts:86`) — les fonctions de couleur sont
683
+ remplacées par l'identité quand la couleur est coupée, donc **zéro test par ligne**.
684
+ 5. **Les gardes par test booléen** : mute du sink, activation du ring, activation de la diffusion —
685
+ chacun coûte une comparaison, jamais une allocation.
686
+
687
+ Ce qui reste **borné par construction** : le ring (capacité fixe), le tampon de tick (64 Kio), le
688
+ buffer du sink fichier (abandon compté au-delà), la file des transports groupés, le rapatriement
689
+ d'une requête de relecture (octets par fichier × nombre de fichiers), et la fenêtre renvoyée
690
+ (plafond dur de 1000 enregistrements).
691
+
692
+ > [!TIP]
693
+ > Pour mesurer le pipeline **sans** le coût du journal, bascule le sink sur `null` : c'est
694
+ > exactement à ça qu'il sert.
695
+
696
+ ## 🧩 Extension
697
+
698
+ ### Brancher son propre transport
699
+
700
+ Le contrat tient en deux membres : un nom, et un `send` asynchrone.
701
+
702
+ ```typescript
703
+ import type { ITransport, Pdu } from "nodefony";
704
+
705
+ class SlackTransport implements ITransport {
706
+ readonly name = "slack";
707
+ async send(pdu: Pdu): Promise<void> {
708
+ if (pdu.severity > 2) return; // uniquement CRITIC et pire
709
+ await fetch(webhook, {
710
+ method: "POST",
711
+ body: JSON.stringify({ text: `${pdu.severityName} ${pdu.msgid}` }),
712
+ });
713
+ }
714
+ }
715
+
716
+ kernel.syslog?.addTransport(new SlackTransport());
717
+ ```
718
+
719
+ Une exception levée dans `send` **ne casse rien** : elle est captée et republiée en
720
+ `onTransportError` (`Syslog.ts:1503`). Pour un volume réel, étends plutôt
721
+ `BatchingHttpTransport` (`BatchingHttpTransport.ts:47`) : la file, l'abandon et le vidage sont déjà
722
+ faits.
723
+
724
+ ### Brancher sa propre destination relisable
725
+
726
+ Une fabrique enregistrée suffit — le Kernel la découvrira sans rien connaître d'elle :
727
+
728
+ ```typescript
729
+ import { registerLogDriverFactory, filterPdus } from "nodefony";
730
+
731
+ registerLogDriverFactory("s3", (ctx) => {
732
+ if (!ctx.logCfg?.queryFile?.path) return null; // config absente → on s'écarte
733
+ return {
734
+ driver: {
735
+ name: "s3",
736
+ capabilities: { write: true, query: true, stream: false },
737
+ query: async (criteria) => filterPdus(await fetchFromS3(), criteria),
738
+ },
739
+ transport: new S3Transport(),
740
+ writeKey: "s3", // déduplique le transport si deux drivers le partagent
741
+ };
742
+ });
743
+ ```
744
+
745
+ Réutiliser `filterPdus` n'est pas une commodité : c'est ce qui garantit que ton driver **filtre
746
+ comme les autres**, avec les mêmes critères et le même ordre.
747
+
748
+ ## 📜 Normes appliquées
749
+
750
+ | Domaine | Norme | Où c'est dans le code |
751
+ | -------------------------- | ---------------- | ------------------------------------------------------ |
752
+ | Sévérités 0–7 | RFC 5424 §6.2.1 | `SysLogSeverity` (`Pdu.ts:27`) |
753
+ | Champ `PROCID` | RFC 5424 | `pid` capté une fois (`Pdu.ts:126`) |
754
+ | Champ `MSGID` | RFC 5424 | `msgid` = nom du service par défaut (`Service.ts:209`) |
755
+ | Flux stdout/stderr séparés | 12-factor (logs) | Route par sévérité ≤ 3 (`Syslog.ts:1628`) |
756
+ | Configuration par l'env | 12-factor | `NF__DEBUG`, URLs d'infra (`Kernel.ts:2376`) |
757
+ | Couleur désactivable | NO_COLOR | Résolue au boot (`setLogColor()`, `logColor.ts:86`) |
758
+ | JSON Lines | JSONL | `FileTransport` format `json` (`FileTransport.ts:10`) |
759
+ | API de requête Loki | LogQL | `createLokiLogDriver()` (`LokiLogDriver.ts:86`) |
760
+
761
+ ## 📡 Observabilité — Studio
762
+
763
+ L'écran **Logs** (`/nodefony/logs`) explore l'historique via le driver actif ; **Suivi de requête**
764
+ (`/nodefony/logs/trace/:requestId`) rejoue toutes les lignes d'un appel dans l'ordre chronologique.
765
+
766
+ Le flux temps réel passe par le canal `nodefony:syslog`, alimenté par un pont **coalescé**
767
+ (`createSyslogBridge()`, `providers.ts:146`) : au lieu d'une trame par Pdu, les logs s'accumulent
768
+ dans un ring borné et partent en **une trame agrégée** toutes les 200 ms, avec un compteur de logs
769
+ omis en cas de surcharge. L'interface reste lisible au lieu de se figer. La diffusion se coupe à
770
+ chaud (`setStreamEnabled()`, `Syslog.ts:784`) sans toucher ni à l'écriture ni à la relecture.
771
+
772
+ Le plan de données est exposé sous `/nodefony/syslog/api/*` (`SyslogAdminApi.ts:94`) :
773
+
774
+ | Endpoint | Rôle |
775
+ | ---------------------------- | ----------------------------------------------------------------------- |
776
+ | `GET logs` | Derniers Pdu via le driver actif (tableau). |
777
+ | `GET logs/search` | Requête paginée `{ rows, total, truncated }`. |
778
+ | `GET backplane` | Méta : driver de relecture actif, drivers disponibles, sink, compteurs. |
779
+ | `GET backplane/ping` | Sonde de joignabilité/latence d'une destination distante. |
780
+ | `POST backplane/driver` | Bascule du driver de relecture (développement). |
781
+ | `POST backplane/transport` | Activation/désactivation d'un transport à chaud. |
782
+ | `POST backplane/sink` | Mute/démute le sink texte. |
783
+ | `POST backplane/ring` | Activation/désactivation du stockage mémoire. |
784
+ | `POST backplane/stream` | Activation/désactivation de la diffusion temps réel. |
785
+ | `GET info` | Compteurs : `valid`, `invalid`, `missed`, remplissage du ring. |
786
+ | `GET files` · `files/{name}` | Viewer de fichiers de log (développement), lecture par la fin, masquée. |
787
+
788
+ À quoi s'ajoute `GET`/`PATCH /nodefony/kernel/api/log/level` (`KernelAdminApi.ts:1044`) pour l'état
789
+ et le pilotage du debug ciblé.
790
+
791
+ ## ⚠️ Pièges (symptôme → cause → correction)
792
+
793
+ | Symptôme | Cause | Correction |
794
+ | ------------------------------------------------- | ------------------------------------------------------------- | ----------------------------------------------------------------------------- |
795
+ | `"CRITICAL"` fait lever une exception | Le nom canonique est `CRITIC` (`Pdu.ts:51`) | Utiliser `"CRITIC"`, ou le numéro `2`. |
796
+ | `pdu.severity === "INFO"` est faux | `severity` est un **nombre** | Comparer `pdu.severityName`, ou `pdu.severity === 6`. |
797
+ | Les `DEBUG` n'apparaissent plus en production | Gate d'entrée posée à `INFO` par le Kernel (`Kernel.ts:1932`) | `NF__DEBUG=MODULE`, ou `PATCH /nodefony/kernel/api/log/level`. |
798
+ | Un override de debug ne change rien | Pas de gate globale (développement) → tout passe déjà | Normal. L'override ne fait que **relever** un seuil existant. |
799
+ | `log.maxStack` refusé par TypeScript | Absent du type public `LogConfig` (`types.ts:168`) | Non réglable depuis l'app : 100 par défaut, 2000 en développement. |
800
+ | Codes de couleur dans un fichier de log | Sortie non-TTY mal détectée | La couleur est résolue au boot ; vérifier `NO_COLOR`/`FORCE_COLOR`. |
801
+ | Vue « incomplète » en cluster | Driver de relecture **local** — il ne lit que son process | `queryDriver: "cluster-file"` (défaut d'un worker), ou Loki/OpenSearch. |
802
+ | Deux fois la même ligne dans le JSONL | Deux transports de même nom empilés par deux boots successifs | Déjà traité : `addTransport` **remplace** par nom (`Syslog.ts:1415`). |
803
+ | Lignes perdues lors d'un `SIGKILL` | Le buffer de tick n'est pas vidé (non interceptable) | Perte bornée à un tick ; les sévérités ≤ 3 sont écrites en durable immédiat. |
804
+ | Boot en erreur : `queryDriver` ambigu | Loki **et** OpenSearch déclarés sans choix explicite | Préciser `queryDriver: "loki"` ou `"opensearch"` (`builtinLogDrivers.ts:54`). |
805
+ | La sortie est noyée par une boucle qui journalise | Aucune garde de débit | Activer `rateLimit` / `burstLimit` sur le `Syslog` concerné. |
806
+ | Une requête de relecture renvoie 1000 lignes max | Plafond dur anti-saturation (`filterPdus.ts:11`) | Paginer avec `offset`, ou resserrer `from`/`to`. |
807
+ | Un test « pollue » le test suivant | Le sink est **global au process** | `Syslog.setLogSink(null)` en `afterEach` (libère aussi le descripteur). |
808
+
809
+ ## 🧪 Tests & couverture
810
+
811
+ Le journal est l'un des sous-systèmes les plus testés du cœur. Familles présentes :
812
+
813
+ - **Unitaires — le hub** (`src/nodefony/src/tests/Syslog.test.ts`) : ring buffer et ses limites,
814
+ sévérités, conditions de filtrage (`&&` / `||`), rate limiting aux bornes, `rawLog` et le cas
815
+ bufférisation de sortie, détournement de `console`, les quatre transports historiques,
816
+ les compteurs d'erreurs par worker, la corrélation `requestId` via l'ALS, la gate d'entrée et les
817
+ overrides de debug par module.
818
+ - **Unitaires — le masquage** (`src/nodefony/src/tests/redact.test.ts`) : les trois familles de
819
+ secrets, l'ordre porteur-avant-paire, l'idempotence.
820
+ - **Unitaires — le backplane** (`src/nodefony/src/tests/LogDriver.test.ts`) : `filterPdus`,
821
+ classification protocole et étape, `pduToRecord`, le registre, les drivers `memory`, `file`
822
+ (JSONL) et `cluster-file` (agrégation), et la résolution `auto`.
823
+ - **Unitaires — les sinks** (`src/nodefony/src/tests/LogSink.test.ts`) : `FileSink` en mode
824
+ asynchrone et synchrone, le sink nul, la bascule de sink.
825
+ - **Intégration réseau simulée** (`src/nodefony/src/tests/LogBackplaneHttp.test.ts`) : drivers et
826
+ transports Loki/OpenSearch, avec `fetch` injecté — donc **sans** infrastructure réelle.
827
+
828
+ Ce qui **manque** aujourd'hui, et qu'il faut savoir :
829
+
830
+ - **Pas de banc de charge dédié au journal** dans la suite versionnée — le coût du logging se mesure
831
+ aujourd'hui par des scripts ponctuels. Voir le skill `nodefony-load-test` pour un banc à
832
+ concurrence contrôlée, et `nodefony-check-memory-health` pour les seuils de mémoire.
833
+ - **Pas de test d'attaque** (`*.attack.test.ts`) sur la surface d'admin du journal (pilotage du
834
+ niveau, viewer de fichiers) : `nodefony-security-review` couvre ce type de campagne.
835
+ - **Pas de banc de contrat partagé** entre drivers : chaque driver est testé pour lui-même, alors
836
+ que la promesse « tous filtrent pareil » gagnerait à être exercée comme un invariant unique.
837
+
838
+ Couverture : `npm run coverage` dans `src/nodefony` (rapport vitest). Les chiffres exacts vivent
839
+ dans la carte de tests régénérée, jamais figés dans cette page.
840
+
841
+ ## 🔗 Pour aller plus loin
842
+
843
+ - ⬆️ **Retour au hub** : [@nodefony/core — vue d'ensemble](index.md) · [Toute la documentation](../../../docs/index.md)
844
+ - 🧭 **Pages sœurs** : [Service et événements](service.md) — la classe qui expose `log()` et le bus
845
+ `onLog` · [Contexte de requête](request-context.md) — l'ALS d'où vient le `requestId` ·
846
+ [Kernel](kernel.md) — qui câble tout ça au boot (`initializeLog`)
847
+ - Le pipeline où sont émis les logs de requête → [Pipeline d'une requête](../../../docs/architecture/pipeline-requete.md)
848
+ - Le cycle de boot, dont le journal de démarrage lu depuis le ring → [Cycle de boot](../../../docs/architecture/cycle-boot-kernel.md)