@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
@@ -153,17 +153,20 @@ function _makeFakeMysqlDriver() {
153
153
  return { rows: [], affectedRows: 1 };
154
154
  }
155
155
 
156
- // UPDATE _blamejs_leader SET `expiresAt` = ?, `endpoint` = ?
157
- // WHERE `scope` = ? AND `nodeId` = ? AND `leaseId` = ? (renew).
158
- // The provider composes this through b.sql: identifiers are
159
- // backtick-quoted and the scope value binds (params[2]='leader')
160
- // ahead of nodeId (params[3]) / leaseId (params[4]).
161
- var renewMatch = /^UPDATE _blamejs_leader SET[\s\S]*`?expiresAt`? = \?[\s\S]*`?endpoint`? = \?[\s\S]*WHERE `?scope`? = \? AND `?nodeId`? = \? AND `?leaseId`? = \?/i.test(t);
156
+ // UPDATE _blamejs_leader SET `acquiredAt` = ?, `expiresAt` = ?,
157
+ // `endpoint` = ? WHERE `scope` = ? AND `nodeId` = ? AND `leaseId` = ?
158
+ // (renew). The renewal slides acquiredAt forward alongside expiresAt
159
+ // so the lease span stays the configured TTL. b.sql binds the SET
160
+ // values first (acquiredAt=params[0], expiresAt=params[1],
161
+ // endpoint=params[2]) then the WHERE (scope=params[3]='leader',
162
+ // nodeId=params[4], leaseId=params[5]).
163
+ var renewMatch = /^UPDATE _blamejs_leader SET[\s\S]*`?acquiredAt`? = \?[\s\S]*`?expiresAt`? = \?[\s\S]*`?endpoint`? = \?[\s\S]*WHERE `?scope`? = \? AND `?nodeId`? = \? AND `?leaseId`? = \?/i.test(t);
162
164
  if (renewMatch) {
163
165
  var r = rows._blamejs_leader;
164
- if (r && r.nodeId === params[3] && r.leaseId === params[4]) {
165
- r.expiresAt = params[0];
166
- r.endpoint = params[1];
166
+ if (r && r.nodeId === params[4] && r.leaseId === params[5]) {
167
+ r.acquiredAt = params[0];
168
+ r.expiresAt = params[1];
169
+ r.endpoint = params[2];
167
170
  return { rows: [], affectedRows: 1 };
168
171
  }
169
172
  return { rows: [], affectedRows: 0 };
@@ -13,7 +13,10 @@
13
13
  * lib/chain-writer.js — _insertRow / counter primer / tip read on MySQL
14
14
  * lib/break-glass.js — policy.set/get/list (ON DUPLICATE KEY UPSERT) +
15
15
  * grant + unsealRow consume (the backtick-quoted
16
- * rowsConsumed increment), routed to live MySQL
16
+ * rowsConsumed increment), routed to live MySQL,
17
+ * including the concurrent double-claim refusal on
18
+ * a 1-row grant (affected-row-count claim across
19
+ * separate autocommit connections)
17
20
  * lib/crypto-field.js — a K_row (vault.row:) sealed cell stored as TEXT in
18
21
  * MySQL and read back + derived-hash dual-read
19
22
  *
@@ -296,6 +299,7 @@ async function run() {
296
299
  await _testCoercionFidelity();
297
300
  await _testAuditToolsBundle(tmpDir);
298
301
  await _testBreakGlass();
302
+ await _testBreakGlassConcurrentDoubleClaim();
299
303
  await _testCryptoFieldKRowRoundTrip();
300
304
  await _testDerivedHashDualRead();
301
305
  await _testTamperDetection();
@@ -524,6 +528,91 @@ async function _testBreakGlass() {
524
528
  Array.isArray(active) && active.length === 0);
525
529
  }
526
530
 
531
+ // ====================================================================
532
+ // 5b. break-glass concurrent double-claim — TWO in-flight unsealRow calls
533
+ // redeeming the SAME 1-row grant against DIFFERENT rows must admit
534
+ // exactly ONE on live MySQL. The claim is the single-statement atomic
535
+ // UPDATE ... SET rowsConsumed = rowsConsumed + 1 WHERE rowsConsumed <
536
+ // maxRowsPerGrant, and the AFFECTED-ROW COUNT (ROW_COUNT() read in the
537
+ // SAME shim invocation as the DML — connection-consistent) is the
538
+ // per-caller win/lose signal. On this per-statement shim every
539
+ // statement is its own real MySQL connection and autocommit
540
+ // transaction — exactly the shape the claim must survive: unlike the
541
+ // FOR-UPDATE-SKIP-LOCKED lease flows (whose cross-statement locks the
542
+ // stateless shim cannot hold), the claim holds no lock across
543
+ // statements, so the shim exercises it faithfully. The two callers
544
+ // advance in lockstep (identical await chains launched in the same
545
+ // tick; every shim statement is synchronous, so neither caller can
546
+ // run its whole flow before the other's first read) — both pre-flight
547
+ // grant reads observe rowsConsumed = 0, then the two claim UPDATEs
548
+ // land as two separate transactions and InnoDB re-evaluates the
549
+ // loser's WHERE against the winner's committed increment: 0 affected
550
+ // rows. (A held-lock barrier like the Postgres file's is impossible
551
+ // here: a blocked UPDATE inside the execFileSync shim would freeze
552
+ // the event loop against the lock we'd need to release.) Inferring
553
+ // the claim from a re-read of rowsConsumed instead admits BOTH
554
+ // callers (the winner's increment is visible to the loser's re-read),
555
+ // unsealing two regulated records under a maxRowsPerGrant:1 grant.
556
+ // ====================================================================
557
+ async function _testBreakGlassConcurrentDoubleClaim() {
558
+ // A second glass-locked row so the two redemptions target DIFFERENT
559
+ // rows — a same-row retry can't mask a double-spend.
560
+ var patient2 = b.cryptoField.sealRow("patients", {
561
+ _id: "patient-002", mrn: "MRN-2", ssn: "987-65-4321",
562
+ residency: "eu", notes: "type 2 diabetes",
563
+ });
564
+ await b.clusterStorage.execute(
565
+ "INSERT INTO `patients` (`_id`,`mrn`,`ssn`,`residency`,`notes`) VALUES (?,?,?,?,?)",
566
+ [patient2._id, patient2.mrn, patient2.ssn, patient2.residency, patient2.notes]);
567
+
568
+ // Fresh 1-row grant — the policy from the previous section already pins
569
+ // maxRowsPerGrant: 1 (row-by-row auth).
570
+ var totpSecret = b.auth.totp.generateSecret();
571
+ var nowMs = Date.now();
572
+ var code = b.auth.totp.generate(totpSecret, { now: nowMs });
573
+ var req = {
574
+ user: { id: "dr-house", scopes: [] }, socket: { remoteAddress: "127.0.0.1" },
575
+ headers: { "user-agent": "test-agent" }, method: "POST", url: "/admin/break-glass",
576
+ };
577
+ var handle = await b.breakGlass.grant({
578
+ req: req, table: "patients", columns: ["ssn"],
579
+ reason: "ER admit disambiguating two candidate records",
580
+ factor: { type: "totp", secret: totpSecret, code: code, now: nowMs },
581
+ });
582
+ check("break-glass double-claim (mysql): fresh 1-row grant minted (rowsRemaining 1)",
583
+ handle && handle.rowsRemaining === 1);
584
+
585
+ var results = await Promise.allSettled([
586
+ b.breakGlass.unsealRow(handle, "patients", "patient-001"),
587
+ b.breakGlass.unsealRow(handle, "patients", "patient-002"),
588
+ ]);
589
+ var ok = results.filter(function (r) { return r.status === "fulfilled"; });
590
+ var bad = results.filter(function (r) { return r.status === "rejected"; });
591
+ check("break-glass double-claim (mysql): exactly ONE of two concurrent unseals " +
592
+ "succeeded under the 1-row grant on live MySQL",
593
+ ok.length === 1 && bad.length === 1);
594
+ check("break-glass double-claim (mysql): the winner decrypted its glass-locked ssn",
595
+ ok.length === 1 &&
596
+ (ok[0].value.ssn === "123-45-6789" || ok[0].value.ssn === "987-65-4321"));
597
+ var loser = bad.length === 1 ? bad[0].reason : null;
598
+ check("break-glass double-claim (mysql): the loser is refused as grant-exhausted",
599
+ loser !== null && /breakglass\/grant-exhausted/.test(String((loser && loser.code) || "")));
600
+ // The loser must lose AT THE ATOMIC CLAIM ("exhausted by a concurrent
601
+ // read" — 0 affected rows), NOT at the pre-flight counter check ("has
602
+ // consumed all ... allowed rows") — the pre-flight path never raced. A
603
+ // re-read-based claim admits both callers and neither message appears.
604
+ check("break-glass double-claim (mysql): the loser was refused by the affected-" +
605
+ "row-count claim, not the pre-flight check [loser: " +
606
+ String(loser && loser.message) + "]",
607
+ loser !== null &&
608
+ /exhausted by a concurrent read/.test(String((loser && loser.message) || "")));
609
+
610
+ check("break-glass double-claim (mysql): rowsConsumed on MySQL is exactly 1 — " +
611
+ "the 1-row grant was spent once, not twice",
612
+ Number(_scalar("SELECT `rowsConsumed` FROM `_blamejs_break_glass_grants` " +
613
+ "WHERE `_id` = '" + handle.id + "'")) === 1);
614
+ }
615
+
527
616
  // ====================================================================
528
617
  // 6. crypto-field K_row (vault.row:) sealed cell stored on MySQL + read
529
618
  // back, proving the typed codec survives a real TEXT round-trip. The
@@ -12,7 +12,10 @@
12
12
  * lib/chain-writer.js — _insertRow / counter primer / tip read on a real
13
13
  * backend
14
14
  * lib/break-glass.js — policy.set/get/list + grant + unsealRow consume,
15
- * all routed through clusterStorage to live Postgres
15
+ * all routed through clusterStorage to live Postgres,
16
+ * including the concurrent double-claim refusal on a
17
+ * 1-row grant (affected-row-count claim under real
18
+ * row locking on two parallel sessions)
16
19
  * lib/crypto-field.js — a K_row (vault.row:) sealed cell stored as TEXT in
17
20
  * Postgres and read back, proving the typed codec
18
21
  * (Buffer/object) survives a real round-trip
@@ -341,6 +344,7 @@ async function run() {
341
344
  await _testCoercionFidelity(liveQueryAll);
342
345
  await _testAuditToolsBundleAndPurge(tmpDir);
343
346
  await _testBreakGlass();
347
+ await _testBreakGlassConcurrentDoubleClaim(driver);
344
348
  await _testCryptoFieldKRowRoundTrip(liveQueryAll);
345
349
  await _testTamperDetection();
346
350
 
@@ -708,6 +712,123 @@ async function _testBreakGlass() {
708
712
  exhaustedErr && /exhausted/i.test((exhaustedErr.code || "") + (exhaustedErr.message || "")));
709
713
  }
710
714
 
715
+ // ====================================================================
716
+ // 5b. break-glass concurrent double-claim — TWO in-flight unsealRow calls
717
+ // redeeming the SAME 1-row grant against DIFFERENT rows must admit
718
+ // exactly ONE. The claim is the atomic UPDATE ... SET rowsConsumed =
719
+ // rowsConsumed + 1 WHERE rowsConsumed < maxRowsPerGrant, and the
720
+ // AFFECTED-ROW COUNT is the per-caller win/lose signal — under real
721
+ // Postgres row locking, on two SEPARATE pooled psql sessions
722
+ // (concurrency the single-connection node:sqlite layer-0 run cannot
723
+ // produce). A dedicated holder session takes FOR UPDATE on the grant
724
+ // row so BOTH claim UPDATEs park behind it while both callers'
725
+ // pre-flight reads (MVCC snapshot reads — not blocked) observe
726
+ // rowsConsumed = 0; releasing the lock lets Postgres serialize the
727
+ // two UPDATEs — the loser re-evaluates its WHERE against the winner's
728
+ // committed increment and changes 0 rows. Inferring the claim from a
729
+ // re-read of rowsConsumed instead admits BOTH callers (the winner's
730
+ // increment is visible to the loser's re-read), unsealing two
731
+ // regulated records under a maxRowsPerGrant:1 grant.
732
+ // ====================================================================
733
+ async function _testBreakGlassConcurrentDoubleClaim(driver) {
734
+ // A second glass-locked row so the two redemptions target DIFFERENT
735
+ // rows — a same-row retry can't mask a double-spend.
736
+ var patient2 = b.cryptoField.sealRow("patients", {
737
+ _id: "patient-002", mrn: "MRN-2", ssn: "987-65-4321",
738
+ residency: "eu", notes: "type 2 diabetes",
739
+ });
740
+ await b.clusterStorage.execute(
741
+ 'INSERT INTO patients ("_id","mrn","ssn","residency","notes") VALUES (?,?,?,?,?)',
742
+ [patient2._id, patient2.mrn, patient2.ssn, patient2.residency, patient2.notes]);
743
+
744
+ // Fresh 1-row grant — the policy from the previous section already pins
745
+ // maxRowsPerGrant: 1 (row-by-row auth).
746
+ var totpSecret = b.auth.totp.generateSecret();
747
+ var nowMs = Date.now();
748
+ var code = b.auth.totp.generate(totpSecret, { now: nowMs });
749
+ var req = {
750
+ user: { id: "dr-house", scopes: [] },
751
+ socket: { remoteAddress: "127.0.0.1" },
752
+ headers: { "user-agent": "test-agent" },
753
+ method: "POST",
754
+ url: "/admin/break-glass",
755
+ };
756
+ var handle = await b.breakGlass.grant({
757
+ req: req,
758
+ table: "patients",
759
+ columns: ["ssn"],
760
+ reason: "ER admit disambiguating two candidate records",
761
+ factor: { type: "totp", secret: totpSecret, code: code, now: nowMs },
762
+ });
763
+ check("break-glass double-claim: fresh 1-row grant minted (rowsRemaining 1)",
764
+ handle && handle.rowsRemaining === 1);
765
+
766
+ // Hold the grant row's lock from a dedicated raw session so BOTH claim
767
+ // UPDATEs park behind it — removing every timing assumption: neither
768
+ // caller can win the slot before both have reached the atomic claim.
769
+ var holder = await driver.connect();
770
+ var race = null;
771
+ try {
772
+ await driver.query(holder, "BEGIN", []);
773
+ var locked = await driver.query(holder,
774
+ 'SELECT "_id" FROM _blamejs_break_glass_grants ' +
775
+ "WHERE \"_id\" = '" + handle.id + "' FOR UPDATE", []);
776
+ check("break-glass double-claim: holder session locked the grant row",
777
+ locked.rows.length === 1);
778
+
779
+ race = Promise.allSettled([
780
+ b.breakGlass.unsealRow(handle, "patients", "patient-001"),
781
+ b.breakGlass.unsealRow(handle, "patients", "patient-002"),
782
+ ]);
783
+
784
+ // Both claim UPDATEs must be observed BLOCKED on the held row lock —
785
+ // the proof that both callers passed the pre-flight counter check and
786
+ // committed to the atomic claim before either could win.
787
+ await helpers.waitUntil(function () {
788
+ var n = _psql(
789
+ "SELECT count(*) AS n FROM pg_stat_activity " +
790
+ "WHERE wait_event_type = 'Lock' " +
791
+ "AND query LIKE 'UPDATE%_blamejs_break_glass_grants%';").trim();
792
+ return Number(n) >= 2;
793
+ }, {
794
+ timeoutMs: 15000,
795
+ label: "break-glass double-claim: both claim UPDATEs blocked on the held grant-row lock",
796
+ });
797
+ } finally {
798
+ try { await driver.query(holder, "COMMIT", []); } catch (_e) { /* best effort */ }
799
+ try { await driver.close(holder); } catch (_e) { /* best effort */ }
800
+ }
801
+
802
+ var results = await race;
803
+ var ok = results.filter(function (r) { return r.status === "fulfilled"; });
804
+ var bad = results.filter(function (r) { return r.status === "rejected"; });
805
+ check("break-glass double-claim: exactly ONE of two concurrent unseals " +
806
+ "succeeded under the 1-row grant on live Postgres",
807
+ ok.length === 1 && bad.length === 1);
808
+ check("break-glass double-claim: the winner decrypted its glass-locked ssn",
809
+ ok.length === 1 &&
810
+ (ok[0].value.ssn === "123-45-6789" || ok[0].value.ssn === "987-65-4321"));
811
+ var loser = bad.length === 1 ? bad[0].reason : null;
812
+ check("break-glass double-claim: the loser is refused as grant-exhausted",
813
+ loser !== null &&
814
+ /breakglass\/grant-exhausted/.test(String((loser && loser.code) || "")));
815
+ // The loser must lose AT THE ATOMIC CLAIM ("exhausted by a concurrent
816
+ // read" — 0 affected rows), NOT at the pre-flight counter check ("has
817
+ // consumed all ... allowed rows") — the pre-flight path never raced. A
818
+ // re-read-based claim admits both callers and neither message appears.
819
+ check("break-glass double-claim: the loser was refused by the affected-" +
820
+ "row-count claim, not the pre-flight check [loser: " +
821
+ String(loser && loser.message) + "]",
822
+ loser !== null &&
823
+ /exhausted by a concurrent read/.test(String((loser && loser.message) || "")));
824
+
825
+ var spent = _psql('SELECT "rowsConsumed" FROM _blamejs_break_glass_grants ' +
826
+ "WHERE \"_id\" = '" + handle.id + "';");
827
+ check("break-glass double-claim: rowsConsumed on Postgres is exactly 1 — " +
828
+ "the 1-row grant was spent once, not twice",
829
+ spent.trim() === "1");
830
+ }
831
+
711
832
  // ====================================================================
712
833
  // 6. crypto-field K_row (vault.row:) sealed cell stored on Postgres + read
713
834
  // back, proving the typed codec (Buffer / object / string) survives a
@@ -312,6 +312,7 @@ async function run() {
312
312
  await _section("session", _testSession);
313
313
  await _section("nonce", _testNonceCluster);
314
314
  await _section("rate-limit", _testRateLimitCluster);
315
+ await _section("sql-offset", _testOffsetWithoutLimit);
315
316
  } finally {
316
317
  try { await b.cluster.shutdown(); } catch (_e) {}
317
318
  b.cluster._resetForTest();
@@ -609,6 +610,35 @@ async function _testRateLimitCluster() {
609
610
  if (typeof backend.close === "function") backend.close();
610
611
  }
611
612
 
613
+ // ======================================================================
614
+ // b.sql offset-without-limit sentinel on real MySQL.
615
+ // A SELECT with .offset(n) and no .limit() emits the max-unsigned-
616
+ // BIGINT LIMIT sentinel (`LIMIT 18446744073709551615 OFFSET n`) for the
617
+ // mysql dialect — MySQL rejects a bare OFFSET as a syntax error, so the
618
+ // sentinel is what makes offset-without-limit run at all. Layer-0 only
619
+ // string-asserts the mysql emission and executes it live on sqlite;
620
+ // this PREPARES and RUNS the emitted statement on the live server and
621
+ // asserts it returns exactly the rows after the offset.
622
+ // ======================================================================
623
+ async function _testOffsetWithoutLimit() {
624
+ _execMysql("DROP TABLE IF EXISTS `dl_mysql_offset`");
625
+ _execMysql("CREATE TABLE `dl_mysql_offset` (`a` BIGINT NOT NULL)");
626
+ _execMysql("INSERT INTO `dl_mysql_offset` VALUES (1),(2),(3),(4),(5)");
627
+ try {
628
+ var built = b.sql.select("dl_mysql_offset", { dialect: "mysql", quoteName: true })
629
+ .columns(["a"]).orderBy("a").offset(2).toSql();
630
+ softCheck("sql-offset(mysql): offset-without-limit emits the max-BIGINT LIMIT sentinel",
631
+ built.sql.indexOf("LIMIT 18446744073709551615 OFFSET 2") !== -1);
632
+ var res = await b.externalDb.query(built.sql, built.params, { backend: "ops" });
633
+ var got = (res.rows || []).map(function (r) { return Number(r.a); });
634
+ softCheck("sql-offset(mysql): the emitted offset-only SELECT runs on real MySQL " +
635
+ "(a bare OFFSET is a syntax error there) and returns exactly the rows after the offset",
636
+ JSON.stringify(got) === JSON.stringify([3, 4, 5]));
637
+ } finally {
638
+ _execMysql("DROP TABLE IF EXISTS `dl_mysql_offset`");
639
+ }
640
+ }
641
+
612
642
  module.exports = { run: run };
613
643
 
614
644
  if (require.main === module) {
@@ -316,6 +316,7 @@ async function run() {
316
316
  await _section("cache", _testCacheCluster);
317
317
  await _section("nonce", _testNonceCluster);
318
318
  await _section("rate-limit", _testRateLimitCluster);
319
+ await _section("sql-offset", _testOffsetWithoutLimit);
319
320
  } finally {
320
321
  try { await b.cluster.shutdown(); } catch (_e) {}
321
322
  b.cluster._resetForTest();
@@ -569,6 +570,34 @@ async function _testRateLimitCluster() {
569
570
  if (typeof backend.close === "function") backend.close();
570
571
  }
571
572
 
573
+ // ======================================================================
574
+ // b.sql offset-without-limit sentinel on real Postgres.
575
+ // A SELECT with .offset(n) and no .limit() emits `LIMIT ALL OFFSET n`
576
+ // for the postgres dialect (one query text across every backend).
577
+ // Layer-0 only string-asserts the postgres emission and executes it
578
+ // live on sqlite; this PREPARES and RUNS the emitted statement on the
579
+ // live server and asserts it returns exactly the rows after the offset
580
+ // — proving the LIMIT ALL sentinel is real Postgres syntax.
581
+ // ======================================================================
582
+ async function _testOffsetWithoutLimit() {
583
+ _psql('DROP TABLE IF EXISTS "dl_pg_offset";');
584
+ _psql('CREATE TABLE "dl_pg_offset" ("a" INTEGER NOT NULL);\n' +
585
+ 'INSERT INTO "dl_pg_offset" VALUES (1),(2),(3),(4),(5);');
586
+ try {
587
+ var built = b.sql.select("dl_pg_offset", { dialect: "postgres", quoteName: true })
588
+ .columns(["a"]).orderBy("a").offset(2).toSql();
589
+ softCheck("sql-offset(pg): offset-without-limit emits the LIMIT ALL sentinel",
590
+ built.sql.indexOf("LIMIT ALL OFFSET 2") !== -1);
591
+ var res = await b.externalDb.query(built.sql, built.params, { backend: "ops" });
592
+ var got = (res.rows || []).map(function (r) { return Number(r.a); });
593
+ softCheck("sql-offset(pg): the emitted offset-only SELECT runs on real Postgres " +
594
+ "and returns exactly the rows after the offset",
595
+ JSON.stringify(got) === JSON.stringify([3, 4, 5]));
596
+ } finally {
597
+ _psql('DROP TABLE IF EXISTS "dl_pg_offset";');
598
+ }
599
+ }
600
+
572
601
  module.exports = { run: run };
573
602
 
574
603
  if (require.main === module) {