@blamejs/blamejs-shop 0.5.12 → 0.5.13

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 (521) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/lib/asset-manifest.json +1 -1
  3. package/lib/vendor/MANIFEST.json +632 -416
  4. package/lib/vendor/blamejs/.clusterfuzzlite/Dockerfile +21 -10
  5. package/lib/vendor/blamejs/.clusterfuzzlite/build.sh +30 -9
  6. package/lib/vendor/blamejs/.github/dependabot.yml +8 -0
  7. package/lib/vendor/blamejs/.github/workflows/actions-lint.yml +3 -3
  8. package/lib/vendor/blamejs/.github/workflows/cflite_batch.yml +7 -2
  9. package/lib/vendor/blamejs/.github/workflows/cflite_pr.yml +7 -2
  10. package/lib/vendor/blamejs/.github/workflows/ci.yml +21 -21
  11. package/lib/vendor/blamejs/.github/workflows/codeql.yml +3 -3
  12. package/lib/vendor/blamejs/.github/workflows/npm-publish.yml +4 -4
  13. package/lib/vendor/blamejs/.github/workflows/release-container.yml +7 -7
  14. package/lib/vendor/blamejs/.github/workflows/scorecard.yml +3 -3
  15. package/lib/vendor/blamejs/.github/workflows/sha-to-tag-verify.yml +1 -1
  16. package/lib/vendor/blamejs/.gitignore +2 -0
  17. package/lib/vendor/blamejs/CHANGELOG.md +122 -0
  18. package/lib/vendor/blamejs/NOTICE +26 -1
  19. package/lib/vendor/blamejs/SECURITY.md +1 -1
  20. package/lib/vendor/blamejs/api-snapshot.json +207 -5
  21. package/lib/vendor/blamejs/docker/keycloak/realm-blamejs-test.json +29 -0
  22. package/lib/vendor/blamejs/examples/wiki/DEPLOY.md +1 -0
  23. package/lib/vendor/blamejs/examples/wiki/lib/build-app.js +31 -0
  24. package/lib/vendor/blamejs/examples/wiki/lib/source-comment-block-validator.js +109 -0
  25. package/lib/vendor/blamejs/examples/wiki/nginx.conf +106 -0
  26. package/lib/vendor/blamejs/examples/wiki/package-lock.json +1 -1
  27. package/lib/vendor/blamejs/examples/wiki/test/e2e.js +92 -0
  28. package/lib/vendor/blamejs/fuzz/asn1-der.fuzz.js +28 -0
  29. package/lib/vendor/blamejs/fuzz/cms-codec.fuzz.js +17 -0
  30. package/lib/vendor/blamejs/fuzz/link-header.fuzz.js +18 -0
  31. package/lib/vendor/blamejs/index.js +6 -0
  32. package/lib/vendor/blamejs/lib/a2a.js +4 -4
  33. package/lib/vendor/blamejs/lib/agent-idempotency.js +18 -2
  34. package/lib/vendor/blamejs/lib/agent-saga.js +36 -8
  35. package/lib/vendor/blamejs/lib/agent-snapshot.js +63 -6
  36. package/lib/vendor/blamejs/lib/app-shutdown.js +23 -20
  37. package/lib/vendor/blamejs/lib/archive-read.js +8 -0
  38. package/lib/vendor/blamejs/lib/archive-tar.js +12 -2
  39. package/lib/vendor/blamejs/lib/arg-parser.js +49 -5
  40. package/lib/vendor/blamejs/lib/asn1-der.js +12 -0
  41. package/lib/vendor/blamejs/lib/audit-sign.js +47 -1
  42. package/lib/vendor/blamejs/lib/audit.js +71 -8
  43. package/lib/vendor/blamejs/lib/auth/ciba.js +14 -2
  44. package/lib/vendor/blamejs/lib/auth/fido-mds3.js +58 -47
  45. package/lib/vendor/blamejs/lib/auth/jwt.js +34 -0
  46. package/lib/vendor/blamejs/lib/auth/oauth.js +90 -13
  47. package/lib/vendor/blamejs/lib/auth/oid4vci.js +20 -17
  48. package/lib/vendor/blamejs/lib/auth/openid-federation.js +214 -23
  49. package/lib/vendor/blamejs/lib/auth/saml.js +38 -20
  50. package/lib/vendor/blamejs/lib/auth/sd-jwt-vc.js +10 -4
  51. package/lib/vendor/blamejs/lib/backup/bundle.js +13 -3
  52. package/lib/vendor/blamejs/lib/backup/index.js +16 -5
  53. package/lib/vendor/blamejs/lib/backup/manifest.js +18 -5
  54. package/lib/vendor/blamejs/lib/base32.js +21 -0
  55. package/lib/vendor/blamejs/lib/break-glass.js +19 -10
  56. package/lib/vendor/blamejs/lib/bundler.js +5 -1
  57. package/lib/vendor/blamejs/lib/cache-status.js +3 -7
  58. package/lib/vendor/blamejs/lib/calendar.js +21 -1
  59. package/lib/vendor/blamejs/lib/cbor.js +12 -1
  60. package/lib/vendor/blamejs/lib/cert.js +29 -11
  61. package/lib/vendor/blamejs/lib/cli.js +94 -24
  62. package/lib/vendor/blamejs/lib/cloud-events.js +2 -2
  63. package/lib/vendor/blamejs/lib/cluster-provider-db.js +13 -3
  64. package/lib/vendor/blamejs/lib/codepoint-class.js +85 -0
  65. package/lib/vendor/blamejs/lib/compliance-ai-act-prohibited.js +8 -4
  66. package/lib/vendor/blamejs/lib/compliance-ai-act-transparency.js +19 -4
  67. package/lib/vendor/blamejs/lib/compliance-ai-act.js +6 -8
  68. package/lib/vendor/blamejs/lib/content-credentials.js +1 -1
  69. package/lib/vendor/blamejs/lib/content-digest.js +2 -1
  70. package/lib/vendor/blamejs/lib/cookies.js +13 -3
  71. package/lib/vendor/blamejs/lib/cose.js +31 -16
  72. package/lib/vendor/blamejs/lib/crypto-field.js +32 -0
  73. package/lib/vendor/blamejs/lib/crypto-oprf.js +11 -2
  74. package/lib/vendor/blamejs/lib/crypto-xwing.js +22 -4
  75. package/lib/vendor/blamejs/lib/crypto.js +314 -19
  76. package/lib/vendor/blamejs/lib/csp.js +11 -3
  77. package/lib/vendor/blamejs/lib/daemon.js +270 -24
  78. package/lib/vendor/blamejs/lib/dark-patterns.js +5 -2
  79. package/lib/vendor/blamejs/lib/db-declare-view.js +2 -2
  80. package/lib/vendor/blamejs/lib/db-query.js +34 -7
  81. package/lib/vendor/blamejs/lib/db.js +18 -6
  82. package/lib/vendor/blamejs/lib/dbsc.js +17 -0
  83. package/lib/vendor/blamejs/lib/dev.js +21 -2
  84. package/lib/vendor/blamejs/lib/dsr.js +157 -102
  85. package/lib/vendor/blamejs/lib/external-db.js +41 -2
  86. package/lib/vendor/blamejs/lib/file-upload.js +25 -7
  87. package/lib/vendor/blamejs/lib/flag-providers.js +27 -15
  88. package/lib/vendor/blamejs/lib/forms.js +113 -27
  89. package/lib/vendor/blamejs/lib/gate-contract.js +23 -10
  90. package/lib/vendor/blamejs/lib/gdpr-ropa.js +8 -1
  91. package/lib/vendor/blamejs/lib/guard-agent-registry.js +1 -1
  92. package/lib/vendor/blamejs/lib/guard-archive.js +2 -2
  93. package/lib/vendor/blamejs/lib/guard-cidr.js +27 -1
  94. package/lib/vendor/blamejs/lib/guard-graphql.js +30 -11
  95. package/lib/vendor/blamejs/lib/guard-html.js +26 -53
  96. package/lib/vendor/blamejs/lib/guard-image.js +24 -5
  97. package/lib/vendor/blamejs/lib/guard-imap-command.js +10 -2
  98. package/lib/vendor/blamejs/lib/guard-jmap.js +19 -3
  99. package/lib/vendor/blamejs/lib/guard-jwt.js +18 -2
  100. package/lib/vendor/blamejs/lib/guard-list-unsubscribe.js +2 -2
  101. package/lib/vendor/blamejs/lib/guard-managesieve-command.js +10 -2
  102. package/lib/vendor/blamejs/lib/guard-markdown.js +11 -24
  103. package/lib/vendor/blamejs/lib/guard-pdf.js +18 -2
  104. package/lib/vendor/blamejs/lib/guard-pop3-command.js +10 -2
  105. package/lib/vendor/blamejs/lib/guard-regex.js +8 -5
  106. package/lib/vendor/blamejs/lib/guard-svg.js +31 -32
  107. package/lib/vendor/blamejs/lib/guard-time.js +1 -1
  108. package/lib/vendor/blamejs/lib/guard-uuid.js +2 -2
  109. package/lib/vendor/blamejs/lib/html-balance.js +3 -3
  110. package/lib/vendor/blamejs/lib/http-client-cache.js +82 -4
  111. package/lib/vendor/blamejs/lib/http-client-cookie-jar.js +16 -1
  112. package/lib/vendor/blamejs/lib/http-client.js +39 -7
  113. package/lib/vendor/blamejs/lib/http-message-signature.js +35 -1
  114. package/lib/vendor/blamejs/lib/i18n-messageformat.js +31 -6
  115. package/lib/vendor/blamejs/lib/i18n.js +35 -21
  116. package/lib/vendor/blamejs/lib/incident-report.js +8 -1
  117. package/lib/vendor/blamejs/lib/ip-utils.js +11 -1
  118. package/lib/vendor/blamejs/lib/json-path.js +23 -1
  119. package/lib/vendor/blamejs/lib/jwk.js +20 -3
  120. package/lib/vendor/blamejs/lib/link-header.js +2 -1
  121. package/lib/vendor/blamejs/lib/log-stream-otlp-grpc.js +5 -1
  122. package/lib/vendor/blamejs/lib/log-stream-otlp.js +5 -1
  123. package/lib/vendor/blamejs/lib/log-stream.js +8 -3
  124. package/lib/vendor/blamejs/lib/mail-auth.js +123 -22
  125. package/lib/vendor/blamejs/lib/mail-bimi.js +1 -1
  126. package/lib/vendor/blamejs/lib/mail-bounce.js +8 -0
  127. package/lib/vendor/blamejs/lib/mail-crypto-pgp.js +46 -10
  128. package/lib/vendor/blamejs/lib/mail-dav.js +22 -3
  129. package/lib/vendor/blamejs/lib/mail-dkim.js +96 -30
  130. package/lib/vendor/blamejs/lib/mail-helo.js +6 -1
  131. package/lib/vendor/blamejs/lib/mail-scan.js +23 -16
  132. package/lib/vendor/blamejs/lib/mail-send-deliver.js +34 -8
  133. package/lib/vendor/blamejs/lib/mail-server-imap.js +3 -4
  134. package/lib/vendor/blamejs/lib/mail-server-managesieve.js +7 -11
  135. package/lib/vendor/blamejs/lib/mail-server-mx.js +93 -7
  136. package/lib/vendor/blamejs/lib/mail-server-registry.js +8 -2
  137. package/lib/vendor/blamejs/lib/mail.js +15 -5
  138. package/lib/vendor/blamejs/lib/metrics.js +268 -63
  139. package/lib/vendor/blamejs/lib/middleware/age-gate.js +7 -1
  140. package/lib/vendor/blamejs/lib/middleware/asyncapi-serve.js +1 -1
  141. package/lib/vendor/blamejs/lib/middleware/body-parser.js +19 -4
  142. package/lib/vendor/blamejs/lib/middleware/bot-guard.js +5 -9
  143. package/lib/vendor/blamejs/lib/middleware/csp-report.js +40 -8
  144. package/lib/vendor/blamejs/lib/middleware/csrf-protect.js +24 -10
  145. package/lib/vendor/blamejs/lib/middleware/dpop.js +10 -5
  146. package/lib/vendor/blamejs/lib/middleware/index.js +6 -1
  147. package/lib/vendor/blamejs/lib/middleware/nel.js +1 -1
  148. package/lib/vendor/blamejs/lib/middleware/openapi-serve.js +1 -1
  149. package/lib/vendor/blamejs/lib/middleware/rate-limit.js +12 -1
  150. package/lib/vendor/blamejs/lib/middleware/require-bound-key.js +1 -1
  151. package/lib/vendor/blamejs/lib/middleware/scim-server.js +1 -1
  152. package/lib/vendor/blamejs/lib/middleware/tus-upload.js +6 -2
  153. package/lib/vendor/blamejs/lib/mtls-ca.js +18 -2
  154. package/lib/vendor/blamejs/lib/network-dns-resolver.js +11 -1
  155. package/lib/vendor/blamejs/lib/network-dns.js +21 -2
  156. package/lib/vendor/blamejs/lib/network-tls.js +69 -7
  157. package/lib/vendor/blamejs/lib/nonce-store.js +9 -1
  158. package/lib/vendor/blamejs/lib/object-store/gcs.js +7 -0
  159. package/lib/vendor/blamejs/lib/object-store/sigv4.js +31 -0
  160. package/lib/vendor/blamejs/lib/observability-otlp-exporter.js +1 -1
  161. package/lib/vendor/blamejs/lib/outbox.js +1 -1
  162. package/lib/vendor/blamejs/lib/parsers/safe-ini.js +9 -1
  163. package/lib/vendor/blamejs/lib/parsers/safe-toml.js +10 -1
  164. package/lib/vendor/blamejs/lib/permissions.js +6 -3
  165. package/lib/vendor/blamejs/lib/pid-probe.js +55 -0
  166. package/lib/vendor/blamejs/lib/pqc-agent.js +8 -1
  167. package/lib/vendor/blamejs/lib/pqc-software.js +3 -3
  168. package/lib/vendor/blamejs/lib/pubsub.js +20 -9
  169. package/lib/vendor/blamejs/lib/queue-local.js +8 -1
  170. package/lib/vendor/blamejs/lib/queue-redis.js +5 -0
  171. package/lib/vendor/blamejs/lib/redact.js +54 -0
  172. package/lib/vendor/blamejs/lib/restore-bundle.js +10 -2
  173. package/lib/vendor/blamejs/lib/restore.js +19 -0
  174. package/lib/vendor/blamejs/lib/retention.js +12 -4
  175. package/lib/vendor/blamejs/lib/router.js +60 -6
  176. package/lib/vendor/blamejs/lib/safe-buffer.js +69 -0
  177. package/lib/vendor/blamejs/lib/safe-decompress.js +8 -2
  178. package/lib/vendor/blamejs/lib/safe-dns.js +25 -20
  179. package/lib/vendor/blamejs/lib/safe-ical.js +7 -3
  180. package/lib/vendor/blamejs/lib/safe-mime.js +12 -1
  181. package/lib/vendor/blamejs/lib/safe-object.js +80 -0
  182. package/lib/vendor/blamejs/lib/safe-path.js +52 -4
  183. package/lib/vendor/blamejs/lib/safe-redirect.js +10 -2
  184. package/lib/vendor/blamejs/lib/safe-schema.js +4 -1
  185. package/lib/vendor/blamejs/lib/safe-sieve.js +33 -1
  186. package/lib/vendor/blamejs/lib/safe-sql.js +88 -0
  187. package/lib/vendor/blamejs/lib/safe-vcard.js +7 -3
  188. package/lib/vendor/blamejs/lib/scheduler.js +8 -1
  189. package/lib/vendor/blamejs/lib/security-assert.js +6 -6
  190. package/lib/vendor/blamejs/lib/self-update-standalone-verifier.js +74 -27
  191. package/lib/vendor/blamejs/lib/self-update.js +517 -87
  192. package/lib/vendor/blamejs/lib/server-timing.js +2 -4
  193. package/lib/vendor/blamejs/lib/session.js +34 -12
  194. package/lib/vendor/blamejs/lib/sql.js +15 -1
  195. package/lib/vendor/blamejs/lib/ssrf-guard.js +52 -0
  196. package/lib/vendor/blamejs/lib/static.js +55 -13
  197. package/lib/vendor/blamejs/lib/storage.js +8 -2
  198. package/lib/vendor/blamejs/lib/subject.js +6 -1
  199. package/lib/vendor/blamejs/lib/tenant-quota.js +52 -13
  200. package/lib/vendor/blamejs/lib/tls-exporter.js +3 -3
  201. package/lib/vendor/blamejs/lib/tsa.js +34 -13
  202. package/lib/vendor/blamejs/lib/uri-template.js +8 -1
  203. package/lib/vendor/blamejs/lib/vault/index.js +13 -0
  204. package/lib/vendor/blamejs/lib/vc.js +44 -5
  205. package/lib/vendor/blamejs/lib/vendor/MANIFEST.json +26 -26
  206. package/lib/vendor/blamejs/lib/vendor/noble-ciphers.cjs +792 -1
  207. package/lib/vendor/blamejs/lib/vendor/noble-curves.cjs +3443 -1
  208. package/lib/vendor/blamejs/lib/vendor/noble-post-quantum.cjs +2737 -1
  209. package/lib/vendor/blamejs/lib/vendor/pki.cjs +39550 -13
  210. package/lib/vendor/blamejs/lib/vendor/public-suffix-list.dat +55 -53
  211. package/lib/vendor/blamejs/lib/vendor/public-suffix-list.data.js +5551 -5554
  212. package/lib/vendor/blamejs/lib/vendor/simplewebauthn-server.cjs +22459 -32
  213. package/lib/vendor/blamejs/lib/watcher.js +89 -17
  214. package/lib/vendor/blamejs/lib/webhook-dispatcher.js +25 -3
  215. package/lib/vendor/blamejs/lib/webhook.js +12 -2
  216. package/lib/vendor/blamejs/lib/ws-client.js +32 -1
  217. package/lib/vendor/blamejs/lib/xml-c14n.js +29 -1
  218. package/lib/vendor/blamejs/oss-fuzz/projects/blamejs/Dockerfile +1 -1
  219. package/lib/vendor/blamejs/package-lock.json +2 -2
  220. package/lib/vendor/blamejs/package.json +1 -1
  221. package/lib/vendor/blamejs/release-notes/v0.16.x.json +1462 -0
  222. package/lib/vendor/blamejs/release-notes/v0.17.0.json +31 -0
  223. package/lib/vendor/blamejs/release-notes/v0.17.1.json +31 -0
  224. package/lib/vendor/blamejs/release-notes/v0.17.10.json +30 -0
  225. package/lib/vendor/blamejs/release-notes/v0.17.11.json +22 -0
  226. package/lib/vendor/blamejs/release-notes/v0.17.12.json +18 -0
  227. package/lib/vendor/blamejs/release-notes/v0.17.13.json +77 -0
  228. package/lib/vendor/blamejs/release-notes/v0.17.14.json +40 -0
  229. package/lib/vendor/blamejs/release-notes/v0.17.15.json +18 -0
  230. package/lib/vendor/blamejs/release-notes/v0.17.16.json +27 -0
  231. package/lib/vendor/blamejs/release-notes/v0.17.17.json +31 -0
  232. package/lib/vendor/blamejs/release-notes/v0.17.18.json +18 -0
  233. package/lib/vendor/blamejs/release-notes/v0.17.19.json +18 -0
  234. package/lib/vendor/blamejs/release-notes/v0.17.2.json +26 -0
  235. package/lib/vendor/blamejs/release-notes/v0.17.20.json +43 -0
  236. package/lib/vendor/blamejs/release-notes/v0.17.21.json +26 -0
  237. package/lib/vendor/blamejs/release-notes/v0.17.22.json +18 -0
  238. package/lib/vendor/blamejs/release-notes/v0.17.3.json +43 -0
  239. package/lib/vendor/blamejs/release-notes/v0.17.4.json +35 -0
  240. package/lib/vendor/blamejs/release-notes/v0.17.5.json +26 -0
  241. package/lib/vendor/blamejs/release-notes/v0.17.6.json +26 -0
  242. package/lib/vendor/blamejs/release-notes/v0.17.7.json +35 -0
  243. package/lib/vendor/blamejs/release-notes/v0.17.8.json +22 -0
  244. package/lib/vendor/blamejs/release-notes/v0.17.9.json +26 -0
  245. package/lib/vendor/blamejs/scripts/validate-source-comment-blocks.js +4 -0
  246. package/lib/vendor/blamejs/scripts/vendor-update.sh +293 -9
  247. package/lib/vendor/blamejs/socket.yml +94 -0
  248. package/lib/vendor/blamejs/test/00-primitives.js +605 -0
  249. package/lib/vendor/blamejs/test/helpers/drivers.js +12 -9
  250. package/lib/vendor/blamejs/test/integration/audit-stack-mysql.test.js +90 -1
  251. package/lib/vendor/blamejs/test/integration/audit-stack-postgres.test.js +122 -1
  252. package/lib/vendor/blamejs/test/integration/data-layer-mysql.test.js +30 -0
  253. package/lib/vendor/blamejs/test/integration/data-layer-pg.test.js +29 -0
  254. package/lib/vendor/blamejs/test/integration/dsr-cluster-mysql.test.js +479 -0
  255. package/lib/vendor/blamejs/test/integration/dsr-cluster-pg.test.js +487 -0
  256. package/lib/vendor/blamejs/test/integration/federation-auth.test.js +313 -5
  257. package/lib/vendor/blamejs/test/integration/mail-dkim.test.js +80 -0
  258. package/lib/vendor/blamejs/test/integration/openid-federation-chain.test.js +275 -0
  259. package/lib/vendor/blamejs/test/integration/webhook-dispatcher-pg.test.js +96 -0
  260. package/lib/vendor/blamejs/test/layer-0-primitives/a2a-tasks.test.js +401 -0
  261. package/lib/vendor/blamejs/test/layer-0-primitives/acme.test.js +1649 -2
  262. package/lib/vendor/blamejs/test/layer-0-primitives/age-gate.test.js +33 -0
  263. package/lib/vendor/blamejs/test/layer-0-primitives/agent-idempotency.test.js +0 -0
  264. package/lib/vendor/blamejs/test/layer-0-primitives/agent-saga.test.js +60 -0
  265. package/lib/vendor/blamejs/test/layer-0-primitives/agent-snapshot.test.js +524 -0
  266. package/lib/vendor/blamejs/test/layer-0-primitives/api-encrypt.test.js +891 -0
  267. package/lib/vendor/blamejs/test/layer-0-primitives/app-shutdown.test.js +128 -1
  268. package/lib/vendor/blamejs/test/layer-0-primitives/archive-adapters.test.js +271 -0
  269. package/lib/vendor/blamejs/test/layer-0-primitives/archive-read.test.js +628 -1
  270. package/lib/vendor/blamejs/test/layer-0-primitives/archive-tar-read.test.js +0 -0
  271. package/lib/vendor/blamejs/test/layer-0-primitives/archive-wrap.test.js +227 -0
  272. package/lib/vendor/blamejs/test/layer-0-primitives/arg-parser.test.js +15 -0
  273. package/lib/vendor/blamejs/test/layer-0-primitives/asn1-der.test.js +73 -0
  274. package/lib/vendor/blamejs/test/layer-0-primitives/atomic-file.test.js +114 -0
  275. package/lib/vendor/blamejs/test/layer-0-primitives/audit-sign-anchor.test.js +141 -0
  276. package/lib/vendor/blamejs/test/layer-0-primitives/audit-tools.test.js +624 -0
  277. package/lib/vendor/blamejs/test/layer-0-primitives/audit.test.js +769 -0
  278. package/lib/vendor/blamejs/test/layer-0-primitives/auth-jwt-defenses.test.js +436 -0
  279. package/lib/vendor/blamejs/test/layer-0-primitives/auth-oauth.test.js +1697 -0
  280. package/lib/vendor/blamejs/test/layer-0-primitives/auth-oid4vp.test.js +495 -0
  281. package/lib/vendor/blamejs/test/layer-0-primitives/auth-password.test.js +500 -0
  282. package/lib/vendor/blamejs/test/layer-0-primitives/auth-saml.test.js +1809 -0
  283. package/lib/vendor/blamejs/test/layer-0-primitives/auth-status-list.test.js +243 -1
  284. package/lib/vendor/blamejs/test/layer-0-primitives/backup-index.test.js +2226 -0
  285. package/lib/vendor/blamejs/test/layer-0-primitives/backup-manifest-signature.test.js +183 -0
  286. package/lib/vendor/blamejs/test/layer-0-primitives/base32.test.js +105 -0
  287. package/lib/vendor/blamejs/test/layer-0-primitives/break-glass.test.js +693 -0
  288. package/lib/vendor/blamejs/test/layer-0-primitives/cache.test.js +603 -0
  289. package/lib/vendor/blamejs/test/layer-0-primitives/calendar.test.js +557 -0
  290. package/lib/vendor/blamejs/test/layer-0-primitives/case-insensitive-security-token-guard.test.js +214 -0
  291. package/lib/vendor/blamejs/test/layer-0-primitives/cbor.test.js +25 -0
  292. package/lib/vendor/blamejs/test/layer-0-primitives/cert.test.js +843 -6
  293. package/lib/vendor/blamejs/test/layer-0-primitives/ciba-authreqid-binding.test.js +77 -2
  294. package/lib/vendor/blamejs/test/layer-0-primitives/ciba.test.js +866 -0
  295. package/lib/vendor/blamejs/test/layer-0-primitives/clear-site-data.test.js +18 -0
  296. package/lib/vendor/blamejs/test/layer-0-primitives/cli-erase.test.js +19 -0
  297. package/lib/vendor/blamejs/test/layer-0-primitives/cli.test.js +2790 -0
  298. package/lib/vendor/blamejs/test/layer-0-primitives/cluster-lease-renewal-ttl.test.js +114 -0
  299. package/lib/vendor/blamejs/test/layer-0-primitives/cluster.test.js +1032 -0
  300. package/lib/vendor/blamejs/test/layer-0-primitives/cms-codec.test.js +575 -0
  301. package/lib/vendor/blamejs/test/layer-0-primitives/codebase-patterns.test.js +739 -1
  302. package/lib/vendor/blamejs/test/layer-0-primitives/codepoint-class.test.js +8 -0
  303. package/lib/vendor/blamejs/test/layer-0-primitives/compliance-ai-act.test.js +194 -0
  304. package/lib/vendor/blamejs/test/layer-0-primitives/compliance-lifecycle-proto-key.test.js +104 -0
  305. package/lib/vendor/blamejs/test/layer-0-primitives/compliance-sanctions.test.js +254 -0
  306. package/lib/vendor/blamejs/test/layer-0-primitives/content-credentials.test.js +613 -3
  307. package/lib/vendor/blamejs/test/layer-0-primitives/cookies.test.js +140 -0
  308. package/lib/vendor/blamejs/test/layer-0-primitives/cose.test.js +407 -0
  309. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-adversarial.test.js +352 -0
  310. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-field-derived-hash.test.js +32 -0
  311. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-field.test.js +575 -0
  312. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-hash-files-parallel.test.js +10 -0
  313. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-hash-stream.test.js +24 -0
  314. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-oprf.test.js +17 -0
  315. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-spki-pin.test.js +183 -0
  316. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-xwing.test.js +48 -0
  317. package/lib/vendor/blamejs/test/layer-0-primitives/crypto.test.js +345 -0
  318. package/lib/vendor/blamejs/test/layer-0-primitives/csp-report.test.js +58 -0
  319. package/lib/vendor/blamejs/test/layer-0-primitives/csv.test.js +48 -0
  320. package/lib/vendor/blamejs/test/layer-0-primitives/daemon.test.js +459 -1
  321. package/lib/vendor/blamejs/test/layer-0-primitives/dark-patterns.test.js +19 -0
  322. package/lib/vendor/blamejs/test/layer-0-primitives/db-query.test.js +1019 -0
  323. package/lib/vendor/blamejs/test/layer-0-primitives/db-raw-residency-gate.test.js +77 -0
  324. package/lib/vendor/blamejs/test/layer-0-primitives/db.test.js +1621 -0
  325. package/lib/vendor/blamejs/test/layer-0-primitives/ddl-change-control.test.js +462 -3
  326. package/lib/vendor/blamejs/test/layer-0-primitives/dnssec.test.js +323 -0
  327. package/lib/vendor/blamejs/test/layer-0-primitives/dpop-middleware-verify.test.js +562 -0
  328. package/lib/vendor/blamejs/test/layer-0-primitives/dsr.test.js +901 -1
  329. package/lib/vendor/blamejs/test/layer-0-primitives/dual-control.test.js +249 -0
  330. package/lib/vendor/blamejs/test/layer-0-primitives/external-db-migrate.test.js +561 -0
  331. package/lib/vendor/blamejs/test/layer-0-primitives/external-db.test.js +1214 -0
  332. package/lib/vendor/blamejs/test/layer-0-primitives/fal.test.js +21 -0
  333. package/lib/vendor/blamejs/test/layer-0-primitives/fedcm-dbsc.test.js +46 -20
  334. package/lib/vendor/blamejs/test/layer-0-primitives/federation-vc-suite.test.js +147 -3
  335. package/lib/vendor/blamejs/test/layer-0-primitives/fido-mds3.test.js +907 -38
  336. package/lib/vendor/blamejs/test/layer-0-primitives/file-upload-content-safety-skip-audit.test.js +29 -0
  337. package/lib/vendor/blamejs/test/layer-0-primitives/file-upload.test.js +1135 -0
  338. package/lib/vendor/blamejs/test/layer-0-primitives/flag.test.js +30 -0
  339. package/lib/vendor/blamejs/test/layer-0-primitives/forms.test.js +747 -0
  340. package/lib/vendor/blamejs/test/layer-0-primitives/gate-contract.test.js +1855 -0
  341. package/lib/vendor/blamejs/test/layer-0-primitives/gdpr-ropa.test.js +30 -0
  342. package/lib/vendor/blamejs/test/layer-0-primitives/guard-archive.test.js +86 -0
  343. package/lib/vendor/blamejs/test/layer-0-primitives/guard-auth.test.js +117 -0
  344. package/lib/vendor/blamejs/test/layer-0-primitives/guard-cidr.test.js +151 -0
  345. package/lib/vendor/blamejs/test/layer-0-primitives/guard-domain.test.js +422 -0
  346. package/lib/vendor/blamejs/test/layer-0-primitives/guard-filename.test.js +424 -0
  347. package/lib/vendor/blamejs/test/layer-0-primitives/{guard-gate-disposition-coverage.test.js → guard-gate-disposition.test.js} +1 -1
  348. package/lib/vendor/blamejs/test/layer-0-primitives/guard-graphql.test.js +340 -0
  349. package/lib/vendor/blamejs/test/layer-0-primitives/guard-html.test.js +29 -0
  350. package/lib/vendor/blamejs/test/layer-0-primitives/guard-idempotency-key.test.js +28 -0
  351. package/lib/vendor/blamejs/test/layer-0-primitives/guard-image.test.js +519 -45
  352. package/lib/vendor/blamejs/test/layer-0-primitives/guard-imap-command.test.js +0 -0
  353. package/lib/vendor/blamejs/test/layer-0-primitives/guard-jmap.test.js +51 -0
  354. package/lib/vendor/blamejs/test/layer-0-primitives/guard-jsonpath.test.js +66 -0
  355. package/lib/vendor/blamejs/test/layer-0-primitives/guard-jwt.test.js +436 -0
  356. package/lib/vendor/blamejs/test/layer-0-primitives/guard-managesieve-command.test.js +25 -0
  357. package/lib/vendor/blamejs/test/layer-0-primitives/guard-markdown.test.js +16 -0
  358. package/lib/vendor/blamejs/test/layer-0-primitives/guard-mime.test.js +86 -0
  359. package/lib/vendor/blamejs/test/layer-0-primitives/guard-oauth.test.js +140 -0
  360. package/lib/vendor/blamejs/test/layer-0-primitives/guard-pdf.test.js +80 -0
  361. package/lib/vendor/blamejs/test/layer-0-primitives/guard-pop3-command.test.js +27 -0
  362. package/lib/vendor/blamejs/test/layer-0-primitives/guard-regex.test.js +99 -0
  363. package/lib/vendor/blamejs/test/layer-0-primitives/guard-shell.test.js +76 -0
  364. package/lib/vendor/blamejs/test/layer-0-primitives/{guard-sql-coverage.test.js → guard-sql.test.js} +3 -3
  365. package/lib/vendor/blamejs/test/layer-0-primitives/guard-svg.test.js +524 -0
  366. package/lib/vendor/blamejs/test/layer-0-primitives/guard-template.test.js +71 -0
  367. package/lib/vendor/blamejs/test/layer-0-primitives/guard-time.test.js +92 -0
  368. package/lib/vendor/blamejs/test/layer-0-primitives/guard-uuid.test.js +86 -0
  369. package/lib/vendor/blamejs/test/layer-0-primitives/html-balance.test.js +38 -0
  370. package/lib/vendor/blamejs/test/layer-0-primitives/http-client-cache-authorization.test.js +347 -0
  371. package/lib/vendor/blamejs/test/layer-0-primitives/http-client-cache.test.js +908 -0
  372. package/lib/vendor/blamejs/test/layer-0-primitives/http-client.test.js +2874 -0
  373. package/lib/vendor/blamejs/test/layer-0-primitives/http-message-signature.test.js +643 -0
  374. package/lib/vendor/blamejs/test/layer-0-primitives/i18n-messageformat.test.js +38 -0
  375. package/lib/vendor/blamejs/test/layer-0-primitives/i18n.test.js +1153 -1
  376. package/lib/vendor/blamejs/test/layer-0-primitives/idempotency-key.test.js +494 -0
  377. package/lib/vendor/blamejs/test/layer-0-primitives/ip-utils.test.js +30 -0
  378. package/lib/vendor/blamejs/test/layer-0-primitives/jsdoc-example-execution.test.js +177 -0
  379. package/lib/vendor/blamejs/test/layer-0-primitives/json-path.test.js +103 -0
  380. package/lib/vendor/blamejs/test/layer-0-primitives/json-schema.test.js +214 -0
  381. package/lib/vendor/blamejs/test/layer-0-primitives/jwk.test.js +41 -0
  382. package/lib/vendor/blamejs/test/layer-0-primitives/jwt-external.test.js +276 -0
  383. package/lib/vendor/blamejs/test/layer-0-primitives/keychain.test.js +0 -0
  384. package/lib/vendor/blamejs/test/layer-0-primitives/log-stream.test.js +241 -0
  385. package/lib/vendor/blamejs/test/layer-0-primitives/log.test.js +106 -0
  386. package/lib/vendor/blamejs/test/layer-0-primitives/mail-agent.test.js +441 -0
  387. package/lib/vendor/blamejs/test/layer-0-primitives/mail-auth.test.js +2136 -4
  388. package/lib/vendor/blamejs/test/layer-0-primitives/mail-bimi.test.js +759 -12
  389. package/lib/vendor/blamejs/test/layer-0-primitives/mail-bounce.test.js +811 -1
  390. package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto-pgp-experimental.test.js +401 -3
  391. package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto-pgp.test.js +751 -8
  392. package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto-smime.test.js +864 -0
  393. package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto.test.js +110 -0
  394. package/lib/vendor/blamejs/test/layer-0-primitives/mail-dav.test.js +830 -1
  395. package/lib/vendor/blamejs/test/layer-0-primitives/mail-deploy.test.js +635 -86
  396. package/lib/vendor/blamejs/test/layer-0-primitives/mail-dkim.test.js +818 -0
  397. package/lib/vendor/blamejs/test/layer-0-primitives/mail-helo.test.js +27 -0
  398. package/lib/vendor/blamejs/test/layer-0-primitives/mail-scan.test.js +199 -0
  399. package/lib/vendor/blamejs/test/layer-0-primitives/mail-send-deliver.test.js +686 -2
  400. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-imap.test.js +778 -0
  401. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-jmap.test.js +1438 -0
  402. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-managesieve.test.js +449 -6
  403. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-mx.test.js +773 -2
  404. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-pop3.test.js +623 -3
  405. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-rate-limit.test.js +55 -0
  406. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-registry.test.js +13 -0
  407. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-submission.test.js +877 -1
  408. package/lib/vendor/blamejs/test/layer-0-primitives/mail-sieve.test.js +326 -0
  409. package/lib/vendor/blamejs/test/layer-0-primitives/mail-store-fts.test.js +55 -0
  410. package/lib/vendor/blamejs/test/layer-0-primitives/mail-store.test.js +242 -0
  411. package/lib/vendor/blamejs/test/layer-0-primitives/mail.test.js +1596 -2
  412. package/lib/vendor/blamejs/test/layer-0-primitives/mcp.test.js +440 -4
  413. package/lib/vendor/blamejs/test/layer-0-primitives/metrics-snapshot.test.js +89 -0
  414. package/lib/vendor/blamejs/test/layer-0-primitives/metrics.test.js +1230 -0
  415. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-assetlinks.test.js +113 -0
  416. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-body-parser.test.js +1169 -0
  417. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-bot-disclose.test.js +123 -0
  418. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-cookies.test.js +108 -0
  419. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-gpc.test.js +121 -0
  420. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-headers.test.js +163 -0
  421. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-host-allowlist.test.js +154 -0
  422. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-require-content-type.test.js +127 -0
  423. package/lib/vendor/blamejs/test/layer-0-primitives/{middleware-tus-upload-coverage.test.js → middleware-tus-upload.test.js} +45 -0
  424. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-web-app-manifest.test.js +132 -0
  425. package/lib/vendor/blamejs/test/layer-0-primitives/mtls-ca-crl-fingerprint-only.test.js +92 -0
  426. package/lib/vendor/blamejs/test/layer-0-primitives/network-dns-resolver.test.js +65 -0
  427. package/lib/vendor/blamejs/test/layer-0-primitives/network-dns.test.js +1727 -1
  428. package/lib/vendor/blamejs/test/layer-0-primitives/network-nts.test.js +699 -0
  429. package/lib/vendor/blamejs/test/layer-0-primitives/network-smtp-policy.test.js +1181 -0
  430. package/lib/vendor/blamejs/test/layer-0-primitives/network-tls.test.js +1876 -3
  431. package/lib/vendor/blamejs/test/layer-0-primitives/network.test.js +32 -0
  432. package/lib/vendor/blamejs/test/layer-0-primitives/nonce-store-enforce-replay-nonboolean.test.js +81 -0
  433. package/lib/vendor/blamejs/test/layer-0-primitives/ntp-check.test.js +122 -0
  434. package/lib/vendor/blamejs/test/layer-0-primitives/observability-tracing.test.js +378 -0
  435. package/lib/vendor/blamejs/test/layer-0-primitives/observability.test.js +77 -0
  436. package/lib/vendor/blamejs/test/layer-0-primitives/oid4vci.test.js +1016 -0
  437. package/lib/vendor/blamejs/test/layer-0-primitives/openid-federation.test.js +946 -0
  438. package/lib/vendor/blamejs/test/layer-0-primitives/outbox.test.js +818 -0
  439. package/lib/vendor/blamejs/test/layer-0-primitives/own-property-membership-guards.test.js +109 -0
  440. package/lib/vendor/blamejs/test/layer-0-primitives/parsers-safe-toml.test.js +543 -0
  441. package/lib/vendor/blamejs/test/layer-0-primitives/{parsers-safe-yaml-coverage.test.js → parsers-safe-yaml.test.js} +2 -2
  442. package/lib/vendor/blamejs/test/layer-0-primitives/parsers-standalone.test.js +73 -0
  443. package/lib/vendor/blamejs/test/layer-0-primitives/passkey.test.js +649 -0
  444. package/lib/vendor/blamejs/test/layer-0-primitives/permissions.test.js +524 -0
  445. package/lib/vendor/blamejs/test/layer-0-primitives/pqc-agent-curve.test.js +22 -0
  446. package/lib/vendor/blamejs/test/layer-0-primitives/pubsub.test.js +295 -0
  447. package/lib/vendor/blamejs/test/layer-0-primitives/queue-flow-repeat.test.js +36 -0
  448. package/lib/vendor/blamejs/test/layer-0-primitives/queue.test.js +83 -0
  449. package/lib/vendor/blamejs/test/layer-0-primitives/rate-limit-xff-spoofing.test.js +34 -0
  450. package/lib/vendor/blamejs/test/layer-0-primitives/redact.test.js +1031 -0
  451. package/lib/vendor/blamejs/test/layer-0-primitives/request-helpers.test.js +94 -0
  452. package/lib/vendor/blamejs/test/layer-0-primitives/require-bound-key.test.js +401 -0
  453. package/lib/vendor/blamejs/test/layer-0-primitives/restore-empty-manifest-wipe.test.js +154 -0
  454. package/lib/vendor/blamejs/test/layer-0-primitives/retention.test.js +600 -0
  455. package/lib/vendor/blamejs/test/layer-0-primitives/router-host-path-injection.test.js +231 -0
  456. package/lib/vendor/blamejs/test/layer-0-primitives/router-tls0rtt.test.js +21 -0
  457. package/lib/vendor/blamejs/test/layer-0-primitives/router.test.js +1277 -0
  458. package/lib/vendor/blamejs/test/layer-0-primitives/safe-async.test.js +133 -0
  459. package/lib/vendor/blamejs/test/layer-0-primitives/safe-buffer-linear-scans.test.js +14 -0
  460. package/lib/vendor/blamejs/test/layer-0-primitives/safe-buffer.test.js +80 -0
  461. package/lib/vendor/blamejs/test/layer-0-primitives/safe-decompress.test.js +28 -0
  462. package/lib/vendor/blamejs/test/layer-0-primitives/safe-dns.test.js +245 -0
  463. package/lib/vendor/blamejs/test/layer-0-primitives/safe-ical.test.js +32 -0
  464. package/lib/vendor/blamejs/test/layer-0-primitives/safe-ini.test.js +376 -0
  465. package/lib/vendor/blamejs/test/layer-0-primitives/safe-json.test.js +175 -0
  466. package/lib/vendor/blamejs/test/layer-0-primitives/safe-mime.test.js +518 -0
  467. package/lib/vendor/blamejs/test/layer-0-primitives/safe-object.test.js +62 -0
  468. package/lib/vendor/blamejs/test/layer-0-primitives/safe-path.test.js +30 -0
  469. package/lib/vendor/blamejs/test/layer-0-primitives/safe-schema.test.js +104 -0
  470. package/lib/vendor/blamejs/test/layer-0-primitives/safe-sql.test.js +142 -0
  471. package/lib/vendor/blamejs/test/layer-0-primitives/safe-url.test.js +112 -0
  472. package/lib/vendor/blamejs/test/layer-0-primitives/safe-vcard.test.js +26 -0
  473. package/lib/vendor/blamejs/test/layer-0-primitives/scheduler.test.js +157 -0
  474. package/lib/vendor/blamejs/test/layer-0-primitives/scim-server.test.js +396 -0
  475. package/lib/vendor/blamejs/test/layer-0-primitives/sd-jwt-vc.test.js +930 -0
  476. package/lib/vendor/blamejs/test/layer-0-primitives/security-assert.test.js +755 -82
  477. package/lib/vendor/blamejs/test/layer-0-primitives/self-update.test.js +1053 -0
  478. package/lib/vendor/blamejs/test/layer-0-primitives/session-device-binding.test.js +200 -0
  479. package/lib/vendor/blamejs/test/layer-0-primitives/session-strict-binding-missing-failclosed.test.js +110 -0
  480. package/lib/vendor/blamejs/test/layer-0-primitives/sigv4-bucket-ops.test.js +636 -0
  481. package/lib/vendor/blamejs/test/layer-0-primitives/sql-offset-without-limit.test.js +94 -0
  482. package/lib/vendor/blamejs/test/layer-0-primitives/sql.test.js +1190 -0
  483. package/lib/vendor/blamejs/test/layer-0-primitives/ssrf-guard.test.js +21 -0
  484. package/lib/vendor/blamejs/test/layer-0-primitives/static.test.js +850 -0
  485. package/lib/vendor/blamejs/test/layer-0-primitives/storage-presigned-url.test.js +146 -0
  486. package/lib/vendor/blamejs/test/layer-0-primitives/storage.test.js +621 -0
  487. package/lib/vendor/blamejs/test/layer-0-primitives/subject.test.js +47 -0
  488. package/lib/vendor/blamejs/test/layer-0-primitives/template.test.js +582 -0
  489. package/lib/vendor/blamejs/test/layer-0-primitives/tenant-quota.test.js +587 -25
  490. package/lib/vendor/blamejs/test/layer-0-primitives/time.test.js +11 -0
  491. package/lib/vendor/blamejs/test/layer-0-primitives/tsa.test.js +524 -63
  492. package/lib/vendor/blamejs/test/layer-0-primitives/uri-template.test.js +27 -0
  493. package/lib/vendor/blamejs/test/layer-0-primitives/vault-rotate.test.js +866 -0
  494. package/lib/vendor/blamejs/test/layer-0-primitives/vault.test.js +74 -0
  495. package/lib/vendor/blamejs/test/layer-0-primitives/vc.test.js +215 -0
  496. package/lib/vendor/blamejs/test/layer-0-primitives/watcher.test.js +550 -0
  497. package/lib/vendor/blamejs/test/layer-0-primitives/webhook-dispatcher.test.js +388 -0
  498. package/lib/vendor/blamejs/test/layer-0-primitives/webhook.test.js +262 -0
  499. package/lib/vendor/blamejs/test/layer-0-primitives/websocket.test.js +1294 -0
  500. package/lib/vendor/blamejs/test/layer-0-primitives/ws-client.test.js +629 -0
  501. package/lib/vendor/blamejs/test/layer-0-primitives/xml-c14n-attr-normalization.test.js +164 -0
  502. package/lib/vendor/blamejs/test/smoke.js +2 -0
  503. package/package.json +1 -1
  504. package/lib/vendor/blamejs/release-notes/v0.16.0.json +0 -44
  505. package/lib/vendor/blamejs/release-notes/v0.16.1.json +0 -36
  506. package/lib/vendor/blamejs/release-notes/v0.16.2.json +0 -71
  507. package/lib/vendor/blamejs/release-notes/v0.16.3.json +0 -71
  508. package/lib/vendor/blamejs/test/layer-0-primitives/acme-coverage.test.js +0 -441
  509. package/lib/vendor/blamejs/test/layer-0-primitives/auth-oauth-coverage.test.js +0 -482
  510. package/lib/vendor/blamejs/test/layer-0-primitives/auth-saml-coverage.test.js +0 -671
  511. package/lib/vendor/blamejs/test/layer-0-primitives/backup-index-coverage.test.js +0 -690
  512. package/lib/vendor/blamejs/test/layer-0-primitives/cli-coverage.test.js +0 -238
  513. package/lib/vendor/blamejs/test/layer-0-primitives/content-credentials-coverage.test.js +0 -319
  514. package/lib/vendor/blamejs/test/layer-0-primitives/keychain-coverage.test.js +0 -0
  515. package/lib/vendor/blamejs/test/layer-0-primitives/mail-auth-coverage.test.js +0 -437
  516. package/lib/vendor/blamejs/test/layer-0-primitives/mcp-coverage.test.js +0 -443
  517. package/lib/vendor/blamejs/test/layer-0-primitives/metrics-coverage.test.js +0 -395
  518. package/lib/vendor/blamejs/test/layer-0-primitives/network-smtp-policy-coverage.test.js +0 -565
  519. package/lib/vendor/blamejs/test/layer-0-primitives/router-coverage.test.js +0 -592
  520. package/lib/vendor/blamejs/test/layer-0-primitives/sql-coverage.test.js +0 -422
  521. package/lib/vendor/blamejs/test/layer-0-primitives/test-coverage.test.js +0 -573
@@ -110,7 +110,7 @@ function _genId() {
110
110
  * }
111
111
  *
112
112
  * @example
113
- * var b = require("blamejs").create();
113
+ * var b = require("blamejs");
114
114
  * var ce = b.cloudEvents.wrap({
115
115
  * source: "/services/orders",
116
116
  * type: "com.example.order.created",
@@ -214,7 +214,7 @@ function wrap(opts) {
214
214
  * envelope.
215
215
  *
216
216
  * @example
217
- * var b = require("blamejs").create();
217
+ * var b = require("blamejs");
218
218
  * var record = b.cloudEvents.parse({
219
219
  * specversion: "1.0",
220
220
  * id: "evt-1",
@@ -244,7 +244,17 @@ function create(config) {
244
244
  async function renewLease(lease, opts) {
245
245
  if (!lease || !lease.leaseId) throw _err("INVALID_LEASE", "lease required", true);
246
246
  var nowMs = Date.now();
247
- var newExpiresAt = nowMs + (lease.expiresAt - lease.acquiredAt);
247
+ // A lease is a sliding window: the span (expiresAt - acquiredAt) equals
248
+ // the configured TTL at acquire time, and every renewal must slide BOTH
249
+ // ends forward so the span stays that TTL. Advancing only expiresAt
250
+ // (leaving acquiredAt frozen at the original acquisition) re-derives an
251
+ // ever-growing TTL on the next renewal, so the expiry drifts unboundedly
252
+ // into the future: a dead leader's row then never lapses within leaseTtl
253
+ // and no follower can steal it, breaking bounded takeover. Refresh
254
+ // acquiredAt alongside expiresAt to keep the span invariant.
255
+ var ttlMs = lease.expiresAt - lease.acquiredAt;
256
+ var newAcquiredAt = nowMs;
257
+ var newExpiresAt = nowMs + ttlMs;
248
258
  // opts.endpoint, when provided, refreshes the stored endpoint so
249
259
  // operators who hot-update their config see the discovery row catch
250
260
  // up. Default = preserve whatever was stored at acquire time.
@@ -261,7 +271,7 @@ function create(config) {
261
271
  // MySQL has no RETURNING — UPDATE then read back, with a takeover
262
272
  // detected when the read-back row no longer carries our leaseId.
263
273
  var rvBuilt = sql().update(LEADER_TABLE, { dialect: dialect })
264
- .set({ expiresAt: newExpiresAt, endpoint: endpoint })
274
+ .set({ acquiredAt: newAcquiredAt, expiresAt: newExpiresAt, endpoint: endpoint })
265
275
  .where("scope", "leader").where("nodeId", lease.nodeId).where("leaseId", lease.leaseId)
266
276
  .toSql();
267
277
  var rv = await _q(clusterStorage().placeholderize(rvBuilt.sql, dialect), rvBuilt.params);
@@ -283,7 +293,7 @@ function create(config) {
283
293
  row = sel.rows[0];
284
294
  } else {
285
295
  var result = await _run(sql().update(LEADER_TABLE, { dialect: dialect })
286
- .set({ expiresAt: newExpiresAt, endpoint: endpoint })
296
+ .set({ acquiredAt: newAcquiredAt, expiresAt: newExpiresAt, endpoint: endpoint })
287
297
  .where("scope", "leader").where("nodeId", lease.nodeId).where("leaseId", lease.leaseId)
288
298
  .returning(renewCols));
289
299
  if (!result.rows || result.rows.length === 0) {
@@ -581,10 +581,95 @@ function decodeNumericEntities(s) {
581
581
  });
582
582
  }
583
583
 
584
+ // The HTML5 named-entity ASCII subset a browser resolves inside URL and CSS
585
+ // attribute contexts — the scheme/whitespace-significant characters an attacker
586
+ // hides a payload behind (`java	script:` / `behavior:`). One table so
587
+ // guard-html / guard-svg / guard-markdown decode the SAME set and cannot drift
588
+ // (guard-markdown shipped without named-entity decoding at all, so `	` /
589
+ // `
` slipped past its scheme denylist).
590
+ var NAMED_ENTITY_ASCII = {
591
+ // Whitespace + control chars browsers strip inside URL schemes
592
+ Tab: "\t", NewLine: "\n",
593
+ // Scheme-significant punctuation
594
+ colon: ":", semi: ";", period: ".", sol: "/", bsol: "\\",
595
+ num: "#", excl: "!", quest: "?", lpar: "(", rpar: ")",
596
+ lsqb: "[", rsqb: "]", lcub: "{", rcub: "}",
597
+ // Quotes / brackets
598
+ quot: "\"", apos: "'", lt: "<", gt: ">",
599
+ // Misc ASCII
600
+ amp: "&", commat: "@", dollar: "$", percnt: "%",
601
+ ast: "*", plus: "+", lowbar: "_", hyphen: "-",
602
+ // Latin-1 space browsers treat as URL-strippable
603
+ nbsp: " ",
604
+ };
605
+ var NAMED_ENTITY_RE_G = /&([A-Za-z][A-Za-z0-9]+);/g;
606
+
607
+ /**
608
+ * @primitive b.codepointClass.decodeMarkupEntities
609
+ * @signature b.codepointClass.decodeMarkupEntities(value)
610
+ * @since 0.16.19
611
+ * @status stable
612
+ * @related b.codepointClass.decodeNumericEntities, b.codepointClass.stripUrlSchemeWhitespace
613
+ *
614
+ * Decode the character references a browser resolves inside an attribute value
615
+ * -- numeric (hex/decimal, semicolon OPTIONAL) then the named-entity ASCII
616
+ * subset browsers honor in URL/CSS contexts -- and drop the C0 controls and
617
+ * zero-widths a payload hides behind. The single decoder every content guard
618
+ * routes a scheme / CSS-token danger check through, so a threat cannot slip
619
+ * past the guard that forgot to decode an encoding a sibling strips. Pair with
620
+ * `stripUrlSchemeWhitespace` for a URL-scheme check.
621
+ *
622
+ * @example
623
+ * b.codepointClass.decodeMarkupEntities("ex&#x70;ression("); // "expression("
624
+ * b.codepointClass.decodeMarkupEntities("behavior&colon;"); // "behavior:"
625
+ */
626
+ function decodeMarkupEntities(value) {
627
+ var s = decodeNumericEntities(String(value == null ? "" : value));
628
+ s = s.replace(NAMED_ENTITY_RE_G, function (m, name) {
629
+ if (Object.prototype.hasOwnProperty.call(NAMED_ENTITY_ASCII, name)) {
630
+ return NAMED_ENTITY_ASCII[name];
631
+ }
632
+ return m;
633
+ });
634
+ return s.replace(C0_CTRL_RE_G, "").replace(ZW_RE_G, "");
635
+ }
636
+
637
+ var URL_TAB_NEWLINE_RE_G = /[\t\n\r]/g; // URL tab/newline strip, not byte size
638
+ // allow:dynamic-regex -- codepoints from a literal [0x00, 0x20] range (C0 controls + space)
639
+ var URL_C0_SPACE_CC = charClass([[0x0000, 0x0020]]);
640
+ var URL_C0_SPACE_TRIM_RE = new RegExp("^(?:[" + URL_C0_SPACE_CC + "])+|(?:[" + URL_C0_SPACE_CC + "])+$", "g");
641
+ /**
642
+ * @primitive b.codepointClass.stripUrlSchemeWhitespace
643
+ * @signature b.codepointClass.stripUrlSchemeWhitespace(s)
644
+ * @since 0.16.19
645
+ * @status stable
646
+ * @related b.codepointClass.decodeMarkupEntities, b.codepointClass.decodeNumericEntities
647
+ *
648
+ * Fold away exactly the whitespace the WHATWG URL parser removes before it
649
+ * resolves a scheme: ASCII tab / LF / CR from ANYWHERE, plus a leading/trailing
650
+ * C0-control-or-space run. tab/lf/cr are excluded from the C0-control catalog
651
+ * and space is not a control, so a danger check that strips only C0/zero-width
652
+ * still lets `java<TAB>script:` or an entity-encoded leading space
653
+ * (`&#32;javascript:`) read as scheme-less. Run AFTER entity decoding; every
654
+ * guard that extracts a URL scheme for a denylist routes the decoded value
655
+ * through this.
656
+ *
657
+ * @example
658
+ * b.codepointClass.stripUrlSchemeWhitespace(" javascript:x"); // "javascript:x"
659
+ */
660
+ function stripUrlSchemeWhitespace(s) {
661
+ return String(s == null ? "" : s)
662
+ .replace(URL_TAB_NEWLINE_RE_G, "")
663
+ .replace(URL_C0_SPACE_TRIM_RE, "");
664
+ }
665
+
584
666
  module.exports = {
585
667
  isForbiddenControlChar: isForbiddenControlChar,
586
668
  firstControlCharOffset: firstControlCharOffset,
587
669
  decodeNumericEntities: decodeNumericEntities,
670
+ decodeMarkupEntities: decodeMarkupEntities,
671
+ NAMED_ENTITY_ASCII: NAMED_ENTITY_ASCII,
672
+ stripUrlSchemeWhitespace: stripUrlSchemeWhitespace,
588
673
  isAsciiAlnum: isAsciiAlnum,
589
674
  isUnreserved: isUnreserved,
590
675
  hex4: hex4,
@@ -51,7 +51,7 @@ var PROHIBITED_PRACTICES = Object.freeze([
51
51
  Object.freeze({
52
52
  id: "social-scoring",
53
53
  article: "Art. 5(1)(c)",
54
- title: "Social scoring by public authorities",
54
+ title: "Social scoring of natural persons",
55
55
  description: "AI systems for the evaluation or classification of natural persons over a certain period of time based on their social behaviour or known, inferred or predicted personal or personality characteristics, leading to detrimental or unfavourable treatment that is unjustified or disproportionate.",
56
56
  examples: Object.freeze([
57
57
  "General-purpose social-credit ranking by a state agency",
@@ -151,9 +151,13 @@ function classify(systemDescription) {
151
151
  if (systemDescription.targetsVulnerableGroup === true) {
152
152
  hits.push("exploit-vulnerabilities");
153
153
  }
154
- // (c) social scoring
155
- if (systemDescription.purpose === "social-scoring" &&
156
- systemDescription.deployerType === "public-authority") {
154
+ // (c) social scoring — Art. 5(1)(c) of the adopted Regulation (EU)
155
+ // 2024/1689 prohibits social scoring by ANY actor. The "by public
156
+ // authorities or on their behalf" limitation from the 2021 Commission
157
+ // proposal was dropped in the final text, so the practice is flagged on the
158
+ // purpose alone, not gated on deployerType (which would under-classify a
159
+ // private-actor social-scoring system as minimal-risk).
160
+ if (systemDescription.purpose === "social-scoring") {
157
161
  hits.push("social-scoring");
158
162
  }
159
163
  // (d) predictive policing on profiling alone
@@ -42,6 +42,7 @@
42
42
 
43
43
  var validateOpts = require("./validate-opts");
44
44
  var markupEscape = require("./markup-escape").markupEscape;
45
+ var safeJson = require("./safe-json");
45
46
  var { ComplianceError } = require("./framework-error");
46
47
 
47
48
  var BANNER_KINDS = Object.freeze([
@@ -112,10 +113,17 @@ function _articleFor(kind) {
112
113
 
113
114
  function htmlBanner(opts) {
114
115
  var b = banner(opts);
116
+ // Every interpolated value is entity-escaped for the double-quoted attribute
117
+ // context. `lang` is free-form (a request locale / Accept-Language / query
118
+ // param when the banner is server-rendered), so an unescaped double quote
119
+ // would break out of the attribute and inject active content (reflected
120
+ // XSS). `article` / `kind` are constrained today, but escape-at-the-sink is
121
+ // the invariant — a raw concat is the defect regardless of the current
122
+ // value domain.
115
123
  var attrs =
116
- 'role="status" data-blamejs-aiAct="' + b.article +
117
- '" data-blamejs-kind="' + b.kind +
118
- '" lang="' + b.lang + '"';
124
+ 'role="status" data-blamejs-aiAct="' + _escapeHtml(b.article) +
125
+ '" data-blamejs-kind="' + _escapeHtml(b.kind) +
126
+ '" lang="' + _escapeHtml(b.lang) + '"';
119
127
  return '<div ' + attrs + '>' + _escapeHtml(b.text) + '</div>';
120
128
  }
121
129
 
@@ -159,9 +167,16 @@ function watermark(opts) {
159
167
 
160
168
  function jsonLdDisclosure(opts) {
161
169
  var w = watermark(opts);
170
+ // The manifest carries operator-supplied strings (modelId, deployerName,
171
+ // promptHash, ...). Embedding raw JSON.stringify inside a <script> element
172
+ // lets a value containing "</script>" (or "<!--") terminate the block and
173
+ // inject markup — the HTML parser ends the element at the first "</script>"
174
+ // regardless of the ld+json type. b.safeJson.stringifyForScript escapes
175
+ // < > & (and U+2028/U+2029) to \uXXXX so the parsed JSON is unchanged but no
176
+ // substring can break out of the script context.
162
177
  var script = '<script type="application/ld+json" ' +
163
178
  'data-blamejs-aiAct="Art. 50(2)">' +
164
- JSON.stringify(w) + '</script>';
179
+ safeJson.stringifyForScript(w) + '</script>';
165
180
  return script;
166
181
  }
167
182
 
@@ -591,11 +591,10 @@ function deployerChecklist(assessment) {
591
591
  * });
592
592
  */
593
593
  function fundamentalRightsImpactAssessment(opts) {
594
- if (!opts || typeof opts !== "object") {
595
- throw new Error("fundamentalRightsImpactAssessment: opts required");
596
- }
594
+ validateOpts.requireObject(opts, "fundamentalRightsImpactAssessment",
595
+ ComplianceError, "compliance-ai-act/bad-input");
597
596
  validateOpts.requireNonEmptyString(opts.systemId, "systemId",
598
- Error, "compliance-ai-act/no-system-id");
597
+ ComplianceError, "compliance-ai-act/no-system-id");
599
598
  return {
600
599
  "$schema": "https://blamejs.com/schema/ai-act-fria-v1.json",
601
600
  regulation: "EU Regulation 2024/1689 — AI Act",
@@ -657,11 +656,10 @@ function fundamentalRightsImpactAssessment(opts) {
657
656
  * });
658
657
  */
659
658
  function trainingDataSummary(opts) {
660
- if (!opts || typeof opts !== "object") {
661
- throw new Error("trainingDataSummary: opts required");
662
- }
659
+ validateOpts.requireObject(opts, "trainingDataSummary",
660
+ ComplianceError, "compliance-ai-act/bad-input");
663
661
  validateOpts.requireNonEmptyString(opts.modelId, "modelId",
664
- Error, "compliance-ai-act/no-model-id");
662
+ ComplianceError, "compliance-ai-act/no-model-id");
665
663
  return {
666
664
  "$schema": "https://blamejs.com/schema/ai-act-gpai-training-summary-v1.json",
667
665
  regulation: "EU Regulation 2024/1689 — AI Act",
@@ -595,7 +595,7 @@ function signCose(manifest, opts) {
595
595
  validateOpts.requireNonEmptyString(opts.privateKeyPem,
596
596
  "contentCredentials.signCose: privateKeyPem", ContentCredentialsError, "BAD_KEY");
597
597
  var algName = (opts.alg || "ml-dsa-87").toLowerCase();
598
- if (!(algName in COSE_ALGS)) {
598
+ if (!Object.prototype.hasOwnProperty.call(COSE_ALGS, algName)) {
599
599
  throw ContentCredentialsError.factory("content-credentials/bad-alg",
600
600
  "contentCredentials.signCose: alg '" + algName +
601
601
  "' not in COSE alg registry. Known: " + Object.keys(COSE_ALGS).join(", "));
@@ -32,6 +32,7 @@
32
32
  var nodeCrypto = require("node:crypto");
33
33
  var bCrypto = require("./crypto");
34
34
  var safeBuffer = require("./safe-buffer");
35
+ var safeObject = require("./safe-object");
35
36
  var structuredFields = require("./structured-fields");
36
37
  var validateOpts = require("./validate-opts");
37
38
  var { defineClass } = require("./framework-error");
@@ -104,7 +105,7 @@ function create(body, opts) {
104
105
  // hasOwnProperty: the algorithm name is operator/caller input; a bracket
105
106
  // lookup lets "constructor"/"toString" inherit a truthy value off the
106
107
  // prototype and pass the support check (proto shadowing).
107
- var nodeAlg = Object.prototype.hasOwnProperty.call(ACTIVE, name) ? ACTIVE[name] : undefined;
108
+ var nodeAlg = safeObject.ownProp(ACTIVE, name);
108
109
  if (!nodeAlg) {
109
110
  if (Object.prototype.hasOwnProperty.call(DEPRECATED, name)) throw new ContentDigestError("content-digest/insecure-algorithm", "contentDigest.create: '" + name + "' is a deprecated/insecure digest algorithm (RFC 9530 §6); use sha-256 or sha-512");
110
111
  throw new ContentDigestError("content-digest/unsupported-algorithm", "contentDigest.create: unsupported digest algorithm '" + name + "'");
@@ -214,15 +214,25 @@ function serialize(name, value, attrs) {
214
214
  // __Host-* — MUST be Secure, Path=/, NO Domain
215
215
  //
216
216
  // Caught at the source so every caller (csrf-protect / session /
217
- // operator) gets the same enforcement.
218
- if (name.indexOf("__Secure-") === 0) {
217
+ // operator) gets the same enforcement. RFC 6265bis §5.4 requires user
218
+ // agents to match these prefixes case-INSENSITIVELY (the server-side
219
+ // description in §4.1.3 reads "case-sensitive", but the UA is what
220
+ // actually enforces the cookie-drop): Chromium and Firefox both
221
+ // lowercase the name before the prefix test, so `__host-` / `__SECURE-`
222
+ // get the same browser enforcement -- Secure, Path=/, no Domain -- as
223
+ // `__Host-` / `__Secure-`. Case-sensitive matching was itself the
224
+ // vulnerability CVE-2024-5699 (httpwg/http-extensions#2231). Compare a
225
+ // lowercased copy so a case-variant name can't dodge the invariant here
226
+ // and then be silently dropped by the browser.
227
+ var lowerName = name.toLowerCase();
228
+ if (lowerName.indexOf("__secure-") === 0) {
219
229
  if (attrs.secure !== true) {
220
230
  throw new CookieError("cookies/prefix-secure-required",
221
231
  "__Secure-* cookies MUST set Secure (RFC 6265bis §4.1.3.1) — got '" +
222
232
  name + "' without secure: true");
223
233
  }
224
234
  }
225
- if (name.indexOf("__Host-") === 0) {
235
+ if (lowerName.indexOf("__host-") === 0) {
226
236
  if (attrs.secure !== true) {
227
237
  throw new CookieError("cookies/prefix-host-secure-required",
228
238
  "__Host-* cookies MUST set Secure (RFC 6265bis §4.1.3.2) — got '" +
@@ -112,21 +112,36 @@ function _algParamsFor(algId) {
112
112
  }
113
113
  }
114
114
 
115
- // RFC 9053 §2 binds each ECDSA alg to ONE curve. node:crypto will happily
116
- // verify a sha512 (ES512-shape) signature against a P-256 key as
117
- // self-consistent, so without this check a COSE_Sign1 declaring ES512 but
118
- // carrying a P-256 key passes when ES512 is allowlisted an alg/curve
119
- // confusion (the COSE sibling of jwt-external._assertAlgKtyMatch). EdDSA /
120
- // ML-DSA carry their parameters in the KeyObject and need no binding.
115
+ // RFC 9053 §2 binds each COSE signature alg to ONE key shape. node:crypto
116
+ // dispatches sign()/verify() on the KEY, never on the declared COSE alg —
117
+ // for ECDSA it will happily verify a sha512 (ES512-shape) signature against
118
+ // a P-256 key as self-consistent, and for the null-digest algorithms
119
+ // (EdDSA, ML-DSA-87) it selects the primitive purely from the key type.
120
+ // Without an alg→key binding a COSE_Sign1 declaring one algorithm but
121
+ // carrying/using another key type verifies — an alg/key confusion (the COSE
122
+ // sibling of jwt-external._assertAlgKtyMatch). Two live seams: a COSE_Sign1
123
+ // declaring ES512 but carrying a P-256 key passes when ES512 is allowlisted;
124
+ // and — because EdDSA/ML-DSA-87 both sign with a null digest — an EdDSA
125
+ // signature passes a PQC-only ("ML-DSA-87") allowlist against an Ed25519 key
126
+ // (and the reverse). EdDSA / ML-DSA carry no curve, so they are bound by
127
+ // key TYPE, not curve. Every SIGNABLE alg is bound here.
121
128
  var _ES_ALG_CURVE = { ES256: "prime256v1", ES384: "secp384r1", ES512: "secp521r1" };
122
- function _assertEcAlgCurve(algName, key) {
123
- var want = _ES_ALG_CURVE[algName];
124
- if (want === undefined) return; // not an ECDSA alg — nothing to bind
125
- var got = (key && key.asymmetricKeyDetails && key.asymmetricKeyDetails.namedCurve) || null;
126
- if (key.asymmetricKeyType !== "ec" || got !== want) {
127
- throw new CoseError("cose/alg-curve-mismatch",
128
- "cose: alg '" + algName + "' requires an EC key on " + want +
129
- ", got " + (key.asymmetricKeyType === "ec" ? got : key.asymmetricKeyType));
129
+ var _ALG_KEY_TYPE = { EdDSA: "ed25519", "ML-DSA-87": "ml-dsa-87" }; // null-digest algs → required key type
130
+ function _assertAlgKeyMatch(algName, key) {
131
+ var wantCurve = _ES_ALG_CURVE[algName];
132
+ if (wantCurve !== undefined) {
133
+ var got = (key && key.asymmetricKeyDetails && key.asymmetricKeyDetails.namedCurve) || null;
134
+ if (!key || key.asymmetricKeyType !== "ec" || got !== wantCurve) {
135
+ throw new CoseError("cose/alg-curve-mismatch",
136
+ "cose: alg '" + algName + "' requires an EC key on " + wantCurve +
137
+ ", got " + (key && key.asymmetricKeyType === "ec" ? got : (key && key.asymmetricKeyType)));
138
+ }
139
+ return;
140
+ }
141
+ var wantType = _ALG_KEY_TYPE[algName];
142
+ if (wantType !== undefined && (!key || key.asymmetricKeyType !== wantType)) {
143
+ throw new CoseError("cose/alg-key-mismatch",
144
+ "cose: alg '" + algName + "' requires a " + wantType + " key, got " + (key && key.asymmetricKeyType));
130
145
  }
131
146
  }
132
147
 
@@ -189,7 +204,7 @@ async function sign(payload, opts) {
189
204
  var algId = ALG_NAME_TO_ID[opts.alg];
190
205
  var params = _algParamsFor(algId);
191
206
  var key = _toKeyObject(opts.privateKey, "private");
192
- _assertEcAlgCurve(opts.alg, key); // RFC 9053 alg↔curve binding — refuse e.g. ES512 over a P-256 key
207
+ _assertAlgKeyMatch(opts.alg, key); // RFC 9053 alg↔key binding — refuse e.g. ES512 over a P-256 key, or EdDSA over an ML-DSA key
193
208
 
194
209
  var protMap = new Map();
195
210
  protMap.set(HDR_ALG, algId);
@@ -373,7 +388,7 @@ async function verify(coseSign1, opts) {
373
388
  var key = opts.publicKey
374
389
  ? _toKeyObject(opts.publicKey, "public")
375
390
  : _toKeyObject(opts.keyResolver(protMap, unprotected), "public");
376
- _assertEcAlgCurve(algName, key); // RFC 9053 alg↔curve binding
391
+ _assertAlgKeyMatch(algName, key); // RFC 9053 alg↔key binding — refuse alg/key-type confusion (EdDSA vs ML-DSA-87, ES* vs wrong curve)
377
392
 
378
393
  var externalAad = opts.externalAad == null ? Buffer.alloc(0) : _bstr(opts.externalAad);
379
394
  var toBeSigned = _toBeSigned(protectedBstr, externalAad, payload);
@@ -89,6 +89,11 @@ var TYPED_SENTINEL = String.fromCharCode(0) + "bjsv1:";
89
89
 
90
90
  function _encodeTyped(value) {
91
91
  if (typeof value === "string") {
92
+ // "" encodes to a NON-empty typed marker so a sealed empty string is a real
93
+ // authenticated envelope, never a bare plaintext "": vault.aad.seal refuses
94
+ // empty plaintext, and a bare "" in a sealed cell is indistinguishable from a
95
+ // ciphertext a DB-write attacker downgraded to "".
96
+ if (value === "") return TYPED_SENTINEL + "E:";
92
97
  return value.indexOf(TYPED_SENTINEL) === 0 ? TYPED_SENTINEL + "S:" + value : value;
93
98
  }
94
99
  if (Buffer.isBuffer(value)) return TYPED_SENTINEL + "B:" + value.toString("base64");
@@ -102,6 +107,7 @@ function _decodeTyped(str) {
102
107
  var body = str.slice(TYPED_SENTINEL.length);
103
108
  var tag = body.slice(0, 2);
104
109
  var payload = body.slice(2);
110
+ if (tag === "E:") return "";
105
111
  if (tag === "B:") return Buffer.from(payload, "base64");
106
112
  if (tag === "J:") return safeJson.parse(payload); // plaintext is AEAD-verified; safeJson blocks proto-pollution defensively
107
113
  if (tag === "S:") return payload;
@@ -1071,6 +1077,11 @@ function sealRow(table, row, opts) {
1071
1077
  // - plain mode: vault.seal (idempotent — already-sealed pass through).
1072
1078
  for (var i = 0; i < s.sealedFields.length; i++) {
1073
1079
  var field = s.sealedFields[i];
1080
+ // Skip only null / undefined (nothing to seal). An empty string IS sealed:
1081
+ // _encodeTyped("") yields a non-empty typed marker (E:), so every branch
1082
+ // produces a real authenticated envelope -- never a bare plaintext "" that a
1083
+ // DB-write attacker could forge, or that a ciphertext could be silently
1084
+ // downgraded to (unsealRow fails closed on a bare "" in an AAD/keyed cell).
1074
1085
  if (out[field] === undefined || out[field] === null) continue;
1075
1086
  if (kRow && field === residencyCol) continue; // residency tag stays plaintext
1076
1087
  if (kRow) {
@@ -1216,6 +1227,27 @@ function unsealRow(table, row, actor, dbHandle) {
1216
1227
 
1217
1228
  for (var i = 0; i < s.sealedFields.length; i++) {
1218
1229
  var field = s.sealedFields[i];
1230
+ // Post-seal, a legitimately-empty sealed value is a NON-empty authenticated
1231
+ // envelope (see _encodeTyped "" -> E:), so a bare "" present in an AAD-bound
1232
+ // or per-row-key sealed column is an envelope-downgrade tamper -- a DB-write
1233
+ // attacker replacing a ciphertext with "". Fail closed (null the cell + audit),
1234
+ // mirroring the plain-vault aad-downgrade refusal below; never surface it as a
1235
+ // valid empty value. Plain-mode tables keep the lenient pass-through.
1236
+ if (out[field] === "" && (s.aad || keyedTable)) {
1237
+ out[field] = null;
1238
+ try {
1239
+ audit().safeEmit({
1240
+ action: "system.crypto.unseal_failed",
1241
+ outcome: "failure",
1242
+ metadata: {
1243
+ table: table, field: field, rowId: out[s.rowIdField] || out._id || null,
1244
+ shape: (s.aad ? "aad" : "row"),
1245
+ reason: "empty-string cell in a sealed AAD/keyed column (envelope downgrade)",
1246
+ },
1247
+ });
1248
+ } catch (_e) { /* drop-silent */ }
1249
+ continue;
1250
+ }
1219
1251
  if (out[field]) {
1220
1252
  // Per-cell envelope shape for audit metadata (operators write alert
1221
1253
  // rules off it): "row" = K_row cell, "aad" = vault.aad: cell on an
@@ -98,8 +98,17 @@ var SUITES = Object.keys(SUITE_IMPL);
98
98
  * // out === s.oprf.evaluate(kp.secretKey, Buffer.from("user@example.com"))
99
99
  */
100
100
  function suite(name) {
101
- var impl = SUITE_IMPL[String(name).toLowerCase()];
102
- if (!impl) throw new OprfError("oprf/bad-suite", "crypto.oprf.suite: unknown suite '" + name + "'; expected one of " + SUITES.join(", "));
101
+ // Own-property guard, not a truthiness check: SUITE_IMPL is a plain object,
102
+ // so a bracket read with a prototype-chain name ("__proto__" Object.prototype,
103
+ // "constructor" → the Object constructor) returns a truthy inherited value that
104
+ // an `if (!impl)` guard would accept as a "suite". Match the hasOwnProperty
105
+ // shape b.crypto.sri uses for its algorithm table so an unknown name — however
106
+ // it collides with Object.prototype — refuses cleanly with OprfError.
107
+ var key = String(name).toLowerCase();
108
+ if (!Object.prototype.hasOwnProperty.call(SUITE_IMPL, key)) {
109
+ throw new OprfError("oprf/bad-suite", "crypto.oprf.suite: unknown suite '" + name + "'; expected one of " + SUITES.join(", "));
110
+ }
111
+ var impl = SUITE_IMPL[key];
103
112
  // Expose only the modes the vendored @noble/curves implements (base +
104
113
  // verifiable). poprf is omitted rather than surfaced as an empty stub.
105
114
  return { name: impl.name, oprf: impl.oprf, voprf: impl.voprf };
@@ -69,11 +69,29 @@ function _x25519Public(sk) {
69
69
  var spki = nodeCrypto.createPublicKey(key).export({ format: "der", type: "spki" });
70
70
  return spki.subarray(spki.length - X25519_LEN);
71
71
  }
72
+ // draft-connolly-cfrg-xwing-kem uses X25519 exactly as RFC 7748 specifies it,
73
+ // WITHOUT the optional RFC 7748 section 6.1 abort on an all-zero shared secret.
74
+ // Decapsulation must be uniform implicit-rejection: a hostile low-order X25519
75
+ // ephemeral in the ciphertext must NOT be able to signal validity by making
76
+ // decapsulate throw (the documented "yields a different secret rather than an
77
+ // error" contract, and a defense against a decapsulation oracle / crash-on-
78
+ // crafted-input DoS). OpenSSL (the X25519 backing this seam) DOES abort that
79
+ // derivation, so translate its error back into the all-zero shared secret RFC
80
+ // 7748 X25519 yields for a low-order input point. The combiner still binds ctX
81
+ // and pkX and the ML-KEM-768 leg still protects the result, so collapsing the
82
+ // classical leg costs only the classical half of the "secure if either holds"
83
+ // guarantee. A short/malformed key fails earlier at createPublicKey with a
84
+ // different code and still propagates.
72
85
  function _x25519Shared(sk, pk) {
73
- return nodeCrypto.diffieHellman({
74
- privateKey: nodeCrypto.createPrivateKey({ key: Buffer.concat([X25519_PKCS8_PREFIX, sk]), format: "der", type: "pkcs8" }),
75
- publicKey: nodeCrypto.createPublicKey({ key: Buffer.concat([X25519_SPKI_PREFIX, pk]), format: "der", type: "spki" }),
76
- });
86
+ try {
87
+ return nodeCrypto.diffieHellman({
88
+ privateKey: nodeCrypto.createPrivateKey({ key: Buffer.concat([X25519_PKCS8_PREFIX, sk]), format: "der", type: "pkcs8" }),
89
+ publicKey: nodeCrypto.createPublicKey({ key: Buffer.concat([X25519_SPKI_PREFIX, pk]), format: "der", type: "spki" }),
90
+ });
91
+ } catch (e) {
92
+ if (e && e.code === "ERR_OSSL_FAILED_DURING_DERIVATION") return Buffer.alloc(X25519_LEN);
93
+ throw e;
94
+ }
77
95
  }
78
96
 
79
97
  function _shake256(buf, outLen) { return nodeCrypto.createHash("shake256", { outputLength: outLen }).update(buf).digest(); }