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,221 @@
|
|
|
1
|
+
//#region src/oauth/authorizationServer.ts
|
|
2
|
+
/**
|
|
3
|
+
* Rôle **serveur d'autorisation** — RFC 8414, les deux faces.
|
|
4
|
+
*
|
|
5
|
+
* On LIT les métadonnées d'un émetteur tiers (pour découvrir où sont ses clés)
|
|
6
|
+
* et on PUBLIE les siennes (pour qu'un tiers découvre les nôtres). Les deux
|
|
7
|
+
* faces partagent la même règle de composition de chemin ; les séparer les
|
|
8
|
+
* ferait dériver en silence — un lecteur sondant là où l'émetteur ne sert pas
|
|
9
|
+
* ne produit qu'un `404`, que chacun interprète comme « pas d'autorisation
|
|
10
|
+
* ici ». Ici, la publication est la source et la lecture en dérive.
|
|
11
|
+
*
|
|
12
|
+
* Ce fichier ne parle à personne : il compose des URL, juge un document reçu et
|
|
13
|
+
* compose un document à servir. C'est délibéré — les règles qui comptent
|
|
14
|
+
* (l'ordre des points bien connus, l'égalité stricte de l'émetteur, le refus
|
|
15
|
+
* d'un `jwks_uri` douteux) sont exactement celles qu'on n'éprouverait jamais si
|
|
16
|
+
* elles vivaient au milieu d'un appel réseau.
|
|
17
|
+
*
|
|
18
|
+
* ⚠️ Volontairement au CŒUR, et non dans `@nodefony/security` : le module qui
|
|
19
|
+
* expose les routes (`@nodefony/framework`) n'importe jamais `security`, et le
|
|
20
|
+
* chemin bien connu doit rester écrit UNE fois pour les deux.
|
|
21
|
+
*
|
|
22
|
+
* @see references/rfc/ietf/rfc8414.txt
|
|
23
|
+
* @see references/mcp-2026-07-28/spec/basic/authorization/authorization-server-discovery.mdx
|
|
24
|
+
*/
|
|
25
|
+
/** Suffixe bien connu des métadonnées d'un serveur d'autorisation (RFC 8414 §3). */
|
|
26
|
+
const WELL_KNOWN_OAUTH = "/.well-known/oauth-authorization-server";
|
|
27
|
+
/** Suffixe bien connu d'OpenID Connect Discovery 1.0 (§4). */
|
|
28
|
+
const WELL_KNOWN_OIDC = "/.well-known/openid-configuration";
|
|
29
|
+
/**
|
|
30
|
+
* Chemin conventionnel où Nodefony publie son jeu de clés publiques.
|
|
31
|
+
*
|
|
32
|
+
* Le choix est LIBRE — un client ne le devine pas, il le lit dans le champ
|
|
33
|
+
* `jwks_uri` du document de métadonnées. Deux raisons de le placer sous
|
|
34
|
+
* `.well-known` quand même : c'est un espace réservé (RFC 8615), donc aucune
|
|
35
|
+
* collision possible avec les routes de l'application ; et il ne comporte pas
|
|
36
|
+
* de segment `api`, qui rangerait la route dans l'aire du pare-feu — or un jeu
|
|
37
|
+
* de clés doit être lisible SANS authentification, sinon il ne sert à rien.
|
|
38
|
+
*/
|
|
39
|
+
const JWKS_PATH = "/.well-known/jwks.json";
|
|
40
|
+
/**
|
|
41
|
+
* Normalise et contrôle un identifiant d'émetteur (RFC 8414 §2).
|
|
42
|
+
*
|
|
43
|
+
* La RFC est explicite : c'est une URL **en `https`**, « with no query or
|
|
44
|
+
* fragment components ». Les trois refus ci-dessous ne sont donc pas du zèle —
|
|
45
|
+
* un émetteur porteur d'une requête ou d'un fragment ne peut pas servir à
|
|
46
|
+
* composer une URL bien connue par insertion, et la comparaison d'égalité
|
|
47
|
+
* stricte exigée par le §3.3 deviendrait un tirage au sort.
|
|
48
|
+
*
|
|
49
|
+
* `http` est refusé y compris en développement : les clés de signature arrivent
|
|
50
|
+
* par ce canal, et un jeu de clés substitué en transit signe n'importe quel
|
|
51
|
+
* jeton. Pour éprouver le mécanisme sans TLS, on injecte une implémentation de
|
|
52
|
+
* `fetch` — pas un émetteur en clair.
|
|
53
|
+
*
|
|
54
|
+
* @param raw - identifiant tel qu'écrit en configuration
|
|
55
|
+
* @returns l'émetteur normalisé, sans barre oblique terminale
|
|
56
|
+
* @throws Error si l'identifiant ne peut pas servir d'émetteur
|
|
57
|
+
*/
|
|
58
|
+
function canonicalIssuer(raw) {
|
|
59
|
+
let url;
|
|
60
|
+
try {
|
|
61
|
+
url = new URL(raw);
|
|
62
|
+
} catch {
|
|
63
|
+
throw new Error(`émetteur invalide : « ${raw} » — une URL absolue est attendue (ex. « https://auth.example.com/realms/mon-royaume »).`);
|
|
64
|
+
}
|
|
65
|
+
if (url.protocol !== "https:") throw new Error(`émetteur invalide : « ${raw} » — la RFC 8414 §2 exige le schéma https (les clés de signature transitent par ce canal).`);
|
|
66
|
+
if (url.search || url.hash) throw new Error(`émetteur invalide : « ${raw} » — la RFC 8414 §2 interdit une requête ou un fragment dans un identifiant d'émetteur.`);
|
|
67
|
+
const composed = `${url.origin}${url.pathname}`;
|
|
68
|
+
return composed.endsWith("/") ? composed.slice(0, -1) : composed;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Compose le CHEMIN où PUBLIER ses métadonnées (RFC 8414 §3.1).
|
|
72
|
+
*
|
|
73
|
+
* La règle est une **insertion**, pas une concaténation : le suffixe bien connu
|
|
74
|
+
* se place entre l'hôte et le chemin de l'émetteur, « any terminating "/" MUST
|
|
75
|
+
* be removed before inserting ». Un émetteur porteur d'un chemin
|
|
76
|
+
* (multi-tenant : « Using path components enables supporting multiple issuers
|
|
77
|
+
* per host ») se publie donc SOUS ce chemin — servir à la racine reviendrait à
|
|
78
|
+
* servir un document que personne ne demande.
|
|
79
|
+
*
|
|
80
|
+
* C'est cette fonction qui fait autorité : {@link issuerMetadataUrls}, côté
|
|
81
|
+
* lecteur, en dérive. Les deux faces ne peuvent donc pas diverger.
|
|
82
|
+
*
|
|
83
|
+
* @param issuer - identifiant d'émetteur (canonique ou non)
|
|
84
|
+
* @returns le chemin absolu à servir en `GET`
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* ```ts
|
|
88
|
+
* authorizationServerMetadataPath("https://app.example");
|
|
89
|
+
* // → "/.well-known/oauth-authorization-server"
|
|
90
|
+
* authorizationServerMetadataPath("https://app.example/tenant1");
|
|
91
|
+
* // → "/.well-known/oauth-authorization-server/tenant1"
|
|
92
|
+
* ```
|
|
93
|
+
*/
|
|
94
|
+
function authorizationServerMetadataPath(issuer) {
|
|
95
|
+
const { pathname } = new URL(canonicalIssuer(issuer));
|
|
96
|
+
return pathname === "/" ? WELL_KNOWN_OAUTH : `${WELL_KNOWN_OAUTH}${pathname}`;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Compose, dans l'ORDRE NORMATIF, les URL où chercher les métadonnées.
|
|
100
|
+
*
|
|
101
|
+
* L'ordre n'est pas une préférence de goût : la spécification impose d'essayer
|
|
102
|
+
* plusieurs points, et le premier document valide gagne. Un émetteur avec
|
|
103
|
+
* chemin (multi-tenant) se découvre par **insertion** — placer le suffixe en
|
|
104
|
+
* queue interrogerait le tenant, pas le serveur ; un émetteur sans chemin n'a
|
|
105
|
+
* que deux formes possibles.
|
|
106
|
+
*
|
|
107
|
+
* La première URL est celle que {@link authorizationServerMetadataPath} sert :
|
|
108
|
+
* c'est ce qui garantit qu'une application Nodefony est découvrable par une
|
|
109
|
+
* autre application Nodefony.
|
|
110
|
+
*
|
|
111
|
+
* @param issuer - émetteur déjà normalisé par {@link canonicalIssuer}
|
|
112
|
+
* @returns les URL à essayer, dans l'ordre
|
|
113
|
+
*
|
|
114
|
+
* @example
|
|
115
|
+
* ```ts
|
|
116
|
+
* issuerMetadataUrls("https://auth.example.com/tenant1");
|
|
117
|
+
* // → [".../.well-known/oauth-authorization-server/tenant1",
|
|
118
|
+
* // ".../.well-known/openid-configuration/tenant1",
|
|
119
|
+
* // ".../tenant1/.well-known/openid-configuration"]
|
|
120
|
+
* ```
|
|
121
|
+
*/
|
|
122
|
+
function issuerMetadataUrls(issuer) {
|
|
123
|
+
const url = new URL(issuer);
|
|
124
|
+
const path = url.pathname === "/" ? "" : url.pathname;
|
|
125
|
+
const oauth = `${url.origin}${authorizationServerMetadataPath(issuer)}`;
|
|
126
|
+
if (path === "") return [oauth, `${url.origin}${WELL_KNOWN_OIDC}`];
|
|
127
|
+
return [
|
|
128
|
+
oauth,
|
|
129
|
+
`${url.origin}${WELL_KNOWN_OIDC}${path}`,
|
|
130
|
+
`${url.origin}${path}${WELL_KNOWN_OIDC}`
|
|
131
|
+
];
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Juge un document de métadonnées reçu.
|
|
135
|
+
*
|
|
136
|
+
* ⭐ **L'égalité stricte de l'émetteur est la garde centrale** (RFC 8414 §3.3,
|
|
137
|
+
* OIDC Discovery §4.3) : sans elle, un document servi par `attaquant.example`
|
|
138
|
+
* qui se déclare `"issuer": "https://honnête.example"` serait accepté, et ses
|
|
139
|
+
* clés vérifieraient des jetons au nom de l'émetteur légitime. La comparaison
|
|
140
|
+
* est faite sur la forme canonique des DEUX côtés — une barre oblique
|
|
141
|
+
* terminale ne doit ni faire échouer un document valide, ni servir à faire
|
|
142
|
+
* passer deux identifiants pour un seul.
|
|
143
|
+
*
|
|
144
|
+
* Le `jwks_uri` est exigé en `https` mais **pas sur l'origine de l'émetteur** :
|
|
145
|
+
* des émetteurs majeurs servent légitimement leurs clés ailleurs (Google publie
|
|
146
|
+
* `accounts.google.com` et ses clés sur `www.googleapis.com`). La garde qui
|
|
147
|
+
* compte est en amont — le document vient d'un émetteur déclaré en
|
|
148
|
+
* configuration, jamais d'une valeur lue dans un jeton.
|
|
149
|
+
*
|
|
150
|
+
* @param document - le document tel que reçu (JSON déjà analysé)
|
|
151
|
+
* @param expectedIssuer - émetteur canonique utilisé pour composer l'URL
|
|
152
|
+
* @returns les deux champs retenus
|
|
153
|
+
* @throws Error si le document ne peut pas être utilisé
|
|
154
|
+
*/
|
|
155
|
+
function validateIssuerMetadata(document, expectedIssuer) {
|
|
156
|
+
if (typeof document !== "object" || document === null) throw new Error("métadonnées d'émetteur : document JSON attendu.");
|
|
157
|
+
const doc = document;
|
|
158
|
+
const issuer = doc.issuer;
|
|
159
|
+
if (typeof issuer !== "string" || issuer.length === 0) throw new Error("métadonnées d'émetteur : champ `issuer` absent.");
|
|
160
|
+
let declared;
|
|
161
|
+
try {
|
|
162
|
+
declared = canonicalIssuer(issuer);
|
|
163
|
+
} catch {
|
|
164
|
+
throw new Error(`métadonnées d'émetteur : « ${issuer} » n'est pas un identifiant valide.`);
|
|
165
|
+
}
|
|
166
|
+
if (declared !== canonicalIssuer(expectedIssuer)) throw new Error(`métadonnées d'émetteur : le document déclare « ${declared} » alors qu'il a été demandé à « ${expectedIssuer} ». RFC 8414 §3.3 impose l'égalité — un document qui parle au nom d'un autre est rejeté.`);
|
|
167
|
+
const jwksUri = doc.jwks_uri;
|
|
168
|
+
if (typeof jwksUri !== "string" || jwksUri.length === 0) throw new Error("métadonnées d'émetteur : champ `jwks_uri` absent — sans jeu de clés, aucune signature ne peut être vérifiée.");
|
|
169
|
+
let keys;
|
|
170
|
+
try {
|
|
171
|
+
keys = new URL(jwksUri);
|
|
172
|
+
} catch {
|
|
173
|
+
throw new Error(`métadonnées d'émetteur : \`jwks_uri\` « ${jwksUri} » n'est pas une URL.`);
|
|
174
|
+
}
|
|
175
|
+
if (keys.protocol !== "https:") throw new Error(`métadonnées d'émetteur : \`jwks_uri\` « ${jwksUri} » doit être en https.`);
|
|
176
|
+
return {
|
|
177
|
+
issuer: declared,
|
|
178
|
+
jwksUri: keys.href
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Compose le document de métadonnées d'émetteur.
|
|
183
|
+
*
|
|
184
|
+
* @param input - ce que l'application déclare d'elle-même
|
|
185
|
+
* @returns le document, prêt à sérialiser
|
|
186
|
+
* @throws Error si l'émetteur ne peut pas servir d'identifiant RFC 8414 §2, ou
|
|
187
|
+
* si le jeu de clés n'est pas joignable en `https`
|
|
188
|
+
*/
|
|
189
|
+
function buildAuthorizationServerMetadata(input) {
|
|
190
|
+
const issuer = canonicalIssuer(input.issuer);
|
|
191
|
+
const jwksUri = new URL(input.jwksPath ?? "/.well-known/jwks.json", `${issuer}/`);
|
|
192
|
+
if (jwksUri.protocol !== "https:") throw new Error(`métadonnées d'émetteur : \`jwks_uri\` « ${jwksUri.href} » doit être en https (RFC 8414 §2).`);
|
|
193
|
+
return {
|
|
194
|
+
issuer,
|
|
195
|
+
jwks_uri: jwksUri.href,
|
|
196
|
+
response_types_supported: [],
|
|
197
|
+
grant_types_supported: []
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Extrait les scopes accordés d'une charge utile de jeton d'accès.
|
|
202
|
+
*
|
|
203
|
+
* Deux formes coexistent dans le parc réel : `scope`, chaîne séparée par des
|
|
204
|
+
* espaces (RFC 8693 §4.1, RFC 9068 §2.2 — la forme normalisée), et `scp`,
|
|
205
|
+
* tableau, qu'emploient plusieurs fournisseurs majeurs. Ignorer la seconde
|
|
206
|
+
* ferait apparaître comme « sans aucun droit » des jetons parfaitement valides,
|
|
207
|
+
* et pousserait à contourner la vérification des scopes plutôt qu'à la
|
|
208
|
+
* corriger.
|
|
209
|
+
*
|
|
210
|
+
* @param payload - charge utile d'un jeton DÉJÀ vérifié
|
|
211
|
+
* @returns les scopes, éventuellement vides — jamais `undefined`
|
|
212
|
+
*/
|
|
213
|
+
function extractScopes(payload) {
|
|
214
|
+
const scope = payload.scope;
|
|
215
|
+
if (typeof scope === "string") return scope.split(" ").filter((s) => s.length > 0);
|
|
216
|
+
const scp = payload.scp;
|
|
217
|
+
if (Array.isArray(scp)) return scp.filter((s) => typeof s === "string" && s.length > 0);
|
|
218
|
+
return [];
|
|
219
|
+
}
|
|
220
|
+
//#endregion
|
|
221
|
+
export { JWKS_PATH, authorizationServerMetadataPath, buildAuthorizationServerMetadata, canonicalIssuer, extractScopes, issuerMetadataUrls, validateIssuerMetadata };
|
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
import { readBearerHeader } from "../runtime/bearer.js";
|
|
2
|
+
//#region src/oauth/protectedResource.ts
|
|
3
|
+
/**
|
|
4
|
+
* Rôle **serveur de ressource** OAuth 2.1 — publier ce qu'on protège, et refuser
|
|
5
|
+
* en disant où obtenir un jeton.
|
|
6
|
+
*
|
|
7
|
+
* ## Ce que ce fichier n'est pas
|
|
8
|
+
*
|
|
9
|
+
* Il n'est **pas** un serveur d'autorisation, et il n'y en a jamais eu besoin :
|
|
10
|
+
* délivrer des jetons est un rôle distinct, que les spécifications placent
|
|
11
|
+
* explicitement hors du serveur de ressource (« may be hosted with the resource
|
|
12
|
+
* server **or a separate entity** »). Avoir écrit l'inverse a servi d'excuse à ne
|
|
13
|
+
* rien faire pendant tout un cycle — le reste à faire était un ordre de grandeur
|
|
14
|
+
* plus petit que ce qu'on s'était raconté.
|
|
15
|
+
*
|
|
16
|
+
* Il n'est pas non plus lié au **Model Context Protocol**, qui n'en est que le
|
|
17
|
+
* premier consommateur. Rien ici ne connaît JSON-RPC, les outils ou le
|
|
18
|
+
* catalogue : une ressource, une audience, un jeton, un refus. C'est ce qui
|
|
19
|
+
* permettra à une porte agentique de production, ou à une API d'agents, de
|
|
20
|
+
* réutiliser ces briques sans qu'un protocole de développement ne déteigne sur
|
|
21
|
+
* elles.
|
|
22
|
+
*
|
|
23
|
+
* ## Plusieurs ressources dans une même application
|
|
24
|
+
*
|
|
25
|
+
* La RFC 9728 le prévoit par construction : le chemin de la ressource est
|
|
26
|
+
* **inséré** dans l'URL bien connue (§3.1 — « Using path components enables
|
|
27
|
+
* supporting multiple resources per host »). Une application peut donc protéger
|
|
28
|
+
* `/nodefony/mcp` et, demain, une autre porte, chacune avec ses propres
|
|
29
|
+
* serveurs d'autorisation, ses scopes et son audience — sans qu'aucune de ces
|
|
30
|
+
* fonctions change.
|
|
31
|
+
*
|
|
32
|
+
* @see references/rfc/ietf/rfc9728.txt — métadonnées de la ressource protégée
|
|
33
|
+
* @see references/rfc/ietf/rfc6750.txt — présentation du jeton, `WWW-Authenticate`
|
|
34
|
+
* @see references/rfc/ietf/rfc8707.txt — l'audience, qui LIE un jeton à CE serveur
|
|
35
|
+
*/
|
|
36
|
+
/** Préfixe bien connu des métadonnées d'une ressource protégée (RFC 9728 §3). */
|
|
37
|
+
const WELL_KNOWN = "/.well-known/oauth-protected-resource";
|
|
38
|
+
/**
|
|
39
|
+
* Normalise et contrôle une URI canonique de ressource (RFC 8707 §2).
|
|
40
|
+
*
|
|
41
|
+
* Trois refus, tous vécus comme des sources d'erreur silencieuse ailleurs :
|
|
42
|
+
* l'absence de schéma (une audience relative ne se compare à rien), un fragment
|
|
43
|
+
* (interdit — il ne voyage jamais jusqu'au serveur, donc deux URI distinctes
|
|
44
|
+
* seraient reçues identiques), et un schéma non `http(s)`.
|
|
45
|
+
*
|
|
46
|
+
* La barre oblique terminale est retirée : les deux formes sont des URI
|
|
47
|
+
* valides, mais l'audience se compare par **chaîne exacte** — publier une forme
|
|
48
|
+
* et valider l'autre produit un refus que rien n'explique.
|
|
49
|
+
*
|
|
50
|
+
* @param raw - URI telle qu'écrite en configuration
|
|
51
|
+
* @returns l'URI canonique, sans barre terminale
|
|
52
|
+
* @throws Error si l'URI ne peut pas servir d'audience
|
|
53
|
+
*/
|
|
54
|
+
function canonicalResourceUri(raw) {
|
|
55
|
+
let url;
|
|
56
|
+
try {
|
|
57
|
+
url = new URL(raw);
|
|
58
|
+
} catch {
|
|
59
|
+
throw new Error(`URI de ressource invalide : « ${raw} » — une URI absolue est attendue (ex. « https://mon-app.example/nodefony/mcp »).`);
|
|
60
|
+
}
|
|
61
|
+
if (url.protocol !== "https:" && url.protocol !== "http:") throw new Error(`URI de ressource invalide : schéma « ${url.protocol} » — http(s) attendu.`);
|
|
62
|
+
if (url.hash) throw new Error(`URI de ressource invalide : « ${raw} » porte un fragment, que la RFC 8707 §2 interdit (il n'atteint jamais le serveur).`);
|
|
63
|
+
const composed = `${url.origin}${url.pathname}${url.search}`;
|
|
64
|
+
return composed.endsWith("/") && url.pathname !== "/" ? composed.slice(0, -1) : composed.replace(/\/$/, "");
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Compose le CHEMIN où publier les métadonnées, à partir de l'URI de la
|
|
68
|
+
* ressource (RFC 9728 §3.1).
|
|
69
|
+
*
|
|
70
|
+
* La règle est une insertion, pas une concaténation : le suffixe bien connu se
|
|
71
|
+
* place **entre l'hôte et le chemin** de la ressource. Une application qui
|
|
72
|
+
* publierait `…/nodefony/mcp/.well-known/…` servirait un document que personne
|
|
73
|
+
* ne demande jamais.
|
|
74
|
+
*
|
|
75
|
+
* @param resource - URI canonique de la ressource (ou son seul chemin)
|
|
76
|
+
* @returns le chemin absolu à servir en `GET`
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* ```ts
|
|
80
|
+
* protectedResourceMetadataPath("https://app.example/nodefony/mcp");
|
|
81
|
+
* // → "/.well-known/oauth-protected-resource/nodefony/mcp"
|
|
82
|
+
* protectedResourceMetadataPath("https://app.example");
|
|
83
|
+
* // → "/.well-known/oauth-protected-resource"
|
|
84
|
+
* ```
|
|
85
|
+
*/
|
|
86
|
+
function protectedResourceMetadataPath(resource) {
|
|
87
|
+
let path = resource;
|
|
88
|
+
if (/^[a-z][a-z0-9+.-]*:\/\//i.test(resource)) {
|
|
89
|
+
const url = new URL(resource);
|
|
90
|
+
path = `${url.pathname}${url.search}`;
|
|
91
|
+
}
|
|
92
|
+
if (path === "/" || path === "") return WELL_KNOWN;
|
|
93
|
+
const trimmed = path.endsWith("/") ? path.slice(0, -1) : path;
|
|
94
|
+
return `${WELL_KNOWN}${trimmed.startsWith("/") ? "" : "/"}${trimmed}`;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Compose l'URL ABSOLUE des métadonnées — celle qui part dans le défi.
|
|
98
|
+
*
|
|
99
|
+
* @param resource - URI canonique de la ressource
|
|
100
|
+
* @returns l'URL complète du document de métadonnées
|
|
101
|
+
*/
|
|
102
|
+
function protectedResourceMetadataUrl(resource) {
|
|
103
|
+
const canonical = canonicalResourceUri(resource);
|
|
104
|
+
const { origin } = new URL(canonical);
|
|
105
|
+
return `${origin}${protectedResourceMetadataPath(canonical)}`;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Compose le document de métadonnées.
|
|
109
|
+
*
|
|
110
|
+
* @param input - ce que l'application déclare de sa ressource
|
|
111
|
+
* @returns le document, prêt à sérialiser
|
|
112
|
+
* @throws Error si aucun serveur d'autorisation n'est déclaré, ou si l'URI de
|
|
113
|
+
* ressource ne peut pas servir d'audience
|
|
114
|
+
*/
|
|
115
|
+
function buildProtectedResourceMetadata(input) {
|
|
116
|
+
const servers = input.authorizationServers.filter((s) => typeof s === "string" && s.length > 0);
|
|
117
|
+
if (servers.length === 0) throw new Error("métadonnées de ressource protégée : aucun serveur d'autorisation déclaré. Un document sans `authorization_servers` ne mène nulle part — le client apprendrait qu'un jeton est requis sans jamais pouvoir en obtenir un.");
|
|
118
|
+
const metadata = {
|
|
119
|
+
resource: canonicalResourceUri(input.resource),
|
|
120
|
+
authorization_servers: [...servers],
|
|
121
|
+
bearer_methods_supported: ["header"]
|
|
122
|
+
};
|
|
123
|
+
if (input.scopesSupported && input.scopesSupported.length > 0) metadata.scopes_supported = [...input.scopesSupported];
|
|
124
|
+
if (input.resourceName) metadata.resource_name = input.resourceName;
|
|
125
|
+
if (input.resourceDocumentation) metadata.resource_documentation = input.resourceDocumentation;
|
|
126
|
+
return metadata;
|
|
127
|
+
}
|
|
128
|
+
/** Codes d'erreur d'un porteur — RFC 6750 §3.1. */
|
|
129
|
+
const BearerError = {
|
|
130
|
+
/**
|
|
131
|
+
* Requête mal formée (schéma inconnu, jeton absent après `Bearer`).
|
|
132
|
+
* La RFC veut **400**, pas 401 : rien n'a été présenté qu'on puisse juger.
|
|
133
|
+
*/
|
|
134
|
+
INVALID_REQUEST: "invalid_request",
|
|
135
|
+
/** Jeton expiré, révoqué, mal formé, ou d'une autre audience → **401**. */
|
|
136
|
+
INVALID_TOKEN: "invalid_token",
|
|
137
|
+
/** Identité prouvée, droits insuffisants → **403**. */
|
|
138
|
+
INSUFFICIENT_SCOPE: "insufficient_scope"
|
|
139
|
+
};
|
|
140
|
+
/**
|
|
141
|
+
* Compose l'en-tête `WWW-Authenticate` d'un refus.
|
|
142
|
+
*
|
|
143
|
+
* ⭐ **C'est cet en-tête qui rend l'autorisation apprenable.** Sans lui, un
|
|
144
|
+
* refus est un mur : le client ignore qu'un jeton existe, où le demander et pour
|
|
145
|
+
* quels droits. Avec `resource_metadata`, il remonte seul jusqu'au serveur
|
|
146
|
+
* d'autorisation — c'est le seul mécanisme normalisé pour cela.
|
|
147
|
+
*
|
|
148
|
+
* 🔴 **Le code d'erreur est OMIS quand la requête ne portait aucune information
|
|
149
|
+
* d'authentification** — la RFC 6750 §3 le demande explicitement (« the resource
|
|
150
|
+
* server SHOULD NOT include an error code or other error information »). Un
|
|
151
|
+
* `invalid_token` sur une requête sans jeton ferait croire au client que son
|
|
152
|
+
* jeton est mauvais, et le pousserait à le renouveler en boucle.
|
|
153
|
+
*
|
|
154
|
+
* @param challenge - de quoi composer le défi
|
|
155
|
+
* @returns la valeur de l'en-tête `WWW-Authenticate`
|
|
156
|
+
*/
|
|
157
|
+
function buildBearerChallenge(challenge) {
|
|
158
|
+
const parts = [`resource_metadata="${challenge.resourceMetadataUrl}"`];
|
|
159
|
+
if (challenge.scopes && challenge.scopes.length > 0) parts.push(`scope="${challenge.scopes.join(" ")}"`);
|
|
160
|
+
if (challenge.error) parts.push(`error="${challenge.error}"`);
|
|
161
|
+
if (challenge.description) parts.push(`error_description="${sanitizeDescription(challenge.description)}"`);
|
|
162
|
+
return `Bearer ${parts.join(", ")}`;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Restreint une description à ce que la RFC 6750 §3 autorise.
|
|
166
|
+
*
|
|
167
|
+
* La grammaire y est explicite — `%x20-21 / %x23-5B / %x5D-7E` — soit l'ASCII
|
|
168
|
+
* imprimable **sans** guillemet ni antislash. Ce n'est pas une coquetterie : un
|
|
169
|
+
* en-tête HTTP n'est pas de l'UTF-8, et un simple accent y ressort en mojibake
|
|
170
|
+
* chez le client (constaté : « jeton refusé » arrivait en « jeton refus? »).
|
|
171
|
+
* Un antislash, lui, casserait carrément la grammaire de la chaîne citée.
|
|
172
|
+
*
|
|
173
|
+
* Le filtrage vit ICI, au point de composition, et non dans chaque message :
|
|
174
|
+
* autrement le prochain texte accentué reproduirait le défaut, et personne ne
|
|
175
|
+
* le verrait — un en-tête abîmé ne fait échouer aucun test qui ne le lit pas.
|
|
176
|
+
*
|
|
177
|
+
* @param raw - description telle qu'écrite par l'appelant
|
|
178
|
+
* @returns la description réduite au jeu de caractères autorisé
|
|
179
|
+
*/
|
|
180
|
+
function sanitizeDescription(raw) {
|
|
181
|
+
let out = "";
|
|
182
|
+
for (const char of raw.replace(/"/g, "'")) {
|
|
183
|
+
const code = char.codePointAt(0) ?? 0;
|
|
184
|
+
if (code >= 32 && code <= 33 || code >= 35 && code <= 91 || code >= 93 && code <= 126) {
|
|
185
|
+
out += char;
|
|
186
|
+
continue;
|
|
187
|
+
}
|
|
188
|
+
out += " ";
|
|
189
|
+
}
|
|
190
|
+
return out.replace(/ {2,}/g, " ").trim();
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Nom sous lequel un {@link IAccessTokenVerifier} se pose dans le conteneur.
|
|
194
|
+
*
|
|
195
|
+
* ⭐ **La constante vit ICI, avec le contrat, et pas ailleurs.** Le nom est le
|
|
196
|
+
* point de rendez-vous entre deux paquets qui ne se connaissent pas : celui qui
|
|
197
|
+
* POSE le vérificateur (la sécurité, qui porte la cryptographie) et ceux qui le
|
|
198
|
+
* LISENT (toute porte protégée). Écrit en dur de chaque côté, il vaut jusqu'au
|
|
199
|
+
* jour où l'un des deux le renomme — un littéral ne casse aucune compilation,
|
|
200
|
+
* et la porte cherche alors un service que personne ne pose. Importé, un
|
|
201
|
+
* renommage devient une erreur de type.
|
|
202
|
+
*
|
|
203
|
+
* Le nom est **générique** à dessein : le contrat prend l'audience en
|
|
204
|
+
* paramètre, donc une seule implémentation sert autant de ressources protégées
|
|
205
|
+
* que l'application en publie (RFC 9728 §3.1).
|
|
206
|
+
*/
|
|
207
|
+
const ACCESS_TOKEN_VERIFIER = "accessTokenVerifier";
|
|
208
|
+
/**
|
|
209
|
+
* Décide du sort d'une requête d'après l'en-tête `Authorization`.
|
|
210
|
+
*
|
|
211
|
+
* **Fonction pure** (hors l'appel au vérificateur) : elle ne touche ni au
|
|
212
|
+
* socket, ni au conteneur, ni à l'horloge — d'où le fait que chacun de ses
|
|
213
|
+
* verdicts, statuts et en-têtes compris, s'éprouve sans démarrer de serveur.
|
|
214
|
+
*
|
|
215
|
+
* @param authorizationHeader - valeur brute de l'en-tête, ou rien
|
|
216
|
+
* @param policy - ce que la ressource exige
|
|
217
|
+
* @param verify - ce qui sait valider un jeton, s'il y a quelque chose
|
|
218
|
+
* @returns le verdict à appliquer
|
|
219
|
+
*/
|
|
220
|
+
async function authorizeProtectedResource(authorizationHeader, policy, verify) {
|
|
221
|
+
const lu = readBearerHeader(authorizationHeader);
|
|
222
|
+
if (lu.kind === "absent" || lu.kind === "empty") {
|
|
223
|
+
if (policy.allowAnonymous) return { outcome: "anonymous" };
|
|
224
|
+
return {
|
|
225
|
+
outcome: "challenge",
|
|
226
|
+
status: 401,
|
|
227
|
+
wwwAuthenticate: buildBearerChallenge({
|
|
228
|
+
resourceMetadataUrl: policy.metadataUrl,
|
|
229
|
+
scopes: policy.scopes
|
|
230
|
+
})
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
if (lu.kind === "other") return {
|
|
234
|
+
outcome: "challenge",
|
|
235
|
+
status: 400,
|
|
236
|
+
wwwAuthenticate: buildBearerChallenge({
|
|
237
|
+
resourceMetadataUrl: policy.metadataUrl,
|
|
238
|
+
scopes: policy.scopes,
|
|
239
|
+
error: BearerError.INVALID_REQUEST,
|
|
240
|
+
description: "malformed Authorization header, Bearer scheme expected"
|
|
241
|
+
})
|
|
242
|
+
};
|
|
243
|
+
const token = lu.token;
|
|
244
|
+
if (!verify) return { outcome: "unverifiable" };
|
|
245
|
+
let principal = null;
|
|
246
|
+
try {
|
|
247
|
+
for (const audience of [policy.resource, ...policy.acceptedResources ?? []]) {
|
|
248
|
+
principal = await verify(token, audience);
|
|
249
|
+
if (principal !== null) break;
|
|
250
|
+
}
|
|
251
|
+
} catch (error) {
|
|
252
|
+
return {
|
|
253
|
+
outcome: "unverifiable",
|
|
254
|
+
why: error.message
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
if (principal === null) {
|
|
258
|
+
if (policy.allowAnonymous) return {
|
|
259
|
+
outcome: "anonymous",
|
|
260
|
+
rejected: true
|
|
261
|
+
};
|
|
262
|
+
return {
|
|
263
|
+
outcome: "challenge",
|
|
264
|
+
status: 401,
|
|
265
|
+
wwwAuthenticate: buildBearerChallenge({
|
|
266
|
+
resourceMetadataUrl: policy.metadataUrl,
|
|
267
|
+
scopes: policy.scopes,
|
|
268
|
+
error: BearerError.INVALID_TOKEN,
|
|
269
|
+
description: "token rejected"
|
|
270
|
+
})
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
return {
|
|
274
|
+
outcome: "authenticated",
|
|
275
|
+
principal
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* L'appelant présente-t-il TOUS les scopes exigés ?
|
|
280
|
+
*
|
|
281
|
+
* « Tous », et pas « au moins un » : un scope borne un pouvoir, et les cumuler
|
|
282
|
+
* par disjonction reviendrait à accorder le plus large de la liste.
|
|
283
|
+
*
|
|
284
|
+
* @param granted - scopes accordés au porteur
|
|
285
|
+
* @param required - scopes exigés par l'opération
|
|
286
|
+
* @returns les scopes MANQUANTS — tableau vide si rien ne manque
|
|
287
|
+
*/
|
|
288
|
+
function missingScopes(granted, required) {
|
|
289
|
+
if (required.length === 0) return [];
|
|
290
|
+
return required.filter((s) => !granted.includes(s));
|
|
291
|
+
}
|
|
292
|
+
//#endregion
|
|
293
|
+
export { ACCESS_TOKEN_VERIFIER, BearerError, authorizeProtectedResource, buildBearerChallenge, buildProtectedResourceMetadata, canonicalResourceUri, missingScopes, protectedResourceMetadataPath, protectedResourceMetadataUrl };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
//#region src/realtime/IRealtimeTransport.ts
|
|
2
|
+
/**
|
|
3
|
+
* IRealtimeTransport — le SEUL maillon qui diffère client/serveur.
|
|
4
|
+
*
|
|
5
|
+
* Le protocole ({@link JsonRpcPeer}) et les « smarts » (stats, pub/sub) sont
|
|
6
|
+
* isomorphes ; seule la façon dont les **octets** entrent et sortent change. On
|
|
7
|
+
* isole donc le transport derrière cette interface : un même endpoint compose
|
|
8
|
+
* N transports.
|
|
9
|
+
*
|
|
10
|
+
* Implémentations :
|
|
11
|
+
* - `BrowserWsTransport` (navigateur, `WebSocket` + reconnect géré au-dessus)
|
|
12
|
+
* - `WsConnectionTransport` (serveur, wrap d'une connexion `ws` — P… RealtimeController)
|
|
13
|
+
* - futurs P13 : `Tcp`/`Udp`/`Redis`/`SipTransport` (RealtimeService / IRealtimeHub)
|
|
14
|
+
*
|
|
15
|
+
* Les états suivent les constantes `WebSocket` (0..3) pour rester universels —
|
|
16
|
+
* voir {@link TransportState}.
|
|
17
|
+
*
|
|
18
|
+
* ── Sens des flux ──
|
|
19
|
+
* Sortant : `send` (frame brute déjà sérialisée), `close`.
|
|
20
|
+
* Entrant : le owner branche `onMessage` (chaque frame reçue) ; `onOpen`/`onClose`/
|
|
21
|
+
* `onError` pilotent le cycle de vie (l'orchestration reconnect/heartbeat vit
|
|
22
|
+
* AU-DESSUS, dans l'endpoint — le transport reste « bête »).
|
|
23
|
+
*/
|
|
24
|
+
/** États d'un transport — alignés sur les constantes `WebSocket`. */
|
|
25
|
+
const TransportState = {
|
|
26
|
+
CONNECTING: 0,
|
|
27
|
+
OPEN: 1,
|
|
28
|
+
CLOSING: 2,
|
|
29
|
+
CLOSED: 3
|
|
30
|
+
};
|
|
31
|
+
//#endregion
|
|
32
|
+
export { TransportState };
|