@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
@@ -119,6 +119,14 @@ function testPublicSurface() {
119
119
  check("b.codepointClass.decodeNumericEntities",
120
120
  b.codepointClass.decodeNumericEntities("javascript:") === "javascript:" &&
121
121
  b.codepointClass.decodeNumericEntities("&#106avascript:") === "javascript:");
122
+ check("b.codepointClass.decodeMarkupEntities",
123
+ b.codepointClass.decodeMarkupEntities("expression(") === "expression(" &&
124
+ b.codepointClass.decodeMarkupEntities("behavior:url(") === "behavior:url(" &&
125
+ b.codepointClass.decodeMarkupEntities("a	b").charCodeAt(1) === 0x09);
126
+ check("b.codepointClass.stripUrlSchemeWhitespace",
127
+ b.codepointClass.stripUrlSchemeWhitespace(" javascript:x") === "javascript:x" &&
128
+ b.codepointClass.stripUrlSchemeWhitespace(
129
+ "java" + b.codepointClass.fromCp(0x09) + "script:") === "javascript:");
122
130
  // The remaining catalog constants the issue lists are reachable.
123
131
  check("b.codepointClass.BOM_CHAR",
124
132
  typeof b.codepointClass.BOM_CHAR === "string" && b.codepointClass.BOM_CHAR.charCodeAt(0) === 0xFEFF);
@@ -54,6 +54,28 @@ function run() {
54
54
  });
55
55
  check("prohibited.classify: social-scoring caught", hits1.indexOf("social-scoring") !== -1);
56
56
 
57
+ // Art. 5(1)(c) of the ADOPTED Regulation (EU) 2024/1689 prohibits social
58
+ // scoring by ANY actor. The "by public authorities or on their behalf"
59
+ // limitation present in the 2021 Commission proposal was removed from the
60
+ // final text; the catalog's own description already reflects that (it does
61
+ // not mention public authorities). A private-company social-scoring system
62
+ // must therefore classify as prohibited, not fall through to minimal-risk.
63
+ var hitsPriv = aiAct.prohibited.classify({
64
+ purpose: "social-scoring", deployerType: "private-company",
65
+ });
66
+ check("prohibited.classify: private-actor social-scoring caught",
67
+ hitsPriv.indexOf("social-scoring") !== -1);
68
+ var hitsNoDeployer = aiAct.prohibited.classify({ purpose: "social-scoring" });
69
+ check("prohibited.classify: social-scoring caught without deployerType",
70
+ hitsNoDeployer.indexOf("social-scoring") !== -1);
71
+ var assessPrivSocial = aiAct.classify({
72
+ purpose: "social-scoring", deployerType: "private-company",
73
+ });
74
+ check("classify: private-actor social-scoring → prohibited",
75
+ assessPrivSocial.tier === "prohibited");
76
+ check("classify: private-actor social-scoring cites Art. 5",
77
+ assessPrivSocial.legalReference[0] && assessPrivSocial.legalReference[0].indexOf("Art. 5") !== -1);
78
+
57
79
  var hits2 = aiAct.prohibited.classify({
58
80
  builds: "facial-recognition-db", scrapesUntargeted: true,
59
81
  });
@@ -182,6 +204,25 @@ function run() {
182
204
  check("transparency.htmlBanner: HTML element", html.indexOf('<div ') === 0);
183
205
  check("transparency.htmlBanner: data attr", html.indexOf('data-blamejs-aiAct="Art. 50(2)"') !== -1);
184
206
 
207
+ // htmlBanner serializes the operator-supplied `lang` into a double-quoted
208
+ // HTML attribute. lang is free-form (a request locale / Accept-Language /
209
+ // query param in a server-rendered banner), so a value carrying a double
210
+ // quote must be entity-escaped or it breaks out of the attribute and injects
211
+ // active content (reflected XSS). Only the element TEXT was escaped before;
212
+ // the attribute values were concatenated raw.
213
+ var xssLang = t.htmlBanner({ kind: "ai-interaction", lang: '"><script>alert(1)</script><x y="' });
214
+ check("transparency.htmlBanner: lang cannot break out of attribute",
215
+ xssLang.indexOf("<script>alert(1)</script>") === -1);
216
+ check("transparency.htmlBanner: lang quote is entity-escaped",
217
+ xssLang.indexOf("&quot;") !== -1);
218
+ var xssHandler = t.htmlBanner({ kind: "ai-interaction", lang: 'en" onmouseover=alert(document.cookie) x="' });
219
+ // The handler substring survives as inert text INSIDE the quoted value; the
220
+ // invariant is that no RAW quote precedes it (which would close the attribute
221
+ // and make onmouseover a real event handler).
222
+ check("transparency.htmlBanner: lang cannot inject an event handler",
223
+ xssHandler.indexOf('"en" onmouseover') === -1 &&
224
+ xssHandler.indexOf('en&quot; onmouseover') !== -1);
225
+
185
226
  var w = t.watermark({ mediaKind: "image", modelId: "myco/img-gen-3", modelVersion: "v3.1" });
186
227
  check("transparency.watermark: manifest", w.aiActArticle === "Art. 50(2)");
187
228
  check("transparency.watermark: modelId", w.modelId === "myco/img-gen-3");
@@ -193,6 +234,24 @@ function run() {
193
234
  var jl = t.jsonLdDisclosure({ mediaKind: "audio", modelId: "myco/voice-gen-2" });
194
235
  check("transparency.jsonLdDisclosure: tag", jl.indexOf('<script type="application/ld+json"') === 0);
195
236
 
237
+ // jsonLdDisclosure embeds the operator-supplied watermark manifest via
238
+ // JSON.stringify inside a <script> element. Raw JSON.stringify does not
239
+ // escape "</script>" (or "<"), so a model id / deployer name carrying that
240
+ // sequence terminates the script block early and injects active markup. The
241
+ // HTML parser ends a <script> at the first "</script>" regardless of the
242
+ // type="application/ld+json" attribute, so the injected element executes.
243
+ var jlXss = t.jsonLdDisclosure({
244
+ mediaKind: "image",
245
+ modelId: "x</script><script>alert(document.domain)</script>",
246
+ });
247
+ check("transparency.jsonLdDisclosure: cannot break out of <script>",
248
+ jlXss.indexOf("</script><script>alert(document.domain)</script>") === -1);
249
+ check("transparency.jsonLdDisclosure: '<' is unicode-escaped in the payload",
250
+ jlXss.indexOf("\\u003c/script\\u003e") !== -1);
251
+ // Exactly one real closing </script> tag (the element terminator) survives.
252
+ check("transparency.jsonLdDisclosure: single real closing tag",
253
+ jlXss.split("</script>").length === 2);
254
+
196
255
  var meta = t.metaTags({ kind: "deep-fake", policyUri: "https://example.com/ai-policy" });
197
256
  check("transparency.metaTags: notice", meta.indexOf('<meta name="ai-act-notice"') !== -1);
198
257
  check("transparency.metaTags: article", meta.indexOf('<meta name="ai-act-article"') !== -1);
@@ -776,6 +835,141 @@ function run() {
776
835
  });
777
836
  }, /copVersion/);
778
837
 
838
+ // ---- full-dotted-path drive: FRIA (Art. 27), GPAI training-data
839
+ // summary (Art. 53(1)(d)), COP adherence form + signed-declaration
840
+ // verify. Each primitive is exercised through the real
841
+ // b.compliance.aiAct.* consumer path with a valid input plus a
842
+ // missing-required-field typed refusal. ----
843
+
844
+ // b.compliance.aiAct.fundamentalRightsImpactAssessment — Art. 27 FRIA
845
+ var friaDoc = b.compliance.aiAct.fundamentalRightsImpactAssessment({
846
+ systemId: "credit-scoring-v3",
847
+ systemDescription: { purpose: "loan approval / creditworthiness" },
848
+ deploymentContext: { purpose: "loan approval", sector: "financial",
849
+ geography: "EU", scale: "1M decisions/year" },
850
+ affectedPersons: { categories: ["EU consumers"], estimatedCount: 1000000 },
851
+ risksToFundamentalRights: ["discriminatory denial", "right to explanation"],
852
+ mitigations: ["bias audit every 6 months", "human review threshold"],
853
+ humanOversight: { roles: ["credit officer"], escalationPath: "ombudsman" },
854
+ reviewCadence: "semi-annual",
855
+ });
856
+ check("fria: Article 27 document", friaDoc.article.indexOf("Article 27") !== -1);
857
+ check("fria: systemId echoed", friaDoc.systemId === "credit-scoring-v3");
858
+ check("fria: risks carried through", friaDoc.risks.length === 2);
859
+ check("fria: mitigations carried through", friaDoc.mitigations.length === 2);
860
+ check("fria: humanOversight carried through", friaDoc.humanOversight.escalationPath === "ombudsman");
861
+ check("fria: reviewCadence honored", friaDoc.reviewCadence === "semi-annual");
862
+ check("fria: classification derived from systemDescription",
863
+ friaDoc.classification !== null && typeof friaDoc.classification.tier === "string");
864
+ check("fria: operator-must-notify status", friaDoc.notificationStatus === "operator-must-notify");
865
+
866
+ // Defaults when optional context + systemDescription are omitted
867
+ var friaMin = b.compliance.aiAct.fundamentalRightsImpactAssessment({ systemId: "s1" });
868
+ check("fria: classification null without systemDescription", friaMin.classification === null);
869
+ check("fria: reviewCadence defaults to annual", friaMin.reviewCadence === "annual");
870
+
871
+ rejects("fria: missing systemId refused",
872
+ function () { b.compliance.aiAct.fundamentalRightsImpactAssessment({}); },
873
+ /systemId must be a non-empty string/);
874
+ rejects("fria: missing opts refused",
875
+ function () { b.compliance.aiAct.fundamentalRightsImpactAssessment(); },
876
+ /opts must be an object/);
877
+ check("fria: missing opts is a typed ComplianceError with descriptive message",
878
+ (function () {
879
+ try { b.compliance.aiAct.fundamentalRightsImpactAssessment({}); return false; }
880
+ catch (e) { return e.name === "ComplianceError" && e.code === "compliance-ai-act/no-system-id" &&
881
+ /systemId must be a non-empty string/.test(e.message); }
882
+ })());
883
+
884
+ // b.compliance.aiAct.gpai.trainingDataSummary — Art. 53(1)(d) template
885
+ var tds = b.compliance.aiAct.gpai.trainingDataSummary({
886
+ modelId: "acme-llm-7b",
887
+ modelVersion: "1.0",
888
+ provider: { name: "Acme AI", address: "1 St", contact: "ai@acme.example" },
889
+ dataCategories: ["web-crawl", "books", "code"],
890
+ modalities: ["text"],
891
+ sources: [
892
+ { identifier: "CommonCrawl-2024", type: "web-crawl", licenseStatus: "permitted" },
893
+ ],
894
+ biasMitigation: { methodsApplied: ["demographic-balance"], auditCadence: "quarterly" },
895
+ });
896
+ check("trainingDataSummary: Article 53(1)(d)", tds.article.indexOf("Article 53(1)(d)") !== -1);
897
+ check("trainingDataSummary: AI Office template", tds.template.indexOf("AI Office") !== -1);
898
+ check("trainingDataSummary: modelId echoed", tds.modelId === "acme-llm-7b");
899
+ check("trainingDataSummary: modalities carried", tds.modalities.length === 1 && tds.modalities[0] === "text");
900
+ check("trainingDataSummary: source normalized", tds.sources[0].identifier === "CommonCrawl-2024");
901
+ check("trainingDataSummary: source defaults applied", tds.sources[0].url === null && tds.sources[0].size === null);
902
+ check("trainingDataSummary: licenseStatus preserved", tds.sources[0].licenseStatus === "permitted");
903
+ check("trainingDataSummary: copyrightStatus defaulted", tds.copyrightStatus.respectsRightReservations === null);
904
+ check("trainingDataSummary: well-known publish note", tds.note.indexOf("well-known") !== -1);
905
+
906
+ rejects("trainingDataSummary: missing modelId refused",
907
+ function () { b.compliance.aiAct.gpai.trainingDataSummary({ modelVersion: "1.0" }); },
908
+ /modelId must be a non-empty string/);
909
+ rejects("trainingDataSummary: missing opts refused",
910
+ function () { b.compliance.aiAct.gpai.trainingDataSummary(); },
911
+ /opts must be an object/);
912
+ check("trainingDataSummary: missing modelId is a typed ComplianceError with descriptive message",
913
+ (function () {
914
+ try { b.compliance.aiAct.gpai.trainingDataSummary({ modelVersion: "1.0" }); return false; }
915
+ catch (e) { return e.name === "ComplianceError" && e.code === "compliance-ai-act/no-model-id" &&
916
+ /modelId must be a non-empty string/.test(e.message); }
917
+ })());
918
+
919
+ // b.compliance.aiAct.gpai.adherenceForm — derived Art. 53 obligation set
920
+ var dotEvidence = b.crypto.sha3Hash("annex-xi-technical-documentation-v1");
921
+ var dotForm = b.compliance.aiAct.gpai.adherenceForm({
922
+ modelId: "dotted-llm", modelVersion: "2.0",
923
+ commitments: [{ article: "Art. 53(1)(a)", statement: "Annex XI docs maintained", evidenceHash: dotEvidence }],
924
+ });
925
+ check("adherenceForm: derives 4 Art. 53 obligations", dotForm.commitments.length === 4);
926
+ check("adherenceForm: not systemic by default", dotForm.isSystemicRisk === false);
927
+ check("adherenceForm: articles Art. 53 only", dotForm.articles.length === 1 && dotForm.articles[0] === "Art. 53");
928
+ check("adherenceForm: bound commitment evidenced", dotForm.commitments[0].evidenced === true);
929
+ check("adherenceForm: unsupplied obligation surfaced", dotForm.commitments[1].evidenced === false);
930
+
931
+ rejects("adherenceForm: missing modelVersion refused",
932
+ function () {
933
+ b.compliance.aiAct.gpai.adherenceForm({
934
+ modelId: "m",
935
+ commitments: [{ article: "Art. 53(1)(a)", statement: "x", evidenceHash: dotEvidence }],
936
+ });
937
+ }, /modelVersion/);
938
+ rejects("adherenceForm: missing opts refused",
939
+ function () { b.compliance.aiAct.gpai.adherenceForm(); },
940
+ /must be an object|opts/);
941
+
942
+ // b.compliance.aiAct.gpai.verifyAdherence — signed round-trip verdict.
943
+ // The verify contract RETURNS a verdict { valid, adherence, reason } and
944
+ // never throws, so its "refusals" are verdicts, not exceptions.
945
+ var dotPair = b.crypto.generateSigningKeyPair("ml-dsa-87");
946
+ var dotArticles = ["Art. 53(1)(a)", "Art. 53(1)(b)", "Art. 53(1)(c)", "Art. 53(1)(d)"];
947
+ var dotCommitments = dotArticles.map(function (a) {
948
+ return { article: a, statement: "evidence for " + a, evidenceHash: dotEvidence };
949
+ });
950
+ var dotEnv = b.compliance.aiAct.gpai.declareAdherence({
951
+ modelId: "dotted-llm", modelVersion: "2.0",
952
+ commitments: dotCommitments,
953
+ privateKeyPem: dotPair.privateKey,
954
+ });
955
+ var dotVerdict = b.compliance.aiAct.gpai.verifyAdherence(dotEnv, dotPair.publicKey);
956
+ check("verifyAdherence: valid round-trip", dotVerdict.valid === true);
957
+ check("verifyAdherence: reason null on success", dotVerdict.reason === null);
958
+ check("verifyAdherence: surfaces adherence form", dotVerdict.adherence.modelId === "dotted-llm");
959
+
960
+ // Missing required public key → typed verdict refusal (never throws)
961
+ var dotNoKeyVerdict = b.compliance.aiAct.gpai.verifyAdherence(dotEnv);
962
+ check("verifyAdherence: missing public key → verdict refusal",
963
+ dotNoKeyVerdict.valid === false && dotNoKeyVerdict.reason === "public-key-required" &&
964
+ dotNoKeyVerdict.adherence === null);
965
+
966
+ // Wrong signing key → signature-invalid verdict
967
+ var dotOtherPair = b.crypto.generateSigningKeyPair("ml-dsa-87");
968
+ var dotBadVerdict = b.compliance.aiAct.gpai.verifyAdherence(dotEnv, dotOtherPair.publicKey);
969
+ check("verifyAdherence: wrong key → signature-invalid verdict",
970
+ dotBadVerdict.valid === false && dotBadVerdict.reason === "signature-invalid" &&
971
+ dotBadVerdict.adherence === null);
972
+
779
973
  console.log("OK — compliance-ai-act tests");
780
974
  }
781
975
 
@@ -0,0 +1,104 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (c) blamejs contributors
3
+ "use strict";
4
+ /**
5
+ * Regression: compliance lifecycle catalogs indexed by an operator-supplied
6
+ * string must resolve only OWN keys. A regime / posture whose value collides
7
+ * with an Object.prototype member ("valueOf", "toString", "constructor",
8
+ * "hasOwnProperty", ...) previously resolved to the inherited function
9
+ * instead of falling back / throwing:
10
+ *
11
+ * - b.incident.report.open({ regime: "valueOf" }) picked up
12
+ * Object.prototype.valueOf as the deadline table -> every dueBy became
13
+ * NaN -> a filing 100 days past the real 30-day final wall was recorded
14
+ * late: false and status().late.final stayed 0 (a missed regulatory
15
+ * deadline reported as met).
16
+ * - b.retention.complianceFloor("valueOf", ttl) returned a function
17
+ * instead of throwing retention/unknown-posture (the config-time typo
18
+ * guard silently failed open for these ~7 values).
19
+ */
20
+ var helpers = require("../helpers");
21
+ var b = helpers.b;
22
+ var check = helpers.check;
23
+
24
+ var PROTO_KEYS = ["valueOf", "toString", "constructor", "hasOwnProperty",
25
+ "isPrototypeOf", "propertyIsEnumerable", "toLocaleString"];
26
+
27
+ async function run() {
28
+ var HOUR = b.constants.TIME.hours(1);
29
+ var H24 = b.constants.TIME.hours(24);
30
+ var H72 = b.constants.TIME.hours(72);
31
+ var D30 = b.constants.TIME.days(30);
32
+
33
+ // ---- incident.report: proto-key regime must fall back to DEFAULT_DEADLINES ----
34
+ for (var i = 0; i < PROTO_KEYS.length; i++) {
35
+ var regime = PROTO_KEYS[i];
36
+ var ir = b.incident.report.create({ audit: false });
37
+ var rec = await ir.open({ regime: regime, detectedAt: 0 });
38
+ check("incident regime '" + regime + "' initial is finite wall not NaN",
39
+ rec.dueBy.initial === H24);
40
+ check("incident regime '" + regime + "' intermediate is finite wall not NaN",
41
+ rec.dueBy.intermediate === H72);
42
+ check("incident regime '" + regime + "' final is finite wall not NaN",
43
+ rec.dueBy.final === D30);
44
+ }
45
+
46
+ // A genuinely-late FINAL filing under a proto-key regime is flagged late.
47
+ var lateIr = b.incident.report.create({
48
+ audit: false,
49
+ now: function () { return b.constants.TIME.days(100); }, // 100d >> 30d final wall
50
+ });
51
+ var lateRec = await lateIr.open({ regime: "valueOf", detectedAt: 0 });
52
+ var filed = await lateIr.recordFinal(lateRec.id, { note: "100d late" });
53
+ check("incident: 100-days-late final is late:true (not reported as met)",
54
+ filed.stages.final.late === true);
55
+ check("incident: late final lateBy is the real overrun",
56
+ filed.stages.final.lateBy === b.constants.TIME.days(100) - D30);
57
+ check("incident: status counts the late final",
58
+ lateIr.status().late.final === 1);
59
+
60
+ // Control: a benign unknown regime still falls back (fallback contract intact).
61
+ var ctlIr = b.incident.report.create({ audit: false });
62
+ var ctlRec = await ctlIr.open({ regime: "ccpa-not-a-known-regime", detectedAt: 0 });
63
+ check("incident: benign unknown regime falls back to 30d final",
64
+ ctlRec.dueBy.final === D30);
65
+
66
+ // Regression: real regimes keep their statutory walls (DORA 4h initial).
67
+ var doraIr = b.incident.report.create({ audit: false });
68
+ var doraRec = await doraIr.open({ regime: "dora", detectedAt: 0 });
69
+ check("incident: dora regime keeps 4h initial wall",
70
+ doraRec.dueBy.initial === 4 * HOUR);
71
+
72
+ // ---- retention.complianceFloor: proto-key posture must throw, not return a fn ----
73
+ for (var j = 0; j < PROTO_KEYS.length; j++) {
74
+ var posture = PROTO_KEYS[j];
75
+ var threw = false;
76
+ var ret;
77
+ try { ret = b.retention.complianceFloor(posture, 1000); }
78
+ catch (e) { threw = e && e.code === "retention/unknown-posture"; }
79
+ check("retention.complianceFloor('" + posture + "') throws unknown-posture (not a function)",
80
+ threw === true && ret === undefined);
81
+ }
82
+
83
+ // Control + regression: real posture returns its floor; a plain typo throws.
84
+ check("retention.complianceFloor('hipaa') returns 6-year floor",
85
+ b.retention.complianceFloor("hipaa") === b.constants.TIME.days(365 * 6));
86
+ var typoThrew = false;
87
+ try { b.retention.complianceFloor("hipaa-typo", 1000); }
88
+ catch (e2) { typoThrew = e2 && e2.code === "retention/unknown-posture"; }
89
+ check("retention.complianceFloor plain typo still throws", typoThrew === true);
90
+
91
+ // applyPosture with a proto-key posture must not inherit a function floor.
92
+ var ap = b.retention.applyPosture("valueOf");
93
+ check("retention.applyPosture('valueOf') floorMs is null (no inherited fn)",
94
+ ap !== null ? ap.floorMs === null : true);
95
+ b.retention.applyPosture(""); // reset active posture
96
+
97
+ console.log("OK — compliance lifecycle proto-key tests");
98
+ }
99
+
100
+ module.exports = { run: run };
101
+ if (require.main === module) {
102
+ run().then(function () { process.exit(0); })
103
+ .catch(function (e) { console.error(e); process.exit(1); });
104
+ }
@@ -681,6 +681,249 @@ function testFetcherValidation() {
681
681
  check("fetcher.create: missing fetch throws", threwBadFetch);
682
682
  }
683
683
 
684
+ // ---- Error/edge coverage ----
685
+
686
+ function _threwCode(fn, code) {
687
+ try { fn(); return false; }
688
+ catch (e) { return e && e.code === code; }
689
+ }
690
+
691
+ // parseOfacCsvRow — exercise the missing-field alternates (Program /
692
+ // Country / Publish_Date absent → defaults) and the Remarks-present
693
+ // consequent, plus every SDN_Type → canonical mapping.
694
+ function testParseOfacCsvRowEdge() {
695
+ // Minimal row: no Program/Country/Publish_Date/Remarks, no SDN_Type
696
+ var min = sanctions.parseOfacCsvRow({ ent_num: 5, SDN_Name: "MIN GUY" });
697
+ check("parseOfacCsvRow min: no Program → []",
698
+ Array.isArray(min.programs) && min.programs.length === 0);
699
+ check("parseOfacCsvRow min: no Country → null", min.country === null);
700
+ check("parseOfacCsvRow min: no Publish_Date → null", min.listedAt === null);
701
+ check("parseOfacCsvRow min: absent SDN_Type → default entity",
702
+ min.type === "entity");
703
+ check("parseOfacCsvRow min: no Remarks → null", min.remarks === null);
704
+
705
+ // Remarks present → the String(row.Remarks) consequent
706
+ var rem = sanctions.parseOfacCsvRow({
707
+ ent_num: 6, SDN_Name: "REM GUY", SDN_Type: "entity", Remarks: "watchlist note",
708
+ });
709
+ check("parseOfacCsvRow: Remarks preserved", rem.remarks === "watchlist note");
710
+ check("parseOfacCsvRow: SDN_Type entity", rem.type === "entity");
711
+
712
+ // Vessel / aircraft / unknown SDN_Type mappings
713
+ check("parseOfacCsvRow: SDN_Type vessel",
714
+ sanctions.parseOfacCsvRow({ ent_num: 7, SDN_Name: "BOAT", SDN_Type: "vessel" }).type === "vessel");
715
+ check("parseOfacCsvRow: SDN_Type aircraft",
716
+ sanctions.parseOfacCsvRow({ ent_num: 8, SDN_Name: "PLANE", SDN_Type: "aircraft" }).type === "aircraft");
717
+ check("parseOfacCsvRow: unknown SDN_Type → entity default",
718
+ sanctions.parseOfacCsvRow({ ent_num: 9, SDN_Name: "X", SDN_Type: "warlord" }).type === "entity");
719
+
720
+ // Non-object + name-without-ent_num guards
721
+ check("parseOfacCsvRow: non-object returns null",
722
+ sanctions.parseOfacCsvRow("not-an-object") === null);
723
+ check("parseOfacCsvRow: name without ent_num returns null",
724
+ sanctions.parseOfacCsvRow({ SDN_Name: "NoNum" }) === null);
725
+ }
726
+
727
+ // parseOfacAliasRow — the alt-names shim had zero tests.
728
+ function testParseOfacAliasRow() {
729
+ check("parseOfacAliasRow: null returns null",
730
+ sanctions.parseOfacAliasRow(null) === null);
731
+ check("parseOfacAliasRow: non-object returns null",
732
+ sanctions.parseOfacAliasRow("nope") === null);
733
+ check("parseOfacAliasRow: missing ent_num returns null",
734
+ sanctions.parseOfacAliasRow({ alt_name: "AKA" }) === null);
735
+ check("parseOfacAliasRow: missing alt_name returns null",
736
+ sanctions.parseOfacAliasRow({ ent_num: 5 }) === null);
737
+
738
+ var full = sanctions.parseOfacAliasRow({
739
+ ent_num: 5, alt_type: "fka", alt_name: " JOHNNY SMITH ", alt_remarks: "former",
740
+ });
741
+ check("parseOfacAliasRow: entId formed", full.entId === "OFAC-5");
742
+ check("parseOfacAliasRow: altType preserved", full.altType === "fka");
743
+ check("parseOfacAliasRow: altName trimmed", full.altName === "JOHNNY SMITH");
744
+ check("parseOfacAliasRow: remarks preserved", full.remarks === "former");
745
+
746
+ // Defaults: no alt_type → "aka"; no alt_remarks → null
747
+ var defd = sanctions.parseOfacAliasRow({ ent_num: 6, alt_name: "J SMITH" });
748
+ check("parseOfacAliasRow: default altType aka", defd.altType === "aka");
749
+ check("parseOfacAliasRow: default remarks null", defd.remarks === null);
750
+ }
751
+
752
+ function testMergeAliasesEdge() {
753
+ check("mergeAliases: non-array entries → []",
754
+ (function () {
755
+ var r = sanctions.mergeAliases("nope", []);
756
+ return Array.isArray(r) && r.length === 0;
757
+ })());
758
+ check("mergeAliases: non-array aliasRows → entries unchanged",
759
+ (function () {
760
+ var entries = [{ id: "A", aliases: [] }];
761
+ var r = sanctions.mergeAliases(entries, "nope");
762
+ return r === entries && r.length === 1;
763
+ })());
764
+ // Alias pointing at an unknown entId is a no-op (never crashes,
765
+ // never mis-attributes to a different entry)
766
+ check("mergeAliases: unknown entId is a no-op",
767
+ (function () {
768
+ var entries = [{ id: "A", aliases: [] }];
769
+ sanctions.mergeAliases(entries, [{ entId: "ZZZ", altName: "GHOST" }]);
770
+ return entries[0].aliases.length === 0;
771
+ })());
772
+ }
773
+
774
+ // parseEuCslEntry — uppercase field variants, single-object nameAlias,
775
+ // empty-name fallbacks, and every subjectType mapping.
776
+ function testParseEuCslEntryEdge() {
777
+ check("parseEuCslEntry: null returns null", sanctions.parseEuCslEntry(null) === null);
778
+ check("parseEuCslEntry: non-object returns null", sanctions.parseEuCslEntry("x") === null);
779
+
780
+ // Uppercase variants (NAMEALIAS / LOGICALID / SUBJECTTYPE / WHOLENAME),
781
+ // no regulation/country/designationDate → default alternates
782
+ var up = sanctions.parseEuCslEntry({
783
+ NAMEALIAS: [{ WHOLENAME: "UPPER BANK" }, { WHOLENAME: "UPPER ALIAS" }],
784
+ LOGICALID: 42,
785
+ SUBJECTTYPE: "person",
786
+ });
787
+ check("parseEuCslEntry upper: id via LOGICALID", up.id === "EU-CSL-42");
788
+ check("parseEuCslEntry upper: primary via WHOLENAME", up.primaryName === "UPPER BANK");
789
+ check("parseEuCslEntry upper: alias via WHOLENAME",
790
+ up.aliases.length === 1 && up.aliases[0] === "UPPER ALIAS");
791
+ check("parseEuCslEntry upper: SUBJECTTYPE person → individual", up.type === "individual");
792
+ check("parseEuCslEntry upper: no regulation → []", up.programs.length === 0);
793
+ check("parseEuCslEntry upper: no country → null", up.country === null);
794
+ check("parseEuCslEntry upper: no designationDate → null", up.listedAt === null);
795
+
796
+ // No nameAlias at all → null (empty name-list guard)
797
+ check("parseEuCslEntry: no names → null",
798
+ sanctions.parseEuCslEntry({ logicalId: 7 }) === null);
799
+
800
+ // Single (non-array) nameAlias object → wrapped; no id fields → "EU-CSL-"
801
+ var solo = sanctions.parseEuCslEntry({ nameAlias: { wholeName: "Solo Vessel" }, subjectType: "vessel" });
802
+ check("parseEuCslEntry solo: non-array nameAlias wrapped", solo.primaryName === "Solo Vessel");
803
+ check("parseEuCslEntry solo: no id fields → EU-CSL-", solo.id === "EU-CSL-");
804
+ check("parseEuCslEntry solo: subjectType vessel", solo.type === "vessel");
805
+
806
+ // Empty name objects → "" fallbacks; absent subjectType → default entity
807
+ var empties = sanctions.parseEuCslEntry({ nameAlias: [{}, {}], logicalId: 9 });
808
+ check("parseEuCslEntry empties: primary → ''", empties.primaryName === "");
809
+ check("parseEuCslEntry empties: blank aliases filtered out", empties.aliases.length === 0);
810
+ check("parseEuCslEntry empties: absent subjectType → entity default", empties.type === "entity");
811
+
812
+ // subjectType aircraft mapping
813
+ check("parseEuCslEntry: subjectType aircraft",
814
+ sanctions.parseEuCslEntry({ nameAlias: [{ wholeName: "Y" }], subjectType: "aircraft" }).type === "aircraft");
815
+ }
816
+
817
+ // parseUn1267Entry — lowercase/FIRST_NAME name fallbacks, empty-name
818
+ // null, ALIASES array branch, DATAID/empty id fallbacks, Entity type,
819
+ // missing LISTED_ON.
820
+ function testParseUn1267EntryEdge() {
821
+ check("parseUn1267Entry: null returns null", sanctions.parseUn1267Entry(null) === null);
822
+ check("parseUn1267Entry: non-object returns null", sanctions.parseUn1267Entry("x") === null);
823
+
824
+ var lower = sanctions.parseUn1267Entry({ name: "lower guy", REFERENCE_NUMBER: "R1" });
825
+ check("parseUn1267Entry: lowercase name fallback", lower.primaryName === "lower guy");
826
+
827
+ var first = sanctions.parseUn1267Entry({ FIRST_NAME: "First Only", REFERENCE_NUMBER: "R2" });
828
+ check("parseUn1267Entry: FIRST_NAME fallback", first.primaryName === "First Only");
829
+
830
+ check("parseUn1267Entry: no name fields → null",
831
+ sanctions.parseUn1267Entry({ REFERENCE_NUMBER: "R3" }) === null);
832
+
833
+ var arr = sanctions.parseUn1267Entry({ NAME: "Guy", ALIASES: ["A1", "A2"], REFERENCE_NUMBER: "R4" });
834
+ check("parseUn1267Entry: ALIASES array branch", arr.aliases.length === 2 && arr.aliases[0] === "A1");
835
+
836
+ var byData = sanctions.parseUn1267Entry({ NAME: "Guy2", DATAID: "D9" });
837
+ check("parseUn1267Entry: id via DATAID", byData.id === "UN-1267-D9");
838
+ check("parseUn1267Entry: no LISTED_ON → null", byData.listedAt === null);
839
+
840
+ var noId = sanctions.parseUn1267Entry({ NAME: "Guy3" });
841
+ check("parseUn1267Entry: no id fields → UN-1267-", noId.id === "UN-1267-");
842
+
843
+ var ent = sanctions.parseUn1267Entry({ NAME: "Some Corp", NAME_TYPE: "Entity", REFERENCE_NUMBER: "R5" });
844
+ check("parseUn1267Entry: NAME_TYPE Entity → entity", ent.type === "entity");
845
+ }
846
+
847
+ // _normalizeEntry — driven through create(): empty primaryName, non-array
848
+ // aliases/programs, falsy type, dateOfBirth as array vs scalar string.
849
+ function testNormalizeEntryEdge() {
850
+ var screener = sanctions.create({
851
+ entries: [
852
+ { id: "NORM-1", primaryName: "", aliases: "notarray", type: "", programs: "notarray", dateOfBirth: ["1990-01-01"] },
853
+ { id: "NORM-2", primaryName: "SOMEONE", dateOfBirth: "1985-07-04" },
854
+ ],
855
+ algorithm: "custom",
856
+ });
857
+ var n1 = screener.entryById("NORM-1");
858
+ check("normalizeEntry: empty primaryName preserved", n1.primaryName === "");
859
+ check("normalizeEntry: non-array aliases → []",
860
+ Array.isArray(n1.aliases) && n1.aliases.length === 0);
861
+ check("normalizeEntry: falsy type → entity default", n1.type === "entity");
862
+ check("normalizeEntry: non-array programs → []",
863
+ Array.isArray(n1.programs) && n1.programs.length === 0);
864
+ check("normalizeEntry: array dateOfBirth sliced",
865
+ Array.isArray(n1.dateOfBirth) && n1.dateOfBirth.length === 1 && n1.dateOfBirth[0] === "1990-01-01");
866
+ var n2 = screener.entryById("NORM-2");
867
+ check("normalizeEntry: scalar dateOfBirth wrapped in array",
868
+ Array.isArray(n2.dateOfBirth) && n2.dateOfBirth.length === 1 && n2.dateOfBirth[0] === "1985-07-04");
869
+ }
870
+
871
+ function testCreateDefaultAlgorithm() {
872
+ var screener = sanctions.create({ entries: [] });
873
+ check("create: omitted algorithm defaults to custom", screener.algorithm === "custom");
874
+ }
875
+
876
+ function testCreateFuzzyNonObject() {
877
+ check("create: fuzzy as array throws bad-fuzzy",
878
+ _threwCode(function () { sanctions.create({ entries: [], fuzzy: [] }); }, "sanctions/bad-fuzzy"));
879
+ check("create: fuzzy as string throws bad-fuzzy",
880
+ _threwCode(function () { sanctions.create({ entries: [], fuzzy: "nope" }); }, "sanctions/bad-fuzzy"));
881
+ }
882
+
883
+ function testCreateFuzzyDisabled() {
884
+ var screener = sanctions.create({
885
+ entries: _sampleEntries(),
886
+ algorithm: "ofac-sdn",
887
+ fuzzy: { enabled: false, strategy: "jaro-winkler" },
888
+ });
889
+ check("create fuzzy-disabled: reported strategy is exact", screener.strategy === "exact");
890
+
891
+ var exact = screener.screen({ name: "JOHN ALEXANDER SMITH" });
892
+ check("screen fuzzy-disabled: exact name still matches", exact.match === true);
893
+ check("screen fuzzy-disabled: result strategy is exact", exact.strategy === "exact");
894
+
895
+ // With fuzzy off, a typo must NOT match (exact-only comparison)
896
+ var typo = screener.screen({ name: "John Aleksander Smyth" });
897
+ check("screen fuzzy-disabled: typo does not match", typo.match === false);
898
+ }
899
+
900
+ function testScreenNonObjectInput() {
901
+ var screener = sanctions.create({ entries: _sampleEntries(), algorithm: "ofac-sdn" });
902
+ check("screen: null input throws bad-input",
903
+ _threwCode(function () { screener.screen(null); }, "sanctions/bad-input"));
904
+ check("screen: string input throws bad-input",
905
+ _threwCode(function () { screener.screen("John Smith"); }, "sanctions/bad-input"));
906
+ check("screen: number input throws bad-input",
907
+ _threwCode(function () { screener.screen(42); }, "sanctions/bad-input"));
908
+ }
909
+
910
+ function testScreenFuzzyReasonBand() {
911
+ // A transliteration variant scoring inside [threshold, 0.92) exercises
912
+ // the "fuzzy" reason band (below the substring/token and near-exact bands).
913
+ var screener = sanctions.create({
914
+ entries: [
915
+ { id: "FZ-1", primaryName: "MOHAMMED", aliases: [], type: "individual", programs: ["SDGT"], country: null, listedAt: null },
916
+ ],
917
+ algorithm: "ofac-sdn",
918
+ fuzzy: { strategy: "jaro-winkler", threshold: 0.80 },
919
+ });
920
+ var r = screener.screen({ name: "MUHAMMAD" });
921
+ check("screen fuzzy-band: transliteration matches", r.match === true);
922
+ check("screen fuzzy-band: score in [0.80, 0.92)",
923
+ r.hits[0].score >= 0.80 && r.hits[0].score < 0.92);
924
+ check("screen fuzzy-band: reason is 'fuzzy'", r.hits[0].reason === "fuzzy");
925
+ }
926
+
684
927
  // ---- Run all ----
685
928
 
686
929
  function _syncTests() {
@@ -701,9 +944,20 @@ function _syncTests() {
701
944
  testCreateValidation();
702
945
  testScreenInputValidation();
703
946
  testParseOfacCsvRow();
947
+ testParseOfacCsvRowEdge();
948
+ testParseOfacAliasRow();
704
949
  testMergeAliases();
950
+ testMergeAliasesEdge();
705
951
  testParseEuCslEntry();
952
+ testParseEuCslEntryEdge();
706
953
  testParseUn1267Entry();
954
+ testParseUn1267EntryEdge();
955
+ testNormalizeEntryEdge();
956
+ testCreateDefaultAlgorithm();
957
+ testCreateFuzzyNonObject();
958
+ testCreateFuzzyDisabled();
959
+ testScreenNonObjectInput();
960
+ testScreenFuzzyReasonBand();
707
961
  testEntryById();
708
962
  testScreenBulk();
709
963
  testScreenBulkValidation();