@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
@@ -25,6 +25,16 @@ Used for: XChaCha20-Poly1305 authenticated encryption (lib/crypto.js,
25
25
  lib/vault-wrap.js, via lib/vendor/noble-ciphers.cjs).
26
26
  Thank you to Paul Miller for the audited noble-ciphers suite.
27
27
  --------------------------------------------------------------------------------
28
+ Component: @noble/curves
29
+ Version: 2.2.0
30
+ Source: https://github.com/paulmillr/noble-curves
31
+ License: MIT
32
+ Copyright: Copyright (c) 2022 Paul Miller (https://paulmillr.com)
33
+ Used for: RFC 9497 Oblivious Pseudo-Random Function (OPRF / VOPRF / POPRF)
34
+ over ristretto255 / P-256 / P-384 / P-521 (lib/crypto-oprf.js,
35
+ via lib/vendor/noble-curves.cjs). Thank you to Paul Miller for the
36
+ audited noble-curves suite.
37
+ --------------------------------------------------------------------------------
28
38
  Component: @noble/post-quantum
29
39
  Version: 0.6.1
30
40
  Source: https://github.com/paulmillr/noble-post-quantum
@@ -41,7 +51,7 @@ Used for: FIPS 203 ML-KEM (ml_kem_512 / ml_kem_768 / ml_kem_1024),
41
51
  reference implementation.
42
52
  --------------------------------------------------------------------------------
43
53
  Component: @simplewebauthn/server
44
- Version: 13.3.0
54
+ Version: 13.3.2
45
55
  Source: https://github.com/MasterKale/SimpleWebAuthn
46
56
  License: MIT
47
57
  Copyright: Copyright (c) Matthew Miller
@@ -79,3 +89,18 @@ Used for: Top-10000 most-common (breach-derived) passwords. Loaded by
79
89
  project maintainers for keeping a curated, freely-redistributable
80
90
  baseline.
81
91
  --------------------------------------------------------------------------------
92
+ Component: publicsuffix-list (Mozilla Public Suffix List)
93
+ Version: master snapshot (bundled 2026-07-24)
94
+ Source: https://publicsuffix.org/list/public_suffix_list.dat
95
+ License: MPL-2.0
96
+ Copyright: Copyright (c) Mozilla Foundation and Public Suffix List contributors
97
+ Used for: Canonical catalog of effective top-level domains. Loaded at module
98
+ init by b.publicSuffix to derive organizational domains for
99
+ DMARCbis (psd= / np=) alignment, BIMI issuer scoping, cookie-scope
100
+ confinement, and same-site policy (lib/public-suffix.js, via
101
+ lib/vendor/public-suffix-list.dat). This is data, not a code
102
+ bundle. The list is vendored verbatim and unmodified and remains
103
+ licensed under the Mozilla Public License 2.0; its complete source
104
+ is available at the canonical URL above, satisfying MPL-2.0 §3.2.
105
+ The full MPL-2.0 text is at https://www.mozilla.org/MPL/2.0/.
106
+ --------------------------------------------------------------------------------
@@ -203,7 +203,7 @@ What blamejs defends against, by design:
203
203
  - **Online brute-force against credentials** — `b.auth.lockout` tracks failed attempts per account (or any operator-chosen key) and engages an exponential-backoff lockout (1m → 5m → 15m → 1h → 6h+, clamped). State lives in `b.cache` so it shares across cluster nodes when the cluster backend is wired. Operator-driven `unlock(key, { req, reason })` audits with the admin's 5 W's. Backend errors fail open (the framework's job is to slow attackers, not to lock operators out of their own admin accounts when Redis dies).
204
204
  - **Inline-script injection** — strict CSP default (`script-src 'self' 'nonce-...'`) blocks anything an XSS payload could ship.
205
205
  - **Algorithm-substitution attacks** — every encrypted blob carries a 4-byte algorithm-ID header; `b.crypto.decrypt` dispatches on the header bytes, not on a guess at the active default. An attacker swapping a weaker algorithm into the envelope fails the AEAD tag check.
206
- - **Supply-chain compromise via npm transitive deps** — zero npm runtime dependencies. Every external library is vendored under `lib/vendor/` with a manifest pinning version + license + provenance. Build reproducibility is verified via the GHCR image's SLSA provenance attestation (see DEPLOY.md → "Release verification").
206
+ - **Supply-chain compromise via npm transitive deps** — zero npm runtime dependencies. Every external library is vendored under `lib/vendor/` as an unminified, reviewable bundle, with a manifest pinning version + license + provenance. Build reproducibility is verified via the GHCR image's SLSA provenance attestation (see DEPLOY.md → "Release verification").
207
207
  - **A published CVE in a vendored library going unnoticed** — because the crypto is vendored rather than installed, `npm audit` / Dependabot / Socket never see it. Every PR builds a CycloneDX SBOM of `lib/vendor/` (each library carries an npm purl) and runs it through OSV-Scanner, matching the exact pinned version against the OSV vulnerability database (CVE + GHSA). A match fails the build — the vendored copy is refreshed before merge. This runs alongside CodeQL (semantic SAST), a complementary Semgrep pass (registry security-audit + javascript packs at ERROR severity), gitleaks (secret scan over full history), and actionlint (workflow static analysis).
208
208
  - **Replay of API requests** — `apiEncrypt` middleware nonce-stores + replay-windows the `_ek` field; old session keys can't be reused.
209
209
  - **Error-detail leakage on an encrypted channel** — when `apiEncrypt` is active, terminal error responses (the error page, schema-validation refusals, RFC 9457 problem+json, deny-middleware bodies) are sealed in the same `{ _ct }` envelope as successes via `req.apiEncryptEncode`, so error detail (paths, field names, refusal reasons) doesn't ship in plaintext while the surrounding traffic is encrypted. Errors raised before a session exists (Bearer 401, handshake reject, replay refusal) stay plaintext so the caller can read them; the client opts into reading a non-2xx with `b.httpClient.encrypted({ responseMode: "passthrough" })` instead of throwing on the shape.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 1,
3
- "frameworkVersion": "0.16.3",
4
- "createdAt": "2026-07-03T20:45:25.445Z",
3
+ "frameworkVersion": "0.17.22",
4
+ "createdAt": "2026-07-25T13:46:32.462Z",
5
5
  "exports": {
6
6
  "a2a": {
7
7
  "type": "object",
@@ -2126,7 +2126,7 @@
2126
2126
  },
2127
2127
  "parseRaw": {
2128
2128
  "type": "function",
2129
- "arity": 1
2129
+ "arity": 2
2130
2130
  }
2131
2131
  }
2132
2132
  },
@@ -6827,6 +6827,127 @@
6827
6827
  "type": "instance",
6828
6828
  "ctorName": "RegExp"
6829
6829
  },
6830
+ "NAMED_ENTITY_ASCII": {
6831
+ "type": "object",
6832
+ "members": {
6833
+ "NewLine": {
6834
+ "type": "primitive",
6835
+ "valueType": "string"
6836
+ },
6837
+ "Tab": {
6838
+ "type": "primitive",
6839
+ "valueType": "string"
6840
+ },
6841
+ "amp": {
6842
+ "type": "primitive",
6843
+ "valueType": "string"
6844
+ },
6845
+ "apos": {
6846
+ "type": "primitive",
6847
+ "valueType": "string"
6848
+ },
6849
+ "ast": {
6850
+ "type": "primitive",
6851
+ "valueType": "string"
6852
+ },
6853
+ "bsol": {
6854
+ "type": "primitive",
6855
+ "valueType": "string"
6856
+ },
6857
+ "colon": {
6858
+ "type": "primitive",
6859
+ "valueType": "string"
6860
+ },
6861
+ "commat": {
6862
+ "type": "primitive",
6863
+ "valueType": "string"
6864
+ },
6865
+ "dollar": {
6866
+ "type": "primitive",
6867
+ "valueType": "string"
6868
+ },
6869
+ "excl": {
6870
+ "type": "primitive",
6871
+ "valueType": "string"
6872
+ },
6873
+ "gt": {
6874
+ "type": "primitive",
6875
+ "valueType": "string"
6876
+ },
6877
+ "hyphen": {
6878
+ "type": "primitive",
6879
+ "valueType": "string"
6880
+ },
6881
+ "lcub": {
6882
+ "type": "primitive",
6883
+ "valueType": "string"
6884
+ },
6885
+ "lowbar": {
6886
+ "type": "primitive",
6887
+ "valueType": "string"
6888
+ },
6889
+ "lpar": {
6890
+ "type": "primitive",
6891
+ "valueType": "string"
6892
+ },
6893
+ "lsqb": {
6894
+ "type": "primitive",
6895
+ "valueType": "string"
6896
+ },
6897
+ "lt": {
6898
+ "type": "primitive",
6899
+ "valueType": "string"
6900
+ },
6901
+ "nbsp": {
6902
+ "type": "primitive",
6903
+ "valueType": "string"
6904
+ },
6905
+ "num": {
6906
+ "type": "primitive",
6907
+ "valueType": "string"
6908
+ },
6909
+ "percnt": {
6910
+ "type": "primitive",
6911
+ "valueType": "string"
6912
+ },
6913
+ "period": {
6914
+ "type": "primitive",
6915
+ "valueType": "string"
6916
+ },
6917
+ "plus": {
6918
+ "type": "primitive",
6919
+ "valueType": "string"
6920
+ },
6921
+ "quest": {
6922
+ "type": "primitive",
6923
+ "valueType": "string"
6924
+ },
6925
+ "quot": {
6926
+ "type": "primitive",
6927
+ "valueType": "string"
6928
+ },
6929
+ "rcub": {
6930
+ "type": "primitive",
6931
+ "valueType": "string"
6932
+ },
6933
+ "rpar": {
6934
+ "type": "primitive",
6935
+ "valueType": "string"
6936
+ },
6937
+ "rsqb": {
6938
+ "type": "primitive",
6939
+ "valueType": "string"
6940
+ },
6941
+ "semi": {
6942
+ "type": "primitive",
6943
+ "valueType": "string"
6944
+ },
6945
+ "sol": {
6946
+ "type": "primitive",
6947
+ "valueType": "string"
6948
+ }
6949
+ }
6950
+ },
6830
6951
  "NULL_BYTE": {
6831
6952
  "type": "primitive",
6832
6953
  "valueType": "string"
@@ -6920,6 +7041,10 @@
6920
7041
  "type": "function",
6921
7042
  "arity": 1
6922
7043
  },
7044
+ "decodeMarkupEntities": {
7045
+ "type": "function",
7046
+ "arity": 1
7047
+ },
6923
7048
  "decodeNumericEntities": {
6924
7049
  "type": "function",
6925
7050
  "arity": 1
@@ -6963,6 +7088,10 @@
6963
7088
  "scriptFor": {
6964
7089
  "type": "function",
6965
7090
  "arity": 1
7091
+ },
7092
+ "stripUrlSchemeWhitespace": {
7093
+ "type": "function",
7094
+ "arity": 1
6966
7095
  }
6967
7096
  }
6968
7097
  },
@@ -14630,6 +14759,14 @@
14630
14759
  "type": "function",
14631
14760
  "arity": 2
14632
14761
  },
14762
+ "spkiPin": {
14763
+ "type": "function",
14764
+ "arity": 1
14765
+ },
14766
+ "spkiPinVerifier": {
14767
+ "type": "function",
14768
+ "arity": 1
14769
+ },
14633
14770
  "sri": {
14634
14771
  "type": "function",
14635
14772
  "arity": 2
@@ -15004,6 +15141,10 @@
15004
15141
  "type": "function",
15005
15142
  "arity": 1
15006
15143
  },
15144
+ "status": {
15145
+ "type": "function",
15146
+ "arity": 1
15147
+ },
15007
15148
  "stop": {
15008
15149
  "type": "function",
15009
15150
  "arity": 1
@@ -42369,7 +42510,7 @@
42369
42510
  "members": {
42370
42511
  "verify": {
42371
42512
  "type": "function",
42372
- "arity": 1
42513
+ "arity": 2
42373
42514
  }
42374
42515
  }
42375
42516
  },
@@ -49274,6 +49415,10 @@
49274
49415
  "type": "function",
49275
49416
  "arity": 2
49276
49417
  },
49418
+ "redactText": {
49419
+ "type": "function",
49420
+ "arity": 1
49421
+ },
49277
49422
  "registerFieldRule": {
49278
49423
  "type": "function",
49279
49424
  "arity": 2
@@ -49903,6 +50048,10 @@
49903
50048
  "type": "function",
49904
50049
  "arity": 2
49905
50050
  },
50051
+ "byteLengthOfIfMeasurable": {
50052
+ "type": "function",
50053
+ "arity": 1
50054
+ },
49906
50055
  "collectStream": {
49907
50056
  "type": "function",
49908
50057
  "arity": 2
@@ -49931,6 +50080,10 @@
49931
50080
  "type": "function",
49932
50081
  "arity": 2
49933
50082
  },
50083
+ "quoteString": {
50084
+ "type": "function",
50085
+ "arity": 1
50086
+ },
49934
50087
  "secureZero": {
49935
50088
  "type": "function",
49936
50089
  "arity": 1
@@ -51066,6 +51219,19 @@
51066
51219
  }
51067
51220
  }
51068
51221
  },
51222
+ "safeObject": {
51223
+ "type": "object",
51224
+ "members": {
51225
+ "ownProp": {
51226
+ "type": "function",
51227
+ "arity": 2
51228
+ },
51229
+ "ownSet": {
51230
+ "type": "function",
51231
+ "arity": 3
51232
+ }
51233
+ }
51234
+ },
51069
51235
  "safePath": {
51070
51236
  "type": "object",
51071
51237
  "members": {
@@ -51073,6 +51239,10 @@
51073
51239
  "type": "function",
51074
51240
  "arity": 4
51075
51241
  },
51242
+ "confineToBase": {
51243
+ "type": "function",
51244
+ "arity": 3
51245
+ },
51076
51246
  "resolve": {
51077
51247
  "type": "function",
51078
51248
  "arity": 3
@@ -51544,6 +51714,10 @@
51544
51714
  "type": "function",
51545
51715
  "arity": 1
51546
51716
  },
51717
+ "normalizeForScan": {
51718
+ "type": "function",
51719
+ "arity": 1
51720
+ },
51547
51721
  "quoteIdentifier": {
51548
51722
  "type": "function",
51549
51723
  "arity": 3
@@ -52304,10 +52478,22 @@
52304
52478
  "type": "function",
52305
52479
  "arity": 4
52306
52480
  },
52481
+ "beginProbation": {
52482
+ "type": "function",
52483
+ "arity": 1
52484
+ },
52307
52485
  "compareTags": {
52308
52486
  "type": "function",
52309
52487
  "arity": 2
52310
52488
  },
52489
+ "confirmHealthy": {
52490
+ "type": "function",
52491
+ "arity": 1
52492
+ },
52493
+ "evaluateOnBoot": {
52494
+ "type": "function",
52495
+ "arity": 1
52496
+ },
52311
52497
  "poll": {
52312
52498
  "type": "function",
52313
52499
  "arity": 1
@@ -52325,7 +52511,7 @@
52325
52511
  },
52326
52512
  "verify": {
52327
52513
  "type": "function",
52328
- "arity": 3
52514
+ "arity": 4
52329
52515
  }
52330
52516
  }
52331
52517
  },
@@ -52751,6 +52937,10 @@
52751
52937
  "type": "function",
52752
52938
  "arity": 1
52753
52939
  },
52940
+ "isExactLoopbackName": {
52941
+ "type": "function",
52942
+ "arity": 1
52943
+ },
52754
52944
  "isLinkLocal": {
52755
52945
  "type": "function",
52756
52946
  "arity": 1
@@ -52759,6 +52949,10 @@
52759
52949
  "type": "function",
52760
52950
  "arity": 1
52761
52951
  },
52952
+ "isLoopbackHost": {
52953
+ "type": "function",
52954
+ "arity": 1
52955
+ },
52762
52956
  "isPrivate": {
52763
52957
  "type": "function",
52764
52958
  "arity": 1
@@ -53981,6 +54175,14 @@
53981
54175
  "watcher": {
53982
54176
  "type": "object",
53983
54177
  "members": {
54178
+ "MAX_IGNORE_PATTERN_LEN": {
54179
+ "type": "primitive",
54180
+ "valueType": "number"
54181
+ },
54182
+ "MAX_IGNORE_STAR_COUNT": {
54183
+ "type": "primitive",
54184
+ "valueType": "number"
54185
+ },
53984
54186
  "WatcherError": {
53985
54187
  "type": "function",
53986
54188
  "arity": 4
@@ -82,6 +82,35 @@
82
82
  "saml.authnstatement": "true"
83
83
  },
84
84
  "defaultClientScopes": ["role_list"]
85
+ },
86
+ {
87
+ "clientId": "https://sp-enc.blamejs-test.example",
88
+ "name": "blamejs SAML SP encrypted (integration test)",
89
+ "description": "SP entityID for the EncryptedAssertion decrypt-interop stage. Keycloak encrypts the assertion CEK to saml.encryption.certificate; the integration test overrides that cert with a runtime-generated one (via the admin API) so it holds the matching private key. The algorithm attributes request AES-GCM + RSA-OAEP-SHA256, which Keycloak >= 26.2 honors; Keycloak 26.0.x ignores them and emits aes128-cbc + rsa-oaep-mgf1p(SHA-1), which the framework refuses by design.",
90
+ "enabled": true,
91
+ "protocol": "saml",
92
+ "publicClient": true,
93
+ "redirectUris": [
94
+ "http://127.0.0.1:18099/saml/acs"
95
+ ],
96
+ "frontchannelLogout": false,
97
+ "attributes": {
98
+ "saml.assertion.signature": "true",
99
+ "saml.server.signature": "false",
100
+ "saml.signature.algorithm": "RSA_SHA256",
101
+ "saml.client.signature": "false",
102
+ "saml.encrypt": "true",
103
+ "saml.encryption.certificate": "MIIDJTCCAg2gAwIBAgIUJ7mxaTrHZabJZAzkMg4eMDoFQRcwDQYJKoZIhvcNAQELBQAwIjEgMB4GA1UEAwwXc3AuYmxhbWVqcy10ZXN0LmV4YW1wbGUwHhcNMjYwNzE3MDQ1NjUzWhcNMzYwNzE0MDQ1NjUzWjAiMSAwHgYDVQQDDBdzcC5ibGFtZWpzLXRlc3QuZXhhbXBsZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKm+j361HUDN3Ii1mTVy+zLJosG0NbR1AGbd2HiD8IxdogG4qg6/K5sNQ/qPMDszC596dqPKnIZFCj+xf6GwRxN83Eetbn8dq7BJJjuRrifEDrW7E+xMvYyecKuNccDOzOlQ4fsy2UKjP50XCZyosXUT02I7mm93IKVDy4KWBOizrTXOiD7Mfx/rUTarFObzxrOMBIFOhfeDxg+hRJjN6+LC/lzpbpxQZglkBhUq2gUU3/jTQPdEyCpFJ3gyndUufi7Drxlqp7Taod/jINbL1sHScsHapth1JB8836uOAuXPQ1NAKvLcQEDmd6Y+08N++hkO4PRDFPbGnKwNEzZYDqUCAwEAAaNTMFEwHQYDVR0OBBYEFOaSe3V7aicztXNyr/D67j/bZUvBMB8GA1UdIwQYMBaAFOaSe3V7aicztXNyr/D67j/bZUvBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAEIIw7N99KMxgLDz7ZLesUupzNX+M5iWx9Ip3RVaRzf//nTQQUvGsaFgCeoFzAZ3TsfCtAqWu51pLmnox4bgyC+q1cPfFGjbfieF6VcK1+gnMRAQuDF7TSB98CIkIum+Y2jFXFnrP5nwplW6L00SFWaeqT9x8whNT0QEHbQ05IVeCn+IDUZwNLf+XIZWD3xpfilQ7KBE1USznYH9bqVQljWqPnUphnU2izIgQ/Ggsq9sZSmN1qcFl9QSJVJAmNXaddeQSXNUf7NtLs4OmuXZye66KJWg4W7oHb92sEiZIkKVHTlJSFzzumMToJsgBzvbkIvOy5mTP/JgrbOwTczIu40=",
104
+ "saml.encryption.algorithm": "AES_256_GCM",
105
+ "saml.encryption.keyAlgorithm": "RSA-OAEP",
106
+ "saml.encryption.digestMethod": "SHA-256",
107
+ "saml.encryption.maskGenerationFunction": "MGF1-SHA256",
108
+ "saml.force.post.binding": "true",
109
+ "saml_assertion_consumer_url_post": "http://127.0.0.1:18099/saml/acs",
110
+ "saml_name_id_format": "username",
111
+ "saml.authnstatement": "true"
112
+ },
113
+ "defaultClientScopes": ["role_list"]
85
114
  }
86
115
  ]
87
116
  }
@@ -97,6 +97,7 @@ Every passphrase / webhook secret in the table above is **never** ENV-baked into
97
97
  - The wiki container persists state in the `wiki-data` named volume — vault key, sealed audit-signing key, sqlite database, audit chain. **Back this up.** Losing it loses the audit chain and admin credentials.
98
98
  - Caddy persists ACME state in the `caddy-data` named volume. Deleting it forces a re-issuance from scratch — Let's Encrypt rate limits apply, so don't.
99
99
  - All TLS is Caddy's. The wiki container only speaks HTTP on the compose network.
100
+ - Prefer nginx? [`nginx.conf`](./nginx.conf) is an equivalent reference config — same TLS 1.3 floor, `www.`→apex 308 redirect, `X-Forwarded-Proto https` / `X-Forwarded-For`, and HSTS `max-age=63072000; includeSubDomains; preload`. nginx does not issue certificates itself; pair it with certbot for the cert paths it references, and set `WIKI_ADMIN_TRUSTED_PROXIES` to the proxy's CIDR so the wiki trusts the forwarded headers.
100
101
 
101
102
  ## Updating to a new version
102
103
 
@@ -494,6 +494,37 @@ async function buildApp(opts) {
494
494
  nonceMw: nonceMw,
495
495
  siteUrl: opts.siteUrl || "https://blamejs.com",
496
496
  };
497
+ // ---- Age-gated demo route ----
498
+ // Demonstrates b.middleware.ageGate riding the full wired stack
499
+ // (securityHeaders, compression, rate limit). The age is derived
500
+ // from the ?age= query field via Number(): a value that fails to
501
+ // parse yields NaN, which the gate classifies as "unknown" and
502
+ // answers with the child-safety privacy defaults (Cache-Control:
503
+ // private, no-store; Referrer-Policy: no-referrer;
504
+ // X-Privacy-Posture) instead of admitting the request as an
505
+ // adult. consentRequired follows the COPPA threshold (13 and
506
+ // under); requireAge stays null so the route classifies + sets
507
+ // headers without refusing. Registered as a literal path so it
508
+ // wins over the /:group catch-all.
509
+ var ageGateDemo = b.middleware.ageGate({
510
+ getAge: function (req) {
511
+ return Number(req.query && req.query.age);
512
+ },
513
+ consentRequired: 13,
514
+ });
515
+ router.get("/age-check", function (req, res, next) {
516
+ // ageGate publishes its classification on req.locals when the
517
+ // object exists; seed it so the handler below can echo the
518
+ // decision back to the caller.
519
+ if (!req.locals || typeof req.locals !== "object") req.locals = {};
520
+ return next();
521
+ }, ageGateDemo, function (req, res) {
522
+ res.setHeader("Content-Type", "application/json; charset=utf-8");
523
+ res.end(JSON.stringify({
524
+ classification: (req.locals && req.locals.ageGateClassification) || null,
525
+ }));
526
+ });
527
+
497
528
  pagesRoute.registerSpecific(router, routeCtx);
498
529
  adminRoute.register(router, routeCtx);
499
530
  pagesRoute.registerCatchAll(router, routeCtx);
@@ -88,6 +88,97 @@ function _moduleNs(modTag) {
88
88
  function _firstSegment(primTag) {
89
89
  return _bare(primTag).split(".")[0];
90
90
  }
91
+ function _reEscape(s) {
92
+ return String(s).replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); // allow:regex-no-length-cap — escapes short in-repo identifiers
93
+ }
94
+
95
+ // ---- primitive-without-test (config.testDirs) ----
96
+ //
97
+ // Every @primitive block must be exercised somewhere in the repo's test
98
+ // corpus. "Referenced" is keyed on BOTH the namespace and the method —
99
+ // a bare `.parse(` match alone would false-green half the catalog:
100
+ //
101
+ // 1. the full dotted form `b.<ns>.<method>` appears verbatim, OR
102
+ // 2. the namespace is referenced (`b.<ns>` verbatim, or a require()
103
+ // of the primitive's own lib module) AND the method is invoked
104
+ // (`.<method>(`) — covers handle / instance methods
105
+ // (`var q = b.queue.init(...); q.enqueue(...)`).
106
+ //
107
+ // Static "referenced" only — whether the reference actually EXECUTES is
108
+ // the coverage gate's job (c8), not a static validator's.
109
+ //
110
+ // TEST_REF_ALLOWLIST: the register of primitives the test corpus does
111
+ // not yet reference. Currently empty — every documented @primitive is
112
+ // exercised by a test. Add an entry ONLY with a specific reason coverage
113
+ // is indirect (a runbook-only key, a fixture-dependent path); a new
114
+ // primitive must land with its own test reference, not an entry here.
115
+ var TEST_REF_ALLOWLIST = {
116
+ };
117
+
118
+ function _walkJsFiles(dir, out) {
119
+ var entries;
120
+ try { entries = fs.readdirSync(dir, { withFileTypes: true }); }
121
+ catch (_e) { return out; }
122
+ for (var i = 0; i < entries.length; i += 1) {
123
+ var ent = entries[i];
124
+ var p = path.join(dir, ent.name);
125
+ if (ent.isDirectory()) {
126
+ if (ent.name === "node_modules" || ent.name === ".test-output" || ent.name.indexOf("data") === 0) continue;
127
+ _walkJsFiles(p, out);
128
+ } else if (ent.isFile() && /\.(js|cjs|mjs)$/.test(ent.name)) {
129
+ out.push(p);
130
+ }
131
+ }
132
+ return out;
133
+ }
134
+
135
+ function _readTestCorpus(testDirs) {
136
+ // Per-file contents, not one concatenated blob: the split signal in
137
+ // _testReferenced requires the namespace and the method to co-occur
138
+ // in the SAME test file — corpus-wide matching would count a
139
+ // primitive as covered when one test names the namespace and an
140
+ // unrelated test happens to call the same common method name
141
+ // (`.create(`, `.parse(`).
142
+ var files = [];
143
+ for (var d = 0; d < testDirs.length; d += 1) {
144
+ var paths = _walkJsFiles(testDirs[d], []);
145
+ for (var i = 0; i < paths.length; i += 1) {
146
+ try { files.push(fs.readFileSync(paths[i], "utf8")); }
147
+ catch (_e) { /* drop unreadable */ }
148
+ }
149
+ }
150
+ return { files: files };
151
+ }
152
+
153
+ // primBare: the @primitive without the `b.` prefix (e.g.
154
+ // "metrics.snapshot.render"). moduleRel: the primitive's home file
155
+ // relative to lib/ (e.g. "auth/oauth.js") — a require() of that module
156
+ // counts as a namespace reference.
157
+ function _testReferenced(corpus, primBare, moduleRel) {
158
+ var files = corpus.files;
159
+ var full = new RegExp("\\bb\\." + _reEscape(primBare) + "(?![A-Za-z0-9_$])"); // allow:dynamic-regex — built from the in-repo @primitive tag, _reEscape'd; no operator input
160
+ var i;
161
+ for (i = 0; i < files.length; i += 1) {
162
+ if (full.test(files[i])) return true;
163
+ }
164
+
165
+ var segs = primBare.split(".");
166
+ if (segs.length < 2) return false; // single-segment: only the verbatim form counts
167
+ var ns = segs.slice(0, -1).join(".");
168
+ var method = segs[segs.length - 1];
169
+
170
+ var nsRef = new RegExp("\\bb\\." + _reEscape(ns) + "(?![A-Za-z0-9_$])"); // allow:dynamic-regex — built from the in-repo @primitive tag, _reEscape'd; no operator input
171
+ var modNoExt = String(moduleRel).replace(/\\/g, "/").replace(/\.js$/, "");
172
+ var modRef = new RegExp("require\\([^)]*[\\\\/]" + _reEscape(modNoExt).replace(/\//g, "[\\\\/]") + "(?:\\.js)?[\"']"); // allow:dynamic-regex — built from the lib-relative file path of the primitive's own module, _reEscape'd; no operator input
173
+ var methodRef = new RegExp("\\." + _reEscape(method) + "\\s*\\("); // allow:dynamic-regex — built from the in-repo @primitive tag's method segment, _reEscape'd; no operator input
174
+ // Namespace (or owning-module require) and method invocation must
175
+ // co-occur in the SAME file — a namespace reference in one test and
176
+ // an unrelated `.create(` in another is not coverage of b.<ns>.create.
177
+ for (i = 0; i < files.length; i += 1) {
178
+ if ((nsRef.test(files[i]) || modRef.test(files[i])) && methodRef.test(files[i])) return true;
179
+ }
180
+ return false;
181
+ }
91
182
 
92
183
  // Probe the universe of primitive signatures available for @related
93
184
  // cross-reference. Sources: every @primitive block under lib/, plus
@@ -345,6 +436,14 @@ function validate(config) {
345
436
  var docs = parser.parseTree(libDir);
346
437
  var known = _knownPrimitiveSet(docs, seederIndex, parser);
347
438
 
439
+ // Optional test-corpus for the primitive-without-test check. When
440
+ // config.testDirs is absent the check silently skips (mirrors
441
+ // optsResolver) — every other check still runs.
442
+ var testCorpus = null;
443
+ if (Array.isArray(config.testDirs) && config.testDirs.length > 0) {
444
+ testCorpus = _readTestCorpus(config.testDirs);
445
+ }
446
+
348
447
  var declaredNs = {};
349
448
  curationPages.forEach(function (page) {
350
449
  (page.namespaces || []).forEach(function (ns) { declaredNs[ns] = page.slug; });
@@ -493,6 +592,16 @@ function validate(config) {
493
592
  }
494
593
  }
495
594
 
595
+ if (testCorpus) {
596
+ var testBare = _bare(primTag);
597
+ if (!TEST_REF_ALLOWLIST[testBare] && !_testReferenced(testCorpus, testBare, rel)) {
598
+ findings.push({
599
+ kind: "primitive-without-test", file: rel, primitive: primTag,
600
+ msg: "no test reference — need `b." + testBare + "` verbatim, or the namespace / owning module referenced plus `." + testBare.split(".").pop() + "(` invoked, anywhere in the test corpus. Add a test, or a TEST_REF_ALLOWLIST entry with the reason coverage is indirect.",
601
+ });
602
+ }
603
+ }
604
+
496
605
  var ns = _firstSegment(primTag);
497
606
  if (declaredNs[ns]) nsHasPrimitive[ns] = true;
498
607
  // Nested-namespace match — declared namespaces like