@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
@@ -57,7 +57,7 @@ var ssrfGuard = require("./ssrf-guard");
57
57
  var networkProxy = require("./network-proxy");
58
58
  var numericBounds = require("./numeric-bounds");
59
59
  var validateOpts = require("./validate-opts");
60
- var { FrameworkError, HttpClientError } = require("./framework-error");
60
+ var { HttpClientError } = require("./framework-error");
61
61
 
62
62
  // Per-origin transport cache. Entry is either the resolved transport
63
63
  // object or a pending Promise that resolves to one. The Promise form
@@ -370,8 +370,11 @@ function _getTransport(u, opts, ips) {
370
370
  }
371
371
 
372
372
  function _makeError(errorClass, code, message, permanent, statusCode) {
373
- if (!errorClass) return new FrameworkError(message, code);
374
- return new errorClass(code, message, permanent, statusCode);
373
+ // Default to HttpClientError (the documented default errorClass) rather than
374
+ // the base FrameworkError, so error.statusCode and error.permanent are
375
+ // populated even when the caller passed no explicit opts.errorClass.
376
+ var Cls = errorClass || HttpClientError;
377
+ return new Cls(code, message, permanent, statusCode);
375
378
  }
376
379
 
377
380
  // RFC 9110 §15.5 4xx codes that are NOT permanent (request-timeout,
@@ -553,10 +556,25 @@ function _buildMultipartBody(spec) {
553
556
  totalSize += CRLF.length;
554
557
  }
555
558
 
559
+ // Reject CR/LF/NUL in any value interpolated onto a part-header line
560
+ // (Content-Disposition name/filename, Content-Type). Without this an attacker
561
+ // who controls a field name / filename / content-type can smuggle a CRLF and
562
+ // inject extra part headers or forge additional form parts (multipart header
563
+ // injection) — the same class the mail-header sweep closed for RFC 822 lines.
564
+ function _assertHeaderSafe(v, label) {
565
+ for (var i = 0; i < v.length; i++) {
566
+ var c = v.charCodeAt(i);
567
+ if (c === 13 || c === 10 || c === 0) { // CR / LF / NUL
568
+ throw new Error("multipart: " + label + " must not contain CR, LF, or NUL (header injection)");
569
+ }
570
+ }
571
+ }
572
+
556
573
  function _pushField(name, value) {
557
574
  if (typeof name !== "string" || name.length === 0) {
558
575
  throw new Error("multipart: field name must be a non-empty string");
559
576
  }
577
+ _assertHeaderSafe(name, "field name");
560
578
  var disposition = 'Content-Disposition: form-data; name="' + name + '"';
561
579
  var head = _entryHeaderBytes(disposition, null);
562
580
  var bodyBuf = Buffer.isBuffer(value) ? value : Buffer.from(String(value), "utf8");
@@ -588,6 +606,9 @@ function _buildMultipartBody(spec) {
588
606
  filename = "blob";
589
607
  }
590
608
  var mimeType = file.contentType || file.mimeType || "application/octet-stream";
609
+ _assertHeaderSafe(file.field, "file.field");
610
+ _assertHeaderSafe(filename, "filename");
611
+ _assertHeaderSafe(mimeType, "contentType");
591
612
  var disposition = 'Content-Disposition: form-data; name="' + file.field + '"' +
592
613
  '; filename="' + filename.replace(/"/g, "%22") + '"';
593
614
  var head = _entryHeaderBytes(disposition, mimeType);
@@ -1242,7 +1263,11 @@ function _revalidate(cache, method, opts, entry, requestHeaders) {
1242
1263
  // throw so caching cannot surface as a request failure.
1243
1264
  function _maybeStore(cache, method, url, requestHeaders, res) {
1244
1265
  try {
1245
- var evaluation = cache._evaluateStorage(method, res.statusCode, res.headers || {});
1266
+ // requestHeaders drives the RFC 9111 §3.5 Authorization gate inside the
1267
+ // storage decision — a shared cache must not persist a per-principal
1268
+ // authenticated response absent an explicit public / s-maxage /
1269
+ // must-revalidate opt-in from the origin.
1270
+ var evaluation = cache._evaluateStorage(method, res.statusCode, res.headers || {}, requestHeaders);
1246
1271
  if (!evaluation.cacheable) return;
1247
1272
  cache._store(method, url, requestHeaders, res.statusCode, res.headers || {}, res.body, evaluation);
1248
1273
  } catch (_e) { /* drop-silent — caching never breaks the request */ }
@@ -1337,14 +1362,21 @@ function _requestWithRedirects(opts, hopsLeft) {
1337
1362
  headersStripped: headersStripped,
1338
1363
  method: nextMethod,
1339
1364
  });
1365
+ function _redirectAborted(e) {
1366
+ return Promise.reject(_makeError(opts.errorClass, "REDIRECT_ABORTED",
1367
+ "onRedirect hook refused redirect: " + ((e && e.message) || String(e)), true));
1368
+ }
1340
1369
  try {
1341
1370
  var hookResult = onRedirect(hookEvent);
1342
1371
  if (hookResult && typeof hookResult.then === "function") {
1343
- return hookResult.then(function () { return _continueFollow(); });
1372
+ // An async hook's rejection must abort the follow with the SAME
1373
+ // REDIRECT_ABORTED shape a sync throw produces — otherwise an
1374
+ // operator who awaits inside the hook (or returns a rejected
1375
+ // Promise) silently gets an un-coded raw rejection instead.
1376
+ return hookResult.then(function () { return _continueFollow(); }, _redirectAborted);
1344
1377
  }
1345
1378
  } catch (e) {
1346
- return Promise.reject(_makeError(opts.errorClass, "REDIRECT_ABORTED",
1347
- "onRedirect hook refused redirect: " + ((e && e.message) || String(e)), true));
1379
+ return _redirectAborted(e);
1348
1380
  }
1349
1381
  }
1350
1382
  return _continueFollow();
@@ -104,7 +104,7 @@ function _sfQuotedString(s) {
104
104
  "httpSig: parameter string contains non-printable byte at offset " + i);
105
105
  }
106
106
  }
107
- return "\"" + s.replace(/\\/g, "\\\\").replace(/"/g, "\\\"") + "\"";
107
+ return safeBuffer.quoteString(s);
108
108
  }
109
109
 
110
110
  // _serializeCovered — RFC 9421 §2.5 covered-components list.
@@ -379,6 +379,24 @@ function sign(msg, opts) {
379
379
  }
380
380
  validateOpts.requireNonEmptyString(opts.privateKey,
381
381
  "httpSig.sign: privateKey (PEM)", HttpSigError, "BAD_OPT");
382
+ // Bind the declared alg to the signing key's real type. SUPPORTED_ALGS names
383
+ // ARE node's asymmetricKeyType values ("ed25519" / "ml-dsa-65"), so signing
384
+ // an ed25519 key under alg="ml-dsa-65" would emit an authenticated `alg`
385
+ // label that misstates the real algorithm -- a false PQC-signed claim that a
386
+ // verifier trusting the label would honor. Refuse the mislabeled artifact at
387
+ // sign time (matching every other signature verifier in the framework and the
388
+ // verify-side check below; alg-confusion family, CWE-347).
389
+ // Parse only to read the type; an unparseable key is left for the sign step
390
+ // below to reject (SIGN_FAILED), preserving that contract. A parseable key
391
+ // whose type differs from the declared alg is the mislabel we refuse here.
392
+ var signKeyType = null;
393
+ try { signKeyType = nodeCrypto.createPrivateKey(opts.privateKey).asymmetricKeyType; }
394
+ catch (_e) { signKeyType = null; }
395
+ if (signKeyType !== null && signKeyType !== opts.alg) {
396
+ throw _err("BAD_OPT",
397
+ "httpSig.sign: alg '" + opts.alg + "' does not match the private key's type '" +
398
+ signKeyType + "' (the alg label must be bound to the key's real algorithm)");
399
+ }
382
400
  if (!Array.isArray(opts.covered) || opts.covered.length === 0) {
383
401
  throw _err("BAD_OPT", "httpSig.sign: covered must be a non-empty array");
384
402
  }
@@ -614,6 +632,22 @@ function verify(msg, opts) {
614
632
  if (typeof publicKeyPem !== "string" || publicKeyPem.length === 0) {
615
633
  return { valid: false, reason: "unknown-keyid", keyid: p.keyid };
616
634
  }
635
+ // Bind the (authenticated) declared alg to the resolved key's real type
636
+ // BEFORE the crypto check. nodeCrypto.verify(null, ...) selects the algorithm
637
+ // from the key, not from p.alg, so a key whose type differs from p.alg means
638
+ // the alg label misstates the real signature algorithm (e.g. a classical
639
+ // ed25519 key under a declared PQC alg="ml-dsa-65"). Refuse rather than verify
640
+ // under a mislabeled alg (alg-confusion family, CWE-347) -- SUPPORTED_ALGS
641
+ // names ARE the asymmetricKeyType values.
642
+ // Parse only to read the type; an unparseable key is left for the crypto
643
+ // step below to reject (verify-threw), preserving that contract. A parseable
644
+ // key whose type differs from the declared alg is the mislabel we refuse here.
645
+ var verifyKeyType = null;
646
+ try { verifyKeyType = nodeCrypto.createPublicKey(publicKeyPem).asymmetricKeyType; }
647
+ catch (_e) { verifyKeyType = null; }
648
+ if (verifyKeyType !== null && verifyKeyType !== p.alg) {
649
+ return { valid: false, reason: "alg-key-mismatch", alg: p.alg, keyType: verifyKeyType };
650
+ }
617
651
 
618
652
  // If content-digest is covered, recompute and compare. RFC 9421 §B.2.5
619
653
  // mandates that verifiers re-run the digest over the body — a stale
@@ -48,6 +48,7 @@
48
48
  */
49
49
  var lazyRequire = require("./lazy-require");
50
50
  var boundedMap = require("./bounded-map");
51
+ var safeObject = require("./safe-object");
51
52
  var { defineClass } = require("./framework-error");
52
53
 
53
54
  var I18nMessageFormatError = defineClass("I18nMessageFormatError",
@@ -362,17 +363,41 @@ function _renderSequence(nodes, vars, locale, hashContext, depth) {
362
363
  return out;
363
364
  }
364
365
 
366
+ // Own-property case lookup. A select value is operator/end-user supplied, so
367
+ // String(sv) can be `__proto__` / `constructor` / `toString` / `hasOwnProperty`
368
+ // etc. A bare `node.cases[key]` would then return a truthy INHERITED
369
+ // Object.prototype member, bypassing the `other` fallback and either rendering
370
+ // garbage (a proto value with no `.length`) or throwing on `_renderSequence` of
371
+ // a non-array (a request DoS). Every case-map lookup goes through this so no key
372
+ // can reach the prototype chain.
373
+ function _ownCase(cases, key) {
374
+ return safeObject.ownProp(cases, key);
375
+ }
376
+
377
+ // Own-property variable lookup. A template argument NAME is parse-derived from
378
+ // the (possibly operator/tenant-supplied) message, so it can be `toString` /
379
+ // `constructor` / `valueOf` / `__proto__` / any prototype-polluted key. A bare
380
+ // `vars[name]` would then return the INHERITED Object.prototype member instead
381
+ // of treating the variable as absent — leaking a function source (or a planted
382
+ // prototype value) into rendered output and diverging from both the "missing
383
+ // arg renders empty" contract and the sibling simple interpolator in b.i18n,
384
+ // which is already own-property-only. Every argument / plural / select value
385
+ // lookup goes through this so no template name can reach the prototype chain.
386
+ function _ownVar(vars, name) {
387
+ return safeObject.ownProp(vars, name);
388
+ }
389
+
365
390
  function _renderNode(node, vars, locale, hashContext, depth) {
366
391
  if (node.type === "literal") return node.value;
367
392
  if (node.type === "hash") {
368
393
  return hashContext != null ? String(hashContext) : "#";
369
394
  }
370
395
  if (node.type === "argument") {
371
- var v = vars[node.name];
396
+ var v = _ownVar(vars, node.name);
372
397
  return v === undefined ? "" : (v === null ? "" : String(v));
373
398
  }
374
399
  if (node.type === "plural" || node.type === "ordinal") {
375
- var raw = vars[node.name];
400
+ var raw = _ownVar(vars, node.name);
376
401
  var n = Number(raw);
377
402
  if (!Number.isFinite(n)) {
378
403
  throw _err("BAD_VAR",
@@ -381,18 +406,18 @@ function _renderNode(node, vars, locale, hashContext, depth) {
381
406
  }
382
407
  var adjusted = n - (node.offset || 0);
383
408
  var exact = "=" + n;
384
- var caseBody = node.cases[exact];
409
+ var caseBody = _ownCase(node.cases, exact);
385
410
  if (!caseBody) {
386
411
  var pr = _pluralRules(locale, node.type === "ordinal" ? "ordinal" : "cardinal");
387
412
  var category = pr.select(adjusted);
388
- caseBody = node.cases[category] || node.cases.other;
413
+ caseBody = _ownCase(node.cases, category) || _ownCase(node.cases, "other");
389
414
  }
390
415
  return _renderSequence(caseBody, vars, locale, adjusted, depth + 1);
391
416
  }
392
417
  if (node.type === "select") {
393
- var sv = vars[node.name];
418
+ var sv = _ownVar(vars, node.name);
394
419
  var key = (sv === undefined || sv === null) ? "other" : String(sv);
395
- var body = node.cases[key] || node.cases.other;
420
+ var body = _ownCase(node.cases, key) || _ownCase(node.cases, "other");
396
421
  return _renderSequence(body, vars, locale, hashContext, depth + 1);
397
422
  }
398
423
  return "";
@@ -250,12 +250,19 @@ function _validateRtlList(value) {
250
250
  if (!Array.isArray(value)) {
251
251
  throw _err("BAD_OPT", "i18n.create: rtlLanguages must be an array of language subtags");
252
252
  }
253
+ // dir() folds the requested locale's primary subtag to lower case before
254
+ // the membership test, so fold the configured list the same way. Language
255
+ // subtags are conventionally lower case but BCP 47 is case-insensitive;
256
+ // normalizing only the lookup side would silently drop RTL for an
257
+ // operator-supplied entry like "AR" or "CKB".
258
+ var normalized = [];
253
259
  for (var i = 0; i < value.length; i++) {
254
260
  if (typeof value[i] !== "string" || value[i].length === 0) {
255
261
  throw _err("BAD_OPT", "i18n.create: rtlLanguages[" + i + "] must be a non-empty string");
256
262
  }
263
+ normalized.push(value[i].toLowerCase());
257
264
  }
258
- return new Set(value);
265
+ return new Set(normalized);
259
266
  }
260
267
 
261
268
  // ---- Translation tree validation ----
@@ -575,15 +582,19 @@ function create(opts) {
575
582
  translations = {};
576
583
  }
577
584
  var onMissingKey = opts.onMissingKey || null;
578
- // Validate translation trees up-front so plural-shape errors surface
579
- // at boot, not at the first request that hits the broken key. Lazy
580
- // locales validate on first load.
581
- for (var li = 0; li < locales.length; li++) {
582
- var loc = locales[li];
585
+ // Validate translation trees up-front so plural-shape errors surface at
586
+ // boot, not at the first request that hits the broken key. Validate EVERY
587
+ // inline tree, not just the configured `locales`: a locale present in
588
+ // `translations` but absent from `locales` is still reachable via an explicit
589
+ // locale override, and the invariants the lookup relies on (notably
590
+ // _selectPlural assuming a mandatory `other`) must hold for it too — an
591
+ // unvalidated tree could otherwise make t() return undefined instead of the
592
+ // key. Lazy locales validate on first load.
593
+ Object.keys(translations).forEach(function (loc) {
583
594
  if (translations[loc]) {
584
595
  _validateTranslationTree(loc, translations[loc], "");
585
596
  }
586
- }
597
+ });
587
598
 
588
599
  function _ensureLocaleLoaded(locale) {
589
600
  if (loadedSet.has(locale)) return;
@@ -658,7 +669,14 @@ function create(opts) {
658
669
  _ensureLocaleLoaded(loc);
659
670
  if (!translations[loc]) continue;
660
671
  var v = _resolveKey(translations[loc], key);
661
- if (v !== undefined) {
672
+ if (v === undefined) continue;
673
+ // Only a renderable leaf is a hit: a string, or a plural-shaped
674
+ // object. A nested namespace object at this path is not a
675
+ // translation value — skip it and keep walking the fallback chain so
676
+ // a leaf defined in a less-specific parent or fallback locale still
677
+ // resolves, instead of the namespace shadowing it and the raw key
678
+ // leaking into the UI.
679
+ if (typeof v === "string" || _isPluralShape(v)) {
662
680
  return { value: v, foundIn: loc };
663
681
  }
664
682
  }
@@ -717,14 +735,12 @@ function create(opts) {
717
735
  var raw;
718
736
  if (typeof found.value === "string") {
719
737
  raw = found.value;
720
- } else if (_isPluralShape(found.value)) {
738
+ } else {
739
+ // Guaranteed plural-shaped: _lookupRaw only reports a hit for a
740
+ // renderable leaf (string or plural-shaped object), so a namespace
741
+ // object never reaches here — it is skipped during the chain walk.
721
742
  var count = (vars && typeof vars.count === "number") ? vars.count : 0;
722
743
  raw = _selectPlural(found.value, count, found.foundIn, callerOpts.ordinal === true);
723
- } else {
724
- // Operator stored a nested tree at this key but called t() against
725
- // the namespace. Return the key-path as a missing-key signal.
726
- _emitObs("i18n.missing", { locale: locale, key: key });
727
- return key;
728
744
  }
729
745
 
730
746
  // ICU MessageFormat path — when the operator opts in via
@@ -767,14 +783,12 @@ function create(opts) {
767
783
  callerOpts = callerOpts || {};
768
784
  if (typeof key !== "string" || key.length === 0) return false;
769
785
  var locale = _resolveLocale(callerOpts.locale);
770
- var found = _lookupRaw(key, locale);
771
- if (found === null) return false;
772
- // A nested namespace object (not plural-shaped) is NOT a resolvable
773
- // translation value has() should report false so callers can gate
786
+ // _lookupRaw only reports a hit for a renderable leaf (a string or a
787
+ // plural-shaped object); a nested namespace object is skipped during
788
+ // the chain walk. So has() correctly reports false for a namespace key
789
+ // yet true when a fallback locale supplies the leaf — callers can gate
774
790
  // "show this UI block only if translated" on leaf entries.
775
- if (typeof found.value === "string") return true;
776
- if (_isPluralShape(found.value)) return true;
777
- return false;
791
+ return _lookupRaw(key, locale) !== null;
778
792
  }
779
793
 
780
794
  function formatNumber(value, formatOpts, callerOpts) {
@@ -128,7 +128,14 @@ var REGIME_DEADLINES = Object.freeze({
128
128
  });
129
129
 
130
130
  function _resolveDeadlines(regime, override) {
131
- var base = (regime && REGIME_DEADLINES[regime]) || DEFAULT_DEADLINES;
131
+ // Own-key lookup only: `regime` is operator-supplied and free-form, so a
132
+ // value colliding with an Object.prototype member ("valueOf", "toString",
133
+ // "constructor", ...) must fall back to DEFAULT_DEADLINES, not resolve to the
134
+ // inherited prototype function (which would make every dueBy NaN and report a
135
+ // missed deadline as met). Unknown-but-benign regimes fall back the same way.
136
+ var base = (typeof regime === "string" &&
137
+ Object.prototype.hasOwnProperty.call(REGIME_DEADLINES, regime))
138
+ ? REGIME_DEADLINES[regime] : DEFAULT_DEADLINES;
132
139
  if (!override || typeof override !== "object") return base;
133
140
  return Object.freeze({
134
141
  initial: typeof override.initial === "number" ? override.initial : base.initial,
@@ -30,8 +30,12 @@ function expandIpv6Hex(ip) {
30
30
  // RFC 4291 §2.5.5.2 IPv4-mapped / dual-stack: accept ".d.d.d.d" tail.
31
31
  var dual = ip.match(/^(.*?):(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/); // allow:regex-no-length-cap — dotted-quad has fixed shape; LHS bounded by IPv6 group cap below
32
32
  if (dual) {
33
+ // The embedded IPv4 tail must be a strict RFC 791 dotted-quad. Reuse the
34
+ // canonical isIPv4 (rejects octets > 255 AND leading-zero / octal-ambiguous
35
+ // octets like "01") so this mapped-form parse doesn't diverge from net.isIP
36
+ // or from the standalone isIPv4 validator on the same dotted-quad.
37
+ if (!isIPv4(dual[2])) return null;
33
38
  var v4 = dual[2].split(".").map(Number);
34
- if (v4.some(function (o) { return !(o >= 0 && o <= 255); })) return null; // IPv4 octet range
35
39
  var hi = (v4[0] << 8) | v4[1]; // 16-bit group pack
36
40
  var lo = (v4[2] << 8) | v4[3]; // 16-bit group pack
37
41
  ip = dual[1] + ":" + hi.toString(16) + ":" + lo.toString(16);
@@ -43,6 +47,12 @@ function expandIpv6Hex(ip) {
43
47
  if (dblColon.length === 1 && leftGroups.length !== 8) return null; // RFC 4291 IPv6 group count
44
48
  var fillCount = 8 - leftGroups.length - rightGroups.length; // RFC 4291 IPv6 group count
45
49
  if (fillCount < 0) return null;
50
+ // RFC 4291 §2.2 — "::" abbreviates ONE OR MORE groups of all-zero 16-bit
51
+ // fields, so when a "::" is present it must insert at least one group. Eight
52
+ // explicit groups plus a "::" (e.g. 1:2:3:4:5:6:7:8:: or 1:2:3:4:5:6:7::8)
53
+ // compresses zero groups and is not valid IPv6 text; net.isIP rejects these,
54
+ // so reject them here too rather than diverge from the kernel/peer parser.
55
+ if (dblColon.length === 2 && fillCount === 0) return null;
46
56
  var fill = [];
47
57
  for (var f = 0; f < fillCount; f += 1) fill.push("0");
48
58
  var groups = leftGroups.concat(fill).concat(rightGroups);
@@ -623,12 +623,34 @@ function query(doc, path) {
623
623
  return _evalSegments(ast.segments, doc).map(function (n) { return n.value; });
624
624
  }
625
625
 
626
+ // RFC 9535 §2.7: a normalized-path name is single-quoted and MUST escape
627
+ // `'`, `\`, and every control code (%x0-1F) — the latter as the named
628
+ // short escape (\b \t \n \f \r) or \uXXXX. Emitting a raw control char
629
+ // produces a path that no longer round-trips through the parser (which
630
+ // rejects unescaped control characters in a string literal).
631
+ function _normalizeName(name) {
632
+ var out = "";
633
+ for (var i = 0; i < name.length; i++) {
634
+ var ch = name.charAt(i), cc = name.charCodeAt(i);
635
+ if (ch === "'") out += "\\'";
636
+ else if (ch === "\\") out += "\\\\";
637
+ else if (cc === 0x08) out += "\\b";
638
+ else if (cc === 0x09) out += "\\t";
639
+ else if (cc === 0x0a) out += "\\n";
640
+ else if (cc === 0x0c) out += "\\f";
641
+ else if (cc === 0x0d) out += "\\r";
642
+ else if (cc < 0x20) out += "\\u" + ("0000" + cc.toString(16)).slice(-4);
643
+ else out += ch;
644
+ }
645
+ return out;
646
+ }
647
+
626
648
  function _normalizedPath(tokens) {
627
649
  var out = "$";
628
650
  for (var i = 0; i < tokens.length; i++) {
629
651
  var t = tokens[i];
630
652
  if (typeof t === "number") out += "[" + t + "]";
631
- else out += "['" + String(t).replace(/\\/g, "\\\\").replace(/'/g, "\\'") + "']";
653
+ else out += "['" + _normalizeName(String(t)) + "']";
632
654
  }
633
655
  return out;
634
656
  }
@@ -58,8 +58,17 @@ function _requiredMembers(jwk) {
58
58
  if (typeof jwk.kty !== "string" || jwk.kty.length === 0) {
59
59
  throw new JwkError("jwk/bad-jwk", "jwk: 'kty' is required");
60
60
  }
61
+ // Own-property lookup only: `kty` is attacker-controlled, and a plain-object
62
+ // bracket read resolves inherited Object.prototype members (`__proto__`,
63
+ // `toString`, `valueOf`, `toLocaleString`, …). Those are truthy, so an
64
+ // unguarded `if (!names)` would treat them as supported key types — the
65
+ // zero-`length` prototype methods then iterate no required members and
66
+ // thumbprint the empty object, collapsing distinct inputs onto one
67
+ // predictable digest instead of the intended unsupported-kty refusal.
68
+ if (!Object.prototype.hasOwnProperty.call(REQUIRED, jwk.kty)) {
69
+ throw new JwkError("jwk/unsupported-kty", "jwk: unsupported kty '" + jwk.kty + "'");
70
+ }
61
71
  var names = REQUIRED[jwk.kty];
62
- if (!names) throw new JwkError("jwk/unsupported-kty", "jwk: unsupported kty '" + jwk.kty + "'");
63
72
  var out = {};
64
73
  for (var i = 0; i < names.length; i++) {
65
74
  var n = names[i];
@@ -115,8 +124,16 @@ function canonicalize(jwk) {
115
124
  */
116
125
  function thumbprint(jwk, opts) {
117
126
  opts = opts || {};
118
- var hash = HASHES[opts.hash || "sha256"];
119
- if (!hash) throw new JwkError("jwk/bad-hash", "jwk.thumbprint: hash must be sha256, sha384, or sha512");
127
+ // Own-property lookup only — `opts.hash` is caller-controlled; a bare
128
+ // bracket read of the HASHES table resolves inherited members (`toString`,
129
+ // `constructor`, …) to truthy functions that slip past `!hash` and reach
130
+ // createHash as a non-string, leaking a raw ERR_INVALID_ARG_TYPE instead of
131
+ // the typed jwk/bad-hash refusal the primitive documents.
132
+ var hashName = opts.hash || "sha256";
133
+ if (!Object.prototype.hasOwnProperty.call(HASHES, hashName)) {
134
+ throw new JwkError("jwk/bad-hash", "jwk.thumbprint: hash must be sha256, sha384, or sha512");
135
+ }
136
+ var hash = HASHES[hashName];
120
137
  var canon = canonicalize(jwk);
121
138
  return nodeCrypto.createHash(hash).update(canon, "utf8").digest("base64url");
122
139
  }
@@ -29,6 +29,7 @@
29
29
  * parameter never splits the list.
30
30
  */
31
31
 
32
+ var safeBuffer = require("./safe-buffer");
32
33
  var structuredFields = require("./structured-fields");
33
34
  var { defineClass } = require("./framework-error");
34
35
 
@@ -114,7 +115,7 @@ function parse(headerValue) {
114
115
  // common convention (RFC 8288 examples, REST pagination) quotes too.
115
116
  function _serParam(name, value) {
116
117
  if (value === "" || value === true) return name; // valueless parameter
117
- return name + "=\"" + String(value).replace(/\\/g, "\\\\").replace(/"/g, "\\\"") + "\"";
118
+ return name + "=" + safeBuffer.quoteString(value);
118
119
  }
119
120
 
120
121
  /**
@@ -40,6 +40,10 @@ var lazyRequire = require("./lazy-require");
40
40
  // scrub attribute values through the telemetry redactor before they cross the
41
41
  // OTLP egress boundary (CWE-532).
42
42
  var observability = lazyRequire(function () { return require("./observability"); });
43
+ // Lazy to match the observability cycle-break above. Scrubs secrets embedded in
44
+ // the free-text log body for a directly-wired sink (defense in depth — emit()
45
+ // already redacts, but a sink can be driven without it, same as meta/redactAttrs).
46
+ var redact = lazyRequire(function () { return require("./redact"); });
43
47
  // Lazy — network-tls is widely required; audit an insecure (cert-validation-
44
48
  // disabled) outbound TLS session at honor time, same surface as connectWithEch.
45
49
  var networkTls = lazyRequire(function () { return require("./network-tls"); });
@@ -148,7 +152,7 @@ function _encodeLogRecord(record) {
148
152
  var attrPieces = _encodeAttributes(observability().redactAttrs(record.meta)).map(function (kvBody) {
149
153
  return pb.embeddedMessage(6, kvBody);
150
154
  });
151
- var msg = (record.message != null ? String(record.message) : "");
155
+ var msg = (record.message != null ? redact().redactText(String(record.message)) : "");
152
156
  return Buffer.concat([
153
157
  pb.fixed64(1, tsNs),
154
158
  pb.uint32(2, sev.number),
@@ -65,6 +65,10 @@ var lazyRequire = require("./lazy-require");
65
65
  // log path can reach a log-stream sink). Used only to scrub attribute values
66
66
  // through the telemetry redactor before they cross the OTLP egress boundary.
67
67
  var observability = lazyRequire(function () { return require("./observability"); });
68
+ // Lazy to match the observability cycle-break above. Scrubs secrets embedded in
69
+ // the free-text log body for a directly-wired sink (defense in depth — emit()
70
+ // already redacts, but a sink can be driven without it, same as meta/redactAttrs).
71
+ var redact = lazyRequire(function () { return require("./redact"); });
68
72
 
69
73
  var MAX_RESPONSE_BYTES = C.BYTES.mib(1);
70
74
  var FRAMEWORK_VERSION = (pkg && pkg.version) || "unknown";
@@ -157,7 +161,7 @@ function _toLogRecord(record) {
157
161
  observedTimeUnixNano: nanos,
158
162
  severityNumber: sev.number,
159
163
  severityText: sev.text,
160
- body: { stringValue: record.message == null ? "" : String(record.message) },
164
+ body: { stringValue: record.message == null ? "" : redact().redactText(String(record.message)) },
161
165
  attributes: attrs,
162
166
  };
163
167
  }
@@ -210,11 +210,14 @@ function emit(level, message, meta) {
210
210
  if (LEVELS.indexOf(level) === -1) {
211
211
  throw _err("INVALID_LEVEL", "log level must be one of " + LEVELS.join(", "), true);
212
212
  }
213
- // Build the record. Redact metadata BEFORE distribution to any sink.
213
+ // Build the record. Redact BOTH the structured metadata AND the free-text
214
+ // message BEFORE distribution to any sink — a secret interpolated into the
215
+ // message string (a JWT, an AWS key, a URL password) must not reach a file /
216
+ // remote sink verbatim. redactText scrubs embedded fragments in place.
214
217
  var record = {
215
218
  ts: Date.now(),
216
219
  level: level,
217
- message: message == null ? null : String(message),
220
+ message: message == null ? null : redact.redactText(String(message)),
218
221
  };
219
222
  if (meta) {
220
223
  record.meta = redact.redact(meta);
@@ -539,7 +542,9 @@ function bootFromEnv(opts) {
539
542
  sink.logGroupName = env.BLAMEJS_LOG_STREAM_CLOUDWATCH_LOG_GROUP;
540
543
  sink.logStreamName = env.BLAMEJS_LOG_STREAM_CLOUDWATCH_LOG_STREAM;
541
544
  } else if (proto === "local") {
542
- sink.path = env.BLAMEJS_LOG_STREAM_PATH;
545
+ // The local sink is directory-based (writes <dir>/<prefix>.log);
546
+ // BLAMEJS_LOG_STREAM_PATH names that directory and maps to `dir`.
547
+ sink.dir = env.BLAMEJS_LOG_STREAM_PATH;
543
548
  } else {
544
549
  throw _err("BAD_OPT",
545
550
  "BLAMEJS_LOG_STREAM_PROTOCOL='" + proto + "' is not one of " +