@nodefony/framework 10.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/LICENSE +544 -0
  2. package/README.md +50 -0
  3. package/dist/_virtual/_@oxc-project_runtime@0.148.0/helpers/esm/decorate.js +9 -0
  4. package/dist/_virtual/_@oxc-project_runtime@0.148.0/helpers/esm/decorateMetadata.js +6 -0
  5. package/dist/index.js +211 -0
  6. package/dist/nodefony/config/config.js +61 -0
  7. package/dist/nodefony/config/defineModuleConfig.js +36 -0
  8. package/dist/nodefony/controller/AdminApiController.js +163 -0
  9. package/dist/nodefony/controller/ApiKeyController.js +151 -0
  10. package/dist/nodefony/controller/BenchController.js +132 -0
  11. package/dist/nodefony/controller/IssuerMetadataController.js +148 -0
  12. package/dist/nodefony/controller/OAuth2Controller.js +133 -0
  13. package/dist/nodefony/controller/ProtectedResourceMetadataController.js +221 -0
  14. package/dist/nodefony/controller/SessionAuthController.js +141 -0
  15. package/dist/nodefony/controller/TokenAuthController.js +113 -0
  16. package/dist/nodefony/controller/TotpController.js +129 -0
  17. package/dist/nodefony/controller/WebAuthnController.js +242 -0
  18. package/dist/nodefony/controller/oauthAuthority.js +74 -0
  19. package/dist/nodefony/decorators/routerDecorators.js +967 -0
  20. package/dist/nodefony/interfaces/IAdminBroker.js +1 -0
  21. package/dist/nodefony/interfaces/IController.js +1 -0
  22. package/dist/nodefony/interfaces/IIdempotencyStore.js +1 -0
  23. package/dist/nodefony/interfaces/IResolver.js +1 -0
  24. package/dist/nodefony/interfaces/IRoute.js +1 -0
  25. package/dist/nodefony/interfaces/index.js +1 -0
  26. package/dist/nodefony/service/AdminBroker.js +106 -0
  27. package/dist/nodefony/service/Eta.js +68 -0
  28. package/dist/nodefony/service/IdempotencyStore.js +136 -0
  29. package/dist/nodefony/service/router.js +243 -0
  30. package/dist/nodefony/src/Controller.js +515 -0
  31. package/dist/nodefony/src/FrameworkAdminApi.js +268 -0
  32. package/dist/nodefony/src/KernelAdminApi.js +1243 -0
  33. package/dist/nodefony/src/PlaygroundAdminApi.js +97 -0
  34. package/dist/nodefony/src/RedisIdempotencyStore.js +254 -0
  35. package/dist/nodefony/src/Resolver.js +416 -0
  36. package/dist/nodefony/src/ResourceController.js +148 -0
  37. package/dist/nodefony/src/Route.js +476 -0
  38. package/dist/nodefony/src/SyslogAdminApi.js +466 -0
  39. package/dist/nodefony/src/Template.js +15 -0
  40. package/dist/nodefony/src/configMutation.js +186 -0
  41. package/dist/nodefony/src/docsReader.js +929 -0
  42. package/dist/nodefony/src/idempotency.js +137 -0
  43. package/dist/nodefony/src/idempotencyGc.js +32 -0
  44. package/dist/nodefony/src/idempotencyStoreRegistry.js +36 -0
  45. package/dist/nodefony/src/scopeCatalog.js +40 -0
  46. package/dist/nodefony/src/syslogFilters.js +51 -0
  47. package/dist/types/index.d.ts +96 -0
  48. package/dist/types/nodefony/config/config.d.ts +41 -0
  49. package/dist/types/nodefony/config/defineModuleConfig.d.ts +27 -0
  50. package/dist/types/nodefony/controller/AdminApiController.d.ts +70 -0
  51. package/dist/types/nodefony/controller/ApiKeyController.d.ts +49 -0
  52. package/dist/types/nodefony/controller/BenchController.d.ts +45 -0
  53. package/dist/types/nodefony/controller/IssuerMetadataController.d.ts +86 -0
  54. package/dist/types/nodefony/controller/OAuth2Controller.d.ts +81 -0
  55. package/dist/types/nodefony/controller/ProtectedResourceMetadataController.d.ts +147 -0
  56. package/dist/types/nodefony/controller/SessionAuthController.d.ts +74 -0
  57. package/dist/types/nodefony/controller/TokenAuthController.d.ts +56 -0
  58. package/dist/types/nodefony/controller/TotpController.d.ts +42 -0
  59. package/dist/types/nodefony/controller/WebAuthnController.d.ts +123 -0
  60. package/dist/types/nodefony/controller/oauthAuthority.d.ts +54 -0
  61. package/dist/types/nodefony/decorators/routerDecorators.d.ts +632 -0
  62. package/dist/types/nodefony/interfaces/IAdminBroker.d.ts +79 -0
  63. package/dist/types/nodefony/interfaces/IController.d.ts +38 -0
  64. package/dist/types/nodefony/interfaces/IIdempotencyStore.d.ts +1 -0
  65. package/dist/types/nodefony/interfaces/IResolver.d.ts +25 -0
  66. package/dist/types/nodefony/interfaces/IRoute.d.ts +31 -0
  67. package/dist/types/nodefony/interfaces/index.d.ts +5 -0
  68. package/dist/types/nodefony/service/AdminBroker.d.ts +37 -0
  69. package/dist/types/nodefony/service/Eta.d.ts +25 -0
  70. package/dist/types/nodefony/service/IdempotencyStore.d.ts +45 -0
  71. package/dist/types/nodefony/service/router.d.ts +53 -0
  72. package/dist/types/nodefony/src/Controller.d.ts +193 -0
  73. package/dist/types/nodefony/src/FrameworkAdminApi.d.ts +35 -0
  74. package/dist/types/nodefony/src/KernelAdminApi.d.ts +71 -0
  75. package/dist/types/nodefony/src/PlaygroundAdminApi.d.ts +98 -0
  76. package/dist/types/nodefony/src/RedisIdempotencyStore.d.ts +104 -0
  77. package/dist/types/nodefony/src/Resolver.d.ts +165 -0
  78. package/dist/types/nodefony/src/ResourceController.d.ts +171 -0
  79. package/dist/types/nodefony/src/Route.d.ts +192 -0
  80. package/dist/types/nodefony/src/SyslogAdminApi.d.ts +38 -0
  81. package/dist/types/nodefony/src/Template.d.ts +8 -0
  82. package/dist/types/nodefony/src/configMutation.d.ts +109 -0
  83. package/dist/types/nodefony/src/docsReader.d.ts +369 -0
  84. package/dist/types/nodefony/src/idempotency.d.ts +96 -0
  85. package/dist/types/nodefony/src/idempotencyGc.d.ts +30 -0
  86. package/dist/types/nodefony/src/idempotencyStoreRegistry.d.ts +59 -0
  87. package/dist/types/nodefony/src/scopeCatalog.d.ts +26 -0
  88. package/dist/types/nodefony/src/syslogFilters.d.ts +52 -0
  89. package/docs/admin.md +451 -0
  90. package/docs/controller.md +645 -0
  91. package/docs/decorateurs.md +845 -0
  92. package/docs/idempotence.md +741 -0
  93. package/docs/index.md +151 -0
  94. package/docs/routing.md +648 -0
  95. package/docs/templates.md +380 -0
  96. package/package.json +83 -0
@@ -0,0 +1,74 @@
1
+ //#region nodefony/controller/oauthAuthority.ts
2
+ /**
3
+ * Une seule règle : un document bien connu ne se sert QUE sur l'autorité dont
4
+ * il se réclame.
5
+ *
6
+ * Elle vaut pour les deux rôles OAuth que cette application peut tenir, et pour
7
+ * la même raison. Côté **émetteur** (RFC 8414 §3.3), le client DOIT rejeter un
8
+ * document dont l'`issuer` ne correspond pas à l'endroit où il l'a demandé.
9
+ * Côté **serveur de ressource** (RFC 9728 §3.3), il DOIT rejeter un document
10
+ * dont la `resource` ne correspond pas à l'URI de la ressource. Dans les deux
11
+ * cas, servir le document sur une autre autorité ne rend pas service au
12
+ * client : il le lit, le rejette, et **s'arrête là** — alors qu'un `404`
13
+ * l'aurait laissé continuer.
14
+ *
15
+ * 🔴 C'est exactement la faille qu'un vrai client MCP a trouvée en août : le
16
+ * document d'émetteur était servi sur TOUTE autorité, si bien qu'une sonde sur
17
+ * `http://localhost:5151` recevait le document de `https://localhost:5152` et
18
+ * déclarait la connexion en échec. Le banc de la veille testait le symptôme, pas
19
+ * la règle. Cette fonction est la règle, écrite une fois — la recopier dans
20
+ * chaque controller la ferait diverger au premier correctif.
21
+ *
22
+ * @see references/rfc/ietf/rfc8414.txt — métadonnées du serveur d'autorisation
23
+ * @see references/rfc/ietf/rfc9728.txt — métadonnées de la ressource protégée
24
+ */
25
+ /**
26
+ * La requête entre-t-elle par l'autorité dont ce document se réclame ?
27
+ *
28
+ * La comparaison porte sur l'**autorité demandée** (hôte + port, tels que le
29
+ * client les a écrits), jamais sur le schéma : derrière un relais qui termine
30
+ * TLS, le processus voit `http` pour une requête que le client a faite en
31
+ * `https`, et refuser là-dessus fermerait le document en production. Le port
32
+ * par défaut est normalisé par `URL` — `app.example:443` et `app.example`
33
+ * désignent le même serveur et doivent se valoir.
34
+ *
35
+ * Fonction **pure** : elle reçoit l'autorité demandée plutôt que d'aller la
36
+ * chercher dans un contexte, ce qui la rend éprouvable sans serveur — et permet
37
+ * au contexte WebSocket, dont la requête n'est qu'un `IncomingMessage`, de
38
+ * l'appeler avec la même valeur.
39
+ *
40
+ * @param asked - autorité demandée (`:authority` en HTTP/2, `Host` en HTTP/1.1)
41
+ * @param declared - URL absolue dont le document se réclame (émetteur ou ressource)
42
+ * @returns `true` si les deux désignent le même serveur
43
+ */
44
+ function onDeclaredAuthority(asked, declared) {
45
+ if (typeof asked !== "string" || asked.length === 0) return false;
46
+ let wanted;
47
+ try {
48
+ wanted = new URL(declared);
49
+ } catch {
50
+ return false;
51
+ }
52
+ try {
53
+ return new URL(`${wanted.protocol}//${asked}`).host === wanted.host;
54
+ } catch {
55
+ return false;
56
+ }
57
+ }
58
+ /**
59
+ * Extrait l'autorité demandée des en-têtes bruts d'une requête.
60
+ *
61
+ * Lue ici plutôt que par un accesseur de `Request` : le type varie selon le
62
+ * transport (le contexte WebSocket n'expose qu'un `IncomingMessage`), et un
63
+ * document bien connu doit rester lisible par les deux.
64
+ *
65
+ * @param headers - en-têtes de la requête entrante
66
+ * @returns l'autorité telle que le client l'a écrite, ou `undefined`
67
+ */
68
+ function askedAuthority(headers) {
69
+ const raw = headers?.[":authority"] ?? headers?.host;
70
+ const asked = Array.isArray(raw) ? raw[0] : raw;
71
+ return typeof asked === "string" && asked.length > 0 ? asked : void 0;
72
+ }
73
+ //#endregion
74
+ export { askedAuthority, onDeclaredAuthority };