@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
@@ -237,19 +237,56 @@ function testTinyPsSvgBadInput() {
237
237
 
238
238
  // ---- fetchAndVerifyMark with a self-signed test cert chain ----
239
239
 
240
+ var YEAR_MS = 365 * 24 * 60 * 60 * 1000;
241
+ var BIMI_EKU_OID = "1.3.6.1.5.5.7.3.31";
242
+ var ID_PE_LOGOTYPE_OID = "1.3.6.1.5.5.7.1.12";
243
+
244
+ function _genKey() {
245
+ return pki.crypto.subtle.generateKey(
246
+ { name: "ECDSA", namedCurve: "P-256" }, true, ["sign", "verify"]);
247
+ }
248
+
249
+ // _logotypeExtension — a minimal RFC 3709 id-pe-logotype extension whose
250
+ // value is `SEQUENCE { OCTET STRING <svg...> }`, exercising both the
251
+ // constructed-recursion and primitive-match paths of the framework's
252
+ // best-effort embedded-SVG scanner. The SVG stays < 128 bytes so every
253
+ // DER length is single-byte.
254
+ function _logotypeExtension(svgText) {
255
+ var svg = Buffer.from(svgText, "utf8");
256
+ var octet = Buffer.concat([Buffer.from([0x04, svg.length]), svg]);
257
+ var seq = Buffer.concat([Buffer.from([0x30, octet.length]), octet]);
258
+ return new x509.Extension(ID_PE_LOGOTYPE_OID, false, seq);
259
+ }
260
+
261
+ // _logotypeExtensionRaw — id-pe-logotype extension over caller-supplied
262
+ // DER, so a test can exercise the scanner's non-SVG-leaf, no-match, and
263
+ // truncated-SEQUENCE fallback branches directly.
264
+ function _logotypeExtensionRaw(innerDer) {
265
+ return new x509.Extension(ID_PE_LOGOTYPE_OID, false, innerDer);
266
+ }
267
+
268
+ // A short DER OCTET STRING whose bytes are not an SVG magic prefix.
269
+ var _OCTET_NON_SVG = Buffer.from([0x04, 0x04, 0x78, 0x78, 0x78, 0x78]);
270
+ function _octetOf(text) {
271
+ var b2 = Buffer.from(text, "utf8");
272
+ return Buffer.concat([Buffer.from([0x04, b2.length]), b2]);
273
+ }
274
+ function _derSequence(contentBuf) {
275
+ return Buffer.concat([Buffer.from([0x30, contentBuf.length]), contentBuf]);
276
+ }
277
+
240
278
  async function _generateTestChain(opts) {
241
279
  opts = opts || {};
242
280
  var sanDomain = opts.sanDomain || "example.com";
243
281
  var includeBimiEku = opts.includeBimiEku !== false;
244
- var bimiEkuOid = "1.3.6.1.5.5.7.3.31";
245
282
 
246
- var caKeys = await pki.crypto.subtle.generateKey(
247
- { name: "ECDSA", namedCurve: "P-256" }, true, ["sign", "verify"]);
248
- var leafKeys = await pki.crypto.subtle.generateKey(
249
- { name: "ECDSA", namedCurve: "P-256" }, true, ["sign", "verify"]);
283
+ var caKeys = await _genKey();
284
+ var leafKeys = await _genKey();
250
285
 
251
286
  var now = new Date();
252
- var notAfter = new Date(now.getTime() + 365 * 24 * 60 * 60 * 1000);
287
+ var notAfter = new Date(now.getTime() + YEAR_MS);
288
+ var leafNotBefore = opts.leafNotBefore || now;
289
+ var leafNotAfter = opts.leafNotAfter || notAfter;
253
290
 
254
291
  var ca = await x509.X509CertificateGenerator.createSelfSigned({
255
292
  serialNumber: "01",
@@ -269,12 +306,13 @@ async function _generateTestChain(opts) {
269
306
  new x509.BasicConstraintsExtension(false, undefined, true),
270
307
  new x509.KeyUsagesExtension(
271
308
  x509.KeyUsageFlags.digitalSignature, true),
272
- new x509.SubjectAlternativeNameExtension([
273
- { type: "dns", value: sanDomain },
274
- ]),
275
309
  ];
310
+ if (!opts.noSan) {
311
+ var sanEntries = opts.sanEntries || [{ type: "dns", value: sanDomain }];
312
+ leafExts.push(new x509.SubjectAlternativeNameExtension(sanEntries));
313
+ }
276
314
  if (includeBimiEku) {
277
- leafExts.push(new x509.ExtendedKeyUsageExtension([bimiEkuOid], false));
315
+ leafExts.push(new x509.ExtendedKeyUsageExtension([BIMI_EKU_OID], false));
278
316
  }
279
317
  if (opts.policyOid) {
280
318
  // Add a CertificatePolicies extension carrying the supplied OID so
@@ -282,13 +320,19 @@ async function _generateTestChain(opts) {
282
320
  // pkijs/asn1 path the vendor bundle exposes.
283
321
  leafExts.push(new x509.CertificatePolicyExtension([opts.policyOid], false));
284
322
  }
323
+ if (opts.logoSvg) {
324
+ leafExts.push(_logotypeExtension(opts.logoSvg));
325
+ }
326
+ if (opts.logotypeExt) {
327
+ leafExts.push(opts.logotypeExt);
328
+ }
285
329
 
286
330
  var leaf = await x509.X509CertificateGenerator.create({
287
331
  serialNumber: "02",
288
332
  issuer: ca.subject,
289
333
  subject: "CN=" + sanDomain,
290
- notBefore: now,
291
- notAfter: notAfter,
334
+ notBefore: leafNotBefore,
335
+ notAfter: leafNotAfter,
292
336
  signingAlgorithm: { name: "ECDSA", hash: "SHA-256" },
293
337
  publicKey: leafKeys.publicKey,
294
338
  signingKey: caKeys.privateKey,
@@ -301,6 +345,86 @@ async function _generateTestChain(opts) {
301
345
  };
302
346
  }
303
347
 
348
+ // _generateThreeLevelChain — root -> intermediate -> leaf, so the fetched
349
+ // PEM body carries [leaf, intermediate] and the trust anchor is the root.
350
+ // Drives the intermediate-walk branch of the chain verifier.
351
+ async function _generateThreeLevelChain() {
352
+ var rootKeys = await _genKey();
353
+ var interKeys = await _genKey();
354
+ var leafKeys = await _genKey();
355
+ var now = new Date();
356
+ var far = new Date(now.getTime() + 10 * YEAR_MS);
357
+ var alg = { name: "ECDSA", hash: "SHA-256" };
358
+ var caUsage = x509.KeyUsageFlags.keyCertSign | x509.KeyUsageFlags.cRLSign;
359
+
360
+ var root = await x509.X509CertificateGenerator.createSelfSigned({
361
+ serialNumber: "01", name: "CN=BIMI Test Root", notBefore: now, notAfter: far,
362
+ signingAlgorithm: alg, keys: rootKeys,
363
+ extensions: [
364
+ new x509.BasicConstraintsExtension(true, 2, true),
365
+ new x509.KeyUsagesExtension(caUsage, true),
366
+ ],
367
+ });
368
+ var inter = await x509.X509CertificateGenerator.create({
369
+ serialNumber: "02", issuer: root.subject, subject: "CN=BIMI Test Intermediate",
370
+ notBefore: now, notAfter: far, signingAlgorithm: alg,
371
+ publicKey: interKeys.publicKey, signingKey: rootKeys.privateKey,
372
+ extensions: [
373
+ new x509.BasicConstraintsExtension(true, 0, true),
374
+ new x509.KeyUsagesExtension(caUsage, true),
375
+ ],
376
+ });
377
+ var leaf = await x509.X509CertificateGenerator.create({
378
+ serialNumber: "03", issuer: inter.subject, subject: "CN=example.com",
379
+ notBefore: now, notAfter: far, signingAlgorithm: alg,
380
+ publicKey: leafKeys.publicKey, signingKey: interKeys.privateKey,
381
+ extensions: [
382
+ new x509.BasicConstraintsExtension(false, undefined, true),
383
+ new x509.SubjectAlternativeNameExtension([{ type: "dns", value: "example.com" }]),
384
+ new x509.ExtendedKeyUsageExtension([BIMI_EKU_OID], false),
385
+ ],
386
+ });
387
+ return {
388
+ rootPem: root.toString("pem"),
389
+ intermediatePem: inter.toString("pem"),
390
+ leafPem: leaf.toString("pem"),
391
+ };
392
+ }
393
+
394
+ // _generateSelfSignedScenario — a self-signed leaf (with SAN + BIMI EKU)
395
+ // paired with an unrelated root as the trust anchor. The verifier reaches
396
+ // the "self-signed root not in bundle" branch.
397
+ async function _generateSelfSignedScenario() {
398
+ var leafKeys = await _genKey();
399
+ var otherKeys = await _genKey();
400
+ var now = new Date();
401
+ var far = new Date(now.getTime() + 10 * YEAR_MS);
402
+ var alg = { name: "ECDSA", hash: "SHA-256" };
403
+
404
+ var leaf = await x509.X509CertificateGenerator.createSelfSigned({
405
+ serialNumber: "05", name: "CN=example.com", notBefore: now, notAfter: far,
406
+ signingAlgorithm: alg, keys: leafKeys,
407
+ extensions: [
408
+ new x509.BasicConstraintsExtension(false, undefined, true),
409
+ new x509.SubjectAlternativeNameExtension([{ type: "dns", value: "example.com" }]),
410
+ new x509.ExtendedKeyUsageExtension([BIMI_EKU_OID], false),
411
+ ],
412
+ });
413
+ var other = await x509.X509CertificateGenerator.createSelfSigned({
414
+ serialNumber: "06", name: "CN=Unrelated Root", notBefore: now, notAfter: far,
415
+ signingAlgorithm: alg, keys: otherKeys,
416
+ extensions: [
417
+ new x509.BasicConstraintsExtension(true, 1, true),
418
+ new x509.KeyUsagesExtension(
419
+ x509.KeyUsageFlags.keyCertSign | x509.KeyUsageFlags.cRLSign, true),
420
+ ],
421
+ });
422
+ return {
423
+ leafPem: leaf.toString("pem"),
424
+ otherRootPem: other.toString("pem"),
425
+ };
426
+ }
427
+
304
428
  function _stubHttpClient(body, statusCode) {
305
429
  return {
306
430
  request: function (_opts) {
@@ -455,6 +579,578 @@ async function testFetchAndVerifyMarkBadOpts() {
455
579
  threw && threw.code === "bimi/bad-opts");
456
580
  }
457
581
 
582
+ // ---- recordShape adversarial branches ----
583
+
584
+ function testRecordShapeNonHttpsLogo() {
585
+ var threw = null;
586
+ try { b.mail.bimi.recordShape({ logoUrl: "http://example.com/logo.svg" }); }
587
+ catch (e) { threw = e; }
588
+ check("recordShape: non-https logoUrl throws mail-bimi/bad-logoUrl",
589
+ threw && threw.code === "mail-bimi/bad-logoUrl");
590
+ }
591
+
592
+ function testRecordShapeSemicolonLogo() {
593
+ // A semicolon survives safeUrl.parse (legal in the path) but must be
594
+ // refused as a TXT record-separator injection vector.
595
+ var threw = null;
596
+ try { b.mail.bimi.recordShape({ logoUrl: "https://example.com/logo.svg;a=evil" }); }
597
+ catch (e) { threw = e; }
598
+ check("recordShape: record-separator in logoUrl throws mail-bimi/bad-logo",
599
+ threw && threw.code === "mail-bimi/bad-logo");
600
+ }
601
+
602
+ function testRecordShapeSemicolonVmc() {
603
+ var threw = null;
604
+ try {
605
+ b.mail.bimi.recordShape({
606
+ logoUrl: "https://example.com/logo.svg",
607
+ vmcUrl: "https://example.com/cert.pem;a=evil",
608
+ });
609
+ } catch (e) { threw = e; }
610
+ check("recordShape: record-separator in vmcUrl throws mail-bimi/bad-vmc",
611
+ threw && threw.code === "mail-bimi/bad-vmc");
612
+ }
613
+
614
+ function testRecordShapeNonHttpsVmc() {
615
+ var threw = null;
616
+ try {
617
+ b.mail.bimi.recordShape({
618
+ logoUrl: "https://example.com/logo.svg",
619
+ vmcUrl: "http://example.com/cert.pem",
620
+ });
621
+ } catch (e) { threw = e; }
622
+ check("recordShape: non-https vmcUrl throws mail-bimi/bad-vmcUrl",
623
+ threw && threw.code === "mail-bimi/bad-vmcUrl");
624
+ }
625
+
626
+ // ---- parseRecord defensive branches ----
627
+
628
+ function testParseRecordNonString() {
629
+ check("parseRecord: number input returns null",
630
+ b.mail.bimi.parseRecord(12345) === null);
631
+ check("parseRecord: null input returns null",
632
+ b.mail.bimi.parseRecord(null) === null);
633
+ }
634
+
635
+ function testParseRecordTooLong() {
636
+ var big = "v=BIMI1; l=https://example.com/" + "a".repeat(2100);
637
+ check("parseRecord: record over 2 KiB cap returns null",
638
+ b.mail.bimi.parseRecord(big) === null);
639
+ }
640
+
641
+ // ---- fetchPolicy (DNS lookup path) ----
642
+
643
+ function _dnsStub(rows) {
644
+ return function (_qname, _type) { return Promise.resolve(rows); };
645
+ }
646
+ function _dnsReject(err) {
647
+ return function () { return Promise.reject(err); };
648
+ }
649
+
650
+ async function testFetchPolicySuccess() {
651
+ var pol = await b.mail.bimi.fetchPolicy("example.com", {
652
+ dnsLookup: _dnsStub([
653
+ ["v=BIMI1; l=https://example.com/logo.svg; a=https://example.com/cert.pem"],
654
+ ]),
655
+ });
656
+ check("fetchPolicy: resolves and parses the BIMI record",
657
+ pol && pol.v === "BIMI1" &&
658
+ pol.l === "https://example.com/logo.svg" &&
659
+ pol.a === "https://example.com/cert.pem");
660
+ }
661
+
662
+ async function testFetchPolicySelectorMultiChunk() {
663
+ // Non-default selector; first record is not BIMI (skipped), second is a
664
+ // multi-chunk TXT that must be joined before parsing.
665
+ var pol = await b.mail.bimi.fetchPolicy("example.com", {
666
+ selector: "brand",
667
+ dnsLookup: _dnsStub([
668
+ ["v=spf1 -all"],
669
+ ["v=BIMI1; ", "l=https://example.com/logo.svg"],
670
+ ]),
671
+ });
672
+ check("fetchPolicy: selector + multi-chunk record joins and parses",
673
+ pol && pol.v === "BIMI1" && pol.l === "https://example.com/logo.svg");
674
+ }
675
+
676
+ async function testFetchPolicyStringRow() {
677
+ // A resolver that returns flat string rows (not string[] chunks) must
678
+ // still parse — the record is coerced via String(rec).
679
+ var pol = await b.mail.bimi.fetchPolicy("example.com", {
680
+ dnsLookup: _dnsStub(["v=BIMI1; l=https://example.com/logo.svg"]),
681
+ });
682
+ check("fetchPolicy: flat string TXT row is coerced and parsed",
683
+ pol && pol.v === "BIMI1" && pol.l === "https://example.com/logo.svg");
684
+ }
685
+
686
+ async function testFetchPolicyNoBimiRecord() {
687
+ var pol = await b.mail.bimi.fetchPolicy("example.com", {
688
+ dnsLookup: _dnsStub([["v=spf1 -all"], ["random text"]]),
689
+ });
690
+ check("fetchPolicy: no v=BIMI1 record returns null", pol === null);
691
+ }
692
+
693
+ async function testFetchPolicyAbsence() {
694
+ // ENODATA / ENOTFOUND => absence, not error => null.
695
+ var e = new Error("no TXT records");
696
+ e.code = "ENODATA";
697
+ var pol = await b.mail.bimi.fetchPolicy("example.com", {
698
+ dnsLookup: _dnsReject(e),
699
+ });
700
+ check("fetchPolicy: ENODATA absence returns null", pol === null);
701
+ }
702
+
703
+ async function testFetchPolicyLookupFailure() {
704
+ var threw = null;
705
+ try {
706
+ await b.mail.bimi.fetchPolicy("example.com", {
707
+ dnsLookup: _dnsReject(new Error("SERVFAIL")),
708
+ });
709
+ } catch (err) { threw = err; }
710
+ check("fetchPolicy: non-absence lookup failure throws mail-bimi/lookup-failed",
711
+ threw && threw.code === "mail-bimi/lookup-failed");
712
+ }
713
+
714
+ async function testFetchPolicyBadDomain() {
715
+ var threw = null;
716
+ try { await b.mail.bimi.fetchPolicy(""); }
717
+ catch (err) { threw = err; }
718
+ check("fetchPolicy: empty domain throws mail-bimi/bad-domain",
719
+ threw && threw.code === "mail-bimi/bad-domain");
720
+ }
721
+
722
+ // ---- validateTinyPsSvg additional tokenizer / cap branches ----
723
+
724
+ function testTinyPsSvgTooLargeBuffer() {
725
+ var threw = null;
726
+ try { b.mail.bimi.validateTinyPsSvg(Buffer.alloc(40000, 0x20)); }
727
+ catch (e) { threw = e; }
728
+ check("tiny-ps: oversized Buffer throws bimi/svg-too-large",
729
+ threw && threw.code === "bimi/svg-too-large");
730
+ }
731
+
732
+ function testTinyPsSvgComment() {
733
+ var rv = b.mail.bimi.validateTinyPsSvg(
734
+ '<svg version="1.2" baseProfile="tiny-ps" viewBox="0 0 1 1"><!-- a comment --></svg>');
735
+ check("tiny-ps: well-formed comment is allowed", rv.ok === true);
736
+ }
737
+
738
+ function testTinyPsSvgUnterminatedComment() {
739
+ var threw = null;
740
+ try {
741
+ b.mail.bimi.validateTinyPsSvg(
742
+ '<svg version="1.2" baseProfile="tiny-ps" viewBox="0 0 1 1"><!-- never closed');
743
+ } catch (e) { threw = e; }
744
+ check("tiny-ps: unterminated comment throws bimi/svg-tiny-ps-violation (parse-failed)",
745
+ threw && threw.code === "bimi/svg-tiny-ps-violation" &&
746
+ /parse-failed/.test(threw.message));
747
+ }
748
+
749
+ function testTinyPsSvgCdata() {
750
+ var rv = b.mail.bimi.validateTinyPsSvg(
751
+ '<svg version="1.2" baseProfile="tiny-ps" viewBox="0 0 1 1"><title><![CDATA[hi]]></title></svg>');
752
+ check("tiny-ps: CDATA section is tolerated", rv.ok === true);
753
+ }
754
+
755
+ function testTinyPsSvgUnterminatedCdata() {
756
+ var threw = null;
757
+ try {
758
+ b.mail.bimi.validateTinyPsSvg(
759
+ '<svg version="1.2" baseProfile="tiny-ps" viewBox="0 0 1 1"><![CDATA[unterminated');
760
+ } catch (e) { threw = e; }
761
+ check("tiny-ps: unterminated CDATA throws parse-failed",
762
+ threw && threw.code === "bimi/svg-tiny-ps-violation");
763
+ }
764
+
765
+ function testTinyPsSvgDeclaration() {
766
+ var rv = b.mail.bimi.validateTinyPsSvg(
767
+ '<!ENTITY foo "bar"><svg version="1.2" baseProfile="tiny-ps" viewBox="0 0 1 1"></svg>');
768
+ check("tiny-ps: non-DOCTYPE declaration flagged",
769
+ !rv.ok && rv.violations.some(function (v) { return v.code === "declaration-forbidden"; }));
770
+ }
771
+
772
+ function testTinyPsSvgUnterminatedDeclaration() {
773
+ var threw = null;
774
+ try { b.mail.bimi.validateTinyPsSvg("<!ENTITY foo"); }
775
+ catch (e) { threw = e; }
776
+ check("tiny-ps: unterminated declaration throws parse-failed",
777
+ threw && threw.code === "bimi/svg-tiny-ps-violation");
778
+ }
779
+
780
+ function testTinyPsSvgProcessingInstruction() {
781
+ var rv = b.mail.bimi.validateTinyPsSvg(
782
+ '<svg version="1.2" baseProfile="tiny-ps" viewBox="0 0 1 1"><?php echo 1 ?></svg>');
783
+ check("tiny-ps: non-xml processing instruction flagged",
784
+ !rv.ok && rv.violations.some(function (v) { return v.code === "pi-forbidden"; }));
785
+ }
786
+
787
+ function testTinyPsSvgAnimatePrefixElement() {
788
+ // Starts with "animate" but is not in the static forbidden list — the
789
+ // prefix rule must still refuse it (future SMIL animation elements).
790
+ var rv = b.mail.bimi.validateTinyPsSvg(
791
+ '<svg version="1.2" baseProfile="tiny-ps" viewBox="0 0 1 1"><animateColor/></svg>');
792
+ check("tiny-ps: animate-prefixed element flagged as animation",
793
+ !rv.ok && rv.violations.some(function (v) {
794
+ return v.code === "element-forbidden" && /animation element/.test(v.message);
795
+ }));
796
+ }
797
+
798
+ function testTinyPsSvgTrailingText() {
799
+ var rv = b.mail.bimi.validateTinyPsSvg(GOOD_SVG + "trailing text after root");
800
+ check("tiny-ps: trailing text after root is tokenized without crash",
801
+ rv.ok === true);
802
+ }
803
+
804
+ function testTinyPsSvgUnterminatedDoctype() {
805
+ var threw = null;
806
+ try { b.mail.bimi.validateTinyPsSvg("<!DOCTYPE svg"); }
807
+ catch (e) { threw = e; }
808
+ check("tiny-ps: unterminated doctype throws parse-failed",
809
+ threw && threw.code === "bimi/svg-tiny-ps-violation");
810
+ }
811
+
812
+ function testTinyPsSvgUnterminatedProcessingInstruction() {
813
+ var threw = null;
814
+ try { b.mail.bimi.validateTinyPsSvg("<?xml foo"); }
815
+ catch (e) { threw = e; }
816
+ check("tiny-ps: unterminated processing instruction throws parse-failed",
817
+ threw && threw.code === "bimi/svg-tiny-ps-violation");
818
+ }
819
+
820
+ function testTinyPsSvgUnterminatedEndTag() {
821
+ var threw = null;
822
+ try {
823
+ b.mail.bimi.validateTinyPsSvg(
824
+ '<svg version="1.2" baseProfile="tiny-ps" viewBox="0 0 1 1"></svg');
825
+ } catch (e) { threw = e; }
826
+ check("tiny-ps: unterminated end tag throws parse-failed",
827
+ threw && threw.code === "bimi/svg-tiny-ps-violation");
828
+ }
829
+
830
+ function testTinyPsSvgUnterminatedStartTag() {
831
+ var threw = null;
832
+ try { b.mail.bimi.validateTinyPsSvg('<svg version="1.2"'); }
833
+ catch (e) { threw = e; }
834
+ check("tiny-ps: unterminated start tag throws parse-failed",
835
+ threw && threw.code === "bimi/svg-tiny-ps-violation");
836
+ }
837
+
838
+ function testTinyPsSvgSingleQuotedAttrs() {
839
+ var rv = b.mail.bimi.validateTinyPsSvg(
840
+ "<svg version='1.2' baseProfile='tiny-ps' viewBox='0 0 1 1'></svg>");
841
+ check("tiny-ps: single-quoted attributes accepted", rv.ok === true);
842
+ }
843
+
844
+ function testTinyPsSvgMissingVersion() {
845
+ var rv = b.mail.bimi.validateTinyPsSvg(
846
+ '<svg baseProfile="tiny-ps" viewBox="0 0 1 1"></svg>');
847
+ check("tiny-ps: entirely-missing version flagged as (missing)",
848
+ !rv.ok && rv.violations.some(function (v) {
849
+ return v.code === "bad-version" && /\(missing\)/.test(v.message);
850
+ }));
851
+ }
852
+
853
+ // ---- fetchAndVerifyMark additional error / chain / audit branches ----
854
+
855
+ function _throwingHttpClient(err) {
856
+ return { request: function () { return Promise.reject(err); } };
857
+ }
858
+
859
+ async function testFetchAndVerifyMarkRequestThrows() {
860
+ var chain = await _generateTestChain();
861
+ var threw = null;
862
+ try {
863
+ await b.mail.bimi.fetchAndVerifyMark({
864
+ domain: "example.com",
865
+ vmcUrl: "https://example.com/cert.pem",
866
+ trustAnchorsPem: chain.rootPem,
867
+ httpClient: _throwingHttpClient(new Error("ECONNREFUSED")),
868
+ });
869
+ } catch (e) { threw = e; }
870
+ check("fetchAndVerifyMark: transport error throws bimi/vmc-fetch-failed",
871
+ threw && threw.code === "bimi/vmc-fetch-failed" && /ECONNREFUSED/.test(threw.message));
872
+ }
873
+
874
+ async function testFetchAndVerifyMarkNoPemBlocks() {
875
+ // Body contains a BEGIN marker (passes the has-PEM check) but no END —
876
+ // _splitPemChain yields zero blocks.
877
+ var threw = null;
878
+ try {
879
+ await b.mail.bimi.fetchAndVerifyMark({
880
+ domain: "example.com",
881
+ vmcUrl: "https://example.com/cert.pem",
882
+ trustAnchorsPem: "anchor",
883
+ httpClient: _stubHttpClient("-----BEGIN CERTIFICATE-----\nabc\n"),
884
+ });
885
+ } catch (e) { threw = e; }
886
+ check("fetchAndVerifyMark: BEGIN-only body throws (no CERTIFICATE blocks)",
887
+ threw && threw.code === "bimi/vmc-fetch-failed" &&
888
+ /no CERTIFICATE blocks/.test(threw.message));
889
+ }
890
+
891
+ async function testFetchAndVerifyMarkGarbageIntermediate() {
892
+ var chain = await _generateTestChain();
893
+ var body = chain.leafPem +
894
+ "\n-----BEGIN CERTIFICATE-----\nnot-valid-der\n-----END CERTIFICATE-----\n";
895
+ var threw = null;
896
+ try {
897
+ await b.mail.bimi.fetchAndVerifyMark({
898
+ domain: "example.com",
899
+ vmcUrl: "https://example.com/cert.pem",
900
+ trustAnchorsPem: chain.rootPem,
901
+ httpClient: _stubHttpClient(body),
902
+ });
903
+ } catch (e) { threw = e; }
904
+ check("fetchAndVerifyMark: unparseable intermediate throws bimi/vmc-chain-invalid",
905
+ threw && threw.code === "bimi/vmc-chain-invalid" &&
906
+ /X.509 parse failed/.test(threw.message));
907
+ }
908
+
909
+ async function testFetchAndVerifyMarkGarbageTrustAnchor() {
910
+ var chain = await _generateTestChain();
911
+ var threw = null;
912
+ try {
913
+ await b.mail.bimi.fetchAndVerifyMark({
914
+ domain: "example.com",
915
+ vmcUrl: "https://example.com/cert.pem",
916
+ trustAnchorsPem: "-----BEGIN CERTIFICATE-----\nnot-valid\n-----END CERTIFICATE-----",
917
+ httpClient: _stubHttpClient(chain.leafPem),
918
+ });
919
+ } catch (e) { threw = e; }
920
+ check("fetchAndVerifyMark: unparseable trust anchor throws bimi/vmc-chain-invalid",
921
+ threw && threw.code === "bimi/vmc-chain-invalid" &&
922
+ /trust-anchor PEM parse failed/.test(threw.message));
923
+ }
924
+
925
+ async function testFetchAndVerifyMarkExpiredCert() {
926
+ var chain = await _generateTestChain({
927
+ leafNotBefore: new Date(Date.now() - 2 * YEAR_MS),
928
+ leafNotAfter: new Date(Date.now() - YEAR_MS),
929
+ });
930
+ var threw = null;
931
+ try {
932
+ await b.mail.bimi.fetchAndVerifyMark({
933
+ domain: "example.com",
934
+ vmcUrl: "https://example.com/cert.pem",
935
+ trustAnchorsPem: chain.rootPem,
936
+ httpClient: _stubHttpClient(chain.leafPem),
937
+ });
938
+ } catch (e) { threw = e; }
939
+ check("fetchAndVerifyMark: expired leaf throws bimi/vmc-chain-invalid (expired)",
940
+ threw && threw.code === "bimi/vmc-chain-invalid" && /expired/.test(threw.message));
941
+ }
942
+
943
+ async function testFetchAndVerifyMarkNotYetValidCert() {
944
+ var chain = await _generateTestChain({
945
+ leafNotBefore: new Date(Date.now() + YEAR_MS),
946
+ leafNotAfter: new Date(Date.now() + 2 * YEAR_MS),
947
+ });
948
+ var threw = null;
949
+ try {
950
+ await b.mail.bimi.fetchAndVerifyMark({
951
+ domain: "example.com",
952
+ vmcUrl: "https://example.com/cert.pem",
953
+ trustAnchorsPem: chain.rootPem,
954
+ httpClient: _stubHttpClient(chain.leafPem),
955
+ });
956
+ } catch (e) { threw = e; }
957
+ check("fetchAndVerifyMark: not-yet-valid leaf throws bimi/vmc-chain-invalid",
958
+ threw && threw.code === "bimi/vmc-chain-invalid" && /not-yet-valid/.test(threw.message));
959
+ }
960
+
961
+ async function testFetchAndVerifyMarkThreeLevelChain() {
962
+ var chain = await _generateThreeLevelChain();
963
+ var rv = await b.mail.bimi.fetchAndVerifyMark({
964
+ domain: "example.com",
965
+ vmcUrl: "https://example.com/cert.pem",
966
+ trustAnchorsPem: chain.rootPem,
967
+ httpClient: _stubHttpClient(chain.leafPem + "\n" + chain.intermediatePem),
968
+ });
969
+ check("fetchAndVerifyMark: leaf->intermediate->root chain validates",
970
+ rv.ok === true && rv.vmcType === "vmc");
971
+ }
972
+
973
+ async function testFetchAndVerifyMarkSelfSignedNotInBundle() {
974
+ var scenario = await _generateSelfSignedScenario();
975
+ var threw = null;
976
+ try {
977
+ await b.mail.bimi.fetchAndVerifyMark({
978
+ domain: "example.com",
979
+ vmcUrl: "https://example.com/cert.pem",
980
+ trustAnchorsPem: scenario.otherRootPem,
981
+ httpClient: _stubHttpClient(scenario.leafPem),
982
+ });
983
+ } catch (e) { threw = e; }
984
+ check("fetchAndVerifyMark: self-signed leaf not in bundle throws chain-invalid",
985
+ threw && threw.code === "bimi/vmc-chain-invalid" &&
986
+ /self-signed root not in trust-anchor/.test(threw.message));
987
+ }
988
+
989
+ async function testFetchAndVerifyMarkUriSanSuccess() {
990
+ var chain = await _generateTestChain({
991
+ sanEntries: [{ type: "url", value: "https://example.com" }],
992
+ });
993
+ var rv = await b.mail.bimi.fetchAndVerifyMark({
994
+ domain: "example.com",
995
+ vmcUrl: "https://example.com/cert.pem",
996
+ trustAnchorsPem: chain.rootPem,
997
+ httpClient: _stubHttpClient(chain.leafPem),
998
+ });
999
+ check("fetchAndVerifyMark: URI-form SAN matches the BIMI domain",
1000
+ rv.ok === true);
1001
+ }
1002
+
1003
+ async function testFetchAndVerifyMarkUriSanMalformed() {
1004
+ // A URI SAN carrying userinfo is refused by the URL parser — the SAN
1005
+ // matcher must fail closed (no substring fallback) rather than vouch for
1006
+ // the domain. documents current behavior.
1007
+ var chain = await _generateTestChain({
1008
+ sanEntries: [{ type: "url", value: "https://evil@example.com" }],
1009
+ });
1010
+ var threw = null;
1011
+ try {
1012
+ await b.mail.bimi.fetchAndVerifyMark({
1013
+ domain: "example.com",
1014
+ vmcUrl: "https://example.com/cert.pem",
1015
+ trustAnchorsPem: chain.rootPem,
1016
+ httpClient: _stubHttpClient(chain.leafPem),
1017
+ });
1018
+ } catch (e) { threw = e; }
1019
+ check("fetchAndVerifyMark: unparseable URI SAN fails closed (domain-mismatch)",
1020
+ threw && threw.code === "bimi/vmc-domain-mismatch");
1021
+ }
1022
+
1023
+ async function testFetchAndVerifyMarkNoSan() {
1024
+ var chain = await _generateTestChain({ noSan: true });
1025
+ var threw = null;
1026
+ try {
1027
+ await b.mail.bimi.fetchAndVerifyMark({
1028
+ domain: "example.com",
1029
+ vmcUrl: "https://example.com/cert.pem",
1030
+ trustAnchorsPem: chain.rootPem,
1031
+ httpClient: _stubHttpClient(chain.leafPem),
1032
+ });
1033
+ } catch (e) { threw = e; }
1034
+ check("fetchAndVerifyMark: certificate without SAN throws domain-mismatch (none)",
1035
+ threw && threw.code === "bimi/vmc-domain-mismatch" && /\(none\)/.test(threw.message));
1036
+ }
1037
+
1038
+ async function testFetchAndVerifyMarkLogotypeSvg() {
1039
+ var svgStr = '<svg version="1.2" baseProfile="tiny-ps" viewBox="0 0 1 1"></svg>';
1040
+ var chain = await _generateTestChain({ logoSvg: svgStr });
1041
+ var rv = await b.mail.bimi.fetchAndVerifyMark({
1042
+ domain: "example.com",
1043
+ vmcUrl: "https://example.com/cert.pem",
1044
+ trustAnchorsPem: chain.rootPem,
1045
+ httpClient: _stubHttpClient(chain.leafPem),
1046
+ });
1047
+ check("fetchAndVerifyMark: RFC 3709 logotype SVG is extracted onto mark.svg",
1048
+ rv.ok === true && typeof rv.mark.svg === "string" &&
1049
+ rv.mark.svg.indexOf("<svg") !== -1);
1050
+ }
1051
+
1052
+ async function testFetchAndVerifyMarkLogotypeNonSvgLeafThenSvg() {
1053
+ // A logotype SEQUENCE whose first leaf is not an SVG magic prefix — the
1054
+ // scanner skips it and keeps descending to the SVG leaf.
1055
+ var svgStr = '<svg version="1.2" baseProfile="tiny-ps" viewBox="0 0 1 1"></svg>';
1056
+ var seq = _derSequence(Buffer.concat([_OCTET_NON_SVG, _octetOf(svgStr)]));
1057
+ var chain = await _generateTestChain({ logotypeExt: _logotypeExtensionRaw(seq) });
1058
+ var rv = await b.mail.bimi.fetchAndVerifyMark({
1059
+ domain: "example.com",
1060
+ vmcUrl: "https://example.com/cert.pem",
1061
+ trustAnchorsPem: chain.rootPem,
1062
+ httpClient: _stubHttpClient(chain.leafPem),
1063
+ });
1064
+ check("fetchAndVerifyMark: scanner skips non-SVG leaf and finds the SVG",
1065
+ rv.ok === true && typeof rv.mark.svg === "string" &&
1066
+ rv.mark.svg.indexOf("<svg") !== -1);
1067
+ }
1068
+
1069
+ async function testFetchAndVerifyMarkLogotypeNoSvg() {
1070
+ // A logotype SEQUENCE with no SVG payload — the scan returns null and the
1071
+ // mark carries no svg.
1072
+ var seq = _derSequence(_OCTET_NON_SVG);
1073
+ var chain = await _generateTestChain({ logotypeExt: _logotypeExtensionRaw(seq) });
1074
+ var rv = await b.mail.bimi.fetchAndVerifyMark({
1075
+ domain: "example.com",
1076
+ vmcUrl: "https://example.com/cert.pem",
1077
+ trustAnchorsPem: chain.rootPem,
1078
+ httpClient: _stubHttpClient(chain.leafPem),
1079
+ });
1080
+ check("fetchAndVerifyMark: logotype without SVG yields mark.svg === null",
1081
+ rv.ok === true && rv.mark.svg === null);
1082
+ }
1083
+
1084
+ async function testFetchAndVerifyMarkLogotypeTruncatedSequence() {
1085
+ // Logotype value where the outer SEQUENCE fails a full sequence-decode
1086
+ // (trailing incomplete TLV) but the first complete TLV still decodes to
1087
+ // the SVG — exercises the readNode fallback in the scanner.
1088
+ var inner = Buffer.from([0x30, 0x07, 0x04, 0x04, 0x3C, 0x73, 0x76, 0x67, 0xFF]);
1089
+ var chain = await _generateTestChain({ logotypeExt: _logotypeExtensionRaw(inner) });
1090
+ var rv = await b.mail.bimi.fetchAndVerifyMark({
1091
+ domain: "example.com",
1092
+ vmcUrl: "https://example.com/cert.pem",
1093
+ trustAnchorsPem: chain.rootPem,
1094
+ httpClient: _stubHttpClient(chain.leafPem),
1095
+ });
1096
+ check("fetchAndVerifyMark: scanner recovers SVG via readNode fallback",
1097
+ rv.ok === true && typeof rv.mark.svg === "string" &&
1098
+ rv.mark.svg.indexOf("<svg") !== -1);
1099
+ }
1100
+
1101
+ async function testFetchAndVerifyMarkStringBodyAndExplicitOpts() {
1102
+ // Response body delivered as a string (not Buffer) with explicit
1103
+ // timeoutMs / maxResponseBytes overrides.
1104
+ var chain = await _generateTestChain();
1105
+ var rv = await b.mail.bimi.fetchAndVerifyMark({
1106
+ domain: "example.com",
1107
+ vmcUrl: "https://example.com/cert.pem",
1108
+ trustAnchorsPem: chain.rootPem,
1109
+ timeoutMs: 5000,
1110
+ maxResponseBytes: 65536,
1111
+ httpClient: {
1112
+ request: function () {
1113
+ return Promise.resolve({ statusCode: 200, headers: {}, body: chain.leafPem });
1114
+ },
1115
+ },
1116
+ });
1117
+ check("fetchAndVerifyMark: string body + explicit timeout/maxBytes validates",
1118
+ rv.ok === true);
1119
+ }
1120
+
1121
+ async function testFetchAndVerifyMarkAuditSinkSuccess() {
1122
+ var chain = await _generateTestChain();
1123
+ var events = [];
1124
+ var rv = await b.mail.bimi.fetchAndVerifyMark({
1125
+ domain: "example.com",
1126
+ vmcUrl: "https://example.com/cert.pem",
1127
+ trustAnchorsPem: chain.rootPem,
1128
+ httpClient: _stubHttpClient(chain.leafPem),
1129
+ evidenceDocument: "https://example.com/evidence.pdf",
1130
+ audit: { safeEmit: function (rec) { events.push(rec); } },
1131
+ });
1132
+ check("fetchAndVerifyMark: operator audit sink receives the success event",
1133
+ rv.ok === true &&
1134
+ rv.mark.evidenceDocument === "https://example.com/evidence.pdf" &&
1135
+ events.some(function (e) {
1136
+ return e.action === "mail.bimi.vmc.verified" && e.outcome === "success";
1137
+ }));
1138
+ }
1139
+
1140
+ async function testFetchAndVerifyMarkAuditSinkThrows() {
1141
+ // A throwing audit sink must NOT break the verify hot path (drop-silent).
1142
+ var chain = await _generateTestChain();
1143
+ var rv = await b.mail.bimi.fetchAndVerifyMark({
1144
+ domain: "example.com",
1145
+ vmcUrl: "https://example.com/cert.pem",
1146
+ trustAnchorsPem: chain.rootPem,
1147
+ httpClient: _stubHttpClient(chain.leafPem),
1148
+ audit: { safeEmit: function () { throw new Error("sink boom"); } },
1149
+ });
1150
+ check("fetchAndVerifyMark: throwing audit sink is swallowed (verify still succeeds)",
1151
+ rv.ok === true);
1152
+ }
1153
+
458
1154
  async function run() {
459
1155
  testSurface();
460
1156
  testRecordShape();
@@ -482,6 +1178,30 @@ async function run() {
482
1178
  testTinyPsSvgTooLarge();
483
1179
  testTinyPsSvgBadInput();
484
1180
 
1181
+ testRecordShapeNonHttpsLogo();
1182
+ testRecordShapeSemicolonLogo();
1183
+ testRecordShapeSemicolonVmc();
1184
+ testRecordShapeNonHttpsVmc();
1185
+ testParseRecordNonString();
1186
+ testParseRecordTooLong();
1187
+
1188
+ testTinyPsSvgTooLargeBuffer();
1189
+ testTinyPsSvgComment();
1190
+ testTinyPsSvgUnterminatedComment();
1191
+ testTinyPsSvgCdata();
1192
+ testTinyPsSvgUnterminatedCdata();
1193
+ testTinyPsSvgDeclaration();
1194
+ testTinyPsSvgUnterminatedDeclaration();
1195
+ testTinyPsSvgProcessingInstruction();
1196
+ testTinyPsSvgAnimatePrefixElement();
1197
+ testTinyPsSvgTrailingText();
1198
+ testTinyPsSvgUnterminatedDoctype();
1199
+ testTinyPsSvgUnterminatedProcessingInstruction();
1200
+ testTinyPsSvgUnterminatedEndTag();
1201
+ testTinyPsSvgUnterminatedStartTag();
1202
+ testTinyPsSvgSingleQuotedAttrs();
1203
+ testTinyPsSvgMissingVersion();
1204
+
485
1205
  await testFetchAndVerifyMarkSuccess();
486
1206
  await testFetchAndVerifyMarkCmc();
487
1207
  await testFetchAndVerifyMarkChainInvalid();
@@ -492,6 +1212,33 @@ async function run() {
492
1212
  await testFetchAndVerifyMarkHttpStatusFailure();
493
1213
  await testFetchAndVerifyMarkBadOpts();
494
1214
 
1215
+ await testFetchPolicySuccess();
1216
+ await testFetchPolicySelectorMultiChunk();
1217
+ await testFetchPolicyStringRow();
1218
+ await testFetchPolicyNoBimiRecord();
1219
+ await testFetchPolicyAbsence();
1220
+ await testFetchPolicyLookupFailure();
1221
+ await testFetchPolicyBadDomain();
1222
+
1223
+ await testFetchAndVerifyMarkRequestThrows();
1224
+ await testFetchAndVerifyMarkNoPemBlocks();
1225
+ await testFetchAndVerifyMarkGarbageIntermediate();
1226
+ await testFetchAndVerifyMarkGarbageTrustAnchor();
1227
+ await testFetchAndVerifyMarkExpiredCert();
1228
+ await testFetchAndVerifyMarkNotYetValidCert();
1229
+ await testFetchAndVerifyMarkThreeLevelChain();
1230
+ await testFetchAndVerifyMarkSelfSignedNotInBundle();
1231
+ await testFetchAndVerifyMarkUriSanSuccess();
1232
+ await testFetchAndVerifyMarkUriSanMalformed();
1233
+ await testFetchAndVerifyMarkNoSan();
1234
+ await testFetchAndVerifyMarkLogotypeSvg();
1235
+ await testFetchAndVerifyMarkLogotypeNonSvgLeafThenSvg();
1236
+ await testFetchAndVerifyMarkLogotypeNoSvg();
1237
+ await testFetchAndVerifyMarkLogotypeTruncatedSequence();
1238
+ await testFetchAndVerifyMarkStringBodyAndExplicitOpts();
1239
+ await testFetchAndVerifyMarkAuditSinkSuccess();
1240
+ await testFetchAndVerifyMarkAuditSinkThrows();
1241
+
495
1242
  // Suppress unused warning - reserved for future fixture-based negative tests.
496
1243
  void nodeCrypto;
497
1244
  }