@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
@@ -0,0 +1,133 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (c) blamejs contributors
3
+ "use strict";
4
+ /**
5
+ * b.safeAsync.withSignal + b.safeAsync.makeDropCallback.
6
+ *
7
+ * withSignal races a Promise against an AbortSignal: when the signal
8
+ * aborts, the wrapper rejects with SafeAsyncError (.code = "async/
9
+ * aborted", .cause = signal.reason) while the underlying Promise keeps
10
+ * running in the background — only the wrapper's resolution is short-
11
+ * circuited. makeDropCallback is the canonical log-stream-sink onDrop
12
+ * wrapper: it invokes onDrop with the framework-canonical
13
+ * { reason, batch, error } payload and, per the drop-silent contract,
14
+ * routes any throw from the operator callback to onError instead of
15
+ * letting it bubble into the request that triggered the drop.
16
+ *
17
+ * All async waits poll via helpers.waitUntil — no fixed setTimeout.
18
+ */
19
+
20
+ var helpers = require("../helpers");
21
+ var b = helpers.b;
22
+ var check = helpers.check;
23
+ var waitUntil = helpers.waitUntil;
24
+
25
+ async function run() {
26
+ // ---- withSignal: a real abort produces the typed rejection ----
27
+ // Drive a genuine AbortController and assert the wrapper rejects with
28
+ // the advertised SafeAsyncError shape. The underlying work is a real
29
+ // framework sleep that flips a flag when it completes, so we can also
30
+ // prove it kept running in the background after the abort.
31
+ var backgroundDone = false;
32
+ var underlying = b.safeAsync.sleep(30).then(function () {
33
+ backgroundDone = true;
34
+ return "underlying-finished";
35
+ });
36
+
37
+ var ctrl = new AbortController();
38
+ var wrapped = b.safeAsync.withSignal(underlying, ctrl.signal);
39
+ ctrl.abort(new Error("caller-cancelled"));
40
+
41
+ var aborted = null;
42
+ try { await wrapped; }
43
+ catch (e) { aborted = e; }
44
+ check("b.safeAsync.withSignal: aborting the signal rejects the wrapper", aborted !== null);
45
+ check("withSignal: rejection is a SafeAsyncError",
46
+ aborted instanceof b.safeAsync.SafeAsyncError);
47
+ check("withSignal: rejection .code is async/aborted", aborted && aborted.code === "async/aborted");
48
+ check("withSignal: .cause is the signal.reason passed to abort()",
49
+ aborted && aborted.cause instanceof Error && aborted.cause.message === "caller-cancelled");
50
+
51
+ // The underlying Promise is NOT cancelled — only the wrapper settled.
52
+ // Poll (never sleep) until the background work reports completion.
53
+ await waitUntil(function () { return backgroundDone; }, {
54
+ timeoutMs: 5000,
55
+ label: "safe-async withSignal: underlying promise continues after wrapper aborts",
56
+ });
57
+ check("withSignal: underlying promise keeps running in the background", backgroundDone === true);
58
+
59
+ // ---- withSignal: an already-aborted signal rejects immediately ----
60
+ var pre = new AbortController();
61
+ pre.abort();
62
+ var preAborted = null;
63
+ try { await b.safeAsync.withSignal(Promise.resolve("x"), pre.signal); }
64
+ catch (e) { preAborted = e; }
65
+ check("withSignal: a pre-aborted signal rejects with async/aborted",
66
+ preAborted instanceof b.safeAsync.SafeAsyncError && preAborted.code === "async/aborted");
67
+
68
+ // ---- withSignal: no signal / un-aborted signal resolve through ----
69
+ check("withSignal: no signal resolves the underlying value unchanged",
70
+ (await b.safeAsync.withSignal(Promise.resolve("passthru"), undefined)) === "passthru");
71
+
72
+ var live = new AbortController();
73
+ check("withSignal: an un-aborted signal resolves the underlying value",
74
+ (await b.safeAsync.withSignal(Promise.resolve("ok"), live.signal)) === "ok");
75
+
76
+ // Underlying rejection (signal never aborts) surfaces the ORIGINAL
77
+ // error, not a synthesized async/aborted one.
78
+ var origErr = null;
79
+ var live2 = new AbortController();
80
+ try { await b.safeAsync.withSignal(Promise.reject(new Error("underlying-fail")), live2.signal); }
81
+ catch (e) { origErr = e; }
82
+ check("withSignal: underlying rejection surfaces the original error",
83
+ origErr && origErr.message === "underlying-fail" && origErr.code === undefined);
84
+
85
+ // ---- makeDropCallback: canonical payload shape ----
86
+ var dropped = [];
87
+ var emit = b.safeAsync.makeDropCallback(
88
+ function (info) { dropped.push(info); },
89
+ function (e) { dropped.push({ onError: e.message }); }
90
+ );
91
+ emit("buffer-full", [{ id: 1 }], new Error("queue overflow"));
92
+ check("b.safeAsync.makeDropCallback: onDrop receives the canonical { reason, batch, error } payload",
93
+ dropped.length === 1 &&
94
+ dropped[0].reason === "buffer-full" &&
95
+ Array.isArray(dropped[0].batch) && dropped[0].batch[0].id === 1 &&
96
+ dropped[0].error instanceof Error && dropped[0].error.message === "queue overflow");
97
+
98
+ // An omitted error argument normalizes to error:null (not undefined).
99
+ emit("flush-timeout", [{ id: 2 }]);
100
+ check("makeDropCallback: omitted error normalizes to error:null",
101
+ dropped.length === 2 && dropped[1].error === null);
102
+
103
+ // ---- makeDropCallback: drop-silent contract ----
104
+ // A throwing onDrop must route to onError and NEVER bubble into the
105
+ // caller (the request/flush path that triggered the drop stays alive).
106
+ var onErrCaught = null;
107
+ var emitThrows = b.safeAsync.makeDropCallback(
108
+ function () { throw new Error("onDrop-boom"); },
109
+ function (e) { onErrCaught = e; }
110
+ );
111
+ var bubbled = false;
112
+ try { emitThrows("reason", []); }
113
+ catch (_e) { bubbled = true; }
114
+ check("makeDropCallback: a throwing onDrop does not bubble to the caller", bubbled === false);
115
+ check("makeDropCallback: the throw is routed to onError",
116
+ onErrCaught instanceof Error && onErrCaught.message === "onDrop-boom");
117
+
118
+ // A missing / non-function onDrop is a silent no-op — the drop-silent
119
+ // contract holds even when the operator wired nothing.
120
+ var nullThrew = false;
121
+ try { b.safeAsync.makeDropCallback(null, null)("reason", []); }
122
+ catch (_e) { nullThrew = true; }
123
+ check("makeDropCallback: a null onDrop is a silent no-op", nullThrew === false);
124
+ }
125
+
126
+ module.exports = { run: run };
127
+
128
+ if (require.main === module) {
129
+ run().then(
130
+ function () { console.log("OK — " + helpers.getChecks() + " checks passed"); },
131
+ function (e) { console.error("FAIL:", e && e.stack || e); process.exit(1); }
132
+ );
133
+ }
@@ -134,6 +134,20 @@ function run() {
134
134
  check("foldHeaderText: CR/LF and NUL together neutralized",
135
135
  sb.foldHeaderText("x\r\ny" + String.fromCharCode(0) + "z") === "x yz");
136
136
  check("foldHeaderText: non-string passthrough", sb.foldHeaderText(42) === 42);
137
+
138
+ // ---- quoteString: RFC quoted-string serialization (escape \ and ", wrap) ----
139
+ check("quoteString: plain value wrapped in DQUOTEs",
140
+ b.safeBuffer.quoteString("edge") === "\"edge\"");
141
+ check("quoteString: DQUOTE escaped — value cannot terminate the string early",
142
+ sb.quoteString("say \"hi\"") === "\"say \\\"hi\\\"\"");
143
+ check("quoteString: backslash doubled — cannot un-escape the next char",
144
+ sb.quoteString("a\\b") === "\"a\\\\b\"");
145
+ check("quoteString: backslash-then-quote stays inside the string",
146
+ sb.quoteString("\\\"") === "\"\\\\\\\"\"");
147
+ check("quoteString: non-string coerced via String()",
148
+ sb.quoteString(42) === "\"42\"");
149
+ check("quoteString: empty string is a valid empty quoted-string",
150
+ sb.quoteString("") === "\"\"");
137
151
  }
138
152
 
139
153
  module.exports = { run: run };
@@ -0,0 +1,80 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (c) blamejs contributors
3
+ "use strict";
4
+ /**
5
+ * b.safeBuffer.stripCrlf — remove every CR and LF from a string,
6
+ * substituting the replacement argument (default ""). Used to
7
+ * neutralize header-injection / smuggling vectors when the framework
8
+ * must serialize an operator-supplied string into a CRLF-delimited
9
+ * protocol line and prefers silent stripping over rejecting. Non-string
10
+ * input passes through unchanged.
11
+ */
12
+
13
+ var helpers = require("../helpers");
14
+ var b = helpers.b;
15
+ var check = helpers.check;
16
+
17
+ function run() {
18
+ var sb = b.safeBuffer;
19
+
20
+ // ---- default replacement drops CR/LF entirely ----
21
+ check("b.safeBuffer.stripCrlf: CRLF removed with the empty-string default",
22
+ b.safeBuffer.stripCrlf("ok\r\nbad") === "okbad");
23
+ check("stripCrlf: a bare CR is removed", sb.stripCrlf("a\rb") === "ab");
24
+ check("stripCrlf: a bare LF is removed", sb.stripCrlf("a\nb") === "ab");
25
+ check("stripCrlf: every CR/LF in a run is removed",
26
+ sb.stripCrlf("h\r\ni\rj\nk") === "hijk");
27
+
28
+ // ---- header-injection scenario the primitive exists for ----
29
+ // An operator value carrying a CRLF + a forged header must collapse
30
+ // onto one line so it can't smuggle a second header.
31
+ check("stripCrlf: neutralizes a CRLF header-injection payload",
32
+ b.safeBuffer.stripCrlf("value\r\nX-Injected: evil") === "valueX-Injected: evil");
33
+
34
+ // ---- custom replacement ----
35
+ check("stripCrlf: custom replacement substitutes each CR/LF",
36
+ b.safeBuffer.stripCrlf("a\nb\nc", " ") === "a b c");
37
+ check("stripCrlf: each CR and LF is replaced individually",
38
+ sb.stripCrlf("h\r\ni", "-") === "h--i");
39
+ check("stripCrlf: an explicit empty replacement matches the default",
40
+ sb.stripCrlf("a\nb", "") === "ab");
41
+
42
+ // ---- no CR/LF present → unchanged ----
43
+ check("stripCrlf: a clean string is returned unchanged",
44
+ sb.stripCrlf("no-newlines-here") === "no-newlines-here");
45
+ check("stripCrlf: an empty string stays empty", sb.stripCrlf("") === "");
46
+
47
+ // ---- non-string passthrough (advertised) ----
48
+ check("stripCrlf: a number passes through unchanged", b.safeBuffer.stripCrlf(42) === 42);
49
+ check("stripCrlf: undefined passes through unchanged", sb.stripCrlf(undefined) === undefined);
50
+ check("stripCrlf: null passes through unchanged", sb.stripCrlf(null) === null);
51
+ var obj = { a: 1 };
52
+ check("stripCrlf: a non-string object passes through by identity", sb.stripCrlf(obj) === obj);
53
+
54
+ // ---- byteLengthOfIfMeasurable: measures byte-carriers, null for the rest ----
55
+ check("byteLengthOfIfMeasurable: string → UTF-8 byte length",
56
+ b.safeBuffer.byteLengthOfIfMeasurable("中") === 3);
57
+ check("byteLengthOfIfMeasurable: Buffer → length",
58
+ b.safeBuffer.byteLengthOfIfMeasurable(Buffer.from([1, 2, 3, 4])) === 4);
59
+ check("byteLengthOfIfMeasurable: Uint8Array → length",
60
+ b.safeBuffer.byteLengthOfIfMeasurable(new Uint8Array(5)) === 5);
61
+ // The non-byte-carrier cases the guard-family byte cap must skip rather than
62
+ // crash on — a plain Array, an array-like object, a number, null/undefined.
63
+ check("byteLengthOfIfMeasurable: plain Array → null",
64
+ b.safeBuffer.byteLengthOfIfMeasurable([1, 2, 3]) === null);
65
+ check("byteLengthOfIfMeasurable: array-like object → null",
66
+ b.safeBuffer.byteLengthOfIfMeasurable({ length: 1e9 }) === null);
67
+ check("byteLengthOfIfMeasurable: number → null",
68
+ b.safeBuffer.byteLengthOfIfMeasurable(42) === null);
69
+ check("byteLengthOfIfMeasurable: null → null",
70
+ b.safeBuffer.byteLengthOfIfMeasurable(null) === null);
71
+ check("byteLengthOfIfMeasurable: undefined → null",
72
+ b.safeBuffer.byteLengthOfIfMeasurable(undefined) === null);
73
+ }
74
+
75
+ module.exports = { run: run };
76
+
77
+ if (require.main === module) {
78
+ try { run(); console.log("OK — " + helpers.getChecks() + " checks passed"); }
79
+ catch (e) { console.error("FAIL:", e.stack || e); process.exit(1); }
80
+ }
@@ -45,6 +45,33 @@ function testAlgorithmAllowlistRefusesUnknown() {
45
45
  threw && /unsupported-algorithm/.test(threw.code || ""));
46
46
  }
47
47
 
48
+ // A non-own Object.prototype key ("constructor", "toString", …) is NOT in
49
+ // the allowlist and MUST refuse exactly like any other typo'd algorithm.
50
+ // A truthiness/`in`-style lookup (`!_algorithms[algo]`) inherits
51
+ // Object.prototype members, so `algorithm: "constructor"` resolves to the
52
+ // `Object` function and gets INVOKED — `Object(buf)` returns the raw
53
+ // compressed buffer, so the primitive silently returns un-decompressed
54
+ // bytes with no error (allowlist fail-open). The guard must use an
55
+ // own-property check.
56
+ function testAlgorithmAllowlistRefusesPrototypeKeys() {
57
+ var gz = zlib.gzipSync(Buffer.from("hello world hello world", "utf8"));
58
+ var protoKeys = [
59
+ "constructor", "__proto__", "hasOwnProperty", "toString",
60
+ "valueOf", "isPrototypeOf", "toLocaleString", "propertyIsEnumerable",
61
+ ];
62
+ for (var i = 0; i < protoKeys.length; i++) {
63
+ var algo = protoKeys[i];
64
+ var threw = null;
65
+ var returned = null;
66
+ try {
67
+ returned = b.safeDecompress(gz, { algorithm: algo, maxOutputBytes: C.BYTES.kib(64) });
68
+ } catch (e) { threw = e; }
69
+ check("prototype-key algorithm '" + algo + "' → refused (unsupported-algorithm), not silently accepted",
70
+ threw !== null && /safe-decompress\/unsupported-algorithm/.test(threw.code || "") &&
71
+ returned === null);
72
+ }
73
+ }
74
+
48
75
  // ---- Happy path ----
49
76
 
50
77
  function testGzipRoundTrip() {
@@ -227,6 +254,7 @@ async function run() {
227
254
  testSurface();
228
255
  testAlgorithmRequired();
229
256
  testAlgorithmAllowlistRefusesUnknown();
257
+ testAlgorithmAllowlistRefusesPrototypeKeys();
230
258
  testGzipRoundTrip();
231
259
  testDeflateRawRoundTrip();
232
260
  testBrotliRoundTrip();
@@ -417,6 +417,231 @@ function testBadProfileRefused() {
417
417
  check("bad profile refused", threw && threw.code === "safe-dns/bad-profile");
418
418
  }
419
419
 
420
+ // Capture the error code a thrown SafeDnsError carries (or null on success).
421
+ function _codeOf(fn) {
422
+ try { fn(); return null; }
423
+ catch (e) { return e && e.code; }
424
+ }
425
+
426
+ // n length-prefixed labels each 63 bytes of 'a' (0x61) — max-width labels.
427
+ function _wideLabels(n) {
428
+ var parts = [];
429
+ for (var i = 0; i < n; i += 1) { parts.push(Buffer.from([63])); parts.push(Buffer.alloc(63, 0x61)); }
430
+ return Buffer.concat(parts);
431
+ }
432
+
433
+ // n length-prefixed 1-byte labels ('a') — smallest legal label.
434
+ function _tinyLabels(n) {
435
+ var parts = [];
436
+ for (var i = 0; i < n; i += 1) { parts.push(Buffer.from([1])); parts.push(Buffer.from("a", "ascii")); }
437
+ return Buffer.concat(parts);
438
+ }
439
+
440
+ // RED — a compression-pointer chain must not decompress to a name larger
441
+ // than the RFC 1035 §3.1 255-octet cap. Question name is a pointer to block A
442
+ // (3 x 63-octet labels), block A ends in a pointer to block B (3 more), which
443
+ // terminates. Each block alone is under 255 octets, but the composite
444
+ // decompressed name is ~385 octets. Before the accountants threaded through
445
+ // the chain, the parser returned a 383-char name (cap bypassed); it must
446
+ // instead fail closed with oversize-name.
447
+ function testRefusesCompressionNameByteBomb() {
448
+ var h = _hdr(0, 0x8180, 1, 0, 0, 0);
449
+ var qptr = Buffer.from([0xc0, 18]); // question name -> block A at offset 18
450
+ var qtail = Buffer.alloc(4); qtail.writeUInt16BE(1, 0); qtail.writeUInt16BE(1, 2);
451
+ var blockA = _wideLabels(3); // offsets 18..209 (192 octets)
452
+ var ptrAB = Buffer.from([0xc0, 212]); // block A tail -> block B at offset 212
453
+ var blockB = _wideLabels(3); // offsets 212..403
454
+ var term = Buffer.from([0]);
455
+ var buf = Buffer.concat([h, qptr, qtail, blockA, ptrAB, blockB, term]);
456
+ var code = _codeOf(function () { b.safeDns.parseResponse(buf); });
457
+ check("compression byte-bomb: fails closed (oversize-name)", code === "safe-dns/oversize-name");
458
+ }
459
+
460
+ // RED — the maxLabels cap (127) must also thread through compression. Two
461
+ // 100-label blocks joined by a pointer: each block is under the cap, the
462
+ // composite is 200 labels. Before the fix the parser returned a 200-label
463
+ // name; it must refuse the over-cap composite.
464
+ function testRefusesCompressionLabelBomb() {
465
+ var h = _hdr(0, 0x8180, 1, 0, 0, 0);
466
+ var qptr = Buffer.from([0xc0, 18]); // question name -> block A at offset 18
467
+ var qtail = Buffer.alloc(4); qtail.writeUInt16BE(1, 0); qtail.writeUInt16BE(1, 2);
468
+ var blockA = _tinyLabels(100); // offsets 18..217 (200 octets, 100 labels)
469
+ var ptrAB = Buffer.from([0xc0, 220]); // block A tail -> block B at offset 220
470
+ var blockB = _tinyLabels(100);
471
+ var term = Buffer.from([0]);
472
+ var buf = Buffer.concat([h, qptr, qtail, blockA, ptrAB, blockB, term]);
473
+ var code = _codeOf(function () { b.safeDns.parseResponse(buf); });
474
+ check("compression label-bomb: fails closed (oversize-labels)", code === "safe-dns/oversize-labels");
475
+ }
476
+
477
+ // A legitimate compression pointer (composite name well under the caps) must
478
+ // still decompress correctly — the fix must not over-reject. The answer RR's
479
+ // NAME is a pointer back to the question name.
480
+ function testCompressionPointerResolves() {
481
+ var h = _hdr(0, 0x8180, 1, 1, 0, 0);
482
+ var qn = _encName("example.com"); // offsets 12..24 (13 octets)
483
+ var qtail = Buffer.alloc(4); qtail.writeUInt16BE(1, 0); qtail.writeUInt16BE(1, 2);
484
+ var aptr = Buffer.from([0xc0, 12]); // answer name -> question name
485
+ var fixed = Buffer.alloc(10);
486
+ fixed.writeUInt16BE(1, 0); fixed.writeUInt16BE(1, 2); fixed.writeUInt32BE(300, 4); fixed.writeUInt16BE(4, 8);
487
+ var rdata = Buffer.from([192, 0, 2, 7]);
488
+ var buf = Buffer.concat([h, qn, qtail, aptr, fixed, rdata]);
489
+ var p = b.safeDns.parseResponse(buf);
490
+ check("compression resolve: answer name decompressed", p.answer[0].name === "example.com");
491
+ check("compression resolve: A decoded", p.answer[0].decoded === "192.0.2.7");
492
+ }
493
+
494
+ function testRefusesTruncatedNameLabelPastEnd() {
495
+ // Question label claims 5 bytes but the buffer ends after 2.
496
+ var buf = Buffer.concat([_hdr(0, 0x8180, 1, 0, 0, 0), Buffer.from([5, 0x61, 0x62])]);
497
+ check("truncated-name (label past end)",
498
+ _codeOf(function () { b.safeDns.parseResponse(buf); }) === "safe-dns/truncated-name");
499
+ }
500
+
501
+ function testRefusesTruncatedNamePointerByte() {
502
+ // A compression-pointer's high byte is the last byte in the message.
503
+ var buf = Buffer.concat([_hdr(0, 0x8180, 1, 0, 0, 0), Buffer.from([0xc0])]);
504
+ check("truncated-name (pointer truncated)",
505
+ _codeOf(function () { b.safeDns.parseResponse(buf); }) === "safe-dns/truncated-name");
506
+ }
507
+
508
+ function testRefusesPointerOffsetPastEnd() {
509
+ // Pointer resolves to offset 255, past the 14-byte message.
510
+ var buf = Buffer.concat([_hdr(0, 0x8180, 1, 0, 0, 0), Buffer.from([0xc0, 0xff])]);
511
+ check("truncated-name (pointer offset past end)",
512
+ _codeOf(function () { b.safeDns.parseResponse(buf); }) === "safe-dns/truncated-name");
513
+ }
514
+
515
+ function testRefusesTruncatedRrFixedPrefix() {
516
+ // Answer RR: valid name, then fewer than 10 octets of the fixed prefix.
517
+ var buf = Buffer.concat([_hdr(0, 0x8180, 0, 1, 0, 0), _encName("a.b"), Buffer.from([0, 1, 0])]);
518
+ check("truncated-rr (mid fixed-prefix)",
519
+ _codeOf(function () { b.safeDns.parseResponse(buf); }) === "safe-dns/truncated-rr");
520
+ }
521
+
522
+ function testRefusesOversizeAuthorityRrs() {
523
+ check("oversize-authority-rrs",
524
+ _codeOf(function () { b.safeDns.parseResponse(_hdr(0, 0x8180, 0, 0, 999, 0)); }) ===
525
+ "safe-dns/oversize-authority-rrs");
526
+ }
527
+
528
+ function testRefusesOversizeAdditionalRrs() {
529
+ check("oversize-additional-rrs",
530
+ _codeOf(function () { b.safeDns.parseResponse(_hdr(0, 0x8180, 0, 0, 0, 999)); }) ===
531
+ "safe-dns/oversize-additional-rrs");
532
+ }
533
+
534
+ function testRefusesTxtCharStringPastRdata() {
535
+ // TXT character-string length byte (5) overruns the 3-octet rdata.
536
+ var buf = Buffer.concat([_hdr(0, 0x8180, 0, 1, 0, 0), _rr("ex.com", 16, Buffer.from([5, 0x61, 0x62]))]);
537
+ check("txt char-string past rdata -> malformed-rdlength",
538
+ _codeOf(function () { b.safeDns.parseResponse(buf); }) === "safe-dns/malformed-rdlength");
539
+ }
540
+
541
+ function testRefusesSoaTailTruncated() {
542
+ // SOA rdata carries both names but fewer than the 20-octet fixed tail.
543
+ var soaRdata = Buffer.concat([_encName("m.ex"), _encName("r.ex"), Buffer.alloc(5)]);
544
+ var buf = Buffer.concat([_hdr(0, 0x8180, 0, 1, 0, 0), _rr("ex.com", 6, soaRdata)]);
545
+ check("soa tail truncated -> malformed-rdlength",
546
+ _codeOf(function () { b.safeDns.parseResponse(buf); }) === "safe-dns/malformed-rdlength");
547
+ }
548
+
549
+ function testDecodesSrv() {
550
+ var srvRdata = Buffer.concat([Buffer.from([0, 1, 0, 5, 0x1f, 0x90]), _encName("srv.example.com")]);
551
+ var buf = Buffer.concat([_hdr(0, 0x8180, 0, 1, 0, 0), _rr("ex.com", 33, srvRdata)]);
552
+ var d = b.safeDns.parseResponse(buf).answer[0].decoded;
553
+ check("SRV: priority", d.priority === 1);
554
+ check("SRV: weight", d.weight === 5);
555
+ check("SRV: port", d.port === 8080);
556
+ check("SRV: target", d.target === "srv.example.com");
557
+ }
558
+
559
+ function testDecodesDs() {
560
+ var dsRdata = Buffer.concat([Buffer.from([0x12, 0x34, 8, 2]), Buffer.from([0xde, 0xad, 0xbe, 0xef])]);
561
+ var buf = Buffer.concat([_hdr(0, 0x8180, 0, 1, 0, 0), _rr("ex.com", 43, dsRdata)]);
562
+ var d = b.safeDns.parseResponse(buf).answer[0].decoded;
563
+ check("DS: keyTag", d.keyTag === 0x1234);
564
+ check("DS: algorithm", d.algorithm === 8);
565
+ check("DS: digestType", d.digestType === 2);
566
+ check("DS: digest bytes", d.digest.length === 4 && d.digest[0] === 0xde);
567
+ }
568
+
569
+ function testDecodesDnskey() {
570
+ var dnskeyRdata = Buffer.concat([Buffer.from([0x01, 0x00, 3, 8]), Buffer.from([0xaa, 0xbb])]);
571
+ var buf = Buffer.concat([_hdr(0, 0x8180, 0, 1, 0, 0), _rr("ex.com", 48, dnskeyRdata)]);
572
+ var d = b.safeDns.parseResponse(buf).answer[0].decoded;
573
+ check("DNSKEY: flags", d.flags === 256);
574
+ check("DNSKEY: protocol", d.protocol === 3);
575
+ check("DNSKEY: algorithm", d.algorithm === 8);
576
+ check("DNSKEY: publicKey", d.publicKey.length === 2 && d.publicKey[0] === 0xaa);
577
+ }
578
+
579
+ function testDecodesTlsa() {
580
+ var tlsaRdata = Buffer.concat([Buffer.from([3, 1, 1]), Buffer.from([0xca, 0xfe])]);
581
+ var buf = Buffer.concat([_hdr(0, 0x8180, 0, 1, 0, 0), _rr("ex.com", 52, tlsaRdata)]);
582
+ var d = b.safeDns.parseResponse(buf).answer[0].decoded;
583
+ check("TLSA: usage", d.usage === 3);
584
+ check("TLSA: selector", d.selector === 1);
585
+ check("TLSA: matchingType", d.matchingType === 1);
586
+ check("TLSA: certData", d.certData.length === 2 && d.certData[0] === 0xca);
587
+ }
588
+
589
+ function testDecodesRrsig() {
590
+ var fixed = Buffer.alloc(18);
591
+ fixed.writeUInt16BE(1, 0); // typeCovered = A
592
+ fixed.writeUInt8(8, 2); // algorithm
593
+ fixed.writeUInt8(2, 3); // labels
594
+ fixed.writeUInt32BE(3600, 4); // originalTtl
595
+ fixed.writeUInt32BE(1000, 8); // sigExpiry
596
+ fixed.writeUInt32BE(500, 12); // sigInception
597
+ fixed.writeUInt16BE(0xabcd, 16); // keyTag
598
+ var rrsigRdata = Buffer.concat([fixed, _encName("ex.com"), Buffer.from([0x11, 0x22, 0x33])]);
599
+ var buf = Buffer.concat([_hdr(0, 0x8180, 0, 1, 0, 0), _rr("ex.com", 46, rrsigRdata)]);
600
+ var d = b.safeDns.parseResponse(buf).answer[0].decoded;
601
+ check("RRSIG: typeCovered", d.typeCovered === 1);
602
+ check("RRSIG: keyTag", d.keyTag === 0xabcd);
603
+ check("RRSIG: signerName", d.signerName === "ex.com");
604
+ check("RRSIG: signature", d.signature.length === 3 && d.signature[0] === 0x11);
605
+ }
606
+
607
+ function testFormatIpv6NoCompression() {
608
+ // No zero run of length >= 2 — every group emitted, no "::".
609
+ var rdata = _aaaa(1, 2, 3, 4, 5, 6, 7, 8);
610
+ var buf = Buffer.concat([_hdr(0, 0x8180, 0, 1, 0, 0), _rr("ex.com", 28, rdata)]);
611
+ check("AAAA: no-compression full form",
612
+ b.safeDns.parseResponse(buf).answer[0].decoded === "1:2:3:4:5:6:7:8");
613
+ }
614
+
615
+ function testParseResponsePostureResolvesStrict() {
616
+ // ancount=100 is under balanced/permissive answer caps but over strict (64).
617
+ // posture "hipaa" maps to strict, so it must refuse.
618
+ check("posture hipaa -> strict answer cap fires",
619
+ _codeOf(function () { b.safeDns.parseResponse(_hdr(0, 0x8180, 0, 100, 0, 0), { posture: "hipaa" }); }) ===
620
+ "safe-dns/oversize-answer-rrs");
621
+ // posture wins over an explicit profile (resolver checks posture first).
622
+ check("posture beats profile (permissive+hipaa still strict)",
623
+ _codeOf(function () { b.safeDns.parseResponse(_hdr(0, 0x8180, 0, 100, 0, 0), { profile: "permissive", posture: "hipaa" }); }) ===
624
+ "safe-dns/oversize-answer-rrs");
625
+ // permissive alone accepts ancount=100 (cap 256) — it fails later on the
626
+ // empty RR body, not on the answer-count guard.
627
+ check("permissive alone does not trip answer cap at 100",
628
+ _codeOf(function () { b.safeDns.parseResponse(_hdr(0, 0x8180, 0, 100, 0, 0), { profile: "permissive" }); }) !==
629
+ "safe-dns/oversize-answer-rrs");
630
+ }
631
+
632
+ function testBoundEdns0NegativeAndNonFinite() {
633
+ check("boundEdns0 negative refused", _codeOf(function () { b.safeDns.boundEdns0(-1); }) === "safe-dns/bad-input");
634
+ check("boundEdns0 Infinity refused", _codeOf(function () { b.safeDns.boundEdns0(Infinity); }) === "safe-dns/bad-input");
635
+ check("boundEdns0 NaN refused", _codeOf(function () { b.safeDns.boundEdns0(NaN); }) === "safe-dns/bad-input");
636
+ check("boundEdns0 exactly at cap", b.safeDns.boundEdns0(b.safeDns.PROFILES.strict.maxEdns0Bytes) === b.safeDns.PROFILES.strict.maxEdns0Bytes);
637
+ }
638
+
639
+ function testCheckCnameChainDepthBadInput() {
640
+ check("cnameDepth negative refused", _codeOf(function () { b.safeDns.checkCnameChainDepth(-1); }) === "safe-dns/bad-input");
641
+ check("cnameDepth NaN refused", _codeOf(function () { b.safeDns.checkCnameChainDepth(NaN); }) === "safe-dns/bad-input");
642
+ check("cnameDepth string refused", _codeOf(function () { b.safeDns.checkCnameChainDepth("5"); }) === "safe-dns/bad-input");
643
+ }
644
+
420
645
  function run() {
421
646
  testSurface();
422
647
  testParsesARecord();
@@ -446,6 +671,26 @@ function run() {
446
671
  testProfileBalanced();
447
672
  testProfilePermissive();
448
673
  testBadProfileRefused();
674
+ testRefusesCompressionNameByteBomb();
675
+ testRefusesCompressionLabelBomb();
676
+ testCompressionPointerResolves();
677
+ testRefusesTruncatedNameLabelPastEnd();
678
+ testRefusesTruncatedNamePointerByte();
679
+ testRefusesPointerOffsetPastEnd();
680
+ testRefusesTruncatedRrFixedPrefix();
681
+ testRefusesOversizeAuthorityRrs();
682
+ testRefusesOversizeAdditionalRrs();
683
+ testRefusesTxtCharStringPastRdata();
684
+ testRefusesSoaTailTruncated();
685
+ testDecodesSrv();
686
+ testDecodesDs();
687
+ testDecodesDnskey();
688
+ testDecodesTlsa();
689
+ testDecodesRrsig();
690
+ testFormatIpv6NoCompression();
691
+ testParseResponsePostureResolvesStrict();
692
+ testBoundEdns0NegativeAndNonFinite();
693
+ testCheckCnameChainDepthBadInput();
449
694
  }
450
695
 
451
696
  module.exports = { run: run };
@@ -238,6 +238,37 @@ function testProfileBalancedAcceptsLargerInput() {
238
238
  ast.vcalendar.vevent[0].properties["X-PADDING-0"][0].value === pad);
239
239
  }
240
240
 
241
+ function testProtoKeyProfileRejected() {
242
+ // A prototype-member name as the profile must be refused, not resolved to an
243
+ // inherited member ("constructor" -> Object.prototype.constructor,
244
+ // "__proto__" -> Object.prototype, "toString" -> a Function). The own-property
245
+ // guard in _resolveCaps rejects it; a bare `if (!PROFILES[name])` truthiness
246
+ // check would pass the inherited member as a known profile (fail-open).
247
+ expectRefused("refuses prototype-key profile 'constructor'",
248
+ function () { safeIcal.parse(_ical(_event()), { profile: "constructor" }); },
249
+ "safe-ical/bad-opt");
250
+ expectRefused("refuses prototype-key profile '__proto__'",
251
+ function () { safeIcal.parse(_ical(_event()), { profile: "__proto__" }); },
252
+ "safe-ical/bad-opt");
253
+ expectRefused("refuses prototype-key profile 'toString'",
254
+ function () { safeIcal.parse(_ical(_event()), { profile: "toString" }); },
255
+ "safe-ical/bad-opt");
256
+ // A prototype-member name as the compliancePosture must not resolve to an
257
+ // inherited member either. The own-property guard skips the unknown posture
258
+ // and falls back to the strict profile, parsing cleanly — a bare
259
+ // `COMPLIANCE_POSTURES[name] || "strict"` read would surface a Function as
260
+ // the profile name and refuse spuriously (or, without the profile guard,
261
+ // run under it). Assert the secure fall-back holds.
262
+ var postureThrew = null, ast = null;
263
+ try { ast = safeIcal.parse(_ical(_event()), { compliancePosture: "toString" }); }
264
+ catch (e) { postureThrew = e; }
265
+ check("prototype-key posture falls back to strict (no fail-open)",
266
+ postureThrew === null && !!(ast && ast.vcalendar));
267
+ // A valid profile still parses.
268
+ var ok = safeIcal.parse(_ical(_event()), { profile: "balanced" });
269
+ check("valid profile 'balanced' still parses", !!ok.vcalendar);
270
+ }
271
+
241
272
  function testHipaaPosture() {
242
273
  // hipaa posture maps to strict.
243
274
  expectRefused("hipaa posture refuses oversize (mapped to strict)",
@@ -279,6 +310,7 @@ async function run() {
279
310
  testRefusesUnterminatedComponent();
280
311
  testRefusesBadInput();
281
312
  testRefusesBadProfile();
313
+ testProtoKeyProfileRejected();
282
314
  testProfileBalancedAcceptsLargerInput();
283
315
  testHipaaPosture();
284
316
  }