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
@@ -0,0 +1,507 @@
1
+ ---
2
+ title: "Contexte de requête (RequestContext)"
3
+ navTitle: Contexte de requête
4
+ lang: fr
5
+ module: "@nodefony/core"
6
+ topic: request-context
7
+ coverageModule: nodefony-core
8
+ coveragePackage: "nodefony (cœur)"
9
+ coverageFiles: "runtime/RequestContext.ts"
10
+ section: "Cœur runtime"
11
+ audience: [developer]
12
+ tags:
13
+ [
14
+ als,
15
+ async-local-storage,
16
+ request-context,
17
+ request-id,
18
+ traceparent,
19
+ profiler,
20
+ orm,
21
+ securite,
22
+ isolation,
23
+ ]
24
+ version: "doc"
25
+ status: stable
26
+ updated: 2026-07-19
27
+ source: "src/nodefony/docs/request-context.md"
28
+ ---
29
+
30
+ # Contexte de requête (RequestContext)
31
+
32
+ > `RequestContext` est une **bulle invisible** ouverte autour de chaque requête. Tout ce qui
33
+ > s'exécute dedans — ton service, ton adapter ORM, une ligne de log six couches plus bas — peut
34
+ > lire `requestId`, l'utilisateur authentifié ou le contexte transport **sans qu'on les lui ait
35
+ > passés en argument**. Deux requêtes simultanées ne se mélangent jamais. Ancré sur
36
+ > `src/nodefony/src/runtime/RequestContext.ts`.
37
+
38
+ 📍 [Documentation](../../../docs/index.md) › [Cœur — @nodefony/core](index.md) › **Contexte de requête**
39
+
40
+ ## 🧠 Le modèle mental — une bulle, pas une variable globale
41
+
42
+ Une variable globale serait partagée par **toutes** les requêtes en vol : à 200 requêtes par
43
+ seconde, la valeur écrite par l'une serait lue par l'autre. Un argument passé de main en main serait
44
+ correct, mais il faudrait le faire traverser **chaque** signature de l'application.
45
+
46
+ `RequestContext` prend la troisième voie : Node attache un stockage à la **chaîne d'exécution
47
+ asynchrone**. Chaque requête ouvre sa propre bulle ; tout ce qu'elle appelle hérite de la sienne, et
48
+ d'aucune autre.
49
+
50
+ ```mermaid
51
+ flowchart TB
52
+ R1["Requête A arrive"] --> B1
53
+ R2["Requête B arrive"] --> B2
54
+ subgraph B1["bulle A — { requestId: 'a1', user }"]
55
+ direction TB
56
+ C1["controller"] --> S1["ton service"] --> O1["adapter ORM"] --> L1["log → requestId 'a1'"]
57
+ end
58
+ subgraph B2["bulle B — { requestId: 'b7', user }"]
59
+ direction TB
60
+ C2["controller"] --> S2["ton service"] --> O2["adapter ORM"] --> L2["log → requestId 'b7'"]
61
+ end
62
+ B1 --> F1["fin de A — la bulle se referme"]
63
+ B2 --> F2["fin de B — la bulle se referme"]
64
+ ```
65
+
66
+ Trois idées portent toute la page :
67
+
68
+ 1. **On lit, on ne transporte pas.** Aucun paramètre `requestId` ne traverse tes signatures.
69
+ 2. **La bulle a des bords nets.** Elle se referme à la fin de la requête ; en dehors, tout rend
70
+ `undefined` — jamais une valeur d'une autre requête.
71
+ 3. **Ce qui sort de la chaîne asynchrone sort de la bulle.** Un écouteur qui se déclenche plus tard
72
+ n'y est plus, sauf à l'y avoir explicitement rattaché. C'est **le** piège de la page.
73
+
74
+ ## 📖 Lexique
75
+
76
+ | Terme | Sens |
77
+ | ------------------------ | ------------------------------------------------------------------------------------------------------- |
78
+ | **ALS** | _AsyncLocalStorage_ — le mécanisme Node (`node:async_hooks`) qui attache un store à une chaîne async. |
79
+ | **Bulle** / **scope** | Une exécution de `run()` : tout ce qu'elle appelle voit le même store. |
80
+ | **Store** / **payload** | L'objet porté par la bulle (`RequestContextPayload`) — `requestId`, `user`, `traceparent`… |
81
+ | **`requestId`** | Identifiant de corrélation de la requête : il relie toutes les lignes de log d'un même appel. |
82
+ | **`traceparent`** | En-tête W3C Trace Context — permet de raccorder la trace Nodefony à un collecteur OpenTelemetry. |
83
+ | **Chaîne asynchrone** | La suite des `await`, promesses et rappels qui descendent d'un appel. L'ALS la suit, et elle seule. |
84
+ | **Callback détaché** | Un rappel exécuté depuis une autre chaîne (file d'un pool, minuterie, événement de socket). |
85
+ | **`AsyncResource.bind`** | La primitive Node qui **photographie** la bulle au moment du branchement et la restaure à l'appel. |
86
+ | **Seam** | _Couture_ : un point d'accroche prévu pour brancher un observateur sans modifier le code observé. |
87
+ | **Profiler** | L'observateur de développement qui collecte phases et requêtes ORM d'un appel (barre de debug, Studio). |
88
+ | **Hot path** | Le chemin parcouru à **chaque** requête — la moindre allocation y coûte cher. |
89
+ | **Zero Trust** | Principe : aucune requête n'est réputée légitime sans preuve d'identité vérifiée à l'entrée. |
90
+ | **Fail-closed** | En cas de doute, refuser. L'inverse (`fail-open`) laisserait passer sur incertitude. |
91
+
92
+ ## Qu'est-ce qu'un contexte de requête — et pourquoi le threader à la main ne tient pas
93
+
94
+ Un serveur traite **N requêtes en même temps** dans un seul processus. Chacune a des données qui la
95
+ caractérisent : son identifiant de corrélation, l'utilisateur authentifié, la trace distribuée. Ces
96
+ données sont utiles **partout**, et particulièrement loin du point d'entrée — dans la ligne de log
97
+ d'un repository, tout en bas.
98
+
99
+ La solution évidente — passer la valeur en argument — se dégrade en trois temps :
100
+
101
+ 1. **Elle contamine les signatures.** `save(dto)` devient `save(dto, requestId)`, puis
102
+ `save(dto, requestId, userId)`. Ces paramètres n'ont rien à voir avec le métier de la fonction.
103
+ 2. **Elle est virale.** Un besoin nouveau (ajouter `traceparent`) oblige à retoucher toutes les
104
+ signatures intermédiaires, y compris celles qui ne s'en servent pas — elles ne font que
105
+ transmettre.
106
+ 3. **Elle s'arrête au code que tu possèdes.** Un adapter ORM, une bibliothèque tierce ou le logger
107
+ ne peuvent pas recevoir ton argument. Ce sont pourtant eux qui produisent les lignes qu'on veut
108
+ corréler.
109
+
110
+ Le contexte de requête inverse la charge : la valeur est **déposée à l'entrée** et **lue à la
111
+ demande**, par qui en a besoin, sans intermédiaire. Le prix à payer est une lecture implicite : rien
112
+ dans la signature d'une fonction ne dit qu'elle dépend du contexte. La suite de cette page dit
113
+ exactement où la bulle existe, et où elle n'existe plus.
114
+
115
+ ## La vision Nodefony
116
+
117
+ `RequestContext` est une **façade statique** au-dessus d'une instance unique d'`AsyncLocalStorage`
118
+ par processus (`RequestContext.ts:115`). Quatre décisions de conception en découlent.
119
+
120
+ - **Allocation paresseuse.** L'instance n'est créée qu'au **premier** `run()` — le getter privé
121
+ `RequestContext.als` (`RequestContext.ts:118`). Importer la classe sans jamais ouvrir de bulle
122
+ (bundle client, script CLI, test unitaire) ne coûte rien.
123
+ - **Lecture à sortie rapide.** `RequestContext.get()` (`RequestContext.ts:131`) rend `undefined`
124
+ **sans toucher à l'ALS** quand aucune bulle n'a jamais été ouverte. Le cas « pas de requête » est
125
+ gratuit.
126
+ - **Forme ouverte.** `RequestContextPayload` (`RequestContext.ts:37`) déclare les clés connues puis
127
+ laisse une signature d'index : un module ajoute les siennes sans modifier le cœur. C'est ainsi que
128
+ le module de sécurité y dépose son jeton complet, sans que le cœur connaisse son type.
129
+ - **Un seul mécanisme pour HTTP et WebSocket.** La même bulle est ouverte des deux côtés — c'est ce
130
+ qui permet à un décorateur de sécurité ou à un adapter ORM d'être écrit **une fois** et de marcher
131
+ sur les deux transports.
132
+
133
+ Le compromis assumé : le cœur type `user` et `context` en **`unknown`**
134
+ (`RequestContext.ts:65`). Le paquet `nodefony` ne connaît ni `@nodefony/security`, ni
135
+ `@nodefony/http` — le typage précis serait une dépendance circulaire. Le consommateur rétrécit
136
+ lui-même, ou passe par les helpers typés des couches au-dessus (`@CurrentUser`, `Controller.context`).
137
+
138
+ ## 🚀 Démarrage rapide
139
+
140
+ ### Lire le contexte depuis un service — rien à câbler
141
+
142
+ Dans une app générée par `nodefony create app`, la bulle est **déjà ouverte** autour de chaque
143
+ requête par le serveur HTTP. Ton code n'a qu'à lire.
144
+
145
+ ```typescript
146
+ // nodefony/services/InvoiceService.ts
147
+ import { RequestContext, Service } from "nodefony";
148
+
149
+ export class InvoiceService extends Service {
150
+ pay(ref: string, amount: number): void {
151
+ // Aucun argument de contexte dans la signature : la valeur vient de la
152
+ // bulle de LA requête en cours. `undefined` si on appelle hors requête.
153
+ const requestId = RequestContext.getRequestId() ?? "hors-requête";
154
+
155
+ // `user` est posé par le firewall APRÈS authentification. Typé `unknown`
156
+ // par le cœur (il ne connaît pas les types de la sécurité) → on rétrécit.
157
+ const user = RequestContext.getUser() as { username?: string } | undefined;
158
+
159
+ this.log(
160
+ `[${requestId}] ${user?.username ?? "anonyme"} paie ${ref}`,
161
+ "INFO",
162
+ );
163
+
164
+ // Raccourci quand seul l'identifiant compte (audit, clé d'idempotence).
165
+ const userId: string | undefined = RequestContext.getUserId();
166
+ if (userId === undefined) {
167
+ this.log("paiement anonyme — aucune zone n'a authentifié", "WARNING");
168
+ }
169
+ }
170
+ }
171
+ ```
172
+
173
+ ### Ouvrir sa propre bulle — un job hors requête
174
+
175
+ Un traitement planifié, un worker, une commande CLI : **aucune bulle n'est ouverte pour eux**. En
176
+ ouvrir une rend leurs logs corrélables exactement comme ceux d'une requête.
177
+
178
+ ```typescript
179
+ // nodefony/services/NightlyJob.ts
180
+ import { Nodefony, RequestContext, Service } from "nodefony";
181
+
182
+ export class NightlyJob extends Service {
183
+ async run(): Promise<void> {
184
+ // `run()` RENVOIE ce que renvoie la fonction — ici la promesse du corps.
185
+ // Ne pas oublier le `await` : sans lui, la bulle se referme… mais le
186
+ // travail continue, et les logs suivants perdent le requestId.
187
+ await RequestContext.run(
188
+ { requestId: `job-${Nodefony.generateId()}` },
189
+ async () => {
190
+ this.log("début du recalcul", "INFO");
191
+ await this.recompute();
192
+ this.log("fin du recalcul", "INFO"); // même requestId que ci-dessus
193
+ },
194
+ );
195
+ }
196
+
197
+ private async recompute(): Promise<void> {
198
+ // Six couches plus bas, la lecture marche toujours.
199
+ this.log(`en cours (${RequestContext.getRequestId()})`, "DEBUG");
200
+ }
201
+ }
202
+ ```
203
+
204
+ ### Mesurer une opération sans coûter un centime en production
205
+
206
+ Le patron officiel pour brancher un observateur : lire le buffer **une fois**, dans la bulle, puis
207
+ ne plus jamais relire l'ALS. C'est exactement ce que font les adapters ORM livrés.
208
+
209
+ ```typescript
210
+ // nodefony/services/measured.ts
211
+ import { RequestContext } from "nodefony";
212
+ import type { IProfilerQuery } from "nodefony";
213
+
214
+ export async function measured<T>(
215
+ label: string,
216
+ exec: () => Promise<T>,
217
+ ): Promise<T> {
218
+ // On capture la RÉFÉRENCE du buffer TANT QU'ON EST dans la bulle.
219
+ const buffer = RequestContext.get()?.queries;
220
+
221
+ // Buffer absent = production, ou profiler éteint → ni mesure, ni allocation.
222
+ if (!buffer) return exec();
223
+
224
+ const startMs = performance.now();
225
+ const result = await exec();
226
+
227
+ const entry: IProfilerQuery = {
228
+ sql: label,
229
+ startMs,
230
+ durationMs: performance.now() - startMs,
231
+ };
232
+ // On pousse dans la référence capturée — surtout PAS une relecture de l'ALS :
233
+ // après un `await` traversant un pool, elle peut être perdue.
234
+ buffer.push(entry);
235
+
236
+ return result;
237
+ }
238
+ ```
239
+
240
+ ### Ce qu'on observe
241
+
242
+ ```bash
243
+ npx nodefony development
244
+ ```
245
+
246
+ ```text
247
+ INFO invoice : [b1f2c3d4-…] alice paie INV-42
248
+ DEBUG drizzle : select * from invoices where id = ? (1.4 ms)
249
+ INFO http : GET /api/invoices/INV-42 200 — 12 ms
250
+ ```
251
+
252
+ Les trois lignes portent **le même** `requestId`, bien qu'aucune ne se le soit transmis : le
253
+ journal le capte tout seul dans la bulle via `Pdu.requestIdProvider` (`Pdu.ts:212`), branché sur
254
+ `RequestContext.getRequestId` par le barrel du cœur (`src/nodefony/src/index.ts:864`). C'est ce qui
255
+ rend la trace complète d'un appel rejouable — voir [Journalisation](syslog.md).
256
+
257
+ ## 🧰 API publique
258
+
259
+ Neuf membres statiques, tous sûrs hors bulle (aucun ne lève). Les signatures exactes vivent dans le
260
+ graphe TSDoc (`.ai/symbols.json`) ; ce qui suit est l'usage.
261
+
262
+ | Appel | Ancre | Rend / fait | Hors bulle |
263
+ | ------------------ | ----------------------- | ---------------------------------------------------- | ----------- |
264
+ | `run(payload, fn)` | `RequestContext.ts:126` | ouvre une bulle et **renvoie ce que renvoie `fn`** | — |
265
+ | `get()` | `RequestContext.ts:131` | le payload entier (objet **mutable**, par référence) | `undefined` |
266
+ | `getRequestId()` | `RequestContext.ts:137` | l'identifiant de corrélation | `undefined` |
267
+ | `getUser()` | `RequestContext.ts:142` | l'utilisateur authentifié, typé `unknown` | `undefined` |
268
+ | `getUserId()` | `RequestContext.ts:155` | son identifiant sous forme de chaîne | `undefined` |
269
+ | `getContext<T>()` | `RequestContext.ts:151` | le contexte transport HTTP/WS, générique | `undefined` |
270
+ | `set(clé, valeur)` | `RequestContext.ts:164` | mute le payload **en place**, sans rouvrir de bulle | **no-op** |
271
+ | `isProfiling()` | `RequestContext.ts:179` | `true` si un buffer de profilage est actif | `false` |
272
+ | `pushQuery(query)` | `RequestContext.ts:189` | ajoute une requête mesurée au buffer | **no-op** |
273
+
274
+ > [!IMPORTANT]
275
+ > `set()` hors bulle ne **lève pas** — il ne fait rien. C'est délibéré (le même code doit tourner en
276
+ > requête et en script), mais ça veut dire qu'une écriture peut se perdre en silence. Si l'écriture
277
+ > est critique, teste `RequestContext.get()` d'abord.
278
+
279
+ ### Le payload — une forme ouverte
280
+
281
+ `RequestContextPayload` (`RequestContext.ts:37`) déclare les clés que le cœur connaît, puis autorise
282
+ les autres par une signature d'index. Chaque couche y dépose ce qui la concerne.
283
+
284
+ | Clé | Posée par | À quoi elle sert |
285
+ | ----------------- | ----------------------- | --------------------------------------------------------------------------- |
286
+ | `requestId` | le serveur HTTP/WS | corrélation des logs, en-tête de réponse, suivi de requête |
287
+ | `scheme` | le serveur HTTP/WS | `http`/`https`/`ws`/`wss` — utile aux liens absolus et aux cookies |
288
+ | `traceparent` | le serveur HTTP/WS | trace distribuée W3C, honorée si le client l'envoie |
289
+ | `user` / `userId` | le firewall après auth | identité résolue — `firewall.ts:873` |
290
+ | `token` | le firewall après auth | jeton **complet** : rôles, périmètres, attributs — `firewall.ts:759` |
291
+ | `context` | le serveur HTTP/WS | contexte transport, pour les contrôleurs sans état (`RequestContext.ts:65`) |
292
+ | `queries` | le serveur, en dev seul | buffer de requêtes ORM du profiler (`RequestContext.ts:57`) |
293
+ | `invocation` | le pont WS-RPC | profil de **la trame** en cours (phases + requêtes ORM) |
294
+ | `body` | le pont WS-RPC | corps d'une mutation — il n'existe aucun corps HTTP parsé sur une trame |
295
+ | `idempotencyKey` | le pont WS-RPC / HTTP | déduplication d'un rejeu (`Resolver.ts:494`) |
296
+ | `renderSink` | le pont WS-RPC | puits de capture d'un rendu, pour ne pas écrire de trame hors protocole |
297
+
298
+ Les couches supérieures exposent ces clés sous une forme **typée**, à préférer quand elle existe :
299
+
300
+ | Tu veux… | Écris plutôt | Ancre |
301
+ | ---------------------------- | --------------------------------------------------------- | -------------------------- |
302
+ | l'utilisateur, en contrôleur | le paramètre décoré `@CurrentUser()` | `routerDecorators.ts:1236` |
303
+ | le contexte, en contrôleur | le getter `Controller.context` | `Controller.ts:147` |
304
+ | les droits (rôles, scopes) | `@IsGranted` / `@RequireScope` — jamais une lecture brute | `Resolver.ts:579` |
305
+
306
+ ## 🔌 Où la bulle est ouverte
307
+
308
+ Quatre points d'ouverture, tous dans le cœur du serveur — ton code n'a **jamais** à ouvrir de bulle
309
+ pour une requête. Le trajet complet d'une requête (phases, ordre des hooks, teardown) est décrit
310
+ dans [Le pipeline d'une requête](../../../docs/architecture/pipeline-requete.md) ; ici, seulement
311
+ qui ouvre quoi.
312
+
313
+ <!-- prettier-ignore -->
314
+ | Transport | Ouverte par | Ce que la bulle couvre |
315
+ | --- | --- | --- |
316
+ | HTTP / HTTP2 | `HttpKernel.handleHttp()` (`http-kernel.ts:1258`) | CORS, routage, firewall, ton action, rendu |
317
+ | WebSocket — connexion | `HttpKernel.handleWebsocket()` (`http-kernel.ts:1549`) | poignée de main, firewall, **et toutes les trames** |
318
+ | WebSocket — trame RPC | `RequestContext.run()` dans `RealtimeController.invokeApiRequest()` (`RealtimeController.ts:818`) | **une** invocation : corps, clé d'idempotence, profil |
319
+ | Fin de réponse (journal) | `Context.log()` (`Context.ts:459`) | micro-bulle rouverte pour que les logs de fin soient corrélés |
320
+
321
+ Deux points méritent d'être connus.
322
+
323
+ **La bulle WebSocket survit aux trames.** Une trame arrive dans un tick d'event-loop bien
324
+ postérieur à la poignée de main : elle serait hors bulle. `WebsocketContext.connect()`
325
+ (`WebsocketContext.ts:230`) branche donc `message`, `close` et `error` à travers
326
+ `AsyncResource.bind` (`WebsocketContext.ts:243`) — la bulle est photographiée au branchement, donc
327
+ depuis l'intérieur, et restaurée à chaque appel.
328
+
329
+ **Le pont WS-RPC rouvre une bulle par invocation.** Le contexte WebSocket vit pour toute la
330
+ connexion ; y accumuler le corps, la clé d'idempotence ou les phases d'une trame produirait un
331
+ mélange entre trames concurrentes de la **même** socket. Une bulle par invocation supprime le
332
+ problème par construction.
333
+
334
+ ## 🔬 Le seam profiler ORM — gratuit en production
335
+
336
+ C'est l'usage le plus subtil du payload, et le patron à copier pour tout observateur.
337
+
338
+ Le serveur alloue `queries` (`RequestContext.ts:57`) **uniquement quand le profiler est actif**,
339
+ c'est-à-dire en développement (`http-kernel.ts:1297`). En production, la clé est simplement absente.
340
+ Cette absence **est** le signal : les adapters ORM n'ont aucun réglage à lire.
341
+
342
+ ```mermaid
343
+ flowchart LR
344
+ K["serveur — profiler actif ?"] -->|"non (prod)"| A["payload SANS queries"]
345
+ K -->|"oui (dev)"| B["payload AVEC queries: []"]
346
+ A --> C["isProfiling() = false<br/>0 mesure · 0 allocation"]
347
+ B --> D["l'adapter mesure<br/>et pousse dans le buffer"]
348
+ D --> E["Profiler.collect() au teardown<br/>même référence de tableau"]
349
+ ```
350
+
351
+ Deux lectures possibles, et elles ne sont **pas** équivalentes :
352
+
353
+ - `RequestContext.isProfiling()` (`RequestContext.ts:179`) + `RequestContext.pushQuery()`
354
+ (`RequestContext.ts:189`) — le chemin simple, quand tout se passe dans la bulle.
355
+ - **capturer la référence** du buffer une fois (`RequestContext.get()?.queries`) puis pousser
356
+ dedans — le chemin **robuste**, celui des adapters livrés : `DrizzleRepository.#prof()`
357
+ (`DrizzleRepository.ts:330`) et `MongooseRepository.#prof()` (`MongooseRepository.ts:79`).
358
+
359
+ > [!WARNING]
360
+ > **Ne relis jamais l'ALS après un `await` qui traverse un pool.** Un pilote de base de données peut
361
+ > rendre la main depuis sa propre file d'attente : ton code reprend alors dans une chaîne
362
+ > asynchrone détachée, où `isProfiling()` vaut `false` et où `pushQuery()` ne fait rien — sans la
363
+ > moindre erreur. La mesure disparaît en silence. Capturer la référence **avant** l'`await`
364
+ > supprime la dépendance à l'ALS pour la suite de l'opération.
365
+
366
+ Contrat de sécurité qui accompagne ce seam : un adapter qui pousse du SQL doit d'abord le
367
+ **masquer** si le texte peut contenir un identifiant de connexion. Le SQL paramétré (avec
368
+ `?`, comme celui de Drizzle) est déjà sans secret ; du SQL interpolé ne l'est pas.
369
+
370
+ ## Isolation — deux requêtes ne se mélangent jamais
371
+
372
+ La garantie vient de Node lui-même : l'ALS propage le store le long de la **chaîne d'exécution
373
+ asynchrone**. Deux appels concurrents à `run()` créent deux stores distincts ; un `await` à
374
+ l'intérieur de l'un ne fait jamais basculer sur l'autre.
375
+
376
+ Ce que ça implique concrètement :
377
+
378
+ - **Entre requêtes** : aucun partage. La bulle de A est invisible depuis B, même si A et B
379
+ s'entrelacent sur des dizaines de `await`.
380
+ - **À l'intérieur d'une requête** : le payload est **un seul objet, partagé par référence**. C'est
381
+ ce qui permet au firewall d'appeler `set("user", …)` en milieu de pipeline (`firewall.ts:774`) et
382
+ de rendre l'identité visible à tout ce qui tourne déjà dans la même bulle, sans rien rouvrir.
383
+ - **Après `run()`** : la bulle est refermée. `get()` rend de nouveau `undefined` — pas la valeur
384
+ précédente.
385
+
386
+ Ces trois propriétés sont exercées par la suite de tests (voir plus bas), dont un cas qui fait
387
+ tourner deux bulles concurrentes avec des `await` entrelacés et vérifie qu'aucune ne voit l'autre.
388
+
389
+ ## ⚡ Performance & mémoire
390
+
391
+ `RequestContext` est sur le chemin de **chaque** requête. Ce qui rend son coût acceptable :
392
+
393
+ - **Rien tant que rien n'est ouvert.** L'instance d'ALS n'existe qu'après le premier `run()`
394
+ (`RequestContext.ts:118`), et `get()` court-circuite sur une comparaison à `null` tant qu'aucune
395
+ bulle n'a été ouverte (`RequestContext.ts:131`).
396
+ - **Une seule allocation par requête** : l'objet payload. Il est construit au point d'entrée avec
397
+ les champs déjà connus, pas enrichi au fil de l'eau.
398
+ - **Le buffer ORM est `null` en production.** Pas de tableau alloué « au cas où » ; l'absence de la
399
+ clé suffit à éteindre toute la chaîne de mesure.
400
+ - **Les raccourcis ne réallouent rien** : `getRequestId()`, `getUser()`, `getUserId()` sont une
401
+ lecture de store suivie d'un accès de propriété.
402
+
403
+ Sur les chiffres, la page reste factuelle : la TSDoc du code annonce **~50-100 ns** par `run()` sur
404
+ Node 22+ pour l'entrée dans le scope (`RequestContext.ts:115`), et le même ordre de grandeur pour la
405
+ lecture du `requestId` par le journal (`Pdu.ts:200`), contre ~5 ns quand le fournisseur n'est pas
406
+ branché. **Il n'existe pas de banc dédié à `RequestContext`** dans le dépôt : ces valeurs sont des
407
+ ordres de grandeur documentés au code, pas une mesure rejouable. Le coût réel se constate en bout de
408
+ chaîne, par le gate mémoire du pipeline (skill `nodefony-check-memory-health`).
409
+
410
+ > [!WARNING]
411
+ > Le vrai risque mémoire n'est pas la bulle, c'est **ce qui la retient**. Un `AsyncResource.bind`
412
+ > posé sur un écouteur à vie longue garde le payload — donc l'utilisateur, donc le contexte
413
+ > transport — accessible tant que l'écouteur existe. Lier à la bulle uniquement ce qui meurt avec la
414
+ > requête ou la connexion.
415
+
416
+ ## 🔐 Sécurité — l'identité vit dans la bulle
417
+
418
+ Après authentification, le firewall dépose dans le payload l'utilisateur (`firewall.ts:628`) **et le
419
+ jeton complet** — rôles, périmètres, attributs (`firewall.ts:632`). Quatre conséquences à assumer.
420
+
421
+ 1. **Tout ce qui tourne dans la bulle peut lire l'identité.** Y compris du code que tu appelles sans
422
+ l'avoir écrit. C'est la contrepartie de la commodité : le payload n'est pas un coffre-fort. On y
423
+ met une identité **déjà vérifiée**, jamais un authentifiant (mot de passe, secret brut).
424
+ 2. **Lire l'identité n'est pas autoriser.** `getUser()` rend `unknown` : c'est un transport, pas une
425
+ décision. L'autorisation passe par le firewall et ses décorateurs, qui lisent le **jeton**
426
+ (`Resolver.ts:579`) et refusent en `fail-closed` lorsqu'aucune identité n'a été résolue.
427
+ 3. **Une identité de WebSocket peut vieillir.** La bulle de connexion porte l'identité captée à la
428
+ poignée de main, et la connexion peut durer des heures — alors que la session, elle, peut être
429
+ révoquée entre-temps. C'est pourquoi le pont WS-RPC **revalide** l'identité à chaque invocation
430
+ avant d'ouvrir sa bulle — `RequestContext.run()` (`RequestContext.ts:126`) — et refuse en
431
+ cas de doute, au lieu de faire confiance à la valeur capturée à la connexion.
432
+ La même logique vaut pour ton code : ne mets pas en cache un `getUser()` au-delà d'une invocation.
433
+ 4. **Rien ne fuit entre requêtes**, mais tout fuit hors de la bulle si on l'en sort. Ranger un
434
+ `RequestContext.get()` dans une variable de module, un cache applicatif ou une fermeture à vie
435
+ longue, c'est exposer l'identité d'un utilisateur au traitement d'un autre.
436
+
437
+ ## ⚠️ Pièges
438
+
439
+ Le premier est de loin le plus fréquent, et il ne produit **aucune erreur** — juste des valeurs
440
+ `undefined` qui apparaissent tard.
441
+
442
+ > [!CAUTION]
443
+ > **La règle à retenir.** Tout écouteur branché **dans** la bulle mais déclenché **plus tard**
444
+ > (`message`, `close`, `finish`, une minuterie, un hook d'après-réponse) et qui doit lire le
445
+ > contexte **doit** être enveloppé dans `AsyncResource.bind()` **au moment du branchement**. Sinon
446
+ > il s'exécute dans un autre tick d'event-loop, hors bulle, et tout rend `undefined`.
447
+
448
+ C'est ainsi que le framework le fait pour toi aux deux endroits qui comptent : les événements de
449
+ socket dans `WebsocketContext.connect()` (`WebsocketContext.ts:243`) et les rappels d'après-réponse
450
+ dans `Context.onAfterResponse()` (`Context.ts:445`). Si tu branches **ton** écouteur sur une socket
451
+ ou une minuterie, la règle est à toi de l'appliquer.
452
+
453
+ | Symptôme | Cause | Correction |
454
+ | ------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
455
+ | `getRequestId()` vaut `undefined` dans un écouteur / une minuterie | le rappel se déclenche dans un tick postérieur, hors bulle | `AsyncResource.bind(fn)` **au branchement**, pas à l'appel |
456
+ | Une mesure ORM disparaît sans erreur | ALS relue **après** un `await` traversant un pool → `isProfiling()` faux | capturer `get()?.queries` **avant** l'`await`, puis pousser dans la référence |
457
+ | `set()` n'a aucun effet | appelé hors bulle : c'est un no-op délibéré (`RequestContext.ts:164`) | vérifier `get()` d'abord, ou ouvrir une bulle avec `run()` |
458
+ | `getUser()` vide alors que l'utilisateur est connecté | la route n'est dans aucune zone du firewall, ou lecture **avant** le firewall | placer la route dans une zone ; lire dans l'action, pas dans un hook amont |
459
+ | `getUser()` refusé par TypeScript | le cœur type `user` en `unknown` (pas de dépendance vers la sécurité) | rétrécir soi-même, ou préférer `@CurrentUser()` (`routerDecorators.ts:1236`) |
460
+ | `isProfiling()` faux en développement | le profiler n'est pas actif → aucun buffer `queries` alloué (`RequestContext.ts:57`) | comportement normal : la mesure doit rester gratuite quand personne n'observe |
461
+ | Un log de fin de requête sans `requestId` | le teardown s'exécute après la fermeture de la bulle | déjà traité pour les contextes (`Context.ts:459`) ; pour ton code, `run()` à nouveau |
462
+ | Le travail continue après `run()`, logs décorrélés | `run()` renvoie la promesse sans l'attendre | `await RequestContext.run(...)` — la bulle suit l'`await`, pas l'appel |
463
+ | Identité périmée sur une connexion WebSocket longue | l'identité a été captée à la poignée de main | revalider par invocation (`RealtimeController.ts:810`), ne pas mettre en cache |
464
+ | Fuite mémoire autour d'un écouteur lié | `AsyncResource.bind` retient le payload, donc l'utilisateur et le contexte | ne lier que ce qui meurt avec la requête ou la connexion |
465
+
466
+ ## 🧪 Tests & couverture
467
+
468
+ La brique est couverte par **une** suite unitaire, `src/nodefony/src/tests/RequestContext.test.ts`.
469
+ Elle exerce trois familles :
470
+
471
+ - **Les bords de la bulle** : `get()` hors scope, exposition du payload à l'intérieur, valeur de
472
+ retour de `run()`, survie à un `await`, fermeture après `run()`.
473
+ - **La mutation** : `set()` visible immédiatement via `get()`, et `set()` hors scope traité comme un
474
+ no-op sans exception.
475
+ - **L'isolation et le seam profiler** : deux bulles concurrentes aux `await` entrelacés qui ne se
476
+ mélangent pas ; `isProfiling()` faux sans buffer et hors scope avec `pushQuery()` inerte ;
477
+ `pushQuery()` qui remplit bien le buffer fourni.
478
+
479
+ Ce qui **n'est pas couvert** ici, et qu'il faut savoir — la surface transverse de `RequestContext`
480
+ est bien plus large que sa suite unitaire :
481
+
482
+ - **Aucun test unitaire de `getContext()`** dans cette suite, alors que c'est le chemin des
483
+ contrôleurs sans état.
484
+ - **La propagation réelle par le serveur** (HTTP, poignée de main WebSocket, trames, après-réponse)
485
+ n'est pas exercée ici : elle relève des suites d'intégration de `@nodefony/http`, qui couvrent la
486
+ bulle WS et les rappels d'après-réponse.
487
+ - **Aucun test d'attaque** (`*.attack.test.ts`) sur le cloisonnement de l'identité entre bulles
488
+ concurrentes — le scénario « la requête B lit l'utilisateur de A » mériterait d'être exercé comme
489
+ invariant. Voir le skill `nodefony-security-review`.
490
+ - **Aucun banc de charge ni de mémoire dédié** : le coût de l'ALS se constate en bout de pipeline
491
+ (skills `nodefony-load-test` et `nodefony-check-memory-health`).
492
+
493
+ Couverture : `npm run coverage` dans `src/nodefony`. Les chiffres exacts vivent dans le rapport
494
+ vitest, jamais figés ici.
495
+
496
+ ## 🔗 Pour aller plus loin
497
+
498
+ - ⬆️ **Retour au hub** : [@nodefony/core — vue d'ensemble](index.md) · [Toute la documentation](../../../docs/index.md)
499
+ - 🧭 **Pages sœurs** : [Service et événements](service.md) — la classe de base qui expose `log()` ·
500
+ [Journalisation](syslog.md) — où le `requestId` est capté et rejoué ·
501
+ [Kernel et modules](kernel.md) — le boot qui câble tout ça ·
502
+ [Client isomorphe](client.md) — le bundle navigateur, où l'ALS n'existe pas ·
503
+ [Hooks React](react-hooks.md)
504
+ - Le trajet complet d'une requête, phase par phase → [Le pipeline d'une requête](../../../docs/architecture/pipeline-requete.md)
505
+ - Le scope d'injection par requête, à ne pas confondre avec la bulle → [Injection et portées](../../../docs/architecture/injection-portees.md)
506
+ - Qui pose l'utilisateur et le jeton dans le payload → [Firewall](../../packages/@nodefony/security/docs/firewall.md)
507
+ - L'identité côté temps réel, revalidée par trame → [Sécurité du temps réel](../../packages/@nodefony/realtime/docs/securite.md)