@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
@@ -6,97 +6,770 @@ var helpers = require("../helpers");
6
6
  var b = helpers.b;
7
7
  var check = helpers.check;
8
8
 
9
- async function run() {
9
+ var asn1 = require("../../lib/asn1-der");
10
+
11
+ // Inject resolvers so the posture tests aren't sensitive to whatever
12
+ // framework state happens to be initialized in the fork.
13
+ function _resolvers(vaultMode, dbAtRest, auditMode) {
14
+ return {
15
+ vault: function () { return vaultMode; },
16
+ dbAtRest: function () { return dbAtRest; },
17
+ auditSigning: function () { return auditMode; },
18
+ };
19
+ }
20
+
21
+ // A fully production-clean opts base. Each targeted branch test layers a
22
+ // single failing condition on top so the resulting `failures` set stays
23
+ // deterministic:
24
+ // - clean resolvers (vault/db/audit all pass)
25
+ // - ntpStrict off (no BLAMEJS_NTP_STRICT env dependence)
26
+ // - forbidNodeEnv off (no NODE_ENV env dependence)
27
+ // - allowDpiTrust on (skip the global trust-store read)
28
+ function _cleanBase(overrides) {
29
+ var base = {
30
+ resolvers: _resolvers("wrapped", "encrypted", "wrapped"),
31
+ ntpStrict: false,
32
+ forbidNodeEnv: false,
33
+ allowDpiTrust: true,
34
+ };
35
+ if (overrides) {
36
+ Object.keys(overrides).forEach(function (k) { base[k] = overrides[k]; });
37
+ }
38
+ return base;
39
+ }
40
+
41
+ function _hasCode(err, code) {
42
+ return !!(err && Array.isArray(err.failures) &&
43
+ err.failures.some(function (f) { return f.code === code; }));
44
+ }
45
+
46
+ // Minimal structurally-valid self-signed X.509 for exercising the
47
+ // DPI-trust-installed assertion. Not a mock of a shared helper — the
48
+ // framework ships no cert-synth fixture; this builds one DER cert so
49
+ // b.network.tls.addCa populates the real trust store.
50
+ function _synthCaPem(cn) {
51
+ var algId = asn1.writeSequence([asn1.writeOid("1.2.840.113549.1.1.1"), asn1.writeNull()]);
52
+ var cnrdn = asn1.writeSequence([asn1.writeOid("2.5.4.3"), asn1.writeNode(0x0c, Buffer.from(cn, "ascii"))]);
53
+ var name = asn1.writeSequence([asn1.writeNode(0x31, cnrdn)]);
54
+ var validity = asn1.writeSequence([
55
+ asn1.writeNode(0x17, Buffer.from("260101000000Z", "ascii")),
56
+ asn1.writeNode(0x17, Buffer.from("270101000000Z", "ascii")),
57
+ ]);
58
+ var spki = asn1.writeSequence([algId,
59
+ asn1.writeNode(0x03, Buffer.concat([Buffer.from([0]), Buffer.from("k-bytes-aaaaaaaaaaaaaaaaaaaaaaaa")]))]);
60
+ var version = asn1.writeContextExplicit(0, asn1.writeInteger(Buffer.from([2])));
61
+ var tbs = asn1.writeSequence([version, asn1.writeInteger(Buffer.from([0x12, 0x34])),
62
+ algId, name, validity, name, spki]);
63
+ var der = asn1.writeSequence([tbs, algId, asn1.writeNode(0x03, Buffer.from([0, 0, 0, 0]))]);
64
+ return "-----BEGIN CERTIFICATE-----\n" +
65
+ der.toString("base64").replace(/(.{64})/g, "$1\n") +
66
+ "\n-----END CERTIFICATE-----\n";
67
+ }
68
+
69
+ // ---- Core verdicts: clean pass, single/aggregate fail, opt-out ----
70
+ async function _testCoreVerdicts() {
10
71
  check("security namespace present", typeof b.security === "object");
11
72
  check("security.assertProduction is fn", typeof b.security.assertProduction === "function");
73
+ check("b.security.SecurityAssertError is a class", typeof b.security.SecurityAssertError === "function");
74
+ check("b.security.DEFAULT_RESOLVERS is frozen obj",
75
+ b.security.DEFAULT_RESOLVERS && Object.isFrozen(b.security.DEFAULT_RESOLVERS));
76
+
77
+ var prevNtp = process.env.BLAMEJS_NTP_STRICT;
78
+ delete process.env.BLAMEJS_NTP_STRICT;
79
+ try {
80
+ // Production-clean posture passes.
81
+ var passThrew = null;
82
+ try {
83
+ await b.security.assertProduction({ resolvers: _resolvers("wrapped", "encrypted", "wrapped") });
84
+ } catch (e) { passThrew = e; }
85
+ check("clean production posture: no throw", passThrew === null);
12
86
 
13
- // ---- Default: no router, only posture asserts apply ----
14
- // Inject resolvers so the test isn't sensitive to whatever framework
15
- // state happens to be initialized.
16
- function _resolvers(vaultMode, dbAtRest, auditMode) {
17
- return {
18
- vault: function () { return vaultMode; },
19
- dbAtRest: function () { return dbAtRest; },
20
- auditSigning: function () { return auditMode; },
21
- };
87
+ // Dev posture (plaintext vault) fails on the first assertion.
88
+ var devThrew = null;
89
+ try {
90
+ await b.security.assertProduction({ resolvers: _resolvers("plaintext", "encrypted", "wrapped") });
91
+ } catch (e) { devThrew = e; }
92
+ check("plaintext vault: throws SecurityAssertError",
93
+ devThrew && devThrew.isSecurityAssertError === true);
94
+ check("plaintext vault: is instanceof SecurityAssertError",
95
+ devThrew instanceof b.security.SecurityAssertError);
96
+ check("plaintext vault: failures array", Array.isArray(devThrew.failures) && devThrew.failures.length === 1);
97
+ check("plaintext vault: code mentions vault", /vault/.test(devThrew.failures[0].code));
98
+ // The thrown error's operator-facing .message carries the full
99
+ // multi-line diagnostic; .code is the short stable token.
100
+ check("aggregated throw: .code is ASSERT_FAILED", devThrew.code === "ASSERT_FAILED");
101
+ check("aggregated throw: .message carries the diagnostic",
102
+ /production security policy failed/.test(devThrew.message));
103
+ check("aggregated throw: .message lists the failing code",
104
+ /security\/vault-mismatch/.test(devThrew.message));
105
+ check("aggregated throw: permanent flag set", devThrew.permanent === true);
106
+
107
+ // Multiple failures aggregate.
108
+ var multiThrew = null;
109
+ try {
110
+ await b.security.assertProduction({ resolvers: _resolvers("plaintext", "plain", "plaintext") });
111
+ } catch (e) { multiThrew = e; }
112
+ check("triple failure: 3 failures aggregated", multiThrew && multiThrew.failures.length === 3);
113
+
114
+ // BLAMEJS_NTP_STRICT=0 fails when ntpStrict assertion is on (default).
115
+ process.env.BLAMEJS_NTP_STRICT = "0";
116
+ var ntpThrew = null;
117
+ try {
118
+ await b.security.assertProduction({ resolvers: _resolvers("wrapped", "encrypted", "wrapped") });
119
+ } catch (e) { ntpThrew = e; }
120
+ check("BLAMEJS_NTP_STRICT=0: throws", ntpThrew !== null);
121
+ check("BLAMEJS_NTP_STRICT=0: code references ntp", _hasCode(ntpThrew, "security/ntp-strict-disabled"));
122
+
123
+ // BLAMEJS_NTP_STRICT="false" also trips the same assertion.
124
+ process.env.BLAMEJS_NTP_STRICT = "false";
125
+ var ntpFalseThrew = null;
126
+ try {
127
+ await b.security.assertProduction({ resolvers: _resolvers("wrapped", "encrypted", "wrapped") });
128
+ } catch (e) { ntpFalseThrew = e; }
129
+ check("BLAMEJS_NTP_STRICT=false: also trips ntp assertion", _hasCode(ntpFalseThrew, "security/ntp-strict-disabled"));
130
+
131
+ // Clear the ntp env before the remaining opt-out checks so it doesn't
132
+ // leak a spurious ntp failure into them.
133
+ delete process.env.BLAMEJS_NTP_STRICT;
134
+
135
+ // Operator extra: passes / fails.
136
+ var extraOk = null;
137
+ try {
138
+ await b.security.assertProduction(_cleanBase({ extra: [function () { return { ok: true }; }] }));
139
+ } catch (e) { extraOk = e; }
140
+ check("extra:[ok] does not throw", extraOk === null);
141
+
142
+ var extraFail = null;
143
+ try {
144
+ await b.security.assertProduction(_cleanBase({
145
+ extra: [function () { return { ok: false, code: "wiki/x", message: "missing" }; }],
146
+ }));
147
+ } catch (e) { extraFail = e; }
148
+ check("extra:[fail] throws aggregated", extraFail && extraFail.failures.length === 1);
149
+ check("extra:[fail] preserves code", extraFail.failures[0].code === "wiki/x");
150
+
151
+ // Operator can opt out of an assertion (vault: false).
152
+ var optOut = null;
153
+ try {
154
+ await b.security.assertProduction({ vault: false, resolvers: _resolvers("plaintext", "encrypted", "wrapped") });
155
+ } catch (e) { optOut = e; }
156
+ check("vault:false opts out of plaintext check", optOut === null);
157
+
158
+ // Operator explicitly restates each posture target (exercises the
159
+ // opts-supplied side of every posture-default ternary).
160
+ var explicitTargets = null;
161
+ try {
162
+ await b.security.assertProduction({
163
+ resolvers: _resolvers("wrapped", "encrypted", "wrapped"),
164
+ vault: "wrapped",
165
+ dbAtRest: "encrypted",
166
+ auditSigning: "wrapped",
167
+ ntpStrict: false, forbidNodeEnv: false, allowDpiTrust: true,
168
+ });
169
+ } catch (e) { explicitTargets = e; }
170
+ check("explicit posture targets matching resolvers: no throw", explicitTargets === null);
171
+
172
+ // Operator restates a target the resolver does NOT meet → mismatch.
173
+ var explicitMismatch = null;
174
+ try {
175
+ await b.security.assertProduction({
176
+ resolvers: _resolvers("wrapped", "plain", "wrapped"),
177
+ dbAtRest: "encrypted",
178
+ ntpStrict: false, forbidNodeEnv: false, allowDpiTrust: true,
179
+ });
180
+ } catch (e) { explicitMismatch = e; }
181
+ check("explicit dbAtRest target vs plain resolver: dbAtRest-mismatch",
182
+ _hasCode(explicitMismatch, "security/dbAtRest-mismatch"));
183
+ } finally {
184
+ if (prevNtp === undefined) delete process.env.BLAMEJS_NTP_STRICT;
185
+ else process.env.BLAMEJS_NTP_STRICT = prevNtp;
22
186
  }
187
+ }
23
188
 
24
- // Production-clean posture passes.
189
+ // ---- DEFAULT_RESOLVERS: exercise the built-in resolver dispatch ----
190
+ async function _testDefaultResolvers() {
25
191
  var prevNtp = process.env.BLAMEJS_NTP_STRICT;
26
192
  delete process.env.BLAMEJS_NTP_STRICT;
27
- var passThrew = null;
28
- try {
29
- await b.security.assertProduction({
30
- resolvers: _resolvers("wrapped", "encrypted", "wrapped"),
31
- });
32
- } catch (e) { passThrew = e; }
33
- check("clean production posture: no throw", passThrew === null);
34
-
35
- // Dev posture (plaintext vault) fails on the first assertion.
36
- var devThrew = null;
37
- try {
38
- await b.security.assertProduction({
39
- resolvers: _resolvers("plaintext", "encrypted", "wrapped"),
40
- });
41
- } catch (e) { devThrew = e; }
42
- check("plaintext vault: throws SecurityAssertError",
43
- devThrew && devThrew.isSecurityAssertError === true);
44
- check("plaintext vault: failures array", Array.isArray(devThrew.failures) && devThrew.failures.length === 1);
45
- check("plaintext vault: code mentions vault", /vault/.test(devThrew.failures[0].code));
46
-
47
- // Multiple failures aggregate.
48
- var multiThrew = null;
49
- try {
50
- await b.security.assertProduction({
51
- resolvers: _resolvers("plaintext", "plain", "plaintext"),
52
- });
53
- } catch (e) { multiThrew = e; }
54
- check("triple failure: 3 failures aggregated", multiThrew && multiThrew.failures.length === 3);
55
-
56
- // BLAMEJS_NTP_STRICT=0 fails when ntpStrict assertion is on (default).
57
- process.env.BLAMEJS_NTP_STRICT = "0";
58
- var ntpThrew = null;
59
- try {
60
- await b.security.assertProduction({
61
- resolvers: _resolvers("wrapped", "encrypted", "wrapped"),
62
- });
63
- } catch (e) { ntpThrew = e; }
64
- check("BLAMEJS_NTP_STRICT=0: throws", ntpThrew !== null);
65
- check("BLAMEJS_NTP_STRICT=0: code references ntp",
66
- ntpThrew && /ntp/.test(ntpThrew.failures[0].code));
67
- if (prevNtp === undefined) delete process.env.BLAMEJS_NTP_STRICT;
68
- else process.env.BLAMEJS_NTP_STRICT = prevNtp;
69
-
70
- // Operator extra: passes
71
- var extraOk = null;
72
- try {
73
- await b.security.assertProduction({
74
- resolvers: _resolvers("wrapped", "encrypted", "wrapped"),
75
- extra: [function () { return { ok: true }; }],
76
- });
77
- } catch (e) { extraOk = e; }
78
- check("extra:[ok] does not throw", extraOk === null);
79
-
80
- // Operator extra: fails
81
- var extraFail = null;
82
- try {
83
- await b.security.assertProduction({
84
- resolvers: _resolvers("wrapped", "encrypted", "wrapped"),
85
- extra: [function () { return { ok: false, code: "wiki/x", message: "missing" }; }],
86
- });
87
- } catch (e) { extraFail = e; }
88
- check("extra:[fail] throws aggregated", extraFail && extraFail.failures.length === 1);
89
- check("extra:[fail] preserves code", extraFail.failures[0].code === "wiki/x");
90
-
91
- // Operator can opt out of an assertion (vault: false)
193
+ try {
194
+ // No `resolvers` override → the frozen DEFAULT_RESOLVERS fire against
195
+ // the real framework instance (vault().getMode(), db().getAtRestMode(),
196
+ // auditSign().getMode()). We don't assert the outcome — a fresh fork's
197
+ // default posture may be plaintext (→ throws) or wrapped (→ passes) —
198
+ // only that the built-in resolver dispatch runs to completion.
199
+ var threw = null;
200
+ try {
201
+ await b.security.assertProduction({ allowDpiTrust: true });
202
+ } catch (e) { threw = e; }
203
+ check("DEFAULT_RESOLVERS dispatch completes (pass or SecurityAssertError)",
204
+ threw === null || threw instanceof b.security.SecurityAssertError);
205
+
206
+ // Called with NO opts at all → opts defaults to {} and the full
207
+ // default posture runs against the live framework. Outcome is
208
+ // environment-dependent; we only assert the call is well-formed.
209
+ var noArgThrew = null;
210
+ try { await b.security.assertProduction(); } catch (e) { noArgThrew = e; }
211
+ check("assertProduction() with no opts: runs to a defined verdict",
212
+ noArgThrew === null || noArgThrew instanceof b.security.SecurityAssertError);
213
+
214
+ // Partial override: only vault is injected → dbAtRest + auditSigning
215
+ // still resolve via DEFAULT_RESOLVERS.
216
+ var partialThrew = null;
217
+ try {
218
+ await b.security.assertProduction({
219
+ allowDpiTrust: true,
220
+ ntpStrict: false,
221
+ vault: false,
222
+ auditSigning: false,
223
+ resolvers: { dbAtRest: function () { return "encrypted"; } },
224
+ });
225
+ } catch (e) { partialThrew = e; }
226
+ check("partial resolver override: dbAtRest default replaced, still runs",
227
+ partialThrew === null || partialThrew instanceof b.security.SecurityAssertError);
228
+ } finally {
229
+ if (prevNtp === undefined) delete process.env.BLAMEJS_NTP_STRICT;
230
+ else process.env.BLAMEJS_NTP_STRICT = prevNtp;
231
+ }
232
+ }
233
+
234
+ // ---- Resolver that throws → resolver-failed verdict (_check catch) ----
235
+ async function _testResolverThrows() {
236
+ var threw = null;
237
+ try {
238
+ await b.security.assertProduction(_cleanBase({
239
+ resolvers: {
240
+ vault: function () { throw new Error("kaboom"); },
241
+ dbAtRest: function () { return "encrypted"; },
242
+ auditSigning: function () { return "wrapped"; },
243
+ },
244
+ }));
245
+ } catch (e) { threw = e; }
246
+ check("resolver throw: raises SecurityAssertError", threw instanceof b.security.SecurityAssertError);
247
+ check("resolver throw: code is vault-resolver-failed", _hasCode(threw, "security/vault-resolver-failed"));
248
+ check("resolver throw: message carries the thrown text",
249
+ threw && threw.failures.some(function (f) { return /kaboom/.test(f.message); }));
250
+
251
+ // A resolver that throws a non-Error (no .message) still produces a
252
+ // clean resolver-failed verdict via String(e).
253
+ var stringThrew = null;
254
+ try {
255
+ await b.security.assertProduction(_cleanBase({
256
+ resolvers: {
257
+ vault: function () { throw "plain-string-fault"; }, // eslint-disable-line no-throw-literal
258
+ dbAtRest: function () { return "encrypted"; },
259
+ auditSigning: function () { return "wrapped"; },
260
+ },
261
+ }));
262
+ } catch (e) { stringThrew = e; }
263
+ check("resolver throws non-Error: still resolver-failed", _hasCode(stringThrew, "security/vault-resolver-failed"));
264
+ check("resolver throws non-Error: String(e) captured in message",
265
+ stringThrew && stringThrew.failures.some(function (f) { return /plain-string-fault/.test(f.message); }));
266
+ }
267
+
268
+ // ---- requireTLS opt-in tightening ----
269
+ async function _testRequireTls() {
270
+ // No protocol / non-https → fail.
271
+ var noProto = null;
272
+ try { await b.security.assertProduction(_cleanBase({ requireTLS: true })); }
273
+ catch (e) { noProto = e; }
274
+ check("requireTLS + no protocol: fails tls-required", _hasCode(noProto, "security/tls-required"));
275
+
276
+ var httpProto = null;
277
+ try { await b.security.assertProduction(_cleanBase({ requireTLS: true, protocol: "http" })); }
278
+ catch (e) { httpProto = e; }
279
+ check("requireTLS + http: fails tls-required", _hasCode(httpProto, "security/tls-required"));
280
+
281
+ // protocol https → passes.
282
+ var httpsOk = null;
283
+ try { await b.security.assertProduction(_cleanBase({ requireTLS: true, protocol: "https" })); }
284
+ catch (e) { httpsOk = e; }
285
+ check("requireTLS + https: no throw", httpsOk === null);
286
+ }
287
+
288
+ // ---- require* middleware introspection ----
289
+ async function _testRequireMiddleware() {
290
+ // No router but a require* flag set → router-introspection-missing.
291
+ var noRouter = null;
292
+ try { await b.security.assertProduction(_cleanBase({ requireCSRF: true })); }
293
+ catch (e) { noRouter = e; }
294
+ check("requireCSRF + no router: router-introspection-missing",
295
+ _hasCode(noRouter, "security/router-introspection-missing"));
296
+
297
+ // Router present but nothing mounted → one middleware-missing per flag.
298
+ var emptyRouter = { _mounted: [] };
299
+ var missing = null;
300
+ try {
301
+ await b.security.assertProduction(_cleanBase({
302
+ requireCSPNonce: true, requireCSRF: true, requireRateLimit: true, router: emptyRouter,
303
+ }));
304
+ } catch (e) { missing = e; }
305
+ check("empty router: three middleware-missing failures",
306
+ missing && missing.failures.filter(function (f) { return f.code === "security/middleware-missing"; }).length === 3);
307
+ check("empty router: message names b.middleware.cspNonce",
308
+ missing && missing.failures.some(function (f) { return /b\.middleware\.cspNonce/.test(f.message); }));
309
+
310
+ // Router with all three mounted (case-insensitive match) → passes.
311
+ // A nameless mounted entry is tolerated (name coalesces to "").
312
+ var fullRouter = { _mounted: [{ name: "CSPNonce" }, {}, { name: "csrfProtect" }, { name: "RateLimit" }] };
313
+ var allMounted = null;
314
+ try {
315
+ await b.security.assertProduction(_cleanBase({
316
+ requireCSPNonce: true, requireCSRF: true, requireRateLimit: true, router: fullRouter,
317
+ }));
318
+ } catch (e) { allMounted = e; }
319
+ check("router with all middleware mounted: no throw", allMounted === null);
320
+ }
321
+
322
+ // ---- CORS allow-all detection (independent of require* flags) ----
323
+ async function _testCorsAllowAll() {
324
+ var wildcard = { _mounted: [{ name: "cors", opts: { origins: "*" } }] };
325
+ var wildThrew = null;
326
+ try { await b.security.assertProduction(_cleanBase({ router: wildcard })); }
327
+ catch (e) { wildThrew = e; }
328
+ check("cors origins:'*' : fails cors-allow-all", _hasCode(wildThrew, "security/cors-allow-all"));
329
+
330
+ // CORS mounted with a concrete origin → no cors failure. A nameless
331
+ // sibling entry must not break the scan (name coalesces to "").
332
+ var scoped = { _mounted: [{}, { name: "cors", opts: { origins: "https://app.example" } }] };
333
+ var scopedThrew = null;
334
+ try { await b.security.assertProduction(_cleanBase({ router: scoped })); }
335
+ catch (e) { scopedThrew = e; }
336
+ check("cors scoped origin: no cors-allow-all", scopedThrew === null);
337
+
338
+ // Router without cors mounted → no cors failure.
339
+ var noCors = { _mounted: [{ name: "logger" }] };
340
+ var noCorsThrew = null;
341
+ try { await b.security.assertProduction(_cleanBase({ router: noCors })); }
342
+ catch (e) { noCorsThrew = e; }
343
+ check("router without cors: no cors-allow-all", noCorsThrew === null);
344
+ }
345
+
346
+ // ---- minNodeMajor floor ----
347
+ async function _testMinNodeMajor() {
348
+ // Impossibly-high floor → node-version failure.
349
+ var tooLow = null;
350
+ try { await b.security.assertProduction(_cleanBase({ minNodeMajor: 9999 })); }
351
+ catch (e) { tooLow = e; }
352
+ check("minNodeMajor:9999 : fails node-version", _hasCode(tooLow, "security/node-version"));
353
+
354
+ // Explicit low floor the running node satisfies → passes.
355
+ var okFloor = null;
356
+ try { await b.security.assertProduction(_cleanBase({ minNodeMajor: 4 })); }
357
+ catch (e) { okFloor = e; }
358
+ check("minNodeMajor:4 : no throw on current node", okFloor === null);
359
+
360
+ // Opt out with false → check skipped entirely.
92
361
  var optOut = null;
362
+ try { await b.security.assertProduction(_cleanBase({ minNodeMajor: false })); }
363
+ catch (e) { optOut = e; }
364
+ check("minNodeMajor:false : opts out, no throw", optOut === null);
365
+ }
366
+
367
+ // ---- minTlsVersion vocabulary + rank compare ----
368
+ async function _testMinTlsVersion() {
369
+ var nodeTls = require("node:tls");
370
+
371
+ // Typo'd required version → config-time TypeError (not an aggregated failure).
372
+ var typoErr = null;
373
+ try { await b.security.assertProduction(_cleanBase({ minTlsVersion: "TLSv1.4" })); }
374
+ catch (e) { typoErr = e; }
375
+ check("minTlsVersion typo: throws TypeError", typoErr instanceof TypeError);
376
+ check("minTlsVersion typo: message names the bad value",
377
+ typoErr && /TLSv1\.4/.test(typoErr.message));
378
+
379
+ // Require exactly the active floor → passes.
380
+ var got = nodeTls.DEFAULT_MIN_VERSION;
381
+ var atFloor = null;
382
+ try { await b.security.assertProduction(_cleanBase({ minTlsVersion: got })); }
383
+ catch (e) { atFloor = e; }
384
+ check("minTlsVersion == active floor: no throw", atFloor === null);
385
+
386
+ // Require a version ABOVE the active floor → tls-min-version failure.
387
+ // The framework boots TLS 1.3-only, so the live floor is already the
388
+ // maximum; temporarily lower the shared floor to a recognized value so
389
+ // the rank compare (active < required) fires deterministically. This is
390
+ // exactly the posture the assertion guards: a runtime whose TLS floor
391
+ // sits below the operator's production requirement.
392
+ var origFloor = nodeTls.DEFAULT_MIN_VERSION;
393
+ try {
394
+ nodeTls.DEFAULT_MIN_VERSION = "TLSv1.2";
395
+ var belowThrew = null;
396
+ try { await b.security.assertProduction(_cleanBase({ minTlsVersion: "TLSv1.3" })); }
397
+ catch (e) { belowThrew = e; }
398
+ check("minTlsVersion above active floor: fails tls-min-version", _hasCode(belowThrew, "security/tls-min-version"));
399
+ check("minTlsVersion above active floor: message names both versions",
400
+ belowThrew && belowThrew.failures.some(function (f) {
401
+ return /is 'TLSv1\.2', required 'TLSv1\.3'/.test(f.message);
402
+ }));
403
+ } finally {
404
+ nodeTls.DEFAULT_MIN_VERSION = origFloor;
405
+ }
406
+
407
+ // Defensive branch: Node's DEFAULT_MIN_VERSION drifts outside the known
408
+ // vocabulary (future node / monkeypatched runtime) → surfaced, not
409
+ // silently treated as "below". Temporarily perturb the shared tls object.
410
+ var orig = nodeTls.DEFAULT_MIN_VERSION;
93
411
  try {
94
- await b.security.assertProduction({
95
- vault: false,
96
- resolvers: _resolvers("plaintext", "encrypted", "wrapped"),
97
- });
98
- } catch (e) { optOut = e; }
99
- check("vault:false opts out of plaintext check", optOut === null);
412
+ nodeTls.DEFAULT_MIN_VERSION = "TLSbogus";
413
+ var driftThrew = null;
414
+ try { await b.security.assertProduction(_cleanBase({ minTlsVersion: "TLSv1.2" })); }
415
+ catch (e) { driftThrew = e; }
416
+ check("unrecognized node tls floor: surfaced as tls-min-version",
417
+ _hasCode(driftThrew, "security/tls-min-version"));
418
+ check("unrecognized node tls floor: message flags the bad value",
419
+ driftThrew && driftThrew.failures.some(function (f) { return /unrecognized value 'TLSbogus'/.test(f.message); }));
420
+ } finally {
421
+ nodeTls.DEFAULT_MIN_VERSION = orig;
422
+ }
423
+ }
424
+
425
+ // ---- requireEnv presence ----
426
+ async function _testRequireEnv() {
427
+ var missingKey = "BLAMEJS_ASSERT_TEST_MISSING_XYZ";
428
+ var prev = process.env[missingKey];
429
+ delete process.env[missingKey];
430
+ try {
431
+ var threw = null;
432
+ try {
433
+ // Mix an empty string and a non-string to exercise the skip path,
434
+ // plus the genuinely-missing key that must fail.
435
+ await b.security.assertProduction(_cleanBase({ requireEnv: ["", 123, missingKey] }));
436
+ } catch (e) { threw = e; }
437
+ check("requireEnv missing var: fails env-missing", _hasCode(threw, "security/env-missing"));
438
+ check("requireEnv: exactly one failure (empty + non-string skipped)",
439
+ threw && threw.failures.length === 1);
440
+
441
+ // Now set it → passes.
442
+ process.env[missingKey] = "present";
443
+ var okThrew = null;
444
+ try { await b.security.assertProduction(_cleanBase({ requireEnv: [missingKey] })); }
445
+ catch (e) { okThrew = e; }
446
+ check("requireEnv set var: no throw", okThrew === null);
447
+ } finally {
448
+ if (prev === undefined) delete process.env[missingKey];
449
+ else process.env[missingKey] = prev;
450
+ }
451
+ }
452
+
453
+ // ---- forbidEnv (string form + {key,value} form) ----
454
+ async function _testForbidEnv() {
455
+ var sKey = "BLAMEJS_ASSERT_TEST_FORBIDDEN";
456
+ var kvKey = "BLAMEJS_ASSERT_TEST_KV";
457
+ var prevS = process.env[sKey];
458
+ var prevKv = process.env[kvKey];
459
+ try {
460
+ // String form: var present at all → forbidden.
461
+ process.env[sKey] = "anything";
462
+ var sThrew = null;
463
+ try { await b.security.assertProduction(_cleanBase({ forbidEnv: [sKey] })); }
464
+ catch (e) { sThrew = e; }
465
+ check("forbidEnv string form: fails env-forbidden", _hasCode(sThrew, "security/env-forbidden"));
466
+
467
+ // String form: var absent → passes.
468
+ delete process.env[sKey];
469
+ var sAbsent = null;
470
+ try { await b.security.assertProduction(_cleanBase({ forbidEnv: [sKey] })); }
471
+ catch (e) { sAbsent = e; }
472
+ check("forbidEnv string form, var absent: no throw", sAbsent === null);
473
+
474
+ // Object form: forbid only when value matches.
475
+ process.env[kvKey] = "bad";
476
+ var kvMatch = null;
477
+ try { await b.security.assertProduction(_cleanBase({ forbidEnv: [{ key: kvKey, value: "bad" }] })); }
478
+ catch (e) { kvMatch = e; }
479
+ check("forbidEnv {key,value} match: fails env-forbidden-value", _hasCode(kvMatch, "security/env-forbidden-value"));
480
+
481
+ // Object form: value does NOT match → passes.
482
+ process.env[kvKey] = "fine";
483
+ var kvNoMatch = null;
484
+ try { await b.security.assertProduction(_cleanBase({ forbidEnv: [{ key: kvKey, value: "bad" }] })); }
485
+ catch (e) { kvNoMatch = e; }
486
+ check("forbidEnv {key,value} non-match: no throw", kvNoMatch === null);
487
+ } finally {
488
+ if (prevS === undefined) delete process.env[sKey]; else process.env[sKey] = prevS;
489
+ if (prevKv === undefined) delete process.env[kvKey]; else process.env[kvKey] = prevKv;
490
+ }
491
+ }
492
+
493
+ // ---- forbidNodeEnv pinning ----
494
+ async function _testForbidNodeEnv() {
495
+ var prev = process.env.NODE_ENV;
496
+ try {
497
+ // Default forbidden list ["development","dev","test"].
498
+ process.env.NODE_ENV = "test";
499
+ var defThrew = null;
500
+ try {
501
+ await b.security.assertProduction({
502
+ resolvers: _resolvers("wrapped", "encrypted", "wrapped"),
503
+ ntpStrict: false, allowDpiTrust: true,
504
+ });
505
+ } catch (e) { defThrew = e; }
506
+ check("NODE_ENV=test with default forbid list: fails node-env-forbidden",
507
+ _hasCode(defThrew, "security/node-env-forbidden"));
508
+
509
+ // Custom forbid list — value not in the operator's list → passes.
510
+ process.env.NODE_ENV = "staging";
511
+ var customOk = null;
512
+ try {
513
+ await b.security.assertProduction({
514
+ resolvers: _resolvers("wrapped", "encrypted", "wrapped"),
515
+ ntpStrict: false, allowDpiTrust: true,
516
+ forbidNodeEnv: ["development", "dev"],
517
+ });
518
+ } catch (e) { customOk = e; }
519
+ check("NODE_ENV=staging with custom list: no throw", customOk === null);
520
+
521
+ // Custom list that DOES contain the value → fails.
522
+ var customThrew = null;
523
+ try {
524
+ await b.security.assertProduction({
525
+ resolvers: _resolvers("wrapped", "encrypted", "wrapped"),
526
+ ntpStrict: false, allowDpiTrust: true,
527
+ forbidNodeEnv: ["staging"],
528
+ });
529
+ } catch (e) { customThrew = e; }
530
+ check("NODE_ENV=staging in custom list: fails node-env-forbidden",
531
+ _hasCode(customThrew, "security/node-env-forbidden"));
532
+
533
+ // Opt out entirely with forbidNodeEnv:false → skipped even with a
534
+ // forbidden NODE_ENV present.
535
+ process.env.NODE_ENV = "test";
536
+ var optOut = null;
537
+ try {
538
+ await b.security.assertProduction({
539
+ resolvers: _resolvers("wrapped", "encrypted", "wrapped"),
540
+ ntpStrict: false, allowDpiTrust: true, forbidNodeEnv: false,
541
+ });
542
+ } catch (e) { optOut = e; }
543
+ check("forbidNodeEnv:false : opts out, no throw", optOut === null);
544
+ } finally {
545
+ if (prev === undefined) delete process.env.NODE_ENV;
546
+ else process.env.NODE_ENV = prev;
547
+ }
548
+ }
549
+
550
+ // ---- extra validation + async execution ----
551
+ async function _testExtraValidation() {
552
+ // Non-array extra → config-time throw.
553
+ var notArray = null;
554
+ try { await b.security.assertProduction(_cleanBase({ extra: "nope" })); }
555
+ catch (e) { notArray = e; }
556
+ check("extra not an array: throws SecurityAssertError", notArray instanceof b.security.SecurityAssertError);
557
+ check("extra not an array: BAD_OPT code", notArray && notArray.code === "BAD_OPT");
558
+ check("extra not an array: message describes the fault",
559
+ notArray && /opts\.extra must be an array/.test(notArray.message));
560
+
561
+ // Non-function element → config-time throw.
562
+ var notFn = null;
563
+ try { await b.security.assertProduction(_cleanBase({ extra: [123] })); }
564
+ catch (e) { notFn = e; }
565
+ check("extra[0] not a function: throws SecurityAssertError", notFn instanceof b.security.SecurityAssertError);
566
+ check("extra[0] not a function: BAD_OPT code", notFn && notFn.code === "BAD_OPT");
567
+ check("extra[0] not a function: message names index", notFn && /extra\[0\]/.test(notFn.message));
568
+
569
+ // Extra that throws → aggregated as extra-threw (not a hard throw).
570
+ var extraThrew = null;
571
+ try {
572
+ await b.security.assertProduction(_cleanBase({
573
+ extra: [function () { throw new Error("assert-boom"); }],
574
+ }));
575
+ } catch (e) { extraThrew = e; }
576
+ check("extra throws: aggregated as extra-threw", _hasCode(extraThrew, "security/extra-threw"));
577
+ check("extra throws: message carries thrown text",
578
+ extraThrew && extraThrew.failures.some(function (f) { return /assert-boom/.test(f.message); }));
579
+
580
+ // Extra that throws a non-Error (no .message) → String(e) fallback.
581
+ var extraThrewStr = null;
582
+ try {
583
+ await b.security.assertProduction(_cleanBase({
584
+ extra: [function () { throw "raw-extra-fault"; }], // eslint-disable-line no-throw-literal
585
+ }));
586
+ } catch (e) { extraThrewStr = e; }
587
+ check("extra throws non-Error: String(e) captured",
588
+ extraThrewStr && extraThrewStr.failures.some(function (f) { return /raw-extra-fault/.test(f.message); }));
589
+
590
+ // Async extra returning not-ok WITHOUT a code → default extra-failed code.
591
+ var noCode = null;
592
+ try {
593
+ await b.security.assertProduction(_cleanBase({
594
+ extra: [async function () { return { ok: false }; }],
595
+ }));
596
+ } catch (e) { noCode = e; }
597
+ check("extra async not-ok without code: default extra-failed", _hasCode(noCode, "security/extra-failed"));
598
+
599
+ // Extra returning a non-object falsy verdict → treated as failed.
600
+ var falsy = null;
601
+ try {
602
+ await b.security.assertProduction(_cleanBase({ extra: [function () { return undefined; }] }));
603
+ } catch (e) { falsy = e; }
604
+ check("extra returns undefined: treated as extra-failed", _hasCode(falsy, "security/extra-failed"));
605
+ }
606
+
607
+ // ---- audit emission (pass + fail outcomes, injected + default sink) ----
608
+ async function _testAuditEmit() {
609
+ // Injected sink, clean posture → success event, no throw.
610
+ var captured = [];
611
+ var fakeSink = { safeEmit: function (rec) { captured.push(rec); } };
612
+ var okThrew = null;
613
+ try { await b.security.assertProduction(_cleanBase({ audit: fakeSink })); }
614
+ catch (e) { okThrew = e; }
615
+ check("audit sink + clean posture: no throw", okThrew === null);
616
+ check("audit sink: success event emitted",
617
+ captured.length === 1 && captured[0].action === "system.security.assert.success");
618
+ check("audit sink: success outcome", captured.length === 1 && captured[0].outcome === "success");
619
+ check("audit sink: metadata.failureCount is 0",
620
+ captured.length === 1 && captured[0].metadata && captured[0].metadata.failureCount === 0);
621
+
622
+ // Injected sink, failing posture → failure event emitted THEN throws.
623
+ var captured2 = [];
624
+ var fakeSink2 = { safeEmit: function (rec) { captured2.push(rec); } };
625
+ var failThrew = null;
626
+ try {
627
+ await b.security.assertProduction(_cleanBase({
628
+ audit: fakeSink2,
629
+ extra: [function () { return { ok: false, code: "wiki/x", message: "m" }; }],
630
+ }));
631
+ } catch (e) { failThrew = e; }
632
+ check("audit sink + failing posture: throws", failThrew instanceof b.security.SecurityAssertError);
633
+ check("audit sink: failure event emitted",
634
+ captured2.length === 1 && captured2[0].action === "system.security.assert.failure");
635
+ check("audit sink: failedCodes lists the failure",
636
+ captured2.length === 1 && captured2[0].metadata.failedCodes.indexOf("wiki/x") !== -1);
637
+
638
+ // A sink whose safeEmit throws must not break the assert (best-effort).
639
+ var throwingSink = { safeEmit: function () { throw new Error("sink down"); } };
640
+ var sinkThrewSwallowed = null;
641
+ try { await b.security.assertProduction(_cleanBase({ audit: throwingSink })); }
642
+ catch (e) { sinkThrewSwallowed = e; }
643
+ check("audit sink that throws is swallowed: no throw", sinkThrewSwallowed === null);
644
+
645
+ // audit:true → default framework sink (audit()) path (drop-silent).
646
+ var defaultSink = null;
647
+ try { await b.security.assertProduction(_cleanBase({ audit: true })); }
648
+ catch (e) { defaultSink = e; }
649
+ check("audit:true default sink path: no throw", defaultSink === null);
650
+
651
+ // audit:false → auditing skipped entirely (auditOn short-circuits).
652
+ var offThrew = null;
653
+ try { await b.security.assertProduction(_cleanBase({ audit: false })); }
654
+ catch (e) { offThrew = e; }
655
+ check("audit:false : auditing skipped, no throw", offThrew === null);
656
+
657
+ // audit omitted (undefined) on a failing posture → no emit, still throws.
658
+ var noAuditThrew = null;
659
+ try {
660
+ await b.security.assertProduction(_cleanBase({
661
+ extra: [function () { return { ok: false, code: "x/y", message: "m" }; }],
662
+ }));
663
+ } catch (e) { noAuditThrew = e; }
664
+ check("audit omitted + failing posture: throws without an audit sink",
665
+ noAuditThrew instanceof b.security.SecurityAssertError);
666
+ }
667
+
668
+ // ---- forbidProxy: refuse outbound proxy in production ----
669
+ async function _testForbidProxy() {
670
+ var proxy = b.network.proxy;
671
+ proxy._resetForTest();
672
+ try {
673
+ // No proxy configured + forbidProxy:true → passes.
674
+ var noProxyThrew = null;
675
+ try { await b.security.assertProduction(_cleanBase({ forbidProxy: true })); }
676
+ catch (e) { noProxyThrew = e; }
677
+ check("forbidProxy + no proxy set: no throw", noProxyThrew === null);
678
+
679
+ // Proxy configured + forbidProxy:true → outbound-proxy-set failure.
680
+ proxy.set({ http: "http://127.0.0.1:8080", https: "http://127.0.0.1:8443" });
681
+ var proxyThrew = null;
682
+ try { await b.security.assertProduction(_cleanBase({ forbidProxy: true })); }
683
+ catch (e) { proxyThrew = e; }
684
+ check("forbidProxy + proxy set: fails outbound-proxy-set", _hasCode(proxyThrew, "security/outbound-proxy-set"));
685
+
686
+ // Same proxy state but forbidProxy NOT set → block skipped, no failure.
687
+ var noFlagThrew = null;
688
+ try { await b.security.assertProduction(_cleanBase({})); }
689
+ catch (e) { noFlagThrew = e; }
690
+ check("proxy set but forbidProxy off: no outbound-proxy-set", noFlagThrew === null);
691
+ } finally {
692
+ proxy._resetForTest();
693
+ }
694
+ }
695
+
696
+ // ---- allowDpiTrust: refuse runtime-installed CAs in production ----
697
+ async function _testDpiTrust() {
698
+ var tls = b.network.tls;
699
+ tls._resetForTest();
700
+ try {
701
+ // Empty trust store, default (allowDpiTrust off) → no dpi failure.
702
+ var emptyThrew = null;
703
+ try {
704
+ await b.security.assertProduction({
705
+ resolvers: _resolvers("wrapped", "encrypted", "wrapped"),
706
+ ntpStrict: false, forbidNodeEnv: false,
707
+ });
708
+ } catch (e) { emptyThrew = e; }
709
+ check("empty trust store: no dpi-trust-installed", emptyThrew === null);
710
+
711
+ // Install a CA at runtime → the default policy refuses boot.
712
+ tls.addCa(_synthCaPem("Prod Posture Test CA"), { label: "dpi-test" });
713
+ check("precondition: trust store has the installed CA", tls.getTrustStore().length === 1);
714
+
715
+ var dpiThrew = null;
716
+ try {
717
+ await b.security.assertProduction({
718
+ resolvers: _resolvers("wrapped", "encrypted", "wrapped"),
719
+ ntpStrict: false, forbidNodeEnv: false,
720
+ });
721
+ } catch (e) { dpiThrew = e; }
722
+ check("runtime CA + default policy: fails dpi-trust-installed", _hasCode(dpiThrew, "security/dpi-trust-installed"));
723
+
724
+ // Same state but allowDpiTrust:true → operator opt-in bypasses the check.
725
+ var allowThrew = null;
726
+ try {
727
+ await b.security.assertProduction({
728
+ resolvers: _resolvers("wrapped", "encrypted", "wrapped"),
729
+ ntpStrict: false, forbidNodeEnv: false, allowDpiTrust: true,
730
+ });
731
+ } catch (e) { allowThrew = e; }
732
+ check("runtime CA + allowDpiTrust:true : no dpi failure", allowThrew === null);
733
+ } finally {
734
+ tls._resetForTest();
735
+ }
736
+ }
737
+
738
+ // ---- dataDir mode check (POSIX-only; win32 skips silently) ----
739
+ async function _testDataDir() {
740
+ if (process.platform === "win32") {
741
+ // The dataDir permission block short-circuits on win32 — passing a
742
+ // dataDir here must be a silent no-op, never a stat/permission failure.
743
+ var winThrew = null;
744
+ try { await b.security.assertProduction(_cleanBase({ dataDir: "C:/some/data/dir", maxDataDirMode: 0o750 })); }
745
+ catch (e) { winThrew = e; }
746
+ check("dataDir on win32: skipped silently (no throw)", winThrew === null);
747
+ return;
748
+ }
749
+ // POSIX: a non-existent dataDir cannot be stat'd → datadir-stat-failed.
750
+ var statThrew = null;
751
+ try { await b.security.assertProduction(_cleanBase({ dataDir: "/no/such/blamejs/datadir/xyz" })); }
752
+ catch (e) { statThrew = e; }
753
+ check("dataDir stat failure: fails datadir-stat-failed", _hasCode(statThrew, "security/datadir-stat-failed"));
754
+ }
755
+
756
+ async function run() {
757
+ await _testCoreVerdicts();
758
+ await _testDefaultResolvers();
759
+ await _testResolverThrows();
760
+ await _testRequireTls();
761
+ await _testRequireMiddleware();
762
+ await _testCorsAllowAll();
763
+ await _testMinNodeMajor();
764
+ await _testMinTlsVersion();
765
+ await _testRequireEnv();
766
+ await _testForbidEnv();
767
+ await _testForbidNodeEnv();
768
+ await _testExtraValidation();
769
+ await _testAuditEmit();
770
+ await _testForbidProxy();
771
+ await _testDpiTrust();
772
+ await _testDataDir();
100
773
  }
101
774
 
102
775
  module.exports = { run: run };