@blamejs/blamejs-shop 0.5.11 → 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 (524) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/SECURITY.md +6 -1
  3. package/lib/admin.js +56 -0
  4. package/lib/asset-manifest.json +1 -1
  5. package/lib/operator-sessions.js +68 -5
  6. package/lib/vendor/MANIFEST.json +632 -416
  7. package/lib/vendor/blamejs/.clusterfuzzlite/Dockerfile +21 -10
  8. package/lib/vendor/blamejs/.clusterfuzzlite/build.sh +30 -9
  9. package/lib/vendor/blamejs/.github/dependabot.yml +8 -0
  10. package/lib/vendor/blamejs/.github/workflows/actions-lint.yml +3 -3
  11. package/lib/vendor/blamejs/.github/workflows/cflite_batch.yml +7 -2
  12. package/lib/vendor/blamejs/.github/workflows/cflite_pr.yml +7 -2
  13. package/lib/vendor/blamejs/.github/workflows/ci.yml +21 -21
  14. package/lib/vendor/blamejs/.github/workflows/codeql.yml +3 -3
  15. package/lib/vendor/blamejs/.github/workflows/npm-publish.yml +4 -4
  16. package/lib/vendor/blamejs/.github/workflows/release-container.yml +7 -7
  17. package/lib/vendor/blamejs/.github/workflows/scorecard.yml +3 -3
  18. package/lib/vendor/blamejs/.github/workflows/sha-to-tag-verify.yml +1 -1
  19. package/lib/vendor/blamejs/.gitignore +2 -0
  20. package/lib/vendor/blamejs/CHANGELOG.md +122 -0
  21. package/lib/vendor/blamejs/NOTICE +26 -1
  22. package/lib/vendor/blamejs/SECURITY.md +1 -1
  23. package/lib/vendor/blamejs/api-snapshot.json +207 -5
  24. package/lib/vendor/blamejs/docker/keycloak/realm-blamejs-test.json +29 -0
  25. package/lib/vendor/blamejs/examples/wiki/DEPLOY.md +1 -0
  26. package/lib/vendor/blamejs/examples/wiki/lib/build-app.js +31 -0
  27. package/lib/vendor/blamejs/examples/wiki/lib/source-comment-block-validator.js +109 -0
  28. package/lib/vendor/blamejs/examples/wiki/nginx.conf +106 -0
  29. package/lib/vendor/blamejs/examples/wiki/package-lock.json +1 -1
  30. package/lib/vendor/blamejs/examples/wiki/test/e2e.js +92 -0
  31. package/lib/vendor/blamejs/fuzz/asn1-der.fuzz.js +28 -0
  32. package/lib/vendor/blamejs/fuzz/cms-codec.fuzz.js +17 -0
  33. package/lib/vendor/blamejs/fuzz/link-header.fuzz.js +18 -0
  34. package/lib/vendor/blamejs/index.js +6 -0
  35. package/lib/vendor/blamejs/lib/a2a.js +4 -4
  36. package/lib/vendor/blamejs/lib/agent-idempotency.js +18 -2
  37. package/lib/vendor/blamejs/lib/agent-saga.js +36 -8
  38. package/lib/vendor/blamejs/lib/agent-snapshot.js +63 -6
  39. package/lib/vendor/blamejs/lib/app-shutdown.js +23 -20
  40. package/lib/vendor/blamejs/lib/archive-read.js +8 -0
  41. package/lib/vendor/blamejs/lib/archive-tar.js +12 -2
  42. package/lib/vendor/blamejs/lib/arg-parser.js +49 -5
  43. package/lib/vendor/blamejs/lib/asn1-der.js +12 -0
  44. package/lib/vendor/blamejs/lib/audit-sign.js +47 -1
  45. package/lib/vendor/blamejs/lib/audit.js +71 -8
  46. package/lib/vendor/blamejs/lib/auth/ciba.js +14 -2
  47. package/lib/vendor/blamejs/lib/auth/fido-mds3.js +58 -47
  48. package/lib/vendor/blamejs/lib/auth/jwt.js +34 -0
  49. package/lib/vendor/blamejs/lib/auth/oauth.js +90 -13
  50. package/lib/vendor/blamejs/lib/auth/oid4vci.js +20 -17
  51. package/lib/vendor/blamejs/lib/auth/openid-federation.js +214 -23
  52. package/lib/vendor/blamejs/lib/auth/saml.js +38 -20
  53. package/lib/vendor/blamejs/lib/auth/sd-jwt-vc.js +10 -4
  54. package/lib/vendor/blamejs/lib/backup/bundle.js +13 -3
  55. package/lib/vendor/blamejs/lib/backup/index.js +16 -5
  56. package/lib/vendor/blamejs/lib/backup/manifest.js +18 -5
  57. package/lib/vendor/blamejs/lib/base32.js +21 -0
  58. package/lib/vendor/blamejs/lib/break-glass.js +19 -10
  59. package/lib/vendor/blamejs/lib/bundler.js +5 -1
  60. package/lib/vendor/blamejs/lib/cache-status.js +3 -7
  61. package/lib/vendor/blamejs/lib/calendar.js +21 -1
  62. package/lib/vendor/blamejs/lib/cbor.js +12 -1
  63. package/lib/vendor/blamejs/lib/cert.js +29 -11
  64. package/lib/vendor/blamejs/lib/cli.js +94 -24
  65. package/lib/vendor/blamejs/lib/cloud-events.js +2 -2
  66. package/lib/vendor/blamejs/lib/cluster-provider-db.js +13 -3
  67. package/lib/vendor/blamejs/lib/codepoint-class.js +85 -0
  68. package/lib/vendor/blamejs/lib/compliance-ai-act-prohibited.js +8 -4
  69. package/lib/vendor/blamejs/lib/compliance-ai-act-transparency.js +19 -4
  70. package/lib/vendor/blamejs/lib/compliance-ai-act.js +6 -8
  71. package/lib/vendor/blamejs/lib/content-credentials.js +1 -1
  72. package/lib/vendor/blamejs/lib/content-digest.js +2 -1
  73. package/lib/vendor/blamejs/lib/cookies.js +13 -3
  74. package/lib/vendor/blamejs/lib/cose.js +31 -16
  75. package/lib/vendor/blamejs/lib/crypto-field.js +32 -0
  76. package/lib/vendor/blamejs/lib/crypto-oprf.js +11 -2
  77. package/lib/vendor/blamejs/lib/crypto-xwing.js +22 -4
  78. package/lib/vendor/blamejs/lib/crypto.js +314 -19
  79. package/lib/vendor/blamejs/lib/csp.js +11 -3
  80. package/lib/vendor/blamejs/lib/daemon.js +270 -24
  81. package/lib/vendor/blamejs/lib/dark-patterns.js +5 -2
  82. package/lib/vendor/blamejs/lib/db-declare-view.js +2 -2
  83. package/lib/vendor/blamejs/lib/db-query.js +34 -7
  84. package/lib/vendor/blamejs/lib/db.js +18 -6
  85. package/lib/vendor/blamejs/lib/dbsc.js +17 -0
  86. package/lib/vendor/blamejs/lib/dev.js +21 -2
  87. package/lib/vendor/blamejs/lib/dsr.js +157 -102
  88. package/lib/vendor/blamejs/lib/external-db.js +41 -2
  89. package/lib/vendor/blamejs/lib/file-upload.js +25 -7
  90. package/lib/vendor/blamejs/lib/flag-providers.js +27 -15
  91. package/lib/vendor/blamejs/lib/forms.js +113 -27
  92. package/lib/vendor/blamejs/lib/gate-contract.js +23 -10
  93. package/lib/vendor/blamejs/lib/gdpr-ropa.js +8 -1
  94. package/lib/vendor/blamejs/lib/guard-agent-registry.js +1 -1
  95. package/lib/vendor/blamejs/lib/guard-archive.js +2 -2
  96. package/lib/vendor/blamejs/lib/guard-cidr.js +27 -1
  97. package/lib/vendor/blamejs/lib/guard-graphql.js +30 -11
  98. package/lib/vendor/blamejs/lib/guard-html.js +26 -53
  99. package/lib/vendor/blamejs/lib/guard-image.js +24 -5
  100. package/lib/vendor/blamejs/lib/guard-imap-command.js +10 -2
  101. package/lib/vendor/blamejs/lib/guard-jmap.js +19 -3
  102. package/lib/vendor/blamejs/lib/guard-jwt.js +18 -2
  103. package/lib/vendor/blamejs/lib/guard-list-unsubscribe.js +2 -2
  104. package/lib/vendor/blamejs/lib/guard-managesieve-command.js +10 -2
  105. package/lib/vendor/blamejs/lib/guard-markdown.js +11 -24
  106. package/lib/vendor/blamejs/lib/guard-pdf.js +18 -2
  107. package/lib/vendor/blamejs/lib/guard-pop3-command.js +10 -2
  108. package/lib/vendor/blamejs/lib/guard-regex.js +8 -5
  109. package/lib/vendor/blamejs/lib/guard-svg.js +31 -32
  110. package/lib/vendor/blamejs/lib/guard-time.js +1 -1
  111. package/lib/vendor/blamejs/lib/guard-uuid.js +2 -2
  112. package/lib/vendor/blamejs/lib/html-balance.js +3 -3
  113. package/lib/vendor/blamejs/lib/http-client-cache.js +82 -4
  114. package/lib/vendor/blamejs/lib/http-client-cookie-jar.js +16 -1
  115. package/lib/vendor/blamejs/lib/http-client.js +39 -7
  116. package/lib/vendor/blamejs/lib/http-message-signature.js +35 -1
  117. package/lib/vendor/blamejs/lib/i18n-messageformat.js +31 -6
  118. package/lib/vendor/blamejs/lib/i18n.js +35 -21
  119. package/lib/vendor/blamejs/lib/incident-report.js +8 -1
  120. package/lib/vendor/blamejs/lib/ip-utils.js +11 -1
  121. package/lib/vendor/blamejs/lib/json-path.js +23 -1
  122. package/lib/vendor/blamejs/lib/jwk.js +20 -3
  123. package/lib/vendor/blamejs/lib/link-header.js +2 -1
  124. package/lib/vendor/blamejs/lib/log-stream-otlp-grpc.js +5 -1
  125. package/lib/vendor/blamejs/lib/log-stream-otlp.js +5 -1
  126. package/lib/vendor/blamejs/lib/log-stream.js +8 -3
  127. package/lib/vendor/blamejs/lib/mail-auth.js +123 -22
  128. package/lib/vendor/blamejs/lib/mail-bimi.js +1 -1
  129. package/lib/vendor/blamejs/lib/mail-bounce.js +8 -0
  130. package/lib/vendor/blamejs/lib/mail-crypto-pgp.js +46 -10
  131. package/lib/vendor/blamejs/lib/mail-dav.js +22 -3
  132. package/lib/vendor/blamejs/lib/mail-dkim.js +96 -30
  133. package/lib/vendor/blamejs/lib/mail-helo.js +6 -1
  134. package/lib/vendor/blamejs/lib/mail-scan.js +23 -16
  135. package/lib/vendor/blamejs/lib/mail-send-deliver.js +34 -8
  136. package/lib/vendor/blamejs/lib/mail-server-imap.js +3 -4
  137. package/lib/vendor/blamejs/lib/mail-server-managesieve.js +7 -11
  138. package/lib/vendor/blamejs/lib/mail-server-mx.js +93 -7
  139. package/lib/vendor/blamejs/lib/mail-server-registry.js +8 -2
  140. package/lib/vendor/blamejs/lib/mail.js +15 -5
  141. package/lib/vendor/blamejs/lib/metrics.js +268 -63
  142. package/lib/vendor/blamejs/lib/middleware/age-gate.js +7 -1
  143. package/lib/vendor/blamejs/lib/middleware/asyncapi-serve.js +1 -1
  144. package/lib/vendor/blamejs/lib/middleware/body-parser.js +19 -4
  145. package/lib/vendor/blamejs/lib/middleware/bot-guard.js +5 -9
  146. package/lib/vendor/blamejs/lib/middleware/csp-report.js +40 -8
  147. package/lib/vendor/blamejs/lib/middleware/csrf-protect.js +24 -10
  148. package/lib/vendor/blamejs/lib/middleware/dpop.js +10 -5
  149. package/lib/vendor/blamejs/lib/middleware/index.js +6 -1
  150. package/lib/vendor/blamejs/lib/middleware/nel.js +1 -1
  151. package/lib/vendor/blamejs/lib/middleware/openapi-serve.js +1 -1
  152. package/lib/vendor/blamejs/lib/middleware/rate-limit.js +12 -1
  153. package/lib/vendor/blamejs/lib/middleware/require-bound-key.js +1 -1
  154. package/lib/vendor/blamejs/lib/middleware/scim-server.js +1 -1
  155. package/lib/vendor/blamejs/lib/middleware/tus-upload.js +6 -2
  156. package/lib/vendor/blamejs/lib/mtls-ca.js +18 -2
  157. package/lib/vendor/blamejs/lib/network-dns-resolver.js +11 -1
  158. package/lib/vendor/blamejs/lib/network-dns.js +21 -2
  159. package/lib/vendor/blamejs/lib/network-tls.js +69 -7
  160. package/lib/vendor/blamejs/lib/nonce-store.js +9 -1
  161. package/lib/vendor/blamejs/lib/object-store/gcs.js +7 -0
  162. package/lib/vendor/blamejs/lib/object-store/sigv4.js +31 -0
  163. package/lib/vendor/blamejs/lib/observability-otlp-exporter.js +1 -1
  164. package/lib/vendor/blamejs/lib/outbox.js +1 -1
  165. package/lib/vendor/blamejs/lib/parsers/safe-ini.js +9 -1
  166. package/lib/vendor/blamejs/lib/parsers/safe-toml.js +10 -1
  167. package/lib/vendor/blamejs/lib/permissions.js +6 -3
  168. package/lib/vendor/blamejs/lib/pid-probe.js +55 -0
  169. package/lib/vendor/blamejs/lib/pqc-agent.js +8 -1
  170. package/lib/vendor/blamejs/lib/pqc-software.js +3 -3
  171. package/lib/vendor/blamejs/lib/pubsub.js +20 -9
  172. package/lib/vendor/blamejs/lib/queue-local.js +8 -1
  173. package/lib/vendor/blamejs/lib/queue-redis.js +5 -0
  174. package/lib/vendor/blamejs/lib/redact.js +54 -0
  175. package/lib/vendor/blamejs/lib/restore-bundle.js +10 -2
  176. package/lib/vendor/blamejs/lib/restore.js +19 -0
  177. package/lib/vendor/blamejs/lib/retention.js +12 -4
  178. package/lib/vendor/blamejs/lib/router.js +60 -6
  179. package/lib/vendor/blamejs/lib/safe-buffer.js +69 -0
  180. package/lib/vendor/blamejs/lib/safe-decompress.js +8 -2
  181. package/lib/vendor/blamejs/lib/safe-dns.js +25 -20
  182. package/lib/vendor/blamejs/lib/safe-ical.js +7 -3
  183. package/lib/vendor/blamejs/lib/safe-mime.js +12 -1
  184. package/lib/vendor/blamejs/lib/safe-object.js +80 -0
  185. package/lib/vendor/blamejs/lib/safe-path.js +52 -4
  186. package/lib/vendor/blamejs/lib/safe-redirect.js +10 -2
  187. package/lib/vendor/blamejs/lib/safe-schema.js +4 -1
  188. package/lib/vendor/blamejs/lib/safe-sieve.js +33 -1
  189. package/lib/vendor/blamejs/lib/safe-sql.js +88 -0
  190. package/lib/vendor/blamejs/lib/safe-vcard.js +7 -3
  191. package/lib/vendor/blamejs/lib/scheduler.js +8 -1
  192. package/lib/vendor/blamejs/lib/security-assert.js +6 -6
  193. package/lib/vendor/blamejs/lib/self-update-standalone-verifier.js +74 -27
  194. package/lib/vendor/blamejs/lib/self-update.js +517 -87
  195. package/lib/vendor/blamejs/lib/server-timing.js +2 -4
  196. package/lib/vendor/blamejs/lib/session.js +34 -12
  197. package/lib/vendor/blamejs/lib/sql.js +15 -1
  198. package/lib/vendor/blamejs/lib/ssrf-guard.js +52 -0
  199. package/lib/vendor/blamejs/lib/static.js +55 -13
  200. package/lib/vendor/blamejs/lib/storage.js +8 -2
  201. package/lib/vendor/blamejs/lib/subject.js +6 -1
  202. package/lib/vendor/blamejs/lib/tenant-quota.js +52 -13
  203. package/lib/vendor/blamejs/lib/tls-exporter.js +3 -3
  204. package/lib/vendor/blamejs/lib/tsa.js +34 -13
  205. package/lib/vendor/blamejs/lib/uri-template.js +8 -1
  206. package/lib/vendor/blamejs/lib/vault/index.js +13 -0
  207. package/lib/vendor/blamejs/lib/vc.js +44 -5
  208. package/lib/vendor/blamejs/lib/vendor/MANIFEST.json +26 -26
  209. package/lib/vendor/blamejs/lib/vendor/noble-ciphers.cjs +792 -1
  210. package/lib/vendor/blamejs/lib/vendor/noble-curves.cjs +3443 -1
  211. package/lib/vendor/blamejs/lib/vendor/noble-post-quantum.cjs +2737 -1
  212. package/lib/vendor/blamejs/lib/vendor/pki.cjs +39550 -13
  213. package/lib/vendor/blamejs/lib/vendor/public-suffix-list.dat +55 -53
  214. package/lib/vendor/blamejs/lib/vendor/public-suffix-list.data.js +5551 -5554
  215. package/lib/vendor/blamejs/lib/vendor/simplewebauthn-server.cjs +22459 -32
  216. package/lib/vendor/blamejs/lib/watcher.js +89 -17
  217. package/lib/vendor/blamejs/lib/webhook-dispatcher.js +25 -3
  218. package/lib/vendor/blamejs/lib/webhook.js +12 -2
  219. package/lib/vendor/blamejs/lib/ws-client.js +32 -1
  220. package/lib/vendor/blamejs/lib/xml-c14n.js +29 -1
  221. package/lib/vendor/blamejs/oss-fuzz/projects/blamejs/Dockerfile +1 -1
  222. package/lib/vendor/blamejs/package-lock.json +2 -2
  223. package/lib/vendor/blamejs/package.json +1 -1
  224. package/lib/vendor/blamejs/release-notes/v0.16.x.json +1462 -0
  225. package/lib/vendor/blamejs/release-notes/v0.17.0.json +31 -0
  226. package/lib/vendor/blamejs/release-notes/v0.17.1.json +31 -0
  227. package/lib/vendor/blamejs/release-notes/v0.17.10.json +30 -0
  228. package/lib/vendor/blamejs/release-notes/v0.17.11.json +22 -0
  229. package/lib/vendor/blamejs/release-notes/v0.17.12.json +18 -0
  230. package/lib/vendor/blamejs/release-notes/v0.17.13.json +77 -0
  231. package/lib/vendor/blamejs/release-notes/v0.17.14.json +40 -0
  232. package/lib/vendor/blamejs/release-notes/v0.17.15.json +18 -0
  233. package/lib/vendor/blamejs/release-notes/v0.17.16.json +27 -0
  234. package/lib/vendor/blamejs/release-notes/v0.17.17.json +31 -0
  235. package/lib/vendor/blamejs/release-notes/v0.17.18.json +18 -0
  236. package/lib/vendor/blamejs/release-notes/v0.17.19.json +18 -0
  237. package/lib/vendor/blamejs/release-notes/v0.17.2.json +26 -0
  238. package/lib/vendor/blamejs/release-notes/v0.17.20.json +43 -0
  239. package/lib/vendor/blamejs/release-notes/v0.17.21.json +26 -0
  240. package/lib/vendor/blamejs/release-notes/v0.17.22.json +18 -0
  241. package/lib/vendor/blamejs/release-notes/v0.17.3.json +43 -0
  242. package/lib/vendor/blamejs/release-notes/v0.17.4.json +35 -0
  243. package/lib/vendor/blamejs/release-notes/v0.17.5.json +26 -0
  244. package/lib/vendor/blamejs/release-notes/v0.17.6.json +26 -0
  245. package/lib/vendor/blamejs/release-notes/v0.17.7.json +35 -0
  246. package/lib/vendor/blamejs/release-notes/v0.17.8.json +22 -0
  247. package/lib/vendor/blamejs/release-notes/v0.17.9.json +26 -0
  248. package/lib/vendor/blamejs/scripts/validate-source-comment-blocks.js +4 -0
  249. package/lib/vendor/blamejs/scripts/vendor-update.sh +293 -9
  250. package/lib/vendor/blamejs/socket.yml +94 -0
  251. package/lib/vendor/blamejs/test/00-primitives.js +605 -0
  252. package/lib/vendor/blamejs/test/helpers/drivers.js +12 -9
  253. package/lib/vendor/blamejs/test/integration/audit-stack-mysql.test.js +90 -1
  254. package/lib/vendor/blamejs/test/integration/audit-stack-postgres.test.js +122 -1
  255. package/lib/vendor/blamejs/test/integration/data-layer-mysql.test.js +30 -0
  256. package/lib/vendor/blamejs/test/integration/data-layer-pg.test.js +29 -0
  257. package/lib/vendor/blamejs/test/integration/dsr-cluster-mysql.test.js +479 -0
  258. package/lib/vendor/blamejs/test/integration/dsr-cluster-pg.test.js +487 -0
  259. package/lib/vendor/blamejs/test/integration/federation-auth.test.js +313 -5
  260. package/lib/vendor/blamejs/test/integration/mail-dkim.test.js +80 -0
  261. package/lib/vendor/blamejs/test/integration/openid-federation-chain.test.js +275 -0
  262. package/lib/vendor/blamejs/test/integration/webhook-dispatcher-pg.test.js +96 -0
  263. package/lib/vendor/blamejs/test/layer-0-primitives/a2a-tasks.test.js +401 -0
  264. package/lib/vendor/blamejs/test/layer-0-primitives/acme.test.js +1649 -2
  265. package/lib/vendor/blamejs/test/layer-0-primitives/age-gate.test.js +33 -0
  266. package/lib/vendor/blamejs/test/layer-0-primitives/agent-idempotency.test.js +0 -0
  267. package/lib/vendor/blamejs/test/layer-0-primitives/agent-saga.test.js +60 -0
  268. package/lib/vendor/blamejs/test/layer-0-primitives/agent-snapshot.test.js +524 -0
  269. package/lib/vendor/blamejs/test/layer-0-primitives/api-encrypt.test.js +891 -0
  270. package/lib/vendor/blamejs/test/layer-0-primitives/app-shutdown.test.js +128 -1
  271. package/lib/vendor/blamejs/test/layer-0-primitives/archive-adapters.test.js +271 -0
  272. package/lib/vendor/blamejs/test/layer-0-primitives/archive-read.test.js +628 -1
  273. package/lib/vendor/blamejs/test/layer-0-primitives/archive-tar-read.test.js +0 -0
  274. package/lib/vendor/blamejs/test/layer-0-primitives/archive-wrap.test.js +227 -0
  275. package/lib/vendor/blamejs/test/layer-0-primitives/arg-parser.test.js +15 -0
  276. package/lib/vendor/blamejs/test/layer-0-primitives/asn1-der.test.js +73 -0
  277. package/lib/vendor/blamejs/test/layer-0-primitives/atomic-file.test.js +114 -0
  278. package/lib/vendor/blamejs/test/layer-0-primitives/audit-sign-anchor.test.js +141 -0
  279. package/lib/vendor/blamejs/test/layer-0-primitives/audit-tools.test.js +624 -0
  280. package/lib/vendor/blamejs/test/layer-0-primitives/audit.test.js +769 -0
  281. package/lib/vendor/blamejs/test/layer-0-primitives/auth-jwt-defenses.test.js +436 -0
  282. package/lib/vendor/blamejs/test/layer-0-primitives/auth-oauth.test.js +1697 -0
  283. package/lib/vendor/blamejs/test/layer-0-primitives/auth-oid4vp.test.js +495 -0
  284. package/lib/vendor/blamejs/test/layer-0-primitives/auth-password.test.js +500 -0
  285. package/lib/vendor/blamejs/test/layer-0-primitives/auth-saml.test.js +1809 -0
  286. package/lib/vendor/blamejs/test/layer-0-primitives/auth-status-list.test.js +243 -1
  287. package/lib/vendor/blamejs/test/layer-0-primitives/backup-index.test.js +2226 -0
  288. package/lib/vendor/blamejs/test/layer-0-primitives/backup-manifest-signature.test.js +183 -0
  289. package/lib/vendor/blamejs/test/layer-0-primitives/base32.test.js +105 -0
  290. package/lib/vendor/blamejs/test/layer-0-primitives/break-glass.test.js +693 -0
  291. package/lib/vendor/blamejs/test/layer-0-primitives/cache.test.js +603 -0
  292. package/lib/vendor/blamejs/test/layer-0-primitives/calendar.test.js +557 -0
  293. package/lib/vendor/blamejs/test/layer-0-primitives/case-insensitive-security-token-guard.test.js +214 -0
  294. package/lib/vendor/blamejs/test/layer-0-primitives/cbor.test.js +25 -0
  295. package/lib/vendor/blamejs/test/layer-0-primitives/cert.test.js +843 -6
  296. package/lib/vendor/blamejs/test/layer-0-primitives/ciba-authreqid-binding.test.js +77 -2
  297. package/lib/vendor/blamejs/test/layer-0-primitives/ciba.test.js +866 -0
  298. package/lib/vendor/blamejs/test/layer-0-primitives/clear-site-data.test.js +18 -0
  299. package/lib/vendor/blamejs/test/layer-0-primitives/cli-erase.test.js +19 -0
  300. package/lib/vendor/blamejs/test/layer-0-primitives/cli.test.js +2790 -0
  301. package/lib/vendor/blamejs/test/layer-0-primitives/cluster-lease-renewal-ttl.test.js +114 -0
  302. package/lib/vendor/blamejs/test/layer-0-primitives/cluster.test.js +1032 -0
  303. package/lib/vendor/blamejs/test/layer-0-primitives/cms-codec.test.js +575 -0
  304. package/lib/vendor/blamejs/test/layer-0-primitives/codebase-patterns.test.js +739 -1
  305. package/lib/vendor/blamejs/test/layer-0-primitives/codepoint-class.test.js +8 -0
  306. package/lib/vendor/blamejs/test/layer-0-primitives/compliance-ai-act.test.js +194 -0
  307. package/lib/vendor/blamejs/test/layer-0-primitives/compliance-lifecycle-proto-key.test.js +104 -0
  308. package/lib/vendor/blamejs/test/layer-0-primitives/compliance-sanctions.test.js +254 -0
  309. package/lib/vendor/blamejs/test/layer-0-primitives/content-credentials.test.js +613 -3
  310. package/lib/vendor/blamejs/test/layer-0-primitives/cookies.test.js +140 -0
  311. package/lib/vendor/blamejs/test/layer-0-primitives/cose.test.js +407 -0
  312. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-adversarial.test.js +352 -0
  313. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-field-derived-hash.test.js +32 -0
  314. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-field.test.js +575 -0
  315. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-hash-files-parallel.test.js +10 -0
  316. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-hash-stream.test.js +24 -0
  317. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-oprf.test.js +17 -0
  318. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-spki-pin.test.js +183 -0
  319. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-xwing.test.js +48 -0
  320. package/lib/vendor/blamejs/test/layer-0-primitives/crypto.test.js +345 -0
  321. package/lib/vendor/blamejs/test/layer-0-primitives/csp-report.test.js +58 -0
  322. package/lib/vendor/blamejs/test/layer-0-primitives/csv.test.js +48 -0
  323. package/lib/vendor/blamejs/test/layer-0-primitives/daemon.test.js +459 -1
  324. package/lib/vendor/blamejs/test/layer-0-primitives/dark-patterns.test.js +19 -0
  325. package/lib/vendor/blamejs/test/layer-0-primitives/db-query.test.js +1019 -0
  326. package/lib/vendor/blamejs/test/layer-0-primitives/db-raw-residency-gate.test.js +77 -0
  327. package/lib/vendor/blamejs/test/layer-0-primitives/db.test.js +1621 -0
  328. package/lib/vendor/blamejs/test/layer-0-primitives/ddl-change-control.test.js +462 -3
  329. package/lib/vendor/blamejs/test/layer-0-primitives/dnssec.test.js +323 -0
  330. package/lib/vendor/blamejs/test/layer-0-primitives/dpop-middleware-verify.test.js +562 -0
  331. package/lib/vendor/blamejs/test/layer-0-primitives/dsr.test.js +901 -1
  332. package/lib/vendor/blamejs/test/layer-0-primitives/dual-control.test.js +249 -0
  333. package/lib/vendor/blamejs/test/layer-0-primitives/external-db-migrate.test.js +561 -0
  334. package/lib/vendor/blamejs/test/layer-0-primitives/external-db.test.js +1214 -0
  335. package/lib/vendor/blamejs/test/layer-0-primitives/fal.test.js +21 -0
  336. package/lib/vendor/blamejs/test/layer-0-primitives/fedcm-dbsc.test.js +46 -20
  337. package/lib/vendor/blamejs/test/layer-0-primitives/federation-vc-suite.test.js +147 -3
  338. package/lib/vendor/blamejs/test/layer-0-primitives/fido-mds3.test.js +907 -38
  339. package/lib/vendor/blamejs/test/layer-0-primitives/file-upload-content-safety-skip-audit.test.js +29 -0
  340. package/lib/vendor/blamejs/test/layer-0-primitives/file-upload.test.js +1135 -0
  341. package/lib/vendor/blamejs/test/layer-0-primitives/flag.test.js +30 -0
  342. package/lib/vendor/blamejs/test/layer-0-primitives/forms.test.js +747 -0
  343. package/lib/vendor/blamejs/test/layer-0-primitives/gate-contract.test.js +1855 -0
  344. package/lib/vendor/blamejs/test/layer-0-primitives/gdpr-ropa.test.js +30 -0
  345. package/lib/vendor/blamejs/test/layer-0-primitives/guard-archive.test.js +86 -0
  346. package/lib/vendor/blamejs/test/layer-0-primitives/guard-auth.test.js +117 -0
  347. package/lib/vendor/blamejs/test/layer-0-primitives/guard-cidr.test.js +151 -0
  348. package/lib/vendor/blamejs/test/layer-0-primitives/guard-domain.test.js +422 -0
  349. package/lib/vendor/blamejs/test/layer-0-primitives/guard-filename.test.js +424 -0
  350. package/lib/vendor/blamejs/test/layer-0-primitives/{guard-gate-disposition-coverage.test.js → guard-gate-disposition.test.js} +1 -1
  351. package/lib/vendor/blamejs/test/layer-0-primitives/guard-graphql.test.js +340 -0
  352. package/lib/vendor/blamejs/test/layer-0-primitives/guard-html.test.js +29 -0
  353. package/lib/vendor/blamejs/test/layer-0-primitives/guard-idempotency-key.test.js +28 -0
  354. package/lib/vendor/blamejs/test/layer-0-primitives/guard-image.test.js +519 -45
  355. package/lib/vendor/blamejs/test/layer-0-primitives/guard-imap-command.test.js +0 -0
  356. package/lib/vendor/blamejs/test/layer-0-primitives/guard-jmap.test.js +51 -0
  357. package/lib/vendor/blamejs/test/layer-0-primitives/guard-jsonpath.test.js +66 -0
  358. package/lib/vendor/blamejs/test/layer-0-primitives/guard-jwt.test.js +436 -0
  359. package/lib/vendor/blamejs/test/layer-0-primitives/guard-managesieve-command.test.js +25 -0
  360. package/lib/vendor/blamejs/test/layer-0-primitives/guard-markdown.test.js +16 -0
  361. package/lib/vendor/blamejs/test/layer-0-primitives/guard-mime.test.js +86 -0
  362. package/lib/vendor/blamejs/test/layer-0-primitives/guard-oauth.test.js +140 -0
  363. package/lib/vendor/blamejs/test/layer-0-primitives/guard-pdf.test.js +80 -0
  364. package/lib/vendor/blamejs/test/layer-0-primitives/guard-pop3-command.test.js +27 -0
  365. package/lib/vendor/blamejs/test/layer-0-primitives/guard-regex.test.js +99 -0
  366. package/lib/vendor/blamejs/test/layer-0-primitives/guard-shell.test.js +76 -0
  367. package/lib/vendor/blamejs/test/layer-0-primitives/{guard-sql-coverage.test.js → guard-sql.test.js} +3 -3
  368. package/lib/vendor/blamejs/test/layer-0-primitives/guard-svg.test.js +524 -0
  369. package/lib/vendor/blamejs/test/layer-0-primitives/guard-template.test.js +71 -0
  370. package/lib/vendor/blamejs/test/layer-0-primitives/guard-time.test.js +92 -0
  371. package/lib/vendor/blamejs/test/layer-0-primitives/guard-uuid.test.js +86 -0
  372. package/lib/vendor/blamejs/test/layer-0-primitives/html-balance.test.js +38 -0
  373. package/lib/vendor/blamejs/test/layer-0-primitives/http-client-cache-authorization.test.js +347 -0
  374. package/lib/vendor/blamejs/test/layer-0-primitives/http-client-cache.test.js +908 -0
  375. package/lib/vendor/blamejs/test/layer-0-primitives/http-client.test.js +2874 -0
  376. package/lib/vendor/blamejs/test/layer-0-primitives/http-message-signature.test.js +643 -0
  377. package/lib/vendor/blamejs/test/layer-0-primitives/i18n-messageformat.test.js +38 -0
  378. package/lib/vendor/blamejs/test/layer-0-primitives/i18n.test.js +1153 -1
  379. package/lib/vendor/blamejs/test/layer-0-primitives/idempotency-key.test.js +494 -0
  380. package/lib/vendor/blamejs/test/layer-0-primitives/ip-utils.test.js +30 -0
  381. package/lib/vendor/blamejs/test/layer-0-primitives/jsdoc-example-execution.test.js +177 -0
  382. package/lib/vendor/blamejs/test/layer-0-primitives/json-path.test.js +103 -0
  383. package/lib/vendor/blamejs/test/layer-0-primitives/json-schema.test.js +214 -0
  384. package/lib/vendor/blamejs/test/layer-0-primitives/jwk.test.js +41 -0
  385. package/lib/vendor/blamejs/test/layer-0-primitives/jwt-external.test.js +276 -0
  386. package/lib/vendor/blamejs/test/layer-0-primitives/keychain.test.js +0 -0
  387. package/lib/vendor/blamejs/test/layer-0-primitives/log-stream.test.js +241 -0
  388. package/lib/vendor/blamejs/test/layer-0-primitives/log.test.js +106 -0
  389. package/lib/vendor/blamejs/test/layer-0-primitives/mail-agent.test.js +441 -0
  390. package/lib/vendor/blamejs/test/layer-0-primitives/mail-auth.test.js +2136 -4
  391. package/lib/vendor/blamejs/test/layer-0-primitives/mail-bimi.test.js +759 -12
  392. package/lib/vendor/blamejs/test/layer-0-primitives/mail-bounce.test.js +811 -1
  393. package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto-pgp-experimental.test.js +401 -3
  394. package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto-pgp.test.js +751 -8
  395. package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto-smime.test.js +864 -0
  396. package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto.test.js +110 -0
  397. package/lib/vendor/blamejs/test/layer-0-primitives/mail-dav.test.js +830 -1
  398. package/lib/vendor/blamejs/test/layer-0-primitives/mail-deploy.test.js +635 -86
  399. package/lib/vendor/blamejs/test/layer-0-primitives/mail-dkim.test.js +818 -0
  400. package/lib/vendor/blamejs/test/layer-0-primitives/mail-helo.test.js +27 -0
  401. package/lib/vendor/blamejs/test/layer-0-primitives/mail-scan.test.js +199 -0
  402. package/lib/vendor/blamejs/test/layer-0-primitives/mail-send-deliver.test.js +686 -2
  403. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-imap.test.js +778 -0
  404. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-jmap.test.js +1438 -0
  405. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-managesieve.test.js +449 -6
  406. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-mx.test.js +773 -2
  407. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-pop3.test.js +623 -3
  408. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-rate-limit.test.js +55 -0
  409. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-registry.test.js +13 -0
  410. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-submission.test.js +877 -1
  411. package/lib/vendor/blamejs/test/layer-0-primitives/mail-sieve.test.js +326 -0
  412. package/lib/vendor/blamejs/test/layer-0-primitives/mail-store-fts.test.js +55 -0
  413. package/lib/vendor/blamejs/test/layer-0-primitives/mail-store.test.js +242 -0
  414. package/lib/vendor/blamejs/test/layer-0-primitives/mail.test.js +1596 -2
  415. package/lib/vendor/blamejs/test/layer-0-primitives/mcp.test.js +440 -4
  416. package/lib/vendor/blamejs/test/layer-0-primitives/metrics-snapshot.test.js +89 -0
  417. package/lib/vendor/blamejs/test/layer-0-primitives/metrics.test.js +1230 -0
  418. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-assetlinks.test.js +113 -0
  419. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-body-parser.test.js +1169 -0
  420. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-bot-disclose.test.js +123 -0
  421. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-cookies.test.js +108 -0
  422. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-gpc.test.js +121 -0
  423. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-headers.test.js +163 -0
  424. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-host-allowlist.test.js +154 -0
  425. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-require-content-type.test.js +127 -0
  426. package/lib/vendor/blamejs/test/layer-0-primitives/{middleware-tus-upload-coverage.test.js → middleware-tus-upload.test.js} +45 -0
  427. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-web-app-manifest.test.js +132 -0
  428. package/lib/vendor/blamejs/test/layer-0-primitives/mtls-ca-crl-fingerprint-only.test.js +92 -0
  429. package/lib/vendor/blamejs/test/layer-0-primitives/network-dns-resolver.test.js +65 -0
  430. package/lib/vendor/blamejs/test/layer-0-primitives/network-dns.test.js +1727 -1
  431. package/lib/vendor/blamejs/test/layer-0-primitives/network-nts.test.js +699 -0
  432. package/lib/vendor/blamejs/test/layer-0-primitives/network-smtp-policy.test.js +1181 -0
  433. package/lib/vendor/blamejs/test/layer-0-primitives/network-tls.test.js +1876 -3
  434. package/lib/vendor/blamejs/test/layer-0-primitives/network.test.js +32 -0
  435. package/lib/vendor/blamejs/test/layer-0-primitives/nonce-store-enforce-replay-nonboolean.test.js +81 -0
  436. package/lib/vendor/blamejs/test/layer-0-primitives/ntp-check.test.js +122 -0
  437. package/lib/vendor/blamejs/test/layer-0-primitives/observability-tracing.test.js +378 -0
  438. package/lib/vendor/blamejs/test/layer-0-primitives/observability.test.js +77 -0
  439. package/lib/vendor/blamejs/test/layer-0-primitives/oid4vci.test.js +1016 -0
  440. package/lib/vendor/blamejs/test/layer-0-primitives/openid-federation.test.js +946 -0
  441. package/lib/vendor/blamejs/test/layer-0-primitives/outbox.test.js +818 -0
  442. package/lib/vendor/blamejs/test/layer-0-primitives/own-property-membership-guards.test.js +109 -0
  443. package/lib/vendor/blamejs/test/layer-0-primitives/parsers-safe-toml.test.js +543 -0
  444. package/lib/vendor/blamejs/test/layer-0-primitives/{parsers-safe-yaml-coverage.test.js → parsers-safe-yaml.test.js} +2 -2
  445. package/lib/vendor/blamejs/test/layer-0-primitives/parsers-standalone.test.js +73 -0
  446. package/lib/vendor/blamejs/test/layer-0-primitives/passkey.test.js +649 -0
  447. package/lib/vendor/blamejs/test/layer-0-primitives/permissions.test.js +524 -0
  448. package/lib/vendor/blamejs/test/layer-0-primitives/pqc-agent-curve.test.js +22 -0
  449. package/lib/vendor/blamejs/test/layer-0-primitives/pubsub.test.js +295 -0
  450. package/lib/vendor/blamejs/test/layer-0-primitives/queue-flow-repeat.test.js +36 -0
  451. package/lib/vendor/blamejs/test/layer-0-primitives/queue.test.js +83 -0
  452. package/lib/vendor/blamejs/test/layer-0-primitives/rate-limit-xff-spoofing.test.js +34 -0
  453. package/lib/vendor/blamejs/test/layer-0-primitives/redact.test.js +1031 -0
  454. package/lib/vendor/blamejs/test/layer-0-primitives/request-helpers.test.js +94 -0
  455. package/lib/vendor/blamejs/test/layer-0-primitives/require-bound-key.test.js +401 -0
  456. package/lib/vendor/blamejs/test/layer-0-primitives/restore-empty-manifest-wipe.test.js +154 -0
  457. package/lib/vendor/blamejs/test/layer-0-primitives/retention.test.js +600 -0
  458. package/lib/vendor/blamejs/test/layer-0-primitives/router-host-path-injection.test.js +231 -0
  459. package/lib/vendor/blamejs/test/layer-0-primitives/router-tls0rtt.test.js +21 -0
  460. package/lib/vendor/blamejs/test/layer-0-primitives/router.test.js +1277 -0
  461. package/lib/vendor/blamejs/test/layer-0-primitives/safe-async.test.js +133 -0
  462. package/lib/vendor/blamejs/test/layer-0-primitives/safe-buffer-linear-scans.test.js +14 -0
  463. package/lib/vendor/blamejs/test/layer-0-primitives/safe-buffer.test.js +80 -0
  464. package/lib/vendor/blamejs/test/layer-0-primitives/safe-decompress.test.js +28 -0
  465. package/lib/vendor/blamejs/test/layer-0-primitives/safe-dns.test.js +245 -0
  466. package/lib/vendor/blamejs/test/layer-0-primitives/safe-ical.test.js +32 -0
  467. package/lib/vendor/blamejs/test/layer-0-primitives/safe-ini.test.js +376 -0
  468. package/lib/vendor/blamejs/test/layer-0-primitives/safe-json.test.js +175 -0
  469. package/lib/vendor/blamejs/test/layer-0-primitives/safe-mime.test.js +518 -0
  470. package/lib/vendor/blamejs/test/layer-0-primitives/safe-object.test.js +62 -0
  471. package/lib/vendor/blamejs/test/layer-0-primitives/safe-path.test.js +30 -0
  472. package/lib/vendor/blamejs/test/layer-0-primitives/safe-schema.test.js +104 -0
  473. package/lib/vendor/blamejs/test/layer-0-primitives/safe-sql.test.js +142 -0
  474. package/lib/vendor/blamejs/test/layer-0-primitives/safe-url.test.js +112 -0
  475. package/lib/vendor/blamejs/test/layer-0-primitives/safe-vcard.test.js +26 -0
  476. package/lib/vendor/blamejs/test/layer-0-primitives/scheduler.test.js +157 -0
  477. package/lib/vendor/blamejs/test/layer-0-primitives/scim-server.test.js +396 -0
  478. package/lib/vendor/blamejs/test/layer-0-primitives/sd-jwt-vc.test.js +930 -0
  479. package/lib/vendor/blamejs/test/layer-0-primitives/security-assert.test.js +755 -82
  480. package/lib/vendor/blamejs/test/layer-0-primitives/self-update.test.js +1053 -0
  481. package/lib/vendor/blamejs/test/layer-0-primitives/session-device-binding.test.js +200 -0
  482. package/lib/vendor/blamejs/test/layer-0-primitives/session-strict-binding-missing-failclosed.test.js +110 -0
  483. package/lib/vendor/blamejs/test/layer-0-primitives/sigv4-bucket-ops.test.js +636 -0
  484. package/lib/vendor/blamejs/test/layer-0-primitives/sql-offset-without-limit.test.js +94 -0
  485. package/lib/vendor/blamejs/test/layer-0-primitives/sql.test.js +1190 -0
  486. package/lib/vendor/blamejs/test/layer-0-primitives/ssrf-guard.test.js +21 -0
  487. package/lib/vendor/blamejs/test/layer-0-primitives/static.test.js +850 -0
  488. package/lib/vendor/blamejs/test/layer-0-primitives/storage-presigned-url.test.js +146 -0
  489. package/lib/vendor/blamejs/test/layer-0-primitives/storage.test.js +621 -0
  490. package/lib/vendor/blamejs/test/layer-0-primitives/subject.test.js +47 -0
  491. package/lib/vendor/blamejs/test/layer-0-primitives/template.test.js +582 -0
  492. package/lib/vendor/blamejs/test/layer-0-primitives/tenant-quota.test.js +587 -25
  493. package/lib/vendor/blamejs/test/layer-0-primitives/time.test.js +11 -0
  494. package/lib/vendor/blamejs/test/layer-0-primitives/tsa.test.js +524 -63
  495. package/lib/vendor/blamejs/test/layer-0-primitives/uri-template.test.js +27 -0
  496. package/lib/vendor/blamejs/test/layer-0-primitives/vault-rotate.test.js +866 -0
  497. package/lib/vendor/blamejs/test/layer-0-primitives/vault.test.js +74 -0
  498. package/lib/vendor/blamejs/test/layer-0-primitives/vc.test.js +215 -0
  499. package/lib/vendor/blamejs/test/layer-0-primitives/watcher.test.js +550 -0
  500. package/lib/vendor/blamejs/test/layer-0-primitives/webhook-dispatcher.test.js +388 -0
  501. package/lib/vendor/blamejs/test/layer-0-primitives/webhook.test.js +262 -0
  502. package/lib/vendor/blamejs/test/layer-0-primitives/websocket.test.js +1294 -0
  503. package/lib/vendor/blamejs/test/layer-0-primitives/ws-client.test.js +629 -0
  504. package/lib/vendor/blamejs/test/layer-0-primitives/xml-c14n-attr-normalization.test.js +164 -0
  505. package/lib/vendor/blamejs/test/smoke.js +2 -0
  506. package/package.json +1 -1
  507. package/lib/vendor/blamejs/release-notes/v0.16.0.json +0 -44
  508. package/lib/vendor/blamejs/release-notes/v0.16.1.json +0 -36
  509. package/lib/vendor/blamejs/release-notes/v0.16.2.json +0 -71
  510. package/lib/vendor/blamejs/release-notes/v0.16.3.json +0 -71
  511. package/lib/vendor/blamejs/test/layer-0-primitives/acme-coverage.test.js +0 -441
  512. package/lib/vendor/blamejs/test/layer-0-primitives/auth-oauth-coverage.test.js +0 -482
  513. package/lib/vendor/blamejs/test/layer-0-primitives/auth-saml-coverage.test.js +0 -671
  514. package/lib/vendor/blamejs/test/layer-0-primitives/backup-index-coverage.test.js +0 -690
  515. package/lib/vendor/blamejs/test/layer-0-primitives/cli-coverage.test.js +0 -238
  516. package/lib/vendor/blamejs/test/layer-0-primitives/content-credentials-coverage.test.js +0 -319
  517. package/lib/vendor/blamejs/test/layer-0-primitives/keychain-coverage.test.js +0 -0
  518. package/lib/vendor/blamejs/test/layer-0-primitives/mail-auth-coverage.test.js +0 -437
  519. package/lib/vendor/blamejs/test/layer-0-primitives/mcp-coverage.test.js +0 -443
  520. package/lib/vendor/blamejs/test/layer-0-primitives/metrics-coverage.test.js +0 -395
  521. package/lib/vendor/blamejs/test/layer-0-primitives/network-smtp-policy-coverage.test.js +0 -565
  522. package/lib/vendor/blamejs/test/layer-0-primitives/router-coverage.test.js +0 -592
  523. package/lib/vendor/blamejs/test/layer-0-primitives/sql-coverage.test.js +0 -422
  524. package/lib/vendor/blamejs/test/layer-0-primitives/test-coverage.test.js +0 -573
@@ -0,0 +1,104 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (c) blamejs contributors
3
+ "use strict";
4
+ /**
5
+ * b.safeSchema.SafeSchemaError + b.safeSchema.undefined_ — the schema
6
+ * error class and the undefined-only leaf schema.
7
+ *
8
+ * SafeSchemaError is thrown by every construction-time misuse (bad
9
+ * union, poisoned shape key) AND by schema.parse() on validation
10
+ * failure, carrying the full per-field .issues array so one 400 can
11
+ * report every failing field. It is marked alwaysPermanent so a
12
+ * validation failure never round-trips through retry / transient-error
13
+ * logic. undefined_() is the leaf schema that accepts only `undefined`
14
+ * (implicitly optional) and rejects everything else with an issue code
15
+ * of "type".
16
+ */
17
+
18
+ var helpers = require("../helpers");
19
+ var b = helpers.b;
20
+ var check = helpers.check;
21
+
22
+ function run() {
23
+ var s = b.safeSchema;
24
+
25
+ // ---- SafeSchemaError: thrown by parse() on validation failure ----
26
+ var threw = false;
27
+ var caught = null;
28
+ try { s.string().min(3).parse("ab"); }
29
+ catch (e) { threw = true; caught = e; }
30
+ check("b.safeSchema.SafeSchemaError: parse() of an invalid value throws", threw);
31
+ check("SafeSchemaError: instanceof the exported class",
32
+ caught instanceof b.safeSchema.SafeSchemaError);
33
+ check("SafeSchemaError: name is SafeSchemaError", caught && caught.name === "SafeSchemaError");
34
+ check("SafeSchemaError: carries an .issues array", Array.isArray(caught.issues));
35
+ check("SafeSchemaError: issue[0] has the { path, code, message } shape",
36
+ caught.issues.length === 1 &&
37
+ Array.isArray(caught.issues[0].path) &&
38
+ typeof caught.issues[0].code === "string" &&
39
+ typeof caught.issues[0].message === "string");
40
+ check("SafeSchemaError: issue code reflects the failed check (string/too-short)",
41
+ caught.issues[0].code === "string/too-short");
42
+
43
+ // alwaysPermanent — a validation failure must never be retried as if
44
+ // it were a transient fault. defineClass({ alwaysPermanent: true })
45
+ // stamps `.permanent = true` on every instance.
46
+ check("SafeSchemaError: marked permanent so it never round-trips retry",
47
+ caught.permanent === true);
48
+
49
+ // The advertised aggregation guarantee: one throw surfaces EVERY
50
+ // failing field so HTTP middleware can answer with a single 400.
51
+ var multiThrew = null;
52
+ try { s.object({ a: s.string().min(3), b: s.number() }).parse({ a: "x", b: "nope" }); }
53
+ catch (e) { multiThrew = e; }
54
+ check("SafeSchemaError: aggregates all failing fields into one .issues array",
55
+ multiThrew instanceof b.safeSchema.SafeSchemaError && multiThrew.issues.length === 2);
56
+ check("SafeSchemaError: each aggregated issue carries its field path",
57
+ multiThrew.issues[0].path[0] === "a" && multiThrew.issues[1].path[0] === "b");
58
+
59
+ // ---- SafeSchemaError: also thrown on construction-time misuse ----
60
+ var badUnion = null;
61
+ try { s.union([]); }
62
+ catch (e) { badUnion = e; }
63
+ check("SafeSchemaError: construction-time misuse (empty union) throws it",
64
+ badUnion instanceof b.safeSchema.SafeSchemaError && badUnion.code === "safe-schema/bad-union");
65
+
66
+ // A prototype-pollution shape key is rejected at construction, not at
67
+ // parse, so an operator schema can never define one.
68
+ var poisoned = null;
69
+ try { s.object({ "constructor": s.string() }); }
70
+ catch (e) { poisoned = e; }
71
+ check("SafeSchemaError: a poisoned shape key ('constructor') is refused at construction",
72
+ poisoned instanceof b.safeSchema.SafeSchemaError && poisoned.code === "safe-schema/poisoned-shape-key");
73
+
74
+ // ---- undefined_(): accepts only undefined; implicitly optional ----
75
+ check("b.safeSchema.undefined_: parse(undefined) returns undefined",
76
+ b.safeSchema.undefined_().parse(undefined) === undefined);
77
+
78
+ var nullThrew = null;
79
+ try { s.undefined_().parse(null); }
80
+ catch (e) { nullThrew = e; }
81
+ check("undefined_: parse(null) throws SafeSchemaError with a type issue",
82
+ nullThrew instanceof b.safeSchema.SafeSchemaError && nullThrew.issues[0].code === "type");
83
+
84
+ var valThrew = null;
85
+ try { s.undefined_().parse(0); }
86
+ catch (e) { valThrew = e; }
87
+ check("undefined_: parse(0) rejects a defined value with a type issue",
88
+ valThrew instanceof b.safeSchema.SafeSchemaError && valThrew.issues[0].code === "type");
89
+
90
+ // safeParse mirrors parse without throwing — the non-throwing consumer
91
+ // path an operator uses to fold errors into a response body.
92
+ check("undefined_: safeParse(undefined) is ok:true",
93
+ s.undefined_().safeParse(undefined).ok === true);
94
+ var spBad = s.undefined_().safeParse(1);
95
+ check("undefined_: safeParse(1) is ok:false with the type error code",
96
+ spBad.ok === false && spBad.errors[0].code === "type");
97
+ }
98
+
99
+ module.exports = { run: run };
100
+
101
+ if (require.main === module) {
102
+ try { run(); console.log("OK — " + helpers.getChecks() + " checks passed"); }
103
+ catch (e) { console.error("FAIL:", e.stack || e); process.exit(1); }
104
+ }
@@ -0,0 +1,142 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (c) blamejs contributors
3
+ "use strict";
4
+ /**
5
+ * b.safeSql identifier-shape primitives — the default identifier regex, the
6
+ * length ceiling, and the typed error class, each proven through the real
7
+ * validateIdentifier consumer path rather than by existence checks.
8
+ *
9
+ * DEFAULT_IDENTIFIER_RE is shown to be the shape validateIdentifier applies by
10
+ * default (an identifier the regex rejects throws sql/bad-shape; the same
11
+ * identifier passes once a wider opts.pattern is supplied). MAX_IDENTIFIER_LENGTH
12
+ * is shown to be the length boundary (one char past it throws sql/too-long;
13
+ * exactly at it passes). SafeSqlError is shown to be the class every throw
14
+ * carries, with its stable .code and default code.
15
+ */
16
+
17
+ var { check, b } = require("../helpers");
18
+
19
+ function _code(fn) {
20
+ try { fn(); return "OK"; }
21
+ catch (e) { return e && e.code; }
22
+ }
23
+
24
+ // ---- DEFAULT_IDENTIFIER_RE ----
25
+
26
+ function testDefaultIdentifierRe() {
27
+ check("b.safeSql.DEFAULT_IDENTIFIER_RE is the advertised ASCII identifier shape",
28
+ String(b.safeSql.DEFAULT_IDENTIFIER_RE) === "/^[A-Za-z_][A-Za-z0-9_]*$/");
29
+
30
+ // Advertised @example values: a plain snake_case name matches, a
31
+ // digit-leading name does not.
32
+ check("DEFAULT_IDENTIFIER_RE matches a plain identifier",
33
+ b.safeSql.DEFAULT_IDENTIFIER_RE.test("audit_log") === true);
34
+ check("DEFAULT_IDENTIFIER_RE rejects a digit-leading identifier",
35
+ b.safeSql.DEFAULT_IDENTIFIER_RE.test("1starts_with_digit") === false);
36
+
37
+ // validateIdentifier applies DEFAULT_IDENTIFIER_RE by default: a name the
38
+ // regex rejects throws sql/bad-shape...
39
+ check("validateIdentifier accepts a name matching DEFAULT_IDENTIFIER_RE",
40
+ b.safeSql.validateIdentifier("audit_log") === "audit_log");
41
+ check("validateIdentifier refuses a name failing DEFAULT_IDENTIFIER_RE",
42
+ _code(function () { b.safeSql.validateIdentifier("col-1"); }) === "sql/bad-shape");
43
+
44
+ // ...and the same name passes once a wider opts.pattern overrides the
45
+ // default shape — proving the default really was DEFAULT_IDENTIFIER_RE.
46
+ check("a wider opts.pattern accepts the name the default shape refused",
47
+ b.safeSql.validateIdentifier("col-1", {
48
+ pattern: /^[A-Za-z][A-Za-z0-9_-]*$/,
49
+ }) === "col-1");
50
+ }
51
+
52
+ // ---- MAX_IDENTIFIER_LENGTH ----
53
+
54
+ function testMaxIdentifierLength() {
55
+ check("b.safeSql.MAX_IDENTIFIER_LENGTH is the advertised 63 (Postgres NAMEDATALEN)",
56
+ b.safeSql.MAX_IDENTIFIER_LENGTH === 63);
57
+
58
+ // One char past the ceiling refuses with sql/too-long; exactly at the
59
+ // ceiling is accepted. Sizing off the constant makes a drift break the test.
60
+ var tooLong = "a".repeat(b.safeSql.MAX_IDENTIFIER_LENGTH + 1);
61
+ check("validateIdentifier refuses a name longer than MAX_IDENTIFIER_LENGTH",
62
+ _code(function () { b.safeSql.validateIdentifier(tooLong); }) === "sql/too-long");
63
+
64
+ var atMax = "a".repeat(b.safeSql.MAX_IDENTIFIER_LENGTH);
65
+ check("validateIdentifier accepts a name exactly at MAX_IDENTIFIER_LENGTH",
66
+ b.safeSql.validateIdentifier(atMax) === atMax);
67
+ }
68
+
69
+ // ---- SafeSqlError ----
70
+
71
+ function testSafeSqlError() {
72
+ // Every validateIdentifier rejection carries the class with a stable .code.
73
+ var thrown = null;
74
+ try { b.safeSql.validateIdentifier("drop"); }
75
+ catch (e) { thrown = e; }
76
+ check("validateIdentifier throws a b.safeSql.SafeSqlError",
77
+ thrown instanceof b.safeSql.SafeSqlError);
78
+ check("SafeSqlError extends Error", thrown instanceof Error);
79
+ check("SafeSqlError carries the .isSafeSqlError brand", thrown.isSafeSqlError === true);
80
+ check("reserved-word rejection carries code sql/reserved-word",
81
+ thrown.code === "sql/reserved-word");
82
+
83
+ // Distinct rejection reasons carry distinct documented codes on the SAME
84
+ // class — the code is the security signal HTTP middleware branches on.
85
+ check("bad-shape rejection is a SafeSqlError with code sql/bad-shape",
86
+ _code(function () { b.safeSql.validateIdentifier("a;b"); }) === "sql/bad-shape");
87
+ check("non-string input is a SafeSqlError with code sql/bad-type",
88
+ _code(function () { b.safeSql.validateIdentifier(42); }) === "sql/bad-type");
89
+
90
+ // The constructor's documented default code when none is supplied.
91
+ var bare = new b.safeSql.SafeSqlError("boom");
92
+ check("SafeSqlError defaults .code to sql/invalid", bare.code === "sql/invalid");
93
+ }
94
+
95
+ // ---- normalizeForScan ----
96
+
97
+ function testNormalizeForScan() {
98
+ // A quoted table/identifier abutting a keyword with NO whitespace gets a
99
+ // separating space so a whitespace-anchored tokenizer sees the boundary
100
+ // (the residency write-gate evasion this primitive was extracted to close).
101
+ check("normalizeForScan inserts a space where a quoted token abuts a word",
102
+ b.safeSql.normalizeForScan('INSERT INTO"t"(a) VALUES(?)') === 'INSERT INTO "t"(a) VALUES(?)');
103
+
104
+ // A slash-star block comment wedged between two keywords collapses to a
105
+ // single space so the token boundary survives.
106
+ var blockComment = "UPDATE" + "/*x*/" + "t SET a = ?";
107
+ check("normalizeForScan collapses an internal block comment to a space",
108
+ b.safeSql.normalizeForScan(blockComment) === "UPDATE t SET a = ?");
109
+
110
+ // A line comment collapses to a single space.
111
+ check("normalizeForScan collapses a line comment to a space",
112
+ b.safeSql.normalizeForScan("SELECT 1-- note") === "SELECT 1 ");
113
+
114
+ // Quote-aware: a comment marker INSIDE a string literal is copied verbatim,
115
+ // never treated as a comment (doubled-quote escape respected).
116
+ var litWithMarker = "SELECT '-- not a comment' AS x";
117
+ check("normalizeForScan leaves a comment marker inside a string literal intact",
118
+ b.safeSql.normalizeForScan(litWithMarker) === litWithMarker);
119
+
120
+ // Already-whitespace-delimited SQL is returned unchanged (no spurious spaces).
121
+ var clean = 'INSERT INTO "t" (a) VALUES (?)';
122
+ check("normalizeForScan is a no-op on already-normalized SQL",
123
+ b.safeSql.normalizeForScan(clean) === clean);
124
+
125
+ // A backtick-quoted (MySQL) identifier abutting a word is also separated.
126
+ check("normalizeForScan separates a backtick-quoted identifier abutting a word",
127
+ b.safeSql.normalizeForScan("UPDATE`t` SET a = ?") === "UPDATE `t` SET a = ?");
128
+ }
129
+
130
+ async function run() {
131
+ testDefaultIdentifierRe();
132
+ testMaxIdentifierLength();
133
+ testSafeSqlError();
134
+ testNormalizeForScan();
135
+ }
136
+
137
+ module.exports = { run: run };
138
+
139
+ if (require.main === module) {
140
+ run().then(function () { console.log("OK"); })
141
+ .catch(function (e) { console.error(e.stack || e); process.exit(1); });
142
+ }
@@ -0,0 +1,112 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (c) blamejs contributors
3
+ "use strict";
4
+ /**
5
+ * b.safeUrl protocol-allowlist presets — the three frozen scheme arrays a
6
+ * caller passes as opts.allowedProtocols, proven through the real parse gate
7
+ * rather than by shape checks alone.
8
+ *
9
+ * Each preset is asserted for its advertised contents AND its gating behavior:
10
+ * a URL whose scheme is IN the preset parses and returns the matching
11
+ * protocol; a URL whose scheme is OUT of it refuses with
12
+ * safe-url/protocol-disallowed. ALLOW_WS_TLS is the headline case — it permits
13
+ * wss: and refuses cleartext ws:. The presets are also confirmed frozen, as the
14
+ * docs promise (a shared allowlist must not be mutable by one caller).
15
+ */
16
+
17
+ var { check, b } = require("../helpers");
18
+
19
+ function _code(fn) {
20
+ try { fn(); return "OK"; }
21
+ catch (e) { return e && e.code; }
22
+ }
23
+
24
+ // ---- ALLOW_WS_TLS (["wss:"]) ----
25
+
26
+ function testAllowWsTls() {
27
+ check("b.safeUrl.ALLOW_WS_TLS is the advertised secure-WS allowlist",
28
+ b.safeUrl.ALLOW_WS_TLS.join(",") === "wss:");
29
+ check("ALLOW_WS_TLS is frozen (a shared preset must be immutable)",
30
+ Object.isFrozen(b.safeUrl.ALLOW_WS_TLS));
31
+
32
+ // Permits wss:, refuses cleartext ws: — the secure-WebSocket default.
33
+ check("parse with ALLOW_WS_TLS accepts a wss: URL",
34
+ b.safeUrl.parse("wss://example.com/stream", {
35
+ allowedProtocols: b.safeUrl.ALLOW_WS_TLS,
36
+ }).protocol === "wss:");
37
+ check("parse with ALLOW_WS_TLS refuses a cleartext ws: URL",
38
+ _code(function () {
39
+ b.safeUrl.parse("ws://example.com/stream", {
40
+ allowedProtocols: b.safeUrl.ALLOW_WS_TLS,
41
+ });
42
+ }) === "safe-url/protocol-disallowed");
43
+ }
44
+
45
+ // ---- ALLOW_WS_ALL (["ws:", "wss:"]) ----
46
+
47
+ function testAllowWsAll() {
48
+ check("b.safeUrl.ALLOW_WS_ALL is the advertised ws+wss allowlist",
49
+ b.safeUrl.ALLOW_WS_ALL.join(",") === "ws:,wss:");
50
+ check("ALLOW_WS_ALL is frozen", Object.isFrozen(b.safeUrl.ALLOW_WS_ALL));
51
+
52
+ // Opt-in cleartext WebSocket: both ws: and wss: parse.
53
+ check("parse with ALLOW_WS_ALL accepts a cleartext ws: URL",
54
+ b.safeUrl.parse("ws://127.0.0.1:9000/stream", {
55
+ allowedProtocols: b.safeUrl.ALLOW_WS_ALL,
56
+ }).protocol === "ws:");
57
+ check("parse with ALLOW_WS_ALL accepts a wss: URL",
58
+ b.safeUrl.parse("wss://example.com/stream", {
59
+ allowedProtocols: b.safeUrl.ALLOW_WS_ALL,
60
+ }).protocol === "wss:");
61
+ // But it is a WebSocket allowlist — an https: URL is a category error here.
62
+ check("parse with ALLOW_WS_ALL refuses a non-WebSocket https: URL",
63
+ _code(function () {
64
+ b.safeUrl.parse("https://example.com/", {
65
+ allowedProtocols: b.safeUrl.ALLOW_WS_ALL,
66
+ });
67
+ }) === "safe-url/protocol-disallowed");
68
+ }
69
+
70
+ // ---- ALLOW_ANY (["http:", "https:", "ws:", "wss:"]) ----
71
+
72
+ function testAllowAny() {
73
+ check("b.safeUrl.ALLOW_ANY is every framework-supported scheme",
74
+ b.safeUrl.ALLOW_ANY.join(",") === "http:,https:,ws:,wss:");
75
+ check("b.safeUrl.ALLOW_ANY has the advertised length of 4",
76
+ b.safeUrl.ALLOW_ANY.length === 4);
77
+ check("ALLOW_ANY is frozen", Object.isFrozen(b.safeUrl.ALLOW_ANY));
78
+
79
+ // Every supported scheme parses under ALLOW_ANY and returns its protocol.
80
+ var supported = [
81
+ { url: "http://example.com/", protocol: "http:" },
82
+ { url: "https://example.com/", protocol: "https:" },
83
+ { url: "ws://example.com/", protocol: "ws:" },
84
+ { url: "wss://example.com/", protocol: "wss:" },
85
+ ];
86
+ for (var i = 0; i < supported.length; i += 1) {
87
+ check("parse with ALLOW_ANY accepts " + supported[i].protocol,
88
+ b.safeUrl.parse(supported[i].url, {
89
+ allowedProtocols: b.safeUrl.ALLOW_ANY,
90
+ }).protocol === supported[i].protocol);
91
+ }
92
+ // A scheme outside the framework-supported set still refuses.
93
+ check("parse with ALLOW_ANY refuses an unsupported ftp: scheme",
94
+ _code(function () {
95
+ b.safeUrl.parse("ftp://example.com/file", {
96
+ allowedProtocols: b.safeUrl.ALLOW_ANY,
97
+ });
98
+ }) === "safe-url/protocol-disallowed");
99
+ }
100
+
101
+ async function run() {
102
+ testAllowWsTls();
103
+ testAllowWsAll();
104
+ testAllowAny();
105
+ }
106
+
107
+ module.exports = { run: run };
108
+
109
+ if (require.main === module) {
110
+ run().then(function () { console.log("OK"); })
111
+ .catch(function (e) { console.error(e.stack || e); process.exit(1); });
112
+ }
@@ -203,6 +203,31 @@ function testRefusesBadProfile() {
203
203
  "safe-vcard/bad-opt");
204
204
  }
205
205
 
206
+ function testProtoKeyProfileRejected() {
207
+ // A prototype-member name as the profile must be refused, not resolved to an
208
+ // inherited member ("constructor" -> Object.prototype.constructor,
209
+ // "__proto__" -> Object.prototype). The own-property guard in _resolveCaps
210
+ // rejects it; a bare `if (!PROFILES[name])` truthiness check would pass the
211
+ // inherited member as a known profile and run under it (fail-open).
212
+ expectRefused("refuses prototype-key profile 'constructor'",
213
+ function () { safeVcard.parse(_card(""), { profile: "constructor" }); },
214
+ "safe-vcard/bad-opt");
215
+ expectRefused("refuses prototype-key profile '__proto__'",
216
+ function () { safeVcard.parse(_card(""), { profile: "__proto__" }); },
217
+ "safe-vcard/bad-opt");
218
+ // A prototype-member name as the compliancePosture must not resolve to an
219
+ // inherited member either — the own-property guard skips the unknown posture
220
+ // and falls back to the strict profile, parsing cleanly.
221
+ var postureThrew = null, ast = null;
222
+ try { ast = safeVcard.parse(_card(""), { compliancePosture: "toString" }); }
223
+ catch (e) { postureThrew = e; }
224
+ check("prototype-key posture falls back to strict (no fail-open)",
225
+ postureThrew === null && !!(ast && ast.vcards));
226
+ // A valid profile still parses.
227
+ var ok = safeVcard.parse(_card(""), { profile: "balanced" });
228
+ check("valid profile 'balanced' still parses", !!ok.vcards);
229
+ }
230
+
206
231
  function testRefusesOversizeCards() {
207
232
  // strict caps at 16 cards.
208
233
  var body = "";
@@ -247,6 +272,7 @@ async function run() {
247
272
  testRefusesNestedBegin();
248
273
  testRefusesBadInput();
249
274
  testRefusesBadProfile();
275
+ testProtoKeyProfileRejected();
250
276
  testRefusesOversizeCards();
251
277
  testExtraPropertiesAllowlist();
252
278
  }
@@ -0,0 +1,157 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (c) blamejs contributors
3
+ "use strict";
4
+ /**
5
+ * scheduler.nextBaselineFire — earliest UTC ms strictly after `after`
6
+ * whose wall-clock in a timezone matches an HH:MM baseline.
7
+ *
8
+ * Pure function: known-answer vectors (UTC + a non-UTC zone + local
9
+ * clock), the strictly-after / next-day rollover semantics, and the
10
+ * malformed-input throws.
11
+ *
12
+ * Run standalone: `node test/layer-0-primitives/scheduler.test.js`
13
+ * Or via smoke: `node test/smoke.js`
14
+ */
15
+
16
+ var helpers = require("../helpers");
17
+ var b = helpers.b;
18
+ var check = helpers.check;
19
+
20
+ function _iso(ms) { return new Date(ms).toISOString(); }
21
+
22
+ function testNextBaselineFireKnownAnswerUtc() {
23
+ var when = b.scheduler.nextBaselineFire("02:30", "UTC", new Date("2026-05-09T01:00:00Z"));
24
+ check("nextBaselineFire UTC known-answer",
25
+ _iso(when) === "2026-05-09T02:30:00.000Z");
26
+ }
27
+
28
+ function testNextBaselineFireStrictlyAfter() {
29
+ // `after` sitting exactly on the target minute must roll to the NEXT day.
30
+ var when = b.scheduler.nextBaselineFire("02:30", "UTC", new Date("2026-05-09T02:30:00.000Z"));
31
+ check("nextBaselineFire is strictly-after (rolls a day when at target)",
32
+ _iso(when) === "2026-05-10T02:30:00.000Z");
33
+ }
34
+
35
+ function testNextBaselineFireRollsWhenPast() {
36
+ var when = b.scheduler.nextBaselineFire("02:30", "UTC", new Date("2026-05-09T05:00:00Z"));
37
+ check("nextBaselineFire rolls to next day when time already passed today",
38
+ _iso(when) === "2026-05-10T02:30:00.000Z");
39
+ }
40
+
41
+ function testNextBaselineFireNonUtcZone() {
42
+ // America/New_York on 2026-05-09 is EDT (UTC-4): 02:30 local = 06:30 UTC.
43
+ var when = b.scheduler.nextBaselineFire("02:30", "America/New_York", new Date("2026-05-09T00:00:00Z"));
44
+ check("nextBaselineFire honors a non-UTC timeZone",
45
+ _iso(when) === "2026-05-09T06:30:00.000Z");
46
+ }
47
+
48
+ function testNextBaselineFireLocalClock() {
49
+ // null timeZone follows the server's local clock — assert the local
50
+ // wall-clock of the result matches the requested HH:MM (TZ-independent).
51
+ var after = new Date("2026-05-09T00:00:00Z");
52
+ var when = b.scheduler.nextBaselineFire("13:45", null, after);
53
+ var d = new Date(when);
54
+ check("nextBaselineFire local-clock matches requested HH:MM",
55
+ d.getHours() === 13 && d.getMinutes() === 45);
56
+ check("nextBaselineFire local-clock result is strictly after `after`",
57
+ when > after.getTime());
58
+ }
59
+
60
+ function testNextBaselineFireRejectsBadInput() {
61
+ var t1 = null;
62
+ try { b.scheduler.nextBaselineFire("2:3", "UTC", new Date()); } catch (e) { t1 = e; }
63
+ check("nextBaselineFire rejects malformed HH:MM",
64
+ t1 && t1.code === "scheduler/invalid-baseline");
65
+ var t2 = null;
66
+ try { b.scheduler.nextBaselineFire("25:00", "UTC", new Date()); } catch (e) { t2 = e; }
67
+ check("nextBaselineFire rejects out-of-range hour",
68
+ t2 && t2.code === "scheduler/invalid-baseline");
69
+ var t3 = null;
70
+ try { b.scheduler.nextBaselineFire("12:60", "UTC", new Date()); } catch (e) { t3 = e; }
71
+ check("nextBaselineFire rejects out-of-range minute",
72
+ t3 && t3.code === "scheduler/invalid-baseline");
73
+ }
74
+
75
+ function _sortedSet(s) { return Array.from(s).sort(function (a, b) { return a - b; }); }
76
+ function _eq(a, b) { return JSON.stringify(a) === JSON.stringify(b); }
77
+
78
+ // A bare number followed by a step (`N/step`) is the Vixie-cron / crontab.guru
79
+ // shorthand for `N-max/step` — it fires at N and every `step` thereafter up to
80
+ // the field maximum, NOT just at the single value N. `5/15` in the minute
81
+ // field is 5,20,35,50 (the same way `*/15` is 0,15,30,45); before the fix it
82
+ // silently collapsed to {5}, so a task the operator meant to run every 15
83
+ // minutes ran once an hour. That silent under-firing is exactly the class the
84
+ // framework already rejects for over-range steps (v0.6.65).
85
+ function testCronBareNumberStep() {
86
+ var m = b.scheduler.parseCron("5/15 * * * *");
87
+ check("cron 5/15 minute expands to 5,20,35,50 (N/step == N-max/step)",
88
+ _eq(_sortedSet(m.minute), [5, 20, 35, 50]));
89
+
90
+ var m2 = b.scheduler.parseCron("10/20 * * * *");
91
+ check("cron 10/20 minute expands to 10,30,50",
92
+ _eq(_sortedSet(m2.minute), [10, 30, 50]));
93
+
94
+ // `0/15` must be identical to `*/15` — both start at 0 and step by 15.
95
+ var m3 = b.scheduler.parseCron("0/15 * * * *");
96
+ check("cron 0/15 minute equals */15 (0,15,30,45)",
97
+ _eq(_sortedSet(m3.minute), [0, 15, 30, 45]));
98
+
99
+ var h = b.scheduler.parseCron("* 1/6 * * *");
100
+ check("cron 1/6 hour expands to 1,7,13,19",
101
+ _eq(_sortedSet(h.hour), [1, 7, 13, 19]));
102
+
103
+ // dom starts at 1: `2/10` day-of-month = 2,12,22 (max 31).
104
+ var d = b.scheduler.parseCron("0 0 2/10 * *");
105
+ check("cron 2/10 dom expands to 2,12,22",
106
+ _eq(_sortedSet(d.dom), [2, 12, 22]));
107
+
108
+ // Regressions: forms that must be UNCHANGED by the fix.
109
+ var star = b.scheduler.parseCron("*/15 * * * *");
110
+ check("cron */15 unchanged (0,15,30,45)",
111
+ _eq(_sortedSet(star.minute), [0, 15, 30, 45]));
112
+ var bare = b.scheduler.parseCron("5 * * * *");
113
+ check("cron bare 5 (no step) is the single value {5}",
114
+ _eq(_sortedSet(bare.minute), [5]));
115
+ var list = b.scheduler.parseCron("0,30 * * * *");
116
+ check("cron list 0,30 unchanged",
117
+ _eq(_sortedSet(list.minute), [0, 30]));
118
+ var range = b.scheduler.parseCron("10-20/5 * * * *");
119
+ check("cron explicit range 10-20/5 unchanged (10,15,20)",
120
+ _eq(_sortedSet(range.minute), [10, 15, 20]));
121
+ }
122
+
123
+ // nextCronFire must actually fire at every step position of an `N/step`
124
+ // schedule — the real consumer path a queue cron-repeat / scheduler task
125
+ // drives. `5/15` fires at :05, :20, :35, :50, then :05 the next hour.
126
+ function testCronBareNumberStepNextFire() {
127
+ var cron = b.scheduler.parseCron("5/15 * * * *");
128
+ var t = new Date("2026-05-09T00:00:00Z");
129
+ var fires = [];
130
+ for (var i = 0; i < 5; i++) {
131
+ var next = b.scheduler.nextCronFire(cron, t, "UTC");
132
+ fires.push(new Date(next).toISOString().slice(11, 16));
133
+ t = new Date(next);
134
+ }
135
+ check("nextCronFire 5/15 fires at every 15-min step, not once an hour",
136
+ _eq(fires, ["00:05", "00:20", "00:35", "00:50", "01:05"]));
137
+ }
138
+
139
+ async function run() {
140
+ testNextBaselineFireKnownAnswerUtc();
141
+ testNextBaselineFireStrictlyAfter();
142
+ testNextBaselineFireRollsWhenPast();
143
+ testNextBaselineFireNonUtcZone();
144
+ testNextBaselineFireLocalClock();
145
+ testNextBaselineFireRejectsBadInput();
146
+ testCronBareNumberStep();
147
+ testCronBareNumberStepNextFire();
148
+ }
149
+
150
+ module.exports = { run: run };
151
+
152
+ if (require.main === module) {
153
+ run().then(
154
+ function () { console.log("[scheduler] OK — " + helpers.getChecks() + " checks passed"); },
155
+ function (e) { console.error("FAIL:", e); process.exit(1); }
156
+ );
157
+ }