@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
@@ -5,8 +5,14 @@
5
5
  * can silently erase or coerce unsupported JavaScript values. Protocol digests
6
6
  * must fail closed instead: two distinguishable JavaScript inputs must never be
7
7
  * accepted as the same canonical JSON value by accident.
8
+ *
9
+ * The serializer here is our own, over the value as validated. Any library
10
+ * that honours `toJSON` — `json-canonicalize` hands every object with one to
11
+ * `JSON.stringify` — lets a member named `toJSON` switch off key sorting, and a
12
+ * hidden `toJSON` function replace the value outright. A `toJSON` member is
13
+ * ordinary data here, and properties JSON does not carry (non-enumerable
14
+ * ones, and an array's non-index ones) are ignored, never consulted.
8
15
  */
9
- import { canonicalize } from 'json-canonicalize';
10
16
  const encoder = new TextEncoder();
11
17
  /** RFC 8785 requires invalid Unicode data (unpaired UTF-16 surrogates) to fail. */
12
18
  function hasLoneSurrogate(value) {
@@ -26,81 +32,145 @@ function hasLoneSurrogate(value) {
26
32
  }
27
33
  /** Validate that a value has an unambiguous JSON representation. */
28
34
  export function assertCanonicalJsonValue(value, path = '$', ancestors = new WeakSet()) {
29
- if (value === null || typeof value === 'boolean') {
30
- return;
35
+ serialize(value, new Serializer(path, ancestors));
36
+ }
37
+ /**
38
+ * Output and position for one serialization. Text goes into one shared list
39
+ * that is joined once, and the path is a stack turned into a string only for
40
+ * an error message, so the work stays linear in the size of the input however
41
+ * deeply it nests.
42
+ */
43
+ class Serializer {
44
+ root;
45
+ ancestors;
46
+ out = [];
47
+ segments = [];
48
+ constructor(root, ancestors) {
49
+ this.root = root;
50
+ this.ancestors = ancestors;
31
51
  }
32
- if (typeof value === 'string') {
33
- if (hasLoneSurrogate(value)) {
34
- throw new TypeError(`Cannot canonicalize string with lone surrogate at ${path}`);
35
- }
36
- return;
52
+ enter(segment) {
53
+ this.segments.push(segment);
37
54
  }
38
- if (typeof value === 'number') {
39
- if (!Number.isFinite(value)) {
40
- throw new TypeError(`Cannot canonicalize non-finite number at ${path}: ${value}`);
41
- }
42
- if (Number.isInteger(value) && !Number.isSafeInteger(value)) {
43
- throw new TypeError(`Cannot canonicalize unsafe integer at ${path}: ${value}`);
44
- }
45
- return;
46
- }
47
- if (typeof value === 'undefined') {
48
- throw new TypeError(`Cannot canonicalize undefined at ${path}`);
55
+ leave() {
56
+ this.segments.pop();
49
57
  }
50
- if (typeof value === 'function') {
51
- throw new TypeError(`Cannot canonicalize function at ${path}`);
58
+ fail(problem, suffix = '') {
59
+ throw new TypeError(`Cannot canonicalize ${problem} at ${this.root}${this.segments.join('')}${suffix}`);
52
60
  }
53
- if (typeof value === 'symbol') {
54
- throw new TypeError(`Cannot canonicalize symbol at ${path}`);
61
+ }
62
+ /**
63
+ * Validate `value` and serialize it per RFC 8785 in one pass, so the output is
64
+ * built from exactly the data that was checked. Strings and numbers are
65
+ * written as ECMAScript `JSON.stringify` writes them, which is the RFC 8785
66
+ * rule (§3.2.2.2, §3.2.2.3); `toJSON` is never called.
67
+ *
68
+ * One stack frame per nesting level: arrays and objects recurse from here
69
+ * directly, so deep input reaches the same depth it did before.
70
+ */
71
+ function serialize(value, s) {
72
+ if (value === null) {
73
+ s.out.push('null');
74
+ return;
55
75
  }
56
- if (typeof value === 'bigint') {
57
- throw new TypeError(`Cannot canonicalize bigint at ${path}`);
76
+ if (typeof value === 'boolean') {
77
+ s.out.push(value ? 'true' : 'false');
78
+ return;
58
79
  }
59
- if (typeof value !== 'object') {
60
- throw new TypeError(`Cannot canonicalize unsupported value at ${path}`);
80
+ if (typeof value === 'string') {
81
+ if (hasLoneSurrogate(value))
82
+ s.fail('string with lone surrogate');
83
+ s.out.push(JSON.stringify(value));
84
+ return;
61
85
  }
62
- if (ancestors.has(value)) {
63
- throw new TypeError(`Cannot canonicalize cyclic reference at ${path}`);
86
+ if (typeof value === 'number') {
87
+ if (!Number.isFinite(value))
88
+ s.fail('non-finite number', `: ${value}`);
89
+ if (Number.isInteger(value) && !Number.isSafeInteger(value))
90
+ s.fail('unsafe integer', `: ${value}`);
91
+ s.out.push(JSON.stringify(value)); // shortest round-trip form; -0 is written as 0
92
+ return;
64
93
  }
65
- ancestors.add(value);
94
+ if (typeof value === 'undefined')
95
+ s.fail('undefined');
96
+ if (typeof value === 'function')
97
+ s.fail('function');
98
+ if (typeof value === 'symbol')
99
+ s.fail('symbol');
100
+ if (typeof value === 'bigint')
101
+ s.fail('bigint');
102
+ if (typeof value !== 'object')
103
+ s.fail('unsupported value');
104
+ if (s.ancestors.has(value))
105
+ s.fail('cyclic reference');
106
+ s.ancestors.add(value);
66
107
  try {
67
- if (Array.isArray(value)) {
68
- for (let index = 0; index < value.length; index += 1) {
69
- if (!(index in value)) {
70
- throw new TypeError(`Cannot canonicalize sparse array element at ${path}[${index}]`);
71
- }
72
- assertCanonicalJsonValue(value[index], `${path}[${index}]`, ancestors);
73
- }
74
- return;
75
- }
76
- const prototype = Object.getPrototypeOf(value);
77
- if (prototype !== Object.prototype && prototype !== null) {
78
- throw new TypeError(`Cannot canonicalize non-plain object at ${path}`);
79
- }
80
- for (const key of Reflect.ownKeys(value)) {
81
- if (typeof key === 'symbol') {
82
- throw new TypeError(`Cannot canonicalize symbol-keyed property at ${path}`);
83
- }
84
- if (hasLoneSurrogate(key)) {
85
- throw new TypeError(`Cannot canonicalize object key with lone surrogate at ${path}`);
86
- }
87
- const descriptor = Object.getOwnPropertyDescriptor(value, key);
88
- if (!descriptor?.enumerable)
89
- continue;
90
- if (!('value' in descriptor)) {
91
- throw new TypeError(`Cannot canonicalize accessor property at ${path}.${key}`);
92
- }
93
- assertCanonicalJsonValue(descriptor.value, `${path}.${key}`, ancestors);
108
+ const array = Array.isArray(value);
109
+ const members = array ? arrayElements(value, s) : objectMembers(value, s);
110
+ s.out.push(array ? '[' : '{');
111
+ for (let index = 0; index < members.length; index += 1) {
112
+ const [segment, key, descriptor] = members[index];
113
+ if (index > 0)
114
+ s.out.push(',');
115
+ if (!array)
116
+ s.out.push(JSON.stringify(key), ':');
117
+ s.enter(segment);
118
+ // A getter could answer differently each time it is read, so the value
119
+ // checked might not be the value written: refused.
120
+ if (!('value' in descriptor))
121
+ s.fail('accessor property');
122
+ serialize(descriptor.value, s);
123
+ s.leave();
94
124
  }
125
+ s.out.push(array ? ']' : '}');
95
126
  }
96
127
  finally {
97
- ancestors.delete(value);
128
+ s.ancestors.delete(value);
129
+ }
130
+ }
131
+ /**
132
+ * Elements only. Any other own property (a `toJSON`, a RegExp match's `index`
133
+ * and `input`) is not JSON and never reaches the output, so it is ignored.
134
+ */
135
+ function arrayElements(array, s) {
136
+ const elements = [];
137
+ for (let index = 0; index < array.length; index += 1) {
138
+ const descriptor = Object.getOwnPropertyDescriptor(array, index);
139
+ if (!descriptor) {
140
+ s.enter(`[${index}]`);
141
+ s.fail('sparse array element');
142
+ }
143
+ elements.push([`[${index}]`, '', descriptor]);
144
+ }
145
+ return elements;
146
+ }
147
+ /**
148
+ * Enumerable string-keyed members, sorted. Non-enumerable ones are not JSON
149
+ * and are ignored.
150
+ */
151
+ function objectMembers(object, s) {
152
+ const prototype = Object.getPrototypeOf(object);
153
+ if (prototype !== Object.prototype && prototype !== null)
154
+ s.fail('non-plain object');
155
+ const members = [];
156
+ for (const key of Reflect.ownKeys(object)) {
157
+ if (typeof key === 'symbol')
158
+ s.fail('symbol-keyed property');
159
+ if (hasLoneSurrogate(key))
160
+ s.fail('object key with lone surrogate');
161
+ const descriptor = Object.getOwnPropertyDescriptor(object, key);
162
+ if (descriptor.enumerable)
163
+ members.push([`.${key}`, key, descriptor]);
98
164
  }
165
+ // RFC 8785 §3.2.3: sort member names by their UTF-16 code units, which is
166
+ // exactly how JavaScript compares strings.
167
+ return members.sort(([, a], [, b]) => (a < b ? -1 : a > b ? 1 : 0));
99
168
  }
100
169
  /** Canonicalize a strict JSON value according to RFC 8785. */
101
170
  export function canonicalizeJson(value) {
102
- assertCanonicalJsonValue(value);
103
- return canonicalize(value);
171
+ const s = new Serializer('$', new WeakSet());
172
+ serialize(value, s);
173
+ return s.out.join('');
104
174
  }
105
175
  /** Canonical UTF-8 bytes for hashing or signing. */
106
176
  export function canonicalizeJsonBytes(value) {
@@ -1 +1 @@
1
- {"version":3,"file":"canonical-json.js","sourceRoot":"","sources":["../../src/utils/canonical-json.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"canonical-json.js","sourceRoot":"","sources":["../../src/utils/canonical-json.ts"],"names":[],"mappings":"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"}
@@ -34,4 +34,3 @@ export declare class CryptoService {
34
34
  private isValidEd25519JWK;
35
35
  private jwkToBase64PublicKey;
36
36
  }
37
- //# sourceMappingURL=crypto-service.d.ts.map
@@ -104,8 +104,10 @@ export class CryptoService {
104
104
  return false;
105
105
  }
106
106
  let signingInputBytes;
107
+ // A payload segment the JWS embeds next to a different detached payload.
108
+ let embeddedSigningInput;
107
109
  if (options?.detachedPayload !== undefined) {
108
- const headerB64 = jws.split('.')[0];
110
+ const [headerB64, embeddedPayloadB64] = jws.split('.');
109
111
  let payloadB64;
110
112
  if (options.detachedPayload instanceof Uint8Array) {
111
113
  payloadB64 = base64urlEncodeFromBytes(options.detachedPayload);
@@ -114,6 +116,9 @@ export class CryptoService {
114
116
  payloadB64 = base64urlEncodeFromBytes(new TextEncoder().encode(options.detachedPayload));
115
117
  }
116
118
  signingInputBytes = new TextEncoder().encode(`${headerB64}.${payloadB64}`);
119
+ if (embeddedPayloadB64 !== '' && embeddedPayloadB64 !== payloadB64) {
120
+ embeddedSigningInput = `${headerB64}.${embeddedPayloadB64}`;
121
+ }
117
122
  }
118
123
  else {
119
124
  if (!parsed.signingInput) {
@@ -130,7 +135,22 @@ export class CryptoService {
130
135
  logger.error('[CryptoService] Failed to extract public key:', error);
131
136
  return false;
132
137
  }
133
- return await this.verifyEd25519(signingInputBytes, parsed.signatureBytes, publicKeyBase64);
138
+ if (!(await this.verifyEd25519(signingInputBytes, parsed.signatureBytes, publicKeyBase64))) {
139
+ return false;
140
+ }
141
+ // The signature was checked over the detached payload. A different
142
+ // payload the JWS also embeds must verify under the same signature, or
143
+ // anything reading the JWS alone (JWT tooling, an audit store) sees
144
+ // claims the verified signature never covered. One signature verifies
145
+ // two different payloads only under a forged or degenerate key, so in
146
+ // practice this accepts an embedded payload exactly when it is the
147
+ // detached one.
148
+ if (embeddedSigningInput !== undefined &&
149
+ !(await this.verifyEd25519(new TextEncoder().encode(embeddedSigningInput), parsed.signatureBytes, publicKeyBase64))) {
150
+ logger.error('[CryptoService] Embedded JWS payload is not the signed payload');
151
+ return false;
152
+ }
153
+ return true;
134
154
  }
135
155
  catch (error) {
136
156
  logger.error('[CryptoService] JWS verification error:', error);
@@ -1 +1 @@
1
- {"version":3,"file":"crypto-service.js","sourceRoot":"","sources":["../../src/utils/crypto-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"crypto-service.js","sourceRoot":"","sources":["../../src/utils/crypto-service.ts"],"names":[],"mappings":"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"}
@@ -165,4 +165,3 @@ export declare function generateDidKeyFromBase64(publicKeyBase64: string): strin
165
165
  * @returns The fragment identifier (multibase value), or 'keys-1' as fallback for non-did:key
166
166
  */
167
167
  export declare function didKeyFragment(did: string): string;
168
- //# sourceMappingURL=did-helpers.d.ts.map
@@ -15,4 +15,3 @@ export declare const ED25519_PKCS8_DER_HEADER: Uint8Array<ArrayBuffer>;
15
15
  export declare const ED25519_SPKI_DER_HEADER_LENGTH = 12;
16
16
  /** Ed25519 raw key size in bytes */
17
17
  export declare const ED25519_KEY_SIZE = 32;
18
- //# sourceMappingURL=ed25519-constants.d.ts.map
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Strict decoding of the base64 Ed25519 public keys the CryptoProviders verify
3
+ * against, and the small-order check every Ed25519 verification path applies.
4
+ *
5
+ * Node's base64 decoder skips characters it does not recognise and accepts any
6
+ * length, so `NodeCryptoProvider` used to verify against keys that
7
+ * `WebCryptoProvider` rejected (a 64-byte "key", a key with junk appended).
8
+ * Both providers now decode through here: exactly 32 bytes, nothing but ASCII
9
+ * whitespace besides the key, and never a small-order point.
10
+ */
11
+ /** True if `key` (32 bytes) encodes a point of small order, under either sign bit. */
12
+ export declare function isSmallOrderEd25519Key(key: Uint8Array): boolean;
13
+ /**
14
+ * Decode a base64 (or base64url) Ed25519 public key, or `null` unless it is
15
+ * exactly 32 bytes with nothing but ASCII whitespace besides it in the string,
16
+ * and is not a small-order point.
17
+ */
18
+ export declare function decodeEd25519PublicKey(publicKeyBase64: string): Uint8Array | null;
19
+ /**
20
+ * True if `key` is an Ed25519 public CryptoKey on a small-order point. Paths
21
+ * that import a JWK through `jose` or WebCrypto check the imported key, not
22
+ * the JWK string: neither refuses a small-order point, and Node's JWK import
23
+ * decodes `x` leniently (padding, junk, non-zero trailing bits), so a check on
24
+ * the string can be sidestepped. A key that is not an extractable Ed25519
25
+ * public key cannot be read back and is left to the verifier.
26
+ */
27
+ export declare function isSmallOrderEd25519CryptoKey(key: object): Promise<boolean>;
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Strict decoding of the base64 Ed25519 public keys the CryptoProviders verify
3
+ * against, and the small-order check every Ed25519 verification path applies.
4
+ *
5
+ * Node's base64 decoder skips characters it does not recognise and accepts any
6
+ * length, so `NodeCryptoProvider` used to verify against keys that
7
+ * `WebCryptoProvider` rejected (a 64-byte "key", a key with junk appended).
8
+ * Both providers now decode through here: exactly 32 bytes, nothing but ASCII
9
+ * whitespace besides the key, and never a small-order point.
10
+ */
11
+ import { base64ToBytes } from './base64.js';
12
+ import { ED25519_KEY_SIZE } from './ed25519-constants.js';
13
+ /** 32 bytes as base64 or base64url: 43 characters, optionally one `=` of padding. */
14
+ const ED25519_PUBLIC_KEY_BASE64 = /^[A-Za-z0-9+/_-]{43}=?$/;
15
+ /**
16
+ * ASCII whitespace, which both base64 decoders the providers used before
17
+ * (Node's Buffer, and `atob`) skip: a key read from a file keeps its newline.
18
+ */
19
+ const ASCII_WHITESPACE = /[\t\n\f\r ]/g;
20
+ /**
21
+ * Encodings of the points of order 1, 2, 4 and 8, as libsodium blocks them
22
+ * (`ge25519_has_small_order`), including the non-canonical `p` and `p + 1`
23
+ * forms. Under such a key, the signature R = identity, S = 0 satisfies the
24
+ * verification equation for every message, so anyone could sign as it.
25
+ * Compared with the sign bit (top bit of the last byte) masked off.
26
+ */
27
+ const SMALL_ORDER_ENCODINGS = [
28
+ // 0 (order 4)
29
+ new Uint8Array(32),
30
+ // 1 (order 1): the identity
31
+ Uint8Array.from([1, ...new Array(31).fill(0)]),
32
+ // order 8
33
+ Uint8Array.from([
34
+ 0x26, 0xe8, 0x95, 0x8f, 0xc2, 0xb2, 0x27, 0xb0, 0x45, 0xc3, 0xf4, 0x89, 0xf2, 0xef, 0x98, 0xf0,
35
+ 0xd5, 0xdf, 0xac, 0x05, 0xd3, 0xc6, 0x33, 0x39, 0xb1, 0x38, 0x02, 0x88, 0x6d, 0x53, 0xfc, 0x05,
36
+ ]),
37
+ // order 8
38
+ Uint8Array.from([
39
+ 0xc7, 0x17, 0x6a, 0x70, 0x3d, 0x4d, 0xd8, 0x4f, 0xba, 0x3c, 0x0b, 0x76, 0x0d, 0x10, 0x67, 0x0f,
40
+ 0x2a, 0x20, 0x53, 0xfa, 0x2c, 0x39, 0xcc, 0xc6, 0x4e, 0xc7, 0xfd, 0x77, 0x92, 0xac, 0x03, 0x7a,
41
+ ]),
42
+ // p - 1 (order 2)
43
+ Uint8Array.from([0xec, ...new Array(30).fill(0xff), 0x7f]),
44
+ // p, a non-canonical 0 (order 4)
45
+ Uint8Array.from([0xed, ...new Array(30).fill(0xff), 0x7f]),
46
+ // p + 1, a non-canonical 1 (order 1)
47
+ Uint8Array.from([0xee, ...new Array(30).fill(0xff), 0x7f]),
48
+ ];
49
+ /** True if `key` (32 bytes) encodes a point of small order, under either sign bit. */
50
+ export function isSmallOrderEd25519Key(key) {
51
+ return SMALL_ORDER_ENCODINGS.some((blocked) => blocked.every((byte, i) => (i === 31 ? (key[i] & 0x7f) === byte : key[i] === byte)));
52
+ }
53
+ /**
54
+ * Decode a base64 (or base64url) Ed25519 public key, or `null` unless it is
55
+ * exactly 32 bytes with nothing but ASCII whitespace besides it in the string,
56
+ * and is not a small-order point.
57
+ */
58
+ export function decodeEd25519PublicKey(publicKeyBase64) {
59
+ const compact = publicKeyBase64.replace(ASCII_WHITESPACE, '');
60
+ if (!ED25519_PUBLIC_KEY_BASE64.test(compact)) {
61
+ return null;
62
+ }
63
+ const key = base64ToBytes(compact);
64
+ if (key.length !== ED25519_KEY_SIZE || isSmallOrderEd25519Key(key)) {
65
+ return null;
66
+ }
67
+ return key;
68
+ }
69
+ /**
70
+ * True if `key` is an Ed25519 public CryptoKey on a small-order point. Paths
71
+ * that import a JWK through `jose` or WebCrypto check the imported key, not
72
+ * the JWK string: neither refuses a small-order point, and Node's JWK import
73
+ * decodes `x` leniently (padding, junk, non-zero trailing bits), so a check on
74
+ * the string can be sidestepped. A key that is not an extractable Ed25519
75
+ * public key cannot be read back and is left to the verifier.
76
+ */
77
+ export async function isSmallOrderEd25519CryptoKey(key) {
78
+ // Typed as `object` so callers holding an opaque key handle (or the
79
+ // Uint8Array secret jose returns for `oct` keys) need no casts.
80
+ const { type, algorithm, extractable } = key;
81
+ if (type !== 'public' || algorithm.name !== 'Ed25519' || extractable !== true) {
82
+ return false;
83
+ }
84
+ return isSmallOrderEd25519Key(new Uint8Array(await crypto.subtle.exportKey('raw', key)));
85
+ }
86
+ //# sourceMappingURL=ed25519-public-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ed25519-public-key.js","sourceRoot":"","sources":["../../src/utils/ed25519-public-key.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1 @@
1
1
  export declare function isRecord(value: unknown): value is Record<string, unknown>;
2
- //# sourceMappingURL=guards.d.ts.map
@@ -6,4 +6,3 @@ export { isRecord } from './guards.js';
6
6
  export { assertCanonicalJsonValue, canonicalizeJson, canonicalizeJsonBytes, } from './canonical-json.js';
7
7
  export { stripTrailingSlashes } from './url.js';
8
8
  export { createSafeFetch, fetchTransport, isBlockedAddress, type SafeFetch, type SafeFetchResponse, type SafeFetchOptions, type SafeFetchTransport, type TransportInit, type RawResponse, type DnsLookup, type DnsAddress, } from './safe-fetch.js';
9
- //# sourceMappingURL=index.d.ts.map
@@ -9,4 +9,3 @@
9
9
  */
10
10
  /** True if an address must NOT be connected to (classified by shape, not by trusting `family`). */
11
11
  export declare function isBlockedAddress(address: string): boolean;
12
- //# sourceMappingURL=ip-classifier.d.ts.map
@@ -50,4 +50,3 @@ export declare const nodeHttpsTransport: SafeFetchTransport;
50
50
  * Node serverless runtime) must still pass `transport: fetchTransport` explicitly.
51
51
  */
52
52
  export declare function selectDefaultTransport(): SafeFetchTransport;
53
- //# sourceMappingURL=safe-fetch-transports.d.ts.map
@@ -63,4 +63,3 @@ export interface SafeFetchOptions {
63
63
  /** Maximum same-origin redirects to follow (default 3). */
64
64
  maxRedirects?: number;
65
65
  }
66
- //# sourceMappingURL=safe-fetch-types.d.ts.map
@@ -37,4 +37,3 @@ export { defaultLookup, fetchTransport, nodeHttpsTransport, selectDefaultTranspo
37
37
  * card's `FetchLike`: `(url) => Promise<{ ok, status, json }>`.
38
38
  */
39
39
  export declare function createSafeFetch(options?: SafeFetchOptions): SafeFetch;
40
- //# sourceMappingURL=safe-fetch.d.ts.map
@@ -48,4 +48,3 @@ export declare function readStatusBit(bits: Uint8Array, index: number): boolean;
48
48
  * therefore fail-closed-unusable — revocation source for every holder.
49
49
  */
50
50
  export declare function assertAnchorableStatusListCredential(content: unknown): void;
51
- //# sourceMappingURL=statuslist-bits.d.ts.map
@@ -9,4 +9,3 @@
9
9
  * its clear bit would otherwise report "not revoked" from the wrong list, a fail-open bypass.
10
10
  */
11
11
  export declare function assertStatusPurpose(listPurpose: unknown, wanted: string): void;
12
- //# sourceMappingURL=statuslist-purpose.d.ts.map
@@ -23,4 +23,3 @@ export declare class TtlCache<T> {
23
23
  deleteWhere(predicate: (key: string) => boolean): void;
24
24
  clear(): void;
25
25
  }
26
- //# sourceMappingURL=ttl-cache.d.ts.map
@@ -1,2 +1 @@
1
1
  export declare function stripTrailingSlashes(value: string): string;
2
- //# sourceMappingURL=url.d.ts.map
package/package.json CHANGED
@@ -1,10 +1,12 @@
1
1
  {
2
2
  "name": "@kya-os/mcp",
3
- "version": "1.16.1",
3
+ "version": "1.17.0",
4
4
  "description": "Reference implementation of the KYA-OS protocol for Model Context Protocol servers: identity, delegation, proofs, sessions, and verifiable audit trails",
5
5
  "license": "MIT",
6
6
  "type": "module",
7
- "sideEffects": false,
7
+ "sideEffects": [
8
+ "./dist/**/index.js"
9
+ ],
8
10
  "main": "dist/index.js",
9
11
  "types": "dist/index.d.ts",
10
12
  "bin": {
@@ -116,7 +118,7 @@
116
118
  },
117
119
  "dependencies": {
118
120
  "jose": "^6.2.8",
119
- "json-canonicalize": "2.0.0",
121
+ "json-canonicalize": "3.0.1",
120
122
  "zod": "^4.4.3"
121
123
  },
122
124
  "peerDependencies": {
@@ -135,15 +137,16 @@
135
137
  "@types/node": "^26.2.0",
136
138
  "@typescript-eslint/eslint-plugin": "^8.67.0",
137
139
  "@typescript-eslint/parser": "^8.67.0",
138
- "@vitest/coverage-v8": "^4.1.10",
140
+ "@vitest/coverage-v8": "^5.0.3",
139
141
  "ajv": "^8.20.0",
140
142
  "commander": "^15.0.0",
143
+ "esbuild": "^0.28.1",
141
144
  "eslint": "^10.8.1",
142
145
  "express": "^5.2.1",
143
146
  "tsx": "^4.23.12",
144
- "typescript": "^5.9.3",
147
+ "typescript": "^6.0.3",
145
148
  "typescript-eslint": "^8.67.0",
146
- "vitest": "^4.1.10"
149
+ "vitest": "^5.0.3"
147
150
  },
148
151
  "keywords": [
149
152
  "kya-os",
@@ -25,7 +25,10 @@
25
25
  "type": {
26
26
  "type": "array",
27
27
  "items": { "type": "string" },
28
- "contains": { "const": "VerifiableCredential" },
28
+ "allOf": [
29
+ { "contains": { "const": "VerifiableCredential" } },
30
+ { "contains": { "const": "DelegationCredential" } }
31
+ ],
29
32
  "minItems": 2,
30
33
  "description": "Credential types. MUST include 'VerifiableCredential' and 'DelegationCredential'."
31
34
  },