@blamejs/blamejs-shop 0.5.12 → 0.5.14

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 (522) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/lib/asset-manifest.json +1 -1
  3. package/lib/sales-tax-filings.js +143 -0
  4. package/lib/vendor/MANIFEST.json +632 -416
  5. package/lib/vendor/blamejs/.clusterfuzzlite/Dockerfile +21 -10
  6. package/lib/vendor/blamejs/.clusterfuzzlite/build.sh +30 -9
  7. package/lib/vendor/blamejs/.github/dependabot.yml +8 -0
  8. package/lib/vendor/blamejs/.github/workflows/actions-lint.yml +3 -3
  9. package/lib/vendor/blamejs/.github/workflows/cflite_batch.yml +7 -2
  10. package/lib/vendor/blamejs/.github/workflows/cflite_pr.yml +7 -2
  11. package/lib/vendor/blamejs/.github/workflows/ci.yml +21 -21
  12. package/lib/vendor/blamejs/.github/workflows/codeql.yml +3 -3
  13. package/lib/vendor/blamejs/.github/workflows/npm-publish.yml +4 -4
  14. package/lib/vendor/blamejs/.github/workflows/release-container.yml +7 -7
  15. package/lib/vendor/blamejs/.github/workflows/scorecard.yml +3 -3
  16. package/lib/vendor/blamejs/.github/workflows/sha-to-tag-verify.yml +1 -1
  17. package/lib/vendor/blamejs/.gitignore +2 -0
  18. package/lib/vendor/blamejs/CHANGELOG.md +122 -0
  19. package/lib/vendor/blamejs/NOTICE +26 -1
  20. package/lib/vendor/blamejs/SECURITY.md +1 -1
  21. package/lib/vendor/blamejs/api-snapshot.json +207 -5
  22. package/lib/vendor/blamejs/docker/keycloak/realm-blamejs-test.json +29 -0
  23. package/lib/vendor/blamejs/examples/wiki/DEPLOY.md +1 -0
  24. package/lib/vendor/blamejs/examples/wiki/lib/build-app.js +31 -0
  25. package/lib/vendor/blamejs/examples/wiki/lib/source-comment-block-validator.js +109 -0
  26. package/lib/vendor/blamejs/examples/wiki/nginx.conf +106 -0
  27. package/lib/vendor/blamejs/examples/wiki/package-lock.json +1 -1
  28. package/lib/vendor/blamejs/examples/wiki/test/e2e.js +92 -0
  29. package/lib/vendor/blamejs/fuzz/asn1-der.fuzz.js +28 -0
  30. package/lib/vendor/blamejs/fuzz/cms-codec.fuzz.js +17 -0
  31. package/lib/vendor/blamejs/fuzz/link-header.fuzz.js +18 -0
  32. package/lib/vendor/blamejs/index.js +6 -0
  33. package/lib/vendor/blamejs/lib/a2a.js +4 -4
  34. package/lib/vendor/blamejs/lib/agent-idempotency.js +18 -2
  35. package/lib/vendor/blamejs/lib/agent-saga.js +36 -8
  36. package/lib/vendor/blamejs/lib/agent-snapshot.js +63 -6
  37. package/lib/vendor/blamejs/lib/app-shutdown.js +23 -20
  38. package/lib/vendor/blamejs/lib/archive-read.js +8 -0
  39. package/lib/vendor/blamejs/lib/archive-tar.js +12 -2
  40. package/lib/vendor/blamejs/lib/arg-parser.js +49 -5
  41. package/lib/vendor/blamejs/lib/asn1-der.js +12 -0
  42. package/lib/vendor/blamejs/lib/audit-sign.js +47 -1
  43. package/lib/vendor/blamejs/lib/audit.js +71 -8
  44. package/lib/vendor/blamejs/lib/auth/ciba.js +14 -2
  45. package/lib/vendor/blamejs/lib/auth/fido-mds3.js +58 -47
  46. package/lib/vendor/blamejs/lib/auth/jwt.js +34 -0
  47. package/lib/vendor/blamejs/lib/auth/oauth.js +90 -13
  48. package/lib/vendor/blamejs/lib/auth/oid4vci.js +20 -17
  49. package/lib/vendor/blamejs/lib/auth/openid-federation.js +214 -23
  50. package/lib/vendor/blamejs/lib/auth/saml.js +38 -20
  51. package/lib/vendor/blamejs/lib/auth/sd-jwt-vc.js +10 -4
  52. package/lib/vendor/blamejs/lib/backup/bundle.js +13 -3
  53. package/lib/vendor/blamejs/lib/backup/index.js +16 -5
  54. package/lib/vendor/blamejs/lib/backup/manifest.js +18 -5
  55. package/lib/vendor/blamejs/lib/base32.js +21 -0
  56. package/lib/vendor/blamejs/lib/break-glass.js +19 -10
  57. package/lib/vendor/blamejs/lib/bundler.js +5 -1
  58. package/lib/vendor/blamejs/lib/cache-status.js +3 -7
  59. package/lib/vendor/blamejs/lib/calendar.js +21 -1
  60. package/lib/vendor/blamejs/lib/cbor.js +12 -1
  61. package/lib/vendor/blamejs/lib/cert.js +29 -11
  62. package/lib/vendor/blamejs/lib/cli.js +94 -24
  63. package/lib/vendor/blamejs/lib/cloud-events.js +2 -2
  64. package/lib/vendor/blamejs/lib/cluster-provider-db.js +13 -3
  65. package/lib/vendor/blamejs/lib/codepoint-class.js +85 -0
  66. package/lib/vendor/blamejs/lib/compliance-ai-act-prohibited.js +8 -4
  67. package/lib/vendor/blamejs/lib/compliance-ai-act-transparency.js +19 -4
  68. package/lib/vendor/blamejs/lib/compliance-ai-act.js +6 -8
  69. package/lib/vendor/blamejs/lib/content-credentials.js +1 -1
  70. package/lib/vendor/blamejs/lib/content-digest.js +2 -1
  71. package/lib/vendor/blamejs/lib/cookies.js +13 -3
  72. package/lib/vendor/blamejs/lib/cose.js +31 -16
  73. package/lib/vendor/blamejs/lib/crypto-field.js +32 -0
  74. package/lib/vendor/blamejs/lib/crypto-oprf.js +11 -2
  75. package/lib/vendor/blamejs/lib/crypto-xwing.js +22 -4
  76. package/lib/vendor/blamejs/lib/crypto.js +314 -19
  77. package/lib/vendor/blamejs/lib/csp.js +11 -3
  78. package/lib/vendor/blamejs/lib/daemon.js +270 -24
  79. package/lib/vendor/blamejs/lib/dark-patterns.js +5 -2
  80. package/lib/vendor/blamejs/lib/db-declare-view.js +2 -2
  81. package/lib/vendor/blamejs/lib/db-query.js +34 -7
  82. package/lib/vendor/blamejs/lib/db.js +18 -6
  83. package/lib/vendor/blamejs/lib/dbsc.js +17 -0
  84. package/lib/vendor/blamejs/lib/dev.js +21 -2
  85. package/lib/vendor/blamejs/lib/dsr.js +157 -102
  86. package/lib/vendor/blamejs/lib/external-db.js +41 -2
  87. package/lib/vendor/blamejs/lib/file-upload.js +25 -7
  88. package/lib/vendor/blamejs/lib/flag-providers.js +27 -15
  89. package/lib/vendor/blamejs/lib/forms.js +113 -27
  90. package/lib/vendor/blamejs/lib/gate-contract.js +23 -10
  91. package/lib/vendor/blamejs/lib/gdpr-ropa.js +8 -1
  92. package/lib/vendor/blamejs/lib/guard-agent-registry.js +1 -1
  93. package/lib/vendor/blamejs/lib/guard-archive.js +2 -2
  94. package/lib/vendor/blamejs/lib/guard-cidr.js +27 -1
  95. package/lib/vendor/blamejs/lib/guard-graphql.js +30 -11
  96. package/lib/vendor/blamejs/lib/guard-html.js +26 -53
  97. package/lib/vendor/blamejs/lib/guard-image.js +24 -5
  98. package/lib/vendor/blamejs/lib/guard-imap-command.js +10 -2
  99. package/lib/vendor/blamejs/lib/guard-jmap.js +19 -3
  100. package/lib/vendor/blamejs/lib/guard-jwt.js +18 -2
  101. package/lib/vendor/blamejs/lib/guard-list-unsubscribe.js +2 -2
  102. package/lib/vendor/blamejs/lib/guard-managesieve-command.js +10 -2
  103. package/lib/vendor/blamejs/lib/guard-markdown.js +11 -24
  104. package/lib/vendor/blamejs/lib/guard-pdf.js +18 -2
  105. package/lib/vendor/blamejs/lib/guard-pop3-command.js +10 -2
  106. package/lib/vendor/blamejs/lib/guard-regex.js +8 -5
  107. package/lib/vendor/blamejs/lib/guard-svg.js +31 -32
  108. package/lib/vendor/blamejs/lib/guard-time.js +1 -1
  109. package/lib/vendor/blamejs/lib/guard-uuid.js +2 -2
  110. package/lib/vendor/blamejs/lib/html-balance.js +3 -3
  111. package/lib/vendor/blamejs/lib/http-client-cache.js +82 -4
  112. package/lib/vendor/blamejs/lib/http-client-cookie-jar.js +16 -1
  113. package/lib/vendor/blamejs/lib/http-client.js +39 -7
  114. package/lib/vendor/blamejs/lib/http-message-signature.js +35 -1
  115. package/lib/vendor/blamejs/lib/i18n-messageformat.js +31 -6
  116. package/lib/vendor/blamejs/lib/i18n.js +35 -21
  117. package/lib/vendor/blamejs/lib/incident-report.js +8 -1
  118. package/lib/vendor/blamejs/lib/ip-utils.js +11 -1
  119. package/lib/vendor/blamejs/lib/json-path.js +23 -1
  120. package/lib/vendor/blamejs/lib/jwk.js +20 -3
  121. package/lib/vendor/blamejs/lib/link-header.js +2 -1
  122. package/lib/vendor/blamejs/lib/log-stream-otlp-grpc.js +5 -1
  123. package/lib/vendor/blamejs/lib/log-stream-otlp.js +5 -1
  124. package/lib/vendor/blamejs/lib/log-stream.js +8 -3
  125. package/lib/vendor/blamejs/lib/mail-auth.js +123 -22
  126. package/lib/vendor/blamejs/lib/mail-bimi.js +1 -1
  127. package/lib/vendor/blamejs/lib/mail-bounce.js +8 -0
  128. package/lib/vendor/blamejs/lib/mail-crypto-pgp.js +46 -10
  129. package/lib/vendor/blamejs/lib/mail-dav.js +22 -3
  130. package/lib/vendor/blamejs/lib/mail-dkim.js +96 -30
  131. package/lib/vendor/blamejs/lib/mail-helo.js +6 -1
  132. package/lib/vendor/blamejs/lib/mail-scan.js +23 -16
  133. package/lib/vendor/blamejs/lib/mail-send-deliver.js +34 -8
  134. package/lib/vendor/blamejs/lib/mail-server-imap.js +3 -4
  135. package/lib/vendor/blamejs/lib/mail-server-managesieve.js +7 -11
  136. package/lib/vendor/blamejs/lib/mail-server-mx.js +93 -7
  137. package/lib/vendor/blamejs/lib/mail-server-registry.js +8 -2
  138. package/lib/vendor/blamejs/lib/mail.js +15 -5
  139. package/lib/vendor/blamejs/lib/metrics.js +268 -63
  140. package/lib/vendor/blamejs/lib/middleware/age-gate.js +7 -1
  141. package/lib/vendor/blamejs/lib/middleware/asyncapi-serve.js +1 -1
  142. package/lib/vendor/blamejs/lib/middleware/body-parser.js +19 -4
  143. package/lib/vendor/blamejs/lib/middleware/bot-guard.js +5 -9
  144. package/lib/vendor/blamejs/lib/middleware/csp-report.js +40 -8
  145. package/lib/vendor/blamejs/lib/middleware/csrf-protect.js +24 -10
  146. package/lib/vendor/blamejs/lib/middleware/dpop.js +10 -5
  147. package/lib/vendor/blamejs/lib/middleware/index.js +6 -1
  148. package/lib/vendor/blamejs/lib/middleware/nel.js +1 -1
  149. package/lib/vendor/blamejs/lib/middleware/openapi-serve.js +1 -1
  150. package/lib/vendor/blamejs/lib/middleware/rate-limit.js +12 -1
  151. package/lib/vendor/blamejs/lib/middleware/require-bound-key.js +1 -1
  152. package/lib/vendor/blamejs/lib/middleware/scim-server.js +1 -1
  153. package/lib/vendor/blamejs/lib/middleware/tus-upload.js +6 -2
  154. package/lib/vendor/blamejs/lib/mtls-ca.js +18 -2
  155. package/lib/vendor/blamejs/lib/network-dns-resolver.js +11 -1
  156. package/lib/vendor/blamejs/lib/network-dns.js +21 -2
  157. package/lib/vendor/blamejs/lib/network-tls.js +69 -7
  158. package/lib/vendor/blamejs/lib/nonce-store.js +9 -1
  159. package/lib/vendor/blamejs/lib/object-store/gcs.js +7 -0
  160. package/lib/vendor/blamejs/lib/object-store/sigv4.js +31 -0
  161. package/lib/vendor/blamejs/lib/observability-otlp-exporter.js +1 -1
  162. package/lib/vendor/blamejs/lib/outbox.js +1 -1
  163. package/lib/vendor/blamejs/lib/parsers/safe-ini.js +9 -1
  164. package/lib/vendor/blamejs/lib/parsers/safe-toml.js +10 -1
  165. package/lib/vendor/blamejs/lib/permissions.js +6 -3
  166. package/lib/vendor/blamejs/lib/pid-probe.js +55 -0
  167. package/lib/vendor/blamejs/lib/pqc-agent.js +8 -1
  168. package/lib/vendor/blamejs/lib/pqc-software.js +3 -3
  169. package/lib/vendor/blamejs/lib/pubsub.js +20 -9
  170. package/lib/vendor/blamejs/lib/queue-local.js +8 -1
  171. package/lib/vendor/blamejs/lib/queue-redis.js +5 -0
  172. package/lib/vendor/blamejs/lib/redact.js +54 -0
  173. package/lib/vendor/blamejs/lib/restore-bundle.js +10 -2
  174. package/lib/vendor/blamejs/lib/restore.js +19 -0
  175. package/lib/vendor/blamejs/lib/retention.js +12 -4
  176. package/lib/vendor/blamejs/lib/router.js +60 -6
  177. package/lib/vendor/blamejs/lib/safe-buffer.js +69 -0
  178. package/lib/vendor/blamejs/lib/safe-decompress.js +8 -2
  179. package/lib/vendor/blamejs/lib/safe-dns.js +25 -20
  180. package/lib/vendor/blamejs/lib/safe-ical.js +7 -3
  181. package/lib/vendor/blamejs/lib/safe-mime.js +12 -1
  182. package/lib/vendor/blamejs/lib/safe-object.js +80 -0
  183. package/lib/vendor/blamejs/lib/safe-path.js +52 -4
  184. package/lib/vendor/blamejs/lib/safe-redirect.js +10 -2
  185. package/lib/vendor/blamejs/lib/safe-schema.js +4 -1
  186. package/lib/vendor/blamejs/lib/safe-sieve.js +33 -1
  187. package/lib/vendor/blamejs/lib/safe-sql.js +88 -0
  188. package/lib/vendor/blamejs/lib/safe-vcard.js +7 -3
  189. package/lib/vendor/blamejs/lib/scheduler.js +8 -1
  190. package/lib/vendor/blamejs/lib/security-assert.js +6 -6
  191. package/lib/vendor/blamejs/lib/self-update-standalone-verifier.js +74 -27
  192. package/lib/vendor/blamejs/lib/self-update.js +517 -87
  193. package/lib/vendor/blamejs/lib/server-timing.js +2 -4
  194. package/lib/vendor/blamejs/lib/session.js +34 -12
  195. package/lib/vendor/blamejs/lib/sql.js +15 -1
  196. package/lib/vendor/blamejs/lib/ssrf-guard.js +52 -0
  197. package/lib/vendor/blamejs/lib/static.js +55 -13
  198. package/lib/vendor/blamejs/lib/storage.js +8 -2
  199. package/lib/vendor/blamejs/lib/subject.js +6 -1
  200. package/lib/vendor/blamejs/lib/tenant-quota.js +52 -13
  201. package/lib/vendor/blamejs/lib/tls-exporter.js +3 -3
  202. package/lib/vendor/blamejs/lib/tsa.js +34 -13
  203. package/lib/vendor/blamejs/lib/uri-template.js +8 -1
  204. package/lib/vendor/blamejs/lib/vault/index.js +13 -0
  205. package/lib/vendor/blamejs/lib/vc.js +44 -5
  206. package/lib/vendor/blamejs/lib/vendor/MANIFEST.json +26 -26
  207. package/lib/vendor/blamejs/lib/vendor/noble-ciphers.cjs +792 -1
  208. package/lib/vendor/blamejs/lib/vendor/noble-curves.cjs +3443 -1
  209. package/lib/vendor/blamejs/lib/vendor/noble-post-quantum.cjs +2737 -1
  210. package/lib/vendor/blamejs/lib/vendor/pki.cjs +39550 -13
  211. package/lib/vendor/blamejs/lib/vendor/public-suffix-list.dat +55 -53
  212. package/lib/vendor/blamejs/lib/vendor/public-suffix-list.data.js +5551 -5554
  213. package/lib/vendor/blamejs/lib/vendor/simplewebauthn-server.cjs +22459 -32
  214. package/lib/vendor/blamejs/lib/watcher.js +89 -17
  215. package/lib/vendor/blamejs/lib/webhook-dispatcher.js +25 -3
  216. package/lib/vendor/blamejs/lib/webhook.js +12 -2
  217. package/lib/vendor/blamejs/lib/ws-client.js +32 -1
  218. package/lib/vendor/blamejs/lib/xml-c14n.js +29 -1
  219. package/lib/vendor/blamejs/oss-fuzz/projects/blamejs/Dockerfile +1 -1
  220. package/lib/vendor/blamejs/package-lock.json +2 -2
  221. package/lib/vendor/blamejs/package.json +1 -1
  222. package/lib/vendor/blamejs/release-notes/v0.16.x.json +1462 -0
  223. package/lib/vendor/blamejs/release-notes/v0.17.0.json +31 -0
  224. package/lib/vendor/blamejs/release-notes/v0.17.1.json +31 -0
  225. package/lib/vendor/blamejs/release-notes/v0.17.10.json +30 -0
  226. package/lib/vendor/blamejs/release-notes/v0.17.11.json +22 -0
  227. package/lib/vendor/blamejs/release-notes/v0.17.12.json +18 -0
  228. package/lib/vendor/blamejs/release-notes/v0.17.13.json +77 -0
  229. package/lib/vendor/blamejs/release-notes/v0.17.14.json +40 -0
  230. package/lib/vendor/blamejs/release-notes/v0.17.15.json +18 -0
  231. package/lib/vendor/blamejs/release-notes/v0.17.16.json +27 -0
  232. package/lib/vendor/blamejs/release-notes/v0.17.17.json +31 -0
  233. package/lib/vendor/blamejs/release-notes/v0.17.18.json +18 -0
  234. package/lib/vendor/blamejs/release-notes/v0.17.19.json +18 -0
  235. package/lib/vendor/blamejs/release-notes/v0.17.2.json +26 -0
  236. package/lib/vendor/blamejs/release-notes/v0.17.20.json +43 -0
  237. package/lib/vendor/blamejs/release-notes/v0.17.21.json +26 -0
  238. package/lib/vendor/blamejs/release-notes/v0.17.22.json +18 -0
  239. package/lib/vendor/blamejs/release-notes/v0.17.3.json +43 -0
  240. package/lib/vendor/blamejs/release-notes/v0.17.4.json +35 -0
  241. package/lib/vendor/blamejs/release-notes/v0.17.5.json +26 -0
  242. package/lib/vendor/blamejs/release-notes/v0.17.6.json +26 -0
  243. package/lib/vendor/blamejs/release-notes/v0.17.7.json +35 -0
  244. package/lib/vendor/blamejs/release-notes/v0.17.8.json +22 -0
  245. package/lib/vendor/blamejs/release-notes/v0.17.9.json +26 -0
  246. package/lib/vendor/blamejs/scripts/validate-source-comment-blocks.js +4 -0
  247. package/lib/vendor/blamejs/scripts/vendor-update.sh +293 -9
  248. package/lib/vendor/blamejs/socket.yml +94 -0
  249. package/lib/vendor/blamejs/test/00-primitives.js +605 -0
  250. package/lib/vendor/blamejs/test/helpers/drivers.js +12 -9
  251. package/lib/vendor/blamejs/test/integration/audit-stack-mysql.test.js +90 -1
  252. package/lib/vendor/blamejs/test/integration/audit-stack-postgres.test.js +122 -1
  253. package/lib/vendor/blamejs/test/integration/data-layer-mysql.test.js +30 -0
  254. package/lib/vendor/blamejs/test/integration/data-layer-pg.test.js +29 -0
  255. package/lib/vendor/blamejs/test/integration/dsr-cluster-mysql.test.js +479 -0
  256. package/lib/vendor/blamejs/test/integration/dsr-cluster-pg.test.js +487 -0
  257. package/lib/vendor/blamejs/test/integration/federation-auth.test.js +313 -5
  258. package/lib/vendor/blamejs/test/integration/mail-dkim.test.js +80 -0
  259. package/lib/vendor/blamejs/test/integration/openid-federation-chain.test.js +275 -0
  260. package/lib/vendor/blamejs/test/integration/webhook-dispatcher-pg.test.js +96 -0
  261. package/lib/vendor/blamejs/test/layer-0-primitives/a2a-tasks.test.js +401 -0
  262. package/lib/vendor/blamejs/test/layer-0-primitives/acme.test.js +1649 -2
  263. package/lib/vendor/blamejs/test/layer-0-primitives/age-gate.test.js +33 -0
  264. package/lib/vendor/blamejs/test/layer-0-primitives/agent-idempotency.test.js +0 -0
  265. package/lib/vendor/blamejs/test/layer-0-primitives/agent-saga.test.js +60 -0
  266. package/lib/vendor/blamejs/test/layer-0-primitives/agent-snapshot.test.js +524 -0
  267. package/lib/vendor/blamejs/test/layer-0-primitives/api-encrypt.test.js +891 -0
  268. package/lib/vendor/blamejs/test/layer-0-primitives/app-shutdown.test.js +128 -1
  269. package/lib/vendor/blamejs/test/layer-0-primitives/archive-adapters.test.js +271 -0
  270. package/lib/vendor/blamejs/test/layer-0-primitives/archive-read.test.js +628 -1
  271. package/lib/vendor/blamejs/test/layer-0-primitives/archive-tar-read.test.js +0 -0
  272. package/lib/vendor/blamejs/test/layer-0-primitives/archive-wrap.test.js +227 -0
  273. package/lib/vendor/blamejs/test/layer-0-primitives/arg-parser.test.js +15 -0
  274. package/lib/vendor/blamejs/test/layer-0-primitives/asn1-der.test.js +73 -0
  275. package/lib/vendor/blamejs/test/layer-0-primitives/atomic-file.test.js +114 -0
  276. package/lib/vendor/blamejs/test/layer-0-primitives/audit-sign-anchor.test.js +141 -0
  277. package/lib/vendor/blamejs/test/layer-0-primitives/audit-tools.test.js +624 -0
  278. package/lib/vendor/blamejs/test/layer-0-primitives/audit.test.js +769 -0
  279. package/lib/vendor/blamejs/test/layer-0-primitives/auth-jwt-defenses.test.js +436 -0
  280. package/lib/vendor/blamejs/test/layer-0-primitives/auth-oauth.test.js +1697 -0
  281. package/lib/vendor/blamejs/test/layer-0-primitives/auth-oid4vp.test.js +495 -0
  282. package/lib/vendor/blamejs/test/layer-0-primitives/auth-password.test.js +500 -0
  283. package/lib/vendor/blamejs/test/layer-0-primitives/auth-saml.test.js +1809 -0
  284. package/lib/vendor/blamejs/test/layer-0-primitives/auth-status-list.test.js +243 -1
  285. package/lib/vendor/blamejs/test/layer-0-primitives/backup-index.test.js +2226 -0
  286. package/lib/vendor/blamejs/test/layer-0-primitives/backup-manifest-signature.test.js +183 -0
  287. package/lib/vendor/blamejs/test/layer-0-primitives/base32.test.js +105 -0
  288. package/lib/vendor/blamejs/test/layer-0-primitives/break-glass.test.js +693 -0
  289. package/lib/vendor/blamejs/test/layer-0-primitives/cache.test.js +603 -0
  290. package/lib/vendor/blamejs/test/layer-0-primitives/calendar.test.js +557 -0
  291. package/lib/vendor/blamejs/test/layer-0-primitives/case-insensitive-security-token-guard.test.js +214 -0
  292. package/lib/vendor/blamejs/test/layer-0-primitives/cbor.test.js +25 -0
  293. package/lib/vendor/blamejs/test/layer-0-primitives/cert.test.js +843 -6
  294. package/lib/vendor/blamejs/test/layer-0-primitives/ciba-authreqid-binding.test.js +77 -2
  295. package/lib/vendor/blamejs/test/layer-0-primitives/ciba.test.js +866 -0
  296. package/lib/vendor/blamejs/test/layer-0-primitives/clear-site-data.test.js +18 -0
  297. package/lib/vendor/blamejs/test/layer-0-primitives/cli-erase.test.js +19 -0
  298. package/lib/vendor/blamejs/test/layer-0-primitives/cli.test.js +2790 -0
  299. package/lib/vendor/blamejs/test/layer-0-primitives/cluster-lease-renewal-ttl.test.js +114 -0
  300. package/lib/vendor/blamejs/test/layer-0-primitives/cluster.test.js +1032 -0
  301. package/lib/vendor/blamejs/test/layer-0-primitives/cms-codec.test.js +575 -0
  302. package/lib/vendor/blamejs/test/layer-0-primitives/codebase-patterns.test.js +739 -1
  303. package/lib/vendor/blamejs/test/layer-0-primitives/codepoint-class.test.js +8 -0
  304. package/lib/vendor/blamejs/test/layer-0-primitives/compliance-ai-act.test.js +194 -0
  305. package/lib/vendor/blamejs/test/layer-0-primitives/compliance-lifecycle-proto-key.test.js +104 -0
  306. package/lib/vendor/blamejs/test/layer-0-primitives/compliance-sanctions.test.js +254 -0
  307. package/lib/vendor/blamejs/test/layer-0-primitives/content-credentials.test.js +613 -3
  308. package/lib/vendor/blamejs/test/layer-0-primitives/cookies.test.js +140 -0
  309. package/lib/vendor/blamejs/test/layer-0-primitives/cose.test.js +407 -0
  310. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-adversarial.test.js +352 -0
  311. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-field-derived-hash.test.js +32 -0
  312. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-field.test.js +575 -0
  313. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-hash-files-parallel.test.js +10 -0
  314. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-hash-stream.test.js +24 -0
  315. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-oprf.test.js +17 -0
  316. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-spki-pin.test.js +183 -0
  317. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-xwing.test.js +48 -0
  318. package/lib/vendor/blamejs/test/layer-0-primitives/crypto.test.js +345 -0
  319. package/lib/vendor/blamejs/test/layer-0-primitives/csp-report.test.js +58 -0
  320. package/lib/vendor/blamejs/test/layer-0-primitives/csv.test.js +48 -0
  321. package/lib/vendor/blamejs/test/layer-0-primitives/daemon.test.js +459 -1
  322. package/lib/vendor/blamejs/test/layer-0-primitives/dark-patterns.test.js +19 -0
  323. package/lib/vendor/blamejs/test/layer-0-primitives/db-query.test.js +1019 -0
  324. package/lib/vendor/blamejs/test/layer-0-primitives/db-raw-residency-gate.test.js +77 -0
  325. package/lib/vendor/blamejs/test/layer-0-primitives/db.test.js +1621 -0
  326. package/lib/vendor/blamejs/test/layer-0-primitives/ddl-change-control.test.js +462 -3
  327. package/lib/vendor/blamejs/test/layer-0-primitives/dnssec.test.js +323 -0
  328. package/lib/vendor/blamejs/test/layer-0-primitives/dpop-middleware-verify.test.js +562 -0
  329. package/lib/vendor/blamejs/test/layer-0-primitives/dsr.test.js +901 -1
  330. package/lib/vendor/blamejs/test/layer-0-primitives/dual-control.test.js +249 -0
  331. package/lib/vendor/blamejs/test/layer-0-primitives/external-db-migrate.test.js +561 -0
  332. package/lib/vendor/blamejs/test/layer-0-primitives/external-db.test.js +1214 -0
  333. package/lib/vendor/blamejs/test/layer-0-primitives/fal.test.js +21 -0
  334. package/lib/vendor/blamejs/test/layer-0-primitives/fedcm-dbsc.test.js +46 -20
  335. package/lib/vendor/blamejs/test/layer-0-primitives/federation-vc-suite.test.js +147 -3
  336. package/lib/vendor/blamejs/test/layer-0-primitives/fido-mds3.test.js +907 -38
  337. package/lib/vendor/blamejs/test/layer-0-primitives/file-upload-content-safety-skip-audit.test.js +29 -0
  338. package/lib/vendor/blamejs/test/layer-0-primitives/file-upload.test.js +1135 -0
  339. package/lib/vendor/blamejs/test/layer-0-primitives/flag.test.js +30 -0
  340. package/lib/vendor/blamejs/test/layer-0-primitives/forms.test.js +747 -0
  341. package/lib/vendor/blamejs/test/layer-0-primitives/gate-contract.test.js +1855 -0
  342. package/lib/vendor/blamejs/test/layer-0-primitives/gdpr-ropa.test.js +30 -0
  343. package/lib/vendor/blamejs/test/layer-0-primitives/guard-archive.test.js +86 -0
  344. package/lib/vendor/blamejs/test/layer-0-primitives/guard-auth.test.js +117 -0
  345. package/lib/vendor/blamejs/test/layer-0-primitives/guard-cidr.test.js +151 -0
  346. package/lib/vendor/blamejs/test/layer-0-primitives/guard-domain.test.js +422 -0
  347. package/lib/vendor/blamejs/test/layer-0-primitives/guard-filename.test.js +424 -0
  348. package/lib/vendor/blamejs/test/layer-0-primitives/{guard-gate-disposition-coverage.test.js → guard-gate-disposition.test.js} +1 -1
  349. package/lib/vendor/blamejs/test/layer-0-primitives/guard-graphql.test.js +340 -0
  350. package/lib/vendor/blamejs/test/layer-0-primitives/guard-html.test.js +29 -0
  351. package/lib/vendor/blamejs/test/layer-0-primitives/guard-idempotency-key.test.js +28 -0
  352. package/lib/vendor/blamejs/test/layer-0-primitives/guard-image.test.js +519 -45
  353. package/lib/vendor/blamejs/test/layer-0-primitives/guard-imap-command.test.js +0 -0
  354. package/lib/vendor/blamejs/test/layer-0-primitives/guard-jmap.test.js +51 -0
  355. package/lib/vendor/blamejs/test/layer-0-primitives/guard-jsonpath.test.js +66 -0
  356. package/lib/vendor/blamejs/test/layer-0-primitives/guard-jwt.test.js +436 -0
  357. package/lib/vendor/blamejs/test/layer-0-primitives/guard-managesieve-command.test.js +25 -0
  358. package/lib/vendor/blamejs/test/layer-0-primitives/guard-markdown.test.js +16 -0
  359. package/lib/vendor/blamejs/test/layer-0-primitives/guard-mime.test.js +86 -0
  360. package/lib/vendor/blamejs/test/layer-0-primitives/guard-oauth.test.js +140 -0
  361. package/lib/vendor/blamejs/test/layer-0-primitives/guard-pdf.test.js +80 -0
  362. package/lib/vendor/blamejs/test/layer-0-primitives/guard-pop3-command.test.js +27 -0
  363. package/lib/vendor/blamejs/test/layer-0-primitives/guard-regex.test.js +99 -0
  364. package/lib/vendor/blamejs/test/layer-0-primitives/guard-shell.test.js +76 -0
  365. package/lib/vendor/blamejs/test/layer-0-primitives/{guard-sql-coverage.test.js → guard-sql.test.js} +3 -3
  366. package/lib/vendor/blamejs/test/layer-0-primitives/guard-svg.test.js +524 -0
  367. package/lib/vendor/blamejs/test/layer-0-primitives/guard-template.test.js +71 -0
  368. package/lib/vendor/blamejs/test/layer-0-primitives/guard-time.test.js +92 -0
  369. package/lib/vendor/blamejs/test/layer-0-primitives/guard-uuid.test.js +86 -0
  370. package/lib/vendor/blamejs/test/layer-0-primitives/html-balance.test.js +38 -0
  371. package/lib/vendor/blamejs/test/layer-0-primitives/http-client-cache-authorization.test.js +347 -0
  372. package/lib/vendor/blamejs/test/layer-0-primitives/http-client-cache.test.js +908 -0
  373. package/lib/vendor/blamejs/test/layer-0-primitives/http-client.test.js +2874 -0
  374. package/lib/vendor/blamejs/test/layer-0-primitives/http-message-signature.test.js +643 -0
  375. package/lib/vendor/blamejs/test/layer-0-primitives/i18n-messageformat.test.js +38 -0
  376. package/lib/vendor/blamejs/test/layer-0-primitives/i18n.test.js +1153 -1
  377. package/lib/vendor/blamejs/test/layer-0-primitives/idempotency-key.test.js +494 -0
  378. package/lib/vendor/blamejs/test/layer-0-primitives/ip-utils.test.js +30 -0
  379. package/lib/vendor/blamejs/test/layer-0-primitives/jsdoc-example-execution.test.js +177 -0
  380. package/lib/vendor/blamejs/test/layer-0-primitives/json-path.test.js +103 -0
  381. package/lib/vendor/blamejs/test/layer-0-primitives/json-schema.test.js +214 -0
  382. package/lib/vendor/blamejs/test/layer-0-primitives/jwk.test.js +41 -0
  383. package/lib/vendor/blamejs/test/layer-0-primitives/jwt-external.test.js +276 -0
  384. package/lib/vendor/blamejs/test/layer-0-primitives/keychain.test.js +0 -0
  385. package/lib/vendor/blamejs/test/layer-0-primitives/log-stream.test.js +241 -0
  386. package/lib/vendor/blamejs/test/layer-0-primitives/log.test.js +106 -0
  387. package/lib/vendor/blamejs/test/layer-0-primitives/mail-agent.test.js +441 -0
  388. package/lib/vendor/blamejs/test/layer-0-primitives/mail-auth.test.js +2136 -4
  389. package/lib/vendor/blamejs/test/layer-0-primitives/mail-bimi.test.js +759 -12
  390. package/lib/vendor/blamejs/test/layer-0-primitives/mail-bounce.test.js +811 -1
  391. package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto-pgp-experimental.test.js +401 -3
  392. package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto-pgp.test.js +751 -8
  393. package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto-smime.test.js +864 -0
  394. package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto.test.js +110 -0
  395. package/lib/vendor/blamejs/test/layer-0-primitives/mail-dav.test.js +830 -1
  396. package/lib/vendor/blamejs/test/layer-0-primitives/mail-deploy.test.js +635 -86
  397. package/lib/vendor/blamejs/test/layer-0-primitives/mail-dkim.test.js +818 -0
  398. package/lib/vendor/blamejs/test/layer-0-primitives/mail-helo.test.js +27 -0
  399. package/lib/vendor/blamejs/test/layer-0-primitives/mail-scan.test.js +199 -0
  400. package/lib/vendor/blamejs/test/layer-0-primitives/mail-send-deliver.test.js +686 -2
  401. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-imap.test.js +778 -0
  402. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-jmap.test.js +1438 -0
  403. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-managesieve.test.js +449 -6
  404. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-mx.test.js +773 -2
  405. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-pop3.test.js +623 -3
  406. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-rate-limit.test.js +55 -0
  407. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-registry.test.js +13 -0
  408. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-submission.test.js +877 -1
  409. package/lib/vendor/blamejs/test/layer-0-primitives/mail-sieve.test.js +326 -0
  410. package/lib/vendor/blamejs/test/layer-0-primitives/mail-store-fts.test.js +55 -0
  411. package/lib/vendor/blamejs/test/layer-0-primitives/mail-store.test.js +242 -0
  412. package/lib/vendor/blamejs/test/layer-0-primitives/mail.test.js +1596 -2
  413. package/lib/vendor/blamejs/test/layer-0-primitives/mcp.test.js +440 -4
  414. package/lib/vendor/blamejs/test/layer-0-primitives/metrics-snapshot.test.js +89 -0
  415. package/lib/vendor/blamejs/test/layer-0-primitives/metrics.test.js +1230 -0
  416. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-assetlinks.test.js +113 -0
  417. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-body-parser.test.js +1169 -0
  418. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-bot-disclose.test.js +123 -0
  419. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-cookies.test.js +108 -0
  420. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-gpc.test.js +121 -0
  421. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-headers.test.js +163 -0
  422. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-host-allowlist.test.js +154 -0
  423. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-require-content-type.test.js +127 -0
  424. package/lib/vendor/blamejs/test/layer-0-primitives/{middleware-tus-upload-coverage.test.js → middleware-tus-upload.test.js} +45 -0
  425. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-web-app-manifest.test.js +132 -0
  426. package/lib/vendor/blamejs/test/layer-0-primitives/mtls-ca-crl-fingerprint-only.test.js +92 -0
  427. package/lib/vendor/blamejs/test/layer-0-primitives/network-dns-resolver.test.js +65 -0
  428. package/lib/vendor/blamejs/test/layer-0-primitives/network-dns.test.js +1727 -1
  429. package/lib/vendor/blamejs/test/layer-0-primitives/network-nts.test.js +699 -0
  430. package/lib/vendor/blamejs/test/layer-0-primitives/network-smtp-policy.test.js +1181 -0
  431. package/lib/vendor/blamejs/test/layer-0-primitives/network-tls.test.js +1876 -3
  432. package/lib/vendor/blamejs/test/layer-0-primitives/network.test.js +32 -0
  433. package/lib/vendor/blamejs/test/layer-0-primitives/nonce-store-enforce-replay-nonboolean.test.js +81 -0
  434. package/lib/vendor/blamejs/test/layer-0-primitives/ntp-check.test.js +122 -0
  435. package/lib/vendor/blamejs/test/layer-0-primitives/observability-tracing.test.js +378 -0
  436. package/lib/vendor/blamejs/test/layer-0-primitives/observability.test.js +77 -0
  437. package/lib/vendor/blamejs/test/layer-0-primitives/oid4vci.test.js +1016 -0
  438. package/lib/vendor/blamejs/test/layer-0-primitives/openid-federation.test.js +946 -0
  439. package/lib/vendor/blamejs/test/layer-0-primitives/outbox.test.js +818 -0
  440. package/lib/vendor/blamejs/test/layer-0-primitives/own-property-membership-guards.test.js +109 -0
  441. package/lib/vendor/blamejs/test/layer-0-primitives/parsers-safe-toml.test.js +543 -0
  442. package/lib/vendor/blamejs/test/layer-0-primitives/{parsers-safe-yaml-coverage.test.js → parsers-safe-yaml.test.js} +2 -2
  443. package/lib/vendor/blamejs/test/layer-0-primitives/parsers-standalone.test.js +73 -0
  444. package/lib/vendor/blamejs/test/layer-0-primitives/passkey.test.js +649 -0
  445. package/lib/vendor/blamejs/test/layer-0-primitives/permissions.test.js +524 -0
  446. package/lib/vendor/blamejs/test/layer-0-primitives/pqc-agent-curve.test.js +22 -0
  447. package/lib/vendor/blamejs/test/layer-0-primitives/pubsub.test.js +295 -0
  448. package/lib/vendor/blamejs/test/layer-0-primitives/queue-flow-repeat.test.js +36 -0
  449. package/lib/vendor/blamejs/test/layer-0-primitives/queue.test.js +83 -0
  450. package/lib/vendor/blamejs/test/layer-0-primitives/rate-limit-xff-spoofing.test.js +34 -0
  451. package/lib/vendor/blamejs/test/layer-0-primitives/redact.test.js +1031 -0
  452. package/lib/vendor/blamejs/test/layer-0-primitives/request-helpers.test.js +94 -0
  453. package/lib/vendor/blamejs/test/layer-0-primitives/require-bound-key.test.js +401 -0
  454. package/lib/vendor/blamejs/test/layer-0-primitives/restore-empty-manifest-wipe.test.js +154 -0
  455. package/lib/vendor/blamejs/test/layer-0-primitives/retention.test.js +600 -0
  456. package/lib/vendor/blamejs/test/layer-0-primitives/router-host-path-injection.test.js +231 -0
  457. package/lib/vendor/blamejs/test/layer-0-primitives/router-tls0rtt.test.js +21 -0
  458. package/lib/vendor/blamejs/test/layer-0-primitives/router.test.js +1277 -0
  459. package/lib/vendor/blamejs/test/layer-0-primitives/safe-async.test.js +133 -0
  460. package/lib/vendor/blamejs/test/layer-0-primitives/safe-buffer-linear-scans.test.js +14 -0
  461. package/lib/vendor/blamejs/test/layer-0-primitives/safe-buffer.test.js +80 -0
  462. package/lib/vendor/blamejs/test/layer-0-primitives/safe-decompress.test.js +28 -0
  463. package/lib/vendor/blamejs/test/layer-0-primitives/safe-dns.test.js +245 -0
  464. package/lib/vendor/blamejs/test/layer-0-primitives/safe-ical.test.js +32 -0
  465. package/lib/vendor/blamejs/test/layer-0-primitives/safe-ini.test.js +376 -0
  466. package/lib/vendor/blamejs/test/layer-0-primitives/safe-json.test.js +175 -0
  467. package/lib/vendor/blamejs/test/layer-0-primitives/safe-mime.test.js +518 -0
  468. package/lib/vendor/blamejs/test/layer-0-primitives/safe-object.test.js +62 -0
  469. package/lib/vendor/blamejs/test/layer-0-primitives/safe-path.test.js +30 -0
  470. package/lib/vendor/blamejs/test/layer-0-primitives/safe-schema.test.js +104 -0
  471. package/lib/vendor/blamejs/test/layer-0-primitives/safe-sql.test.js +142 -0
  472. package/lib/vendor/blamejs/test/layer-0-primitives/safe-url.test.js +112 -0
  473. package/lib/vendor/blamejs/test/layer-0-primitives/safe-vcard.test.js +26 -0
  474. package/lib/vendor/blamejs/test/layer-0-primitives/scheduler.test.js +157 -0
  475. package/lib/vendor/blamejs/test/layer-0-primitives/scim-server.test.js +396 -0
  476. package/lib/vendor/blamejs/test/layer-0-primitives/sd-jwt-vc.test.js +930 -0
  477. package/lib/vendor/blamejs/test/layer-0-primitives/security-assert.test.js +755 -82
  478. package/lib/vendor/blamejs/test/layer-0-primitives/self-update.test.js +1053 -0
  479. package/lib/vendor/blamejs/test/layer-0-primitives/session-device-binding.test.js +200 -0
  480. package/lib/vendor/blamejs/test/layer-0-primitives/session-strict-binding-missing-failclosed.test.js +110 -0
  481. package/lib/vendor/blamejs/test/layer-0-primitives/sigv4-bucket-ops.test.js +636 -0
  482. package/lib/vendor/blamejs/test/layer-0-primitives/sql-offset-without-limit.test.js +94 -0
  483. package/lib/vendor/blamejs/test/layer-0-primitives/sql.test.js +1190 -0
  484. package/lib/vendor/blamejs/test/layer-0-primitives/ssrf-guard.test.js +21 -0
  485. package/lib/vendor/blamejs/test/layer-0-primitives/static.test.js +850 -0
  486. package/lib/vendor/blamejs/test/layer-0-primitives/storage-presigned-url.test.js +146 -0
  487. package/lib/vendor/blamejs/test/layer-0-primitives/storage.test.js +621 -0
  488. package/lib/vendor/blamejs/test/layer-0-primitives/subject.test.js +47 -0
  489. package/lib/vendor/blamejs/test/layer-0-primitives/template.test.js +582 -0
  490. package/lib/vendor/blamejs/test/layer-0-primitives/tenant-quota.test.js +587 -25
  491. package/lib/vendor/blamejs/test/layer-0-primitives/time.test.js +11 -0
  492. package/lib/vendor/blamejs/test/layer-0-primitives/tsa.test.js +524 -63
  493. package/lib/vendor/blamejs/test/layer-0-primitives/uri-template.test.js +27 -0
  494. package/lib/vendor/blamejs/test/layer-0-primitives/vault-rotate.test.js +866 -0
  495. package/lib/vendor/blamejs/test/layer-0-primitives/vault.test.js +74 -0
  496. package/lib/vendor/blamejs/test/layer-0-primitives/vc.test.js +215 -0
  497. package/lib/vendor/blamejs/test/layer-0-primitives/watcher.test.js +550 -0
  498. package/lib/vendor/blamejs/test/layer-0-primitives/webhook-dispatcher.test.js +388 -0
  499. package/lib/vendor/blamejs/test/layer-0-primitives/webhook.test.js +262 -0
  500. package/lib/vendor/blamejs/test/layer-0-primitives/websocket.test.js +1294 -0
  501. package/lib/vendor/blamejs/test/layer-0-primitives/ws-client.test.js +629 -0
  502. package/lib/vendor/blamejs/test/layer-0-primitives/xml-c14n-attr-normalization.test.js +164 -0
  503. package/lib/vendor/blamejs/test/smoke.js +2 -0
  504. package/package.json +1 -1
  505. package/lib/vendor/blamejs/release-notes/v0.16.0.json +0 -44
  506. package/lib/vendor/blamejs/release-notes/v0.16.1.json +0 -36
  507. package/lib/vendor/blamejs/release-notes/v0.16.2.json +0 -71
  508. package/lib/vendor/blamejs/release-notes/v0.16.3.json +0 -71
  509. package/lib/vendor/blamejs/test/layer-0-primitives/acme-coverage.test.js +0 -441
  510. package/lib/vendor/blamejs/test/layer-0-primitives/auth-oauth-coverage.test.js +0 -482
  511. package/lib/vendor/blamejs/test/layer-0-primitives/auth-saml-coverage.test.js +0 -671
  512. package/lib/vendor/blamejs/test/layer-0-primitives/backup-index-coverage.test.js +0 -690
  513. package/lib/vendor/blamejs/test/layer-0-primitives/cli-coverage.test.js +0 -238
  514. package/lib/vendor/blamejs/test/layer-0-primitives/content-credentials-coverage.test.js +0 -319
  515. package/lib/vendor/blamejs/test/layer-0-primitives/keychain-coverage.test.js +0 -0
  516. package/lib/vendor/blamejs/test/layer-0-primitives/mail-auth-coverage.test.js +0 -437
  517. package/lib/vendor/blamejs/test/layer-0-primitives/mcp-coverage.test.js +0 -443
  518. package/lib/vendor/blamejs/test/layer-0-primitives/metrics-coverage.test.js +0 -395
  519. package/lib/vendor/blamejs/test/layer-0-primitives/network-smtp-policy-coverage.test.js +0 -565
  520. package/lib/vendor/blamejs/test/layer-0-primitives/router-coverage.test.js +0 -592
  521. package/lib/vendor/blamejs/test/layer-0-primitives/sql-coverage.test.js +0 -422
  522. package/lib/vendor/blamejs/test/layer-0-primitives/test-coverage.test.js +0 -573
@@ -46,6 +46,546 @@ async function _expectThrow(label, fn, codeRe) {
46
46
  threw !== null && (codeRe ? codeRe.test(threw.code || "") : true));
47
47
  }
48
48
 
49
+ // Capture a thrown error so a test can assert on both its code and its
50
+ // operator-facing message.
51
+ async function _capture(fn) {
52
+ try { await fn(); return null; } catch (e) { return e; }
53
+ }
54
+
55
+ // The lock table name is derived from the tracking-table name (the lock
56
+ // table is `<tracking>_lock`), so it tracks the configurable framework
57
+ // prefix without a dedicated export.
58
+ function _lockTableName() {
59
+ return b.externalDb.migrate.TRACKING_TABLE + "_lock";
60
+ }
61
+
62
+ async function _seedLockRow(lockedAt, lockedBy) {
63
+ await b.externalDb.query(
64
+ "INSERT INTO " + _lockTableName() + " (scope, lockedAt, lockedBy) VALUES ($1, $2, $3)",
65
+ ["lock", lockedAt, lockedBy]);
66
+ }
67
+
68
+ // A thin wrapper over the sqlite driver that lets a test inject a fault
69
+ // into exactly one of the migration-lock statements (the conflict-safe
70
+ // upsert or the holder-naming inspect SELECT) without disturbing any of
71
+ // the other SQL the runner emits. Injected stub only — no network.
72
+ function _wrapSqliteDriver(dbPath, hooks) {
73
+ hooks = hooks || {};
74
+ var base = _makeSqliteDriver(dbPath);
75
+ return {
76
+ connect: base.connect,
77
+ close: base.close,
78
+ _close: base._close,
79
+ query: async function (client, sql, params) {
80
+ var run = function () { return base.query(client, sql, params); };
81
+ var isLockInsert = /^\s*INSERT INTO\s+"?_blamejs_externaldb_migrations_lock/i.test(sql);
82
+ var isLockInspect = /^\s*SELECT/i.test(sql) && /lockedBy/i.test(sql);
83
+ // The release DELETE keys on lockedBy; the stale-takeover DELETE keys
84
+ // on lockedAt — matching lockedBy isolates the release path.
85
+ var isLockRelease = /^\s*DELETE\s+FROM\s+"?_blamejs_externaldb_migrations_lock/i.test(sql) &&
86
+ /lockedBy/i.test(sql);
87
+ if (isLockInsert && hooks.onLockUpsert) return hooks.onLockUpsert(run, client, base);
88
+ if (isLockInspect && hooks.onLockInspect) return hooks.onLockInspect(run, client, base);
89
+ if (isLockRelease && hooks.onLockRelease) return hooks.onLockRelease(run, client, base);
90
+ return run();
91
+ },
92
+ };
93
+ }
94
+
95
+ // A minimal DDL up()/down() migration body — the framework tracking /
96
+ // history INSERTs are the only DML in the transaction.
97
+ function _ddlMigration(table, withDown) {
98
+ return 'module.exports = {\n' +
99
+ ' description: "create ' + table + '",\n' +
100
+ ' up: async function (xdb) { await xdb.query("CREATE TABLE ' + table + ' (id INTEGER PRIMARY KEY)", []); },\n' +
101
+ (withDown
102
+ ? ' down: async function (xdb) { await xdb.query("DROP TABLE ' + table + '", []); },\n'
103
+ : '') +
104
+ '};\n';
105
+ }
106
+
107
+ // ---------- _resolveBackendName error + explicit-backend paths ----------
108
+
109
+ async function _testResolveBackendErrors() {
110
+ var migDir = _tempDir("blamejs-xmig-nobk-mig");
111
+ try {
112
+ _writeMigration(migDir, "0001-x.js", _ddlMigration("nobk_t", true));
113
+
114
+ // No backends registered → status() surfaces the clear no-backends error.
115
+ b.externalDb._resetForTest();
116
+ var noBk = b.externalDb.migrate.create({ dir: migDir });
117
+ var e1 = await _capture(function () { return noBk.status(); });
118
+ check("status() on an externalDb with no backends throws no-backends",
119
+ e1 !== null && /externaldb-migrate\/no-backends/.test(e1.code || ""));
120
+
121
+ // Explicit backend opt selects that backend by name.
122
+ var dataDir = _tempDir("blamejs-xmig-nobk-data");
123
+ var driver = _makeSqliteDriver(path.join(dataDir, "db"));
124
+ _initWith(driver, "postgres");
125
+ try {
126
+ var explicit = b.externalDb.migrate.create({ dir: migDir, backend: "main" });
127
+ var r = await explicit.up();
128
+ check("create({ backend }) resolves the named backend and applies",
129
+ r.backend === "main" && r.applied.indexOf("0001-x.js") !== -1);
130
+ } finally {
131
+ driver._close();
132
+ b.externalDb._resetForTest();
133
+ fs.rmSync(dataDir, { recursive: true, force: true });
134
+ }
135
+ } finally {
136
+ fs.rmSync(migDir, { recursive: true, force: true });
137
+ }
138
+ }
139
+
140
+ // ---------- create() option defaults: custom introspect / ranBy /
141
+ // signHistory:false (unsigned history) / missing-description ----------
142
+
143
+ async function _testCreateOptionDefaults() {
144
+ var dataDir = _tempDir("blamejs-xmig-opt-data");
145
+ var migDir = _tempDir("blamejs-xmig-opt-mig");
146
+ var driver = _makeSqliteDriver(path.join(dataDir, "db"));
147
+ _initWith(driver, "postgres");
148
+ try {
149
+ // No `description` export → the runner records "" for it.
150
+ _writeMigration(migDir, "0001-opt.js",
151
+ 'module.exports = {\n' +
152
+ ' up: async function (xdb) { await xdb.query("CREATE TABLE opt_thing (id INTEGER PRIMARY KEY)", []); },\n' +
153
+ ' down: async function (xdb) { await xdb.query("DROP TABLE opt_thing", []); },\n' +
154
+ '};\n');
155
+
156
+ var introspectCalls = 0;
157
+ var migrate = b.externalDb.migrate.create({
158
+ dir: migDir,
159
+ ranBy: "custom-actor",
160
+ signHistory: false,
161
+ schemaIntrospect: async function () { introspectCalls += 1; return "fixed-introspect-hash"; },
162
+ });
163
+
164
+ var r = await migrate.up();
165
+ check("up() applies with custom option set", r.applied.indexOf("0001-opt.js") !== -1);
166
+ check("custom schemaIntrospect ran during up()", introspectCalls >= 1);
167
+
168
+ var hist = await migrate.history();
169
+ check("history() row carries the custom ranBy",
170
+ hist.length === 1 && hist[0].ranBy === "custom-actor");
171
+ check("history() row carries the custom introspection hash",
172
+ hist[0].schemaIntrospectionHash === "fixed-introspect-hash");
173
+ check("signHistory:false leaves the history row unsigned (row-unsigned)",
174
+ hist[0].verified === false && hist[0].verifyReason === "row-unsigned");
175
+ } finally {
176
+ driver._close();
177
+ b.externalDb._resetForTest();
178
+ fs.rmSync(dataDir, { recursive: true, force: true });
179
+ fs.rmSync(migDir, { recursive: true, force: true });
180
+ }
181
+ }
182
+
183
+ // ---------- _loadMigration: a migration file that fails to require ----
184
+
185
+ async function _testLoadFailed() {
186
+ var dataDir = _tempDir("blamejs-xmig-load-data");
187
+ var migDir = _tempDir("blamejs-xmig-load-mig");
188
+ var driver = _makeSqliteDriver(path.join(dataDir, "db"));
189
+ _initWith(driver, "postgres");
190
+ try {
191
+ // Syntactically broken module — require() throws, so the runner
192
+ // surfaces the wrapped load-failed error rather than a raw SyntaxError.
193
+ _writeMigration(migDir, "0001-broken.js",
194
+ "module.exports = {\n up: async function ( {\n");
195
+ var migrate = b.externalDb.migrate.create({ dir: migDir });
196
+ var e = await _capture(function () { return migrate.up(); });
197
+ check("up() wraps a require-failing migration as load-failed",
198
+ e !== null && /externaldb-migrate\/load-failed/.test(e.code || "") &&
199
+ /0001-broken\.js/.test(e.message || ""));
200
+ } finally {
201
+ driver._close();
202
+ b.externalDb._resetForTest();
203
+ fs.rmSync(dataDir, { recursive: true, force: true });
204
+ fs.rmSync(migDir, { recursive: true, force: true });
205
+ }
206
+ }
207
+
208
+ // ---------- up(): a migration whose up() throws → up-failed + audit ----
209
+
210
+ async function _testUpFailed() {
211
+ var dataDir = _tempDir("blamejs-xmig-upfail-data");
212
+ var migDir = _tempDir("blamejs-xmig-upfail-mig");
213
+ var driver = _makeSqliteDriver(path.join(dataDir, "db"));
214
+ _initWith(driver, "postgres");
215
+ var auditEmits = [];
216
+ var fakeAudit = { safeEmit: function (e) { auditEmits.push(e); } };
217
+ try {
218
+ _writeMigration(migDir, "0001-boom.js",
219
+ 'module.exports = {\n' +
220
+ ' description: "boom",\n' +
221
+ ' up: async function (xdb) { await xdb.query("THIS IS NOT VALID SQL", []); },\n' +
222
+ '};\n');
223
+ var migrate = b.externalDb.migrate.create({ dir: migDir, audit: fakeAudit });
224
+ var e = await _capture(function () { return migrate.up(); });
225
+ check("up() surfaces a failing migration as up-failed",
226
+ e !== null && /externaldb-migrate\/up-failed/.test(e.code || "") &&
227
+ /0001-boom\.js/.test(e.message || ""));
228
+ check("up() emits an up failure audit for the failing migration",
229
+ auditEmits.some(function (x) {
230
+ return x.action === "externaldb.migrate.up" && x.outcome === "failure" &&
231
+ x.metadata && x.metadata.migration === "0001-boom.js";
232
+ }));
233
+ // The lock is still released after the failure (finally path ran).
234
+ check("up() releases the lock even after a migration failure",
235
+ auditEmits.some(function (x) { return x.action === "externaldb.migrate.lock.released"; }));
236
+ } finally {
237
+ driver._close();
238
+ b.externalDb._resetForTest();
239
+ fs.rmSync(dataDir, { recursive: true, force: true });
240
+ fs.rmSync(migDir, { recursive: true, force: true });
241
+ }
242
+ }
243
+
244
+ // ---------- down(): a failing down() → down-failed; default steps ----
245
+
246
+ async function _testDownFailedAndDefaultSteps() {
247
+ var dataDir = _tempDir("blamejs-xmig-dnfail-data");
248
+ var migDir = _tempDir("blamejs-xmig-dnfail-mig");
249
+ var driver = _makeSqliteDriver(path.join(dataDir, "db"));
250
+ _initWith(driver, "postgres");
251
+ var auditEmits = [];
252
+ var fakeAudit = { safeEmit: function (e) { auditEmits.push(e); } };
253
+ try {
254
+ // 0001 rolls back cleanly; 0002 has a down() that throws.
255
+ _writeMigration(migDir, "0001-ok.js", _ddlMigration("dn_ok_t", true));
256
+ _writeMigration(migDir, "0002-baddown.js",
257
+ 'module.exports = {\n' +
258
+ ' description: "bad down",\n' +
259
+ ' up: async function (xdb) { await xdb.query("CREATE TABLE dn_bad_t (id INTEGER)", []); },\n' +
260
+ ' down: async function (xdb) { await xdb.query("NOT VALID SQL EITHER", []); },\n' +
261
+ '};\n');
262
+ var migrate = b.externalDb.migrate.create({ dir: migDir, audit: fakeAudit });
263
+ await migrate.up();
264
+
265
+ // down() with no args defaults steps to 1 → most-recent migration only.
266
+ var e = await _capture(function () { return migrate.down(); });
267
+ check("down() (default steps) surfaces a failing rollback as down-failed",
268
+ e !== null && /externaldb-migrate\/down-failed/.test(e.code || "") &&
269
+ /0002-baddown\.js/.test(e.message || ""));
270
+ check("down() emits a down failure audit for the failing migration",
271
+ auditEmits.some(function (x) {
272
+ return x.action === "externaldb.migrate.down" && x.outcome === "failure" &&
273
+ x.metadata && x.metadata.migration === "0002-baddown.js";
274
+ }));
275
+ } finally {
276
+ driver._close();
277
+ b.externalDb._resetForTest();
278
+ fs.rmSync(dataDir, { recursive: true, force: true });
279
+ fs.rmSync(migDir, { recursive: true, force: true });
280
+ }
281
+ }
282
+
283
+ // ---------- _emit: a throwing audit sink must not crash the migration --
284
+
285
+ async function _testEmitAuditThrows() {
286
+ var dataDir = _tempDir("blamejs-xmig-emit-data");
287
+ var migDir = _tempDir("blamejs-xmig-emit-mig");
288
+ var driver = _makeSqliteDriver(path.join(dataDir, "db"));
289
+ _initWith(driver, "postgres");
290
+ try {
291
+ _writeMigration(migDir, "0001-emit.js", _ddlMigration("emit_t", true));
292
+ var throwingAudit = { safeEmit: function () { throw new Error("audit sink is down"); } };
293
+ var migrate = b.externalDb.migrate.create({ dir: migDir, audit: throwingAudit });
294
+ var r = await migrate.up();
295
+ check("up() succeeds even when audit.safeEmit throws (drop-silent)",
296
+ r.applied.indexOf("0001-emit.js") !== -1);
297
+ } finally {
298
+ driver._close();
299
+ b.externalDb._resetForTest();
300
+ fs.rmSync(dataDir, { recursive: true, force: true });
301
+ fs.rmSync(migDir, { recursive: true, force: true });
302
+ }
303
+ }
304
+
305
+ // ---------- Adversarial lock state: a held lock refuses the wave ------
306
+
307
+ async function _testLockHeldRefusal() {
308
+ var dataDir = _tempDir("blamejs-xmig-held-data");
309
+ var migDir = _tempDir("blamejs-xmig-held-mig");
310
+ var driver = _makeSqliteDriver(path.join(dataDir, "db"));
311
+ _initWith(driver, "postgres");
312
+ try {
313
+ _writeMigration(migDir, "0001-h.js", _ddlMigration("held_a", true));
314
+ var migrate = b.externalDb.migrate.create({ dir: migDir });
315
+ await migrate.up(); // creates the lock table + applies + releases
316
+
317
+ // A competing process holds a FRESH lock. With no staleAfterMs the
318
+ // wave must refuse rather than steal it.
319
+ await _seedLockRow(Date.now(), "held-by-other@host@boot");
320
+ _writeMigration(migDir, "0002-h.js", _ddlMigration("held_b", true));
321
+
322
+ var e = await _capture(function () { return migrate.up(); });
323
+ check("up() refuses when the lock is held by another live process (lock-held)",
324
+ e !== null && /externaldb-migrate\/lock-held/.test(e.code || "") &&
325
+ /held-by-other@host@boot/.test(e.message || ""));
326
+ var st = await migrate.status();
327
+ check("the held lock prevented the pending migration from applying",
328
+ st.pending.indexOf("0002-h.js") !== -1);
329
+ } finally {
330
+ driver._close();
331
+ b.externalDb._resetForTest();
332
+ fs.rmSync(dataDir, { recursive: true, force: true });
333
+ fs.rmSync(migDir, { recursive: true, force: true });
334
+ }
335
+ }
336
+
337
+ // ---------- Stale-lock takeover on both up() and down() --------------
338
+
339
+ async function _testStaleLockTakeover() {
340
+ var dataDir = _tempDir("blamejs-xmig-stale-data");
341
+ var migDir = _tempDir("blamejs-xmig-stale-mig");
342
+ var driver = _makeSqliteDriver(path.join(dataDir, "db"));
343
+ _initWith(driver, "postgres");
344
+ var auditEmits = [];
345
+ var fakeAudit = { safeEmit: function (e) { auditEmits.push(e); } };
346
+ try {
347
+ _writeMigration(migDir, "0001-s.js", _ddlMigration("stale_a", true));
348
+ var migrate = b.externalDb.migrate.create({
349
+ dir: migDir, staleAfterMs: 1000, audit: fakeAudit,
350
+ });
351
+ await migrate.up(); // clean apply, creates the lock table
352
+
353
+ // An orphaned lock older than staleAfterMs → up() force-replaces it.
354
+ await _seedLockRow(Date.now() - 100000, "stale-holder@host@boot");
355
+ await migrate.up(); // 0001 already applied; the takeover still fires
356
+ check("up() takes over a stale lock and emits a takeover audit",
357
+ auditEmits.some(function (x) {
358
+ return x.action === "externaldb.migrate.lock.takeover" && x.outcome === "success" &&
359
+ x.metadata && x.metadata.takeoverFrom === "stale-holder@host@boot";
360
+ }));
361
+
362
+ // Now exercise the same stale-takeover branch through down().
363
+ auditEmits.length = 0;
364
+ await _seedLockRow(Date.now() - 100000, "stale-holder-2@host@boot");
365
+ var d = await migrate.down({ steps: 1 });
366
+ check("down() takes over a stale lock and reverts the migration",
367
+ d.reverted.indexOf("0001-s.js") !== -1 &&
368
+ auditEmits.some(function (x) {
369
+ return x.action === "externaldb.migrate.lock.takeover" &&
370
+ x.metadata && x.metadata.takeoverFrom === "stale-holder-2@host@boot";
371
+ }));
372
+ } finally {
373
+ driver._close();
374
+ b.externalDb._resetForTest();
375
+ fs.rmSync(dataDir, { recursive: true, force: true });
376
+ fs.rmSync(migDir, { recursive: true, force: true });
377
+ }
378
+ }
379
+
380
+ // ---------- Lock acquire: injected driver / inspect faults ------------
381
+
382
+ async function _testLockUpsertDriverFault() {
383
+ var dataDir = _tempDir("blamejs-xmig-upsertf-data");
384
+ var migDir = _tempDir("blamejs-xmig-upsertf-mig");
385
+ var driver = _wrapSqliteDriver(path.join(dataDir, "db"), {
386
+ onLockUpsert: function () { throw new Error("simulated lock upsert driver fault"); },
387
+ });
388
+ _initWith(driver, "postgres");
389
+ try {
390
+ _writeMigration(migDir, "0001-uf.js", _ddlMigration("uf_t", true));
391
+ var migrate = b.externalDb.migrate.create({ dir: migDir });
392
+ var e = await _capture(function () { return migrate.up(); });
393
+ check("a driver fault on the lock upsert surfaces as lock-busy",
394
+ e !== null && /externaldb-migrate\/lock-busy/.test(e.code || "") &&
395
+ /simulated lock upsert driver fault/.test(e.message || ""));
396
+ } finally {
397
+ driver._close();
398
+ b.externalDb._resetForTest();
399
+ fs.rmSync(dataDir, { recursive: true, force: true });
400
+ fs.rmSync(migDir, { recursive: true, force: true });
401
+ }
402
+ }
403
+
404
+ async function _testLockInspectFault() {
405
+ var dataDir = _tempDir("blamejs-xmig-inspf-data");
406
+ var migDir = _tempDir("blamejs-xmig-inspf-mig");
407
+ var driver = _wrapSqliteDriver(path.join(dataDir, "db"), {
408
+ onLockInspect: function () { throw new Error("simulated inspect fault"); },
409
+ });
410
+ _initWith(driver, "postgres");
411
+ try {
412
+ _writeMigration(migDir, "0001-if.js", _ddlMigration("if_t", true));
413
+ var migrate = b.externalDb.migrate.create({ dir: migDir });
414
+ await migrate.up(); // clean acquire (upsert wins, no inspect), applies
415
+
416
+ // Seed a competing row so the next acquire hits the DO-NOTHING no-op
417
+ // and must inspect the holder — where the driver fault fires.
418
+ await _seedLockRow(Date.now(), "other@host@boot");
419
+ _writeMigration(migDir, "0002-if.js", _ddlMigration("if_t2", true));
420
+ var e = await _capture(function () { return migrate.up(); });
421
+ check("a fault inspecting the lock holder surfaces as lock-held",
422
+ e !== null && /externaldb-migrate\/lock-held/.test(e.code || "") &&
423
+ /could not be inspected/.test(e.message || ""));
424
+ } finally {
425
+ driver._close();
426
+ b.externalDb._resetForTest();
427
+ fs.rmSync(dataDir, { recursive: true, force: true });
428
+ fs.rmSync(migDir, { recursive: true, force: true });
429
+ }
430
+ }
431
+
432
+ async function _testLockVanishRetryWins() {
433
+ var dataDir = _tempDir("blamejs-xmig-vwin-data");
434
+ var migDir = _tempDir("blamejs-xmig-vwin-mig");
435
+ var lockTable = _lockTableName();
436
+ var driver = _wrapSqliteDriver(path.join(dataDir, "db"), {
437
+ // The lock row "vanishes" between our no-op insert and the inspect
438
+ // (the holder released concurrently): drop it and report empty so the
439
+ // runner's single retry insert wins the lock.
440
+ onLockInspect: async function (_run, client, base) {
441
+ await base.query(client, "DELETE FROM " + lockTable + " WHERE scope = 'lock'", []);
442
+ return { rows: [], rowCount: 0 };
443
+ },
444
+ });
445
+ _initWith(driver, "postgres");
446
+ try {
447
+ _writeMigration(migDir, "0001-vw.js", _ddlMigration("vw_t", true));
448
+ var migrate = b.externalDb.migrate.create({ dir: migDir });
449
+ await migrate.up(); // clean acquire — no inspect, so no vanish
450
+
451
+ await _seedLockRow(Date.now(), "racing-holder@host@boot");
452
+ _writeMigration(migDir, "0002-vw.js", _ddlMigration("vw_t2", true));
453
+ var r = await migrate.up();
454
+ check("up() recovers when the held lock vanishes mid-inspect (retry wins)",
455
+ r.applied.indexOf("0002-vw.js") !== -1);
456
+ } finally {
457
+ driver._close();
458
+ b.externalDb._resetForTest();
459
+ fs.rmSync(dataDir, { recursive: true, force: true });
460
+ fs.rmSync(migDir, { recursive: true, force: true });
461
+ }
462
+ }
463
+
464
+ async function _testLockVanishRetryLost() {
465
+ var dataDir = _tempDir("blamejs-xmig-vlost-data");
466
+ var migDir = _tempDir("blamejs-xmig-vlost-mig");
467
+ var driver = _wrapSqliteDriver(path.join(dataDir, "db"), {
468
+ // The inspect reports empty (holder appears to have released) but the
469
+ // row is NOT actually removed, so the retry insert still conflicts and
470
+ // the runner reports the lock as re-acquired by another process.
471
+ onLockInspect: function () { return { rows: [], rowCount: 0 }; },
472
+ });
473
+ _initWith(driver, "postgres");
474
+ try {
475
+ _writeMigration(migDir, "0001-vl.js", _ddlMigration("vl_t", true));
476
+ var migrate = b.externalDb.migrate.create({ dir: migDir });
477
+ await migrate.up(); // clean acquire
478
+
479
+ await _seedLockRow(Date.now(), "racer@host@boot");
480
+ _writeMigration(migDir, "0002-vl.js", _ddlMigration("vl_t2", true));
481
+ var e = await _capture(function () { return migrate.up(); });
482
+ check("up() refuses when the retry loses the acquire race (lock-held)",
483
+ e !== null && /externaldb-migrate\/lock-held/.test(e.code || "") &&
484
+ /re-acquired it during the acquire race/.test(e.message || ""));
485
+ } finally {
486
+ driver._close();
487
+ b.externalDb._resetForTest();
488
+ fs.rmSync(dataDir, { recursive: true, force: true });
489
+ fs.rmSync(migDir, { recursive: true, force: true });
490
+ }
491
+ }
492
+
493
+ // ---------- _releaseLock: a faulting release DELETE is swallowed -----
494
+
495
+ async function _testReleaseSwallowsDeleteFault() {
496
+ var dataDir = _tempDir("blamejs-xmig-rel-data");
497
+ var migDir = _tempDir("blamejs-xmig-rel-mig");
498
+ var driver = _wrapSqliteDriver(path.join(dataDir, "db"), {
499
+ onLockRelease: function () { throw new Error("simulated release delete fault"); },
500
+ });
501
+ _initWith(driver, "postgres");
502
+ var auditEmits = [];
503
+ var fakeAudit = { safeEmit: function (e) { auditEmits.push(e); } };
504
+ try {
505
+ _writeMigration(migDir, "0001-rel.js", _ddlMigration("rel_t", true));
506
+ var migrate = b.externalDb.migrate.create({ dir: migDir, audit: fakeAudit });
507
+ var r = await migrate.up();
508
+ check("up() completes even when the lock-release DELETE faults (swallowed)",
509
+ r.applied.indexOf("0001-rel.js") !== -1);
510
+ // _releaseLock swallows the DELETE error, so the release transaction
511
+ // still commits and the outer emit reports a successful release.
512
+ check("a faulting release DELETE is swallowed, not surfaced",
513
+ auditEmits.some(function (x) {
514
+ return x.action === "externaldb.migrate.lock.released" && x.outcome === "success";
515
+ }));
516
+ } finally {
517
+ driver._close();
518
+ b.externalDb._resetForTest();
519
+ fs.rmSync(dataDir, { recursive: true, force: true });
520
+ fs.rmSync(migDir, { recursive: true, force: true });
521
+ }
522
+ }
523
+
524
+ // ---------- history() signature verification + tamper detection ------
525
+ // Needs a live audit-signing key, so it runs under the full-framework
526
+ // fixture (setupTestDb bootstraps b.auditSign at b.db.init).
527
+
528
+ async function _testHistorySignedAndTamper() {
529
+ var tmpDir = _tempDir("blamejs-xmig-hist-fw");
530
+ await helpers.setupTestDb(tmpDir);
531
+ var dataDir = _tempDir("blamejs-xmig-hist-data");
532
+ var migDir = _tempDir("blamejs-xmig-hist-mig");
533
+ var driver = _makeSqliteDriver(path.join(dataDir, "db"));
534
+ _initWith(driver, "postgres");
535
+ var auditEmits = [];
536
+ var fakeAudit = { safeEmit: function (e) { auditEmits.push(e); } };
537
+ try {
538
+ _writeMigration(migDir, "0001-a.js", _ddlMigration("hist_a", true));
539
+ _writeMigration(migDir, "0002-b.js", _ddlMigration("hist_b", true));
540
+ var migrate = b.externalDb.migrate.create({ dir: migDir, audit: fakeAudit });
541
+ await migrate.up();
542
+
543
+ // Every history row is signed and verifies against the live key.
544
+ var h1 = await migrate.history();
545
+ check("history() verifies signed rows",
546
+ h1.length === 2 && h1.every(function (r) { return r.verified === true && r.verifyReason === null; }));
547
+ check("history() emits a verified-rows audit",
548
+ auditEmits.some(function (x) { return x.action === "migrations.history.verified"; }));
549
+
550
+ var histTable = b.externalDb.migrate.HISTORY_TABLE;
551
+
552
+ // Tamper: swap the recorded public-key fingerprint on one row.
553
+ await b.externalDb.query(
554
+ "UPDATE " + histTable + " SET publicKeyFingerprint = $1 WHERE version = $2",
555
+ ["deadbeefdeadbeef", "0002-b.js"]);
556
+ auditEmits.length = 0;
557
+ var h2 = await migrate.history();
558
+ var row2 = h2.filter(function (r) { return r.version === "0002-b.js"; })[0];
559
+ check("history() flags a fingerprint mismatch",
560
+ row2 && row2.verified === false && row2.verifyReason === "public-key-fingerprint-mismatch");
561
+ check("history() emits tamper_detected on the mismatching row",
562
+ auditEmits.some(function (x) {
563
+ return x.action === "migrations.history.tamper_detected" &&
564
+ x.metadata && x.metadata.version === "0002-b.js";
565
+ }));
566
+
567
+ // Tamper: keep the fingerprint neutral (NULL) but corrupt the signature
568
+ // bytes → the cryptographic verify fails (or throws), never verifies.
569
+ await b.externalDb.query(
570
+ "UPDATE " + histTable + " SET publicKeyFingerprint = $1, signature = $2 WHERE version = $3",
571
+ [null, "AAAA", "0002-b.js"]);
572
+ var h3 = await migrate.history();
573
+ var row2b = h3.filter(function (r) { return r.version === "0002-b.js"; })[0];
574
+ check("history() refuses a corrupted signature",
575
+ row2b && row2b.verified === false &&
576
+ (row2b.verifyReason === "signature-verify-failed" || /^verify-threw/.test(row2b.verifyReason || "")));
577
+ // The untampered row still verifies.
578
+ var row1 = h3.filter(function (r) { return r.version === "0001-a.js"; })[0];
579
+ check("the untampered history row still verifies", row1 && row1.verified === true);
580
+ } finally {
581
+ driver._close();
582
+ b.externalDb._resetForTest();
583
+ fs.rmSync(dataDir, { recursive: true, force: true });
584
+ fs.rmSync(migDir, { recursive: true, force: true });
585
+ await helpers.teardownTestDb(tmpDir);
586
+ }
587
+ }
588
+
49
589
  async function run() {
50
590
  // ---------- create() rejects bad opts ----------
51
591
 
@@ -53,6 +593,10 @@ async function run() {
53
593
  function () { b.externalDb.migrate.create({}); },
54
594
  /externaldb-migrate\/no-dir/);
55
595
 
596
+ _expectThrow("create with no argument defaults opts to {} then rejects missing dir",
597
+ function () { b.externalDb.migrate.create(); },
598
+ /externaldb-migrate\/no-dir/);
599
+
56
600
  _expectThrow("create rejects unknown opt",
57
601
  function () { b.externalDb.migrate.create({ dir: ".", bogus: 1 }); });
58
602
  // validateOpts throws without a code attribute — just assert it throws.
@@ -226,6 +770,23 @@ async function run() {
226
770
  fs.rmSync(resDataDir, { recursive: true, force: true });
227
771
  fs.rmSync(resMigDir, { recursive: true, force: true });
228
772
  }
773
+
774
+ // ---------- Error / adversarial / option-default branches ----------
775
+
776
+ await _testResolveBackendErrors();
777
+ await _testCreateOptionDefaults();
778
+ await _testLoadFailed();
779
+ await _testUpFailed();
780
+ await _testDownFailedAndDefaultSteps();
781
+ await _testEmitAuditThrows();
782
+ await _testLockHeldRefusal();
783
+ await _testStaleLockTakeover();
784
+ await _testLockUpsertDriverFault();
785
+ await _testLockInspectFault();
786
+ await _testLockVanishRetryWins();
787
+ await _testLockVanishRetryLost();
788
+ await _testReleaseSwallowsDeleteFault();
789
+ await _testHistorySignedAndTamper();
229
790
  }
230
791
 
231
792
  module.exports = { run: run };