@kya-os/mcp 1.16.1 → 1.17.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 (470) hide show
  1. package/AUDITABILITY.md +129 -8
  2. package/CHANGELOG.md +591 -0
  3. package/CONFORMANCE.md +4 -4
  4. package/README.md +65 -26
  5. package/SPEC.md +85 -17
  6. package/dist/audit/adapters/legacy-audit-log.d.ts +0 -1
  7. package/dist/audit/adapters/mcp.d.ts +0 -1
  8. package/dist/audit/adapters/mcp.js +35 -20
  9. package/dist/audit/adapters/mcp.js.map +1 -1
  10. package/dist/audit/adapters/references.d.ts +9 -0
  11. package/dist/audit/adapters/references.js +22 -0
  12. package/dist/audit/adapters/references.js.map +1 -0
  13. package/dist/audit/assurance.d.ts +0 -1
  14. package/dist/audit/checkpoint-coordinator.d.ts +0 -1
  15. package/dist/audit/checkpoint.d.ts +17 -1
  16. package/dist/audit/checkpoint.js +76 -21
  17. package/dist/audit/checkpoint.js.map +1 -1
  18. package/dist/audit/cli.d.ts +0 -1
  19. package/dist/audit/crypto.d.ts +0 -1
  20. package/dist/audit/crypto.js +12 -3
  21. package/dist/audit/crypto.js.map +1 -1
  22. package/dist/audit/errors.d.ts +0 -1
  23. package/dist/audit/evidence.d.ts +0 -1
  24. package/dist/audit/index.d.ts +0 -1
  25. package/dist/audit/integrity.d.ts +0 -1
  26. package/dist/audit/merkle.d.ts +0 -1
  27. package/dist/audit/mirror-service.d.ts +0 -1
  28. package/dist/audit/projection.d.ts +1 -1
  29. package/dist/audit/projection.js +23 -2
  30. package/dist/audit/projection.js.map +1 -1
  31. package/dist/audit/providers/anchor.d.ts +0 -1
  32. package/dist/audit/providers/evidence.d.ts +0 -1
  33. package/dist/audit/providers/journal.d.ts +0 -1
  34. package/dist/audit/providers/memory-journal.d.ts +0 -1
  35. package/dist/audit/providers/observer.d.ts +0 -1
  36. package/dist/audit/providers/outbox.d.ts +35 -6
  37. package/dist/audit/providers/outbox.js +46 -8
  38. package/dist/audit/providers/outbox.js.map +1 -1
  39. package/dist/audit/providers/recorder-client.d.ts +0 -1
  40. package/dist/audit/providers/source-state.d.ts +24 -2
  41. package/dist/audit/providers/source-state.js +65 -44
  42. package/dist/audit/providers/source-state.js.map +1 -1
  43. package/dist/audit/read-contract.d.ts +0 -1
  44. package/dist/audit/read-service.d.ts +2 -3
  45. package/dist/audit/read-service.js +17 -12
  46. package/dist/audit/read-service.js.map +1 -1
  47. package/dist/audit/recorder-service.d.ts +33 -5
  48. package/dist/audit/recorder-service.js +116 -20
  49. package/dist/audit/recorder-service.js.map +1 -1
  50. package/dist/audit/reference-recorder.d.ts +0 -1
  51. package/dist/audit/replay-bundle.d.ts +0 -1
  52. package/dist/audit/replay-bundle.js +143 -36
  53. package/dist/audit/replay-bundle.js.map +1 -1
  54. package/dist/audit/schemas.d.ts +0 -1
  55. package/dist/audit/service.d.ts +6 -3
  56. package/dist/audit/service.js +55 -24
  57. package/dist/audit/service.js.map +1 -1
  58. package/dist/audit/testing/index.d.ts +0 -1
  59. package/dist/audit/testing/provider-contracts.d.ts +1 -2
  60. package/dist/audit/testing/provider-contracts.js +32 -2
  61. package/dist/audit/testing/provider-contracts.js.map +1 -1
  62. package/dist/audit/types.d.ts +0 -1
  63. package/dist/audit/verifier.d.ts +57 -5
  64. package/dist/audit/verifier.js +240 -49
  65. package/dist/audit/verifier.js.map +1 -1
  66. package/dist/auth/handshake.d.ts +12 -1
  67. package/dist/auth/handshake.js +44 -11
  68. package/dist/auth/handshake.js.map +1 -1
  69. package/dist/auth/index.d.ts +0 -1
  70. package/dist/auth/types.d.ts +0 -1
  71. package/dist/authz/accountability.d.ts +0 -1
  72. package/dist/authz/adapter.d.ts +0 -1
  73. package/dist/authz/examples/inmemory-oidc.d.ts +0 -1
  74. package/dist/authz/index.d.ts +0 -1
  75. package/dist/authz/oidc/authorize.d.ts +0 -1
  76. package/dist/authz/oidc/metadata.d.ts +0 -1
  77. package/dist/authz/oidc/oidc-adapter.d.ts +0 -1
  78. package/dist/authz/oidc/oidc-adapter.js +51 -3
  79. package/dist/authz/oidc/oidc-adapter.js.map +1 -1
  80. package/dist/authz/oidc/pending-flow-store.d.ts +6 -1
  81. package/dist/authz/oidc/pending-flow-store.js +22 -2
  82. package/dist/authz/oidc/pending-flow-store.js.map +1 -1
  83. package/dist/authz/oidc/pkce.d.ts +0 -1
  84. package/dist/authz/registry.d.ts +0 -1
  85. package/dist/authz/requirement.d.ts +0 -1
  86. package/dist/card/build.d.ts +0 -1
  87. package/dist/card/builder.d.ts +0 -1
  88. package/dist/card/cimd.d.ts +19 -5
  89. package/dist/card/cimd.js +52 -7
  90. package/dist/card/cimd.js.map +1 -1
  91. package/dist/card/delegation.d.ts +0 -1
  92. package/dist/card/delegation.js +25 -15
  93. package/dist/card/delegation.js.map +1 -1
  94. package/dist/card/emit.d.ts +0 -1
  95. package/dist/card/index.d.ts +0 -1
  96. package/dist/card/middleware.d.ts +0 -1
  97. package/dist/card/proof/build.d.ts +0 -1
  98. package/dist/card/proof/canonical.d.ts +0 -1
  99. package/dist/card/proof/canonical.js +6 -1
  100. package/dist/card/proof/canonical.js.map +1 -1
  101. package/dist/card/proof/http-sig.d.ts +0 -1
  102. package/dist/card/proof/index.d.ts +0 -1
  103. package/dist/card/proof/nonce-cache.d.ts +15 -14
  104. package/dist/card/proof/nonce-cache.js +22 -20
  105. package/dist/card/proof/nonce-cache.js.map +1 -1
  106. package/dist/card/proof/signer.d.ts +0 -1
  107. package/dist/card/proof/types.d.ts +10 -4
  108. package/dist/card/proof/types.js +2 -2
  109. package/dist/card/proof/verify.d.ts +0 -1
  110. package/dist/card/proof/verify.js +17 -3
  111. package/dist/card/proof/verify.js.map +1 -1
  112. package/dist/card/resolve.d.ts +0 -1
  113. package/dist/card/resolve.js +13 -8
  114. package/dist/card/resolve.js.map +1 -1
  115. package/dist/card/revocation.d.ts +0 -1
  116. package/dist/card/revocation.js +18 -6
  117. package/dist/card/revocation.js.map +1 -1
  118. package/dist/card/schema.d.ts +7 -6
  119. package/dist/card/schema.js +7 -3
  120. package/dist/card/schema.js.map +1 -1
  121. package/dist/card/verify.d.ts +0 -1
  122. package/dist/delegation/audience-validator.d.ts +0 -1
  123. package/dist/delegation/bitstring.d.ts +0 -1
  124. package/dist/delegation/cascading-revocation.d.ts +1 -2
  125. package/dist/delegation/cascading-revocation.js +34 -36
  126. package/dist/delegation/cascading-revocation.js.map +1 -1
  127. package/dist/delegation/chain-enforcement.d.ts +26 -5
  128. package/dist/delegation/chain-enforcement.js +110 -34
  129. package/dist/delegation/chain-enforcement.js.map +1 -1
  130. package/dist/delegation/delegation-graph.d.ts +30 -1
  131. package/dist/delegation/delegation-graph.js +33 -0
  132. package/dist/delegation/delegation-graph.js.map +1 -1
  133. package/dist/delegation/delegation-registration.d.ts +22 -0
  134. package/dist/delegation/delegation-registration.js +51 -0
  135. package/dist/delegation/delegation-registration.js.map +1 -0
  136. package/dist/delegation/delegation-status-entry.d.ts +22 -0
  137. package/dist/delegation/delegation-status-entry.js +42 -0
  138. package/dist/delegation/delegation-status-entry.js.map +1 -0
  139. package/dist/delegation/did-key-resolver.d.ts +0 -1
  140. package/dist/delegation/did-key-resolver.js +15 -4
  141. package/dist/delegation/did-key-resolver.js.map +1 -1
  142. package/dist/delegation/did-linkage.d.ts +0 -1
  143. package/dist/delegation/did-resolver-registry.d.ts +0 -1
  144. package/dist/delegation/did-web-resolver.d.ts +0 -1
  145. package/dist/delegation/did-web-resolver.js +40 -5
  146. package/dist/delegation/did-web-resolver.js.map +1 -1
  147. package/dist/delegation/holder-binding.d.ts +11 -11
  148. package/dist/delegation/holder-binding.js +8 -17
  149. package/dist/delegation/holder-binding.js.map +1 -1
  150. package/dist/delegation/index.d.ts +0 -1
  151. package/dist/delegation/outbound-headers.d.ts +0 -1
  152. package/dist/delegation/outbound-proof.d.ts +0 -1
  153. package/dist/delegation/scope-matcher.d.ts +25 -2
  154. package/dist/delegation/scope-matcher.js +75 -5
  155. package/dist/delegation/scope-matcher.js.map +1 -1
  156. package/dist/delegation/status-cache.d.ts +0 -1
  157. package/dist/delegation/statuslist-manager.d.ts +18 -2
  158. package/dist/delegation/statuslist-manager.js +40 -14
  159. package/dist/delegation/statuslist-manager.js.map +1 -1
  160. package/dist/delegation/storage/memory-graph-storage.d.ts +9 -3
  161. package/dist/delegation/storage/memory-graph-storage.js +28 -14
  162. package/dist/delegation/storage/memory-graph-storage.js.map +1 -1
  163. package/dist/delegation/storage/memory-statuslist-storage.d.ts +0 -1
  164. package/dist/delegation/utils.d.ts +5 -5
  165. package/dist/delegation/utils.js +4 -4
  166. package/dist/delegation/utils.js.map +1 -1
  167. package/dist/delegation/vc-issuer.d.ts +0 -1
  168. package/dist/delegation/vc-jwt-verify.d.ts +7 -2
  169. package/dist/delegation/vc-jwt-verify.js +55 -3
  170. package/dist/delegation/vc-jwt-verify.js.map +1 -1
  171. package/dist/delegation/vc-verification-checks.d.ts +0 -1
  172. package/dist/delegation/vc-verification-checks.js +9 -5
  173. package/dist/delegation/vc-verification-checks.js.map +1 -1
  174. package/dist/delegation/vc-verifier.d.ts +0 -1
  175. package/dist/delegation/vc-verifier.types.d.ts +0 -1
  176. package/dist/delegation/verification-method-key.d.ts +0 -1
  177. package/dist/delegation/verification-method-key.js +4 -3
  178. package/dist/delegation/verification-method-key.js.map +1 -1
  179. package/dist/errors.d.ts +0 -1
  180. package/dist/extension/declaration.d.ts +0 -1
  181. package/dist/extension/gate.d.ts +0 -1
  182. package/dist/extension/index.d.ts +0 -1
  183. package/dist/extension/settings.d.ts +0 -1
  184. package/dist/index.d.ts +2 -3
  185. package/dist/index.js +1 -1
  186. package/dist/index.js.map +1 -1
  187. package/dist/integrations/cheqd/dlr.d.ts +0 -1
  188. package/dist/integrations/cheqd/dlr.js +6 -1
  189. package/dist/integrations/cheqd/dlr.js.map +1 -1
  190. package/dist/integrations/cheqd/index.d.ts +0 -1
  191. package/dist/integrations/cheqd/linkage.d.ts +0 -1
  192. package/dist/integrations/cheqd/registrar.d.ts +0 -1
  193. package/dist/integrations/cheqd/resolver.d.ts +0 -1
  194. package/dist/integrations/cheqd/statuslist-resolver.d.ts +0 -1
  195. package/dist/logging/index.d.ts +0 -1
  196. package/dist/logging/logger.d.ts +0 -1
  197. package/dist/middleware/index.d.ts +0 -1
  198. package/dist/middleware/kya-os-transport.d.ts +5 -3
  199. package/dist/middleware/kya-os-transport.js +58 -24
  200. package/dist/middleware/kya-os-transport.js.map +1 -1
  201. package/dist/middleware/with-kya-os-server.d.ts +24 -4
  202. package/dist/middleware/with-kya-os-server.js +7 -0
  203. package/dist/middleware/with-kya-os-server.js.map +1 -1
  204. package/dist/middleware/with-kya-os.config-types.d.ts +22 -4
  205. package/dist/middleware/with-kya-os.d.ts +0 -1
  206. package/dist/middleware/with-kya-os.delegation-gate.d.ts +2 -1
  207. package/dist/middleware/with-kya-os.delegation-gate.js +37 -9
  208. package/dist/middleware/with-kya-os.delegation-gate.js.map +1 -1
  209. package/dist/middleware/with-kya-os.delegation-verify.d.ts +1 -1
  210. package/dist/middleware/with-kya-os.delegation-verify.js +45 -9
  211. package/dist/middleware/with-kya-os.delegation-verify.js.map +1 -1
  212. package/dist/middleware/with-kya-os.deps.d.ts +0 -1
  213. package/dist/middleware/with-kya-os.grants.d.ts +13 -6
  214. package/dist/middleware/with-kya-os.grants.js +56 -18
  215. package/dist/middleware/with-kya-os.grants.js.map +1 -1
  216. package/dist/middleware/with-kya-os.helpers.d.ts +0 -1
  217. package/dist/middleware/with-kya-os.js +14 -4
  218. package/dist/middleware/with-kya-os.js.map +1 -1
  219. package/dist/middleware/with-kya-os.policy-gate.d.ts +0 -1
  220. package/dist/middleware/with-kya-os.policy-gate.js +18 -9
  221. package/dist/middleware/with-kya-os.policy-gate.js.map +1 -1
  222. package/dist/middleware/with-kya-os.protocol.d.ts +0 -1
  223. package/dist/middleware/with-kya-os.session.d.ts +28 -1
  224. package/dist/middleware/with-kya-os.session.js +146 -7
  225. package/dist/middleware/with-kya-os.session.js.map +1 -1
  226. package/dist/middleware/with-kya-os.types.d.ts +28 -5
  227. package/dist/policy/approval.d.ts +13 -2
  228. package/dist/policy/approval.js +15 -4
  229. package/dist/policy/approval.js.map +1 -1
  230. package/dist/policy/classifier.d.ts +0 -1
  231. package/dist/policy/default-engine.d.ts +5 -2
  232. package/dist/policy/default-engine.js +10 -2
  233. package/dist/policy/default-engine.js.map +1 -1
  234. package/dist/policy/engine.d.ts +0 -1
  235. package/dist/policy/index.d.ts +0 -1
  236. package/dist/policy/projection.d.ts +0 -1
  237. package/dist/policy/types.d.ts +0 -1
  238. package/dist/proof/covered-request.d.ts +46 -0
  239. package/dist/proof/covered-request.js +107 -0
  240. package/dist/proof/covered-request.js.map +1 -0
  241. package/dist/proof/errors.d.ts +3 -1
  242. package/dist/proof/errors.js +5 -0
  243. package/dist/proof/errors.js.map +1 -1
  244. package/dist/proof/generator.d.ts +51 -1
  245. package/dist/proof/generator.js +71 -13
  246. package/dist/proof/generator.js.map +1 -1
  247. package/dist/proof/index.d.ts +1 -2
  248. package/dist/proof/index.js.map +1 -1
  249. package/dist/proof/verifier.d.ts +50 -12
  250. package/dist/proof/verifier.js +164 -84
  251. package/dist/proof/verifier.js.map +1 -1
  252. package/dist/providers/audit-log.d.ts +0 -1
  253. package/dist/providers/base.d.ts +19 -1
  254. package/dist/providers/base.js.map +1 -1
  255. package/dist/providers/grant-store.d.ts +8 -2
  256. package/dist/providers/grant-store.js +5 -5
  257. package/dist/providers/grant-store.js.map +1 -1
  258. package/dist/providers/index.d.ts +0 -1
  259. package/dist/providers/memory.d.ts +19 -1
  260. package/dist/providers/memory.js +53 -7
  261. package/dist/providers/memory.js.map +1 -1
  262. package/dist/providers/node-crypto.d.ts +4 -1
  263. package/dist/providers/node-crypto.js +32 -9
  264. package/dist/providers/node-crypto.js.map +1 -1
  265. package/dist/providers/nonce-admission.d.ts +31 -0
  266. package/dist/providers/nonce-admission.js +47 -0
  267. package/dist/providers/nonce-admission.js.map +1 -0
  268. package/dist/providers/nonce-retention.d.ts +8 -0
  269. package/dist/providers/nonce-retention.js +15 -0
  270. package/dist/providers/nonce-retention.js.map +1 -0
  271. package/dist/providers/runtime-fetch.d.ts +0 -1
  272. package/dist/providers/system-clock.d.ts +0 -1
  273. package/dist/providers/web-crypto.d.ts +0 -1
  274. package/dist/providers/web-crypto.js +7 -1
  275. package/dist/providers/web-crypto.js.map +1 -1
  276. package/dist/session/index.d.ts +0 -1
  277. package/dist/session/manager.d.ts +13 -1
  278. package/dist/session/manager.js +25 -9
  279. package/dist/session/manager.js.map +1 -1
  280. package/dist/session/session-store.d.ts +0 -1
  281. package/dist/types/protocol.d.ts +11 -3
  282. package/dist/types/protocol.js +21 -14
  283. package/dist/types/protocol.js.map +1 -1
  284. package/dist/utils/base58.d.ts +16 -3
  285. package/dist/utils/base58.js +34 -12
  286. package/dist/utils/base58.js.map +1 -1
  287. package/dist/utils/base64.d.ts +0 -1
  288. package/dist/utils/canonical-json.d.ts +7 -1
  289. package/dist/utils/canonical-json.js +130 -60
  290. package/dist/utils/canonical-json.js.map +1 -1
  291. package/dist/utils/crypto-service.d.ts +0 -1
  292. package/dist/utils/crypto-service.js +22 -2
  293. package/dist/utils/crypto-service.js.map +1 -1
  294. package/dist/utils/did-helpers.d.ts +0 -1
  295. package/dist/utils/ed25519-constants.d.ts +0 -1
  296. package/dist/utils/ed25519-public-key.d.ts +27 -0
  297. package/dist/utils/ed25519-public-key.js +86 -0
  298. package/dist/utils/ed25519-public-key.js.map +1 -0
  299. package/dist/utils/guards.d.ts +0 -1
  300. package/dist/utils/index.d.ts +0 -1
  301. package/dist/utils/ip-classifier.d.ts +0 -1
  302. package/dist/utils/safe-fetch-transports.d.ts +0 -1
  303. package/dist/utils/safe-fetch-types.d.ts +0 -1
  304. package/dist/utils/safe-fetch.d.ts +0 -1
  305. package/dist/utils/statuslist-bits.d.ts +0 -1
  306. package/dist/utils/statuslist-purpose.d.ts +0 -1
  307. package/dist/utils/ttl-cache.d.ts +0 -1
  308. package/dist/utils/url.d.ts +0 -1
  309. package/package.json +9 -6
  310. package/schemas/card-delegation-credential.json +4 -1
  311. package/schemas/delegation-credential.json +122 -30
  312. package/dist/audit/adapters/legacy-audit-log.d.ts.map +0 -1
  313. package/dist/audit/adapters/mcp.d.ts.map +0 -1
  314. package/dist/audit/assurance.d.ts.map +0 -1
  315. package/dist/audit/checkpoint-coordinator.d.ts.map +0 -1
  316. package/dist/audit/checkpoint.d.ts.map +0 -1
  317. package/dist/audit/cli.d.ts.map +0 -1
  318. package/dist/audit/crypto.d.ts.map +0 -1
  319. package/dist/audit/errors.d.ts.map +0 -1
  320. package/dist/audit/evidence.d.ts.map +0 -1
  321. package/dist/audit/index.d.ts.map +0 -1
  322. package/dist/audit/integrity.d.ts.map +0 -1
  323. package/dist/audit/merkle.d.ts.map +0 -1
  324. package/dist/audit/mirror-service.d.ts.map +0 -1
  325. package/dist/audit/projection.d.ts.map +0 -1
  326. package/dist/audit/providers/anchor.d.ts.map +0 -1
  327. package/dist/audit/providers/evidence.d.ts.map +0 -1
  328. package/dist/audit/providers/journal.d.ts.map +0 -1
  329. package/dist/audit/providers/memory-journal.d.ts.map +0 -1
  330. package/dist/audit/providers/observer.d.ts.map +0 -1
  331. package/dist/audit/providers/outbox.d.ts.map +0 -1
  332. package/dist/audit/providers/recorder-client.d.ts.map +0 -1
  333. package/dist/audit/providers/source-state.d.ts.map +0 -1
  334. package/dist/audit/read-contract.d.ts.map +0 -1
  335. package/dist/audit/read-service.d.ts.map +0 -1
  336. package/dist/audit/recorder-service.d.ts.map +0 -1
  337. package/dist/audit/reference-recorder.d.ts.map +0 -1
  338. package/dist/audit/replay-bundle.d.ts.map +0 -1
  339. package/dist/audit/schemas.d.ts.map +0 -1
  340. package/dist/audit/service.d.ts.map +0 -1
  341. package/dist/audit/testing/index.d.ts.map +0 -1
  342. package/dist/audit/testing/provider-contracts.d.ts.map +0 -1
  343. package/dist/audit/types.d.ts.map +0 -1
  344. package/dist/audit/verifier.d.ts.map +0 -1
  345. package/dist/auth/handshake.d.ts.map +0 -1
  346. package/dist/auth/index.d.ts.map +0 -1
  347. package/dist/auth/types.d.ts.map +0 -1
  348. package/dist/authz/accountability.d.ts.map +0 -1
  349. package/dist/authz/adapter.d.ts.map +0 -1
  350. package/dist/authz/examples/inmemory-oidc.d.ts.map +0 -1
  351. package/dist/authz/index.d.ts.map +0 -1
  352. package/dist/authz/oidc/authorize.d.ts.map +0 -1
  353. package/dist/authz/oidc/metadata.d.ts.map +0 -1
  354. package/dist/authz/oidc/oidc-adapter.d.ts.map +0 -1
  355. package/dist/authz/oidc/pending-flow-store.d.ts.map +0 -1
  356. package/dist/authz/oidc/pkce.d.ts.map +0 -1
  357. package/dist/authz/registry.d.ts.map +0 -1
  358. package/dist/authz/requirement.d.ts.map +0 -1
  359. package/dist/card/build.d.ts.map +0 -1
  360. package/dist/card/builder.d.ts.map +0 -1
  361. package/dist/card/cimd.d.ts.map +0 -1
  362. package/dist/card/delegation.d.ts.map +0 -1
  363. package/dist/card/emit.d.ts.map +0 -1
  364. package/dist/card/index.d.ts.map +0 -1
  365. package/dist/card/middleware.d.ts.map +0 -1
  366. package/dist/card/proof/build.d.ts.map +0 -1
  367. package/dist/card/proof/canonical.d.ts.map +0 -1
  368. package/dist/card/proof/http-sig.d.ts.map +0 -1
  369. package/dist/card/proof/index.d.ts.map +0 -1
  370. package/dist/card/proof/nonce-cache.d.ts.map +0 -1
  371. package/dist/card/proof/signer.d.ts.map +0 -1
  372. package/dist/card/proof/types.d.ts.map +0 -1
  373. package/dist/card/proof/verify.d.ts.map +0 -1
  374. package/dist/card/resolve.d.ts.map +0 -1
  375. package/dist/card/revocation.d.ts.map +0 -1
  376. package/dist/card/schema.d.ts.map +0 -1
  377. package/dist/card/verify.d.ts.map +0 -1
  378. package/dist/delegation/audience-validator.d.ts.map +0 -1
  379. package/dist/delegation/bitstring.d.ts.map +0 -1
  380. package/dist/delegation/cascading-revocation.d.ts.map +0 -1
  381. package/dist/delegation/chain-enforcement.d.ts.map +0 -1
  382. package/dist/delegation/delegation-graph.d.ts.map +0 -1
  383. package/dist/delegation/did-key-resolver.d.ts.map +0 -1
  384. package/dist/delegation/did-linkage.d.ts.map +0 -1
  385. package/dist/delegation/did-resolver-registry.d.ts.map +0 -1
  386. package/dist/delegation/did-web-resolver.d.ts.map +0 -1
  387. package/dist/delegation/holder-binding.d.ts.map +0 -1
  388. package/dist/delegation/index.d.ts.map +0 -1
  389. package/dist/delegation/outbound-headers.d.ts.map +0 -1
  390. package/dist/delegation/outbound-proof.d.ts.map +0 -1
  391. package/dist/delegation/scope-matcher.d.ts.map +0 -1
  392. package/dist/delegation/status-cache.d.ts.map +0 -1
  393. package/dist/delegation/statuslist-manager.d.ts.map +0 -1
  394. package/dist/delegation/storage/memory-graph-storage.d.ts.map +0 -1
  395. package/dist/delegation/storage/memory-statuslist-storage.d.ts.map +0 -1
  396. package/dist/delegation/utils.d.ts.map +0 -1
  397. package/dist/delegation/vc-issuer.d.ts.map +0 -1
  398. package/dist/delegation/vc-jwt-verify.d.ts.map +0 -1
  399. package/dist/delegation/vc-verification-checks.d.ts.map +0 -1
  400. package/dist/delegation/vc-verifier.d.ts.map +0 -1
  401. package/dist/delegation/vc-verifier.types.d.ts.map +0 -1
  402. package/dist/delegation/verification-method-key.d.ts.map +0 -1
  403. package/dist/errors.d.ts.map +0 -1
  404. package/dist/extension/declaration.d.ts.map +0 -1
  405. package/dist/extension/gate.d.ts.map +0 -1
  406. package/dist/extension/index.d.ts.map +0 -1
  407. package/dist/extension/settings.d.ts.map +0 -1
  408. package/dist/index.d.ts.map +0 -1
  409. package/dist/integrations/cheqd/dlr.d.ts.map +0 -1
  410. package/dist/integrations/cheqd/index.d.ts.map +0 -1
  411. package/dist/integrations/cheqd/linkage.d.ts.map +0 -1
  412. package/dist/integrations/cheqd/registrar.d.ts.map +0 -1
  413. package/dist/integrations/cheqd/resolver.d.ts.map +0 -1
  414. package/dist/integrations/cheqd/statuslist-resolver.d.ts.map +0 -1
  415. package/dist/logging/index.d.ts.map +0 -1
  416. package/dist/logging/logger.d.ts.map +0 -1
  417. package/dist/middleware/index.d.ts.map +0 -1
  418. package/dist/middleware/kya-os-transport.d.ts.map +0 -1
  419. package/dist/middleware/with-kya-os-server.d.ts.map +0 -1
  420. package/dist/middleware/with-kya-os.config-types.d.ts.map +0 -1
  421. package/dist/middleware/with-kya-os.d.ts.map +0 -1
  422. package/dist/middleware/with-kya-os.delegation-gate.d.ts.map +0 -1
  423. package/dist/middleware/with-kya-os.delegation-verify.d.ts.map +0 -1
  424. package/dist/middleware/with-kya-os.deps.d.ts.map +0 -1
  425. package/dist/middleware/with-kya-os.grants.d.ts.map +0 -1
  426. package/dist/middleware/with-kya-os.helpers.d.ts.map +0 -1
  427. package/dist/middleware/with-kya-os.policy-gate.d.ts.map +0 -1
  428. package/dist/middleware/with-kya-os.protocol.d.ts.map +0 -1
  429. package/dist/middleware/with-kya-os.session.d.ts.map +0 -1
  430. package/dist/middleware/with-kya-os.types.d.ts.map +0 -1
  431. package/dist/policy/approval.d.ts.map +0 -1
  432. package/dist/policy/classifier.d.ts.map +0 -1
  433. package/dist/policy/default-engine.d.ts.map +0 -1
  434. package/dist/policy/engine.d.ts.map +0 -1
  435. package/dist/policy/index.d.ts.map +0 -1
  436. package/dist/policy/projection.d.ts.map +0 -1
  437. package/dist/policy/types.d.ts.map +0 -1
  438. package/dist/proof/errors.d.ts.map +0 -1
  439. package/dist/proof/generator.d.ts.map +0 -1
  440. package/dist/proof/index.d.ts.map +0 -1
  441. package/dist/proof/verifier.d.ts.map +0 -1
  442. package/dist/providers/audit-log.d.ts.map +0 -1
  443. package/dist/providers/base.d.ts.map +0 -1
  444. package/dist/providers/grant-store.d.ts.map +0 -1
  445. package/dist/providers/index.d.ts.map +0 -1
  446. package/dist/providers/memory.d.ts.map +0 -1
  447. package/dist/providers/node-crypto.d.ts.map +0 -1
  448. package/dist/providers/runtime-fetch.d.ts.map +0 -1
  449. package/dist/providers/system-clock.d.ts.map +0 -1
  450. package/dist/providers/web-crypto.d.ts.map +0 -1
  451. package/dist/session/index.d.ts.map +0 -1
  452. package/dist/session/manager.d.ts.map +0 -1
  453. package/dist/session/session-store.d.ts.map +0 -1
  454. package/dist/types/protocol.d.ts.map +0 -1
  455. package/dist/utils/base58.d.ts.map +0 -1
  456. package/dist/utils/base64.d.ts.map +0 -1
  457. package/dist/utils/canonical-json.d.ts.map +0 -1
  458. package/dist/utils/crypto-service.d.ts.map +0 -1
  459. package/dist/utils/did-helpers.d.ts.map +0 -1
  460. package/dist/utils/ed25519-constants.d.ts.map +0 -1
  461. package/dist/utils/guards.d.ts.map +0 -1
  462. package/dist/utils/index.d.ts.map +0 -1
  463. package/dist/utils/ip-classifier.d.ts.map +0 -1
  464. package/dist/utils/safe-fetch-transports.d.ts.map +0 -1
  465. package/dist/utils/safe-fetch-types.d.ts.map +0 -1
  466. package/dist/utils/safe-fetch.d.ts.map +0 -1
  467. package/dist/utils/statuslist-bits.d.ts.map +0 -1
  468. package/dist/utils/statuslist-purpose.d.ts.map +0 -1
  469. package/dist/utils/ttl-cache.d.ts.map +0 -1
  470. package/dist/utils/url.d.ts.map +0 -1
@@ -20,6 +20,7 @@
20
20
  * possession is still proven per request by the agent's detached-JWS signature
21
21
  * over the request (holder-of-key). Storing a grant never substitutes for that.
22
22
  */
23
+ import type { DelegationCredential } from '../types/protocol.js';
23
24
  export interface Grant {
24
25
  /** Stable id for this grant (used for revocation). */
25
26
  id: string;
@@ -42,6 +43,12 @@ export interface Grant {
42
43
  };
43
44
  /** The delegation credential (VC-JWT), when one was minted. */
44
45
  credentialJwt?: string;
46
+ /**
47
+ * Original signed object credential. Delegation gates reverify this evidence
48
+ * (or credentialJwt) on every reuse; opaque legacy grants re-challenge.
49
+ * Durable providers must preserve the full credential, including its proof.
50
+ */
51
+ delegationCredential?: DelegationCredential;
45
52
  /** When the grant was issued (ms epoch). */
46
53
  issuedAt: number;
47
54
  /** When the grant expires (ms epoch); omitted means no expiry. */
@@ -100,8 +107,7 @@ export declare class MemoryGrantStore extends GrantStore {
100
107
  getById(id: string): Promise<Grant | undefined>;
101
108
  revoke(id: string, reason?: string): Promise<void>;
102
109
  cleanup(): Promise<void>;
103
- /** Active = not revoked and not past expiry. */
110
+ /** Active = explicitly active and not past expiry. */
104
111
  private activeGrants;
105
112
  private coversScopes;
106
113
  }
107
- //# sourceMappingURL=grant-store.d.ts.map
@@ -42,7 +42,7 @@ export class MemoryGrantStore extends GrantStore {
42
42
  this.now = options.now ?? (() => Date.now());
43
43
  }
44
44
  async bind(grant) {
45
- this.grants.set(grant.id, { ...grant });
45
+ this.grants.set(grant.id, structuredClone(grant));
46
46
  }
47
47
  async getByAgent(agentDid, requiredScopes) {
48
48
  return this.activeGrants().filter((g) => g.agentDid === agentDid && this.coversScopes(g, requiredScopes));
@@ -52,7 +52,7 @@ export class MemoryGrantStore extends GrantStore {
52
52
  }
53
53
  async getById(id) {
54
54
  const grant = this.grants.get(id);
55
- return grant ? { ...grant } : undefined;
55
+ return grant ? structuredClone(grant) : undefined;
56
56
  }
57
57
  async revoke(id, reason) {
58
58
  const grant = this.grants.get(id);
@@ -70,16 +70,16 @@ export class MemoryGrantStore extends GrantStore {
70
70
  }
71
71
  }
72
72
  }
73
- /** Active = not revoked and not past expiry. */
73
+ /** Active = explicitly active and not past expiry. */
74
74
  activeGrants() {
75
75
  const now = this.now();
76
76
  const out = [];
77
77
  for (const grant of this.grants.values()) {
78
- if (grant.status === 'revoked')
78
+ if (grant.status !== 'active')
79
79
  continue;
80
80
  if (grant.expiresAt !== undefined && grant.expiresAt <= now)
81
81
  continue;
82
- out.push({ ...grant });
82
+ out.push(structuredClone(grant));
83
83
  }
84
84
  return out;
85
85
  }
@@ -1 +1 @@
1
- {"version":3,"file":"grant-store.js","sourceRoot":"","sources":["../../src/providers/grant-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"grant-store.js","sourceRoot":"","sources":["../../src/providers/grant-store.ts"],"names":[],"mappings":"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"}
@@ -6,4 +6,3 @@ export { SystemClockProvider } from './system-clock.js';
6
6
  export { RuntimeFetchProvider } from './runtime-fetch.js';
7
7
  export { AuditLogProvider, MemoryAuditLogProvider, NoopAuditLogProvider, buildAuditRecord, } from './audit-log.js';
8
8
  export { GrantStore, MemoryGrantStore, type Grant, type MemoryGrantStoreOptions } from './grant-store.js';
9
- //# sourceMappingURL=index.d.ts.map
@@ -12,11 +12,30 @@ export declare class MemoryStorageProvider extends StorageProvider {
12
12
  exists(key: string): Promise<boolean>;
13
13
  list(prefix?: string): Promise<string[]>;
14
14
  }
15
+ /**
16
+ * In-memory replay store, and the default one for `withKyaOs` and
17
+ * `SessionManager`. Single process only. Expired entries are swept as the
18
+ * cache is written to (every {@link SWEEP_EVERY} writes, or after
19
+ * {@link SWEEP_INTERVAL_MS}), so a long-running server stays bounded by its
20
+ * live nonces without anyone scheduling {@link cleanup}.
21
+ */
15
22
  export declare class MemoryNonceCacheProvider extends NonceCacheProvider {
16
23
  private nonces;
24
+ private writesSinceSweep;
25
+ private lastSweepAt;
26
+ /** Atomic within this cache instance: no await separates the read and write. */
27
+ consume(nonce: string, ttlSeconds: number, agentDid?: string): Promise<boolean>;
28
+ private key;
17
29
  has(nonce: string, agentDid?: string): Promise<boolean>;
18
30
  add(nonce: string, ttlSeconds: number, agentDid?: string): Promise<void>;
19
31
  cleanup(): Promise<void>;
32
+ /**
33
+ * Amortised eviction: every admitted nonce is a write, so sweeping on writes
34
+ * keeps the map bounded by live entries. The count trigger bounds a busy
35
+ * cache; the interval trigger releases a quiet one's dead entries too.
36
+ */
37
+ private sweepIfDue;
38
+ private evictExpired;
20
39
  destroy(): Promise<void>;
21
40
  }
22
41
  export declare class MemoryIdentityProvider extends IdentityProvider {
@@ -30,4 +49,3 @@ export declare class MemoryIdentityProvider extends IdentityProvider {
30
49
  private generateIdentity;
31
50
  private generateDIDFromPublicKey;
32
51
  }
33
- //# sourceMappingURL=memory.d.ts.map
@@ -5,6 +5,10 @@
5
5
  */
6
6
  import { StorageProvider, NonceCacheProvider, IdentityProvider, } from './base.js';
7
7
  import { generateDidKeyFromBase64, didKeyFragment } from '../utils/did-helpers.js';
8
+ /** Writes between amortised expired-entry sweeps (bounds memory without a timer). */
9
+ const SWEEP_EVERY = 1000;
10
+ /** Longest a cache goes between sweeps while written to, so low traffic also frees memory. */
11
+ const SWEEP_INTERVAL_MS = 60_000;
8
12
  export class MemoryStorageProvider extends StorageProvider {
9
13
  store = new Map();
10
14
  async get(key) {
@@ -27,28 +31,70 @@ export class MemoryStorageProvider extends StorageProvider {
27
31
  return keys;
28
32
  }
29
33
  }
34
+ /**
35
+ * In-memory replay store, and the default one for `withKyaOs` and
36
+ * `SessionManager`. Single process only. Expired entries are swept as the
37
+ * cache is written to (every {@link SWEEP_EVERY} writes, or after
38
+ * {@link SWEEP_INTERVAL_MS}), so a long-running server stays bounded by its
39
+ * live nonces without anyone scheduling {@link cleanup}.
40
+ */
30
41
  export class MemoryNonceCacheProvider extends NonceCacheProvider {
31
42
  nonces = new Map();
43
+ writesSinceSweep = 0;
44
+ lastSweepAt = Date.now();
45
+ /** Atomic within this cache instance: no await separates the read and write. */
46
+ async consume(nonce, ttlSeconds, agentDid) {
47
+ if (!Number.isFinite(ttlSeconds) || ttlSeconds <= 0) {
48
+ throw new RangeError('Nonce TTL must be a positive finite number');
49
+ }
50
+ const key = this.key(nonce, agentDid);
51
+ const now = Date.now();
52
+ const expiry = this.nonces.get(key);
53
+ if (expiry !== undefined && expiry > now)
54
+ return false;
55
+ this.nonces.set(key, now + ttlSeconds * 1000);
56
+ this.sweepIfDue(now);
57
+ return true;
58
+ }
59
+ key(nonce, agentDid) {
60
+ return JSON.stringify([agentDid ?? null, nonce]);
61
+ }
32
62
  async has(nonce, agentDid) {
33
- const key = agentDid ? `nonce:${agentDid}:${nonce}` : `nonce:${nonce}`;
63
+ const key = this.key(nonce, agentDid);
34
64
  const expiry = this.nonces.get(key);
35
65
  if (!expiry)
36
66
  return false;
37
- if (Date.now() > expiry) {
67
+ if (Date.now() >= expiry) {
38
68
  this.nonces.delete(key);
39
69
  return false;
40
70
  }
41
71
  return true;
42
72
  }
43
73
  async add(nonce, ttlSeconds, agentDid) {
44
- const key = agentDid ? `nonce:${agentDid}:${nonce}` : `nonce:${nonce}`;
45
- const expiresAt = Date.now() + ttlSeconds * 1000;
46
- this.nonces.set(key, expiresAt);
74
+ const key = this.key(nonce, agentDid);
75
+ const now = Date.now();
76
+ this.nonces.set(key, now + ttlSeconds * 1000);
77
+ this.sweepIfDue(now);
47
78
  }
48
79
  async cleanup() {
49
- const now = Date.now();
80
+ this.evictExpired(Date.now());
81
+ }
82
+ /**
83
+ * Amortised eviction: every admitted nonce is a write, so sweeping on writes
84
+ * keeps the map bounded by live entries. The count trigger bounds a busy
85
+ * cache; the interval trigger releases a quiet one's dead entries too.
86
+ */
87
+ sweepIfDue(now) {
88
+ if (++this.writesSinceSweep < SWEEP_EVERY && now - this.lastSweepAt < SWEEP_INTERVAL_MS) {
89
+ return;
90
+ }
91
+ this.writesSinceSweep = 0;
92
+ this.lastSweepAt = now;
93
+ this.evictExpired(now);
94
+ }
95
+ evictExpired(now) {
50
96
  for (const [nonce, expiry] of this.nonces) {
51
- if (now > expiry) {
97
+ if (now >= expiry) {
52
98
  this.nonces.delete(nonce);
53
99
  }
54
100
  }
@@ -1 +1 @@
1
- {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/providers/memory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/providers/memory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAEL,eAAe,EACf,kBAAkB,EAClB,gBAAgB,GAEjB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEnF,qFAAqF;AACrF,MAAM,WAAW,GAAG,IAAI,CAAC;AACzB,8FAA8F;AAC9F,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAEjC,MAAM,OAAO,qBAAsB,SAAQ,eAAe;IAChD,KAAK,GAAwB,IAAI,GAAG,EAAE,CAAC;IAE/C,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,KAAa;QAClC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAe;QACxB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3C,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QAClD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED;;;;;;GAMG;AACH,MAAM,OAAO,wBAAyB,SAAQ,kBAAkB;IACtD,MAAM,GAAwB,IAAI,GAAG,EAAE,CAAC;IACxC,gBAAgB,GAAG,CAAC,CAAC;IACrB,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEjC,gFAAgF;IAChF,KAAK,CAAC,OAAO,CAAC,KAAa,EAAE,UAAkB,EAAE,QAAiB;QAChE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;YACpD,MAAM,IAAI,UAAU,CAAC,4CAA4C,CAAC,CAAC;QACrE,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,GAAG,GAAG;YAAE,OAAO,KAAK,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,UAAU,GAAG,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,GAAG,CAAC,KAAa,EAAE,QAAiB;QAC1C,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,IAAI,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,KAAa,EAAE,QAAiB;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAE1B,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,MAAM,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACxB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,KAAa,EAAE,UAAkB,EAAE,QAAiB;QAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,UAAU,GAAG,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAChC,CAAC;IAED;;;;OAIG;IACK,UAAU,CAAC,GAAW;QAC5B,IAAI,EAAE,IAAI,CAAC,gBAAgB,GAAG,WAAW,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,GAAG,iBAAiB,EAAE,CAAC;YACxF,OAAO;QACT,CAAC;QACD,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;QACvB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAEO,YAAY,CAAC,GAAW;QAC9B,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC1C,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;gBAClB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;CACF;AAED,MAAM,OAAO,sBAAuB,SAAQ,gBAAgB;IAClD,QAAQ,CAAiB;IACzB,cAAc,CAA6B;IAEnD,YAAY,cAA+B;QACzC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,WAAW;QACf,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,IAAI,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAChD,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,QAAuB;QACxC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC9C,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;IAC5B,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC5B,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACtE,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE,CAAC;QAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAE7D,OAAO;YACL,GAAG;YACH,GAAG,EAAE,GAAG,GAAG,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE;YACpC,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,IAAI,EAAE,aAAa;SACpB,CAAC;IACJ,CAAC;IAEO,wBAAwB,CAAC,SAAiB;QAChD,OAAO,wBAAwB,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC;CACF"}
@@ -4,6 +4,10 @@
4
4
  * Ed25519 crypto backed by Node.js built-in `node:crypto`.
5
5
  * Use this on any Node.js 20+ server.
6
6
  *
7
+ * `node:crypto` is loaded on first use, never at module load: the
8
+ * `@kya-os/mcp/providers` entry also serves `WebCryptoProvider` to browsers and
9
+ * Workers, and a top-level import of a node built-in would break their bundles.
10
+ *
7
11
  * @example
8
12
  * ```typescript
9
13
  * import { NodeCryptoProvider } from '@kya-os/mcp/providers';
@@ -23,4 +27,3 @@ export declare class NodeCryptoProvider extends CryptoProvider {
23
27
  hash(data: Uint8Array): Promise<string>;
24
28
  randomBytes(length: number): Promise<Uint8Array>;
25
29
  }
26
- //# sourceMappingURL=node-crypto.d.ts.map
@@ -4,6 +4,10 @@
4
4
  * Ed25519 crypto backed by Node.js built-in `node:crypto`.
5
5
  * Use this on any Node.js 20+ server.
6
6
  *
7
+ * `node:crypto` is loaded on first use, never at module load: the
8
+ * `@kya-os/mcp/providers` entry also serves `WebCryptoProvider` to browsers and
9
+ * Workers, and a top-level import of a node built-in would break their bundles.
10
+ *
7
11
  * @example
8
12
  * ```typescript
9
13
  * import { NodeCryptoProvider } from '@kya-os/mcp/providers';
@@ -12,31 +16,47 @@
12
16
  * await withKyaOs(server, { crypto: new NodeCryptoProvider() });
13
17
  * ```
14
18
  */
15
- import { createHash, createPrivateKey, createPublicKey, generateKeyPairSync, sign, verify, randomBytes, } from "node:crypto";
16
19
  import { CryptoProvider } from "./base.js";
17
- /** PKCS8 DER header for Ed25519 private keys (16 bytes) */
18
- const ED25519_PKCS8_PREFIX = Buffer.from("302e020100300506032b657004220420", "hex");
20
+ import { ED25519_PKCS8_DER_HEADER } from "../utils/ed25519-constants.js";
21
+ import { decodeEd25519PublicKey } from "../utils/ed25519-public-key.js";
19
22
  /** SPKI DER header for Ed25519 public keys (12 bytes) */
20
- const ED25519_SPKI_PREFIX = Buffer.from("302a300506032b6570032100", "hex");
23
+ const ED25519_SPKI_PREFIX = Uint8Array.from([
24
+ 0x30, 0x2a, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65, 0x70, 0x03, 0x21, 0x00,
25
+ ]);
26
+ let nodeCryptoPromise;
27
+ /**
28
+ * Load (and cache) `node:crypto`. Where it is absent, fail with a pointer to
29
+ * the provider that works there rather than a module-resolution error.
30
+ */
31
+ function loadNodeCrypto() {
32
+ return (nodeCryptoPromise ??= import("node:crypto").catch((cause) => {
33
+ throw new Error("NodeCryptoProvider: node:crypto is unavailable in this runtime; use WebCryptoProvider", { cause });
34
+ }));
35
+ }
21
36
  export class NodeCryptoProvider extends CryptoProvider {
22
37
  async sign(data, privateKeyBase64) {
38
+ const { createPrivateKey, sign } = await loadNodeCrypto();
23
39
  const privateKey = Buffer.from(privateKeyBase64, "base64");
24
40
  // Handle both raw 32-byte and full 64-byte Ed25519 keys
25
41
  const keyBytes = privateKey.length === 64 ? privateKey.subarray(0, 32) : privateKey;
26
42
  const keyObject = createPrivateKey({
27
- key: Buffer.concat([ED25519_PKCS8_PREFIX, keyBytes]),
43
+ key: Buffer.concat([ED25519_PKCS8_DER_HEADER, keyBytes]),
28
44
  format: "der",
29
45
  type: "pkcs8",
30
46
  });
31
47
  return new Uint8Array(sign(null, Buffer.from(data), keyObject));
32
48
  }
33
49
  async verify(data, signature, publicKeyBase64) {
50
+ const { createPublicKey, verify } = await loadNodeCrypto();
51
+ // Exactly 32 bytes, decoded strictly: Node's base64 decoder would skip
52
+ // junk and the SPKI wrap would accept extra bytes after the key.
53
+ const publicKey = decodeEd25519PublicKey(publicKeyBase64);
54
+ if (!publicKey) {
55
+ return false;
56
+ }
34
57
  try {
35
58
  const keyObject = createPublicKey({
36
- key: Buffer.concat([
37
- ED25519_SPKI_PREFIX,
38
- Buffer.from(publicKeyBase64, "base64"),
39
- ]),
59
+ key: Buffer.concat([ED25519_SPKI_PREFIX, publicKey]),
40
60
  format: "der",
41
61
  type: "spki",
42
62
  });
@@ -47,6 +67,7 @@ export class NodeCryptoProvider extends CryptoProvider {
47
67
  }
48
68
  }
49
69
  async generateKeyPair() {
70
+ const { generateKeyPairSync } = await loadNodeCrypto();
50
71
  const { publicKey, privateKey } = generateKeyPairSync("ed25519", {
51
72
  publicKeyEncoding: { type: "spki", format: "der" },
52
73
  privateKeyEncoding: { type: "pkcs8", format: "der" },
@@ -57,12 +78,14 @@ export class NodeCryptoProvider extends CryptoProvider {
57
78
  };
58
79
  }
59
80
  async hash(data) {
81
+ const { createHash } = await loadNodeCrypto();
60
82
  const hex = createHash("sha256")
61
83
  .update(Buffer.from(data))
62
84
  .digest("hex");
63
85
  return `sha256:${hex}`;
64
86
  }
65
87
  async randomBytes(length) {
88
+ const { randomBytes } = await loadNodeCrypto();
66
89
  return new Uint8Array(randomBytes(length));
67
90
  }
68
91
  }
@@ -1 +1 @@
1
- {"version":3,"file":"node-crypto.js","sourceRoot":"","sources":["../../src/providers/node-crypto.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"node-crypto.js","sourceRoot":"","sources":["../../src/providers/node-crypto.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Replay admission shared by detached proofs, handshakes and card proofs.
3
+ *
4
+ * A provider's atomic `consume()` decides admission when it exists. Providers
5
+ * written before `consume()` existed fall back to `has()` then `add()`, which
6
+ * works for sequential requests but lets concurrent duplicates of one proof
7
+ * through. The fallback keeps those providers working and warns once per
8
+ * provider; `requireAtomicNonce` refuses it instead.
9
+ */
10
+ /** The replay-store surface admission needs; both nonce cache contracts satisfy it. */
11
+ export interface NonceAdmissionStore {
12
+ consume?(nonce: string, ttlSeconds: number, agentDid?: string): Promise<boolean>;
13
+ has(nonce: string, agentDid?: string): Promise<boolean>;
14
+ add(nonce: string, ttlSeconds: number, agentDid?: string): Promise<void>;
15
+ }
16
+ export interface NonceAdmissionOptions {
17
+ /** Deny rather than fall back when the store has no atomic consume(). */
18
+ requireAtomicNonce?: boolean;
19
+ }
20
+ /**
21
+ * Check a store when a verifier is built: accept an atomic store, refuse a
22
+ * non-atomic one under `requireAtomicNonce`, and otherwise warn once per store
23
+ * about the has()/add() fallback. Repeat calls stay silent.
24
+ */
25
+ export declare function checkNonceStore(store: NonceAdmissionStore, options?: NonceAdmissionOptions): void;
26
+ /**
27
+ * Admit a nonce that has already passed every other check. Returns true only
28
+ * for the call that admits it. Storage failures, and a missing consume() under
29
+ * `requireAtomicNonce`, reject so callers deny the request.
30
+ */
31
+ export declare function admitNonce(store: NonceAdmissionStore, nonce: string, ttlSeconds: number, agentDid?: string, options?: NonceAdmissionOptions): Promise<boolean>;
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Replay admission shared by detached proofs, handshakes and card proofs.
3
+ *
4
+ * A provider's atomic `consume()` decides admission when it exists. Providers
5
+ * written before `consume()` existed fall back to `has()` then `add()`, which
6
+ * works for sequential requests but lets concurrent duplicates of one proof
7
+ * through. The fallback keeps those providers working and warns once per
8
+ * provider; `requireAtomicNonce` refuses it instead.
9
+ */
10
+ import { logger } from '../logging/index.js';
11
+ const warnedStores = new WeakSet();
12
+ /**
13
+ * Check a store when a verifier is built: accept an atomic store, refuse a
14
+ * non-atomic one under `requireAtomicNonce`, and otherwise warn once per store
15
+ * about the has()/add() fallback. Repeat calls stay silent.
16
+ */
17
+ export function checkNonceStore(store, options = {}) {
18
+ if (typeof store.consume === 'function')
19
+ return;
20
+ if (options.requireAtomicNonce) {
21
+ throw new TypeError('requireAtomicNonce is set but the nonce cache has no consume()');
22
+ }
23
+ if (warnedStores.has(store))
24
+ return;
25
+ warnedStores.add(store);
26
+ logger.warn('[kya-os] Nonce cache has no atomic consume(); falling back to has() then add(). ' +
27
+ 'Concurrent duplicates of one signed request can both be admitted. ' +
28
+ 'Implement consume() with a conditional insert in the shared store, and set ' +
29
+ 'requireAtomicNonce to refuse this fallback.');
30
+ }
31
+ /**
32
+ * Admit a nonce that has already passed every other check. Returns true only
33
+ * for the call that admits it. Storage failures, and a missing consume() under
34
+ * `requireAtomicNonce`, reject so callers deny the request.
35
+ */
36
+ export async function admitNonce(store, nonce, ttlSeconds, agentDid, options = {}) {
37
+ const consume = store.consume;
38
+ if (typeof consume === 'function') {
39
+ return (await consume.call(store, nonce, ttlSeconds, agentDid)) === true;
40
+ }
41
+ checkNonceStore(store, options);
42
+ if (await store.has(nonce, agentDid))
43
+ return false;
44
+ await store.add(nonce, ttlSeconds, agentDid);
45
+ return true;
46
+ }
47
+ //# sourceMappingURL=nonce-admission.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nonce-admission.js","sourceRoot":"","sources":["../../src/providers/nonce-admission.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAc7C,MAAM,YAAY,GAAG,IAAI,OAAO,EAAU,CAAC;AAE3C;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAC7B,KAA0B,EAC1B,UAAiC,EAAE;IAEnC,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,UAAU;QAAE,OAAO;IAChD,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;QAC/B,MAAM,IAAI,SAAS,CAAC,gEAAgE,CAAC,CAAC;IACxF,CAAC;IACD,IAAI,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,OAAO;IACpC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACxB,MAAM,CAAC,IAAI,CACT,kFAAkF;QAChF,oEAAoE;QACpE,6EAA6E;QAC7E,6CAA6C,CAChD,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,KAA0B,EAC1B,KAAa,EACb,UAAkB,EAClB,QAAiB,EACjB,UAAiC,EAAE;IAEnC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;QAClC,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,KAAK,IAAI,CAAC;IAC3E,CAAC;IACD,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAChC,IAAI,MAAM,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IACnD,MAAM,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC7C,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Retain admission state through the entire final accepted second. The extra
3
+ * second covers inclusive, second-granularity verifiers; rounding up also
4
+ * covers subsecond cache clocks. A longer configured retention always wins;
5
+ * a configured TTL of 0 keeps the record for the acceptance window only. The
6
+ * result is at least one second, so stores never receive a zero TTL.
7
+ */
8
+ export declare function nonceRetentionSeconds(configuredTtlSeconds: number, validUntilSeconds: number, nowMs: number): number;
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Retain admission state through the entire final accepted second. The extra
3
+ * second covers inclusive, second-granularity verifiers; rounding up also
4
+ * covers subsecond cache clocks. A longer configured retention always wins;
5
+ * a configured TTL of 0 keeps the record for the acceptance window only. The
6
+ * result is at least one second, so stores never receive a zero TTL.
7
+ */
8
+ export function nonceRetentionSeconds(configuredTtlSeconds, validUntilSeconds, nowMs) {
9
+ if (!Number.isFinite(configuredTtlSeconds) || configuredTtlSeconds < 0 ||
10
+ !Number.isFinite(validUntilSeconds) || !Number.isFinite(nowMs)) {
11
+ throw new RangeError('Nonce retention requires a non-negative TTL and a bounded acceptance window');
12
+ }
13
+ return Math.max(1, configuredTtlSeconds, Math.ceil(validUntilSeconds + 1 - nowMs / 1000));
14
+ }
15
+ //# sourceMappingURL=nonce-retention.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nonce-retention.js","sourceRoot":"","sources":["../../src/providers/nonce-retention.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CACnC,oBAA4B,EAC5B,iBAAyB,EACzB,KAAa;IAEb,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,oBAAoB,GAAG,CAAC;QAClE,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACnE,MAAM,IAAI,UAAU,CAAC,6EAA6E,CAAC,CAAC;IACtG,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,oBAAoB,EAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB,GAAG,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;AAC5F,CAAC"}
@@ -92,4 +92,3 @@ export declare class NoopFetchProvider extends FetchProvider {
92
92
  fetchDelegationChain(_id: string): Promise<DelegationRecord[]>;
93
93
  fetch(_url: string, _options?: unknown): Promise<Response>;
94
94
  }
95
- //# sourceMappingURL=runtime-fetch.d.ts.map
@@ -36,4 +36,3 @@ export declare class SystemClockProvider extends ClockProvider {
36
36
  /** ISO-8601 rendering of a ms-epoch timestamp. */
37
37
  format(timestamp: number): string;
38
38
  }
39
- //# sourceMappingURL=system-clock.d.ts.map
@@ -32,4 +32,3 @@ export declare class WebCryptoProvider extends CryptoProvider {
32
32
  hash(data: Uint8Array): Promise<string>;
33
33
  randomBytes(length: number): Promise<Uint8Array>;
34
34
  }
35
- //# sourceMappingURL=web-crypto.d.ts.map
@@ -23,6 +23,7 @@
23
23
  */
24
24
  import { CryptoProvider } from "./base.js";
25
25
  import { base64ToBytes, bytesToBase64 } from "../utils/base64.js";
26
+ import { decodeEd25519PublicKey } from "../utils/ed25519-public-key.js";
26
27
  const ALG = "Ed25519";
27
28
  /** PKCS8 DER header for Ed25519 private keys (16 bytes) — matches NodeCryptoProvider. */
28
29
  const ED25519_PKCS8_PREFIX = Uint8Array.from([
@@ -66,8 +67,13 @@ export class WebCryptoProvider extends CryptoProvider {
66
67
  return new Uint8Array(sig);
67
68
  }
68
69
  async verify(data, signature, publicKeyBase64) {
70
+ // Same strict decode as NodeCryptoProvider: exactly 32 bytes, and never a
71
+ // small-order key (WebCrypto accepts those, and they verify a forgery).
72
+ const raw = decodeEd25519PublicKey(publicKeyBase64);
73
+ if (!raw) {
74
+ return false;
75
+ }
69
76
  try {
70
- const raw = base64ToBytes(publicKeyBase64);
71
77
  const key = await getCrypto().subtle.importKey("raw", toBufferSource(raw), { name: ALG }, false, ["verify"]);
72
78
  return await getCrypto().subtle.verify({ name: ALG }, key, toBufferSource(signature), toBufferSource(data));
73
79
  }
@@ -1 +1 @@
1
- {"version":3,"file":"web-crypto.js","sourceRoot":"","sources":["../../src/providers/web-crypto.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"web-crypto.js","sourceRoot":"","sources":["../../src/providers/web-crypto.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,2 @@
1
1
  export { SessionManager, createHandshakeRequest, validateHandshakeFormat, type SessionConfig, type HandshakeResult, } from './manager.js';
2
2
  export { SessionStore, MemorySessionStore, type MemorySessionStoreOptions, } from './session-store.js';
3
- //# sourceMappingURL=index.d.ts.map
@@ -17,6 +17,11 @@ export interface SessionConfig {
17
17
  sessionTtlMinutes?: number;
18
18
  absoluteSessionLifetime?: number;
19
19
  nonceCache?: NonceCache;
20
+ /**
21
+ * Refuse a nonce cache without an atomic `consume()` instead of falling back
22
+ * to `has()` then `add()`. The constructor throws for such a cache.
23
+ */
24
+ requireAtomicNonce?: boolean;
20
25
  serverDid?: string;
21
26
  /** Maximum number of concurrent sessions. Oldest sessions are evicted when exceeded. Default: 10000 */
22
27
  maxSessions?: number;
@@ -79,6 +84,14 @@ export declare class SessionManager {
79
84
  private normalizeClientInfoString;
80
85
  private buildClientInfo;
81
86
  static generateNonce(): string;
87
+ /**
88
+ * Sweep expired sessions from the session store, then run the store's and
89
+ * the nonce cache's own `cleanup()`. Nothing in the library schedules this:
90
+ * `getSession` already drops an expired session when it is read, and the
91
+ * default session store is capped by `maxSessions`. Call it from your own
92
+ * scheduler to reclaim records eagerly, or when a store relies on it to
93
+ * expire entries.
94
+ */
82
95
  cleanup(): Promise<void>;
83
96
  getStats(): {
84
97
  activeSessions: number;
@@ -93,4 +106,3 @@ export declare class SessionManager {
93
106
  }
94
107
  export declare function createHandshakeRequest(audience: string): HandshakeRequest;
95
108
  export declare function validateHandshakeFormat(request: unknown): request is HandshakeRequest;
96
- //# sourceMappingURL=manager.d.ts.map