@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
@@ -1,11 +1,27 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  // Copyright (c) blamejs contributors
3
3
  "use strict";
4
+ /**
5
+ * b.mail.server.managesieve — create() opts validation plus command-handler
6
+ * and error-branch tests driven over a real localhost listener (RFC 5804):
7
+ * the wire-protocol dispatch (CAPABILITY / NOOP / STARTTLS / LOGOUT /
8
+ * AUTHENTICATE / HAVESPACE / PUTSCRIPT / LISTSCRIPTS / SETACTIVE / GETSCRIPT /
9
+ * DELETESCRIPT / RENAMESCRIPT) plus its wrong-state / malformed / not-found /
10
+ * backend-failure / rate-limit / idle-timeout branches. Every wire assertion
11
+ * drives the public API over a socket; the STARTTLS upgrade trusts the test
12
+ * CA via `ca:` (never rejectUnauthorized:false).
13
+ *
14
+ * Run standalone: node test/layer-0-primitives/mail-server-managesieve.test.js
15
+ */
4
16
 
5
17
  var helpers = require("../helpers");
6
- var check = helpers.check;
18
+ var b = helpers.b;
19
+ var check = helpers.check;
7
20
  var mailServerManageSieve = require("../../lib/mail-server-managesieve");
8
21
 
22
+ var nodeNet = require("node:net");
23
+ var nodeTls = require("node:tls");
24
+
9
25
  function _stubMailStore() {
10
26
  return {
11
27
  sieveScripts: {
@@ -111,7 +127,423 @@ function testHandleSurface() {
111
127
  check("handle.close is a function", typeof handle.close === "function");
112
128
  }
113
129
 
114
- function run() {
130
+ var NUL = String.fromCharCode(0);
131
+
132
+ // ---- socket read helpers -------------------------------------------------
133
+
134
+ // A ManageSieve response block ends with a line beginning OK / NO / BYE
135
+ // (RFC 5804 §1.2). Data lines (capability tuples, LISTSCRIPTS entries,
136
+ // GETSCRIPT literals) begin with `"` or `{`, so the terminal line is
137
+ // unambiguous for the fixtures this suite drives.
138
+ function _isTerminal(buf) {
139
+ return /(?:^|\r\n)(?:OK|NO|BYE)(?: [^\r\n]*)?\r\n$/.test(buf);
140
+ }
141
+ function _read(sock) {
142
+ return new Promise(function (resolve) {
143
+ var buf = "";
144
+ function onData(chunk) { buf += chunk.toString("utf8"); if (_isTerminal(buf)) done(); }
145
+ function onClose() { done(); }
146
+ function done() {
147
+ sock.removeListener("data", onData);
148
+ sock.removeListener("close", onClose);
149
+ sock.removeListener("error", onClose);
150
+ resolve(buf);
151
+ }
152
+ sock.on("data", onData);
153
+ sock.once("close", onClose);
154
+ sock.once("error", onClose);
155
+ });
156
+ }
157
+ // Attach the reader BEFORE writing so no response bytes are missed.
158
+ function _cmd(sock, line) {
159
+ var p = _read(sock);
160
+ sock.write(line + "\r\n");
161
+ return p;
162
+ }
163
+ function _connect(port) {
164
+ var sock = nodeNet.connect(port, "127.0.0.1");
165
+ sock.on("error", function () {});
166
+ return sock;
167
+ }
168
+ function _b64(s) { return Buffer.from(s, "utf8").toString("base64"); }
169
+
170
+ // ---- TLS + store fixtures ------------------------------------------------
171
+
172
+ async function _makeTestTlsContext() {
173
+ var ca = await b.mtlsEngine.generateCa({ name: "managesieve-test-ca" });
174
+ var leaf = await b.mtlsEngine.signClientCert({
175
+ cn: "managesieve.test", caCertPem: ca.caCertPem, caKeyPem: ca.caKeyPem,
176
+ usage: "server", sans: ["DNS:localhost", "IP:127.0.0.1"], validityDays: 1,
177
+ });
178
+ return { ctx: nodeTls.createSecureContext({ key: leaf.key, cert: leaf.cert }), caPem: ca.caCertPem };
179
+ }
180
+
181
+ // A SASL verify that decodes a base64 PLAIN blob (authzid NUL authcid NUL
182
+ // passwd) and accepts passwd === "good"; EXTERNAL always succeeds; a
183
+ // username of "throw" makes verify reject (exercises the catch path).
184
+ function _verify(mech, creds) {
185
+ if (mech === "EXTERNAL") return { ok: true, actor: { username: "ext", tenantId: "t-ext" } };
186
+ var cr = creds.clientResponse;
187
+ if (!cr) return { ok: false };
188
+ var parts = Buffer.from(cr, "base64").toString("utf8").split(NUL);
189
+ if (parts[1] === "throw") throw new Error("verify blew up");
190
+ return parts[2] === "good"
191
+ ? { ok: true, actor: { username: parts[1], tenantId: "t1" } }
192
+ : { ok: false };
193
+ }
194
+
195
+ function _richStore() {
196
+ var listCall = 0;
197
+ return { sieveScripts: {
198
+ put: async function () { return; },
199
+ list: async function () {
200
+ listCall += 1;
201
+ // First call returns an array (with an ACTIVE entry + a name that
202
+ // needs quote-escaping); second call returns a non-array to exercise
203
+ // the `Array.isArray(...) ? ... : []` defensive branch.
204
+ return listCall === 1
205
+ ? [{ name: 'a"b', active: true }, { name: "two", active: false }]
206
+ : null;
207
+ },
208
+ get: async function (actor, name) {
209
+ if (name === "exists") return { body: "keep;\r\n" }; // already CRLF-terminated
210
+ if (name === "nocrlf") return { body: "keep;" }; // server must append CRLF
211
+ return null; // NONEXISTENT
212
+ },
213
+ setActive: async function () { return; },
214
+ delete: async function () { return; },
215
+ rename: async function () { return; },
216
+ haveSpace: async function (actor, name) {
217
+ if (name === "full") return { ok: false, reason: "over quota" };
218
+ if (name === "noreason") return { ok: false }; // reason-less → "no space" fallback
219
+ return { ok: true };
220
+ },
221
+ } };
222
+ }
223
+
224
+ function _rejectStore() {
225
+ function boom() { return Promise.reject(new Error("backend down")); }
226
+ return { sieveScripts: {
227
+ put: boom, list: boom, get: boom, setActive: boom, delete: boom, rename: boom, haveSpace: boom,
228
+ } };
229
+ }
230
+
231
+ var VALID_SIEVE = 'require ["fileinto"];\r\nkeep;\r\n';
232
+ var INVALID_SIEVE = 'require ["nope-cap"];\r\nkeep;\r\n'; // unknown capability → safeSieve rejects
233
+
234
+ // ==========================================================================
235
+ // 0. create() guard rails (drive the throw branches directly)
236
+ // ==========================================================================
237
+ function testCreateValidation() {
238
+ function caught(fn) { try { fn(); return null; } catch (e) { return e; } }
239
+ var e1 = caught(function () { b.mail.server.managesieve.create({ mailStore: _richStore() }); });
240
+ check("create refuses missing tlsContext", e1 && e1.code === "mail-server-managesieve/no-tls-context");
241
+ var e2 = caught(function () { b.mail.server.managesieve.create({ allowPlaintext: true }); });
242
+ check("create refuses missing mailStore", e2 && e2.code === "mail-server-managesieve/no-mail-store");
243
+ }
244
+
245
+ // ==========================================================================
246
+ // 1. plaintext, no auth: dispatch + wrong-state + malformed + not-found
247
+ // ==========================================================================
248
+ async function testPlaintextNoAuth() {
249
+ var srv = b.mail.server.managesieve.create({
250
+ allowPlaintext: true, profile: "permissive", mailStore: _richStore(),
251
+ // no auth config → SASL "" advertised, AUTHENTICATE refused as not-configured
252
+ });
253
+ var info = await srv.listen({ port: 0, address: "127.0.0.1" });
254
+ var sock = _connect(info.port);
255
+ try {
256
+ var greeting = await _read(sock);
257
+ check("greeting emits capability banner", /"IMPLEMENTATION" "blamejs"/.test(greeting));
258
+ check("greeting ends with OK ready", /OK "blamejs ManageSieve ready"/.test(greeting));
259
+ check("no-auth advertises empty SASL", /"SASL" ""/.test(greeting));
260
+ check("plaintext listener omits STARTTLS", !/"STARTTLS"/.test(greeting));
261
+
262
+ check("CAPABILITY re-emits banner + OK", /OK "Capability completed"/.test(await _cmd(sock, "CAPABILITY")));
263
+ check("NOOP → OK", /OK "NOOP completed"/.test(await _cmd(sock, "NOOP")));
264
+ check("NOOP with tag echoes TAG", /OK \(TAG "hi"\) "NOOP completed"/.test(await _cmd(sock, 'NOOP "hi"')));
265
+ check("STARTTLS unavailable w/o context", /NO "STARTTLS unavailable/.test(await _cmd(sock, "STARTTLS")));
266
+ check("AUTHENTICATE not configured", /NO "AUTHENTICATE not configured/.test(await _cmd(sock, 'AUTHENTICATE "EXTERNAL"')));
267
+ check("HAVESPACE before auth refused", /NO "AUTHENTICATE first"/.test(await _cmd(sock, 'HAVESPACE "s" 100')));
268
+ check("PUTSCRIPT before auth refused", /NO "AUTHENTICATE first"/.test(await _cmd(sock, 'PUTSCRIPT "s" {5+}')));
269
+ check("unknown verb refused (guard)", /NO "[^"]*unknown verb/.test(await _cmd(sock, "FLOOP")));
270
+ check("empty command line refused", /NO "[^"]*empty command line/.test(await _cmd(sock, "")));
271
+ check("LOGOUT → OK + close", /OK "Logout completed"/.test(await _cmd(sock, "LOGOUT")));
272
+ } finally { sock.destroy(); await srv.close(); }
273
+ }
274
+
275
+ // ==========================================================================
276
+ // 2. STARTTLS upgrade + AUTHENTICATE state machine over TLS (strict)
277
+ // ==========================================================================
278
+ async function testStartTlsAndAuth() {
279
+ var tls = await _makeTestTlsContext();
280
+ var srv = b.mail.server.managesieve.create({
281
+ tlsContext: tls.ctx, profile: "strict", mailStore: _richStore(),
282
+ auth: { mechanisms: ["PLAIN", "EXTERNAL"], verify: async function (m, c) { return _verify(m, c); } },
283
+ });
284
+ var info = await srv.listen({ port: 0, address: "127.0.0.1" });
285
+ var sock = _connect(info.port);
286
+ var tsock = null;
287
+ try {
288
+ var greeting = await _read(sock);
289
+ check("strict+TLS advertises STARTTLS", /"STARTTLS"/.test(greeting));
290
+ check("advertises configured SASL mechs", /"SASL" "PLAIN EXTERNAL"/.test(greeting));
291
+
292
+ check("PLAIN pre-TLS refused (cleartext)", /NO "[^"]*cleartext/.test(await _cmd(sock, 'AUTHENTICATE "PLAIN"')));
293
+ check("STARTTLS → begin negotiation", /OK "Begin TLS negotiation now"/.test(await _cmd(sock, "STARTTLS")));
294
+
295
+ tsock = nodeTls.connect({ socket: sock, ca: tls.caPem, servername: "localhost" });
296
+ tsock.on("error", function () {});
297
+ await new Promise(function (r, j) { tsock.once("secureConnect", r); tsock.once("error", j); });
298
+
299
+ check("post-TLS re-emits caps + success", /OK "TLS negotiation successful"/.test(await _read(tsock)));
300
+ check("STARTTLS again refused (already)", /NO "STARTTLS already negotiated"/.test(await _cmd(tsock, "STARTTLS")));
301
+ check("mechanism not advertised refused", /NO "Mechanism 'SCRAM-SHA-256' not advertised"/.test(await _cmd(tsock, 'AUTHENTICATE "SCRAM-SHA-256"')));
302
+ check("PLAIN w/o initial-response fails", /NO "Authentication failed"/.test(await _cmd(tsock, 'AUTHENTICATE "PLAIN"')));
303
+
304
+ // Synchronizing literal IR (bad creds) — server sends a bare OK
305
+ // continuation, then we stream the IR in two chunks to exercise the
306
+ // partial-literal drain branch.
307
+ var badIr = Buffer.from(_b64(NUL + "alice" + NUL + "bad"), "utf8");
308
+ var pCont = _read(tsock);
309
+ tsock.write('AUTHENTICATE "PLAIN" {' + badIr.length + '}\r\n');
310
+ check("sync literal → OK continuation", /^OK\r\n$/.test(await pCont));
311
+ var pAuth = _read(tsock);
312
+ tsock.write(badIr.subarray(0, 3));
313
+ await helpers.passiveObserve(40, "managesieve: auth-IR partial drain");
314
+ tsock.write(badIr.subarray(3));
315
+ check("bad creds → Authentication failed", /NO "Authentication failed"/.test(await pAuth));
316
+
317
+ // Non-synchronizing literal IR (LITERAL+, good creds) → success.
318
+ var goodIr = Buffer.from(_b64(NUL + "alice" + NUL + "good"), "utf8");
319
+ var pOk = _read(tsock);
320
+ tsock.write('AUTHENTICATE "PLAIN" {' + goodIr.length + '+}\r\n');
321
+ tsock.write(goodIr);
322
+ check("LITERAL+ good creds authenticates", /OK "Authenticated"/.test(await pOk));
323
+
324
+ check("AUTHENTICATE after auth refused", /NO "[^"]*NOT-AUTHENTICATED"/.test(await _cmd(tsock, 'AUTHENTICATE "PLAIN"')));
325
+ check("HAVESPACE over TLS → Have space", /OK "Have space"/.test(await _cmd(tsock, 'HAVESPACE "s" 100')));
326
+ check("post-auth CAPABILITY omits STARTTLS", !/"STARTTLS"/.test(await _cmd(tsock, "CAPABILITY")));
327
+ check("LOGOUT over TLS → OK", /OK "Logout completed"/.test(await _cmd(tsock, "LOGOUT")));
328
+ } finally { if (tsock) tsock.destroy(); sock.destroy(); await srv.close(); }
329
+ }
330
+
331
+ // ==========================================================================
332
+ // 2b. STARTTLS handshake failure → starttls_handshake_failed + close
333
+ // ==========================================================================
334
+ async function testStartTlsHandshakeFailure() {
335
+ var tls = await _makeTestTlsContext();
336
+ var srv = b.mail.server.managesieve.create({
337
+ tlsContext: tls.ctx, profile: "strict", mailStore: _richStore(),
338
+ auth: { mechanisms: ["PLAIN"], verify: async function (m, c) { return _verify(m, c); } },
339
+ });
340
+ var info = await srv.listen({ port: 0, address: "127.0.0.1" });
341
+ var sock = _connect(info.port);
342
+ try {
343
+ await _read(sock); // greeting
344
+ check("STARTTLS → begin negotiation", /OK "Begin TLS negotiation now"/.test(await _cmd(sock, "STARTTLS")));
345
+ var closed = false;
346
+ sock.once("close", function () { closed = true; });
347
+ // Feed bytes that are not a valid TLS ClientHello → the server's
348
+ // TLSSocket handshake errors → onError → close.
349
+ sock.write(Buffer.from([0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07]));
350
+ await helpers.waitUntil(function () { return closed; },
351
+ { timeoutMs: 5000, label: "managesieve: STARTTLS handshake-failure closes connection" });
352
+ check("handshake failure tears down socket", closed === true);
353
+ } finally { sock.destroy(); await srv.close(); }
354
+ }
355
+
356
+ // ==========================================================================
357
+ // 3. authenticated command handlers (happy + variants) over plaintext
358
+ // ==========================================================================
359
+ async function testAuthenticatedHandlers() {
360
+ var srv = b.mail.server.managesieve.create({
361
+ allowPlaintext: true, profile: "permissive", mailStore: _richStore(),
362
+ auth: { mechanisms: ["EXTERNAL"], verify: async function (m, c) { return _verify(m, c); } },
363
+ });
364
+ var info = await srv.listen({ port: 0, address: "127.0.0.1" });
365
+ var sock = _connect(info.port);
366
+ try {
367
+ await _read(sock); // greeting
368
+ check("EXTERNAL (no IR) authenticates", /OK "Authenticated"/.test(await _cmd(sock, 'AUTHENTICATE "EXTERNAL"')));
369
+
370
+ check("HAVESPACE ok:true → Have space", /OK "Have space"/.test(await _cmd(sock, 'HAVESPACE "s" 100')));
371
+ check("HAVESPACE ok:false → QUOTA/MAXSIZE", /NO "\(QUOTA\/MAXSIZE\) over quota"/.test(await _cmd(sock, 'HAVESPACE "full" 100')));
372
+ check("HAVESPACE reason-less → no space", /NO "\(QUOTA\/MAXSIZE\) no space"/.test(await _cmd(sock, 'HAVESPACE "noreason" 100')));
373
+
374
+ // PUTSCRIPT via synchronizing literal, body streamed in two chunks
375
+ // (partial-literal drain branch), valid script → accepted.
376
+ var body = Buffer.from(VALID_SIEVE, "utf8");
377
+ var pCont = _read(sock);
378
+ sock.write('PUTSCRIPT "v" {' + body.length + '}\r\n');
379
+ check("PUTSCRIPT sync → OK continuation", /^OK\r\n$/.test(await pCont));
380
+ var pPut = _read(sock);
381
+ sock.write(body.subarray(0, 6));
382
+ await helpers.passiveObserve(40, "managesieve: putscript partial drain");
383
+ sock.write(body.subarray(6));
384
+ check("PUTSCRIPT valid script accepted", /OK "PUTSCRIPT completed"/.test(await pPut));
385
+
386
+ // PUTSCRIPT via LITERAL+ with an invalid script → refused.
387
+ var bad = Buffer.from(INVALID_SIEVE, "utf8");
388
+ var pBad = _read(sock);
389
+ sock.write('PUTSCRIPT "bad" {' + bad.length + '+}\r\n');
390
+ sock.write(bad);
391
+ check("PUTSCRIPT invalid script refused", /NO "Script validation failed/.test(await pBad));
392
+
393
+ var listReply = await _cmd(sock, "LISTSCRIPTS");
394
+ check("LISTSCRIPTS lists + ACTIVE flag", /"a\\"b" ACTIVE\r\n"two"\r\nOK "LISTSCRIPTS completed"/.test(listReply));
395
+ check("LISTSCRIPTS non-array → OK count-0", /OK "LISTSCRIPTS completed"/.test(await _cmd(sock, "LISTSCRIPTS")));
396
+
397
+ check("SETACTIVE name → OK", /OK "SETACTIVE completed"/.test(await _cmd(sock, 'SETACTIVE "s"')));
398
+ check("SETACTIVE empty (deactivate) → OK", /OK "SETACTIVE completed"/.test(await _cmd(sock, 'SETACTIVE ""')));
399
+
400
+ var g1 = await _cmd(sock, 'GETSCRIPT "exists"');
401
+ check("GETSCRIPT returns literal + body", /\{7\}\r\nkeep;\r\nOK "GETSCRIPT completed"/.test(g1));
402
+ var g2 = await _cmd(sock, 'GETSCRIPT "nocrlf"');
403
+ check("GETSCRIPT appends CRLF when absent", /\{5\}\r\nkeep;\r\nOK "GETSCRIPT completed"/.test(g2));
404
+ check("GETSCRIPT missing → NONEXISTENT", /NO "\(NONEXISTENT\) Script not found"/.test(await _cmd(sock, 'GETSCRIPT "missing"')));
405
+
406
+ check("DELETESCRIPT → OK", /OK "DELETESCRIPT completed"/.test(await _cmd(sock, 'DELETESCRIPT "s"')));
407
+ check("RENAMESCRIPT → OK", /OK "RENAMESCRIPT completed"/.test(await _cmd(sock, 'RENAMESCRIPT "a" "bb"')));
408
+ check("NOOP authenticated → OK", /OK "NOOP completed"/.test(await _cmd(sock, "NOOP")));
409
+ check("STARTTLS post-auth → pre-AUTH only", /NO "STARTTLS only valid pre-AUTH/.test(await _cmd(sock, "STARTTLS")));
410
+ check("LOGOUT → OK", /OK "Logout completed"/.test(await _cmd(sock, "LOGOUT")));
411
+ } finally { sock.destroy(); await srv.close(); }
412
+ }
413
+
414
+ // ==========================================================================
415
+ // 4. backend-failure branches — every handler's .catch → NO
416
+ // ==========================================================================
417
+ async function testBackendFailures() {
418
+ var srv = b.mail.server.managesieve.create({
419
+ allowPlaintext: true, profile: "permissive", mailStore: _rejectStore(),
420
+ auth: { mechanisms: ["EXTERNAL"], verify: async function (m, c) { return _verify(m, c); } },
421
+ });
422
+ var info = await srv.listen({ port: 0, address: "127.0.0.1" });
423
+ var sock = _connect(info.port);
424
+ try {
425
+ await _read(sock);
426
+ await _cmd(sock, 'AUTHENTICATE "EXTERNAL"');
427
+ check("HAVESPACE backend reject → NO", /NO "backend down"/.test(await _cmd(sock, 'HAVESPACE "s" 100')));
428
+
429
+ var body = Buffer.from(VALID_SIEVE, "utf8");
430
+ var pPut = _read(sock);
431
+ sock.write('PUTSCRIPT "v" {' + body.length + '+}\r\n');
432
+ sock.write(body);
433
+ check("PUTSCRIPT put reject → NO", /NO "backend down"/.test(await pPut));
434
+
435
+ check("LISTSCRIPTS backend reject → NO", /NO "backend down"/.test(await _cmd(sock, "LISTSCRIPTS")));
436
+ check("SETACTIVE backend reject → NO", /NO "backend down"/.test(await _cmd(sock, 'SETACTIVE "s"')));
437
+ check("GETSCRIPT backend reject → NO", /NO "backend down"/.test(await _cmd(sock, 'GETSCRIPT "s"')));
438
+ check("DELETESCRIPT backend reject → NO", /NO "backend down"/.test(await _cmd(sock, 'DELETESCRIPT "s"')));
439
+ check("RENAMESCRIPT backend reject → NO", /NO "backend down"/.test(await _cmd(sock, 'RENAMESCRIPT "a" "bb"')));
440
+ } finally { sock.destroy(); await srv.close(); }
441
+ }
442
+
443
+ // ==========================================================================
444
+ // 5. AUTH failure branch + verify-throw catch + AUTH-failure rate limit
445
+ // ==========================================================================
446
+ async function testAuthFailureRateLimit() {
447
+ var srv = b.mail.server.managesieve.create({
448
+ allowPlaintext: true, profile: "permissive", mailStore: _richStore(),
449
+ rateLimit: { authFailuresPerIpPer15Min: 2 },
450
+ auth: { mechanisms: ["PLAIN"], verify: async function (m, c) { return _verify(m, c); } },
451
+ });
452
+ var info = await srv.listen({ port: 0, address: "127.0.0.1" });
453
+ var sock = _connect(info.port);
454
+ try {
455
+ await _read(sock);
456
+ async function authPlain(blob) {
457
+ var ir = Buffer.from(_b64(blob), "utf8");
458
+ var p = _read(sock);
459
+ sock.write('AUTHENTICATE "PLAIN" {' + ir.length + '+}\r\n');
460
+ sock.write(ir);
461
+ return p;
462
+ }
463
+ check("bad creds → verify-fail branch", /NO "Authentication failed"/.test(await authPlain(NUL + "u" + NUL + "bad")));
464
+ check("verify throw → catch → failed", /NO "Authentication failed"/.test(await authPlain(NUL + "throw" + NUL + "x")));
465
+ check("AUTH-failure budget exhausted → NO", /NO "Too many AUTH failures from your IP"/.test(await authPlain(NUL + "u" + NUL + "bad")));
466
+ } finally { sock.destroy(); await srv.close(); }
467
+ }
468
+
469
+ // ==========================================================================
470
+ // 6. per-IP concurrent-connection rate limit (admitConnection refusal)
471
+ // ==========================================================================
472
+ async function testConnectionRateLimit() {
473
+ var srv = b.mail.server.managesieve.create({
474
+ allowPlaintext: true, profile: "permissive", mailStore: _richStore(),
475
+ rateLimit: { maxConcurrentConnectionsPerIp: 1 },
476
+ });
477
+ var info = await srv.listen({ port: 0, address: "127.0.0.1" });
478
+ var first = _connect(info.port);
479
+ var second = null;
480
+ try {
481
+ await _read(first); // holds the single concurrent slot open
482
+ second = _connect(info.port);
483
+ check("2nd concurrent connection refused", /NO "Too many connections from your IP"/.test(await _read(second)));
484
+ } finally { first.destroy(); if (second) second.destroy(); await srv.close(); }
485
+ }
486
+
487
+ // ==========================================================================
488
+ // 7. line-too-long (no CRLF, exceeds cap) → NO + close
489
+ // ==========================================================================
490
+ async function testLineTooLong() {
491
+ var srv = b.mail.server.managesieve.create({
492
+ allowPlaintext: true, profile: "permissive", mailStore: _richStore(),
493
+ maxLineBytes: b.constants.BYTES.bytes(64),
494
+ });
495
+ var info = await srv.listen({ port: 0, address: "127.0.0.1" });
496
+ var sock = _connect(info.port);
497
+ try {
498
+ await _read(sock);
499
+ var p = _read(sock);
500
+ sock.write(new Array(200).join("A")); // 199 bytes, no CRLF → exceeds 64-byte cap
501
+ check("overlong line (no CRLF) → NO", /NO "Line too long/.test(await p));
502
+ } finally { sock.destroy(); await srv.close(); }
503
+ }
504
+
505
+ // ==========================================================================
506
+ // 8. idle timeout → BYE + close
507
+ // ==========================================================================
508
+ async function testIdleTimeout() {
509
+ var srv = b.mail.server.managesieve.create({
510
+ // profile omitted → exercises the `opts.profile || "strict"` default
511
+ allowPlaintext: true, mailStore: _richStore(),
512
+ idleTimeoutMs: b.constants.TIME.seconds(0.3),
513
+ });
514
+ var info = await srv.listen({ port: 0, address: "127.0.0.1" });
515
+ var sock = _connect(info.port);
516
+ try {
517
+ await _read(sock); // greeting
518
+ check("idle timeout emits BYE", /BYE "Idle timeout"/.test(await _read(sock)));
519
+ } finally { sock.destroy(); await srv.close(); }
520
+ }
521
+
522
+ // ==========================================================================
523
+ // 9. handler faults — sync throw (handler_threw) + async reject
524
+ // (handler_rejected) via operator overrides
525
+ // ==========================================================================
526
+ async function testHandlerFaults() {
527
+ var budget = { maxHandlerBytes: b.constants.BYTES.kib(8), maxHandlerMs: b.constants.TIME.seconds(5) };
528
+ var srv = b.mail.server.managesieve.create({
529
+ allowPlaintext: true, profile: "permissive", mailStore: _richStore(),
530
+ overrides: {
531
+ NOOP: { fn: function () { throw new Error("sync boom"); },
532
+ maxHandlerBytes: budget.maxHandlerBytes, maxHandlerMs: budget.maxHandlerMs },
533
+ CAPABILITY: { fn: function () { return Promise.reject(new Error("async boom")); },
534
+ maxHandlerBytes: budget.maxHandlerBytes, maxHandlerMs: budget.maxHandlerMs },
535
+ },
536
+ });
537
+ var info = await srv.listen({ port: 0, address: "127.0.0.1" });
538
+ var sock = _connect(info.port);
539
+ try {
540
+ await _read(sock);
541
+ check("handler sync-throw → Internal error", /NO "Internal error"/.test(await _cmd(sock, "NOOP")));
542
+ check("handler async-reject → Internal error",/NO "Internal error"/.test(await _cmd(sock, "CAPABILITY")));
543
+ } finally { sock.destroy(); await srv.close(); }
544
+ }
545
+
546
+ async function run() {
115
547
  testSurface();
116
548
  testRequiresTlsContext();
117
549
  testAllowPlaintextOpt();
@@ -120,13 +552,24 @@ function run() {
120
552
  testBadBoundsRefused();
121
553
  testRefusesNonObjectOpts();
122
554
  testHandleSurface();
555
+ testCreateValidation();
556
+ await testPlaintextNoAuth();
557
+ await testStartTlsAndAuth();
558
+ await testStartTlsHandshakeFailure();
559
+ await testAuthenticatedHandlers();
560
+ await testBackendFailures();
561
+ await testAuthFailureRateLimit();
562
+ await testConnectionRateLimit();
563
+ await testLineTooLong();
564
+ await testIdleTimeout();
565
+ await testHandlerFaults();
123
566
  }
124
567
 
125
568
  module.exports = { run: run };
126
569
 
127
570
  if (require.main === module) {
128
- try { run(); console.log("[mail-server-managesieve] OK"); }
129
- catch (e) { process.stderr.write("FAIL: " + (e && e.stack || e) + "\n"); process.exit(1); }
571
+ run().then(
572
+ function () { console.log("[mail-server-managesieve] OK — " + helpers.getChecks() + " checks"); },
573
+ function (e) { process.stderr.write("FAIL: " + (e && e.stack || e) + "\n"); process.exit(1); }
574
+ );
130
575
  }
131
-
132
- void helpers;