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,251 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JsonRpcPeer — moteur protocole **JSON-RPC 2.0 ISOMORPHE** (client ET serveur).
|
|
3
|
+
*
|
|
4
|
+
* Client et serveur sont des **pairs** : le protocole (classer une frame, router,
|
|
5
|
+
* corréler les réponses) est identique des deux côtés. Cette classe l'implémente
|
|
6
|
+
* **une seule fois** ; chaque côté l'enrobe de son transport (`send`) et de ses
|
|
7
|
+
* handlers. → fin de la duplication client/serveur (la discrimination request /
|
|
8
|
+
* notification / response vivait à 2 endroits qui divergeaient).
|
|
9
|
+
*
|
|
10
|
+
* Transport-agnostique : on injecte `send(frame)` ; le peer ignore WebSocket/TCP/…
|
|
11
|
+
* Aucune dépendance Node (browser-safe) : seulement `setTimeout`/`clearTimeout`.
|
|
12
|
+
*
|
|
13
|
+
* ── La RÈGLE de discrimination (le cœur) ──
|
|
14
|
+
* Le RÔLE d'une frame se lit sur `method`, PAS sur `id` :
|
|
15
|
+
* - `method` + `id` → **requête** entrante → handler enregistré → réponse `result`/`error`
|
|
16
|
+
* - `method` seul → **notification** → `onNotification` (pas de réponse)
|
|
17
|
+
* - `id` sans `method` → **réponse** → résout/rejette un `pending` sortant
|
|
18
|
+
* `id` autorisé string OU number (JSON-RPC 2.0 §id). Méthode inconnue → `-32601` ;
|
|
19
|
+
* handler qui throw → `-32603` (message GÉNÉRIQUE au pair, détail via `onError` = Zero Trust).
|
|
20
|
+
*
|
|
21
|
+
* ── Types partagés (pattern Socket.IO) ────────────────────────────────────
|
|
22
|
+
* 3 génériques (`Emit`, `Listen`, `Actions`) avec **défauts permissifs**
|
|
23
|
+
* ({@link DefaultEventsMap}, {@link DefaultActionsMap}) : code non paramétré
|
|
24
|
+
* → comportement pré-types inchangé (rétro-compat 100%). Cf {@link EventsMap},
|
|
25
|
+
* {@link ActionsMap} et le détail dans `RealtimeEventMap.ts`.
|
|
26
|
+
*/
|
|
27
|
+
import type { ActionNames, ActionParams, ActionResult, ActionsMap, DefaultActionsMap, DefaultEventsMap, EventNames, EventPayload, EventsMap, TypedRpcActionHandler } from "./RealtimeEventMap.js";
|
|
28
|
+
/** Erreur JSON-RPC 2.0 (objet `error` d'une réponse). */
|
|
29
|
+
export interface JsonRpcErrorObject {
|
|
30
|
+
code: number;
|
|
31
|
+
message: string;
|
|
32
|
+
data?: unknown;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Erreur RPC **applicative** — l'exception VOLONTAIRE au principe « throw →
|
|
36
|
+
* `-32603` générique » : un handler qui rejette avec une `RpcError` choisit
|
|
37
|
+
* explicitement d'exposer `code`/`message`/`data` au pair (404 d'un path
|
|
38
|
+
* invoqué, 403 d'un voter…). Tout autre throw reste opaque (Zero Trust).
|
|
39
|
+
*
|
|
40
|
+
* Isomorphe : côté serveur le handler la lève ; côté client `request()` rejette
|
|
41
|
+
* avec — `code` et `data` (ex. `{ status: 404 }`) sont lisibles par l'appelant,
|
|
42
|
+
* symétrie d'un `fetch` qui expose son statut HTTP.
|
|
43
|
+
*
|
|
44
|
+
* Plage de codes : `-32000` à `-32099` (« Server error », réservée applicatif
|
|
45
|
+
* par JSON-RPC 2.0 §5.1). Défaut `-32000`.
|
|
46
|
+
*/
|
|
47
|
+
export interface RpcError {
|
|
48
|
+
/** Code JSON-RPC 2.0 (`-32000`…`-32099` applicatif, ou codes protocole). */
|
|
49
|
+
code: number;
|
|
50
|
+
}
|
|
51
|
+
export declare class RpcError extends Error {
|
|
52
|
+
readonly name = "RpcError";
|
|
53
|
+
readonly data?: unknown;
|
|
54
|
+
constructor(message: string, code?: number, data?: unknown);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Métadonnées **serveur** d'une réponse RPC — transportées À CÔTÉ du `result`,
|
|
58
|
+
* jamais dedans (le `result` d'`api.request` doit rester identique à ce que
|
|
59
|
+
* rendrait la même route en REST : « snapshot ≡ GET REST » par construction).
|
|
60
|
+
*
|
|
61
|
+
* Aujourd'hui : `requestId` (dev) = la clé du profil de la frame dans le
|
|
62
|
+
* Profiler → le client peut aller chercher sa radiographie. Champ ouvert :
|
|
63
|
+
* un pair qui n'en connaît pas les clés l'ignore (rétro-compatible).
|
|
64
|
+
*/
|
|
65
|
+
export interface RpcMeta {
|
|
66
|
+
/** Identifiant du profil de CETTE invocation (`<connexion>.<n° de frame>`). */
|
|
67
|
+
requestId?: string;
|
|
68
|
+
[key: string]: unknown;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Réponse d'un handler qui veut JOINDRE des métadonnées serveur à son résultat.
|
|
72
|
+
*
|
|
73
|
+
* Un handler retourne normalement sa valeur nue (elle devient `result`). Quand
|
|
74
|
+
* il retourne une enveloppe, le peer la déballe : `result` reste la valeur nue,
|
|
75
|
+
* et `meta` voyage dans un champ frère de la trame JSON-RPC. Coût pour ceux qui
|
|
76
|
+
* ne l'utilisent pas : un `instanceof` par frame.
|
|
77
|
+
*/
|
|
78
|
+
export declare class RpcEnvelope<T = unknown> {
|
|
79
|
+
readonly result: T;
|
|
80
|
+
readonly meta: RpcMeta;
|
|
81
|
+
constructor(result: T, meta: RpcMeta);
|
|
82
|
+
}
|
|
83
|
+
/** Résultat d'un appel sortant tracé : la valeur + la méta serveur. */
|
|
84
|
+
export interface RpcTracedResult<T = unknown> {
|
|
85
|
+
result: T;
|
|
86
|
+
meta?: RpcMeta;
|
|
87
|
+
}
|
|
88
|
+
/** Handler d'une action (requête→réponse). Sync ou async ; throw → `-32603`. */
|
|
89
|
+
export type RpcActionHandler = (params: unknown) => unknown | Promise<unknown>;
|
|
90
|
+
/**
|
|
91
|
+
* Handler des notifications entrantes (pas de réponse). Paramétrable par `Listen`
|
|
92
|
+
* (map des notifications REÇUES par ce peer). Défaut permissif → comportement
|
|
93
|
+
* pré-types-partagés inchangé.
|
|
94
|
+
*/
|
|
95
|
+
export type RpcNotificationHandler<Listen extends EventsMap = DefaultEventsMap> = <K extends EventNames<Listen>>(method: K, params: EventPayload<Listen, K>) => void;
|
|
96
|
+
/** Nature d'une frame entrante (renvoyée par {@link JsonRpcPeer.handleFrame}). */
|
|
97
|
+
export type JsonRpcFrameKind = "request" | "notification" | "response" | "invalid";
|
|
98
|
+
/**
|
|
99
|
+
* Frame de notification sortante (JSON-RPC 2.0, sans `id` : aucune réponse
|
|
100
|
+
* attendue). Type nommé parce que cette frame **sort du peer** : le fan-out d'un
|
|
101
|
+
* canal diffusé la sérialise une fois pour tous ses abonnés.
|
|
102
|
+
*/
|
|
103
|
+
export interface JsonRpcNotification {
|
|
104
|
+
jsonrpc: "2.0";
|
|
105
|
+
method: string;
|
|
106
|
+
params?: unknown;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Motif d'un évènement audit protocolaire (consommé par P6.14 `AuditEventEntity`) :
|
|
110
|
+
* - `invalid` : frame non conforme JSON-RPC 2.0 (pas d'objet, `jsonrpc`≠"2.0", `method` non string sans `id` valide).
|
|
111
|
+
* - `denied` : frame entrante refusée par `beforeDispatch` (Zero Trust realtime — voter P6 a dit non).
|
|
112
|
+
* - `method_not_found` : requête entrante pour une action non enregistrée (`-32601` envoyée).
|
|
113
|
+
* - `internal_error` : handler d'action a throw (`-32603` envoyée, détail loggé via `onError` — Zero Trust : pas renvoyé au pair).
|
|
114
|
+
*/
|
|
115
|
+
export type FrameAuditReason = "invalid" | "denied" | "method_not_found" | "internal_error";
|
|
116
|
+
export interface JsonRpcPeerOptions<Emit extends EventsMap = DefaultEventsMap, Listen extends EventsMap = DefaultEventsMap, Actions extends ActionsMap = DefaultActionsMap> {
|
|
117
|
+
/**
|
|
118
|
+
* Envoie une frame sérialisable sur le transport (le peer ignore le transport).
|
|
119
|
+
*
|
|
120
|
+
* Un transport qui sait que la frame **n'est pas partie** (socket fermée,
|
|
121
|
+
* reconnexion en cours) doit retourner `false` : le peer rejette alors la
|
|
122
|
+
* requête corrélée immédiatement, au lieu de laisser l'appelant attendre son
|
|
123
|
+
* timeout pour une frame jamais émise. `void`/`true` = considéré comme émis
|
|
124
|
+
* (comportement historique des transports qui ne savent pas répondre).
|
|
125
|
+
*/
|
|
126
|
+
send: (frame: unknown) => boolean | void;
|
|
127
|
+
/** Notifications entrantes (`method` sans `id`) : pub/sub côté client, subscribe/unsubscribe côté serveur. */
|
|
128
|
+
onNotification?: RpcNotificationHandler<Listen>;
|
|
129
|
+
/** Erreur interne d'un handler — détail JAMAIS renvoyé au pair (loggé ici). */
|
|
130
|
+
onError?: (context: string, err: unknown) => void;
|
|
131
|
+
/**
|
|
132
|
+
* **Seam sécurité 1/5 (P13 → P6)** — gate `beforeDispatch` appelé AVANT le
|
|
133
|
+
* dispatch d'une frame entrante (request ET notification — pas les responses,
|
|
134
|
+
* passives). `false` → frame BLOQUÉE (audit `denied`, et pour une requête,
|
|
135
|
+
* réponse `-32001 unauthorized` ; notification = drop silencieux). `true` →
|
|
136
|
+
* dispatch normal. `undefined` (cas client par défaut) → bypass 0-coût.
|
|
137
|
+
*
|
|
138
|
+
* SYNC uniquement (voters P6 = lecture metadata + jeton décodé en cache = ~µs).
|
|
139
|
+
* L'async serait une fausse économie : ajouter `await` sur le hot-path d'une WS
|
|
140
|
+
* coûte une microtask PAR FRAME (~50 ns) y compris quand non-async (Promise.resolve)
|
|
141
|
+
* + sérialise les frames per-peer. Si un voter doit attendre une lookup distante,
|
|
142
|
+
* pré-cacher la décision côté authenticator au handshake.
|
|
143
|
+
*
|
|
144
|
+
* Branchement P6 : reading metadata `@IsGranted` du handler + voters → `boolean`.
|
|
145
|
+
*/
|
|
146
|
+
beforeDispatch?: (frame: unknown, peer: IRealtimePeer<Emit, Actions>) => boolean;
|
|
147
|
+
/**
|
|
148
|
+
* **Seam audit 5/5 (P13 → P6.14)** — fire-and-forget sur évènements
|
|
149
|
+
* protocolaires notables (cf {@link FrameAuditReason}). Sync (pas de
|
|
150
|
+
* back-pressure : un audit lent ne doit pas ralentir le pipeline RPC).
|
|
151
|
+
* `undefined` (cas client par défaut) → bypass 0-coût.
|
|
152
|
+
*
|
|
153
|
+
* Le `peer` est passé pour permettre au consommateur (typiquement
|
|
154
|
+
* `RealtimeHub` côté serveur) de retrouver l'**actor** associé à la
|
|
155
|
+
* connexion via son mapping `peer → IRealtimeToken` (slot #6 forward-audit
|
|
156
|
+
* P6 : « qui a été refusé » exige l'identité, pas juste l'IP du paquet).
|
|
157
|
+
*
|
|
158
|
+
* Branchement P6.14 : alimente le journal `AuditEventEntity` (qui agit, qui a
|
|
159
|
+
* été refusé, qui appelle une méthode inconnue — traçabilité Zero Trust).
|
|
160
|
+
*/
|
|
161
|
+
onFrameAudit?: (reason: FrameAuditReason, frame: unknown, peer: IRealtimePeer<Emit, Actions>) => void;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Surface BIDIRECTIONNELLE d'un endpoint temps réel — **contrat ISOMORPHE**,
|
|
165
|
+
* identique back et front. `RealtimeClient` (navigateur) ET la connexion serveur
|
|
166
|
+
* l'exposent, en composant le même {@link JsonRpcPeer}. Du code métier écrit
|
|
167
|
+
* contre cette interface tourne des deux côtés (le pari isomorphe de Nodefony).
|
|
168
|
+
*
|
|
169
|
+
* Sortant : `request` (attend une réponse), `notify` (fire-and-forget).
|
|
170
|
+
* Entrant : `receive` (le transport y pousse chaque frame). Callee : `register`.
|
|
171
|
+
*/
|
|
172
|
+
/**
|
|
173
|
+
* @typeParam Emit — notifications SORTANTES (typage de `notify`).
|
|
174
|
+
* @typeParam Actions — contrat RPC bidirectionnel (typage de `request`/`register`).
|
|
175
|
+
*
|
|
176
|
+
* Note : `Listen` (notifications ENTRANTES) n'est PAS sur cette interface raw —
|
|
177
|
+
* il est consommé par `JsonRpcPeerOptions.onNotification` et par `RealtimeClient.on()`.
|
|
178
|
+
*/
|
|
179
|
+
export interface IRealtimePeer<Emit extends EventsMap = DefaultEventsMap, Actions extends ActionsMap = DefaultActionsMap> {
|
|
180
|
+
/** Requête sortante → `Promise` du `result` (rejette sur `error`/timeout). */
|
|
181
|
+
request<K extends ActionNames<Actions>>(method: K, params?: ActionParams<Actions, K>, timeoutMs?: number): Promise<ActionResult<Actions, K>>;
|
|
182
|
+
/** Notification sortante (pas de réponse). */
|
|
183
|
+
notify<K extends EventNames<Emit>>(method: K, params?: EventPayload<Emit, K>): void;
|
|
184
|
+
/** Expose une action appelable par le pair (requête entrante → `result`). */
|
|
185
|
+
register<K extends ActionNames<Actions>>(method: K, handler: TypedRpcActionHandler<Actions, K>): void;
|
|
186
|
+
/** Retire une action. */
|
|
187
|
+
unregister<K extends ActionNames<Actions>>(method: K): void;
|
|
188
|
+
/** Ingestion d'une frame ENTRANTE (déjà parsée) → classe + route. */
|
|
189
|
+
receive(frame: unknown): JsonRpcFrameKind;
|
|
190
|
+
/** Actions exposées (découverte). */
|
|
191
|
+
readonly methods: string[];
|
|
192
|
+
/** Annule les requêtes en attente (fermeture transport). */
|
|
193
|
+
dispose(reason?: string): void;
|
|
194
|
+
}
|
|
195
|
+
export declare class JsonRpcPeer<Emit extends EventsMap = DefaultEventsMap, Listen extends EventsMap = DefaultEventsMap, Actions extends ActionsMap = DefaultActionsMap> implements IRealtimePeer<Emit, Actions> {
|
|
196
|
+
private readonly opts;
|
|
197
|
+
private nextId;
|
|
198
|
+
private pending;
|
|
199
|
+
private actions;
|
|
200
|
+
constructor(opts: JsonRpcPeerOptions<Emit, Listen, Actions>);
|
|
201
|
+
/** Expose une action (requête entrante `method`+`id` → `result`). Idempotent. */
|
|
202
|
+
register<K extends ActionNames<Actions>>(method: K, handler: TypedRpcActionHandler<Actions, K>): void;
|
|
203
|
+
/** Retire une action. */
|
|
204
|
+
unregister<K extends ActionNames<Actions>>(method: K): void;
|
|
205
|
+
/** Liste des actions exposées (pour annoncer au handshake, découverte côté pair). */
|
|
206
|
+
get methods(): string[];
|
|
207
|
+
/** Requête SORTANTE — `Promise` résolue avec le `result` (rejette sur `error`/timeout). */
|
|
208
|
+
request<K extends ActionNames<Actions>>(method: K, params?: ActionParams<Actions, K>, timeoutMs?: number): Promise<ActionResult<Actions, K>>;
|
|
209
|
+
/**
|
|
210
|
+
* Requête SORTANTE **tracée** — rend `{ result, meta }` au lieu du `result` nu.
|
|
211
|
+
*
|
|
212
|
+
* Même appel que {@link request} : la seule différence est que l'appelant
|
|
213
|
+
* garde la méta serveur (en dev, le `requestId` du profil de la frame → sa
|
|
214
|
+
* radiographie). Un serveur qui n'en émet pas laisse simplement `meta`
|
|
215
|
+
* absent.
|
|
216
|
+
*/
|
|
217
|
+
requestTraced<K extends ActionNames<Actions>>(method: K, params?: ActionParams<Actions, K>, timeoutMs?: number): Promise<RpcTracedResult<ActionResult<Actions, K>>>;
|
|
218
|
+
/**
|
|
219
|
+
* Frame d'une notification sortante — **source unique** de sa forme.
|
|
220
|
+
*
|
|
221
|
+
* Extraite pour que le fan-out d'un canal diffusé puisse sérialiser la frame
|
|
222
|
+
* **une seule fois** pour N abonnés, sans jamais risquer de diverger du format
|
|
223
|
+
* qu'émet {@link notify} : les deux voies passent par ici.
|
|
224
|
+
*
|
|
225
|
+
* @param method - nom de la méthode (côté canal : le nom du canal).
|
|
226
|
+
* @param params - charge applicative ; omise de la frame si `undefined`.
|
|
227
|
+
* @returns la frame JSON-RPC 2.0, prête à sérialiser.
|
|
228
|
+
*/
|
|
229
|
+
static buildNotification(method: string, params?: unknown): JsonRpcNotification;
|
|
230
|
+
/**
|
|
231
|
+
* Notification SORTANTE (pas de réponse attendue).
|
|
232
|
+
*
|
|
233
|
+
* @returns `false` si le transport a signalé qu'il n'a pas émis. Une
|
|
234
|
+
* notification n'attend rien en retour : sans cette valeur, une frame perdue
|
|
235
|
+
* ne laisserait aucune trace chez l'appelant. Les appels qui se rattrapent
|
|
236
|
+
* seuls (ré-abonnement au reconnect) peuvent l'ignorer.
|
|
237
|
+
*/
|
|
238
|
+
notify<K extends EventNames<Emit>>(method: K, params?: EventPayload<Emit, K>): boolean;
|
|
239
|
+
/**
|
|
240
|
+
* Ingestion d'une frame ENTRANTE déjà parsée → classe (request/notification/
|
|
241
|
+
* response) et route. Renvoie la nature (utile log/tests). Ne lève jamais.
|
|
242
|
+
* (Le pendant sortant = `request`/`notify` ; le `send` brut est injecté.)
|
|
243
|
+
*/
|
|
244
|
+
receive(msg: unknown): JsonRpcFrameKind;
|
|
245
|
+
/** Annule tous les pending (fermeture du transport). */
|
|
246
|
+
dispose(reason?: string): void;
|
|
247
|
+
private startCall;
|
|
248
|
+
private handleRequest;
|
|
249
|
+
private handleResponse;
|
|
250
|
+
}
|
|
251
|
+
export default JsonRpcPeer;
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types partagés pour le contrat **realtime** Nodefony — pattern « typed events »
|
|
3
|
+
* (Socket.IO §emitter-typing) appliqué à JSON-RPC 2.0.
|
|
4
|
+
*
|
|
5
|
+
* Le contrat (canaux pub/sub + RPC) est déclaré UNE fois côté partagé, puis injecté
|
|
6
|
+
* en générique sur `IRealtimePeer<Emit, Listen, Actions>`, `JsonRpcPeer<...>` et
|
|
7
|
+
* `RealtimeClient<...>`. Bénéfices : autocomplétion IDE, refactor safe (rename canal
|
|
8
|
+
* → erreur compile partout), doc-as-code. **0 coût runtime** — génériques effacés
|
|
9
|
+
* à la compile.
|
|
10
|
+
*
|
|
11
|
+
* Convention :
|
|
12
|
+
* - `Emit` = ce que CE peer ENVOIE (notifications sortantes).
|
|
13
|
+
* - `Listen` = ce que CE peer REÇOIT (notifications entrantes).
|
|
14
|
+
* - `Actions` = contrat RPC bidirectionnel (les 2 pairs respectent la même map :
|
|
15
|
+
* `request()` typé sortant + `register()` typé entrant).
|
|
16
|
+
*
|
|
17
|
+
* Pour un échange `client ↔ serveur` : symétrie naturelle.
|
|
18
|
+
* Côté client : `Emit = ClientToServer`, `Listen = ServerToClient`.
|
|
19
|
+
* Côté serveur : `Emit = ServerToClient`, `Listen = ClientToServer`.
|
|
20
|
+
*/
|
|
21
|
+
/**
|
|
22
|
+
* Map des canaux pub/sub — nom de canal → forme du payload.
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```ts
|
|
26
|
+
* interface ServerToClient extends EventsMap {
|
|
27
|
+
* "chat:room42": { ts: number; msg: string };
|
|
28
|
+
* "presence": { user: string; online: boolean };
|
|
29
|
+
* }
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export type EventsMap = Record<string, unknown>;
|
|
33
|
+
/**
|
|
34
|
+
* Map des RPC — nom de méthode → `{ in: paramètres, out: résultat }`.
|
|
35
|
+
*
|
|
36
|
+
* Utilisée par `request()` (sortant) ET `register()` (entrant) : les 2 pairs
|
|
37
|
+
* respectent le même contrat (JSON-RPC 2.0 est symétrique).
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```ts
|
|
41
|
+
* interface ChatActions extends ActionsMap {
|
|
42
|
+
* "chat:ping": { in: void; out: { pong: boolean; ts: number } };
|
|
43
|
+
* "chat:fetch": { in: { id: string }; out: { msg: string } };
|
|
44
|
+
* }
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
export type ActionsMap = Record<string, {
|
|
48
|
+
in?: unknown;
|
|
49
|
+
out: unknown;
|
|
50
|
+
}>;
|
|
51
|
+
/**
|
|
52
|
+
* Défaut **permissif** pour `EventsMap` — toute clé `string`, payload `unknown`.
|
|
53
|
+
* Code instancié sans paramétrage (`new JsonRpcPeer(opts)`) → comportement
|
|
54
|
+
* pré-types-partagés inchangé. **Sécurité rétro-compat 100%**.
|
|
55
|
+
*/
|
|
56
|
+
export interface DefaultEventsMap {
|
|
57
|
+
[event: string]: unknown;
|
|
58
|
+
}
|
|
59
|
+
/** Défaut **permissif** pour `ActionsMap` (rétro-compat). */
|
|
60
|
+
export interface DefaultActionsMap {
|
|
61
|
+
[method: string]: {
|
|
62
|
+
in?: unknown;
|
|
63
|
+
out: unknown;
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Retire l'index signature (`[k: string]: …`) d'un type, en ne gardant que les
|
|
68
|
+
* clés LITTÉRALES déclarées.
|
|
69
|
+
*
|
|
70
|
+
* Indispensable ici : la convention documentée est `interface App extends
|
|
71
|
+
* ActionsMap`, or `extends` fait HÉRITER le `[k: string]` de `Record<string, …>`.
|
|
72
|
+
* Sans ce filtre, `keyof App` vaut `string` — donc tout nom inconnu passe la
|
|
73
|
+
* compile, et la branche « hors map » des types conditionnels devient
|
|
74
|
+
* INATTEIGNABLE (`K extends EventNames<M>` toujours vrai). C'est ce qui typait le
|
|
75
|
+
* handler wildcard `on("*")` à UN argument alors que le runtime l'appelle avec
|
|
76
|
+
* `(method, params)`.
|
|
77
|
+
*
|
|
78
|
+
* Les maps par défaut ({@link DefaultEventsMap}, {@link DefaultActionsMap}) n'ont
|
|
79
|
+
* QUE l'index signature → elles se réduisent à `never`, ce qui fait tomber le
|
|
80
|
+
* code non paramétré dans la branche permissive : rétro-compat préservée.
|
|
81
|
+
*/
|
|
82
|
+
type RemoveIndexSignature<T> = {
|
|
83
|
+
[K in keyof T as string extends K ? never : number extends K ? never : symbol extends K ? never : K]: T[K];
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* Clés LITTÉRALES d'une map, ou `never` si elle n'en déclare aucune (map
|
|
87
|
+
* purement permissive comme {@link DefaultEventsMap}).
|
|
88
|
+
*/
|
|
89
|
+
type LiteralKeys<M> = keyof RemoveIndexSignature<M> & string;
|
|
90
|
+
/**
|
|
91
|
+
* Nom valide dans une `EventsMap`.
|
|
92
|
+
*
|
|
93
|
+
* Map qui DÉCLARE des canaux → union stricte de ses noms (autocomplétion, et un
|
|
94
|
+
* nom inconnu est refusé). Map SANS aucune clé littérale (les défauts permissifs)
|
|
95
|
+
* → `string` : le code non paramétré garde son comportement d'avant les types
|
|
96
|
+
* partagés. Le `[…] extends […]` en tuple empêche la distribution du conditionnel
|
|
97
|
+
* sur `never` (qui rendrait `never` au lieu de `string`).
|
|
98
|
+
*/
|
|
99
|
+
export type EventNames<M extends EventsMap> = [LiteralKeys<M>] extends [never] ? string : LiteralKeys<M>;
|
|
100
|
+
/** Payload typé d'un canal. */
|
|
101
|
+
export type EventPayload<M extends EventsMap, K extends keyof M> = M[K];
|
|
102
|
+
/** Nom valide dans une `ActionsMap` — même règle que {@link EventNames}. */
|
|
103
|
+
export type ActionNames<M extends ActionsMap> = [LiteralKeys<M>] extends [never] ? string : LiteralKeys<M>;
|
|
104
|
+
/**
|
|
105
|
+
* Paramètres entrants d'une RPC, lus sur le `in` de la déclaration.
|
|
106
|
+
*
|
|
107
|
+
* On teste la PRÉSENCE de la clé (`"in" extends keyof M[K]`) avant d'inférer, au
|
|
108
|
+
* lieu de `M[K] extends { in: infer I }` : un `in` **optionnel** ne satisfait pas
|
|
109
|
+
* une contrainte qui l'exige, et {@link DefaultActionsMap} déclare précisément
|
|
110
|
+
* `in?`. La forme naïve retombait donc sur `undefined` pour tout peer NON
|
|
111
|
+
* paramétré — impossible de passer le moindre paramètre, alors que ce défaut
|
|
112
|
+
* promet une rétro-compat permissive. Zéro impact runtime (types effacés), d'où
|
|
113
|
+
* la survie du trou jusqu'au type-check des tests.
|
|
114
|
+
*
|
|
115
|
+
* - `{ in: { id: string } }` → `{ id: string }`
|
|
116
|
+
* - `{ in: void }` → `void` (appel sans argument)
|
|
117
|
+
* - `{ out: X }` (pas de `in`) → `undefined` (la RPC ne prend rien)
|
|
118
|
+
* - `DefaultActionsMap` (`in?: unknown`) → `unknown` (permissif)
|
|
119
|
+
*/
|
|
120
|
+
export type ActionParams<M extends ActionsMap, K extends keyof M> = "in" extends keyof M[K] ? M[K] extends {
|
|
121
|
+
in?: infer I;
|
|
122
|
+
} ? I : undefined : undefined;
|
|
123
|
+
/** Résultat attendu d'une RPC (`out`). */
|
|
124
|
+
export type ActionResult<M extends ActionsMap, K extends keyof M> = M[K]["out"];
|
|
125
|
+
/**
|
|
126
|
+
* Noms d'actions RÉELLEMENT déclarés par le contrat — `never` quand la map n'en
|
|
127
|
+
* déclare aucune ({@link DefaultActionsMap}).
|
|
128
|
+
*
|
|
129
|
+
* ⚠️ À ne pas confondre avec {@link ActionNames}, qui vaut `string` sur une map
|
|
130
|
+
* non paramétrée : ce repli est ce qu'il faut pour une CONTRAINTE (accepter
|
|
131
|
+
* n'importe quelle méthode), mais il rend toujours VRAIE la condition d'un type
|
|
132
|
+
* conditionnel — la branche permissive devient alors inatteignable et le type de
|
|
133
|
+
* résultat demandé par l'appelant est écrasé en `unknown`.
|
|
134
|
+
*/
|
|
135
|
+
export type ContractActionNames<M extends ActionsMap> = LiteralKeys<M>;
|
|
136
|
+
/**
|
|
137
|
+
* `params` d'une RPC : dictés par le contrat quand `K` lui appartient, libres
|
|
138
|
+
* sinon. Règle UNIQUE — `IRealtimeSocket`, `RealtimeClient` et
|
|
139
|
+
* `ServerRealtimeSocket` la partagent au lieu de la recopier.
|
|
140
|
+
*/
|
|
141
|
+
export type ContractParams<M extends ActionsMap, K> = K extends ContractActionNames<M> ? ActionParams<M, K & keyof M> : unknown;
|
|
142
|
+
/**
|
|
143
|
+
* Résultat d'une RPC : dicté par le contrat quand `K` lui appartient, sinon le
|
|
144
|
+
* `T` que l'appelant demande. Pendant de {@link ContractParams}.
|
|
145
|
+
*/
|
|
146
|
+
export type ContractResult<M extends ActionsMap, K, T> = K extends ContractActionNames<M> ? ActionResult<M, K & keyof M> : T;
|
|
147
|
+
/**
|
|
148
|
+
* Handler typé pour une RPC entrante (côté qui expose via `register`).
|
|
149
|
+
* Sync ou async — JSON-RPC 2.0 §5.1 : throw → réponse `-32603 internal_error`.
|
|
150
|
+
*/
|
|
151
|
+
export type TypedRpcActionHandler<M extends ActionsMap, K extends keyof M & string> = (params: ActionParams<M, K>) => ActionResult<M, K> | Promise<ActionResult<M, K>>;
|
|
152
|
+
/**
|
|
153
|
+
* Assertion type **compile-time** : `expectType<T>(value)` échoue à la compilation
|
|
154
|
+
* si `value` n'est pas assignable à `T`. **0 coût runtime** (fonction vide).
|
|
155
|
+
*
|
|
156
|
+
* @example
|
|
157
|
+
* ```ts
|
|
158
|
+
* const x = peer.request("chat:ping");
|
|
159
|
+
* expectType<Promise<{ pong: boolean }>>(x); // ✅
|
|
160
|
+
* expectType<Promise<string>>(x); // ❌ TS error
|
|
161
|
+
* ```
|
|
162
|
+
*/
|
|
163
|
+
export declare function expectType<T>(_value: T): void;
|
|
164
|
+
/**
|
|
165
|
+
* Identité d'une connexion temps réel, telle que **résolue par le serveur au
|
|
166
|
+
* handshake** (token neutre `IRealtimeToken` côté back) et **annoncée au client**
|
|
167
|
+
* dans la notification système `realtime:welcome`.
|
|
168
|
+
*
|
|
169
|
+
* Le client la lit pour savoir QUI il est **sans taper une route** : anonyme →
|
|
170
|
+
* écran de login (au lieu de deviner via un 401), authentifié → app. Rafraîchie à
|
|
171
|
+
* chaque (re)connexion (un nouveau welcome ⇒ une nouvelle identité). C'est une vue
|
|
172
|
+
* « sur soi » (équivalent `/auth/me`) — **aucun secret** : seulement l'état d'auth
|
|
173
|
+
* et les rôles/scopes du porteur, qu'il connaît déjà.
|
|
174
|
+
*/
|
|
175
|
+
export interface RealtimeIdentity {
|
|
176
|
+
/** Type de token résolu (`"anonymous"`, `"session"`, `"jwt"`, …) — discriminator. */
|
|
177
|
+
type: string;
|
|
178
|
+
/** `false` pour un visiteur anonyme (Zero Trust : toujours présent, jamais `null`). */
|
|
179
|
+
authenticated: boolean;
|
|
180
|
+
/** Identifiant logique du porteur (`"anonymous"`, `"user-42"`, …). */
|
|
181
|
+
userIdentifier: string;
|
|
182
|
+
/** Rôles **plats** (RBAC, sans hiérarchie résolue) — `["ROLE_ANONYMOUS"]` si anonyme. */
|
|
183
|
+
roles: string[];
|
|
184
|
+
/** Scopes accordés (clés API / OAuth) — `[]` en session BFF web. */
|
|
185
|
+
scopes: string[];
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Payload de la notification système `realtime:welcome` — **1ʳᵉ frame** poussée par
|
|
189
|
+
* le serveur juste après le handshake. Annonce le protocole, les canaux/actions
|
|
190
|
+
* **découvrables** de l'endpoint et l'{@link RealtimeIdentity} résolue de la
|
|
191
|
+
* connexion. Cold path (1×/connexion).
|
|
192
|
+
*/
|
|
193
|
+
export interface IRealtimeWelcome {
|
|
194
|
+
/** Timestamp serveur (ms epoch). */
|
|
195
|
+
ts: number;
|
|
196
|
+
/** Étiquette de protocole (`"jsonrpc-2.0"`). */
|
|
197
|
+
protocol: string;
|
|
198
|
+
/** Canaux pub/sub annoncés par l'endpoint (découverte). */
|
|
199
|
+
channels: string[];
|
|
200
|
+
/** Actions RPC exposées par l'endpoint (découverte). */
|
|
201
|
+
methods: string[];
|
|
202
|
+
/** Identité résolue de CETTE connexion (cf {@link RealtimeIdentity}). */
|
|
203
|
+
identity: RealtimeIdentity;
|
|
204
|
+
/**
|
|
205
|
+
* Mode d'exécution du serveur — **posé UNIQUEMENT hors production**.
|
|
206
|
+
*
|
|
207
|
+
* Il existe parce que le client ne dispose sinon que de `import.meta.env.DEV`,
|
|
208
|
+
* qui dit le mode du BUNDLE : une application bâtie pour la production mais
|
|
209
|
+
* servie par un serveur de développement (banc, cluster local, image testée
|
|
210
|
+
* sur le poste) restait muette dans la console alors qu'on avait tout intérêt
|
|
211
|
+
* à la faire parler. Le serveur, lui, sait.
|
|
212
|
+
*
|
|
213
|
+
* ⚠️ **Une absence vaut production, jamais l'inverse.** Un serveur publié
|
|
214
|
+
* n'émet pas ce champ : ce n'est pas un réglage qu'on lit, c'est une
|
|
215
|
+
* permission de parler — et on ne l'accorde pas par défaut.
|
|
216
|
+
*/
|
|
217
|
+
env?: string;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Payload de la notification système `realtime:denied` — poussée par le serveur
|
|
221
|
+
* quand une frame `subscribe`/inbound est REFUSÉE par le verrou d'autorisation
|
|
222
|
+
* (P6). Rend le refus OBSERVABLE côté client (une notification, contrairement à
|
|
223
|
+
* une requête, serait sinon droppée en silence → le client resterait aveugle).
|
|
224
|
+
*
|
|
225
|
+
* Contrat de PROTOCOLE **isomorphe** : un seul type, le serveur l'émet
|
|
226
|
+
* (`@nodefony/realtime`), le client le parse (core → notice + event `onDenied`).
|
|
227
|
+
* Zero Trust : `reason` est GÉNÉRIQUE (jamais le rôle/scope manquant — pas
|
|
228
|
+
* d'oracle d'autorisation). Cold path (un refus est rare).
|
|
229
|
+
*/
|
|
230
|
+
export interface IRealtimeDenied {
|
|
231
|
+
/** Canal (ou méthode inbound) refusé(e). */
|
|
232
|
+
channel: string;
|
|
233
|
+
/** Motif générique (cf {@link RealtimeDeniedReason}) — jamais le détail de la policy. */
|
|
234
|
+
reason: RealtimeDeniedReason;
|
|
235
|
+
/**
|
|
236
|
+
* Ce qui s'est passé, en clair — **hors production UNIQUEMENT**.
|
|
237
|
+
*
|
|
238
|
+
* `reason` est fermé et générique par construction : c'est ce qui empêche
|
|
239
|
+
* d'en faire un oracle. Mais un développeur qui reçoit `forbidden` n'a alors
|
|
240
|
+
* aucun moyen de savoir LEQUEL des cas il tient — rôle insuffisant, ou
|
|
241
|
+
* plancher de plateforme fermé faute de module de sécurité — ni quoi
|
|
242
|
+
* regarder. Il lui reste à deviner, et un signal qu'on ne sait pas lire ne
|
|
243
|
+
* vaut guère mieux qu'un silence.
|
|
244
|
+
*
|
|
245
|
+
* Ce champ porte donc la phrase utile, et il est posé par
|
|
246
|
+
* {@link deniedDetail}, sur le modèle EXACT de `welcomeEnv` : **absent en
|
|
247
|
+
* production**, où la même phrase deviendrait précisément l'oracle que
|
|
248
|
+
* `reason` refuse d'être. Une absence vaut production, jamais l'inverse.
|
|
249
|
+
*/
|
|
250
|
+
detail?: string;
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Motif d'un `realtime:denied`. Fermé exprès : le client doit pouvoir traiter
|
|
254
|
+
* TOUS les cas (le compilateur le lui rappelle), et un motif inventé côté
|
|
255
|
+
* serveur ne doit pas atteindre un écran qui ne sait pas le dire.
|
|
256
|
+
*
|
|
257
|
+
* - `"forbidden"` — décision d'AUTORISATION : le verrou de frame a refusé
|
|
258
|
+
* (rôle/scope insuffisant), ou le plancher du namespace de plateforme est
|
|
259
|
+
* fermé faute de module de sécurité. Générique par construction : dire
|
|
260
|
+
* lequel des deux, ou quel rôle manque, serait un oracle.
|
|
261
|
+
* - `"limit"` — garde de RESSOURCE : le plafond de canaux de cette connexion
|
|
262
|
+
* est atteint. Une borne n'est pas un secret, elle se nomme.
|
|
263
|
+
* - `"unknown"` — le canal n'a AUCUN producteur sur ce pod (nom mal orthographié,
|
|
264
|
+
* module non chargé). Ce n'est pas un refus d'accès, et le distinguer ne
|
|
265
|
+
* révèle rien : un canal gardé est tranché en amont, donc rendu `"forbidden"`
|
|
266
|
+
* qu'il existe ou non.
|
|
267
|
+
*/
|
|
268
|
+
export type RealtimeDeniedReason = "forbidden" | "limit" | "unknown";
|
|
269
|
+
export {};
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* channelRate — granularité (cadence) d'un canal realtime, **convention isomorphe**
|
|
3
|
+
* partagée par les deux bords de la socket.
|
|
4
|
+
*
|
|
5
|
+
* La cadence d'un canal à état (stats, supervision) vit dans son **nom** : `base` nu =
|
|
6
|
+
* cadence serveur par défaut ; `base:<ms>` = cadence explicite. Conséquence voulue (cf
|
|
7
|
+
* vision « la socket Nodefony ») : **1 canal = 1 cadence = 1 ref-count** — `nodefony:orm:health:2000`
|
|
8
|
+
* et `nodefony:orm:health:5000` sont deux tickers distincts, jamais réconciliés.
|
|
9
|
+
*
|
|
10
|
+
* Avant ce module la convention était **dupliquée** : le front fabriquait `base:${ms}` à la
|
|
11
|
+
* main (3×) et le serveur la re-parsait+bornait à la main (3×) → dérive garantie (un bord
|
|
12
|
+
* change la borne, l'autre pas). Ici elle est **centralisée et testée** : le front fabrique
|
|
13
|
+
* via {@link rateChannel}, le serveur résout via {@link parseRate} — même fichier, même règle.
|
|
14
|
+
*
|
|
15
|
+
* Pur (aucune allocation hors la string résultat, uniquement quand un suffixe est requis) et
|
|
16
|
+
* appelé au `subscribe` (chemin froid), jamais par frame.
|
|
17
|
+
*
|
|
18
|
+
* @see {@link IRealtimeChannel} — le handle par-canal, futur point d'accroche de la cadence
|
|
19
|
+
* AIMD (re-subscribe adaptatif), qui s'appuiera sur cette même convention de nommage.
|
|
20
|
+
*/
|
|
21
|
+
/** Bornes de cadence d'un canal cadencé (toutes en millisecondes). */
|
|
22
|
+
export interface RateBounds {
|
|
23
|
+
/** Cadence par défaut — celle du canal de base nu (sans suffixe). */
|
|
24
|
+
readonly default: number;
|
|
25
|
+
/** Borne basse (cadence minimale autorisée, anti-DoS event-loop). */
|
|
26
|
+
readonly min: number;
|
|
27
|
+
/** Borne haute (cadence maximale autorisée). */
|
|
28
|
+
readonly max: number;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Construit le nom d'un canal cadencé à partir de sa base et de la cadence demandée.
|
|
32
|
+
*
|
|
33
|
+
* `intervalMs` omis OU égal à `defaultMs` → renvoie `base` nu : on **n'émet pas** de suffixe
|
|
34
|
+
* pour la cadence par défaut, ce qui évite de fragmenter le canal de base entre consommateurs
|
|
35
|
+
* qui veulent tous la valeur par défaut (ils partagent alors un seul ticker ref-compté).
|
|
36
|
+
*
|
|
37
|
+
* @param base - canal de base (ex. `"nodefony:orm:health"`).
|
|
38
|
+
* @param intervalMs - cadence demandée (ms). Omise → canal de base.
|
|
39
|
+
* @param defaultMs - cadence par défaut du canal ; `intervalMs === defaultMs` ⇒ canal de base.
|
|
40
|
+
* @returns `base` ou `base:<ms>`.
|
|
41
|
+
*/
|
|
42
|
+
export declare function rateChannel(base: string, intervalMs?: number, defaultMs?: number): string;
|
|
43
|
+
/**
|
|
44
|
+
* Résout la cadence (ms) d'un canal cadencé connu, côté serveur. Le serveur connaît la `base`
|
|
45
|
+
* qu'il vient de matcher ; ce helper en extrait le suffixe `:<ms>`, **borne** dans `bounds` et
|
|
46
|
+
* retombe sur `bounds.default` pour le canal de base nu ou un suffixe invalide.
|
|
47
|
+
*
|
|
48
|
+
* @param channel - canal reçu (`base` ou `base:<ms>`).
|
|
49
|
+
* @param base - canal de base déjà identifié par l'appelant.
|
|
50
|
+
* @param bounds - cadence par défaut + bornes min/max.
|
|
51
|
+
* @returns cadence effective (ms), garantie dans `[bounds.min, bounds.max]` (ou `bounds.default`).
|
|
52
|
+
*/
|
|
53
|
+
export declare function parseRate(channel: string, base: string, bounds: RateBounds): number;
|
|
54
|
+
/** Vrai si `channel` est le canal de base nu OU une de ses variantes cadencées `base:<ms>`. */
|
|
55
|
+
export declare function isRateChannel(channel: string, base: string): boolean;
|