@nodefony/http 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 (155) hide show
  1. package/LICENSE +544 -0
  2. package/README.md +77 -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/_virtual/_@oxc-project_runtime@0.148.0/helpers/esm/decorateParam.js +8 -0
  6. package/dist/index.js +108 -0
  7. package/dist/nodefony/command/assetsPublishCommand.js +102 -0
  8. package/dist/nodefony/command/certificatesCommand.js +47 -0
  9. package/dist/nodefony/command/networkCommand.js +27 -0
  10. package/dist/nodefony/command/proxyGenerateCommand.js +66 -0
  11. package/dist/nodefony/config/config.js +335 -0
  12. package/dist/nodefony/config/defineModuleConfig.js +93 -0
  13. package/dist/nodefony/interfaces/IContext.js +1 -0
  14. package/dist/nodefony/interfaces/ICookie.js +1 -0
  15. package/dist/nodefony/interfaces/IErrorRenderer.js +1 -0
  16. package/dist/nodefony/interfaces/IHttpConfig.js +1 -0
  17. package/dist/nodefony/interfaces/IHttpKernel.js +1 -0
  18. package/dist/nodefony/interfaces/IRequest.js +1 -0
  19. package/dist/nodefony/interfaces/IRequestLogger.js +1 -0
  20. package/dist/nodefony/interfaces/IResponse.js +1 -0
  21. package/dist/nodefony/interfaces/ISession.js +1 -0
  22. package/dist/nodefony/interfaces/IUpload.js +1 -0
  23. package/dist/nodefony/interfaces/index.js +1 -0
  24. package/dist/nodefony/service/HttpAdminApi.js +376 -0
  25. package/dist/nodefony/service/ProfilerAdminApi.js +73 -0
  26. package/dist/nodefony/service/audit-logger.js +159 -0
  27. package/dist/nodefony/service/certificates.js +545 -0
  28. package/dist/nodefony/service/error-renderer.js +320 -0
  29. package/dist/nodefony/service/http-kernel.js +948 -0
  30. package/dist/nodefony/service/pretty-request-logger.js +72 -0
  31. package/dist/nodefony/service/request-logger.js +54 -0
  32. package/dist/nodefony/service/servers/clientError.js +20 -0
  33. package/dist/nodefony/service/servers/server-http.js +135 -0
  34. package/dist/nodefony/service/servers/server-https.js +204 -0
  35. package/dist/nodefony/service/servers/server-static.js +192 -0
  36. package/dist/nodefony/service/servers/server-websocket-secure.js +104 -0
  37. package/dist/nodefony/service/servers/server-websocket.js +104 -0
  38. package/dist/nodefony/service/servers/serverShutdown.js +31 -0
  39. package/dist/nodefony/service/servers/wsHeartbeat.js +64 -0
  40. package/dist/nodefony/service/sessions/sessions-service.js +580 -0
  41. package/dist/nodefony/service/trace.js +72 -0
  42. package/dist/nodefony/service/upload/upload-service.js +171 -0
  43. package/dist/nodefony/src/assets/collectAssets.js +34 -0
  44. package/dist/nodefony/src/assets/prebuiltUi.js +125 -0
  45. package/dist/nodefony/src/context/Context.js +415 -0
  46. package/dist/nodefony/src/context/domainMatcher.js +88 -0
  47. package/dist/nodefony/src/context/forwarded.js +185 -0
  48. package/dist/nodefony/src/context/http/HttpContext.js +309 -0
  49. package/dist/nodefony/src/context/http/Request.js +543 -0
  50. package/dist/nodefony/src/context/http/Response.js +368 -0
  51. package/dist/nodefony/src/context/http/parser.js +188 -0
  52. package/dist/nodefony/src/context/http/urlFastPath.js +103 -0
  53. package/dist/nodefony/src/context/http2/Request.js +29 -0
  54. package/dist/nodefony/src/context/http2/Response.js +97 -0
  55. package/dist/nodefony/src/context/metaData.js +47 -0
  56. package/dist/nodefony/src/context/requestId.js +41 -0
  57. package/dist/nodefony/src/context/trustProxy.js +167 -0
  58. package/dist/nodefony/src/context/websocket/Response.js +181 -0
  59. package/dist/nodefony/src/context/websocket/WebsocketContext.js +389 -0
  60. package/dist/nodefony/src/context/websocket/wsBackpressure.js +56 -0
  61. package/dist/nodefony/src/context/websocket/wsLogContent.js +68 -0
  62. package/dist/nodefony/src/cookies/cookie.js +258 -0
  63. package/dist/nodefony/src/errors/httpError.js +69 -0
  64. package/dist/nodefony/src/profiler/FrameProfile.js +95 -0
  65. package/dist/nodefony/src/profiler/Profiler.js +139 -0
  66. package/dist/nodefony/src/proxy/generateProxyConfig.js +157 -0
  67. package/dist/nodefony/src/rateLimit/IRateLimitStore.js +1 -0
  68. package/dist/nodefony/src/rateLimit/MemoryRateLimitStore.js +146 -0
  69. package/dist/nodefony/src/rateLimit/WsConnectionCounter.js +64 -0
  70. package/dist/nodefony/src/rateLimit/rateLimitFilters.js +20 -0
  71. package/dist/nodefony/src/servers/portBinder.js +114 -0
  72. package/dist/nodefony/src/session/session.js +390 -0
  73. package/dist/nodefony/src/session/storage/MemorySessionStorage.js +185 -0
  74. package/dist/nodefony/src/session/storage/RevocationGuardStorage.js +137 -0
  75. package/dist/nodefony/src/session/storage/sessionFilters.js +83 -0
  76. package/dist/nodefony/src/session/storage/sessionSort.js +53 -0
  77. package/dist/types/index.d.ts +83 -0
  78. package/dist/types/nodefony/command/assetsPublishCommand.d.ts +23 -0
  79. package/dist/types/nodefony/command/certificatesCommand.d.ts +17 -0
  80. package/dist/types/nodefony/command/networkCommand.d.ts +8 -0
  81. package/dist/types/nodefony/command/proxyGenerateCommand.d.ts +19 -0
  82. package/dist/types/nodefony/config/config.d.ts +197 -0
  83. package/dist/types/nodefony/config/defineModuleConfig.d.ts +39 -0
  84. package/dist/types/nodefony/interfaces/IContext.d.ts +138 -0
  85. package/dist/types/nodefony/interfaces/ICookie.d.ts +47 -0
  86. package/dist/types/nodefony/interfaces/IErrorRenderer.d.ts +55 -0
  87. package/dist/types/nodefony/interfaces/IHttpConfig.d.ts +12 -0
  88. package/dist/types/nodefony/interfaces/IHttpKernel.d.ts +10 -0
  89. package/dist/types/nodefony/interfaces/IRequest.d.ts +35 -0
  90. package/dist/types/nodefony/interfaces/IRequestLogger.d.ts +31 -0
  91. package/dist/types/nodefony/interfaces/IResponse.d.ts +39 -0
  92. package/dist/types/nodefony/interfaces/ISession.d.ts +283 -0
  93. package/dist/types/nodefony/interfaces/IUpload.d.ts +66 -0
  94. package/dist/types/nodefony/interfaces/index.d.ts +7 -0
  95. package/dist/types/nodefony/service/HttpAdminApi.d.ts +18 -0
  96. package/dist/types/nodefony/service/ProfilerAdminApi.d.ts +23 -0
  97. package/dist/types/nodefony/service/audit-logger.d.ts +143 -0
  98. package/dist/types/nodefony/service/certificates.d.ts +246 -0
  99. package/dist/types/nodefony/service/error-renderer.d.ts +74 -0
  100. package/dist/types/nodefony/service/http-kernel.d.ts +377 -0
  101. package/dist/types/nodefony/service/pretty-request-logger.d.ts +25 -0
  102. package/dist/types/nodefony/service/request-logger.d.ts +18 -0
  103. package/dist/types/nodefony/service/servers/clientError.d.ts +14 -0
  104. package/dist/types/nodefony/service/servers/server-http.d.ts +42 -0
  105. package/dist/types/nodefony/service/servers/server-https.d.ts +41 -0
  106. package/dist/types/nodefony/service/servers/server-static.d.ts +62 -0
  107. package/dist/types/nodefony/service/servers/server-websocket-secure.d.ts +29 -0
  108. package/dist/types/nodefony/service/servers/server-websocket.d.ts +29 -0
  109. package/dist/types/nodefony/service/servers/serverShutdown.d.ts +27 -0
  110. package/dist/types/nodefony/service/servers/wsHeartbeat.d.ts +46 -0
  111. package/dist/types/nodefony/service/sessions/sessions-service.d.ts +218 -0
  112. package/dist/types/nodefony/service/trace.d.ts +39 -0
  113. package/dist/types/nodefony/service/upload/upload-service.d.ts +61 -0
  114. package/dist/types/nodefony/src/assets/collectAssets.d.ts +35 -0
  115. package/dist/types/nodefony/src/assets/prebuiltUi.d.ts +99 -0
  116. package/dist/types/nodefony/src/context/Context.d.ts +195 -0
  117. package/dist/types/nodefony/src/context/domainMatcher.d.ts +67 -0
  118. package/dist/types/nodefony/src/context/forwarded.d.ts +95 -0
  119. package/dist/types/nodefony/src/context/http/HttpContext.d.ts +85 -0
  120. package/dist/types/nodefony/src/context/http/Request.d.ts +203 -0
  121. package/dist/types/nodefony/src/context/http/Response.d.ts +68 -0
  122. package/dist/types/nodefony/src/context/http/parser.d.ts +65 -0
  123. package/dist/types/nodefony/src/context/http/urlFastPath.d.ts +52 -0
  124. package/dist/types/nodefony/src/context/http2/Request.d.ts +14 -0
  125. package/dist/types/nodefony/src/context/http2/Response.d.ts +20 -0
  126. package/dist/types/nodefony/src/context/metaData.d.ts +58 -0
  127. package/dist/types/nodefony/src/context/requestId.d.ts +28 -0
  128. package/dist/types/nodefony/src/context/trustProxy.d.ts +77 -0
  129. package/dist/types/nodefony/src/context/websocket/Response.d.ts +53 -0
  130. package/dist/types/nodefony/src/context/websocket/WebsocketContext.d.ts +125 -0
  131. package/dist/types/nodefony/src/context/websocket/wsBackpressure.d.ts +73 -0
  132. package/dist/types/nodefony/src/context/websocket/wsLogContent.d.ts +37 -0
  133. package/dist/types/nodefony/src/cookies/cookie.d.ts +88 -0
  134. package/dist/types/nodefony/src/errors/httpError.d.ts +15 -0
  135. package/dist/types/nodefony/src/profiler/FrameProfile.d.ts +110 -0
  136. package/dist/types/nodefony/src/profiler/Profiler.d.ts +192 -0
  137. package/dist/types/nodefony/src/proxy/generateProxyConfig.d.ts +76 -0
  138. package/dist/types/nodefony/src/rateLimit/IRateLimitStore.d.ts +98 -0
  139. package/dist/types/nodefony/src/rateLimit/MemoryRateLimitStore.d.ts +40 -0
  140. package/dist/types/nodefony/src/rateLimit/WsConnectionCounter.d.ts +37 -0
  141. package/dist/types/nodefony/src/rateLimit/rateLimitFilters.d.ts +18 -0
  142. package/dist/types/nodefony/src/servers/portBinder.d.ts +102 -0
  143. package/dist/types/nodefony/src/session/session.d.ts +171 -0
  144. package/dist/types/nodefony/src/session/storage/MemorySessionStorage.d.ts +77 -0
  145. package/dist/types/nodefony/src/session/storage/RevocationGuardStorage.d.ts +81 -0
  146. package/dist/types/nodefony/src/session/storage/sessionFilters.d.ts +102 -0
  147. package/dist/types/nodefony/src/session/storage/sessionSort.d.ts +45 -0
  148. package/docs/cookies.md +365 -0
  149. package/docs/index.md +163 -0
  150. package/docs/observabilite.md +460 -0
  151. package/docs/rate-limit.md +372 -0
  152. package/docs/servers.md +935 -0
  153. package/docs/session.md +768 -0
  154. package/docs/upload.md +460 -0
  155. package/package.json +101 -0
@@ -0,0 +1,246 @@
1
+ import type pkg from "node-forge";
2
+ import { Service, Module } from "nodefony";
3
+ /**
4
+ * Type-valeur du backend node-forge runtime (objet `.pki`/`.md`). L'import type
5
+ * `pkg` sert pour les namespaces de types (`pkg.pki.Certificate`) ; `ForgeModule`
6
+ * pour la valeur chargée dynamiquement (node-forge est un module `export =`).
7
+ */
8
+ type ForgeModule = typeof import("node-forge");
9
+ /** Algorithmes de hachage de signature autorisés (SHA-1 banni). */
10
+ export type CertHash = "sha256" | "sha384" | "sha512";
11
+ /** Stratégie de fourniture du certificat exposée en configuration. */
12
+ export type CertStrategyConfig = "auto" | "mkcert" | "selfsigned" | "explicit";
13
+ export interface OpensslOptions {
14
+ /** Taille de la clé RSA (bits). */
15
+ size: number;
16
+ /** Algorithme de hachage de la signature (jamais SHA-1). */
17
+ hash: CertHash;
18
+ /** Durée de validité du certificat (jours). */
19
+ validityDays: number;
20
+ /** Recul de `notBefore` (minutes) — tolérance au décalage d'horloge client. */
21
+ backdateMinutes: number;
22
+ /** Attributs du sujet/issuer (commonName, organizationName…). */
23
+ attrs: pkg.pki.CertificateField[];
24
+ }
25
+ /** Options de génération du certificat TLS en mode développement. */
26
+ export interface CertificateDevOptions {
27
+ /**
28
+ * Préférer `mkcert` (CA locale ajoutée au trust store système) pour générer
29
+ * le certificat de dev. Donne un HTTPS sans erreur navigateur — indispensable
30
+ * pour les sous-ressources cross-origin (Vite) et le WSS du HMR.
31
+ * Si `mkcert` est absent, on retombe sur un auto-signé node-forge (non trusté).
32
+ * Ignoré hors `development`.
33
+ */
34
+ useMkcert: boolean;
35
+ }
36
+ /** Subject Alternative Name explicite (sinon dérivé du kernel). */
37
+ export interface CertificateSanOptions {
38
+ /** Noms DNS (RFC 5280 §4.2.1.6) — font foi pour la vérification d'hôte. */
39
+ dns: string[];
40
+ /** Adresses IP. */
41
+ ip: string[];
42
+ }
43
+ export interface CertificateOptions {
44
+ /**
45
+ * Comment fournir le certificat. `auto` (défaut) résout mkcert (dev) →
46
+ * auto-signé ; `explicit` charge `key`/`cert` fournis (prod). La génération
47
+ * est un confort de DÉVELOPPEMENT — en production, fournir un vrai certificat
48
+ * (Let's Encrypt, ingress, reverse-proxy) : Nodefony n'est pas une CA.
49
+ */
50
+ strategy?: CertStrategyConfig;
51
+ openssl: OpensslOptions;
52
+ dev: CertificateDevOptions;
53
+ san?: CertificateSanOptions;
54
+ /** Permissions POSIX de la clé privée écrite (0600 = owner-only). */
55
+ privateKeyMode?: number;
56
+ path?: string;
57
+ keyPath?: string;
58
+ certPath?: string;
59
+ caPath?: string;
60
+ key?: string | Buffer;
61
+ cert?: string | Buffer;
62
+ ca?: string | Buffer;
63
+ }
64
+ interface filesCertType {
65
+ path: string;
66
+ variable: string | Buffer | null;
67
+ }
68
+ /** Résumé introspectable du certificat serveur (CLI + futur endpoint Studio). */
69
+ export interface CertificateInfo {
70
+ /** Stratégie effective ayant fourni le certificat. */
71
+ strategy: CertStrategyConfig;
72
+ certPath: string;
73
+ keyPath: string;
74
+ fullchainPath: string;
75
+ /** Ancre de confiance à passer au client (`--cacert`/`ca`) — si présente. */
76
+ caPath?: string;
77
+ /** Renseignés si un certificat est présent (parsé). */
78
+ commonName?: string;
79
+ san?: string[];
80
+ validFrom?: string;
81
+ validTo?: string;
82
+ signatureAlgorithm?: string;
83
+ serial?: string;
84
+ }
85
+ /**
86
+ * Service de fourniture du certificat TLS du serveur HTTPS/WSS.
87
+ *
88
+ * Trois stratégies : `explicit` (certificat fourni en config — le cas de
89
+ * PRODUCTION), `mkcert` (CA locale trustée, confort de dev) et `selfsigned`
90
+ * (auto-signé node-forge, secours). La génération est réservée au
91
+ * DÉVELOPPEMENT : en production sans certificat fourni, le service crie un
92
+ * avertissement (Nodefony n'est pas une autorité de certification).
93
+ *
94
+ * Conformité (génération auto-signée) : signature SHA-256 (jamais SHA-1,
95
+ * RFC 5280 / CA-B Forum), numéro de série aléatoire 128 bits unique
96
+ * (RFC 5280 §4.1.2.2), SAN qui fait foi (RFC 6125), `notBefore` reculé,
97
+ * clé privée écrite en `0600`.
98
+ */
99
+ declare class Certificate extends Service {
100
+ module: Module;
101
+ files: filesCertType[];
102
+ keysPair: pkg.pki.rsa.KeyPair | null;
103
+ certForge: pkg.pki.Certificate | null;
104
+ ca: Buffer | string | null;
105
+ key: Buffer | string | null;
106
+ cert: Buffer | string | null;
107
+ fullchainPem: Buffer | string | null;
108
+ publicKeyPem: Buffer | string | null;
109
+ rootCertPem: Buffer | string | null;
110
+ intermediateCertPem: Buffer | string | null;
111
+ /** CAROOT résolu de mkcert (null tant que non détecté / indisponible). */
112
+ private mkcertCaRoot;
113
+ /**
114
+ * Backend crypto node-forge, chargé PARESSEUSEMENT. La génération de
115
+ * certificat est un confort de DÉVELOPPEMENT : en production avec un
116
+ * certificat fourni (`strategy: "explicit"`), cette grosse dépendance n'est
117
+ * jamais importée (règle perf-mémoire — pas de dep chargée « au cas où »).
118
+ */
119
+ private forge;
120
+ path: string;
121
+ serverPath: string;
122
+ caPath: string;
123
+ publicKeyPath: string;
124
+ privateKeyPath: string;
125
+ certPath: string;
126
+ fullchainPath: string;
127
+ constructor(module: Module);
128
+ /** Accès typé aux options du service (Service.options est volontairement lâche). */
129
+ private get certOptions();
130
+ /** Vrai en environnement de développement (mkcert réservé à ce mode). */
131
+ private isDev;
132
+ /**
133
+ * Charge node-forge à la demande (idempotent) — uniquement sur le chemin de
134
+ * GÉNÉRATION (selfsigned / mkcert / inspection). Le chemin `explicit` (prod)
135
+ * ne l'appelle jamais.
136
+ */
137
+ loadForge(): Promise<ForgeModule>;
138
+ /** Accès au backend forge déjà chargé (lève si `loadForge` n'a pas été appelé). */
139
+ private get forgeLib();
140
+ init(): Promise<this>;
141
+ /**
142
+ * Numéro de série X.509 — RFC 5280 §4.1.2.2 : entier positif unique par CA.
143
+ * 128 bits aléatoires (≥ 64 bits d'entropie exigés par le CA/Browser Forum
144
+ * contre les attaques par collision) ; bit de poids fort à 0 pour garantir un
145
+ * entier positif en encodage DER ; ≤ 20 octets.
146
+ */
147
+ private static generateSerialHex;
148
+ setFiles(): void;
149
+ private checkCertificates;
150
+ private ensureDirectoriesExist;
151
+ /**
152
+ * Génère (ou recharge) le certificat serveur selon la stratégie résolue :
153
+ * `explicit` (fourni en config / prod), `mkcert` (dev, CA trustée) ou
154
+ * `selfsigned` (auto-signé node-forge, secours). Régénère automatiquement si
155
+ * le certificat présent sur disque n'est pas adéquat pour la stratégie active
156
+ * (expiré, SHA-1, SAN incomplet).
157
+ *
158
+ * @param force - forcer la régénération même si un certificat valide existe
159
+ */
160
+ generateServerCertificates(force?: boolean): Promise<this>;
161
+ /**
162
+ * Résout la stratégie effective à partir de `certificates.strategy` :
163
+ * - `explicit` : `key` + `cert` fournis (prod, Let's Encrypt…). Forcé →
164
+ * erreur si absents.
165
+ * - `mkcert` : dev + binaire mkcert + CA locale présents. Forcé hors dev →
166
+ * retombe sur `selfsigned` avec avertissement.
167
+ * - `selfsigned` : auto-signé node-forge (fallback). En PRODUCTION, crie un
168
+ * avertissement : la génération n'est pas le rôle d'un serveur de prod.
169
+ */
170
+ private resolveStrategy;
171
+ /** `key` + `cert` présents en config (chemin fichier ou Buffer) → cert fourni. */
172
+ private hasExplicitCert;
173
+ /**
174
+ * Détecte mkcert : binaire dans le PATH + CA racine générée (rootCA.pem).
175
+ * @returns le chemin CAROOT, ou null si indisponible.
176
+ */
177
+ private detectMkcert;
178
+ /**
179
+ * SAN effectif : config explicite si fournie, sinon dérivé du kernel
180
+ * (localhost + domain en DNS ; loopback en IP). Une IP littérale (ex. domain
181
+ * `127.0.0.1` en dev) est classée en `ip`, pas en `dns` (RFC 6125).
182
+ */
183
+ private derivedSan;
184
+ /** Hostnames DNS couverts par le SAN. */
185
+ private sanDnsNames;
186
+ /** Adresses IP couvertes par le SAN. */
187
+ private sanIps;
188
+ /** Hostnames passés à mkcert (DNS + IP du SAN). */
189
+ private certHostnames;
190
+ /**
191
+ * Génère le certificat de dev via mkcert (signé par la CA locale trustée).
192
+ * Écrit cert + clé privée (mkcert), puis dérive clé publique, fullchain et CA.
193
+ */
194
+ private generateWithMkcert;
195
+ /**
196
+ * Vérifie que le certificat présent sur disque convient à la stratégie :
197
+ * - expiration (RFC 5280 §4.1.2.5) : un cert expiré est inadéquat.
198
+ * - **SAN** couvrant les hostnames requis (les DEUX stratégies) : si le SAN
199
+ * demandé change (ex. `nodefony.com` ajouté via NF_BIND_ALL), on régénère.
200
+ * - `mkcert` : émis par la CA mkcert (issuer organisation contient "mkcert").
201
+ * - `selfsigned` : signature non SHA-1.
202
+ * @returns false si absent, illisible ou inadéquat → déclenche la régénération.
203
+ */
204
+ private isCertAdequate;
205
+ /** Le SAN présent couvre-t-il tous les noms DNS requis (RFC 6125) ? */
206
+ private sanCovers;
207
+ /** Charge un certificat fourni en config (chemin fichier ou Buffer). */
208
+ private loadExplicitCert;
209
+ /** Résout un matériel TLS : Buffer renvoyé tel quel, string lue comme chemin. */
210
+ private resolveMaterial;
211
+ createFullChain(): string;
212
+ readCerticates(): Promise<this>;
213
+ writeCertificates(force?: boolean): Promise<this>;
214
+ /**
215
+ * Durcit les permissions de la clé privée (et de son dossier) après écriture
216
+ * — garantit `0600` même si l'umask du process était permissif (la clé écrite
217
+ * par mkcert passe aussi par ici). Échec silencieux hors POSIX.
218
+ */
219
+ private restrictPrivateKey;
220
+ generateKeys(): pkg.pki.rsa.KeyPair;
221
+ generatePrivateKeyPem(): Buffer;
222
+ generatePublickeyPem(): Buffer;
223
+ generateCertPem(): Buffer;
224
+ createCertificate(): pkg.pki.Certificate;
225
+ /** subjectAltName de l'auto-signé : DNS + IP (config explicite sinon dérivé). */
226
+ private altNames;
227
+ setExtension(): void;
228
+ /**
229
+ * Signe le certificat avec le hachage configuré (SHA-256 par défaut).
230
+ * SHA-1 est INTERDIT (collision SHAttered 2017, CA/Browser Forum depuis 2016) :
231
+ * `node-forge` signe en SHA-1 par défaut si on ne passe pas de digest → on en
232
+ * passe toujours un.
233
+ */
234
+ sign(): void;
235
+ /**
236
+ * Résumé introspectable du certificat serveur courant — réutilisé par la
237
+ * commande CLI `certificates` et un futur endpoint d'admin Studio (parité
238
+ * CLI ↔ Web). Parse le certificat chargé (charge node-forge à la demande).
239
+ */
240
+ describe(): Promise<CertificateInfo>;
241
+ /** Nom lisible de l'OID d'algorithme de signature. */
242
+ private oidName;
243
+ /** Digest node-forge correspondant au hachage configuré (jamais SHA-1). */
244
+ private digestFor;
245
+ }
246
+ export default Certificate;
@@ -0,0 +1,74 @@
1
+ import type { IErrorRenderer, IErrorHttpResult, IErrorWebsocketResult } from "../interfaces/IErrorRenderer.js";
2
+ import type { IHttpContext, IWebsocketContext } from "../interfaces/IContext.js";
3
+ /**
4
+ * Force du signal « la base ne porte pas ce que le code demande ».
5
+ *
6
+ * Deux niveaux, parce que les pilotes ne disent pas la chose avec la même
7
+ * autorité — et parce que leurs lecteurs n'ont pas le même coût d'erreur.
8
+ *
9
+ * - `certain` : un code dédié le dit (PostgreSQL, MySQL). Rien d'autre ne
10
+ * produit ce code.
11
+ * - `probable` : SQLite, dont le code est générique, mais dont le message
12
+ * porte une signature figée (cf {@link SQLITE_SCHEMA_PREFIXES}).
13
+ */
14
+ export type SchemaMismatchConfidence = "certain" | "probable";
15
+ /**
16
+ * Reconnaît, dans une erreur ou l'une de ses causes, un schéma en retard sur
17
+ * le code — et dit avec quelle FORCE.
18
+ *
19
+ * Détecteur UNIQUE de ce fait dans tout le framework : le corps d'erreur rendu
20
+ * au développeur le lit, et le rechargement d'un instantané au démarrage
21
+ * aussi. Deux reconnaissances de la même chose divergeraient en silence, et
22
+ * chacune passerait ses propres tests.
23
+ *
24
+ * Chaque lecteur choisit son SEUIL, et c'est là que la graduation sert. Le
25
+ * corps d'erreur n'accepte que `certain` : il nomme des tables à un client, et
26
+ * une aide qui se trompe de cause coûte plus cher que pas d'aide du tout. Un
27
+ * appelant qui sait déjà ce qu'il a demandé — une table précise, au démarrage —
28
+ * peut accepter `probable` : il ne publie rien, il décide seulement de ne pas
29
+ * hurler.
30
+ *
31
+ * Même descente dans `cause` que {@link isUniqueViolation}, et pour la même
32
+ * raison : Drizzle enveloppe toute erreur de pilote dans un `DrizzleQueryError`
33
+ * dont le `code` vaut `undefined`. Sans elle, la reconnaissance ne mord jamais.
34
+ *
35
+ * Ne coûte rien au chemin nominal : ne tourne que sur une erreur déjà levée.
36
+ *
37
+ * @param error - erreur remontée par un pilote, éventuellement enveloppée.
38
+ * @returns la force du signal, ou `null` si rien ne dit ça.
39
+ */
40
+ export declare function schemaMismatchOf(error: unknown): SchemaMismatchConfidence | null;
41
+ /**
42
+ * Default Nodefony error renderer — preserves the legacy JSON error shape.
43
+ *
44
+ * HTTP body (unchanged across the migration):
45
+ * {
46
+ * code: <http status>,
47
+ * message: <error message>,
48
+ * error: <HttpError.toJSON() — stack, controller, action, jsonResponse...>,
49
+ * nodefony: { requestId, scheme, name, version, environment, debug, ... },
50
+ * result: null,
51
+ * }
52
+ *
53
+ * WS close frame:
54
+ * code: clamped to WS range (1000-4999), 1011 if HTTP-style code, 500→1011
55
+ * reason: error.message
56
+ *
57
+ * Stateless singleton — zero per-request allocation. Override via
58
+ * `httpKernel.setErrorRenderer(custom)` for prod hardening or RFC 7807.
59
+ */
60
+ declare class DefaultErrorRenderer implements IErrorRenderer {
61
+ renderHttp(error: Error, context: IHttpContext): IErrorHttpResult;
62
+ renderWebsocket(error: Error, context: IWebsocketContext): IErrorWebsocketResult;
63
+ private toHttpError;
64
+ /**
65
+ * Ramène un `code` d'erreur à un statut HTTP réellement émettable.
66
+ *
67
+ * Le filtre de type n'est pas défensif « au cas où » : `nodefonyError.parseMessage`
68
+ * RECOPIE le code de l'erreur source, et pilotes comme Node en produisent des
69
+ * textuels (`"ENOENT"`, `"ECONNRESET"`, `"23505"`). Sans lui, la chaîne partait
70
+ * telle quelle en statut de réponse et le serveur répondait hors RFC 9110 §15.
71
+ */
72
+ private normalizeHttpStatus;
73
+ }
74
+ export default DefaultErrorRenderer;