@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
@@ -7,6 +7,22 @@ var helpers = require("../helpers");
7
7
  var b = helpers.b;
8
8
  var check = helpers.check;
9
9
 
10
+ var SCIM_USER = "urn:ietf:params:scim:schemas:core:2.0:User";
11
+ var SCIM_GROUP = "urn:ietf:params:scim:schemas:core:2.0:Group";
12
+ var SCIM_LIST = "urn:ietf:params:scim:api:messages:2.0:ListResponse";
13
+ var SCIM_BULK_REQ = "urn:ietf:params:scim:api:messages:2.0:BulkRequest";
14
+
15
+ // Build a streaming (EventEmitter) request that emits its whole body as a
16
+ // single chunk + `end` on the next tick — this drives the collectStream
17
+ // read path in _readJsonBody / _readBulkBody (the branch taken when the
18
+ // framework has NOT already buffered req.body). Reuses the canonical
19
+ // b.testing.bodyReq helper and re-targets its URL for SCIM routing.
20
+ function _streamReq(method, url, bodyStr) {
21
+ var req = b.testing.bodyReq(method, {}, bodyStr);
22
+ req.url = url;
23
+ return req;
24
+ }
25
+
10
26
  function _mkRes() {
11
27
  var hdrs = {};
12
28
  var sc = null;
@@ -95,6 +111,12 @@ async function run() {
95
111
 
96
112
  await _runBulkTests();
97
113
  await _runBulkRefOrderingTests();
114
+ await _runBearerAuthTests();
115
+ await _runSingletonCrudTests();
116
+ await _runFilterParsingTests();
117
+ await _runConfigAndMetadataTests();
118
+ await _runBulkErrorBranchTests();
119
+ await _runBulkBodyShapeTests();
98
120
  }
99
121
 
100
122
  // RFC 7644 §3.7 — /Bulk operations.
@@ -508,6 +530,380 @@ async function _runBulkRefOrderingTests() {
508
530
  check("maxPageSize negative refused at create()", threwPage2);
509
531
  }
510
532
 
533
+ // Bearer authentication gate (RFC 7644 §2 / RFC 6750). The bearer
534
+ // callback is the single authorization seam; every failure mode must
535
+ // fail CLOSED — no request reaches an adapter without a resolved actor.
536
+ async function _runBearerAuthTests() {
537
+ var users = _mkUsers();
538
+ var bearerCalls = [];
539
+ var mw = b.middleware.scimServer({
540
+ basePath: "/scim/v2",
541
+ users: users,
542
+ bearer: async function (token) {
543
+ bearerCalls.push(token);
544
+ if (token === "good") return { id: "admin-1", token: token };
545
+ if (token === "boom") throw new Error("token introspection endpoint down");
546
+ return null; // any other token → unauthorized
547
+ },
548
+ });
549
+
550
+ // Discovery endpoints are served BEFORE the bearer gate — reachable
551
+ // without a token so clients can bootstrap.
552
+ var pub = await _drive(mw, { method: "GET", url: "/scim/v2/ServiceProviderConfig", headers: {} });
553
+ check("bearer: SPC served without a token", pub.res._sc() === 200);
554
+
555
+ // No Authorization header → 401 with a Bearer challenge.
556
+ var noAuth = await _drive(mw, { method: "GET", url: "/scim/v2/Users", headers: {} });
557
+ check("bearer: missing header → 401", noAuth.res._sc() === 401);
558
+ check("bearer: missing header → Bearer challenge", noAuth.res._hdrs["www-authenticate"] === "Bearer");
559
+ check("bearer: missing header → detail", JSON.parse(noAuth.res._body()).detail === "Missing Bearer token");
560
+
561
+ // A non-Bearer scheme is rejected the same way (regex miss).
562
+ var basic = await _drive(mw, { method: "GET", url: "/scim/v2/Users", headers: { authorization: "Basic dXNlcjpwYXNz" } });
563
+ check("bearer: non-Bearer scheme → 401 Missing",
564
+ basic.res._sc() === 401 && JSON.parse(basic.res._body()).detail === "Missing Bearer token");
565
+
566
+ // Oversized Authorization header (>= 8 KiB) is refused by the length
567
+ // cap before the regex ever runs, and the callback is NOT invoked.
568
+ var before = bearerCalls.length;
569
+ var big = await _drive(mw, { method: "GET", url: "/scim/v2/Users", headers: { authorization: "Bearer " + "a".repeat(8300) } });
570
+ check("bearer: oversized header → 401", big.res._sc() === 401);
571
+ check("bearer: oversized header skips callback", bearerCalls.length === before);
572
+
573
+ // Well-formed token the callback rejects (returns falsy) → 401 with an
574
+ // invalid_token challenge.
575
+ var unk = await _drive(mw, { method: "GET", url: "/scim/v2/Users", headers: { authorization: "Bearer nope" } });
576
+ check("bearer: rejected token → 401", unk.res._sc() === 401);
577
+ check("bearer: rejected token → invalid_token", /invalid_token/.test(unk.res._hdrs["www-authenticate"] || ""));
578
+ check("bearer: rejected token → detail", JSON.parse(unk.res._body()).detail === "Bearer token rejected");
579
+
580
+ // The callback THROWS — the catch must swallow and leave actor null so
581
+ // the request fails closed (an introspection outage never authorizes).
582
+ var thrown = await _drive(mw, { method: "GET", url: "/scim/v2/Users", headers: { authorization: "Bearer boom" } });
583
+ check("bearer: callback throw → fail-closed 401", thrown.res._sc() === 401);
584
+ check("bearer: callback throw → invalid_token", /invalid_token/.test(thrown.res._hdrs["www-authenticate"] || ""));
585
+
586
+ // Accepted token → the resolved actor is threaded into the adapter ctx.
587
+ var seenActor = [];
588
+ users.list = async function (q, ctx) { seenActor.push(ctx && ctx.actor); return { totalResults: 0, Resources: [] }; };
589
+ var ok = await _drive(mw, { method: "GET", url: "/scim/v2/Users", headers: { authorization: "Bearer good" } });
590
+ check("bearer: accepted token → 200", ok.res._sc() === 200);
591
+ check("bearer: actor threaded into adapter", seenActor.length === 1 && seenActor[0] && seenActor[0].id === "admin-1");
592
+ }
593
+
594
+ // The singleton resource surface: GET (list + by-id), POST, PUT, PATCH,
595
+ // DELETE, plus the error/defensive branches around each.
596
+ async function _runSingletonCrudTests() {
597
+ var users = _mkUsers();
598
+ var mw = b.middleware.scimServer({ basePath: "/scim/v2", users: users });
599
+
600
+ // POST create (pre-buffered object body).
601
+ var created = await _drive(mw, { method: "POST", url: "/scim/v2/Users", headers: {},
602
+ body: { schemas: [SCIM_USER], userName: "alice" } });
603
+ check("crud: POST → 201", created.res._sc() === 201);
604
+ var uid = JSON.parse(created.res._body()).id;
605
+ check("crud: POST returns created id", typeof uid === "string");
606
+
607
+ // POST missing the required schema → 400 (routed through middleware
608
+ // .catch, exercising the err.statusCode branch).
609
+ var noSchema = await _drive(mw, { method: "POST", url: "/scim/v2/Users", headers: {}, body: { userName: "x" } });
610
+ check("crud: POST missing schema → 400", noSchema.res._sc() === 400);
611
+ check("crud: POST missing schema → invalidValue", JSON.parse(noSchema.res._body()).scimType === "invalidValue");
612
+
613
+ // POST whose body parses to a NON-object scalar → 400 (the assertSchema
614
+ // body-shape guard, distinct from the schemas-array check).
615
+ var scalar = await _drive(mw, { method: "POST", url: "/scim/v2/Users", headers: {}, body: Buffer.from('"scalar"') });
616
+ check("crud: POST non-object body → 400", scalar.res._sc() === 400);
617
+
618
+ // Streaming POST body (no pre-buffered req.body) → collectStream path.
619
+ var streamed = await _drive(mw, _streamReq("POST", "/scim/v2/Users",
620
+ JSON.stringify({ schemas: [SCIM_USER], userName: "streamed" })));
621
+ check("crud: streaming POST body → 201", streamed.res._sc() === 201);
622
+
623
+ // GET by id — found.
624
+ var got = await _drive(mw, { method: "GET", url: "/scim/v2/Users/" + uid, headers: {} });
625
+ check("crud: GET by id found → 200", got.res._sc() === 200 && JSON.parse(got.res._body()).id === uid);
626
+
627
+ // GET by id — missing → 404 notFound.
628
+ var missing = await _drive(mw, { method: "GET", url: "/scim/v2/Users/does-not-exist", headers: {} });
629
+ check("crud: GET by id missing → 404",
630
+ missing.res._sc() === 404 && JSON.parse(missing.res._body()).scimType === "notFound");
631
+
632
+ // PUT replace.
633
+ var put = await _drive(mw, { method: "PUT", url: "/scim/v2/Users/" + uid, headers: {},
634
+ body: { schemas: [SCIM_USER], userName: "alice-2" } });
635
+ check("crud: PUT → 200", put.res._sc() === 200 && JSON.parse(put.res._body()).userName === "alice-2");
636
+
637
+ // PUT missing schema → 400.
638
+ var putNoSchema = await _drive(mw, { method: "PUT", url: "/scim/v2/Users/" + uid, headers: {}, body: { userName: "nope" } });
639
+ check("crud: PUT missing schema → 400", putNoSchema.res._sc() === 400);
640
+
641
+ // PATCH with valid Operations.
642
+ var patch = await _drive(mw, { method: "PATCH", url: "/scim/v2/Users/" + uid, headers: {},
643
+ body: { Operations: [{ op: "replace", path: "active", value: false }] } });
644
+ check("crud: PATCH → 200", patch.res._sc() === 200);
645
+
646
+ // PATCH without Operations → 400 invalidValue.
647
+ var patchEmpty = await _drive(mw, { method: "PATCH", url: "/scim/v2/Users/" + uid, headers: {}, body: {} });
648
+ check("crud: PATCH no Operations → 400",
649
+ patchEmpty.res._sc() === 400 && JSON.parse(patchEmpty.res._body()).scimType === "invalidValue");
650
+
651
+ // PATCH op missing the 'op' verb → 400.
652
+ var patchBadOp = await _drive(mw, { method: "PATCH", url: "/scim/v2/Users/" + uid, headers: {},
653
+ body: { Operations: [{ path: "active", value: 1 }] } });
654
+ check("crud: PATCH op missing verb → 400", patchBadOp.res._sc() === 400);
655
+
656
+ // PATCH op with an unsupported verb → 400.
657
+ var patchBadVerb = await _drive(mw, { method: "PATCH", url: "/scim/v2/Users/" + uid, headers: {},
658
+ body: { Operations: [{ op: "frobnicate", path: "active" }] } });
659
+ check("crud: PATCH invalid verb → 400", patchBadVerb.res._sc() === 400);
660
+
661
+ // DELETE.
662
+ var del = await _drive(mw, { method: "DELETE", url: "/scim/v2/Users/" + uid, headers: {} });
663
+ check("crud: DELETE → 204", del.res._sc() === 204);
664
+ check("crud: DELETE removed record", users._records.get(uid) === undefined);
665
+
666
+ // An unsupported method on an existing id → 405 noTarget.
667
+ var opt = await _drive(mw, { method: "OPTIONS", url: "/scim/v2/Users/" + uid, headers: {} });
668
+ check("crud: unsupported method → 405",
669
+ opt.res._sc() === 405 && JSON.parse(opt.res._body()).scimType === "noTarget");
670
+
671
+ // A resource path whose adapter isn't configured → 404 "not configured".
672
+ var g404 = await _drive(mw, { method: "GET", url: "/scim/v2/Groups", headers: {} });
673
+ check("crud: unconfigured /Groups → 404", g404.res._sc() === 404);
674
+
675
+ // An adapter rejection (no statusCode) propagates to the middleware
676
+ // .catch → generic 500.
677
+ var boomUsers = _mkUsers();
678
+ boomUsers.read = async function () { throw new Error("db exploded"); };
679
+ var boomMw = b.middleware.scimServer({ basePath: "/scim/v2", users: boomUsers });
680
+ var boom = await _drive(boomMw, { method: "GET", url: "/scim/v2/Users/anything", headers: {} });
681
+ check("crud: adapter rejection → 500 via catch", boom.res._sc() === 500);
682
+
683
+ // GET list — pagination + attribute selection threaded to the adapter.
684
+ var listUsers = _mkUsers();
685
+ var listSeen = null;
686
+ listUsers.list = async function (q) { listSeen = q; return { totalResults: 3, Resources: [{ id: "u-1" }] }; };
687
+ var listMw = b.middleware.scimServer({ basePath: "/scim/v2", users: listUsers });
688
+ var list = await _drive(listMw, { method: "GET",
689
+ url: "/scim/v2/Users?count=5&startIndex=2&sortBy=userName&sortOrder=descending&attributes=userName,active&excludedAttributes=password",
690
+ headers: {} });
691
+ check("crud: GET list → 200 ListResponse",
692
+ list.res._sc() === 200 && JSON.parse(list.res._body()).schemas.indexOf(SCIM_LIST) !== -1);
693
+ check("crud: list count parsed", listSeen && listSeen.count === 5);
694
+ check("crud: list startIndex parsed", listSeen.startIndex === 2);
695
+ check("crud: list sortBy/sortOrder threaded", listSeen.sortBy === "userName" && listSeen.sortOrder === "descending");
696
+ check("crud: list attributes split", Array.isArray(listSeen.attributes) && listSeen.attributes.length === 2);
697
+ check("crud: list excludedAttributes split", Array.isArray(listSeen.excludedAttributes) && listSeen.excludedAttributes[0] === "password");
698
+ check("crud: list itemsPerPage from Resources", JSON.parse(list.res._body()).itemsPerPage === 1);
699
+
700
+ // count over maxPageSize is clamped down to the configured cap.
701
+ var capUsers = _mkUsers();
702
+ var capSeen = null;
703
+ capUsers.list = async function (q) { capSeen = q; return { totalResults: 0, Resources: [] }; };
704
+ var capMw = b.middleware.scimServer({ basePath: "/scim/v2", users: capUsers, maxPageSize: 25 });
705
+ await _drive(capMw, { method: "GET", url: "/scim/v2/Users?count=9999", headers: {} });
706
+ check("crud: count clamped to maxPageSize", capSeen && capSeen.count === 25);
707
+ }
708
+
709
+ // RFC 7644 §3.4.2.2 — filter grammar parsing surfaced through the GET
710
+ // list query string (the real consumer path an IdP drives).
711
+ async function _runFilterParsingTests() {
712
+ var users = _mkUsers();
713
+ var mw = b.middleware.scimServer({ basePath: "/scim/v2", users: users });
714
+ var captured = [];
715
+ users.list = async function (q) { captured.push(q.filter); return { totalResults: 0, Resources: [] }; };
716
+
717
+ async function listWith(rawFilter) {
718
+ captured = [];
719
+ await _drive(mw, { method: "GET", url: "/scim/v2/Users?filter=" + encodeURIComponent(rawFilter), headers: {} });
720
+ return captured[0];
721
+ }
722
+
723
+ var pr = await listWith("title pr");
724
+ check("filter: presence op yields no value",
725
+ pr && pr.op === "pr" && pr.attribute === "title" && pr.value === undefined);
726
+
727
+ var quoted = await listWith('familyName eq "O\'Brien"');
728
+ check("filter: quoted value is unwrapped", quoted && quoted.value === "O'Brien");
729
+
730
+ var esc = await listWith('displayName eq "a\\"b"');
731
+ check("filter: escaped inner quote decoded", esc && esc.value === 'a"b');
732
+
733
+ var garbage = await listWith("this is not a filter");
734
+ check("filter: unparseable filter kept as raw",
735
+ garbage && typeof garbage.raw === "string" && garbage.attribute === undefined);
736
+
737
+ captured = [];
738
+ await _drive(mw, { method: "GET", url: "/scim/v2/Users", headers: {} });
739
+ check("filter: absent filter → null", captured[0] === null);
740
+
741
+ // A query pair with malformed percent-encoding is skipped by the
742
+ // decode guard rather than crashing the request.
743
+ var badPct = await _drive(mw, { method: "GET", url: "/scim/v2/Users?x=%ZZ&count=3", headers: {} });
744
+ check("filter: malformed percent-encoding tolerated", badPct.res._sc() === 200);
745
+ }
746
+
747
+ // Config-time option handling (basePath/bulk/maxPageSize defaults +
748
+ // refusals) and the read-only metadata surfaces.
749
+ async function _runConfigAndMetadataTests() {
750
+ // basePath defaults when omitted.
751
+ var dflt = b.middleware.scimServer({ users: _mkUsers() });
752
+ check("config: basePath defaults to /scim/v2", dflt.basePath === "/scim/v2");
753
+
754
+ // bulk:null is treated exactly like omitted — disabled.
755
+ var nullBulk = b.middleware.scimServer({ basePath: "/scim/v2", users: _mkUsers(), bulk: null });
756
+ var nbSpc = await _drive(nullBulk, { method: "GET", url: "/scim/v2/ServiceProviderConfig", headers: {} });
757
+ check("config: bulk:null → SPC supported=false", JSON.parse(nbSpc.res._body()).bulk.supported === false);
758
+
759
+ // A non-object bulk value is refused at construction (config-time tier).
760
+ var threwBulk = false;
761
+ try { b.middleware.scimServer({ basePath: "/scim/v2", users: _mkUsers(), bulk: "yes" }); }
762
+ catch (e) { threwBulk = /bad-bulk\b/.test(e.code || ""); }
763
+ check("config: non-object bulk refused", threwBulk);
764
+
765
+ // bulk:{} takes the documented defaults (maxOperations 1000, 1 MiB).
766
+ var defBulk = b.middleware.scimServer({ basePath: "/scim/v2", users: _mkUsers(), bulk: {} });
767
+ var dbSpc = JSON.parse((await _drive(defBulk, { method: "GET", url: "/scim/v2/ServiceProviderConfig", headers: {} })).res._body());
768
+ check("config: bulk:{} default maxOperations", dbSpc.bulk.maxOperations === 1000);
769
+ check("config: bulk:{} default maxPayloadSize", dbSpc.bulk.maxPayloadSize === 1048576);
770
+
771
+ // ResourceTypes advertises Group only when a groups adapter is wired.
772
+ var withGroups = b.middleware.scimServer({ basePath: "/scim/v2", users: _mkUsers(), groups: _mkGroups() });
773
+ var rt = JSON.parse((await _drive(withGroups, { method: "GET", url: "/scim/v2/ResourceTypes", headers: {} })).res._body());
774
+ var ids = rt.map(function (r) { return r.id; });
775
+ check("config: ResourceTypes includes Group when configured",
776
+ ids.indexOf("Group") !== -1 && ids.indexOf("User") !== -1);
777
+
778
+ // A request to the bare basePath (no resource segment) → 404.
779
+ var bareMw = b.middleware.scimServer({ basePath: "/scim/v2", users: _mkUsers() });
780
+ var bare = await _drive(bareMw, { method: "GET", url: "/scim/v2", headers: {} });
781
+ check("config: bare basePath → 404", bare.res._sc() === 404);
782
+ }
783
+
784
+ // RFC 7644 §3.7 — per-operation error branches inside a /Bulk batch. A
785
+ // single failing operation is isolated to its own result entry; the
786
+ // batch envelope stays 200.
787
+ async function _runBulkErrorBranchTests() {
788
+ var mw = b.middleware.scimServer({
789
+ basePath: "/scim/v2", users: _mkUsers(), groups: _mkGroups(), bulk: { maxOperations: 10 },
790
+ });
791
+
792
+ // /Bulk with a non-POST method → 405 noTarget.
793
+ var getBulk = await _drive(mw, { method: "GET", url: "/scim/v2/Bulk", headers: {} });
794
+ check("bulk err: GET /Bulk → 405", getBulk.res._sc() === 405);
795
+ check("bulk err: GET /Bulk → noTarget", JSON.parse(getBulk.res._body()).scimType === "noTarget");
796
+
797
+ // BulkRequest with a wrong schemas array → 400 invalidValue.
798
+ var badSchemas = await _drive(mw, { method: "POST", url: "/scim/v2/Bulk", headers: {},
799
+ body: { schemas: ["urn:wrong"], Operations: [] } });
800
+ check("bulk err: wrong schemas → 400",
801
+ badSchemas.res._sc() === 400 && JSON.parse(badSchemas.res._body()).scimType === "invalidValue");
802
+
803
+ // BulkRequest whose Operations is not an array → 400 invalidValue.
804
+ var opsNotArray = await _drive(mw, { method: "POST", url: "/scim/v2/Bulk", headers: {},
805
+ body: { schemas: [SCIM_BULK_REQ], Operations: "nope" } });
806
+ check("bulk err: Operations not an array → 400", opsNotArray.res._sc() === 400);
807
+
808
+ // Assorted per-operation failures in one batch.
809
+ var perOp = await _bulkBody(mw, [
810
+ { path: "/Users", bulkId: "nomethod", data: { schemas: [SCIM_USER], userName: "x" } }, // missing method
811
+ { method: "GET", path: "/Users/u-1" }, // unsupported method
812
+ { method: "POST", path: "/Widgets", bulkId: "badpath", data: { schemas: [SCIM_USER], userName: "y" } }, // unparseable path
813
+ { method: "PUT", path: "/Users" }, // PUT without an id
814
+ { method: "POST", path: "/Groups", bulkId: "wschema", data: { displayName: "no-schema" } }, // POST bulkId, missing schema
815
+ ]);
816
+ var perOpResp = JSON.parse(perOp.res._body());
817
+ check("bulk err: batch envelope stays 200", perOp.res._sc() === 200);
818
+ check("bulk err: missing method → invalidSyntax 400",
819
+ perOpResp.Operations[0].status === "400" && perOpResp.Operations[0].response.scimType === "invalidSyntax");
820
+ check("bulk err: unsupported method → 400 invalidValue",
821
+ perOpResp.Operations[1].status === "400" && perOpResp.Operations[1].response.scimType === "invalidValue");
822
+ check("bulk err: unparseable path → 400", perOpResp.Operations[2].status === "400");
823
+ check("bulk err: PUT without id → 400", perOpResp.Operations[3].status === "400");
824
+ check("bulk err: POST bulkId missing schema → 400", perOpResp.Operations[4].status === "400");
825
+
826
+ // A bulk op targeting a resource with no configured adapter → per-op 404.
827
+ var usersOnly = b.middleware.scimServer({ basePath: "/scim/v2", users: _mkUsers(), bulk: { maxOperations: 5 } });
828
+ var noGroup = await _bulkBody(usersOnly, [
829
+ { method: "POST", path: "/Groups", bulkId: "g", data: { schemas: [SCIM_GROUP], displayName: "g" } },
830
+ ]);
831
+ check("bulk err: unconfigured resource → per-op 404",
832
+ JSON.parse(noGroup.res._body()).Operations[0].status === "404");
833
+
834
+ // An adapter that throws a PLAIN Error (no statusCode/scimType) → the
835
+ // op maps to a 500 with no scimType.
836
+ var plainErrUsers = _mkUsers();
837
+ plainErrUsers.update = async function () { throw new Error("adapter blew up"); };
838
+ var seed = await plainErrUsers.create({ userName: "seed" });
839
+ var plainMw = b.middleware.scimServer({ basePath: "/scim/v2", users: plainErrUsers, bulk: { maxOperations: 5 } });
840
+ var plain = await _bulkBody(plainMw, [
841
+ { method: "PUT", path: "/Users/" + seed.id, data: { schemas: [SCIM_USER], userName: "x" } },
842
+ ]);
843
+ var plainOp = JSON.parse(plain.res._body()).Operations[0];
844
+ check("bulk err: plain adapter error → 500", plainOp.status === "500");
845
+ check("bulk err: plain adapter error omits scimType", plainOp.response.scimType === undefined);
846
+
847
+ // A creating op that "succeeds" but returns no id cannot satisfy a
848
+ // reference; the dependent op fails 400 and no literal token is ever
849
+ // handed to the adapter.
850
+ var noIdUsers = {
851
+ _received: [],
852
+ async create(rec) { this._received.push(rec); return { meta: { resourceType: "User" } }; }, // no id assigned
853
+ async read() { return null; },
854
+ async update(id, r) { return r; },
855
+ async patch() { return {}; },
856
+ async remove() { /* no-op */ },
857
+ async list() { return { totalResults: 0, Resources: [] }; },
858
+ };
859
+ var noIdGroups = _mkRecordingGroups();
860
+ var noIdMw = b.middleware.scimServer({ basePath: "/scim/v2", users: noIdUsers, groups: noIdGroups, bulk: { maxOperations: 5 } });
861
+ var noId = await _bulkBody(noIdMw, [
862
+ { method: "POST", path: "/Users", bulkId: "x", data: { schemas: [SCIM_USER], userName: "x" } },
863
+ { method: "POST", path: "/Groups", bulkId: "g",
864
+ data: { schemas: [SCIM_GROUP], displayName: "g", members: [{ value: "bulkId:x" }] } },
865
+ ]);
866
+ var noIdResp = JSON.parse(noId.res._body());
867
+ check("bulk err: no-id creator still 201", noIdResp.Operations[0].status === "201");
868
+ check("bulk err: dependent on no-id creator → 400", noIdResp.Operations[1].status === "400");
869
+ check("bulk err: no-id group never persisted", noIdGroups._records.size === 0);
870
+ check("bulk err: no-id group adapter never saw a token",
871
+ !noIdGroups._received.some(_containsBulkIdToken));
872
+ }
873
+
874
+ // The three ways a /Bulk body reaches _readBulkBody: a pre-buffered
875
+ // Buffer, a stream, and a stream that overflows maxPayloadSize.
876
+ async function _runBulkBodyShapeTests() {
877
+ var bulkJson = JSON.stringify({
878
+ schemas: [SCIM_BULK_REQ],
879
+ Operations: [{ method: "POST", path: "/Users", bulkId: "a", data: { schemas: [SCIM_USER], userName: "a" } }],
880
+ });
881
+
882
+ // req.body already a Buffer → parsed and executed.
883
+ var bufMw = b.middleware.scimServer({ basePath: "/scim/v2", users: _mkUsers(), bulk: { maxOperations: 5 } });
884
+ var buf = await _drive(bufMw, { method: "POST", url: "/scim/v2/Bulk", headers: {}, body: Buffer.from(bulkJson) });
885
+ check("bulk body: Buffer body parsed + run", JSON.parse(buf.res._body()).Operations[0].status === "201");
886
+
887
+ // Streaming body (no req.body) → collectStream path.
888
+ var streamMw = b.middleware.scimServer({ basePath: "/scim/v2", users: _mkUsers(), bulk: { maxOperations: 5 } });
889
+ var stream = await _drive(streamMw, _streamReq("POST", "/scim/v2/Bulk", bulkJson));
890
+ check("bulk body: streamed body parsed + run", JSON.parse(stream.res._body()).Operations[0].status === "201");
891
+
892
+ // Streamed body larger than maxPayloadSize → 413 tooLarge, rejected
893
+ // before parse.
894
+ var tinyMw = b.middleware.scimServer({ basePath: "/scim/v2", users: _mkUsers(), bulk: { maxOperations: 5, maxPayloadSize: 64 } });
895
+ var over = await _drive(tinyMw, _streamReq("POST", "/scim/v2/Bulk", bulkJson)); // bulkJson > 64 bytes
896
+ check("bulk body: oversize stream → 413", over.res._sc() === 413);
897
+ check("bulk body: oversize stream → tooLarge", JSON.parse(over.res._body()).scimType === "tooLarge");
898
+
899
+ // A body that fails to PARSE (not a size overflow) is re-thrown and
900
+ // surfaces as a generic 500 through the middleware .catch — distinct
901
+ // from the tooLarge path.
902
+ var badJsonMw = b.middleware.scimServer({ basePath: "/scim/v2", users: _mkUsers(), bulk: { maxOperations: 5 } });
903
+ var badJson = await _drive(badJsonMw, { method: "POST", url: "/scim/v2/Bulk", headers: {}, body: Buffer.from("{ not valid json") });
904
+ check("bulk body: unparseable JSON → 500", badJson.res._sc() === 500);
905
+ }
906
+
511
907
  module.exports = { run: run };
512
908
 
513
909
  if (require.main === module) {