@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
@@ -46,6 +46,77 @@ function _rsaPair() {
46
46
  });
47
47
  }
48
48
 
49
+ // ---- shared fixtures for the branch/error coverage below ----
50
+
51
+ // One RSA keypair reused across the RS256 mint/verify branch tests — RSA
52
+ // generation is the slow step and none of the branches under test depend
53
+ // on key uniqueness.
54
+ var _sharedRsaKp = null;
55
+ function _rsaKp() {
56
+ if (!_sharedRsaKp) {
57
+ _sharedRsaKp = nodeCrypto.generateKeyPairSync("rsa", { modulusLength: 2048 }); // allow:raw-byte-literal — RSA modulus bits
58
+ }
59
+ return _sharedRsaKp;
60
+ }
61
+
62
+ // Public JWK for the shared RSA key, optionally tagged with a kid.
63
+ function _rsaPubJwk(kid) {
64
+ var jwk = _rsaKp().publicKey.export({ format: "jwk" });
65
+ if (kid) jwk.kid = kid;
66
+ return jwk;
67
+ }
68
+
69
+ // Public EC JWK on a named curve, optionally tagged with a kid.
70
+ function _ecJwk(curve, kid) {
71
+ var kp = nodeCrypto.generateKeyPairSync("ec", { namedCurve: curve });
72
+ var jwk = kp.publicKey.export({ format: "jwk" });
73
+ if (kid) jwk.kid = kid;
74
+ return jwk;
75
+ }
76
+
77
+ // Mint a valid RS256 JWS over `claims` with the shared RSA key via the real
78
+ // signer (b.auth.jws.sign derives RS256 from the RSA key type).
79
+ function _mintRs256(claims, kid) {
80
+ var opts = { privateKey: _rsaKp().privateKey };
81
+ if (kid) opts.kid = kid;
82
+ return b.auth.jws.sign(claims, opts);
83
+ }
84
+
85
+ // An unsigned 3-part token — the signature segment is a placeholder for
86
+ // branches that fail BEFORE signature verification (alg / kid / kty / decode
87
+ // gates), so the signature bytes are never inspected.
88
+ function _unsigned(header, payload) {
89
+ return _b64url(JSON.stringify(header)) + "." +
90
+ _b64url(JSON.stringify(payload)) + "." + _b64url("sig");
91
+ }
92
+
93
+ // Wrap a fixed value in a keyResolver (keeps the closure out of a loop body).
94
+ function _constResolver(v) { return function () { return v; }; }
95
+
96
+ // Seconds-since-epoch anchor for building exp / nbf / iat claims.
97
+ var _nowSec = Math.floor(Date.now() / 1000); // allow:raw-byte-literal — seconds-per-ms
98
+
99
+ // Assert verifyExternal rejects `token` under `opts` with a code matching `re`.
100
+ async function _expectCode(label, token, opts, re) {
101
+ var threw = null;
102
+ try { await b.auth.jwt.verifyExternal(token, opts); }
103
+ catch (e) { threw = e; }
104
+ check(label, threw && re.test(threw.code || ""));
105
+ }
106
+
107
+ // Assert jws.sign rejects `claims`/`opts` with a code matching `re`.
108
+ function _expectSignCode(label, claims, opts, re) {
109
+ var threw = null;
110
+ try { b.auth.jws.sign(claims, opts); }
111
+ catch (e) { threw = e; }
112
+ check(label, threw && re.test(threw.code || ""));
113
+ }
114
+
115
+ // Read the protected-header `alg` from a compact JWS.
116
+ function _hdrAlg(jws) {
117
+ return JSON.parse(Buffer.from(jws.split(".")[0], "base64url").toString("utf8")).alg;
118
+ }
119
+
49
120
  function testSurface() {
50
121
  check("auth.jwt.verifyExternal exposed",
51
122
  typeof b.auth.jwt.verifyExternal === "function");
@@ -239,6 +310,203 @@ async function testJwsSignB64CritRefused() {
239
310
  e3 && /sign-unsupported-header/.test(e3.code || ""));
240
311
  }
241
312
 
313
+ // ---- verifyExternal: token pre-flight rejections ----
314
+ // Everything refused before key resolution: bad token type/size, an
315
+ // operator alg outside the supported set, a JWE on the JWS verifier, a
316
+ // non-3-segment token, an undecodable header, a header missing alg, a crit
317
+ // header, and a token alg absent from the operator's allowed list.
318
+ async function testTokenPreflight() {
319
+ var jwk = _rsaPubJwk("k1");
320
+ await _expectCode("empty token → no-token",
321
+ "", { algorithms: ["RS256"], jwks: [jwk] }, /no-token/);
322
+ var threw = null;
323
+ try { await b.auth.jwt.verifyExternal(12345, { algorithms: ["RS256"], jwks: [jwk] }); }
324
+ catch (e) { threw = e; }
325
+ check("non-string token → no-token", threw && /no-token/.test(threw.code || ""));
326
+ await _expectCode("oversized token → token-too-large",
327
+ "a".repeat(17000), { algorithms: ["RS256"], jwks: [jwk] }, /token-too-large/); // allow:raw-byte-literal — exceeds 16 KiB token cap
328
+ await _expectCode("operator lists an unsupported alg → unsupported-alg",
329
+ "a.b.c", { algorithms: ["RS999"], jwks: [jwk] }, /unsupported-alg/);
330
+ await _expectCode("5-segment JWE token → jwe-refused",
331
+ "a.b.c.d.e", { algorithms: ["RS256"], jwks: [jwk] }, /jwe-refused/);
332
+ await _expectCode("2-segment token → malformed-jwt",
333
+ "a.b", { algorithms: ["RS256"], jwks: [jwk] }, /malformed-jwt/);
334
+ await _expectCode("header decodes to non-JSON → malformed-jwt",
335
+ _b64url("not json") + "." + _b64url("{}") + "." + _b64url("sig"),
336
+ { algorithms: ["RS256"], jwks: [jwk] }, /malformed-jwt/);
337
+ await _expectCode("header missing alg → malformed-jwt",
338
+ _unsigned({ typ: "JWT" }, { exp: _nowSec + 300 }), // allow:raw-byte-literal — 5min
339
+ { algorithms: ["RS256"], jwks: [jwk] }, /malformed-jwt/);
340
+ await _expectCode("crit header → unknown-crit",
341
+ _unsigned({ alg: "RS256", kid: "k1", crit: ["exp"] }, { exp: _nowSec + 300 }), // allow:raw-byte-literal — 5min
342
+ { algorithms: ["RS256"], jwks: [jwk] }, /unknown-crit/);
343
+ await _expectCode("token alg supported but not in allowed list → alg-not-allowed",
344
+ _unsigned({ alg: "RS384", kid: "k1" }, { exp: _nowSec + 300 }), // allow:raw-byte-literal — 5min
345
+ { algorithms: ["RS256"], jwks: [jwk] }, /alg-not-allowed/);
346
+ }
347
+
348
+ // ---- verifyExternal: JWKS kid resolution ----
349
+ // Empty JWKS, no-matching-kid, and the kid-less refusal (default) vs the
350
+ // allowKidlessJwks opt-in that accepts a lone-key JWKS.
351
+ async function testKidResolution() {
352
+ var jwkK1 = _rsaPubJwk("k1");
353
+ await _expectCode("empty JWKS array → no-jwks-keys",
354
+ _unsigned({ alg: "RS256", kid: "k1" }, { exp: _nowSec + 300 }), // allow:raw-byte-literal — 5min
355
+ { algorithms: ["RS256"], jwks: [] }, /no-jwks-keys/);
356
+ await _expectCode("kid with no matching JWKS key → no-matching-kid",
357
+ _unsigned({ alg: "RS256", kid: "absent" }, { exp: _nowSec + 300 }), // allow:raw-byte-literal — 5min
358
+ { algorithms: ["RS256"], jwks: [jwkK1] }, /no-matching-kid/);
359
+ await _expectCode("kid-less token, multi-key JWKS → kid-required",
360
+ _unsigned({ alg: "RS256" }, { exp: _nowSec + 300 }), // allow:raw-byte-literal — 5min
361
+ { algorithms: ["RS256"], jwks: [jwkK1, _rsaPubJwk("k2")] }, /kid-required/);
362
+ await _expectCode("kid-less token, single-key JWKS, no opt-in → kid-required",
363
+ _unsigned({ alg: "RS256" }, { exp: _nowSec + 300 }), // allow:raw-byte-literal — 5min
364
+ { algorithms: ["RS256"], jwks: [_rsaPubJwk()] }, /kid-required/);
365
+ var rv = await b.auth.jwt.verifyExternal(
366
+ _mintRs256({ sub: "u1", exp: _nowSec + 300 }), // allow:raw-byte-literal — 5min
367
+ { algorithms: ["RS256"], jwks: [_rsaPubJwk()], allowKidlessJwks: true });
368
+ check("kid-less single-key JWKS + allowKidlessJwks → verifies", rv.claims.sub === "u1");
369
+ }
370
+
371
+ // ---- verifyExternal: CVE-2026-22817 alg↔kty/crv cross-check ----
372
+ // The resolved JWK's key type must match the header alg BEFORE it is handed
373
+ // to node:crypto: a missing kty, an RSA alg over an EC key, and an ES256 alg
374
+ // over a P-384 key are each refused.
375
+ async function testAlgKtyCrossCheck() {
376
+ await _expectCode("resolved JWK without kty → bad-jwk",
377
+ _unsigned({ alg: "RS256", kid: "k1" }, { exp: _nowSec + 300 }), // allow:raw-byte-literal — 5min
378
+ { algorithms: ["RS256"], jwks: [{ kid: "k1" }] }, /bad-jwk/);
379
+ await _expectCode("alg RS256 over an EC JWK → alg-kty-mismatch",
380
+ _unsigned({ alg: "RS256", kid: "k1" }, { exp: _nowSec + 300 }), // allow:raw-byte-literal — 5min
381
+ { algorithms: ["RS256"], jwks: [_ecJwk("P-256", "k1")] }, /alg-kty-mismatch/);
382
+ await _expectCode("alg ES256 over a P-384 JWK → alg-crv-mismatch",
383
+ _unsigned({ alg: "ES256", kid: "k1" }, { exp: _nowSec + 300 }), // allow:raw-byte-literal — 5min
384
+ { algorithms: ["ES256"], jwks: [_ecJwk("P-384", "k1")] }, /alg-crv-mismatch/);
385
+ }
386
+
387
+ // ---- verifyExternal: signature rejection ----
388
+ // A byte-flipped signature over an otherwise-valid RS256 token fails
389
+ // verification.
390
+ async function testSignatureVerification() {
391
+ var token = _mintRs256({ sub: "u1", exp: _nowSec + 300 }, "k1"); // allow:raw-byte-literal — 5min
392
+ var parts = token.split(".");
393
+ // Invert the first signature byte — a leading byte carries meaningful
394
+ // bits (unlike a trailing base64url char, whose low bits are padding and
395
+ // can round-trip unchanged), so the tamper is deterministic.
396
+ var sigBuf = Buffer.from(parts[2], "base64url");
397
+ sigBuf[0] = sigBuf[0] ^ 0xff;
398
+ var tampered = parts[0] + "." + parts[1] + "." + _b64url(sigBuf);
399
+ await _expectCode("tampered signature → invalid-signature",
400
+ tampered, { algorithms: ["RS256"], jwks: [_rsaPubJwk("k1")] }, /invalid-signature/);
401
+ }
402
+
403
+ // ---- verifyExternal: claim validation ----
404
+ // exp/nbf/iat time gates, the iss cross-realm refusal (including the
405
+ // array-iss CVE-2025-30144 shape and a missing iss), the sub-equality check,
406
+ // and the clockSkewMs handling — a finite skew tolerates a just-expired
407
+ // token while Infinity is refused rather than silently disabling expiry.
408
+ async function testClaimValidation() {
409
+ var jwk = _rsaPubJwk("k1");
410
+ await _expectCode("missing exp claim → missing-exp",
411
+ _mintRs256({ sub: "u1" }, "k1"),
412
+ { algorithms: ["RS256"], jwks: [jwk] }, /missing-exp/);
413
+ await _expectCode("nbf in the future → nbf-future",
414
+ _mintRs256({ sub: "u1", exp: _nowSec + 7200, nbf: _nowSec + 3600 }, "k1"), // allow:raw-byte-literal — 2h/1h in seconds
415
+ { algorithms: ["RS256"], jwks: [jwk], now: Date.now() }, /nbf-future/);
416
+ await _expectCode("iat in the future → iat-future",
417
+ _mintRs256({ sub: "u1", exp: _nowSec + 7200, iat: _nowSec + 3600 }, "k1"), // allow:raw-byte-literal — 2h/1h in seconds
418
+ { algorithms: ["RS256"], jwks: [jwk] }, /iat-future/);
419
+ await _expectCode("issuer mismatch → iss-mismatch",
420
+ _mintRs256({ sub: "u1", exp: _nowSec + 3600, iss: "https://evil.example" }, "k1"), // allow:raw-byte-literal — 1h
421
+ { algorithms: ["RS256"], jwks: [jwk], issuer: "https://idp.example.com" }, /iss-mismatch/);
422
+ await _expectCode("array-valued iss refused → iss-mismatch",
423
+ _mintRs256({ sub: "u1", exp: _nowSec + 3600, iss: ["https://idp.example.com", "x"] }, "k1"), // allow:raw-byte-literal — 1h
424
+ { algorithms: ["RS256"], jwks: [jwk], issuer: "https://idp.example.com" }, /iss-mismatch/);
425
+ await _expectCode("missing iss when issuer expected → iss-mismatch",
426
+ _mintRs256({ sub: "u1", exp: _nowSec + 3600 }, "k1"), // allow:raw-byte-literal — 1h
427
+ { algorithms: ["RS256"], jwks: [jwk], issuer: "https://idp.example.com" }, /iss-mismatch/);
428
+ await _expectCode("subject mismatch → sub-mismatch",
429
+ _mintRs256({ sub: "u1", exp: _nowSec + 3600 }, "k1"), // allow:raw-byte-literal — 1h
430
+ { algorithms: ["RS256"], jwks: [jwk], subject: "someone-else" }, /sub-mismatch/);
431
+ var tolerated = await b.auth.jwt.verifyExternal(
432
+ _mintRs256({ sub: "u1", exp: _nowSec - 10 }, "k1"), // allow:raw-byte-literal — 10s past
433
+ { algorithms: ["RS256"], jwks: [jwk], clockSkewMs: 60000 }); // allow:raw-byte-literal — 60s skew in ms
434
+ check("finite clockSkewMs tolerates a just-expired token", tolerated.claims.sub === "u1");
435
+ await _expectCode("Infinity clockSkewMs refused (cannot disable expiry) → bad-clock-skew",
436
+ _mintRs256({ sub: "u1", exp: _nowSec - 3600 }, "k1"), // allow:raw-byte-literal — 1h past
437
+ { algorithms: ["RS256"], jwks: [jwk], clockSkewMs: Infinity }, /bad-clock-skew/);
438
+ }
439
+
440
+ // ---- verifyExternal: keyResolver value shapes ----
441
+ // A keyResolver may return a KeyObject, a public JWK, a PEM string, or a PEM
442
+ // Buffer — each imports and verifies. (PEM / KeyObject / Buffer carry no kty
443
+ // surface so the alg↔kty cross-check applies to the JWK shape only.)
444
+ async function testKeyResolverShapes() {
445
+ var kp = _rsaKp();
446
+ var pubPem = kp.publicKey.export({ type: "spki", format: "pem" });
447
+ var token = _mintRs256({ sub: "u1", exp: _nowSec + 300 }, "k1"); // allow:raw-byte-literal — 5min
448
+ var shapes = [
449
+ { name: "KeyObject", val: kp.publicKey },
450
+ { name: "public JWK", val: kp.publicKey.export({ format: "jwk" }) },
451
+ { name: "PEM string", val: pubPem },
452
+ { name: "PEM Buffer", val: Buffer.from(pubPem) },
453
+ ];
454
+ for (var i = 0; i < shapes.length; i++) {
455
+ var rv = await b.auth.jwt.verifyExternal(token, {
456
+ algorithms: ["RS256"],
457
+ keyResolver: _constResolver(shapes[i].val),
458
+ });
459
+ check("keyResolver returns " + shapes[i].name + " → verifies", rv.claims.sub === "u1");
460
+ }
461
+ }
462
+
463
+ // ---- verifyExternal: keyResolver rejections ----
464
+ async function testKeyResolverRejections() {
465
+ var token = _unsigned({ alg: "RS256" }, { exp: _nowSec + 300 }); // allow:raw-byte-literal — 5min
466
+ await _expectCode("keyResolver returns null → no-key",
467
+ token, { algorithms: ["RS256"], keyResolver: _constResolver(null) }, /no-key/);
468
+ await _expectCode("keyResolver returns a non-key value → bad-key-shape",
469
+ token, { algorithms: ["RS256"], keyResolver: _constResolver(42) }, /bad-key-shape/);
470
+ await _expectCode("keyResolver throws → key-resolver-failed",
471
+ token, { algorithms: ["RS256"], keyResolver: function () { throw new Error("boom"); } },
472
+ /key-resolver-failed/);
473
+ await _expectCode("keyResolver returns unparseable PEM string → bad-pem",
474
+ token, { algorithms: ["RS256"], keyResolver: _constResolver("not-a-pem") }, /bad-pem/);
475
+ await _expectCode("keyResolver returns unparseable PEM Buffer → bad-pem",
476
+ token, { algorithms: ["RS256"], keyResolver: _constResolver(Buffer.from("not-a-pem")) },
477
+ /bad-pem/);
478
+ }
479
+
480
+ // ---- jws.sign: key import + alg-derivation branches ----
481
+ // The private-key importer (missing / unparseable / non-key / JWK) and the
482
+ // alg resolver (default-from-key for rsa-pss, unsupported EC curve, non-JWS
483
+ // key type, an explicit non-classical alg, and an explicit compatible alg).
484
+ async function testJwsSignKeyImport() {
485
+ _expectSignCode("jws.sign: missing privateKey → sign-no-key",
486
+ { sub: "u" }, {}, /sign-no-key/);
487
+ _expectSignCode("jws.sign: unparseable PEM key → sign-bad-key",
488
+ { sub: "u" }, { privateKey: "not-a-pem" }, /sign-bad-key/);
489
+ _expectSignCode("jws.sign: non-key value → sign-bad-key",
490
+ { sub: "u" }, { privateKey: 12345 }, /sign-bad-key/);
491
+ var ec = nodeCrypto.generateKeyPairSync("ec", { namedCurve: "P-256" });
492
+ check("jws.sign: private JWK accepted, derives ES256",
493
+ _hdrAlg(b.auth.jws.sign({ sub: "u" }, { privateKey: ec.privateKey.export({ format: "jwk" }) })) === "ES256");
494
+ _expectSignCode("jws.sign: EC secp256k1 has no JWS alg → sign-key-unsupported",
495
+ { sub: "u" },
496
+ { privateKey: nodeCrypto.generateKeyPairSync("ec", { namedCurve: "secp256k1" }).privateKey },
497
+ /sign-key-unsupported/);
498
+ var pss = nodeCrypto.generateKeyPairSync("rsa-pss", { modulusLength: 2048 }); // allow:raw-byte-literal — RSA modulus bits
499
+ check("jws.sign: rsa-pss key defaults to PS256",
500
+ _hdrAlg(b.auth.jws.sign({ sub: "u" }, { privateKey: pss.privateKey })) === "PS256");
501
+ _expectSignCode("jws.sign: x25519 (non-signing) key → sign-key-unsupported",
502
+ { sub: "u" }, { privateKey: nodeCrypto.generateKeyPairSync("x25519").privateKey },
503
+ /sign-key-unsupported/);
504
+ _expectSignCode("jws.sign: explicit non-classical alg → sign-alg-unsupported",
505
+ { sub: "u" }, { privateKey: _rsaKp().privateKey, alg: "ML-DSA-65" }, /sign-alg-unsupported/);
506
+ check("jws.sign: explicit compatible alg RS512 honored",
507
+ _hdrAlg(b.auth.jws.sign({ sub: "u" }, { privateKey: _rsaKp().privateKey, alg: "RS512" })) === "RS512");
508
+ }
509
+
242
510
  async function run() {
243
511
  testSurface();
244
512
  await testAlgorithmsRequired();
@@ -253,6 +521,14 @@ async function run() {
253
521
  await testJwsSignRefusals();
254
522
  await testJwsSignHeaderCannotOverrideAlg();
255
523
  await testJwsSignB64CritRefused();
524
+ await testTokenPreflight();
525
+ await testKidResolution();
526
+ await testAlgKtyCrossCheck();
527
+ await testSignatureVerification();
528
+ await testClaimValidation();
529
+ await testKeyResolverShapes();
530
+ await testKeyResolverRejections();
531
+ await testJwsSignKeyImport();
256
532
  }
257
533
 
258
534
  module.exports = { run: run };
@@ -0,0 +1,241 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (c) blamejs contributors
3
+ "use strict";
4
+ /**
5
+ * b.logStream — dispatcher introspection (listSinks), the debug level
6
+ * wrapper, and env-driven boot (bootFromEnv).
7
+ *
8
+ * Run standalone: `node test/layer-0-primitives/log-stream.test.js`
9
+ * Or via smoke: `node test/smoke.js`
10
+ */
11
+
12
+ var helpers = require("../helpers");
13
+ var b = helpers.b;
14
+ var check = helpers.check;
15
+ var fs = helpers.fs;
16
+ var os = helpers.os;
17
+ var path = helpers.path;
18
+
19
+ var OTLP_URL = "https://collector.example.com:4318/v1/logs";
20
+
21
+ function _resetLogStream() { b.logStream._resetForTest(); }
22
+ function _mkTmp() { return fs.mkdtempSync(path.join(os.tmpdir(), "blamejs-logstream-")); }
23
+ function _rmTmp(dir) { try { fs.rmSync(dir, { recursive: true, force: true }); } catch (_e) { /* best effort */ } }
24
+
25
+ // ---- listSinks ----
26
+
27
+ function testListSinksEmptyBeforeInit() {
28
+ _resetLogStream();
29
+ var snap = b.logStream.listSinks();
30
+ check("logStream.listSinks: returns [] before init (health endpoints call it unconditionally)",
31
+ Array.isArray(snap) && snap.length === 0);
32
+ }
33
+
34
+ async function testListSinksReportsConfiguredSinks() {
35
+ _resetLogStream();
36
+ var dir = _mkTmp();
37
+ try {
38
+ b.logStream.init({
39
+ minLevel: "info",
40
+ sinks: {
41
+ file: { protocol: "local", dir: dir },
42
+ remote: { protocol: "otlp", url: OTLP_URL, serviceName: "checkout" },
43
+ },
44
+ });
45
+ var snap = b.logStream.listSinks();
46
+ check("listSinks: one descriptor per configured sink", snap.length === 2);
47
+ var byName = {};
48
+ snap.forEach(function (d) { byName[d.name] = d; });
49
+ check("listSinks: descriptor carries name + protocol (local)",
50
+ byName.file && byName.file.protocol === "local");
51
+ check("listSinks: a sink without a stats() method reports stats: null",
52
+ byName.file.stats === null);
53
+ check("listSinks: descriptor carries name + protocol (otlp)",
54
+ byName.remote && byName.remote.protocol === "otlp");
55
+ check("listSinks: a sink exposing stats() reports through it",
56
+ byName.remote.stats && typeof byName.remote.stats === "object" &&
57
+ byName.remote.stats.url === OTLP_URL);
58
+ } finally {
59
+ await b.logStream.shutdown();
60
+ _resetLogStream();
61
+ _rmTmp(dir);
62
+ }
63
+ }
64
+
65
+ // ---- debug ----
66
+
67
+ async function testDebugEmitsWhenMinLevelDebug() {
68
+ _resetLogStream();
69
+ var dir = _mkTmp();
70
+ try {
71
+ b.logStream.init({ minLevel: "debug", sinks: { file: { protocol: "local", dir: dir } } });
72
+ b.logStream.debug("cache lookup", { shard: 3, hit: false });
73
+ await b.logStream.shutdown(); // drains in-flight fire-and-forget emits before close
74
+ var body = fs.readFileSync(path.join(dir, "blamejs.log"), "utf8");
75
+ var rows = body.trim().split("\n").filter(Boolean).map(function (l) { return JSON.parse(l); });
76
+ check("logStream.debug: record reaches the sink at minLevel debug", rows.length === 1);
77
+ check("logStream.debug: record level is 'debug'", rows[0].level === "debug");
78
+ check("logStream.debug: message preserved", rows[0].message === "cache lookup");
79
+ check("logStream.debug: non-sensitive meta preserved through redaction", rows[0].meta.shard === 3);
80
+ } finally {
81
+ _resetLogStream();
82
+ _rmTmp(dir);
83
+ }
84
+ }
85
+
86
+ async function testDebugDroppedBelowDefaultMinLevel() {
87
+ _resetLogStream();
88
+ var dir = _mkTmp();
89
+ try {
90
+ // Default minLevel is "info" — debug records drop before the sink.
91
+ b.logStream.init({ sinks: { file: { protocol: "local", dir: dir } } });
92
+ b.logStream.debug("debug-should-drop", { shard: 1 });
93
+ b.logStream.info("info-should-keep", { shard: 2 });
94
+ await b.logStream.shutdown();
95
+ var body = fs.readFileSync(path.join(dir, "blamejs.log"), "utf8");
96
+ check("logStream.debug: dropped below default minLevel (never written)",
97
+ body.indexOf("debug-should-drop") === -1);
98
+ check("logStream.debug: sibling info at/above minLevel is written",
99
+ body.indexOf("info-should-keep") !== -1);
100
+ } finally {
101
+ _resetLogStream();
102
+ _rmTmp(dir);
103
+ }
104
+ }
105
+
106
+ // ---- bootFromEnv ----
107
+
108
+ function testBootFromEnvSkipsWhenProtocolUnset() {
109
+ _resetLogStream();
110
+ var wired = b.logStream.bootFromEnv({ env: {} });
111
+ check("logStream.bootFromEnv: returns false when BLAMEJS_LOG_STREAM_PROTOCOL unset", wired === false);
112
+ check("logStream.bootFromEnv: no sink wired on skip", b.logStream.listSinks().length === 0);
113
+ _resetLogStream();
114
+ }
115
+
116
+ async function testBootFromEnvWiresSinkFromProcessEnv() {
117
+ _resetLogStream();
118
+ // Exercise the default process.env branch (no opts.env). Snapshot the
119
+ // exact keys touched and restore them in finally so the test leaks no env.
120
+ var KEYS = [
121
+ "BLAMEJS_LOG_STREAM_PROTOCOL",
122
+ "BLAMEJS_LOG_STREAM_URL",
123
+ "BLAMEJS_LOG_STREAM_SERVICE_NAME",
124
+ "BLAMEJS_LOG_STREAM_MIN_LEVEL",
125
+ ];
126
+ var saved = {};
127
+ KEYS.forEach(function (k) { saved[k] = process.env[k]; });
128
+ try {
129
+ process.env.BLAMEJS_LOG_STREAM_PROTOCOL = "otlp";
130
+ process.env.BLAMEJS_LOG_STREAM_URL = OTLP_URL;
131
+ process.env.BLAMEJS_LOG_STREAM_SERVICE_NAME = "checkout";
132
+ process.env.BLAMEJS_LOG_STREAM_MIN_LEVEL = "info";
133
+
134
+ var wired = b.logStream.bootFromEnv(); // reads process.env
135
+ check("bootFromEnv: returns true when protocol set", wired === true);
136
+ var snap = b.logStream.listSinks();
137
+ check("bootFromEnv: wires exactly one sink named 'primary'",
138
+ snap.length === 1 && snap[0].name === "primary");
139
+ check("bootFromEnv: sink protocol matches env", snap[0].protocol === "otlp");
140
+ check("bootFromEnv: otlp sink carries the configured URL",
141
+ snap[0].stats && snap[0].stats.url === OTLP_URL);
142
+ } finally {
143
+ await b.logStream.shutdown();
144
+ KEYS.forEach(function (k) {
145
+ if (saved[k] === undefined) delete process.env[k];
146
+ else process.env[k] = saved[k];
147
+ });
148
+ _resetLogStream();
149
+ }
150
+ }
151
+
152
+ async function testBootFromEnvWiresLocalSinkEndToEnd() {
153
+ _resetLogStream();
154
+ var dir = _mkTmp();
155
+ try {
156
+ // The local sink is directory-based; BLAMEJS_LOG_STREAM_PATH names that
157
+ // directory. bootFromEnv must map it to the sink's `dir` config so the
158
+ // documented `local` protocol actually wires (not throw at init).
159
+ var wired = b.logStream.bootFromEnv({
160
+ env: {
161
+ BLAMEJS_LOG_STREAM_PROTOCOL: "local",
162
+ BLAMEJS_LOG_STREAM_PATH: dir,
163
+ BLAMEJS_LOG_STREAM_MIN_LEVEL: "debug",
164
+ },
165
+ });
166
+ check("bootFromEnv: local protocol wires a sink from BLAMEJS_LOG_STREAM_PATH", wired === true);
167
+ var snap = b.logStream.listSinks();
168
+ check("bootFromEnv: local sink registered", snap.length === 1 && snap[0].protocol === "local");
169
+
170
+ b.logStream.info("boot-from-env-local", { shard: 7 });
171
+ await b.logStream.shutdown();
172
+ var body = fs.readFileSync(path.join(dir, "blamejs.log"), "utf8");
173
+ check("bootFromEnv: the env-wired local sink actually wrote the record",
174
+ body.indexOf("boot-from-env-local") !== -1);
175
+ } finally {
176
+ _resetLogStream();
177
+ _rmTmp(dir);
178
+ }
179
+ }
180
+
181
+ function testBootFromEnvThrowsUnknownProtocol() {
182
+ _resetLogStream();
183
+ var threw = null;
184
+ try { b.logStream.bootFromEnv({ env: { BLAMEJS_LOG_STREAM_PROTOCOL: "kafka" } }); }
185
+ catch (e) { threw = e; }
186
+ check("bootFromEnv: unknown protocol throws a loud boot error",
187
+ threw && /not one of/.test(threw.message));
188
+ _resetLogStream();
189
+ }
190
+
191
+ // #493 — emit() must redact secrets embedded in the free-text `message`, not
192
+ // just structured `meta`. And it must scrub an EMBEDDED token in a longer
193
+ // string (the built-in ^…$-anchored value detectors miss those) while keeping
194
+ // the surrounding message.
195
+ async function testMessageRedactionScrubsEmbeddedSecrets() {
196
+ _resetLogStream();
197
+ var dir = _mkTmp();
198
+ try {
199
+ b.logStream.init({ sinks: { file: { protocol: "local", dir: dir } } });
200
+ // Direct coverage of the primitive (in addition to the via-emit path below).
201
+ check("redact.redactText scrubs an embedded AWS key, keeps surrounding text",
202
+ b.redact.redactText("k=AKIAIOSFODNN7EXAMPLE done").indexOf("AKIAIOSFODNN7EXAMPLE") === -1 &&
203
+ b.redact.redactText("k=AKIAIOSFODNN7EXAMPLE done").indexOf("done") !== -1);
204
+ b.logStream.error("eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJib2IifQ.c2lnbmF0dXJl"); // bare JWT
205
+ b.logStream.warn("checkout retry with token=AKIAIOSFODNN7EXAMPLE for order 42"); // embedded AWS key
206
+ b.logStream.info("db connect postgres://app:s3cr3tPASS@db.internal:5432/app"); // URL-embedded password
207
+ await b.logStream.shutdown();
208
+ var body = fs.readFileSync(path.join(dir, "blamejs.log"), "utf8");
209
+ check("logStream: a JWT in the message is redacted",
210
+ body.indexOf("eyJhbGciOiJIUzI1NiJ9") === -1);
211
+ check("logStream: an embedded AWS key is redacted while surrounding text is kept",
212
+ body.indexOf("AKIAIOSFODNN7EXAMPLE") === -1 &&
213
+ body.indexOf("checkout retry") !== -1 && body.indexOf("order 42") !== -1);
214
+ check("logStream: a URL-embedded password is redacted while the rest is kept",
215
+ body.indexOf("s3cr3tPASS") === -1 && body.indexOf("db connect") !== -1);
216
+ } finally {
217
+ _resetLogStream();
218
+ _rmTmp(dir);
219
+ }
220
+ }
221
+
222
+ async function run() {
223
+ testListSinksEmptyBeforeInit();
224
+ await testListSinksReportsConfiguredSinks();
225
+ await testDebugEmitsWhenMinLevelDebug();
226
+ await testDebugDroppedBelowDefaultMinLevel();
227
+ testBootFromEnvSkipsWhenProtocolUnset();
228
+ await testBootFromEnvWiresSinkFromProcessEnv();
229
+ await testBootFromEnvWiresLocalSinkEndToEnd();
230
+ testBootFromEnvThrowsUnknownProtocol();
231
+ await testMessageRedactionScrubsEmbeddedSecrets();
232
+ }
233
+
234
+ module.exports = { run: run };
235
+
236
+ if (require.main === module) {
237
+ run().then(
238
+ function () { console.log("log-stream tests passed"); process.exit(0); },
239
+ function (e) { console.error(e); process.exit(1); }
240
+ );
241
+ }
@@ -0,0 +1,106 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (c) blamejs contributors
3
+ "use strict";
4
+ /**
5
+ * b.log.makeViaOrFallback — operator-log routing closure that falls
6
+ * back to a per-module logger when the operator didn't pass one.
7
+ *
8
+ * Run standalone: `node test/layer-0-primitives/log.test.js`
9
+ * Or via smoke: `node test/smoke.js`
10
+ */
11
+
12
+ var helpers = require("../helpers");
13
+ var b = helpers.b;
14
+ var check = helpers.check;
15
+
16
+ // A recording fallback logger with the boot()-shape surface
17
+ // (info/warn/error take a single pre-formatted line).
18
+ function _recordingFallback() {
19
+ var lines = [];
20
+ return {
21
+ lines: lines,
22
+ info: function (line) { lines.push(["info", line]); },
23
+ warn: function (line) { lines.push(["warn", line]); },
24
+ error: function (line) { lines.push(["error", line]); },
25
+ };
26
+ }
27
+
28
+ function testFallbackFiresWhenOperatorLogAbsent() {
29
+ var fb = _recordingFallback();
30
+ var via = b.log.makeViaOrFallback(null, fb);
31
+ via("error", "build-failed", { reason: "missing entrypoint" });
32
+ check("makeViaOrFallback: routes to fallback.error with a formatted line",
33
+ fb.lines.length === 1 &&
34
+ fb.lines[0][0] === "error" &&
35
+ fb.lines[0][1] === 'build-failed {"reason":"missing entrypoint"}');
36
+ }
37
+
38
+ function testFallbackLevelMapping() {
39
+ var fb = _recordingFallback();
40
+ var via = b.log.makeViaOrFallback(null, fb);
41
+ via("warn", "warned"); // → fallback.warn
42
+ via("info", "informed"); // → fallback.info
43
+ via("fatal", "fatal-line"); // fatal + error both route to fallback.error
44
+ check("makeViaOrFallback: warn → fallback.warn", fb.lines[0][0] === "warn" && fb.lines[0][1] === "warned");
45
+ check("makeViaOrFallback: info → fallback.info", fb.lines[1][0] === "info" && fb.lines[1][1] === "informed");
46
+ check("makeViaOrFallback: fatal maps to fallback.error", fb.lines[2][0] === "error" && fb.lines[2][1] === "fatal-line");
47
+ }
48
+
49
+ function testOperatorLogWinsWhenLevelPresent() {
50
+ var fb = _recordingFallback();
51
+ var opCalls = [];
52
+ var operatorLog = { error: function (message, fields) { opCalls.push([message, fields]); } };
53
+ var via = b.log.makeViaOrFallback(operatorLog, fb);
54
+ via("error", "op-msg", { a: 1 });
55
+ check("makeViaOrFallback: operator log receives (message, fields) verbatim",
56
+ opCalls.length === 1 && opCalls[0][0] === "op-msg" && opCalls[0][1].a === 1);
57
+ check("makeViaOrFallback: fallback NOT called when operator handles the level",
58
+ fb.lines.length === 0);
59
+ }
60
+
61
+ function testFallbackFiresWhenOperatorMissingLevel() {
62
+ var fb = _recordingFallback();
63
+ // Operator log exposes only info(); an error() call must fall back.
64
+ var operatorLog = { info: function () {} };
65
+ var via = b.log.makeViaOrFallback(operatorLog, fb);
66
+ via("error", "no-operator-error-method");
67
+ check("makeViaOrFallback: falls back when operator lacks the requested level",
68
+ fb.lines.length === 1 && fb.lines[0][0] === "error" &&
69
+ fb.lines[0][1] === "no-operator-error-method");
70
+ }
71
+
72
+ function testOperatorLogThrowIsSwallowed() {
73
+ var fb = _recordingFallback();
74
+ var operatorLog = { error: function () { throw new Error("operator log blew up"); } };
75
+ var via = b.log.makeViaOrFallback(operatorLog, fb);
76
+ var threw = null;
77
+ try { via("error", "boom"); } catch (e) { threw = e; }
78
+ check("makeViaOrFallback: a throwing operator log is swallowed (best-effort)", threw === null);
79
+ check("makeViaOrFallback: no fallback double-emit after operator log threw", fb.lines.length === 0);
80
+ }
81
+
82
+ function testMessageWithoutFieldsFormatsBareLine() {
83
+ var fb = _recordingFallback();
84
+ var via = b.log.makeViaOrFallback(null, fb);
85
+ via("info", "no-fields-here"); // no fields arg → line is the message verbatim
86
+ check("makeViaOrFallback: a fields-less call formats the bare message",
87
+ fb.lines.length === 1 && fb.lines[0][1] === "no-fields-here");
88
+ }
89
+
90
+ async function run() {
91
+ testFallbackFiresWhenOperatorLogAbsent();
92
+ testFallbackLevelMapping();
93
+ testOperatorLogWinsWhenLevelPresent();
94
+ testFallbackFiresWhenOperatorMissingLevel();
95
+ testOperatorLogThrowIsSwallowed();
96
+ testMessageWithoutFieldsFormatsBareLine();
97
+ }
98
+
99
+ module.exports = { run: run };
100
+
101
+ if (require.main === module) {
102
+ run().then(
103
+ function () { console.log("log tests passed"); process.exit(0); },
104
+ function (e) { console.error(e); process.exit(1); }
105
+ );
106
+ }