@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
package/CHANGELOG.md CHANGED
@@ -8,6 +8,10 @@ upgrading across more than a few patches at a time.
8
8
 
9
9
  ## v0.5.x
10
10
 
11
+ - v0.5.13 (2026-07-25) — **Vendored framework refreshed from 0.16.3 to 0.17.22, inheriting a batch of security and correctness fixes across the rate-limit, CSP, cookie, data-subject-request, webhook, TLS, and SQL primitives the store composes.** Refreshes the framework the store is built on from 0.16.3 to 0.17.22, a broad security and robustness update to primitives the store wires into every request. All of the following are inherited without shop code changes. Per-route rate-limit buckets now key on the request path only, not the query string, so an abuser can no longer mint a fresh bucket per request with a rotating query parameter to slip past a login or checkout limiter. CSP source screening, cookie-prefix checks, and the CSRF cookie branch are now ASCII case-insensitive, closing a case-variant bypass of a Content-Security-Policy keyword and of the __Secure-/__Host- cookie-prefix guarantees. A data-subject-request (privacy export/erasure) whose subject has no indexable key now fails closed instead of matching every ticket, removing a cross-subject disclosure and erasure path. The shared outbound HTTP cache no longer serves an Authorization-bearing response across principals, the strict TLS hostname verifier no longer accepts a name smuggled through a quoted subjectAltName, and inbound webhook verification rejects a non-canonical signed timestamp. The minimum Node.js engine is unchanged at 24.18.0. **Changed:** *Vendored framework refreshed to 0.17.22* — Advances the vendored framework from 0.16.3 to 0.17.22. Beyond the security fixes above, the store inherits SQLite/D1 robustness — a paginated query with an OFFSET but no LIMIT now runs instead of raising a syntax error, and a CSV export degrades an out-of-range timestamp for one row instead of aborting the whole export — along with prototype-safe own-property lookups across the crypto, internationalization, and content-guard primitives and a current Public Suffix List snapshot for domain-scoped cookie and email-alignment decisions. The minimum Node.js engine is unchanged at 24.18.0. **Security:** *Per-route rate limiters can no longer be evaded with a rotating query string* — The framework's per-route rate limiters — mounted on the abusable login, signup, checkout, and gift-card endpoints — bucketed a client by the full request target including the query string, so a request stream carrying a rotating parameter such as ?nonce=1, ?nonce=2, ... minted a fresh bucket each time and never tripped the limit. Buckets now key on the path only, so the limit counts every hit to a route regardless of its query string. Inherited from the framework refresh; no configuration change. · *Case-variant bypass of CSP keywords and cookie prefixes closed* — Content-Security-Policy source screening and the __Secure-/__Host- cookie-prefix checks compared tokens case-sensitively, so a case-variant of a policy keyword or a cookie-prefix marker could slip past the guard; the CSRF cookie path was also missing the __Secure- branch. These comparisons are now ASCII case-insensitive and the CSRF branch is present, so the store's CSP and its prefixed session/CSRF cookies enforce their intended guarantees against a mixed-case forgery. Inherited from the framework refresh. · *Data-subject-request filter fails closed on a subject with no indexable key* — The data-subject-request store (the privacy export and erasure path) built its subject filter such that a subject carrying no indexable key matched every ticket, which could disclose or erase records across subjects. The filter now fails closed — a subject that cannot be keyed matches nothing — removing the cross-subject path. The store also now composes the shared SQL builder, inheriting its reserved-word and sealed-column handling. Inherited from the framework refresh. · *Shared outbound HTTP cache no longer crosses principals; TLS and webhook verifiers hardened* — Three verifier and cache fixes ride in with the refresh: the shared outbound HTTP response cache no longer returns an Authorization-bearing response to a different principal; the strict RFC 9525 TLS hostname verifier now parses subjectAltName quote-aware, so a hostname smuggled through a quoted SAN value can no longer be accepted; and inbound webhook signature verification rejects a non-canonical signed timestamp (scientific/hex/leading-zero forms) instead of treating it as valid. The declared algorithm on a verified JWT is now bound to the key's real type, closing an algorithm-confusion acceptance. Inherited from the framework refresh.
12
+
13
+ - v0.5.12 (2026-07-03) — **Operator password sign-in now has a brute-force lockout keyed on both the client IP and the target account.** Wires a brute-force lockout into the operator email+password sign-in (/admin/operators/signin), which previously relied only on the global per-IP rate limit and Argon2 verification. The sign-in now records each failed attempt and, before checking the password, refuses with 429 once the failure count for the request's IP or for the target operator account exceeds its threshold within a rolling 15-minute window. Keying on the account as well as the IP bounds a distributed guess — an attacker rotating IPs against one operator — that a per-IP limit alone can't see. The account threshold is deliberately higher than the per-IP threshold, so a legitimate operator is only ever account-locked under a genuine multi-IP attack, and the lock is a temporary cooldown that auto-expires with the window rather than a permanent lock an attacker could weaponize into a denial of service. The target account is resolved up front for the account key regardless of whether the email matches a real operator, and a lockout returns the same generic sign-in refusal, so no account-existence oracle is added. A successful sign-in clears the account's recent failures so an operator who mistyped isn't held under the window. The lockout composes the existing operator-session primitive and its already-deployed failed-login table — no schema change and no configuration; the failed-attempt log also feeds the operator security timeline. **Security:** *Brute-force lockout on the operator password sign-in* — The operator email+password sign-in had no per-account brute-force protection — only the global per-IP rate limit and Argon2 slowed guessing, so a distributed attack rotating IPs against a single operator account was unbounded. The sign-in now records each failed attempt and refuses with 429 (before verifying the password) once the failures for the request IP or the target account exceed their thresholds in a rolling 15-minute window. The account threshold is higher than the per-IP one, so a legitimate operator is only account-locked under a real multi-IP attack, and the lock auto-expires with the window (a cooldown, not a weaponizable permanent lock). The account is resolved whether or not the email is real and a lockout returns the same generic refusal, so there is no account-existence oracle; a successful sign-in clears the account's recent failures. Composes the existing operator-session primitive and its deployed failed-login table — no schema change, no configuration, and the failed-attempt log continues to feed the operator security timeline.
14
+
11
15
  - v0.5.11 (2026-07-03) — **A second customer or product import started while one is already running is refused instead of clobbering the first run's cancel handle.** Fixes a small concurrency defect in the customer and product CSV/row import runners. Each runner tracks a single in-flight run so the operator console's cancel action knows which run to stop. The run opener set that handle after writing the run row, so two runs started at nearly the same moment — an operator double-submitting the form or opening two tabs — could both open, and the second would overwrite the first's in-flight handle. A subsequent cancel would then target the wrong run, leaving the other running. The opener now reserves the single in-flight slot synchronously, before any await, so a second run is refused with a clear "an import is already in progress" error while the first proceeds; the reservation is released if the run fails to open, and the console can start a fresh import as soon as the running one finishes. **Fixed:** *Overlapping import runs no longer clobber the in-flight run handle* — The customer and product import runners keep one in-flight run handle so cancel targets the right run. Because the opener set that handle only after inserting the run row, two imports started concurrently could both open and the second would overwrite the first's handle, so a later cancel stopped the wrong run. The opener now claims the in-flight slot synchronously (before the first await, so the check-and-set can't interleave) and refuses a second concurrent run with an "import already in progress" error; the slot is released if the open fails, and a new import can start once the running one completes.
12
16
 
13
17
  - v0.5.10 (2026-07-03) — **Redirect rules with a regex source are screened for nested-quantifier catastrophic backtracking before they run on the request path.** Closes the last catastrophic-backtracking (ReDoS) gap in operator-authored redirect rules. A site-redirect of kind "regex" compiles the operator's source into a pattern that resolveForPath runs against the request path on every request. The define-time screen already refused backreferences and lookahead/lookbehind, but not a nested unbounded quantifier — a group whose body carries an unbounded quantifier that is itself repeated by one, such as (a+)+, (a*)*, (?:a+)+ or (.+)+ — so an operator could register a rule whose match time is super-linear in the path length, turning every matching request into a denial of service. The screen now also refuses that shape at define time, at any group depth, while continuing to accept linear patterns that merely use a quantified non-capturing group ((?:/page/[0-9]+)?, (?:section)*) or an optional quantified group. The match is exact — only a nested UNBOUNDED quantifier is refused; a single quantifier, an optional group, and bounded repetition are all allowed — so no well-formed redirect regex that worked before is rejected. **Security:** *Redirect regex sources refuse nested unbounded quantifiers at define time* — A redirect rule of kind "regex" runs its compiled pattern against the request path in resolveForPath. The define-time screen rejected backreferences and lookaround but not a nested unbounded quantifier ((a+)+, (a*)*, (?:a+)+, (.+)+, ((ab)+)+ at any depth) — the canonical ReDoS shape — so an operator could land a rule whose match is super-linear in the path length, letting a crafted request path stall the redirect resolver. The screen now refuses that shape when the rule is defined, with an error pointing the operator at a prefix/exact rule or splitting into multiple rows. Linear patterns are unaffected: a quantified non-capturing group, an optional quantified group, a single quantifier, and bounded repetition are all still accepted, so no redirect regex that worked before is rejected.
package/SECURITY.md CHANGED
@@ -130,7 +130,12 @@ node -e "
130
130
  bootstrap / break-glass owner credential; once staff accounts exist,
131
131
  treat it like a recovery key — store it offline and use the
132
132
  per-operator credentials day to day. Every operator-management action
133
- and every role-denied attempt lands in the audit chain.
133
+ and every role-denied attempt lands in the audit chain. The password
134
+ sign-in throttles brute force: repeated failures from one IP, or a
135
+ distributed guess against one account, are refused with a temporary
136
+ lockout (keyed on both the IP and the account, higher threshold on the
137
+ account, auto-expiring on a rolling window) on top of the global
138
+ rate limit and Argon2id.
134
139
  - **Guest order pages are access-gated, not capability URLs.** A guest
135
140
  order's confirmation page (name, address, items) requires the placing
136
141
  browser's sealed device cookie, the signed `?k=` token carried by the
package/lib/admin.js CHANGED
@@ -927,6 +927,21 @@ function mount(router, deps) {
927
927
  // booted) chains every operator-management action + role-denied attempt.
928
928
  var operatorAccounts = deps.operatorAccounts || null;
929
929
  var operatorAuditLog = deps.operatorAuditLog || null;
930
+ // Optional brute-force lockout for the operator password sign-in. When wired,
931
+ // the sign-in records failed attempts and refuses once the per-IP or (higher)
932
+ // per-account failure threshold trips within the rolling window. Best-effort:
933
+ // absent this dep the sign-in behaves exactly as before (rate-limit + Argon2).
934
+ var operatorSessions = deps.operatorSessions || null;
935
+
936
+ // Hash of the request's client IP, domain-separated for the operator-login
937
+ // lockout so it can't be correlated with any other IP-keyed store. Returns
938
+ // null when the IP can't be resolved (the lockout then keys on the account
939
+ // only, or is skipped for an unresolved-account attempt).
940
+ function _clientIpHash(req) {
941
+ var ip = b.requestHelpers.clientIp(req);
942
+ if (!ip) return null;
943
+ return b.crypto.namespaceHash("operator-login-ip", String(ip));
944
+ }
930
945
 
931
946
  // Unified order-event feed for the order-detail screen. When wired, the
932
947
  // /admin/orders/:id page renders a chronological timeline aggregated
@@ -14373,12 +14388,53 @@ function mount(router, deps) {
14373
14388
  var body = req.body || {};
14374
14389
  var email = typeof body.email === "string" ? body.email : "";
14375
14390
  var pass = typeof body.password === "string" ? body.password : "";
14391
+
14392
+ // Brute-force lockout (best-effort — only when operatorSessions is
14393
+ // wired). Resolve the target account up front for the per-account key:
14394
+ // the lookup runs whether or not the email matches a real operator, and
14395
+ // the refusal is the SAME generic form the bad-credential path returns,
14396
+ // so it adds no account-existence oracle. The lockout keys on BOTH the
14397
+ // client IP and the target account so a distributed (IP-rotating) guess
14398
+ // against one operator is bounded, not only per-IP.
14399
+ var ipHash = null, targetId = null;
14400
+ if (operatorSessions) {
14401
+ try { ipHash = _clientIpHash(req); } catch (_e) { ipHash = null; }
14402
+ try {
14403
+ var pre = await operatorAccounts.getByEmail(email);
14404
+ targetId = (pre && pre.id) ? pre.id : null;
14405
+ } catch (_e) { targetId = null; }
14406
+ if (ipHash) {
14407
+ var lock = null;
14408
+ try { lock = await operatorSessions.lockoutCheck(ipHash, { operator_id: targetId }); }
14409
+ catch (_e) { lock = null; }
14410
+ if (lock && lock.locked) {
14411
+ if (res.setHeader) res.setHeader("retry-after", String(lock.window_seconds || 900));
14412
+ return _sendHtml(res, 429, renderOperatorSignin({ shop_name: deps.shop_name, error: true, locked: true }));
14413
+ }
14414
+ }
14415
+ }
14416
+
14376
14417
  var account = null;
14377
14418
  try { account = await operatorAccounts.verifyPassword({ email: email, password: pass }); }
14378
14419
  catch (_e) { account = null; }
14379
14420
  if (!account) {
14421
+ // Record the failed attempt for the lockout (drop-silent — the lockout
14422
+ // is best-effort; a logging failure must not break the sign-in path).
14423
+ if (operatorSessions && ipHash) {
14424
+ try {
14425
+ await operatorSessions.recordFailedVerify({ ip_hash: ipHash, operator_id: targetId, reason: "bad-password" });
14426
+ } catch (_e) { /* drop-silent */ }
14427
+ }
14380
14428
  return _sendHtml(res, 401, renderOperatorSignin({ shop_name: deps.shop_name, error: true }));
14381
14429
  }
14430
+ // Successful sign-in clears THIS account's recent failures so a legit
14431
+ // operator who mistyped isn't held under the rolling window next time.
14432
+ // Scoped strictly to the signed-in account (never the IP) so signing in
14433
+ // can't erase another operator's failures logged from the same IP.
14434
+ if (operatorSessions) {
14435
+ try { await operatorSessions.clearFailures({ operator_id: account.id }); }
14436
+ catch (_e) { /* drop-silent */ }
14437
+ }
14382
14438
  try { _setAdminCookie(req, res, account); }
14383
14439
  catch (e) {
14384
14440
  if (e && e.code === "vault/not-initialized") {
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.5.11",
2
+ "version": "0.5.13",
3
3
  "assets": {
4
4
  "css/admin.css": {
5
5
  "integrity": "sha384-imfe0otYErcB8rr2h6KLSGTtStirysptpXETSPY4zLv3bZoIT75Lo1dOvkOav+xL",
@@ -148,7 +148,14 @@ var MAX_UA_CLASS_LEN = 64;
148
148
  var MAX_IP_HASH_LEN = 256;
149
149
  var MIN_IP_HASH_LEN = 1;
150
150
  var DEFAULT_LOCKOUT_WINDOW = 15 * 60; // allow:raw-time-literal — lockout window stored in seconds; C.TIME returns ms (15-minute rolling window)
151
- var DEFAULT_LOCKOUT_THRESH = 5; // 5 failures trips lockout
151
+ var DEFAULT_LOCKOUT_THRESH = 5; // 5 failures (per IP) trips lockout
152
+ // Per-account threshold is deliberately HIGHER than the per-IP one: a
153
+ // distributed (IP-rotating) brute force against a single account is the thing
154
+ // the account key catches, and keeping it well above the per-IP threshold
155
+ // means a legitimate operator is only ever account-locked under a genuine
156
+ // multi-IP attack — and only for the rolling window (a temporary cooldown, not
157
+ // a permanent lock an attacker could weaponize into a denial of service).
158
+ var DEFAULT_ACCOUNT_LOCKOUT_THRESH = 20;
152
159
  var MAX_LOCKOUT_WINDOW = 24 * 60 * 60; // allow:raw-time-literal — lockout window stored in seconds; C.TIME returns ms (sanity cap — one day)
153
160
  var MIN_LOCKOUT_THRESHOLD = 1;
154
161
  var MAX_LOCKOUT_THRESHOLD = 1000;
@@ -647,14 +654,70 @@ function create(opts) {
647
654
  [ip, since],
648
655
  );
649
656
  var count = Number((r.rows[0] && r.rows[0].n) || 0);
657
+
658
+ // Optional per-account keying. The per-IP count above can't see a
659
+ // distributed brute force (one attacker rotating IPs against one
660
+ // account); counting failures for the target operator across ALL IPs
661
+ // in the same window catches it. The account threshold is higher (see
662
+ // DEFAULT_ACCOUNT_LOCKOUT_THRESH) so a legitimate operator isn't locked
663
+ // by a handful of their own mistypes, only by a genuine multi-IP attack.
664
+ var accountThreshold = _lockoutThreshold(
665
+ lopts.account_threshold == null ? DEFAULT_ACCOUNT_LOCKOUT_THRESH : lopts.account_threshold);
666
+ var acctCount = 0;
667
+ if (lopts.operator_id != null) {
668
+ var oid = _uuid(lopts.operator_id, "operator_id");
669
+ var ar = await query(
670
+ "SELECT COUNT(*) AS n FROM operator_failed_logins " +
671
+ "WHERE operator_id = ?1 AND occurred_at >= ?2",
672
+ [oid, since],
673
+ );
674
+ acctCount = Number((ar.rows[0] && ar.rows[0].n) || 0);
675
+ }
676
+
677
+ var lockedByIp = count >= threshold;
678
+ var lockedByAccount = lopts.operator_id != null && acctCount >= accountThreshold;
650
679
  return {
651
- locked: count >= threshold,
652
- count: count,
653
- threshold: threshold,
654
- window_seconds: windowSec,
680
+ locked: lockedByIp || lockedByAccount,
681
+ locked_by: lockedByIp ? "ip" : (lockedByAccount ? "account" : null),
682
+ count: count,
683
+ threshold: threshold,
684
+ account_count: acctCount,
685
+ account_threshold: accountThreshold,
686
+ window_seconds: windowSec,
655
687
  };
656
688
  },
657
689
 
690
+ // ---- clearFailures --------------------------------------------------
691
+ //
692
+ // Delete the recent failed-attempt rows for the signed-in ACCOUNT after a
693
+ // SUCCESSFUL sign-in, so a legitimate operator who mistyped a few times
694
+ // isn't held under the rolling lockout window on the next attempt.
695
+ //
696
+ // Scoped to `operator_id` — which is REQUIRED. An optional `ip_hash` only
697
+ // NARROWS the deletion to that IP (AND), never widens it. This matters:
698
+ // clearing by IP (or account-OR-IP) would wipe OTHER operators' failed
699
+ // rows from the same IP, so a shared-IP attacker could brute-force a
700
+ // victim, sign in as themselves, and reset the victim's lockout. Clearing
701
+ // strictly the caller's own account can't touch another account's rows.
702
+ // Returns the row count cleared; a no-op when `operator_id` is absent.
703
+ clearFailures: async function (input) {
704
+ input = input || {};
705
+ if (typeof input !== "object") {
706
+ throw new TypeError("operator-sessions.clearFailures: input must be an object");
707
+ }
708
+ if (input.operator_id == null) return { cleared: 0 };
709
+ var oid = _uuid(input.operator_id, "operator_id");
710
+ var params = [oid];
711
+ var sql = "DELETE FROM operator_failed_logins WHERE operator_id = ?1";
712
+ if (input.ip_hash != null) {
713
+ var ip = _requiredString(input.ip_hash, "ip_hash", MIN_IP_HASH_LEN, MAX_IP_HASH_LEN);
714
+ params.push(ip);
715
+ sql += " AND ip_hash = ?2";
716
+ }
717
+ var res = await query(sql, params);
718
+ return { cleared: Number((res && res.rowCount) || 0) };
719
+ },
720
+
658
721
  // ---- recordFailedVerify ---------------------------------------------
659
722
  //
660
723
  // Append-only event log. The login middleware calls this on every