@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
@@ -1966,6 +1966,223 @@ async function testAuthDpopPqcMlDsa() {
1966
1966
  check("ML-DSA-87 jwk.alg=ML-DSA-87", rv.header.jwk.alg === "ML-DSA-87");
1967
1967
  }
1968
1968
 
1969
+ // DPoP verify/buildProof adversarial + error-branch coverage. These drive
1970
+ // the public b.auth.dpop surface an operator calls (buildProof / verify /
1971
+ // thumbprint) through every documented failure mode: malformed / oversize /
1972
+ // omitted-required-opt input, header-level refusals (typ / alg / jwk / crit),
1973
+ // signature tampering, payload-claim omissions, nonce binding, replay-store
1974
+ // shape, buildProof input validation, and thumbprint kty gating.
1975
+
1976
+ function _dpopB64url(x) {
1977
+ return Buffer.from(x).toString("base64")
1978
+ .replace(/=+$/g, "").replace(/\+/g, "-").replace(/\//g, "_");
1979
+ }
1980
+
1981
+ // Craft a proof segment triple with a caller-supplied header/payload and a
1982
+ // throwaway signature — for the verify branches that run BEFORE the signature
1983
+ // is checked (typ / alg / jwk / crit / structural malformation).
1984
+ function _dpopCraft(header, payload, sig) {
1985
+ return _dpopB64url(JSON.stringify(header)) + "." +
1986
+ _dpopB64url(JSON.stringify(payload)) + "." + (sig || "AA");
1987
+ }
1988
+
1989
+ // Sign a caller-supplied header+payload with a real P-256 key (ES256,
1990
+ // ieee-p1363 like the framework emits) — for the payload-claim branches that
1991
+ // run AFTER signature verification, so they must reach a genuinely valid sig.
1992
+ function _dpopSignES256(privateKey, header, payload) {
1993
+ var nodeCrypto = require("crypto");
1994
+ var si = _dpopB64url(JSON.stringify(header)) + "." + _dpopB64url(JSON.stringify(payload));
1995
+ var sig = nodeCrypto.sign("sha256", Buffer.from(si, "ascii"),
1996
+ { key: privateKey, dsaEncoding: "ieee-p1363" });
1997
+ return si + "." + _dpopB64url(sig);
1998
+ }
1999
+
2000
+ async function testAuthDpopVerifyMalformedInputs() {
2001
+ var d = b.auth.dpop;
2002
+ var o = { htm: "GET", htu: "https://x/y" };
2003
+ async function code(proof, opts) {
2004
+ try { await d.verify(proof, opts); return null; }
2005
+ catch (e) { return e && e.code; }
2006
+ }
2007
+
2008
+ check("dpop.verify: empty proof → auth-dpop/no-proof",
2009
+ (await code("", o)) === "auth-dpop/no-proof");
2010
+ check("dpop.verify: non-string proof → auth-dpop/no-proof",
2011
+ (await code(null, o)) === "auth-dpop/no-proof");
2012
+ check("dpop.verify: oversize proof → auth-dpop/proof-too-large",
2013
+ (await code("x".repeat(96 * 1024 + 1), o)) === "auth-dpop/proof-too-large");
2014
+ check("dpop.verify: omitted opts.htm → auth-dpop/bad-htm",
2015
+ (await code("a.b.c", { htu: "https://x/y" })) === "auth-dpop/bad-htm");
2016
+ check("dpop.verify: omitted opts.htu → auth-dpop/bad-htu",
2017
+ (await code("a.b.c", { htm: "GET" })) === "auth-dpop/bad-htu");
2018
+ check("dpop.verify: iatWindowSec<=0 → auth-dpop/bad-iat-window",
2019
+ (await code("a.b.c", { htm: "GET", htu: "https://x/y", iatWindowSec: 0 })) === "auth-dpop/bad-iat-window");
2020
+ check("dpop.verify: non-finite iatWindowSec → auth-dpop/bad-iat-window",
2021
+ (await code("a.b.c", { htm: "GET", htu: "https://x/y", iatWindowSec: Infinity })) === "auth-dpop/bad-iat-window");
2022
+ check("dpop.verify: wrong dot-part count → auth-dpop/malformed",
2023
+ (await code("a.b", o)) === "auth-dpop/malformed");
2024
+ check("dpop.verify: header not base64url-JSON → auth-dpop/malformed",
2025
+ (await code(_dpopB64url("not json") + "." + _dpopB64url("{}") + ".AA", o)) === "auth-dpop/malformed");
2026
+ check("dpop.verify: payload not base64url-JSON → auth-dpop/malformed",
2027
+ (await code(_dpopB64url(JSON.stringify({ typ: "dpop+jwt", alg: "ES256", jwk: {} })) + "." +
2028
+ _dpopB64url("nope}") + ".AA", o)) === "auth-dpop/malformed");
2029
+ check("dpop.verify: header is JSON null (not object) → auth-dpop/malformed",
2030
+ (await code(_dpopB64url("null") + "." + _dpopB64url("{}") + ".AA", o)) === "auth-dpop/malformed");
2031
+ check("dpop.verify: payload is JSON null (not object) → auth-dpop/malformed",
2032
+ (await code(_dpopB64url(JSON.stringify({ typ: "dpop+jwt", alg: "ES256", jwk: {} })) + "." +
2033
+ _dpopB64url("null") + ".AA", o)) === "auth-dpop/malformed");
2034
+ }
2035
+
2036
+ async function testAuthDpopVerifyHeaderChecks() {
2037
+ var d = b.auth.dpop;
2038
+ var nodeCrypto = require("crypto");
2039
+ var ec = nodeCrypto.generateKeyPairSync("ec", { namedCurve: "prime256v1" });
2040
+ var pubJwk = ec.publicKey.export({ format: "jwk" });
2041
+ var o = { htm: "GET", htu: "https://x/y" };
2042
+ var payload = { jti: "j", htm: "GET", htu: "https://x/y", iat: Math.floor(Date.now() / 1000) };
2043
+ async function code(proof, opts) {
2044
+ try { await d.verify(proof, opts || o); return null; }
2045
+ catch (e) { return e && e.code; }
2046
+ }
2047
+
2048
+ check("dpop.verify: header.typ != dpop+jwt → auth-dpop/bad-typ",
2049
+ (await code(_dpopCraft({ typ: "JWT", alg: "ES256", jwk: pubJwk }, payload))) === "auth-dpop/bad-typ");
2050
+ check("dpop.verify: non-string header.alg → auth-dpop/malformed",
2051
+ (await code(_dpopCraft({ typ: "dpop+jwt", alg: 123, jwk: pubJwk }, payload))) === "auth-dpop/malformed");
2052
+ check("dpop.verify: token alg absent from allowlist → auth-dpop/alg-not-allowed",
2053
+ (await code(_dpopCraft({ typ: "dpop+jwt", alg: "ES384", jwk: pubJwk }, payload),
2054
+ { htm: "GET", htu: "https://x/y", algorithms: ["ES256"] })) === "auth-dpop/alg-not-allowed");
2055
+ check("dpop.verify: unsupported alg in opts.algorithms → auth-dpop/unsupported-alg",
2056
+ (await code("a.b.c", { htm: "GET", htu: "https://x/y", algorithms: ["FOO"] })) === "auth-dpop/unsupported-alg");
2057
+ check("dpop.verify: missing header.jwk → auth-dpop/missing-jwk",
2058
+ (await code(_dpopCraft({ typ: "dpop+jwt", alg: "ES256" }, payload))) === "auth-dpop/missing-jwk");
2059
+ check("dpop.verify: non-object header.jwk → auth-dpop/missing-jwk",
2060
+ (await code(_dpopCraft({ typ: "dpop+jwt", alg: "ES256", jwk: "nope" }, payload))) === "auth-dpop/missing-jwk");
2061
+ check("dpop.verify: 'crit' header declared → auth-dpop/unknown-crit",
2062
+ (await code(_dpopCraft({ typ: "dpop+jwt", alg: "ES256", jwk: pubJwk, crit: ["b64"] }, payload))) === "auth-dpop/unknown-crit");
2063
+ }
2064
+
2065
+ async function testAuthDpopVerifyBadSignature() {
2066
+ var d = b.auth.dpop;
2067
+ var nodeCrypto = require("crypto");
2068
+ var ec = nodeCrypto.generateKeyPairSync("ec", { namedCurve: "prime256v1" });
2069
+ var proof = await d.buildProof({ htm: "GET", htu: "https://x/y", privateKey: ec.privateKey });
2070
+ var parts = proof.split(".");
2071
+ // Flip a byte of the (validly base64url) signature → decodes fine, verifies
2072
+ // false → invalid-signature (NOT a base64url-decode malformed error).
2073
+ var sigBuf = Buffer.from(parts[2].replace(/-/g, "+").replace(/_/g, "/"), "base64");
2074
+ sigBuf[0] = sigBuf[0] ^ 0xff;
2075
+ parts[2] = sigBuf.toString("base64").replace(/=+$/g, "").replace(/\+/g, "-").replace(/\//g, "_");
2076
+ var threw = null;
2077
+ try { await d.verify(parts.join("."), { htm: "GET", htu: "https://x/y" }); }
2078
+ catch (e) { threw = e; }
2079
+ check("dpop.verify: tampered signature → auth-dpop/invalid-signature",
2080
+ threw && threw.code === "auth-dpop/invalid-signature");
2081
+ }
2082
+
2083
+ async function testAuthDpopVerifyPayloadChecks() {
2084
+ var d = b.auth.dpop;
2085
+ var nodeCrypto = require("crypto");
2086
+ var ec = nodeCrypto.generateKeyPairSync("ec", { namedCurve: "prime256v1" });
2087
+ var hdr = { typ: "dpop+jwt", alg: "ES256", jwk: ec.publicKey.export({ format: "jwk" }) };
2088
+ var now = Math.floor(Date.now() / 1000);
2089
+ var o = { htm: "GET", htu: "https://x/y" };
2090
+ async function code(payload, opts) {
2091
+ try { await d.verify(_dpopSignES256(ec.privateKey, hdr, payload), opts || o); return null; }
2092
+ catch (e) { return e && e.code; }
2093
+ }
2094
+
2095
+ check("dpop.verify: missing payload.jti → auth-dpop/missing-jti",
2096
+ (await code({ htm: "GET", htu: "https://x/y", iat: now })) === "auth-dpop/missing-jti");
2097
+ check("dpop.verify: missing payload.htm → auth-dpop/bad-htm",
2098
+ (await code({ jti: "j", htu: "https://x/y", iat: now })) === "auth-dpop/bad-htm");
2099
+ check("dpop.verify: missing payload.htu → auth-dpop/bad-htu",
2100
+ (await code({ jti: "j", htm: "GET", iat: now })) === "auth-dpop/bad-htu");
2101
+ check("dpop.verify: non-number payload.iat → auth-dpop/bad-iat",
2102
+ (await code({ jti: "j", htm: "GET", htu: "https://x/y", iat: "soon" })) === "auth-dpop/bad-iat");
2103
+ }
2104
+
2105
+ async function testAuthDpopNonceBinding() {
2106
+ var d = b.auth.dpop;
2107
+ var nodeCrypto = require("crypto");
2108
+ var ec = nodeCrypto.generateKeyPairSync("ec", { namedCurve: "prime256v1" });
2109
+
2110
+ var withNonce = await d.buildProof({
2111
+ htm: "GET", htu: "https://x/y", privateKey: ec.privateKey, nonce: "srv-nonce-1",
2112
+ });
2113
+ var ok = await d.verify(withNonce, { htm: "GET", htu: "https://x/y", nonce: "srv-nonce-1" });
2114
+ check("dpop.verify: matching nonce accepted", ok.payload.nonce === "srv-nonce-1");
2115
+
2116
+ var threwMis = null;
2117
+ try { await d.verify(withNonce, { htm: "GET", htu: "https://x/y", nonce: "srv-nonce-2" }); }
2118
+ catch (e) { threwMis = e; }
2119
+ check("dpop.verify: nonce mismatch → auth-dpop/nonce-mismatch",
2120
+ threwMis && threwMis.code === "auth-dpop/nonce-mismatch");
2121
+
2122
+ var noNonce = await d.buildProof({ htm: "GET", htu: "https://x/y", privateKey: ec.privateKey });
2123
+ var threwMissing = null;
2124
+ try { await d.verify(noNonce, { htm: "GET", htu: "https://x/y", nonce: "srv-nonce-1" }); }
2125
+ catch (e) { threwMissing = e; }
2126
+ check("dpop.verify: expected nonce absent from proof → auth-dpop/missing-nonce",
2127
+ threwMissing && threwMissing.code === "auth-dpop/missing-nonce");
2128
+ }
2129
+
2130
+ async function testAuthDpopVerifyBadReplayStore() {
2131
+ var d = b.auth.dpop;
2132
+ var nodeCrypto = require("crypto");
2133
+ var ec = nodeCrypto.generateKeyPairSync("ec", { namedCurve: "prime256v1" });
2134
+ var proof = await d.buildProof({ htm: "GET", htu: "https://x/y", privateKey: ec.privateKey });
2135
+ var threw = null;
2136
+ // An object lacking checkAndInsert must be refused at the opts tier, not
2137
+ // silently skip replay defense.
2138
+ try { await d.verify(proof, { htm: "GET", htu: "https://x/y", replayStore: {} }); }
2139
+ catch (e) { threw = e; }
2140
+ check("dpop.verify: replayStore without checkAndInsert → auth-dpop/bad-replay-store",
2141
+ threw && threw.code === "auth-dpop/bad-replay-store");
2142
+ }
2143
+
2144
+ async function testAuthDpopBuildProofValidation() {
2145
+ var d = b.auth.dpop;
2146
+ var nodeCrypto = require("crypto");
2147
+ var ec = nodeCrypto.generateKeyPairSync("ec", { namedCurve: "prime256v1" });
2148
+ async function code(opts) {
2149
+ try { await d.buildProof(opts); return null; }
2150
+ catch (e) { return e && e.code; }
2151
+ }
2152
+
2153
+ check("dpop.buildProof: omitted htm → auth-dpop/bad-htm",
2154
+ (await code({ htu: "https://x/y", privateKey: ec.privateKey })) === "auth-dpop/bad-htm");
2155
+ check("dpop.buildProof: omitted htu → auth-dpop/bad-htu",
2156
+ (await code({ htm: "GET", privateKey: ec.privateKey })) === "auth-dpop/bad-htu");
2157
+ check("dpop.buildProof: omitted privateKey → auth-dpop/missing-private-key",
2158
+ (await code({ htm: "GET", htu: "https://x/y" })) === "auth-dpop/missing-private-key");
2159
+ check("dpop.buildProof: unparseable PEM → auth-dpop/bad-private-key",
2160
+ (await code({ htm: "GET", htu: "https://x/y",
2161
+ privateKey: "-----BEGIN PRIVATE KEY-----\nnope\n-----END PRIVATE KEY-----" })) === "auth-dpop/bad-private-key");
2162
+ check("dpop.buildProof: wrong-type privateKey → auth-dpop/bad-private-key",
2163
+ (await code({ htm: "GET", htu: "https://x/y", privateKey: 12345 })) === "auth-dpop/bad-private-key");
2164
+ check("dpop.buildProof: unsupported algorithm → auth-dpop/unsupported-alg",
2165
+ (await code({ htm: "GET", htu: "https://x/y", privateKey: ec.privateKey, algorithm: "FOO" })) === "auth-dpop/unsupported-alg");
2166
+ check("dpop.buildProof: non-http(s) htu scheme → auth-dpop/bad-htu",
2167
+ (await code({ htm: "GET", htu: "ftp://host/path", privateKey: ec.privateKey })) === "auth-dpop/bad-htu");
2168
+ check("dpop.buildProof: explicit jwk with refused kty → auth-dpop/refused-kty",
2169
+ (await code({ htm: "GET", htu: "https://x/y", privateKey: ec.privateKey,
2170
+ jwk: { kty: "oct", k: "AAAA" } })) === "auth-dpop/refused-kty");
2171
+ }
2172
+
2173
+ function testAuthDpopThumbprintErrors() {
2174
+ var d = b.auth.dpop;
2175
+ function code(jwkVal) {
2176
+ try { d.thumbprint(jwkVal); return null; }
2177
+ catch (e) { return e && e.code; }
2178
+ }
2179
+ check("dpop.thumbprint: null → auth-dpop/bad-jwk", code(null) === "auth-dpop/bad-jwk");
2180
+ check("dpop.thumbprint: non-object → auth-dpop/bad-jwk", code("nope") === "auth-dpop/bad-jwk");
2181
+ check("dpop.thumbprint: missing kty → auth-dpop/bad-jwk", code({ x: "y" }) === "auth-dpop/bad-jwk");
2182
+ check("dpop.thumbprint: symmetric oct kty refused → auth-dpop/refused-kty",
2183
+ code({ kty: "oct", k: "AAAA" }) === "auth-dpop/refused-kty");
2184
+ }
2185
+
1969
2186
  // ---- AAL — NIST SP 800-63-4 authentication assurance levels ----
1970
2187
 
1971
2188
  function testAuthAalSurface() {
@@ -6061,6 +6278,34 @@ async function testBackupBundlePathTraversalRejected() {
6061
6278
  });
6062
6279
  } catch (e) { threw = e; }
6063
6280
  check("absolute path in relativePath rejected", threw && threw.code === "backup-bundle/bad-include");
6281
+
6282
+ // A Windows drive-letter prefix is absolute (path.resolve honors it) and a
6283
+ // colon anywhere is also an NTFS alternate-data-stream marker -- both must
6284
+ // be refused so a relativePath built from untrusted input can't read a file
6285
+ // outside dataDir. Sibling of the manifest.validate / restore-sink checks.
6286
+ threw = null;
6287
+ try {
6288
+ await b.backupBundle.create({
6289
+ dataDir: fx.dataDir,
6290
+ outDir: path.join(fx.root, "bundle3"),
6291
+ passphrase: Buffer.from("p"),
6292
+ vaultKeyJson: "{}",
6293
+ files: [{ relativePath: "C:" + "\\" + "Windows" + "\\" + "evil", kind: "raw", required: true }],
6294
+ });
6295
+ } catch (e) { threw = e; }
6296
+ check("drive-letter path in relativePath rejected", threw && threw.code === "backup-bundle/bad-include");
6297
+
6298
+ threw = null;
6299
+ try {
6300
+ await b.backupBundle.create({
6301
+ dataDir: fx.dataDir,
6302
+ outDir: path.join(fx.root, "bundle4"),
6303
+ passphrase: Buffer.from("p"),
6304
+ vaultKeyJson: "{}",
6305
+ files: [{ relativePath: "db.enc:evil", kind: "raw", required: true }],
6306
+ });
6307
+ } catch (e) { threw = e; }
6308
+ check("NTFS-ADS (colon) in relativePath rejected", threw && threw.code === "backup-bundle/bad-include");
6064
6309
  } finally { fx.cleanup(); }
6065
6310
  }
6066
6311
 
@@ -11423,6 +11668,101 @@ async function testDevDebouncesBurstOfEventsToOneRestart() {
11423
11668
  await d.stop();
11424
11669
  }
11425
11670
 
11671
+ async function testDevStopSettlesAfterSpawnError() {
11672
+ // A command that cannot be spawned (ENOENT) emits 'error' + 'close' but
11673
+ // NEVER 'exit', and kill() returns false (no live OS process). stop() must
11674
+ // still settle so the supervisor can shut down — otherwise a ref'd
11675
+ // keep-alive in the CLI would hang and a single Ctrl-C could not terminate.
11676
+ function makeSpawnErrorChild() {
11677
+ var listeners = {};
11678
+ return {
11679
+ pid: undefined,
11680
+ kill: function () { return false; }, // no live process to signal
11681
+ on: function (ev, cb) { (listeners[ev] = listeners[ev] || []).push(cb); return this; },
11682
+ once: function (ev, cb) {
11683
+ var wrap = function (a, b) {
11684
+ listeners[ev] = (listeners[ev] || []).filter(function (x) { return x !== wrap; });
11685
+ cb(a, b);
11686
+ };
11687
+ return this.on(ev, wrap);
11688
+ },
11689
+ _emit: function (ev, a, b) { (listeners[ev] || []).slice().forEach(function (cb) { cb(a, b); }); },
11690
+ };
11691
+ }
11692
+ var errChild = makeSpawnErrorChild();
11693
+ var d = b.dev.create({
11694
+ command: "does-not-exist",
11695
+ cwd: "/repo",
11696
+ _spawn: function () { return errChild; },
11697
+ _watch: function () { return { on: function () { return this; }, close: function () {} }; },
11698
+ _setTimeout: function () { return { unref: function () { return this; } }; }, // never fires
11699
+ _clearTimeout: function () {},
11700
+ });
11701
+ await d.start();
11702
+ // Simulate the spawn failure: 'error' then 'close', no 'exit'.
11703
+ errChild._emit("error", Object.assign(new Error("spawn does-not-exist ENOENT"), { code: "ENOENT" }));
11704
+ errChild._emit("close", null, null);
11705
+
11706
+ var settled = false;
11707
+ d.stop().then(function () { settled = true; }, function () { settled = true; });
11708
+ await new Promise(function (r) { setImmediate(r); });
11709
+ await new Promise(function (r) { setImmediate(r); });
11710
+ check("dev.stop() settles after a spawn-error child (no 'exit' event)", settled === true);
11711
+ }
11712
+
11713
+ async function testDevStopWaitsForLiveChildKillFailure() {
11714
+ // A LIVE child (has a pid) whose kill() fails — the signal was not
11715
+ // delivered, e.g. EPERM after the child changed credentials — must NOT
11716
+ // settle stop() immediately: the process may still be running. stop()
11717
+ // completes only when an exit/close actually arrives, never on a false
11718
+ // kill() return alone (which would falsely report termination).
11719
+ function makeLiveUnkillableChild() {
11720
+ var listeners = {};
11721
+ return {
11722
+ pid: 4242, // a real, live process
11723
+ kill: function () { return false; }, // signal not delivered (EPERM)
11724
+ on: function (ev, cb) { (listeners[ev] = listeners[ev] || []).push(cb); return this; },
11725
+ once: function (ev, cb) {
11726
+ var wrap = function (a, b) {
11727
+ listeners[ev] = (listeners[ev] || []).filter(function (x) { return x !== wrap; });
11728
+ cb(a, b);
11729
+ };
11730
+ return this.on(ev, wrap);
11731
+ },
11732
+ _emit: function (ev, a, b) { (listeners[ev] || []).slice().forEach(function (cb) { cb(a, b); }); },
11733
+ };
11734
+ }
11735
+ var live = makeLiveUnkillableChild();
11736
+ var d = b.dev.create({
11737
+ command: "x",
11738
+ cwd: "/repo",
11739
+ _spawn: function () { return live; },
11740
+ _watch: function () { return { on: function () { return this; }, close: function () {} }; },
11741
+ _setTimeout: function () { return { unref: function () { return this; } }; }, // killTimer never fires
11742
+ _clearTimeout: function () {},
11743
+ });
11744
+ await d.start();
11745
+
11746
+ var settled = false;
11747
+ d.stop().then(function () { settled = true; }, function () { settled = true; });
11748
+ await new Promise(function (r) { setImmediate(r); });
11749
+ await new Promise(function (r) { setImmediate(r); });
11750
+ check("dev.stop() does NOT settle while a live child's kill was rejected (no exit yet)", settled === false);
11751
+
11752
+ // A kill 'error' on a STILL-LIVE child (EPERM) must not complete shutdown
11753
+ // either — the process is still running.
11754
+ live._emit("error", Object.assign(new Error("kill EPERM"), { code: "EPERM" }));
11755
+ await new Promise(function (r) { setImmediate(r); });
11756
+ await new Promise(function (r) { setImmediate(r); });
11757
+ check("dev.stop() does NOT settle on an 'error' from a still-live child", settled === false);
11758
+
11759
+ // Only a real exit completes it.
11760
+ live._emit("exit", 0, null);
11761
+ await new Promise(function (r) { setImmediate(r); });
11762
+ await new Promise(function (r) { setImmediate(r); });
11763
+ check("dev.stop() settles once the live child finally exits", settled === true);
11764
+ }
11765
+
11426
11766
  async function testDevIgnoresMatchingPaths() {
11427
11767
  var h = _makeDevHarness();
11428
11768
  var d = b.dev.create({
@@ -14561,6 +14901,245 @@ function testEnvParseSecurityRejections() {
14561
14901
  check("env: unterminated quoted rejected", threwUnterm);
14562
14902
  }
14563
14903
 
14904
+ function testEnvParseQuotingAndEscapes() {
14905
+ var env = b.parsers.env;
14906
+
14907
+ // Double-quoted escape sequences decode individually.
14908
+ check("env: \\t escape decodes to tab", env.parse('K="a\\tb"').K === "a\tb");
14909
+ check("env: \\r escape decodes to CR", env.parse('K="a\\rb"').K === "a\rb");
14910
+ check("env: \\\\ escape decodes to \\", env.parse('K="a\\\\b"').K === "a\\b");
14911
+ check("env: \\\" escape decodes to quote", env.parse('K="a\\"b"').K === 'a"b');
14912
+
14913
+ // \u unicode escape decodes; malformed hex is a typed refusal.
14914
+ check("env: \\u escape decodes", env.parse('U="\\u0041\\u0042"').U === "AB");
14915
+ var threwBadU = false;
14916
+ try { env.parse('K="\\uZZZZ"'); }
14917
+ catch (e) { threwBadU = e.code === "env/bad-escape"; }
14918
+ check("env: bad \\u escape rejected", threwBadU);
14919
+
14920
+ // Unknown backslash escape is a typed refusal (not silently swallowed).
14921
+ var threwUnknownEsc = false;
14922
+ try { env.parse('K="\\q"'); }
14923
+ catch (e) { threwUnknownEsc = e.code === "env/bad-escape"; }
14924
+ check("env: unknown escape rejected", threwUnknownEsc);
14925
+
14926
+ // Single-quoted values are fully literal — an unterminated one refuses.
14927
+ var threwSingleUnterm = false;
14928
+ try { env.parse("K='abc"); }
14929
+ catch (e) { threwSingleUnterm = e.code === "env/unterminated-string"; }
14930
+ check("env: unterminated single-quote rejected", threwSingleUnterm);
14931
+
14932
+ // A comment after a closing double-quote is ignored.
14933
+ check("env: comment after closing quote ignored", env.parse('K="v" # trailing').K === "v");
14934
+
14935
+ // A '#' NOT preceded by whitespace is a literal part of the value.
14936
+ check("env: '#' without leading space kept literal", env.parse("K=color#red").K === "color#red");
14937
+
14938
+ // A real tab INSIDE a quoted value is fine (only a tab starting an
14939
+ // unquoted value is the paste-accident we reject).
14940
+ check("env: tab inside double-quote preserved", env.parse('K="a\tb"').K === "a\tb");
14941
+
14942
+ // A trailing '$' with no name after it is a literal, not an expansion.
14943
+ check("env: trailing '$' is literal", env.parse("K=abc$").K === "abc$");
14944
+
14945
+ // ${VAR} in a double-quoted value is refused (brace form).
14946
+ var threwBraceDq = false;
14947
+ try { env.parse('K="${HOME}"'); }
14948
+ catch (e) { threwBraceDq = e.code === "env/expansion-banned"; }
14949
+ check("env: ${VAR} in double-quote rejected", threwBraceDq);
14950
+ }
14951
+
14952
+ function testEnvParseStructureAndKeys() {
14953
+ var env = b.parsers.env;
14954
+
14955
+ // CRLF and lone-CR line endings both split into records.
14956
+ var crlf = env.parse("A=1\r\nB=2");
14957
+ check("env: CRLF line endings", crlf.A === "1" && crlf.B === "2");
14958
+ var cr = env.parse("A=1\rB=2");
14959
+ check("env: lone-CR line endings", cr.A === "1" && cr.B === "2");
14960
+
14961
+ // A leading BOM is stripped before parsing.
14962
+ check("env: leading BOM stripped", env.parse("A=1").A === "1");
14963
+
14964
+ // Empty key ('=value' with no key) is a typed refusal.
14965
+ var threwEmptyKey = false;
14966
+ try { env.parse("=value"); }
14967
+ catch (e) { threwEmptyKey = e.code === "env/empty-key"; }
14968
+ check("env: empty key rejected", threwEmptyKey);
14969
+
14970
+ // keyShape override lets an operator opt into lowercase keys.
14971
+ check("env: keyShape override accepts lowercase",
14972
+ env.parse("lower_key=v", { keyShape: /^[a-z_]+$/ }).lower_key === "v");
14973
+
14974
+ // Even with a permissive keyShape, a poisoned key is refused at the
14975
+ // dedicated guard (the pollution defense is not keyShape-dependent).
14976
+ var threwPoisoned = false;
14977
+ try { env.parse("__proto__=x", { keyShape: /^[a-z_]+$/ }); }
14978
+ catch (e) { threwPoisoned = e.code === "env/poisoned-key"; }
14979
+ check("env: poisoned key refused regardless of keyShape", threwPoisoned);
14980
+
14981
+ // ${VAR} expansion in an unquoted value is refused (brace form).
14982
+ var threwBrace = false;
14983
+ try { env.parse("K=${HOME}"); }
14984
+ catch (e) { threwBrace = e.code === "env/expansion-banned"; }
14985
+ check("env: ${VAR} unquoted rejected", threwBrace);
14986
+
14987
+ // maxKeys cap is enforced (DoS bound).
14988
+ var threwManyKeys = false;
14989
+ try { env.parse("A=1\nB=2\nC=3", { maxKeys: 2 }); }
14990
+ catch (e) { threwManyKeys = e.code === "env/too-many-keys"; }
14991
+ check("env: maxKeys enforced", threwManyKeys);
14992
+
14993
+ // Non-positive / non-integer / non-finite numeric opts are refused up
14994
+ // front — they must not silently lift the DoS caps they configure.
14995
+ var badOpts = [
14996
+ { maxBytes: -5 }, { maxBytes: 1.5 }, { maxBytes: Infinity },
14997
+ { maxBytes: NaN }, { maxKeys: 0 }, { maxKeys: Infinity },
14998
+ ];
14999
+ var allBadOptsRejected = badOpts.every(function (o) {
15000
+ try { env.parse("A=1", o); return false; }
15001
+ catch (e) { return e.code === "env/bad-opt"; }
15002
+ });
15003
+ check("env: invalid numeric opts rejected as env/bad-opt", allBadOptsRejected);
15004
+ }
15005
+
15006
+ function testEnvReadVarEdgeCases() {
15007
+ var env = b.parsers.env;
15008
+
15009
+ // Non-string / empty name is a typed refusal.
15010
+ var threwNonStr = false;
15011
+ try { env.readVar(123); }
15012
+ catch (e) { threwNonStr = e.code === "env/bad-arg"; }
15013
+ check("readVar: non-string name rejected", threwNonStr);
15014
+ var threwEmptyName = false;
15015
+ try { env.readVar(""); }
15016
+ catch (e) { threwEmptyName = e.code === "env/bad-arg"; }
15017
+ check("readVar: empty name rejected", threwEmptyName);
15018
+
15019
+ // Invalid maxBytes opt refused before any read.
15020
+ var threwBadOpt = false;
15021
+ try { env.readVar("BLAMEJS_TEST_EV1", { maxBytes: 0 }); }
15022
+ catch (e) { threwBadOpt = e.code === "env/bad-opt"; }
15023
+ check("readVar: invalid maxBytes rejected", threwBadOpt);
15024
+
15025
+ var KEYS = ["BLAMEJS_TEST_EV1", "BLAMEJS_TEST_EV2", "BLAMEJS_TEST_EV3", "BLAMEJS_TEST_EV4"];
15026
+ var saved = {};
15027
+ for (var i = 0; i < KEYS.length; i++) { saved[KEYS[i]] = process.env[KEYS[i]]; delete process.env[KEYS[i]]; }
15028
+
15029
+ try {
15030
+ // type:json coerces a valid JSON value.
15031
+ process.env.BLAMEJS_TEST_EV1 = '{"a":1,"b":true}';
15032
+ var parsed = env.readVar("BLAMEJS_TEST_EV1", { type: "json" });
15033
+ check("readVar: json coercion", parsed && parsed.a === 1 && parsed.b === true);
15034
+
15035
+ // type:json on garbage is a typed refusal (not an uncaught crash).
15036
+ process.env.BLAMEJS_TEST_EV2 = "not json";
15037
+ var threwBadJson = false;
15038
+ try { env.readVar("BLAMEJS_TEST_EV2", { type: "json" }); }
15039
+ catch (e) { threwBadJson = e.code === "env/bad-type"; }
15040
+ check("readVar: invalid json rejected", threwBadJson);
15041
+
15042
+ // Unknown schema type is a typed refusal.
15043
+ process.env.BLAMEJS_TEST_EV3 = "v";
15044
+ var threwUnknownType = false;
15045
+ try { env.readVar("BLAMEJS_TEST_EV3", { type: "frobnicate" }); }
15046
+ catch (e) { threwUnknownType = e.code === "env/bad-schema"; }
15047
+ check("readVar: unknown type rejected", threwUnknownType);
15048
+
15049
+ // type:number on a non-number is a typed refusal.
15050
+ process.env.BLAMEJS_TEST_EV4 = "notnum";
15051
+ var threwBadNum = false;
15052
+ try { env.readVar("BLAMEJS_TEST_EV4", { type: "number" }); }
15053
+ catch (e) { threwBadNum = e.code === "env/bad-type"; }
15054
+ check("readVar: non-number rejected", threwBadNum);
15055
+ } finally {
15056
+ for (var j = 0; j < KEYS.length; j++) {
15057
+ if (saved[KEYS[j]] === undefined) delete process.env[KEYS[j]];
15058
+ else process.env[KEYS[j]] = saved[KEYS[j]];
15059
+ }
15060
+ }
15061
+ }
15062
+
15063
+ function testEnvLoad() {
15064
+ var env = b.parsers.env;
15065
+
15066
+ // Non-string path is a typed refusal.
15067
+ var threwBadArg = false;
15068
+ try { env.load(123); }
15069
+ catch (e) { threwBadArg = e.code === "env/bad-arg"; }
15070
+ check("env.load: non-string path rejected", threwBadArg);
15071
+
15072
+ var dir = fs.mkdtempSync(path.join(os.tmpdir(), "blamejs-env-load-"));
15073
+ try {
15074
+ // Happy path: schema-driven coercion + defaults + unregistered
15075
+ // passthrough. audit:false keeps the load pure (no audit chain).
15076
+ var f1 = path.join(dir, "a.env");
15077
+ fs.writeFileSync(f1, "PORT=8080\nDEBUG=true\nCONF={\"x\":1}\nEMPTYNUM=\nEXTRA=raw\n");
15078
+ var r1 = env.load(f1, {
15079
+ audit: false,
15080
+ expected: {
15081
+ PORT: { type: "number" },
15082
+ DEBUG: { type: "boolean" },
15083
+ CONF: { type: "json" },
15084
+ EMPTYNUM: { type: "number" },
15085
+ MISSING_DEF: { type: "string", default: "fallback" },
15086
+ },
15087
+ });
15088
+ check("env.load: number coercion", r1.values.PORT === 8080);
15089
+ check("env.load: boolean coercion", r1.values.DEBUG === true);
15090
+ check("env.load: json coercion", r1.values.CONF && r1.values.CONF.x === 1);
15091
+ check("env.load: empty number → null", r1.values.EMPTYNUM === null);
15092
+ check("env.load: absent key uses default", r1.values.MISSING_DEF === "fallback");
15093
+ check("env.load: unregistered key passed through raw", r1.values.EXTRA === "raw");
15094
+
15095
+ // Missing required key is a typed refusal.
15096
+ var f2 = path.join(dir, "b.env");
15097
+ fs.writeFileSync(f2, "PORT=1\n");
15098
+ var threwMissing = false;
15099
+ try { env.load(f2, { audit: false, expected: { NEEDED: { type: "string", required: true } } }); }
15100
+ catch (e) { threwMissing = e.code === "env/missing-required"; }
15101
+ check("env.load: missing required rejected", threwMissing);
15102
+
15103
+ // A sensitivity:'breaking' change against the snapshot refuses unless
15104
+ // acknowledged via { allow: [...] }.
15105
+ var f3 = path.join(dir, "c.env");
15106
+ fs.writeFileSync(f3, "APP_MODE=new\n");
15107
+ var snap = path.join(dir, "snap.json");
15108
+ fs.writeFileSync(snap, JSON.stringify({ APP_MODE: "old" }));
15109
+ var threwBreaking = false;
15110
+ try {
15111
+ env.load(f3, { audit: false, snapshotPath: snap,
15112
+ expected: { APP_MODE: { sensitivity: "breaking" } } });
15113
+ } catch (e) { threwBreaking = e.code === "env/breaking-change"; }
15114
+ check("env.load: unacknowledged breaking change rejected", threwBreaking);
15115
+
15116
+ fs.writeFileSync(snap, JSON.stringify({ APP_MODE: "old" }));
15117
+ var r3 = env.load(f3, { audit: false, snapshotPath: snap, allow: ["APP_MODE"],
15118
+ expected: { APP_MODE: { sensitivity: "breaking" } } });
15119
+ check("env.load: acknowledged breaking change accepted", r3.values.APP_MODE === "new");
15120
+ check("env.load: breaking change surfaced in diff",
15121
+ r3.diff.changed.length === 1 && r3.diff.changed[0].key === "APP_MODE");
15122
+
15123
+ // rejectUnknown refuses when an unregistered key is present.
15124
+ var f4 = path.join(dir, "d.env");
15125
+ fs.writeFileSync(f4, "KNOWN=1\nUNKNOWN_KEY=2\n");
15126
+ var threwUnknownKeys = false;
15127
+ try { env.load(f4, { audit: false, rejectUnknown: true, expected: { KNOWN: { type: "number" } } }); }
15128
+ catch (e) { threwUnknownKeys = e.code === "env/unknown-keys"; }
15129
+ check("env.load: rejectUnknown refuses unregistered key", threwUnknownKeys);
15130
+
15131
+ // A near-miss key surfaces as a suspicious typo suggestion.
15132
+ var f5 = path.join(dir, "e.env");
15133
+ fs.writeFileSync(f5, "DATABASE_UR=x\n");
15134
+ var r5 = env.load(f5, { audit: false, expected: { DATABASE_URL: { type: "string" } } });
15135
+ check("env.load: typo surfaced as suspicious",
15136
+ r5.diff.suspicious.length === 1 &&
15137
+ r5.diff.suspicious[0].suggestion === "DATABASE_URL");
15138
+ } finally {
15139
+ fs.rmSync(dir, { recursive: true, force: true });
15140
+ }
15141
+ }
15142
+
14564
15143
  function testBufferSafeNormalizeText() {
14565
15144
  var bs = b.safeBuffer;
14566
15145
  check("safeBuffer.normalizeText is a function", typeof bs.normalizeText === "function");
@@ -18827,6 +19406,8 @@ async function run() {
18827
19406
  await testDevRestartCoalescesQueuedRestart();
18828
19407
  await testDevStopKillsAndDisarms();
18829
19408
  await testDevUnexpectedExitDoesNotRespawn();
19409
+ await testDevStopSettlesAfterSpawnError();
19410
+ await testDevStopWaitsForLiveChildKillFailure();
18830
19411
  // cli — `blamejs <cmd>` dispatch + migrate subcommand
18831
19412
  testCliSurface();
18832
19413
  testCliArgParser();
@@ -18950,6 +19531,14 @@ async function run() {
18950
19531
  await testAuthDpopJwkPrivateLeakRefused();
18951
19532
  await testAuthDpopThumbprint();
18952
19533
  await testAuthDpopPqcMlDsa();
19534
+ await testAuthDpopVerifyMalformedInputs();
19535
+ await testAuthDpopVerifyHeaderChecks();
19536
+ await testAuthDpopVerifyBadSignature();
19537
+ await testAuthDpopVerifyPayloadChecks();
19538
+ await testAuthDpopNonceBinding();
19539
+ await testAuthDpopVerifyBadReplayStore();
19540
+ await testAuthDpopBuildProofValidation();
19541
+ testAuthDpopThumbprintErrors();
18953
19542
  testAuthAalSurface();
18954
19543
  testAuthAalFromMethods();
18955
19544
  testAuthAalMeets();
@@ -19099,7 +19688,11 @@ async function run() {
19099
19688
  testYamlSecurityRejections();
19100
19689
  testEnvParseBasic();
19101
19690
  testEnvParseSecurityRejections();
19691
+ testEnvParseQuotingAndEscapes();
19692
+ testEnvParseStructureAndKeys();
19102
19693
  testEnvReadVar();
19694
+ testEnvReadVarEdgeCases();
19695
+ testEnvLoad();
19103
19696
  // redact primitive
19104
19697
  testRedact();
19105
19698
  testAuditSafeEmitRedacts();
@@ -19213,6 +19806,14 @@ module.exports = {
19213
19806
  testAuthDpopJwkPrivateLeakRefused: testAuthDpopJwkPrivateLeakRefused,
19214
19807
  testAuthDpopThumbprint: testAuthDpopThumbprint,
19215
19808
  testAuthDpopPqcMlDsa: testAuthDpopPqcMlDsa,
19809
+ testAuthDpopVerifyMalformedInputs: testAuthDpopVerifyMalformedInputs,
19810
+ testAuthDpopVerifyHeaderChecks: testAuthDpopVerifyHeaderChecks,
19811
+ testAuthDpopVerifyBadSignature: testAuthDpopVerifyBadSignature,
19812
+ testAuthDpopVerifyPayloadChecks: testAuthDpopVerifyPayloadChecks,
19813
+ testAuthDpopNonceBinding: testAuthDpopNonceBinding,
19814
+ testAuthDpopVerifyBadReplayStore: testAuthDpopVerifyBadReplayStore,
19815
+ testAuthDpopBuildProofValidation: testAuthDpopBuildProofValidation,
19816
+ testAuthDpopThumbprintErrors: testAuthDpopThumbprintErrors,
19216
19817
  testAuthAalSurface: testAuthAalSurface,
19217
19818
  testAuthAalFromMethods: testAuthAalFromMethods,
19218
19819
  testAuthAalMeets: testAuthAalMeets,
@@ -19691,7 +20292,11 @@ module.exports = {
19691
20292
  testYamlSecurityRejections: testYamlSecurityRejections,
19692
20293
  testEnvParseBasic: testEnvParseBasic,
19693
20294
  testEnvParseSecurityRejections: testEnvParseSecurityRejections,
20295
+ testEnvParseQuotingAndEscapes: testEnvParseQuotingAndEscapes,
20296
+ testEnvParseStructureAndKeys: testEnvParseStructureAndKeys,
19694
20297
  testEnvReadVar: testEnvReadVar,
20298
+ testEnvReadVarEdgeCases: testEnvReadVarEdgeCases,
20299
+ testEnvLoad: testEnvLoad,
19695
20300
  testRedact: testRedact,
19696
20301
  testAuditSafeEmitRedacts: testAuditSafeEmitRedacts,
19697
20302