life-as-api 0.2.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 (303) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +377 -0
  3. package/dist/agent/finance-agent.d.ts +44 -0
  4. package/dist/agent/finance-agent.js +75 -0
  5. package/dist/agent/finance-agent.js.map +1 -0
  6. package/dist/agent/legal-agent.d.ts +44 -0
  7. package/dist/agent/legal-agent.js +76 -0
  8. package/dist/agent/legal-agent.js.map +1 -0
  9. package/dist/agent/medical-agent.d.ts +44 -0
  10. package/dist/agent/medical-agent.js +75 -0
  11. package/dist/agent/medical-agent.js.map +1 -0
  12. package/dist/agent/trusted-agent-registry.d.ts +53 -0
  13. package/dist/agent/trusted-agent-registry.js +57 -0
  14. package/dist/agent/trusted-agent-registry.js.map +1 -0
  15. package/dist/audit/audit-chain-verifier.d.ts +10 -0
  16. package/dist/audit/audit-chain-verifier.js +67 -0
  17. package/dist/audit/audit-chain-verifier.js.map +1 -0
  18. package/dist/audit/audit-log.d.ts +48 -0
  19. package/dist/audit/audit-log.js +74 -0
  20. package/dist/audit/audit-log.js.map +1 -0
  21. package/dist/audit/sqlite-audit-log.d.ts +29 -0
  22. package/dist/audit/sqlite-audit-log.js +142 -0
  23. package/dist/audit/sqlite-audit-log.js.map +1 -0
  24. package/dist/auth/access-context-issuer.d.ts +18 -0
  25. package/dist/auth/access-context-issuer.js +88 -0
  26. package/dist/auth/access-context-issuer.js.map +1 -0
  27. package/dist/auth/assert-authorized-for-subject.d.ts +2 -0
  28. package/dist/auth/assert-authorized-for-subject.js +20 -0
  29. package/dist/auth/assert-authorized-for-subject.js.map +1 -0
  30. package/dist/auth/backend-context-minting-boundary.d.ts +23 -0
  31. package/dist/auth/backend-context-minting-boundary.js +281 -0
  32. package/dist/auth/backend-context-minting-boundary.js.map +1 -0
  33. package/dist/auth/default-authorization-policy.d.ts +7 -0
  34. package/dist/auth/default-authorization-policy.js +64 -0
  35. package/dist/auth/default-authorization-policy.js.map +1 -0
  36. package/dist/auth/fake-auth-adapter.d.ts +7 -0
  37. package/dist/auth/fake-auth-adapter.js +27 -0
  38. package/dist/auth/fake-auth-adapter.js.map +1 -0
  39. package/dist/auth/http-client.d.ts +12 -0
  40. package/dist/auth/http-client.js +7 -0
  41. package/dist/auth/http-client.js.map +1 -0
  42. package/dist/auth/in-memory-grant-resolver.d.ts +21 -0
  43. package/dist/auth/in-memory-grant-resolver.js +73 -0
  44. package/dist/auth/in-memory-grant-resolver.js.map +1 -0
  45. package/dist/auth/in-memory-tenant-boundary.d.ts +16 -0
  46. package/dist/auth/in-memory-tenant-boundary.js +37 -0
  47. package/dist/auth/in-memory-tenant-boundary.js.map +1 -0
  48. package/dist/auth/jwks-key-ring-auth-adapter.d.ts +38 -0
  49. package/dist/auth/jwks-key-ring-auth-adapter.js +123 -0
  50. package/dist/auth/jwks-key-ring-auth-adapter.js.map +1 -0
  51. package/dist/auth/jwks-key-ring.d.ts +25 -0
  52. package/dist/auth/jwks-key-ring.js +111 -0
  53. package/dist/auth/jwks-key-ring.js.map +1 -0
  54. package/dist/auth/jwt-auth-adapter.d.ts +15 -0
  55. package/dist/auth/jwt-auth-adapter.js +59 -0
  56. package/dist/auth/jwt-auth-adapter.js.map +1 -0
  57. package/dist/auth/jwt-core.d.ts +32 -0
  58. package/dist/auth/jwt-core.js +226 -0
  59. package/dist/auth/jwt-core.js.map +1 -0
  60. package/dist/auth/jwt-key-ring-auth-adapter.d.ts +16 -0
  61. package/dist/auth/jwt-key-ring-auth-adapter.js +58 -0
  62. package/dist/auth/jwt-key-ring-auth-adapter.js.map +1 -0
  63. package/dist/auth/oidc-discovery.d.ts +15 -0
  64. package/dist/auth/oidc-discovery.js +46 -0
  65. package/dist/auth/oidc-discovery.js.map +1 -0
  66. package/dist/auth/production-scoped-life-api.d.ts +58 -0
  67. package/dist/auth/production-scoped-life-api.js +802 -0
  68. package/dist/auth/production-scoped-life-api.js.map +1 -0
  69. package/dist/auth/proposal-scope-inspector.d.ts +3 -0
  70. package/dist/auth/proposal-scope-inspector.js +42 -0
  71. package/dist/auth/proposal-scope-inspector.js.map +1 -0
  72. package/dist/auth/proposal-scoped-life-api.d.ts +21 -0
  73. package/dist/auth/proposal-scoped-life-api.js +168 -0
  74. package/dist/auth/proposal-scoped-life-api.js.map +1 -0
  75. package/dist/auth/rate-limited-context-minting-boundary.d.ts +27 -0
  76. package/dist/auth/rate-limited-context-minting-boundary.js +77 -0
  77. package/dist/auth/rate-limited-context-minting-boundary.js.map +1 -0
  78. package/dist/auth/revocation-aware-auth-adapter.d.ts +21 -0
  79. package/dist/auth/revocation-aware-auth-adapter.js +88 -0
  80. package/dist/auth/revocation-aware-auth-adapter.js.map +1 -0
  81. package/dist/auth/sqlite-grant-resolver.d.ts +8 -0
  82. package/dist/auth/sqlite-grant-resolver.js +78 -0
  83. package/dist/auth/sqlite-grant-resolver.js.map +1 -0
  84. package/dist/auth/sqlite-tenant-boundary.d.ts +7 -0
  85. package/dist/auth/sqlite-tenant-boundary.js +41 -0
  86. package/dist/auth/sqlite-tenant-boundary.js.map +1 -0
  87. package/dist/auth/static-jwt-key-ring.d.ts +13 -0
  88. package/dist/auth/static-jwt-key-ring.js +73 -0
  89. package/dist/auth/static-jwt-key-ring.js.map +1 -0
  90. package/dist/auth/subject-scoped-life-api.d.ts +14 -0
  91. package/dist/auth/subject-scoped-life-api.js +51 -0
  92. package/dist/auth/subject-scoped-life-api.js.map +1 -0
  93. package/dist/auth/test-context-minting-boundary.d.ts +13 -0
  94. package/dist/auth/test-context-minting-boundary.js +74 -0
  95. package/dist/auth/test-context-minting-boundary.js.map +1 -0
  96. package/dist/auth/types.d.ts +77 -0
  97. package/dist/auth/types.js +16 -0
  98. package/dist/auth/types.js.map +1 -0
  99. package/dist/compliance/subject-data-report.d.ts +43 -0
  100. package/dist/compliance/subject-data-report.js +155 -0
  101. package/dist/compliance/subject-data-report.js.map +1 -0
  102. package/dist/consent/consent-guard.d.ts +4 -0
  103. package/dist/consent/consent-guard.js +37 -0
  104. package/dist/consent/consent-guard.js.map +1 -0
  105. package/dist/consent/grant-registry.d.ts +7 -0
  106. package/dist/consent/grant-registry.js +13 -0
  107. package/dist/consent/grant-registry.js.map +1 -0
  108. package/dist/consent/intersect-selector.d.ts +3 -0
  109. package/dist/consent/intersect-selector.js +66 -0
  110. package/dist/consent/intersect-selector.js.map +1 -0
  111. package/dist/contract/diagnostics.d.ts +32 -0
  112. package/dist/contract/diagnostics.js +112 -0
  113. package/dist/contract/diagnostics.js.map +1 -0
  114. package/dist/contract/project-contracts.d.ts +5 -0
  115. package/dist/contract/project-contracts.js +159 -0
  116. package/dist/contract/project-contracts.js.map +1 -0
  117. package/dist/contract/types.d.ts +32 -0
  118. package/dist/contract/types.js +5 -0
  119. package/dist/contract/types.js.map +1 -0
  120. package/dist/crypto/aes-gcm.d.ts +11 -0
  121. package/dist/crypto/aes-gcm.js +78 -0
  122. package/dist/crypto/aes-gcm.js.map +1 -0
  123. package/dist/crypto/claim-serializer.d.ts +26 -0
  124. package/dist/crypto/claim-serializer.js +59 -0
  125. package/dist/crypto/claim-serializer.js.map +1 -0
  126. package/dist/crypto/sha256.d.ts +12 -0
  127. package/dist/crypto/sha256.js +40 -0
  128. package/dist/crypto/sha256.js.map +1 -0
  129. package/dist/crypto/static-key.d.ts +11 -0
  130. package/dist/crypto/static-key.js +60 -0
  131. package/dist/crypto/static-key.js.map +1 -0
  132. package/dist/crypto/types.d.ts +20 -0
  133. package/dist/crypto/types.js +8 -0
  134. package/dist/crypto/types.js.map +1 -0
  135. package/dist/datasource/trusted-data-source-registry.d.ts +51 -0
  136. package/dist/datasource/trusted-data-source-registry.js +57 -0
  137. package/dist/datasource/trusted-data-source-registry.js.map +1 -0
  138. package/dist/erasure/tombstone.d.ts +13 -0
  139. package/dist/erasure/tombstone.js +20 -0
  140. package/dist/erasure/tombstone.js.map +1 -0
  141. package/dist/evidence/evidence-backed-claim-creator.d.ts +48 -0
  142. package/dist/evidence/evidence-backed-claim-creator.js +107 -0
  143. package/dist/evidence/evidence-backed-claim-creator.js.map +1 -0
  144. package/dist/evidence/in-memory-raw-document-store.d.ts +26 -0
  145. package/dist/evidence/in-memory-raw-document-store.js +84 -0
  146. package/dist/evidence/in-memory-raw-document-store.js.map +1 -0
  147. package/dist/evidence/raw-document-store.d.ts +12 -0
  148. package/dist/evidence/raw-document-store.js +8 -0
  149. package/dist/evidence/raw-document-store.js.map +1 -0
  150. package/dist/evidence/source-evidence-validator.d.ts +4 -0
  151. package/dist/evidence/source-evidence-validator.js +14 -0
  152. package/dist/evidence/source-evidence-validator.js.map +1 -0
  153. package/dist/evidence/sqlite-raw-document-store.d.ts +19 -0
  154. package/dist/evidence/sqlite-raw-document-store.js +122 -0
  155. package/dist/evidence/sqlite-raw-document-store.js.map +1 -0
  156. package/dist/guardian/guardian-registry.d.ts +96 -0
  157. package/dist/guardian/guardian-registry.js +95 -0
  158. package/dist/guardian/guardian-registry.js.map +1 -0
  159. package/dist/index.d.ts +44 -0
  160. package/dist/index.js +72 -0
  161. package/dist/index.js.map +1 -0
  162. package/dist/observability/health.d.ts +12 -0
  163. package/dist/observability/health.js +16 -0
  164. package/dist/observability/health.js.map +1 -0
  165. package/dist/observability/logger.d.ts +21 -0
  166. package/dist/observability/logger.js +40 -0
  167. package/dist/observability/logger.js.map +1 -0
  168. package/dist/observability/metrics.d.ts +15 -0
  169. package/dist/observability/metrics.js +52 -0
  170. package/dist/observability/metrics.js.map +1 -0
  171. package/dist/persistence/backup.d.ts +24 -0
  172. package/dist/persistence/backup.js +251 -0
  173. package/dist/persistence/backup.js.map +1 -0
  174. package/dist/persistence/decryptability-scan.d.ts +10 -0
  175. package/dist/persistence/decryptability-scan.js +144 -0
  176. package/dist/persistence/decryptability-scan.js.map +1 -0
  177. package/dist/persistence/in-memory-unit-of-work.d.ts +11 -0
  178. package/dist/persistence/in-memory-unit-of-work.js +32 -0
  179. package/dist/persistence/in-memory-unit-of-work.js.map +1 -0
  180. package/dist/persistence/key-availability.d.ts +9 -0
  181. package/dist/persistence/key-availability.js +125 -0
  182. package/dist/persistence/key-availability.js.map +1 -0
  183. package/dist/persistence/sqlite/migrations.d.ts +9 -0
  184. package/dist/persistence/sqlite/migrations.js +535 -0
  185. package/dist/persistence/sqlite/migrations.js.map +1 -0
  186. package/dist/persistence/sqlite/schema.d.ts +10 -0
  187. package/dist/persistence/sqlite/schema.js +101 -0
  188. package/dist/persistence/sqlite/schema.js.map +1 -0
  189. package/dist/persistence/sqlite/sqlite-fact-store.d.ts +24 -0
  190. package/dist/persistence/sqlite/sqlite-fact-store.js +207 -0
  191. package/dist/persistence/sqlite/sqlite-fact-store.js.map +1 -0
  192. package/dist/persistence/sqlite/sqlite-source-registry.d.ts +17 -0
  193. package/dist/persistence/sqlite/sqlite-source-registry.js +132 -0
  194. package/dist/persistence/sqlite/sqlite-source-registry.js.map +1 -0
  195. package/dist/persistence/sqlite/sqlite-unit-of-work.d.ts +8 -0
  196. package/dist/persistence/sqlite/sqlite-unit-of-work.js +41 -0
  197. package/dist/persistence/sqlite/sqlite-unit-of-work.js.map +1 -0
  198. package/dist/persistence/sqlite/types.d.ts +24 -0
  199. package/dist/persistence/sqlite/types.js +28 -0
  200. package/dist/persistence/sqlite/types.js.map +1 -0
  201. package/dist/persistence/unit-of-work.d.ts +6 -0
  202. package/dist/persistence/unit-of-work.js +15 -0
  203. package/dist/persistence/unit-of-work.js.map +1 -0
  204. package/dist/proposal/accepted-claim-appender.d.ts +7 -0
  205. package/dist/proposal/accepted-claim-appender.js +16 -0
  206. package/dist/proposal/accepted-claim-appender.js.map +1 -0
  207. package/dist/proposal/in-memory-proposal-queue.d.ts +21 -0
  208. package/dist/proposal/in-memory-proposal-queue.js +218 -0
  209. package/dist/proposal/in-memory-proposal-queue.js.map +1 -0
  210. package/dist/proposal/policy-aware-proposal-queue.d.ts +23 -0
  211. package/dist/proposal/policy-aware-proposal-queue.js +162 -0
  212. package/dist/proposal/policy-aware-proposal-queue.js.map +1 -0
  213. package/dist/proposal/proposal-policy.d.ts +37 -0
  214. package/dist/proposal/proposal-policy.js +72 -0
  215. package/dist/proposal/proposal-policy.js.map +1 -0
  216. package/dist/proposal/proposal-queue.d.ts +13 -0
  217. package/dist/proposal/proposal-queue.js +15 -0
  218. package/dist/proposal/proposal-queue.js.map +1 -0
  219. package/dist/proposal/source-aware-claim-appender.d.ts +13 -0
  220. package/dist/proposal/source-aware-claim-appender.js +47 -0
  221. package/dist/proposal/source-aware-claim-appender.js.map +1 -0
  222. package/dist/proposal/sqlite-proposal-queue.d.ts +26 -0
  223. package/dist/proposal/sqlite-proposal-queue.js +282 -0
  224. package/dist/proposal/sqlite-proposal-queue.js.map +1 -0
  225. package/dist/resolution/resolve-claims.d.ts +4 -0
  226. package/dist/resolution/resolve-claims.js +101 -0
  227. package/dist/resolution/resolve-claims.js.map +1 -0
  228. package/dist/resolution/trust-profile.d.ts +12 -0
  229. package/dist/resolution/trust-profile.js +23 -0
  230. package/dist/resolution/trust-profile.js.map +1 -0
  231. package/dist/resolution/types.d.ts +15 -0
  232. package/dist/resolution/types.js +8 -0
  233. package/dist/resolution/types.js.map +1 -0
  234. package/dist/sdk/create-backend-integrated-life-api-for-test.d.ts +23 -0
  235. package/dist/sdk/create-backend-integrated-life-api-for-test.js +240 -0
  236. package/dist/sdk/create-backend-integrated-life-api-for-test.js.map +1 -0
  237. package/dist/sdk/create-life-api.d.ts +55 -0
  238. package/dist/sdk/create-life-api.js +251 -0
  239. package/dist/sdk/create-life-api.js.map +1 -0
  240. package/dist/sdk/create-sqlite-life-api.d.ts +33 -0
  241. package/dist/sdk/create-sqlite-life-api.js +654 -0
  242. package/dist/sdk/create-sqlite-life-api.js.map +1 -0
  243. package/dist/sdk/life-api.d.ts +27 -0
  244. package/dist/sdk/life-api.js +17 -0
  245. package/dist/sdk/life-api.js.map +1 -0
  246. package/dist/sdk/validation.d.ts +8 -0
  247. package/dist/sdk/validation.js +216 -0
  248. package/dist/sdk/validation.js.map +1 -0
  249. package/dist/source/in-memory-source-registry.d.ts +15 -0
  250. package/dist/source/in-memory-source-registry.js +104 -0
  251. package/dist/source/in-memory-source-registry.js.map +1 -0
  252. package/dist/source/source-aware-fact-store.d.ts +19 -0
  253. package/dist/source/source-aware-fact-store.js +40 -0
  254. package/dist/source/source-aware-fact-store.js.map +1 -0
  255. package/dist/source/source-kind-predicate-policy.d.ts +4 -0
  256. package/dist/source/source-kind-predicate-policy.js +62 -0
  257. package/dist/source/source-kind-predicate-policy.js.map +1 -0
  258. package/dist/source/source-registry.d.ts +11 -0
  259. package/dist/source/source-registry.js +12 -0
  260. package/dist/source/source-registry.js.map +1 -0
  261. package/dist/store/in-memory-fact-store.d.ts +25 -0
  262. package/dist/store/in-memory-fact-store.js +192 -0
  263. package/dist/store/in-memory-fact-store.js.map +1 -0
  264. package/dist/surface/context-query.d.ts +21 -0
  265. package/dist/surface/context-query.js +113 -0
  266. package/dist/surface/context-query.js.map +1 -0
  267. package/dist/surface/evidence-backed-context-query.d.ts +62 -0
  268. package/dist/surface/evidence-backed-context-query.js +240 -0
  269. package/dist/surface/evidence-backed-context-query.js.map +1 -0
  270. package/dist/types/access-context.d.ts +25 -0
  271. package/dist/types/access-context.js +6 -0
  272. package/dist/types/access-context.js.map +1 -0
  273. package/dist/types/claim.d.ts +48 -0
  274. package/dist/types/claim.js +5 -0
  275. package/dist/types/claim.js.map +1 -0
  276. package/dist/types/consent.d.ts +41 -0
  277. package/dist/types/consent.js +3 -0
  278. package/dist/types/consent.js.map +1 -0
  279. package/dist/types/crypto-boundary.d.ts +12 -0
  280. package/dist/types/crypto-boundary.js +15 -0
  281. package/dist/types/crypto-boundary.js.map +1 -0
  282. package/dist/types/evidence.d.ts +31 -0
  283. package/dist/types/evidence.js +8 -0
  284. package/dist/types/evidence.js.map +1 -0
  285. package/dist/types/fact-store.d.ts +24 -0
  286. package/dist/types/fact-store.js +12 -0
  287. package/dist/types/fact-store.js.map +1 -0
  288. package/dist/types/ids.d.ts +36 -0
  289. package/dist/types/ids.js +11 -0
  290. package/dist/types/ids.js.map +1 -0
  291. package/dist/types/proposal.d.ts +38 -0
  292. package/dist/types/proposal.js +7 -0
  293. package/dist/types/proposal.js.map +1 -0
  294. package/dist/types/source.d.ts +33 -0
  295. package/dist/types/source.js +6 -0
  296. package/dist/types/source.js.map +1 -0
  297. package/dist/types/trust.d.ts +24 -0
  298. package/dist/types/trust.js +5 -0
  299. package/dist/types/trust.js.map +1 -0
  300. package/dist/utilities/deep-freeze.d.ts +1 -0
  301. package/dist/utilities/deep-freeze.js +17 -0
  302. package/dist/utilities/deep-freeze.js.map +1 -0
  303. package/package.json +55 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"production-scoped-life-api.js","sourceRoot":"","sources":["../../src/auth/production-scoped-life-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Proposal } from "../types/proposal.js";
2
+ import type { MintedContext } from "./types.js";
3
+ export declare function inspectProposalScope(proposal: Proposal, minted: MintedContext): string;
@@ -0,0 +1,42 @@
1
+ // AUTH_PROPOSAL_ACCEPT_SCOPE_CHECKED_001 — Production-01d-a
2
+ //
3
+ // Pure helper — synchronous only, no I/O, no LifeApi calls, no ProposalQueue access.
4
+ // Inspects candidateClaims to determine if a proposal is within the authorized subject scope.
5
+ //
6
+ // AUTH_PROPOSAL_CANDIDATE_CLAIMS_SCOPED_001:
7
+ // AppendClaimInput.subject is always required (PersonId) — candidateClaims are always
8
+ // subject-scoped. There is no absent-subject case. No payload inspection for authorization.
9
+ //
10
+ // AUTH_PROPOSAL_ID_NOT_SUBJECT_FREE_001:
11
+ // ProposalId alone is not authorization proof — it routes to candidateClaims which carry
12
+ // subject-scoped data. Always inspect candidateClaims, never trust ProposalId alone.
13
+ //
14
+ // Rules (in order):
15
+ // 1. candidateClaims.length === 0 → AUTH_PROPOSAL_EMPTY_CANDIDATES_DENIED_001
16
+ // 2. uniqueSubjects.size !== 1 → AUTH_PROPOSAL_MULTI_SUBJECT_DENIED_001
17
+ // 3. authorizedPersonId absent → AUTH_PROPOSAL_SUBJECT_SCOPE_VIOLATION_001
18
+ // 4. authorizedPersonId mismatch → AUTH_PROPOSAL_SUBJECT_SCOPE_VIOLATION_001
19
+ // 5. success → return proposalSubject
20
+ export function inspectProposalScope(proposal, minted) {
21
+ const { candidateClaims } = proposal;
22
+ if (candidateClaims.length === 0) {
23
+ throw Object.assign(new Error("AUTH_PROPOSAL_EMPTY_CANDIDATES_DENIED_001: proposal has zero candidateClaims — " +
24
+ "scope cannot be determined; fail closed"), { code: "AUTH_PROPOSAL_EMPTY_CANDIDATES_DENIED_001" });
25
+ }
26
+ const uniqueSubjects = new Set(candidateClaims.map(c => c.subject));
27
+ if (uniqueSubjects.size !== 1) {
28
+ throw Object.assign(new Error("AUTH_PROPOSAL_MULTI_SUBJECT_DENIED_001: proposal candidateClaims span more than one " +
29
+ "distinct subject — multi-subject proposals are fail-closed for subject-scoped Owners"), { code: "AUTH_PROPOSAL_MULTI_SUBJECT_DENIED_001" });
30
+ }
31
+ const proposalSubject = [...uniqueSubjects][0];
32
+ if (minted.authorizedPersonId === undefined) {
33
+ throw Object.assign(new Error("AUTH_PROPOSAL_SUBJECT_SCOPE_VIOLATION_001: MintedContext.authorizedPersonId is absent — " +
34
+ "unscoped context must not use ProposalScopeInspector; call LifeApi directly"), { code: "AUTH_PROPOSAL_SUBJECT_SCOPE_VIOLATION_001" });
35
+ }
36
+ if (minted.authorizedPersonId !== proposalSubject) {
37
+ throw Object.assign(new Error("AUTH_PROPOSAL_SUBJECT_SCOPE_VIOLATION_001: MintedContext.authorizedPersonId does not " +
38
+ "match the proposalSubject derived from candidateClaims"), { code: "AUTH_PROPOSAL_SUBJECT_SCOPE_VIOLATION_001" });
39
+ }
40
+ return proposalSubject;
41
+ }
42
+ //# sourceMappingURL=proposal-scope-inspector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proposal-scope-inspector.js","sourceRoot":"","sources":["../../src/auth/proposal-scope-inspector.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,EAAE;AACF,qFAAqF;AACrF,8FAA8F;AAC9F,EAAE;AACF,6CAA6C;AAC7C,wFAAwF;AACxF,8FAA8F;AAC9F,EAAE;AACF,yCAAyC;AACzC,2FAA2F;AAC3F,uFAAuF;AACvF,EAAE;AACF,oBAAoB;AACpB,gFAAgF;AAChF,6EAA6E;AAC7E,gFAAgF;AAChF,gFAAgF;AAChF,6DAA6D;AAK7D,MAAM,UAAU,oBAAoB,CAAC,QAAkB,EAAE,MAAqB;IAC5E,MAAM,EAAE,eAAe,EAAE,GAAG,QAAQ,CAAC;IAErC,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,MAAM,MAAM,CAAC,MAAM,CACjB,IAAI,KAAK,CACP,iFAAiF;YACjF,yCAAyC,CAC1C,EACD,EAAE,IAAI,EAAE,2CAA2C,EAAE,CACtD,CAAC;IACJ,CAAC;IAED,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAEpE,IAAI,cAAc,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAC9B,MAAM,MAAM,CAAC,MAAM,CACjB,IAAI,KAAK,CACP,sFAAsF;YACtF,sFAAsF,CACvF,EACD,EAAE,IAAI,EAAE,wCAAwC,EAAE,CACnD,CAAC;IACJ,CAAC;IAED,MAAM,eAAe,GAAG,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAW,CAAC;IAEzD,IAAI,MAAM,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;QAC5C,MAAM,MAAM,CAAC,MAAM,CACjB,IAAI,KAAK,CACP,0FAA0F;YAC1F,6EAA6E,CAC9E,EACD,EAAE,IAAI,EAAE,2CAA2C,EAAE,CACtD,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC,kBAAkB,KAAK,eAAe,EAAE,CAAC;QAClD,MAAM,MAAM,CAAC,MAAM,CACjB,IAAI,KAAK,CACP,uFAAuF;YACvF,wDAAwD,CACzD,EACD,EAAE,IAAI,EAAE,2CAA2C,EAAE,CACtD,CAAC;IACJ,CAAC;IAED,OAAO,eAAe,CAAC;AACzB,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { ProposalId } from "../types/ids.js";
2
+ import type { AcceptOptions, Proposal } from "../types/proposal.js";
3
+ import type { LifeApi } from "../sdk/life-api.js";
4
+ import type { MintedContext } from "./types.js";
5
+ import type { AuditLog } from "../audit/audit-log.js";
6
+ import type { UnitOfWork } from "../persistence/unit-of-work.js";
7
+ import type { Logger } from "../observability/logger.js";
8
+ export declare class ProposalScopedLifeApi {
9
+ private readonly _api;
10
+ private readonly _minted;
11
+ private readonly _audit;
12
+ private readonly _mutationLog;
13
+ private readonly _uow;
14
+ private readonly _logger?;
15
+ constructor(_api: LifeApi, _minted: MintedContext, _audit: AuditLog, _mutationLog: AuditLog, _uow: UnitOfWork, _logger?: Logger | undefined);
16
+ private _writeAuditOrFail;
17
+ private _actorLabel;
18
+ private _guardianFields;
19
+ acceptProposal(proposalId: ProposalId, options: AcceptOptions): Promise<Proposal>;
20
+ }
21
+ export declare function createProposalScopedLifeApi(api: LifeApi, minted: MintedContext, audit: AuditLog, mutationLog: AuditLog, uow: UnitOfWork, logger?: Logger): ProposalScopedLifeApi;
@@ -0,0 +1,168 @@
1
+ // AUTH_PROPOSAL_ACCEPT_SCOPE_CHECKED_001 — Production-01d-a
2
+ //
3
+ // Facade: binds LifeApi + MintedContext for the proposal surface.
4
+ // Does NOT implement LifeApi — narrower, scope-checked surface.
5
+ // No ctx parameter on any facade method — context is bound at construction time.
6
+ //
7
+ // Production-01d-a surface: acceptProposal only.
8
+ //
9
+ // Accept-time enforcement (in order):
10
+ // 1. getProposal(minted.context, proposalId) — fetch to inspect candidateClaims
11
+ // 2. inspectProposalScope(proposal, minted) — fires BEFORE any accept delegation
12
+ // 3. api.acceptProposal(minted.context, ...) — only if scope check passes
13
+ //
14
+ // AUTH_PROPOSAL_ID_NOT_SUBJECT_FREE_001:
15
+ // ProposalId alone is not authorization proof — candidateClaims carry subject-scoped data.
16
+ // AUTH_PROPOSAL_CANDIDATE_CLAIMS_SCOPED_001:
17
+ // Every candidateClaim has subject: PersonId (required).
18
+ //
19
+ // Erasure pre-check deferred to Production-01d-b.
20
+ // FactStore-level suppression (Slice-21a) applies at accept time.
21
+ //
22
+ // Deferred (not in 01d-a):
23
+ // getProposal — existence-leak risk; AUTH_PROPOSAL_UNAUTHORIZED_AS_NOT_FOUND_001
24
+ // listProposals — silent exclusion; AUTH_PROPOSAL_LIST_FILTER_REQUIRED_001; needs ProposalQueue inspection
25
+ // rejectProposal — same scope check required; safe not-found semantics need code inspection
26
+ // createProposal — no top-level subject in ProposalInput
27
+ // ProposalId-only is not subject-free proof (AUTH_PROPOSAL_ID_NOT_SUBJECT_FREE_001)
28
+ import { buildAuditEvent } from "../audit/audit-log.js";
29
+ import { asISOTime } from "../types/ids.js";
30
+ import { inspectProposalScope } from "./proposal-scope-inspector.js";
31
+ import { safeLog } from "../observability/logger.js";
32
+ export class ProposalScopedLifeApi {
33
+ _api;
34
+ _minted;
35
+ _audit;
36
+ _mutationLog;
37
+ _uow;
38
+ _logger;
39
+ // PRODUCTION_AUDIT_ALLOW_MUTATION_ATOMIC_001 (C2a): _mutationLog is the internal allow-path
40
+ // audit log sharing the SQLite connection; _uow wraps the allow-path audit write + the
41
+ // delegated mutation in one SAVEPOINT scope. _audit is the caller-supplied deny-path log.
42
+ constructor(_api, _minted, _audit, _mutationLog, _uow, _logger) {
43
+ this._api = _api;
44
+ this._minted = _minted;
45
+ this._audit = _audit;
46
+ this._mutationLog = _mutationLog;
47
+ this._uow = _uow;
48
+ this._logger = _logger;
49
+ }
50
+ // PRODUCTION_AUDIT_FAIL_CLOSED_001: if the audit write fails, throw the fail-closed
51
+ // error — NOT the original denial. The mutation must not proceed without a recorded event.
52
+ async _writeAuditOrFail(event) {
53
+ try {
54
+ await this._audit.write(event);
55
+ }
56
+ catch (err) {
57
+ safeLog(this._logger, {
58
+ level: "error", code: "LOG_AUDIT_WRITE_FAILED_001",
59
+ component: "ProposalScopedLifeApi", operation: "_writeAuditOrFail",
60
+ message: "audit write failed — proposal operation aborted fail-closed",
61
+ timestamp: new Date().toISOString(),
62
+ ...(err instanceof Error ? { errorName: err.name } : {}),
63
+ });
64
+ throw Object.assign(new Error("PRODUCTION_AUDIT_FAIL_CLOSED_001: audit write failed — proposal operation aborted fail-closed"), { code: "PRODUCTION_AUDIT_FAIL_CLOSED_001" });
65
+ }
66
+ }
67
+ _actorLabel() {
68
+ return `${this._minted.principalType}:${this._minted.principalId}`;
69
+ }
70
+ // Platform-03 — Guardianship: spread into every buildAuditEvent call in this file.
71
+ // GUARDIAN_AUDIT_MARKED_001: only set when this context is a guardian context.
72
+ _guardianFields() {
73
+ return this._minted.guardianOf !== undefined
74
+ ? { actingAsGuardian: true, wardId: this._minted.guardianOf }
75
+ : {};
76
+ }
77
+ async acceptProposal(proposalId, options) {
78
+ const now = asISOTime(new Date().toISOString());
79
+ // Step 1: fetch the Proposal so candidateClaims can be inspected
80
+ const proposal = this._api.getProposal(this._minted.context, proposalId);
81
+ if (proposal === undefined) {
82
+ await this._writeAuditOrFail(buildAuditEvent({
83
+ actor: this._actorLabel(),
84
+ decision: "deny",
85
+ reasonCode: "PROPOSAL_NOT_FOUND",
86
+ selectorFingerprint: "proposal:accept:not-found",
87
+ resultCount: 0,
88
+ resultClaimIds: [],
89
+ now,
90
+ ...this._guardianFields(),
91
+ }));
92
+ throw Object.assign(new Error(`AUTH_PROPOSAL_ACCEPT_NOT_FOUND_001: proposal ${proposalId} not found`), { code: "AUTH_PROPOSAL_ACCEPT_NOT_FOUND_001" });
93
+ }
94
+ // Step 2: inspect scope — AUTH_PROPOSAL_ACCEPT_SCOPE_CHECKED_001
95
+ // Throws AUTH_PROPOSAL_EMPTY_CANDIDATES_DENIED_001, AUTH_PROPOSAL_MULTI_SUBJECT_DENIED_001,
96
+ // or AUTH_PROPOSAL_SUBJECT_SCOPE_VIOLATION_001 on any violation.
97
+ try {
98
+ inspectProposalScope(proposal, this._minted);
99
+ }
100
+ catch (err) {
101
+ const code = err.code;
102
+ let reasonCode;
103
+ switch (code) {
104
+ case "AUTH_PROPOSAL_EMPTY_CANDIDATES_DENIED_001":
105
+ reasonCode = "PROPOSAL_EMPTY_CANDIDATES_DENIED";
106
+ break;
107
+ case "AUTH_PROPOSAL_MULTI_SUBJECT_DENIED_001":
108
+ reasonCode = "PROPOSAL_MULTI_SUBJECT_DENIED";
109
+ break;
110
+ case "AUTH_PROPOSAL_SUBJECT_SCOPE_VIOLATION_001":
111
+ reasonCode = this._minted.authorizedPersonId === undefined
112
+ ? "PROPOSAL_BROAD_GRANT_DENIED"
113
+ : "PROPOSAL_CROSS_SUBJECT_DENIED";
114
+ break;
115
+ default:
116
+ reasonCode = "PROPOSAL_CROSS_SUBJECT_DENIED";
117
+ }
118
+ await this._writeAuditOrFail(buildAuditEvent({
119
+ actor: this._actorLabel(),
120
+ decision: "deny",
121
+ reasonCode,
122
+ selectorFingerprint: `proposal:accept:proposalId=${proposalId}`,
123
+ resultCount: 0,
124
+ resultClaimIds: [],
125
+ now,
126
+ ...this._guardianFields(),
127
+ }));
128
+ throw err;
129
+ }
130
+ // Step 3: allow path — PRODUCTION_AUDIT_ALLOW_MUTATION_ATOMIC_001 (C2a).
131
+ // Audit write + mutation share one SAVEPOINT scope: if acceptProposal rolls back
132
+ // (including the nested SourceAwareClaimAppender.appendAll SAVEPOINT), the PROPOSAL_ALLOWED
133
+ // event rolls back with it. No ghost allow event survives a failed mutation.
134
+ // GUARDIAN_PROPOSAL_ACCEPT_AUDITED_001: guardian contexts use GUARDIAN_PROPOSAL_ACCEPTED
135
+ // instead of PROPOSAL_ALLOWED.
136
+ const allowEvent = buildAuditEvent({
137
+ actor: this._actorLabel(),
138
+ decision: "allow",
139
+ reasonCode: this._minted.guardianOf !== undefined ? "GUARDIAN_PROPOSAL_ACCEPTED" : "PROPOSAL_ALLOWED",
140
+ selectorFingerprint: `proposal:accept:proposalId=${proposalId}`,
141
+ resultCount: 0,
142
+ resultClaimIds: [],
143
+ now,
144
+ ...this._guardianFields(),
145
+ });
146
+ return await this._uow.run(async () => {
147
+ try {
148
+ await this._mutationLog.write(allowEvent);
149
+ }
150
+ catch (err) {
151
+ safeLog(this._logger, {
152
+ level: "error", code: "LOG_AUDIT_WRITE_FAILED_001",
153
+ component: "ProposalScopedLifeApi", operation: "acceptProposal",
154
+ message: "audit write failed — proposal operation aborted fail-closed",
155
+ timestamp: new Date().toISOString(),
156
+ ...(err instanceof Error ? { errorName: err.name } : {}),
157
+ });
158
+ throw Object.assign(new Error("PRODUCTION_AUDIT_FAIL_CLOSED_001: audit write failed — proposal operation aborted fail-closed"), { code: "PRODUCTION_AUDIT_FAIL_CLOSED_001" });
159
+ }
160
+ // Step 4: delegate with minted.context only — never a caller-supplied context
161
+ return this._api.acceptProposal(this._minted.context, proposalId, options);
162
+ });
163
+ }
164
+ }
165
+ export function createProposalScopedLifeApi(api, minted, audit, mutationLog, uow, logger) {
166
+ return new ProposalScopedLifeApi(api, minted, audit, mutationLog, uow, logger);
167
+ }
168
+ //# sourceMappingURL=proposal-scoped-life-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proposal-scoped-life-api.js","sourceRoot":"","sources":["../../src/auth/proposal-scoped-life-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { ContextMintingBoundary, MintedContext } from "./types.js";
2
+ /**
3
+ * Host-injectable rate-limiting boundary.
4
+ * Implementations: Redis sliding window, token bucket, in-memory map, etc.
5
+ * Contract:
6
+ * - Returns void if the key is under its configured limit.
7
+ * - Throws with { code: "RATE_LIMIT_EXCEEDED_001" } if over limit.
8
+ * - Should handle own infrastructure failures internally.
9
+ * - Unexpected throws are handled by onLimiterError config.
10
+ */
11
+ export interface RateLimiter {
12
+ checkLimit(key: string): Promise<void>;
13
+ }
14
+ export interface RateLimitedContextMintingBoundaryConfig {
15
+ readonly inner: ContextMintingBoundary;
16
+ readonly rateLimiter: RateLimiter;
17
+ readonly keyFn?: (principalId: string, tenantId: string) => string;
18
+ readonly onLimiterError?: "allow" | "deny";
19
+ }
20
+ export declare class RateLimitedContextMintingBoundary implements ContextMintingBoundary {
21
+ private readonly _inner;
22
+ private readonly _limiter;
23
+ private readonly _keyFn;
24
+ private readonly _onError;
25
+ constructor(config: RateLimitedContextMintingBoundaryConfig);
26
+ mint(credential: string, targetPersonId: string, requestedKind: "owner" | "agent" | "system" | "audit"): Promise<MintedContext>;
27
+ }
@@ -0,0 +1,77 @@
1
+ // src/auth/rate-limited-context-minting-boundary.ts
2
+ // INTERNAL — not exported from src/index.ts.
3
+ // RateLimitedContextMintingBoundary wraps any ContextMintingBoundary and adds
4
+ // principal-level rate limiting after inner.mint() produces a verified MintedContext.
5
+ //
6
+ // CRYPTO_BOUNDARY_ONLY_001: does NOT import crypto primitives at runtime.
7
+ //
8
+ // AUTH_FACTORY_AUTH_ADAPTER_OPAQUE_001: the production factory does not
9
+ // import this file. It is the host's responsibility to construct and inject.
10
+ //
11
+ // RATE_LIMIT_VERIFY_BEFORE_CHECK_001:
12
+ // inner.mint() is called before rateLimiter.checkLimit() on every mint().
13
+ // Rate limiting always operates on verified principal data.
14
+ //
15
+ // RATE_LIMIT_KEY_NO_CREDENTIAL_001:
16
+ // The key passed to checkLimit() is derived only from principalId and tenantId.
17
+ // Raw credential and all cryptographic secret material are excluded.
18
+ //
19
+ // RATE_LIMIT_MINTED_CONTEXT_NOT_RETURNED_ON_DENY_001:
20
+ // When RATE_LIMIT_EXCEEDED_001 is thrown, the MintedContext is never returned.
21
+ //
22
+ // RATE_LIMIT_STORE_ERROR_CONFIGURABLE_001:
23
+ // Unexpected checkLimit() errors: default "allow" (fail-open); opt-in "deny".
24
+ //
25
+ // See docs/specs/post-mvp-rate-limiting-spec.md
26
+ import { throwErr } from "./jwt-core.js";
27
+ // ─── RateLimitedContextMintingBoundary ───────────────────────────────────────
28
+ export class RateLimitedContextMintingBoundary {
29
+ _inner;
30
+ _limiter;
31
+ _keyFn;
32
+ _onError;
33
+ constructor(config) {
34
+ this._inner = config.inner;
35
+ this._limiter = config.rateLimiter;
36
+ this._keyFn = config.keyFn ?? ((principalId, tenantId) => `${tenantId}:${principalId}`);
37
+ this._onError = config.onLimiterError ?? "allow";
38
+ }
39
+ async mint(credential, targetPersonId, requestedKind) {
40
+ // Step 1: Delegate to inner boundary — verification occurs here.
41
+ // All inner errors propagate unchanged; checkLimit is never called on failure.
42
+ const minted = await this._inner.mint(credential, targetPersonId, requestedKind);
43
+ // Step 2: Derive rate-limit key from verified principal data only.
44
+ // Raw credential is not accessible here — the key contains no secret material.
45
+ let key;
46
+ try {
47
+ key = this._keyFn(minted.principalId, minted.tenantId);
48
+ }
49
+ catch {
50
+ // keyFn threw — treat as limiter error, apply onLimiterError policy.
51
+ if (this._onError === "deny") {
52
+ throwErr("RATE_LIMIT_STORE_ERROR_001", "rate limiter key derivation failed");
53
+ }
54
+ return minted; // fail-open
55
+ }
56
+ // Step 3: Check rate limit — at most once per mint().
57
+ try {
58
+ await this._limiter.checkLimit(key);
59
+ }
60
+ catch (e) {
61
+ if (typeof e === "object" &&
62
+ e !== null &&
63
+ e.code === "RATE_LIMIT_EXCEEDED_001") {
64
+ // Over limit — deny; minted context is discarded.
65
+ throwErr("RATE_LIMIT_EXCEEDED_001", "rate limit exceeded");
66
+ }
67
+ // Unexpected store error — apply onLimiterError policy.
68
+ if (this._onError === "deny") {
69
+ throwErr("RATE_LIMIT_STORE_ERROR_001", "rate limiter unavailable");
70
+ }
71
+ // fail-open: fall through and return minted context.
72
+ }
73
+ // Step 4: Return minted context (not rate-limited, or limiter failed-open).
74
+ return minted;
75
+ }
76
+ }
77
+ //# sourceMappingURL=rate-limited-context-minting-boundary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limited-context-minting-boundary.js","sourceRoot":"","sources":["../../src/auth/rate-limited-context-minting-boundary.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,6CAA6C;AAC7C,8EAA8E;AAC9E,sFAAsF;AACtF,EAAE;AACF,0EAA0E;AAC1E,EAAE;AACF,wEAAwE;AACxE,6EAA6E;AAC7E,EAAE;AACF,sCAAsC;AACtC,4EAA4E;AAC5E,8DAA8D;AAC9D,EAAE;AACF,oCAAoC;AACpC,kFAAkF;AAClF,uEAAuE;AACvE,EAAE;AACF,sDAAsD;AACtD,iFAAiF;AACjF,EAAE;AACF,2CAA2C;AAC3C,gFAAgF;AAChF,EAAE;AACF,gDAAgD;AAGhD,OAAO,EAAE,QAAQ,EAAE,MAAyC,eAAe,CAAC;AAgC5E,gFAAgF;AAEhF,MAAM,OAAO,iCAAiC;IAC3B,MAAM,CAA8B;IACpC,QAAQ,CAAiB;IACzB,MAAM,CAAyD;IAC/D,QAAQ,CAAsB;IAE/C,YAAY,MAA+C;QACzD,IAAI,CAAC,MAAM,GAAK,MAAM,CAAC,KAAK,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC;QACnC,IAAI,CAAC,MAAM,GAAK,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,EAAE,CAAC,GAAG,QAAQ,IAAI,WAAW,EAAE,CAAC,CAAC;QAC1F,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,cAAc,IAAI,OAAO,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,IAAI,CACR,UAAsB,EACtB,cAAsB,EACtB,aAAsD;QAEtD,iEAAiE;QACjE,+EAA+E;QAC/E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;QAEjF,mEAAmE;QACnE,+EAA+E;QAC/E,IAAI,GAAW,CAAC;QAChB,IAAI,CAAC;YACH,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACzD,CAAC;QAAC,MAAM,CAAC;YACP,qEAAqE;YACrE,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;gBAC7B,QAAQ,CAAC,4BAA4B,EAAE,oCAAoC,CAAC,CAAC;YAC/E,CAAC;YACD,OAAO,MAAM,CAAC,CAAC,YAAY;QAC7B,CAAC;QAED,sDAAsD;QACtD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YACpB,IACE,OAAO,CAAC,KAAK,QAAQ;gBACrB,CAAC,KAAK,IAAI;gBACT,CAAwB,CAAC,IAAI,KAAK,yBAAyB,EAC5D,CAAC;gBACD,kDAAkD;gBAClD,QAAQ,CAAC,yBAAyB,EAAE,qBAAqB,CAAC,CAAC;YAC7D,CAAC;YACD,wDAAwD;YACxD,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;gBAC7B,QAAQ,CAAC,4BAA4B,EAAE,0BAA0B,CAAC,CAAC;YACrE,CAAC;YACD,qDAAqD;QACvD,CAAC;QAED,4EAA4E;QAC5E,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
@@ -0,0 +1,21 @@
1
+ import type { AuthAdapter, VerifiedPrincipal } from "./types.js";
2
+ /**
3
+ * Host-injectable denylist boundary.
4
+ * Returns true if the jti is currently revoked; false otherwise.
5
+ * MUST throw on infrastructure failure — fail-closed guarantee.
6
+ */
7
+ export interface TokenRevocationStore {
8
+ isRevoked(jti: string): Promise<boolean>;
9
+ }
10
+ export interface RevocationAwareAuthAdapterConfig {
11
+ readonly inner: AuthAdapter;
12
+ readonly revocationStore: TokenRevocationStore;
13
+ readonly requireJti?: boolean;
14
+ }
15
+ export declare class RevocationAwareAuthAdapter implements AuthAdapter {
16
+ private readonly _inner;
17
+ private readonly _store;
18
+ private readonly _requireJti;
19
+ constructor(config: RevocationAwareAuthAdapterConfig);
20
+ verify(credential: string): Promise<VerifiedPrincipal>;
21
+ }
@@ -0,0 +1,88 @@
1
+ // src/auth/revocation-aware-auth-adapter.ts
2
+ // INTERNAL — not exported from src/index.ts.
3
+ // RevocationAwareAuthAdapter wraps any AuthAdapter and adds JTI denylist checking.
4
+ // JTI is extracted from the unverified payload before inner.verify() is called.
5
+ //
6
+ // CRYPTO_BOUNDARY_ONLY_001: does NOT import crypto primitives at runtime.
7
+ // All cryptographic verification is delegated to the inner adapter.
8
+ //
9
+ // AUTH_FACTORY_AUTH_ADAPTER_OPAQUE_001: the production factory does not
10
+ // import this file. It is the host's responsibility to construct and inject.
11
+ //
12
+ // SESSION_REVOCATION_DENYLIST_CHECKED_BEFORE_VERIFY_001:
13
+ // isRevoked() is called before inner.verify() on every verify() invocation
14
+ // that has a non-absent JTI.
15
+ //
16
+ // SESSION_REVOCATION_STORE_ERROR_FAIL_CLOSED_001:
17
+ // Any thrown error from revocationStore.isRevoked() results in
18
+ // SESSION_REVOCATION_STORE_ERROR_001. Never allows on store failure.
19
+ //
20
+ // SESSION_REVOCATION_AT_MOST_ONE_STORE_CALL_001:
21
+ // At most one isRevoked() call is made per verify() invocation.
22
+ //
23
+ // See docs/specs/post-mvp-session-revocation-spec.md
24
+ import { throwErr } from "./jwt-core.js";
25
+ // ─── extractJtiUnsafe ────────────────────────────────────────────────────────
26
+ // Extracts the `jti` string from the raw (unverified) JWT payload segment.
27
+ // Returns undefined on any parse failure, structural mismatch, or absent/non-string jti.
28
+ // Never throws. Does NOT verify the signature — the jti is used as a denylist key only.
29
+ function extractJtiUnsafe(credential) {
30
+ try {
31
+ const parts = credential.split(".");
32
+ if (parts.length !== 3)
33
+ return undefined;
34
+ const payloadSeg = parts[1];
35
+ if (!payloadSeg || payloadSeg.length === 0)
36
+ return undefined;
37
+ const bytes = Buffer.from(payloadSeg, "base64url");
38
+ const parsed = JSON.parse(bytes.toString("utf8"));
39
+ if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
40
+ return undefined;
41
+ }
42
+ const jti = parsed["jti"];
43
+ if (typeof jti !== "string" || jti.length === 0)
44
+ return undefined;
45
+ return jti;
46
+ }
47
+ catch {
48
+ return undefined;
49
+ }
50
+ }
51
+ // ─── RevocationAwareAuthAdapter ──────────────────────────────────────────────
52
+ export class RevocationAwareAuthAdapter {
53
+ _inner;
54
+ _store;
55
+ _requireJti;
56
+ constructor(config) {
57
+ this._inner = config.inner;
58
+ this._store = config.revocationStore;
59
+ this._requireJti = config.requireJti === true;
60
+ }
61
+ async verify(credential) {
62
+ // Step 1: Extract JTI from unverified payload (no signature check here)
63
+ const jti = extractJtiUnsafe(credential);
64
+ // Step 2: Enforce requireJti policy
65
+ if (jti === undefined) {
66
+ if (this._requireJti) {
67
+ throwErr("SESSION_REVOCATION_JTI_MISSING_001", "jti claim required but absent");
68
+ }
69
+ // No JTI and not required — skip denylist, delegate directly
70
+ return this._inner.verify(credential);
71
+ }
72
+ // Step 3: Query revocation store — fail-closed on any error
73
+ let revoked;
74
+ try {
75
+ revoked = await this._store.isRevoked(jti);
76
+ }
77
+ catch {
78
+ throwErr("SESSION_REVOCATION_STORE_ERROR_001", "revocation store unavailable");
79
+ }
80
+ // Step 4: Deny if revoked
81
+ if (revoked) {
82
+ throwErr("SESSION_REVOCATION_TOKEN_REVOKED_001", "token has been revoked");
83
+ }
84
+ // Step 5: Delegate to inner adapter (signature + claim verification)
85
+ return this._inner.verify(credential);
86
+ }
87
+ }
88
+ //# sourceMappingURL=revocation-aware-auth-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revocation-aware-auth-adapter.js","sourceRoot":"","sources":["../../src/auth/revocation-aware-auth-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import Database from "better-sqlite3";
2
+ import type { Clock, GrantDescriptor, GrantResolver } from "./types.js";
3
+ export declare class SQLiteGrantResolver implements GrantResolver {
4
+ private readonly _clock;
5
+ private readonly _stmt;
6
+ constructor(db: Database.Database, clock: Clock);
7
+ resolveActiveGrant(agentId: string, grantId: string, tenantId: string): Promise<GrantDescriptor | undefined>;
8
+ }
@@ -0,0 +1,78 @@
1
+ // SQLite-backed GrantResolver — Production-02d-b.
2
+ // Do NOT export from src/index.ts.
3
+ //
4
+ // AUTH_SQLITE_GRANT_RESOLVER_BACKEND_001: implements GrantResolver with a
5
+ // Database.Database-backed read path; behaviorally identical to InMemoryGrantResolver
6
+ // for all denial and pass cases.
7
+ // AUTH_SQLITE_GRANT_STATUS_CHECKED_001: resolveActiveGrant rejects status === "revoked"
8
+ // rows; revoked grants return undefined regardless of time window.
9
+ // AUTH_SQLITE_GRANT_TIME_WINDOW_CHECKED_001: uses Date.parse epoch ms (not raw string
10
+ // comparison) for not_before/not_after checks.
11
+ // AUTH_SQLITE_AUTH_BACKEND_FAIL_CLOSED_001: any invalid stored time string causes
12
+ // resolveActiveGrant to throw — not return undefined; data integrity errors are
13
+ // distinguishable from "no active grant".
14
+ // AUTH_SQLITE_GRANT_SCHEMA_001: constructor throws this code when auth_grants table
15
+ // is absent — signals missing runMigrations call, not a runtime auth denial.
16
+ //
17
+ // Storage-failure behavior: SQLite errors propagate as thrown — never converted
18
+ // to undefined (a real storage failure is not the same as "no active grant").
19
+ //
20
+ // PRODUCTION_AUTH_GRANT_PERSON_SCOPE_PROPAGATED_001: person_id is read from the store and
21
+ // propagated to GrantDescriptor.personId (null → undefined).
22
+ import { asPersonId } from "../types/ids.js";
23
+ const SCHEMA_CODE = "AUTH_SQLITE_GRANT_SCHEMA_001";
24
+ const FAIL_CLOSED_CODE = "AUTH_SQLITE_AUTH_BACKEND_FAIL_CLOSED_001";
25
+ export class SQLiteGrantResolver {
26
+ _clock;
27
+ _stmt;
28
+ constructor(db, clock) {
29
+ // AUTH_SQLITE_GRANT_SCHEMA_001: fail if migration has not run
30
+ const tablePresent = db
31
+ .prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='auth_grants'")
32
+ .get() !== undefined;
33
+ if (!tablePresent) {
34
+ throw Object.assign(new Error(`[${SCHEMA_CODE}] auth_grants table absent — call runMigrations before constructing SQLiteGrantResolver`), { code: SCHEMA_CODE });
35
+ }
36
+ this._clock = clock;
37
+ // Uses auth_grants_lookup index: (agent_id, tenant_id, grant_id)
38
+ this._stmt = db.prepare("SELECT grant_id, agent_id, tenant_id, status, not_before, not_after, person_id " +
39
+ "FROM auth_grants WHERE grant_id = ? AND agent_id = ? AND tenant_id = ?");
40
+ }
41
+ async resolveActiveGrant(agentId, grantId, tenantId) {
42
+ // SQLite errors propagate — they are NOT caught here.
43
+ const row = this._stmt.get(grantId, agentId, tenantId);
44
+ if (row === undefined)
45
+ return undefined;
46
+ // AUTH_SQLITE_GRANT_STATUS_CHECKED_001: revoked grants are permanently denied
47
+ if (row.status === "revoked")
48
+ return undefined;
49
+ // AUTH_SQLITE_GRANT_TIME_WINDOW_CHECKED_001 + AUTH_SQLITE_AUTH_BACKEND_FAIL_CLOSED_001:
50
+ // Parse via Date.parse epoch ms — never compare raw strings with < / >.
51
+ const notBeforeMs = Date.parse(row.not_before);
52
+ const notAfterMs = Date.parse(row.not_after);
53
+ if (isNaN(notBeforeMs)) {
54
+ throw Object.assign(new Error(`[${FAIL_CLOSED_CODE}] auth_grants.not_before "${row.not_before}" is not a valid ISO-8601 string for grant ${row.grant_id}`), { code: FAIL_CLOSED_CODE, grantId: row.grant_id });
55
+ }
56
+ if (isNaN(notAfterMs)) {
57
+ throw Object.assign(new Error(`[${FAIL_CLOSED_CODE}] auth_grants.not_after "${row.not_after}" is not a valid ISO-8601 string for grant ${row.grant_id}`), { code: FAIL_CLOSED_CODE, grantId: row.grant_id });
58
+ }
59
+ const nowMs = Date.parse(this._clock.now());
60
+ // Not-yet-active
61
+ if (nowMs < notBeforeMs)
62
+ return undefined;
63
+ // AUTH_GRANT_EXPIRED_DENIED_001: expired at or after notAfter
64
+ if (nowMs >= notAfterMs)
65
+ return undefined;
66
+ // All checks passed — return descriptor.
67
+ // PRODUCTION_AUTH_GRANT_PERSON_SCOPE_PROPAGATED_001: person scope read from the store.
68
+ return {
69
+ grantId: row.grant_id,
70
+ agentId: row.agent_id,
71
+ tenantId: row.tenant_id,
72
+ notAfter: row.not_after,
73
+ // exactOptionalPropertyTypes: omit the property entirely when NULL.
74
+ ...(row.person_id !== null ? { personId: asPersonId(row.person_id) } : {}),
75
+ };
76
+ }
77
+ }
78
+ //# sourceMappingURL=sqlite-grant-resolver.js.map