@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
@@ -133,10 +133,18 @@ var CORE_CAPABILITIES = Object.freeze({
133
133
  function validate(rawBody, opts) {
134
134
  opts = opts || {};
135
135
  var profileName = typeof opts.profile === "string" ? opts.profile : DEFAULT_PROFILE;
136
- if (opts.posture && COMPLIANCE_POSTURES[opts.posture]) {
136
+ // hasOwnProperty on both lookups: opts.profile / opts.posture are caller
137
+ // input, and a bare bracket read resolves an inherited Object.prototype
138
+ // key (constructor / __proto__ / toString / ...) to a truthy value —
139
+ // PROFILES["constructor"] is the Object function, so `if (!caps)` never
140
+ // fires and every size / count cap compares against `undefined` (fails
141
+ // open). An unknown posture is ignored (falls through to profile/default)
142
+ // as before; an unknown profile throws bad-profile.
143
+ if (opts.posture && Object.prototype.hasOwnProperty.call(COMPLIANCE_POSTURES, opts.posture)) {
137
144
  profileName = COMPLIANCE_POSTURES[opts.posture];
138
145
  }
139
- var caps = PROFILES[profileName];
146
+ var caps = Object.prototype.hasOwnProperty.call(PROFILES, profileName)
147
+ ? PROFILES[profileName] : undefined;
140
148
  if (!caps) {
141
149
  throw new GuardJmapError("guard-jmap/bad-profile",
142
150
  "guardJmap.validate: unknown profile '" + profileName + "'");
@@ -198,7 +206,15 @@ function validate(rawBody, opts) {
198
206
  throw new GuardJmapError("urn:ietf:params:jmap:error:invalidArguments",
199
207
  "guardJmap.validate: `using[" + ui + "]` must be a string capability URI");
200
208
  }
201
- if (!Object.prototype.hasOwnProperty.call(CORE_CAPABILITIES, cap) && !serverCaps[cap]) {
209
+ // hasOwnProperty on both tables: `cap` is attacker-supplied (from the
210
+ // request body). A bare `serverCaps[cap]` bracket read resolves an
211
+ // inherited Object.prototype member (constructor / __proto__ / toString
212
+ // / ...) to a truthy value, letting a prototype-key capability pass the
213
+ // allowlist the server never advertised. Own-key AND truthy preserves
214
+ // the operator's "capability: false disables it" semantics.
215
+ var advertised = Object.prototype.hasOwnProperty.call(CORE_CAPABILITIES, cap) ||
216
+ (Object.prototype.hasOwnProperty.call(serverCaps, cap) && serverCaps[cap]);
217
+ if (!advertised) {
202
218
  throw new GuardJmapError("urn:ietf:params:jmap:error:unknownCapability",
203
219
  "guardJmap.validate: capability '" + cap + "' not advertised by this server");
204
220
  }
@@ -312,9 +312,25 @@ function _detectIssues(input, opts) {
312
312
  }
313
313
  }
314
314
 
315
- // Payload claim sanity (only if payload is decodable).
315
+ // Payload claim sanity. A JWT claims set MUST be a JSON object (RFC 7519
316
+ // §7.2); a payload that does not decode to one — undecodable base64url,
317
+ // non-JSON bytes, a JSON primitive, or a JSON array — is refused
318
+ // symmetrically with the header-decode path above. Skipping it silently
319
+ // (the earlier behaviour) let the required-claims and exp/nbf/iat sanity
320
+ // checks never run, so a token carrying no readable claims set passed at
321
+ // strict with the guard's advertised required-claims enforcement bypassed.
316
322
  var payload = _b64urlDecodeJson(payloadSeg);
317
- if (payload && typeof payload === "object") {
323
+ if (!payload || typeof payload !== "object" || Array.isArray(payload)) {
324
+ issues.push({
325
+ kind: "payload-decode", severity: "high",
326
+ ruleId: "jwt.payload-decode",
327
+ snippet: "JWT payload is not a decodable JSON object (a JWT claims " +
328
+ "set must be a JSON object per RFC 7519 §7.2) or contains " +
329
+ "prototype-pollution keys",
330
+ });
331
+ return issues;
332
+ }
333
+ {
318
334
  var nowSec = Math.floor(Date.now() / 1000); // seconds-per-millisecond conversion
319
335
 
320
336
  // exp in the past.
@@ -174,7 +174,7 @@ function _isRefusedAutoFetchHost(hostname, allowedHosts) {
174
174
  }
175
175
  if (lower.length === 0) return "missing-host";
176
176
  if (IPV4_LITERAL_RE.test(lower) || IPV6_LITERAL_RE.test(lower)) return "ip-literal";
177
- if (RESERVED_LOCAL_HOSTS[lower]) return "reserved-local-host";
177
+ if (Object.prototype.hasOwnProperty.call(RESERVED_LOCAL_HOSTS, lower)) return "reserved-local-host";
178
178
  // Hostname suffix refusal — RFC 6761 reserved / mDNS / single-network.
179
179
  if (lower === "local" || lower.endsWith(".local")) return "reserved-local-suffix";
180
180
  if (lower === "lan" || lower.endsWith(".lan")) return "reserved-local-suffix";
@@ -277,7 +277,7 @@ function validate(headers, opts) {
277
277
  return _verdict("refuse", "URI '" + _trunc(u) + "' has no scheme (RFC 3986 §3.1)",
278
278
  { uris: classified, hasHttpsUri: hasHttpsUri, hasMailtoUri: hasMailtoUri, postHeaderOk: false });
279
279
  }
280
- if (DANGEROUS_SCHEMES[scheme]) {
280
+ if (Object.prototype.hasOwnProperty.call(DANGEROUS_SCHEMES, scheme)) {
281
281
  return _verdict("refuse", "URI scheme '" + scheme + "' is on the always-refused list (XSS / file-read class)",
282
282
  { uris: classified, hasHttpsUri: hasHttpsUri, hasMailtoUri: hasMailtoUri, postHeaderOk: false });
283
283
  }
@@ -202,10 +202,18 @@ var LITERAL_RE = /^\{([0-9]{1,10})(\+?)\}$/;
202
202
  function validate(line, opts) {
203
203
  opts = opts || {};
204
204
  var profileName = typeof opts.profile === "string" ? opts.profile : DEFAULT_PROFILE;
205
- if (opts.posture && COMPLIANCE_POSTURES[opts.posture]) {
205
+ // hasOwnProperty on both lookups: opts.profile / opts.posture are caller
206
+ // input, and a bare bracket read resolves an inherited Object.prototype
207
+ // key (constructor / __proto__ / toString / ...) to a truthy value —
208
+ // PROFILES["constructor"] is the Object function, so `if (!caps)` never
209
+ // fires and every line / script / script-name cap compares against
210
+ // `undefined` (fails open). An unknown posture is ignored (falls through
211
+ // to profile/default); an unknown profile throws bad-profile.
212
+ if (opts.posture && Object.prototype.hasOwnProperty.call(COMPLIANCE_POSTURES, opts.posture)) {
206
213
  profileName = COMPLIANCE_POSTURES[opts.posture];
207
214
  }
208
- var caps = PROFILES[profileName];
215
+ var caps = Object.prototype.hasOwnProperty.call(PROFILES, profileName)
216
+ ? PROFILES[profileName] : undefined;
209
217
  if (!caps) {
210
218
  throw new GuardManageSieveCommandError("guard-managesieve-command/bad-profile",
211
219
  "guardManageSieveCommand.validate: unknown profile '" + profileName + "'");
@@ -87,8 +87,6 @@ var INLINE_LINK_RE = /(!?)\[([^\]\n]*)\]\(\s*([^)\s]+)\s*(?:"[^"]*")?\s*\)/g;
87
87
  var AUTOLINK_RE = /<((?:[a-zA-Z][a-zA-Z0-9+.-]{0,32}):[^\s>]+)>/g;
88
88
  // Reference-link definition `[label]: url "title"`.
89
89
  var REF_DEF_RE = /^\s{0,3}\[([^\]\n]+)\]:\s*([^\s]+)/gm;
90
- // HTML entity hex / decimal scheme bypass — decode and re-test.
91
- var HTML_ENTITY_NUM_RE = /&#(?:x([0-9a-f]+)|(\d+));?/gi;
92
90
 
93
91
  // Front-matter block (YAML triple-dash or TOML triple-plus).
94
92
  var FRONT_MATTER_YAML_RE = /^---\s*\n[\s\S]+?\n---\s*\n?/;
@@ -99,31 +97,20 @@ var DOCTYPE_INLINE_RE = /<!DOCTYPE\b/i;
99
97
  var CODE_FENCE_LANG_RE = /^(?:```|~~~)([^\n]*)\n/gm;
100
98
  var EMPH_RUN_RE = /[*_]{20,}/; // allow:regex-no-length-cap — character-class repeat is linear in input length
101
99
 
102
- function _decodeHtmlEntities(s) {
103
- return s.replace(HTML_ENTITY_NUM_RE, function (match, hex, dec) {
104
- var code = hex !== undefined ? parseInt(hex, 16) : parseInt(dec, 10); // parseInt radix args (16 hex / 10 decimal)
105
- if (!isFinite(code) || code < 0 || code > 0x10ffff) return match; // Unicode codepoint range
106
- try { return String.fromCodePoint(code); } catch (_e) { return match; }
107
- });
108
- }
109
100
 
110
101
  function _isDangerousUrl(url, opts) {
111
102
  if (typeof url !== "string") return null;
112
- var s = url.trim();
113
- s = _decodeHtmlEntities(s);
114
- // Strip null + ASCII control chars from the URL ` javascript:` works
115
- // in some browsers because the leading control bytes are tolerated.
116
- // Char-by-char filter avoids the no-control-regex lint surface; the
117
- // codepoint catalog (< 0x20 or 0x7F) is the same shape as the
118
- // codepointClass tables.
119
- var stripped = "";
120
- for (var ci = 0; ci < s.length; ci += 1) {
121
- var cc = s.charCodeAt(ci);
122
- if (cc > 0x1f && cc !== 0x7f) stripped += s.charAt(ci); // ASCII control range thresholds
123
- }
124
- s = stripped;
125
- if (DANGEROUS_SCHEME_RE.test(s)) return s.match(/^[a-z]+/i)[0].toLowerCase(); // allow:regex-no-length-cap — `s` is a markdown URL token already bounded by the inline-link / autolink / ref-def matchers (which themselves run on input bounded by maxBytes)
126
- if (FILE_SCHEME_RE.test(s) && opts.filePolicy !== "allow") return "file"; // allow:regex-no-length-cap — same bounded-URL-token reasoning
103
+ // Decode the entity-hidden scheme tricks a browser resolves -- numeric AND the
104
+ // named-entity ASCII subset (guard-markdown previously decoded numeric only, so
105
+ // `java&Tab;script:` / a `&colon;`-hidden scheme slipped past) -- then fold away
106
+ // the whitespace the WHATWG URL parser strips (tab/lf/cr anywhere + a leading/
107
+ // trailing C0-control-or-space run, so `&#32;javascript:` -> " javascript:" can't
108
+ // defeat the `^scheme:` anchor). Shared codepoint-class primitives keep
109
+ // guard-markdown / guard-html / guard-svg from drifting on which encodings to fold.
110
+ var s = codepointClass.stripUrlSchemeWhitespace(
111
+ codepointClass.decodeMarkupEntities(url.trim()));
112
+ if (DANGEROUS_SCHEME_RE.test(s)) return s.match(/^[a-z]+/i)[0].toLowerCase(); // allow:regex-no-length-cap -- `s` is a markdown URL token already bounded by the inline-link / autolink / ref-def matchers (which themselves run on input bounded by maxBytes)
113
+ if (FILE_SCHEME_RE.test(s) && opts.filePolicy !== "allow") return "file"; // allow:regex-no-length-cap -- same bounded-URL-token reasoning
127
114
  return null;
128
115
  }
129
116
 
@@ -156,8 +156,16 @@ function _detectIssues(metadata, opts) {
156
156
  snippet: "pdf metadata is not an object" }];
157
157
  }
158
158
 
159
+ // Measure the byte cap only for measurable values. A hostile bag whose
160
+ // `bytes` is a plain Array or array-like object carries a numeric `.length`
161
+ // but is NOT a byte-carrier — measuring it would throw, breaking validate's
162
+ // documented never-throw-on-hostile-metadata contract; byteLengthOfIfMeasurable
163
+ // returns null for those, so the cap is skipped (magic detection reads only
164
+ // the leading bytes, O(1)-bounded regardless of the reported size) instead of
165
+ // crashing the caller.
159
166
  var bytes = metadata.bytes;
160
- if (bytes && typeof bytes.length === "number" && safeBuffer.byteLengthOf(bytes) > opts.maxBytes) {
167
+ var byteCount = safeBuffer.byteLengthOfIfMeasurable(bytes);
168
+ if (byteCount !== null && byteCount > opts.maxBytes) {
161
169
  return [{ kind: "pdf-cap", severity: "high",
162
170
  ruleId: "pdf.pdf-cap",
163
171
  snippet: "pdf bytes exceed maxBytes " + opts.maxBytes }];
@@ -364,13 +372,21 @@ function sanitize(input, opts) {
364
372
  // Force the active-content / exfil / encryption policies to reject, then
365
373
  // refuse anything the validate chain flags. The object graph can't be
366
374
  // edited without a parser, so disarm collapses to "refuse if not already
367
- // inert" — never a silent passthrough of a live action.
375
+ // inert" — never a silent passthrough of a live action. Every active-content
376
+ // policy is pinned to "reject" here so an operator-supplied permissive opt
377
+ // (javascriptPolicy / launchActionPolicy / polyglotPolicy: "allow" | "audit")
378
+ // cannot make disarm hand back a live PDF — the RCE / polyglot classes the
379
+ // guard "refuses to negotiate" on must be pinned exactly as the exfil /
380
+ // encryption ones are, or the override is only half-applied.
368
381
  var strict = Object.assign({}, resolved, {
369
382
  magicPolicy: "reject",
383
+ javascriptPolicy: "reject",
384
+ launchActionPolicy: "reject",
370
385
  openActionPolicy: "reject",
371
386
  embeddedFilePolicy: "reject",
372
387
  embeddedFileCountPolicy: "reject",
373
388
  encryptedPolicy: "reject",
389
+ polyglotPolicy: "reject",
374
390
  });
375
391
  var issues = _detectIssues(input, strict);
376
392
  gateContract.throwOnRefusalSeverity(issues,
@@ -155,10 +155,18 @@ var MSG_NUM_RE = /^[1-9][0-9]{0,9}$/;
155
155
  function validate(line, opts) {
156
156
  opts = opts || {};
157
157
  var profileName = typeof opts.profile === "string" ? opts.profile : DEFAULT_PROFILE;
158
- if (opts.posture && COMPLIANCE_POSTURES[opts.posture]) {
158
+ // hasOwnProperty on both lookups: opts.profile / opts.posture are caller
159
+ // input, and a bare bracket read resolves an inherited Object.prototype
160
+ // key (constructor / __proto__ / toString / ...) to a truthy value —
161
+ // PROFILES["constructor"] is the Object function, so `if (!caps)` never
162
+ // fires and every line / username / password cap compares against
163
+ // `undefined` (fails open). An unknown posture is ignored (falls through
164
+ // to profile/default); an unknown profile throws bad-profile.
165
+ if (opts.posture && Object.prototype.hasOwnProperty.call(COMPLIANCE_POSTURES, opts.posture)) {
159
166
  profileName = COMPLIANCE_POSTURES[opts.posture];
160
167
  }
161
- var caps = PROFILES[profileName];
168
+ var caps = Object.prototype.hasOwnProperty.call(PROFILES, profileName)
169
+ ? PROFILES[profileName] : undefined;
162
170
  if (!caps) {
163
171
  throw new GuardPop3CommandError("guard-pop3-command/bad-profile",
164
172
  "guardPop3Command.validate: unknown profile '" + profileName + "'");
@@ -59,7 +59,11 @@ var _err = GuardRegexError.factory;
59
59
 
60
60
  // Nested-quantifier detector: `(group)+`-style followed by another
61
61
  // quantifier or repetition that operates on the grouped match.
62
- var NESTED_QUANT_RE = /\([^()]*[*+?][^()]*\)\s*[*+?{]/;
62
+ // (The flat single-group nested-quantifier case is handled by the paren-aware
63
+ // structural scanner _hasNestedQuantifier, which — unlike a flat regex — requires
64
+ // the OUTER quantifier to be UNBOUNDED (`*`/`+`/`{n,}`, not `?`/`{0,1}`/`{n,m}`)
65
+ // and does not miscount a `(?:` group prefix as an inner quantifier, so it does
66
+ // not false-positive on linear shapes like `(?:X+)?` / `(X+)?` / `(?:bar)*`.)
63
67
 
64
68
  // Alternation-with-quantifier — `(a|b|...)+`, `(a|b)*`.
65
69
  var ALTERNATION_QUANT_RE = /\([^()]*\|[^()]*\)\s*[*+]/;
@@ -184,8 +188,7 @@ function _detectIssues(input, opts) {
184
188
  if (pre.done) return pre.issues;
185
189
  var issues = pre.issues;
186
190
 
187
- if (opts.nestedQuantPolicy !== "allow" &&
188
- (NESTED_QUANT_RE.test(input) || _hasNestedQuantifier(input))) { // allow:regex-no-length-cap — input bounded by maxPatternBytes
191
+ if (opts.nestedQuantPolicy !== "allow" && _hasNestedQuantifier(input)) {
189
192
  issues.push({
190
193
  kind: "nested-quantifier", severity: "critical",
191
194
  ruleId: "regex.nested-quantifier",
@@ -481,12 +484,12 @@ function _sanitizeTransform(input) {
481
484
  * @example
482
485
  * var gate = b.guardRegex.gate({ profile: "strict" });
483
486
  *
484
- * gate({ identifier: "(a+)+b" }).then(function (rv) {
487
+ * gate.check({ identifier: "(a+)+b" }).then(function (rv) {
485
488
  * rv.ok; // → false
486
489
  * rv.action; // → "refuse"
487
490
  * });
488
491
  *
489
- * gate({ identifier: "^[a-z]+$" }).then(function (rv) {
492
+ * gate.check({ identifier: "^[a-z]+$" }).then(function (rv) {
490
493
  * rv.action; // → "serve"
491
494
  * });
492
495
  */
@@ -122,11 +122,6 @@ void observability;
122
122
 
123
123
  var _err = GuardSvgError.factory;
124
124
 
125
- // ---- Codepoint catalog (shared via lib/codepoint-class) ----
126
-
127
- var C0_CTRL_RE_G = codepointClass.C0_CTRL_RE_G;
128
- var ZW_RE_G = codepointClass.ZW_RE_G;
129
-
130
125
  // ---- Tag classification ----
131
126
 
132
127
  // Always-dangerous SVG tags. Active scripts, namespace-shift escape
@@ -314,32 +309,20 @@ var COMPLIANCE_POSTURES = gateContract.compliancePostures(PROFILES, { base: 256
314
309
  // ---- Internal helpers ----
315
310
 
316
311
 
317
- // HTML5 named-entity ASCII subset same shape as guard-html.
318
- // Browsers honor these inside URL contexts; without decoding them,
319
- // `java&Tab;script:` and friends bypass the scheme allowlist.
320
- var SVG_NAMED_ENTITY_ASCII = {
321
- Tab: "\t", NewLine: "\n",
322
- colon: ":", semi: ";", period: ".", sol: "/", bsol: "\\",
323
- num: "#", excl: "!", quest: "?", lpar: "(", rpar: ")",
324
- lsqb: "[", rsqb: "]", lcub: "{", rcub: "}",
325
- quot: "\"", apos: "'", lt: "<", gt: ">",
326
- amp: "&", commat: "@", dollar: "$", percnt: "%",
327
- ast: "*", plus: "+", lowbar: "_", hyphen: "-",
328
- nbsp: " ",
329
- };
312
+ // The named-entity ASCII table + entity decoder live in codepoint-class
313
+ // (NAMED_ENTITY_ASCII / decodeMarkupEntities), shared with guard-html /
314
+ // guard-markdown so all three decode the SAME browser-honored set and cannot
315
+ // drift on which encoding a scheme / CSS-token danger check must fold away.
330
316
 
331
317
  function _extractScheme(rawUrl) {
332
- var s = String(rawUrl || "").trim();
333
- // Numeric entities (hex/decimal, semicolon OPTIONAL) via the shared decoder
334
- // so guard-html / guard-svg / guard-markdown can't drift (see codepoint-class).
335
- s = codepointClass.decodeNumericEntities(s);
336
- s = s.replace(/&([A-Za-z][A-Za-z0-9]+);/g, function (m, name) {
337
- if (Object.prototype.hasOwnProperty.call(SVG_NAMED_ENTITY_ASCII, name)) {
338
- return SVG_NAMED_ENTITY_ASCII[name];
339
- }
340
- return m;
341
- });
342
- s = s.replace(C0_CTRL_RE_G, "").replace(ZW_RE_G, "");
318
+ // Decode entities, then fold away exactly the whitespace the WHATWG URL parser
319
+ // would (tab/lf/cr anywhere + a leading/trailing C0-control-or-space run) via
320
+ // the shared codepoint-class primitive, so an entity-hidden tab or leading
321
+ // space (`java&Tab;script:` / `&#32;javascript:`) can't push the scheme past
322
+ // the `^[A-Za-z]` anchor and read as scheme-less. Shared with guard-html so
323
+ // the two can't drift on which whitespace to strip.
324
+ var s = codepointClass.stripUrlSchemeWhitespace(
325
+ codepointClass.decodeMarkupEntities(String(rawUrl || "").trim()));
343
326
  var m = s.match(/^([A-Za-z][A-Za-z0-9+.-]*):/);
344
327
  return m ? m[1].toLowerCase() : "";
345
328
  }
@@ -355,8 +338,19 @@ function _isFragmentRef(rawUrl) {
355
338
  }
356
339
 
357
340
  function _isCssDangerous(value) {
341
+ // A style attribute is HTML/XML character-reference-decoded before the CSS
342
+ // parser sees it, so `ex&#x70;ression(` reaches CSS as `expression(` and
343
+ // `behavior&colon;` as `behavior:`. Match against the decoded value — the
344
+ // same normalization the URL-scheme check performs — so an entity-encoded
345
+ // CSS payload can't be served verbatim past the danger patterns.
346
+ // Also fold the URL-scheme whitespace a browser strips inside url(...) -- tab /
347
+ // lf / cr -- so an entity-hidden tab in a CSS URL scheme (url(java&Tab;script:))
348
+ // cannot defeat the contiguous `javascript:` danger pattern, the same bypass the
349
+ // URL-scheme check folds away for href.
350
+ var decoded = codepointClass.stripUrlSchemeWhitespace(
351
+ codepointClass.decodeMarkupEntities(value));
358
352
  for (var i = 0; i < CSS_DANGEROUS_PATTERNS.length; i += 1) {
359
- if (CSS_DANGEROUS_PATTERNS[i].test(value)) return true;
353
+ if (CSS_DANGEROUS_PATTERNS[i].test(decoded)) return true;
360
354
  }
361
355
  return false;
362
356
  }
@@ -782,7 +776,12 @@ function _sanitize(input, opts) {
782
776
  }
783
777
  var allowed = !dangerousTags[tok.name] && allowedTags[tok.name];
784
778
  if (animationTags[tok.name] && opts.allowAnimation && allowedTags[tok.name]) {
785
- // Animation element re-check attributeName.
779
+ // Animation element under a profile that permits animation: allowed iff
780
+ // its attributeName is in the safe-targets allowlist. Every animation tag
781
+ // is in DANGEROUS_TAGS, so `allowed` is already false above — this branch
782
+ // must AFFIRMATIVELY re-permit the safe case, else the open tag is dropped
783
+ // while its (still-allowlisted) end tag is emitted, leaving an orphan
784
+ // close and silently stripping a profile-permitted element.
786
785
  var safeAnimation = true;
787
786
  (tok.attrs || []).forEach(function (a) {
788
787
  if (a.name.toLowerCase() === "attributename" &&
@@ -790,7 +789,7 @@ function _sanitize(input, opts) {
790
789
  safeAnimation = false;
791
790
  }
792
791
  });
793
- if (!safeAnimation) allowed = false;
792
+ allowed = safeAnimation;
794
793
  }
795
794
  if (!allowed) {
796
795
  if (BODY_DROP[tok.name] && !tok.selfClosing) {
@@ -319,7 +319,7 @@ function _detectIssues(input, opts) {
319
319
  *
320
320
  * var bad = b.guardTime.validate("1969-12-31T23:59:59Z", { profile: "strict" });
321
321
  * bad.ok; // → false
322
- * bad.issues[0].ruleId; // → "time.year-out-of-range"
322
+ * bad.issues[0].ruleId; // → "time.year-window"
323
323
  */
324
324
  // validate is assembled by gateContract.defineGuard from `detect`
325
325
  // (_detectIssues) below — `validate(input, opts) = aggregateIssues(detect(
@@ -277,7 +277,7 @@ function _detectIssues(input, opts) {
277
277
  * var bad = b.guardUuid.validate("00000000-0000-0000-0000-000000000000",
278
278
  * { profile: "strict" });
279
279
  * bad.ok; // → false
280
- * bad.issues[0].ruleId; // → "uuid.nil"
280
+ * bad.issues[0].ruleId; // → "uuid.nil-uuid"
281
281
  */
282
282
  // validate is assembled by gateContract.defineGuard from `detect`
283
283
  // (_detectIssues) below — `validate(input, opts) = aggregateIssues(detect(
@@ -311,7 +311,7 @@ function _detectIssues(input, opts) {
311
311
  * b.guardUuid.sanitize("ffffffff-ffff-ffff-ffff-ffffffffffff",
312
312
  * { profile: "strict" });
313
313
  * } catch (e) {
314
- * e.code; // → "uuid.max"
314
+ * e.code; // → "uuid.max-uuid"
315
315
  * }
316
316
  */
317
317
  // _sanitizeTransform — the guard-specific normalize applied by defineGuard's
@@ -184,7 +184,7 @@ function check(html) {
184
184
  // Self-closing: `<foo />` or `<foo/>` or HTML5 void elements.
185
185
  var selfClose = html.charCodeAt(j - 1) === 0x2F /* / */;
186
186
  if (isClose) {
187
- if (VOID_TAGS[tag]) {
187
+ if (Object.prototype.hasOwnProperty.call(VOID_TAGS, tag)) {
188
188
  // Stray closer for a void tag — surface as error.
189
189
  var pcv = _posToLineColumn(html, i);
190
190
  return {
@@ -221,7 +221,7 @@ function check(html) {
221
221
  stack.pop();
222
222
  } else {
223
223
  // Open tag (or self-closing).
224
- if (selfClose || VOID_TAGS[tag]) {
224
+ if (selfClose || Object.prototype.hasOwnProperty.call(VOID_TAGS, tag)) {
225
225
  // No push.
226
226
  } else if (Object.prototype.hasOwnProperty.call(RAW_TEXT_TAGS, tag)) {
227
227
  // Skip raw-text content AND its closing tag entirely. Inside
@@ -326,7 +326,7 @@ var markupTokenizer = require("./markup-tokenizer");
326
326
  *
327
327
  * @example
328
328
  * var rv = b.htmlBalance.checkSafe("<div onclick=\"x()\">hi</div>", { profile: "strict" });
329
- * // → { balanceIssue: null, guardIssues: [{ kind: "event-handler-attribute", ... }], ok: false }
329
+ * // → { balanceIssue: null, guardIssues: [{ kind: "event-handler", ... }], ok: false }
330
330
  *
331
331
  * b.htmlBalance.checkSafe("<p>hello</p>", { profile: "strict" });
332
332
  * // → { balanceIssue: null, guardIssues: [], ok: true }
@@ -130,6 +130,23 @@ function _ccPresent(directives, name) {
130
130
  return directives && Object.prototype.hasOwnProperty.call(directives, name);
131
131
  }
132
132
 
133
+ // RFC 9111 §3.5 — does this request carry an `Authorization` header field
134
+ // (RFC 9110 §11.6.2) with a non-empty value? A shared cache must treat the
135
+ // response to such a request as per-principal unless the origin opts in via
136
+ // public / s-maxage / must-revalidate. Proxy-Authorization is deliberately
137
+ // NOT included — §3.5 names the Authorization header specifically.
138
+ function _hasAuthorization(requestHeaders) {
139
+ if (!requestHeaders || typeof requestHeaders !== "object") return false;
140
+ var keys = Object.keys(requestHeaders);
141
+ for (var i = 0; i < keys.length; i++) {
142
+ if (keys[i].toLowerCase() === "authorization") {
143
+ var v = requestHeaders[keys[i]];
144
+ return v !== undefined && v !== null && String(v) !== "";
145
+ }
146
+ }
147
+ return false;
148
+ }
149
+
133
150
  // ---- HTTP date parsing -----------------------------------------------
134
151
 
135
152
  function _parseHttpDate(s) {
@@ -236,7 +253,7 @@ function _extractVaryValues(varyHeader, requestHeaders) {
236
253
  //
237
254
  // freshnessMs is computed from the response — 0 means "store but
238
255
  // always revalidate" (no-cache), -1 means "never cacheable".
239
- function _evaluateStorage(method, statusCode, responseHeaders, sharedCache) {
256
+ function _evaluateStorage(method, statusCode, responseHeaders, sharedCache, requestHeaders) {
240
257
  var lcResp = _lcHeaders(responseHeaders);
241
258
  var ccRaw = _headerOne(lcResp, "cache-control");
242
259
  var directives = _parseCacheControl(ccRaw);
@@ -262,6 +279,21 @@ function _evaluateStorage(method, statusCode, responseHeaders, sharedCache) {
262
279
  return { cacheable: false, reason: "private", freshnessMs: -1, directives: directives, varyHeader: varyHeader };
263
280
  }
264
281
 
282
+ // RFC 9111 §3.5 — a shared cache MUST NOT reuse a stored response to a
283
+ // request carrying `Authorization` to satisfy a subsequent request unless
284
+ // the response explicitly permits it via `public`, `s-maxage`, or
285
+ // `must-revalidate`. Gate at store time: a per-user authenticated response
286
+ // that lacks the opt-in never lands in a fleet-shared cache where a
287
+ // different principal's request would be served it (cross-user data leak).
288
+ if (sharedCache && _hasAuthorization(requestHeaders)) {
289
+ var authShareable = _ccPresent(directives, "public") ||
290
+ _ccPresent(directives, "must-revalidate") ||
291
+ _ccNumber(directives, "s-maxage") !== null;
292
+ if (!authShareable) {
293
+ return { cacheable: false, reason: "authorization-shared", freshnessMs: -1, directives: directives, varyHeader: varyHeader };
294
+ }
295
+ }
296
+
265
297
  // Vary: * is uncacheable per RFC 9110 §12.5.5.
266
298
  if (typeof varyHeader === "string" && varyHeader.indexOf("*") !== -1) {
267
299
  var trimmed = varyHeader.split(",").map(function (s) { return s.trim(); }); // RFC 9110 §12.5.5 Vary field-names; token grammar only, so a bare split is correct
@@ -653,6 +685,12 @@ function create(opts) {
653
685
  directives: evaluation.directives,
654
686
  etag: _headerOne(lcResp, "etag"),
655
687
  lastModified: _headerOne(lcResp, "last-modified"),
688
+ // RFC 9111 §3.5 — remember whether the request that produced this entry
689
+ // carried Authorization, so a later 304 refresh can re-apply the shared-
690
+ // cache gate (a 304 can replace Cache-Control, dropping the public /
691
+ // s-maxage / must-revalidate opt-in that first permitted an authed
692
+ // response into a shared cache).
693
+ hadAuthorization: _hasAuthorization(requestHeaders),
656
694
  };
657
695
  }
658
696
 
@@ -698,6 +736,24 @@ function create(opts) {
698
736
  // index lives in the store under (method, url, varyValues) so we
699
737
  // need both a "what Vary names apply" marker and the real entry.
700
738
  function _lookupWithVary(method, url, requestHeaders) {
739
+ var result = _resolveEntryWithVary(method, url, requestHeaders);
740
+ // RFC 9111 §3.5 fail-closed for legacy persistent-store records: an entry
741
+ // written by a version before `hadAuthorization` was recorded carries no
742
+ // such flag. In a shared cache it could be a pre-upgrade AUTHENTICATED
743
+ // response, and every serve path (fresh HIT, stale-serve, revalidation)
744
+ // resolves through here — so evict it and report a miss rather than serve
745
+ // one principal's cached body to another. Entries written by this version
746
+ // carry the flag (true or false) and are unaffected; private caches are
747
+ // out of §3.5 scope.
748
+ if (sharedCache && result && result.entry &&
749
+ !result.entry.__varyMarker && result.entry.hadAuthorization === undefined) {
750
+ try { store.delete(result.key); } catch (_e) { /* drop-silent */ }
751
+ return null;
752
+ }
753
+ return result;
754
+ }
755
+
756
+ function _resolveEntryWithVary(method, url, requestHeaders) {
701
757
  var noVary = _lookup(method, url, requestHeaders);
702
758
  if (noVary) {
703
759
  // Distinguish marker from real entry via __varyMarker flag.
@@ -775,7 +831,20 @@ function create(opts) {
775
831
  // storedAt to "now" so age math restarts.
776
832
  function _refreshFrom304(stored, fresh304Headers) {
777
833
  var mergedHeaders = _merge304Headers(stored, fresh304Headers);
778
- var evaluation = _evaluateStorage(stored.method, stored.statusCode, mergedHeaders, sharedCache);
834
+ // Re-apply the RFC 9111 §3.5 shared-cache Authorization gate against the
835
+ // MERGED headers, carrying forward whether the original request was
836
+ // Authorization-bearing. A 304 can replace Cache-Control (e.g. an entry
837
+ // first stored under `must-revalidate` now returns plain `max-age=60`);
838
+ // without the request's auth context here the refreshed entry would be
839
+ // retained as a freely-shareable response and served to other principals.
840
+ // Fail CLOSED when the flag is ABSENT (not just false): an entry written by
841
+ // a persistent shared store (Redis / filesystem) before this field existed
842
+ // carries no `hadAuthorization`, and assuming such a legacy entry was
843
+ // unauthenticated would let an originally-authenticated response survive
844
+ // the upgrade as shareable. Only an explicit `hadAuthorization === false`
845
+ // skips the gate.
846
+ var reqHeadersForGate = stored.hadAuthorization === false ? {} : { authorization: "1" };
847
+ var evaluation = _evaluateStorage(stored.method, stored.statusCode, mergedHeaders, sharedCache, reqHeadersForGate);
779
848
  var lcMerged = _lcHeaders(mergedHeaders);
780
849
  var dateMs = _parseHttpDate(_headerOne(lcMerged, "date"));
781
850
  var ageSec = parseInt(_headerOne(lcMerged, "age") || "0", 10);
@@ -792,6 +861,15 @@ function create(opts) {
792
861
  });
793
862
  var hasVary = refreshed.varyHeader && refreshed.varyValues && refreshed.varyValues.length > 0;
794
863
  var key = _buildCacheKey(refreshed.method, refreshed.url, hasVary ? refreshed.varyValues : []);
864
+ if (!evaluation.cacheable) {
865
+ // The merged 304 response no longer satisfies the storage policy (e.g. an
866
+ // Authorization-bearing entry lost its §3.5 opt-in). Evict rather than
867
+ // retain a now-unshareable entry — the current, freshly-revalidated
868
+ // caller still receives the merged body via the returned value; only its
869
+ // retention for a DIFFERENT principal is refused.
870
+ try { store.delete(key); } catch (_e) { /* drop-silent */ }
871
+ return refreshed;
872
+ }
795
873
  try { store.set(key, refreshed); } catch (_e) { /* drop-silent */ }
796
874
  return refreshed;
797
875
  }
@@ -851,8 +929,8 @@ function create(opts) {
851
929
  return _lookupWithVary(method, url, requestHeaders);
852
930
  },
853
931
 
854
- _evaluateStorage: function (method, statusCode, responseHeaders) {
855
- return _evaluateStorage(method, statusCode, responseHeaders, sharedCache);
932
+ _evaluateStorage: function (method, statusCode, responseHeaders, requestHeaders) {
933
+ return _evaluateStorage(method, statusCode, responseHeaders, sharedCache, requestHeaders);
856
934
  },
857
935
 
858
936
  _evaluateStored: _evaluateStored,
@@ -185,6 +185,16 @@ function create(opts) {
185
185
  throw _err("BAD_OPT",
186
186
  "cookieJar.create: opts.file must be an absolute path, got " + JSON.stringify(filePath));
187
187
  }
188
+ // A vault is optional for file mode (it seals the on-disk bytes); when
189
+ // supplied it MUST be a real sealer, validated up front like the
190
+ // persist:"vault" path. Otherwise a malformed vault is not caught until a
191
+ // later debounced flush -- and on a first run (the persist file absent) the
192
+ // jar returns empty before any seal call could surface it, so writes would
193
+ // be silently dropped.
194
+ if (vault) {
195
+ validateOpts.requireMethods(vault, ["seal", "unseal"],
196
+ "cookieJar.create: persist: 'file' opts.vault (pass b.vault to seal the on-disk bytes)", CookieJarError, "BAD_OPT");
197
+ }
188
198
  }
189
199
  if (opts.flushDebounceMs !== undefined && !numericBounds.isNonNegativeFiniteInt(opts.flushDebounceMs)) {
190
200
  throw _err("BAD_OPT", "cookieJar.create: flushDebounceMs must be a non-negative finite integer; got " +
@@ -492,7 +502,12 @@ function create(opts) {
492
502
  maxBytes: C.BYTES.mib(16), encoding: "utf8", refuseSymlink: true, inodeCheck: true,
493
503
  });
494
504
  } catch (e) {
495
- if (e && e.code === "ENOENT") { raw = null; } // first run no persist file yet
505
+ // First run no persist file yet. A missing file surfaces as a raw
506
+ // ENOENT, or (when fdSafeReadSync's default errorFor maps it) as the
507
+ // typed "atomic-file/enoent" code; both mean "start empty", not "load
508
+ // failed". Any other kind (symlink / too-large / toctou) is a real
509
+ // load failure and falls through to LOAD_FAILED.
510
+ if (e && (e.code === "ENOENT" || e.code === "atomic-file/enoent")) { raw = null; }
496
511
  else {
497
512
  throw _err("LOAD_FAILED",
498
513
  "cookieJar.create: failed to load persist file '" + filePath + "': " +