@blamejs/blamejs-shop 0.5.12 → 0.5.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (521) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/lib/asset-manifest.json +1 -1
  3. package/lib/vendor/MANIFEST.json +632 -416
  4. package/lib/vendor/blamejs/.clusterfuzzlite/Dockerfile +21 -10
  5. package/lib/vendor/blamejs/.clusterfuzzlite/build.sh +30 -9
  6. package/lib/vendor/blamejs/.github/dependabot.yml +8 -0
  7. package/lib/vendor/blamejs/.github/workflows/actions-lint.yml +3 -3
  8. package/lib/vendor/blamejs/.github/workflows/cflite_batch.yml +7 -2
  9. package/lib/vendor/blamejs/.github/workflows/cflite_pr.yml +7 -2
  10. package/lib/vendor/blamejs/.github/workflows/ci.yml +21 -21
  11. package/lib/vendor/blamejs/.github/workflows/codeql.yml +3 -3
  12. package/lib/vendor/blamejs/.github/workflows/npm-publish.yml +4 -4
  13. package/lib/vendor/blamejs/.github/workflows/release-container.yml +7 -7
  14. package/lib/vendor/blamejs/.github/workflows/scorecard.yml +3 -3
  15. package/lib/vendor/blamejs/.github/workflows/sha-to-tag-verify.yml +1 -1
  16. package/lib/vendor/blamejs/.gitignore +2 -0
  17. package/lib/vendor/blamejs/CHANGELOG.md +122 -0
  18. package/lib/vendor/blamejs/NOTICE +26 -1
  19. package/lib/vendor/blamejs/SECURITY.md +1 -1
  20. package/lib/vendor/blamejs/api-snapshot.json +207 -5
  21. package/lib/vendor/blamejs/docker/keycloak/realm-blamejs-test.json +29 -0
  22. package/lib/vendor/blamejs/examples/wiki/DEPLOY.md +1 -0
  23. package/lib/vendor/blamejs/examples/wiki/lib/build-app.js +31 -0
  24. package/lib/vendor/blamejs/examples/wiki/lib/source-comment-block-validator.js +109 -0
  25. package/lib/vendor/blamejs/examples/wiki/nginx.conf +106 -0
  26. package/lib/vendor/blamejs/examples/wiki/package-lock.json +1 -1
  27. package/lib/vendor/blamejs/examples/wiki/test/e2e.js +92 -0
  28. package/lib/vendor/blamejs/fuzz/asn1-der.fuzz.js +28 -0
  29. package/lib/vendor/blamejs/fuzz/cms-codec.fuzz.js +17 -0
  30. package/lib/vendor/blamejs/fuzz/link-header.fuzz.js +18 -0
  31. package/lib/vendor/blamejs/index.js +6 -0
  32. package/lib/vendor/blamejs/lib/a2a.js +4 -4
  33. package/lib/vendor/blamejs/lib/agent-idempotency.js +18 -2
  34. package/lib/vendor/blamejs/lib/agent-saga.js +36 -8
  35. package/lib/vendor/blamejs/lib/agent-snapshot.js +63 -6
  36. package/lib/vendor/blamejs/lib/app-shutdown.js +23 -20
  37. package/lib/vendor/blamejs/lib/archive-read.js +8 -0
  38. package/lib/vendor/blamejs/lib/archive-tar.js +12 -2
  39. package/lib/vendor/blamejs/lib/arg-parser.js +49 -5
  40. package/lib/vendor/blamejs/lib/asn1-der.js +12 -0
  41. package/lib/vendor/blamejs/lib/audit-sign.js +47 -1
  42. package/lib/vendor/blamejs/lib/audit.js +71 -8
  43. package/lib/vendor/blamejs/lib/auth/ciba.js +14 -2
  44. package/lib/vendor/blamejs/lib/auth/fido-mds3.js +58 -47
  45. package/lib/vendor/blamejs/lib/auth/jwt.js +34 -0
  46. package/lib/vendor/blamejs/lib/auth/oauth.js +90 -13
  47. package/lib/vendor/blamejs/lib/auth/oid4vci.js +20 -17
  48. package/lib/vendor/blamejs/lib/auth/openid-federation.js +214 -23
  49. package/lib/vendor/blamejs/lib/auth/saml.js +38 -20
  50. package/lib/vendor/blamejs/lib/auth/sd-jwt-vc.js +10 -4
  51. package/lib/vendor/blamejs/lib/backup/bundle.js +13 -3
  52. package/lib/vendor/blamejs/lib/backup/index.js +16 -5
  53. package/lib/vendor/blamejs/lib/backup/manifest.js +18 -5
  54. package/lib/vendor/blamejs/lib/base32.js +21 -0
  55. package/lib/vendor/blamejs/lib/break-glass.js +19 -10
  56. package/lib/vendor/blamejs/lib/bundler.js +5 -1
  57. package/lib/vendor/blamejs/lib/cache-status.js +3 -7
  58. package/lib/vendor/blamejs/lib/calendar.js +21 -1
  59. package/lib/vendor/blamejs/lib/cbor.js +12 -1
  60. package/lib/vendor/blamejs/lib/cert.js +29 -11
  61. package/lib/vendor/blamejs/lib/cli.js +94 -24
  62. package/lib/vendor/blamejs/lib/cloud-events.js +2 -2
  63. package/lib/vendor/blamejs/lib/cluster-provider-db.js +13 -3
  64. package/lib/vendor/blamejs/lib/codepoint-class.js +85 -0
  65. package/lib/vendor/blamejs/lib/compliance-ai-act-prohibited.js +8 -4
  66. package/lib/vendor/blamejs/lib/compliance-ai-act-transparency.js +19 -4
  67. package/lib/vendor/blamejs/lib/compliance-ai-act.js +6 -8
  68. package/lib/vendor/blamejs/lib/content-credentials.js +1 -1
  69. package/lib/vendor/blamejs/lib/content-digest.js +2 -1
  70. package/lib/vendor/blamejs/lib/cookies.js +13 -3
  71. package/lib/vendor/blamejs/lib/cose.js +31 -16
  72. package/lib/vendor/blamejs/lib/crypto-field.js +32 -0
  73. package/lib/vendor/blamejs/lib/crypto-oprf.js +11 -2
  74. package/lib/vendor/blamejs/lib/crypto-xwing.js +22 -4
  75. package/lib/vendor/blamejs/lib/crypto.js +314 -19
  76. package/lib/vendor/blamejs/lib/csp.js +11 -3
  77. package/lib/vendor/blamejs/lib/daemon.js +270 -24
  78. package/lib/vendor/blamejs/lib/dark-patterns.js +5 -2
  79. package/lib/vendor/blamejs/lib/db-declare-view.js +2 -2
  80. package/lib/vendor/blamejs/lib/db-query.js +34 -7
  81. package/lib/vendor/blamejs/lib/db.js +18 -6
  82. package/lib/vendor/blamejs/lib/dbsc.js +17 -0
  83. package/lib/vendor/blamejs/lib/dev.js +21 -2
  84. package/lib/vendor/blamejs/lib/dsr.js +157 -102
  85. package/lib/vendor/blamejs/lib/external-db.js +41 -2
  86. package/lib/vendor/blamejs/lib/file-upload.js +25 -7
  87. package/lib/vendor/blamejs/lib/flag-providers.js +27 -15
  88. package/lib/vendor/blamejs/lib/forms.js +113 -27
  89. package/lib/vendor/blamejs/lib/gate-contract.js +23 -10
  90. package/lib/vendor/blamejs/lib/gdpr-ropa.js +8 -1
  91. package/lib/vendor/blamejs/lib/guard-agent-registry.js +1 -1
  92. package/lib/vendor/blamejs/lib/guard-archive.js +2 -2
  93. package/lib/vendor/blamejs/lib/guard-cidr.js +27 -1
  94. package/lib/vendor/blamejs/lib/guard-graphql.js +30 -11
  95. package/lib/vendor/blamejs/lib/guard-html.js +26 -53
  96. package/lib/vendor/blamejs/lib/guard-image.js +24 -5
  97. package/lib/vendor/blamejs/lib/guard-imap-command.js +10 -2
  98. package/lib/vendor/blamejs/lib/guard-jmap.js +19 -3
  99. package/lib/vendor/blamejs/lib/guard-jwt.js +18 -2
  100. package/lib/vendor/blamejs/lib/guard-list-unsubscribe.js +2 -2
  101. package/lib/vendor/blamejs/lib/guard-managesieve-command.js +10 -2
  102. package/lib/vendor/blamejs/lib/guard-markdown.js +11 -24
  103. package/lib/vendor/blamejs/lib/guard-pdf.js +18 -2
  104. package/lib/vendor/blamejs/lib/guard-pop3-command.js +10 -2
  105. package/lib/vendor/blamejs/lib/guard-regex.js +8 -5
  106. package/lib/vendor/blamejs/lib/guard-svg.js +31 -32
  107. package/lib/vendor/blamejs/lib/guard-time.js +1 -1
  108. package/lib/vendor/blamejs/lib/guard-uuid.js +2 -2
  109. package/lib/vendor/blamejs/lib/html-balance.js +3 -3
  110. package/lib/vendor/blamejs/lib/http-client-cache.js +82 -4
  111. package/lib/vendor/blamejs/lib/http-client-cookie-jar.js +16 -1
  112. package/lib/vendor/blamejs/lib/http-client.js +39 -7
  113. package/lib/vendor/blamejs/lib/http-message-signature.js +35 -1
  114. package/lib/vendor/blamejs/lib/i18n-messageformat.js +31 -6
  115. package/lib/vendor/blamejs/lib/i18n.js +35 -21
  116. package/lib/vendor/blamejs/lib/incident-report.js +8 -1
  117. package/lib/vendor/blamejs/lib/ip-utils.js +11 -1
  118. package/lib/vendor/blamejs/lib/json-path.js +23 -1
  119. package/lib/vendor/blamejs/lib/jwk.js +20 -3
  120. package/lib/vendor/blamejs/lib/link-header.js +2 -1
  121. package/lib/vendor/blamejs/lib/log-stream-otlp-grpc.js +5 -1
  122. package/lib/vendor/blamejs/lib/log-stream-otlp.js +5 -1
  123. package/lib/vendor/blamejs/lib/log-stream.js +8 -3
  124. package/lib/vendor/blamejs/lib/mail-auth.js +123 -22
  125. package/lib/vendor/blamejs/lib/mail-bimi.js +1 -1
  126. package/lib/vendor/blamejs/lib/mail-bounce.js +8 -0
  127. package/lib/vendor/blamejs/lib/mail-crypto-pgp.js +46 -10
  128. package/lib/vendor/blamejs/lib/mail-dav.js +22 -3
  129. package/lib/vendor/blamejs/lib/mail-dkim.js +96 -30
  130. package/lib/vendor/blamejs/lib/mail-helo.js +6 -1
  131. package/lib/vendor/blamejs/lib/mail-scan.js +23 -16
  132. package/lib/vendor/blamejs/lib/mail-send-deliver.js +34 -8
  133. package/lib/vendor/blamejs/lib/mail-server-imap.js +3 -4
  134. package/lib/vendor/blamejs/lib/mail-server-managesieve.js +7 -11
  135. package/lib/vendor/blamejs/lib/mail-server-mx.js +93 -7
  136. package/lib/vendor/blamejs/lib/mail-server-registry.js +8 -2
  137. package/lib/vendor/blamejs/lib/mail.js +15 -5
  138. package/lib/vendor/blamejs/lib/metrics.js +268 -63
  139. package/lib/vendor/blamejs/lib/middleware/age-gate.js +7 -1
  140. package/lib/vendor/blamejs/lib/middleware/asyncapi-serve.js +1 -1
  141. package/lib/vendor/blamejs/lib/middleware/body-parser.js +19 -4
  142. package/lib/vendor/blamejs/lib/middleware/bot-guard.js +5 -9
  143. package/lib/vendor/blamejs/lib/middleware/csp-report.js +40 -8
  144. package/lib/vendor/blamejs/lib/middleware/csrf-protect.js +24 -10
  145. package/lib/vendor/blamejs/lib/middleware/dpop.js +10 -5
  146. package/lib/vendor/blamejs/lib/middleware/index.js +6 -1
  147. package/lib/vendor/blamejs/lib/middleware/nel.js +1 -1
  148. package/lib/vendor/blamejs/lib/middleware/openapi-serve.js +1 -1
  149. package/lib/vendor/blamejs/lib/middleware/rate-limit.js +12 -1
  150. package/lib/vendor/blamejs/lib/middleware/require-bound-key.js +1 -1
  151. package/lib/vendor/blamejs/lib/middleware/scim-server.js +1 -1
  152. package/lib/vendor/blamejs/lib/middleware/tus-upload.js +6 -2
  153. package/lib/vendor/blamejs/lib/mtls-ca.js +18 -2
  154. package/lib/vendor/blamejs/lib/network-dns-resolver.js +11 -1
  155. package/lib/vendor/blamejs/lib/network-dns.js +21 -2
  156. package/lib/vendor/blamejs/lib/network-tls.js +69 -7
  157. package/lib/vendor/blamejs/lib/nonce-store.js +9 -1
  158. package/lib/vendor/blamejs/lib/object-store/gcs.js +7 -0
  159. package/lib/vendor/blamejs/lib/object-store/sigv4.js +31 -0
  160. package/lib/vendor/blamejs/lib/observability-otlp-exporter.js +1 -1
  161. package/lib/vendor/blamejs/lib/outbox.js +1 -1
  162. package/lib/vendor/blamejs/lib/parsers/safe-ini.js +9 -1
  163. package/lib/vendor/blamejs/lib/parsers/safe-toml.js +10 -1
  164. package/lib/vendor/blamejs/lib/permissions.js +6 -3
  165. package/lib/vendor/blamejs/lib/pid-probe.js +55 -0
  166. package/lib/vendor/blamejs/lib/pqc-agent.js +8 -1
  167. package/lib/vendor/blamejs/lib/pqc-software.js +3 -3
  168. package/lib/vendor/blamejs/lib/pubsub.js +20 -9
  169. package/lib/vendor/blamejs/lib/queue-local.js +8 -1
  170. package/lib/vendor/blamejs/lib/queue-redis.js +5 -0
  171. package/lib/vendor/blamejs/lib/redact.js +54 -0
  172. package/lib/vendor/blamejs/lib/restore-bundle.js +10 -2
  173. package/lib/vendor/blamejs/lib/restore.js +19 -0
  174. package/lib/vendor/blamejs/lib/retention.js +12 -4
  175. package/lib/vendor/blamejs/lib/router.js +60 -6
  176. package/lib/vendor/blamejs/lib/safe-buffer.js +69 -0
  177. package/lib/vendor/blamejs/lib/safe-decompress.js +8 -2
  178. package/lib/vendor/blamejs/lib/safe-dns.js +25 -20
  179. package/lib/vendor/blamejs/lib/safe-ical.js +7 -3
  180. package/lib/vendor/blamejs/lib/safe-mime.js +12 -1
  181. package/lib/vendor/blamejs/lib/safe-object.js +80 -0
  182. package/lib/vendor/blamejs/lib/safe-path.js +52 -4
  183. package/lib/vendor/blamejs/lib/safe-redirect.js +10 -2
  184. package/lib/vendor/blamejs/lib/safe-schema.js +4 -1
  185. package/lib/vendor/blamejs/lib/safe-sieve.js +33 -1
  186. package/lib/vendor/blamejs/lib/safe-sql.js +88 -0
  187. package/lib/vendor/blamejs/lib/safe-vcard.js +7 -3
  188. package/lib/vendor/blamejs/lib/scheduler.js +8 -1
  189. package/lib/vendor/blamejs/lib/security-assert.js +6 -6
  190. package/lib/vendor/blamejs/lib/self-update-standalone-verifier.js +74 -27
  191. package/lib/vendor/blamejs/lib/self-update.js +517 -87
  192. package/lib/vendor/blamejs/lib/server-timing.js +2 -4
  193. package/lib/vendor/blamejs/lib/session.js +34 -12
  194. package/lib/vendor/blamejs/lib/sql.js +15 -1
  195. package/lib/vendor/blamejs/lib/ssrf-guard.js +52 -0
  196. package/lib/vendor/blamejs/lib/static.js +55 -13
  197. package/lib/vendor/blamejs/lib/storage.js +8 -2
  198. package/lib/vendor/blamejs/lib/subject.js +6 -1
  199. package/lib/vendor/blamejs/lib/tenant-quota.js +52 -13
  200. package/lib/vendor/blamejs/lib/tls-exporter.js +3 -3
  201. package/lib/vendor/blamejs/lib/tsa.js +34 -13
  202. package/lib/vendor/blamejs/lib/uri-template.js +8 -1
  203. package/lib/vendor/blamejs/lib/vault/index.js +13 -0
  204. package/lib/vendor/blamejs/lib/vc.js +44 -5
  205. package/lib/vendor/blamejs/lib/vendor/MANIFEST.json +26 -26
  206. package/lib/vendor/blamejs/lib/vendor/noble-ciphers.cjs +792 -1
  207. package/lib/vendor/blamejs/lib/vendor/noble-curves.cjs +3443 -1
  208. package/lib/vendor/blamejs/lib/vendor/noble-post-quantum.cjs +2737 -1
  209. package/lib/vendor/blamejs/lib/vendor/pki.cjs +39550 -13
  210. package/lib/vendor/blamejs/lib/vendor/public-suffix-list.dat +55 -53
  211. package/lib/vendor/blamejs/lib/vendor/public-suffix-list.data.js +5551 -5554
  212. package/lib/vendor/blamejs/lib/vendor/simplewebauthn-server.cjs +22459 -32
  213. package/lib/vendor/blamejs/lib/watcher.js +89 -17
  214. package/lib/vendor/blamejs/lib/webhook-dispatcher.js +25 -3
  215. package/lib/vendor/blamejs/lib/webhook.js +12 -2
  216. package/lib/vendor/blamejs/lib/ws-client.js +32 -1
  217. package/lib/vendor/blamejs/lib/xml-c14n.js +29 -1
  218. package/lib/vendor/blamejs/oss-fuzz/projects/blamejs/Dockerfile +1 -1
  219. package/lib/vendor/blamejs/package-lock.json +2 -2
  220. package/lib/vendor/blamejs/package.json +1 -1
  221. package/lib/vendor/blamejs/release-notes/v0.16.x.json +1462 -0
  222. package/lib/vendor/blamejs/release-notes/v0.17.0.json +31 -0
  223. package/lib/vendor/blamejs/release-notes/v0.17.1.json +31 -0
  224. package/lib/vendor/blamejs/release-notes/v0.17.10.json +30 -0
  225. package/lib/vendor/blamejs/release-notes/v0.17.11.json +22 -0
  226. package/lib/vendor/blamejs/release-notes/v0.17.12.json +18 -0
  227. package/lib/vendor/blamejs/release-notes/v0.17.13.json +77 -0
  228. package/lib/vendor/blamejs/release-notes/v0.17.14.json +40 -0
  229. package/lib/vendor/blamejs/release-notes/v0.17.15.json +18 -0
  230. package/lib/vendor/blamejs/release-notes/v0.17.16.json +27 -0
  231. package/lib/vendor/blamejs/release-notes/v0.17.17.json +31 -0
  232. package/lib/vendor/blamejs/release-notes/v0.17.18.json +18 -0
  233. package/lib/vendor/blamejs/release-notes/v0.17.19.json +18 -0
  234. package/lib/vendor/blamejs/release-notes/v0.17.2.json +26 -0
  235. package/lib/vendor/blamejs/release-notes/v0.17.20.json +43 -0
  236. package/lib/vendor/blamejs/release-notes/v0.17.21.json +26 -0
  237. package/lib/vendor/blamejs/release-notes/v0.17.22.json +18 -0
  238. package/lib/vendor/blamejs/release-notes/v0.17.3.json +43 -0
  239. package/lib/vendor/blamejs/release-notes/v0.17.4.json +35 -0
  240. package/lib/vendor/blamejs/release-notes/v0.17.5.json +26 -0
  241. package/lib/vendor/blamejs/release-notes/v0.17.6.json +26 -0
  242. package/lib/vendor/blamejs/release-notes/v0.17.7.json +35 -0
  243. package/lib/vendor/blamejs/release-notes/v0.17.8.json +22 -0
  244. package/lib/vendor/blamejs/release-notes/v0.17.9.json +26 -0
  245. package/lib/vendor/blamejs/scripts/validate-source-comment-blocks.js +4 -0
  246. package/lib/vendor/blamejs/scripts/vendor-update.sh +293 -9
  247. package/lib/vendor/blamejs/socket.yml +94 -0
  248. package/lib/vendor/blamejs/test/00-primitives.js +605 -0
  249. package/lib/vendor/blamejs/test/helpers/drivers.js +12 -9
  250. package/lib/vendor/blamejs/test/integration/audit-stack-mysql.test.js +90 -1
  251. package/lib/vendor/blamejs/test/integration/audit-stack-postgres.test.js +122 -1
  252. package/lib/vendor/blamejs/test/integration/data-layer-mysql.test.js +30 -0
  253. package/lib/vendor/blamejs/test/integration/data-layer-pg.test.js +29 -0
  254. package/lib/vendor/blamejs/test/integration/dsr-cluster-mysql.test.js +479 -0
  255. package/lib/vendor/blamejs/test/integration/dsr-cluster-pg.test.js +487 -0
  256. package/lib/vendor/blamejs/test/integration/federation-auth.test.js +313 -5
  257. package/lib/vendor/blamejs/test/integration/mail-dkim.test.js +80 -0
  258. package/lib/vendor/blamejs/test/integration/openid-federation-chain.test.js +275 -0
  259. package/lib/vendor/blamejs/test/integration/webhook-dispatcher-pg.test.js +96 -0
  260. package/lib/vendor/blamejs/test/layer-0-primitives/a2a-tasks.test.js +401 -0
  261. package/lib/vendor/blamejs/test/layer-0-primitives/acme.test.js +1649 -2
  262. package/lib/vendor/blamejs/test/layer-0-primitives/age-gate.test.js +33 -0
  263. package/lib/vendor/blamejs/test/layer-0-primitives/agent-idempotency.test.js +0 -0
  264. package/lib/vendor/blamejs/test/layer-0-primitives/agent-saga.test.js +60 -0
  265. package/lib/vendor/blamejs/test/layer-0-primitives/agent-snapshot.test.js +524 -0
  266. package/lib/vendor/blamejs/test/layer-0-primitives/api-encrypt.test.js +891 -0
  267. package/lib/vendor/blamejs/test/layer-0-primitives/app-shutdown.test.js +128 -1
  268. package/lib/vendor/blamejs/test/layer-0-primitives/archive-adapters.test.js +271 -0
  269. package/lib/vendor/blamejs/test/layer-0-primitives/archive-read.test.js +628 -1
  270. package/lib/vendor/blamejs/test/layer-0-primitives/archive-tar-read.test.js +0 -0
  271. package/lib/vendor/blamejs/test/layer-0-primitives/archive-wrap.test.js +227 -0
  272. package/lib/vendor/blamejs/test/layer-0-primitives/arg-parser.test.js +15 -0
  273. package/lib/vendor/blamejs/test/layer-0-primitives/asn1-der.test.js +73 -0
  274. package/lib/vendor/blamejs/test/layer-0-primitives/atomic-file.test.js +114 -0
  275. package/lib/vendor/blamejs/test/layer-0-primitives/audit-sign-anchor.test.js +141 -0
  276. package/lib/vendor/blamejs/test/layer-0-primitives/audit-tools.test.js +624 -0
  277. package/lib/vendor/blamejs/test/layer-0-primitives/audit.test.js +769 -0
  278. package/lib/vendor/blamejs/test/layer-0-primitives/auth-jwt-defenses.test.js +436 -0
  279. package/lib/vendor/blamejs/test/layer-0-primitives/auth-oauth.test.js +1697 -0
  280. package/lib/vendor/blamejs/test/layer-0-primitives/auth-oid4vp.test.js +495 -0
  281. package/lib/vendor/blamejs/test/layer-0-primitives/auth-password.test.js +500 -0
  282. package/lib/vendor/blamejs/test/layer-0-primitives/auth-saml.test.js +1809 -0
  283. package/lib/vendor/blamejs/test/layer-0-primitives/auth-status-list.test.js +243 -1
  284. package/lib/vendor/blamejs/test/layer-0-primitives/backup-index.test.js +2226 -0
  285. package/lib/vendor/blamejs/test/layer-0-primitives/backup-manifest-signature.test.js +183 -0
  286. package/lib/vendor/blamejs/test/layer-0-primitives/base32.test.js +105 -0
  287. package/lib/vendor/blamejs/test/layer-0-primitives/break-glass.test.js +693 -0
  288. package/lib/vendor/blamejs/test/layer-0-primitives/cache.test.js +603 -0
  289. package/lib/vendor/blamejs/test/layer-0-primitives/calendar.test.js +557 -0
  290. package/lib/vendor/blamejs/test/layer-0-primitives/case-insensitive-security-token-guard.test.js +214 -0
  291. package/lib/vendor/blamejs/test/layer-0-primitives/cbor.test.js +25 -0
  292. package/lib/vendor/blamejs/test/layer-0-primitives/cert.test.js +843 -6
  293. package/lib/vendor/blamejs/test/layer-0-primitives/ciba-authreqid-binding.test.js +77 -2
  294. package/lib/vendor/blamejs/test/layer-0-primitives/ciba.test.js +866 -0
  295. package/lib/vendor/blamejs/test/layer-0-primitives/clear-site-data.test.js +18 -0
  296. package/lib/vendor/blamejs/test/layer-0-primitives/cli-erase.test.js +19 -0
  297. package/lib/vendor/blamejs/test/layer-0-primitives/cli.test.js +2790 -0
  298. package/lib/vendor/blamejs/test/layer-0-primitives/cluster-lease-renewal-ttl.test.js +114 -0
  299. package/lib/vendor/blamejs/test/layer-0-primitives/cluster.test.js +1032 -0
  300. package/lib/vendor/blamejs/test/layer-0-primitives/cms-codec.test.js +575 -0
  301. package/lib/vendor/blamejs/test/layer-0-primitives/codebase-patterns.test.js +739 -1
  302. package/lib/vendor/blamejs/test/layer-0-primitives/codepoint-class.test.js +8 -0
  303. package/lib/vendor/blamejs/test/layer-0-primitives/compliance-ai-act.test.js +194 -0
  304. package/lib/vendor/blamejs/test/layer-0-primitives/compliance-lifecycle-proto-key.test.js +104 -0
  305. package/lib/vendor/blamejs/test/layer-0-primitives/compliance-sanctions.test.js +254 -0
  306. package/lib/vendor/blamejs/test/layer-0-primitives/content-credentials.test.js +613 -3
  307. package/lib/vendor/blamejs/test/layer-0-primitives/cookies.test.js +140 -0
  308. package/lib/vendor/blamejs/test/layer-0-primitives/cose.test.js +407 -0
  309. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-adversarial.test.js +352 -0
  310. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-field-derived-hash.test.js +32 -0
  311. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-field.test.js +575 -0
  312. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-hash-files-parallel.test.js +10 -0
  313. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-hash-stream.test.js +24 -0
  314. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-oprf.test.js +17 -0
  315. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-spki-pin.test.js +183 -0
  316. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-xwing.test.js +48 -0
  317. package/lib/vendor/blamejs/test/layer-0-primitives/crypto.test.js +345 -0
  318. package/lib/vendor/blamejs/test/layer-0-primitives/csp-report.test.js +58 -0
  319. package/lib/vendor/blamejs/test/layer-0-primitives/csv.test.js +48 -0
  320. package/lib/vendor/blamejs/test/layer-0-primitives/daemon.test.js +459 -1
  321. package/lib/vendor/blamejs/test/layer-0-primitives/dark-patterns.test.js +19 -0
  322. package/lib/vendor/blamejs/test/layer-0-primitives/db-query.test.js +1019 -0
  323. package/lib/vendor/blamejs/test/layer-0-primitives/db-raw-residency-gate.test.js +77 -0
  324. package/lib/vendor/blamejs/test/layer-0-primitives/db.test.js +1621 -0
  325. package/lib/vendor/blamejs/test/layer-0-primitives/ddl-change-control.test.js +462 -3
  326. package/lib/vendor/blamejs/test/layer-0-primitives/dnssec.test.js +323 -0
  327. package/lib/vendor/blamejs/test/layer-0-primitives/dpop-middleware-verify.test.js +562 -0
  328. package/lib/vendor/blamejs/test/layer-0-primitives/dsr.test.js +901 -1
  329. package/lib/vendor/blamejs/test/layer-0-primitives/dual-control.test.js +249 -0
  330. package/lib/vendor/blamejs/test/layer-0-primitives/external-db-migrate.test.js +561 -0
  331. package/lib/vendor/blamejs/test/layer-0-primitives/external-db.test.js +1214 -0
  332. package/lib/vendor/blamejs/test/layer-0-primitives/fal.test.js +21 -0
  333. package/lib/vendor/blamejs/test/layer-0-primitives/fedcm-dbsc.test.js +46 -20
  334. package/lib/vendor/blamejs/test/layer-0-primitives/federation-vc-suite.test.js +147 -3
  335. package/lib/vendor/blamejs/test/layer-0-primitives/fido-mds3.test.js +907 -38
  336. package/lib/vendor/blamejs/test/layer-0-primitives/file-upload-content-safety-skip-audit.test.js +29 -0
  337. package/lib/vendor/blamejs/test/layer-0-primitives/file-upload.test.js +1135 -0
  338. package/lib/vendor/blamejs/test/layer-0-primitives/flag.test.js +30 -0
  339. package/lib/vendor/blamejs/test/layer-0-primitives/forms.test.js +747 -0
  340. package/lib/vendor/blamejs/test/layer-0-primitives/gate-contract.test.js +1855 -0
  341. package/lib/vendor/blamejs/test/layer-0-primitives/gdpr-ropa.test.js +30 -0
  342. package/lib/vendor/blamejs/test/layer-0-primitives/guard-archive.test.js +86 -0
  343. package/lib/vendor/blamejs/test/layer-0-primitives/guard-auth.test.js +117 -0
  344. package/lib/vendor/blamejs/test/layer-0-primitives/guard-cidr.test.js +151 -0
  345. package/lib/vendor/blamejs/test/layer-0-primitives/guard-domain.test.js +422 -0
  346. package/lib/vendor/blamejs/test/layer-0-primitives/guard-filename.test.js +424 -0
  347. package/lib/vendor/blamejs/test/layer-0-primitives/{guard-gate-disposition-coverage.test.js → guard-gate-disposition.test.js} +1 -1
  348. package/lib/vendor/blamejs/test/layer-0-primitives/guard-graphql.test.js +340 -0
  349. package/lib/vendor/blamejs/test/layer-0-primitives/guard-html.test.js +29 -0
  350. package/lib/vendor/blamejs/test/layer-0-primitives/guard-idempotency-key.test.js +28 -0
  351. package/lib/vendor/blamejs/test/layer-0-primitives/guard-image.test.js +519 -45
  352. package/lib/vendor/blamejs/test/layer-0-primitives/guard-imap-command.test.js +0 -0
  353. package/lib/vendor/blamejs/test/layer-0-primitives/guard-jmap.test.js +51 -0
  354. package/lib/vendor/blamejs/test/layer-0-primitives/guard-jsonpath.test.js +66 -0
  355. package/lib/vendor/blamejs/test/layer-0-primitives/guard-jwt.test.js +436 -0
  356. package/lib/vendor/blamejs/test/layer-0-primitives/guard-managesieve-command.test.js +25 -0
  357. package/lib/vendor/blamejs/test/layer-0-primitives/guard-markdown.test.js +16 -0
  358. package/lib/vendor/blamejs/test/layer-0-primitives/guard-mime.test.js +86 -0
  359. package/lib/vendor/blamejs/test/layer-0-primitives/guard-oauth.test.js +140 -0
  360. package/lib/vendor/blamejs/test/layer-0-primitives/guard-pdf.test.js +80 -0
  361. package/lib/vendor/blamejs/test/layer-0-primitives/guard-pop3-command.test.js +27 -0
  362. package/lib/vendor/blamejs/test/layer-0-primitives/guard-regex.test.js +99 -0
  363. package/lib/vendor/blamejs/test/layer-0-primitives/guard-shell.test.js +76 -0
  364. package/lib/vendor/blamejs/test/layer-0-primitives/{guard-sql-coverage.test.js → guard-sql.test.js} +3 -3
  365. package/lib/vendor/blamejs/test/layer-0-primitives/guard-svg.test.js +524 -0
  366. package/lib/vendor/blamejs/test/layer-0-primitives/guard-template.test.js +71 -0
  367. package/lib/vendor/blamejs/test/layer-0-primitives/guard-time.test.js +92 -0
  368. package/lib/vendor/blamejs/test/layer-0-primitives/guard-uuid.test.js +86 -0
  369. package/lib/vendor/blamejs/test/layer-0-primitives/html-balance.test.js +38 -0
  370. package/lib/vendor/blamejs/test/layer-0-primitives/http-client-cache-authorization.test.js +347 -0
  371. package/lib/vendor/blamejs/test/layer-0-primitives/http-client-cache.test.js +908 -0
  372. package/lib/vendor/blamejs/test/layer-0-primitives/http-client.test.js +2874 -0
  373. package/lib/vendor/blamejs/test/layer-0-primitives/http-message-signature.test.js +643 -0
  374. package/lib/vendor/blamejs/test/layer-0-primitives/i18n-messageformat.test.js +38 -0
  375. package/lib/vendor/blamejs/test/layer-0-primitives/i18n.test.js +1153 -1
  376. package/lib/vendor/blamejs/test/layer-0-primitives/idempotency-key.test.js +494 -0
  377. package/lib/vendor/blamejs/test/layer-0-primitives/ip-utils.test.js +30 -0
  378. package/lib/vendor/blamejs/test/layer-0-primitives/jsdoc-example-execution.test.js +177 -0
  379. package/lib/vendor/blamejs/test/layer-0-primitives/json-path.test.js +103 -0
  380. package/lib/vendor/blamejs/test/layer-0-primitives/json-schema.test.js +214 -0
  381. package/lib/vendor/blamejs/test/layer-0-primitives/jwk.test.js +41 -0
  382. package/lib/vendor/blamejs/test/layer-0-primitives/jwt-external.test.js +276 -0
  383. package/lib/vendor/blamejs/test/layer-0-primitives/keychain.test.js +0 -0
  384. package/lib/vendor/blamejs/test/layer-0-primitives/log-stream.test.js +241 -0
  385. package/lib/vendor/blamejs/test/layer-0-primitives/log.test.js +106 -0
  386. package/lib/vendor/blamejs/test/layer-0-primitives/mail-agent.test.js +441 -0
  387. package/lib/vendor/blamejs/test/layer-0-primitives/mail-auth.test.js +2136 -4
  388. package/lib/vendor/blamejs/test/layer-0-primitives/mail-bimi.test.js +759 -12
  389. package/lib/vendor/blamejs/test/layer-0-primitives/mail-bounce.test.js +811 -1
  390. package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto-pgp-experimental.test.js +401 -3
  391. package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto-pgp.test.js +751 -8
  392. package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto-smime.test.js +864 -0
  393. package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto.test.js +110 -0
  394. package/lib/vendor/blamejs/test/layer-0-primitives/mail-dav.test.js +830 -1
  395. package/lib/vendor/blamejs/test/layer-0-primitives/mail-deploy.test.js +635 -86
  396. package/lib/vendor/blamejs/test/layer-0-primitives/mail-dkim.test.js +818 -0
  397. package/lib/vendor/blamejs/test/layer-0-primitives/mail-helo.test.js +27 -0
  398. package/lib/vendor/blamejs/test/layer-0-primitives/mail-scan.test.js +199 -0
  399. package/lib/vendor/blamejs/test/layer-0-primitives/mail-send-deliver.test.js +686 -2
  400. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-imap.test.js +778 -0
  401. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-jmap.test.js +1438 -0
  402. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-managesieve.test.js +449 -6
  403. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-mx.test.js +773 -2
  404. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-pop3.test.js +623 -3
  405. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-rate-limit.test.js +55 -0
  406. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-registry.test.js +13 -0
  407. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-submission.test.js +877 -1
  408. package/lib/vendor/blamejs/test/layer-0-primitives/mail-sieve.test.js +326 -0
  409. package/lib/vendor/blamejs/test/layer-0-primitives/mail-store-fts.test.js +55 -0
  410. package/lib/vendor/blamejs/test/layer-0-primitives/mail-store.test.js +242 -0
  411. package/lib/vendor/blamejs/test/layer-0-primitives/mail.test.js +1596 -2
  412. package/lib/vendor/blamejs/test/layer-0-primitives/mcp.test.js +440 -4
  413. package/lib/vendor/blamejs/test/layer-0-primitives/metrics-snapshot.test.js +89 -0
  414. package/lib/vendor/blamejs/test/layer-0-primitives/metrics.test.js +1230 -0
  415. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-assetlinks.test.js +113 -0
  416. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-body-parser.test.js +1169 -0
  417. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-bot-disclose.test.js +123 -0
  418. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-cookies.test.js +108 -0
  419. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-gpc.test.js +121 -0
  420. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-headers.test.js +163 -0
  421. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-host-allowlist.test.js +154 -0
  422. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-require-content-type.test.js +127 -0
  423. package/lib/vendor/blamejs/test/layer-0-primitives/{middleware-tus-upload-coverage.test.js → middleware-tus-upload.test.js} +45 -0
  424. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-web-app-manifest.test.js +132 -0
  425. package/lib/vendor/blamejs/test/layer-0-primitives/mtls-ca-crl-fingerprint-only.test.js +92 -0
  426. package/lib/vendor/blamejs/test/layer-0-primitives/network-dns-resolver.test.js +65 -0
  427. package/lib/vendor/blamejs/test/layer-0-primitives/network-dns.test.js +1727 -1
  428. package/lib/vendor/blamejs/test/layer-0-primitives/network-nts.test.js +699 -0
  429. package/lib/vendor/blamejs/test/layer-0-primitives/network-smtp-policy.test.js +1181 -0
  430. package/lib/vendor/blamejs/test/layer-0-primitives/network-tls.test.js +1876 -3
  431. package/lib/vendor/blamejs/test/layer-0-primitives/network.test.js +32 -0
  432. package/lib/vendor/blamejs/test/layer-0-primitives/nonce-store-enforce-replay-nonboolean.test.js +81 -0
  433. package/lib/vendor/blamejs/test/layer-0-primitives/ntp-check.test.js +122 -0
  434. package/lib/vendor/blamejs/test/layer-0-primitives/observability-tracing.test.js +378 -0
  435. package/lib/vendor/blamejs/test/layer-0-primitives/observability.test.js +77 -0
  436. package/lib/vendor/blamejs/test/layer-0-primitives/oid4vci.test.js +1016 -0
  437. package/lib/vendor/blamejs/test/layer-0-primitives/openid-federation.test.js +946 -0
  438. package/lib/vendor/blamejs/test/layer-0-primitives/outbox.test.js +818 -0
  439. package/lib/vendor/blamejs/test/layer-0-primitives/own-property-membership-guards.test.js +109 -0
  440. package/lib/vendor/blamejs/test/layer-0-primitives/parsers-safe-toml.test.js +543 -0
  441. package/lib/vendor/blamejs/test/layer-0-primitives/{parsers-safe-yaml-coverage.test.js → parsers-safe-yaml.test.js} +2 -2
  442. package/lib/vendor/blamejs/test/layer-0-primitives/parsers-standalone.test.js +73 -0
  443. package/lib/vendor/blamejs/test/layer-0-primitives/passkey.test.js +649 -0
  444. package/lib/vendor/blamejs/test/layer-0-primitives/permissions.test.js +524 -0
  445. package/lib/vendor/blamejs/test/layer-0-primitives/pqc-agent-curve.test.js +22 -0
  446. package/lib/vendor/blamejs/test/layer-0-primitives/pubsub.test.js +295 -0
  447. package/lib/vendor/blamejs/test/layer-0-primitives/queue-flow-repeat.test.js +36 -0
  448. package/lib/vendor/blamejs/test/layer-0-primitives/queue.test.js +83 -0
  449. package/lib/vendor/blamejs/test/layer-0-primitives/rate-limit-xff-spoofing.test.js +34 -0
  450. package/lib/vendor/blamejs/test/layer-0-primitives/redact.test.js +1031 -0
  451. package/lib/vendor/blamejs/test/layer-0-primitives/request-helpers.test.js +94 -0
  452. package/lib/vendor/blamejs/test/layer-0-primitives/require-bound-key.test.js +401 -0
  453. package/lib/vendor/blamejs/test/layer-0-primitives/restore-empty-manifest-wipe.test.js +154 -0
  454. package/lib/vendor/blamejs/test/layer-0-primitives/retention.test.js +600 -0
  455. package/lib/vendor/blamejs/test/layer-0-primitives/router-host-path-injection.test.js +231 -0
  456. package/lib/vendor/blamejs/test/layer-0-primitives/router-tls0rtt.test.js +21 -0
  457. package/lib/vendor/blamejs/test/layer-0-primitives/router.test.js +1277 -0
  458. package/lib/vendor/blamejs/test/layer-0-primitives/safe-async.test.js +133 -0
  459. package/lib/vendor/blamejs/test/layer-0-primitives/safe-buffer-linear-scans.test.js +14 -0
  460. package/lib/vendor/blamejs/test/layer-0-primitives/safe-buffer.test.js +80 -0
  461. package/lib/vendor/blamejs/test/layer-0-primitives/safe-decompress.test.js +28 -0
  462. package/lib/vendor/blamejs/test/layer-0-primitives/safe-dns.test.js +245 -0
  463. package/lib/vendor/blamejs/test/layer-0-primitives/safe-ical.test.js +32 -0
  464. package/lib/vendor/blamejs/test/layer-0-primitives/safe-ini.test.js +376 -0
  465. package/lib/vendor/blamejs/test/layer-0-primitives/safe-json.test.js +175 -0
  466. package/lib/vendor/blamejs/test/layer-0-primitives/safe-mime.test.js +518 -0
  467. package/lib/vendor/blamejs/test/layer-0-primitives/safe-object.test.js +62 -0
  468. package/lib/vendor/blamejs/test/layer-0-primitives/safe-path.test.js +30 -0
  469. package/lib/vendor/blamejs/test/layer-0-primitives/safe-schema.test.js +104 -0
  470. package/lib/vendor/blamejs/test/layer-0-primitives/safe-sql.test.js +142 -0
  471. package/lib/vendor/blamejs/test/layer-0-primitives/safe-url.test.js +112 -0
  472. package/lib/vendor/blamejs/test/layer-0-primitives/safe-vcard.test.js +26 -0
  473. package/lib/vendor/blamejs/test/layer-0-primitives/scheduler.test.js +157 -0
  474. package/lib/vendor/blamejs/test/layer-0-primitives/scim-server.test.js +396 -0
  475. package/lib/vendor/blamejs/test/layer-0-primitives/sd-jwt-vc.test.js +930 -0
  476. package/lib/vendor/blamejs/test/layer-0-primitives/security-assert.test.js +755 -82
  477. package/lib/vendor/blamejs/test/layer-0-primitives/self-update.test.js +1053 -0
  478. package/lib/vendor/blamejs/test/layer-0-primitives/session-device-binding.test.js +200 -0
  479. package/lib/vendor/blamejs/test/layer-0-primitives/session-strict-binding-missing-failclosed.test.js +110 -0
  480. package/lib/vendor/blamejs/test/layer-0-primitives/sigv4-bucket-ops.test.js +636 -0
  481. package/lib/vendor/blamejs/test/layer-0-primitives/sql-offset-without-limit.test.js +94 -0
  482. package/lib/vendor/blamejs/test/layer-0-primitives/sql.test.js +1190 -0
  483. package/lib/vendor/blamejs/test/layer-0-primitives/ssrf-guard.test.js +21 -0
  484. package/lib/vendor/blamejs/test/layer-0-primitives/static.test.js +850 -0
  485. package/lib/vendor/blamejs/test/layer-0-primitives/storage-presigned-url.test.js +146 -0
  486. package/lib/vendor/blamejs/test/layer-0-primitives/storage.test.js +621 -0
  487. package/lib/vendor/blamejs/test/layer-0-primitives/subject.test.js +47 -0
  488. package/lib/vendor/blamejs/test/layer-0-primitives/template.test.js +582 -0
  489. package/lib/vendor/blamejs/test/layer-0-primitives/tenant-quota.test.js +587 -25
  490. package/lib/vendor/blamejs/test/layer-0-primitives/time.test.js +11 -0
  491. package/lib/vendor/blamejs/test/layer-0-primitives/tsa.test.js +524 -63
  492. package/lib/vendor/blamejs/test/layer-0-primitives/uri-template.test.js +27 -0
  493. package/lib/vendor/blamejs/test/layer-0-primitives/vault-rotate.test.js +866 -0
  494. package/lib/vendor/blamejs/test/layer-0-primitives/vault.test.js +74 -0
  495. package/lib/vendor/blamejs/test/layer-0-primitives/vc.test.js +215 -0
  496. package/lib/vendor/blamejs/test/layer-0-primitives/watcher.test.js +550 -0
  497. package/lib/vendor/blamejs/test/layer-0-primitives/webhook-dispatcher.test.js +388 -0
  498. package/lib/vendor/blamejs/test/layer-0-primitives/webhook.test.js +262 -0
  499. package/lib/vendor/blamejs/test/layer-0-primitives/websocket.test.js +1294 -0
  500. package/lib/vendor/blamejs/test/layer-0-primitives/ws-client.test.js +629 -0
  501. package/lib/vendor/blamejs/test/layer-0-primitives/xml-c14n-attr-normalization.test.js +164 -0
  502. package/lib/vendor/blamejs/test/smoke.js +2 -0
  503. package/package.json +1 -1
  504. package/lib/vendor/blamejs/release-notes/v0.16.0.json +0 -44
  505. package/lib/vendor/blamejs/release-notes/v0.16.1.json +0 -36
  506. package/lib/vendor/blamejs/release-notes/v0.16.2.json +0 -71
  507. package/lib/vendor/blamejs/release-notes/v0.16.3.json +0 -71
  508. package/lib/vendor/blamejs/test/layer-0-primitives/acme-coverage.test.js +0 -441
  509. package/lib/vendor/blamejs/test/layer-0-primitives/auth-oauth-coverage.test.js +0 -482
  510. package/lib/vendor/blamejs/test/layer-0-primitives/auth-saml-coverage.test.js +0 -671
  511. package/lib/vendor/blamejs/test/layer-0-primitives/backup-index-coverage.test.js +0 -690
  512. package/lib/vendor/blamejs/test/layer-0-primitives/cli-coverage.test.js +0 -238
  513. package/lib/vendor/blamejs/test/layer-0-primitives/content-credentials-coverage.test.js +0 -319
  514. package/lib/vendor/blamejs/test/layer-0-primitives/keychain-coverage.test.js +0 -0
  515. package/lib/vendor/blamejs/test/layer-0-primitives/mail-auth-coverage.test.js +0 -437
  516. package/lib/vendor/blamejs/test/layer-0-primitives/mcp-coverage.test.js +0 -443
  517. package/lib/vendor/blamejs/test/layer-0-primitives/metrics-coverage.test.js +0 -395
  518. package/lib/vendor/blamejs/test/layer-0-primitives/network-smtp-policy-coverage.test.js +0 -565
  519. package/lib/vendor/blamejs/test/layer-0-primitives/router-coverage.test.js +0 -592
  520. package/lib/vendor/blamejs/test/layer-0-primitives/sql-coverage.test.js +0 -422
  521. package/lib/vendor/blamejs/test/layer-0-primitives/test-coverage.test.js +0 -573
@@ -39,6 +39,16 @@ function _baseConfig(port, overrides) {
39
39
  function _fakeS3(behavior) {
40
40
  behavior = behavior || {};
41
41
  var requests = [];
42
+ // Emit an S3-style <Error> body with a chosen status/code. Used by the
43
+ // failure-path tests so every PUT-based bucket op can be driven into its
44
+ // error/audit-failure branch without hand-rolling the XML per call site.
45
+ function sendXmlErr(res, spec) {
46
+ res.writeHead(spec.status, { "Content-Type": "application/xml" });
47
+ res.end(
48
+ "<Error><Code>" + spec.code + "</Code>" +
49
+ "<Message>" + (spec.message || spec.code) + "</Message></Error>"
50
+ );
51
+ }
42
52
  var server = http.createServer(function (req, res) {
43
53
  var chunks = [];
44
54
  req.on("data", function (c) { chunks.push(c); });
@@ -52,6 +62,12 @@ function _fakeS3(behavior) {
52
62
 
53
63
  // ListBuckets — GET / on the service URL.
54
64
  if (req.method === "GET" && path === "/" && !req.headers.host.startsWith("test-bucket")) {
65
+ if (behavior.onList) {
66
+ var lr = behavior.onList();
67
+ res.writeHead(lr.statusCode || 200, lr.headers || { "Content-Type": "application/xml" });
68
+ res.end(lr.body || "");
69
+ return;
70
+ }
55
71
  res.writeHead(200, { "Content-Type": "application/xml" });
56
72
  res.end(
57
73
  "<?xml version='1.0' encoding='UTF-8'?>" +
@@ -77,6 +93,7 @@ function _fakeS3(behavior) {
77
93
  return;
78
94
  }
79
95
  if (req.method === "PUT" && parsed.searchParams.has("cors")) {
96
+ if (behavior.corsErr) { sendXmlErr(res, behavior.corsErr); return; }
80
97
  res.writeHead(200);
81
98
  res.end();
82
99
  return;
@@ -89,6 +106,10 @@ function _fakeS3(behavior) {
89
106
  res.end(ol.body || "");
90
107
  return;
91
108
  }
109
+ if (req.method === "PUT" && behavior.objectLockPutErr) {
110
+ sendXmlErr(res, behavior.objectLockPutErr);
111
+ return;
112
+ }
92
113
  // PUT just acks
93
114
  res.writeHead(200);
94
115
  res.end();
@@ -102,6 +123,10 @@ function _fakeS3(behavior) {
102
123
  res.end(ret.body || "");
103
124
  return;
104
125
  }
126
+ if (req.method === "PUT" && behavior.retentionPutErr) {
127
+ sendXmlErr(res, behavior.retentionPutErr);
128
+ return;
129
+ }
105
130
  res.writeHead(200);
106
131
  res.end();
107
132
  return;
@@ -114,6 +139,10 @@ function _fakeS3(behavior) {
114
139
  res.end(lh.body || "");
115
140
  return;
116
141
  }
142
+ if (req.method === "PUT" && behavior.legalHoldPutErr) {
143
+ sendXmlErr(res, behavior.legalHoldPutErr);
144
+ return;
145
+ }
117
146
  res.writeHead(200);
118
147
  res.end();
119
148
  return;
@@ -231,6 +260,8 @@ function testBucketNameValidation() {
231
260
  shouldThrow("rejects trailing hyphen", "bucket-");
232
261
  shouldThrow("rejects underscore", "my_bucket");
233
262
  shouldThrow("rejects consecutive dots", "my..bucket");
263
+ shouldThrow("rejects non-string name", 123);
264
+ shouldThrow("rejects null name", null);
234
265
  // Valid names should not throw.
235
266
  v("valid-bucket-name");
236
267
  v("vbn1");
@@ -649,6 +680,8 @@ async function testSetObjectRetentionValidation() {
649
680
  check("retention validation: " + label,
650
681
  threw && codeRe.test(threw.code || ""));
651
682
  }
683
+ await shouldThrow("rejects null opts",
684
+ null, /INVALID_RETENTION/);
652
685
  await shouldThrow("rejects missing mode",
653
686
  { retainUntil: new Date(Date.now() + 1000) }, /INVALID_RETENTION/);
654
687
  await shouldThrow("rejects bad mode",
@@ -1019,6 +1052,594 @@ function testCanonicalPathSingleEncodeForS3() {
1019
1052
  sigv4.awsUriEncode("photo-\u{1F600}.jpg", true) === "photo-%F0%9F%98%80.jpg");
1020
1053
  }
1021
1054
 
1055
+ // ---- Factory default-resolution branches ----
1056
+
1057
+ function testFactoryDefaultsAndTrailingSlash() {
1058
+ // Missing secretAccessKey — the third required-credential guard (region +
1059
+ // accessKeyId are already covered; this closes the trio).
1060
+ var threwSecret = null;
1061
+ try {
1062
+ bucketOps.create({ region: "us-east-1", accessKeyId: "x" });
1063
+ } catch (e) { threwSecret = e; }
1064
+ check("factory: missing secretAccessKey rejected",
1065
+ threwSecret && /INVALID_CONFIG/.test(threwSecret.code || ""));
1066
+
1067
+ // No endpoint / allowedProtocols / allowInternal supplied — the factory
1068
+ // must fill each default (endpoint → https://s3.<region>.amazonaws.com,
1069
+ // allowedProtocols → ALLOW_HTTP_TLS, allowInternal → null) and still
1070
+ // return a usable ops object. No request is made here so no network is hit.
1071
+ var opsDefault = bucketOps.create({
1072
+ region: "us-east-1",
1073
+ accessKeyId: "AKIAIOSFODNN7EXAMPLE",
1074
+ secretAccessKey: "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
1075
+ });
1076
+ check("factory: defaults resolve to a usable ops object (protocol sigv4)",
1077
+ opsDefault && opsDefault.protocol === "sigv4");
1078
+ check("factory: default ops exposes create()",
1079
+ typeof opsDefault.create === "function");
1080
+
1081
+ // Trailing slash on the endpoint is trimmed so the derived bucket URLs
1082
+ // don't grow a double slash.
1083
+ var opsSlash = bucketOps.create({
1084
+ region: "us-east-1",
1085
+ accessKeyId: "x",
1086
+ secretAccessKey: "y",
1087
+ endpoint: "http://127.0.0.1:1/",
1088
+ allowedProtocols: b.safeUrl.ALLOW_HTTP_ALL,
1089
+ allowInternal: true,
1090
+ });
1091
+ check("factory: trailing-slash endpoint accepted (slash trimmed)",
1092
+ opsSlash && opsSlash.protocol === "sigv4");
1093
+ }
1094
+
1095
+ // ---- Lifecycle XML builder — adversarial / optional-field branches ----
1096
+
1097
+ function testLifecycleXmlAdversarial() {
1098
+ function shouldThrow(label, rules, codeRe) {
1099
+ var threw = null;
1100
+ try { bucketOps._buildLifecycleXmlForTest(rules); } catch (e) { threw = e; }
1101
+ check("lifecycle-adv: " + label, threw && codeRe.test(threw.code || ""));
1102
+ }
1103
+ // Length cap fires before the per-rule loop, so the rule contents are
1104
+ // irrelevant — a 1001-length array trips the S3 1000-rule ceiling.
1105
+ var tooMany = [];
1106
+ for (var i = 0; i < 1001; i++) tooMany.push({ expiration: { days: 1 } });
1107
+ shouldThrow("rejects > 1000 rules", tooMany, /INVALID_LIFECYCLE/);
1108
+ shouldThrow("rejects non-object rule", [null], /INVALID_LIFECYCLE/);
1109
+ shouldThrow("rejects empty-string id",
1110
+ [{ id: "", status: "Enabled", expiration: { days: 1 } }], /INVALID_LIFECYCLE/);
1111
+ shouldThrow("rejects non-string id",
1112
+ [{ id: 5, status: "Enabled", expiration: { days: 1 } }], /INVALID_LIFECYCLE/);
1113
+ shouldThrow("rejects abortIncompleteMultipartUpload.daysAfterInitiation = 0",
1114
+ [{ status: "Enabled",
1115
+ abortIncompleteMultipartUpload: { daysAfterInitiation: 0 } }],
1116
+ /INVALID_LIFECYCLE/);
1117
+
1118
+ // Optional expiration sub-fields (date + expiredObjectDeleteMarker) and
1119
+ // transition.date each emit their own element.
1120
+ var xml = bucketOps._buildLifecycleXmlForTest([{
1121
+ status: "Enabled",
1122
+ expiration: { date: "2030-01-01T00:00:00.000Z", expiredObjectDeleteMarker: true },
1123
+ transition: { date: "2029-01-01T00:00:00.000Z", storageClass: "GLACIER" },
1124
+ }]);
1125
+ check("lifecycle-adv: Expiration Date element emitted",
1126
+ /<Date>2030-01-01T00:00:00\.000Z<\/Date>/.test(xml));
1127
+ check("lifecycle-adv: ExpiredObjectDeleteMarker element emitted",
1128
+ /<ExpiredObjectDeleteMarker>true<\/ExpiredObjectDeleteMarker>/.test(xml));
1129
+ check("lifecycle-adv: Transition Date element emitted",
1130
+ /<Transition><Date>2029-01-01T00:00:00\.000Z<\/Date>/.test(xml));
1131
+
1132
+ // expiredObjectDeleteMarker:false takes the falsy ternary arm.
1133
+ var xmlFalse = bucketOps._buildLifecycleXmlForTest([{
1134
+ status: "Enabled",
1135
+ expiration: { days: 5, expiredObjectDeleteMarker: false },
1136
+ }]);
1137
+ check("lifecycle-adv: ExpiredObjectDeleteMarker false arm emitted",
1138
+ /<ExpiredObjectDeleteMarker>false<\/ExpiredObjectDeleteMarker>/.test(xmlFalse));
1139
+
1140
+ // Omitting status defaults it to Enabled (the `rule.status || "Enabled"` arm).
1141
+ var xmlNoStatus = bucketOps._buildLifecycleXmlForTest([{
1142
+ expiration: { days: 1 },
1143
+ }]);
1144
+ check("lifecycle-adv: omitted status defaults to Enabled",
1145
+ /<Status>Enabled<\/Status>/.test(xmlNoStatus));
1146
+ }
1147
+
1148
+ // ---- CORS XML builder — adversarial / optional-field / size-cap branches ----
1149
+
1150
+ function testCorsXmlAdversarial() {
1151
+ function shouldThrow(label, rules, codeRe) {
1152
+ var threw = null;
1153
+ try { bucketOps._buildCorsXmlForTest(rules); } catch (e) { threw = e; }
1154
+ check("cors-adv: " + label, threw && codeRe.test(threw.code || ""));
1155
+ }
1156
+ var tooMany = [];
1157
+ for (var i = 0; i < 101; i++) {
1158
+ tooMany.push({ allowedOrigins: ["*"], allowedMethods: ["GET"] });
1159
+ }
1160
+ shouldThrow("rejects > 100 rules", tooMany, /INVALID_CORS_RULE/);
1161
+ shouldThrow("rejects non-object rule", [null], /INVALID_CORS_RULE/);
1162
+
1163
+ // A rule with an id emits <ID>; the escaped-content path is exercised too.
1164
+ var xml = bucketOps._buildCorsXmlForTest([{
1165
+ id: "rule-1",
1166
+ allowedOrigins: ["https://a.example.com"],
1167
+ allowedMethods: ["GET"],
1168
+ }]);
1169
+ check("cors-adv: rule ID element emitted", /<ID>rule-1<\/ID>/.test(xml));
1170
+
1171
+ // Size cap: a single valid rule with thousands of allowed headers pushes the
1172
+ // serialized body past the 64 KB S3 ceiling.
1173
+ var bigHeaders = [];
1174
+ for (var h = 0; h < 3000; h++) bigHeaders.push("x-custom-header-" + h);
1175
+ var threwBig = null;
1176
+ try {
1177
+ bucketOps._buildCorsXmlForTest([{
1178
+ allowedOrigins: ["*"],
1179
+ allowedMethods: ["GET"],
1180
+ allowedHeaders: bigHeaders,
1181
+ }]);
1182
+ } catch (e) { threwBig = e; }
1183
+ check("cors-adv: > 64 KB configuration rejected",
1184
+ threwBig && /INVALID_CORS_RULE/.test(threwBig.code || "") &&
1185
+ /64 KB/.test(threwBig.message || ""));
1186
+ }
1187
+
1188
+ // ---- Object-key length guard ----
1189
+
1190
+ async function testObjectKeyTooLong() {
1191
+ var fake = _fakeS3();
1192
+ var port = await listenOnRandomPort(fake.server);
1193
+ try {
1194
+ var ops = bucketOps.create(_baseConfig(port));
1195
+ var longKey = new Array(1100).join("k"); // 1099 bytes > 1 KiB S3 limit
1196
+ var threw = null;
1197
+ try { await ops.getObjectRetention("my-bucket", longKey); }
1198
+ catch (e) { threw = e; }
1199
+ check("object-key: > 1024 bytes rejected with INVALID_KEY",
1200
+ threw && /INVALID_KEY/.test(threw.code || ""));
1201
+ } finally {
1202
+ await new Promise(function (r) { fake.server.close(function () { r(); }); });
1203
+ }
1204
+ }
1205
+
1206
+ // ---- ListBuckets XML-shape branches: empty + single ----
1207
+
1208
+ async function testListBucketsEmptyAndSingle() {
1209
+ var fakeEmpty = _fakeS3({
1210
+ onList: function () {
1211
+ return { statusCode: 200, body:
1212
+ "<?xml version='1.0'?><ListAllMyBucketsResult><Buckets></Buckets>" +
1213
+ "<Owner><ID>op</ID></Owner></ListAllMyBucketsResult>" };
1214
+ },
1215
+ });
1216
+ var portE = await listenOnRandomPort(fakeEmpty.server);
1217
+ try {
1218
+ var opsE = bucketOps.create(_baseConfig(portE));
1219
+ var none = await opsE.list();
1220
+ check("list: empty Buckets container yields []", Array.isArray(none) && none.length === 0);
1221
+ } finally {
1222
+ await new Promise(function (r) { fakeEmpty.server.close(function () { r(); }); });
1223
+ }
1224
+
1225
+ // A 200 whose body lacks the ListAllMyBucketsResult root (unexpected
1226
+ // backend response) degrades to [] via the `doc.<Root> || {}` default arm
1227
+ // rather than throwing.
1228
+ var fakeGarbage = _fakeS3({
1229
+ onList: function () {
1230
+ return { statusCode: 200, body: "<?xml version='1.0'?><Unexpected/>" };
1231
+ },
1232
+ });
1233
+ var portG = await listenOnRandomPort(fakeGarbage.server);
1234
+ try {
1235
+ var opsG = bucketOps.create(_baseConfig(portG));
1236
+ var garbage = await opsG.list();
1237
+ check("list: body without ListAllMyBucketsResult root yields []",
1238
+ Array.isArray(garbage) && garbage.length === 0);
1239
+ } finally {
1240
+ await new Promise(function (r) { fakeGarbage.server.close(function () { r(); }); });
1241
+ }
1242
+
1243
+ // A single <Bucket> is surfaced by the XML parser as an object, not an
1244
+ // array — the wrap-in-array branch must still produce a one-element list.
1245
+ // The bucket omits CreationDate + BucketRegion so the null-default arms of
1246
+ // both fields are exercised.
1247
+ var fakeOne = _fakeS3({
1248
+ onList: function () {
1249
+ return { statusCode: 200, body:
1250
+ "<?xml version='1.0'?><ListAllMyBucketsResult><Buckets>" +
1251
+ "<Bucket><Name>solo</Name></Bucket>" +
1252
+ "</Buckets></ListAllMyBucketsResult>" };
1253
+ },
1254
+ });
1255
+ var portO = await listenOnRandomPort(fakeOne.server);
1256
+ try {
1257
+ var opsO = bucketOps.create(_baseConfig(portO));
1258
+ var one = await opsO.list();
1259
+ check("list: single Bucket wrapped into a one-element array",
1260
+ one.length === 1 && one[0].name === "solo");
1261
+ check("list: single-bucket region defaults to null when absent",
1262
+ one[0].region === null);
1263
+ check("list: single-bucket creationDate defaults to null when absent",
1264
+ one[0].creationDate === null);
1265
+ } finally {
1266
+ await new Promise(function (r) { fakeOne.server.close(function () { r(); }); });
1267
+ }
1268
+ }
1269
+
1270
+ // ---- Object-lock config: years path + adversarial validation ----
1271
+
1272
+ async function testObjectLockYearsAndValidation() {
1273
+ var fake = _fakeS3({
1274
+ onGetObjectLock: function () {
1275
+ return { statusCode: 200, body:
1276
+ '<?xml version="1.0"?><ObjectLockConfiguration>' +
1277
+ '<ObjectLockEnabled>Enabled</ObjectLockEnabled>' +
1278
+ '<Rule><DefaultRetention><Mode>GOVERNANCE</Mode><Days>10</Days></DefaultRetention></Rule>' +
1279
+ '</ObjectLockConfiguration>' };
1280
+ },
1281
+ });
1282
+ var port = await listenOnRandomPort(fake.server);
1283
+ try {
1284
+ var ops = bucketOps.create(_baseConfig(port));
1285
+
1286
+ // years-based config: exercises the <Years> XML arm + the years echo
1287
+ // in the success result (days stays null).
1288
+ var rv = await ops.setObjectLockConfiguration("my-bucket",
1289
+ { mode: "COMPLIANCE", years: 3 });
1290
+ check("object-lock years: applied", rv.applied === true);
1291
+ check("object-lock years: years echoed, days null",
1292
+ rv.years === 3 && rv.days === null);
1293
+ var putReq = fake.requests[fake.requests.length - 1];
1294
+ check("object-lock years: body carries <Years>3</Years>",
1295
+ /<Years>3<\/Years>/.test(putReq.body.toString("utf8")));
1296
+
1297
+ // getObjectLockConfiguration returning Days (not Years) drives the
1298
+ // Number(def.Days) parse arm.
1299
+ var got = await ops.getObjectLockConfiguration("my-bucket");
1300
+ check("object-lock get: Days parsed as number",
1301
+ got.days === 10 && got.years === null && got.mode === "GOVERNANCE");
1302
+
1303
+ async function shouldThrow(label, opts, codeRe) {
1304
+ var threw = null;
1305
+ try { await ops.setObjectLockConfiguration("my-bucket", opts); }
1306
+ catch (e) { threw = e; }
1307
+ check("object-lock validation: " + label, threw && codeRe.test(threw.code || ""));
1308
+ }
1309
+ await shouldThrow("rejects non-object cfg", null, /INVALID_OBJECT_LOCK/);
1310
+ await shouldThrow("rejects neither days nor years",
1311
+ { mode: "GOVERNANCE" }, /INVALID_OBJECT_LOCK/);
1312
+ await shouldThrow("rejects negative years",
1313
+ { mode: "GOVERNANCE", years: -1 }, /INVALID_OBJECT_LOCK/);
1314
+ await shouldThrow("rejects fractional years",
1315
+ { mode: "GOVERNANCE", years: 1.5 }, /INVALID_OBJECT_LOCK/);
1316
+ } finally {
1317
+ await new Promise(function (r) { fake.server.close(function () { r(); }); });
1318
+ }
1319
+ }
1320
+
1321
+ // ---- PUT-op failure branches: throws + failure-audit emission ----
1322
+
1323
+ async function testPutOpFailurePaths() {
1324
+ var auditCap = _captureAudit();
1325
+ var obsCap = _captureObs();
1326
+ var fake = _fakeS3({
1327
+ lifecycleErr: { status: 500, code: "InternalError" },
1328
+ corsErr: { status: 500, code: "InternalError" },
1329
+ objectLockPutErr:{ status: 500, code: "InternalError" },
1330
+ retentionPutErr: { status: 500, code: "InternalError" },
1331
+ legalHoldPutErr: { status: 500, code: "InternalError" },
1332
+ // GET-before-PUT in setObjectRetention must resolve to "not configured"
1333
+ // so the flow falls through to the failing PUT.
1334
+ onGetObjectRetention: function () {
1335
+ return { statusCode: 400, body:
1336
+ '<?xml version="1.0"?><Error><Code>NoSuchObjectLockConfiguration</Code>' +
1337
+ '<Message>no retention</Message></Error>' };
1338
+ },
1339
+ });
1340
+ var port = await listenOnRandomPort(fake.server);
1341
+ try {
1342
+ var ops = bucketOps.create(Object.assign({}, _baseConfig(port), {
1343
+ audit: auditCap,
1344
+ observability: obsCap,
1345
+ }));
1346
+
1347
+ async function expectFailure(label, action, fn) {
1348
+ var threw = null;
1349
+ try { await fn(); } catch (e) { threw = e; }
1350
+ check("put-fail: " + label + " throws on 5xx", threw !== null);
1351
+ var rows = auditCap.byAction(action).filter(function (r) { return r.outcome === "failure"; });
1352
+ check("put-fail: " + label + " emits failure audit row", rows.length >= 1);
1353
+ check("put-fail: " + label + " emits failure obs counter",
1354
+ obsCap.byName(action).some(function (e) {
1355
+ return e.labels && e.labels.outcome === "failure";
1356
+ }));
1357
+ }
1358
+
1359
+ await expectFailure("setLifecycle", "objectstore.bucket.setLifecycle", function () {
1360
+ return ops.setLifecycle("logs", [{ status: "Enabled",
1361
+ abortIncompleteMultipartUpload: { daysAfterInitiation: 7 } }]);
1362
+ });
1363
+ await expectFailure("setCorsRules", "objectstore.bucket.setCorsRules", function () {
1364
+ return ops.setCorsRules("public", [{
1365
+ allowedOrigins: ["https://a.example.com"], allowedMethods: ["GET"] }]);
1366
+ });
1367
+ await expectFailure("setObjectLockConfiguration",
1368
+ "objectstore.bucket.setObjectLockConfiguration", function () {
1369
+ return ops.setObjectLockConfiguration("my-bucket", { mode: "GOVERNANCE", days: 30 });
1370
+ });
1371
+ await expectFailure("setObjectRetention", "objectstore.object.setRetention", function () {
1372
+ return ops.setObjectRetention("my-bucket", "k",
1373
+ { mode: "GOVERNANCE", retainUntil: new Date(Date.now() + 60000) });
1374
+ });
1375
+ await expectFailure("setObjectLegalHold", "objectstore.object.setLegalHold", function () {
1376
+ return ops.setObjectLegalHold("my-bucket", "k", "ON");
1377
+ });
1378
+ } finally {
1379
+ await new Promise(function (r) { fake.server.close(function () { r(); }); });
1380
+ }
1381
+ }
1382
+
1383
+ // ---- GET-op re-throw when the error is NOT a "not configured" state ----
1384
+
1385
+ async function testGetOpsRethrowRealError() {
1386
+ function realErr() {
1387
+ return { statusCode: 500, body:
1388
+ '<?xml version="1.0"?><Error><Code>InternalError</Code>' +
1389
+ '<Message>backend exploded</Message></Error>' };
1390
+ }
1391
+ var fake = _fakeS3({
1392
+ onGetObjectLock: realErr,
1393
+ onGetObjectRetention: realErr,
1394
+ onGetLegalHold: realErr,
1395
+ });
1396
+ var port = await listenOnRandomPort(fake.server);
1397
+ try {
1398
+ var ops = bucketOps.create(_baseConfig(port));
1399
+
1400
+ var threwLock = null;
1401
+ try { await ops.getObjectLockConfiguration("my-bucket"); }
1402
+ catch (e) { threwLock = e; }
1403
+ check("get-rethrow: getObjectLockConfiguration re-throws a 500 (not swallowed)",
1404
+ threwLock && threwLock.statusCode === 500);
1405
+
1406
+ var threwRet = null;
1407
+ try { await ops.getObjectRetention("my-bucket", "k"); }
1408
+ catch (e) { threwRet = e; }
1409
+ check("get-rethrow: getObjectRetention re-throws a 500 (not swallowed)",
1410
+ threwRet && threwRet.statusCode === 500);
1411
+
1412
+ var threwLh = null;
1413
+ try { await ops.getObjectLegalHold("my-bucket", "k"); }
1414
+ catch (e) { threwLh = e; }
1415
+ check("get-rethrow: getObjectLegalHold re-throws a 500 (not swallowed)",
1416
+ threwLh && threwLh.statusCode === 500);
1417
+ } finally {
1418
+ await new Promise(function (r) { fake.server.close(function () { r(); }); });
1419
+ }
1420
+ }
1421
+
1422
+ // ---- get* defensive parse defaults (unexpected / empty backend document) ----
1423
+
1424
+ async function testGetOpsParseDefaults() {
1425
+ // A 200 whose body lacks the expected root element (a quirk of some
1426
+ // S3-compatible stores) must degrade to clean nulls, not throw — exercising
1427
+ // the `doc.<Root> || {}` and `<field> || null` default arms.
1428
+ function otherDoc() {
1429
+ return { statusCode: 200, body: '<?xml version="1.0"?><Unexpected/>' };
1430
+ }
1431
+ var fake = _fakeS3({
1432
+ onGetObjectLock: otherDoc,
1433
+ onGetObjectRetention: otherDoc,
1434
+ onGetLegalHold: otherDoc,
1435
+ });
1436
+ var port = await listenOnRandomPort(fake.server);
1437
+ try {
1438
+ var ops = bucketOps.create(_baseConfig(port));
1439
+
1440
+ var lock = await ops.getObjectLockConfiguration("my-bucket");
1441
+ check("parse-defaults: object-lock unexpected doc → enabled:false + null fields",
1442
+ lock.enabled === false && lock.mode === null &&
1443
+ lock.days === null && lock.years === null);
1444
+
1445
+ var ret = await ops.getObjectRetention("my-bucket", "k");
1446
+ check("parse-defaults: retention unexpected doc → mode:null, retainUntil:null",
1447
+ ret.mode === null && ret.retainUntil === null);
1448
+
1449
+ var lh = await ops.getObjectLegalHold("my-bucket", "k");
1450
+ check("parse-defaults: legal-hold unexpected doc → status:null",
1451
+ lh.status === null);
1452
+ } finally {
1453
+ await new Promise(function (r) { fake.server.close(function () { r(); }); });
1454
+ }
1455
+ }
1456
+
1457
+ // ---- createBucket generic (non-409) failure + auditFailures:false ----
1458
+
1459
+ async function testCreateGenericFailureAndAuditFailuresOff() {
1460
+ // A non-409 failure is NOT remapped to a BUCKET_* code — the raw HTTP
1461
+ // error surfaces, and the failure-audit row carries its code.
1462
+ var auditCap = _captureAudit();
1463
+ var fake = _fakeS3({ createErr: { status: 500, code: "InternalError" } });
1464
+ var port = await listenOnRandomPort(fake.server);
1465
+ try {
1466
+ var ops = bucketOps.create(Object.assign({}, _baseConfig(port), { audit: auditCap }));
1467
+ var threw = null;
1468
+ try { await ops.create("boom"); } catch (e) { threw = e; }
1469
+ check("create-generic-fail: non-409 error surfaces raw (HTTP_ERROR)",
1470
+ threw && threw.statusCode === 500 &&
1471
+ !/BUCKET_ALREADY_OWNED|BUCKET_NAME_TAKEN/.test(threw.code || ""));
1472
+ var rows = auditCap.byAction("objectstore.bucket.create")
1473
+ .filter(function (r) { return r.outcome === "failure"; });
1474
+ check("create-generic-fail: failure audit row emitted", rows.length === 1);
1475
+ } finally {
1476
+ await new Promise(function (r) { fake.server.close(function () { r(); }); });
1477
+ }
1478
+
1479
+ // auditFailures:false suppresses the failure audit row while the op still
1480
+ // throws and the observability counter still fires.
1481
+ var auditCap2 = _captureAudit();
1482
+ var obsCap2 = _captureObs();
1483
+ var fake2 = _fakeS3({ createErr: { status: 500, code: "InternalError" } });
1484
+ var port2 = await listenOnRandomPort(fake2.server);
1485
+ try {
1486
+ var ops2 = bucketOps.create(Object.assign({}, _baseConfig(port2), {
1487
+ audit: auditCap2,
1488
+ observability: obsCap2,
1489
+ auditFailures: false,
1490
+ }));
1491
+ var threw2 = null;
1492
+ try { await ops2.create("boom2"); } catch (e) { threw2 = e; }
1493
+ check("auditFailures:false: op still throws", threw2 !== null);
1494
+ check("auditFailures:false: no failure audit row emitted",
1495
+ auditCap2.byAction("objectstore.bucket.create").length === 0);
1496
+ check("auditFailures:false: obs failure counter still fires",
1497
+ obsCap2.byName("objectstore.bucket.create").some(function (e) {
1498
+ return e.labels && e.labels.outcome === "failure";
1499
+ }));
1500
+ } finally {
1501
+ await new Promise(function (r) { fake2.server.close(function () { r(); }); });
1502
+ }
1503
+ }
1504
+
1505
+ // ---- deleteBucket generic (non-404, non-409) failure ----
1506
+
1507
+ async function testDeleteGenericFailure() {
1508
+ var auditCap = _captureAudit();
1509
+ var fake = _fakeS3({ deleteErr: { status: 500, code: "InternalError" } });
1510
+ var port = await listenOnRandomPort(fake.server);
1511
+ try {
1512
+ var ops = bucketOps.create(Object.assign({}, _baseConfig(port), { audit: auditCap }));
1513
+ var threw = null;
1514
+ try { await ops.delete("boom"); } catch (e) { threw = e; }
1515
+ check("delete-generic-fail: non-404/409 error surfaces + throws",
1516
+ threw && threw.statusCode === 500);
1517
+ var rows = auditCap.byAction("objectstore.bucket.delete")
1518
+ .filter(function (r) { return r.outcome === "failure"; });
1519
+ check("delete-generic-fail: failure audit row emitted", rows.length === 1);
1520
+ } finally {
1521
+ await new Promise(function (r) { fake.server.close(function () { r(); }); });
1522
+ }
1523
+ }
1524
+
1525
+ // ---- setObjectRetention COMPLIANCE pre-check (WORM defense-in-depth) ----
1526
+
1527
+ async function testSetObjectRetentionComplianceGuards() {
1528
+ // Existing retention on the object is COMPLIANCE, 30 days out. The client-
1529
+ // side pre-check (GET-before-PUT) must refuse a bypass and refuse any
1530
+ // shortening — even before the backend gets the PUT.
1531
+ var existingUntil = new Date(Date.now() + 30 * 24 * 60 * 60 * 1000);
1532
+ var fake = _fakeS3({
1533
+ onGetObjectRetention: function () {
1534
+ return { statusCode: 200, body:
1535
+ '<?xml version="1.0"?><Retention><Mode>COMPLIANCE</Mode>' +
1536
+ '<RetainUntilDate>' + existingUntil.toISOString() + '</RetainUntilDate></Retention>' };
1537
+ },
1538
+ });
1539
+ var port = await listenOnRandomPort(fake.server);
1540
+ try {
1541
+ var ops = bucketOps.create(_baseConfig(port));
1542
+
1543
+ // bypassGovernance against a COMPLIANCE lock — refused client-side.
1544
+ var threwBypass = null;
1545
+ try {
1546
+ await ops.setObjectRetention("my-bucket", "k", {
1547
+ mode: "COMPLIANCE",
1548
+ retainUntil: new Date(Date.now() + 60 * 24 * 60 * 60 * 1000),
1549
+ bypassGovernance: true,
1550
+ });
1551
+ } catch (e) { threwBypass = e; }
1552
+ check("compliance-guard: bypassGovernance on COMPLIANCE is refused",
1553
+ threwBypass && /compliance-bypass-refused/.test(threwBypass.code || ""));
1554
+
1555
+ // Proposing an EARLIER retainUntil (shortening) — refused client-side.
1556
+ var threwShort = null;
1557
+ try {
1558
+ await ops.setObjectRetention("my-bucket", "k", {
1559
+ mode: "COMPLIANCE",
1560
+ retainUntil: new Date(Date.now() + 7 * 24 * 60 * 60 * 1000),
1561
+ });
1562
+ } catch (e) { threwShort = e; }
1563
+ check("compliance-guard: shortening a COMPLIANCE retention is refused",
1564
+ threwShort && /compliance-shortening-refused/.test(threwShort.code || ""));
1565
+
1566
+ // EXTENDING (later retainUntil, no bypass) is allowed — the pre-check
1567
+ // passes and the PUT proceeds.
1568
+ var extended = await ops.setObjectRetention("my-bucket", "k", {
1569
+ mode: "COMPLIANCE",
1570
+ retainUntil: new Date(Date.now() + 90 * 24 * 60 * 60 * 1000),
1571
+ });
1572
+ check("compliance-guard: extending a COMPLIANCE retention proceeds to PUT",
1573
+ extended.applied === true);
1574
+ } finally {
1575
+ await new Promise(function (r) { fake.server.close(function () { r(); }); });
1576
+ }
1577
+ }
1578
+
1579
+ // The pre-check GET is value-add, NOT load-bearing: when it fails with a
1580
+ // non-compliance error the flow falls through to the PUT so the backend's own
1581
+ // enforcement is authoritative.
1582
+ async function testSetObjectRetentionPreCheckFallsThrough() {
1583
+ var fake = _fakeS3({
1584
+ onGetObjectRetention: function () {
1585
+ return { statusCode: 500, body:
1586
+ '<?xml version="1.0"?><Error><Code>InternalError</Code>' +
1587
+ '<Message>pre-check backend error</Message></Error>' };
1588
+ },
1589
+ // No retentionPutErr → the PUT itself succeeds.
1590
+ });
1591
+ var port = await listenOnRandomPort(fake.server);
1592
+ try {
1593
+ var ops = bucketOps.create(_baseConfig(port));
1594
+ var rv = await ops.setObjectRetention("my-bucket", "k", {
1595
+ mode: "GOVERNANCE",
1596
+ retainUntil: new Date(Date.now() + 60000),
1597
+ });
1598
+ check("pre-check-fallthrough: a failed GET pre-check still lets the PUT proceed",
1599
+ rv.applied === true && rv.mode === "GOVERNANCE");
1600
+ } finally {
1601
+ await new Promise(function (r) { fake.server.close(function () { r(); }); });
1602
+ }
1603
+ }
1604
+
1605
+ // ---- Virtual-hosted-style URL construction (pathStyle:false) ----
1606
+
1607
+ async function testVirtualHostStyleUrlConstruction() {
1608
+ // With pathStyle:false the bucket name is prepended as a subdomain of the
1609
+ // endpoint host (`<bucket>.<host>`) for both bucket-level and object-level
1610
+ // URLs — the else arm of _bucketUrl / _objectUrl. Against an IPv4 endpoint
1611
+ // the WHATWG URL host-setter refuses the subdomain prefix (you cannot make
1612
+ // an IP literal into a domain), so the constructed URL keeps the IP host and
1613
+ // the request still lands on the fake server. The subresource query + path
1614
+ // are what we assert; the branch under test is exercised either way.
1615
+ var fake = _fakeS3();
1616
+ var port = await listenOnRandomPort(fake.server);
1617
+ try {
1618
+ var ops = bucketOps.create(_baseConfig(port, { pathStyle: false }));
1619
+
1620
+ // Bucket-level: virtual-host addressing sets pathname "/" (no /<bucket>/
1621
+ // prefix). Against the IP endpoint the create still completes.
1622
+ var created = await ops.create("vh-bucket");
1623
+ check("vhost: bucket-level create completes via the else-arm URL builder",
1624
+ created.created === true);
1625
+ var createReq = fake.requests[fake.requests.length - 1];
1626
+ check("vhost: bucket-level URL uses root path (no path-style /<bucket>/ prefix)",
1627
+ createReq.url === "/" && createReq.method === "PUT");
1628
+
1629
+ // Object-level: pathname is "/<key>" (no /<bucket>/ prefix). The
1630
+ // legal-hold subresource query survives the virtual-host code path.
1631
+ fake.requests.length = 0;
1632
+ var held = await ops.setObjectLegalHold("vh-bucket", "some-key", "ON");
1633
+ check("vhost: object-level legal-hold completes via the else-arm URL builder",
1634
+ held.applied === true && held.status === "ON");
1635
+ var objReq = fake.requests[fake.requests.length - 1];
1636
+ check("vhost: object-level URL is /<key> (no /<bucket>/ prefix) + carries ?legal-hold",
1637
+ objReq.url.indexOf("/some-key") === 0 && objReq.url.indexOf("legal-hold") !== -1);
1638
+ } finally {
1639
+ await new Promise(function (r) { fake.server.close(function () { r(); }); });
1640
+ }
1641
+ }
1642
+
1022
1643
  // bucketOps dispatches every request through the shared httpClient keep-alive
1023
1644
  // transport pool; a cached client socket finalizes its destroy on a later
1024
1645
  // event-loop turn, past the forked worker's grace window. Reset the pool, then
@@ -1068,6 +1689,21 @@ async function run() {
1068
1689
  await testAuditObservabilityWiring();
1069
1690
  await testAuditSuccessFalseDisablesSuccessAudit();
1070
1691
  await testPerCallActorOverrideHonored();
1692
+ // Uncovered error / adversarial / defensive / option-default branches.
1693
+ testFactoryDefaultsAndTrailingSlash();
1694
+ testLifecycleXmlAdversarial();
1695
+ testCorsXmlAdversarial();
1696
+ await testObjectKeyTooLong();
1697
+ await testListBucketsEmptyAndSingle();
1698
+ await testObjectLockYearsAndValidation();
1699
+ await testPutOpFailurePaths();
1700
+ await testGetOpsRethrowRealError();
1701
+ await testGetOpsParseDefaults();
1702
+ await testCreateGenericFailureAndAuditFailuresOff();
1703
+ await testDeleteGenericFailure();
1704
+ await testSetObjectRetentionComplianceGuards();
1705
+ await testSetObjectRetentionPreCheckFallsThrough();
1706
+ await testVirtualHostStyleUrlConstruction();
1071
1707
  } finally {
1072
1708
  await _drainTcpHandles();
1073
1709
  }