@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
@@ -16,6 +16,7 @@ var path = helpers.path;
16
16
  var check = helpers.check;
17
17
  var setupTestDb = helpers.setupTestDb;
18
18
  var teardownTestDb = helpers.teardownTestDb;
19
+ var waitUntil = helpers.waitUntil;
19
20
 
20
21
  // ---- Surface ----
21
22
 
@@ -875,6 +876,580 @@ async function testValidationNewOpts() {
875
876
  check("validation: rejects non-bool slidingTtl", threw);
876
877
  }
877
878
 
879
+ // ---- Uncovered-branch coverage: config-time validation ----
880
+
881
+ async function testInfinityCapsAccepted() {
882
+ // maxEntries: Infinity and maxBytes: Infinity take the early-return
883
+ // branch in the validators (uncapped memory backend).
884
+ var c1 = b.cache.create({ namespace: "inf-entries", maxEntries: Infinity });
885
+ await c1.set("k", "v");
886
+ check("maxEntries: Infinity accepted (uncapped)", (await c1.get("k")) === "v");
887
+ await c1.close();
888
+
889
+ var c2 = b.cache.create({ namespace: "inf-bytes", maxBytes: Infinity });
890
+ await c2.set("k", "v");
891
+ check("maxBytes: Infinity accepted (uncapped)", (await c2.get("k")) === "v");
892
+ await c2.close();
893
+ }
894
+
895
+ async function testInvalidBackendString() {
896
+ var threwBogus = false;
897
+ try { b.cache.create({ namespace: "n", backend: "postgres-cache" }); }
898
+ catch (_e) { threwBogus = true; }
899
+ check("create() with unrecognized backend string throws", threwBogus);
900
+
901
+ // backend: "redis" with an empty-string redisUrl trips the length===0
902
+ // arm of the redisUrl guard (distinct from the missing-url arm).
903
+ var threwEmptyUrl = false;
904
+ try { b.cache.create({ namespace: "n", backend: "redis", redisUrl: "" }); }
905
+ catch (_e) { threwEmptyUrl = true; }
906
+ check("create() backend='redis' with empty redisUrl throws", threwEmptyUrl);
907
+ }
908
+
909
+ async function testDefaultSizeOfVariants() {
910
+ // No custom sizeOf → the framework's _defaultSizeOf runs on every set().
911
+ // Drive the null/undefined, Buffer, and JSON-unserializable arms that the
912
+ // existing number/object/string cases never reach.
913
+ var c = b.cache.create({ namespace: "sizeof-default" });
914
+ await c.set("nul", null);
915
+ await c.set("buf", Buffer.from("hello"));
916
+ await c.set("big", { n: 10n }); // JSON.stringify throws on BigInt → catch → 0
917
+ check("default sizeOf: null value stored (0 bytes arm)", (await c.get("nul")) === null);
918
+ check("default sizeOf: Buffer value stored (length arm)", Buffer.isBuffer(await c.get("buf")));
919
+ check("default sizeOf: JSON-unserializable value stored (catch arm)",
920
+ (await c.get("big")).n === 10n);
921
+ // bytes() reflects: null=0, Buffer("hello")=5, bigint-object=0 → total 5.
922
+ check("default sizeOf: bytes() totals the finite arms only", (await c.bytes()) === 5);
923
+ await c.close();
924
+ }
925
+
926
+ // ---- Uncovered-branch coverage: memory has() lazy expiry ----
927
+
928
+ async function testHasExpiredEvicts() {
929
+ var clk = b.testing.fakeClock(1_000_000);
930
+ var captured = [];
931
+ var c = b.cache.create({
932
+ namespace: "has-expired",
933
+ ttlMs: 100,
934
+ clock: clk.now,
935
+ observability: { event: function (n, _v, l) { captured.push({ n: n, l: l }); } },
936
+ });
937
+ await c.set("k", "v");
938
+ clk.advance(200); // past ttl
939
+ check("has() on expired key returns false + lazy-evicts", (await c.has("k")) === false);
940
+ check("has() lazy-evict emits cache.eviction.expired",
941
+ captured.filter(function (e) { return e.n === "cache.eviction.expired"; }).length >= 1);
942
+ // The entry is physically gone now.
943
+ check("has() lazy-evict removed the entry", (await c.size()) === 0);
944
+ await c.close();
945
+ }
946
+
947
+ // ---- Uncovered-branch coverage: backend-error catch on every method ----
948
+
949
+ async function testBackendErrorAllMethods() {
950
+ var audit = b.testing.captureAudit();
951
+ var codedErr = function () { var e = new Error("backend down"); e.code = "ECONNREFUSED"; return e; };
952
+ var reject = function () { return Promise.reject(codedErr()); };
953
+ var failing = {
954
+ // required surface
955
+ get: reject,
956
+ set: reject,
957
+ del: reject,
958
+ clear: reject,
959
+ size: reject,
960
+ close: function () { return Promise.resolve(); },
961
+ // optional surface — present so the wrapper forwards (rather than
962
+ // falling back), letting the cache method's own catch fire.
963
+ has: reject,
964
+ bytes: reject,
965
+ invalidateTag: reject,
966
+ getTags: reject,
967
+ };
968
+ var c = b.cache.create({ namespace: "fail-all", backend: failing, audit: audit });
969
+
970
+ async function expectThrow(label, fn) {
971
+ var threw = false;
972
+ try { await fn(); } catch (_e) { threw = true; }
973
+ check(label, threw);
974
+ }
975
+ await expectThrow("get() propagates backend error", function () { return c.get("k"); });
976
+ await expectThrow("set() propagates backend error", function () { return c.set("k", "v"); });
977
+ await expectThrow("del() propagates backend error", function () { return c.del("k"); });
978
+ await expectThrow("has() propagates backend error", function () { return c.has("k"); });
979
+ await expectThrow("clear() propagates backend error", function () { return c.clear(); });
980
+ await expectThrow("size() propagates backend error", function () { return c.size(); });
981
+ await expectThrow("bytes() propagates backend error", function () { return c.bytes(); });
982
+ await expectThrow("invalidateTag() propagates backend error", function () { return c.invalidateTag("t"); });
983
+ await expectThrow("getTags() propagates backend error", function () { return c.getTags("k"); });
984
+ await expectThrow("wrap() propagates backend get error", function () { return c.wrap("k", function () { return "x"; }); });
985
+
986
+ var failedAudits = audit.byAction("cache.backend.failed");
987
+ check("every failing method emits a cache.backend.failed audit", failedAudits.length >= 10);
988
+ // The error's own .code rides in the audit metadata (the err.code arm).
989
+ check("backend.failed audit carries the backend error code",
990
+ failedAudits.some(function (e) { return e.metadata && e.metadata.code === "ECONNREFUSED"; }));
991
+ await c.close();
992
+ }
993
+
994
+ async function testUpdateMutatorThrows() {
995
+ // A mutatorFn that throws surfaces through backend.update as a backend
996
+ // error — driving cache.update's catch (emit + audit + rethrow).
997
+ var audit = b.testing.captureAudit();
998
+ var c = b.cache.create({ namespace: "upd-throw", audit: audit });
999
+ var threw = false;
1000
+ try {
1001
+ await c.update("k", function () { throw new Error("mutator boom"); });
1002
+ } catch (_e) { threw = true; }
1003
+ check("update() rethrows a throwing mutator", threw);
1004
+ check("update() throwing mutator emits cache.backend.failed audit",
1005
+ audit.byAction("cache.backend.failed").length === 1);
1006
+ await c.close();
1007
+ }
1008
+
1009
+ // ---- Uncovered-branch coverage: custom-backend optional-method fallbacks ----
1010
+
1011
+ async function testCustomBackendOptionalFallbacks() {
1012
+ // A custom backend that implements ONLY the required surface. The
1013
+ // wrapper synthesizes has (get-and-coerce), bytes (0), invalidateTag
1014
+ // (0), getTags (null).
1015
+ var store = new Map();
1016
+ var minimal = {
1017
+ get: function (k) { return Promise.resolve(store.get(k)); },
1018
+ set: function (k, v) { store.set(k, v); return Promise.resolve(); },
1019
+ del: function (k) { var ex = store.has(k); store.delete(k); return Promise.resolve(ex); },
1020
+ clear: function () { var n = store.size; store.clear(); return Promise.resolve(n); },
1021
+ size: function () { return Promise.resolve(store.size); },
1022
+ close: function () { return Promise.resolve(); },
1023
+ };
1024
+ var c = b.cache.create({ namespace: "custom-min", backend: minimal });
1025
+ await c.set("present", "v");
1026
+ check("custom has() falls back to get-and-coerce (present → true)", (await c.has("present")) === true);
1027
+ check("custom has() falls back to get-and-coerce (absent → false)", (await c.has("absent")) === false);
1028
+ check("custom bytes() falls back to 0", (await c.bytes()) === 0);
1029
+ check("custom invalidateTag() falls back to 0", (await c.invalidateTag("t")) === 0);
1030
+ check("custom getTags() falls back to null", (await c.getTags("present")) === null);
1031
+ await c.close();
1032
+ }
1033
+
1034
+ async function testSealRejectedOnNonCluster() {
1035
+ var c = b.cache.create({ namespace: "seal-mem" });
1036
+ var threwSet = false;
1037
+ try { await c.set("k", "v", { seal: true }); } catch (_e) { threwSet = true; }
1038
+ check("set(seal:true) on memory backend throws (cluster-only feature)", threwSet);
1039
+
1040
+ var threwUpd = false;
1041
+ try { await c.update("k", function () { return { value: "v" }; }, { seal: true }); }
1042
+ catch (_e) { threwUpd = true; }
1043
+ check("update(seal:true) on memory backend throws (cluster-only feature)", threwUpd);
1044
+ await c.close();
1045
+ }
1046
+
1047
+ async function testUpdateUnsupportedAndBadMutator() {
1048
+ // Custom backend has no atomic update → cache.update throws UNSUPPORTED.
1049
+ var store = new Map();
1050
+ var minimal = {
1051
+ get: function (k) { return Promise.resolve(store.get(k)); },
1052
+ set: function (k, v) { store.set(k, v); return Promise.resolve(); },
1053
+ del: function (k) { store.delete(k); return Promise.resolve(true); },
1054
+ clear: function () { store.clear(); return Promise.resolve(0); },
1055
+ size: function () { return Promise.resolve(store.size); },
1056
+ close: function () { return Promise.resolve(); },
1057
+ };
1058
+ var cCustom = b.cache.create({ namespace: "upd-unsupported", backend: minimal });
1059
+ var threwUnsupported = false;
1060
+ try { await cCustom.update("k", function () { return { value: 1 }; }); }
1061
+ catch (_e) { threwUnsupported = true; }
1062
+ check("update() on a custom backend without update throws UNSUPPORTED", threwUnsupported);
1063
+ await cCustom.close();
1064
+
1065
+ // Non-function mutator → BAD_OPT (guarded before backend dispatch).
1066
+ var cMem = b.cache.create({ namespace: "upd-badmutator" });
1067
+ var threwBadMutator = false;
1068
+ try { await cMem.update("k", "not-a-function"); } catch (_e) { threwBadMutator = true; }
1069
+ check("update() with non-function mutator throws", threwBadMutator);
1070
+ await cMem.close();
1071
+ }
1072
+
1073
+ async function testInvalidateTagBadArg() {
1074
+ var c = b.cache.create({ namespace: "tag-badarg" });
1075
+ var threwNonString = false;
1076
+ try { await c.invalidateTag(42); } catch (_e) { threwNonString = true; }
1077
+ check("invalidateTag(non-string) throws", threwNonString);
1078
+
1079
+ var threwEmpty = false;
1080
+ try { await c.invalidateTag(""); } catch (_e) { threwEmpty = true; }
1081
+ check("invalidateTag('') throws", threwEmpty);
1082
+ await c.close();
1083
+ }
1084
+
1085
+ async function testUpdateMemoryExpiresAtDecision() {
1086
+ // A committing decision may pin the written value's absolute expiry via
1087
+ // { value, expiresAt } — the branch distinct from the { value, ttlMs }
1088
+ // case the existing update test drives.
1089
+ var nowMs = 6_000_000;
1090
+ var c = b.cache.create({ namespace: "upd-expiresat", clock: function () { return nowMs; } });
1091
+ await c.update("k", function () { return { value: "pinned", expiresAt: nowMs + 50 }; });
1092
+ check("update decision.expiresAt honored (before expiry)", (await c.get("k")) === "pinned");
1093
+ nowMs += 100;
1094
+ check("update decision.expiresAt honored (after expiry)", (await c.get("k")) === undefined);
1095
+ await c.close();
1096
+ }
1097
+
1098
+ async function testObservabilitySinkThrowsSwallowed() {
1099
+ // The hot-path observability sink is drop-silent: a throwing operator
1100
+ // sink must not surface to the caller.
1101
+ var c = b.cache.create({
1102
+ namespace: "obs-throw",
1103
+ observability: { event: function () { throw new Error("sink boom"); } },
1104
+ });
1105
+ var surfaced = false;
1106
+ try {
1107
+ await c.set("k", "v");
1108
+ await c.get("k");
1109
+ } catch (_e) { surfaced = true; }
1110
+ check("throwing observability sink is swallowed (drop-silent)", surfaced === false);
1111
+ await c.close();
1112
+ }
1113
+
1114
+ // ---- Uncovered-branch coverage: SWR internals ----
1115
+
1116
+ async function testSwrInfinityTtl() {
1117
+ // SWR write path with an Infinity ttl: hard-TTL stays Infinity, no soft
1118
+ // expiry is tracked (the else arm), entry never goes stale.
1119
+ var nowMs = 1_700_000_000_000;
1120
+ var c = b.cache.create({
1121
+ namespace: "swr-inf",
1122
+ ttlMs: b.constants.TIME.minutes(5),
1123
+ staleWhileRevalidate: true,
1124
+ clock: function () { return nowMs; },
1125
+ });
1126
+ var calls = 0;
1127
+ var fn = function () { calls++; return "v"; };
1128
+ await c.wrap("k", fn, { ttlMs: Infinity });
1129
+ nowMs += b.constants.TIME.days(365);
1130
+ var again = await c.wrap("k", fn, { ttlMs: Infinity });
1131
+ check("SWR Infinity ttl: value never goes stale (no recompute)",
1132
+ again === "v" && calls === 1);
1133
+ await c.close();
1134
+ }
1135
+
1136
+ async function testSwrBackgroundRefreshFailure() {
1137
+ // Past soft TTL, the background refresh runs fn again; when that fn
1138
+ // rejects, the stale value was already served and the failure surfaces
1139
+ // only via cache.refresh.failed observability.
1140
+ var nowMs = 1_700_000_000_000;
1141
+ var captured = [];
1142
+ var c = b.cache.create({
1143
+ namespace: "swr-refresh-fail",
1144
+ ttlMs: 100,
1145
+ staleWhileRevalidate: true,
1146
+ clock: function () { return nowMs; },
1147
+ observability: { event: function (n, _v, l) { captured.push({ n: n, l: l }); } },
1148
+ });
1149
+ var mode = "ok";
1150
+ var fn = function () {
1151
+ if (mode === "boom") return Promise.reject(new Error("refresh failed"));
1152
+ return Promise.resolve("fresh");
1153
+ };
1154
+ var first = await c.wrap("k", fn);
1155
+ check("SWR refresh-fail: first call computes fresh", first === "fresh");
1156
+
1157
+ nowMs += 150; // past soft (100), before hard (200)
1158
+ mode = "boom";
1159
+ var stale = await c.wrap("k", fn); // serves stale + kicks background refresh
1160
+ check("SWR refresh-fail: serves stale while refreshing", stale === "fresh");
1161
+
1162
+ await waitUntil(function () {
1163
+ return captured.filter(function (e) { return e.n === "cache.refresh.failed"; }).length >= 1;
1164
+ }, { timeoutMs: 4000, label: "swr background refresh failure emitted" });
1165
+ check("SWR refresh-fail: emits cache.refresh.failed on background error",
1166
+ captured.filter(function (e) { return e.n === "cache.refresh.failed"; }).length >= 1);
1167
+ await c.close();
1168
+ }
1169
+
1170
+ async function testSwrWriteFailure() {
1171
+ // Under SWR, a miss computes the value then persists it through
1172
+ // _writeWithSwr; when that backend.set rejects, the failure is captured
1173
+ // via observability + audit and does not fail the wrap.
1174
+ var audit = b.testing.captureAudit();
1175
+ var readOnlyBackend = {
1176
+ get: function () { return Promise.resolve(undefined); }, // always a miss
1177
+ set: function () { return Promise.reject(new Error("read-only")); },
1178
+ del: function () { return Promise.resolve(false); },
1179
+ clear: function () { return Promise.resolve(0); },
1180
+ size: function () { return Promise.resolve(0); },
1181
+ close: function () { return Promise.resolve(); },
1182
+ };
1183
+ var c = b.cache.create({
1184
+ namespace: "swr-write-fail",
1185
+ backend: readOnlyBackend,
1186
+ audit: audit,
1187
+ staleWhileRevalidate: true,
1188
+ ttlMs: 100,
1189
+ });
1190
+ var v = await c.wrap("k", function () { return "computed"; });
1191
+ check("SWR write-fail: wrap returns computed value despite failed set", v === "computed");
1192
+ await waitUntil(function () { return audit.byAction("cache.backend.failed").length >= 1; },
1193
+ { timeoutMs: 4000, label: "SWR _writeWithSwr set failure audited" });
1194
+ check("SWR write-fail: failed persist emits cache.backend.failed audit",
1195
+ audit.byAction("cache.backend.failed").length >= 1);
1196
+ await c.close();
1197
+ }
1198
+
1199
+ async function testRedisBackendConstructs() {
1200
+ // The redis backend wires through cache-redis with a lazy connect, so
1201
+ // building + closing the instance is network-free (no op ever fires).
1202
+ // This exercises the create() redis-backend resolution branch without a
1203
+ // live server.
1204
+ var c = b.cache.create({
1205
+ namespace: "redis-construct",
1206
+ backend: "redis",
1207
+ redisUrl: "redis://127.0.0.1:6390/0",
1208
+ });
1209
+ check("redis backend: instance exposes get/set/close",
1210
+ typeof c.get === "function" && typeof c.set === "function" && typeof c.close === "function");
1211
+ check("redis backend: resolved as a custom-wrapped backend", c._backend && c._backend.name === "custom");
1212
+ await c.close(); // never connected — close is a no-op teardown
1213
+ }
1214
+
1215
+ async function testWrapSetFailureNonSwr() {
1216
+ // Non-SWR wrap: a miss computes the value, then the backend.set rejects.
1217
+ // The wrap still resolves to the computed value (failed write doesn't
1218
+ // fail the wrap) but emits cache.backend.failed.
1219
+ var audit = b.testing.captureAudit();
1220
+ var readOnlyBackend = {
1221
+ get: function () { return Promise.resolve(undefined); }, // always a miss
1222
+ set: function () { return Promise.reject(new Error("read-only")); },
1223
+ del: function () { return Promise.resolve(false); },
1224
+ clear: function () { return Promise.resolve(0); },
1225
+ size: function () { return Promise.resolve(0); },
1226
+ close: function () { return Promise.resolve(); },
1227
+ };
1228
+ var c = b.cache.create({ namespace: "wrap-set-fail", backend: readOnlyBackend, audit: audit });
1229
+ var v = await c.wrap("k", function () { return "computed"; });
1230
+ check("wrap: computed value returned despite failed backend write", v === "computed");
1231
+ check("wrap: failed backend write emits cache.backend.failed audit",
1232
+ audit.byAction("cache.backend.failed").length >= 1);
1233
+ await c.close();
1234
+ }
1235
+
1236
+ // ---- Uncovered-branch coverage: cross-node invalidation via pubsub ----
1237
+
1238
+ async function testMemoryInfinityWriteArms() {
1239
+ // The Infinity-lifetime arm of set / update / wrap expiry resolution
1240
+ // (expiresAt = Infinity rather than clock()+ttlMs), plus getTags on an
1241
+ // entry stored without any tags (the empty-array arm).
1242
+ var c = b.cache.create({ namespace: "inf-arms", ttlMs: 100 });
1243
+ await c.set("s", "v", { ttlMs: Infinity });
1244
+ check("set(ttlMs:Infinity): getTags on an untagged entry returns []",
1245
+ Array.isArray(await c.getTags("s")) && (await c.getTags("s")).length === 0);
1246
+
1247
+ await c.update("u", function () { return { value: 1 }; }, { ttlMs: Infinity });
1248
+ check("update(ttlMs:Infinity): value written", (await c.get("u")) === 1);
1249
+
1250
+ var w = await c.wrap("w", function () { return "computed"; }, { ttlMs: Infinity });
1251
+ check("wrap(ttlMs:Infinity): value computed + cached", w === "computed" && (await c.get("w")) === "computed");
1252
+ await c.close();
1253
+ }
1254
+
1255
+ async function testClusterInfinityAndEmptyClear() {
1256
+ var tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "blamejs-cache-infclu-"));
1257
+ try {
1258
+ await setupTestDb(tmpDir);
1259
+ var c = b.cache.create({ namespace: "cb-inf", backend: "cluster", ttlMs: 100 });
1260
+ // clear() over an empty namespace: rowCount is falsy → the `|| 0` arm.
1261
+ check("cluster clear on empty namespace returns 0", (await c.clear()) === 0);
1262
+
1263
+ await c.set("s", { forever: true }, { ttlMs: Infinity }); // storedExpires = MAX_SAFE arm
1264
+ check("cluster set(ttlMs:Infinity): value round-trips", (await c.get("s")).forever === true);
1265
+
1266
+ await c.update("u", function () { return { value: "kept" }; }, { ttlMs: Infinity });
1267
+ check("cluster update(ttlMs:Infinity): value written", (await c.get("u")) === "kept");
1268
+ await c.close();
1269
+ } finally {
1270
+ await teardownTestDb(tmpDir);
1271
+ }
1272
+ }
1273
+
1274
+ async function testInvalidationPubsubBadShape() {
1275
+ var threw = false;
1276
+ try {
1277
+ b.cache.create({ namespace: "bad-ps", invalidationPubsub: { publish: function () {} } });
1278
+ } catch (_e) { threw = true; }
1279
+ check("create() rejects an invalidationPubsub missing subscribe/unsubscribe", threw);
1280
+ }
1281
+
1282
+ async function testInvalidationPubsubCrossNode() {
1283
+ var ps = b.pubsub.create({ backend: "local" });
1284
+ // Two memory-backed instances sharing one namespace + pubsub simulate two
1285
+ // nodes: a mutation on one mirrors to the other's local store.
1286
+ var nodeA = b.cache.create({ namespace: "xnode", invalidationPubsub: ps });
1287
+ var nodeB = b.cache.create({ namespace: "xnode", invalidationPubsub: ps });
1288
+ try {
1289
+ // del propagation
1290
+ await nodeB.set("k", "v");
1291
+ await nodeA.del("k");
1292
+ await waitUntil(async function () { return (await nodeB.get("k")) === undefined; },
1293
+ { timeoutMs: 4000, label: "cross-node del propagates to nodeB" });
1294
+ check("cross-node del propagates", (await nodeB.get("k")) === undefined);
1295
+
1296
+ // tag propagation
1297
+ await nodeB.set("t1", "v", { tags: ["grp"] });
1298
+ await nodeA.invalidateTag("grp");
1299
+ await waitUntil(async function () { return (await nodeB.get("t1")) === undefined; },
1300
+ { timeoutMs: 4000, label: "cross-node invalidateTag propagates to nodeB" });
1301
+ check("cross-node invalidateTag propagates", (await nodeB.get("t1")) === undefined);
1302
+
1303
+ // clear propagation
1304
+ await nodeB.set("c1", "v");
1305
+ await nodeB.set("c2", "v");
1306
+ await nodeA.clear();
1307
+ await waitUntil(async function () { return (await nodeB.size()) === 0; },
1308
+ { timeoutMs: 4000, label: "cross-node clear propagates to nodeB" });
1309
+ check("cross-node clear propagates", (await nodeB.size()) === 0);
1310
+ } finally {
1311
+ await nodeA.close(); // exercises the pubsub unsubscribe-on-close path
1312
+ await nodeB.close();
1313
+ if (ps.close) await ps.close();
1314
+ }
1315
+ }
1316
+
1317
+ // ---- Uncovered-branch coverage: cluster sliding TTL / seal / sweep ----
1318
+
1319
+ async function testClusterSlidingTtl() {
1320
+ var tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "blamejs-cache-slide-"));
1321
+ try {
1322
+ await setupTestDb(tmpDir);
1323
+ var nowMs = 2_000_000;
1324
+ var c = b.cache.create({
1325
+ namespace: "cb-slide",
1326
+ backend: "cluster",
1327
+ ttlMs: 100,
1328
+ slidingTtl: true,
1329
+ clock: function () { return nowMs; },
1330
+ });
1331
+ await c.set("k", "v"); // expiresAt = 2_000_100
1332
+ nowMs += 80; // clock 2_000_080
1333
+ // This read fires the best-effort sliding extension: expiresAt →
1334
+ // 2_000_080 + 100 = 2_000_180 (a fire-and-forget UPDATE).
1335
+ check("cluster sliding: read before original expiry returns", (await c.get("k")) === "v");
1336
+ // Advance PAST the original 100ms expiry but before the extended one.
1337
+ // has() (a non-mutating select honoring expiresAt) becomes true only
1338
+ // once the extension UPDATE has committed — a deterministic signal that
1339
+ // the slide landed, with no lazy-purge / re-slide side effects.
1340
+ nowMs = 2_000_150;
1341
+ await waitUntil(async function () { return (await c.has("k")) === true; },
1342
+ { timeoutMs: 2000, label: "cluster sliding extension committed past original ttl" });
1343
+ check("cluster sliding: read after original ttl still returns (extended)",
1344
+ (await c.get("k")) === "v");
1345
+ await c.close();
1346
+ } finally {
1347
+ await teardownTestDb(tmpDir);
1348
+ }
1349
+ }
1350
+
1351
+ async function testClusterSealAndUpdateLifetimes() {
1352
+ var tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "blamejs-cache-seal-"));
1353
+ try {
1354
+ await setupTestDb(tmpDir);
1355
+ var nowMs = 3_000_000;
1356
+ var c = b.cache.create({
1357
+ namespace: "cb-seal",
1358
+ backend: "cluster",
1359
+ ttlMs: b.constants.TIME.minutes(5),
1360
+ clock: function () { return nowMs; },
1361
+ });
1362
+ // Sealed write + sealed read (marker-prefix encode/decode path).
1363
+ await c.set("s", { secret: "top" }, { seal: true });
1364
+ check("cluster seal: sealed value round-trips", (await c.get("s")).secret === "top");
1365
+
1366
+ // Atomic update over the sealed row: reads+unseals current, reseals new.
1367
+ var r = await c.update("s", function (cur) {
1368
+ return { value: { secret: (cur && cur.secret) + "!" }, seal: true };
1369
+ }, { seal: true });
1370
+ check("cluster seal: update over sealed row reseals",
1371
+ r.updated === true && (await c.get("s")).secret === "top!");
1372
+
1373
+ // update decision that pins the written value's own lifetime.
1374
+ await c.update("ttlkey", function () { return { value: "short", ttlMs: 100 }; });
1375
+ check("cluster update decision.ttlMs: present before expiry", (await c.get("ttlkey")) === "short");
1376
+
1377
+ await c.update("expkey", function () { return { value: "pinned", expiresAt: nowMs + 100 }; });
1378
+ check("cluster update decision.expiresAt: present before expiry", (await c.get("expkey")) === "pinned");
1379
+
1380
+ nowMs += 200;
1381
+ check("cluster update decision.ttlMs: expired after advance", (await c.get("ttlkey")) === undefined);
1382
+ check("cluster update decision.expiresAt: expired after advance", (await c.get("expkey")) === undefined);
1383
+ await c.close();
1384
+ } finally {
1385
+ await teardownTestDb(tmpDir);
1386
+ }
1387
+ }
1388
+
1389
+ async function testClusterBytesReturnsZero() {
1390
+ var tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "blamejs-cache-bytes-"));
1391
+ try {
1392
+ await setupTestDb(tmpDir);
1393
+ var c = b.cache.create({ namespace: "cb-bytes", backend: "cluster" });
1394
+ // The cluster backend does not track byte accounting → bytes() → 0.
1395
+ check("cluster bytes() returns 0 (no byte accounting)", (await c.bytes()) === 0);
1396
+ await c.close();
1397
+ } finally {
1398
+ await teardownTestDb(tmpDir);
1399
+ }
1400
+ }
1401
+
1402
+ async function testMemorySweepTimerFires() {
1403
+ // The periodic sweep purges expired entries and emits one
1404
+ // cache.eviction.expired per purged key. Uses the real timer (minimum
1405
+ // 1000ms cadence) with real wall-clock TTL so entries are expired when
1406
+ // the sweep runs; polls the observability signal.
1407
+ var captured = [];
1408
+ var c = b.cache.create({
1409
+ namespace: "mem-sweep",
1410
+ ttlMs: 100, // real-clock 100ms — expired well before first sweep
1411
+ sweepIntervalMs: 1000,
1412
+ observability: { event: function (n, _v, l) { captured.push({ n: n, l: l }); } },
1413
+ });
1414
+ try {
1415
+ await c.set("a", 1);
1416
+ await c.set("b", 2);
1417
+ // Do NOT read — let the sweep timer, not lazy purge, do the eviction.
1418
+ await waitUntil(function () {
1419
+ return captured.filter(function (e) { return e.n === "cache.eviction.expired"; }).length >= 2;
1420
+ }, { timeoutMs: 5000, label: "memory sweep timer purges expired entries" });
1421
+ check("memory sweep timer emits cache.eviction.expired for purged entries",
1422
+ captured.filter(function (e) { return e.n === "cache.eviction.expired"; }).length >= 2);
1423
+ } finally {
1424
+ await c.close();
1425
+ }
1426
+ }
1427
+
1428
+ async function testClusterSweepTimerFires() {
1429
+ var tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "blamejs-cache-sweep-"));
1430
+ try {
1431
+ await setupTestDb(tmpDir);
1432
+ var c = b.cache.create({
1433
+ namespace: "cb-sweep",
1434
+ backend: "cluster",
1435
+ ttlMs: 100, // real-clock 100ms
1436
+ sweepIntervalMs: 1000,
1437
+ });
1438
+ // Tag rows are read without an expiry filter, so getTags keeps returning
1439
+ // the tag until the sweep physically deletes the junction row — a clean
1440
+ // signal that the sweep DELETE (not lazy purge) ran.
1441
+ await c.set("k", "v", { tags: ["swept"] });
1442
+ check("cluster sweep: tag present before sweep", (await c.getTags("k")).length === 1);
1443
+ await waitUntil(async function () { return (await c.getTags("k")).length === 0; },
1444
+ { timeoutMs: 5000, label: "cluster sweep timer deletes expired rows + tags" });
1445
+ check("cluster sweep timer deletes expired rows + their tag rows",
1446
+ (await c.getTags("k")).length === 0);
1447
+ await c.close();
1448
+ } finally {
1449
+ await teardownTestDb(tmpDir);
1450
+ }
1451
+ }
1452
+
878
1453
  async function run() {
879
1454
  await testSurface();
880
1455
  await testValidation();
@@ -919,6 +1494,34 @@ async function run() {
919
1494
  await testTagsValidateFormat();
920
1495
  await testInvalidateTagAuditEmit();
921
1496
  await testInvalidateTagOnCluster();
1497
+
1498
+ // Uncovered-branch coverage sweep
1499
+ await testInfinityCapsAccepted();
1500
+ await testInvalidBackendString();
1501
+ await testDefaultSizeOfVariants();
1502
+ await testHasExpiredEvicts();
1503
+ await testBackendErrorAllMethods();
1504
+ await testUpdateMutatorThrows();
1505
+ await testCustomBackendOptionalFallbacks();
1506
+ await testSealRejectedOnNonCluster();
1507
+ await testUpdateUnsupportedAndBadMutator();
1508
+ await testInvalidateTagBadArg();
1509
+ await testUpdateMemoryExpiresAtDecision();
1510
+ await testObservabilitySinkThrowsSwallowed();
1511
+ await testSwrInfinityTtl();
1512
+ await testSwrBackgroundRefreshFailure();
1513
+ await testSwrWriteFailure();
1514
+ await testRedisBackendConstructs();
1515
+ await testWrapSetFailureNonSwr();
1516
+ await testMemoryInfinityWriteArms();
1517
+ await testClusterInfinityAndEmptyClear();
1518
+ await testInvalidationPubsubBadShape();
1519
+ await testInvalidationPubsubCrossNode();
1520
+ await testClusterSlidingTtl();
1521
+ await testClusterSealAndUpdateLifetimes();
1522
+ await testClusterBytesReturnsZero();
1523
+ await testMemorySweepTimerFires();
1524
+ await testClusterSweepTimerFires();
922
1525
  }
923
1526
 
924
1527
  module.exports = { run: run };