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.
- package/.ai/symbols.json +36135 -0
- package/LICENSE +544 -0
- package/README.md +316 -694
- package/bin/nodefony +2183 -85
- package/dist/client/Container.js +367 -0
- package/dist/client/Event.js +198 -0
- package/dist/client/Service.js +344 -0
- package/dist/client/Tools.js +162 -0
- package/dist/client/client/ClientKernel.js +276 -0
- package/dist/client/client/angular/index.js +352 -0
- package/dist/client/client/announce.js +212 -0
- package/dist/client/client/debugbar/DebugBar.js +1624 -0
- package/dist/client/client/debugbar/format.js +103 -0
- package/dist/client/client/debugbar/hmr.js +37 -0
- package/dist/client/client/debugbar/index.js +29 -0
- package/dist/client/client/debugbar/model.js +133 -0
- package/dist/client/client/debugbar/network.js +173 -0
- package/dist/client/client/debugbar/profile.js +114 -0
- package/dist/client/client/index.js +34 -0
- package/dist/client/client/react/index.js +268 -0
- package/dist/client/client/realtime/AdaptiveRate.js +240 -0
- package/dist/client/client/realtime/BrowserWsTransport.js +57 -0
- package/dist/client/client/realtime/RealtimeClient.js +898 -0
- package/dist/client/client/realtime/localEvents.js +56 -0
- package/dist/client/client/realtime/notice.js +125 -0
- package/dist/client/client/realtime/observe.js +280 -0
- package/dist/client/client/roles/index.js +3 -0
- package/dist/client/client/roles/registry.js +97 -0
- package/dist/client/client/roles/roles.js +91 -0
- package/dist/client/client/shim/events.js +88 -0
- package/dist/client/client/shim/util.js +20 -0
- package/dist/client/client/svelte/index.js +319 -0
- package/dist/client/client/syslog/context.js +122 -0
- package/dist/client/client/syslog/errors.js +49 -0
- package/dist/client/client/syslog/uplink.js +106 -0
- package/dist/client/client/vue/index.js +321 -0
- package/dist/client/colors.js +63 -0
- package/dist/client/debugbar.standalone.js +4274 -0
- package/dist/client/realtime/IRealtimeTransport.js +32 -0
- package/dist/client/realtime/JsonRpcPeer.js +251 -0
- package/dist/client/realtime/channelRate.js +39 -0
- package/dist/client/realtime/platformChannels.js +155 -0
- package/dist/client/syslog/Pdu.js +224 -0
- package/dist/client/syslog/Syslog.js +1159 -0
- package/dist/client/syslog/drivers/pduFlow.js +106 -0
- package/dist/client/syslog/drivers/pduProtocol.js +28 -0
- package/dist/client/syslog/logColor.js +80 -0
- package/dist/client/types/src/Container.d.ts +221 -0
- package/dist/client/types/src/Event.d.ts +171 -0
- package/dist/client/types/src/FileClass.d.ts +184 -0
- package/dist/client/types/src/Service.d.ts +165 -0
- package/dist/client/types/src/Tools.d.ts +116 -0
- package/dist/client/types/src/client/ClientKernel.d.ts +90 -0
- package/dist/client/types/src/client/IClientKernel.d.ts +195 -0
- package/dist/client/types/src/client/angular/index.d.ts +273 -0
- package/dist/client/types/src/client/announce.d.ts +74 -0
- package/dist/client/types/src/client/debugbar/DebugBar.d.ts +279 -0
- package/dist/client/types/src/client/debugbar/format.d.ts +48 -0
- package/dist/client/types/src/client/debugbar/hmr.d.ts +16 -0
- package/dist/client/types/src/client/debugbar/index.d.ts +30 -0
- package/dist/client/types/src/client/debugbar/model.d.ts +158 -0
- package/dist/client/types/src/client/debugbar/network.d.ts +55 -0
- package/dist/client/types/src/client/debugbar/profile.d.ts +99 -0
- package/dist/client/types/src/client/index.d.ts +47 -0
- package/dist/client/types/src/client/react/index.d.ts +207 -0
- package/dist/client/types/src/client/realtime/AdaptiveRate.d.ts +138 -0
- package/dist/client/types/src/client/realtime/BrowserWsTransport.d.ts +27 -0
- package/dist/client/types/src/client/realtime/RealtimeClient.d.ts +573 -0
- package/dist/client/types/src/client/realtime/localEvents.d.ts +53 -0
- package/dist/client/types/src/client/realtime/notice.d.ts +70 -0
- package/dist/client/types/src/client/realtime/observe.d.ts +284 -0
- package/dist/client/types/src/client/roles/index.d.ts +15 -0
- package/dist/client/types/src/client/roles/registry.d.ts +72 -0
- package/dist/client/types/src/client/roles/roles.d.ts +68 -0
- package/dist/client/types/src/client/shim/cli-color.d.ts +2 -0
- package/dist/client/types/src/client/shim/events.d.ts +39 -0
- package/dist/client/types/src/client/shim/util.d.ts +14 -0
- package/dist/client/types/src/client/svelte/index.d.ts +216 -0
- package/dist/client/types/src/client/syslog/context.d.ts +76 -0
- package/dist/client/types/src/client/syslog/errors.d.ts +46 -0
- package/dist/client/types/src/client/syslog/uplink.d.ts +89 -0
- package/dist/client/types/src/client/transport/websocket.d.ts +5 -0
- package/dist/client/types/src/client/vue/index.d.ts +234 -0
- package/dist/client/types/src/colors.d.ts +32 -0
- package/dist/client/types/src/config/infra.d.ts +171 -0
- package/dist/client/types/src/kernel/bootReport.d.ts +112 -0
- package/dist/client/types/src/kernel/readinessRegistry.d.ts +104 -0
- package/dist/client/types/src/realtime/IRealtimeSocket.d.ts +142 -0
- package/dist/client/types/src/realtime/IRealtimeTransport.d.ts +50 -0
- package/dist/client/types/src/realtime/JsonRpcPeer.d.ts +251 -0
- package/dist/client/types/src/realtime/RealtimeEventMap.d.ts +269 -0
- package/dist/client/types/src/realtime/channelRate.d.ts +55 -0
- package/dist/client/types/src/realtime/platformChannels.d.ts +147 -0
- package/dist/client/types/src/syslog/Pdu.d.ts +134 -0
- package/dist/client/types/src/syslog/Syslog.d.ts +482 -0
- package/dist/client/types/src/syslog/drivers/ILogDriver.d.ts +177 -0
- package/dist/client/types/src/syslog/drivers/pduFlow.d.ts +53 -0
- package/dist/client/types/src/syslog/drivers/pduProtocol.d.ts +20 -0
- package/dist/client/types/src/syslog/logColor.d.ts +59 -0
- package/dist/client/types/src/types/ICliKernel.d.ts +28 -0
- package/dist/client/types/src/types/ICommand.d.ts +14 -0
- package/dist/client/types/src/types/IContainer.d.ts +35 -0
- package/dist/client/types/src/types/IKernel.d.ts +138 -0
- package/dist/client/types/src/types/IMcpTool.d.ts +157 -0
- package/dist/client/types/src/types/IModule.d.ts +73 -0
- package/dist/client/types/src/types/IPage.d.ts +119 -0
- package/dist/client/types/src/types/IService.d.ts +62 -0
- package/dist/client/types/src/types/ISyslog.d.ts +58 -0
- package/dist/client/types/src/types/ITransport.d.ts +5 -0
- package/dist/client/types/src/types/globals.d.ts +47 -0
- package/dist/node/Cli.js +750 -0
- package/dist/node/Container.js +367 -0
- package/dist/node/Error.js +309 -0
- package/dist/node/Event.js +198 -0
- package/dist/node/FileClass.js +308 -0
- package/dist/node/Nodefony.js +78 -0
- package/dist/node/Service.js +344 -0
- package/dist/node/Tools.js +205 -0
- package/dist/node/bin/resolveLocalCli.js +10 -0
- package/dist/node/bundler/index.js +103 -0
- package/dist/node/cli/agentTargets.js +461 -0
- package/dist/node/cli/aiMcp.js +553 -0
- package/dist/node/cli/aiMcpReport.js +129 -0
- package/dist/node/cli/aiSync.js +323 -0
- package/dist/node/cli/aiSyncReport.js +142 -0
- package/dist/node/cli/card.js +186 -0
- package/dist/node/cli/cardReport.js +110 -0
- package/dist/node/cli/completion.js +415 -0
- package/dist/node/cli/create.js +805 -0
- package/dist/node/cli/env.js +332 -0
- package/dist/node/cli/envReport.js +159 -0
- package/dist/node/cli/execPortable.js +60 -0
- package/dist/node/cli/gitHooks.js +191 -0
- package/dist/node/cli/gitHooksReport.js +119 -0
- package/dist/node/cli/globalFlags.js +67 -0
- package/dist/node/cli/helpReport.js +288 -0
- package/dist/node/cli/manPage.js +165 -0
- package/dist/node/cli/nodefonyBin.js +61 -0
- package/dist/node/cli/outdated.js +144 -0
- package/dist/node/cli/progress.js +555 -0
- package/dist/node/cli/projectRoot.js +32 -0
- package/dist/node/cli/promptPassword.js +44 -0
- package/dist/node/cli/prompts.js +86 -0
- package/dist/node/cli/scaffold/destination.js +92 -0
- package/dist/node/cli/scaffold/engine.js +2156 -0
- package/dist/node/cli/scaffold/entityFields.js +589 -0
- package/dist/node/cli/scaffold/format.js +243 -0
- package/dist/node/cli/scaffold/interactive.js +124 -0
- package/dist/node/cli/scaffold/moduleLayout.js +38 -0
- package/dist/node/cli/scaffold/reservedEntities.js +74 -0
- package/dist/node/cli/scaffold/spec.js +704 -0
- package/dist/node/cli/scaffold/steps.js +40 -0
- package/dist/node/cli/scaffold/userContractSource.js +133 -0
- package/dist/node/cli/scaffold/versions.js +57 -0
- package/dist/node/cli/scaffold/writer.js +172 -0
- package/dist/node/cli/startMenu.js +496 -0
- package/dist/node/cli/symbols.js +205 -0
- package/dist/node/cli/sysexits.js +34 -0
- package/dist/node/cli/tableReport.js +184 -0
- package/dist/node/cli/usageReport.js +144 -0
- package/dist/node/colors.js +63 -0
- package/dist/node/command/Builder.js +153 -0
- package/dist/node/command/Command.js +348 -0
- package/dist/node/config/configProvenance.js +101 -0
- package/dist/node/config/defaults.js +39 -0
- package/dist/node/config/defineConfig.js +129 -0
- package/dist/node/config/defineEnv.js +264 -0
- package/dist/node/config/envExample.js +41 -0
- package/dist/node/config/envOverride.js +423 -0
- package/dist/node/config/infra.js +163 -0
- package/dist/node/config/reactivity.js +23 -0
- package/dist/node/config/reservedEnv.js +118 -0
- package/dist/node/config/schema.js +134 -0
- package/dist/node/config/use.js +24 -0
- package/dist/node/finder/File.js +49 -0
- package/dist/node/finder/FileResult.js +86 -0
- package/dist/node/finder/Finder.js +201 -0
- package/dist/node/finder/Result.js +45 -0
- package/dist/node/index.js +121 -0
- package/dist/node/kernel/BootConfigurationError.js +54 -0
- package/dist/node/kernel/CliKernel.js +630 -0
- package/dist/node/kernel/Kernel.js +2198 -0
- package/dist/node/kernel/Module.js +453 -0
- package/dist/node/kernel/adminPlane/adminCaller.js +98 -0
- package/dist/node/kernel/adminPlane/adminRbac.js +51 -0
- package/dist/node/kernel/adminPlane/catalog.js +158 -0
- package/dist/node/kernel/adminPlane/executeAdmin.js +78 -0
- package/dist/node/kernel/checks/deep.js +335 -0
- package/dist/node/kernel/checks/freshness.js +139 -0
- package/dist/node/kernel/checks/gating.js +231 -0
- package/dist/node/kernel/checks/guards.js +232 -0
- package/dist/node/kernel/checks/lastBoot.js +136 -0
- package/dist/node/kernel/checks/live.js +330 -0
- package/dist/node/kernel/checks/packageDeps.js +292 -0
- package/dist/node/kernel/checks/readiness.js +153 -0
- package/dist/node/kernel/checks/renderReport.js +780 -0
- package/dist/node/kernel/checks/report.js +421 -0
- package/dist/node/kernel/checks/runDoctor.js +731 -0
- package/dist/node/kernel/checks/surface.js +364 -0
- package/dist/node/kernel/checks/walk.js +100 -0
- package/dist/node/kernel/checks/wiring.js +450 -0
- package/dist/node/kernel/commands/AiMcpCommand.js +65 -0
- package/dist/node/kernel/commands/AiSyncCommand.js +48 -0
- package/dist/node/kernel/commands/BuildCommand.js +49 -0
- package/dist/node/kernel/commands/CardCommand.js +50 -0
- package/dist/node/kernel/commands/ClusterCommand.js +58 -0
- package/dist/node/kernel/commands/CompletionCommand.js +31 -0
- package/dist/node/kernel/commands/CreateCommand.js +45 -0
- package/dist/node/kernel/commands/DevCommand.js +99 -0
- package/dist/node/kernel/commands/DoctorCommand.js +115 -0
- package/dist/node/kernel/commands/EnvCommand.js +52 -0
- package/dist/node/kernel/commands/GitHooksCommand.js +47 -0
- package/dist/node/kernel/commands/InspectCommand.js +153 -0
- package/dist/node/kernel/commands/InstallCommand.js +20 -0
- package/dist/node/kernel/commands/MenuCommand.js +261 -0
- package/dist/node/kernel/commands/OutdatedCommand.js +164 -0
- package/dist/node/kernel/commands/ProdCommand.js +60 -0
- package/dist/node/kernel/commands/StatusCommand.js +30 -0
- package/dist/node/kernel/commands/StopCommand.js +35 -0
- package/dist/node/kernel/commands/SymbolsCommand.js +45 -0
- package/dist/node/kernel/commands/runtimeLauncher.js +95 -0
- package/dist/node/kernel/decorators/kernelDecorator.js +110 -0
- package/dist/node/kernel/injector/injector.js +137 -0
- package/dist/node/kernel/injector/serviceOrder.js +106 -0
- package/dist/node/kernel/inspect/adminSubjects.js +194 -0
- package/dist/node/kernel/inspect/docOutline.js +86 -0
- package/dist/node/kernel/lifecycleTags.js +76 -0
- package/dist/node/kernel/moduleConfig.js +75 -0
- package/dist/node/kernel/moduleGating.js +68 -0
- package/dist/node/kernel/readinessRegistry.js +98 -0
- package/dist/node/kernel/resolveModuleEntry.js +61 -0
- package/dist/node/mcp/caller.js +40 -0
- package/dist/node/mcp/guard.js +51 -0
- package/dist/node/mcp/protocol.js +157 -0
- package/dist/node/mcp/server.js +216 -0
- package/dist/node/mcp/tools.js +861 -0
- package/dist/node/oauth/authorizationServer.js +221 -0
- package/dist/node/oauth/protectedResource.js +293 -0
- package/dist/node/package.js +4 -0
- package/dist/node/realtime/IRealtimeTransport.js +32 -0
- package/dist/node/realtime/JsonRpcPeer.js +251 -0
- package/dist/node/realtime/RealtimeEventMap.js +15 -0
- package/dist/node/realtime/channelRate.js +39 -0
- package/dist/node/realtime/platformChannels.js +155 -0
- package/dist/node/runtime/GcScheduler.js +92 -0
- package/dist/node/runtime/RequestContext.js +76 -0
- package/dist/node/runtime/bearer.js +84 -0
- package/dist/node/runtime/engineEnvironment.js +79 -0
- package/dist/node/runtime/loadEnv.js +105 -0
- package/dist/node/runtime/pageFacets.js +85 -0
- package/dist/node/runtime/pageFilters.js +103 -0
- package/dist/node/runtime/pageGuard.js +84 -0
- package/dist/node/runtime/pageQuery.js +160 -0
- package/dist/node/runtime/pageSort.js +114 -0
- package/dist/node/runtime/redact.js +43 -0
- package/dist/node/runtime/withTimeout.js +71 -0
- package/dist/node/service/cluster/ClusterManager.js +202 -0
- package/dist/node/service/cluster/ClusterProbeAggregator.js +120 -0
- package/dist/node/service/cluster/ClusterRelay.js +74 -0
- package/dist/node/service/cluster/clusterMaster.js +65 -0
- package/dist/node/service/cluster/clusterMessage.js +70 -0
- package/dist/node/service/cluster/cpuQuota.js +59 -0
- package/dist/node/service/cluster/instanceProbe.js +52 -0
- package/dist/node/service/cluster/podEnvironment.js +48 -0
- package/dist/node/service/cluster/processProbe.js +70 -0
- package/dist/node/service/cluster/richProcessProbe.js +115 -0
- package/dist/node/service/cluster/topology.js +71 -0
- package/dist/node/service/dev/BootReporter.js +490 -0
- package/dist/node/service/dev/DevSupervisor.js +1004 -0
- package/dist/node/service/dev/bootVerdict.js +158 -0
- package/dist/node/service/dev/detachedStart.js +372 -0
- package/dist/node/service/dev/devProcess.js +1137 -0
- package/dist/node/service/dev/devProjects.js +138 -0
- package/dist/node/service/dev/devStatusReport.js +395 -0
- package/dist/node/service/dev/devStop.js +263 -0
- package/dist/node/service/fetchService.js +35 -0
- package/dist/node/service/gitService.js +62 -0
- package/dist/node/syslog/Pdu.js +224 -0
- package/dist/node/syslog/Syslog.js +1159 -0
- package/dist/node/syslog/drivers/ClusterFileLogDriver.js +114 -0
- package/dist/node/syslog/drivers/FileLogDriver.js +127 -0
- package/dist/node/syslog/drivers/ILogDriver.js +26 -0
- package/dist/node/syslog/drivers/LokiLogDriver.js +144 -0
- package/dist/node/syslog/drivers/MemoryLogDriver.js +33 -0
- package/dist/node/syslog/drivers/OpenSearchLogDriver.js +159 -0
- package/dist/node/syslog/drivers/builtinLogDrivers.js +114 -0
- package/dist/node/syslog/drivers/filterPdus.js +71 -0
- package/dist/node/syslog/drivers/logDriverRegistry.js +83 -0
- package/dist/node/syslog/drivers/opensearchShared.js +17 -0
- package/dist/node/syslog/drivers/pduFlow.js +106 -0
- package/dist/node/syslog/drivers/pduProtocol.js +28 -0
- package/dist/node/syslog/httpFetch.js +43 -0
- package/dist/node/syslog/logColor.js +80 -0
- package/dist/node/syslog/sinks/FileSink.js +142 -0
- package/dist/node/syslog/transports/BatchingHttpTransport.js +98 -0
- package/dist/node/syslog/transports/ConsoleTransport.js +14 -0
- package/dist/node/syslog/transports/FileTransport.js +17 -0
- package/dist/node/syslog/transports/HttpTransport.js +44 -0
- package/dist/node/syslog/transports/LokiTransport.js +80 -0
- package/dist/node/syslog/transports/OpenSearchTransport.js +53 -0
- package/dist/node/syslog/transports/SyslogTransport.js +13 -0
- package/dist/node/syslog/transports/index.js +8 -0
- package/dist/node/testing/index.js +190 -0
- package/dist/types/Cli.d.ts +177 -0
- package/dist/types/Container.d.ts +221 -0
- package/dist/types/Error.d.ts +162 -0
- package/dist/types/Event.d.ts +171 -0
- package/dist/types/FileClass.d.ts +184 -0
- package/dist/types/Nodefony.d.ts +66 -0
- package/dist/types/Service.d.ts +165 -0
- package/dist/types/Tools.d.ts +116 -0
- package/dist/types/bin/resolveLocalCli.d.ts +49 -0
- package/dist/types/bundler/index.d.ts +66 -0
- package/dist/types/cli/agentTargets.d.ts +378 -0
- package/dist/types/cli/aiMcp.d.ts +239 -0
- package/dist/types/cli/aiMcpReport.d.ts +113 -0
- package/dist/types/cli/aiSync.d.ts +68 -0
- package/dist/types/cli/aiSyncReport.d.ts +149 -0
- package/dist/types/cli/card.d.ts +49 -0
- package/dist/types/cli/cardReport.d.ts +127 -0
- package/dist/types/cli/completion.d.ts +154 -0
- package/dist/types/cli/create.d.ts +177 -0
- package/dist/types/cli/env.d.ts +103 -0
- package/dist/types/cli/envReport.d.ts +153 -0
- package/dist/types/cli/execPortable.d.ts +54 -0
- package/dist/types/cli/gitHooks.d.ts +48 -0
- package/dist/types/cli/gitHooksReport.d.ts +101 -0
- package/dist/types/cli/globalFlags.d.ts +48 -0
- package/dist/types/cli/helpReport.d.ts +110 -0
- package/dist/types/cli/manPage.d.ts +21 -0
- package/dist/types/cli/nodefonyBin.d.ts +45 -0
- package/dist/types/cli/outdated.d.ts +119 -0
- package/dist/types/cli/progress.d.ts +349 -0
- package/dist/types/cli/projectRoot.d.ts +19 -0
- package/dist/types/cli/promptPassword.d.ts +22 -0
- package/dist/types/cli/prompts.d.ts +102 -0
- package/dist/types/cli/scaffold/destination.d.ts +70 -0
- package/dist/types/cli/scaffold/engine.d.ts +545 -0
- package/dist/types/cli/scaffold/entityFields.d.ts +238 -0
- package/dist/types/cli/scaffold/format.d.ts +78 -0
- package/dist/types/cli/scaffold/interactive.d.ts +11 -0
- package/dist/types/cli/scaffold/moduleLayout.d.ts +69 -0
- package/dist/types/cli/scaffold/reservedEntities.d.ts +49 -0
- package/dist/types/cli/scaffold/spec.d.ts +159 -0
- package/dist/types/cli/scaffold/steps.d.ts +24 -0
- package/dist/types/cli/scaffold/userContractSource.d.ts +86 -0
- package/dist/types/cli/scaffold/versions.d.ts +14 -0
- package/dist/types/cli/scaffold/writer.d.ts +100 -0
- package/dist/types/cli/startMenu.d.ts +195 -0
- package/dist/types/cli/symbols.d.ts +84 -0
- package/dist/types/cli/sysexits.d.ts +31 -0
- package/dist/types/cli/tableReport.d.ts +44 -0
- package/dist/types/cli/usageReport.d.ts +108 -0
- package/dist/types/client/ClientKernel.d.ts +90 -0
- package/dist/types/client/IClientKernel.d.ts +195 -0
- package/dist/types/client/angular/index.d.ts +273 -0
- package/dist/types/client/announce.d.ts +74 -0
- package/dist/types/client/debugbar/DebugBar.d.ts +279 -0
- package/dist/types/client/debugbar/format.d.ts +48 -0
- package/dist/types/client/debugbar/hmr.d.ts +16 -0
- package/dist/types/client/debugbar/index.d.ts +30 -0
- package/dist/types/client/debugbar/model.d.ts +158 -0
- package/dist/types/client/debugbar/network.d.ts +55 -0
- package/dist/types/client/debugbar/profile.d.ts +99 -0
- package/dist/types/client/index.d.ts +47 -0
- package/dist/types/client/react/index.d.ts +207 -0
- package/dist/types/client/realtime/AdaptiveRate.d.ts +138 -0
- package/dist/types/client/realtime/BrowserWsTransport.d.ts +27 -0
- package/dist/types/client/realtime/RealtimeClient.d.ts +573 -0
- package/dist/types/client/realtime/localEvents.d.ts +53 -0
- package/dist/types/client/realtime/notice.d.ts +70 -0
- package/dist/types/client/realtime/observe.d.ts +284 -0
- package/dist/types/client/roles/index.d.ts +15 -0
- package/dist/types/client/roles/registry.d.ts +72 -0
- package/dist/types/client/roles/roles.d.ts +68 -0
- package/dist/types/client/shim/cli-color.d.ts +2 -0
- package/dist/types/client/shim/events.d.ts +39 -0
- package/dist/types/client/shim/util.d.ts +14 -0
- package/dist/types/client/svelte/index.d.ts +216 -0
- package/dist/types/client/syslog/context.d.ts +76 -0
- package/dist/types/client/syslog/errors.d.ts +46 -0
- package/dist/types/client/syslog/uplink.d.ts +89 -0
- package/dist/types/client/transport/websocket.d.ts +5 -0
- package/dist/types/client/vue/index.d.ts +234 -0
- package/dist/types/colors.d.ts +32 -0
- package/dist/types/command/Builder.d.ts +47 -0
- package/dist/types/command/Command.d.ts +268 -0
- package/dist/types/config/configMeta.d.ts +53 -0
- package/dist/types/config/configProvenance.d.ts +58 -0
- package/dist/types/config/defaults.d.ts +33 -0
- package/dist/types/config/defineConfig.d.ts +70 -0
- package/dist/types/config/defineEnv.d.ts +170 -0
- package/dist/types/config/envExample.d.ts +23 -0
- package/dist/types/config/envOverride.d.ts +236 -0
- package/dist/types/config/index.d.ts +23 -0
- package/dist/types/config/infra.d.ts +171 -0
- package/dist/types/config/reactivity.d.ts +36 -0
- package/dist/types/config/reservedEnv.d.ts +145 -0
- package/dist/types/config/schema.d.ts +113 -0
- package/dist/types/config/types.d.ts +374 -0
- package/dist/types/config/use.d.ts +80 -0
- package/dist/types/finder/File.d.ts +26 -0
- package/dist/types/finder/FileResult.d.ts +14 -0
- package/dist/types/finder/Finder.d.ts +51 -0
- package/dist/types/finder/Result.d.ts +10 -0
- package/dist/types/index.d.ts +205 -0
- package/dist/types/kernel/BootConfigurationError.d.ts +50 -0
- package/dist/types/kernel/CliKernel.d.ts +289 -0
- package/dist/types/kernel/Kernel.d.ts +1255 -0
- package/dist/types/kernel/Module.d.ts +326 -0
- package/dist/types/kernel/adminPlane/adminCaller.d.ts +105 -0
- package/dist/types/kernel/adminPlane/adminRbac.d.ts +44 -0
- package/dist/types/kernel/adminPlane/catalog.d.ts +122 -0
- package/dist/types/kernel/adminPlane/executeAdmin.d.ts +99 -0
- package/dist/types/kernel/bootReport.d.ts +112 -0
- package/dist/types/kernel/checks/deep.d.ts +122 -0
- package/dist/types/kernel/checks/freshness.d.ts +49 -0
- package/dist/types/kernel/checks/gating.d.ts +134 -0
- package/dist/types/kernel/checks/guards.d.ts +57 -0
- package/dist/types/kernel/checks/lastBoot.d.ts +189 -0
- package/dist/types/kernel/checks/live.d.ts +110 -0
- package/dist/types/kernel/checks/packageDeps.d.ts +44 -0
- package/dist/types/kernel/checks/readiness.d.ts +97 -0
- package/dist/types/kernel/checks/renderReport.d.ts +107 -0
- package/dist/types/kernel/checks/report.d.ts +414 -0
- package/dist/types/kernel/checks/runDoctor.d.ts +361 -0
- package/dist/types/kernel/checks/surface.d.ts +148 -0
- package/dist/types/kernel/checks/walk.d.ts +45 -0
- package/dist/types/kernel/checks/wiring.d.ts +54 -0
- package/dist/types/kernel/commands/AiMcpCommand.d.ts +39 -0
- package/dist/types/kernel/commands/AiSyncCommand.d.ts +28 -0
- package/dist/types/kernel/commands/BuildCommand.d.ts +13 -0
- package/dist/types/kernel/commands/CardCommand.d.ts +34 -0
- package/dist/types/kernel/commands/ClusterCommand.d.ts +29 -0
- package/dist/types/kernel/commands/CompletionCommand.d.ts +17 -0
- package/dist/types/kernel/commands/CreateCommand.d.ts +16 -0
- package/dist/types/kernel/commands/DevCommand.d.ts +40 -0
- package/dist/types/kernel/commands/DoctorCommand.d.ts +55 -0
- package/dist/types/kernel/commands/EnvCommand.d.ts +35 -0
- package/dist/types/kernel/commands/GitHooksCommand.d.ts +27 -0
- package/dist/types/kernel/commands/InspectCommand.d.ts +59 -0
- package/dist/types/kernel/commands/InstallCommand.d.ts +7 -0
- package/dist/types/kernel/commands/MenuCommand.d.ts +58 -0
- package/dist/types/kernel/commands/OutdatedCommand.d.ts +47 -0
- package/dist/types/kernel/commands/ProdCommand.d.ts +29 -0
- package/dist/types/kernel/commands/StatusCommand.d.ts +17 -0
- package/dist/types/kernel/commands/StopCommand.d.ts +17 -0
- package/dist/types/kernel/commands/SymbolsCommand.d.ts +29 -0
- package/dist/types/kernel/commands/runtimeLauncher.d.ts +76 -0
- package/dist/types/kernel/decorators/kernelDecorator.d.ts +76 -0
- package/dist/types/kernel/injector/injector.d.ts +47 -0
- package/dist/types/kernel/injector/serviceOrder.d.ts +29 -0
- package/dist/types/kernel/inspect/adminSubjects.d.ts +169 -0
- package/dist/types/kernel/inspect/docOutline.d.ts +53 -0
- package/dist/types/kernel/lifecycleTags.d.ts +79 -0
- package/dist/types/kernel/moduleConfig.d.ts +35 -0
- package/dist/types/kernel/moduleGating.d.ts +78 -0
- package/dist/types/kernel/readinessRegistry.d.ts +104 -0
- package/dist/types/kernel/resolveModuleEntry.d.ts +46 -0
- package/dist/types/mcp/caller.d.ts +55 -0
- package/dist/types/mcp/guard.d.ts +66 -0
- package/dist/types/mcp/protocol.d.ts +163 -0
- package/dist/types/mcp/server.d.ts +70 -0
- package/dist/types/mcp/tools.d.ts +209 -0
- package/dist/types/oauth/authorizationServer.d.ts +204 -0
- package/dist/types/oauth/protectedResource.d.ts +339 -0
- package/dist/types/realtime/IRealtimeSocket.d.ts +142 -0
- package/dist/types/realtime/IRealtimeTransport.d.ts +50 -0
- package/dist/types/realtime/JsonRpcPeer.d.ts +251 -0
- package/dist/types/realtime/RealtimeEventMap.d.ts +269 -0
- package/dist/types/realtime/channelRate.d.ts +55 -0
- package/dist/types/realtime/platformChannels.d.ts +147 -0
- package/dist/types/runtime/GcScheduler.d.ts +96 -0
- package/dist/types/runtime/RequestContext.d.ts +152 -0
- package/dist/types/runtime/bearer.d.ts +88 -0
- package/dist/types/runtime/engineEnvironment.d.ts +115 -0
- package/dist/types/runtime/loadEnv.d.ts +86 -0
- package/dist/types/runtime/pageFacets.d.ts +104 -0
- package/dist/types/runtime/pageFilters.d.ts +139 -0
- package/dist/types/runtime/pageGuard.d.ts +78 -0
- package/dist/types/runtime/pageQuery.d.ts +138 -0
- package/dist/types/runtime/pageSort.d.ts +86 -0
- package/dist/types/runtime/redact.d.ts +27 -0
- package/dist/types/runtime/withTimeout.d.ts +51 -0
- package/dist/types/service/cluster/ClusterManager.d.ts +112 -0
- package/dist/types/service/cluster/ClusterProbeAggregator.d.ts +68 -0
- package/dist/types/service/cluster/ClusterRelay.d.ts +57 -0
- package/dist/types/service/cluster/clusterMaster.d.ts +40 -0
- package/dist/types/service/cluster/clusterMessage.d.ts +94 -0
- package/dist/types/service/cluster/cpuQuota.d.ts +37 -0
- package/dist/types/service/cluster/instanceProbe.d.ts +82 -0
- package/dist/types/service/cluster/podEnvironment.d.ts +35 -0
- package/dist/types/service/cluster/processProbe.d.ts +53 -0
- package/dist/types/service/cluster/richProcessProbe.d.ts +77 -0
- package/dist/types/service/cluster/topology.d.ts +64 -0
- package/dist/types/service/dev/BootReporter.d.ts +67 -0
- package/dist/types/service/dev/DevSupervisor.d.ts +117 -0
- package/dist/types/service/dev/bootVerdict.d.ts +99 -0
- package/dist/types/service/dev/detachedStart.d.ts +164 -0
- package/dist/types/service/dev/devProcess.d.ts +638 -0
- package/dist/types/service/dev/devProjects.d.ts +121 -0
- package/dist/types/service/dev/devStatusReport.d.ts +141 -0
- package/dist/types/service/dev/devStop.d.ts +57 -0
- package/dist/types/service/fetchService.d.ts +29 -0
- package/dist/types/service/gitService.d.ts +24 -0
- package/dist/types/syslog/Pdu.d.ts +134 -0
- package/dist/types/syslog/Syslog.d.ts +482 -0
- package/dist/types/syslog/drivers/ClusterFileLogDriver.d.ts +40 -0
- package/dist/types/syslog/drivers/FileLogDriver.d.ts +55 -0
- package/dist/types/syslog/drivers/ILogDriver.d.ts +177 -0
- package/dist/types/syslog/drivers/LokiLogDriver.d.ts +44 -0
- package/dist/types/syslog/drivers/MemoryLogDriver.d.ts +20 -0
- package/dist/types/syslog/drivers/OpenSearchLogDriver.d.ts +40 -0
- package/dist/types/syslog/drivers/builtinLogDrivers.d.ts +43 -0
- package/dist/types/syslog/drivers/filterPdus.d.ts +21 -0
- package/dist/types/syslog/drivers/logDriverRegistry.d.ts +100 -0
- package/dist/types/syslog/drivers/opensearchShared.d.ts +11 -0
- package/dist/types/syslog/drivers/pduFlow.d.ts +53 -0
- package/dist/types/syslog/drivers/pduProtocol.d.ts +20 -0
- package/dist/types/syslog/httpFetch.d.ts +48 -0
- package/dist/types/syslog/logColor.d.ts +59 -0
- package/dist/types/syslog/sinks/FileSink.d.ts +78 -0
- package/dist/types/syslog/transports/BatchingHttpTransport.d.ts +59 -0
- package/dist/types/syslog/transports/ConsoleTransport.d.ts +8 -0
- package/dist/types/syslog/transports/FileTransport.d.ts +13 -0
- package/dist/types/syslog/transports/HttpTransport.d.ts +15 -0
- package/dist/types/syslog/transports/LokiTransport.d.ts +45 -0
- package/dist/types/syslog/transports/OpenSearchTransport.d.ts +40 -0
- package/dist/types/syslog/transports/SyslogTransport.d.ts +9 -0
- package/dist/types/syslog/transports/index.d.ts +12 -0
- package/dist/types/testing/index.d.ts +197 -0
- package/dist/types/types/IAdminApi.d.ts +246 -0
- package/dist/types/types/ICliKernel.d.ts +28 -0
- package/dist/types/types/ICommand.d.ts +14 -0
- package/dist/types/types/IContainer.d.ts +35 -0
- package/dist/types/types/IIdempotencyStore.d.ts +159 -0
- package/dist/types/types/IKernel.d.ts +138 -0
- package/dist/types/types/IMcpTool.d.ts +157 -0
- package/dist/types/types/IModule.d.ts +73 -0
- package/dist/types/types/IModuleManifest.d.ts +49 -0
- package/dist/types/types/IPage.d.ts +119 -0
- package/dist/types/types/IService.d.ts +62 -0
- package/dist/types/types/ISyslog.d.ts +58 -0
- package/dist/types/types/ITransport.d.ts +5 -0
- package/dist/types/types/globals.d.ts +47 -0
- package/docs/angular-services.md +318 -0
- package/docs/catalogue.md +184 -0
- package/docs/cli.md +369 -0
- package/docs/client.md +616 -0
- package/docs/debugbar.md +218 -0
- package/docs/environnement.md +308 -0
- package/docs/index.md +388 -0
- package/docs/kernel.md +670 -0
- package/docs/progression.md +228 -0
- package/docs/react-hooks.md +686 -0
- package/docs/request-context.md +507 -0
- package/docs/service.md +590 -0
- package/docs/svelte-reactivite.md +293 -0
- package/docs/syslog.md +848 -0
- package/docs/testing.md +203 -0
- package/docs/vue-composables.md +255 -0
- package/man/nodefony.1 +152 -0
- package/package.json +163 -83
- package/templates/app/agents/AGENTS.md.tpl +967 -0
- package/templates/app/agents/POINTEUR.md.tpl +12 -0
- package/templates/app/base/Dockerfile.tpl +104 -0
- package/templates/app/base/README.md.tpl +314 -0
- package/templates/app/base/dockerignore.tpl +28 -0
- package/templates/app/base/env.ts.tpl +130 -0
- package/templates/app/base/gitattributes.tpl +28 -0
- package/templates/app/base/github/workflows/ci.yml.tpl +91 -0
- package/templates/app/base/gitignore.tpl +46 -0
- package/templates/app/base/gitlab-ci.yml.tpl +42 -0
- package/templates/app/base/index.ts.tpl +69 -0
- package/templates/app/base/nodefony.config.ts.tpl +342 -0
- package/templates/app/base/oxlintrc.json.tpl +127 -0
- package/templates/app/base/package.json.tpl +75 -0
- package/templates/app/base/prettierignore.tpl +24 -0
- package/templates/app/base/prettierrc.json.tpl +12 -0
- package/templates/app/base/rolldown.config.ts.tpl +8 -0
- package/templates/app/base/tests/config.test.ts.tpl +29 -0
- package/templates/app/base/tests/e2e.setup.ts.tpl +181 -0
- package/templates/app/base/tests/e2e.test.ts.tpl +105 -0
- package/templates/app/base/tests/migrations.e2e.test.ts.tpl +579 -0
- package/templates/app/base/tsconfig.json.tpl +47 -0
- package/templates/app/base/vitest.config.ts.tpl +88 -0
- package/templates/app/base/vitest.e2e.config.ts.tpl +39 -0
- package/templates/app/complete/compose.yaml.tpl +328 -0
- package/templates/app/complete/deploy/migrate-job.yaml.tpl +100 -0
- package/templates/app/complete/docker/db/init-nodefony-e2e.sql.tpl +30 -0
- package/templates/app/complete/docker/grafana/provisioning/datasources/loki.yaml.tpl +15 -0
- package/templates/app/complete/env.local.tpl +11 -0
- package/templates/app/complete/env.tpl +53 -0
- package/templates/app/complete/nodefony/entity/User.ts.tpl +69 -0
- package/templates/app/complete/nodefony/security/provisionUsers.ts.tpl +124 -0
- package/templates/app/complete/nodefony/service/AppBannerService.ts.tpl +98 -0
- package/templates/app/complete/nodefony/service/AppInfoService.ts.tpl +85 -0
- package/templates/app/frontend/angular/frontend/src/accent.css.tpl +34 -0
- package/templates/app/frontend/angular/frontend/src/app/app.component.ts.tpl +400 -0
- package/templates/app/frontend/react/frontend/src/App.tsx.tpl +421 -0
- package/templates/app/frontend/react/frontend/src/accent.css.tpl +30 -0
- package/templates/app/frontend/shared/frontend/src/brand.ts.tpl +3 -0
- package/templates/app/frontend/shared/frontend/src/showcase.css.tpl +224 -0
- package/templates/app/frontend/shared/nodefony/controllers/AppController.ts.tpl +45 -0
- package/templates/app/frontend/svelte/frontend/src/App.svelte.tpl +371 -0
- package/templates/app/frontend/svelte/frontend/src/accent.css.tpl +34 -0
- package/templates/app/frontend/vue/frontend/src/App.vue.tpl +367 -0
- package/templates/app/frontend/vue/frontend/src/accent.css.tpl +34 -0
- package/templates/app/home/nodefony/controllers/HomeController.ts.tpl +38 -0
- package/templates/command/nodefony/command/__NAME__.ts.tpl +132 -0
- package/templates/controller/duplex/nodefony/controllers/__NAME__.ts.tpl +188 -0
- package/templates/controller/example/nodefony/controllers/__NAME__.ts.tpl +348 -0
- package/templates/controller/hello/nodefony/controllers/__NAME__.ts.tpl +143 -0
- package/templates/controller/realtime/nodefony/controllers/__NAME__.ts.tpl +153 -0
- package/templates/controller/realtime/tests/__KEBAB__-realtime.test.ts.tpl +79 -0
- package/templates/controller/rest/nodefony/controllers/__NAME__.ts.tpl +159 -0
- package/templates/entity/base/nodefony/entity/__PASCAL__.schema.ts.tpl +31 -0
- package/templates/entity/base/nodefony/entity/__PASCAL__.ts.tpl +68 -0
- package/templates/entity/controller/nodefony/controllers/__PASCAL__Controller.ts.tpl +335 -0
- package/templates/entity/service/nodefony/service/__PASCAL__Service.ts.tpl +126 -0
- package/templates/entity/tests/tests/__KEBAB__.e2e.test.ts.tpl +358 -0
- package/templates/entity/tests/tests/__KEBAB__.test.ts.tpl +87 -0
- package/templates/front/angular/frontend/src/app/app.component.ts.tpl +30 -0
- package/templates/front/base/nodefony/controllers/__NAME__.ts.tpl +60 -0
- package/templates/front/react/frontend/src/App.tsx.tpl +26 -0
- package/templates/front/svelte/frontend/src/App.svelte.tpl +19 -0
- package/templates/front/vue/frontend/src/App.vue.tpl +23 -0
- package/templates/module/ai/AGENTS.md.tpl +71 -0
- package/templates/module/base/README.md.tpl +62 -0
- package/templates/module/base/docs/index.md.tpl +55 -0
- package/templates/module/base/index.ts.tpl +50 -0
- package/templates/module/base/nodefony/config/config.ts.tpl +60 -0
- package/templates/module/base/nodefony/config/defineModuleConfig.ts.tpl +55 -0
- package/templates/module/base/nodefony/src/errors/__PASCAL__Error.ts.tpl +20 -0
- package/templates/module/base/package.json.tpl +53 -0
- package/templates/module/base/rolldown.config.ts.tpl +14 -0
- package/templates/module/base/tests/__KEBAB__.test.ts.tpl +39 -0
- package/templates/module/base/tsconfig.json.tpl +42 -0
- package/templates/module/base/vitest.config.ts.tpl +27 -0
- package/templates/module/packages/CLAUDE.md.tpl +51 -0
- package/templates/module/packages/MEMORY.md.tpl +39 -0
- package/templates/module/packages/tsconfig.declarations.json.tpl +19 -0
- package/templates/module/packages/tsconfig.tests.json.tpl +11 -0
- package/templates/module/service/nodefony/interfaces/I__PASCAL__Service.ts.tpl +14 -0
- package/templates/module/service/nodefony/interfaces/index.ts.tpl +1 -0
- package/templates/module/service/nodefony/service/__PASCAL__Service.ts.tpl +116 -0
- package/templates/service/nodefony/interfaces/I__PASCAL__Service.ts.tpl +19 -0
- package/templates/service/nodefony/service/__PASCAL__Service.ts.tpl +136 -0
- package/templates/service/tests/__PASCAL__Service.test.ts.tpl +53 -0
- package/templates/shared/front-entry/angular/frontend/src/main.ts.tpl +17 -0
- package/templates/shared/front-entry/react/frontend/src/main.tsx.tpl +11 -0
- package/templates/shared/front-entry/svelte/frontend/src/main.ts.tpl +13 -0
- package/templates/shared/front-entry/vue/frontend/src/main.ts.tpl +12 -0
- package/templates/shared/front-registrar/nodefony/frontend/register__PASCAL__Entry.ts.tpl +40 -0
- package/templates/shared/front-shell/frontend/index.html.tpl +39 -0
- package/templates/shared/ng-app-tsconfig/frontend/tsconfig.app.json.tpl +18 -0
- package/templates/shared/svelte-shim/frontend/src/env.d.ts.tpl +12 -0
- package/templates/shared/vue-shim/frontend/src/env.d.ts.tpl +15 -0
- package/.yarnclean +0 -45
- package/CHANGELOG.md +0 -406
- package/autoloader.es6 +0 -253
- package/builder.es6 +0 -366
- package/cli/builder/bundles/bundle.js +0 -328
- package/cli/builder/bundles/controller.js +0 -73
- package/cli/builder/bundles/users-bundle/.yarnclean +0 -45
- package/cli/builder/bundles/users-bundle/Command/fixtureTask.js +0 -47
- package/cli/builder/bundles/users-bundle/Command/usersCommand.js +0 -105
- package/cli/builder/bundles/users-bundle/Entity/mongoose/userEntity.js +0 -168
- package/cli/builder/bundles/users-bundle/Entity/sequelize/userEntity.js +0 -231
- package/cli/builder/bundles/users-bundle/Fixtures/users.js +0 -117
- package/cli/builder/bundles/users-bundle/Fixtures/usersFixtures.js +0 -114
- package/cli/builder/bundles/users-bundle/Resources/config/config.js +0 -90
- package/cli/builder/bundles/users-bundle/Resources/config/routing.js +0 -17
- package/cli/builder/bundles/users-bundle/Resources/config/security.js +0 -96
- package/cli/builder/bundles/users-bundle/Resources/config/services.js +0 -7
- package/cli/builder/bundles/users-bundle/Resources/config/webpack/webpack.dev.config.js +0 -13
- package/cli/builder/bundles/users-bundle/Resources/config/webpack/webpack.prod.config.js +0 -31
- package/cli/builder/bundles/users-bundle/Resources/config/webpack.config.js +0 -146
- package/cli/builder/bundles/users-bundle/Resources/js/users.js +0 -153
- package/cli/builder/bundles/users-bundle/Resources/public/favicon.ico +0 -0
- package/cli/builder/bundles/users-bundle/Resources/public/images/users-logo.png +0 -0
- package/cli/builder/bundles/users-bundle/Resources/scss/awesome/font-awesome.config.js +0 -11
- package/cli/builder/bundles/users-bundle/Resources/scss/custom.scss +0 -23
- package/cli/builder/bundles/users-bundle/Resources/scss/users.scss +0 -59
- package/cli/builder/bundles/users-bundle/Resources/swagger/openapi/login.js +0 -235
- package/cli/builder/bundles/users-bundle/Resources/swagger/openapi/users.js +0 -232
- package/cli/builder/bundles/users-bundle/Resources/translations/login.en_en.yml +0 -14
- package/cli/builder/bundles/users-bundle/Resources/translations/login.fr_fr.yml +0 -14
- package/cli/builder/bundles/users-bundle/Resources/translations/users.en_en.yml +0 -35
- package/cli/builder/bundles/users-bundle/Resources/translations/users.fr_fr.yml +0 -36
- package/cli/builder/bundles/users-bundle/Resources/views/base.html.twig +0 -32
- package/cli/builder/bundles/users-bundle/Resources/views/footer.html.twig +0 -7
- package/cli/builder/bundles/users-bundle/Resources/views/header.html.twig +0 -90
- package/cli/builder/bundles/users-bundle/Resources/views/login/login.html.twig +0 -43
- package/cli/builder/bundles/users-bundle/Resources/views/users/createUser.html.twig +0 -296
- package/cli/builder/bundles/users-bundle/Resources/views/users/readUsers.html.twig +0 -94
- package/cli/builder/bundles/users-bundle/controller/api/graphql/graphqlController.js +0 -56
- package/cli/builder/bundles/users-bundle/controller/api/graphql/userResolver.js +0 -121
- package/cli/builder/bundles/users-bundle/controller/api/graphql/usertype.js +0 -58
- package/cli/builder/bundles/users-bundle/controller/api/openapi/loginApiController.js +0 -210
- package/cli/builder/bundles/users-bundle/controller/api/openapi/restUserController.js +0 -244
- package/cli/builder/bundles/users-bundle/controller/loginController.js +0 -91
- package/cli/builder/bundles/users-bundle/controller/usersController.js +0 -332
- package/cli/builder/bundles/users-bundle/package.json +0 -58
- package/cli/builder/bundles/users-bundle/readme.md +0 -360
- package/cli/builder/bundles/users-bundle/services/usersService.js +0 -411
- package/cli/builder/bundles/users-bundle/src/providers/mongoose/userProvider.js +0 -47
- package/cli/builder/bundles/users-bundle/src/providers/sequelize/userProvider.js +0 -48
- package/cli/builder/bundles/users-bundle/tests/loginTest.js +0 -182
- package/cli/builder/bundles/users-bundle/usersBundle.js +0 -26
- package/cli/builder/microService/microService.js +0 -261
- package/cli/builder/microService/skeletons/.editorconfig +0 -18
- package/cli/builder/microService/skeletons/.env-cmdrc.js +0 -32
- package/cli/builder/microService/skeletons/.jshintrc +0 -37
- package/cli/builder/microService/skeletons/README.md +0 -117
- package/cli/builder/microService/skeletons/bin/bash/hello.sh +0 -5
- package/cli/builder/microService/skeletons/bin/cli +0 -13
- package/cli/builder/microService/skeletons/bin/python/hello.py +0 -20
- package/cli/builder/microService/skeletons/config/config.js +0 -29
- package/cli/builder/microService/skeletons/config/pm2.config.js +0 -72
- package/cli/builder/microService/skeletons/config/webpack/webpack.config.dev.js +0 -8
- package/cli/builder/microService/skeletons/config/webpack/webpack.config.prod.js +0 -25
- package/cli/builder/microService/skeletons/config/webpack.config.js +0 -114
- package/cli/builder/microService/skeletons/package.json +0 -76
- package/cli/builder/microService/skeletons/src/browser/index.css +0 -3
- package/cli/builder/microService/skeletons/src/browser/index.js +0 -16
- package/cli/builder/microService/skeletons/src/browser/socketio.js +0 -46
- package/cli/builder/microService/skeletons/src/cli/cli.js +0 -224
- package/cli/builder/microService/skeletons/src/cli/menu.js +0 -28
- package/cli/builder/microService/skeletons/src/n-api/README.md +0 -1
- package/cli/builder/microService/skeletons/src/n-api/binding.gyp +0 -14
- package/cli/builder/microService/skeletons/src/n-api/hello.cc +0 -14
- package/cli/builder/microService/skeletons/src/n-api/hello.js +0 -23
- package/cli/builder/microService/skeletons/src/n-api/package.json +0 -15
- package/cli/builder/microService/skeletons/src/node/examples/index.js +0 -120
- package/cli/builder/microService/skeletons/src/node/index.js +0 -102
- package/cli/builder/microService/skeletons/src/node/services/markdown/markdown.js +0 -27
- package/cli/builder/microService/skeletons/src/node/services/servers/http.js +0 -45
- package/cli/builder/microService/skeletons/src/node/services/servers/https.js +0 -44
- package/cli/builder/microService/skeletons/src/node/services/socketio/socketio.js +0 -46
- package/cli/builder/microService/skeletons/src/node/services/syscall/syscall.js +0 -111
- package/cli/builder/microService/skeletons/src/node/services/worker/thread.js +0 -59
- package/cli/builder/microService/skeletons/src/node/services/worker/worker.js +0 -60
- package/cli/builder/microService/skeletons/src/templates/base.html +0 -12
- package/cli/builder/microService/skeletons/src/templates/socket.html +0 -23
- package/cli/builder/microService/skeletons/tests/unit/serviceTest.js +0 -30
- package/cli/builder/project/project.js +0 -474
- package/cli/builder/project/skeletons/README.md +0 -778
- package/cli/builder/project/skeletons/bin/dev-deploy.sh +0 -5
- package/cli/builder/project/skeletons/bin/generateCertificates.sh.skeleton +0 -180
- package/cli/builder/project/skeletons/bin/prod-deploy.sh +0 -3
- package/cli/builder/project/skeletons/config/config.js.skeleton +0 -178
- package/cli/builder/project/skeletons/config/openssl/ca/openssl.cnf.skeleton +0 -150
- package/cli/builder/project/skeletons/config/openssl/ca_intermediate/openssl.cnf.skeleton +0 -152
- package/cli/builder/project/skeletons/config/pm2.config.js.skeleton +0 -62
- package/cli/builder/project/skeletons/documentation.html.twig +0 -24
- package/cli/builder/project/skeletons/editorconfig.skeleton +0 -18
- package/cli/builder/project/skeletons/eslintignore.skeleton +0 -15
- package/cli/builder/project/skeletons/eslintrc.js.skeleton +0 -97
- package/cli/builder/project/skeletons/gitignore.skeleton +0 -32
- package/cli/builder/project/skeletons/migrations/2022.12.25T17.37.37.entity-user.js +0 -137
- package/cli/builder/project/skeletons/migrations/2022.12.25T17.37.38.entity-session.js +0 -97
- package/cli/builder/project/skeletons/migrations/2022.12.25T17.37.39.entity-requests.js +0 -115
- package/cli/builder/project/skeletons/migrations/2022.12.25T17.37.40.entity-jwts.js +0 -97
- package/cli/builder/project/skeletons/migrations/migrations.skeleton.js +0 -101
- package/cli/builder/project/skeletons/package.json.twig +0 -71
- package/cli/builder/react/reactBuilder.js +0 -224
- package/cli/builder/react/skeletons/app/Resources/databases/nodefony.db +0 -0
- package/cli/builder/react/skeletons/app/Resources/translations/messages.en_en.yml +0 -5
- package/cli/builder/react/skeletons/app/Resources/translations/messages.fr_fr.yml +0 -5
- package/cli/builder/react/skeletons/app/Resources/views/base.html.twig +0 -33
- package/cli/builder/react/skeletons/app/config/config.js +0 -392
- package/cli/builder/react/skeletons/app/config/routing.js +0 -10
- package/cli/builder/react/skeletons/app/config/security.js +0 -74
- package/cli/builder/react/skeletons/app/controller/appController.js +0 -22
- package/cli/builder/sandbox/sandBoxBuilder.js +0 -610
- package/cli/builder/sandbox/skeletons/Resources/css/entry.css +0 -48
- package/cli/builder/sandbox/skeletons/Resources/js/entry.js +0 -60
- package/cli/builder/sandbox/skeletons/Resources/public/manifest.json +0 -32
- package/cli/builder/sandbox/skeletons/Resources/translations/messages.en_en.yml +0 -5
- package/cli/builder/sandbox/skeletons/Resources/translations/messages.fr_fr.yml +0 -5
- package/cli/builder/sandbox/skeletons/Resources/views/base.html.twig +0 -46
- package/cli/builder/sandbox/skeletons/Resources/views/index.html.twig +0 -34
- package/cli/builder/sandbox/skeletons/bootstrap/custom.scss +0 -27
- package/cli/builder/sandbox/skeletons/bootstrap/entry.scss +0 -60
- package/cli/builder/sandbox/skeletons/workbox/templates/index.html.twig +0 -32
- package/cli/builder/sandbox/skeletons/workbox/workers/service-worker.js +0 -196
- package/cli/builder/skeletons/Resources/public/favicon.ico +0 -0
- package/cli/builder/skeletons/Resources/public/images/app-logo.png +0 -0
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/401.html.twig +0 -1
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/401.json.twig +0 -24
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/403.html.twig +0 -1
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/403.json.twig +0 -20
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/404.html.twig +0 -1
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/404.json.twig +0 -20
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/500.html.twig +0 -1
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/base.html.twig +0 -30
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/exception.html.twig +0 -1
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/exception.json.twig +0 -24
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/footer.html.twig +0 -33
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/header.html.twig +0 -6
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/index.html.twig +0 -6
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/index.json.twig +0 -1
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/layout.html.twig +0 -125
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/layout.json.twig +0 -5
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/timeout.html.twig +0 -1
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/timeout.json.twig +0 -24
- package/cli/builder/skeletons/app/appKernel.js +0 -133
- package/cli/builder/skeletons/binding/binding.cc +0 -26
- package/cli/builder/skeletons/binding/binding.skeleton +0 -8
- package/cli/builder/skeletons/bundle/bundleClass.js +0 -37
- package/cli/builder/skeletons/command/commandClass.js +0 -11
- package/cli/builder/skeletons/command/taskClass.js +0 -20
- package/cli/builder/skeletons/config/config.js +0 -138
- package/cli/builder/skeletons/config/nodefony/elastic-bundle.js +0 -37
- package/cli/builder/skeletons/config/nodefony/framework-bundle.js +0 -22
- package/cli/builder/skeletons/config/nodefony/http-bundle.js +0 -104
- package/cli/builder/skeletons/config/nodefony/mail-bundle.js +0 -44
- package/cli/builder/skeletons/config/nodefony/mongoose-bundle.js +0 -51
- package/cli/builder/skeletons/config/nodefony/monitoring-bundle.js +0 -34
- package/cli/builder/skeletons/config/nodefony/realtime-bundle.js +0 -15
- package/cli/builder/skeletons/config/nodefony/redis-bundle.js +0 -44
- package/cli/builder/skeletons/config/nodefony/security-bundle.js +0 -25
- package/cli/builder/skeletons/config/nodefony/sequelize-bundle.js +0 -156
- package/cli/builder/skeletons/config/routing.js +0 -55
- package/cli/builder/skeletons/config/security.js +0 -102
- package/cli/builder/skeletons/config/services.js +0 -1
- package/cli/builder/skeletons/config/webpack/webpack.dev.config.js +0 -13
- package/cli/builder/skeletons/config/webpack/webpack.prod.config.js +0 -20
- package/cli/builder/skeletons/config/webpack.config.js +0 -148
- package/cli/builder/skeletons/controller/controllerClass.js +0 -75
- package/cli/builder/skeletons/package.json.twig +0 -57
- package/cli/builder/skeletons/unittest/testFile.js +0 -46
- package/cli/builder/vue/skeletons/Resources/public/images/app-logo.png +0 -0
- package/cli/builder/vue/skeletons/Resources/translations/messages.en_en.yml +0 -5
- package/cli/builder/vue/skeletons/Resources/translations/messages.fr_fr.yml +0 -5
- package/cli/builder/vue/skeletons/vue.config.js +0 -129
- package/cli/builder/vue/vueBuilder.js +0 -410
- package/cli/generate/generate.es6 +0 -103
- package/cli/install/install.js +0 -190
- package/cli/sequelize/sequelize.js +0 -94
- package/cli/start.js +0 -702
- package/cli/tools/pm2.es6 +0 -112
- package/cli/tools/tools.es6 +0 -97
- package/cli.es6 +0 -925
- package/container.es6 +0 -272
- package/error.es6 +0 -293
- package/fileClass.es6 +0 -242
- package/finder/file.es6 +0 -33
- package/finder/fileResult.es6 +0 -138
- package/finder/finder2.es6 +0 -275
- package/finder.es6 +0 -427
- package/kernel/annotations/annotations.es6 +0 -286
- package/kernel/api/api.es6 +0 -61
- package/kernel/api/graphqlApi.es6 +0 -107
- package/kernel/api/jsonApi.es6 +0 -177
- package/kernel/api/openApi.es6 +0 -139
- package/kernel/api/schemas/openApiSchema.js +0 -394
- package/kernel/babylon.es6 +0 -162
- package/kernel/bundle.es6 +0 -1200
- package/kernel/cliKernel.es6 +0 -869
- package/kernel/command.es6 +0 -78
- package/kernel/commands/nodefonyCommand.es6 +0 -247
- package/kernel/commands/tasks/bundlesTask.es6 +0 -59
- package/kernel/controllers/controller.es6 +0 -791
- package/kernel/fixture.es6 +0 -19
- package/kernel/injections/injections.es6 +0 -424
- package/kernel/kernel.es6 +0 -1960
- package/kernel/kernelWatcher.es6 +0 -387
- package/kernel/orm/entity.es6 +0 -59
- package/kernel/orm/orm.es6 +0 -139
- package/kernel/reader.es6 +0 -290
- package/kernel/security/encoder.es6 +0 -17
- package/kernel/security/factories/factory.es6 +0 -111
- package/kernel/security/factories/passeportFactory.es6 +0 -61
- package/kernel/security/provider.es6 +0 -58
- package/kernel/security/providers/chainProvider.es6 +0 -99
- package/kernel/security/providers/memoryProvider.es6 +0 -55
- package/kernel/security/providers/providerManager.es6 +0 -67
- package/kernel/security/providers/userEntityProvider.es6 +0 -50
- package/kernel/security/role.es6 +0 -12
- package/kernel/security/secureArea.es6 +0 -431
- package/kernel/security/tokens/token.es6 +0 -171
- package/kernel/security/user.es6 +0 -106
- package/kernel/serviceRealTime.es6 +0 -21
- package/kernel/services/connectionsService.es6 +0 -93
- package/kernel/services/cron/cronService.es6 +0 -123
- package/kernel/task.es6 +0 -80
- package/kernel/templates.es6 +0 -22
- package/kernel/templating/twig.es6 +0 -218
- package/kernel/tests/cliTest.js +0 -59
- package/kernel/tests/containerTest.js +0 -232
- package/kernel/tests/kernelTest.js +0 -39
- package/nodefony.es6 +0 -1084
- package/notificationsCenter.es6 +0 -118
- package/protocol.es6 +0 -86
- package/protocols/bayeux.es6 +0 -174
- package/protocols/jsonRpc/jsonrpc.es6 +0 -56
- package/result.es6 +0 -99
- package/service.es6 +0 -288
- package/syslog/pdu.es6 +0 -141
- package/syslog/syslog.es6 +0 -754
- package/watcher.es6 +0 -113
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Borne une promesse par un délai maximum — utilitaire de **résilience de boot**
|
|
3
|
+
* (et de tout `await` susceptible de pendre indéfiniment).
|
|
4
|
+
*
|
|
5
|
+
* Motivation : un `await` sur une opération réseau dont le pair est injoignable
|
|
6
|
+
* peut **ne jamais se résoudre** (ex. l'offline-queue de `node-redis` met la
|
|
7
|
+
* Promise en attente sans la rejeter). Sans garde, un seul de ces `await` gèle
|
|
8
|
+
* tout le cycle de boot du Kernel → les serveurs ne montent jamais.
|
|
9
|
+
*
|
|
10
|
+
* ⚠️ **NE PAS utiliser dans le hot path HTTP/WS** : chaque appel alloue un timer
|
|
11
|
+
* + une Promise de course. Réservé au **boot / lifecycle / jobs** (≪ 1×/process).
|
|
12
|
+
* Le hot path utilise `Event.emitAsync` nu (aucun timer par requête).
|
|
13
|
+
*
|
|
14
|
+
* @module
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* Erreur levée par {@link withTimeout} quand le délai est dépassé — distincte
|
|
18
|
+
* d'un rejet métier pour que l'appelant puisse différencier « lent/figé » de
|
|
19
|
+
* « a échoué » (ex. politique de boot : timeout d'un module critique en prod).
|
|
20
|
+
*/
|
|
21
|
+
export declare class TimeoutError extends Error {
|
|
22
|
+
/** Délai (ms) qui a été dépassé. */
|
|
23
|
+
readonly timeoutMs: number;
|
|
24
|
+
/**
|
|
25
|
+
* @param timeoutMs - délai dépassé, en millisecondes.
|
|
26
|
+
* @param label - libellé optionnel de l'opération (préfixe du message).
|
|
27
|
+
*/
|
|
28
|
+
constructor(timeoutMs: number, label?: string);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Résout avec la valeur de `promise` si elle se règle avant `timeoutMs`,
|
|
32
|
+
* sinon rejette avec une {@link TimeoutError}.
|
|
33
|
+
*
|
|
34
|
+
* Robustesse :
|
|
35
|
+
* - le timer est `unref` (ne maintient pas l'event-loop vivant) et **toujours**
|
|
36
|
+
* nettoyé (`finally`) → aucun handle qui fuit ;
|
|
37
|
+
* - un `.catch()` est posé sur la promesse d'origine : si elle rejette **après**
|
|
38
|
+
* que le timeout a gagné la course, le rejet ne remonte pas en
|
|
39
|
+
* `unhandledRejection` (qui crasherait le process) ;
|
|
40
|
+
* - `timeoutMs ≤ 0` (ou non fini) → **aucune garde**, on attend la promesse telle
|
|
41
|
+
* quelle (permet de désactiver le timeout par config sans brancher de code).
|
|
42
|
+
*
|
|
43
|
+
* @typeParam T - type résolu par la promesse.
|
|
44
|
+
* @param promise - opération à borner.
|
|
45
|
+
* @param timeoutMs - délai max en millisecondes (≤ 0 = pas de timeout).
|
|
46
|
+
* @param label - libellé optionnel pour le message d'erreur.
|
|
47
|
+
* @returns la valeur résolue par `promise`.
|
|
48
|
+
* @throws {@link TimeoutError} si `timeoutMs` est dépassé.
|
|
49
|
+
* @throws l'erreur d'origine si `promise` rejette avant le timeout.
|
|
50
|
+
*/
|
|
51
|
+
export declare function withTimeout<T>(promise: PromiseLike<T>, timeoutMs: number, label?: string): Promise<T>;
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { Severity } from "../../syslog/Pdu.js";
|
|
2
|
+
/**
|
|
3
|
+
* Calcule le délai de respawn d'un worker mort selon un backoff exponentiel.
|
|
4
|
+
*
|
|
5
|
+
* Anti crash-loop : un worker qui crashe en boucle ne doit pas être re-forké en
|
|
6
|
+
* rafale (CPU 100 %, logs noyés). Le délai double à chaque crash consécutif, plafonné.
|
|
7
|
+
*
|
|
8
|
+
* @param crashes - nombre de crashs consécutifs (>= 1).
|
|
9
|
+
* @param baseMs - délai du 1er respawn.
|
|
10
|
+
* @param maxMs - plafond du délai.
|
|
11
|
+
* @returns délai en ms, dans `[baseMs, maxMs]`.
|
|
12
|
+
*/
|
|
13
|
+
export declare function computeBackoff(crashes: number, baseMs: number, maxMs: number): number;
|
|
14
|
+
/** Handle minimal d'un worker — sous-ensemble de `cluster.Worker` réellement utilisé (testable). */
|
|
15
|
+
export interface IClusterWorker {
|
|
16
|
+
readonly id: number;
|
|
17
|
+
/** Envoie un signal au process worker (déconnecte + signale, cf `cluster.Worker.kill`). */
|
|
18
|
+
kill(signal?: NodeJS.Signals): void;
|
|
19
|
+
/** `true` si le process est mort. */
|
|
20
|
+
isDead(): boolean;
|
|
21
|
+
}
|
|
22
|
+
/** Runtime cluster — abstrait `node:cluster` pour piloter fork/exit dans les tests sans forker de process. */
|
|
23
|
+
export interface IClusterRuntime {
|
|
24
|
+
readonly isPrimary: boolean;
|
|
25
|
+
fork(): IClusterWorker;
|
|
26
|
+
onExit(cb: (worker: IClusterWorker, code: number | null, signal: string | null) => void): void;
|
|
27
|
+
}
|
|
28
|
+
/** Planificateur (setTimeout/clearTimeout) — injectable pour tester backoff + timeout sans horloge réelle. */
|
|
29
|
+
export interface ClusterScheduler {
|
|
30
|
+
set(fn: () => void, ms: number): unknown;
|
|
31
|
+
clear(handle: unknown): void;
|
|
32
|
+
}
|
|
33
|
+
/** Options du {@link ClusterManager}. Tous les effets de bord (runtime, timers, exit, log) sont injectables. */
|
|
34
|
+
export interface ClusterManagerOptions {
|
|
35
|
+
/** Nombre de workers à forker (résolu par {@link resolveWorkerCount}). */
|
|
36
|
+
workers: number;
|
|
37
|
+
log?: (msg: string, severity?: Severity) => void;
|
|
38
|
+
runtime?: IClusterRuntime;
|
|
39
|
+
scheduler?: ClusterScheduler;
|
|
40
|
+
/** Sortie process — injectable pour ne pas tuer le process de test. Défaut : `process.exit`. */
|
|
41
|
+
exit?: (code: number) => void;
|
|
42
|
+
/** Délai du 1er respawn (ms). Défaut 200. */
|
|
43
|
+
respawnBaseMs?: number;
|
|
44
|
+
/** Plafond du délai de respawn (ms). Défaut 10 000. */
|
|
45
|
+
respawnMaxMs?: number;
|
|
46
|
+
/** Durée de vie minimale d'un worker pour réinitialiser le backoff (ms). Défaut 30 000. */
|
|
47
|
+
stableMs?: number;
|
|
48
|
+
/** Délai de drain gracieux avant SIGKILL des survivants (ms). Défaut 10 000. */
|
|
49
|
+
shutdownTimeoutMs?: number;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Superviseur cluster du process MASTER (Phase 2 du mode cluster sans PM2).
|
|
53
|
+
*
|
|
54
|
+
* Le master ne sert AUCUN HTTP : il fork N workers, les respawn avec backoff en cas
|
|
55
|
+
* de crash, et coordonne un arrêt gracieux (drain SIGTERM → SIGKILL après timeout).
|
|
56
|
+
* Cgroup-aware via {@link resolveWorkerCount} (le `workers` passé est déjà résolu).
|
|
57
|
+
*
|
|
58
|
+
* Toute la mécanique runtime (`node:cluster`, timers, `process.exit`, signaux) est
|
|
59
|
+
* derrière des seams injectables : le state machine respawn/shutdown est testé sans
|
|
60
|
+
* forker un seul process réel.
|
|
61
|
+
*/
|
|
62
|
+
export declare class ClusterManager {
|
|
63
|
+
#private;
|
|
64
|
+
constructor(opts: ClusterManagerOptions);
|
|
65
|
+
/** Nombre de workers actuellement vivants. */
|
|
66
|
+
get size(): number;
|
|
67
|
+
/** `true` une fois `shutdown()` enclenché (plus aucun respawn). */
|
|
68
|
+
get shuttingDown(): boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Fork les workers initiaux et arme le respawn. Idempotent.
|
|
71
|
+
*
|
|
72
|
+
* @returns `this`.
|
|
73
|
+
*/
|
|
74
|
+
start(): this;
|
|
75
|
+
/**
|
|
76
|
+
* Arrêt gracieux : déconnecte/SIGTERM chaque worker (drain), puis SIGKILL les
|
|
77
|
+
* survivants après `shutdownTimeoutMs`, et sort le process. Idempotent.
|
|
78
|
+
*
|
|
79
|
+
* @param signal - signal d'origine (log uniquement).
|
|
80
|
+
*/
|
|
81
|
+
shutdown(signal?: NodeJS.Signals): void;
|
|
82
|
+
/**
|
|
83
|
+
* Branche SIGTERM/SIGINT du process MASTER sur {@link shutdown}.
|
|
84
|
+
*
|
|
85
|
+
* Le master prend la main sur ces signaux : `Cli.handleSignals` les mapperait
|
|
86
|
+
* sinon vers un `terminate()` immédiat (process.exit) qui tuerait le master
|
|
87
|
+
* AVANT que les workers aient drainé. À n'appeler que dans le vrai process
|
|
88
|
+
* master.
|
|
89
|
+
*
|
|
90
|
+
* 🔴 **On n'arrache que ce qu'on a posé soi-même.** Cette méthode commençait
|
|
91
|
+
* par `process.removeAllListeners(sig)` — ce qui effaçait AUSSI le
|
|
92
|
+
* gestionnaire qu'un module tiers avait branché sur `SIGTERM` pour son propre
|
|
93
|
+
* arrêt propre. Ce module ne recevait plus rien, et rien ne le lui disait :
|
|
94
|
+
* son code était juste, ses tests passaient, et son nettoyage cessait de
|
|
95
|
+
* s'exécuter le jour où l'application passait en cluster. Le gestionnaire du
|
|
96
|
+
* CLI, lui, se retire NOMMÉMENT — c'est le lanceur qui le fait
|
|
97
|
+
* (`Cli.releaseSignalListeners`), parce que lui seul sait de quelle instance
|
|
98
|
+
* il s'agit.
|
|
99
|
+
*/
|
|
100
|
+
installSignalHandlers(): void;
|
|
101
|
+
/**
|
|
102
|
+
* Retire les gestionnaires que {@link installSignalHandlers} a posés.
|
|
103
|
+
*
|
|
104
|
+
* Symétrique, et pour la même raison qu'il ne faut pas arracher ceux des
|
|
105
|
+
* autres : un master qui s'arrête laisse sinon deux listeners sur un process
|
|
106
|
+
* qui peut lui survivre (tests, outils qui enchaînent des commandes).
|
|
107
|
+
*
|
|
108
|
+
* @returns le nombre de gestionnaires retirés.
|
|
109
|
+
*/
|
|
110
|
+
removeSignalHandlers(): number;
|
|
111
|
+
}
|
|
112
|
+
export default ClusterManager;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { Severity } from "../../syslog/Pdu.js";
|
|
2
|
+
/**
|
|
3
|
+
* Handle master-side d'un worker, vu par l'agrégateur — sous-ensemble **testable** de
|
|
4
|
+
* `cluster.Worker` (même seam que `IRelayWorker`). Prouve la collecte + la diffusion
|
|
5
|
+
* sans forker de process réel.
|
|
6
|
+
*/
|
|
7
|
+
export interface IProbeWorker {
|
|
8
|
+
readonly id: number;
|
|
9
|
+
/** PID OS du worker (`worker.process.pid`) — clé de ciblage du drill-down (Phase 2). */
|
|
10
|
+
readonly pid: number;
|
|
11
|
+
/** Envoie un message IPC à CE worker (master → worker). */
|
|
12
|
+
send(msg: unknown): void;
|
|
13
|
+
/** Enregistre le récepteur des messages de CE worker (worker → master). */
|
|
14
|
+
onMessage(cb: (msg: unknown) => void): void;
|
|
15
|
+
}
|
|
16
|
+
/** Options du {@link ClusterProbeAggregator}. */
|
|
17
|
+
export interface ClusterProbeAggregatorOptions {
|
|
18
|
+
/** Cadence de diffusion du snapshot agrégé (ms). Défaut 2000. */
|
|
19
|
+
intervalMs?: number;
|
|
20
|
+
log?: (msg: string, severity?: Severity) => void;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* **Agrégateur de sondes** master-side du mode cluster (Phase 4c) — le « gardien » qui
|
|
24
|
+
* collecte la santé de chaque worker et **rediffuse la vue d'ensemble** à tous.
|
|
25
|
+
*
|
|
26
|
+
* Pourquoi : chaque worker n'a que SA sonde (`RealtimeHub.probe()`) ; l'endpoint
|
|
27
|
+
* `/nodefony/realtime/api/health` tombe sur UN worker au hasard → vue partielle. Le master
|
|
28
|
+
* (qui ne sert aucun HTTP) collecte les remontées `CLUSTER_PROBE_KIND` de tous les workers
|
|
29
|
+
* et **pousse** périodiquement le snapshot agrégé (`CLUSTER_PROBE_SNAPSHOT_KIND`) vers chacun
|
|
30
|
+
* → n'importe quel worker peut alors servir la vue POD instantanément (modèle push, pas pull :
|
|
31
|
+
* 0 latence de requête, cohérent avec les tickers Nodefony).
|
|
32
|
+
*
|
|
33
|
+
* **Opaque** comme le {@link "./ClusterRelay"} : le master ne lit JAMAIS le contenu d'une
|
|
34
|
+
* sonde (il garde le dernier payload par workerId et diffuse la liste) → 0 dépendance à
|
|
35
|
+
* `@nodefony/framework` (la consolidation des champs se fait côté worker, qui connaît le type).
|
|
36
|
+
*
|
|
37
|
+
* Cycle de vie d'un worker : `attach` au `fork` (collecte ses remontées), `detach` au `exit`
|
|
38
|
+
* (le worker mort SORT de l'agrégat → le snapshot suivant ne le contient plus). Diffusion
|
|
39
|
+
* sur timer `unref` (cloud-native).
|
|
40
|
+
*/
|
|
41
|
+
export declare class ClusterProbeAggregator {
|
|
42
|
+
#private;
|
|
43
|
+
constructor(opts?: ClusterProbeAggregatorOptions);
|
|
44
|
+
/** Nombre de workers rattachés. */
|
|
45
|
+
get size(): number;
|
|
46
|
+
/** Total de snapshots diffusés (sonde de la gateway). */
|
|
47
|
+
get broadcastTotal(): number;
|
|
48
|
+
/**
|
|
49
|
+
* Rattache un worker : cible de diffusion + récepteur de ses remontées de sonde.
|
|
50
|
+
* Idempotent par `id` (un respawn réattache proprement).
|
|
51
|
+
*/
|
|
52
|
+
attach(worker: IProbeWorker): void;
|
|
53
|
+
/** Détache un worker (au `exit`) : il sort de l'agrégat. No-op s'il est déjà parti. */
|
|
54
|
+
detach(id: number): void;
|
|
55
|
+
/** Démarre la diffusion périodique du snapshot agrégé. Idempotent. Timer `unref`. */
|
|
56
|
+
start(): void;
|
|
57
|
+
/**
|
|
58
|
+
* Diffuse immédiatement le snapshot courant (liste des dernières sondes connues) à
|
|
59
|
+
* tous les workers vivants. Appelable directement (tests) ou par le timer. N'envoie
|
|
60
|
+
* rien s'il n'y a aucun worker.
|
|
61
|
+
*/
|
|
62
|
+
broadcast(): void;
|
|
63
|
+
/** Arrête le timer de diffusion. Idempotent. */
|
|
64
|
+
stop(): void;
|
|
65
|
+
/** Vide l'agrégateur (arrêt du master). */
|
|
66
|
+
clear(): void;
|
|
67
|
+
}
|
|
68
|
+
export default ClusterProbeAggregator;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { Severity } from "../../syslog/Pdu.js";
|
|
2
|
+
/**
|
|
3
|
+
* Handle master-side d'un worker, vu par le relay — sous-ensemble **testable** de
|
|
4
|
+
* `cluster.Worker` réellement utilisé (même approche que `IClusterWorker` du
|
|
5
|
+
* ClusterManager). Permet de prouver le routage sans forker de process réel.
|
|
6
|
+
*/
|
|
7
|
+
export interface IRelayWorker {
|
|
8
|
+
readonly id: number;
|
|
9
|
+
/** Envoie un message IPC à CE worker (master → worker). */
|
|
10
|
+
send(msg: unknown): void;
|
|
11
|
+
/** Enregistre le récepteur des messages de CE worker (worker → master). */
|
|
12
|
+
onMessage(cb: (msg: unknown) => void): void;
|
|
13
|
+
}
|
|
14
|
+
/** Options du {@link ClusterRelay}. Effets de bord (log) injectables. */
|
|
15
|
+
export interface ClusterRelayOptions {
|
|
16
|
+
log?: (msg: string, severity?: Severity) => void;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* **Master-gateway** du backplane realtime cluster (Phase 3) — routeur IPC qui vit dans
|
|
20
|
+
* le process MASTER (lequel ne sert AUCUN HTTP, cf {@link ClusterManager}).
|
|
21
|
+
*
|
|
22
|
+
* Les workers d'un cluster Node natif ne se parlent **jamais** directement : un worker
|
|
23
|
+
* n'envoie qu'au master. Le relay reçoit les publications realtime d'un worker et les
|
|
24
|
+
* **rebroadcast aux AUTRES** workers — ce qui réalise le fan-out cross-process intra-pod
|
|
25
|
+
* « comme si Redis était là », sans aucune infra (cf vision cluster-backplane).
|
|
26
|
+
*
|
|
27
|
+
* Anti-echo de routage : le message **n'est jamais renvoyé à sa source** (le worker
|
|
28
|
+
* filtre AUSSI son `originId` côté `ClusterBackplane` — ceinture + bretelles).
|
|
29
|
+
*
|
|
30
|
+
* Tri par `kind` : seuls les messages realtime (`CLUSTER_RT_KIND`) sont rebroadcastés.
|
|
31
|
+
* Les autres messages de contrôle (ex. remontées de sondes à **agréger** au master,
|
|
32
|
+
* Phase 4) sont laissés à un autre consommateur — le relay les ignore (il ne les fan-out
|
|
33
|
+
* surtout PAS). Messages malformés ignorés silencieusement (robustesse IPC).
|
|
34
|
+
*
|
|
35
|
+
* Le master ne tient aucun hub realtime : il route des messages **opaques** (`channel`,
|
|
36
|
+
* `payload`, `originId` ne sont pas inspectés) → 0 dépendance à `@nodefony/framework`
|
|
37
|
+
* (respect du sens des dépendances framework→core).
|
|
38
|
+
*/
|
|
39
|
+
export declare class ClusterRelay {
|
|
40
|
+
#private;
|
|
41
|
+
constructor(opts?: ClusterRelayOptions);
|
|
42
|
+
/** Nombre de workers actuellement rattachés au relay. */
|
|
43
|
+
get size(): number;
|
|
44
|
+
/** Total des messages realtime rebroadcastés (sonde gateway). */
|
|
45
|
+
get relayedTotal(): number;
|
|
46
|
+
/**
|
|
47
|
+
* Rattache un worker : l'enregistre comme cible de broadcast et branche la réception
|
|
48
|
+
* de ses messages. Idempotent par `id` (un respawn réattache proprement). À appeler
|
|
49
|
+
* au `fork` (et à chaque respawn) côté ClusterManager.
|
|
50
|
+
*/
|
|
51
|
+
attach(worker: IRelayWorker): void;
|
|
52
|
+
/** Détache un worker (au `exit`). No-op s'il est déjà parti. */
|
|
53
|
+
detach(id: number): void;
|
|
54
|
+
/** Vide le relay (arrêt du master). Les workers sont tués par le ClusterManager. */
|
|
55
|
+
clear(): void;
|
|
56
|
+
}
|
|
57
|
+
export default ClusterRelay;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Severity } from "../../syslog/Pdu.js";
|
|
2
|
+
import { ClusterManager } from "./ClusterManager.js";
|
|
3
|
+
import { ClusterRelay } from "./ClusterRelay.js";
|
|
4
|
+
import { ClusterProbeAggregator } from "./ClusterProbeAggregator.js";
|
|
5
|
+
/** Logger des composants cluster — aligné sur `ClusterManager`/`Relay`/`Aggregator`. */
|
|
6
|
+
export type ClusterLog = (msg: string, severity?: Severity) => void;
|
|
7
|
+
/** Poignées du process master, conservées par l'appelant (référence vivante). */
|
|
8
|
+
export interface ClusterMasterHandles {
|
|
9
|
+
/** Superviseur fork/respawn/graceful shutdown. */
|
|
10
|
+
manager: ClusterManager;
|
|
11
|
+
/** Gateway IPC : fan-out des publications realtime cross-process. */
|
|
12
|
+
relay: ClusterRelay;
|
|
13
|
+
/** Agrégateur de sondes (vue pod, push) — `null` si `NF_CLUSTER_PROBE=0`. */
|
|
14
|
+
probes: ClusterProbeAggregator | null;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Démarre le process MASTER d'un cluster multi-worker — bootstrap partagé par les
|
|
18
|
+
* commandes de lancement (`cluster` et `production`).
|
|
19
|
+
*
|
|
20
|
+
* Le master ne sert **aucun HTTP** : il est superviseur + gateway IPC. Il
|
|
21
|
+
* 1. marque `NF_CLUSTER=1` (hérité au fork → le module Framework branche le
|
|
22
|
+
* ClusterBackplane sur son RealtimeHub),
|
|
23
|
+
* 2. branche le {@link ClusterRelay} (fan-out realtime cross-process intra-pod) et,
|
|
24
|
+
* sauf `NF_CLUSTER_PROBE=0`, le {@link ClusterProbeAggregator} (vue pod, push),
|
|
25
|
+
* 3. fork N workers via {@link ClusterManager} (respawn backoff + graceful shutdown).
|
|
26
|
+
*
|
|
27
|
+
* Les handlers `fork`/`exit` GLOBAUX couvrent forks initiaux ET respawns → un worker
|
|
28
|
+
* relancé est (ré)attaché. Attachés AVANT `manager.start()` (aucun fork manqué).
|
|
29
|
+
*
|
|
30
|
+
* ⚠️ À appeler uniquement quand `cluster.isPrimary` ET `workers >= 2` (le mono-process
|
|
31
|
+
* `workers: 1` ne passe jamais par ici — zéro machinerie cluster).
|
|
32
|
+
*
|
|
33
|
+
* @param opts.workers - nombre de workers à forker (déjà résolu, `>= 2`).
|
|
34
|
+
* @param opts.log - logger (msg + sévérité).
|
|
35
|
+
* @returns les poignées vivantes (manager/relay/probes) à conserver par l'appelant.
|
|
36
|
+
*/
|
|
37
|
+
export declare function startClusterMaster(opts: {
|
|
38
|
+
workers: number;
|
|
39
|
+
log: ClusterLog;
|
|
40
|
+
}): ClusterMasterHandles;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Protocole de fil IPC du cluster Nodefony (mode sans PM2).
|
|
3
|
+
*
|
|
4
|
+
* Le master est le **gateway** : tout message worker↔worker transite par lui via IPC
|
|
5
|
+
* (`process.send` côté worker / `worker.send` côté master). Ce canal IPC est **partagé**
|
|
6
|
+
* par plusieurs usages (publications realtime, et — Phase 4 — remontées de sondes à
|
|
7
|
+
* agréger). Un **discriminant `kind`** permet à chaque consommateur (relay realtime,
|
|
8
|
+
* agrégateur de sondes) de ne traiter que ce qui le concerne.
|
|
9
|
+
*
|
|
10
|
+
* Ce protocole vit dans le **core** (et non dans `@nodefony/framework`) car le gateway
|
|
11
|
+
* est un composant core et le core est la dépendance commune : le worker realtime
|
|
12
|
+
* (`ClusterBackplane`, framework) importe `CLUSTER_RT_KIND` d'ici via `"nodefony"`, le
|
|
13
|
+
* master (`ClusterRelay`, core) l'utilise aussi → **une seule source**, pas de magic
|
|
14
|
+
* string dupliqué (anti-drift).
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* `kind` d'une publication **realtime** (port `IBackplane`). Le {@link "./ClusterRelay"}
|
|
18
|
+
* rebroadcast ces messages aux **autres** workers ; le `ClusterBackplane` (framework)
|
|
19
|
+
* les produit/consomme.
|
|
20
|
+
*/
|
|
21
|
+
export declare const CLUSTER_RT_KIND: "nf:rt";
|
|
22
|
+
/**
|
|
23
|
+
* `kind` d'une **remontée de sonde** worker → master (Phase 4c). Chaque worker envoie
|
|
24
|
+
* périodiquement sa santé per-instance (opaque pour le master) ; le
|
|
25
|
+
* {@link "./ClusterProbeAggregator"} les collecte. Le {@link "./ClusterRelay"} IGNORE
|
|
26
|
+
* ce kind (ce n'est pas une publication realtime à rebroadcaster).
|
|
27
|
+
*/
|
|
28
|
+
export declare const CLUSTER_PROBE_KIND: "nf:probe";
|
|
29
|
+
/**
|
|
30
|
+
* `kind` du **snapshot agrégé** master → workers (Phase 4c). Le master diffuse
|
|
31
|
+
* périodiquement la liste des sondes de TOUS les workers (`{ ts, instances }`) ; chaque
|
|
32
|
+
* worker la met en cache pour servir la vue POD sur son endpoint santé (push, pas pull).
|
|
33
|
+
*/
|
|
34
|
+
export declare const CLUSTER_PROBE_SNAPSHOT_KIND: "nf:probe:snap";
|
|
35
|
+
/**
|
|
36
|
+
* `kind` d'un **ordre d'enrichissement** worker → master (Phase 2 drill-down). Un worker
|
|
37
|
+
* (celui qui tient la connexion navigateur) demande au master d'activer/couper la sonde
|
|
38
|
+
* **riche** (GC/heap-spaces/handles/ELU/ctx — cf `RichProcessProbe`) sur le worker `pid`
|
|
39
|
+
* ciblé. Routé par le {@link "./ClusterProbeAggregator"} vers ce worker via {@link
|
|
40
|
+
* CLUSTER_PROBE_ENRICH_KIND}. « On paie ce qu'on regarde » : aucun rich produit hors drill.
|
|
41
|
+
*/
|
|
42
|
+
export declare const CLUSTER_PROBE_CTL_KIND: "nf:probe:ctl";
|
|
43
|
+
/**
|
|
44
|
+
* `kind` de l'**ordre ciblé** master → worker (Phase 2 drill-down). Dit au worker
|
|
45
|
+
* d'inclure (ou non) son blob de sonde **riche** dans son report périodique
|
|
46
|
+
* (`CLUSTER_PROBE_KIND`). Le rich voyage ensuite dans le snapshot agrégé EXISTANT
|
|
47
|
+
* (aucun nouveau flux de données — juste un champ `rich` de plus pour ce worker).
|
|
48
|
+
*/
|
|
49
|
+
export declare const CLUSTER_PROBE_ENRICH_KIND: "nf:probe:enrich";
|
|
50
|
+
/**
|
|
51
|
+
* **Facette** de sonde riche ciblée par un ordre d'enrichissement (drill-down) :
|
|
52
|
+
* - `"process"` : sonde process riche (GC/heap-spaces/handles/ELU/ctx — `RichProcessProbe`) ;
|
|
53
|
+
* - `"orm"` : sonde ORM riche (diagnostic connexions + flux — `connection/health` + `flow`).
|
|
54
|
+
*
|
|
55
|
+
* Indépendantes : un worker peut être enrichi sur l'une, l'autre, ou les deux à la fois (deux
|
|
56
|
+
* pages de drill distinctes). « On paie ce qu'on regarde » par sonde — activer le drill ORM
|
|
57
|
+
* n'allume PAS la sonde process (et inversement). Absente sur le fil ⇒ `"process"` (rétro-compat).
|
|
58
|
+
*/
|
|
59
|
+
export type ClusterProbeFacet = "process" | "orm";
|
|
60
|
+
/**
|
|
61
|
+
* Base de tout message du protocole IPC cluster — seul le `kind` est imposé. Les autres
|
|
62
|
+
* champs sont opaques pour le master (il route/agrège sans les inspecter).
|
|
63
|
+
*/
|
|
64
|
+
export interface IClusterMessage {
|
|
65
|
+
readonly kind: string;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Ordre d'enrichissement (worker → master, {@link CLUSTER_PROBE_CTL_KIND}). `op` =
|
|
69
|
+
* `"enrich"` (activer) | `"stop"` (couper) ; `pid` = worker à (dés)enrichir ; `facet` =
|
|
70
|
+
* quelle sonde riche cibler (défaut `"process"` si absent → rétro-compat supervision).
|
|
71
|
+
*/
|
|
72
|
+
export interface IClusterProbeCtl extends IClusterMessage {
|
|
73
|
+
readonly kind: typeof CLUSTER_PROBE_CTL_KIND;
|
|
74
|
+
readonly op: "enrich" | "stop";
|
|
75
|
+
readonly pid: number;
|
|
76
|
+
readonly facet?: ClusterProbeFacet;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Ordre ciblé (master → worker, {@link CLUSTER_PROBE_ENRICH_KIND}). `enabled` = le worker
|
|
80
|
+
* doit-il joindre sa sonde riche à ses prochains reports ; `facet` = laquelle (défaut
|
|
81
|
+
* `"process"`).
|
|
82
|
+
*/
|
|
83
|
+
export interface IClusterProbeEnrich extends IClusterMessage {
|
|
84
|
+
readonly kind: typeof CLUSTER_PROBE_ENRICH_KIND;
|
|
85
|
+
readonly enabled: boolean;
|
|
86
|
+
readonly facet?: ClusterProbeFacet;
|
|
87
|
+
}
|
|
88
|
+
/** Type-guard d'un {@link IClusterProbeCtl} — narrowing sûr du canal IPC partagé. */
|
|
89
|
+
export declare function isClusterProbeCtl(m: unknown): m is IClusterProbeCtl;
|
|
90
|
+
/** Type-guard d'un {@link IClusterProbeEnrich} — narrowing sûr du canal IPC partagé. */
|
|
91
|
+
export declare function isClusterProbeEnrich(m: unknown): m is IClusterProbeEnrich;
|
|
92
|
+
/** Type-guard d'un message IPC cluster — narrowing sûr d'un message `unknown` du canal partagé. */
|
|
93
|
+
export declare function isClusterMessage(m: unknown): m is IClusterMessage;
|
|
94
|
+
export default CLUSTER_RT_KIND;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lecteur de fichier système — abstrait pour rendre la résolution cgroup testable
|
|
3
|
+
* sans conteneur. Retourne le contenu du fichier, ou `null` si absent / illisible.
|
|
4
|
+
*/
|
|
5
|
+
export type FileReader = (path: string) => string | null;
|
|
6
|
+
/**
|
|
7
|
+
* Lit le quota CPU effectif depuis les cgroups Linux — cgroup v2 (`cpu.max`) puis
|
|
8
|
+
* v1 (`cpu.cfs_quota_us` / `cpu.cfs_period_us`).
|
|
9
|
+
*
|
|
10
|
+
* C'est LA correction du bug de l'ancien cluster JS : `os.cpus().length` lit l'hôte
|
|
11
|
+
* (ex. 64 cœurs) et IGNORE la limite cgroup du conteneur (ex. 2 cœurs) → fork de 64
|
|
12
|
+
* workers throttlés + OOM. Le quota cgroup est la seule source de vérité en conteneur.
|
|
13
|
+
*
|
|
14
|
+
* @param read - lecteur de fichier injectable (tests). Défaut : `fs.readFileSync`.
|
|
15
|
+
* @returns le nombre de cœurs alloués (fractionnaire possible, ex. `0.5`, `2.5`), ou
|
|
16
|
+
* `null` si illimité (`max`) / cgroup absent (hors conteneur ou non-Linux).
|
|
17
|
+
*/
|
|
18
|
+
export declare function readCgroupCpuQuota(read?: FileReader): number | null;
|
|
19
|
+
/** Options de {@link resolveWorkerCount} — tous les seams sont injectables pour les tests. */
|
|
20
|
+
export interface ResolveWorkerOptions {
|
|
21
|
+
/** `--workers N` explicite. Prioritaire et NON borné (harnais : forker plus de workers que de cœurs pour tester le backplane). */
|
|
22
|
+
requested?: number;
|
|
23
|
+
/** Quota cgroup pré-calculé (tests). Si omis → lecture cgroup réelle. `null` = illimité. */
|
|
24
|
+
cgroupQuota?: number | null;
|
|
25
|
+
/** Parallélisme schedulable (tests). Défaut : `os.availableParallelism()`. */
|
|
26
|
+
availableParallelism?: number;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Résout le nombre de workers à forker, dans l'ordre de priorité :
|
|
30
|
+
*
|
|
31
|
+
* 1. `requested` explicite (`--workers N`) si `> 0` — honoré **tel quel**, jamais borné.
|
|
32
|
+
* 2. Quota CPU cgroup (conteneur) → arrondi au plus proche, borné par le parallélisme schedulable.
|
|
33
|
+
* 3. `os.availableParallelism()` (Node 19+, respecte l'affinité CPU) — fallback hors conteneur.
|
|
34
|
+
*
|
|
35
|
+
* @returns un entier `>= 1` (jamais 0).
|
|
36
|
+
*/
|
|
37
|
+
export declare function resolveWorkerCount(opts?: ResolveWorkerOptions): number;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Contrats de **santé per-instance NON realtime** (ORM + erreurs) qui voyagent dans le
|
|
3
|
+
* report de sonde cluster, à côté de {@link IProcessHealth} (process) et de la sonde de la
|
|
4
|
+
* socket. Généralise l'agrégation pod « aux 3 sondes » (process / socket / ORM+erreurs) sans
|
|
5
|
+
* toucher au `ClusterProbeAggregator` (opaque) : on enrichit juste le colis remonté par chaque
|
|
6
|
+
* worker, le merge pod les somme → « santé du framework » complète par pod.
|
|
7
|
+
*
|
|
8
|
+
* **Dépendance propre** : ces contrats vivent dans le CORE (comme `IProcessHealth`) →
|
|
9
|
+
* `@nodefony/framework` (assemble le report) et `@nodefony/orm-core` (produit la lecture lean)
|
|
10
|
+
* partagent UNE source de vérité sans dépendre l'un de l'autre. La lecture ORM réelle est
|
|
11
|
+
* branchée par le **driver** via {@link setOrmHealthProvider} (seam, comme `setClusterProbeClient`).
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Santé ORM **agrégée per-instance** (lean) — somme process-wide de tous les connecteurs
|
|
15
|
+
* enregistrés, dérivée des singletons `queryFlowMonitor` + `connectionMonitor` (0 ping, 0
|
|
16
|
+
* `toSQL`, O(N connecteurs)). Rejoint le report de sonde du worker à chaque tick (≥ 1 s).
|
|
17
|
+
* Tous les cumuls sont **monotones** → débit/s dérivé côté lecteur (delta/ts, comme le CPU%).
|
|
18
|
+
*/
|
|
19
|
+
export interface IOrmLeanHealth {
|
|
20
|
+
/** Connecteurs ORM enregistrés (registre). */
|
|
21
|
+
connectors: number;
|
|
22
|
+
/** Connecteurs actuellement connectés (`isConnected()`). */
|
|
23
|
+
connected: number;
|
|
24
|
+
/**
|
|
25
|
+
* Parmi les connectés, ceux dont l'état est **SUPPOSÉ** et non constaté :
|
|
26
|
+
* leur adapter n'a aucun signal de cycle de vie à traduire (base embarquée,
|
|
27
|
+
* driver muet), donc « connecté » y veut seulement dire « la connexion a
|
|
28
|
+
* été ouverte et n'a pas été fermée ».
|
|
29
|
+
*
|
|
30
|
+
* Sans ce compte, une readiness ne peut pas distinguer un connecteur qu'on
|
|
31
|
+
* SAIT vivant d'un connecteur dont on ne sait rien — et c'est le second qui
|
|
32
|
+
* fait prendre les mauvaises décisions.
|
|
33
|
+
*/
|
|
34
|
+
assumed: number;
|
|
35
|
+
/** Requêtes ORM cumulées, tous connecteurs (monotone ; 0 si flux OFF en prod). */
|
|
36
|
+
queryTotal: number;
|
|
37
|
+
/** Requêtes lentes cumulées (au-dessus du seuil `slowMs`) (monotone). */
|
|
38
|
+
slowTotal: number;
|
|
39
|
+
/** Erreurs de connexion ORM cumulées (monotone). */
|
|
40
|
+
errorTotal: number;
|
|
41
|
+
/** Reconnexions ORM cumulées (monotone). */
|
|
42
|
+
reconnectTotal: number;
|
|
43
|
+
/** Pire latence EWMA (ms) parmi les connecteurs (instantané), ou `null` si non observé. */
|
|
44
|
+
maxEwmaMs: number | null;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Santé **erreurs per-instance** — compteurs Syslog monotones (cf `Syslog.errorTotal` /
|
|
48
|
+
* `Syslog.criticTotal`). Permet une carte « erreurs par worker » + un taux d'erreur pod
|
|
49
|
+
* (delta côté lecteur). Lecture pure d'entiers, 0 scan du ring buffer.
|
|
50
|
+
*/
|
|
51
|
+
export interface IInstanceErrorHealth {
|
|
52
|
+
/** Logs ERROR/CRITIC/ALERT/EMERGENCY cumulés (sévérité 0–3) (monotone). */
|
|
53
|
+
errorTotal: number;
|
|
54
|
+
/** Sous-ensemble CRITIQUE : CRITIC/ALERT/EMERGENCY (sévérité 0–2) (monotone). */
|
|
55
|
+
criticTotal: number;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Branche (ou débranche avec `null`) le fournisseur de santé ORM lean. Idempotent
|
|
59
|
+
* (dernier gagne) — plusieurs drivers branchant la même fonction globale est sûr.
|
|
60
|
+
*
|
|
61
|
+
* @param fn - lecture lean de la santé ORM du process, ou `null` pour débrancher.
|
|
62
|
+
*/
|
|
63
|
+
export declare function setOrmHealthProvider(fn: (() => IOrmLeanHealth) | null): void;
|
|
64
|
+
/**
|
|
65
|
+
* Lit la santé ORM lean du process via le fournisseur branché, ou `null` si aucun ORM
|
|
66
|
+
* n'est branché (le champ `orm` du report est alors omis). Lecture pure, jamais throw.
|
|
67
|
+
*/
|
|
68
|
+
export declare function readOrmHealth(): IOrmLeanHealth | null;
|
|
69
|
+
/**
|
|
70
|
+
* Branche (ou débranche avec `null`) le fournisseur de diagnostic ORM riche. Idempotent
|
|
71
|
+
* (dernier gagne). Coût NUL hors drill : ce fournisseur n'est appelé que quand le master
|
|
72
|
+
* a demandé l'enrichissement ORM de CE worker.
|
|
73
|
+
*
|
|
74
|
+
* @param fn - producteur async du blob `{ health, flow }`, ou `null` pour débrancher.
|
|
75
|
+
*/
|
|
76
|
+
export declare function setOrmRichProvider(fn: (() => Promise<unknown>) | null): void;
|
|
77
|
+
/**
|
|
78
|
+
* Appelle le fournisseur ORM riche branché (async), ou `null` si aucun driver ne l'a posé.
|
|
79
|
+
* Le résultat est un blob OPAQUE (forme connue de Studio seul). Ne throw pas pour son propre
|
|
80
|
+
* compte : la propagation d'un rejet du provider reste à l'appelant (qui catch dans son tick).
|
|
81
|
+
*/
|
|
82
|
+
export declare function readOrmRich(): Promise<unknown> | null;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Détection de l'environnement d'orchestration (pod Kubernetes).
|
|
3
|
+
*
|
|
4
|
+
* Utilité : un driver de VUE local (logs `memory`/`file`/`cluster-file`, hub
|
|
5
|
+
* realtime `cluster`) ne couvre QUE le process/pod courant. En multi-pod, une vue
|
|
6
|
+
* globale exige une agrégation centralisée (Loki/OpenSearch pour les logs, Redis
|
|
7
|
+
* pour le realtime) — dont la destination est un secret d'infra fourni par
|
|
8
|
+
* l'environnement (12-factor), JAMAIS devinable depuis le process. Ce module sert
|
|
9
|
+
* donc à **avertir** l'opérateur, jamais à choisir un driver cross-pod à sa place.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Indique si le process tourne dans un pod Kubernetes.
|
|
13
|
+
*
|
|
14
|
+
* Signal fiable et gratuit : le kubelet injecte `KUBERNETES_SERVICE_HOST` (+
|
|
15
|
+
* `KUBERNETES_SERVICE_PORT`) dans TOUT conteneur d'un pod — présence = k8s. Ne dit
|
|
16
|
+
* RIEN du nombre de replicas (un pod ignore ses pairs) : à consommer comme un
|
|
17
|
+
* indice « multi-pod POSSIBLE », pas comme un compte de pods.
|
|
18
|
+
*
|
|
19
|
+
* @param env - table d'environnement (défaut `process.env`) — injectable pour les tests.
|
|
20
|
+
* @returns `true` si des marqueurs Kubernetes sont présents.
|
|
21
|
+
*/
|
|
22
|
+
export declare function isInKubernetes(env?: NodeJS.ProcessEnv): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Décide s'il faut AVERTIR que la vue des logs est limitée à un pod. Vrai quand on
|
|
25
|
+
* tourne en Kubernetes (multi-pod possible), que le driver de relecture actif est
|
|
26
|
+
* LOCAL (per-pod), et qu'AUCUNE destination d'agrégation cross-pod (Loki/OpenSearch)
|
|
27
|
+
* n'est configurée. Pur (aucun accès système) → testable ; prend le NOM du driver
|
|
28
|
+
* (string) pour interdire le piège du comparer-un-objet-driver (bug de type réel).
|
|
29
|
+
*
|
|
30
|
+
* @param inKubernetes - résultat de {@link isInKubernetes}.
|
|
31
|
+
* @param activeDriverName - nom du driver de relecture actif (`ILogDriver.name`).
|
|
32
|
+
* @param hasAggregation - une destination Loki/OpenSearch est configurée.
|
|
33
|
+
* @returns true si un avertissement « vue par pod » est pertinent.
|
|
34
|
+
*/
|
|
35
|
+
export declare function shouldWarnPerPodView(inKubernetes: boolean, activeDriverName: string | undefined, hasAggregation: boolean): boolean;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Santé PROCESS d'un worker — lue par {@link ProcessProbe}, agrégée par worker dans le
|
|
3
|
+
* snapshot pod (cf `ClusterProbeAggregator`). Volontairement **lean** (sérialisée par
|
|
4
|
+
* worker à chaque tick de report ≥ 1 s) : juste de quoi peupler une grille « salle des
|
|
5
|
+
* machines » (1 carte/worker). Les sondes lourdes (GC, heap-spaces, ctx-switches) restent
|
|
6
|
+
* au canal `nodefony:supervision` per-process pour le drill-down.
|
|
7
|
+
*/
|
|
8
|
+
export interface IProcessHealth {
|
|
9
|
+
/** PID du worker (= instanceId de la vue pod). */
|
|
10
|
+
pid: number;
|
|
11
|
+
/** Uptime du process (secondes). */
|
|
12
|
+
uptime: number;
|
|
13
|
+
/** % d'UN cœur sur l'intervalle (comme `top` : un Node mono-thread sature ~100). */
|
|
14
|
+
cpuPercent: number;
|
|
15
|
+
/** Lag moyen de l'event-loop sur l'intervalle (ms) — blocage synchrone. */
|
|
16
|
+
eventLoopMs: number;
|
|
17
|
+
/** Saturation de la boucle (ELU) sur l'intervalle, 0–1 (~1 = thread saturé). */
|
|
18
|
+
eluUtilization: number;
|
|
19
|
+
/** Resident Set Size (octets). */
|
|
20
|
+
rss: number;
|
|
21
|
+
/** Heap V8 utilisé (octets). */
|
|
22
|
+
heapUsed: number;
|
|
23
|
+
/** Heap V8 total (octets). */
|
|
24
|
+
heapTotal: number;
|
|
25
|
+
/** Plafond heap V8 (octets, constant) — pour `heapUsed/heapLimit` (% avant OOM). */
|
|
26
|
+
heapLimit: number;
|
|
27
|
+
/** Mémoire hors-heap (buffers, etc.) (octets). */
|
|
28
|
+
external: number;
|
|
29
|
+
/** Horodatage de la mesure. */
|
|
30
|
+
ts: number;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Sonde PROCESS **stateful** d'un worker — calcule les métriques par INTERVALLE (CPU,
|
|
34
|
+
* event-loop lag, ELU sont des deltas entre 2 `read()`). Une instance par process worker.
|
|
35
|
+
*
|
|
36
|
+
* Perf (worker uniquement, JAMAIS hot path request) : `read()` appelé au tick de report
|
|
37
|
+
* (≥ 1 s) → 1 `process.cpuUsage()` + 1 `memoryUsage()` + lecture histogramme. Le monitor
|
|
38
|
+
* event-loop natif est **activé au 1ᵉʳ `read()`** (lazy — pas d'overhead « au cas où » à la
|
|
39
|
+
* simple construction) puis reset à chaque tick (lag moyen sur l'intervalle). SERVEUR
|
|
40
|
+
* uniquement (`node:perf_hooks`/`process`) → non importé par le bundle client.
|
|
41
|
+
*/
|
|
42
|
+
export declare class ProcessProbe {
|
|
43
|
+
#private;
|
|
44
|
+
/**
|
|
45
|
+
* Lit la santé process courante (métriques par intervalle depuis le dernier `read()`).
|
|
46
|
+
*
|
|
47
|
+
* @returns {@link IProcessHealth} prêt à être joint au report de sonde du worker.
|
|
48
|
+
*/
|
|
49
|
+
read(): IProcessHealth;
|
|
50
|
+
/** Libère le monitor event-loop natif (à l'arrêt du worker). Idempotent. */
|
|
51
|
+
dispose(): void;
|
|
52
|
+
}
|
|
53
|
+
export default ProcessProbe;
|