@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
@@ -0,0 +1,479 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (c) blamejs contributors
3
+ "use strict";
4
+ /**
5
+ * Live test of b.dsr.dbTicketStore against the docker MySQL container.
6
+ *
7
+ * Same intent as dsr-cluster-pg.test.js: the ticket store composes every
8
+ * statement through b.sql (`?` placeholders + double-quoted identifiers)
9
+ * and drives an operator-supplied b.db-shaped handle ({ runSql,
10
+ * prepare }); layer-0 only ever runs it on node:sqlite. Here the SAME
11
+ * store runs over a docker-exec mysql shim shaped like that handle, so
12
+ * every statement the store emits PREPARES and RUNS on real MySQL:
13
+ *
14
+ * - insert + get: the sealed-at-rest row (payload / subject_* AEAD-
15
+ * sealed, bound to the ticket id) physically lands on MySQL with the
16
+ * derived subject_email_hash / subject_id_hash lookup columns
17
+ * populated, and get() unseals the round-trip.
18
+ * - list({ subject }): an indexable subject key (email / subjectId)
19
+ * matches ONLY its own tickets via the dual-hash whereIn.
20
+ * - FAIL-CLOSED subject filter: a subject with NO indexable key
21
+ * (phone-only, or empty) matches ZERO tickets — never the whole
22
+ * table. The same predicate guards a DESTRUCTIVE path: the
23
+ * erasure-completion purge lists the subject's tickets and DELETES
24
+ * them, so a fail-open filter here would delete every OTHER
25
+ * subject's tickets too.
26
+ * - erasure-completion purge: completing an erasure removes exactly
27
+ * the subject's own prior tickets (the erasure ticket itself and
28
+ * other subjects' tickets survive), and an erasure whose subject has
29
+ * no indexable key purges NOTHING.
30
+ * - purgeExpired: the terminal-status whereIn sweep removes only the
31
+ * ticket whose retentionUntil has passed.
32
+ *
33
+ * Handle-boundary notes (operator-adapter concerns, mirroring
34
+ * db-layer-mysql.test.js):
35
+ * - b.sql emits double-quoted identifiers; MySQL's default sql_mode
36
+ * reads those as STRING literals, so every statement batch is
37
+ * prefixed with `SET SESSION sql_mode=...,ANSI_QUOTES` (each
38
+ * docker-exec is a fresh connection).
39
+ * - `?` placeholders fold into the SQL as quoted literals at the
40
+ * handle boundary (the mysql CLI has no bind protocol).
41
+ * - run() reports { changes } from ROW_COUNT() issued in the SAME
42
+ * mysql invocation as the write (ROW_COUNT is connection-scoped).
43
+ * - the store's schema probe is `PRAGMA table_info(...)` (a
44
+ * SQLite-ism); the handle answers it from information_schema.columns.
45
+ * - MySQL has no CREATE INDEX IF NOT EXISTS; the handle strips the
46
+ * clause and swallows a duplicate-key-name error (1061) so the
47
+ * store's idempotent index DDL stays idempotent.
48
+ * - the physical table is operator-provisioned: VARCHAR key/indexed
49
+ * columns (MySQL refuses an unbounded TEXT column in a key, error
50
+ * 1170), BIGINT ms-epoch columns (MySQL INTEGER is 32-bit), LONGTEXT
51
+ * payload. The store's own CREATE TABLE IF NOT EXISTS then no-ops
52
+ * against the existing table.
53
+ *
54
+ * RUN: node scripts/test-integration.js --skip-service-check dsr-cluster-mysql
55
+ */
56
+
57
+ var execFileSync = require("node:child_process").execFileSync;
58
+ var fs = require("node:fs");
59
+ var os = require("node:os");
60
+ var path = require("node:path");
61
+ var helpers = require("../helpers");
62
+ var check = helpers.check;
63
+ var services = require("../helpers/services");
64
+ var b = require("../../");
65
+
66
+ var CONTAINER = "blamejs-test-mysql";
67
+ var DB_NAME = "blamejs_test";
68
+ var TABLE = "bjdsr_my_tickets";
69
+ // ANSI_QUOTES makes MySQL honor the b.sql double-quoted identifiers;
70
+ // without it every "col" parses as a string literal. Prefixed to every
71
+ // statement batch since each docker-exec is a fresh connection.
72
+ var SQLMODE = "SET SESSION sql_mode=CONCAT(@@sql_mode,',ANSI_QUOTES');\n";
73
+
74
+ // Soft assertion: records pass/fail without throwing so every section's
75
+ // findings are collected even when an earlier check fails. All findings
76
+ // are replayed through the hard `check` at the end of run() so the file
77
+ // still FAILS when any contract is unmet.
78
+ var _findings = [];
79
+ function softCheck(label, condition) {
80
+ _findings.push({ label: label, ok: !!condition });
81
+ console.log((condition ? " ok " : " FAIL ") + label);
82
+ }
83
+
84
+ // ---- shared synchronous docker-exec mysql ----
85
+ // SQL travels on stdin (never argv). --batch gives TAB-separated,
86
+ // header-bearing output; --raw disables escaping so a value round-trips
87
+ // byte-faithfully. stderr is captured so a SQL error surfaces with its
88
+ // message.
89
+ function _mysqlRaw(sql) {
90
+ var args = ["exec", "-i", CONTAINER, "mysql", "-uroot", "-pblamejs_test_root",
91
+ "--batch", "--raw", DB_NAME];
92
+ try {
93
+ var out = execFileSync("docker", args,
94
+ { input: SQLMODE + sql + "\n",
95
+ stdio: ["pipe", "pipe", "pipe"], maxBuffer: 64 * 1024 * 1024 });
96
+ return { ok: true, out: out.toString("utf8") };
97
+ } catch (e) {
98
+ var stderr = e.stderr ? e.stderr.toString("utf8") : "";
99
+ return { ok: false, out: (e.stdout ? e.stdout.toString("utf8") : ""), err: stderr || (e.message || String(e)) };
100
+ }
101
+ }
102
+
103
+ // One-shot for setup / teardown / out-of-band assertions; throws on error.
104
+ function _mysql(sql) {
105
+ var r = _mysqlRaw(sql);
106
+ if (!r.ok) throw new Error("mysql setup failed for [" + sql.slice(0, 120) + "]: " + _clean(r.err));
107
+ return r.out;
108
+ }
109
+
110
+ function _clean(s) {
111
+ return String(s || "").split(/\r?\n/)
112
+ .filter(function (l) { return l && l.indexOf("[Warning] Using a password") === -1; })
113
+ .join(" ").slice(0, 220);
114
+ }
115
+
116
+ // Inline `?` binding. Every value the store binds is operator-controlled
117
+ // (ids / sealed cells / hashes / numbers / null). MySQL treats backslash
118
+ // as a string escape by default, so escape both backslash and quote.
119
+ function _bindQ(sql, params) {
120
+ params = params || [];
121
+ var i = 0;
122
+ return sql.replace(/\?/g, function () {
123
+ if (i >= params.length) throw new Error("placeholder/param count mismatch in: " + sql);
124
+ var v = params[i++];
125
+ if (v === null || v === undefined) return "NULL";
126
+ if (typeof v === "number") return String(v);
127
+ if (typeof v === "boolean") return v ? "1" : "0";
128
+ return "'" + String(v).replace(/\\/g, "\\\\").replace(/'/g, "''") + "'";
129
+ });
130
+ }
131
+
132
+ // Parse a --batch block: header row first, then data rows. NULL prints as
133
+ // the literal "NULL".
134
+ function _parseSelect(out) {
135
+ var lines = out.split(/\r?\n/).filter(function (l) { return l.length > 0; });
136
+ if (lines.length === 0) return [];
137
+ var headers = lines[0].split("\t");
138
+ var rows = [];
139
+ for (var i = 1; i < lines.length; i++) {
140
+ var cells = lines[i].split("\t");
141
+ var row = {};
142
+ for (var c = 0; c < headers.length; c++) {
143
+ var v = cells[c];
144
+ row[headers[c]] = (v === "NULL" || v === undefined) ? null : v;
145
+ }
146
+ rows.push(row);
147
+ }
148
+ return rows;
149
+ }
150
+
151
+ function _isWrite(sql) {
152
+ return /^\s*(INSERT|UPDATE|DELETE|REPLACE|MERGE)\b/i.test(sql);
153
+ }
154
+
155
+ // Out-of-band raw read (bypasses the store's unseal) for at-rest asserts.
156
+ function _selectDirect(sqlText) {
157
+ return _parseSelect(_mysql(sqlText));
158
+ }
159
+
160
+ // ---- b.db-shaped handle ({ runSql, prepare }) over real MySQL ----
161
+ function _makeMysqlDbHandle() {
162
+ return {
163
+ prepare: function (sql) {
164
+ // The store's schema reconcile probes columns with the SQLite
165
+ // `PRAGMA table_info(...)`; a MySQL operator adapter answers the
166
+ // same question from information_schema.columns (one row per
167
+ // column, named `name` like the PRAGMA's output).
168
+ var pragma = /^PRAGMA\s+table_info\(\s*"?([A-Za-z0-9_]+)"?\s*\)\s*$/i.exec(sql);
169
+ if (pragma) {
170
+ sql = "SELECT column_name AS name FROM information_schema.columns " +
171
+ "WHERE table_schema = '" + DB_NAME + "' AND table_name = '" + pragma[1] + "'";
172
+ }
173
+ return {
174
+ get: function () {
175
+ var params = Array.prototype.slice.call(arguments);
176
+ var r = _mysqlRaw(_bindQ(sql, params));
177
+ if (!r.ok) throw new Error("MySQL error: " + _clean(r.err));
178
+ var rows = _parseSelect(r.out);
179
+ return rows.length ? rows[0] : undefined;
180
+ },
181
+ all: function () {
182
+ var params = Array.prototype.slice.call(arguments);
183
+ var r = _mysqlRaw(_bindQ(sql, params));
184
+ if (!r.ok) throw new Error("MySQL error: " + _clean(r.err));
185
+ return _parseSelect(r.out);
186
+ },
187
+ run: function () {
188
+ var params = Array.prototype.slice.call(arguments);
189
+ var bound = _bindQ(sql, params);
190
+ // ROW_COUNT() in the SAME connection/batch as the write reports
191
+ // affectedRows (it is connection-scoped).
192
+ var r = _mysqlRaw(bound + ";\nSELECT ROW_COUNT() AS rc;");
193
+ if (!r.ok) throw new Error("MySQL error: " + _clean(r.err));
194
+ var changes = 0;
195
+ if (_isWrite(sql)) {
196
+ var rows = _parseSelect(r.out);
197
+ var last = rows.length ? rows[rows.length - 1] : null;
198
+ if (last && last.rc !== undefined && last.rc !== null) changes = Number(last.rc);
199
+ }
200
+ return { changes: changes, lastInsertRowid: 0 };
201
+ },
202
+ };
203
+ },
204
+ runSql: function (sql) {
205
+ var t = sql;
206
+ // The physical table is operator-provisioned (VARCHAR key columns),
207
+ // so the store's convenience CREATE TABLE IF NOT EXISTS is a no-op;
208
+ // patch its TEXT PRIMARY KEY anyway so the statement would stay
209
+ // valid on MySQL even against an absent table (error 1170 refuses
210
+ // an unbounded TEXT key).
211
+ t = t.replace("id TEXT PRIMARY KEY", "id VARCHAR(190) PRIMARY KEY");
212
+ // MySQL has no CREATE INDEX IF NOT EXISTS: strip the clause and
213
+ // swallow the duplicate-key-name error (1061) so the store's
214
+ // idempotent index DDL stays idempotent.
215
+ var isIdempotentIndex = /^CREATE INDEX IF NOT EXISTS\b/i.test(t);
216
+ if (isIdempotentIndex) t = t.replace(/^CREATE INDEX IF NOT EXISTS\b/i, "CREATE INDEX");
217
+ var r = _mysqlRaw(t);
218
+ if (!r.ok) {
219
+ if (isIdempotentIndex && /Duplicate key name|error 1061/i.test(r.err)) return "";
220
+ throw new Error("MySQL error: " + _clean(r.err));
221
+ }
222
+ return r.out;
223
+ },
224
+ };
225
+ }
226
+
227
+ function _dropAll() {
228
+ _mysql('DROP TABLE IF EXISTS "' + TABLE + '";');
229
+ }
230
+
231
+ // Operator-provisioned physical table: the canonical dbTicketStore column
232
+ // set, with VARCHAR key/indexed columns (MySQL cannot key or index an
233
+ // unbounded TEXT column), BIGINT ms-epoch columns (MySQL INTEGER is
234
+ // 32-bit and cannot hold a Date.now() value; the store's convenience DDL
235
+ // sizes INTEGER for SQLite where it is 64-bit), and a LONGTEXT payload.
236
+ // The store's own CREATE TABLE IF NOT EXISTS no-ops against this table
237
+ // and its column reconcile finds every column present.
238
+ function _provision() {
239
+ _mysql('CREATE TABLE "' + TABLE + '" (' +
240
+ '"id" VARCHAR(190) PRIMARY KEY, ' +
241
+ '"type" VARCHAR(64) NOT NULL, ' +
242
+ '"status" VARCHAR(64) NOT NULL, ' +
243
+ '"subject_id" TEXT, ' +
244
+ '"subject_email" TEXT, ' +
245
+ '"subject_phone" TEXT, ' +
246
+ '"subject_email_hash" VARCHAR(190), ' +
247
+ '"subject_id_hash" VARCHAR(190), ' +
248
+ '"submitted_at" BIGINT NOT NULL, ' +
249
+ '"deadline_at" BIGINT NOT NULL, ' +
250
+ '"processed_at" BIGINT, ' +
251
+ '"verification_level" VARCHAR(64), ' +
252
+ '"posture" VARCHAR(64), ' +
253
+ '"payload" LONGTEXT NOT NULL);');
254
+ }
255
+
256
+ // Run one stage; a thrown error becomes a single FAILED finding so an
257
+ // unexpected MySQL error in one stage doesn't hide the others.
258
+ async function _section(label, fn) {
259
+ try {
260
+ await fn();
261
+ } catch (e) {
262
+ softCheck(label + "(mysql): stage completed without an unexpected error " +
263
+ "— DETAIL: " + (((e && e.message) || String(e)).split(/\r?\n/)[0]), false);
264
+ }
265
+ }
266
+
267
+ async function run() {
268
+ var mysqlSvc = await services.requireService("mysql");
269
+ if (!mysqlSvc.ok) throw new Error("mysql unreachable: " + mysqlSvc.reason);
270
+
271
+ _dropAll();
272
+ _provision();
273
+
274
+ // Vault + local-db bring-up: the store seals subject PII + payload via
275
+ // b.cryptoField only when a vault is initialized, and that sealed mode
276
+ // is exactly what the dual-hash lookup + fail-closed filter guard.
277
+ var tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "blamejs-dsr-mysql-"));
278
+ await helpers.setupTestDb(tmpDir);
279
+
280
+ var handle = _makeMysqlDbHandle();
281
+
282
+ var SUBJECTS = {
283
+ "alice@example.com": { subjectId: "u-alice", email: "alice@example.com", phone: "+15550001111" },
284
+ "bob@example.com": { subjectId: "u-bob", email: "bob@example.com", phone: "+15550002222" },
285
+ };
286
+
287
+ var store, dsr;
288
+ var t1, t2, tb, erasure, ghostErasure;
289
+
290
+ try {
291
+ // Constructing the store runs its ensureSchema against real MySQL
292
+ // (CREATE TABLE IF NOT EXISTS no-op, information_schema column probe,
293
+ // the emulated idempotent CREATE INDEX on the hash + status columns).
294
+ store = b.dsr.dbTicketStore({ db: handle, table: TABLE });
295
+ softCheck("store(mysql): dbTicketStore construction ran ensureSchema on real MySQL", true);
296
+
297
+ dsr = b.dsr.create({
298
+ ticketStore: store,
299
+ posture: "gdpr",
300
+ identityResolver: async function (input) {
301
+ if (input && input.email && SUBJECTS[input.email]) return SUBJECTS[input.email];
302
+ if (input && input.phone === "+15550003333") {
303
+ // A subject the operator can only identify by phone — no email,
304
+ // no subjectId, so the ticket store has NO indexable key for it.
305
+ return { phone: "+15550003333" };
306
+ }
307
+ return null;
308
+ },
309
+ sources: [{
310
+ name: "users",
311
+ query: async function () { return [{ id: 1 }]; },
312
+ erase: async function () { return { deletedIds: [1] }; },
313
+ }],
314
+ });
315
+
316
+ await _section("sealed-insert", async function () {
317
+ t1 = await dsr.submit({
318
+ type: "access",
319
+ subject: { email: "alice@example.com" },
320
+ reason: "export request one",
321
+ });
322
+ var raw = _selectDirect(
323
+ 'SELECT "subject_email", "subject_phone", "subject_email_hash", ' +
324
+ '"subject_id_hash", "payload" FROM "' + TABLE + "\" WHERE \"id\" = '" + t1.id + "';");
325
+ softCheck("sealed-insert(mysql): the ticket row physically landed on MySQL",
326
+ raw.length === 1);
327
+ softCheck("sealed-insert(mysql): subject_email is sealed at rest (not plaintext)",
328
+ raw.length === 1 && typeof raw[0].subject_email === "string" &&
329
+ raw[0].subject_email.indexOf("alice@example.com") === -1);
330
+ softCheck("sealed-insert(mysql): payload is sealed at rest (no plaintext email leak)",
331
+ raw.length === 1 && typeof raw[0].payload === "string" &&
332
+ raw[0].payload.indexOf("alice@example.com") === -1);
333
+ softCheck("sealed-insert(mysql): derived subject_email_hash populated for lookup",
334
+ raw.length === 1 && typeof raw[0].subject_email_hash === "string" &&
335
+ raw[0].subject_email_hash.length > 0);
336
+ softCheck("sealed-insert(mysql): derived subject_id_hash populated for lookup",
337
+ raw.length === 1 && typeof raw[0].subject_id_hash === "string" &&
338
+ raw[0].subject_id_hash.length > 0);
339
+
340
+ var got = await store.get(t1.id);
341
+ softCheck("sealed-insert(mysql): get() unseals the payload back to cleartext",
342
+ got !== null && got.subject && got.subject.email === "alice@example.com" &&
343
+ got.type === "access" && got.status === "pending");
344
+ softCheck("sealed-insert(mysql): get() of an unknown id returns null",
345
+ (await store.get("DSR-0000000-NOPE")) === null);
346
+ });
347
+
348
+ await _section("list-by-subject", async function () {
349
+ t2 = await dsr.submit({
350
+ type: "access",
351
+ subject: { email: "alice@example.com" },
352
+ reason: "export request two",
353
+ });
354
+ tb = await dsr.submit({
355
+ type: "access",
356
+ subject: { email: "bob@example.com" },
357
+ reason: "bob export",
358
+ });
359
+
360
+ var aliceList = await store.list({ subject: { email: "alice@example.com" } });
361
+ var aliceIds = aliceList.map(function (t) { return t.id; }).sort();
362
+ softCheck("list(mysql): alice's email matches exactly her two tickets via the " +
363
+ "dual-hash whereIn (not bob's)",
364
+ aliceList.length === 2 &&
365
+ JSON.stringify(aliceIds) === JSON.stringify([t1.id, t2.id].sort()));
366
+
367
+ var bobList = await store.list({ subject: { subjectId: "u-bob" } });
368
+ softCheck("list(mysql): bob's subjectId matches exactly his ticket via subject_id_hash",
369
+ bobList.length === 1 && bobList[0].id === tb.id);
370
+ });
371
+
372
+ await _section("fail-closed-filter", async function () {
373
+ var all = await store.list({});
374
+ softCheck("fail-closed(mysql): baseline — a no-subject list sees every ticket (3)",
375
+ all.length === 3);
376
+
377
+ // Alice's phone IS on her tickets' sealed payloads, but phone is not
378
+ // an indexable subject key — the filter must produce a
379
+ // matches-nothing predicate, NOT degrade to a full-table scan.
380
+ var phoneOnly = await store.list({ subject: { phone: "+15550001111" } });
381
+ softCheck("fail-closed(mysql): a phone-only subject matches ZERO tickets on real " +
382
+ "MySQL (never all " + all.length + ")",
383
+ phoneOnly.length === 0);
384
+
385
+ var emptySubject = await store.list({ subject: {} });
386
+ softCheck("fail-closed(mysql): an empty subject matches ZERO tickets (never all)",
387
+ emptySubject.length === 0);
388
+ });
389
+
390
+ await _section("erasure-purge", async function () {
391
+ erasure = await dsr.submit({
392
+ type: "erasure",
393
+ subject: { email: "alice@example.com" },
394
+ reason: "right to erasure",
395
+ verificationLevel: "secondary",
396
+ });
397
+ var processed = await dsr.process(erasure.id,
398
+ { actor: "compliance@example.com", verificationLevel: "secondary" });
399
+ softCheck("erasure(mysql): the erasure ticket completed on real MySQL",
400
+ processed && processed.status === "completed");
401
+
402
+ softCheck("erasure(mysql): alice's prior ticket one was purged",
403
+ (await store.get(t1.id)) === null);
404
+ softCheck("erasure(mysql): alice's prior ticket two was purged",
405
+ (await store.get(t2.id)) === null);
406
+ softCheck("erasure(mysql): the erasure ticket itself survives (audit/receipt trail)",
407
+ (await store.get(erasure.id)) !== null);
408
+ softCheck("erasure(mysql): bob's ticket is untouched by alice's erasure purge",
409
+ (await store.get(tb.id)) !== null);
410
+ });
411
+
412
+ await _section("erasure-no-key-purges-nothing", async function () {
413
+ // The DESTRUCTIVE fail-closed proof: an erasure whose subject has NO
414
+ // indexable key must purge NOTHING. A fail-open subject filter would
415
+ // list every row here and delete every other subject's tickets.
416
+ ghostErasure = await dsr.submit({
417
+ type: "erasure",
418
+ subject: { phone: "+15550003333" },
419
+ reason: "erasure for a subject with no indexable key",
420
+ verificationLevel: "secondary",
421
+ });
422
+ var done = await dsr.process(ghostErasure.id, { verificationLevel: "secondary" });
423
+ softCheck("erasure-no-key(mysql): the no-indexable-key erasure still completes",
424
+ done && done.status === "completed");
425
+ softCheck("erasure-no-key(mysql): bob's ticket SURVIVES the no-key purge " +
426
+ "(a fail-open filter would have deleted it)",
427
+ (await store.get(tb.id)) !== null);
428
+ softCheck("erasure-no-key(mysql): alice's completed erasure ticket SURVIVES the no-key purge",
429
+ (await store.get(erasure.id)) !== null);
430
+ softCheck("erasure-no-key(mysql): the no-key erasure ticket itself survives",
431
+ (await store.get(ghostErasure.id)) !== null);
432
+ });
433
+
434
+ await _section("purge-expired", async function () {
435
+ var now = Date.now();
436
+ await store.insert({
437
+ id: "DSR-0000000-RETIRED1",
438
+ type: "access",
439
+ status: "completed",
440
+ subject: { subjectId: "u-old", email: "old@example.com" },
441
+ submittedAt: now - b.constants.TIME.days(60),
442
+ deadlineAt: now - b.constants.TIME.days(30),
443
+ processedAt: now - b.constants.TIME.days(45),
444
+ verificationLevel: "primary",
445
+ posture: "gdpr",
446
+ retentionUntil: now - b.constants.TIME.days(1),
447
+ });
448
+ var purged = await store.purgeExpired();
449
+ softCheck("purge-expired(mysql): the aged terminal ticket was purged (exactly 1)",
450
+ purged === 1);
451
+ softCheck("purge-expired(mysql): the aged ticket row is gone",
452
+ (await store.get("DSR-0000000-RETIRED1")) === null);
453
+ softCheck("purge-expired(mysql): a completed ticket inside its retention floor survives",
454
+ (await store.get(erasure.id)) !== null);
455
+ });
456
+ } finally {
457
+ try { await helpers.teardownTestDb(tmpDir); } catch (_e) {}
458
+ _dropAll();
459
+ }
460
+
461
+ // Replay every recorded finding through the hard `check` so the file
462
+ // FAILS (and the runner reports it) when any contract is unmet.
463
+ var failures = _findings.filter(function (f) { return !f.ok; });
464
+ console.log("");
465
+ console.log("[dsr-cluster-mysql] " + (_findings.length - failures.length) + "/" +
466
+ _findings.length + " checks ok; " + failures.length + " failing");
467
+ for (var i = 0; i < _findings.length; i++) {
468
+ check(_findings[i].label, _findings[i].ok);
469
+ }
470
+ }
471
+
472
+ module.exports = { run: run };
473
+
474
+ if (require.main === module) {
475
+ run().then(
476
+ function () { console.log("OK — " + helpers.getChecks() + " checks passed"); process.exit(0); },
477
+ function (e) { console.error("FAIL:", e.stack || e); process.exit(1); }
478
+ );
479
+ }