@astram/guard 0.6.0 → 0.7.0

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 (104) hide show
  1. package/dist/auth/account.controller.js.map +1 -0
  2. package/dist/auth/auth.controller.js.map +1 -0
  3. package/dist/auth/auth.module.d.ts.map +1 -1
  4. package/dist/auth/auth.module.js +29 -0
  5. package/dist/auth/auth.module.js.map +1 -0
  6. package/dist/auth/connections.js.map +1 -0
  7. package/dist/auth/dto.js.map +1 -0
  8. package/dist/auth/pending-mfa-store.js.map +1 -0
  9. package/dist/auth/persistence.module.js.map +1 -0
  10. package/dist/auth/ports/audit-sink.js.map +1 -0
  11. package/dist/auth/ports/credential-writer.js.map +1 -0
  12. package/dist/auth/ports/email-sender.js.map +1 -0
  13. package/dist/auth/ports/membership-checker.js.map +1 -0
  14. package/dist/auth/ports/mfa-device-store.js.map +1 -0
  15. package/dist/auth/ports/profile-writer.js.map +1 -0
  16. package/dist/auth/ports/recovery-code-store.js.map +1 -0
  17. package/dist/auth/ports/reset-token-store.js.map +1 -0
  18. package/dist/auth/ports/scope-subtree-resolver.js.map +1 -0
  19. package/dist/auth/ports/session-facts-projector.js.map +1 -0
  20. package/dist/auth/ports/session-sweeper.js.map +1 -0
  21. package/dist/auth/profile-resolver.js.map +1 -0
  22. package/dist/auth/rate-limit/attempt-limiter.js.map +1 -0
  23. package/dist/auth/tokens.js.map +1 -0
  24. package/dist/auth/totp-enrollment.js.map +1 -0
  25. package/dist/authentication/argon2id-password-hasher.js.map +1 -0
  26. package/dist/authentication/log-email-sender.js.map +1 -0
  27. package/dist/authentication/mariadb-api-key-store.d.ts +43 -0
  28. package/dist/authentication/mariadb-api-key-store.d.ts.map +1 -0
  29. package/dist/authentication/mariadb-api-key-store.js +87 -0
  30. package/dist/authentication/mariadb-credential-resolver.js.map +1 -0
  31. package/dist/authentication/mariadb-credential-writer.js.map +1 -0
  32. package/dist/authentication/mariadb-mfa-device-store.js.map +1 -0
  33. package/dist/authentication/mariadb-or-totp-verifier.js.map +1 -0
  34. package/dist/authentication/mariadb-profile-resolver.js.map +1 -0
  35. package/dist/authentication/mariadb-profile-writer.js.map +1 -0
  36. package/dist/authentication/mariadb-recovery-code-store.js.map +1 -0
  37. package/dist/authentication/mariadb-reset-token-store.js.map +1 -0
  38. package/dist/authentication/mariadb-session-sweeper.js.map +1 -0
  39. package/dist/authz/cross-tenant-grant-writer.js.map +1 -0
  40. package/dist/authz/list-scope-sql.js.map +1 -0
  41. package/dist/authz/manifest-operation-authority-adapter.js.map +1 -0
  42. package/dist/authz/mariadb-cross-tenant-grant-adapter.js.map +1 -0
  43. package/dist/authz/mariadb-list-scope-adapter.js.map +1 -0
  44. package/dist/authz/mariadb-policy-store.js.map +1 -0
  45. package/dist/authz/mariadb-record-rule-adapter.js.map +1 -0
  46. package/dist/authz/mariadb-record-share-adapter.js.map +1 -0
  47. package/dist/authz/record-share-cascade.js.map +1 -0
  48. package/dist/authz/record-share-writer.js.map +1 -0
  49. package/dist/authz/wire-record-authorization.js.map +1 -0
  50. package/dist/boot/boot-sequence.js.map +1 -0
  51. package/dist/boot/boot.module.js.map +1 -0
  52. package/dist/completeness/catalog-reconciler.js.map +1 -0
  53. package/dist/completeness/operation-inventory-scanner.js.map +1 -0
  54. package/dist/completeness/ports/catalog-store.js.map +1 -0
  55. package/dist/config/app-config.d.ts +16 -0
  56. package/dist/config/app-config.d.ts.map +1 -1
  57. package/dist/config/app-config.js +22 -0
  58. package/dist/config/app-config.js.map +1 -0
  59. package/dist/config/config.module.js.map +1 -0
  60. package/dist/encryption/local-kek-crypto.d.ts +15 -0
  61. package/dist/encryption/local-kek-crypto.d.ts.map +1 -0
  62. package/dist/encryption/local-kek-crypto.js +79 -0
  63. package/dist/enforcement/classification.decorator.js.map +1 -0
  64. package/dist/enforcement/core-seam.js.map +1 -0
  65. package/dist/enforcement/enforcement.module.js.map +1 -0
  66. package/dist/enforcement/global-enforcement.guard.d.ts +3 -1
  67. package/dist/enforcement/global-enforcement.guard.d.ts.map +1 -1
  68. package/dist/enforcement/global-enforcement.guard.js +7 -3
  69. package/dist/enforcement/global-enforcement.guard.js.map +1 -0
  70. package/dist/enforcement/reenroll-allowlist.js.map +1 -0
  71. package/dist/identity/auth-facts.controller.js.map +1 -0
  72. package/dist/identity/identity-actions.d.ts +9 -0
  73. package/dist/identity/identity-actions.d.ts.map +1 -1
  74. package/dist/identity/identity-actions.js +16 -1
  75. package/dist/identity/identity-actions.js.map +1 -0
  76. package/dist/identity/module-registry.bridge.js.map +1 -0
  77. package/dist/identity/permission-facts.adapter.js.map +1 -0
  78. package/dist/index.d.ts +5 -2
  79. package/dist/index.d.ts.map +1 -1
  80. package/dist/index.js +20 -3
  81. package/dist/index.js.map +1 -0
  82. package/dist/migrations-dir.js.map +1 -0
  83. package/dist/module/shield-tokens.js.map +1 -0
  84. package/dist/module/shield.module.js.map +1 -0
  85. package/dist/request-auth/request-principal.d.ts +11 -3
  86. package/dist/request-auth/request-principal.d.ts.map +1 -1
  87. package/dist/request-auth/request-principal.js +58 -2
  88. package/dist/request-auth/request-principal.js.map +1 -0
  89. package/dist/request-auth/session-facts-als.js.map +1 -0
  90. package/dist/request-auth/session-token-binder.js.map +1 -0
  91. package/dist/request-auth/tokens.d.ts +10 -0
  92. package/dist/request-auth/tokens.d.ts.map +1 -1
  93. package/dist/request-auth/tokens.js +11 -1
  94. package/dist/request-auth/tokens.js.map +1 -0
  95. package/dist/scope/closure-builder.js.map +1 -0
  96. package/dist/secrets/encrypted-file-secrets.d.ts +16 -0
  97. package/dist/secrets/encrypted-file-secrets.d.ts.map +1 -0
  98. package/dist/secrets/encrypted-file-secrets.js +92 -0
  99. package/dist/session/crypto-adapters.js.map +1 -0
  100. package/dist/session/index.js.map +1 -0
  101. package/dist/session/mariadb-session-record-store.js.map +1 -0
  102. package/dist/session/redis-hot-session-store.js.map +1 -0
  103. package/migrations/1710000000017-CreateServiceAccountKey.cjs +41 -0
  104. package/package.json +3 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrations-dir.js","sourceRoot":"","sources":["../src/migrations-dir.ts"],"names":[],"mappings":";;;AAAA;;;;;;;GAOG;AACH,yCAAiC;AAEpB,QAAA,kBAAkB,GAAW,IAAA,gBAAI,EAAC,SAAS,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shield-tokens.js","sourceRoot":"","sources":["../../src/module/shield-tokens.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAEH;;;;;;;;;;GAUG;AACH,qCAAyD;AAAhD,iHAAA,yBAAyB,OAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shield.module.js","sourceRoot":"","sources":["../../src/module/shield.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAmF;AACnF,uCAAyC;AA4BzC,8DAAoE;AACpE,gFAAyE;AACzE,2DAAoD;AACpD,iEAAwD;AACxD,2DAAwE;AACxE,gFAAgF;AAChF,4EAA4E;AAC5E,kFAAkF;AAClF,mFAAmF;AACnF,+EAA+E;AAC/E,uBAAuB;AACvB,2DAAoD;AAEpD,iFAAiF;AACjF,kFAAkF;AAClF,sFAAsF;AACtF,yDAA+D;AACtD,0GADA,4CAAyB,OACA;AAelC;;;;;;;;GAQG;AACH,MAAM,UAAU,GAAG,IAAI,QAAQ,CAAC,WAAW,EAAE,2BAA2B,CAEnD,CAAC;AAEtB,IAAI,mBAAuD,CAAC;AAE5D;;;;;;;;;;;;GAYG;AACH,KAAK,UAAU,4BAA4B;IAGzC,IAAI,mBAAmB,KAAK,SAAS,EAAE,CAAC;QACtC,IAAI,CAAC;YACH,mBAAmB,GAAG,CAAC,wDACrB,uCAAuC,GACxC,CAAsC,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC;YACP,mFAAmF;YACnF,oFAAoF;YACpF,sFAAsF;YACtF,MAAM,IAAI,GAAG,IAAA,wBAAa,EAAC,GAAG,SAAS,wCAAwC,CAAC,CAAC,IAAI,CAAC;YACtF,mBAAmB,GAAG,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,CAA2B,CAAC;QAC3E,CAAC;IACH,CAAC;IACD,OAAO,mBAAmB,CAAC,wBAAwB,CAAC;AACtD,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,KAAK,UAAU,wBAAwB,CACrC,OAA+E;IAE/E,IAAI,OAAO,CAAC,mBAAmB,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;QAC7D,MAAM,IAAI,KAAK,CACb,uFAAuF;YACrF,wFAAwF;YACxF,kFAAkF,CACrF,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,MAAM,4BAA4B,EAAE,CAAC;QACnD,OAAO,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,OAAO,CAAC,iBAAiB,IAAI,oCAAqB,CAAC;AAC5D,CAAC;AA8QD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAGI,IAAM,YAAY,oBAAlB,MAAM,YAAY;IACvB,6DAA6D;IAC7D,MAAM,CAAC,OAAO,CAAC,UAA+B,EAAE;QAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAA,6BAAa,GAAE,CAAC;QACjD,8EAA8E;QAC9E,6EAA6E;QAC7E,2EAA2E;QAC3E,4EAA4E;QAC5E,+EAA+E;QAC/E,gFAAgF;QAChF,+EAA+E;QAC/E,gFAAgF;QAChF,4DAA4D;QAC5D,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI;YAC7B,CAAC,CAAC,2BAAU,CAAC,OAAO;YAChB,8DAA8D;YAC9D,0EAA0E;YAC1E,2EAA2E;YAC3E,iEAAiE;YACjE;gBACE,GAAG,CAAC,OAAO,CAAC,kBAAkB;oBAC5B,CAAC,CAAC,EAAE,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,EAAE;oBACpD,CAAC,CAAC,EAAE,CAAC;gBACP,GAAG,CAAC,OAAO,CAAC,eAAe;oBACzB,CAAC,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE;oBAC9C,CAAC,CAAC,EAAE,CAAC;gBACP,uEAAuE;gBACvE,mDAAmD;gBACnD,uEAAuE;gBACvE,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnF,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChF,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpE,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtF,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1E,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7E,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC9D,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7E,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxD,GAAG,CAAC,OAAO,CAAC,kBAAkB;oBAC5B,CAAC,CAAC,EAAE,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,EAAE;oBACpD,CAAC,CAAC,EAAE,CAAC;gBACP,GAAG,CAAC,OAAO,CAAC,wBAAwB;oBAClC,CAAC,CAAC,EAAE,wBAAwB,EAAE,OAAO,CAAC,wBAAwB,EAAE;oBAChE,CAAC,CAAC,EAAE,CAAC;gBACP,GAAG,CAAC,OAAO,CAAC,qBAAqB;oBAC/B,CAAC,CAAC,EAAE,qBAAqB,EAAE,OAAO,CAAC,qBAAqB,EAAE;oBAC1D,CAAC,CAAC,EAAE,CAAC;gBACP,GAAG,CAAC,OAAO,CAAC,oBAAoB;oBAC9B,CAAC,CAAC,EAAE,oBAAoB,EAAE,OAAO,CAAC,oBAAoB,EAAE;oBACxD,CAAC,CAAC,EAAE,CAAC;gBACP,GAAG,CAAC,OAAO,CAAC,iBAAiB;oBAC3B,CAAC,CAAC,EAAE,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,EAAE;oBAClD,CAAC,CAAC,EAAE,CAAC;aACR,CACF;YACH,CAAC,CAAC,SAAS,CAAC;QACd,OAAO;YACL,MAAM,EAAE,cAAY;YACpB,4EAA4E;YAC5E,4EAA4E;YAC5E,8EAA8E;YAC9E,uEAAuE;YACvE,sDAAsD;YACtD,OAAO,EAAE,CAAC,yCAAiB,EAAE,2BAAU,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC7E,SAAS,EAAE;gBACT,EAAE,OAAO,EAAE,6BAAU,EAAE,QAAQ,EAAE,MAAM,EAAE;gBACzC;oBACE,+EAA+E;oBAC/E,2EAA2E;oBAC3E,4EAA4E;oBAC5E,wCAAwC;oBACxC,OAAO,EAAE,4CAAyB;oBAClC,UAAU,EAAE,GAAmC,EAAE,CAC/C,wBAAwB,CAAC;wBACvB,GAAG,CAAC,OAAO,CAAC,mBAAmB;4BAC7B,CAAC,CAAC,EAAE,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,EAAE;4BACtD,CAAC,CAAC,EAAE,CAAC;wBACP,GAAG,CAAC,OAAO,CAAC,iBAAiB;4BAC3B,CAAC,CAAC,EAAE,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,EAAE;4BAClD,CAAC,CAAC,EAAE,CAAC;qBACR,CAAC;iBACL;aACF;YACD,8EAA8E;YAC9E,8EAA8E;YAC9E,qEAAqE;YACrE,OAAO,EAAE;gBACP,6BAAU;gBACV,4CAAyB;gBACzB,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aACpC;SACF,CAAC;IACJ,CAAC;IAED;;;;;;;;;OASG;IACH,MAAM,CAAC,YAAY,CAAC,OAAiC;QACnD,MAAM,YAAY,GAAG,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAErD,MAAM,oBAAoB,GAAa;YACrC,OAAO,EAAE,YAAY;YACrB,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAY;SAC1C,CAAC;QAEF,MAAM,cAAc,GAAa;YAC/B,OAAO,EAAE,6BAAU;YACnB,UAAU,EAAE,CAAC,IAAyB,EAAa,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,IAAA,6BAAa,GAAE;YACpF,MAAM,EAAE,CAAC,YAAY,CAAC;SACvB,CAAC;QAEF,MAAM,iBAAiB,GAAa;YAClC,OAAO,EAAE,4CAAyB;YAClC,4EAA4E;YAC5E,mFAAmF;YACnF,iFAAiF;YACjF,8EAA8E;YAC9E,gFAAgF;YAChF,UAAU,EAAE,CAAC,IAAyB,EAAkC,EAAE,CACxE,wBAAwB,CAAC;gBACvB,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtF,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACjF,CAAC;YACJ,MAAM,EAAE,CAAC,YAAY,CAAC;SACvB,CAAC;QAEF,2EAA2E;QAC3E,wEAAwE;QACxE,kEAAkE;QAClE,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI;YAC7B,CAAC,CAAC,2BAAU,CAAC,OAAO;YAChB,8DAA8D;YAC9D,0EAA0E;YAC1E,2EAA2E;YAC3E,iEAAiE;YACjE;gBACE,GAAG,CAAC,OAAO,CAAC,kBAAkB;oBAC5B,CAAC,CAAC,EAAE,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,EAAE;oBACpD,CAAC,CAAC,EAAE,CAAC;gBACP,GAAG,CAAC,OAAO,CAAC,eAAe;oBACzB,CAAC,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE;oBAC9C,CAAC,CAAC,EAAE,CAAC;gBACP,uEAAuE;gBACvE,mDAAmD;gBACnD,uEAAuE;gBACvE,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnF,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChF,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpE,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtF,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1E,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7E,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC9D,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7E,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxD,GAAG,CAAC,OAAO,CAAC,kBAAkB;oBAC5B,CAAC,CAAC,EAAE,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,EAAE;oBACpD,CAAC,CAAC,EAAE,CAAC;gBACP,GAAG,CAAC,OAAO,CAAC,wBAAwB;oBAClC,CAAC,CAAC,EAAE,wBAAwB,EAAE,OAAO,CAAC,wBAAwB,EAAE;oBAChE,CAAC,CAAC,EAAE,CAAC;gBACP,GAAG,CAAC,OAAO,CAAC,qBAAqB;oBAC/B,CAAC,CAAC,EAAE,qBAAqB,EAAE,OAAO,CAAC,qBAAqB,EAAE;oBAC1D,CAAC,CAAC,EAAE,CAAC;gBACP,GAAG,CAAC,OAAO,CAAC,oBAAoB;oBAC9B,CAAC,CAAC,EAAE,oBAAoB,EAAE,OAAO,CAAC,oBAAoB,EAAE;oBACxD,CAAC,CAAC,EAAE,CAAC;gBACP,GAAG,CAAC,OAAO,CAAC,iBAAiB;oBAC3B,CAAC,CAAC,EAAE,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,EAAE;oBAClD,CAAC,CAAC,EAAE,CAAC;aACR,CACF;YACH,CAAC,CAAC,SAAS,CAAC;QACd,OAAO;YACL,MAAM,EAAE,cAAY;YACpB,2EAA2E;YAC3E,6EAA6E;YAC7E,4EAA4E;YAC5E,+BAA+B;YAC/B,OAAO,EAAE;gBACP,yCAAiB;gBACjB,2BAAU;gBACV,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnC,GAAI,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAa;aACxC;YACD,SAAS,EAAE,CAAC,oBAAoB,EAAE,cAAc,EAAE,iBAAiB,CAAC;YACpE,OAAO,EAAE;gBACP,6BAAU;gBACV,4CAAyB;gBACzB,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aACpC;SACF,CAAC;IACJ,CAAC;CACF,CAAA;AA1MY,oCAAY;uBAAZ,YAAY;IAFxB,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,YAAY,CA0MxB"}
@@ -12,7 +12,7 @@
12
12
  * captured from the login-time Principal, so a genuinely-root login stays
13
13
  * root; a normal login can never become one on a later request).
14
14
  */
15
- import type { Principal } from '@astram/core';
15
+ import type { Principal, ServiceAuthenticator } from '@astram/core';
16
16
  import type { SessionTokenBinder, BoundPrincipalClaims } from './session-token-binder.js';
17
17
  /** Extract a bearer token from an `Authorization: Bearer <token>` header. */
18
18
  export declare function extractBearerToken(authorizationHeader: unknown): string | null;
@@ -22,11 +22,19 @@ export declare function extractBearerToken(authorizationHeader: unknown): string
22
22
  * a root on the request path.
23
23
  */
24
24
  export declare function principalFromClaims(claims: BoundPrincipalClaims): Principal | null;
25
+ /**
26
+ * Is this bearer token a service-account API key (`ask_…`, ADR-0033) rather than a session
27
+ * access token? A cheap prefix check; the authenticator does the real (constant-time) verify.
28
+ */
29
+ export declare function isApiKey(token: string): boolean;
25
30
  /**
26
31
  * Resolve an HTTP request's bearer token to a `Principal`, or `null` (fail-closed)
27
32
  * when there is no token, no binding, or the binding is malformed.
33
+ *
34
+ * When `serviceAuth` is provided and the bearer token is an API key (`ask_…`, ADR-0033), the token
35
+ * is authenticated as a service account instead of resolved against the session binder.
28
36
  */
29
- export declare function resolveRequestPrincipal(authorizationHeader: unknown, binder: SessionTokenBinder): Promise<Principal | null>;
37
+ export declare function resolveRequestPrincipal(authorizationHeader: unknown, binder: SessionTokenBinder, serviceAuth?: ServiceAuthenticator): Promise<Principal | null>;
30
38
  /**
31
39
  * Resolve an HTTP request's bearer token to BOTH a `Principal` AND the raw
32
40
  * {@link BoundPrincipalClaims}, or `null` (fail-closed) — the same read path as
@@ -35,7 +43,7 @@ export declare function resolveRequestPrincipal(authorizationHeader: unknown, bi
35
43
  * uses this so it can read `claims.mustReenroll` to apply the enforced-re-enroll gate
36
44
  * while still attaching the resolved `Principal` for `decide()`.
37
45
  */
38
- export declare function resolveRequestAuth(authorizationHeader: unknown, binder: SessionTokenBinder): Promise<{
46
+ export declare function resolveRequestAuth(authorizationHeader: unknown, binder: SessionTokenBinder, serviceAuth?: ServiceAuthenticator): Promise<{
39
47
  principal: Principal;
40
48
  claims: BoundPrincipalClaims;
41
49
  } | null>;
@@ -1 +1 @@
1
- {"version":3,"file":"request-principal.d.ts","sourceRoot":"","sources":["../../src/request-auth/request-principal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAK1F,6EAA6E;AAC7E,wBAAgB,kBAAkB,CAAC,mBAAmB,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAK9E;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,oBAAoB,GAAG,SAAS,GAAG,IAAI,CAiClF;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,mBAAmB,EAAE,OAAO,EAC5B,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAM3B;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,mBAAmB,EAAE,OAAO,EAC5B,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC;IAAE,SAAS,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,oBAAoB,CAAA;CAAE,GAAG,IAAI,CAAC,CAQxE"}
1
+ {"version":3,"file":"request-principal.d.ts","sourceRoot":"","sources":["../../src/request-auth/request-principal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAa1F,6EAA6E;AAC7E,wBAAgB,kBAAkB,CAAC,mBAAmB,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAK9E;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,oBAAoB,GAAG,SAAS,GAAG,IAAI,CAiClF;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE/C;AA4BD;;;;;;GAMG;AACH,wBAAsB,uBAAuB,CAC3C,mBAAmB,EAAE,OAAO,EAC5B,MAAM,EAAE,kBAAkB,EAC1B,WAAW,CAAC,EAAE,oBAAoB,GACjC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAU3B;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,mBAAmB,EAAE,OAAO,EAC5B,MAAM,EAAE,kBAAkB,EAC1B,WAAW,CAAC,EAAE,oBAAoB,GACjC,OAAO,CAAC;IAAE,SAAS,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,oBAAoB,CAAA;CAAE,GAAG,IAAI,CAAC,CAgBxE"}
@@ -16,10 +16,18 @@
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  exports.extractBearerToken = extractBearerToken;
18
18
  exports.principalFromClaims = principalFromClaims;
19
+ exports.isApiKey = isApiKey;
19
20
  exports.resolveRequestPrincipal = resolveRequestPrincipal;
20
21
  exports.resolveRequestAuth = resolveRequestAuth;
21
22
  /** Valid `Principal.kind` values (mirror of the Core union; validated at rebuild). */
22
23
  const PRINCIPAL_KINDS = new Set(['user', 'role_group', 'service_account']);
24
+ /**
25
+ * The service-account API-key prefix (mirror of Core's `API_KEY_PREFIX = 'ask_'`, ADR-0033) —
26
+ * inlined as a literal so this file keeps its ZERO-runtime-`require('@astram/core')` discipline
27
+ * (importing the value would add a runtime dep; the type-only imports above are erased). Kept in
28
+ * sync with Core by the ADR + a guard test that asserts equality with the Core export.
29
+ */
30
+ const API_KEY_PREFIX = 'ask_';
23
31
  /** Extract a bearer token from an `Authorization: Bearer <token>` header. */
24
32
  function extractBearerToken(authorizationHeader) {
25
33
  if (typeof authorizationHeader !== 'string')
@@ -64,14 +72,53 @@ function principalFromClaims(claims) {
64
72
  isRoot: claims.isRoot === true,
65
73
  });
66
74
  }
75
+ /**
76
+ * Is this bearer token a service-account API key (`ask_…`, ADR-0033) rather than a session
77
+ * access token? A cheap prefix check; the authenticator does the real (constant-time) verify.
78
+ */
79
+ function isApiKey(token) {
80
+ return token.startsWith(API_KEY_PREFIX);
81
+ }
82
+ /**
83
+ * Synthesize {@link BoundPrincipalClaims} for a machine (service-account) request from its resolved
84
+ * {@link Principal} (ADR-0033). A service account has NO interactive-session state — so the
85
+ * session-only gates are set to their benign defaults:
86
+ * - `mustReenroll: false` — re-enroll is a human recovery-code concern; a machine never re-enrolls.
87
+ * - `sessionId: ''` — there is no durable session row (the key IS the credential); the field is
88
+ * present only to satisfy the claims shape (no logout/liveness correlation applies to a key —
89
+ * revocation is via the key's `revokedAtMs`, enforced at authenticate time).
90
+ * - no `cachedFacts` (absent) — gate 5 DB-reloads the account's grants (fail-closed default; a
91
+ * machine has no login-time projection).
92
+ * The Principal's `scopeSubtreeNodeIds` is carried through so the tenant/scope gate reads the
93
+ * account's own subtree (least privilege).
94
+ */
95
+ function claimsFromServicePrincipal(principal) {
96
+ return {
97
+ id: principal.id,
98
+ tenantId: principal.tenantId,
99
+ roleIds: [...principal.roleIds],
100
+ kind: principal.kind,
101
+ isRoot: false, // a service account is NEVER root (ADR-0033) — defense-in-depth on the claims too.
102
+ sessionId: '',
103
+ mustReenroll: false,
104
+ scopeSubtreeNodeIds: [...principal.scopeSubtreeNodeIds],
105
+ };
106
+ }
67
107
  /**
68
108
  * Resolve an HTTP request's bearer token to a `Principal`, or `null` (fail-closed)
69
109
  * when there is no token, no binding, or the binding is malformed.
110
+ *
111
+ * When `serviceAuth` is provided and the bearer token is an API key (`ask_…`, ADR-0033), the token
112
+ * is authenticated as a service account instead of resolved against the session binder.
70
113
  */
71
- async function resolveRequestPrincipal(authorizationHeader, binder) {
114
+ async function resolveRequestPrincipal(authorizationHeader, binder, serviceAuth) {
72
115
  const token = extractBearerToken(authorizationHeader);
73
116
  if (token === null)
74
117
  return null;
118
+ if (serviceAuth !== undefined && isApiKey(token)) {
119
+ const res = await serviceAuth.authenticateApiKey(token);
120
+ return res.ok ? res.principal : null; // fail-closed uniform on any bad key.
121
+ }
75
122
  const claims = await binder.resolve(token);
76
123
  if (claims === null)
77
124
  return null;
@@ -85,10 +132,19 @@ async function resolveRequestPrincipal(authorizationHeader, binder) {
85
132
  * uses this so it can read `claims.mustReenroll` to apply the enforced-re-enroll gate
86
133
  * while still attaching the resolved `Principal` for `decide()`.
87
134
  */
88
- async function resolveRequestAuth(authorizationHeader, binder) {
135
+ async function resolveRequestAuth(authorizationHeader, binder, serviceAuth) {
89
136
  const token = extractBearerToken(authorizationHeader);
90
137
  if (token === null)
91
138
  return null;
139
+ // Machine path (ADR-0033): an `ask_…` bearer is a service-account API key. Authenticate it and
140
+ // synthesize the claims (benign session defaults) so ALL downstream enforcement — the re-enroll
141
+ // gate, the facts hot-path, decide() — is IDENTICAL to a human's (invariant #3, one authority).
142
+ if (serviceAuth !== undefined && isApiKey(token)) {
143
+ const res = await serviceAuth.authenticateApiKey(token);
144
+ if (!res.ok)
145
+ return null; // uniform fail-closed (malformed/unknown/expired/revoked/outage).
146
+ return { principal: res.principal, claims: claimsFromServicePrincipal(res.principal) };
147
+ }
92
148
  const claims = await binder.resolve(token);
93
149
  if (claims === null)
94
150
  return null;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-principal.js","sourceRoot":"","sources":["../../src/request-auth/request-principal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-facts-als.js","sourceRoot":"","sources":["../../src/request-auth/session-facts-als.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;;;AAEH,uDAAqD;AAmBrD;;;;;;GAMG;AACU,QAAA,wBAAwB,GAAG,IAAI,oCAAiB,EAAqB,CAAC;AAEnF;;;;GAIG;AACU,QAAA,gBAAgB,GAAsB,MAAM,CAAC,MAAM,CAAC;IAC/D,WAAW,EAAE,IAAI;IACjB,kBAAkB,EAAE,CAAC;CACtB,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-token-binder.js","sourceRoot":"","sources":["../../src/request-auth/session-token-binder.ts"],"names":[],"mappings":"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"}
@@ -11,4 +11,14 @@
11
11
  * missing (fail-closed).
12
12
  */
13
13
  export declare const SHIELD_SESSION_TOKEN_BINDER: unique symbol;
14
+ /**
15
+ * The {@link import('@astram/core').ServiceAuthenticator} — authenticates a service-account API
16
+ * key (`Authorization: Bearer ask_…`, ADR-0033) into a tenant-bound `service_account` Principal.
17
+ * Provided only when the app wires an {@link import('@astram/core').ApiKeyStore} (i.e. it enables
18
+ * machine/agent access). ABSENT by default — the guard injects it `@Optional()`; when missing, an
19
+ * `ask_…` bearer simply has no authenticator and is treated as an unresolvable token (401,
20
+ * fail-closed), exactly as if the key were unknown. Enabling it opens the machine auth path WITHOUT
21
+ * touching the human session path.
22
+ */
23
+ export declare const SHIELD_SERVICE_AUTHENTICATOR: unique symbol;
14
24
  //# sourceMappingURL=tokens.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/request-auth/tokens.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,2BAA2B,eAAwC,CAAC"}
1
+ {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/request-auth/tokens.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,2BAA2B,eAAwC,CAAC;AAEjF;;;;;;;;GAQG;AACH,eAAO,MAAM,4BAA4B,eAAyC,CAAC"}
@@ -4,7 +4,7 @@
4
4
  * the enforcement guard and the auth wiring can both depend on them without cycles.
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.SHIELD_SESSION_TOKEN_BINDER = void 0;
7
+ exports.SHIELD_SERVICE_AUTHENTICATOR = exports.SHIELD_SESSION_TOKEN_BINDER = void 0;
8
8
  /**
9
9
  * The {@link import('./session-token-binder.js').SessionTokenBinder} — binds an
10
10
  * opaque access token to its principal claims (server-side), so the enforcement
@@ -14,3 +14,13 @@ exports.SHIELD_SESSION_TOKEN_BINDER = void 0;
14
14
  * missing (fail-closed).
15
15
  */
16
16
  exports.SHIELD_SESSION_TOKEN_BINDER = Symbol('SHIELD_SESSION_TOKEN_BINDER');
17
+ /**
18
+ * The {@link import('@astram/core').ServiceAuthenticator} — authenticates a service-account API
19
+ * key (`Authorization: Bearer ask_…`, ADR-0033) into a tenant-bound `service_account` Principal.
20
+ * Provided only when the app wires an {@link import('@astram/core').ApiKeyStore} (i.e. it enables
21
+ * machine/agent access). ABSENT by default — the guard injects it `@Optional()`; when missing, an
22
+ * `ask_…` bearer simply has no authenticator and is treated as an unresolvable token (401,
23
+ * fail-closed), exactly as if the key were unknown. Enabling it opens the machine auth path WITHOUT
24
+ * touching the human session path.
25
+ */
26
+ exports.SHIELD_SERVICE_AUTHENTICATOR = Symbol('SHIELD_SERVICE_AUTHENTICATOR');
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/request-auth/tokens.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH;;;;;;;GAOG;AACU,QAAA,2BAA2B,GAAG,MAAM,CAAC,6BAA6B,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"closure-builder.js","sourceRoot":"","sources":["../../src/scope/closure-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { CryptoPort, Dek, SecretsProvider, SecretPath } from '@astram/core';
2
+ export declare class EncryptedFileSecretsProvider implements SecretsProvider {
3
+ #private;
4
+ /**
5
+ * @param file path to the encrypted store file (created 0600 on first write).
6
+ * @param crypto the ADR-0031 CryptoPort (AES-GCM); the SAME box KEK protects secrets + DEKs.
7
+ * @param dek the data key used to encrypt secret values. Provisioned/managed by the caller (a
8
+ * dedicated secrets DEK, wrapped by the KEK) — it is NEVER written to the store in plaintext.
9
+ */
10
+ constructor(file: string, crypto: CryptoPort, dek: Dek);
11
+ resolve(path: SecretPath): Promise<string>;
12
+ store(path: SecretPath, value: string): Promise<number>;
13
+ rotate(path: SecretPath, newValue: string): Promise<number>;
14
+ currentVersion(path: SecretPath): Promise<number>;
15
+ }
16
+ //# sourceMappingURL=encrypted-file-secrets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encrypted-file-secrets.d.ts","sourceRoot":"","sources":["../../src/secrets/encrypted-file-secrets.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AASjF,qBAAa,4BAA6B,YAAW,eAAe;;IAKlE;;;;;OAKG;gBACS,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG;IAMhD,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAS1C,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIvD,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI3D,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;CA+BxD"}
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EncryptedFileSecretsProvider = void 0;
4
+ /**
5
+ * `EncryptedFileSecretsProvider` — the reference {@link SecretsProvider} adapter (ADR-0032). An
6
+ * on-box secrets store where every secret is ENCRYPTED AT REST (AES-256-GCM under the box KEK, via
7
+ * the ADR-0031 `CryptoPort`), so the file on disk is ciphertext — not a plaintext `.env` password.
8
+ *
9
+ * This is the dev + air-gapped / single-box backend (what astram-infra's box uses). Vault / AWS
10
+ * Secrets Manager / GCP Secret Manager implement the SAME `SecretsProvider` and drop in later
11
+ * (Rule of Three) — no consumer change.
12
+ *
13
+ * SECURITY: never logs a secret value. `resolve` fails closed (throws SecretNotFoundError on an
14
+ * absent path — never returns ''). The store file is written 0600. The value is bound to its path
15
+ * as AEAD AAD, so a ciphertext for one path can't be replayed under another.
16
+ *
17
+ * Store format (JSON): { "<path>": { "version": n, "ciphertext": "<base64>" }, ... }
18
+ * The ciphertext is the CryptoPort AES-GCM sealing of the secret value, AAD = the secret path.
19
+ */
20
+ const node_fs_1 = require("node:fs");
21
+ const node_path_1 = require("node:path");
22
+ const core_1 = require("@astram/core");
23
+ const enc = new TextEncoder();
24
+ const dec = new TextDecoder();
25
+ class EncryptedFileSecretsProvider {
26
+ #file;
27
+ #crypto;
28
+ #dek;
29
+ /**
30
+ * @param file path to the encrypted store file (created 0600 on first write).
31
+ * @param crypto the ADR-0031 CryptoPort (AES-GCM); the SAME box KEK protects secrets + DEKs.
32
+ * @param dek the data key used to encrypt secret values. Provisioned/managed by the caller (a
33
+ * dedicated secrets DEK, wrapped by the KEK) — it is NEVER written to the store in plaintext.
34
+ */
35
+ constructor(file, crypto, dek) {
36
+ this.#file = file;
37
+ this.#crypto = crypto;
38
+ this.#dek = dek;
39
+ }
40
+ async resolve(path) {
41
+ const store = this.#read();
42
+ const entry = store[path];
43
+ if (!entry)
44
+ throw new core_1.SecretNotFoundError(path);
45
+ // AAD = path (bound), so a ciphertext moved to another path fails to decrypt.
46
+ const plain = await this.#crypto.decrypt(fromB64(entry.ciphertext), this.#dek, path);
47
+ return dec.decode(plain);
48
+ }
49
+ async store(path, value) {
50
+ return this.#write(path, value, /*rotate*/ false);
51
+ }
52
+ async rotate(path, newValue) {
53
+ return this.#write(path, newValue, /*rotate*/ true);
54
+ }
55
+ async currentVersion(path) {
56
+ return this.#read()[path]?.version ?? 0;
57
+ }
58
+ // ── internals ─────────────────────────────────────────────────────────────
59
+ async #write(path, value, _rotate) {
60
+ const store = this.#read();
61
+ const ct = await this.#crypto.encrypt(enc.encode(value), this.#dek, path);
62
+ const version = (store[path]?.version ?? 0) + 1;
63
+ store[path] = { version, ciphertext: toB64(ct) };
64
+ this.#persist(store);
65
+ return version;
66
+ }
67
+ #read() {
68
+ if (!(0, node_fs_1.existsSync)(this.#file))
69
+ return {};
70
+ try {
71
+ const raw = (0, node_fs_1.readFileSync)(this.#file, 'utf8');
72
+ return raw.trim() === '' ? {} : JSON.parse(raw);
73
+ }
74
+ catch {
75
+ // A corrupt store must NOT silently become empty (that would erase secrets); fail loud.
76
+ throw new Error(`secrets store is unreadable/corrupt: ${this.#file}`);
77
+ }
78
+ }
79
+ #persist(store) {
80
+ const dir = (0, node_path_1.dirname)(this.#file);
81
+ if (!(0, node_fs_1.existsSync)(dir))
82
+ (0, node_fs_1.mkdirSync)(dir, { recursive: true, mode: 0o700 });
83
+ (0, node_fs_1.writeFileSync)(this.#file, JSON.stringify(store, null, 2), { mode: 0o600 });
84
+ try {
85
+ (0, node_fs_1.chmodSync)(this.#file, 0o600);
86
+ }
87
+ catch { /* best-effort on platforms without chmod */ }
88
+ }
89
+ }
90
+ exports.EncryptedFileSecretsProvider = EncryptedFileSecretsProvider;
91
+ function toB64(b) { return Buffer.from(b).toString('base64'); }
92
+ function fromB64(s) { return new Uint8Array(Buffer.from(s, 'base64')); }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto-adapters.js","sourceRoot":"","sources":["../../src/session/crypto-adapters.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;;AA2DH,oEAKC;AAED,sDAKC;AAED,kDAEC;AAzED,6CAAsD;AAGtD,yEAAyE;AAC5D,QAAA,sBAAsB,GAAG,MAAM,CAAC,wBAAwB,CAAC,CAAC;AAC1D,QAAA,qBAAqB,GAAG,MAAM,CAAC,uBAAuB,CAAC,CAAC;AACxD,QAAA,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AAEnD;;;;GAIG;AACH,MAAa,oBAAoB;IACF;IAA7B,YAA6B,aAAa,EAAE;QAAf,eAAU,GAAV,UAAU,CAAK;IAAG,CAAC;IAEhD,IAAI;QACF,uEAAuE;QACvE,OAAO,IAAA,yBAAW,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC;CACF;AAPD,oDAOC;AAED;;;;;;;;GAQG;AACH,MAAa,wBAAwB;IAClB,GAAG,CAAS;IAE7B,YAAY,GAAW;QACrB,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CACb,0FAA0F,CAC3F,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,CAAC,QAAgB;QACnB,mEAAmE;QACnE,OAAO,IAAA,wBAAU,EAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/E,CAAC;CACF;AAhBD,4DAgBC;AAED,oDAAoD;AACpD,MAAa,WAAW;IACtB,KAAK;QACH,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC;IACpB,CAAC;CACF;AAJD,kCAIC;AAED,qFAAqF;AACrF,SAAgB,4BAA4B,CAAC,UAAmB;IAI9D,OAAO,EAAE,OAAO,EAAE,8BAAsB,EAAE,QAAQ,EAAE,IAAI,oBAAoB,CAAC,UAAU,CAAC,EAAE,CAAC;AAC7F,CAAC;AAED,SAAgB,qBAAqB,CAAC,GAAW;IAI/C,OAAO,EAAE,OAAO,EAAE,6BAAqB,EAAE,QAAQ,EAAE,IAAI,wBAAwB,CAAC,GAAG,CAAC,EAAE,CAAC;AACzF,CAAC;AAED,SAAgB,mBAAmB;IACjC,OAAO,EAAE,OAAO,EAAE,oBAAY,EAAE,QAAQ,EAAE,IAAI,WAAW,EAAE,EAAE,CAAC;AAChE,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;;AAEH,qFAG2C;AAFzC,4IAAA,yBAAyB,OAAA;AACzB,8IAAA,2BAA2B,OAAA;AAG7B,2EAGsC;AAFpC,kIAAA,oBAAoB,OAAA;AACpB,sIAAA,wBAAwB,OAAA;AAG1B,2DAU8B;AAT5B,0HAAA,oBAAoB,OAAA;AACpB,8HAAA,wBAAwB,OAAA;AACxB,iHAAA,WAAW,OAAA;AACX,kIAAA,4BAA4B,OAAA;AAC5B,2HAAA,qBAAqB,OAAA;AACrB,yHAAA,mBAAmB,OAAA;AACnB,4HAAA,sBAAsB,OAAA;AACtB,2HAAA,qBAAqB,OAAA;AACrB,kHAAA,YAAY,OAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mariadb-session-record-store.js","sourceRoot":"","sources":["../../src/session/mariadb-session-record-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis-hot-session-store.js","sourceRoot":"","sources":["../../src/session/redis-hot-session-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Framework authz migration — `shield_authz.service_account_key`: the HASH-ONLY store of
3
+ * service-account API keys (ADR-0033). One row = one KEY VERSION of one service account; the
4
+ * account presents `ask_<sak_account_id>_<secret>` and the engine verifies `<secret>` against
5
+ * `sak_secret_hash` (Argon2id) — the raw secret is NEVER stored, logged, or re-fetchable.
6
+ *
7
+ * This table is the physical backing of `packages/guard/src/authentication/mariadb-api-key-store.ts`
8
+ * (`MariaDbApiKeyStore`): its columns MUST match that adapter's SELECT/INSERT/UPDATE EXACTLY
9
+ * (rule 30 — the store is the source of truth). Rotation INSERTs a new `(account, version)` row;
10
+ * `getByAccountId` returns the highest version; `revoke` stamps `sak_revoked_at_ms` on all of an
11
+ * account's rows. A revoked/expired key fails closed at authenticate time.
12
+ *
13
+ * Schema `shield_authz` is created by `1710000000006-CreateAuthzSchema.cjs` — NOT recreated here.
14
+ * Idempotent (CREATE TABLE IF NOT EXISTS). No hard-coded UUIDs, no seed (keys are admin-issued).
15
+ * `down` drops the table. Run by the DDL account.
16
+ */
17
+
18
+ const SCHEMA = 'shield_authz';
19
+
20
+ async function up({ query }) {
21
+ await query(`CREATE TABLE IF NOT EXISTS \`${SCHEMA}\`.\`service_account_key\` (
22
+ sak_account_id VARCHAR(36) NOT NULL, -- the <accountId> inside the ask_ key (= service_account.sa_id)
23
+ sak_version INT NOT NULL, -- monotonic per account; rotation bumps it
24
+ sak_tenant_id VARCHAR(36) NOT NULL, -- server-stamped; tenant the key is bound to
25
+ sak_scope_subtree JSON NOT NULL, -- reachable node ids for the key's Principal (least privilege)
26
+ sak_role_ids JSON NOT NULL, -- roles the key's Principal holds
27
+ sak_secret_hash VARCHAR(255) NOT NULL, -- Argon2id hash of the secret — NEVER the plaintext
28
+ sak_expires_at_ms BIGINT NULL, -- absolute expiry (epoch-ms); NULL = non-expiring (discouraged)
29
+ sak_revoked_at_ms BIGINT NULL, -- set on revoke (epoch-ms); a revoked key fails closed
30
+ sak_created_at_ms BIGINT NOT NULL, -- issue time (epoch-ms)
31
+ PRIMARY KEY (sak_account_id, sak_version),
32
+ INDEX idx_sak_account (sak_account_id),
33
+ INDEX idx_sak_tenant (sak_tenant_id)
34
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci`);
35
+ }
36
+
37
+ async function down({ query }) {
38
+ await query(`DROP TABLE IF EXISTS \`${SCHEMA}\`.\`service_account_key\``);
39
+ }
40
+
41
+ module.exports = { up, down };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@astram/guard",
3
- "version": "0.6.0",
3
+ "version": "0.7.0",
4
4
  "license": "MIT",
5
5
  "description": "Astram framework — the enforcement guard + real-world adapters (the 'hands'). One global deny-by-default gate every request passes through (ADR-0002), classification decorators, boot-pool assertion (ADR-0018), the forRoot() registration seam, and the DB/Redis/crypto adapters that connect the sealed core to a real backend. Depends on @astram/core (ADR-0003, ADR-0023).",
6
6
  "type": "commonjs",
@@ -24,8 +24,8 @@
24
24
  "argon2": "^0.41.1",
25
25
  "ioredis": "^5.4.1",
26
26
  "mariadb": "^3.4.0",
27
- "@astram/engine": "0.2.0",
28
- "@astram/core": "1.2.0"
27
+ "@astram/core": "1.3.0",
28
+ "@astram/engine": "0.3.0"
29
29
  },
30
30
  "peerDependencies": {
31
31
  "@nestjs/common": "^11",