@blamejs/blamejs-shop 0.5.12 → 0.5.14

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 (522) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/lib/asset-manifest.json +1 -1
  3. package/lib/sales-tax-filings.js +143 -0
  4. package/lib/vendor/MANIFEST.json +632 -416
  5. package/lib/vendor/blamejs/.clusterfuzzlite/Dockerfile +21 -10
  6. package/lib/vendor/blamejs/.clusterfuzzlite/build.sh +30 -9
  7. package/lib/vendor/blamejs/.github/dependabot.yml +8 -0
  8. package/lib/vendor/blamejs/.github/workflows/actions-lint.yml +3 -3
  9. package/lib/vendor/blamejs/.github/workflows/cflite_batch.yml +7 -2
  10. package/lib/vendor/blamejs/.github/workflows/cflite_pr.yml +7 -2
  11. package/lib/vendor/blamejs/.github/workflows/ci.yml +21 -21
  12. package/lib/vendor/blamejs/.github/workflows/codeql.yml +3 -3
  13. package/lib/vendor/blamejs/.github/workflows/npm-publish.yml +4 -4
  14. package/lib/vendor/blamejs/.github/workflows/release-container.yml +7 -7
  15. package/lib/vendor/blamejs/.github/workflows/scorecard.yml +3 -3
  16. package/lib/vendor/blamejs/.github/workflows/sha-to-tag-verify.yml +1 -1
  17. package/lib/vendor/blamejs/.gitignore +2 -0
  18. package/lib/vendor/blamejs/CHANGELOG.md +122 -0
  19. package/lib/vendor/blamejs/NOTICE +26 -1
  20. package/lib/vendor/blamejs/SECURITY.md +1 -1
  21. package/lib/vendor/blamejs/api-snapshot.json +207 -5
  22. package/lib/vendor/blamejs/docker/keycloak/realm-blamejs-test.json +29 -0
  23. package/lib/vendor/blamejs/examples/wiki/DEPLOY.md +1 -0
  24. package/lib/vendor/blamejs/examples/wiki/lib/build-app.js +31 -0
  25. package/lib/vendor/blamejs/examples/wiki/lib/source-comment-block-validator.js +109 -0
  26. package/lib/vendor/blamejs/examples/wiki/nginx.conf +106 -0
  27. package/lib/vendor/blamejs/examples/wiki/package-lock.json +1 -1
  28. package/lib/vendor/blamejs/examples/wiki/test/e2e.js +92 -0
  29. package/lib/vendor/blamejs/fuzz/asn1-der.fuzz.js +28 -0
  30. package/lib/vendor/blamejs/fuzz/cms-codec.fuzz.js +17 -0
  31. package/lib/vendor/blamejs/fuzz/link-header.fuzz.js +18 -0
  32. package/lib/vendor/blamejs/index.js +6 -0
  33. package/lib/vendor/blamejs/lib/a2a.js +4 -4
  34. package/lib/vendor/blamejs/lib/agent-idempotency.js +18 -2
  35. package/lib/vendor/blamejs/lib/agent-saga.js +36 -8
  36. package/lib/vendor/blamejs/lib/agent-snapshot.js +63 -6
  37. package/lib/vendor/blamejs/lib/app-shutdown.js +23 -20
  38. package/lib/vendor/blamejs/lib/archive-read.js +8 -0
  39. package/lib/vendor/blamejs/lib/archive-tar.js +12 -2
  40. package/lib/vendor/blamejs/lib/arg-parser.js +49 -5
  41. package/lib/vendor/blamejs/lib/asn1-der.js +12 -0
  42. package/lib/vendor/blamejs/lib/audit-sign.js +47 -1
  43. package/lib/vendor/blamejs/lib/audit.js +71 -8
  44. package/lib/vendor/blamejs/lib/auth/ciba.js +14 -2
  45. package/lib/vendor/blamejs/lib/auth/fido-mds3.js +58 -47
  46. package/lib/vendor/blamejs/lib/auth/jwt.js +34 -0
  47. package/lib/vendor/blamejs/lib/auth/oauth.js +90 -13
  48. package/lib/vendor/blamejs/lib/auth/oid4vci.js +20 -17
  49. package/lib/vendor/blamejs/lib/auth/openid-federation.js +214 -23
  50. package/lib/vendor/blamejs/lib/auth/saml.js +38 -20
  51. package/lib/vendor/blamejs/lib/auth/sd-jwt-vc.js +10 -4
  52. package/lib/vendor/blamejs/lib/backup/bundle.js +13 -3
  53. package/lib/vendor/blamejs/lib/backup/index.js +16 -5
  54. package/lib/vendor/blamejs/lib/backup/manifest.js +18 -5
  55. package/lib/vendor/blamejs/lib/base32.js +21 -0
  56. package/lib/vendor/blamejs/lib/break-glass.js +19 -10
  57. package/lib/vendor/blamejs/lib/bundler.js +5 -1
  58. package/lib/vendor/blamejs/lib/cache-status.js +3 -7
  59. package/lib/vendor/blamejs/lib/calendar.js +21 -1
  60. package/lib/vendor/blamejs/lib/cbor.js +12 -1
  61. package/lib/vendor/blamejs/lib/cert.js +29 -11
  62. package/lib/vendor/blamejs/lib/cli.js +94 -24
  63. package/lib/vendor/blamejs/lib/cloud-events.js +2 -2
  64. package/lib/vendor/blamejs/lib/cluster-provider-db.js +13 -3
  65. package/lib/vendor/blamejs/lib/codepoint-class.js +85 -0
  66. package/lib/vendor/blamejs/lib/compliance-ai-act-prohibited.js +8 -4
  67. package/lib/vendor/blamejs/lib/compliance-ai-act-transparency.js +19 -4
  68. package/lib/vendor/blamejs/lib/compliance-ai-act.js +6 -8
  69. package/lib/vendor/blamejs/lib/content-credentials.js +1 -1
  70. package/lib/vendor/blamejs/lib/content-digest.js +2 -1
  71. package/lib/vendor/blamejs/lib/cookies.js +13 -3
  72. package/lib/vendor/blamejs/lib/cose.js +31 -16
  73. package/lib/vendor/blamejs/lib/crypto-field.js +32 -0
  74. package/lib/vendor/blamejs/lib/crypto-oprf.js +11 -2
  75. package/lib/vendor/blamejs/lib/crypto-xwing.js +22 -4
  76. package/lib/vendor/blamejs/lib/crypto.js +314 -19
  77. package/lib/vendor/blamejs/lib/csp.js +11 -3
  78. package/lib/vendor/blamejs/lib/daemon.js +270 -24
  79. package/lib/vendor/blamejs/lib/dark-patterns.js +5 -2
  80. package/lib/vendor/blamejs/lib/db-declare-view.js +2 -2
  81. package/lib/vendor/blamejs/lib/db-query.js +34 -7
  82. package/lib/vendor/blamejs/lib/db.js +18 -6
  83. package/lib/vendor/blamejs/lib/dbsc.js +17 -0
  84. package/lib/vendor/blamejs/lib/dev.js +21 -2
  85. package/lib/vendor/blamejs/lib/dsr.js +157 -102
  86. package/lib/vendor/blamejs/lib/external-db.js +41 -2
  87. package/lib/vendor/blamejs/lib/file-upload.js +25 -7
  88. package/lib/vendor/blamejs/lib/flag-providers.js +27 -15
  89. package/lib/vendor/blamejs/lib/forms.js +113 -27
  90. package/lib/vendor/blamejs/lib/gate-contract.js +23 -10
  91. package/lib/vendor/blamejs/lib/gdpr-ropa.js +8 -1
  92. package/lib/vendor/blamejs/lib/guard-agent-registry.js +1 -1
  93. package/lib/vendor/blamejs/lib/guard-archive.js +2 -2
  94. package/lib/vendor/blamejs/lib/guard-cidr.js +27 -1
  95. package/lib/vendor/blamejs/lib/guard-graphql.js +30 -11
  96. package/lib/vendor/blamejs/lib/guard-html.js +26 -53
  97. package/lib/vendor/blamejs/lib/guard-image.js +24 -5
  98. package/lib/vendor/blamejs/lib/guard-imap-command.js +10 -2
  99. package/lib/vendor/blamejs/lib/guard-jmap.js +19 -3
  100. package/lib/vendor/blamejs/lib/guard-jwt.js +18 -2
  101. package/lib/vendor/blamejs/lib/guard-list-unsubscribe.js +2 -2
  102. package/lib/vendor/blamejs/lib/guard-managesieve-command.js +10 -2
  103. package/lib/vendor/blamejs/lib/guard-markdown.js +11 -24
  104. package/lib/vendor/blamejs/lib/guard-pdf.js +18 -2
  105. package/lib/vendor/blamejs/lib/guard-pop3-command.js +10 -2
  106. package/lib/vendor/blamejs/lib/guard-regex.js +8 -5
  107. package/lib/vendor/blamejs/lib/guard-svg.js +31 -32
  108. package/lib/vendor/blamejs/lib/guard-time.js +1 -1
  109. package/lib/vendor/blamejs/lib/guard-uuid.js +2 -2
  110. package/lib/vendor/blamejs/lib/html-balance.js +3 -3
  111. package/lib/vendor/blamejs/lib/http-client-cache.js +82 -4
  112. package/lib/vendor/blamejs/lib/http-client-cookie-jar.js +16 -1
  113. package/lib/vendor/blamejs/lib/http-client.js +39 -7
  114. package/lib/vendor/blamejs/lib/http-message-signature.js +35 -1
  115. package/lib/vendor/blamejs/lib/i18n-messageformat.js +31 -6
  116. package/lib/vendor/blamejs/lib/i18n.js +35 -21
  117. package/lib/vendor/blamejs/lib/incident-report.js +8 -1
  118. package/lib/vendor/blamejs/lib/ip-utils.js +11 -1
  119. package/lib/vendor/blamejs/lib/json-path.js +23 -1
  120. package/lib/vendor/blamejs/lib/jwk.js +20 -3
  121. package/lib/vendor/blamejs/lib/link-header.js +2 -1
  122. package/lib/vendor/blamejs/lib/log-stream-otlp-grpc.js +5 -1
  123. package/lib/vendor/blamejs/lib/log-stream-otlp.js +5 -1
  124. package/lib/vendor/blamejs/lib/log-stream.js +8 -3
  125. package/lib/vendor/blamejs/lib/mail-auth.js +123 -22
  126. package/lib/vendor/blamejs/lib/mail-bimi.js +1 -1
  127. package/lib/vendor/blamejs/lib/mail-bounce.js +8 -0
  128. package/lib/vendor/blamejs/lib/mail-crypto-pgp.js +46 -10
  129. package/lib/vendor/blamejs/lib/mail-dav.js +22 -3
  130. package/lib/vendor/blamejs/lib/mail-dkim.js +96 -30
  131. package/lib/vendor/blamejs/lib/mail-helo.js +6 -1
  132. package/lib/vendor/blamejs/lib/mail-scan.js +23 -16
  133. package/lib/vendor/blamejs/lib/mail-send-deliver.js +34 -8
  134. package/lib/vendor/blamejs/lib/mail-server-imap.js +3 -4
  135. package/lib/vendor/blamejs/lib/mail-server-managesieve.js +7 -11
  136. package/lib/vendor/blamejs/lib/mail-server-mx.js +93 -7
  137. package/lib/vendor/blamejs/lib/mail-server-registry.js +8 -2
  138. package/lib/vendor/blamejs/lib/mail.js +15 -5
  139. package/lib/vendor/blamejs/lib/metrics.js +268 -63
  140. package/lib/vendor/blamejs/lib/middleware/age-gate.js +7 -1
  141. package/lib/vendor/blamejs/lib/middleware/asyncapi-serve.js +1 -1
  142. package/lib/vendor/blamejs/lib/middleware/body-parser.js +19 -4
  143. package/lib/vendor/blamejs/lib/middleware/bot-guard.js +5 -9
  144. package/lib/vendor/blamejs/lib/middleware/csp-report.js +40 -8
  145. package/lib/vendor/blamejs/lib/middleware/csrf-protect.js +24 -10
  146. package/lib/vendor/blamejs/lib/middleware/dpop.js +10 -5
  147. package/lib/vendor/blamejs/lib/middleware/index.js +6 -1
  148. package/lib/vendor/blamejs/lib/middleware/nel.js +1 -1
  149. package/lib/vendor/blamejs/lib/middleware/openapi-serve.js +1 -1
  150. package/lib/vendor/blamejs/lib/middleware/rate-limit.js +12 -1
  151. package/lib/vendor/blamejs/lib/middleware/require-bound-key.js +1 -1
  152. package/lib/vendor/blamejs/lib/middleware/scim-server.js +1 -1
  153. package/lib/vendor/blamejs/lib/middleware/tus-upload.js +6 -2
  154. package/lib/vendor/blamejs/lib/mtls-ca.js +18 -2
  155. package/lib/vendor/blamejs/lib/network-dns-resolver.js +11 -1
  156. package/lib/vendor/blamejs/lib/network-dns.js +21 -2
  157. package/lib/vendor/blamejs/lib/network-tls.js +69 -7
  158. package/lib/vendor/blamejs/lib/nonce-store.js +9 -1
  159. package/lib/vendor/blamejs/lib/object-store/gcs.js +7 -0
  160. package/lib/vendor/blamejs/lib/object-store/sigv4.js +31 -0
  161. package/lib/vendor/blamejs/lib/observability-otlp-exporter.js +1 -1
  162. package/lib/vendor/blamejs/lib/outbox.js +1 -1
  163. package/lib/vendor/blamejs/lib/parsers/safe-ini.js +9 -1
  164. package/lib/vendor/blamejs/lib/parsers/safe-toml.js +10 -1
  165. package/lib/vendor/blamejs/lib/permissions.js +6 -3
  166. package/lib/vendor/blamejs/lib/pid-probe.js +55 -0
  167. package/lib/vendor/blamejs/lib/pqc-agent.js +8 -1
  168. package/lib/vendor/blamejs/lib/pqc-software.js +3 -3
  169. package/lib/vendor/blamejs/lib/pubsub.js +20 -9
  170. package/lib/vendor/blamejs/lib/queue-local.js +8 -1
  171. package/lib/vendor/blamejs/lib/queue-redis.js +5 -0
  172. package/lib/vendor/blamejs/lib/redact.js +54 -0
  173. package/lib/vendor/blamejs/lib/restore-bundle.js +10 -2
  174. package/lib/vendor/blamejs/lib/restore.js +19 -0
  175. package/lib/vendor/blamejs/lib/retention.js +12 -4
  176. package/lib/vendor/blamejs/lib/router.js +60 -6
  177. package/lib/vendor/blamejs/lib/safe-buffer.js +69 -0
  178. package/lib/vendor/blamejs/lib/safe-decompress.js +8 -2
  179. package/lib/vendor/blamejs/lib/safe-dns.js +25 -20
  180. package/lib/vendor/blamejs/lib/safe-ical.js +7 -3
  181. package/lib/vendor/blamejs/lib/safe-mime.js +12 -1
  182. package/lib/vendor/blamejs/lib/safe-object.js +80 -0
  183. package/lib/vendor/blamejs/lib/safe-path.js +52 -4
  184. package/lib/vendor/blamejs/lib/safe-redirect.js +10 -2
  185. package/lib/vendor/blamejs/lib/safe-schema.js +4 -1
  186. package/lib/vendor/blamejs/lib/safe-sieve.js +33 -1
  187. package/lib/vendor/blamejs/lib/safe-sql.js +88 -0
  188. package/lib/vendor/blamejs/lib/safe-vcard.js +7 -3
  189. package/lib/vendor/blamejs/lib/scheduler.js +8 -1
  190. package/lib/vendor/blamejs/lib/security-assert.js +6 -6
  191. package/lib/vendor/blamejs/lib/self-update-standalone-verifier.js +74 -27
  192. package/lib/vendor/blamejs/lib/self-update.js +517 -87
  193. package/lib/vendor/blamejs/lib/server-timing.js +2 -4
  194. package/lib/vendor/blamejs/lib/session.js +34 -12
  195. package/lib/vendor/blamejs/lib/sql.js +15 -1
  196. package/lib/vendor/blamejs/lib/ssrf-guard.js +52 -0
  197. package/lib/vendor/blamejs/lib/static.js +55 -13
  198. package/lib/vendor/blamejs/lib/storage.js +8 -2
  199. package/lib/vendor/blamejs/lib/subject.js +6 -1
  200. package/lib/vendor/blamejs/lib/tenant-quota.js +52 -13
  201. package/lib/vendor/blamejs/lib/tls-exporter.js +3 -3
  202. package/lib/vendor/blamejs/lib/tsa.js +34 -13
  203. package/lib/vendor/blamejs/lib/uri-template.js +8 -1
  204. package/lib/vendor/blamejs/lib/vault/index.js +13 -0
  205. package/lib/vendor/blamejs/lib/vc.js +44 -5
  206. package/lib/vendor/blamejs/lib/vendor/MANIFEST.json +26 -26
  207. package/lib/vendor/blamejs/lib/vendor/noble-ciphers.cjs +792 -1
  208. package/lib/vendor/blamejs/lib/vendor/noble-curves.cjs +3443 -1
  209. package/lib/vendor/blamejs/lib/vendor/noble-post-quantum.cjs +2737 -1
  210. package/lib/vendor/blamejs/lib/vendor/pki.cjs +39550 -13
  211. package/lib/vendor/blamejs/lib/vendor/public-suffix-list.dat +55 -53
  212. package/lib/vendor/blamejs/lib/vendor/public-suffix-list.data.js +5551 -5554
  213. package/lib/vendor/blamejs/lib/vendor/simplewebauthn-server.cjs +22459 -32
  214. package/lib/vendor/blamejs/lib/watcher.js +89 -17
  215. package/lib/vendor/blamejs/lib/webhook-dispatcher.js +25 -3
  216. package/lib/vendor/blamejs/lib/webhook.js +12 -2
  217. package/lib/vendor/blamejs/lib/ws-client.js +32 -1
  218. package/lib/vendor/blamejs/lib/xml-c14n.js +29 -1
  219. package/lib/vendor/blamejs/oss-fuzz/projects/blamejs/Dockerfile +1 -1
  220. package/lib/vendor/blamejs/package-lock.json +2 -2
  221. package/lib/vendor/blamejs/package.json +1 -1
  222. package/lib/vendor/blamejs/release-notes/v0.16.x.json +1462 -0
  223. package/lib/vendor/blamejs/release-notes/v0.17.0.json +31 -0
  224. package/lib/vendor/blamejs/release-notes/v0.17.1.json +31 -0
  225. package/lib/vendor/blamejs/release-notes/v0.17.10.json +30 -0
  226. package/lib/vendor/blamejs/release-notes/v0.17.11.json +22 -0
  227. package/lib/vendor/blamejs/release-notes/v0.17.12.json +18 -0
  228. package/lib/vendor/blamejs/release-notes/v0.17.13.json +77 -0
  229. package/lib/vendor/blamejs/release-notes/v0.17.14.json +40 -0
  230. package/lib/vendor/blamejs/release-notes/v0.17.15.json +18 -0
  231. package/lib/vendor/blamejs/release-notes/v0.17.16.json +27 -0
  232. package/lib/vendor/blamejs/release-notes/v0.17.17.json +31 -0
  233. package/lib/vendor/blamejs/release-notes/v0.17.18.json +18 -0
  234. package/lib/vendor/blamejs/release-notes/v0.17.19.json +18 -0
  235. package/lib/vendor/blamejs/release-notes/v0.17.2.json +26 -0
  236. package/lib/vendor/blamejs/release-notes/v0.17.20.json +43 -0
  237. package/lib/vendor/blamejs/release-notes/v0.17.21.json +26 -0
  238. package/lib/vendor/blamejs/release-notes/v0.17.22.json +18 -0
  239. package/lib/vendor/blamejs/release-notes/v0.17.3.json +43 -0
  240. package/lib/vendor/blamejs/release-notes/v0.17.4.json +35 -0
  241. package/lib/vendor/blamejs/release-notes/v0.17.5.json +26 -0
  242. package/lib/vendor/blamejs/release-notes/v0.17.6.json +26 -0
  243. package/lib/vendor/blamejs/release-notes/v0.17.7.json +35 -0
  244. package/lib/vendor/blamejs/release-notes/v0.17.8.json +22 -0
  245. package/lib/vendor/blamejs/release-notes/v0.17.9.json +26 -0
  246. package/lib/vendor/blamejs/scripts/validate-source-comment-blocks.js +4 -0
  247. package/lib/vendor/blamejs/scripts/vendor-update.sh +293 -9
  248. package/lib/vendor/blamejs/socket.yml +94 -0
  249. package/lib/vendor/blamejs/test/00-primitives.js +605 -0
  250. package/lib/vendor/blamejs/test/helpers/drivers.js +12 -9
  251. package/lib/vendor/blamejs/test/integration/audit-stack-mysql.test.js +90 -1
  252. package/lib/vendor/blamejs/test/integration/audit-stack-postgres.test.js +122 -1
  253. package/lib/vendor/blamejs/test/integration/data-layer-mysql.test.js +30 -0
  254. package/lib/vendor/blamejs/test/integration/data-layer-pg.test.js +29 -0
  255. package/lib/vendor/blamejs/test/integration/dsr-cluster-mysql.test.js +479 -0
  256. package/lib/vendor/blamejs/test/integration/dsr-cluster-pg.test.js +487 -0
  257. package/lib/vendor/blamejs/test/integration/federation-auth.test.js +313 -5
  258. package/lib/vendor/blamejs/test/integration/mail-dkim.test.js +80 -0
  259. package/lib/vendor/blamejs/test/integration/openid-federation-chain.test.js +275 -0
  260. package/lib/vendor/blamejs/test/integration/webhook-dispatcher-pg.test.js +96 -0
  261. package/lib/vendor/blamejs/test/layer-0-primitives/a2a-tasks.test.js +401 -0
  262. package/lib/vendor/blamejs/test/layer-0-primitives/acme.test.js +1649 -2
  263. package/lib/vendor/blamejs/test/layer-0-primitives/age-gate.test.js +33 -0
  264. package/lib/vendor/blamejs/test/layer-0-primitives/agent-idempotency.test.js +0 -0
  265. package/lib/vendor/blamejs/test/layer-0-primitives/agent-saga.test.js +60 -0
  266. package/lib/vendor/blamejs/test/layer-0-primitives/agent-snapshot.test.js +524 -0
  267. package/lib/vendor/blamejs/test/layer-0-primitives/api-encrypt.test.js +891 -0
  268. package/lib/vendor/blamejs/test/layer-0-primitives/app-shutdown.test.js +128 -1
  269. package/lib/vendor/blamejs/test/layer-0-primitives/archive-adapters.test.js +271 -0
  270. package/lib/vendor/blamejs/test/layer-0-primitives/archive-read.test.js +628 -1
  271. package/lib/vendor/blamejs/test/layer-0-primitives/archive-tar-read.test.js +0 -0
  272. package/lib/vendor/blamejs/test/layer-0-primitives/archive-wrap.test.js +227 -0
  273. package/lib/vendor/blamejs/test/layer-0-primitives/arg-parser.test.js +15 -0
  274. package/lib/vendor/blamejs/test/layer-0-primitives/asn1-der.test.js +73 -0
  275. package/lib/vendor/blamejs/test/layer-0-primitives/atomic-file.test.js +114 -0
  276. package/lib/vendor/blamejs/test/layer-0-primitives/audit-sign-anchor.test.js +141 -0
  277. package/lib/vendor/blamejs/test/layer-0-primitives/audit-tools.test.js +624 -0
  278. package/lib/vendor/blamejs/test/layer-0-primitives/audit.test.js +769 -0
  279. package/lib/vendor/blamejs/test/layer-0-primitives/auth-jwt-defenses.test.js +436 -0
  280. package/lib/vendor/blamejs/test/layer-0-primitives/auth-oauth.test.js +1697 -0
  281. package/lib/vendor/blamejs/test/layer-0-primitives/auth-oid4vp.test.js +495 -0
  282. package/lib/vendor/blamejs/test/layer-0-primitives/auth-password.test.js +500 -0
  283. package/lib/vendor/blamejs/test/layer-0-primitives/auth-saml.test.js +1809 -0
  284. package/lib/vendor/blamejs/test/layer-0-primitives/auth-status-list.test.js +243 -1
  285. package/lib/vendor/blamejs/test/layer-0-primitives/backup-index.test.js +2226 -0
  286. package/lib/vendor/blamejs/test/layer-0-primitives/backup-manifest-signature.test.js +183 -0
  287. package/lib/vendor/blamejs/test/layer-0-primitives/base32.test.js +105 -0
  288. package/lib/vendor/blamejs/test/layer-0-primitives/break-glass.test.js +693 -0
  289. package/lib/vendor/blamejs/test/layer-0-primitives/cache.test.js +603 -0
  290. package/lib/vendor/blamejs/test/layer-0-primitives/calendar.test.js +557 -0
  291. package/lib/vendor/blamejs/test/layer-0-primitives/case-insensitive-security-token-guard.test.js +214 -0
  292. package/lib/vendor/blamejs/test/layer-0-primitives/cbor.test.js +25 -0
  293. package/lib/vendor/blamejs/test/layer-0-primitives/cert.test.js +843 -6
  294. package/lib/vendor/blamejs/test/layer-0-primitives/ciba-authreqid-binding.test.js +77 -2
  295. package/lib/vendor/blamejs/test/layer-0-primitives/ciba.test.js +866 -0
  296. package/lib/vendor/blamejs/test/layer-0-primitives/clear-site-data.test.js +18 -0
  297. package/lib/vendor/blamejs/test/layer-0-primitives/cli-erase.test.js +19 -0
  298. package/lib/vendor/blamejs/test/layer-0-primitives/cli.test.js +2790 -0
  299. package/lib/vendor/blamejs/test/layer-0-primitives/cluster-lease-renewal-ttl.test.js +114 -0
  300. package/lib/vendor/blamejs/test/layer-0-primitives/cluster.test.js +1032 -0
  301. package/lib/vendor/blamejs/test/layer-0-primitives/cms-codec.test.js +575 -0
  302. package/lib/vendor/blamejs/test/layer-0-primitives/codebase-patterns.test.js +739 -1
  303. package/lib/vendor/blamejs/test/layer-0-primitives/codepoint-class.test.js +8 -0
  304. package/lib/vendor/blamejs/test/layer-0-primitives/compliance-ai-act.test.js +194 -0
  305. package/lib/vendor/blamejs/test/layer-0-primitives/compliance-lifecycle-proto-key.test.js +104 -0
  306. package/lib/vendor/blamejs/test/layer-0-primitives/compliance-sanctions.test.js +254 -0
  307. package/lib/vendor/blamejs/test/layer-0-primitives/content-credentials.test.js +613 -3
  308. package/lib/vendor/blamejs/test/layer-0-primitives/cookies.test.js +140 -0
  309. package/lib/vendor/blamejs/test/layer-0-primitives/cose.test.js +407 -0
  310. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-adversarial.test.js +352 -0
  311. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-field-derived-hash.test.js +32 -0
  312. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-field.test.js +575 -0
  313. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-hash-files-parallel.test.js +10 -0
  314. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-hash-stream.test.js +24 -0
  315. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-oprf.test.js +17 -0
  316. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-spki-pin.test.js +183 -0
  317. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-xwing.test.js +48 -0
  318. package/lib/vendor/blamejs/test/layer-0-primitives/crypto.test.js +345 -0
  319. package/lib/vendor/blamejs/test/layer-0-primitives/csp-report.test.js +58 -0
  320. package/lib/vendor/blamejs/test/layer-0-primitives/csv.test.js +48 -0
  321. package/lib/vendor/blamejs/test/layer-0-primitives/daemon.test.js +459 -1
  322. package/lib/vendor/blamejs/test/layer-0-primitives/dark-patterns.test.js +19 -0
  323. package/lib/vendor/blamejs/test/layer-0-primitives/db-query.test.js +1019 -0
  324. package/lib/vendor/blamejs/test/layer-0-primitives/db-raw-residency-gate.test.js +77 -0
  325. package/lib/vendor/blamejs/test/layer-0-primitives/db.test.js +1621 -0
  326. package/lib/vendor/blamejs/test/layer-0-primitives/ddl-change-control.test.js +462 -3
  327. package/lib/vendor/blamejs/test/layer-0-primitives/dnssec.test.js +323 -0
  328. package/lib/vendor/blamejs/test/layer-0-primitives/dpop-middleware-verify.test.js +562 -0
  329. package/lib/vendor/blamejs/test/layer-0-primitives/dsr.test.js +901 -1
  330. package/lib/vendor/blamejs/test/layer-0-primitives/dual-control.test.js +249 -0
  331. package/lib/vendor/blamejs/test/layer-0-primitives/external-db-migrate.test.js +561 -0
  332. package/lib/vendor/blamejs/test/layer-0-primitives/external-db.test.js +1214 -0
  333. package/lib/vendor/blamejs/test/layer-0-primitives/fal.test.js +21 -0
  334. package/lib/vendor/blamejs/test/layer-0-primitives/fedcm-dbsc.test.js +46 -20
  335. package/lib/vendor/blamejs/test/layer-0-primitives/federation-vc-suite.test.js +147 -3
  336. package/lib/vendor/blamejs/test/layer-0-primitives/fido-mds3.test.js +907 -38
  337. package/lib/vendor/blamejs/test/layer-0-primitives/file-upload-content-safety-skip-audit.test.js +29 -0
  338. package/lib/vendor/blamejs/test/layer-0-primitives/file-upload.test.js +1135 -0
  339. package/lib/vendor/blamejs/test/layer-0-primitives/flag.test.js +30 -0
  340. package/lib/vendor/blamejs/test/layer-0-primitives/forms.test.js +747 -0
  341. package/lib/vendor/blamejs/test/layer-0-primitives/gate-contract.test.js +1855 -0
  342. package/lib/vendor/blamejs/test/layer-0-primitives/gdpr-ropa.test.js +30 -0
  343. package/lib/vendor/blamejs/test/layer-0-primitives/guard-archive.test.js +86 -0
  344. package/lib/vendor/blamejs/test/layer-0-primitives/guard-auth.test.js +117 -0
  345. package/lib/vendor/blamejs/test/layer-0-primitives/guard-cidr.test.js +151 -0
  346. package/lib/vendor/blamejs/test/layer-0-primitives/guard-domain.test.js +422 -0
  347. package/lib/vendor/blamejs/test/layer-0-primitives/guard-filename.test.js +424 -0
  348. package/lib/vendor/blamejs/test/layer-0-primitives/{guard-gate-disposition-coverage.test.js → guard-gate-disposition.test.js} +1 -1
  349. package/lib/vendor/blamejs/test/layer-0-primitives/guard-graphql.test.js +340 -0
  350. package/lib/vendor/blamejs/test/layer-0-primitives/guard-html.test.js +29 -0
  351. package/lib/vendor/blamejs/test/layer-0-primitives/guard-idempotency-key.test.js +28 -0
  352. package/lib/vendor/blamejs/test/layer-0-primitives/guard-image.test.js +519 -45
  353. package/lib/vendor/blamejs/test/layer-0-primitives/guard-imap-command.test.js +0 -0
  354. package/lib/vendor/blamejs/test/layer-0-primitives/guard-jmap.test.js +51 -0
  355. package/lib/vendor/blamejs/test/layer-0-primitives/guard-jsonpath.test.js +66 -0
  356. package/lib/vendor/blamejs/test/layer-0-primitives/guard-jwt.test.js +436 -0
  357. package/lib/vendor/blamejs/test/layer-0-primitives/guard-managesieve-command.test.js +25 -0
  358. package/lib/vendor/blamejs/test/layer-0-primitives/guard-markdown.test.js +16 -0
  359. package/lib/vendor/blamejs/test/layer-0-primitives/guard-mime.test.js +86 -0
  360. package/lib/vendor/blamejs/test/layer-0-primitives/guard-oauth.test.js +140 -0
  361. package/lib/vendor/blamejs/test/layer-0-primitives/guard-pdf.test.js +80 -0
  362. package/lib/vendor/blamejs/test/layer-0-primitives/guard-pop3-command.test.js +27 -0
  363. package/lib/vendor/blamejs/test/layer-0-primitives/guard-regex.test.js +99 -0
  364. package/lib/vendor/blamejs/test/layer-0-primitives/guard-shell.test.js +76 -0
  365. package/lib/vendor/blamejs/test/layer-0-primitives/{guard-sql-coverage.test.js → guard-sql.test.js} +3 -3
  366. package/lib/vendor/blamejs/test/layer-0-primitives/guard-svg.test.js +524 -0
  367. package/lib/vendor/blamejs/test/layer-0-primitives/guard-template.test.js +71 -0
  368. package/lib/vendor/blamejs/test/layer-0-primitives/guard-time.test.js +92 -0
  369. package/lib/vendor/blamejs/test/layer-0-primitives/guard-uuid.test.js +86 -0
  370. package/lib/vendor/blamejs/test/layer-0-primitives/html-balance.test.js +38 -0
  371. package/lib/vendor/blamejs/test/layer-0-primitives/http-client-cache-authorization.test.js +347 -0
  372. package/lib/vendor/blamejs/test/layer-0-primitives/http-client-cache.test.js +908 -0
  373. package/lib/vendor/blamejs/test/layer-0-primitives/http-client.test.js +2874 -0
  374. package/lib/vendor/blamejs/test/layer-0-primitives/http-message-signature.test.js +643 -0
  375. package/lib/vendor/blamejs/test/layer-0-primitives/i18n-messageformat.test.js +38 -0
  376. package/lib/vendor/blamejs/test/layer-0-primitives/i18n.test.js +1153 -1
  377. package/lib/vendor/blamejs/test/layer-0-primitives/idempotency-key.test.js +494 -0
  378. package/lib/vendor/blamejs/test/layer-0-primitives/ip-utils.test.js +30 -0
  379. package/lib/vendor/blamejs/test/layer-0-primitives/jsdoc-example-execution.test.js +177 -0
  380. package/lib/vendor/blamejs/test/layer-0-primitives/json-path.test.js +103 -0
  381. package/lib/vendor/blamejs/test/layer-0-primitives/json-schema.test.js +214 -0
  382. package/lib/vendor/blamejs/test/layer-0-primitives/jwk.test.js +41 -0
  383. package/lib/vendor/blamejs/test/layer-0-primitives/jwt-external.test.js +276 -0
  384. package/lib/vendor/blamejs/test/layer-0-primitives/keychain.test.js +0 -0
  385. package/lib/vendor/blamejs/test/layer-0-primitives/log-stream.test.js +241 -0
  386. package/lib/vendor/blamejs/test/layer-0-primitives/log.test.js +106 -0
  387. package/lib/vendor/blamejs/test/layer-0-primitives/mail-agent.test.js +441 -0
  388. package/lib/vendor/blamejs/test/layer-0-primitives/mail-auth.test.js +2136 -4
  389. package/lib/vendor/blamejs/test/layer-0-primitives/mail-bimi.test.js +759 -12
  390. package/lib/vendor/blamejs/test/layer-0-primitives/mail-bounce.test.js +811 -1
  391. package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto-pgp-experimental.test.js +401 -3
  392. package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto-pgp.test.js +751 -8
  393. package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto-smime.test.js +864 -0
  394. package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto.test.js +110 -0
  395. package/lib/vendor/blamejs/test/layer-0-primitives/mail-dav.test.js +830 -1
  396. package/lib/vendor/blamejs/test/layer-0-primitives/mail-deploy.test.js +635 -86
  397. package/lib/vendor/blamejs/test/layer-0-primitives/mail-dkim.test.js +818 -0
  398. package/lib/vendor/blamejs/test/layer-0-primitives/mail-helo.test.js +27 -0
  399. package/lib/vendor/blamejs/test/layer-0-primitives/mail-scan.test.js +199 -0
  400. package/lib/vendor/blamejs/test/layer-0-primitives/mail-send-deliver.test.js +686 -2
  401. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-imap.test.js +778 -0
  402. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-jmap.test.js +1438 -0
  403. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-managesieve.test.js +449 -6
  404. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-mx.test.js +773 -2
  405. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-pop3.test.js +623 -3
  406. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-rate-limit.test.js +55 -0
  407. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-registry.test.js +13 -0
  408. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-submission.test.js +877 -1
  409. package/lib/vendor/blamejs/test/layer-0-primitives/mail-sieve.test.js +326 -0
  410. package/lib/vendor/blamejs/test/layer-0-primitives/mail-store-fts.test.js +55 -0
  411. package/lib/vendor/blamejs/test/layer-0-primitives/mail-store.test.js +242 -0
  412. package/lib/vendor/blamejs/test/layer-0-primitives/mail.test.js +1596 -2
  413. package/lib/vendor/blamejs/test/layer-0-primitives/mcp.test.js +440 -4
  414. package/lib/vendor/blamejs/test/layer-0-primitives/metrics-snapshot.test.js +89 -0
  415. package/lib/vendor/blamejs/test/layer-0-primitives/metrics.test.js +1230 -0
  416. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-assetlinks.test.js +113 -0
  417. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-body-parser.test.js +1169 -0
  418. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-bot-disclose.test.js +123 -0
  419. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-cookies.test.js +108 -0
  420. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-gpc.test.js +121 -0
  421. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-headers.test.js +163 -0
  422. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-host-allowlist.test.js +154 -0
  423. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-require-content-type.test.js +127 -0
  424. package/lib/vendor/blamejs/test/layer-0-primitives/{middleware-tus-upload-coverage.test.js → middleware-tus-upload.test.js} +45 -0
  425. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-web-app-manifest.test.js +132 -0
  426. package/lib/vendor/blamejs/test/layer-0-primitives/mtls-ca-crl-fingerprint-only.test.js +92 -0
  427. package/lib/vendor/blamejs/test/layer-0-primitives/network-dns-resolver.test.js +65 -0
  428. package/lib/vendor/blamejs/test/layer-0-primitives/network-dns.test.js +1727 -1
  429. package/lib/vendor/blamejs/test/layer-0-primitives/network-nts.test.js +699 -0
  430. package/lib/vendor/blamejs/test/layer-0-primitives/network-smtp-policy.test.js +1181 -0
  431. package/lib/vendor/blamejs/test/layer-0-primitives/network-tls.test.js +1876 -3
  432. package/lib/vendor/blamejs/test/layer-0-primitives/network.test.js +32 -0
  433. package/lib/vendor/blamejs/test/layer-0-primitives/nonce-store-enforce-replay-nonboolean.test.js +81 -0
  434. package/lib/vendor/blamejs/test/layer-0-primitives/ntp-check.test.js +122 -0
  435. package/lib/vendor/blamejs/test/layer-0-primitives/observability-tracing.test.js +378 -0
  436. package/lib/vendor/blamejs/test/layer-0-primitives/observability.test.js +77 -0
  437. package/lib/vendor/blamejs/test/layer-0-primitives/oid4vci.test.js +1016 -0
  438. package/lib/vendor/blamejs/test/layer-0-primitives/openid-federation.test.js +946 -0
  439. package/lib/vendor/blamejs/test/layer-0-primitives/outbox.test.js +818 -0
  440. package/lib/vendor/blamejs/test/layer-0-primitives/own-property-membership-guards.test.js +109 -0
  441. package/lib/vendor/blamejs/test/layer-0-primitives/parsers-safe-toml.test.js +543 -0
  442. package/lib/vendor/blamejs/test/layer-0-primitives/{parsers-safe-yaml-coverage.test.js → parsers-safe-yaml.test.js} +2 -2
  443. package/lib/vendor/blamejs/test/layer-0-primitives/parsers-standalone.test.js +73 -0
  444. package/lib/vendor/blamejs/test/layer-0-primitives/passkey.test.js +649 -0
  445. package/lib/vendor/blamejs/test/layer-0-primitives/permissions.test.js +524 -0
  446. package/lib/vendor/blamejs/test/layer-0-primitives/pqc-agent-curve.test.js +22 -0
  447. package/lib/vendor/blamejs/test/layer-0-primitives/pubsub.test.js +295 -0
  448. package/lib/vendor/blamejs/test/layer-0-primitives/queue-flow-repeat.test.js +36 -0
  449. package/lib/vendor/blamejs/test/layer-0-primitives/queue.test.js +83 -0
  450. package/lib/vendor/blamejs/test/layer-0-primitives/rate-limit-xff-spoofing.test.js +34 -0
  451. package/lib/vendor/blamejs/test/layer-0-primitives/redact.test.js +1031 -0
  452. package/lib/vendor/blamejs/test/layer-0-primitives/request-helpers.test.js +94 -0
  453. package/lib/vendor/blamejs/test/layer-0-primitives/require-bound-key.test.js +401 -0
  454. package/lib/vendor/blamejs/test/layer-0-primitives/restore-empty-manifest-wipe.test.js +154 -0
  455. package/lib/vendor/blamejs/test/layer-0-primitives/retention.test.js +600 -0
  456. package/lib/vendor/blamejs/test/layer-0-primitives/router-host-path-injection.test.js +231 -0
  457. package/lib/vendor/blamejs/test/layer-0-primitives/router-tls0rtt.test.js +21 -0
  458. package/lib/vendor/blamejs/test/layer-0-primitives/router.test.js +1277 -0
  459. package/lib/vendor/blamejs/test/layer-0-primitives/safe-async.test.js +133 -0
  460. package/lib/vendor/blamejs/test/layer-0-primitives/safe-buffer-linear-scans.test.js +14 -0
  461. package/lib/vendor/blamejs/test/layer-0-primitives/safe-buffer.test.js +80 -0
  462. package/lib/vendor/blamejs/test/layer-0-primitives/safe-decompress.test.js +28 -0
  463. package/lib/vendor/blamejs/test/layer-0-primitives/safe-dns.test.js +245 -0
  464. package/lib/vendor/blamejs/test/layer-0-primitives/safe-ical.test.js +32 -0
  465. package/lib/vendor/blamejs/test/layer-0-primitives/safe-ini.test.js +376 -0
  466. package/lib/vendor/blamejs/test/layer-0-primitives/safe-json.test.js +175 -0
  467. package/lib/vendor/blamejs/test/layer-0-primitives/safe-mime.test.js +518 -0
  468. package/lib/vendor/blamejs/test/layer-0-primitives/safe-object.test.js +62 -0
  469. package/lib/vendor/blamejs/test/layer-0-primitives/safe-path.test.js +30 -0
  470. package/lib/vendor/blamejs/test/layer-0-primitives/safe-schema.test.js +104 -0
  471. package/lib/vendor/blamejs/test/layer-0-primitives/safe-sql.test.js +142 -0
  472. package/lib/vendor/blamejs/test/layer-0-primitives/safe-url.test.js +112 -0
  473. package/lib/vendor/blamejs/test/layer-0-primitives/safe-vcard.test.js +26 -0
  474. package/lib/vendor/blamejs/test/layer-0-primitives/scheduler.test.js +157 -0
  475. package/lib/vendor/blamejs/test/layer-0-primitives/scim-server.test.js +396 -0
  476. package/lib/vendor/blamejs/test/layer-0-primitives/sd-jwt-vc.test.js +930 -0
  477. package/lib/vendor/blamejs/test/layer-0-primitives/security-assert.test.js +755 -82
  478. package/lib/vendor/blamejs/test/layer-0-primitives/self-update.test.js +1053 -0
  479. package/lib/vendor/blamejs/test/layer-0-primitives/session-device-binding.test.js +200 -0
  480. package/lib/vendor/blamejs/test/layer-0-primitives/session-strict-binding-missing-failclosed.test.js +110 -0
  481. package/lib/vendor/blamejs/test/layer-0-primitives/sigv4-bucket-ops.test.js +636 -0
  482. package/lib/vendor/blamejs/test/layer-0-primitives/sql-offset-without-limit.test.js +94 -0
  483. package/lib/vendor/blamejs/test/layer-0-primitives/sql.test.js +1190 -0
  484. package/lib/vendor/blamejs/test/layer-0-primitives/ssrf-guard.test.js +21 -0
  485. package/lib/vendor/blamejs/test/layer-0-primitives/static.test.js +850 -0
  486. package/lib/vendor/blamejs/test/layer-0-primitives/storage-presigned-url.test.js +146 -0
  487. package/lib/vendor/blamejs/test/layer-0-primitives/storage.test.js +621 -0
  488. package/lib/vendor/blamejs/test/layer-0-primitives/subject.test.js +47 -0
  489. package/lib/vendor/blamejs/test/layer-0-primitives/template.test.js +582 -0
  490. package/lib/vendor/blamejs/test/layer-0-primitives/tenant-quota.test.js +587 -25
  491. package/lib/vendor/blamejs/test/layer-0-primitives/time.test.js +11 -0
  492. package/lib/vendor/blamejs/test/layer-0-primitives/tsa.test.js +524 -63
  493. package/lib/vendor/blamejs/test/layer-0-primitives/uri-template.test.js +27 -0
  494. package/lib/vendor/blamejs/test/layer-0-primitives/vault-rotate.test.js +866 -0
  495. package/lib/vendor/blamejs/test/layer-0-primitives/vault.test.js +74 -0
  496. package/lib/vendor/blamejs/test/layer-0-primitives/vc.test.js +215 -0
  497. package/lib/vendor/blamejs/test/layer-0-primitives/watcher.test.js +550 -0
  498. package/lib/vendor/blamejs/test/layer-0-primitives/webhook-dispatcher.test.js +388 -0
  499. package/lib/vendor/blamejs/test/layer-0-primitives/webhook.test.js +262 -0
  500. package/lib/vendor/blamejs/test/layer-0-primitives/websocket.test.js +1294 -0
  501. package/lib/vendor/blamejs/test/layer-0-primitives/ws-client.test.js +629 -0
  502. package/lib/vendor/blamejs/test/layer-0-primitives/xml-c14n-attr-normalization.test.js +164 -0
  503. package/lib/vendor/blamejs/test/smoke.js +2 -0
  504. package/package.json +1 -1
  505. package/lib/vendor/blamejs/release-notes/v0.16.0.json +0 -44
  506. package/lib/vendor/blamejs/release-notes/v0.16.1.json +0 -36
  507. package/lib/vendor/blamejs/release-notes/v0.16.2.json +0 -71
  508. package/lib/vendor/blamejs/release-notes/v0.16.3.json +0 -71
  509. package/lib/vendor/blamejs/test/layer-0-primitives/acme-coverage.test.js +0 -441
  510. package/lib/vendor/blamejs/test/layer-0-primitives/auth-oauth-coverage.test.js +0 -482
  511. package/lib/vendor/blamejs/test/layer-0-primitives/auth-saml-coverage.test.js +0 -671
  512. package/lib/vendor/blamejs/test/layer-0-primitives/backup-index-coverage.test.js +0 -690
  513. package/lib/vendor/blamejs/test/layer-0-primitives/cli-coverage.test.js +0 -238
  514. package/lib/vendor/blamejs/test/layer-0-primitives/content-credentials-coverage.test.js +0 -319
  515. package/lib/vendor/blamejs/test/layer-0-primitives/keychain-coverage.test.js +0 -0
  516. package/lib/vendor/blamejs/test/layer-0-primitives/mail-auth-coverage.test.js +0 -437
  517. package/lib/vendor/blamejs/test/layer-0-primitives/mcp-coverage.test.js +0 -443
  518. package/lib/vendor/blamejs/test/layer-0-primitives/metrics-coverage.test.js +0 -395
  519. package/lib/vendor/blamejs/test/layer-0-primitives/network-smtp-policy-coverage.test.js +0 -565
  520. package/lib/vendor/blamejs/test/layer-0-primitives/router-coverage.test.js +0 -592
  521. package/lib/vendor/blamejs/test/layer-0-primitives/sql-coverage.test.js +0 -422
  522. package/lib/vendor/blamejs/test/layer-0-primitives/test-coverage.test.js +0 -573
@@ -0,0 +1,140 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (c) blamejs contributors
3
+ "use strict";
4
+ /**
5
+ * b.cookies.parseSafe — threat-detecting inbound-cookie parser.
6
+ *
7
+ * Drives the advertised `{ jar, issues }` contract against clean and
8
+ * hostile Cookie headers: duplicate names (cookie-tossing), a
9
+ * `__proto__` key (prototype-pollution attempt), CR/LF/NUL injection,
10
+ * oversized header / name / value, malformed pairs, and non-string
11
+ * input.
12
+ *
13
+ * Run standalone: `node test/layer-0-primitives/cookies.test.js`
14
+ * Or via smoke: `node test/smoke.js`
15
+ */
16
+
17
+ var helpers = require("../helpers");
18
+ var b = helpers.b;
19
+ var check = helpers.check;
20
+
21
+ function testCleanHeaderParses() {
22
+ var rv = b.cookies.parseSafe("a=1; b=two; c=three");
23
+ check("parseSafe: clean header yields no issues", rv.issues.length === 0);
24
+ check("parseSafe: jar carries every pair", rv.jar.a === "1" && rv.jar.b === "two" && rv.jar.c === "three");
25
+ }
26
+
27
+ function testEmptyHeader() {
28
+ var rv = b.cookies.parseSafe("");
29
+ check("parseSafe: empty header → empty jar, no issues",
30
+ rv.issues.length === 0 && Object.keys(rv.jar).length === 0);
31
+ }
32
+
33
+ function testDuplicateNameCookieTossing() {
34
+ // A parent-domain cookie shadowing the legitimate one appears twice;
35
+ // browsers apply last-write-wins. parseSafe surfaces it as a HIGH
36
+ // issue so the middleware can refuse (cookie-tossing class).
37
+ var rv = b.cookies.parseSafe("session=abc; session=evil");
38
+ check("parseSafe: duplicate-name surfaced", rv.issues.length === 1);
39
+ check("parseSafe: duplicate-name is HIGH severity",
40
+ rv.issues[0].kind === "duplicate-name" && rv.issues[0].severity === "high");
41
+ check("parseSafe: duplicate-name issue names the cookie", rv.issues[0].name === "session");
42
+ check("parseSafe: jar reflects last-write-wins (browser parity)", rv.jar.session === "evil");
43
+ }
44
+
45
+ function testProtoKeyDoesNotPollute() {
46
+ // A hostile `__proto__` cookie name must NOT reach Object.prototype.
47
+ // The jar is a null-prototype object so the key lands as an OWN data
48
+ // property and the global prototype is untouched.
49
+ var rv = b.cookies.parseSafe("a=1; __proto__=polluted; b=2");
50
+ check("parseSafe: global Object.prototype not polluted",
51
+ ({}).polluted === undefined && Object.prototype.polluted === undefined);
52
+ check("parseSafe: jar has null prototype (pollution-proof)",
53
+ Object.getPrototypeOf(rv.jar) === null);
54
+ check("parseSafe: legitimate pairs still parse alongside the hostile key",
55
+ rv.jar.a === "1" && rv.jar.b === "2");
56
+ // The __proto__ value lands as an own data property, not a prototype swap.
57
+ check("parseSafe: __proto__ captured as an own data property",
58
+ Object.prototype.hasOwnProperty.call(rv.jar, "__proto__") && rv.jar.__proto__ === "polluted");
59
+ }
60
+
61
+ function testControlByteInjection() {
62
+ // CR / LF / NUL smuggled through a proxy is a header-injection vector;
63
+ // parseSafe refuses the whole header (empty jar) with a HIGH issue.
64
+ var rv = b.cookies.parseSafe("a=1\r\nSet-Cookie: evil=1");
65
+ check("parseSafe: control byte → header-control-byte HIGH issue",
66
+ rv.issues.length === 1 && rv.issues[0].kind === "header-control-byte" &&
67
+ rv.issues[0].severity === "high");
68
+ check("parseSafe: control-byte header yields empty jar (fail-closed)",
69
+ Object.keys(rv.jar).length === 0);
70
+ }
71
+
72
+ function testNonStringInput() {
73
+ var rv = b.cookies.parseSafe(12345);
74
+ check("parseSafe: non-string input → bad-input HIGH issue",
75
+ rv.issues.length === 1 && rv.issues[0].kind === "bad-input" &&
76
+ rv.issues[0].severity === "high");
77
+ check("parseSafe: non-string input → empty jar", Object.keys(rv.jar).length === 0);
78
+ }
79
+
80
+ function testHeaderCap() {
81
+ var big = "x=" + "A".repeat(200);
82
+ var rv = b.cookies.parseSafe(big, { maxHeaderBytes: 64 });
83
+ check("parseSafe: oversized header → header-cap HIGH issue",
84
+ rv.issues.length === 1 && rv.issues[0].kind === "header-cap" &&
85
+ rv.issues[0].severity === "high");
86
+ check("parseSafe: over-cap header parses no pairs", rv.jar.x === undefined);
87
+ }
88
+
89
+ function testNameAndValueCap() {
90
+ var rvName = b.cookies.parseSafe("thisnameistoolong=v", { maxNameBytes: 4 });
91
+ check("parseSafe: over-long name → name-cap HIGH issue",
92
+ rvName.issues.some(function (i) { return i.kind === "name-cap" && i.severity === "high"; }));
93
+ check("parseSafe: over-cap name not admitted to jar", rvName.jar.thisnameistoolong === undefined);
94
+
95
+ var rvVal = b.cookies.parseSafe("k=" + "V".repeat(50), { maxValueBytes: 8 });
96
+ check("parseSafe: over-long value → value-cap HIGH issue",
97
+ rvVal.issues.some(function (i) { return i.kind === "value-cap" && i.severity === "high"; }));
98
+ check("parseSafe: over-cap value not admitted to jar", rvVal.jar.k === undefined);
99
+ }
100
+
101
+ function testMalformedAndEmptyName() {
102
+ var rvMalformed = b.cookies.parseSafe("novalue; a=1");
103
+ check("parseSafe: pair missing `=` → pair-malformed WARN",
104
+ rvMalformed.issues.some(function (i) { return i.kind === "pair-malformed" && i.severity === "warn"; }));
105
+ check("parseSafe: malformed pair skipped but valid pair still parses",
106
+ rvMalformed.jar.a === "1");
107
+
108
+ var rvEmpty = b.cookies.parseSafe("=orphan; b=2");
109
+ check("parseSafe: empty name → pair-empty-name WARN",
110
+ rvEmpty.issues.some(function (i) { return i.kind === "pair-empty-name" && i.severity === "warn"; }));
111
+ check("parseSafe: empty-name pair skipped, valid pair parses", rvEmpty.jar.b === "2");
112
+ }
113
+
114
+ function testUrlDecodeAndQuoteStrip() {
115
+ var rv = b.cookies.parseSafe('greeting="hello%20world"');
116
+ check("parseSafe: double-quotes stripped + percent-decoded",
117
+ rv.jar.greeting === "hello world" && rv.issues.length === 0);
118
+ }
119
+
120
+ function run() {
121
+ testCleanHeaderParses();
122
+ testEmptyHeader();
123
+ testDuplicateNameCookieTossing();
124
+ testProtoKeyDoesNotPollute();
125
+ testControlByteInjection();
126
+ testNonStringInput();
127
+ testHeaderCap();
128
+ testNameAndValueCap();
129
+ testMalformedAndEmptyName();
130
+ testUrlDecodeAndQuoteStrip();
131
+ }
132
+
133
+ module.exports = { run: run };
134
+
135
+ if (require.main === module) {
136
+ Promise.resolve().then(run).then(
137
+ function () { console.log("OK — " + helpers.getChecks() + " checks passed"); },
138
+ function (e) { console.error("FAIL:", e && e.message); process.exit(1); }
139
+ );
140
+ }
@@ -14,6 +14,8 @@ var check = helpers.check;
14
14
  var nodeCrypto = require("node:crypto");
15
15
 
16
16
  var EC = nodeCrypto.generateKeyPairSync("ec", { namedCurve: "P-256" });
17
+ var EC384 = nodeCrypto.generateKeyPairSync("ec", { namedCurve: "secp384r1" });
18
+ var EC521 = nodeCrypto.generateKeyPairSync("ec", { namedCurve: "secp521r1" });
17
19
  var ED = nodeCrypto.generateKeyPairSync("ed25519");
18
20
  var ML = nodeCrypto.generateKeyPairSync("ml-dsa-87");
19
21
 
@@ -247,6 +249,24 @@ async function testImportKey() {
247
249
  var secpBad = null;
248
250
  try { b.cose.importKey(new Map([[1, 2], [-1, 8], [-2, Buffer.from(k1jwk.x, "base64url")], [-3, Buffer.from(k1jwk.y, "base64url")]])); } catch (e) { secpBad = e; }
249
251
  check("importKey: secp256k1 refused (no ES256K binding)", secpBad && secpBad.code === "cose/unsupported-key");
252
+
253
+ // A plain object (integer-string keys) is coerced to a COSE_Key map and
254
+ // imports the same key — the non-Map input path.
255
+ var objKey = { 1: 2, "-1": 1, "-2": Buffer.from(jwk.x, "base64url"), "-3": Buffer.from(jwk.y, "base64url") };
256
+ check("importKey: plain-object COSE_Key coerced + imported", b.cose.importKey(objKey).asymmetricKeyType === "ec");
257
+
258
+ // A non-object / non-map (number, array) is refused rather than coerced.
259
+ var notObj = null;
260
+ try { b.cose.importKey(42); } catch (e) { notObj = e; }
261
+ check("importKey: non-object COSE_Key refused", notObj && notObj.code === "cose/bad-cose-key");
262
+ var arrKey = null;
263
+ try { b.cose.importKey([1, 2, 3]); } catch (e) { arrKey = e; }
264
+ check("importKey: array COSE_Key refused", arrKey && arrKey.code === "cose/bad-cose-key");
265
+
266
+ // OKP with a non-Ed25519 curve id is refused.
267
+ var okpBad = null;
268
+ try { b.cose.importKey(new Map([[1, 1], [-1, 99], [-2, Buffer.alloc(32)]])); } catch (e) { okpBad = e; }
269
+ check("importKey: OKP non-Ed25519 curve refused", okpBad && okpBad.code === "cose/unsupported-key");
250
270
  }
251
271
 
252
272
  async function testExportKey() {
@@ -288,21 +308,408 @@ async function testExportKey() {
288
308
  var badAlg = null;
289
309
  try { b.cose.exportKey(EC.publicKey, { alg: "NOPE" }); } catch (e) { badAlg = e; }
290
310
  check("exportKey: unknown alg refused", badAlg && badAlg.code === "cose/unknown-alg");
311
+
312
+ // An OKP key on a non-Ed25519 curve (X25519) has no COSE alg here and
313
+ // is refused rather than emitting a COSE_Key no verifier would accept.
314
+ var x = nodeCrypto.generateKeyPairSync("x25519");
315
+ var xBad = null;
316
+ try { b.cose.exportKey(x.publicKey); } catch (e) { xBad = e; }
317
+ check("exportKey: X25519 (OKP non-Ed25519) refused", xBad && xBad.code === "cose/unsupported-key");
318
+
319
+ // A non-EC / non-OKP key type (RSA) is refused.
320
+ var rsa = nodeCrypto.generateKeyPairSync("rsa", { modulusLength: 2048 });
321
+ var rsaBad = null;
322
+ try { b.cose.exportKey(rsa.publicKey); } catch (e) { rsaBad = e; }
323
+ check("exportKey: RSA key type refused", rsaBad && rsaBad.code === "cose/unsupported-key");
324
+
325
+ // kid supplied as a Buffer is stored verbatim as COSE_Key label 2.
326
+ var kidBuf = Buffer.from([0x01, 0x02, 0x03]);
327
+ var withKidBuf = b.cbor.decode(b.cose.exportKey(EC.publicKey, { kid: kidBuf }));
328
+ check("exportKey: Buffer kid stored as label 2", Buffer.isBuffer(withKidBuf.get(2)) && withKidBuf.get(2).equals(kidBuf));
329
+
330
+ // kid that is neither a Buffer nor a string is refused.
331
+ var badKid = null;
332
+ try { b.cose.exportKey(EC.publicKey, { kid: 123 }); } catch (e) { badKid = e; }
333
+ check("exportKey: non-Buffer/string kid refused", badKid && badKid.code === "cose/bad-kid");
334
+ }
335
+
336
+ async function testAlgKeyTypeConfusion() {
337
+ // Null-digest alg/key-type confusion: EdDSA and ML-DSA-87 both sign
338
+ // with a null digest, so node:crypto dispatches verify() on the KEY
339
+ // type and ignores the declared COSE alg. Without a key-type binding an
340
+ // EdDSA signature is accepted under an ML-DSA-87-only ("PQC-only")
341
+ // allowlist, and an ML-DSA-87 signature under an EdDSA-only allowlist —
342
+ // a full alg-allowlist bypass (the allowlist is the security control).
343
+ // The forged bytes are built by hand because b.cose.sign now refuses to
344
+ // emit a mislabeled token.
345
+ function forge(algId, signKey, payloadStr) {
346
+ var protectedBstr = b.cbor.encode(new Map([[1, algId]]));
347
+ var payload = Buffer.from(payloadStr, "utf8");
348
+ var ss = b.cbor.encode(["Signature1", protectedBstr, Buffer.alloc(0), payload]);
349
+ var sig = nodeCrypto.sign(null, ss, signKey);
350
+ return b.cbor.encode(new b.cbor.Tag(18, [protectedBstr, new Map(), payload, sig]));
351
+ }
352
+ // EdDSA signature, DECLARED ML-DSA-87 (-50), verified against an
353
+ // Ed25519 key under a PQC-only allowlist.
354
+ var e1 = null;
355
+ try { await b.cose.verify(forge(-50, ED.privateKey, "forged"), { algorithms: ["ML-DSA-87"], publicKey: ED.publicKey }); } catch (e) { e1 = e; }
356
+ check("verify: EdDSA sig rejected under ML-DSA-87-only allowlist (alg/key confusion)", e1 && e1.code === "cose/alg-key-mismatch");
357
+
358
+ // ML-DSA-87 signature, DECLARED EdDSA (-8), verified against an ML-DSA
359
+ // key under an EdDSA-only allowlist.
360
+ var e2 = null;
361
+ try { await b.cose.verify(forge(-8, ML.privateKey, "forged2"), { algorithms: ["EdDSA"], publicKey: ML.publicKey }); } catch (e) { e2 = e; }
362
+ check("verify: ML-DSA-87 sig rejected under EdDSA-only allowlist (alg/key confusion)", e2 && e2.code === "cose/alg-key-mismatch");
363
+
364
+ // Sign side: naming one alg but supplying the other key type must be
365
+ // refused, never emit a mislabeled token.
366
+ var e3 = null;
367
+ try { await b.cose.sign(Buffer.from("x"), { alg: "EdDSA", privateKey: ML.privateKey }); } catch (e) { e3 = e; }
368
+ check("sign: EdDSA alg with an ML-DSA key refused (no mislabeled token)", e3 && e3.code === "cose/alg-key-mismatch");
369
+ var e4 = null;
370
+ try { await b.cose.sign(Buffer.from("x"), { alg: "ML-DSA-87", privateKey: ED.privateKey }); } catch (e) { e4 = e; }
371
+ check("sign: ML-DSA-87 alg with an Ed25519 key refused", e4 && e4.code === "cose/alg-key-mismatch");
372
+
373
+ // Regression: the legitimate pairings still verify.
374
+ var okEd = await b.cose.sign(Buffer.from("ed-ok"), { alg: "EdDSA", privateKey: ED.privateKey });
375
+ check("EdDSA legit pairing still verifies", (await b.cose.verify(okEd, { algorithms: ["EdDSA"], publicKey: ED.publicKey })).payload.toString() === "ed-ok");
376
+ var okMl = await b.cose.sign(Buffer.from("ml-ok"), { alg: "ML-DSA-87", privateKey: ML.privateKey });
377
+ check("ML-DSA-87 legit pairing still verifies", (await b.cose.verify(okMl, { algorithms: ["ML-DSA-87"], publicKey: ML.publicKey })).payload.toString() === "ml-ok");
378
+ }
379
+
380
+ async function testEcAlgCurveVerify() {
381
+ // A COSE_Sign1 DECLARING ES512 (-36) but carrying a P-256 key: node
382
+ // verifies a sha512 signature against the P-256 key as self-consistent,
383
+ // so the alg->curve binding must refuse it even when ES512 is
384
+ // allowlisted (RFC 9053 §2 alg/curve confusion).
385
+ var protectedBstr = b.cbor.encode(new Map([[1, -36]]));
386
+ var payload = Buffer.from("es512-over-p256");
387
+ var ss = b.cbor.encode(["Signature1", protectedBstr, Buffer.alloc(0), payload]);
388
+ var sig = nodeCrypto.sign("sha512", ss, { key: EC.privateKey, dsaEncoding: "ieee-p1363" });
389
+ var forged = b.cbor.encode(new b.cbor.Tag(18, [protectedBstr, new Map(), payload, sig]));
390
+ var refused = null;
391
+ try { await b.cose.verify(forged, { algorithms: ["ES512"], publicKey: EC.publicKey }); } catch (e) { refused = e; }
392
+ check("verify: ES512 declared over a P-256 key refused (alg/curve binding)", refused && refused.code === "cose/alg-curve-mismatch");
393
+ }
394
+
395
+ async function testUnprotectedAlgNotHonored() {
396
+ // alg (label 1) is integrity-read from the PROTECTED header only. A
397
+ // token with an empty protected header but a valid-looking alg smuggled
398
+ // into the UNPROTECTED bucket must NOT be honored — it is refused as an
399
+ // unknown protected alg, never verified under the smuggled alg (even
400
+ // though the signature and key would otherwise match).
401
+ var payload = Buffer.from("no-protected-alg");
402
+ var ss = b.cbor.encode(["Signature1", Buffer.alloc(0), Buffer.alloc(0), payload]);
403
+ var sig = nodeCrypto.sign(null, ss, ED.privateKey);
404
+ var forged = b.cbor.encode(new b.cbor.Tag(18, [Buffer.alloc(0), new Map([[1, -8]]), payload, sig]));
405
+ var refused = null;
406
+ try { await b.cose.verify(forged, { algorithms: ["EdDSA"], publicKey: ED.publicKey }); } catch (e) { refused = e; }
407
+ check("verify: alg in the unprotected bucket is not honored", refused && refused.code === "cose/unknown-alg");
408
+ }
409
+
410
+ async function testBareUntagged() {
411
+ // RFC 9052 permits an untagged COSE_Sign1 (a bare 4-element array). The
412
+ // verifier accepts both the tagged (18) and bare forms.
413
+ var tagged = await b.cose.sign(Buffer.from("bare"), { alg: "ES256", privateKey: EC.privateKey });
414
+ var arr = b.cbor.decode(tagged, { allowedTags: [18] }).value;
415
+ var bare = b.cbor.encode(arr);
416
+ check("verify: bare form is a raw CBOR array (no 0xd2 tag)", bare[0] !== 0xd2);
417
+ var out = await b.cose.verify(bare, { algorithms: ["ES256"], publicKey: EC.publicKey });
418
+ check("verify: bare (untagged) COSE_Sign1 verifies", out.payload.toString() === "bare");
419
+ }
420
+
421
+ async function testKeyResolver() {
422
+ // keyResolver receives the protected + unprotected header maps and
423
+ // returns the verification key (kid resolution). The resolved key still
424
+ // goes through the alg/key binding.
425
+ var s = await b.cose.sign(Buffer.from("resolve-me"), { alg: "ES256", privateKey: EC.privateKey, kid: "kr-1" });
426
+ var seenKid = null, sawProt = false;
427
+ var out = await b.cose.verify(s, {
428
+ algorithms: ["ES256"],
429
+ keyResolver: function (prot, unprot) {
430
+ sawProt = (prot instanceof Map) && prot.get(1) === -7;
431
+ var kid = unprot.get(4);
432
+ seenKid = Buffer.isBuffer(kid) ? kid.toString("utf8") : null;
433
+ return EC.publicKey;
434
+ },
435
+ });
436
+ check("keyResolver: resolves the key and verifies", out.payload.toString() === "resolve-me");
437
+ check("keyResolver: called with protected + unprotected maps (kid read)", sawProt && seenKid === "kr-1");
438
+
439
+ // Resolver returning the WRONG key → signature refused (not fail-open).
440
+ var wrongEc = nodeCrypto.generateKeyPairSync("ec", { namedCurve: "P-256" });
441
+ var bad = null;
442
+ try { await b.cose.verify(s, { algorithms: ["ES256"], keyResolver: function () { return wrongEc.publicKey; } }); } catch (e) { bad = e; }
443
+ check("keyResolver: wrong resolved key refused", bad && bad.code === "cose/bad-signature");
444
+
445
+ // Resolver returning a wrong-curve key for the declared ES256 → refused
446
+ // by the alg/curve binding, not verified.
447
+ var p384 = nodeCrypto.generateKeyPairSync("ec", { namedCurve: "secp384r1" });
448
+ var mismatch = null;
449
+ try { await b.cose.verify(s, { algorithms: ["ES256"], keyResolver: function () { return p384.publicKey; } }); } catch (e) { mismatch = e; }
450
+ check("keyResolver: wrong-curve resolved key refused (alg/curve binding)", mismatch && mismatch.code === "cose/alg-curve-mismatch");
451
+ }
452
+
453
+ async function testMalformedVerifyBranches() {
454
+ var protBstr = b.cbor.encode(new Map([[1, -7]]));
455
+ var sig = Buffer.from([0, 0]);
456
+ var payload = Buffer.from("p");
457
+ async function code(bytes) {
458
+ try { await b.cose.verify(bytes, { algorithms: ["ES256"], publicKey: EC.publicKey }); return null; }
459
+ catch (e) { return e.code; }
460
+ }
461
+ check("verify: wrong array length refused",
462
+ (await code(b.cbor.encode(new b.cbor.Tag(18, [protBstr, new Map(), payload])))) === "cose/malformed");
463
+ check("verify: non-bstr protected header refused",
464
+ (await code(b.cbor.encode(new b.cbor.Tag(18, [new Map(), new Map(), payload, sig])))) === "cose/malformed");
465
+ check("verify: non-bstr signature refused",
466
+ (await code(b.cbor.encode(new b.cbor.Tag(18, [protBstr, new Map(), payload, "not-bytes"])))) === "cose/malformed");
467
+ check("verify: protected header that is not a CBOR map refused",
468
+ (await code(b.cbor.encode(new b.cbor.Tag(18, [b.cbor.encode([1, 2, 3]), new Map(), payload, sig])))) === "cose/malformed");
469
+ check("verify: crit (label 2) not an array refused",
470
+ (await code(b.cbor.encode(new b.cbor.Tag(18, [b.cbor.encode(new Map([[1, -7], [2, 99]])), new Map(), payload, sig])))) === "cose/bad-crit");
471
+ // crit names an understood label (3 = content-type) that is ABSENT from
472
+ // the protected header — a crit that references nothing must be refused.
473
+ check("verify: crit lists an absent (understood) label refused",
474
+ (await code(b.cbor.encode(new b.cbor.Tag(18, [b.cbor.encode(new Map([[1, -7], [2, [3]]])), new Map(), payload, sig])))) === "cose/crit-absent");
475
+ }
476
+
477
+ async function testEsAlgVariants() {
478
+ // ES384 (P-384) and ES512 (P-521) through the real b.cose.sign/verify
479
+ // consumer path — the sha384 / sha512 digest params and the
480
+ // secp384r1 / secp521r1 alg→curve bindings, alongside the P-256/ES256
481
+ // the rest of the suite exercises.
482
+ var s384 = await b.cose.sign(Buffer.from("es384"), { alg: "ES384", privateKey: EC384.privateKey });
483
+ var v384 = await b.cose.verify(s384, { algorithms: ["ES384"], publicKey: EC384.publicKey });
484
+ check("ES384: round-trips over P-384", v384.payload.toString() === "es384" && v384.alg === "ES384" && v384.protectedHeaders.get(1) === -35);
485
+
486
+ var s512 = await b.cose.sign(Buffer.from("es512"), { alg: "ES512", privateKey: EC521.privateKey });
487
+ var v512 = await b.cose.verify(s512, { algorithms: ["ES512"], publicKey: EC521.publicKey });
488
+ check("ES512: round-trips over P-521", v512.payload.toString() === "es512" && v512.alg === "ES512" && v512.protectedHeaders.get(1) === -36);
489
+
490
+ // The alg→curve binding refuses a P-384 key under ES512 even though
491
+ // both are EC keys (wrong-curve confusion).
492
+ var s512b = await b.cose.sign(Buffer.from("x"), { alg: "ES512", privateKey: EC521.privateKey });
493
+ var mism = null;
494
+ try { await b.cose.verify(s512b, { algorithms: ["ES512"], publicKey: EC384.publicKey }); } catch (e) { mism = e; }
495
+ check("ES512 declared, P-384 key refused (alg/curve binding)", mism && mism.code === "cose/alg-curve-mismatch");
496
+ }
497
+
498
+ async function testKeyLoadFailures() {
499
+ // A well-formed COSE_Sign1 verified with a publicKey that is not a
500
+ // loadable key → the _toKeyObject load failure surfaces as cose/bad-key
501
+ // (fail-closed), never a raw node error.
502
+ var s = await b.cose.sign(Buffer.from("x"), { alg: "ES256", privateKey: EC.privateKey });
503
+ var badPub = null;
504
+ try { await b.cose.verify(s, { algorithms: ["ES256"], publicKey: Buffer.from("not-a-pem-key") }); } catch (e) { badPub = e; }
505
+ check("verify: unloadable publicKey refused (cose/bad-key)", badPub && badPub.code === "cose/bad-key");
506
+
507
+ // A keyResolver returning null is fail-closed — the null goes through
508
+ // the same load path and is refused, never treated as a verified key.
509
+ var nullResolver = null;
510
+ try { await b.cose.verify(s, { algorithms: ["ES256"], keyResolver: function () { return null; } }); } catch (e) { nullResolver = e; }
511
+ check("verify: keyResolver returning null refused (cose/bad-key)", nullResolver && nullResolver.code === "cose/bad-key");
512
+
513
+ // Sign with an unloadable private key → cose/bad-key.
514
+ var badPriv = null;
515
+ try { await b.cose.sign(Buffer.from("x"), { alg: "ES256", privateKey: Buffer.from("garbage") }); } catch (e) { badPriv = e; }
516
+ check("sign: unloadable privateKey refused (cose/bad-key)", badPriv && badPriv.code === "cose/bad-key");
517
+
518
+ // A valid ES256 token verified against an Ed25519 key: the alg→curve
519
+ // binding message path where the key is not EC (got=null, key type
520
+ // reported as ed25519), not verified.
521
+ var edMismatch = null;
522
+ try { await b.cose.verify(s, { algorithms: ["ES256"], publicKey: ED.publicKey }); } catch (e) { edMismatch = e; }
523
+ check("verify: ES256 token with an Ed25519 key refused (alg/curve binding)",
524
+ edMismatch && edMismatch.code === "cose/alg-curve-mismatch" && /ed25519/.test(edMismatch.message));
525
+
526
+ // A non-byte payload to sign is refused by the byte coercer.
527
+ var badBytes = null;
528
+ try { await b.cose.sign(12345, { alg: "ES256", privateKey: EC.privateKey }); } catch (e) { badBytes = e; }
529
+ check("sign: non-byte payload refused (cose/bad-bytes)", badBytes && badBytes.code === "cose/bad-bytes");
530
+ }
531
+
532
+ async function testSignAndVerifyHeaderBranches() {
533
+ // Extra unprotected headers on sign ride through and surface on verify.
534
+ var s = await b.cose.sign(Buffer.from("hdr"), {
535
+ alg: "ES256", privateKey: EC.privateKey, unprotectedHeaders: { 4: Buffer.from("kid-uh") },
536
+ });
537
+ var v = await b.cose.verify(s, { algorithms: ["ES256"], publicKey: EC.publicKey });
538
+ check("sign: extra unprotectedHeaders surface on verify", v.unprotectedHeaders.get(4).toString() === "kid-uh");
539
+
540
+ // An algorithms allowlist naming an unknown alg name is refused at the
541
+ // allowlist-validation loop (before any decode).
542
+ var unknownAlg = null;
543
+ try { await b.cose.verify(s, { algorithms: ["NOPE"], publicKey: EC.publicKey }); } catch (e) { unknownAlg = e; }
544
+ check("verify: unknown alg name in allowlist refused", unknownAlg && unknownAlg.code === "cose/unknown-alg");
545
+ }
546
+
547
+ function testEncrypt0Branches() {
548
+ var key = b.crypto.generateBytes(32);
549
+
550
+ // Unknown AEAD alg name refused.
551
+ var unknown = null;
552
+ try { b.cose.encrypt0(Buffer.from("x"), { alg: "BOGUS", key: key }); } catch (e) { unknown = e; }
553
+ check("encrypt0: unknown alg refused", unknown && unknown.code === "cose/unknown-alg");
554
+
555
+ // An explicit (correct-length) IV is honored and round-trips.
556
+ var iv = b.crypto.generateBytes(12);
557
+ var encIv = b.cose.encrypt0(Buffer.from("with-iv"), { key: key, iv: iv });
558
+ var dIv = b.cose.decrypt0(encIv, { key: key, algorithms: ["ChaCha20-Poly1305"] });
559
+ check("encrypt0: explicit IV round-trips + is stored in unprotected label 5",
560
+ dIv.plaintext.toString() === "with-iv" && dIv.unprotectedHeaders.get(5).equals(iv));
561
+
562
+ // A wrong-length explicit IV is refused.
563
+ var badIv = null;
564
+ try { b.cose.encrypt0(Buffer.from("x"), { key: key, iv: Buffer.alloc(8) }); } catch (e) { badIv = e; }
565
+ check("encrypt0: wrong-length IV refused", badIv && badIv.code === "cose/bad-iv");
566
+
567
+ // A128GCM (16-byte key) full round-trip — the third AEAD alg's params.
568
+ var k16 = b.crypto.generateBytes(16);
569
+ var encA = b.cose.encrypt0(Buffer.from("aes128"), { alg: "A128GCM", key: k16 });
570
+ check("encrypt0: A128GCM round-trip (16-byte key)",
571
+ b.cose.decrypt0(encA, { key: k16, algorithms: ["A128GCM"] }).plaintext.toString() === "aes128");
572
+ }
573
+
574
+ function testDecrypt0Malformed() {
575
+ var key = b.crypto.generateBytes(32);
576
+ function code(bytes, o) {
577
+ try { b.cose.decrypt0(bytes, o || { key: key, algorithms: ["ChaCha20-Poly1305"] }); return null; }
578
+ catch (e) { return e.code; }
579
+ }
580
+ var protBstr = b.cbor.encode(new Map([[1, 24]]));
581
+ var iv12 = new Map([[5, Buffer.alloc(12)]]);
582
+
583
+ // Bare (untagged) COSE_Encrypt0 array verifies like the tagged form.
584
+ var enc = b.cose.encrypt0(Buffer.from("bare-enc"), { key: key });
585
+ var bare = b.cbor.encode(b.cbor.decode(enc, { allowedTags: [16] }).value);
586
+ check("decrypt0: bare (untagged) COSE_Encrypt0 decrypts",
587
+ b.cose.decrypt0(bare, { key: key, algorithms: ["ChaCha20-Poly1305"] }).plaintext.toString() === "bare-enc");
588
+
589
+ check("decrypt0: wrong array length refused",
590
+ code(b.cbor.encode(new b.cbor.Tag(16, [protBstr, new Map()]))) === "cose/malformed");
591
+ check("decrypt0: non-bstr protected header refused",
592
+ code(b.cbor.encode(new b.cbor.Tag(16, [new Map(), iv12, Buffer.alloc(20)]))) === "cose/malformed");
593
+ check("decrypt0: non-bstr ciphertext refused",
594
+ code(b.cbor.encode(new b.cbor.Tag(16, [protBstr, iv12, "not-bytes"]))) === "cose/malformed");
595
+ check("decrypt0: non-map unprotected header refused",
596
+ code(b.cbor.encode(new b.cbor.Tag(16, [protBstr, ["array-not-map"], Buffer.alloc(20)]))) === "cose/malformed");
597
+ check("decrypt0: protected header that is not a CBOR map refused",
598
+ code(b.cbor.encode(new b.cbor.Tag(16, [b.cbor.encode([1, 2, 3]), iv12, Buffer.alloc(20)]))) === "cose/malformed");
599
+ // Empty protected header → no alg → unrecognized AEAD id.
600
+ check("decrypt0: empty protected header (no alg) refused as unknown-alg",
601
+ code(b.cbor.encode(new b.cbor.Tag(16, [Buffer.alloc(0), iv12, Buffer.alloc(20)]))) === "cose/unknown-alg");
602
+ check("decrypt0: unrecognized AEAD alg id refused",
603
+ code(b.cbor.encode(new b.cbor.Tag(16, [b.cbor.encode(new Map([[1, 99]])), iv12, Buffer.alloc(20)]))) === "cose/unknown-alg");
604
+ // Wrong key length for the declared alg (16-byte key for ChaCha's 32).
605
+ check("decrypt0: wrong key length for declared alg refused",
606
+ code(enc, { key: b.crypto.generateBytes(16), algorithms: ["ChaCha20-Poly1305"] }) === "cose/bad-key");
607
+ // Missing IV in the unprotected header.
608
+ check("decrypt0: missing IV refused",
609
+ code(b.cbor.encode(new b.cbor.Tag(16, [protBstr, new Map(), Buffer.alloc(20)]))) === "cose/bad-iv");
610
+ // Ciphertext shorter than the AEAD tag (valid key + IV, short ct).
611
+ check("decrypt0: ciphertext shorter than the AEAD tag refused",
612
+ code(b.cbor.encode(new b.cbor.Tag(16, [protBstr, iv12, Buffer.alloc(10)]))) === "cose/malformed");
613
+
614
+ // Cross-algorithm AEAD confusion: a real ChaCha20-Poly1305 token whose
615
+ // protected header is rewritten to A256GCM (both 32-byte-key / 12-byte-IV)
616
+ // must NOT decrypt — the protected header is bound as AEAD associated
617
+ // data via the Enc_structure, so the tag fails.
618
+ var real = b.cose.encrypt0(Buffer.from("secret"), { alg: "ChaCha20-Poly1305", key: key });
619
+ var rarr = b.cbor.decode(real, { allowedTags: [16] }).value;
620
+ var forged = b.cbor.encode(new b.cbor.Tag(16, [b.cbor.encode(new Map([[1, 3]])), rarr[1], rarr[2]]));
621
+ check("decrypt0: cross-alg header rewrite (ChaCha→A256GCM) refused (AAD binds alg)",
622
+ code(forged, { key: key, algorithms: ["A256GCM"] }) === "cose/decrypt-failed");
623
+ }
624
+
625
+ function testMac0Branches() {
626
+ var key = nodeCrypto.randomBytes(32);
627
+ var protBstr = b.cbor.encode(new Map([[1, 5]]));
628
+ var payload = Buffer.from("p");
629
+ var tag32 = Buffer.alloc(32);
630
+ function code(bytes, o) {
631
+ try { b.cose.macVerify0(bytes, o || { algorithms: ["HMAC-256/256"], key: key }); return null; }
632
+ catch (e) { return e.code; }
633
+ }
634
+
635
+ // Unknown MAC alg name on mac0 refused.
636
+ var unk = null;
637
+ try { b.cose.mac0(payload, { alg: "BOGUS", key: key }); } catch (e) { unk = e; }
638
+ check("mac0: unknown alg refused", unk && unk.code === "cose/unsignable-alg");
639
+
640
+ // Extra unprotected headers surface on macVerify0.
641
+ var mu = b.cose.mac0(payload, { alg: "HMAC-256/256", key: key, unprotectedHeaders: { 4: Buffer.from("kid-m") } });
642
+ check("mac0: extra unprotectedHeaders surface on verify",
643
+ b.cose.macVerify0(mu, { algorithms: ["HMAC-256/256"], key: key }).unprotectedHeaders.get(4).toString() === "kid-m");
644
+
645
+ // Bare (untagged) COSE_Mac0 verifies like the tagged form.
646
+ var m = b.cose.mac0(payload, { alg: "HMAC-256/256", key: key });
647
+ var bare = b.cbor.encode(b.cbor.decode(m, { allowedTags: [17] }).value);
648
+ check("macVerify0: bare (untagged) COSE_Mac0 verifies",
649
+ b.cose.macVerify0(bare, { algorithms: ["HMAC-256/256"], key: key }).payload.equals(payload));
650
+
651
+ // opts.algorithms required + unknown alg name + missing key.
652
+ check("macVerify0: missing algorithms refused", code(m, { key: key }) === "cose/algorithms-required");
653
+ check("macVerify0: unknown alg name in allowlist refused", code(m, { algorithms: ["NOPE"], key: key }) === "cose/unknown-alg");
654
+ check("macVerify0: missing key refused", code(m, { algorithms: ["HMAC-256/256"] }) === "cose/no-key");
655
+
656
+ // Structural malformations.
657
+ check("macVerify0: wrong array length refused",
658
+ code(b.cbor.encode(new b.cbor.Tag(17, [protBstr, new Map(), payload]))) === "cose/malformed");
659
+ check("macVerify0: non-bstr protected header refused",
660
+ code(b.cbor.encode(new b.cbor.Tag(17, [new Map(), new Map(), payload, tag32]))) === "cose/malformed");
661
+ check("macVerify0: non-bstr tag refused",
662
+ code(b.cbor.encode(new b.cbor.Tag(17, [protBstr, new Map(), payload, "not-bytes"]))) === "cose/malformed");
663
+ check("macVerify0: non-map unprotected header refused",
664
+ code(b.cbor.encode(new b.cbor.Tag(17, [protBstr, ["array"], payload, tag32]))) === "cose/malformed");
665
+ check("macVerify0: externalPayload on an attached token refused",
666
+ code(b.cbor.encode(new b.cbor.Tag(17, [protBstr, new Map(), payload, tag32])),
667
+ { algorithms: ["HMAC-256/256"], key: key, externalPayload: payload }) === "cose/payload-ambiguous");
668
+ check("macVerify0: non-byte payload refused",
669
+ code(b.cbor.encode(new b.cbor.Tag(17, [protBstr, new Map(), "text", tag32]))) === "cose/malformed");
670
+ check("macVerify0: empty protected header (no alg) refused as unknown-alg",
671
+ code(b.cbor.encode(new b.cbor.Tag(17, [Buffer.alloc(0), new Map(), payload, tag32]))) === "cose/unknown-alg");
672
+ check("macVerify0: protected header that is not a CBOR map refused",
673
+ code(b.cbor.encode(new b.cbor.Tag(17, [b.cbor.encode([1, 2, 3]), new Map(), payload, tag32]))) === "cose/malformed");
674
+ check("macVerify0: crit (label 2) not an array refused",
675
+ code(b.cbor.encode(new b.cbor.Tag(17, [b.cbor.encode(new Map([[1, 5], [2, 99]])), new Map(), payload, tag32]))) === "cose/bad-crit");
676
+ check("macVerify0: crit lists an absent (understood) label refused",
677
+ code(b.cbor.encode(new b.cbor.Tag(17, [b.cbor.encode(new Map([[1, 5], [2, [3]]])), new Map(), payload, tag32]))) === "cose/crit-absent");
678
+ check("macVerify0: unrecognized MAC alg id refused",
679
+ code(b.cbor.encode(new b.cbor.Tag(17, [b.cbor.encode(new Map([[1, 99]])), new Map(), payload, tag32]))) === "cose/unknown-alg");
680
+
681
+ // A truncated tag (length mismatch) is refused as cose/bad-tag, never a
682
+ // raw length-mismatch throw from the constant-time compare.
683
+ var marr = b.cbor.decode(m, { allowedTags: [17] }).value;
684
+ var truncated = b.cbor.encode(new b.cbor.Tag(17, [marr[0], marr[1], marr[2], Buffer.alloc(5)]));
685
+ check("macVerify0: truncated tag refused (cose/bad-tag)", code(truncated) === "cose/bad-tag");
291
686
  }
292
687
 
293
688
  async function run() {
294
689
  testSurface();
295
690
  testEncrypt0();
296
691
  await testClassicalUseableToday();
692
+ await testEsAlgVariants();
297
693
  await testProtectedHeaders();
298
694
  await testPqcForward();
299
695
  await testTamperAndAllowlist();
300
696
  await testCritBypassDefense();
697
+ await testAlgKeyTypeConfusion();
698
+ await testEcAlgCurveVerify();
699
+ await testUnprotectedAlgNotHonored();
700
+ await testBareUntagged();
701
+ await testKeyResolver();
702
+ await testKeyLoadFailures();
703
+ await testSignAndVerifyHeaderBranches();
704
+ await testMalformedVerifyBranches();
301
705
  await testValidation();
302
706
  await testDetachedPayload();
303
707
  await testImportKey();
304
708
  await testExportKey();
709
+ testEncrypt0Branches();
710
+ testDecrypt0Malformed();
305
711
  testMac0();
712
+ testMac0Branches();
306
713
  }
307
714
 
308
715
  function testMac0() {