@blamejs/blamejs-shop 0.5.11 → 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 (524) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/SECURITY.md +6 -1
  3. package/lib/admin.js +56 -0
  4. package/lib/asset-manifest.json +1 -1
  5. package/lib/operator-sessions.js +68 -5
  6. package/lib/vendor/MANIFEST.json +632 -416
  7. package/lib/vendor/blamejs/.clusterfuzzlite/Dockerfile +21 -10
  8. package/lib/vendor/blamejs/.clusterfuzzlite/build.sh +30 -9
  9. package/lib/vendor/blamejs/.github/dependabot.yml +8 -0
  10. package/lib/vendor/blamejs/.github/workflows/actions-lint.yml +3 -3
  11. package/lib/vendor/blamejs/.github/workflows/cflite_batch.yml +7 -2
  12. package/lib/vendor/blamejs/.github/workflows/cflite_pr.yml +7 -2
  13. package/lib/vendor/blamejs/.github/workflows/ci.yml +21 -21
  14. package/lib/vendor/blamejs/.github/workflows/codeql.yml +3 -3
  15. package/lib/vendor/blamejs/.github/workflows/npm-publish.yml +4 -4
  16. package/lib/vendor/blamejs/.github/workflows/release-container.yml +7 -7
  17. package/lib/vendor/blamejs/.github/workflows/scorecard.yml +3 -3
  18. package/lib/vendor/blamejs/.github/workflows/sha-to-tag-verify.yml +1 -1
  19. package/lib/vendor/blamejs/.gitignore +2 -0
  20. package/lib/vendor/blamejs/CHANGELOG.md +122 -0
  21. package/lib/vendor/blamejs/NOTICE +26 -1
  22. package/lib/vendor/blamejs/SECURITY.md +1 -1
  23. package/lib/vendor/blamejs/api-snapshot.json +207 -5
  24. package/lib/vendor/blamejs/docker/keycloak/realm-blamejs-test.json +29 -0
  25. package/lib/vendor/blamejs/examples/wiki/DEPLOY.md +1 -0
  26. package/lib/vendor/blamejs/examples/wiki/lib/build-app.js +31 -0
  27. package/lib/vendor/blamejs/examples/wiki/lib/source-comment-block-validator.js +109 -0
  28. package/lib/vendor/blamejs/examples/wiki/nginx.conf +106 -0
  29. package/lib/vendor/blamejs/examples/wiki/package-lock.json +1 -1
  30. package/lib/vendor/blamejs/examples/wiki/test/e2e.js +92 -0
  31. package/lib/vendor/blamejs/fuzz/asn1-der.fuzz.js +28 -0
  32. package/lib/vendor/blamejs/fuzz/cms-codec.fuzz.js +17 -0
  33. package/lib/vendor/blamejs/fuzz/link-header.fuzz.js +18 -0
  34. package/lib/vendor/blamejs/index.js +6 -0
  35. package/lib/vendor/blamejs/lib/a2a.js +4 -4
  36. package/lib/vendor/blamejs/lib/agent-idempotency.js +18 -2
  37. package/lib/vendor/blamejs/lib/agent-saga.js +36 -8
  38. package/lib/vendor/blamejs/lib/agent-snapshot.js +63 -6
  39. package/lib/vendor/blamejs/lib/app-shutdown.js +23 -20
  40. package/lib/vendor/blamejs/lib/archive-read.js +8 -0
  41. package/lib/vendor/blamejs/lib/archive-tar.js +12 -2
  42. package/lib/vendor/blamejs/lib/arg-parser.js +49 -5
  43. package/lib/vendor/blamejs/lib/asn1-der.js +12 -0
  44. package/lib/vendor/blamejs/lib/audit-sign.js +47 -1
  45. package/lib/vendor/blamejs/lib/audit.js +71 -8
  46. package/lib/vendor/blamejs/lib/auth/ciba.js +14 -2
  47. package/lib/vendor/blamejs/lib/auth/fido-mds3.js +58 -47
  48. package/lib/vendor/blamejs/lib/auth/jwt.js +34 -0
  49. package/lib/vendor/blamejs/lib/auth/oauth.js +90 -13
  50. package/lib/vendor/blamejs/lib/auth/oid4vci.js +20 -17
  51. package/lib/vendor/blamejs/lib/auth/openid-federation.js +214 -23
  52. package/lib/vendor/blamejs/lib/auth/saml.js +38 -20
  53. package/lib/vendor/blamejs/lib/auth/sd-jwt-vc.js +10 -4
  54. package/lib/vendor/blamejs/lib/backup/bundle.js +13 -3
  55. package/lib/vendor/blamejs/lib/backup/index.js +16 -5
  56. package/lib/vendor/blamejs/lib/backup/manifest.js +18 -5
  57. package/lib/vendor/blamejs/lib/base32.js +21 -0
  58. package/lib/vendor/blamejs/lib/break-glass.js +19 -10
  59. package/lib/vendor/blamejs/lib/bundler.js +5 -1
  60. package/lib/vendor/blamejs/lib/cache-status.js +3 -7
  61. package/lib/vendor/blamejs/lib/calendar.js +21 -1
  62. package/lib/vendor/blamejs/lib/cbor.js +12 -1
  63. package/lib/vendor/blamejs/lib/cert.js +29 -11
  64. package/lib/vendor/blamejs/lib/cli.js +94 -24
  65. package/lib/vendor/blamejs/lib/cloud-events.js +2 -2
  66. package/lib/vendor/blamejs/lib/cluster-provider-db.js +13 -3
  67. package/lib/vendor/blamejs/lib/codepoint-class.js +85 -0
  68. package/lib/vendor/blamejs/lib/compliance-ai-act-prohibited.js +8 -4
  69. package/lib/vendor/blamejs/lib/compliance-ai-act-transparency.js +19 -4
  70. package/lib/vendor/blamejs/lib/compliance-ai-act.js +6 -8
  71. package/lib/vendor/blamejs/lib/content-credentials.js +1 -1
  72. package/lib/vendor/blamejs/lib/content-digest.js +2 -1
  73. package/lib/vendor/blamejs/lib/cookies.js +13 -3
  74. package/lib/vendor/blamejs/lib/cose.js +31 -16
  75. package/lib/vendor/blamejs/lib/crypto-field.js +32 -0
  76. package/lib/vendor/blamejs/lib/crypto-oprf.js +11 -2
  77. package/lib/vendor/blamejs/lib/crypto-xwing.js +22 -4
  78. package/lib/vendor/blamejs/lib/crypto.js +314 -19
  79. package/lib/vendor/blamejs/lib/csp.js +11 -3
  80. package/lib/vendor/blamejs/lib/daemon.js +270 -24
  81. package/lib/vendor/blamejs/lib/dark-patterns.js +5 -2
  82. package/lib/vendor/blamejs/lib/db-declare-view.js +2 -2
  83. package/lib/vendor/blamejs/lib/db-query.js +34 -7
  84. package/lib/vendor/blamejs/lib/db.js +18 -6
  85. package/lib/vendor/blamejs/lib/dbsc.js +17 -0
  86. package/lib/vendor/blamejs/lib/dev.js +21 -2
  87. package/lib/vendor/blamejs/lib/dsr.js +157 -102
  88. package/lib/vendor/blamejs/lib/external-db.js +41 -2
  89. package/lib/vendor/blamejs/lib/file-upload.js +25 -7
  90. package/lib/vendor/blamejs/lib/flag-providers.js +27 -15
  91. package/lib/vendor/blamejs/lib/forms.js +113 -27
  92. package/lib/vendor/blamejs/lib/gate-contract.js +23 -10
  93. package/lib/vendor/blamejs/lib/gdpr-ropa.js +8 -1
  94. package/lib/vendor/blamejs/lib/guard-agent-registry.js +1 -1
  95. package/lib/vendor/blamejs/lib/guard-archive.js +2 -2
  96. package/lib/vendor/blamejs/lib/guard-cidr.js +27 -1
  97. package/lib/vendor/blamejs/lib/guard-graphql.js +30 -11
  98. package/lib/vendor/blamejs/lib/guard-html.js +26 -53
  99. package/lib/vendor/blamejs/lib/guard-image.js +24 -5
  100. package/lib/vendor/blamejs/lib/guard-imap-command.js +10 -2
  101. package/lib/vendor/blamejs/lib/guard-jmap.js +19 -3
  102. package/lib/vendor/blamejs/lib/guard-jwt.js +18 -2
  103. package/lib/vendor/blamejs/lib/guard-list-unsubscribe.js +2 -2
  104. package/lib/vendor/blamejs/lib/guard-managesieve-command.js +10 -2
  105. package/lib/vendor/blamejs/lib/guard-markdown.js +11 -24
  106. package/lib/vendor/blamejs/lib/guard-pdf.js +18 -2
  107. package/lib/vendor/blamejs/lib/guard-pop3-command.js +10 -2
  108. package/lib/vendor/blamejs/lib/guard-regex.js +8 -5
  109. package/lib/vendor/blamejs/lib/guard-svg.js +31 -32
  110. package/lib/vendor/blamejs/lib/guard-time.js +1 -1
  111. package/lib/vendor/blamejs/lib/guard-uuid.js +2 -2
  112. package/lib/vendor/blamejs/lib/html-balance.js +3 -3
  113. package/lib/vendor/blamejs/lib/http-client-cache.js +82 -4
  114. package/lib/vendor/blamejs/lib/http-client-cookie-jar.js +16 -1
  115. package/lib/vendor/blamejs/lib/http-client.js +39 -7
  116. package/lib/vendor/blamejs/lib/http-message-signature.js +35 -1
  117. package/lib/vendor/blamejs/lib/i18n-messageformat.js +31 -6
  118. package/lib/vendor/blamejs/lib/i18n.js +35 -21
  119. package/lib/vendor/blamejs/lib/incident-report.js +8 -1
  120. package/lib/vendor/blamejs/lib/ip-utils.js +11 -1
  121. package/lib/vendor/blamejs/lib/json-path.js +23 -1
  122. package/lib/vendor/blamejs/lib/jwk.js +20 -3
  123. package/lib/vendor/blamejs/lib/link-header.js +2 -1
  124. package/lib/vendor/blamejs/lib/log-stream-otlp-grpc.js +5 -1
  125. package/lib/vendor/blamejs/lib/log-stream-otlp.js +5 -1
  126. package/lib/vendor/blamejs/lib/log-stream.js +8 -3
  127. package/lib/vendor/blamejs/lib/mail-auth.js +123 -22
  128. package/lib/vendor/blamejs/lib/mail-bimi.js +1 -1
  129. package/lib/vendor/blamejs/lib/mail-bounce.js +8 -0
  130. package/lib/vendor/blamejs/lib/mail-crypto-pgp.js +46 -10
  131. package/lib/vendor/blamejs/lib/mail-dav.js +22 -3
  132. package/lib/vendor/blamejs/lib/mail-dkim.js +96 -30
  133. package/lib/vendor/blamejs/lib/mail-helo.js +6 -1
  134. package/lib/vendor/blamejs/lib/mail-scan.js +23 -16
  135. package/lib/vendor/blamejs/lib/mail-send-deliver.js +34 -8
  136. package/lib/vendor/blamejs/lib/mail-server-imap.js +3 -4
  137. package/lib/vendor/blamejs/lib/mail-server-managesieve.js +7 -11
  138. package/lib/vendor/blamejs/lib/mail-server-mx.js +93 -7
  139. package/lib/vendor/blamejs/lib/mail-server-registry.js +8 -2
  140. package/lib/vendor/blamejs/lib/mail.js +15 -5
  141. package/lib/vendor/blamejs/lib/metrics.js +268 -63
  142. package/lib/vendor/blamejs/lib/middleware/age-gate.js +7 -1
  143. package/lib/vendor/blamejs/lib/middleware/asyncapi-serve.js +1 -1
  144. package/lib/vendor/blamejs/lib/middleware/body-parser.js +19 -4
  145. package/lib/vendor/blamejs/lib/middleware/bot-guard.js +5 -9
  146. package/lib/vendor/blamejs/lib/middleware/csp-report.js +40 -8
  147. package/lib/vendor/blamejs/lib/middleware/csrf-protect.js +24 -10
  148. package/lib/vendor/blamejs/lib/middleware/dpop.js +10 -5
  149. package/lib/vendor/blamejs/lib/middleware/index.js +6 -1
  150. package/lib/vendor/blamejs/lib/middleware/nel.js +1 -1
  151. package/lib/vendor/blamejs/lib/middleware/openapi-serve.js +1 -1
  152. package/lib/vendor/blamejs/lib/middleware/rate-limit.js +12 -1
  153. package/lib/vendor/blamejs/lib/middleware/require-bound-key.js +1 -1
  154. package/lib/vendor/blamejs/lib/middleware/scim-server.js +1 -1
  155. package/lib/vendor/blamejs/lib/middleware/tus-upload.js +6 -2
  156. package/lib/vendor/blamejs/lib/mtls-ca.js +18 -2
  157. package/lib/vendor/blamejs/lib/network-dns-resolver.js +11 -1
  158. package/lib/vendor/blamejs/lib/network-dns.js +21 -2
  159. package/lib/vendor/blamejs/lib/network-tls.js +69 -7
  160. package/lib/vendor/blamejs/lib/nonce-store.js +9 -1
  161. package/lib/vendor/blamejs/lib/object-store/gcs.js +7 -0
  162. package/lib/vendor/blamejs/lib/object-store/sigv4.js +31 -0
  163. package/lib/vendor/blamejs/lib/observability-otlp-exporter.js +1 -1
  164. package/lib/vendor/blamejs/lib/outbox.js +1 -1
  165. package/lib/vendor/blamejs/lib/parsers/safe-ini.js +9 -1
  166. package/lib/vendor/blamejs/lib/parsers/safe-toml.js +10 -1
  167. package/lib/vendor/blamejs/lib/permissions.js +6 -3
  168. package/lib/vendor/blamejs/lib/pid-probe.js +55 -0
  169. package/lib/vendor/blamejs/lib/pqc-agent.js +8 -1
  170. package/lib/vendor/blamejs/lib/pqc-software.js +3 -3
  171. package/lib/vendor/blamejs/lib/pubsub.js +20 -9
  172. package/lib/vendor/blamejs/lib/queue-local.js +8 -1
  173. package/lib/vendor/blamejs/lib/queue-redis.js +5 -0
  174. package/lib/vendor/blamejs/lib/redact.js +54 -0
  175. package/lib/vendor/blamejs/lib/restore-bundle.js +10 -2
  176. package/lib/vendor/blamejs/lib/restore.js +19 -0
  177. package/lib/vendor/blamejs/lib/retention.js +12 -4
  178. package/lib/vendor/blamejs/lib/router.js +60 -6
  179. package/lib/vendor/blamejs/lib/safe-buffer.js +69 -0
  180. package/lib/vendor/blamejs/lib/safe-decompress.js +8 -2
  181. package/lib/vendor/blamejs/lib/safe-dns.js +25 -20
  182. package/lib/vendor/blamejs/lib/safe-ical.js +7 -3
  183. package/lib/vendor/blamejs/lib/safe-mime.js +12 -1
  184. package/lib/vendor/blamejs/lib/safe-object.js +80 -0
  185. package/lib/vendor/blamejs/lib/safe-path.js +52 -4
  186. package/lib/vendor/blamejs/lib/safe-redirect.js +10 -2
  187. package/lib/vendor/blamejs/lib/safe-schema.js +4 -1
  188. package/lib/vendor/blamejs/lib/safe-sieve.js +33 -1
  189. package/lib/vendor/blamejs/lib/safe-sql.js +88 -0
  190. package/lib/vendor/blamejs/lib/safe-vcard.js +7 -3
  191. package/lib/vendor/blamejs/lib/scheduler.js +8 -1
  192. package/lib/vendor/blamejs/lib/security-assert.js +6 -6
  193. package/lib/vendor/blamejs/lib/self-update-standalone-verifier.js +74 -27
  194. package/lib/vendor/blamejs/lib/self-update.js +517 -87
  195. package/lib/vendor/blamejs/lib/server-timing.js +2 -4
  196. package/lib/vendor/blamejs/lib/session.js +34 -12
  197. package/lib/vendor/blamejs/lib/sql.js +15 -1
  198. package/lib/vendor/blamejs/lib/ssrf-guard.js +52 -0
  199. package/lib/vendor/blamejs/lib/static.js +55 -13
  200. package/lib/vendor/blamejs/lib/storage.js +8 -2
  201. package/lib/vendor/blamejs/lib/subject.js +6 -1
  202. package/lib/vendor/blamejs/lib/tenant-quota.js +52 -13
  203. package/lib/vendor/blamejs/lib/tls-exporter.js +3 -3
  204. package/lib/vendor/blamejs/lib/tsa.js +34 -13
  205. package/lib/vendor/blamejs/lib/uri-template.js +8 -1
  206. package/lib/vendor/blamejs/lib/vault/index.js +13 -0
  207. package/lib/vendor/blamejs/lib/vc.js +44 -5
  208. package/lib/vendor/blamejs/lib/vendor/MANIFEST.json +26 -26
  209. package/lib/vendor/blamejs/lib/vendor/noble-ciphers.cjs +792 -1
  210. package/lib/vendor/blamejs/lib/vendor/noble-curves.cjs +3443 -1
  211. package/lib/vendor/blamejs/lib/vendor/noble-post-quantum.cjs +2737 -1
  212. package/lib/vendor/blamejs/lib/vendor/pki.cjs +39550 -13
  213. package/lib/vendor/blamejs/lib/vendor/public-suffix-list.dat +55 -53
  214. package/lib/vendor/blamejs/lib/vendor/public-suffix-list.data.js +5551 -5554
  215. package/lib/vendor/blamejs/lib/vendor/simplewebauthn-server.cjs +22459 -32
  216. package/lib/vendor/blamejs/lib/watcher.js +89 -17
  217. package/lib/vendor/blamejs/lib/webhook-dispatcher.js +25 -3
  218. package/lib/vendor/blamejs/lib/webhook.js +12 -2
  219. package/lib/vendor/blamejs/lib/ws-client.js +32 -1
  220. package/lib/vendor/blamejs/lib/xml-c14n.js +29 -1
  221. package/lib/vendor/blamejs/oss-fuzz/projects/blamejs/Dockerfile +1 -1
  222. package/lib/vendor/blamejs/package-lock.json +2 -2
  223. package/lib/vendor/blamejs/package.json +1 -1
  224. package/lib/vendor/blamejs/release-notes/v0.16.x.json +1462 -0
  225. package/lib/vendor/blamejs/release-notes/v0.17.0.json +31 -0
  226. package/lib/vendor/blamejs/release-notes/v0.17.1.json +31 -0
  227. package/lib/vendor/blamejs/release-notes/v0.17.10.json +30 -0
  228. package/lib/vendor/blamejs/release-notes/v0.17.11.json +22 -0
  229. package/lib/vendor/blamejs/release-notes/v0.17.12.json +18 -0
  230. package/lib/vendor/blamejs/release-notes/v0.17.13.json +77 -0
  231. package/lib/vendor/blamejs/release-notes/v0.17.14.json +40 -0
  232. package/lib/vendor/blamejs/release-notes/v0.17.15.json +18 -0
  233. package/lib/vendor/blamejs/release-notes/v0.17.16.json +27 -0
  234. package/lib/vendor/blamejs/release-notes/v0.17.17.json +31 -0
  235. package/lib/vendor/blamejs/release-notes/v0.17.18.json +18 -0
  236. package/lib/vendor/blamejs/release-notes/v0.17.19.json +18 -0
  237. package/lib/vendor/blamejs/release-notes/v0.17.2.json +26 -0
  238. package/lib/vendor/blamejs/release-notes/v0.17.20.json +43 -0
  239. package/lib/vendor/blamejs/release-notes/v0.17.21.json +26 -0
  240. package/lib/vendor/blamejs/release-notes/v0.17.22.json +18 -0
  241. package/lib/vendor/blamejs/release-notes/v0.17.3.json +43 -0
  242. package/lib/vendor/blamejs/release-notes/v0.17.4.json +35 -0
  243. package/lib/vendor/blamejs/release-notes/v0.17.5.json +26 -0
  244. package/lib/vendor/blamejs/release-notes/v0.17.6.json +26 -0
  245. package/lib/vendor/blamejs/release-notes/v0.17.7.json +35 -0
  246. package/lib/vendor/blamejs/release-notes/v0.17.8.json +22 -0
  247. package/lib/vendor/blamejs/release-notes/v0.17.9.json +26 -0
  248. package/lib/vendor/blamejs/scripts/validate-source-comment-blocks.js +4 -0
  249. package/lib/vendor/blamejs/scripts/vendor-update.sh +293 -9
  250. package/lib/vendor/blamejs/socket.yml +94 -0
  251. package/lib/vendor/blamejs/test/00-primitives.js +605 -0
  252. package/lib/vendor/blamejs/test/helpers/drivers.js +12 -9
  253. package/lib/vendor/blamejs/test/integration/audit-stack-mysql.test.js +90 -1
  254. package/lib/vendor/blamejs/test/integration/audit-stack-postgres.test.js +122 -1
  255. package/lib/vendor/blamejs/test/integration/data-layer-mysql.test.js +30 -0
  256. package/lib/vendor/blamejs/test/integration/data-layer-pg.test.js +29 -0
  257. package/lib/vendor/blamejs/test/integration/dsr-cluster-mysql.test.js +479 -0
  258. package/lib/vendor/blamejs/test/integration/dsr-cluster-pg.test.js +487 -0
  259. package/lib/vendor/blamejs/test/integration/federation-auth.test.js +313 -5
  260. package/lib/vendor/blamejs/test/integration/mail-dkim.test.js +80 -0
  261. package/lib/vendor/blamejs/test/integration/openid-federation-chain.test.js +275 -0
  262. package/lib/vendor/blamejs/test/integration/webhook-dispatcher-pg.test.js +96 -0
  263. package/lib/vendor/blamejs/test/layer-0-primitives/a2a-tasks.test.js +401 -0
  264. package/lib/vendor/blamejs/test/layer-0-primitives/acme.test.js +1649 -2
  265. package/lib/vendor/blamejs/test/layer-0-primitives/age-gate.test.js +33 -0
  266. package/lib/vendor/blamejs/test/layer-0-primitives/agent-idempotency.test.js +0 -0
  267. package/lib/vendor/blamejs/test/layer-0-primitives/agent-saga.test.js +60 -0
  268. package/lib/vendor/blamejs/test/layer-0-primitives/agent-snapshot.test.js +524 -0
  269. package/lib/vendor/blamejs/test/layer-0-primitives/api-encrypt.test.js +891 -0
  270. package/lib/vendor/blamejs/test/layer-0-primitives/app-shutdown.test.js +128 -1
  271. package/lib/vendor/blamejs/test/layer-0-primitives/archive-adapters.test.js +271 -0
  272. package/lib/vendor/blamejs/test/layer-0-primitives/archive-read.test.js +628 -1
  273. package/lib/vendor/blamejs/test/layer-0-primitives/archive-tar-read.test.js +0 -0
  274. package/lib/vendor/blamejs/test/layer-0-primitives/archive-wrap.test.js +227 -0
  275. package/lib/vendor/blamejs/test/layer-0-primitives/arg-parser.test.js +15 -0
  276. package/lib/vendor/blamejs/test/layer-0-primitives/asn1-der.test.js +73 -0
  277. package/lib/vendor/blamejs/test/layer-0-primitives/atomic-file.test.js +114 -0
  278. package/lib/vendor/blamejs/test/layer-0-primitives/audit-sign-anchor.test.js +141 -0
  279. package/lib/vendor/blamejs/test/layer-0-primitives/audit-tools.test.js +624 -0
  280. package/lib/vendor/blamejs/test/layer-0-primitives/audit.test.js +769 -0
  281. package/lib/vendor/blamejs/test/layer-0-primitives/auth-jwt-defenses.test.js +436 -0
  282. package/lib/vendor/blamejs/test/layer-0-primitives/auth-oauth.test.js +1697 -0
  283. package/lib/vendor/blamejs/test/layer-0-primitives/auth-oid4vp.test.js +495 -0
  284. package/lib/vendor/blamejs/test/layer-0-primitives/auth-password.test.js +500 -0
  285. package/lib/vendor/blamejs/test/layer-0-primitives/auth-saml.test.js +1809 -0
  286. package/lib/vendor/blamejs/test/layer-0-primitives/auth-status-list.test.js +243 -1
  287. package/lib/vendor/blamejs/test/layer-0-primitives/backup-index.test.js +2226 -0
  288. package/lib/vendor/blamejs/test/layer-0-primitives/backup-manifest-signature.test.js +183 -0
  289. package/lib/vendor/blamejs/test/layer-0-primitives/base32.test.js +105 -0
  290. package/lib/vendor/blamejs/test/layer-0-primitives/break-glass.test.js +693 -0
  291. package/lib/vendor/blamejs/test/layer-0-primitives/cache.test.js +603 -0
  292. package/lib/vendor/blamejs/test/layer-0-primitives/calendar.test.js +557 -0
  293. package/lib/vendor/blamejs/test/layer-0-primitives/case-insensitive-security-token-guard.test.js +214 -0
  294. package/lib/vendor/blamejs/test/layer-0-primitives/cbor.test.js +25 -0
  295. package/lib/vendor/blamejs/test/layer-0-primitives/cert.test.js +843 -6
  296. package/lib/vendor/blamejs/test/layer-0-primitives/ciba-authreqid-binding.test.js +77 -2
  297. package/lib/vendor/blamejs/test/layer-0-primitives/ciba.test.js +866 -0
  298. package/lib/vendor/blamejs/test/layer-0-primitives/clear-site-data.test.js +18 -0
  299. package/lib/vendor/blamejs/test/layer-0-primitives/cli-erase.test.js +19 -0
  300. package/lib/vendor/blamejs/test/layer-0-primitives/cli.test.js +2790 -0
  301. package/lib/vendor/blamejs/test/layer-0-primitives/cluster-lease-renewal-ttl.test.js +114 -0
  302. package/lib/vendor/blamejs/test/layer-0-primitives/cluster.test.js +1032 -0
  303. package/lib/vendor/blamejs/test/layer-0-primitives/cms-codec.test.js +575 -0
  304. package/lib/vendor/blamejs/test/layer-0-primitives/codebase-patterns.test.js +739 -1
  305. package/lib/vendor/blamejs/test/layer-0-primitives/codepoint-class.test.js +8 -0
  306. package/lib/vendor/blamejs/test/layer-0-primitives/compliance-ai-act.test.js +194 -0
  307. package/lib/vendor/blamejs/test/layer-0-primitives/compliance-lifecycle-proto-key.test.js +104 -0
  308. package/lib/vendor/blamejs/test/layer-0-primitives/compliance-sanctions.test.js +254 -0
  309. package/lib/vendor/blamejs/test/layer-0-primitives/content-credentials.test.js +613 -3
  310. package/lib/vendor/blamejs/test/layer-0-primitives/cookies.test.js +140 -0
  311. package/lib/vendor/blamejs/test/layer-0-primitives/cose.test.js +407 -0
  312. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-adversarial.test.js +352 -0
  313. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-field-derived-hash.test.js +32 -0
  314. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-field.test.js +575 -0
  315. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-hash-files-parallel.test.js +10 -0
  316. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-hash-stream.test.js +24 -0
  317. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-oprf.test.js +17 -0
  318. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-spki-pin.test.js +183 -0
  319. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-xwing.test.js +48 -0
  320. package/lib/vendor/blamejs/test/layer-0-primitives/crypto.test.js +345 -0
  321. package/lib/vendor/blamejs/test/layer-0-primitives/csp-report.test.js +58 -0
  322. package/lib/vendor/blamejs/test/layer-0-primitives/csv.test.js +48 -0
  323. package/lib/vendor/blamejs/test/layer-0-primitives/daemon.test.js +459 -1
  324. package/lib/vendor/blamejs/test/layer-0-primitives/dark-patterns.test.js +19 -0
  325. package/lib/vendor/blamejs/test/layer-0-primitives/db-query.test.js +1019 -0
  326. package/lib/vendor/blamejs/test/layer-0-primitives/db-raw-residency-gate.test.js +77 -0
  327. package/lib/vendor/blamejs/test/layer-0-primitives/db.test.js +1621 -0
  328. package/lib/vendor/blamejs/test/layer-0-primitives/ddl-change-control.test.js +462 -3
  329. package/lib/vendor/blamejs/test/layer-0-primitives/dnssec.test.js +323 -0
  330. package/lib/vendor/blamejs/test/layer-0-primitives/dpop-middleware-verify.test.js +562 -0
  331. package/lib/vendor/blamejs/test/layer-0-primitives/dsr.test.js +901 -1
  332. package/lib/vendor/blamejs/test/layer-0-primitives/dual-control.test.js +249 -0
  333. package/lib/vendor/blamejs/test/layer-0-primitives/external-db-migrate.test.js +561 -0
  334. package/lib/vendor/blamejs/test/layer-0-primitives/external-db.test.js +1214 -0
  335. package/lib/vendor/blamejs/test/layer-0-primitives/fal.test.js +21 -0
  336. package/lib/vendor/blamejs/test/layer-0-primitives/fedcm-dbsc.test.js +46 -20
  337. package/lib/vendor/blamejs/test/layer-0-primitives/federation-vc-suite.test.js +147 -3
  338. package/lib/vendor/blamejs/test/layer-0-primitives/fido-mds3.test.js +907 -38
  339. package/lib/vendor/blamejs/test/layer-0-primitives/file-upload-content-safety-skip-audit.test.js +29 -0
  340. package/lib/vendor/blamejs/test/layer-0-primitives/file-upload.test.js +1135 -0
  341. package/lib/vendor/blamejs/test/layer-0-primitives/flag.test.js +30 -0
  342. package/lib/vendor/blamejs/test/layer-0-primitives/forms.test.js +747 -0
  343. package/lib/vendor/blamejs/test/layer-0-primitives/gate-contract.test.js +1855 -0
  344. package/lib/vendor/blamejs/test/layer-0-primitives/gdpr-ropa.test.js +30 -0
  345. package/lib/vendor/blamejs/test/layer-0-primitives/guard-archive.test.js +86 -0
  346. package/lib/vendor/blamejs/test/layer-0-primitives/guard-auth.test.js +117 -0
  347. package/lib/vendor/blamejs/test/layer-0-primitives/guard-cidr.test.js +151 -0
  348. package/lib/vendor/blamejs/test/layer-0-primitives/guard-domain.test.js +422 -0
  349. package/lib/vendor/blamejs/test/layer-0-primitives/guard-filename.test.js +424 -0
  350. package/lib/vendor/blamejs/test/layer-0-primitives/{guard-gate-disposition-coverage.test.js → guard-gate-disposition.test.js} +1 -1
  351. package/lib/vendor/blamejs/test/layer-0-primitives/guard-graphql.test.js +340 -0
  352. package/lib/vendor/blamejs/test/layer-0-primitives/guard-html.test.js +29 -0
  353. package/lib/vendor/blamejs/test/layer-0-primitives/guard-idempotency-key.test.js +28 -0
  354. package/lib/vendor/blamejs/test/layer-0-primitives/guard-image.test.js +519 -45
  355. package/lib/vendor/blamejs/test/layer-0-primitives/guard-imap-command.test.js +0 -0
  356. package/lib/vendor/blamejs/test/layer-0-primitives/guard-jmap.test.js +51 -0
  357. package/lib/vendor/blamejs/test/layer-0-primitives/guard-jsonpath.test.js +66 -0
  358. package/lib/vendor/blamejs/test/layer-0-primitives/guard-jwt.test.js +436 -0
  359. package/lib/vendor/blamejs/test/layer-0-primitives/guard-managesieve-command.test.js +25 -0
  360. package/lib/vendor/blamejs/test/layer-0-primitives/guard-markdown.test.js +16 -0
  361. package/lib/vendor/blamejs/test/layer-0-primitives/guard-mime.test.js +86 -0
  362. package/lib/vendor/blamejs/test/layer-0-primitives/guard-oauth.test.js +140 -0
  363. package/lib/vendor/blamejs/test/layer-0-primitives/guard-pdf.test.js +80 -0
  364. package/lib/vendor/blamejs/test/layer-0-primitives/guard-pop3-command.test.js +27 -0
  365. package/lib/vendor/blamejs/test/layer-0-primitives/guard-regex.test.js +99 -0
  366. package/lib/vendor/blamejs/test/layer-0-primitives/guard-shell.test.js +76 -0
  367. package/lib/vendor/blamejs/test/layer-0-primitives/{guard-sql-coverage.test.js → guard-sql.test.js} +3 -3
  368. package/lib/vendor/blamejs/test/layer-0-primitives/guard-svg.test.js +524 -0
  369. package/lib/vendor/blamejs/test/layer-0-primitives/guard-template.test.js +71 -0
  370. package/lib/vendor/blamejs/test/layer-0-primitives/guard-time.test.js +92 -0
  371. package/lib/vendor/blamejs/test/layer-0-primitives/guard-uuid.test.js +86 -0
  372. package/lib/vendor/blamejs/test/layer-0-primitives/html-balance.test.js +38 -0
  373. package/lib/vendor/blamejs/test/layer-0-primitives/http-client-cache-authorization.test.js +347 -0
  374. package/lib/vendor/blamejs/test/layer-0-primitives/http-client-cache.test.js +908 -0
  375. package/lib/vendor/blamejs/test/layer-0-primitives/http-client.test.js +2874 -0
  376. package/lib/vendor/blamejs/test/layer-0-primitives/http-message-signature.test.js +643 -0
  377. package/lib/vendor/blamejs/test/layer-0-primitives/i18n-messageformat.test.js +38 -0
  378. package/lib/vendor/blamejs/test/layer-0-primitives/i18n.test.js +1153 -1
  379. package/lib/vendor/blamejs/test/layer-0-primitives/idempotency-key.test.js +494 -0
  380. package/lib/vendor/blamejs/test/layer-0-primitives/ip-utils.test.js +30 -0
  381. package/lib/vendor/blamejs/test/layer-0-primitives/jsdoc-example-execution.test.js +177 -0
  382. package/lib/vendor/blamejs/test/layer-0-primitives/json-path.test.js +103 -0
  383. package/lib/vendor/blamejs/test/layer-0-primitives/json-schema.test.js +214 -0
  384. package/lib/vendor/blamejs/test/layer-0-primitives/jwk.test.js +41 -0
  385. package/lib/vendor/blamejs/test/layer-0-primitives/jwt-external.test.js +276 -0
  386. package/lib/vendor/blamejs/test/layer-0-primitives/keychain.test.js +0 -0
  387. package/lib/vendor/blamejs/test/layer-0-primitives/log-stream.test.js +241 -0
  388. package/lib/vendor/blamejs/test/layer-0-primitives/log.test.js +106 -0
  389. package/lib/vendor/blamejs/test/layer-0-primitives/mail-agent.test.js +441 -0
  390. package/lib/vendor/blamejs/test/layer-0-primitives/mail-auth.test.js +2136 -4
  391. package/lib/vendor/blamejs/test/layer-0-primitives/mail-bimi.test.js +759 -12
  392. package/lib/vendor/blamejs/test/layer-0-primitives/mail-bounce.test.js +811 -1
  393. package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto-pgp-experimental.test.js +401 -3
  394. package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto-pgp.test.js +751 -8
  395. package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto-smime.test.js +864 -0
  396. package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto.test.js +110 -0
  397. package/lib/vendor/blamejs/test/layer-0-primitives/mail-dav.test.js +830 -1
  398. package/lib/vendor/blamejs/test/layer-0-primitives/mail-deploy.test.js +635 -86
  399. package/lib/vendor/blamejs/test/layer-0-primitives/mail-dkim.test.js +818 -0
  400. package/lib/vendor/blamejs/test/layer-0-primitives/mail-helo.test.js +27 -0
  401. package/lib/vendor/blamejs/test/layer-0-primitives/mail-scan.test.js +199 -0
  402. package/lib/vendor/blamejs/test/layer-0-primitives/mail-send-deliver.test.js +686 -2
  403. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-imap.test.js +778 -0
  404. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-jmap.test.js +1438 -0
  405. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-managesieve.test.js +449 -6
  406. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-mx.test.js +773 -2
  407. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-pop3.test.js +623 -3
  408. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-rate-limit.test.js +55 -0
  409. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-registry.test.js +13 -0
  410. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-submission.test.js +877 -1
  411. package/lib/vendor/blamejs/test/layer-0-primitives/mail-sieve.test.js +326 -0
  412. package/lib/vendor/blamejs/test/layer-0-primitives/mail-store-fts.test.js +55 -0
  413. package/lib/vendor/blamejs/test/layer-0-primitives/mail-store.test.js +242 -0
  414. package/lib/vendor/blamejs/test/layer-0-primitives/mail.test.js +1596 -2
  415. package/lib/vendor/blamejs/test/layer-0-primitives/mcp.test.js +440 -4
  416. package/lib/vendor/blamejs/test/layer-0-primitives/metrics-snapshot.test.js +89 -0
  417. package/lib/vendor/blamejs/test/layer-0-primitives/metrics.test.js +1230 -0
  418. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-assetlinks.test.js +113 -0
  419. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-body-parser.test.js +1169 -0
  420. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-bot-disclose.test.js +123 -0
  421. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-cookies.test.js +108 -0
  422. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-gpc.test.js +121 -0
  423. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-headers.test.js +163 -0
  424. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-host-allowlist.test.js +154 -0
  425. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-require-content-type.test.js +127 -0
  426. package/lib/vendor/blamejs/test/layer-0-primitives/{middleware-tus-upload-coverage.test.js → middleware-tus-upload.test.js} +45 -0
  427. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-web-app-manifest.test.js +132 -0
  428. package/lib/vendor/blamejs/test/layer-0-primitives/mtls-ca-crl-fingerprint-only.test.js +92 -0
  429. package/lib/vendor/blamejs/test/layer-0-primitives/network-dns-resolver.test.js +65 -0
  430. package/lib/vendor/blamejs/test/layer-0-primitives/network-dns.test.js +1727 -1
  431. package/lib/vendor/blamejs/test/layer-0-primitives/network-nts.test.js +699 -0
  432. package/lib/vendor/blamejs/test/layer-0-primitives/network-smtp-policy.test.js +1181 -0
  433. package/lib/vendor/blamejs/test/layer-0-primitives/network-tls.test.js +1876 -3
  434. package/lib/vendor/blamejs/test/layer-0-primitives/network.test.js +32 -0
  435. package/lib/vendor/blamejs/test/layer-0-primitives/nonce-store-enforce-replay-nonboolean.test.js +81 -0
  436. package/lib/vendor/blamejs/test/layer-0-primitives/ntp-check.test.js +122 -0
  437. package/lib/vendor/blamejs/test/layer-0-primitives/observability-tracing.test.js +378 -0
  438. package/lib/vendor/blamejs/test/layer-0-primitives/observability.test.js +77 -0
  439. package/lib/vendor/blamejs/test/layer-0-primitives/oid4vci.test.js +1016 -0
  440. package/lib/vendor/blamejs/test/layer-0-primitives/openid-federation.test.js +946 -0
  441. package/lib/vendor/blamejs/test/layer-0-primitives/outbox.test.js +818 -0
  442. package/lib/vendor/blamejs/test/layer-0-primitives/own-property-membership-guards.test.js +109 -0
  443. package/lib/vendor/blamejs/test/layer-0-primitives/parsers-safe-toml.test.js +543 -0
  444. package/lib/vendor/blamejs/test/layer-0-primitives/{parsers-safe-yaml-coverage.test.js → parsers-safe-yaml.test.js} +2 -2
  445. package/lib/vendor/blamejs/test/layer-0-primitives/parsers-standalone.test.js +73 -0
  446. package/lib/vendor/blamejs/test/layer-0-primitives/passkey.test.js +649 -0
  447. package/lib/vendor/blamejs/test/layer-0-primitives/permissions.test.js +524 -0
  448. package/lib/vendor/blamejs/test/layer-0-primitives/pqc-agent-curve.test.js +22 -0
  449. package/lib/vendor/blamejs/test/layer-0-primitives/pubsub.test.js +295 -0
  450. package/lib/vendor/blamejs/test/layer-0-primitives/queue-flow-repeat.test.js +36 -0
  451. package/lib/vendor/blamejs/test/layer-0-primitives/queue.test.js +83 -0
  452. package/lib/vendor/blamejs/test/layer-0-primitives/rate-limit-xff-spoofing.test.js +34 -0
  453. package/lib/vendor/blamejs/test/layer-0-primitives/redact.test.js +1031 -0
  454. package/lib/vendor/blamejs/test/layer-0-primitives/request-helpers.test.js +94 -0
  455. package/lib/vendor/blamejs/test/layer-0-primitives/require-bound-key.test.js +401 -0
  456. package/lib/vendor/blamejs/test/layer-0-primitives/restore-empty-manifest-wipe.test.js +154 -0
  457. package/lib/vendor/blamejs/test/layer-0-primitives/retention.test.js +600 -0
  458. package/lib/vendor/blamejs/test/layer-0-primitives/router-host-path-injection.test.js +231 -0
  459. package/lib/vendor/blamejs/test/layer-0-primitives/router-tls0rtt.test.js +21 -0
  460. package/lib/vendor/blamejs/test/layer-0-primitives/router.test.js +1277 -0
  461. package/lib/vendor/blamejs/test/layer-0-primitives/safe-async.test.js +133 -0
  462. package/lib/vendor/blamejs/test/layer-0-primitives/safe-buffer-linear-scans.test.js +14 -0
  463. package/lib/vendor/blamejs/test/layer-0-primitives/safe-buffer.test.js +80 -0
  464. package/lib/vendor/blamejs/test/layer-0-primitives/safe-decompress.test.js +28 -0
  465. package/lib/vendor/blamejs/test/layer-0-primitives/safe-dns.test.js +245 -0
  466. package/lib/vendor/blamejs/test/layer-0-primitives/safe-ical.test.js +32 -0
  467. package/lib/vendor/blamejs/test/layer-0-primitives/safe-ini.test.js +376 -0
  468. package/lib/vendor/blamejs/test/layer-0-primitives/safe-json.test.js +175 -0
  469. package/lib/vendor/blamejs/test/layer-0-primitives/safe-mime.test.js +518 -0
  470. package/lib/vendor/blamejs/test/layer-0-primitives/safe-object.test.js +62 -0
  471. package/lib/vendor/blamejs/test/layer-0-primitives/safe-path.test.js +30 -0
  472. package/lib/vendor/blamejs/test/layer-0-primitives/safe-schema.test.js +104 -0
  473. package/lib/vendor/blamejs/test/layer-0-primitives/safe-sql.test.js +142 -0
  474. package/lib/vendor/blamejs/test/layer-0-primitives/safe-url.test.js +112 -0
  475. package/lib/vendor/blamejs/test/layer-0-primitives/safe-vcard.test.js +26 -0
  476. package/lib/vendor/blamejs/test/layer-0-primitives/scheduler.test.js +157 -0
  477. package/lib/vendor/blamejs/test/layer-0-primitives/scim-server.test.js +396 -0
  478. package/lib/vendor/blamejs/test/layer-0-primitives/sd-jwt-vc.test.js +930 -0
  479. package/lib/vendor/blamejs/test/layer-0-primitives/security-assert.test.js +755 -82
  480. package/lib/vendor/blamejs/test/layer-0-primitives/self-update.test.js +1053 -0
  481. package/lib/vendor/blamejs/test/layer-0-primitives/session-device-binding.test.js +200 -0
  482. package/lib/vendor/blamejs/test/layer-0-primitives/session-strict-binding-missing-failclosed.test.js +110 -0
  483. package/lib/vendor/blamejs/test/layer-0-primitives/sigv4-bucket-ops.test.js +636 -0
  484. package/lib/vendor/blamejs/test/layer-0-primitives/sql-offset-without-limit.test.js +94 -0
  485. package/lib/vendor/blamejs/test/layer-0-primitives/sql.test.js +1190 -0
  486. package/lib/vendor/blamejs/test/layer-0-primitives/ssrf-guard.test.js +21 -0
  487. package/lib/vendor/blamejs/test/layer-0-primitives/static.test.js +850 -0
  488. package/lib/vendor/blamejs/test/layer-0-primitives/storage-presigned-url.test.js +146 -0
  489. package/lib/vendor/blamejs/test/layer-0-primitives/storage.test.js +621 -0
  490. package/lib/vendor/blamejs/test/layer-0-primitives/subject.test.js +47 -0
  491. package/lib/vendor/blamejs/test/layer-0-primitives/template.test.js +582 -0
  492. package/lib/vendor/blamejs/test/layer-0-primitives/tenant-quota.test.js +587 -25
  493. package/lib/vendor/blamejs/test/layer-0-primitives/time.test.js +11 -0
  494. package/lib/vendor/blamejs/test/layer-0-primitives/tsa.test.js +524 -63
  495. package/lib/vendor/blamejs/test/layer-0-primitives/uri-template.test.js +27 -0
  496. package/lib/vendor/blamejs/test/layer-0-primitives/vault-rotate.test.js +866 -0
  497. package/lib/vendor/blamejs/test/layer-0-primitives/vault.test.js +74 -0
  498. package/lib/vendor/blamejs/test/layer-0-primitives/vc.test.js +215 -0
  499. package/lib/vendor/blamejs/test/layer-0-primitives/watcher.test.js +550 -0
  500. package/lib/vendor/blamejs/test/layer-0-primitives/webhook-dispatcher.test.js +388 -0
  501. package/lib/vendor/blamejs/test/layer-0-primitives/webhook.test.js +262 -0
  502. package/lib/vendor/blamejs/test/layer-0-primitives/websocket.test.js +1294 -0
  503. package/lib/vendor/blamejs/test/layer-0-primitives/ws-client.test.js +629 -0
  504. package/lib/vendor/blamejs/test/layer-0-primitives/xml-c14n-attr-normalization.test.js +164 -0
  505. package/lib/vendor/blamejs/test/smoke.js +2 -0
  506. package/package.json +1 -1
  507. package/lib/vendor/blamejs/release-notes/v0.16.0.json +0 -44
  508. package/lib/vendor/blamejs/release-notes/v0.16.1.json +0 -36
  509. package/lib/vendor/blamejs/release-notes/v0.16.2.json +0 -71
  510. package/lib/vendor/blamejs/release-notes/v0.16.3.json +0 -71
  511. package/lib/vendor/blamejs/test/layer-0-primitives/acme-coverage.test.js +0 -441
  512. package/lib/vendor/blamejs/test/layer-0-primitives/auth-oauth-coverage.test.js +0 -482
  513. package/lib/vendor/blamejs/test/layer-0-primitives/auth-saml-coverage.test.js +0 -671
  514. package/lib/vendor/blamejs/test/layer-0-primitives/backup-index-coverage.test.js +0 -690
  515. package/lib/vendor/blamejs/test/layer-0-primitives/cli-coverage.test.js +0 -238
  516. package/lib/vendor/blamejs/test/layer-0-primitives/content-credentials-coverage.test.js +0 -319
  517. package/lib/vendor/blamejs/test/layer-0-primitives/keychain-coverage.test.js +0 -0
  518. package/lib/vendor/blamejs/test/layer-0-primitives/mail-auth-coverage.test.js +0 -437
  519. package/lib/vendor/blamejs/test/layer-0-primitives/mcp-coverage.test.js +0 -443
  520. package/lib/vendor/blamejs/test/layer-0-primitives/metrics-coverage.test.js +0 -395
  521. package/lib/vendor/blamejs/test/layer-0-primitives/network-smtp-policy-coverage.test.js +0 -565
  522. package/lib/vendor/blamejs/test/layer-0-primitives/router-coverage.test.js +0 -592
  523. package/lib/vendor/blamejs/test/layer-0-primitives/sql-coverage.test.js +0 -422
  524. package/lib/vendor/blamejs/test/layer-0-primitives/test-coverage.test.js +0 -573
@@ -0,0 +1,92 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (c) blamejs contributors
3
+ "use strict";
4
+ /**
5
+ * guard-time — RFC 3339 / ISO 8601 datetime identifier-safety primitive
6
+ * (b.guardTime).
7
+ *
8
+ * Covers the inspect-vs-throw split: `validate` returns `{ ok, issues }`
9
+ * without throwing (non-string input yields a `time.bad-input` issue),
10
+ * while `sanitize` normalizes the string (legacy-space → `T`, trailing
11
+ * `z` → `Z`) and throws GuardTimeError on any critical / high finding.
12
+ */
13
+
14
+ var helpers = require("../helpers");
15
+ var b = helpers.b;
16
+ var check = helpers.check;
17
+
18
+ function _code(fn) { try { fn(); return null; } catch (e) { return e && e.code; } }
19
+ function _hasKind(rv, kind) {
20
+ return rv.issues.some(function (i) { return i.kind === kind; });
21
+ }
22
+
23
+ function testGuardTimeSurface() {
24
+ check("guardTime is an object", typeof b.guardTime === "object");
25
+ check("guardTime.NAME === 'time'", b.guardTime.NAME === "time");
26
+ check("guardTime.validate is a function", typeof b.guardTime.validate === "function");
27
+ check("guardTime.sanitize is a function", typeof b.guardTime.sanitize === "function");
28
+ check("guardTime registered in guardAll",
29
+ b.guardAll.allGuards().some(function (g) { return (g.name || g.NAME) === "time"; }));
30
+ }
31
+
32
+ function testValidateAcceptsUtcDatetime() {
33
+ var rv = b.guardTime.validate("2026-05-05T12:34:56Z", { profile: "strict" });
34
+ check("well-formed UTC datetime → ok:true", rv.ok === true && rv.issues.length === 0);
35
+ }
36
+
37
+ function testValidatePreEpochYearWindow() {
38
+ // 1969 is before the Unix-epoch floor (minYear default 1970).
39
+ var rv = b.guardTime.validate("1969-12-31T23:59:59Z", { profile: "strict" });
40
+ check("pre-epoch year → ok:false", rv.ok === false);
41
+ check("pre-epoch year → year-window issue", _hasKind(rv, "year-window"));
42
+ }
43
+
44
+ function testValidateNaiveDatetimeStrict() {
45
+ // No offset — strict refuses (cross-region ambiguity class).
46
+ var rv = b.guardTime.validate("2026-05-05T12:34:56", { profile: "strict" });
47
+ check("naive datetime under strict → ok:false", rv.ok === false);
48
+ check("naive datetime → naive-datetime issue", _hasKind(rv, "naive-datetime"));
49
+ }
50
+
51
+ function testValidateNonStringReturnsBadInput() {
52
+ // validate never throws on hostile input — it returns a bad-input issue.
53
+ var rv = b.guardTime.validate(1234567890, { profile: "strict" });
54
+ check("non-string input → ok:false, no throw", rv.ok === false);
55
+ check("non-string input → bad-input issue", _hasKind(rv, "bad-input"));
56
+ }
57
+
58
+ function testSanitizeNormalizes() {
59
+ // Legacy space separator + lowercase `z` are normalized to `T` / `Z`.
60
+ var out = b.guardTime.sanitize("2026-05-05 12:34:56z", { profile: "balanced" });
61
+ check("sanitize normalizes space+z → T+Z", out === "2026-05-05T12:34:56Z");
62
+ }
63
+
64
+ function testSanitizeCleanPassthrough() {
65
+ var out = b.guardTime.sanitize("2026-05-05T12:34:56Z", { profile: "strict" });
66
+ check("already-canonical UTC datetime passes through", out === "2026-05-05T12:34:56Z");
67
+ }
68
+
69
+ function testSanitizeThrowsOnLeapSecondStrict() {
70
+ // Second field 60 is RFC 3339 §5.6 valid but refused under strict.
71
+ check("leap-second refused under strict sanitize",
72
+ _code(function () { b.guardTime.sanitize("9999-12-31T23:59:60Z", { profile: "strict" }); })
73
+ === "time.leap-second");
74
+ }
75
+
76
+ function run() {
77
+ testGuardTimeSurface();
78
+ testValidateAcceptsUtcDatetime();
79
+ testValidatePreEpochYearWindow();
80
+ testValidateNaiveDatetimeStrict();
81
+ testValidateNonStringReturnsBadInput();
82
+ testSanitizeNormalizes();
83
+ testSanitizeCleanPassthrough();
84
+ testSanitizeThrowsOnLeapSecondStrict();
85
+ }
86
+
87
+ module.exports = { run: run };
88
+
89
+ if (require.main === module) {
90
+ try { run(); console.log("[guard-time] OK — " + helpers.getChecks() + " checks passed"); }
91
+ catch (e) { console.error("FAIL:", e.stack || e); process.exit(1); }
92
+ }
@@ -0,0 +1,86 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (c) blamejs contributors
3
+ "use strict";
4
+ /**
5
+ * guard-uuid — RFC 9562 UUID identifier-safety primitive (b.guardUuid).
6
+ *
7
+ * Covers the normalize-or-throw sanitize contract: sanitize strips the
8
+ * `urn:uuid:` prefix and Microsoft GUID braces and lower-cases to the
9
+ * canonical hyphenated form, and throws GuardUuidError on a critical /
10
+ * high finding (nil / max sentinel under reject).
11
+ */
12
+
13
+ var helpers = require("../helpers");
14
+ var b = helpers.b;
15
+ var check = helpers.check;
16
+
17
+ var CANON = "550e8400-e29b-41d4-a716-446655440000";
18
+ function _code(fn) { try { fn(); return null; } catch (e) { return e && e.code; } }
19
+
20
+ function testGuardUuidSurface() {
21
+ check("guardUuid is an object", typeof b.guardUuid === "object");
22
+ check("guardUuid.NAME === 'uuid'", b.guardUuid.NAME === "uuid");
23
+ check("guardUuid.sanitize is a function", typeof b.guardUuid.sanitize === "function");
24
+ check("guardUuid registered in guardAll",
25
+ b.guardAll.allGuards().some(function (g) { return (g.name || g.NAME) === "uuid"; }));
26
+ check("frameworkError.GuardUuidError exposed",
27
+ typeof b.frameworkError.GuardUuidError === "function");
28
+ }
29
+
30
+ function testSanitizeCanonicalPassthrough() {
31
+ var out = b.guardUuid.sanitize(CANON, { profile: "strict" });
32
+ check("already-canonical UUID passes through", out === CANON);
33
+ }
34
+
35
+ function testSanitizeNormalizesUrnPrefix() {
36
+ // urn:uuid: prefix stripped + upper-case lowered → canonical form.
37
+ var out = b.guardUuid.sanitize("urn:uuid:550E8400-E29B-41D4-A716-446655440000",
38
+ { profile: "balanced" });
39
+ check("urn:uuid: prefix normalized to canonical", out === CANON);
40
+ }
41
+
42
+ function testSanitizeNormalizesBraces() {
43
+ // Microsoft GUID braces stripped → canonical form.
44
+ var out = b.guardUuid.sanitize("{550E8400-E29B-41D4-A716-446655440000}",
45
+ { profile: "balanced" });
46
+ check("GUID braces normalized to canonical", out === CANON);
47
+ }
48
+
49
+ function testSanitizeRefusesMaxSentinelStrict() {
50
+ check("max UUID sentinel refused under strict",
51
+ _code(function () {
52
+ b.guardUuid.sanitize("ffffffff-ffff-ffff-ffff-ffffffffffff", { profile: "strict" });
53
+ }) === "uuid.max-uuid");
54
+ }
55
+
56
+ function testSanitizeRefusesNilSentinelStrict() {
57
+ check("nil UUID sentinel refused under strict",
58
+ _code(function () {
59
+ b.guardUuid.sanitize("00000000-0000-0000-0000-000000000000", { profile: "strict" });
60
+ }) === "uuid.nil-uuid");
61
+ }
62
+
63
+ function testSanitizeThrowsGuardUuidError() {
64
+ var caught = null;
65
+ try { b.guardUuid.sanitize("not-a-uuid", { profile: "strict" }); }
66
+ catch (e) { caught = e; }
67
+ check("malformed UUID sanitize throws a GuardUuidError instance",
68
+ caught instanceof b.frameworkError.GuardUuidError);
69
+ }
70
+
71
+ function run() {
72
+ testGuardUuidSurface();
73
+ testSanitizeCanonicalPassthrough();
74
+ testSanitizeNormalizesUrnPrefix();
75
+ testSanitizeNormalizesBraces();
76
+ testSanitizeRefusesMaxSentinelStrict();
77
+ testSanitizeRefusesNilSentinelStrict();
78
+ testSanitizeThrowsGuardUuidError();
79
+ }
80
+
81
+ module.exports = { run: run };
82
+
83
+ if (require.main === module) {
84
+ try { run(); console.log("[guard-uuid] OK — " + helpers.getChecks() + " checks passed"); }
85
+ catch (e) { console.error("FAIL:", e.stack || e); process.exit(1); }
86
+ }
@@ -29,6 +29,44 @@ function run() {
29
29
  check("unterminated comment detected", !!p4 && p4.code === "html/unterminated-comment");
30
30
  var p5 = b.htmlBalance.check("<p>x</br></p>");
31
31
  check("close on void element rejected", !!p5 && p5.code === "html/void-close");
32
+
33
+ // ---- checkSafe — structural balance composed with guard-html security ----
34
+
35
+ // Balanced + content-safe: no structural issue, no guard issues, ok:true.
36
+ var safe = b.htmlBalance.checkSafe("<p>hello</p>", { profile: "strict" });
37
+ check("checkSafe: clean html balanceIssue null", safe.balanceIssue === null);
38
+ check("checkSafe: clean html no guard issues", safe.guardIssues.length === 0);
39
+ check("checkSafe: clean html ok true", safe.ok === true);
40
+
41
+ // Balanced but content-UNSAFE: an inline event-handler attribute is
42
+ // structurally fine (balanceIssue null) but the strict guard profile
43
+ // refuses it — ok flips false with the guard issue surfaced.
44
+ var evt = b.htmlBalance.checkSafe("<div onclick=\"x()\">hi</div>", { profile: "strict" });
45
+ check("checkSafe: event-handler balanceIssue null", evt.balanceIssue === null);
46
+ check("checkSafe: event-handler guard issue raised", evt.guardIssues.length >= 1);
47
+ check("checkSafe: event-handler kind is event-handler",
48
+ evt.guardIssues[0].kind === "event-handler");
49
+ check("checkSafe: event-handler ok false", evt.ok === false);
50
+
51
+ // Structurally BROKEN with no profile: only the cheap balance() runs,
52
+ // guard checks are skipped (no profile / contentSafety), ok:false on the
53
+ // structural problem alone.
54
+ var broken = b.htmlBalance.checkSafe("<div>broken");
55
+ check("checkSafe: no-profile surfaces balance issue",
56
+ !!broken.balanceIssue && broken.balanceIssue.code === "html/unclosed-tag");
57
+ check("checkSafe: no-profile skips guard scan", broken.guardIssues.length === 0);
58
+ check("checkSafe: no-profile ok false", broken.ok === false);
59
+
60
+ // contentSafety:{ profile } is the shared shape with b.fileUpload /
61
+ // b.staticServe and must behave identically to a bare profile opt.
62
+ var viaCs = b.htmlBalance.checkSafe("<div onclick=\"x()\">hi</div>",
63
+ { contentSafety: { profile: "strict" } });
64
+ check("checkSafe: contentSafety shape matches profile opt",
65
+ viaCs.ok === false && viaCs.guardIssues.length >= 1);
66
+
67
+ // Balanced + safe with no opts at all → guard scan skipped, ok:true.
68
+ var noOpts = b.htmlBalance.checkSafe("<section><p>fine</p></section>");
69
+ check("checkSafe: no-opts balanced content ok true", noOpts.ok === true);
32
70
  }
33
71
 
34
72
  module.exports = { run: run };
@@ -0,0 +1,347 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (c) blamejs contributors
3
+ "use strict";
4
+ /**
5
+ * b.httpClient.cache — RFC 9111 §3.5 Authorization rule.
6
+ *
7
+ * A shared cache MUST NOT reuse a stored response to a request that
8
+ * carried an `Authorization` header to satisfy a subsequent request
9
+ * unless the response explicitly permits it via `public`, `s-maxage`,
10
+ * or `must-revalidate`. Without that gate a per-user authenticated
11
+ * response lands in a fleet-shared cache and a different principal's
12
+ * request is served it — a cross-user data leak.
13
+ *
14
+ * Coverage:
15
+ * - shared cache + Authorization + only max-age → NOT reused across users
16
+ * - shared cache + Authorization + `public` → reuse permitted (origin opt-in)
17
+ * - shared cache + Authorization + `s-maxage` → reuse permitted
18
+ * - private cache (sharedCache:false) + Authorization → cached (single tenant)
19
+ *
20
+ * No live network — local http.Server on a random loopback port via
21
+ * b.testing.listenOnRandomPort.
22
+ */
23
+
24
+ var http = require("http");
25
+
26
+ var helpers = require("../helpers");
27
+ var b = helpers.b;
28
+ var check = helpers.check;
29
+
30
+ function _httpDate(ms) { return new Date(ms).toUTCString(); }
31
+
32
+ async function _withServer(handler, fn) {
33
+ var server = http.createServer(handler);
34
+ var port = await b.testing.listenOnRandomPort(server, "127.0.0.1");
35
+ try {
36
+ return await fn("http://127.0.0.1:" + port);
37
+ } finally {
38
+ await new Promise(function (resolve) { server.close(function () { resolve(); }); });
39
+ }
40
+ }
41
+
42
+ function _newCache(extra) {
43
+ var store = b.httpClient.cache.memoryStore({ maxBytes: 1024 * 1024, maxEntries: 64 });
44
+ return b.httpClient.cache.create(Object.assign({ store: store }, extra || {}));
45
+ }
46
+
47
+ // A handler that echoes the caller's Authorization into the body so the
48
+ // served bytes reveal which principal the response was generated for.
49
+ function _echoAuthHandler(cacheControl, hitsRef) {
50
+ return function (req, res) {
51
+ hitsRef.n += 1;
52
+ res.writeHead(200, {
53
+ "Content-Type": "text/plain",
54
+ "Cache-Control": cacheControl,
55
+ "Date": _httpDate(Date.now()),
56
+ });
57
+ res.end("secret-for:" + (req.headers["authorization"] || "anon"));
58
+ };
59
+ }
60
+
61
+ // A handler whose FIRST 200 carries the `must-revalidate` §3.5 opt-in (with
62
+ // max-age=0 so the entry is immediately stale), then answers the conditional
63
+ // revalidation with a 304 that DROPS must-revalidate and substitutes a plain
64
+ // max-age=60. A shared cache that refreshes the entry from that 304 without
65
+ // re-applying the Authorization gate would retain a now-freely-shareable
66
+ // authed response.
67
+ function _optInThenDropOn304Handler(hitsRef) {
68
+ return function (req, res) {
69
+ hitsRef.n += 1;
70
+ if (req.headers["if-none-match"]) {
71
+ res.writeHead(304, {
72
+ "Cache-Control": "max-age=60",
73
+ "ETag": '"v1"',
74
+ "Date": _httpDate(Date.now()),
75
+ });
76
+ res.end();
77
+ return;
78
+ }
79
+ res.writeHead(200, {
80
+ "Content-Type": "text/plain",
81
+ "Cache-Control": "must-revalidate, max-age=0",
82
+ "ETag": '"v1"',
83
+ "Date": _httpDate(Date.now()),
84
+ });
85
+ res.end("secret-for:" + (req.headers["authorization"] || "anon"));
86
+ };
87
+ }
88
+
89
+ // A 304 can replace Cache-Control: an authed entry first stored under the
90
+ // must-revalidate opt-in can be revalidated into a plain max-age=60 response.
91
+ // The refresh must re-apply RFC 9111 §3.5 and EVICT the entry (it lost its
92
+ // opt-in) rather than retain it as a freely-shareable authed response served
93
+ // to a different principal.
94
+ async function testAuthOptInDroppedOn304EvictsNotShares() {
95
+ var hits = { n: 0 };
96
+ await _withServer(_optInThenDropOn304Handler(hits), async function (baseUrl) {
97
+ var cache = _newCache({ sharedCache: true });
98
+ var r1 = await b.httpClient.request({
99
+ url: baseUrl + "/acct", cache: cache,
100
+ headers: { Authorization: "Bearer USER-AAA" },
101
+ allowedProtocols: b.safeUrl.ALLOW_HTTP_ALL, allowInternal: true,
102
+ });
103
+ check("304-optin: AAA first request MISS", r1.headers["x-blamejs-cache"] === "MISS");
104
+ check("304-optin: AAA body", r1.body.toString("utf8") === "secret-for:Bearer USER-AAA");
105
+ // AAA again — entry is stale (max-age=0), revalidates, gets the 304 that
106
+ // drops must-revalidate for max-age=60.
107
+ var r2 = await b.httpClient.request({
108
+ url: baseUrl + "/acct", cache: cache,
109
+ headers: { Authorization: "Bearer USER-AAA" },
110
+ allowedProtocols: b.safeUrl.ALLOW_HTTP_ALL, allowInternal: true,
111
+ });
112
+ check("304-optin: AAA revalidated serve is still AAA's body",
113
+ r2.body.toString("utf8") === "secret-for:Bearer USER-AAA");
114
+ // BBB (a different principal) must NOT receive AAA's body — the entry must
115
+ // have been evicted on the opt-in-dropping 304.
116
+ var r3 = await b.httpClient.request({
117
+ url: baseUrl + "/acct", cache: cache,
118
+ headers: { Authorization: "Bearer USER-BBB" },
119
+ allowedProtocols: b.safeUrl.ALLOW_HTTP_ALL, allowInternal: true,
120
+ });
121
+ check("304-optin: BBB does NOT receive AAA's body after the 304 dropped the opt-in",
122
+ r3.body.toString("utf8") !== "secret-for:Bearer USER-AAA");
123
+ check("304-optin: BBB receives its own response",
124
+ r3.body.toString("utf8") === "secret-for:Bearer USER-BBB");
125
+ });
126
+ }
127
+
128
+ // A store that strips `hadAuthorization` from every entry it returns —
129
+ // simulating a persistent shared store (Redis / filesystem) whose records were
130
+ // written by a version before that field existed. Such a legacy entry must be
131
+ // treated as Authorization-bearing (fail closed), not unauthenticated, so the
132
+ // §3.5 gate still applies on its 304 refresh.
133
+ function _legacyStrippingStore() {
134
+ var inner = b.httpClient.cache.memoryStore({ maxBytes: 1024 * 1024, maxEntries: 64 });
135
+ return {
136
+ get: function (k) {
137
+ var e = inner.get(k);
138
+ if (e && typeof e === "object" && !e.__varyMarker) {
139
+ var copy = Object.assign({}, e);
140
+ delete copy.hadAuthorization;
141
+ return copy;
142
+ }
143
+ return e;
144
+ },
145
+ set: function (k, v) { return inner.set(k, v); },
146
+ delete: function (k) { return inner.delete(k); },
147
+ clear: function () { return inner.clear(); },
148
+ };
149
+ }
150
+
151
+ // A legacy entry (no hadAuthorization metadata) must fail closed on a 304 that
152
+ // drops the opt-in: the refresh cannot assume it was unauthenticated, so it
153
+ // re-applies the §3.5 gate and evicts rather than leaving a previously-stored
154
+ // authenticated response shareable across the version upgrade.
155
+ async function testLegacyEntryWithoutAuthFlagFailsClosedOn304() {
156
+ var hits = { n: 0 };
157
+ await _withServer(_optInThenDropOn304Handler(hits), async function (baseUrl) {
158
+ var cache = b.httpClient.cache.create({ store: _legacyStrippingStore(), sharedCache: true });
159
+ await b.httpClient.request({
160
+ url: baseUrl + "/legacy", cache: cache,
161
+ headers: { Authorization: "Bearer USER-AAA" },
162
+ allowedProtocols: b.safeUrl.ALLOW_HTTP_ALL, allowInternal: true,
163
+ });
164
+ await b.httpClient.request({
165
+ url: baseUrl + "/legacy", cache: cache,
166
+ headers: { Authorization: "Bearer USER-AAA" },
167
+ allowedProtocols: b.safeUrl.ALLOW_HTTP_ALL, allowInternal: true,
168
+ });
169
+ var r3 = await b.httpClient.request({
170
+ url: baseUrl + "/legacy", cache: cache,
171
+ headers: { Authorization: "Bearer USER-BBB" },
172
+ allowedProtocols: b.safeUrl.ALLOW_HTTP_ALL, allowInternal: true,
173
+ });
174
+ check("legacy-entry: a pre-field entry fails closed — BBB does NOT receive AAA's body",
175
+ r3.body.toString("utf8") !== "secret-for:Bearer USER-AAA");
176
+ check("legacy-entry: BBB receives its own response",
177
+ r3.body.toString("utf8") === "secret-for:Bearer USER-BBB");
178
+ });
179
+ }
180
+
181
+ // A still-FRESH legacy entry (positive freshness, no hadAuthorization) is
182
+ // served directly on a HIT without ever reaching the 304 refresh. In a shared
183
+ // cache it could be a pre-upgrade authenticated response, so the lookup itself
184
+ // must fail closed and evict it rather than serve a cached body across
185
+ // principals.
186
+ async function testLegacyFreshEntryNotServedOnHit() {
187
+ var hits = { n: 0 };
188
+ await _withServer(_echoAuthHandler("max-age=60", hits), async function (baseUrl) {
189
+ var cache = b.httpClient.cache.create({ store: _legacyStrippingStore(), sharedCache: true });
190
+ // Seed a fresh entry via an UNAUTHENTICATED request (the store-time gate
191
+ // stores it); the legacy store then strips hadAuthorization so it presents
192
+ // as a record written before the field existed.
193
+ var r0 = await b.httpClient.request({
194
+ url: baseUrl + "/legacy-fresh", cache: cache,
195
+ allowedProtocols: b.safeUrl.ALLOW_HTTP_ALL, allowInternal: true,
196
+ });
197
+ check("legacy-fresh: seed request MISS", r0.headers["x-blamejs-cache"] === "MISS");
198
+ // A principal now requests the same URL. The stored entry has no
199
+ // hadAuthorization (legacy), so it must NOT be served on a fresh HIT.
200
+ var r1 = await b.httpClient.request({
201
+ url: baseUrl + "/legacy-fresh", cache: cache,
202
+ headers: { Authorization: "Bearer USER-BBB" },
203
+ allowedProtocols: b.safeUrl.ALLOW_HTTP_ALL, allowInternal: true,
204
+ });
205
+ check("legacy-fresh: a legacy entry is not served on a HIT (evicted at lookup)",
206
+ r1.headers["x-blamejs-cache"] === "MISS");
207
+ check("legacy-fresh: caller receives its own fresh response, not the legacy cached body",
208
+ r1.body.toString("utf8") === "secret-for:Bearer USER-BBB");
209
+ });
210
+ }
211
+
212
+ // ---- The leak: shared cache must not cross Authorization principals ----
213
+
214
+ async function testAuthNotSharedAcrossUsersSharedCache() {
215
+ var hits = { n: 0 };
216
+ await _withServer(_echoAuthHandler("max-age=60", hits), async function (baseUrl) {
217
+ var cache = _newCache({ sharedCache: true });
218
+
219
+ var r1 = await b.httpClient.request({
220
+ url: baseUrl + "/account", cache: cache,
221
+ headers: { Authorization: "Bearer USER-AAA" },
222
+ allowedProtocols: b.safeUrl.ALLOW_HTTP_ALL, allowInternal: true,
223
+ });
224
+ check("shared+auth: first request MISS",
225
+ r1.headers["x-blamejs-cache"] === "MISS");
226
+ check("shared+auth: first request body is AAA's",
227
+ r1.body.toString("utf8") === "secret-for:Bearer USER-AAA");
228
+
229
+ var r2 = await b.httpClient.request({
230
+ url: baseUrl + "/account", cache: cache,
231
+ headers: { Authorization: "Bearer USER-BBB" },
232
+ allowedProtocols: b.safeUrl.ALLOW_HTTP_ALL, allowInternal: true,
233
+ });
234
+ // The core assertion: USER-BBB must NEVER receive USER-AAA's body.
235
+ check("shared+auth: USER-BBB does NOT receive USER-AAA's cached response",
236
+ r2.body.toString("utf8") !== "secret-for:Bearer USER-AAA");
237
+ check("shared+auth: USER-BBB receives its own response",
238
+ r2.body.toString("utf8") === "secret-for:Bearer USER-BBB");
239
+ check("shared+auth: second request was not served from cache",
240
+ r2.headers["x-blamejs-cache"] === "MISS");
241
+ check("shared+auth: both requests reached upstream", hits.n === 2);
242
+ });
243
+ }
244
+
245
+ // ---- `public` is the origin's opt-in to share an authed response ----
246
+
247
+ async function testPublicPermitsSharedAuthReuse() {
248
+ var hits = { n: 0 };
249
+ await _withServer(_echoAuthHandler("public, max-age=60", hits), async function (baseUrl) {
250
+ var cache = _newCache({ sharedCache: true });
251
+
252
+ var r1 = await b.httpClient.request({
253
+ url: baseUrl + "/pub", cache: cache,
254
+ headers: { Authorization: "Bearer USER-AAA" },
255
+ allowedProtocols: b.safeUrl.ALLOW_HTTP_ALL, allowInternal: true,
256
+ });
257
+ check("public+auth: first request MISS", r1.headers["x-blamejs-cache"] === "MISS");
258
+
259
+ var r2 = await b.httpClient.request({
260
+ url: baseUrl + "/pub", cache: cache,
261
+ headers: { Authorization: "Bearer USER-BBB" },
262
+ allowedProtocols: b.safeUrl.ALLOW_HTTP_ALL, allowInternal: true,
263
+ });
264
+ // `public` is an explicit origin declaration that the response is
265
+ // shareable, so a HIT here is correct RFC 9111 §3.5 behaviour.
266
+ check("public+auth: second request served from cache (origin opt-in)",
267
+ r2.headers["x-blamejs-cache"] === "HIT");
268
+ check("public+auth: only one upstream call", hits.n === 1);
269
+ });
270
+ }
271
+
272
+ async function testSmaxagePermitsSharedAuthReuse() {
273
+ var hits = { n: 0 };
274
+ await _withServer(_echoAuthHandler("s-maxage=60", hits), async function (baseUrl) {
275
+ var cache = _newCache({ sharedCache: true });
276
+
277
+ await b.httpClient.request({
278
+ url: baseUrl + "/s", cache: cache,
279
+ headers: { Authorization: "Bearer USER-AAA" },
280
+ allowedProtocols: b.safeUrl.ALLOW_HTTP_ALL, allowInternal: true,
281
+ });
282
+ var r2 = await b.httpClient.request({
283
+ url: baseUrl + "/s", cache: cache,
284
+ headers: { Authorization: "Bearer USER-BBB" },
285
+ allowedProtocols: b.safeUrl.ALLOW_HTTP_ALL, allowInternal: true,
286
+ });
287
+ check("s-maxage+auth: second request served from cache",
288
+ r2.headers["x-blamejs-cache"] === "HIT");
289
+ check("s-maxage+auth: only one upstream call", hits.n === 1);
290
+ });
291
+ }
292
+
293
+ // ---- A private cache (single tenant) may cache an authed response ----
294
+
295
+ async function testPrivateCacheCachesAuthedResponse() {
296
+ var hits = { n: 0 };
297
+ await _withServer(_echoAuthHandler("max-age=60", hits), async function (baseUrl) {
298
+ var cache = _newCache({ sharedCache: false });
299
+
300
+ await b.httpClient.request({
301
+ url: baseUrl + "/me", cache: cache,
302
+ headers: { Authorization: "Bearer USER-AAA" },
303
+ allowedProtocols: b.safeUrl.ALLOW_HTTP_ALL, allowInternal: true,
304
+ });
305
+ var r2 = await b.httpClient.request({
306
+ url: baseUrl + "/me", cache: cache,
307
+ headers: { Authorization: "Bearer USER-AAA" },
308
+ allowedProtocols: b.safeUrl.ALLOW_HTTP_ALL, allowInternal: true,
309
+ });
310
+ check("private+auth: same-principal repeat served from cache",
311
+ r2.headers["x-blamejs-cache"] === "HIT");
312
+ check("private+auth: only one upstream call", hits.n === 1);
313
+ });
314
+ }
315
+
316
+ // ---- Run ----------------------------------------------------------------
317
+
318
+ async function run() {
319
+ try {
320
+ await testAuthNotSharedAcrossUsersSharedCache();
321
+ await testAuthOptInDroppedOn304EvictsNotShares();
322
+ await testLegacyEntryWithoutAuthFlagFailsClosedOn304();
323
+ await testLegacyFreshEntryNotServedOnHit();
324
+ await testPublicPermitsSharedAuthReuse();
325
+ await testSmaxagePermitsSharedAuthReuse();
326
+ await testPrivateCacheCachesAuthedResponse();
327
+ } finally {
328
+ await _drainTcpHandles();
329
+ }
330
+ }
331
+
332
+ async function _drainTcpHandles() {
333
+ b.httpClient._resetForTest();
334
+ if (typeof process.getActiveResourcesInfo !== "function") return;
335
+ await helpers.waitUntil(function () {
336
+ return process.getActiveResourcesInfo().filter(function (t) {
337
+ return t === "TCPSocketWrap" || t === "TCPServerWrap";
338
+ }).length === 0;
339
+ }, { timeoutMs: 5000, label: "http-client-cache-authorization: TCP handle drain" });
340
+ }
341
+
342
+ module.exports = { run: run };
343
+
344
+ if (require.main === module) {
345
+ run().then(function () { console.log("OK"); })
346
+ .catch(function (e) { console.error(e.stack || e); process.exit(1); });
347
+ }