@nodefony/security 10.0.0-alpha.9 → 10.0.0-beta.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 (68) hide show
  1. package/dist/nodefony/command/security-token.js +4 -4
  2. package/dist/nodefony/command/security-user-delete.js +2 -2
  3. package/dist/nodefony/command/security-user-list.js +1 -1
  4. package/dist/nodefony/service/apiKeys.js +2 -2
  5. package/dist/nodefony/service/auditService.js +3 -3
  6. package/dist/nodefony/service/authFlow.js +2 -2
  7. package/dist/nodefony/service/authorization.js +3 -4
  8. package/dist/nodefony/service/firewall.js +21 -9
  9. package/dist/nodefony/service/oauth2.js +5 -3
  10. package/dist/nodefony/service/securityHeaders.js +1 -1
  11. package/dist/nodefony/service/tokenService.js +27 -18
  12. package/dist/nodefony/service/webAuthn.js +38 -31
  13. package/dist/nodefony/service/webhooks.js +50 -41
  14. package/dist/nodefony/src/admin/SecurityAdminApi.js +2 -1
  15. package/dist/nodefony/src/admin/WebhookAdminApi.js +1 -0
  16. package/dist/nodefony/src/admin/userRevocationCascade.js +1 -1
  17. package/dist/nodefony/src/apikey/apiKeyFormat.js +1 -1
  18. package/dist/nodefony/src/audit/MemoryAuditStore.js +4 -8
  19. package/dist/nodefony/src/audit/auditBridge.js +9 -5
  20. package/dist/nodefony/src/authenticator/ApiKeyAuthenticator.js +3 -3
  21. package/dist/nodefony/src/authenticator/ExternalJwtAuthenticator.js +2 -2
  22. package/dist/nodefony/src/authenticator/FirewallRealtimeAuthenticator.js +2 -2
  23. package/dist/nodefony/src/authenticator/JwtAuthenticator.js +2 -2
  24. package/dist/nodefony/src/authenticator/SessionAuthenticator.js +5 -3
  25. package/dist/nodefony/src/authenticator/UserPasswordAuthenticator.js +2 -2
  26. package/dist/nodefony/src/csp.js +4 -5
  27. package/dist/nodefony/src/oauth/providers/github.js +1 -1
  28. package/dist/nodefony/src/realtime/frameAuthorizer.js +6 -6
  29. package/dist/nodefony/src/token/JwtKeystore.js +7 -6
  30. package/dist/nodefony/src/token/MemoryTokenStore.js +1 -1
  31. package/dist/nodefony/src/token/jwtRuntime.js +13 -1
  32. package/dist/nodefony/src/token/tokenCriteria.js +1 -0
  33. package/dist/nodefony/src/totp/totpCrypto.js +9 -9
  34. package/dist/nodefony/src/webhook/WebhookDispatcher.js +4 -3
  35. package/dist/types/nodefony/contracts/IAuditEvent.d.ts +6 -2
  36. package/dist/types/nodefony/contracts/IFirewall.d.ts +2 -2
  37. package/dist/types/nodefony/contracts/IFirewallDescription.d.ts +5 -5
  38. package/dist/types/nodefony/contracts/ISecuredArea.d.ts +4 -4
  39. package/dist/types/nodefony/contracts/ITokenStore.d.ts +3 -3
  40. package/dist/types/nodefony/contracts/ITotpSecretStore.d.ts +4 -4
  41. package/dist/types/nodefony/contracts/IWebAuthnCredentialStore.d.ts +1 -1
  42. package/dist/types/nodefony/errors/InvalidTargetError.d.ts +1 -1
  43. package/dist/types/nodefony/errors/UnverifiableTokenError.d.ts +1 -1
  44. package/dist/types/nodefony/service/firewall.d.ts +3 -2
  45. package/dist/types/nodefony/service/securityHeaders.d.ts +5 -5
  46. package/dist/types/nodefony/src/SecuredArea.d.ts +2 -2
  47. package/dist/types/nodefony/src/authenticator/SessionAuthenticator.d.ts +5 -3
  48. package/dist/types/nodefony/src/oauth/oauth2Client.d.ts +2 -2
  49. package/dist/types/nodefony/src/oauth/oauthProviderRegistry.d.ts +2 -2
  50. package/dist/types/nodefony/src/realtime/realtimeContracts.d.ts +3 -3
  51. package/dist/types/nodefony/src/token/JwtKeystore.d.ts +2 -2
  52. package/dist/types/nodefony/src/token/RemoteJwtVerifier.d.ts +2 -2
  53. package/dist/types/nodefony/src/token/jwtRuntime.d.ts +10 -0
  54. package/docs/api-keys.md +15 -15
  55. package/docs/audit.md +18 -13
  56. package/docs/authenticators.md +6 -6
  57. package/docs/authorization.md +15 -15
  58. package/docs/cors.md +6 -6
  59. package/docs/csrf.md +7 -7
  60. package/docs/external-jwt.md +17 -9
  61. package/docs/firewall.md +7 -7
  62. package/docs/headers.md +13 -13
  63. package/docs/index.md +3 -1
  64. package/docs/oauth2.md +2 -2
  65. package/docs/tokens.md +6 -6
  66. package/docs/webauthn.md +13 -13
  67. package/docs/webhooks.md +9 -12
  68. package/package.json +13 -13
package/docs/webhooks.md CHANGED
@@ -66,11 +66,11 @@ Le détail de chaque étape est plus bas, dans **Architecture interne**.
66
66
 
67
67
  Trois usages courants, tous branchés sur des événements que Nodefony émet déjà :
68
68
 
69
- | Ce que tu veux | Tu abonnes | Le tiers qui reçoit |
70
- | -------------------------------------------------------------------------- | ------------------------------------ | ---------------------------------- |
71
- | Être prévenu quand quelqu'un s'acharne sur un compte | `login.failure` | un canal Slack, un SMS d'astreinte |
72
- | Garder une trace inviolable des accès, hors de l'application | `*` | un SIEM, un bucket d'archives |
73
- | Couper l'accès d'un salarié partout ailleurs quand sa session est révoquée | `token.revoked`, `session.destroyed` | ton annuaire, ton outil de tickets |
69
+ | Ce que tu veux | Tu abonnes | Le tiers qui reçoit |
70
+ | -------------------------------------------------------------------------- | ----------------------------------------- | ---------------------------------- |
71
+ | Être prévenu quand quelqu'un s'acharne sur un compte | `login.failure` | un canal Slack, un SMS d'astreinte |
72
+ | Garder une trace inviolable des accès, hors de l'application | `*` | un SIEM, un bucket d'archives |
73
+ | Couper l'accès d'un salarié partout ailleurs quand sa session est révoquée | `session.revoked`, `token.reuse_detected` | ton annuaire, ton outil de tickets |
74
74
 
75
75
  Le premier, en entier — un serveur qui prévient une équipe quand un compte est attaqué :
76
76
 
@@ -418,8 +418,8 @@ Les catégories d'audit disponibles (`AuditCategory`, `IAuditEvent.ts:24`) donne
418
418
  | ---------- | -------------------------------------------------------------------------- |
419
419
  | `auth` | Login/logout, chaîne d'authentification (`login.success`, `login.failure`) |
420
420
  | `authz` | Accès accordé/refusé, voters, `@IsGranted` (`access.denied`) |
421
- | `token` | Jetons longue durée émis/révoqués — JWT refresh, PAT (`token.revoked`) |
422
- | `session` | Cycle de vie de session (`session.opened`) |
421
+ | `token` | Jetons longue durée et clés d'API (`token.issued`, `apikey.revoked`) |
422
+ | `session` | Cycle de vie de session (`logout`, `session.revoked`) |
423
423
  | `oauth` | Login social : authorize, callback, provisioning JIT |
424
424
  | `webauthn` | Passkeys : enregistrement, assertion |
425
425
  | `csrf` | Défense CSRF déclenchée |
@@ -672,7 +672,7 @@ abandon. Chaque retry **repasse par la file bornée** (`#scheduleRetry()`,
672
672
 
673
673
  ### Auto-désactivation d'un endpoint mort
674
674
 
675
- Chaque issue finale passe par `WebhookService.markDelivery()` (`webhooks.ts:687`) : succès →
675
+ Chaque issue finale passe par `WebhookService.markDelivery()` (`webhooks.ts:682`) : succès →
676
676
  `failureCount = 0` ; échec → incrément. Au-delà de `autoDisableThreshold` (défaut **20**), l'endpoint
677
677
  est **désactivé** et un unique événement d'audit `webhook.disabled` est émis — **un par endpoint qui
678
678
  meurt**, jamais un par échec (le volume resterait ingérable). Mettre le seuil à `0` désactive
@@ -725,7 +725,7 @@ Section `webhooks` du schéma Zod (`webhooksSchema`, `security/nodefony/config/c
725
725
 
726
726
  > [!NOTE]
727
727
  > `timestampToleranceS` est **transporté** dans la politique de livraison
728
- > (`getDeliveryPolicy()`, `webhooks.ts:667`) mais l'émetteur ne l'applique jamais : la fenêtre
728
+ > (`getDeliveryPolicy()`, `webhooks.ts:663`) mais l'émetteur ne l'applique jamais : la fenêtre
729
729
  > anti-rejeu est par nature un contrôle du **récepteur**. Traite cette valeur comme la tolérance que
730
730
  > tu documentes à tes destinataires — c'est celle du récepteur qui protège.
731
731
 
@@ -1017,6 +1017,3 @@ Couverture : `npm run coverage` dans `@nodefony/security`. Revue de sécurité d
1017
1017
  - La **source des événements** livrés → [audit](audit.md) · Le pare-feu qui les produit → [firewall](firewall.md)
1018
1018
  - Secrets et jetons du module, mêmes principes de chiffrement au repos → [tokens](tokens.md)
1019
1019
  - Vocabulaire transverse de la sécurité → [lexique](lexique.md)
1020
- </content>
1021
-
1022
- </invoke>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nodefony/security",
3
- "version": "10.0.0-alpha.9",
3
+ "version": "10.0.0-beta.1",
4
4
  "description": "Pare-feu applicatif par zones pour Nodefony : authentification, autorisation par rôles, protection CSRF, journal d'audit",
5
5
  "author": "Christophe CAMENSULI <ccamensuli@gmail.com>",
6
6
  "main": "./dist/index.js",
@@ -48,28 +48,28 @@
48
48
  "directory": "src/packages/@nodefony/security"
49
49
  },
50
50
  "dependencies": {
51
- "@simplewebauthn/server": "14.0.2",
51
+ "@simplewebauthn/server": "14.0.3",
52
52
  "jose": "6.2.12",
53
53
  "tslib": "2.8.1",
54
54
  "zod": "^4.6.5"
55
55
  },
56
56
  "devDependencies": {
57
- "@nodefony/framework": "^10.0.0-alpha.9",
58
- "@nodefony/http": "^10.0.0-alpha.9",
59
- "@nodefony/user": "^10.0.0-alpha.9",
60
- "@types/node": "26.6.2",
61
- "@vitest/coverage-v8": "5.0.1",
62
- "nodefony": "^10.0.0-alpha.9",
63
- "vitest": "5.0.1"
57
+ "@nodefony/framework": "^10.0.0-beta.1",
58
+ "@nodefony/http": "^10.0.0-beta.1",
59
+ "@nodefony/user": "^10.0.0-beta.1",
60
+ "@types/node": "26.6.3",
61
+ "@vitest/coverage-v8": "5.0.2",
62
+ "nodefony": "^10.0.0-beta.1",
63
+ "vitest": "5.0.2"
64
64
  },
65
65
  "license": "Apache-2.0",
66
66
  "readmeFilename": "README.md",
67
67
  "contributors": [],
68
68
  "peerDependencies": {
69
- "@nodefony/framework": "^10.0.0-alpha.9",
70
- "@nodefony/http": "^10.0.0-alpha.9",
71
- "@nodefony/user": "^10.0.0-alpha.9",
72
- "nodefony": "^10.0.0-alpha.9"
69
+ "@nodefony/framework": "^10.0.0-beta.1",
70
+ "@nodefony/http": "^10.0.0-beta.1",
71
+ "@nodefony/user": "^10.0.0-beta.1",
72
+ "nodefony": "^10.0.0-beta.1"
73
73
  },
74
74
  "files": [
75
75
  "dist",