@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
@@ -1,565 +0,0 @@
1
- // SPDX-License-Identifier: Apache-2.0
2
- // Copyright (c) blamejs contributors
3
- "use strict";
4
- /**
5
- * b.network.smtp.policy — coverage for the input-validation, option-default,
6
- * error-handling, and pure-logic branches that smtp-policy.test.js leaves
7
- * uncovered.
8
- *
9
- * Everything here is in-memory: DNS is driven through the `dnsLookup` opt,
10
- * HTTPS submission through an operator-supplied `httpClient` fake, and the
11
- * receive-side `parseReport` runs on Buffers built in-process. No branch
12
- * needs a live network or DNS backend (those belong to the integration
13
- * suite). The uncovered surface is: MTA-STS parse rejects (empty / bad-mode /
14
- * non-string), matchMx defensive returns, mtaSts.fetch precondition + domain
15
- * guard, dane.tlsa / recordShape guards + every RFC 6698 label, verifyChain
16
- * PKIX-opt-in + unsupported-usage + SHA-512 + SPKI-no-bytes paths, tlsRpt
17
- * recordShape type guards + policy defaults, fetchPolicy rua-required +
18
- * no-record returns, submit scheme dispatch + failure branches, and the
19
- * entire tlsRpt.parseReport receive-side parser.
20
- */
21
-
22
- var helpers = require("../helpers");
23
- var b = helpers.b;
24
- var check = helpers.check;
25
-
26
- var nodeCrypto = require("crypto");
27
- var zlib = require("zlib");
28
- var C = require("../../lib/constants");
29
-
30
- // ---- small local helpers -------------------------------------------------
31
-
32
- function throwsWithCode(fn, codeRe) {
33
- var threw = null;
34
- try { fn(); } catch (e) { threw = e; }
35
- return threw !== null && codeRe.test(threw.code || "");
36
- }
37
-
38
- async function asyncThrowsWithCode(fn, codeRe) {
39
- var threw = null;
40
- try { await fn(); } catch (e) { threw = e; }
41
- return threw !== null && codeRe.test(threw.code || "");
42
- }
43
-
44
- // ---- MTA-STS parse (mtaSts.parsePolicy) ----------------------------------
45
-
46
- function testParseStsEmptyAndNonString() {
47
- check("parsePolicy: empty text → mta-sts-empty",
48
- throwsWithCode(function () { b.network.smtp.mtaSts.parsePolicy(""); }, /mta-sts-empty/));
49
- check("parsePolicy: non-string → mta-sts-empty",
50
- throwsWithCode(function () { b.network.smtp.mtaSts.parsePolicy(null); }, /mta-sts-empty/));
51
- check("parsePolicy: number → mta-sts-empty",
52
- throwsWithCode(function () { b.network.smtp.mtaSts.parsePolicy(42); }, /mta-sts-empty/));
53
- }
54
-
55
- function testParseStsBadMode() {
56
- check("parsePolicy: unknown mode → mta-sts-bad-mode",
57
- throwsWithCode(function () {
58
- b.network.smtp.mtaSts.parsePolicy("version: STSv1\nmode: bogus\n");
59
- }, /mta-sts-bad-mode/));
60
- // A version-only policy (no mode line) leaves mode null → bad-mode.
61
- check("parsePolicy: missing mode → mta-sts-bad-mode",
62
- throwsWithCode(function () {
63
- b.network.smtp.mtaSts.parsePolicy("version: STSv1\nmax_age: 100\n");
64
- }, /mta-sts-bad-mode/));
65
- }
66
-
67
- function testParseStsModeVariantsAndMaxAge() {
68
- var testing = b.network.smtp.mtaSts.parsePolicy("version: STSv1\nmode: testing\n");
69
- check("parsePolicy: testing mode accepted", testing.mode === "testing");
70
-
71
- var none = b.network.smtp.mtaSts.parsePolicy("version: STSv1\nmode: none\n");
72
- check("parsePolicy: none mode accepted", none.mode === "none");
73
-
74
- // mode is lowercased on parse.
75
- var upper = b.network.smtp.mtaSts.parsePolicy("version: STSv1\nmode: ENFORCE\n");
76
- check("parsePolicy: mode is case-normalized to lowercase", upper.mode === "enforce");
77
-
78
- // mx hosts are lowercased and collected in order (repeats preserved).
79
- var multi = b.network.smtp.mtaSts.parsePolicy(
80
- "version: STSv1\nmode: enforce\nmx: MX1.Example.COM\nmx: mx2.example.com\n");
81
- check("parsePolicy: mx hosts lowercased + ordered",
82
- multi.mx.length === 2 && multi.mx[0] === "mx1.example.com" && multi.mx[1] === "mx2.example.com");
83
-
84
- // With no max_age line the field stays null (falls back to the default TTL
85
- // inside fetch; parse itself just records absence).
86
- check("parsePolicy: absent max_age stays null", multi.max_age === null);
87
- }
88
-
89
- // ---- MTA-STS MX match (mtaSts.matchMx) — defensive returns ----------------
90
-
91
- function testMatchMxDefensiveReturns() {
92
- check("matchMx: non-string mxHost → false",
93
- b.network.smtp.mtaSts.matchMx(123, ["mx.example.com"]) === false);
94
- check("matchMx: non-array mxList → false",
95
- b.network.smtp.mtaSts.matchMx("mx.example.com", "mx.example.com") === false);
96
- check("matchMx: null mxList → false",
97
- b.network.smtp.mtaSts.matchMx("mx.example.com", null) === false);
98
- }
99
-
100
- function testMatchMxCaseAndDotEdges() {
101
- // Case-insensitive exact match.
102
- check("matchMx: exact match is case-insensitive",
103
- b.network.smtp.mtaSts.matchMx("MX1.EXAMPLE.COM", ["mx1.example.com"]) === true);
104
- // A single-label host (no dot) cannot satisfy a wildcard entry.
105
- check("matchMx: dotless host vs wildcard → false",
106
- b.network.smtp.mtaSts.matchMx("localhost", ["*.example.com"]) === false);
107
- // A bare "*." entry is too short to be a wildcard and never matches.
108
- check("matchMx: bare '*.' entry never matches",
109
- b.network.smtp.mtaSts.matchMx("a.example.com", ["*."]) === false);
110
- // A non-matching-suffix wildcard → false.
111
- check("matchMx: wildcard suffix must match",
112
- b.network.smtp.mtaSts.matchMx("mx1.other.com", ["*.example.com"]) === false);
113
- }
114
-
115
- // ---- MTA-STS fetch (mtaSts.fetch) — precondition + domain guard -----------
116
-
117
- async function testMtaStsFetchDomainGuard() {
118
- check("mtaSts.fetch: non-string domain → bad-domain",
119
- await asyncThrowsWithCode(function () { return b.network.smtp.mtaSts.fetch(123); }, /bad-domain/));
120
- check("mtaSts.fetch: empty domain → bad-domain",
121
- await asyncThrowsWithCode(function () { return b.network.smtp.mtaSts.fetch(""); }, /bad-domain/));
122
- }
123
-
124
- async function testMtaStsFetchNoTxtRecord() {
125
- // A domain whose _mta-sts TXT does not carry v=STSv1 has no rotation
126
- // signal → fetch refuses to pull the HTTPS policy (RFC 8461 §3.1) and
127
- // returns null WITHOUT touching the network.
128
- var dnsLookup = async function () { return [["some-unrelated-txt-value"]]; };
129
- var rv = await b.network.smtp.mtaSts.fetch("example.com", { dnsLookup: dnsLookup });
130
- check("mtaSts.fetch: TXT without v=STSv1 → null", rv === null);
131
- }
132
-
133
- async function testMtaStsFetchTxtAbsent() {
134
- // ENOTFOUND from the resolver → safeResolveTxt returns null → fetch null.
135
- var dnsLookup = async function () { var e = new Error("nx"); e.code = "ENOTFOUND"; throw e; };
136
- var rv = await b.network.smtp.mtaSts.fetch("no-such.example.com", { dnsLookup: dnsLookup });
137
- check("mtaSts.fetch: absent _mta-sts TXT → null", rv === null);
138
- }
139
-
140
- // ---- DANE tlsa (dane.tlsa) — domain guard ---------------------------------
141
-
142
- async function testDaneTlsaDomainGuard() {
143
- check("dane.tlsa: non-string domain → bad-domain",
144
- await asyncThrowsWithCode(function () { return b.network.smtp.dane.tlsa(42); }, /bad-domain/));
145
- check("dane.tlsa: empty domain → bad-domain",
146
- await asyncThrowsWithCode(function () { return b.network.smtp.dane.tlsa(""); }, /bad-domain/));
147
- }
148
-
149
- // ---- DANE recordShape (dane.recordShape) — guard + every label -----------
150
-
151
- function testDaneRecordShapeGuard() {
152
- check("dane.recordShape: non-object → dane-bad-record",
153
- throwsWithCode(function () { b.network.smtp.dane.recordShape(null); }, /dane-bad-record/));
154
- check("dane.recordShape: string → dane-bad-record",
155
- throwsWithCode(function () { b.network.smtp.dane.recordShape("x"); }, /dane-bad-record/));
156
- }
157
-
158
- function testDaneRecordShapeAllLabels() {
159
- var pkixTa = b.network.smtp.dane.recordShape({ usage: 0, selector: 0, mtype: 0, dataHex: "aa" });
160
- check("recordShape: usage 0 / selector 0 / mtype 0 → PKIX-TA / Cert / Full",
161
- pkixTa.usageLabel === "PKIX-TA" && pkixTa.selectorLabel === "Cert" && pkixTa.mtypeLabel === "Full");
162
-
163
- var pkixEe = b.network.smtp.dane.recordShape({ usage: 1, selector: 1, mtype: 2, dataHex: "bb" });
164
- check("recordShape: usage 1 / selector 1 / mtype 2 → PKIX-EE / SPKI / SHA-512",
165
- pkixEe.usageLabel === "PKIX-EE" && pkixEe.selectorLabel === "SPKI" && pkixEe.mtypeLabel === "SHA-512");
166
-
167
- var daneTa = b.network.smtp.dane.recordShape({ usage: 2, selector: 0, mtype: 1, dataHex: "cc" });
168
- check("recordShape: usage 2 → DANE-TA", daneTa.usageLabel === "DANE-TA");
169
-
170
- var unknown = b.network.smtp.dane.recordShape({ usage: 9, selector: 5, mtype: 7, dataHex: "dd" });
171
- check("recordShape: out-of-range codes → unknown labels",
172
- unknown.usageLabel === "unknown" && unknown.selectorLabel === "unknown" && unknown.mtypeLabel === "unknown");
173
-
174
- // The raw fields pass through unchanged.
175
- check("recordShape: raw fields pass through",
176
- daneTa.usage === 2 && daneTa.selector === 0 && daneTa.mtype === 1 && daneTa.dataHex === "cc");
177
- }
178
-
179
- // ---- DANE verifyChain (dane.verifyChain) — uncovered branches ------------
180
-
181
- function testVerifyChainPkixOptIn() {
182
- var leaf = Buffer.from("leaf-der-bytes", "utf8");
183
- var ca = Buffer.from("ca-der-bytes", "utf8");
184
-
185
- // PKIX-EE (usage 1) with allowPkixModes → matches leaf, flags pkixPathRequired.
186
- var eeRec = { usage: 1, selector: 0, mtype: 0, dataHex: leaf.toString("hex") };
187
- var eeRv = b.network.smtp.dane.verifyChain([leaf, ca], [eeRec], { allowPkixModes: true });
188
- check("verifyChain: PKIX-EE opt-in matches leaf with pkixPathRequired",
189
- eeRv.ok === true && eeRv.matches[0].usage === "PKIX-EE" &&
190
- eeRv.matches[0].certIndex === 0 && eeRv.matches[0].pkixPathRequired === true);
191
-
192
- // PKIX-TA (usage 0) with allowPkixModes → matches a non-leaf cert.
193
- var taRec = { usage: 0, selector: 0, mtype: 0, dataHex: ca.toString("hex") };
194
- var taRv = b.network.smtp.dane.verifyChain([leaf, ca], [taRec], { allowPkixModes: true });
195
- check("verifyChain: PKIX-TA opt-in matches trust-anchor cert with pkixPathRequired",
196
- taRv.ok === true && taRv.matches[0].usage === "PKIX-TA" &&
197
- taRv.matches[0].certIndex === 1 && taRv.matches[0].pkixPathRequired === true);
198
- }
199
-
200
- function testVerifyChainUnsupportedUsage() {
201
- var leaf = Buffer.from("leaf", "utf8");
202
- var rec = { usage: 7, selector: 0, mtype: 0, dataHex: "00" }; // out-of-range usage
203
- var rv = b.network.smtp.dane.verifyChain([leaf], [rec]);
204
- check("verifyChain: unsupported usage → ok=false + unsupported-usage error",
205
- rv.ok === false && rv.matches.length === 0 &&
206
- rv.errors[0] && rv.errors[0].reason === "unsupported-usage" && rv.errors[0].usage === 7);
207
- }
208
-
209
- function testVerifyChainDaneEeSha512() {
210
- var leaf = Buffer.from("leaf-bytes-for-sha512", "utf8");
211
- var sha512Hex = nodeCrypto.createHash("sha512").update(leaf).digest("hex");
212
- var rec = { usage: 3, selector: 0, mtype: 2, dataHex: sha512Hex };
213
- var rv = b.network.smtp.dane.verifyChain([leaf], [rec]);
214
- check("verifyChain: DANE-EE / Cert / SHA-512 matches via hash",
215
- rv.ok === true && rv.matches[0].usage === "DANE-EE" && rv.matches[0].mtype === "SHA-512");
216
- }
217
-
218
- function testVerifyChainSpkiSelectorNoBytes() {
219
- // selector=1 (SPKI) on a non-DER buffer → SPKI extraction returns null →
220
- // no match (the `if (!bytes) return null` branch in _matchTlsaAgainstCert).
221
- var fake = Buffer.from("definitely not DER", "utf8");
222
- var rec = { usage: 3, selector: 1, mtype: 0, dataHex: fake.toString("hex") };
223
- var rv = b.network.smtp.dane.verifyChain([fake], [rec]);
224
- check("verifyChain: SPKI selector on non-DER cert → no match",
225
- rv.ok === false && rv.matches.length === 0);
226
- }
227
-
228
- // ---- TLS-RPT recordShape (tlsRpt.recordShape) — type guards + defaults ----
229
-
230
- function testRecordShapeTypeGuards() {
231
- check("recordShape: non-string organization → tls-rpt-bad-organization",
232
- throwsWithCode(function () {
233
- b.network.smtp.tlsRpt.recordShape({ organization: 123, policies: [] });
234
- }, /tls-rpt-bad-organization/));
235
- check("recordShape: non-array policies → tls-rpt-bad-policies",
236
- throwsWithCode(function () {
237
- b.network.smtp.tlsRpt.recordShape({ organization: "example.com", policies: "nope" });
238
- }, /tls-rpt-bad-policies/));
239
- }
240
-
241
- function testRecordShapePolicyDefaults() {
242
- var rpt = b.network.smtp.tlsRpt.recordShape({
243
- organization: "example.com",
244
- policies: [{ domain: "example.com" }], // everything else defaulted
245
- });
246
- var pol = rpt.policies[0];
247
- check("recordShape: policy-type defaults to 'sts'", pol.policy["policy-type"] === "sts");
248
- check("recordShape: policy-string defaults to []",
249
- Array.isArray(pol.policy["policy-string"]) && pol.policy["policy-string"].length === 0);
250
- check("recordShape: mx-host defaults to []",
251
- Array.isArray(pol.policy["mx-host"]) && pol.policy["mx-host"].length === 0);
252
- check("recordShape: session counts default to 0",
253
- pol.summary["total-successful-session-count"] === 0 &&
254
- pol.summary["total-failure-session-count"] === 0);
255
- check("recordShape: failure-details defaults to []",
256
- Array.isArray(pol["failure-details"]) && pol["failure-details"].length === 0);
257
- // A generated report-id + a default date-range are always present.
258
- check("recordShape: auto report-id present",
259
- typeof rpt["report-id"] === "string" && rpt["report-id"].length > 0);
260
- check("recordShape: default date-range present",
261
- typeof rpt["date-range"]["start-datetime"] === "string" &&
262
- typeof rpt["date-range"]["end-datetime"] === "string");
263
- check("recordShape: contact-info defaults to null", rpt["contact-info"] === null);
264
- }
265
-
266
- // ---- TLS-RPT fetchPolicy (tlsRpt.fetchPolicy) — guard + no-record returns --
267
-
268
- async function testFetchPolicyDomainGuard() {
269
- check("fetchPolicy: non-string domain → tls-rpt-bad-domain",
270
- await asyncThrowsWithCode(function () { return b.network.smtp.tlsRpt.fetchPolicy(42); }, /tls-rpt-bad-domain/));
271
- }
272
-
273
- async function testFetchPolicyRuaRequired() {
274
- // A v=TLSRPTv1 record with no rua= is malformed and MUST be ignored.
275
- var dnsLookup = async function () { return [["v=TLSRPTv1;"]]; };
276
- var rv = await b.network.smtp.tlsRpt.fetchPolicy("example.com", { dnsLookup: dnsLookup });
277
- check("fetchPolicy: v=TLSRPTv1 without rua → null", rv === null);
278
- }
279
-
280
- async function testFetchPolicyNoMatchingRecord() {
281
- // No record begins with v=TLSRPTv1 → null.
282
- var dnsLookup = async function () { return [["v=spf1 -all"]]; };
283
- var rv = await b.network.smtp.tlsRpt.fetchPolicy("example.com", { dnsLookup: dnsLookup });
284
- check("fetchPolicy: no v=TLSRPTv1 record → null", rv === null);
285
- }
286
-
287
- async function testFetchPolicyNoTxtAtAll() {
288
- // safeResolveTxt returns null on ENODATA → fetchPolicy null.
289
- var dnsLookup = async function () { var e = new Error("nodata"); e.code = "ENODATA"; throw e; };
290
- var rv = await b.network.smtp.tlsRpt.fetchPolicy("bare.example.com", { dnsLookup: dnsLookup });
291
- check("fetchPolicy: no TXT record at all → null", rv === null);
292
- }
293
-
294
- async function testFetchPolicyTrimsAndSplitsRua() {
295
- var dnsLookup = async function () {
296
- return [["v=TLSRPTv1; rua=https://a.example.com/r , mailto:tls@example.com "]];
297
- };
298
- var rv = await b.network.smtp.tlsRpt.fetchPolicy("example.com", { dnsLookup: dnsLookup });
299
- check("fetchPolicy: comma-split rua entries are trimmed",
300
- rv && rv.rua.length === 2 &&
301
- rv.rua[0] === "https://a.example.com/r" && rv.rua[1] === "mailto:tls@example.com");
302
- }
303
-
304
- // ---- TLS-RPT submit (tlsRpt.submit) — dispatch + failure branches ----------
305
-
306
- async function testSubmitRejectsNonObjectReport() {
307
- check("submit: non-object report → tls-rpt-bad-report",
308
- await asyncThrowsWithCode(function () {
309
- return b.network.smtp.tlsRpt.submit("not-a-report", { rua: ["https://x.example/r"] });
310
- }, /tls-rpt-bad-report/));
311
- }
312
-
313
- async function testSubmitHttpsNon2xx() {
314
- // The framework httpClient resolves { statusCode, headers, body } — the
315
- // fake mirrors that real contract so this branch exercises the shape the
316
- // production path actually returns.
317
- var fakeHttp = { request: async function () { return { statusCode: 500, body: Buffer.from("") }; } };
318
- var rv = await b.network.smtp.tlsRpt.submit(
319
- { "organization-name": "example.com", "report-id": "r1" },
320
- { rua: ["https://reports.example.com/submit"], httpClient: fakeHttp });
321
- var e = rv.results[0];
322
- check("submit: https non-2xx → ok=false with HTTP-status error",
323
- e.kind === "https" && e.ok === false && e.error === "HTTP 500");
324
- }
325
-
326
- async function testSubmitHttpsSuccess2xx() {
327
- // A successful submission MUST be reported ok=true. The framework
328
- // httpClient resolves { statusCode, headers, body } (see mtaSts.fetch,
329
- // which reads res.statusCode); a submit path that reads a non-existent
330
- // `status` field would mark every real 2xx POST as a failure.
331
- var fakeHttp = { request: async function () { return { statusCode: 200, headers: {}, body: Buffer.from("") }; } };
332
- var rv = await b.network.smtp.tlsRpt.submit(
333
- { "organization-name": "example.com", "report-id": "r1" },
334
- { rua: ["https://reports.example.com/submit"], httpClient: fakeHttp });
335
- var e = rv.results[0];
336
- check("submit: https 2xx → ok=true, status=200, no error",
337
- e.kind === "https" && e.ok === true && e.status === 200 && e.error === null);
338
- }
339
-
340
- async function testSubmitHttpsThrows() {
341
- var fakeHttp = { request: async function () { throw new Error("connreset"); } };
342
- var rv = await b.network.smtp.tlsRpt.submit(
343
- { "organization-name": "example.com" },
344
- { rua: ["https://reports.example.com/submit"], httpClient: fakeHttp });
345
- var e = rv.results[0];
346
- check("submit: https request throw is caught into entry.error",
347
- e.ok === false && /connreset/.test(e.error || ""));
348
- }
349
-
350
- async function testSubmitInvalidMailtoAddr() {
351
- var rv = await b.network.smtp.tlsRpt.submit(
352
- { "organization-name": "example.com" },
353
- { rua: ["mailto:not a valid address"] });
354
- var e = rv.results[0];
355
- check("submit: invalid mailto addr-spec → refused, not forwarded",
356
- e.ok === false && /not a valid RFC 5322 addr-spec/.test(e.error || "") && !e.mailto);
357
- }
358
-
359
- async function testSubmitUnsupportedScheme() {
360
- var rv = await b.network.smtp.tlsRpt.submit(
361
- { "organization-name": "example.com" },
362
- { rua: ["ftp://reports.example.com/r"] });
363
- var e = rv.results[0];
364
- check("submit: unsupported rua scheme → error names the scheme",
365
- e.ok === false && /unsupported rua URI scheme: ftp/.test(e.error || ""));
366
- }
367
-
368
- async function testSubmitValidMailtoBody() {
369
- var report = b.network.smtp.tlsRpt.recordShape({
370
- organization: "example.com",
371
- reportId: "rpt-777",
372
- policies: [{ type: "sts", domain: "example.com" }],
373
- });
374
- var rv = await b.network.smtp.tlsRpt.submit(report, { rua: ["mailto:tls@example.com"] });
375
- var e = rv.results[0];
376
- check("submit: valid mailto → prepared gzip body + subject with Report-ID",
377
- e.kind === "mailto" && e.ok === true &&
378
- Buffer.isBuffer(e.mailto.body) && e.mailto.body[0] === 0x1f && e.mailto.body[1] === 0x8b &&
379
- e.mailto.to === "tls@example.com" &&
380
- e.mailto.subject.indexOf("rpt-777") !== -1);
381
- }
382
-
383
- // ---- TLS-RPT parseReport (tlsRpt.parseReport) — receive-side parser -------
384
-
385
- function _validReport() {
386
- return {
387
- "organization-name": "reporter.example",
388
- "date-range": { "start-datetime": "2026-01-01T00:00:00Z", "end-datetime": "2026-01-02T00:00:00Z" },
389
- "report-id": "report-abc-123",
390
- "contact-info": "tls-reports@reporter.example",
391
- "policies": [
392
- { summary: { "total-successful-session-count": 10, "total-failure-session-count": 3 } },
393
- { summary: { "total-successful-session-count": 5, "total-failure-session-count": 1 } },
394
- ],
395
- };
396
- }
397
-
398
- function testParseReportBadInput() {
399
- check("parseReport: null body → tls-rpt-bad-input",
400
- throwsWithCode(function () { b.network.smtp.tlsRpt.parseReport(null); }, /tls-rpt-bad-input/));
401
- check("parseReport: undefined body → tls-rpt-bad-input",
402
- throwsWithCode(function () { b.network.smtp.tlsRpt.parseReport(undefined); }, /tls-rpt-bad-input/));
403
- check("parseReport: number body → tls-rpt-bad-input",
404
- throwsWithCode(function () { b.network.smtp.tlsRpt.parseReport(12345); }, /tls-rpt-bad-input/));
405
- }
406
-
407
- function testParseReportBadJsonAndShape() {
408
- check("parseReport: malformed JSON → tls-rpt-bad-json",
409
- throwsWithCode(function () { b.network.smtp.tlsRpt.parseReport("{not json"); }, /tls-rpt-bad-json/));
410
- check("parseReport: scalar JSON (number) → tls-rpt-bad-shape",
411
- throwsWithCode(function () { b.network.smtp.tlsRpt.parseReport("123"); }, /tls-rpt-bad-shape/));
412
- check("parseReport: JSON null → tls-rpt-bad-shape",
413
- throwsWithCode(function () { b.network.smtp.tlsRpt.parseReport("null"); }, /tls-rpt-bad-shape/));
414
- }
415
-
416
- function testParseReportMissingRequiredField() {
417
- var r = _validReport();
418
- delete r["report-id"];
419
- check("parseReport: missing required field → tls-rpt-missing-field",
420
- throwsWithCode(function () { b.network.smtp.tlsRpt.parseReport(JSON.stringify(r)); }, /tls-rpt-missing-field/));
421
- }
422
-
423
- function testParseReportBadDateRange() {
424
- var r = _validReport();
425
- r["date-range"] = { "start-datetime": 1234, "end-datetime": "2026-01-02T00:00:00Z" };
426
- check("parseReport: non-string date-range field → tls-rpt-bad-date-range",
427
- throwsWithCode(function () { b.network.smtp.tlsRpt.parseReport(JSON.stringify(r)); }, /tls-rpt-bad-date-range/));
428
- }
429
-
430
- function testParseReportPoliciesNotArray() {
431
- var r = _validReport();
432
- r.policies = { "0": {} };
433
- check("parseReport: policies not an array → tls-rpt-bad-policies",
434
- throwsWithCode(function () { b.network.smtp.tlsRpt.parseReport(JSON.stringify(r)); }, /tls-rpt-bad-policies/));
435
- }
436
-
437
- function testParseReportTooManyPolicies() {
438
- var r = _validReport();
439
- r.policies = [];
440
- for (var i = 0; i < 1025; i += 1) r.policies.push({ summary: {} }); // cap is 1024
441
- check("parseReport: > 1024 policies → tls-rpt-too-many-policies",
442
- throwsWithCode(function () { b.network.smtp.tlsRpt.parseReport(JSON.stringify(r)); }, /tls-rpt-too-many-policies/));
443
- }
444
-
445
- function testParseReportTooLarge() {
446
- // A body larger than the 8 MiB cap is refused before any parse/decompress.
447
- var big = Buffer.alloc(C.BYTES.mib(8) + 1, 0x20); // spaces, not gzip magic
448
- check("parseReport: over-cap body → tls-rpt-too-large",
449
- throwsWithCode(function () { b.network.smtp.tlsRpt.parseReport(big); }, /tls-rpt-too-large/));
450
- }
451
-
452
- function testParseReportHappyPathAggregates() {
453
- var parsed = b.network.smtp.tlsRpt.parseReport(JSON.stringify(_validReport()));
454
- check("parseReport: organization surfaced", parsed.organization === "reporter.example");
455
- check("parseReport: report-id surfaced", parsed.reportId === "report-abc-123");
456
- check("parseReport: contact surfaced", parsed.contact === "tls-reports@reporter.example");
457
- check("parseReport: date-range surfaced",
458
- parsed.dateRange.start === "2026-01-01T00:00:00Z" && parsed.dateRange.end === "2026-01-02T00:00:00Z");
459
- check("parseReport: success/failure counts aggregated across policies",
460
- parsed.totals.successful === 15 && parsed.totals.failure === 4);
461
- check("parseReport: raw report echoed", parsed.raw && parsed.raw["report-id"] === "report-abc-123");
462
- }
463
-
464
- function testParseReportContactOptional() {
465
- var r = _validReport();
466
- delete r["contact-info"];
467
- var parsed = b.network.smtp.tlsRpt.parseReport(JSON.stringify(r));
468
- check("parseReport: absent contact-info → null", parsed.contact === null);
469
- }
470
-
471
- function testParseReportNonFiniteCountsSkipped() {
472
- var r = _validReport();
473
- r.policies = [
474
- { summary: { "total-successful-session-count": "not-a-number", "total-failure-session-count": 2 } },
475
- { summary: { "total-successful-session-count": 4, "total-failure-session-count": null } },
476
- { /* no summary at all */ },
477
- ];
478
- var parsed = b.network.smtp.tlsRpt.parseReport(JSON.stringify(r));
479
- check("parseReport: non-numeric counts ignored in aggregation",
480
- parsed.totals.successful === 4 && parsed.totals.failure === 2);
481
- }
482
-
483
- function testParseReportGzipMagicSniff() {
484
- var gz = zlib.gzipSync(Buffer.from(JSON.stringify(_validReport()), "utf8"));
485
- var parsed = b.network.smtp.tlsRpt.parseReport(gz); // no contentType — sniffed by magic
486
- check("parseReport: gzip body auto-detected by magic bytes",
487
- parsed.organization === "reporter.example" && parsed.totals.successful === 15);
488
- }
489
-
490
- function testParseReportGzipViaContentType() {
491
- var gz = zlib.gzipSync(Buffer.from(JSON.stringify(_validReport()), "utf8"));
492
- var parsed = b.network.smtp.tlsRpt.parseReport(gz, { contentType: "application/tlsrpt+gzip" });
493
- check("parseReport: gzip body decompressed via contentType hint",
494
- parsed.reportId === "report-abc-123");
495
- }
496
-
497
- function testParseReportGunzipFailure() {
498
- // gzip magic bytes but a truncated/garbage deflate stream → gunzip throws.
499
- var bad = Buffer.from([0x1f, 0x8b, 0x08, 0x00, 0xde, 0xad, 0xbe, 0xef]);
500
- check("parseReport: corrupt gzip → tls-rpt-gunzip-failed",
501
- throwsWithCode(function () { b.network.smtp.tlsRpt.parseReport(bad); }, /tls-rpt-gunzip-failed/));
502
- }
503
-
504
- // ---- runner --------------------------------------------------------------
505
-
506
- async function run() {
507
- testParseStsEmptyAndNonString();
508
- testParseStsBadMode();
509
- testParseStsModeVariantsAndMaxAge();
510
-
511
- testMatchMxDefensiveReturns();
512
- testMatchMxCaseAndDotEdges();
513
-
514
- await testMtaStsFetchDomainGuard();
515
- await testMtaStsFetchNoTxtRecord();
516
- await testMtaStsFetchTxtAbsent();
517
-
518
- await testDaneTlsaDomainGuard();
519
-
520
- testDaneRecordShapeGuard();
521
- testDaneRecordShapeAllLabels();
522
-
523
- testVerifyChainPkixOptIn();
524
- testVerifyChainUnsupportedUsage();
525
- testVerifyChainDaneEeSha512();
526
- testVerifyChainSpkiSelectorNoBytes();
527
-
528
- testRecordShapeTypeGuards();
529
- testRecordShapePolicyDefaults();
530
-
531
- await testFetchPolicyDomainGuard();
532
- await testFetchPolicyRuaRequired();
533
- await testFetchPolicyNoMatchingRecord();
534
- await testFetchPolicyNoTxtAtAll();
535
- await testFetchPolicyTrimsAndSplitsRua();
536
-
537
- await testSubmitRejectsNonObjectReport();
538
- await testSubmitHttpsNon2xx();
539
- await testSubmitHttpsSuccess2xx();
540
- await testSubmitHttpsThrows();
541
- await testSubmitInvalidMailtoAddr();
542
- await testSubmitUnsupportedScheme();
543
- await testSubmitValidMailtoBody();
544
-
545
- testParseReportBadInput();
546
- testParseReportBadJsonAndShape();
547
- testParseReportMissingRequiredField();
548
- testParseReportBadDateRange();
549
- testParseReportPoliciesNotArray();
550
- testParseReportTooManyPolicies();
551
- testParseReportTooLarge();
552
- testParseReportHappyPathAggregates();
553
- testParseReportContactOptional();
554
- testParseReportNonFiniteCountsSkipped();
555
- testParseReportGzipMagicSniff();
556
- testParseReportGzipViaContentType();
557
- testParseReportGunzipFailure();
558
- }
559
-
560
- module.exports = { run: run };
561
-
562
- if (require.main === module) {
563
- run().then(function () { console.log("OK"); })
564
- .catch(function (e) { console.error(e.stack || e); process.exit(1); });
565
- }