@blamejs/blamejs-shop 0.5.12 → 0.5.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (521) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/lib/asset-manifest.json +1 -1
  3. package/lib/vendor/MANIFEST.json +632 -416
  4. package/lib/vendor/blamejs/.clusterfuzzlite/Dockerfile +21 -10
  5. package/lib/vendor/blamejs/.clusterfuzzlite/build.sh +30 -9
  6. package/lib/vendor/blamejs/.github/dependabot.yml +8 -0
  7. package/lib/vendor/blamejs/.github/workflows/actions-lint.yml +3 -3
  8. package/lib/vendor/blamejs/.github/workflows/cflite_batch.yml +7 -2
  9. package/lib/vendor/blamejs/.github/workflows/cflite_pr.yml +7 -2
  10. package/lib/vendor/blamejs/.github/workflows/ci.yml +21 -21
  11. package/lib/vendor/blamejs/.github/workflows/codeql.yml +3 -3
  12. package/lib/vendor/blamejs/.github/workflows/npm-publish.yml +4 -4
  13. package/lib/vendor/blamejs/.github/workflows/release-container.yml +7 -7
  14. package/lib/vendor/blamejs/.github/workflows/scorecard.yml +3 -3
  15. package/lib/vendor/blamejs/.github/workflows/sha-to-tag-verify.yml +1 -1
  16. package/lib/vendor/blamejs/.gitignore +2 -0
  17. package/lib/vendor/blamejs/CHANGELOG.md +122 -0
  18. package/lib/vendor/blamejs/NOTICE +26 -1
  19. package/lib/vendor/blamejs/SECURITY.md +1 -1
  20. package/lib/vendor/blamejs/api-snapshot.json +207 -5
  21. package/lib/vendor/blamejs/docker/keycloak/realm-blamejs-test.json +29 -0
  22. package/lib/vendor/blamejs/examples/wiki/DEPLOY.md +1 -0
  23. package/lib/vendor/blamejs/examples/wiki/lib/build-app.js +31 -0
  24. package/lib/vendor/blamejs/examples/wiki/lib/source-comment-block-validator.js +109 -0
  25. package/lib/vendor/blamejs/examples/wiki/nginx.conf +106 -0
  26. package/lib/vendor/blamejs/examples/wiki/package-lock.json +1 -1
  27. package/lib/vendor/blamejs/examples/wiki/test/e2e.js +92 -0
  28. package/lib/vendor/blamejs/fuzz/asn1-der.fuzz.js +28 -0
  29. package/lib/vendor/blamejs/fuzz/cms-codec.fuzz.js +17 -0
  30. package/lib/vendor/blamejs/fuzz/link-header.fuzz.js +18 -0
  31. package/lib/vendor/blamejs/index.js +6 -0
  32. package/lib/vendor/blamejs/lib/a2a.js +4 -4
  33. package/lib/vendor/blamejs/lib/agent-idempotency.js +18 -2
  34. package/lib/vendor/blamejs/lib/agent-saga.js +36 -8
  35. package/lib/vendor/blamejs/lib/agent-snapshot.js +63 -6
  36. package/lib/vendor/blamejs/lib/app-shutdown.js +23 -20
  37. package/lib/vendor/blamejs/lib/archive-read.js +8 -0
  38. package/lib/vendor/blamejs/lib/archive-tar.js +12 -2
  39. package/lib/vendor/blamejs/lib/arg-parser.js +49 -5
  40. package/lib/vendor/blamejs/lib/asn1-der.js +12 -0
  41. package/lib/vendor/blamejs/lib/audit-sign.js +47 -1
  42. package/lib/vendor/blamejs/lib/audit.js +71 -8
  43. package/lib/vendor/blamejs/lib/auth/ciba.js +14 -2
  44. package/lib/vendor/blamejs/lib/auth/fido-mds3.js +58 -47
  45. package/lib/vendor/blamejs/lib/auth/jwt.js +34 -0
  46. package/lib/vendor/blamejs/lib/auth/oauth.js +90 -13
  47. package/lib/vendor/blamejs/lib/auth/oid4vci.js +20 -17
  48. package/lib/vendor/blamejs/lib/auth/openid-federation.js +214 -23
  49. package/lib/vendor/blamejs/lib/auth/saml.js +38 -20
  50. package/lib/vendor/blamejs/lib/auth/sd-jwt-vc.js +10 -4
  51. package/lib/vendor/blamejs/lib/backup/bundle.js +13 -3
  52. package/lib/vendor/blamejs/lib/backup/index.js +16 -5
  53. package/lib/vendor/blamejs/lib/backup/manifest.js +18 -5
  54. package/lib/vendor/blamejs/lib/base32.js +21 -0
  55. package/lib/vendor/blamejs/lib/break-glass.js +19 -10
  56. package/lib/vendor/blamejs/lib/bundler.js +5 -1
  57. package/lib/vendor/blamejs/lib/cache-status.js +3 -7
  58. package/lib/vendor/blamejs/lib/calendar.js +21 -1
  59. package/lib/vendor/blamejs/lib/cbor.js +12 -1
  60. package/lib/vendor/blamejs/lib/cert.js +29 -11
  61. package/lib/vendor/blamejs/lib/cli.js +94 -24
  62. package/lib/vendor/blamejs/lib/cloud-events.js +2 -2
  63. package/lib/vendor/blamejs/lib/cluster-provider-db.js +13 -3
  64. package/lib/vendor/blamejs/lib/codepoint-class.js +85 -0
  65. package/lib/vendor/blamejs/lib/compliance-ai-act-prohibited.js +8 -4
  66. package/lib/vendor/blamejs/lib/compliance-ai-act-transparency.js +19 -4
  67. package/lib/vendor/blamejs/lib/compliance-ai-act.js +6 -8
  68. package/lib/vendor/blamejs/lib/content-credentials.js +1 -1
  69. package/lib/vendor/blamejs/lib/content-digest.js +2 -1
  70. package/lib/vendor/blamejs/lib/cookies.js +13 -3
  71. package/lib/vendor/blamejs/lib/cose.js +31 -16
  72. package/lib/vendor/blamejs/lib/crypto-field.js +32 -0
  73. package/lib/vendor/blamejs/lib/crypto-oprf.js +11 -2
  74. package/lib/vendor/blamejs/lib/crypto-xwing.js +22 -4
  75. package/lib/vendor/blamejs/lib/crypto.js +314 -19
  76. package/lib/vendor/blamejs/lib/csp.js +11 -3
  77. package/lib/vendor/blamejs/lib/daemon.js +270 -24
  78. package/lib/vendor/blamejs/lib/dark-patterns.js +5 -2
  79. package/lib/vendor/blamejs/lib/db-declare-view.js +2 -2
  80. package/lib/vendor/blamejs/lib/db-query.js +34 -7
  81. package/lib/vendor/blamejs/lib/db.js +18 -6
  82. package/lib/vendor/blamejs/lib/dbsc.js +17 -0
  83. package/lib/vendor/blamejs/lib/dev.js +21 -2
  84. package/lib/vendor/blamejs/lib/dsr.js +157 -102
  85. package/lib/vendor/blamejs/lib/external-db.js +41 -2
  86. package/lib/vendor/blamejs/lib/file-upload.js +25 -7
  87. package/lib/vendor/blamejs/lib/flag-providers.js +27 -15
  88. package/lib/vendor/blamejs/lib/forms.js +113 -27
  89. package/lib/vendor/blamejs/lib/gate-contract.js +23 -10
  90. package/lib/vendor/blamejs/lib/gdpr-ropa.js +8 -1
  91. package/lib/vendor/blamejs/lib/guard-agent-registry.js +1 -1
  92. package/lib/vendor/blamejs/lib/guard-archive.js +2 -2
  93. package/lib/vendor/blamejs/lib/guard-cidr.js +27 -1
  94. package/lib/vendor/blamejs/lib/guard-graphql.js +30 -11
  95. package/lib/vendor/blamejs/lib/guard-html.js +26 -53
  96. package/lib/vendor/blamejs/lib/guard-image.js +24 -5
  97. package/lib/vendor/blamejs/lib/guard-imap-command.js +10 -2
  98. package/lib/vendor/blamejs/lib/guard-jmap.js +19 -3
  99. package/lib/vendor/blamejs/lib/guard-jwt.js +18 -2
  100. package/lib/vendor/blamejs/lib/guard-list-unsubscribe.js +2 -2
  101. package/lib/vendor/blamejs/lib/guard-managesieve-command.js +10 -2
  102. package/lib/vendor/blamejs/lib/guard-markdown.js +11 -24
  103. package/lib/vendor/blamejs/lib/guard-pdf.js +18 -2
  104. package/lib/vendor/blamejs/lib/guard-pop3-command.js +10 -2
  105. package/lib/vendor/blamejs/lib/guard-regex.js +8 -5
  106. package/lib/vendor/blamejs/lib/guard-svg.js +31 -32
  107. package/lib/vendor/blamejs/lib/guard-time.js +1 -1
  108. package/lib/vendor/blamejs/lib/guard-uuid.js +2 -2
  109. package/lib/vendor/blamejs/lib/html-balance.js +3 -3
  110. package/lib/vendor/blamejs/lib/http-client-cache.js +82 -4
  111. package/lib/vendor/blamejs/lib/http-client-cookie-jar.js +16 -1
  112. package/lib/vendor/blamejs/lib/http-client.js +39 -7
  113. package/lib/vendor/blamejs/lib/http-message-signature.js +35 -1
  114. package/lib/vendor/blamejs/lib/i18n-messageformat.js +31 -6
  115. package/lib/vendor/blamejs/lib/i18n.js +35 -21
  116. package/lib/vendor/blamejs/lib/incident-report.js +8 -1
  117. package/lib/vendor/blamejs/lib/ip-utils.js +11 -1
  118. package/lib/vendor/blamejs/lib/json-path.js +23 -1
  119. package/lib/vendor/blamejs/lib/jwk.js +20 -3
  120. package/lib/vendor/blamejs/lib/link-header.js +2 -1
  121. package/lib/vendor/blamejs/lib/log-stream-otlp-grpc.js +5 -1
  122. package/lib/vendor/blamejs/lib/log-stream-otlp.js +5 -1
  123. package/lib/vendor/blamejs/lib/log-stream.js +8 -3
  124. package/lib/vendor/blamejs/lib/mail-auth.js +123 -22
  125. package/lib/vendor/blamejs/lib/mail-bimi.js +1 -1
  126. package/lib/vendor/blamejs/lib/mail-bounce.js +8 -0
  127. package/lib/vendor/blamejs/lib/mail-crypto-pgp.js +46 -10
  128. package/lib/vendor/blamejs/lib/mail-dav.js +22 -3
  129. package/lib/vendor/blamejs/lib/mail-dkim.js +96 -30
  130. package/lib/vendor/blamejs/lib/mail-helo.js +6 -1
  131. package/lib/vendor/blamejs/lib/mail-scan.js +23 -16
  132. package/lib/vendor/blamejs/lib/mail-send-deliver.js +34 -8
  133. package/lib/vendor/blamejs/lib/mail-server-imap.js +3 -4
  134. package/lib/vendor/blamejs/lib/mail-server-managesieve.js +7 -11
  135. package/lib/vendor/blamejs/lib/mail-server-mx.js +93 -7
  136. package/lib/vendor/blamejs/lib/mail-server-registry.js +8 -2
  137. package/lib/vendor/blamejs/lib/mail.js +15 -5
  138. package/lib/vendor/blamejs/lib/metrics.js +268 -63
  139. package/lib/vendor/blamejs/lib/middleware/age-gate.js +7 -1
  140. package/lib/vendor/blamejs/lib/middleware/asyncapi-serve.js +1 -1
  141. package/lib/vendor/blamejs/lib/middleware/body-parser.js +19 -4
  142. package/lib/vendor/blamejs/lib/middleware/bot-guard.js +5 -9
  143. package/lib/vendor/blamejs/lib/middleware/csp-report.js +40 -8
  144. package/lib/vendor/blamejs/lib/middleware/csrf-protect.js +24 -10
  145. package/lib/vendor/blamejs/lib/middleware/dpop.js +10 -5
  146. package/lib/vendor/blamejs/lib/middleware/index.js +6 -1
  147. package/lib/vendor/blamejs/lib/middleware/nel.js +1 -1
  148. package/lib/vendor/blamejs/lib/middleware/openapi-serve.js +1 -1
  149. package/lib/vendor/blamejs/lib/middleware/rate-limit.js +12 -1
  150. package/lib/vendor/blamejs/lib/middleware/require-bound-key.js +1 -1
  151. package/lib/vendor/blamejs/lib/middleware/scim-server.js +1 -1
  152. package/lib/vendor/blamejs/lib/middleware/tus-upload.js +6 -2
  153. package/lib/vendor/blamejs/lib/mtls-ca.js +18 -2
  154. package/lib/vendor/blamejs/lib/network-dns-resolver.js +11 -1
  155. package/lib/vendor/blamejs/lib/network-dns.js +21 -2
  156. package/lib/vendor/blamejs/lib/network-tls.js +69 -7
  157. package/lib/vendor/blamejs/lib/nonce-store.js +9 -1
  158. package/lib/vendor/blamejs/lib/object-store/gcs.js +7 -0
  159. package/lib/vendor/blamejs/lib/object-store/sigv4.js +31 -0
  160. package/lib/vendor/blamejs/lib/observability-otlp-exporter.js +1 -1
  161. package/lib/vendor/blamejs/lib/outbox.js +1 -1
  162. package/lib/vendor/blamejs/lib/parsers/safe-ini.js +9 -1
  163. package/lib/vendor/blamejs/lib/parsers/safe-toml.js +10 -1
  164. package/lib/vendor/blamejs/lib/permissions.js +6 -3
  165. package/lib/vendor/blamejs/lib/pid-probe.js +55 -0
  166. package/lib/vendor/blamejs/lib/pqc-agent.js +8 -1
  167. package/lib/vendor/blamejs/lib/pqc-software.js +3 -3
  168. package/lib/vendor/blamejs/lib/pubsub.js +20 -9
  169. package/lib/vendor/blamejs/lib/queue-local.js +8 -1
  170. package/lib/vendor/blamejs/lib/queue-redis.js +5 -0
  171. package/lib/vendor/blamejs/lib/redact.js +54 -0
  172. package/lib/vendor/blamejs/lib/restore-bundle.js +10 -2
  173. package/lib/vendor/blamejs/lib/restore.js +19 -0
  174. package/lib/vendor/blamejs/lib/retention.js +12 -4
  175. package/lib/vendor/blamejs/lib/router.js +60 -6
  176. package/lib/vendor/blamejs/lib/safe-buffer.js +69 -0
  177. package/lib/vendor/blamejs/lib/safe-decompress.js +8 -2
  178. package/lib/vendor/blamejs/lib/safe-dns.js +25 -20
  179. package/lib/vendor/blamejs/lib/safe-ical.js +7 -3
  180. package/lib/vendor/blamejs/lib/safe-mime.js +12 -1
  181. package/lib/vendor/blamejs/lib/safe-object.js +80 -0
  182. package/lib/vendor/blamejs/lib/safe-path.js +52 -4
  183. package/lib/vendor/blamejs/lib/safe-redirect.js +10 -2
  184. package/lib/vendor/blamejs/lib/safe-schema.js +4 -1
  185. package/lib/vendor/blamejs/lib/safe-sieve.js +33 -1
  186. package/lib/vendor/blamejs/lib/safe-sql.js +88 -0
  187. package/lib/vendor/blamejs/lib/safe-vcard.js +7 -3
  188. package/lib/vendor/blamejs/lib/scheduler.js +8 -1
  189. package/lib/vendor/blamejs/lib/security-assert.js +6 -6
  190. package/lib/vendor/blamejs/lib/self-update-standalone-verifier.js +74 -27
  191. package/lib/vendor/blamejs/lib/self-update.js +517 -87
  192. package/lib/vendor/blamejs/lib/server-timing.js +2 -4
  193. package/lib/vendor/blamejs/lib/session.js +34 -12
  194. package/lib/vendor/blamejs/lib/sql.js +15 -1
  195. package/lib/vendor/blamejs/lib/ssrf-guard.js +52 -0
  196. package/lib/vendor/blamejs/lib/static.js +55 -13
  197. package/lib/vendor/blamejs/lib/storage.js +8 -2
  198. package/lib/vendor/blamejs/lib/subject.js +6 -1
  199. package/lib/vendor/blamejs/lib/tenant-quota.js +52 -13
  200. package/lib/vendor/blamejs/lib/tls-exporter.js +3 -3
  201. package/lib/vendor/blamejs/lib/tsa.js +34 -13
  202. package/lib/vendor/blamejs/lib/uri-template.js +8 -1
  203. package/lib/vendor/blamejs/lib/vault/index.js +13 -0
  204. package/lib/vendor/blamejs/lib/vc.js +44 -5
  205. package/lib/vendor/blamejs/lib/vendor/MANIFEST.json +26 -26
  206. package/lib/vendor/blamejs/lib/vendor/noble-ciphers.cjs +792 -1
  207. package/lib/vendor/blamejs/lib/vendor/noble-curves.cjs +3443 -1
  208. package/lib/vendor/blamejs/lib/vendor/noble-post-quantum.cjs +2737 -1
  209. package/lib/vendor/blamejs/lib/vendor/pki.cjs +39550 -13
  210. package/lib/vendor/blamejs/lib/vendor/public-suffix-list.dat +55 -53
  211. package/lib/vendor/blamejs/lib/vendor/public-suffix-list.data.js +5551 -5554
  212. package/lib/vendor/blamejs/lib/vendor/simplewebauthn-server.cjs +22459 -32
  213. package/lib/vendor/blamejs/lib/watcher.js +89 -17
  214. package/lib/vendor/blamejs/lib/webhook-dispatcher.js +25 -3
  215. package/lib/vendor/blamejs/lib/webhook.js +12 -2
  216. package/lib/vendor/blamejs/lib/ws-client.js +32 -1
  217. package/lib/vendor/blamejs/lib/xml-c14n.js +29 -1
  218. package/lib/vendor/blamejs/oss-fuzz/projects/blamejs/Dockerfile +1 -1
  219. package/lib/vendor/blamejs/package-lock.json +2 -2
  220. package/lib/vendor/blamejs/package.json +1 -1
  221. package/lib/vendor/blamejs/release-notes/v0.16.x.json +1462 -0
  222. package/lib/vendor/blamejs/release-notes/v0.17.0.json +31 -0
  223. package/lib/vendor/blamejs/release-notes/v0.17.1.json +31 -0
  224. package/lib/vendor/blamejs/release-notes/v0.17.10.json +30 -0
  225. package/lib/vendor/blamejs/release-notes/v0.17.11.json +22 -0
  226. package/lib/vendor/blamejs/release-notes/v0.17.12.json +18 -0
  227. package/lib/vendor/blamejs/release-notes/v0.17.13.json +77 -0
  228. package/lib/vendor/blamejs/release-notes/v0.17.14.json +40 -0
  229. package/lib/vendor/blamejs/release-notes/v0.17.15.json +18 -0
  230. package/lib/vendor/blamejs/release-notes/v0.17.16.json +27 -0
  231. package/lib/vendor/blamejs/release-notes/v0.17.17.json +31 -0
  232. package/lib/vendor/blamejs/release-notes/v0.17.18.json +18 -0
  233. package/lib/vendor/blamejs/release-notes/v0.17.19.json +18 -0
  234. package/lib/vendor/blamejs/release-notes/v0.17.2.json +26 -0
  235. package/lib/vendor/blamejs/release-notes/v0.17.20.json +43 -0
  236. package/lib/vendor/blamejs/release-notes/v0.17.21.json +26 -0
  237. package/lib/vendor/blamejs/release-notes/v0.17.22.json +18 -0
  238. package/lib/vendor/blamejs/release-notes/v0.17.3.json +43 -0
  239. package/lib/vendor/blamejs/release-notes/v0.17.4.json +35 -0
  240. package/lib/vendor/blamejs/release-notes/v0.17.5.json +26 -0
  241. package/lib/vendor/blamejs/release-notes/v0.17.6.json +26 -0
  242. package/lib/vendor/blamejs/release-notes/v0.17.7.json +35 -0
  243. package/lib/vendor/blamejs/release-notes/v0.17.8.json +22 -0
  244. package/lib/vendor/blamejs/release-notes/v0.17.9.json +26 -0
  245. package/lib/vendor/blamejs/scripts/validate-source-comment-blocks.js +4 -0
  246. package/lib/vendor/blamejs/scripts/vendor-update.sh +293 -9
  247. package/lib/vendor/blamejs/socket.yml +94 -0
  248. package/lib/vendor/blamejs/test/00-primitives.js +605 -0
  249. package/lib/vendor/blamejs/test/helpers/drivers.js +12 -9
  250. package/lib/vendor/blamejs/test/integration/audit-stack-mysql.test.js +90 -1
  251. package/lib/vendor/blamejs/test/integration/audit-stack-postgres.test.js +122 -1
  252. package/lib/vendor/blamejs/test/integration/data-layer-mysql.test.js +30 -0
  253. package/lib/vendor/blamejs/test/integration/data-layer-pg.test.js +29 -0
  254. package/lib/vendor/blamejs/test/integration/dsr-cluster-mysql.test.js +479 -0
  255. package/lib/vendor/blamejs/test/integration/dsr-cluster-pg.test.js +487 -0
  256. package/lib/vendor/blamejs/test/integration/federation-auth.test.js +313 -5
  257. package/lib/vendor/blamejs/test/integration/mail-dkim.test.js +80 -0
  258. package/lib/vendor/blamejs/test/integration/openid-federation-chain.test.js +275 -0
  259. package/lib/vendor/blamejs/test/integration/webhook-dispatcher-pg.test.js +96 -0
  260. package/lib/vendor/blamejs/test/layer-0-primitives/a2a-tasks.test.js +401 -0
  261. package/lib/vendor/blamejs/test/layer-0-primitives/acme.test.js +1649 -2
  262. package/lib/vendor/blamejs/test/layer-0-primitives/age-gate.test.js +33 -0
  263. package/lib/vendor/blamejs/test/layer-0-primitives/agent-idempotency.test.js +0 -0
  264. package/lib/vendor/blamejs/test/layer-0-primitives/agent-saga.test.js +60 -0
  265. package/lib/vendor/blamejs/test/layer-0-primitives/agent-snapshot.test.js +524 -0
  266. package/lib/vendor/blamejs/test/layer-0-primitives/api-encrypt.test.js +891 -0
  267. package/lib/vendor/blamejs/test/layer-0-primitives/app-shutdown.test.js +128 -1
  268. package/lib/vendor/blamejs/test/layer-0-primitives/archive-adapters.test.js +271 -0
  269. package/lib/vendor/blamejs/test/layer-0-primitives/archive-read.test.js +628 -1
  270. package/lib/vendor/blamejs/test/layer-0-primitives/archive-tar-read.test.js +0 -0
  271. package/lib/vendor/blamejs/test/layer-0-primitives/archive-wrap.test.js +227 -0
  272. package/lib/vendor/blamejs/test/layer-0-primitives/arg-parser.test.js +15 -0
  273. package/lib/vendor/blamejs/test/layer-0-primitives/asn1-der.test.js +73 -0
  274. package/lib/vendor/blamejs/test/layer-0-primitives/atomic-file.test.js +114 -0
  275. package/lib/vendor/blamejs/test/layer-0-primitives/audit-sign-anchor.test.js +141 -0
  276. package/lib/vendor/blamejs/test/layer-0-primitives/audit-tools.test.js +624 -0
  277. package/lib/vendor/blamejs/test/layer-0-primitives/audit.test.js +769 -0
  278. package/lib/vendor/blamejs/test/layer-0-primitives/auth-jwt-defenses.test.js +436 -0
  279. package/lib/vendor/blamejs/test/layer-0-primitives/auth-oauth.test.js +1697 -0
  280. package/lib/vendor/blamejs/test/layer-0-primitives/auth-oid4vp.test.js +495 -0
  281. package/lib/vendor/blamejs/test/layer-0-primitives/auth-password.test.js +500 -0
  282. package/lib/vendor/blamejs/test/layer-0-primitives/auth-saml.test.js +1809 -0
  283. package/lib/vendor/blamejs/test/layer-0-primitives/auth-status-list.test.js +243 -1
  284. package/lib/vendor/blamejs/test/layer-0-primitives/backup-index.test.js +2226 -0
  285. package/lib/vendor/blamejs/test/layer-0-primitives/backup-manifest-signature.test.js +183 -0
  286. package/lib/vendor/blamejs/test/layer-0-primitives/base32.test.js +105 -0
  287. package/lib/vendor/blamejs/test/layer-0-primitives/break-glass.test.js +693 -0
  288. package/lib/vendor/blamejs/test/layer-0-primitives/cache.test.js +603 -0
  289. package/lib/vendor/blamejs/test/layer-0-primitives/calendar.test.js +557 -0
  290. package/lib/vendor/blamejs/test/layer-0-primitives/case-insensitive-security-token-guard.test.js +214 -0
  291. package/lib/vendor/blamejs/test/layer-0-primitives/cbor.test.js +25 -0
  292. package/lib/vendor/blamejs/test/layer-0-primitives/cert.test.js +843 -6
  293. package/lib/vendor/blamejs/test/layer-0-primitives/ciba-authreqid-binding.test.js +77 -2
  294. package/lib/vendor/blamejs/test/layer-0-primitives/ciba.test.js +866 -0
  295. package/lib/vendor/blamejs/test/layer-0-primitives/clear-site-data.test.js +18 -0
  296. package/lib/vendor/blamejs/test/layer-0-primitives/cli-erase.test.js +19 -0
  297. package/lib/vendor/blamejs/test/layer-0-primitives/cli.test.js +2790 -0
  298. package/lib/vendor/blamejs/test/layer-0-primitives/cluster-lease-renewal-ttl.test.js +114 -0
  299. package/lib/vendor/blamejs/test/layer-0-primitives/cluster.test.js +1032 -0
  300. package/lib/vendor/blamejs/test/layer-0-primitives/cms-codec.test.js +575 -0
  301. package/lib/vendor/blamejs/test/layer-0-primitives/codebase-patterns.test.js +739 -1
  302. package/lib/vendor/blamejs/test/layer-0-primitives/codepoint-class.test.js +8 -0
  303. package/lib/vendor/blamejs/test/layer-0-primitives/compliance-ai-act.test.js +194 -0
  304. package/lib/vendor/blamejs/test/layer-0-primitives/compliance-lifecycle-proto-key.test.js +104 -0
  305. package/lib/vendor/blamejs/test/layer-0-primitives/compliance-sanctions.test.js +254 -0
  306. package/lib/vendor/blamejs/test/layer-0-primitives/content-credentials.test.js +613 -3
  307. package/lib/vendor/blamejs/test/layer-0-primitives/cookies.test.js +140 -0
  308. package/lib/vendor/blamejs/test/layer-0-primitives/cose.test.js +407 -0
  309. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-adversarial.test.js +352 -0
  310. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-field-derived-hash.test.js +32 -0
  311. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-field.test.js +575 -0
  312. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-hash-files-parallel.test.js +10 -0
  313. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-hash-stream.test.js +24 -0
  314. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-oprf.test.js +17 -0
  315. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-spki-pin.test.js +183 -0
  316. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-xwing.test.js +48 -0
  317. package/lib/vendor/blamejs/test/layer-0-primitives/crypto.test.js +345 -0
  318. package/lib/vendor/blamejs/test/layer-0-primitives/csp-report.test.js +58 -0
  319. package/lib/vendor/blamejs/test/layer-0-primitives/csv.test.js +48 -0
  320. package/lib/vendor/blamejs/test/layer-0-primitives/daemon.test.js +459 -1
  321. package/lib/vendor/blamejs/test/layer-0-primitives/dark-patterns.test.js +19 -0
  322. package/lib/vendor/blamejs/test/layer-0-primitives/db-query.test.js +1019 -0
  323. package/lib/vendor/blamejs/test/layer-0-primitives/db-raw-residency-gate.test.js +77 -0
  324. package/lib/vendor/blamejs/test/layer-0-primitives/db.test.js +1621 -0
  325. package/lib/vendor/blamejs/test/layer-0-primitives/ddl-change-control.test.js +462 -3
  326. package/lib/vendor/blamejs/test/layer-0-primitives/dnssec.test.js +323 -0
  327. package/lib/vendor/blamejs/test/layer-0-primitives/dpop-middleware-verify.test.js +562 -0
  328. package/lib/vendor/blamejs/test/layer-0-primitives/dsr.test.js +901 -1
  329. package/lib/vendor/blamejs/test/layer-0-primitives/dual-control.test.js +249 -0
  330. package/lib/vendor/blamejs/test/layer-0-primitives/external-db-migrate.test.js +561 -0
  331. package/lib/vendor/blamejs/test/layer-0-primitives/external-db.test.js +1214 -0
  332. package/lib/vendor/blamejs/test/layer-0-primitives/fal.test.js +21 -0
  333. package/lib/vendor/blamejs/test/layer-0-primitives/fedcm-dbsc.test.js +46 -20
  334. package/lib/vendor/blamejs/test/layer-0-primitives/federation-vc-suite.test.js +147 -3
  335. package/lib/vendor/blamejs/test/layer-0-primitives/fido-mds3.test.js +907 -38
  336. package/lib/vendor/blamejs/test/layer-0-primitives/file-upload-content-safety-skip-audit.test.js +29 -0
  337. package/lib/vendor/blamejs/test/layer-0-primitives/file-upload.test.js +1135 -0
  338. package/lib/vendor/blamejs/test/layer-0-primitives/flag.test.js +30 -0
  339. package/lib/vendor/blamejs/test/layer-0-primitives/forms.test.js +747 -0
  340. package/lib/vendor/blamejs/test/layer-0-primitives/gate-contract.test.js +1855 -0
  341. package/lib/vendor/blamejs/test/layer-0-primitives/gdpr-ropa.test.js +30 -0
  342. package/lib/vendor/blamejs/test/layer-0-primitives/guard-archive.test.js +86 -0
  343. package/lib/vendor/blamejs/test/layer-0-primitives/guard-auth.test.js +117 -0
  344. package/lib/vendor/blamejs/test/layer-0-primitives/guard-cidr.test.js +151 -0
  345. package/lib/vendor/blamejs/test/layer-0-primitives/guard-domain.test.js +422 -0
  346. package/lib/vendor/blamejs/test/layer-0-primitives/guard-filename.test.js +424 -0
  347. package/lib/vendor/blamejs/test/layer-0-primitives/{guard-gate-disposition-coverage.test.js → guard-gate-disposition.test.js} +1 -1
  348. package/lib/vendor/blamejs/test/layer-0-primitives/guard-graphql.test.js +340 -0
  349. package/lib/vendor/blamejs/test/layer-0-primitives/guard-html.test.js +29 -0
  350. package/lib/vendor/blamejs/test/layer-0-primitives/guard-idempotency-key.test.js +28 -0
  351. package/lib/vendor/blamejs/test/layer-0-primitives/guard-image.test.js +519 -45
  352. package/lib/vendor/blamejs/test/layer-0-primitives/guard-imap-command.test.js +0 -0
  353. package/lib/vendor/blamejs/test/layer-0-primitives/guard-jmap.test.js +51 -0
  354. package/lib/vendor/blamejs/test/layer-0-primitives/guard-jsonpath.test.js +66 -0
  355. package/lib/vendor/blamejs/test/layer-0-primitives/guard-jwt.test.js +436 -0
  356. package/lib/vendor/blamejs/test/layer-0-primitives/guard-managesieve-command.test.js +25 -0
  357. package/lib/vendor/blamejs/test/layer-0-primitives/guard-markdown.test.js +16 -0
  358. package/lib/vendor/blamejs/test/layer-0-primitives/guard-mime.test.js +86 -0
  359. package/lib/vendor/blamejs/test/layer-0-primitives/guard-oauth.test.js +140 -0
  360. package/lib/vendor/blamejs/test/layer-0-primitives/guard-pdf.test.js +80 -0
  361. package/lib/vendor/blamejs/test/layer-0-primitives/guard-pop3-command.test.js +27 -0
  362. package/lib/vendor/blamejs/test/layer-0-primitives/guard-regex.test.js +99 -0
  363. package/lib/vendor/blamejs/test/layer-0-primitives/guard-shell.test.js +76 -0
  364. package/lib/vendor/blamejs/test/layer-0-primitives/{guard-sql-coverage.test.js → guard-sql.test.js} +3 -3
  365. package/lib/vendor/blamejs/test/layer-0-primitives/guard-svg.test.js +524 -0
  366. package/lib/vendor/blamejs/test/layer-0-primitives/guard-template.test.js +71 -0
  367. package/lib/vendor/blamejs/test/layer-0-primitives/guard-time.test.js +92 -0
  368. package/lib/vendor/blamejs/test/layer-0-primitives/guard-uuid.test.js +86 -0
  369. package/lib/vendor/blamejs/test/layer-0-primitives/html-balance.test.js +38 -0
  370. package/lib/vendor/blamejs/test/layer-0-primitives/http-client-cache-authorization.test.js +347 -0
  371. package/lib/vendor/blamejs/test/layer-0-primitives/http-client-cache.test.js +908 -0
  372. package/lib/vendor/blamejs/test/layer-0-primitives/http-client.test.js +2874 -0
  373. package/lib/vendor/blamejs/test/layer-0-primitives/http-message-signature.test.js +643 -0
  374. package/lib/vendor/blamejs/test/layer-0-primitives/i18n-messageformat.test.js +38 -0
  375. package/lib/vendor/blamejs/test/layer-0-primitives/i18n.test.js +1153 -1
  376. package/lib/vendor/blamejs/test/layer-0-primitives/idempotency-key.test.js +494 -0
  377. package/lib/vendor/blamejs/test/layer-0-primitives/ip-utils.test.js +30 -0
  378. package/lib/vendor/blamejs/test/layer-0-primitives/jsdoc-example-execution.test.js +177 -0
  379. package/lib/vendor/blamejs/test/layer-0-primitives/json-path.test.js +103 -0
  380. package/lib/vendor/blamejs/test/layer-0-primitives/json-schema.test.js +214 -0
  381. package/lib/vendor/blamejs/test/layer-0-primitives/jwk.test.js +41 -0
  382. package/lib/vendor/blamejs/test/layer-0-primitives/jwt-external.test.js +276 -0
  383. package/lib/vendor/blamejs/test/layer-0-primitives/keychain.test.js +0 -0
  384. package/lib/vendor/blamejs/test/layer-0-primitives/log-stream.test.js +241 -0
  385. package/lib/vendor/blamejs/test/layer-0-primitives/log.test.js +106 -0
  386. package/lib/vendor/blamejs/test/layer-0-primitives/mail-agent.test.js +441 -0
  387. package/lib/vendor/blamejs/test/layer-0-primitives/mail-auth.test.js +2136 -4
  388. package/lib/vendor/blamejs/test/layer-0-primitives/mail-bimi.test.js +759 -12
  389. package/lib/vendor/blamejs/test/layer-0-primitives/mail-bounce.test.js +811 -1
  390. package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto-pgp-experimental.test.js +401 -3
  391. package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto-pgp.test.js +751 -8
  392. package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto-smime.test.js +864 -0
  393. package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto.test.js +110 -0
  394. package/lib/vendor/blamejs/test/layer-0-primitives/mail-dav.test.js +830 -1
  395. package/lib/vendor/blamejs/test/layer-0-primitives/mail-deploy.test.js +635 -86
  396. package/lib/vendor/blamejs/test/layer-0-primitives/mail-dkim.test.js +818 -0
  397. package/lib/vendor/blamejs/test/layer-0-primitives/mail-helo.test.js +27 -0
  398. package/lib/vendor/blamejs/test/layer-0-primitives/mail-scan.test.js +199 -0
  399. package/lib/vendor/blamejs/test/layer-0-primitives/mail-send-deliver.test.js +686 -2
  400. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-imap.test.js +778 -0
  401. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-jmap.test.js +1438 -0
  402. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-managesieve.test.js +449 -6
  403. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-mx.test.js +773 -2
  404. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-pop3.test.js +623 -3
  405. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-rate-limit.test.js +55 -0
  406. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-registry.test.js +13 -0
  407. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-submission.test.js +877 -1
  408. package/lib/vendor/blamejs/test/layer-0-primitives/mail-sieve.test.js +326 -0
  409. package/lib/vendor/blamejs/test/layer-0-primitives/mail-store-fts.test.js +55 -0
  410. package/lib/vendor/blamejs/test/layer-0-primitives/mail-store.test.js +242 -0
  411. package/lib/vendor/blamejs/test/layer-0-primitives/mail.test.js +1596 -2
  412. package/lib/vendor/blamejs/test/layer-0-primitives/mcp.test.js +440 -4
  413. package/lib/vendor/blamejs/test/layer-0-primitives/metrics-snapshot.test.js +89 -0
  414. package/lib/vendor/blamejs/test/layer-0-primitives/metrics.test.js +1230 -0
  415. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-assetlinks.test.js +113 -0
  416. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-body-parser.test.js +1169 -0
  417. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-bot-disclose.test.js +123 -0
  418. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-cookies.test.js +108 -0
  419. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-gpc.test.js +121 -0
  420. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-headers.test.js +163 -0
  421. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-host-allowlist.test.js +154 -0
  422. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-require-content-type.test.js +127 -0
  423. package/lib/vendor/blamejs/test/layer-0-primitives/{middleware-tus-upload-coverage.test.js → middleware-tus-upload.test.js} +45 -0
  424. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-web-app-manifest.test.js +132 -0
  425. package/lib/vendor/blamejs/test/layer-0-primitives/mtls-ca-crl-fingerprint-only.test.js +92 -0
  426. package/lib/vendor/blamejs/test/layer-0-primitives/network-dns-resolver.test.js +65 -0
  427. package/lib/vendor/blamejs/test/layer-0-primitives/network-dns.test.js +1727 -1
  428. package/lib/vendor/blamejs/test/layer-0-primitives/network-nts.test.js +699 -0
  429. package/lib/vendor/blamejs/test/layer-0-primitives/network-smtp-policy.test.js +1181 -0
  430. package/lib/vendor/blamejs/test/layer-0-primitives/network-tls.test.js +1876 -3
  431. package/lib/vendor/blamejs/test/layer-0-primitives/network.test.js +32 -0
  432. package/lib/vendor/blamejs/test/layer-0-primitives/nonce-store-enforce-replay-nonboolean.test.js +81 -0
  433. package/lib/vendor/blamejs/test/layer-0-primitives/ntp-check.test.js +122 -0
  434. package/lib/vendor/blamejs/test/layer-0-primitives/observability-tracing.test.js +378 -0
  435. package/lib/vendor/blamejs/test/layer-0-primitives/observability.test.js +77 -0
  436. package/lib/vendor/blamejs/test/layer-0-primitives/oid4vci.test.js +1016 -0
  437. package/lib/vendor/blamejs/test/layer-0-primitives/openid-federation.test.js +946 -0
  438. package/lib/vendor/blamejs/test/layer-0-primitives/outbox.test.js +818 -0
  439. package/lib/vendor/blamejs/test/layer-0-primitives/own-property-membership-guards.test.js +109 -0
  440. package/lib/vendor/blamejs/test/layer-0-primitives/parsers-safe-toml.test.js +543 -0
  441. package/lib/vendor/blamejs/test/layer-0-primitives/{parsers-safe-yaml-coverage.test.js → parsers-safe-yaml.test.js} +2 -2
  442. package/lib/vendor/blamejs/test/layer-0-primitives/parsers-standalone.test.js +73 -0
  443. package/lib/vendor/blamejs/test/layer-0-primitives/passkey.test.js +649 -0
  444. package/lib/vendor/blamejs/test/layer-0-primitives/permissions.test.js +524 -0
  445. package/lib/vendor/blamejs/test/layer-0-primitives/pqc-agent-curve.test.js +22 -0
  446. package/lib/vendor/blamejs/test/layer-0-primitives/pubsub.test.js +295 -0
  447. package/lib/vendor/blamejs/test/layer-0-primitives/queue-flow-repeat.test.js +36 -0
  448. package/lib/vendor/blamejs/test/layer-0-primitives/queue.test.js +83 -0
  449. package/lib/vendor/blamejs/test/layer-0-primitives/rate-limit-xff-spoofing.test.js +34 -0
  450. package/lib/vendor/blamejs/test/layer-0-primitives/redact.test.js +1031 -0
  451. package/lib/vendor/blamejs/test/layer-0-primitives/request-helpers.test.js +94 -0
  452. package/lib/vendor/blamejs/test/layer-0-primitives/require-bound-key.test.js +401 -0
  453. package/lib/vendor/blamejs/test/layer-0-primitives/restore-empty-manifest-wipe.test.js +154 -0
  454. package/lib/vendor/blamejs/test/layer-0-primitives/retention.test.js +600 -0
  455. package/lib/vendor/blamejs/test/layer-0-primitives/router-host-path-injection.test.js +231 -0
  456. package/lib/vendor/blamejs/test/layer-0-primitives/router-tls0rtt.test.js +21 -0
  457. package/lib/vendor/blamejs/test/layer-0-primitives/router.test.js +1277 -0
  458. package/lib/vendor/blamejs/test/layer-0-primitives/safe-async.test.js +133 -0
  459. package/lib/vendor/blamejs/test/layer-0-primitives/safe-buffer-linear-scans.test.js +14 -0
  460. package/lib/vendor/blamejs/test/layer-0-primitives/safe-buffer.test.js +80 -0
  461. package/lib/vendor/blamejs/test/layer-0-primitives/safe-decompress.test.js +28 -0
  462. package/lib/vendor/blamejs/test/layer-0-primitives/safe-dns.test.js +245 -0
  463. package/lib/vendor/blamejs/test/layer-0-primitives/safe-ical.test.js +32 -0
  464. package/lib/vendor/blamejs/test/layer-0-primitives/safe-ini.test.js +376 -0
  465. package/lib/vendor/blamejs/test/layer-0-primitives/safe-json.test.js +175 -0
  466. package/lib/vendor/blamejs/test/layer-0-primitives/safe-mime.test.js +518 -0
  467. package/lib/vendor/blamejs/test/layer-0-primitives/safe-object.test.js +62 -0
  468. package/lib/vendor/blamejs/test/layer-0-primitives/safe-path.test.js +30 -0
  469. package/lib/vendor/blamejs/test/layer-0-primitives/safe-schema.test.js +104 -0
  470. package/lib/vendor/blamejs/test/layer-0-primitives/safe-sql.test.js +142 -0
  471. package/lib/vendor/blamejs/test/layer-0-primitives/safe-url.test.js +112 -0
  472. package/lib/vendor/blamejs/test/layer-0-primitives/safe-vcard.test.js +26 -0
  473. package/lib/vendor/blamejs/test/layer-0-primitives/scheduler.test.js +157 -0
  474. package/lib/vendor/blamejs/test/layer-0-primitives/scim-server.test.js +396 -0
  475. package/lib/vendor/blamejs/test/layer-0-primitives/sd-jwt-vc.test.js +930 -0
  476. package/lib/vendor/blamejs/test/layer-0-primitives/security-assert.test.js +755 -82
  477. package/lib/vendor/blamejs/test/layer-0-primitives/self-update.test.js +1053 -0
  478. package/lib/vendor/blamejs/test/layer-0-primitives/session-device-binding.test.js +200 -0
  479. package/lib/vendor/blamejs/test/layer-0-primitives/session-strict-binding-missing-failclosed.test.js +110 -0
  480. package/lib/vendor/blamejs/test/layer-0-primitives/sigv4-bucket-ops.test.js +636 -0
  481. package/lib/vendor/blamejs/test/layer-0-primitives/sql-offset-without-limit.test.js +94 -0
  482. package/lib/vendor/blamejs/test/layer-0-primitives/sql.test.js +1190 -0
  483. package/lib/vendor/blamejs/test/layer-0-primitives/ssrf-guard.test.js +21 -0
  484. package/lib/vendor/blamejs/test/layer-0-primitives/static.test.js +850 -0
  485. package/lib/vendor/blamejs/test/layer-0-primitives/storage-presigned-url.test.js +146 -0
  486. package/lib/vendor/blamejs/test/layer-0-primitives/storage.test.js +621 -0
  487. package/lib/vendor/blamejs/test/layer-0-primitives/subject.test.js +47 -0
  488. package/lib/vendor/blamejs/test/layer-0-primitives/template.test.js +582 -0
  489. package/lib/vendor/blamejs/test/layer-0-primitives/tenant-quota.test.js +587 -25
  490. package/lib/vendor/blamejs/test/layer-0-primitives/time.test.js +11 -0
  491. package/lib/vendor/blamejs/test/layer-0-primitives/tsa.test.js +524 -63
  492. package/lib/vendor/blamejs/test/layer-0-primitives/uri-template.test.js +27 -0
  493. package/lib/vendor/blamejs/test/layer-0-primitives/vault-rotate.test.js +866 -0
  494. package/lib/vendor/blamejs/test/layer-0-primitives/vault.test.js +74 -0
  495. package/lib/vendor/blamejs/test/layer-0-primitives/vc.test.js +215 -0
  496. package/lib/vendor/blamejs/test/layer-0-primitives/watcher.test.js +550 -0
  497. package/lib/vendor/blamejs/test/layer-0-primitives/webhook-dispatcher.test.js +388 -0
  498. package/lib/vendor/blamejs/test/layer-0-primitives/webhook.test.js +262 -0
  499. package/lib/vendor/blamejs/test/layer-0-primitives/websocket.test.js +1294 -0
  500. package/lib/vendor/blamejs/test/layer-0-primitives/ws-client.test.js +629 -0
  501. package/lib/vendor/blamejs/test/layer-0-primitives/xml-c14n-attr-normalization.test.js +164 -0
  502. package/lib/vendor/blamejs/test/smoke.js +2 -0
  503. package/package.json +1 -1
  504. package/lib/vendor/blamejs/release-notes/v0.16.0.json +0 -44
  505. package/lib/vendor/blamejs/release-notes/v0.16.1.json +0 -36
  506. package/lib/vendor/blamejs/release-notes/v0.16.2.json +0 -71
  507. package/lib/vendor/blamejs/release-notes/v0.16.3.json +0 -71
  508. package/lib/vendor/blamejs/test/layer-0-primitives/acme-coverage.test.js +0 -441
  509. package/lib/vendor/blamejs/test/layer-0-primitives/auth-oauth-coverage.test.js +0 -482
  510. package/lib/vendor/blamejs/test/layer-0-primitives/auth-saml-coverage.test.js +0 -671
  511. package/lib/vendor/blamejs/test/layer-0-primitives/backup-index-coverage.test.js +0 -690
  512. package/lib/vendor/blamejs/test/layer-0-primitives/cli-coverage.test.js +0 -238
  513. package/lib/vendor/blamejs/test/layer-0-primitives/content-credentials-coverage.test.js +0 -319
  514. package/lib/vendor/blamejs/test/layer-0-primitives/keychain-coverage.test.js +0 -0
  515. package/lib/vendor/blamejs/test/layer-0-primitives/mail-auth-coverage.test.js +0 -437
  516. package/lib/vendor/blamejs/test/layer-0-primitives/mcp-coverage.test.js +0 -443
  517. package/lib/vendor/blamejs/test/layer-0-primitives/metrics-coverage.test.js +0 -395
  518. package/lib/vendor/blamejs/test/layer-0-primitives/network-smtp-policy-coverage.test.js +0 -565
  519. package/lib/vendor/blamejs/test/layer-0-primitives/router-coverage.test.js +0 -592
  520. package/lib/vendor/blamejs/test/layer-0-primitives/sql-coverage.test.js +0 -422
  521. package/lib/vendor/blamejs/test/layer-0-primitives/test-coverage.test.js +0 -573
@@ -1,482 +0,0 @@
1
- // SPDX-License-Identifier: Apache-2.0
2
- // Copyright (c) blamejs contributors
3
- "use strict";
4
- /**
5
- * b.auth.oauth — config-time + offline-validation coverage.
6
- *
7
- * Complements oauth-callback.test.js (which exercises the network-driven
8
- * discovery / PAR / attestation happy paths) by pinning the input-
9
- * validation, option-default, and adversarial-shape branches that resolve
10
- * WITHOUT a live IdP: create() gating, _validateUrl scheme/localhost
11
- * rules, the pre-JWKS verifyIdToken refusals (JWE / crit / alg-allowlist /
12
- * malformed), the per-method required-argument guards, the offline URL
13
- * builders (authorizationUrl / endSessionUrl), parseFrontchannelLogoutRequest,
14
- * the RFC 9396 granted-details cross-check edge cases, and the
15
- * attestation builder/verifier validation surface.
16
- *
17
- * Every assertion drives the public b.auth.oauth surface; no branch here
18
- * reaches the network (each throws before endpoint resolution, or builds a
19
- * URL from a static endpoint, or is a pure helper).
20
- */
21
-
22
- var crypto = require("node:crypto");
23
- var helpers = require("../helpers");
24
- var b = helpers.b;
25
- var check = helpers.check;
26
-
27
- var X = b.auth.oauth;
28
-
29
- // Reject a SYNCHRONOUS call with a specific OAuthError code.
30
- function rejects(label, fn, code) {
31
- var threw = null;
32
- try { fn(); } catch (e) { threw = e; }
33
- check(label, threw !== null && threw.code === code);
34
- }
35
-
36
- // Reject an ASYNC call (Promise) with a specific OAuthError code.
37
- async function arejects(label, fn, code) {
38
- var threw = null;
39
- try { await fn(); } catch (e) { threw = e; }
40
- check(label, threw !== null && threw.code === code);
41
- }
42
-
43
- // A static-endpoint OIDC client: every endpoint is configured, so no code
44
- // path here forces a discovery fetch.
45
- function _staticOidcClient(extra) {
46
- var opts = {
47
- issuer: "https://idp.example",
48
- clientId: "rp-cov",
49
- clientSecret: "cov-secret",
50
- redirectUri: "https://rp.example/cb",
51
- isOidc: true,
52
- authorizationEndpoint: "https://idp.example/auth",
53
- tokenEndpoint: "https://idp.example/token",
54
- userinfoEndpoint: "https://idp.example/userinfo",
55
- revocationEndpoint: "https://idp.example/revoke",
56
- endSessionEndpoint: "https://idp.example/logout",
57
- jwksUri: "https://idp.example/jwks",
58
- };
59
- if (extra) { var k = Object.keys(extra); for (var i = 0; i < k.length; i++) opts[k[i]] = extra[k[i]]; }
60
- return X.create(opts);
61
- }
62
-
63
- function _b64url(obj) {
64
- return Buffer.from(JSON.stringify(obj), "utf8").toString("base64url");
65
- }
66
-
67
- async function run() {
68
- // ---- module surface ----
69
- check("oauth.create is fn", typeof X.create === "function");
70
- check("oauth.OAuthError is fn", typeof X.OAuthError === "function");
71
- check("oauth.PRESETS frozen", Object.isFrozen(X.PRESETS));
72
- check("oauth.PRESETS has the 7 vendors",
73
- ["google", "microsoft", "apple", "auth0", "keycloak", "github", "generic"]
74
- .every(function (p) { return Object.prototype.hasOwnProperty.call(X.PRESETS, p); }));
75
- check("oauth.DEFAULT_ACCEPTED_ALGS excludes HS256",
76
- X.DEFAULT_ACCEPTED_ALGS.indexOf("HS256") === -1 && X.DEFAULT_ACCEPTED_ALGS.indexOf("RS256") !== -1);
77
- check("oauth.ATTESTATION_ALGS includes EdDSA, excludes HS256",
78
- X.ATTESTATION_ALGS.indexOf("EdDSA") !== -1 && X.ATTESTATION_ALGS.indexOf("HS256") === -1);
79
-
80
- // ---- create(): required-arg + posture gating ----
81
- rejects("create: pkce:false refused (OAuth 2.1)",
82
- function () { X.create({ clientId: "a", redirectUri: "https://x/cb", pkce: false }); },
83
- "auth-oauth/pkce-required");
84
- rejects("create: missing clientId refused",
85
- function () { X.create({ redirectUri: "https://x/cb" }); }, "auth-oauth/no-client-id");
86
- rejects("create: missing redirectUri refused",
87
- function () { X.create({ clientId: "a" }); }, "auth-oauth/no-redirect-uri");
88
- rejects("create: unknown provider preset refused",
89
- function () { X.create({ clientId: "a", redirectUri: "https://x/cb", provider: "nope" }); },
90
- "auth-oauth/unknown-provider");
91
- rejects("create: non-finite clockSkewMs refused (Infinity would disable exp gate)",
92
- function () { X.create({ clientId: "a", redirectUri: "https://x/cb", clockSkewMs: Infinity }); },
93
- "auth-oauth/bad-clock-skew");
94
- rejects("create: NaN clockSkewMs refused",
95
- function () { X.create({ clientId: "a", redirectUri: "https://x/cb", clockSkewMs: NaN }); },
96
- "auth-oauth/bad-clock-skew");
97
-
98
- // ---- _validateUrl via redirectUri (scheme allowlist + localhost rule) ----
99
- rejects("create: http:// non-localhost redirect refused",
100
- function () { X.create({ clientId: "a", redirectUri: "http://evil.example/cb" }); },
101
- "auth-oauth/insecure-url");
102
- rejects("create: javascript: redirect refused",
103
- function () { X.create({ clientId: "a", redirectUri: "javascript:alert(1)" }); },
104
- "auth-oauth/insecure-url");
105
- check("create: http://localhost redirect accepted (dev exception)",
106
- !!X.create({ clientId: "a", redirectUri: "http://localhost:3000/cb" }));
107
- check("create: http://127.0.0.1 redirect accepted (dev exception)",
108
- !!X.create({ clientId: "a", redirectUri: "http://127.0.0.1/cb" }));
109
- check("create: http://[::1] redirect accepted (dev exception)",
110
- !!X.create({ clientId: "a", redirectUri: "http://[::1]:8080/cb" }));
111
- // RFC 1034 trailing-root-dot must still map to the loopback exception,
112
- // NOT slip an attacker-registered public 'localhost.' issuer past the gate.
113
- check("create: http://localhost./ trailing-dot accepted as loopback",
114
- !!X.create({ clientId: "a", redirectUri: "http://localhost./cb" }));
115
-
116
- // ---- create(): preset issuer templating ----
117
- rejects("create: auth0 preset without auth0Domain refused",
118
- function () { X.create({ clientId: "a", redirectUri: "https://x/cb", provider: "auth0" }); },
119
- "auth-oauth/auth0-domain");
120
- rejects("create: keycloak preset without url/realm refused",
121
- function () { X.create({ clientId: "a", redirectUri: "https://x/cb", provider: "keycloak" }); },
122
- "auth-oauth/keycloak-config");
123
- var a0 = X.create({ clientId: "a", redirectUri: "https://x/cb", provider: "auth0", auth0Domain: "t.auth0.com" });
124
- check("create: auth0 preset expands issuer", a0.issuer === "https://t.auth0.com");
125
- var kc = X.create({ clientId: "a", redirectUri: "https://x/cb",
126
- provider: "keycloak", keycloakUrl: "https://kc.example/", keycloakRealm: "r" });
127
- check("create: keycloak preset expands issuer + strips trailing slash",
128
- kc.issuer === "https://kc.example/realms/r");
129
- var gh = X.create({ provider: "github", clientId: "gh", redirectUri: "https://rp.example/cb" });
130
- check("create: github preset is non-OIDC", gh.isOidc === false && gh.issuer === null);
131
-
132
- // ---- helper: _verifyParamsForAlg ----
133
- check("_verifyParamsForAlg RS256 → RSA PKCS1 sha256",
134
- X._verifyParamsForAlg("RS256").hash === "sha256" && X._verifyParamsForAlg("RS256").padding !== undefined);
135
- check("_verifyParamsForAlg PS256 → PSS saltLength set",
136
- X._verifyParamsForAlg("PS256").saltLength === 32);
137
- check("_verifyParamsForAlg ES256 → ieee-p1363 dsaEncoding",
138
- X._verifyParamsForAlg("ES256").dsaEncoding === "ieee-p1363");
139
- rejects("_verifyParamsForAlg EdDSA refused for ID-token verify",
140
- function () { X._verifyParamsForAlg("EdDSA"); }, "auth-oauth/unsupported-alg");
141
- rejects("_verifyParamsForAlg HS256 refused (no symmetric ID tokens)",
142
- function () { X._verifyParamsForAlg("HS256"); }, "auth-oauth/unsupported-alg");
143
-
144
- // ---- helper: base64url + PKCE ----
145
- check("_b64urlEncode/_b64urlDecode round-trips",
146
- X._b64urlDecode(X._b64urlEncode(Buffer.from("hello-oauth"))).toString("utf8") === "hello-oauth");
147
- rejects("_b64urlDecode refuses non-base64url input",
148
- function () { X._b64urlDecode("@@@@"); }, "auth-oauth/bad-base64");
149
- var pkce = X._generatePkce();
150
- check("_generatePkce: verifier is 43 base64url chars (RFC 7636 32-byte)", pkce.verifier.length === 43);
151
- check("_generatePkce: challenge is base64url(SHA-256(verifier))",
152
- pkce.challenge === crypto.createHash("sha256").update(pkce.verifier).digest("base64url"));
153
- check("_generateRandomToken(16) → 22 base64url chars (128-bit)",
154
- X._generateRandomToken(16).length === 22);
155
-
156
- // ---- verifyIdToken: pre-JWKS refusals (no network reached) ----
157
- var oa = _staticOidcClient();
158
- await arejects("verifyIdToken: non-string refused",
159
- function () { return oa.verifyIdToken(123); }, "auth-oauth/no-id-token");
160
- await arejects("verifyIdToken: 5-segment JWE refused (CVE-2026-29000 class)",
161
- function () { return oa.verifyIdToken("a.b.c.d.e"); }, "auth-oauth/jwe-refused");
162
- await arejects("verifyIdToken: 2-segment token refused",
163
- function () { return oa.verifyIdToken("a.b"); }, "auth-oauth/malformed-jwt");
164
- await arejects("verifyIdToken: undecodable header refused",
165
- function () { return oa.verifyIdToken("!!!." + _b64url({}) + ".sig"); }, "auth-oauth/malformed-jwt");
166
- await arejects("verifyIdToken: header missing alg refused",
167
- function () { return oa.verifyIdToken(_b64url({ typ: "JWT" }) + "." + _b64url({}) + ".sig"); },
168
- "auth-oauth/malformed-jwt");
169
- await arejects("verifyIdToken: alg not in accepted list refused before key lookup",
170
- function () { return oa.verifyIdToken(_b64url({ alg: "HS256" }) + "." + _b64url({}) + ".sig"); },
171
- "auth-oauth/alg-not-accepted");
172
- await arejects("verifyIdToken: crit header refused (RFC 7515 §4.1.11)",
173
- function () { return oa.verifyIdToken(_b64url({ alg: "RS256", crit: ["x"] }) + "." + _b64url({}) + ".sig"); },
174
- "auth-oauth/crit-not-supported");
175
-
176
- // ---- authorizationUrl: offline (static endpoints / non-OIDC) ----
177
- var ghAuth = await gh.authorizationUrl();
178
- var ghUrl = new URL(ghAuth.url);
179
- check("authorizationUrl: non-OIDC emits no nonce", ghAuth.nonce === null);
180
- check("authorizationUrl: always S256 PKCE",
181
- ghUrl.searchParams.get("code_challenge_method") === "S256" &&
182
- ghUrl.searchParams.get("code_challenge") === ghAuth.challenge);
183
- check("authorizationUrl: verifier is the 43-char PKCE verifier", ghAuth.verifier.length === 43);
184
- check("authorizationUrl: carries response_type/client_id/redirect_uri/state",
185
- ghUrl.searchParams.get("response_type") === "code" &&
186
- ghUrl.searchParams.get("client_id") === "gh" &&
187
- ghUrl.searchParams.get("redirect_uri") === "https://rp.example/cb" &&
188
- ghUrl.searchParams.get("state") === ghAuth.state);
189
-
190
- var ghAuth2 = await gh.authorizationUrl({ prompt: "consent", loginHint: "a@b.co", maxAge: 60 });
191
- var ghUrl2 = new URL(ghAuth2.url);
192
- check("authorizationUrl: prompt/login_hint/max_age threaded through",
193
- ghUrl2.searchParams.get("prompt") === "consent" &&
194
- ghUrl2.searchParams.get("login_hint") === "a@b.co" &&
195
- ghUrl2.searchParams.get("max_age") === "60");
196
-
197
- var ghState = await gh.authorizationUrl({ state: "given-state", nonce: "given-nonce" });
198
- check("authorizationUrl: caller-supplied state is used verbatim",
199
- ghState.state === "given-state" && new URL(ghState.url).searchParams.get("state") === "given-state");
200
-
201
- // static OIDC client: nonce present, discovery NOT fetched (static endpoint)
202
- var oidcAuth = await oa.authorizationUrl();
203
- check("authorizationUrl: OIDC client emits a fresh nonce",
204
- typeof oidcAuth.nonce === "string" && oidcAuth.nonce.length > 0 &&
205
- new URL(oidcAuth.url).searchParams.get("nonce") === oidcAuth.nonce);
206
-
207
- // separator selection when the endpoint already carries a query string
208
- var oaQ = _staticOidcClient({ authorizationEndpoint: "https://idp.example/auth?foo=1" });
209
- var qAuth = await oaQ.authorizationUrl();
210
- check("authorizationUrl: appends with & when endpoint has an existing query",
211
- qAuth.url.indexOf("/auth?foo=1&") !== -1);
212
-
213
- // responseMode threaded (github + explicit opt, offline)
214
- var ghRm = X.create({ provider: "github", clientId: "gh", redirectUri: "https://rp.example/cb", responseMode: "form_post" });
215
- check("authorizationUrl: response_mode from opts emitted",
216
- new URL((await ghRm.authorizationUrl()).url).searchParams.get("response_mode") === "form_post");
217
-
218
- // RFC 9396 authorization_details validation on authorizationUrl
219
- var rar = await gh.authorizationUrl({ authorizationDetails: [{ type: "payment_initiation", actions: ["initiate"] }] });
220
- check("authorizationUrl: serializes valid authorization_details",
221
- /[?&]authorization_details=/.test(rar.url) && Array.isArray(rar.authorizationDetails));
222
- await arejects("authorizationUrl: non-array authorization_details refused",
223
- function () { return gh.authorizationUrl({ authorizationDetails: "nope" }); },
224
- "auth-oauth/bad-authorization-details");
225
- await arejects("authorizationUrl: entry missing type refused",
226
- function () { return gh.authorizationUrl({ authorizationDetails: [{ noType: 1 }] }); },
227
- "auth-oauth/bad-authorization-details");
228
- await arejects("authorizationUrl: non-object entry refused",
229
- function () { return gh.authorizationUrl({ authorizationDetails: [42] }); },
230
- "auth-oauth/bad-authorization-details");
231
-
232
- // ---- exchangeCode: required-arg + OIDC nonce gate ----
233
- await arejects("exchangeCode: missing code refused",
234
- function () { return oa.exchangeCode({}); }, "auth-oauth/no-code");
235
- await arejects("exchangeCode: missing verifier refused when PKCE on",
236
- function () { return oa.exchangeCode({ code: "c" }); }, "auth-oauth/no-verifier");
237
- await arejects("exchangeCode: OIDC flow without nonce refused",
238
- function () { return oa.exchangeCode({ code: "c", verifier: "v" }); }, "auth-oauth/no-nonce");
239
- await arejects("exchangeCode: empty-string nonce refused (falsy slips === undefined guard)",
240
- function () { return oa.exchangeCode({ code: "c", verifier: "v", nonce: "" }); }, "auth-oauth/no-nonce");
241
-
242
- // ---- refreshAccessToken: replay defense (correct-shape callbacks) ----
243
- await arejects("refreshAccessToken: missing token refused",
244
- function () { return oa.refreshAccessToken(""); }, "auth-oauth/no-refresh-token");
245
- await arejects("refreshAccessToken: seen()===true refuses replay",
246
- function () { return oa.refreshAccessToken("rt", { seen: function () { return true; } }); },
247
- "auth-oauth/refresh-token-replay");
248
- await arejects("refreshAccessToken: checkAndInsert()===false refuses replay",
249
- function () { return oa.refreshAccessToken("rt", { checkAndInsert: function () { return false; } }); },
250
- "auth-oauth/refresh-token-replay");
251
- await arejects("refreshAccessToken: checkAndInsert throwing surfaces typed error",
252
- function () { return oa.refreshAccessToken("rt", { checkAndInsert: function () { throw new Error("store down"); } }); },
253
- "auth-oauth/seen-callback-failed");
254
- await arejects("refreshAccessToken: seen throwing surfaces typed error",
255
- function () { return oa.refreshAccessToken("rt", { seen: function () { throw new Error("store down"); } }); },
256
- "auth-oauth/seen-callback-failed");
257
-
258
- // ---- exchangeToken / nativeSsoExchange: RFC 8693 token-type gate ----
259
- await arejects("exchangeToken: missing subjectToken refused",
260
- function () { return oa.exchangeToken({}); }, "auth-oauth/bad-exchange");
261
- await arejects("exchangeToken: missing subjectTokenType refused",
262
- function () { return oa.exchangeToken({ subjectToken: "s" }); }, "auth-oauth/bad-exchange");
263
- await arejects("exchangeToken: subjectTokenType outside RFC 8693 §3 refused",
264
- function () { return oa.exchangeToken({ subjectToken: "s", subjectTokenType: "urn:custom" }); },
265
- "auth-oauth/bad-subject-token-type");
266
- await arejects("exchangeToken: actorTokenType outside RFC 8693 §3 refused",
267
- function () { return oa.exchangeToken({ subjectToken: "s",
268
- subjectTokenType: "urn:ietf:params:oauth:token-type:access_token",
269
- actorToken: "a", actorTokenType: "urn:bad" }); },
270
- "auth-oauth/bad-actor-token-type");
271
- await arejects("nativeSsoExchange: missing deviceSecret refused",
272
- function () { return oa.nativeSsoExchange({ idToken: "x" }); }, "auth-oauth/bad-native-sso");
273
- await arejects("nativeSsoExchange: missing idToken refused",
274
- function () { return oa.nativeSsoExchange({ deviceSecret: "x" }); }, "auth-oauth/bad-native-sso");
275
-
276
- // ---- device grant / introspection / revoke / userinfo required-arg ----
277
- await arejects("pollDeviceCode: empty deviceCode refused",
278
- function () { return oa.pollDeviceCode(""); }, "auth-oauth/bad-device-code");
279
- await arejects("pollDeviceCode: over-long deviceCode refused (amplification cap)",
280
- function () { return oa.pollDeviceCode("a".repeat(9000)); }, "auth-oauth/device-code-too-large");
281
- await arejects("introspectToken: empty token refused",
282
- function () { return oa.introspectToken(""); }, "auth-oauth/bad-introspect");
283
- await arejects("revokeToken: missing token refused",
284
- function () { return oa.revokeToken(""); }, "auth-oauth/no-token");
285
- await arejects("fetchUserInfo: missing access token refused",
286
- function () { return oa.fetchUserInfo(""); }, "auth-oauth/no-access-token");
287
- await arejects("fetchUserInfo: OIDC requires verified idTokenSub cross-check",
288
- function () { return oa.fetchUserInfo("at"); }, "auth-oauth/userinfo-no-id-token-sub");
289
-
290
- // ---- dynamic client registration (RFC 7591/7592) required-arg ----
291
- await arejects("registerClient: non-object metadata refused",
292
- function () { return oa.registerClient(null); }, "auth-oauth/bad-register");
293
- await arejects("registerClient: empty redirect_uris refused (open-redirect surface)",
294
- function () { return oa.registerClient({}); }, "auth-oauth/register-no-redirect-uris");
295
- await arejects("registerClient: http redirect_uri refused",
296
- function () { return oa.registerClient({ redirect_uris: ["http://evil.example"] }); },
297
- "auth-oauth/insecure-url");
298
- await arejects("updateClient: non-object metadata refused",
299
- function () { return oa.updateClient("https://as/reg", "tok", null); }, "auth-oauth/bad-update");
300
- await arejects("updateClient: empty redirect_uris refused",
301
- function () { return oa.updateClient("https://as/reg", "tok", {}); }, "auth-oauth/update-no-redirect-uris");
302
- await arejects("readClient: empty registrationClientUri refused",
303
- function () { return oa.readClient("", "tok"); }, "auth-oauth/bad-registration-client-uri");
304
- await arejects("readClient: empty registrationAccessToken refused",
305
- function () { return oa.readClient("https://as/reg", ""); }, "auth-oauth/bad-registration-access-token");
306
- await arejects("deleteClient: http registrationClientUri refused",
307
- function () { return oa.deleteClient("http://evil/reg", "tok"); }, "auth-oauth/insecure-url");
308
-
309
- // ---- endSessionUrl: offline builder (static end_session_endpoint) ----
310
- var esUrl = await oa.endSessionUrl({ idTokenHint: "idt", state: "s1",
311
- postLogoutRedirectUri: "https://rp.example/done", logoutHint: "u@x", uiLocales: "en" });
312
- var esU = new URL(esUrl);
313
- check("endSessionUrl: threads id_token_hint/state/logout_hint/ui_locales + client_id",
314
- esU.searchParams.get("id_token_hint") === "idt" &&
315
- esU.searchParams.get("state") === "s1" &&
316
- esU.searchParams.get("post_logout_redirect_uri") === "https://rp.example/done" &&
317
- esU.searchParams.get("logout_hint") === "u@x" &&
318
- esU.searchParams.get("ui_locales") === "en" &&
319
- esU.searchParams.get("client_id") === "rp-cov");
320
- var esNoCid = await oa.endSessionUrl({ clientId: false });
321
- check("endSessionUrl: clientId:false omits client_id (bare endpoint)",
322
- new URL(esNoCid).searchParams.get("client_id") === null);
323
- await arejects("endSessionUrl: javascript: post_logout_redirect_uri refused",
324
- function () { return oa.endSessionUrl({ postLogoutRedirectUri: "javascript:alert(1)" }); },
325
- "auth-oauth/insecure-url");
326
- await arejects("endSessionUrl: extraParams colliding with a first-class key refused",
327
- function () { return oa.endSessionUrl({ extraParams: { state: "smuggled" } }); },
328
- "auth-oauth/end-session-reserved-extra-param");
329
-
330
- // ---- parseFrontchannelLogoutRequest: synchronous, no network ----
331
- rejects("parseFrontchannelLogoutRequest: missing req refused",
332
- function () { oa.parseFrontchannelLogoutRequest(null); }, "auth-oauth/bad-frontchannel-logout-req");
333
- var fcl = oa.parseFrontchannelLogoutRequest({ url: "/fc?iss=https%3A%2F%2Fidp.example&sid=sess-1" });
334
- check("parseFrontchannelLogoutRequest: matching iss returns (iss, sid)",
335
- fcl.iss === "https://idp.example" && fcl.sid === "sess-1");
336
- var fclNoIss = oa.parseFrontchannelLogoutRequest({ url: "/fc?sid=sess-2" });
337
- check("parseFrontchannelLogoutRequest: absent iss defaults to configured issuer, sid surfaced",
338
- fclNoIss.iss === "https://idp.example" && fclNoIss.sid === "sess-2");
339
- rejects("parseFrontchannelLogoutRequest: cross-realm iss refused (CVE-2026-23552)",
340
- function () { oa.parseFrontchannelLogoutRequest({ url: "/fc?iss=https%3A%2F%2Fevil.example" }); },
341
- "auth-oauth/frontchannel-logout-iss-mismatch");
342
-
343
- // ---- parseCallback: shape guards (network-free forms) ----
344
- await arejects("parseCallback: non-object query refused",
345
- function () { return oa.parseCallback(null); }, "auth-oauth/bad-callback");
346
- await arejects("parseCallback: missing code refused (iss supplied + requireIssParam skips discovery)",
347
- function () { return oa.parseCallback({ iss: "https://idp.example" }, { requireIssParam: true }); },
348
- "auth-oauth/no-code-in-callback");
349
- await arejects("parseCallback: OP error param refused",
350
- function () { return oa.parseCallback({ error: "access_denied" }, { requireIssParam: true }); },
351
- "auth-oauth/op-error");
352
-
353
- // ---- parseJarmResponse: shape guards ----
354
- await arejects("parseJarmResponse: empty response refused",
355
- function () { return oa.parseJarmResponse(""); }, "auth-oauth/no-jarm-response");
356
- await arejects("parseJarmResponse: non-3-segment response refused",
357
- function () { return oa.parseJarmResponse("not.a.jws.token.here"); }, "auth-oauth/malformed-jarm-response");
358
-
359
- // ---- RFC 9396 granted-details cross-check: edge cases ----
360
- check("crossCheck: null granted → null",
361
- X._crossCheckGrantedAuthorizationDetails(null, null, true) === null);
362
- check("crossCheck: undefined granted → null",
363
- X._crossCheckGrantedAuthorizationDetails(undefined, [{ type: "x" }], true) === null);
364
- check("crossCheck: no requested → granted passed through verbatim",
365
- JSON.stringify(X._crossCheckGrantedAuthorizationDetails([{ type: "x" }], null, true)) === JSON.stringify([{ type: "x" }]));
366
- rejects("crossCheck: non-array granted refused",
367
- function () { X._crossCheckGrantedAuthorizationDetails({ type: "x" }, null, true); },
368
- "auth-oauth/bad-granted-authorization-details");
369
- rejects("crossCheck: granted entry not a typed object refused",
370
- function () { X._crossCheckGrantedAuthorizationDetails([{ noType: 1 }], [{ type: "x" }], true); },
371
- "auth-oauth/bad-granted-authorization-details");
372
- var reqDetails = [{ type: "payment_initiation", actions: ["initiate", "status"], locations: ["https://rs/pay"] }];
373
- var subset = X._crossCheckGrantedAuthorizationDetails(
374
- [{ type: "payment_initiation", actions: ["status"] }], reqDetails, true);
375
- check("crossCheck: granted subset accepted", Array.isArray(subset) && subset.length === 1);
376
- rejects("crossCheck: over-granted datatypes field refused",
377
- function () { X._crossCheckGrantedAuthorizationDetails(
378
- [{ type: "payment_initiation", datatypes: ["ssn"] }], reqDetails, true); },
379
- "auth-oauth/authorization-details-over-grant");
380
- var big = [];
381
- for (var bi = 0; bi < 20000; bi++) big.push({ type: "payment_initiation", locations: ["https://rs.example/very/long/path/segment/" + bi] });
382
- rejects("crossCheck: oversized granted payload refused (parse-bomb cap)",
383
- function () { X._crossCheckGrantedAuthorizationDetails(big, [{ type: "payment_initiation" }], false); },
384
- "auth-oauth/granted-authorization-details-too-large");
385
-
386
- // ---- attestation builders: validation + claim shaping ----
387
- var attKp = crypto.generateKeyPairSync("ec", { namedCurve: "P-256" });
388
- var instKp = crypto.generateKeyPairSync("ec", { namedCurve: "P-256" });
389
- var instPub = instKp.publicKey.export({ format: "jwk" });
390
- var attPub = attKp.publicKey.export({ format: "jwk" });
391
-
392
- rejects("buildClientAttestation: missing clientId refused",
393
- function () { X.buildClientAttestation({ attesterPrivateKey: attKp.privateKey, instanceKeyJwk: instPub }); },
394
- "auth-oauth/attestation-no-client-id");
395
- rejects("buildClientAttestation: missing attesterPrivateKey refused",
396
- function () { X.buildClientAttestation({ clientId: "w", instanceKeyJwk: instPub }); },
397
- "auth-oauth/attestation-no-attester-key");
398
- rejects("buildClientAttestation: missing instanceKeyJwk refused",
399
- function () { X.buildClientAttestation({ clientId: "w", attesterPrivateKey: attKp.privateKey }); },
400
- "auth-oauth/attestation-bad-cnf");
401
- rejects("buildClientAttestation: symmetric cnf kty refused (no private half in cnf)",
402
- function () { X.buildClientAttestation({ clientId: "w", attesterPrivateKey: attKp.privateKey,
403
- instanceKeyJwk: { kty: "oct", k: "AAAA" } }); },
404
- "auth-oauth/attestation-bad-cnf");
405
- rejects("buildClientAttestation: non-finite nbf refused",
406
- function () { X.buildClientAttestation({ clientId: "w", attesterPrivateKey: attKp.privateKey,
407
- instanceKeyJwk: instPub, nbf: Infinity }); }, "auth-oauth/attestation-bad-nbf");
408
- rejects("buildClientAttestation: non-finite iat refused",
409
- function () { X.buildClientAttestation({ clientId: "w", attesterPrivateKey: attKp.privateKey,
410
- instanceKeyJwk: instPub, iat: NaN }); }, "auth-oauth/attestation-bad-iat");
411
- rejects("buildClientAttestation: zero expiresInSec refused (positive-int)",
412
- function () { X.buildClientAttestation({ clientId: "w", attesterPrivateKey: attKp.privateKey,
413
- instanceKeyJwk: instPub, expiresInSec: 0 }); }, "auth-oauth/attestation-bad-expiry");
414
-
415
- // extraClaims cannot overwrite spec-reserved fields (sub/iat/exp/cnf/nbf)
416
- var attExtra = X.buildClientAttestation({ clientId: "w", attesterPrivateKey: attKp.privateKey,
417
- instanceKeyJwk: instPub, iat: 1000, expiresInSec: 60, nbf: 100,
418
- extraClaims: { sub: "HIJACK", exp: 9, role: "admin" } });
419
- var attPayload = JSON.parse(Buffer.from(attExtra.split(".")[1], "base64url").toString("utf8"));
420
- check("buildClientAttestation: extraClaims cannot override sub/exp; passes non-reserved keys",
421
- attPayload.sub === "w" && attPayload.exp === 1060 && attPayload.role === "admin" &&
422
- attPayload.iat === 1000 && attPayload.nbf === 100);
423
-
424
- rejects("buildClientAttestationPop: missing audience refused",
425
- function () { X.buildClientAttestationPop({ instancePrivateKey: instKp.privateKey }); },
426
- "auth-oauth/attestation-pop-no-aud");
427
- rejects("buildClientAttestationPop: missing instancePrivateKey refused",
428
- function () { X.buildClientAttestationPop({ audience: "https://as" }); },
429
- "auth-oauth/attestation-pop-no-instance-key");
430
- var popShaped = X.buildClientAttestationPop({ instancePrivateKey: instKp.privateKey, audience: "https://as",
431
- expiresInSec: 120, challenge: "srv-ch", jti: "fixed-jti" });
432
- var popPayload = JSON.parse(Buffer.from(popShaped.split(".")[1], "base64url").toString("utf8"));
433
- check("buildClientAttestationPop: exp/challenge/jti overrides shaped into payload",
434
- typeof popPayload.exp === "number" && popPayload.challenge === "srv-ch" && popPayload.jti === "fixed-jti");
435
-
436
- // ---- verifyClientAttestation: validation + freshness gates ----
437
- var att = X.buildClientAttestation({ clientId: "w", attesterPrivateKey: attKp.privateKey, instanceKeyJwk: instPub });
438
- var pop = X.buildClientAttestationPop({ instancePrivateKey: instKp.privateKey, audience: "https://as" });
439
- await arejects("verifyClientAttestation: missing attesterJwk refused",
440
- function () { return X.verifyClientAttestation(att, pop, { expectedAudience: "https://as" }); },
441
- "auth-oauth/attestation-no-attester-jwk");
442
- await arejects("verifyClientAttestation: missing expectedAudience refused",
443
- function () { return X.verifyClientAttestation(att, pop, { attesterJwk: attPub }); },
444
- "auth-oauth/attestation-no-expected-aud");
445
- await arejects("verifyClientAttestation: non-finite clockSkewSec refused (would disable exp gate)",
446
- function () { return X.verifyClientAttestation(att, pop, { attesterJwk: attPub,
447
- expectedAudience: "https://as", clockSkewSec: Infinity }); }, "auth-oauth/bad-clock-skew");
448
- await arejects("verifyClientAttestation: non-finite maxPopAgeSec refused",
449
- function () { return X.verifyClientAttestation(att, pop, { attesterJwk: attPub,
450
- expectedAudience: "https://as", maxPopAgeSec: Infinity }); }, "auth-oauth/bad-pop-max-age");
451
- var expiredAtt = X.buildClientAttestation({ clientId: "w", attesterPrivateKey: attKp.privateKey,
452
- instanceKeyJwk: instPub, iat: 1000, expiresInSec: 60 });
453
- await arejects("verifyClientAttestation: expired attestation refused",
454
- function () { return X.verifyClientAttestation(expiredAtt, pop, { attesterJwk: attPub, expectedAudience: "https://as" }); },
455
- "auth-oauth/attestation-expired");
456
- var stalePop = X.buildClientAttestationPop({ instancePrivateKey: instKp.privateKey, audience: "https://as", iat: 1000 });
457
- await arejects("verifyClientAttestation: stale PoP iat refused",
458
- function () { return X.verifyClientAttestation(att, stalePop, { attesterJwk: attPub, expectedAudience: "https://as" }); },
459
- "auth-oauth/attestation-pop-stale");
460
- var futurePop = X.buildClientAttestationPop({ instancePrivateKey: instKp.privateKey, audience: "https://as",
461
- iat: Math.floor(Date.now() / 1000) + 100000 });
462
- await arejects("verifyClientAttestation: future PoP iat refused",
463
- function () { return X.verifyClientAttestation(att, futurePop, { attesterJwk: attPub, expectedAudience: "https://as" }); },
464
- "auth-oauth/attestation-pop-iat-future");
465
- await arejects("verifyClientAttestation: seenJti callback throwing surfaces typed error",
466
- function () {
467
- var freshPop = X.buildClientAttestationPop({ instancePrivateKey: instKp.privateKey, audience: "https://as" });
468
- return X.verifyClientAttestation(att, freshPop, { attesterJwk: attPub, expectedAudience: "https://as",
469
- seenJti: function () { throw new Error("store down"); } });
470
- }, "auth-oauth/attestation-pop-seen-callback-failed");
471
-
472
- console.log("auth-oauth-coverage checks passed");
473
- }
474
-
475
- module.exports = { run: run };
476
-
477
- if (require.main === module) {
478
- run().then(
479
- function () { console.log("OK — " + helpers.getChecks() + " checks passed"); },
480
- function (e) { console.error("FAIL:", e.stack || e); process.exit(1); }
481
- );
482
- }