@blamejs/blamejs-shop 0.5.12 → 0.5.14

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 (522) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/lib/asset-manifest.json +1 -1
  3. package/lib/sales-tax-filings.js +143 -0
  4. package/lib/vendor/MANIFEST.json +632 -416
  5. package/lib/vendor/blamejs/.clusterfuzzlite/Dockerfile +21 -10
  6. package/lib/vendor/blamejs/.clusterfuzzlite/build.sh +30 -9
  7. package/lib/vendor/blamejs/.github/dependabot.yml +8 -0
  8. package/lib/vendor/blamejs/.github/workflows/actions-lint.yml +3 -3
  9. package/lib/vendor/blamejs/.github/workflows/cflite_batch.yml +7 -2
  10. package/lib/vendor/blamejs/.github/workflows/cflite_pr.yml +7 -2
  11. package/lib/vendor/blamejs/.github/workflows/ci.yml +21 -21
  12. package/lib/vendor/blamejs/.github/workflows/codeql.yml +3 -3
  13. package/lib/vendor/blamejs/.github/workflows/npm-publish.yml +4 -4
  14. package/lib/vendor/blamejs/.github/workflows/release-container.yml +7 -7
  15. package/lib/vendor/blamejs/.github/workflows/scorecard.yml +3 -3
  16. package/lib/vendor/blamejs/.github/workflows/sha-to-tag-verify.yml +1 -1
  17. package/lib/vendor/blamejs/.gitignore +2 -0
  18. package/lib/vendor/blamejs/CHANGELOG.md +122 -0
  19. package/lib/vendor/blamejs/NOTICE +26 -1
  20. package/lib/vendor/blamejs/SECURITY.md +1 -1
  21. package/lib/vendor/blamejs/api-snapshot.json +207 -5
  22. package/lib/vendor/blamejs/docker/keycloak/realm-blamejs-test.json +29 -0
  23. package/lib/vendor/blamejs/examples/wiki/DEPLOY.md +1 -0
  24. package/lib/vendor/blamejs/examples/wiki/lib/build-app.js +31 -0
  25. package/lib/vendor/blamejs/examples/wiki/lib/source-comment-block-validator.js +109 -0
  26. package/lib/vendor/blamejs/examples/wiki/nginx.conf +106 -0
  27. package/lib/vendor/blamejs/examples/wiki/package-lock.json +1 -1
  28. package/lib/vendor/blamejs/examples/wiki/test/e2e.js +92 -0
  29. package/lib/vendor/blamejs/fuzz/asn1-der.fuzz.js +28 -0
  30. package/lib/vendor/blamejs/fuzz/cms-codec.fuzz.js +17 -0
  31. package/lib/vendor/blamejs/fuzz/link-header.fuzz.js +18 -0
  32. package/lib/vendor/blamejs/index.js +6 -0
  33. package/lib/vendor/blamejs/lib/a2a.js +4 -4
  34. package/lib/vendor/blamejs/lib/agent-idempotency.js +18 -2
  35. package/lib/vendor/blamejs/lib/agent-saga.js +36 -8
  36. package/lib/vendor/blamejs/lib/agent-snapshot.js +63 -6
  37. package/lib/vendor/blamejs/lib/app-shutdown.js +23 -20
  38. package/lib/vendor/blamejs/lib/archive-read.js +8 -0
  39. package/lib/vendor/blamejs/lib/archive-tar.js +12 -2
  40. package/lib/vendor/blamejs/lib/arg-parser.js +49 -5
  41. package/lib/vendor/blamejs/lib/asn1-der.js +12 -0
  42. package/lib/vendor/blamejs/lib/audit-sign.js +47 -1
  43. package/lib/vendor/blamejs/lib/audit.js +71 -8
  44. package/lib/vendor/blamejs/lib/auth/ciba.js +14 -2
  45. package/lib/vendor/blamejs/lib/auth/fido-mds3.js +58 -47
  46. package/lib/vendor/blamejs/lib/auth/jwt.js +34 -0
  47. package/lib/vendor/blamejs/lib/auth/oauth.js +90 -13
  48. package/lib/vendor/blamejs/lib/auth/oid4vci.js +20 -17
  49. package/lib/vendor/blamejs/lib/auth/openid-federation.js +214 -23
  50. package/lib/vendor/blamejs/lib/auth/saml.js +38 -20
  51. package/lib/vendor/blamejs/lib/auth/sd-jwt-vc.js +10 -4
  52. package/lib/vendor/blamejs/lib/backup/bundle.js +13 -3
  53. package/lib/vendor/blamejs/lib/backup/index.js +16 -5
  54. package/lib/vendor/blamejs/lib/backup/manifest.js +18 -5
  55. package/lib/vendor/blamejs/lib/base32.js +21 -0
  56. package/lib/vendor/blamejs/lib/break-glass.js +19 -10
  57. package/lib/vendor/blamejs/lib/bundler.js +5 -1
  58. package/lib/vendor/blamejs/lib/cache-status.js +3 -7
  59. package/lib/vendor/blamejs/lib/calendar.js +21 -1
  60. package/lib/vendor/blamejs/lib/cbor.js +12 -1
  61. package/lib/vendor/blamejs/lib/cert.js +29 -11
  62. package/lib/vendor/blamejs/lib/cli.js +94 -24
  63. package/lib/vendor/blamejs/lib/cloud-events.js +2 -2
  64. package/lib/vendor/blamejs/lib/cluster-provider-db.js +13 -3
  65. package/lib/vendor/blamejs/lib/codepoint-class.js +85 -0
  66. package/lib/vendor/blamejs/lib/compliance-ai-act-prohibited.js +8 -4
  67. package/lib/vendor/blamejs/lib/compliance-ai-act-transparency.js +19 -4
  68. package/lib/vendor/blamejs/lib/compliance-ai-act.js +6 -8
  69. package/lib/vendor/blamejs/lib/content-credentials.js +1 -1
  70. package/lib/vendor/blamejs/lib/content-digest.js +2 -1
  71. package/lib/vendor/blamejs/lib/cookies.js +13 -3
  72. package/lib/vendor/blamejs/lib/cose.js +31 -16
  73. package/lib/vendor/blamejs/lib/crypto-field.js +32 -0
  74. package/lib/vendor/blamejs/lib/crypto-oprf.js +11 -2
  75. package/lib/vendor/blamejs/lib/crypto-xwing.js +22 -4
  76. package/lib/vendor/blamejs/lib/crypto.js +314 -19
  77. package/lib/vendor/blamejs/lib/csp.js +11 -3
  78. package/lib/vendor/blamejs/lib/daemon.js +270 -24
  79. package/lib/vendor/blamejs/lib/dark-patterns.js +5 -2
  80. package/lib/vendor/blamejs/lib/db-declare-view.js +2 -2
  81. package/lib/vendor/blamejs/lib/db-query.js +34 -7
  82. package/lib/vendor/blamejs/lib/db.js +18 -6
  83. package/lib/vendor/blamejs/lib/dbsc.js +17 -0
  84. package/lib/vendor/blamejs/lib/dev.js +21 -2
  85. package/lib/vendor/blamejs/lib/dsr.js +157 -102
  86. package/lib/vendor/blamejs/lib/external-db.js +41 -2
  87. package/lib/vendor/blamejs/lib/file-upload.js +25 -7
  88. package/lib/vendor/blamejs/lib/flag-providers.js +27 -15
  89. package/lib/vendor/blamejs/lib/forms.js +113 -27
  90. package/lib/vendor/blamejs/lib/gate-contract.js +23 -10
  91. package/lib/vendor/blamejs/lib/gdpr-ropa.js +8 -1
  92. package/lib/vendor/blamejs/lib/guard-agent-registry.js +1 -1
  93. package/lib/vendor/blamejs/lib/guard-archive.js +2 -2
  94. package/lib/vendor/blamejs/lib/guard-cidr.js +27 -1
  95. package/lib/vendor/blamejs/lib/guard-graphql.js +30 -11
  96. package/lib/vendor/blamejs/lib/guard-html.js +26 -53
  97. package/lib/vendor/blamejs/lib/guard-image.js +24 -5
  98. package/lib/vendor/blamejs/lib/guard-imap-command.js +10 -2
  99. package/lib/vendor/blamejs/lib/guard-jmap.js +19 -3
  100. package/lib/vendor/blamejs/lib/guard-jwt.js +18 -2
  101. package/lib/vendor/blamejs/lib/guard-list-unsubscribe.js +2 -2
  102. package/lib/vendor/blamejs/lib/guard-managesieve-command.js +10 -2
  103. package/lib/vendor/blamejs/lib/guard-markdown.js +11 -24
  104. package/lib/vendor/blamejs/lib/guard-pdf.js +18 -2
  105. package/lib/vendor/blamejs/lib/guard-pop3-command.js +10 -2
  106. package/lib/vendor/blamejs/lib/guard-regex.js +8 -5
  107. package/lib/vendor/blamejs/lib/guard-svg.js +31 -32
  108. package/lib/vendor/blamejs/lib/guard-time.js +1 -1
  109. package/lib/vendor/blamejs/lib/guard-uuid.js +2 -2
  110. package/lib/vendor/blamejs/lib/html-balance.js +3 -3
  111. package/lib/vendor/blamejs/lib/http-client-cache.js +82 -4
  112. package/lib/vendor/blamejs/lib/http-client-cookie-jar.js +16 -1
  113. package/lib/vendor/blamejs/lib/http-client.js +39 -7
  114. package/lib/vendor/blamejs/lib/http-message-signature.js +35 -1
  115. package/lib/vendor/blamejs/lib/i18n-messageformat.js +31 -6
  116. package/lib/vendor/blamejs/lib/i18n.js +35 -21
  117. package/lib/vendor/blamejs/lib/incident-report.js +8 -1
  118. package/lib/vendor/blamejs/lib/ip-utils.js +11 -1
  119. package/lib/vendor/blamejs/lib/json-path.js +23 -1
  120. package/lib/vendor/blamejs/lib/jwk.js +20 -3
  121. package/lib/vendor/blamejs/lib/link-header.js +2 -1
  122. package/lib/vendor/blamejs/lib/log-stream-otlp-grpc.js +5 -1
  123. package/lib/vendor/blamejs/lib/log-stream-otlp.js +5 -1
  124. package/lib/vendor/blamejs/lib/log-stream.js +8 -3
  125. package/lib/vendor/blamejs/lib/mail-auth.js +123 -22
  126. package/lib/vendor/blamejs/lib/mail-bimi.js +1 -1
  127. package/lib/vendor/blamejs/lib/mail-bounce.js +8 -0
  128. package/lib/vendor/blamejs/lib/mail-crypto-pgp.js +46 -10
  129. package/lib/vendor/blamejs/lib/mail-dav.js +22 -3
  130. package/lib/vendor/blamejs/lib/mail-dkim.js +96 -30
  131. package/lib/vendor/blamejs/lib/mail-helo.js +6 -1
  132. package/lib/vendor/blamejs/lib/mail-scan.js +23 -16
  133. package/lib/vendor/blamejs/lib/mail-send-deliver.js +34 -8
  134. package/lib/vendor/blamejs/lib/mail-server-imap.js +3 -4
  135. package/lib/vendor/blamejs/lib/mail-server-managesieve.js +7 -11
  136. package/lib/vendor/blamejs/lib/mail-server-mx.js +93 -7
  137. package/lib/vendor/blamejs/lib/mail-server-registry.js +8 -2
  138. package/lib/vendor/blamejs/lib/mail.js +15 -5
  139. package/lib/vendor/blamejs/lib/metrics.js +268 -63
  140. package/lib/vendor/blamejs/lib/middleware/age-gate.js +7 -1
  141. package/lib/vendor/blamejs/lib/middleware/asyncapi-serve.js +1 -1
  142. package/lib/vendor/blamejs/lib/middleware/body-parser.js +19 -4
  143. package/lib/vendor/blamejs/lib/middleware/bot-guard.js +5 -9
  144. package/lib/vendor/blamejs/lib/middleware/csp-report.js +40 -8
  145. package/lib/vendor/blamejs/lib/middleware/csrf-protect.js +24 -10
  146. package/lib/vendor/blamejs/lib/middleware/dpop.js +10 -5
  147. package/lib/vendor/blamejs/lib/middleware/index.js +6 -1
  148. package/lib/vendor/blamejs/lib/middleware/nel.js +1 -1
  149. package/lib/vendor/blamejs/lib/middleware/openapi-serve.js +1 -1
  150. package/lib/vendor/blamejs/lib/middleware/rate-limit.js +12 -1
  151. package/lib/vendor/blamejs/lib/middleware/require-bound-key.js +1 -1
  152. package/lib/vendor/blamejs/lib/middleware/scim-server.js +1 -1
  153. package/lib/vendor/blamejs/lib/middleware/tus-upload.js +6 -2
  154. package/lib/vendor/blamejs/lib/mtls-ca.js +18 -2
  155. package/lib/vendor/blamejs/lib/network-dns-resolver.js +11 -1
  156. package/lib/vendor/blamejs/lib/network-dns.js +21 -2
  157. package/lib/vendor/blamejs/lib/network-tls.js +69 -7
  158. package/lib/vendor/blamejs/lib/nonce-store.js +9 -1
  159. package/lib/vendor/blamejs/lib/object-store/gcs.js +7 -0
  160. package/lib/vendor/blamejs/lib/object-store/sigv4.js +31 -0
  161. package/lib/vendor/blamejs/lib/observability-otlp-exporter.js +1 -1
  162. package/lib/vendor/blamejs/lib/outbox.js +1 -1
  163. package/lib/vendor/blamejs/lib/parsers/safe-ini.js +9 -1
  164. package/lib/vendor/blamejs/lib/parsers/safe-toml.js +10 -1
  165. package/lib/vendor/blamejs/lib/permissions.js +6 -3
  166. package/lib/vendor/blamejs/lib/pid-probe.js +55 -0
  167. package/lib/vendor/blamejs/lib/pqc-agent.js +8 -1
  168. package/lib/vendor/blamejs/lib/pqc-software.js +3 -3
  169. package/lib/vendor/blamejs/lib/pubsub.js +20 -9
  170. package/lib/vendor/blamejs/lib/queue-local.js +8 -1
  171. package/lib/vendor/blamejs/lib/queue-redis.js +5 -0
  172. package/lib/vendor/blamejs/lib/redact.js +54 -0
  173. package/lib/vendor/blamejs/lib/restore-bundle.js +10 -2
  174. package/lib/vendor/blamejs/lib/restore.js +19 -0
  175. package/lib/vendor/blamejs/lib/retention.js +12 -4
  176. package/lib/vendor/blamejs/lib/router.js +60 -6
  177. package/lib/vendor/blamejs/lib/safe-buffer.js +69 -0
  178. package/lib/vendor/blamejs/lib/safe-decompress.js +8 -2
  179. package/lib/vendor/blamejs/lib/safe-dns.js +25 -20
  180. package/lib/vendor/blamejs/lib/safe-ical.js +7 -3
  181. package/lib/vendor/blamejs/lib/safe-mime.js +12 -1
  182. package/lib/vendor/blamejs/lib/safe-object.js +80 -0
  183. package/lib/vendor/blamejs/lib/safe-path.js +52 -4
  184. package/lib/vendor/blamejs/lib/safe-redirect.js +10 -2
  185. package/lib/vendor/blamejs/lib/safe-schema.js +4 -1
  186. package/lib/vendor/blamejs/lib/safe-sieve.js +33 -1
  187. package/lib/vendor/blamejs/lib/safe-sql.js +88 -0
  188. package/lib/vendor/blamejs/lib/safe-vcard.js +7 -3
  189. package/lib/vendor/blamejs/lib/scheduler.js +8 -1
  190. package/lib/vendor/blamejs/lib/security-assert.js +6 -6
  191. package/lib/vendor/blamejs/lib/self-update-standalone-verifier.js +74 -27
  192. package/lib/vendor/blamejs/lib/self-update.js +517 -87
  193. package/lib/vendor/blamejs/lib/server-timing.js +2 -4
  194. package/lib/vendor/blamejs/lib/session.js +34 -12
  195. package/lib/vendor/blamejs/lib/sql.js +15 -1
  196. package/lib/vendor/blamejs/lib/ssrf-guard.js +52 -0
  197. package/lib/vendor/blamejs/lib/static.js +55 -13
  198. package/lib/vendor/blamejs/lib/storage.js +8 -2
  199. package/lib/vendor/blamejs/lib/subject.js +6 -1
  200. package/lib/vendor/blamejs/lib/tenant-quota.js +52 -13
  201. package/lib/vendor/blamejs/lib/tls-exporter.js +3 -3
  202. package/lib/vendor/blamejs/lib/tsa.js +34 -13
  203. package/lib/vendor/blamejs/lib/uri-template.js +8 -1
  204. package/lib/vendor/blamejs/lib/vault/index.js +13 -0
  205. package/lib/vendor/blamejs/lib/vc.js +44 -5
  206. package/lib/vendor/blamejs/lib/vendor/MANIFEST.json +26 -26
  207. package/lib/vendor/blamejs/lib/vendor/noble-ciphers.cjs +792 -1
  208. package/lib/vendor/blamejs/lib/vendor/noble-curves.cjs +3443 -1
  209. package/lib/vendor/blamejs/lib/vendor/noble-post-quantum.cjs +2737 -1
  210. package/lib/vendor/blamejs/lib/vendor/pki.cjs +39550 -13
  211. package/lib/vendor/blamejs/lib/vendor/public-suffix-list.dat +55 -53
  212. package/lib/vendor/blamejs/lib/vendor/public-suffix-list.data.js +5551 -5554
  213. package/lib/vendor/blamejs/lib/vendor/simplewebauthn-server.cjs +22459 -32
  214. package/lib/vendor/blamejs/lib/watcher.js +89 -17
  215. package/lib/vendor/blamejs/lib/webhook-dispatcher.js +25 -3
  216. package/lib/vendor/blamejs/lib/webhook.js +12 -2
  217. package/lib/vendor/blamejs/lib/ws-client.js +32 -1
  218. package/lib/vendor/blamejs/lib/xml-c14n.js +29 -1
  219. package/lib/vendor/blamejs/oss-fuzz/projects/blamejs/Dockerfile +1 -1
  220. package/lib/vendor/blamejs/package-lock.json +2 -2
  221. package/lib/vendor/blamejs/package.json +1 -1
  222. package/lib/vendor/blamejs/release-notes/v0.16.x.json +1462 -0
  223. package/lib/vendor/blamejs/release-notes/v0.17.0.json +31 -0
  224. package/lib/vendor/blamejs/release-notes/v0.17.1.json +31 -0
  225. package/lib/vendor/blamejs/release-notes/v0.17.10.json +30 -0
  226. package/lib/vendor/blamejs/release-notes/v0.17.11.json +22 -0
  227. package/lib/vendor/blamejs/release-notes/v0.17.12.json +18 -0
  228. package/lib/vendor/blamejs/release-notes/v0.17.13.json +77 -0
  229. package/lib/vendor/blamejs/release-notes/v0.17.14.json +40 -0
  230. package/lib/vendor/blamejs/release-notes/v0.17.15.json +18 -0
  231. package/lib/vendor/blamejs/release-notes/v0.17.16.json +27 -0
  232. package/lib/vendor/blamejs/release-notes/v0.17.17.json +31 -0
  233. package/lib/vendor/blamejs/release-notes/v0.17.18.json +18 -0
  234. package/lib/vendor/blamejs/release-notes/v0.17.19.json +18 -0
  235. package/lib/vendor/blamejs/release-notes/v0.17.2.json +26 -0
  236. package/lib/vendor/blamejs/release-notes/v0.17.20.json +43 -0
  237. package/lib/vendor/blamejs/release-notes/v0.17.21.json +26 -0
  238. package/lib/vendor/blamejs/release-notes/v0.17.22.json +18 -0
  239. package/lib/vendor/blamejs/release-notes/v0.17.3.json +43 -0
  240. package/lib/vendor/blamejs/release-notes/v0.17.4.json +35 -0
  241. package/lib/vendor/blamejs/release-notes/v0.17.5.json +26 -0
  242. package/lib/vendor/blamejs/release-notes/v0.17.6.json +26 -0
  243. package/lib/vendor/blamejs/release-notes/v0.17.7.json +35 -0
  244. package/lib/vendor/blamejs/release-notes/v0.17.8.json +22 -0
  245. package/lib/vendor/blamejs/release-notes/v0.17.9.json +26 -0
  246. package/lib/vendor/blamejs/scripts/validate-source-comment-blocks.js +4 -0
  247. package/lib/vendor/blamejs/scripts/vendor-update.sh +293 -9
  248. package/lib/vendor/blamejs/socket.yml +94 -0
  249. package/lib/vendor/blamejs/test/00-primitives.js +605 -0
  250. package/lib/vendor/blamejs/test/helpers/drivers.js +12 -9
  251. package/lib/vendor/blamejs/test/integration/audit-stack-mysql.test.js +90 -1
  252. package/lib/vendor/blamejs/test/integration/audit-stack-postgres.test.js +122 -1
  253. package/lib/vendor/blamejs/test/integration/data-layer-mysql.test.js +30 -0
  254. package/lib/vendor/blamejs/test/integration/data-layer-pg.test.js +29 -0
  255. package/lib/vendor/blamejs/test/integration/dsr-cluster-mysql.test.js +479 -0
  256. package/lib/vendor/blamejs/test/integration/dsr-cluster-pg.test.js +487 -0
  257. package/lib/vendor/blamejs/test/integration/federation-auth.test.js +313 -5
  258. package/lib/vendor/blamejs/test/integration/mail-dkim.test.js +80 -0
  259. package/lib/vendor/blamejs/test/integration/openid-federation-chain.test.js +275 -0
  260. package/lib/vendor/blamejs/test/integration/webhook-dispatcher-pg.test.js +96 -0
  261. package/lib/vendor/blamejs/test/layer-0-primitives/a2a-tasks.test.js +401 -0
  262. package/lib/vendor/blamejs/test/layer-0-primitives/acme.test.js +1649 -2
  263. package/lib/vendor/blamejs/test/layer-0-primitives/age-gate.test.js +33 -0
  264. package/lib/vendor/blamejs/test/layer-0-primitives/agent-idempotency.test.js +0 -0
  265. package/lib/vendor/blamejs/test/layer-0-primitives/agent-saga.test.js +60 -0
  266. package/lib/vendor/blamejs/test/layer-0-primitives/agent-snapshot.test.js +524 -0
  267. package/lib/vendor/blamejs/test/layer-0-primitives/api-encrypt.test.js +891 -0
  268. package/lib/vendor/blamejs/test/layer-0-primitives/app-shutdown.test.js +128 -1
  269. package/lib/vendor/blamejs/test/layer-0-primitives/archive-adapters.test.js +271 -0
  270. package/lib/vendor/blamejs/test/layer-0-primitives/archive-read.test.js +628 -1
  271. package/lib/vendor/blamejs/test/layer-0-primitives/archive-tar-read.test.js +0 -0
  272. package/lib/vendor/blamejs/test/layer-0-primitives/archive-wrap.test.js +227 -0
  273. package/lib/vendor/blamejs/test/layer-0-primitives/arg-parser.test.js +15 -0
  274. package/lib/vendor/blamejs/test/layer-0-primitives/asn1-der.test.js +73 -0
  275. package/lib/vendor/blamejs/test/layer-0-primitives/atomic-file.test.js +114 -0
  276. package/lib/vendor/blamejs/test/layer-0-primitives/audit-sign-anchor.test.js +141 -0
  277. package/lib/vendor/blamejs/test/layer-0-primitives/audit-tools.test.js +624 -0
  278. package/lib/vendor/blamejs/test/layer-0-primitives/audit.test.js +769 -0
  279. package/lib/vendor/blamejs/test/layer-0-primitives/auth-jwt-defenses.test.js +436 -0
  280. package/lib/vendor/blamejs/test/layer-0-primitives/auth-oauth.test.js +1697 -0
  281. package/lib/vendor/blamejs/test/layer-0-primitives/auth-oid4vp.test.js +495 -0
  282. package/lib/vendor/blamejs/test/layer-0-primitives/auth-password.test.js +500 -0
  283. package/lib/vendor/blamejs/test/layer-0-primitives/auth-saml.test.js +1809 -0
  284. package/lib/vendor/blamejs/test/layer-0-primitives/auth-status-list.test.js +243 -1
  285. package/lib/vendor/blamejs/test/layer-0-primitives/backup-index.test.js +2226 -0
  286. package/lib/vendor/blamejs/test/layer-0-primitives/backup-manifest-signature.test.js +183 -0
  287. package/lib/vendor/blamejs/test/layer-0-primitives/base32.test.js +105 -0
  288. package/lib/vendor/blamejs/test/layer-0-primitives/break-glass.test.js +693 -0
  289. package/lib/vendor/blamejs/test/layer-0-primitives/cache.test.js +603 -0
  290. package/lib/vendor/blamejs/test/layer-0-primitives/calendar.test.js +557 -0
  291. package/lib/vendor/blamejs/test/layer-0-primitives/case-insensitive-security-token-guard.test.js +214 -0
  292. package/lib/vendor/blamejs/test/layer-0-primitives/cbor.test.js +25 -0
  293. package/lib/vendor/blamejs/test/layer-0-primitives/cert.test.js +843 -6
  294. package/lib/vendor/blamejs/test/layer-0-primitives/ciba-authreqid-binding.test.js +77 -2
  295. package/lib/vendor/blamejs/test/layer-0-primitives/ciba.test.js +866 -0
  296. package/lib/vendor/blamejs/test/layer-0-primitives/clear-site-data.test.js +18 -0
  297. package/lib/vendor/blamejs/test/layer-0-primitives/cli-erase.test.js +19 -0
  298. package/lib/vendor/blamejs/test/layer-0-primitives/cli.test.js +2790 -0
  299. package/lib/vendor/blamejs/test/layer-0-primitives/cluster-lease-renewal-ttl.test.js +114 -0
  300. package/lib/vendor/blamejs/test/layer-0-primitives/cluster.test.js +1032 -0
  301. package/lib/vendor/blamejs/test/layer-0-primitives/cms-codec.test.js +575 -0
  302. package/lib/vendor/blamejs/test/layer-0-primitives/codebase-patterns.test.js +739 -1
  303. package/lib/vendor/blamejs/test/layer-0-primitives/codepoint-class.test.js +8 -0
  304. package/lib/vendor/blamejs/test/layer-0-primitives/compliance-ai-act.test.js +194 -0
  305. package/lib/vendor/blamejs/test/layer-0-primitives/compliance-lifecycle-proto-key.test.js +104 -0
  306. package/lib/vendor/blamejs/test/layer-0-primitives/compliance-sanctions.test.js +254 -0
  307. package/lib/vendor/blamejs/test/layer-0-primitives/content-credentials.test.js +613 -3
  308. package/lib/vendor/blamejs/test/layer-0-primitives/cookies.test.js +140 -0
  309. package/lib/vendor/blamejs/test/layer-0-primitives/cose.test.js +407 -0
  310. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-adversarial.test.js +352 -0
  311. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-field-derived-hash.test.js +32 -0
  312. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-field.test.js +575 -0
  313. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-hash-files-parallel.test.js +10 -0
  314. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-hash-stream.test.js +24 -0
  315. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-oprf.test.js +17 -0
  316. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-spki-pin.test.js +183 -0
  317. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-xwing.test.js +48 -0
  318. package/lib/vendor/blamejs/test/layer-0-primitives/crypto.test.js +345 -0
  319. package/lib/vendor/blamejs/test/layer-0-primitives/csp-report.test.js +58 -0
  320. package/lib/vendor/blamejs/test/layer-0-primitives/csv.test.js +48 -0
  321. package/lib/vendor/blamejs/test/layer-0-primitives/daemon.test.js +459 -1
  322. package/lib/vendor/blamejs/test/layer-0-primitives/dark-patterns.test.js +19 -0
  323. package/lib/vendor/blamejs/test/layer-0-primitives/db-query.test.js +1019 -0
  324. package/lib/vendor/blamejs/test/layer-0-primitives/db-raw-residency-gate.test.js +77 -0
  325. package/lib/vendor/blamejs/test/layer-0-primitives/db.test.js +1621 -0
  326. package/lib/vendor/blamejs/test/layer-0-primitives/ddl-change-control.test.js +462 -3
  327. package/lib/vendor/blamejs/test/layer-0-primitives/dnssec.test.js +323 -0
  328. package/lib/vendor/blamejs/test/layer-0-primitives/dpop-middleware-verify.test.js +562 -0
  329. package/lib/vendor/blamejs/test/layer-0-primitives/dsr.test.js +901 -1
  330. package/lib/vendor/blamejs/test/layer-0-primitives/dual-control.test.js +249 -0
  331. package/lib/vendor/blamejs/test/layer-0-primitives/external-db-migrate.test.js +561 -0
  332. package/lib/vendor/blamejs/test/layer-0-primitives/external-db.test.js +1214 -0
  333. package/lib/vendor/blamejs/test/layer-0-primitives/fal.test.js +21 -0
  334. package/lib/vendor/blamejs/test/layer-0-primitives/fedcm-dbsc.test.js +46 -20
  335. package/lib/vendor/blamejs/test/layer-0-primitives/federation-vc-suite.test.js +147 -3
  336. package/lib/vendor/blamejs/test/layer-0-primitives/fido-mds3.test.js +907 -38
  337. package/lib/vendor/blamejs/test/layer-0-primitives/file-upload-content-safety-skip-audit.test.js +29 -0
  338. package/lib/vendor/blamejs/test/layer-0-primitives/file-upload.test.js +1135 -0
  339. package/lib/vendor/blamejs/test/layer-0-primitives/flag.test.js +30 -0
  340. package/lib/vendor/blamejs/test/layer-0-primitives/forms.test.js +747 -0
  341. package/lib/vendor/blamejs/test/layer-0-primitives/gate-contract.test.js +1855 -0
  342. package/lib/vendor/blamejs/test/layer-0-primitives/gdpr-ropa.test.js +30 -0
  343. package/lib/vendor/blamejs/test/layer-0-primitives/guard-archive.test.js +86 -0
  344. package/lib/vendor/blamejs/test/layer-0-primitives/guard-auth.test.js +117 -0
  345. package/lib/vendor/blamejs/test/layer-0-primitives/guard-cidr.test.js +151 -0
  346. package/lib/vendor/blamejs/test/layer-0-primitives/guard-domain.test.js +422 -0
  347. package/lib/vendor/blamejs/test/layer-0-primitives/guard-filename.test.js +424 -0
  348. package/lib/vendor/blamejs/test/layer-0-primitives/{guard-gate-disposition-coverage.test.js → guard-gate-disposition.test.js} +1 -1
  349. package/lib/vendor/blamejs/test/layer-0-primitives/guard-graphql.test.js +340 -0
  350. package/lib/vendor/blamejs/test/layer-0-primitives/guard-html.test.js +29 -0
  351. package/lib/vendor/blamejs/test/layer-0-primitives/guard-idempotency-key.test.js +28 -0
  352. package/lib/vendor/blamejs/test/layer-0-primitives/guard-image.test.js +519 -45
  353. package/lib/vendor/blamejs/test/layer-0-primitives/guard-imap-command.test.js +0 -0
  354. package/lib/vendor/blamejs/test/layer-0-primitives/guard-jmap.test.js +51 -0
  355. package/lib/vendor/blamejs/test/layer-0-primitives/guard-jsonpath.test.js +66 -0
  356. package/lib/vendor/blamejs/test/layer-0-primitives/guard-jwt.test.js +436 -0
  357. package/lib/vendor/blamejs/test/layer-0-primitives/guard-managesieve-command.test.js +25 -0
  358. package/lib/vendor/blamejs/test/layer-0-primitives/guard-markdown.test.js +16 -0
  359. package/lib/vendor/blamejs/test/layer-0-primitives/guard-mime.test.js +86 -0
  360. package/lib/vendor/blamejs/test/layer-0-primitives/guard-oauth.test.js +140 -0
  361. package/lib/vendor/blamejs/test/layer-0-primitives/guard-pdf.test.js +80 -0
  362. package/lib/vendor/blamejs/test/layer-0-primitives/guard-pop3-command.test.js +27 -0
  363. package/lib/vendor/blamejs/test/layer-0-primitives/guard-regex.test.js +99 -0
  364. package/lib/vendor/blamejs/test/layer-0-primitives/guard-shell.test.js +76 -0
  365. package/lib/vendor/blamejs/test/layer-0-primitives/{guard-sql-coverage.test.js → guard-sql.test.js} +3 -3
  366. package/lib/vendor/blamejs/test/layer-0-primitives/guard-svg.test.js +524 -0
  367. package/lib/vendor/blamejs/test/layer-0-primitives/guard-template.test.js +71 -0
  368. package/lib/vendor/blamejs/test/layer-0-primitives/guard-time.test.js +92 -0
  369. package/lib/vendor/blamejs/test/layer-0-primitives/guard-uuid.test.js +86 -0
  370. package/lib/vendor/blamejs/test/layer-0-primitives/html-balance.test.js +38 -0
  371. package/lib/vendor/blamejs/test/layer-0-primitives/http-client-cache-authorization.test.js +347 -0
  372. package/lib/vendor/blamejs/test/layer-0-primitives/http-client-cache.test.js +908 -0
  373. package/lib/vendor/blamejs/test/layer-0-primitives/http-client.test.js +2874 -0
  374. package/lib/vendor/blamejs/test/layer-0-primitives/http-message-signature.test.js +643 -0
  375. package/lib/vendor/blamejs/test/layer-0-primitives/i18n-messageformat.test.js +38 -0
  376. package/lib/vendor/blamejs/test/layer-0-primitives/i18n.test.js +1153 -1
  377. package/lib/vendor/blamejs/test/layer-0-primitives/idempotency-key.test.js +494 -0
  378. package/lib/vendor/blamejs/test/layer-0-primitives/ip-utils.test.js +30 -0
  379. package/lib/vendor/blamejs/test/layer-0-primitives/jsdoc-example-execution.test.js +177 -0
  380. package/lib/vendor/blamejs/test/layer-0-primitives/json-path.test.js +103 -0
  381. package/lib/vendor/blamejs/test/layer-0-primitives/json-schema.test.js +214 -0
  382. package/lib/vendor/blamejs/test/layer-0-primitives/jwk.test.js +41 -0
  383. package/lib/vendor/blamejs/test/layer-0-primitives/jwt-external.test.js +276 -0
  384. package/lib/vendor/blamejs/test/layer-0-primitives/keychain.test.js +0 -0
  385. package/lib/vendor/blamejs/test/layer-0-primitives/log-stream.test.js +241 -0
  386. package/lib/vendor/blamejs/test/layer-0-primitives/log.test.js +106 -0
  387. package/lib/vendor/blamejs/test/layer-0-primitives/mail-agent.test.js +441 -0
  388. package/lib/vendor/blamejs/test/layer-0-primitives/mail-auth.test.js +2136 -4
  389. package/lib/vendor/blamejs/test/layer-0-primitives/mail-bimi.test.js +759 -12
  390. package/lib/vendor/blamejs/test/layer-0-primitives/mail-bounce.test.js +811 -1
  391. package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto-pgp-experimental.test.js +401 -3
  392. package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto-pgp.test.js +751 -8
  393. package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto-smime.test.js +864 -0
  394. package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto.test.js +110 -0
  395. package/lib/vendor/blamejs/test/layer-0-primitives/mail-dav.test.js +830 -1
  396. package/lib/vendor/blamejs/test/layer-0-primitives/mail-deploy.test.js +635 -86
  397. package/lib/vendor/blamejs/test/layer-0-primitives/mail-dkim.test.js +818 -0
  398. package/lib/vendor/blamejs/test/layer-0-primitives/mail-helo.test.js +27 -0
  399. package/lib/vendor/blamejs/test/layer-0-primitives/mail-scan.test.js +199 -0
  400. package/lib/vendor/blamejs/test/layer-0-primitives/mail-send-deliver.test.js +686 -2
  401. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-imap.test.js +778 -0
  402. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-jmap.test.js +1438 -0
  403. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-managesieve.test.js +449 -6
  404. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-mx.test.js +773 -2
  405. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-pop3.test.js +623 -3
  406. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-rate-limit.test.js +55 -0
  407. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-registry.test.js +13 -0
  408. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-submission.test.js +877 -1
  409. package/lib/vendor/blamejs/test/layer-0-primitives/mail-sieve.test.js +326 -0
  410. package/lib/vendor/blamejs/test/layer-0-primitives/mail-store-fts.test.js +55 -0
  411. package/lib/vendor/blamejs/test/layer-0-primitives/mail-store.test.js +242 -0
  412. package/lib/vendor/blamejs/test/layer-0-primitives/mail.test.js +1596 -2
  413. package/lib/vendor/blamejs/test/layer-0-primitives/mcp.test.js +440 -4
  414. package/lib/vendor/blamejs/test/layer-0-primitives/metrics-snapshot.test.js +89 -0
  415. package/lib/vendor/blamejs/test/layer-0-primitives/metrics.test.js +1230 -0
  416. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-assetlinks.test.js +113 -0
  417. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-body-parser.test.js +1169 -0
  418. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-bot-disclose.test.js +123 -0
  419. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-cookies.test.js +108 -0
  420. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-gpc.test.js +121 -0
  421. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-headers.test.js +163 -0
  422. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-host-allowlist.test.js +154 -0
  423. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-require-content-type.test.js +127 -0
  424. package/lib/vendor/blamejs/test/layer-0-primitives/{middleware-tus-upload-coverage.test.js → middleware-tus-upload.test.js} +45 -0
  425. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-web-app-manifest.test.js +132 -0
  426. package/lib/vendor/blamejs/test/layer-0-primitives/mtls-ca-crl-fingerprint-only.test.js +92 -0
  427. package/lib/vendor/blamejs/test/layer-0-primitives/network-dns-resolver.test.js +65 -0
  428. package/lib/vendor/blamejs/test/layer-0-primitives/network-dns.test.js +1727 -1
  429. package/lib/vendor/blamejs/test/layer-0-primitives/network-nts.test.js +699 -0
  430. package/lib/vendor/blamejs/test/layer-0-primitives/network-smtp-policy.test.js +1181 -0
  431. package/lib/vendor/blamejs/test/layer-0-primitives/network-tls.test.js +1876 -3
  432. package/lib/vendor/blamejs/test/layer-0-primitives/network.test.js +32 -0
  433. package/lib/vendor/blamejs/test/layer-0-primitives/nonce-store-enforce-replay-nonboolean.test.js +81 -0
  434. package/lib/vendor/blamejs/test/layer-0-primitives/ntp-check.test.js +122 -0
  435. package/lib/vendor/blamejs/test/layer-0-primitives/observability-tracing.test.js +378 -0
  436. package/lib/vendor/blamejs/test/layer-0-primitives/observability.test.js +77 -0
  437. package/lib/vendor/blamejs/test/layer-0-primitives/oid4vci.test.js +1016 -0
  438. package/lib/vendor/blamejs/test/layer-0-primitives/openid-federation.test.js +946 -0
  439. package/lib/vendor/blamejs/test/layer-0-primitives/outbox.test.js +818 -0
  440. package/lib/vendor/blamejs/test/layer-0-primitives/own-property-membership-guards.test.js +109 -0
  441. package/lib/vendor/blamejs/test/layer-0-primitives/parsers-safe-toml.test.js +543 -0
  442. package/lib/vendor/blamejs/test/layer-0-primitives/{parsers-safe-yaml-coverage.test.js → parsers-safe-yaml.test.js} +2 -2
  443. package/lib/vendor/blamejs/test/layer-0-primitives/parsers-standalone.test.js +73 -0
  444. package/lib/vendor/blamejs/test/layer-0-primitives/passkey.test.js +649 -0
  445. package/lib/vendor/blamejs/test/layer-0-primitives/permissions.test.js +524 -0
  446. package/lib/vendor/blamejs/test/layer-0-primitives/pqc-agent-curve.test.js +22 -0
  447. package/lib/vendor/blamejs/test/layer-0-primitives/pubsub.test.js +295 -0
  448. package/lib/vendor/blamejs/test/layer-0-primitives/queue-flow-repeat.test.js +36 -0
  449. package/lib/vendor/blamejs/test/layer-0-primitives/queue.test.js +83 -0
  450. package/lib/vendor/blamejs/test/layer-0-primitives/rate-limit-xff-spoofing.test.js +34 -0
  451. package/lib/vendor/blamejs/test/layer-0-primitives/redact.test.js +1031 -0
  452. package/lib/vendor/blamejs/test/layer-0-primitives/request-helpers.test.js +94 -0
  453. package/lib/vendor/blamejs/test/layer-0-primitives/require-bound-key.test.js +401 -0
  454. package/lib/vendor/blamejs/test/layer-0-primitives/restore-empty-manifest-wipe.test.js +154 -0
  455. package/lib/vendor/blamejs/test/layer-0-primitives/retention.test.js +600 -0
  456. package/lib/vendor/blamejs/test/layer-0-primitives/router-host-path-injection.test.js +231 -0
  457. package/lib/vendor/blamejs/test/layer-0-primitives/router-tls0rtt.test.js +21 -0
  458. package/lib/vendor/blamejs/test/layer-0-primitives/router.test.js +1277 -0
  459. package/lib/vendor/blamejs/test/layer-0-primitives/safe-async.test.js +133 -0
  460. package/lib/vendor/blamejs/test/layer-0-primitives/safe-buffer-linear-scans.test.js +14 -0
  461. package/lib/vendor/blamejs/test/layer-0-primitives/safe-buffer.test.js +80 -0
  462. package/lib/vendor/blamejs/test/layer-0-primitives/safe-decompress.test.js +28 -0
  463. package/lib/vendor/blamejs/test/layer-0-primitives/safe-dns.test.js +245 -0
  464. package/lib/vendor/blamejs/test/layer-0-primitives/safe-ical.test.js +32 -0
  465. package/lib/vendor/blamejs/test/layer-0-primitives/safe-ini.test.js +376 -0
  466. package/lib/vendor/blamejs/test/layer-0-primitives/safe-json.test.js +175 -0
  467. package/lib/vendor/blamejs/test/layer-0-primitives/safe-mime.test.js +518 -0
  468. package/lib/vendor/blamejs/test/layer-0-primitives/safe-object.test.js +62 -0
  469. package/lib/vendor/blamejs/test/layer-0-primitives/safe-path.test.js +30 -0
  470. package/lib/vendor/blamejs/test/layer-0-primitives/safe-schema.test.js +104 -0
  471. package/lib/vendor/blamejs/test/layer-0-primitives/safe-sql.test.js +142 -0
  472. package/lib/vendor/blamejs/test/layer-0-primitives/safe-url.test.js +112 -0
  473. package/lib/vendor/blamejs/test/layer-0-primitives/safe-vcard.test.js +26 -0
  474. package/lib/vendor/blamejs/test/layer-0-primitives/scheduler.test.js +157 -0
  475. package/lib/vendor/blamejs/test/layer-0-primitives/scim-server.test.js +396 -0
  476. package/lib/vendor/blamejs/test/layer-0-primitives/sd-jwt-vc.test.js +930 -0
  477. package/lib/vendor/blamejs/test/layer-0-primitives/security-assert.test.js +755 -82
  478. package/lib/vendor/blamejs/test/layer-0-primitives/self-update.test.js +1053 -0
  479. package/lib/vendor/blamejs/test/layer-0-primitives/session-device-binding.test.js +200 -0
  480. package/lib/vendor/blamejs/test/layer-0-primitives/session-strict-binding-missing-failclosed.test.js +110 -0
  481. package/lib/vendor/blamejs/test/layer-0-primitives/sigv4-bucket-ops.test.js +636 -0
  482. package/lib/vendor/blamejs/test/layer-0-primitives/sql-offset-without-limit.test.js +94 -0
  483. package/lib/vendor/blamejs/test/layer-0-primitives/sql.test.js +1190 -0
  484. package/lib/vendor/blamejs/test/layer-0-primitives/ssrf-guard.test.js +21 -0
  485. package/lib/vendor/blamejs/test/layer-0-primitives/static.test.js +850 -0
  486. package/lib/vendor/blamejs/test/layer-0-primitives/storage-presigned-url.test.js +146 -0
  487. package/lib/vendor/blamejs/test/layer-0-primitives/storage.test.js +621 -0
  488. package/lib/vendor/blamejs/test/layer-0-primitives/subject.test.js +47 -0
  489. package/lib/vendor/blamejs/test/layer-0-primitives/template.test.js +582 -0
  490. package/lib/vendor/blamejs/test/layer-0-primitives/tenant-quota.test.js +587 -25
  491. package/lib/vendor/blamejs/test/layer-0-primitives/time.test.js +11 -0
  492. package/lib/vendor/blamejs/test/layer-0-primitives/tsa.test.js +524 -63
  493. package/lib/vendor/blamejs/test/layer-0-primitives/uri-template.test.js +27 -0
  494. package/lib/vendor/blamejs/test/layer-0-primitives/vault-rotate.test.js +866 -0
  495. package/lib/vendor/blamejs/test/layer-0-primitives/vault.test.js +74 -0
  496. package/lib/vendor/blamejs/test/layer-0-primitives/vc.test.js +215 -0
  497. package/lib/vendor/blamejs/test/layer-0-primitives/watcher.test.js +550 -0
  498. package/lib/vendor/blamejs/test/layer-0-primitives/webhook-dispatcher.test.js +388 -0
  499. package/lib/vendor/blamejs/test/layer-0-primitives/webhook.test.js +262 -0
  500. package/lib/vendor/blamejs/test/layer-0-primitives/websocket.test.js +1294 -0
  501. package/lib/vendor/blamejs/test/layer-0-primitives/ws-client.test.js +629 -0
  502. package/lib/vendor/blamejs/test/layer-0-primitives/xml-c14n-attr-normalization.test.js +164 -0
  503. package/lib/vendor/blamejs/test/smoke.js +2 -0
  504. package/package.json +1 -1
  505. package/lib/vendor/blamejs/release-notes/v0.16.0.json +0 -44
  506. package/lib/vendor/blamejs/release-notes/v0.16.1.json +0 -36
  507. package/lib/vendor/blamejs/release-notes/v0.16.2.json +0 -71
  508. package/lib/vendor/blamejs/release-notes/v0.16.3.json +0 -71
  509. package/lib/vendor/blamejs/test/layer-0-primitives/acme-coverage.test.js +0 -441
  510. package/lib/vendor/blamejs/test/layer-0-primitives/auth-oauth-coverage.test.js +0 -482
  511. package/lib/vendor/blamejs/test/layer-0-primitives/auth-saml-coverage.test.js +0 -671
  512. package/lib/vendor/blamejs/test/layer-0-primitives/backup-index-coverage.test.js +0 -690
  513. package/lib/vendor/blamejs/test/layer-0-primitives/cli-coverage.test.js +0 -238
  514. package/lib/vendor/blamejs/test/layer-0-primitives/content-credentials-coverage.test.js +0 -319
  515. package/lib/vendor/blamejs/test/layer-0-primitives/keychain-coverage.test.js +0 -0
  516. package/lib/vendor/blamejs/test/layer-0-primitives/mail-auth-coverage.test.js +0 -437
  517. package/lib/vendor/blamejs/test/layer-0-primitives/mcp-coverage.test.js +0 -443
  518. package/lib/vendor/blamejs/test/layer-0-primitives/metrics-coverage.test.js +0 -395
  519. package/lib/vendor/blamejs/test/layer-0-primitives/network-smtp-policy-coverage.test.js +0 -565
  520. package/lib/vendor/blamejs/test/layer-0-primitives/router-coverage.test.js +0 -592
  521. package/lib/vendor/blamejs/test/layer-0-primitives/sql-coverage.test.js +0 -422
  522. package/lib/vendor/blamejs/test/layer-0-primitives/test-coverage.test.js +0 -573
@@ -148,6 +148,38 @@ async function run() {
148
148
  _throws(function () { network.socket.setDefaultLinger({ enable: true }); }, "socket/linger-not-supported"));
149
149
  _resetAll();
150
150
 
151
+ // ---- Socket applyToSocket (per-socket default tuner) ----
152
+ // After _resetAll the SOCKET_DEFAULTS are back to noDelay:true /
153
+ // keepAlive:true / initialDelay:0. applyToSocket pushes those onto a
154
+ // freshly-created socket and returns the same socket.
155
+ var applied2 = [];
156
+ var spySocket = {
157
+ setNoDelay: function (v) { applied2.push(["noDelay", v]); },
158
+ setKeepAlive: function (enable, delay) { applied2.push(["keepAlive", enable, delay]); },
159
+ };
160
+ var ret = b.network.socket.applyToSocket(spySocket);
161
+ check("applyToSocket returns the same socket", ret === spySocket);
162
+ check("applyToSocket applies TCP_NODELAY default (true)",
163
+ applied2.some(function (c) { return c[0] === "noDelay" && c[1] === true; }));
164
+ check("applyToSocket applies SO_KEEPALIVE default (true, 0)",
165
+ applied2.some(function (c) { return c[0] === "keepAlive" && c[1] === true && c[2] === 0; }));
166
+ // Best-effort: a socket lacking the setter methods is returned untouched.
167
+ var bareSock = { destroyed: true };
168
+ check("applyToSocket tolerates a socket without setters",
169
+ b.network.socket.applyToSocket(bareSock) === bareSock);
170
+ // Best-effort: a setter that throws is swallowed; the socket is still returned.
171
+ var throwingSock = { setNoDelay: function () { throw new Error("errored socket"); } };
172
+ check("applyToSocket swallows a throwing setter",
173
+ b.network.socket.applyToSocket(throwingSock) === throwingSock);
174
+ // null / undefined pass straight through.
175
+ check("applyToSocket returns null unchanged", b.network.socket.applyToSocket(null) === null);
176
+ // Real net.Socket round-trip — never connected, destroyed immediately.
177
+ var realSock = new (require("node:net").Socket)();
178
+ check("applyToSocket returns a real net.Socket unchanged",
179
+ b.network.socket.applyToSocket(realSock) === realSock);
180
+ realSock.destroy();
181
+ _resetAll();
182
+
151
183
  // ---- TLS trust-store lifecycle (remove / clear / purgeExpired) ----
152
184
  var pemA = await _makeRealCaPem();
153
185
  var pemB = await _makeRealCaPem();
@@ -0,0 +1,81 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (c) blamejs contributors
3
+ "use strict";
4
+ /**
5
+ * b.nonceStore.enforceReplay — fail CLOSED on any non-truthy checkAndInsert
6
+ * return, not only a literal `false`.
7
+ *
8
+ * enforceReplay is the shared anti-replay helper b.auth.jwt.verify and
9
+ * b.auth.dpop route their replay defense through. The nonce-store docstring
10
+ * recommends fronting it with "Redis SETNX, Memcached add" backends — but
11
+ * those return a NON-`false` falsy value on a duplicate:
12
+ *
13
+ * - node-redis `SET key val NX` → "OK" on insert, `null` on existing key
14
+ * - the SETNX command / SQL INSERT → 1 on insert, 0 on existing row
15
+ *
16
+ * A replay therefore surfaces to enforceReplay as `null` / `0`, neither of
17
+ * which is `=== false`. An exact-literal compare admits the replayed token
18
+ * (fail OPEN) — the exact class the framework already fixed at every inline
19
+ * consumer (oauth.js `!inserted`, api-encrypt `!freshNonce`,
20
+ * graphql-federation `!fresh`, webhook `!fresh`) but missed in the shared
21
+ * helper. enforceReplay must refuse unless checkAndInsert positively confirms
22
+ * the jti was first-seen (a truthy result).
23
+ */
24
+
25
+ var helpers = require("../helpers");
26
+ var b = helpers.b;
27
+ var check = helpers.check;
28
+
29
+ function RErr(code, message) { this.code = code; this.message = message; }
30
+
31
+ // A store whose checkAndInsert reports fresh via `freshVal` and replay via
32
+ // `replayVal` — models the recommended Redis-SETNX / SQL-INSERT backends.
33
+ function _shapedStore(freshVal, replayVal) {
34
+ var seen = Object.create(null);
35
+ return {
36
+ checkAndInsert: function (nonce) {
37
+ if (Object.prototype.hasOwnProperty.call(seen, nonce)) return Promise.resolve(replayVal);
38
+ seen[nonce] = true;
39
+ return Promise.resolve(freshVal);
40
+ },
41
+ };
42
+ }
43
+
44
+ async function _firstPassesThenReplayRefused(store, label) {
45
+ var ropts = { errorClass: RErr, storeFailedCode: "x/store-failed", replayCode: "x/replay", tokenLabel: "token" };
46
+ var exp = Date.now() + 60000;
47
+
48
+ // First sighting must pass (truthy fresh value → no throw).
49
+ var firstThrew = false;
50
+ try { await b.nonceStore.enforceReplay(store, "jti-A", exp, ropts); }
51
+ catch (_e) { firstThrew = true; }
52
+ check(label + ": first use of a jti passes (truthy fresh admitted)", firstThrew === false);
53
+
54
+ // Second sighting is a REPLAY. Store signals it via a non-`false` falsy
55
+ // value; enforceReplay MUST refuse it (fail closed).
56
+ var replayErr = null;
57
+ try { await b.nonceStore.enforceReplay(store, "jti-A", exp, ropts); }
58
+ catch (e) { replayErr = e; }
59
+ check(label + ": replay refused with the replay code (fail closed, not fail open)",
60
+ replayErr instanceof RErr && replayErr.code === "x/replay");
61
+ }
62
+
63
+ async function run() {
64
+ // node-redis `SET ... NX` shape: "OK" on insert, null on existing key.
65
+ await _firstPassesThenReplayRefused(_shapedStore("OK", null), "redis SET NX (OK/null)");
66
+
67
+ // SETNX command / SQL INSERT ... ON CONFLICT shape: 1 on insert, 0 on dup.
68
+ await _firstPassesThenReplayRefused(_shapedStore(1, 0), "setnx / sql insert (1/0)");
69
+
70
+ // A store that returns undefined on a duplicate (a lax adapter) must also
71
+ // fail closed rather than admit the replay.
72
+ await _firstPassesThenReplayRefused(_shapedStore(true, undefined), "lax adapter (true/undefined)");
73
+
74
+ // The canonical b.nonceStore contract (strict boolean) still works.
75
+ await _firstPassesThenReplayRefused(_shapedStore(true, false), "canonical boolean (true/false)");
76
+
77
+ console.log("OK — nonce-store enforceReplay non-boolean fail-closed tests");
78
+ }
79
+
80
+ module.exports = { run: run };
81
+ if (require.main === module) run().catch(function (e) { console.error(e); process.exit(1); });
@@ -0,0 +1,122 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (c) blamejs contributors
3
+ "use strict";
4
+ /**
5
+ * ntpCheck.monitor — periodic clock-drift monitor.
6
+ *
7
+ * Drives b.ntpCheck.monitor against a LOCAL (loopback-only) SNTP
8
+ * responder that echoes the request's origin cookie and reports a large
9
+ * positive drift, so a real tick runs bootCheck → checkDrift →
10
+ * querySingle end-to-end and crosses the fatal threshold. No packets
11
+ * leave the host. Asserts the advertised surface: the onDrift hook fires,
12
+ * the audit events (`system.ntp.checked` + `system.ntp.drift_fatal`) are
13
+ * emitted, and stop() halts further ticks.
14
+ *
15
+ * Run standalone: `node test/layer-0-primitives/ntp-check.test.js`
16
+ * Or via smoke: `node test/smoke.js`
17
+ */
18
+
19
+ var dgram = require("node:dgram");
20
+
21
+ var helpers = require("../helpers");
22
+ var b = helpers.b;
23
+ var check = helpers.check;
24
+
25
+ // NTP epoch (1900) → Unix epoch (1970) offset in seconds.
26
+ var NTP_TO_UNIX_OFFSET_SECONDS = 2208988800;
27
+
28
+ // Stand up a loopback SNTP responder that replies to every request with a
29
+ // synchronized-server packet echoing the client's origin cookie and a
30
+ // transmit timestamp ~100s in the future (a fatal-magnitude drift).
31
+ function _startFakeNtpServer() {
32
+ var srv = dgram.createSocket("udp4");
33
+ srv.on("message", function (msg, rinfo) {
34
+ var reply = Buffer.alloc(48);
35
+ reply[0] = 0x24; // LI=0, VN=4, Mode=4 (server)
36
+ reply[1] = 1; // stratum 1 (synchronized)
37
+ msg.copy(reply, 24, 40, 48); // Originate = the request's Transmit Timestamp (cookie echo)
38
+ var serverSec = Math.floor((Date.now() + 100000) / 1000) + NTP_TO_UNIX_OFFSET_SECONDS;
39
+ reply.writeUInt32BE(serverSec, 40);
40
+ reply.writeUInt32BE(0, 44);
41
+ try { srv.send(reply, 0, reply.length, rinfo.port, rinfo.address); } catch (_e) { /* closing */ }
42
+ });
43
+ return new Promise(function (resolve) {
44
+ srv.bind(0, "127.0.0.1", function () { resolve({ srv: srv, port: srv.address().port }); });
45
+ });
46
+ }
47
+
48
+ function testMonitorRejectsBadInterval() {
49
+ var t1 = null;
50
+ try { b.ntpCheck.monitor({ intervalMs: -1 }); } catch (e) { t1 = e; }
51
+ check("ntpCheck.monitor rejects non-positive intervalMs", t1 instanceof TypeError);
52
+ var t2 = null;
53
+ try { b.ntpCheck.monitor({ intervalMs: "soon" }); } catch (e) { t2 = e; }
54
+ check("ntpCheck.monitor rejects non-number intervalMs", t2 instanceof TypeError);
55
+ }
56
+
57
+ async function testMonitorFiresOnDriftAndAudits() {
58
+ b.ntpCheck._resetThresholdsForTest();
59
+ var fake = await _startFakeNtpServer();
60
+
61
+ var auditEvents = [];
62
+ var realSafeEmit = b.audit.safeEmit;
63
+ b.audit.safeEmit = function (ev) { auditEvents.push(ev); };
64
+
65
+ var drifts = [];
66
+ var mon = b.ntpCheck.monitor({
67
+ intervalMs: 40,
68
+ servers: ["127.0.0.1"],
69
+ port: fake.port,
70
+ timeoutMs: 3000,
71
+ driftWarnMs: 2000,
72
+ driftFatalMs: 30000,
73
+ audit: true,
74
+ onDrift: function (r) { drifts.push(r); },
75
+ });
76
+ try {
77
+ await helpers.waitUntil(function () { return drifts.length >= 1; },
78
+ { timeoutMs: 6000, label: "ntpCheck.monitor: onDrift fired on fatal drift" });
79
+ var r0 = drifts[0];
80
+ check("monitor onDrift severity is fatal for +100s drift", r0.severity === "fatal");
81
+ check("monitor onDrift reports the queried server", r0.server === "127.0.0.1");
82
+ check("monitor onDrift driftMs is large-positive", r0.driftMs > 30000);
83
+
84
+ await helpers.waitUntil(function () {
85
+ return auditEvents.some(function (e) { return e.action === "system.ntp.drift_fatal"; });
86
+ }, { timeoutMs: 6000, label: "ntpCheck.monitor: system.ntp.drift_fatal emitted" });
87
+ check("monitor emits system.ntp.checked each tick",
88
+ auditEvents.some(function (e) { return e.action === "system.ntp.checked"; }));
89
+ check("monitor system.ntp.checked outcome is fail on fatal drift",
90
+ auditEvents.some(function (e) { return e.action === "system.ntp.checked" && e.outcome === "fail"; }));
91
+ var fatal = auditEvents.find(function (e) { return e.action === "system.ntp.drift_fatal"; });
92
+ check("monitor drift_fatal audit carries driftMs metadata",
93
+ fatal && fatal.metadata && typeof fatal.metadata.driftMs === "number");
94
+
95
+ // stop() halts the ticker — over a 10-interval window a running monitor
96
+ // would fire ~10 more onDrifts; a stopped one fires at most one straggler
97
+ // (a tick already in-flight past the stopped-guard when stop() ran).
98
+ mon.stop();
99
+ var before = drifts.length;
100
+ await helpers.passiveObserve(400, "ntpCheck.monitor: no ticks after stop()");
101
+ check("monitor stop() halts further ticks", drifts.length - before <= 1);
102
+ } finally {
103
+ mon.stop();
104
+ b.audit.safeEmit = realSafeEmit;
105
+ await new Promise(function (resolve) { fake.srv.close(resolve); });
106
+ b.ntpCheck._resetThresholdsForTest();
107
+ }
108
+ }
109
+
110
+ async function run() {
111
+ testMonitorRejectsBadInterval();
112
+ await testMonitorFiresOnDriftAndAudits();
113
+ }
114
+
115
+ module.exports = { run: run };
116
+
117
+ if (require.main === module) {
118
+ run().then(
119
+ function () { console.log("[ntp-check] OK — " + helpers.getChecks() + " checks passed"); },
120
+ function (e) { console.error("FAIL:", e); process.exit(1); }
121
+ );
122
+ }
@@ -16,6 +16,63 @@ var helpers = require("../helpers");
16
16
  var b = helpers.b;
17
17
  var check = helpers.check;
18
18
 
19
+ var otlpEx = require("../../lib/observability-otlp-exporter");
20
+
21
+ // Minimal pre-OTLP span object (the shape b.observability.tracer's
22
+ // span.toJSON() produces). Overrides let each edge-case test perturb
23
+ // exactly one field without re-declaring the whole record.
24
+ function _mkSpan(overrides) {
25
+ var s = {
26
+ traceId: "0123456789abcdef0123456789abcdef",
27
+ spanId: "0123456789abcdef",
28
+ parentSpanId: "",
29
+ name: "op",
30
+ kind: "internal",
31
+ startTimeUnixNano: "100",
32
+ endTimeUnixNano: "200",
33
+ attributes: {},
34
+ events: [],
35
+ status: { code: "ok", message: "" },
36
+ droppedAttributesCount: 0,
37
+ droppedEventsCount: 0,
38
+ };
39
+ if (overrides) { for (var k in overrides) { s[k] = overrides[k]; } }
40
+ return s;
41
+ }
42
+
43
+ // Walk the top-level fields of a protobuf message, returning
44
+ // [ [fieldNumber, wireType], ... ] in emission order. Skips each
45
+ // field's payload by its wire type so the walk stays aligned. Used to
46
+ // assert the Span message emits dropped_links_count at field 14 and
47
+ // Status (a length-delimited message) at field 15 — never a bare varint
48
+ // on the Status field number.
49
+ function _scanTopLevelProtoFields(buf) {
50
+ var fields = [];
51
+ var i = 0;
52
+ function readVarint() {
53
+ var shift = 0, result = 0;
54
+ while (i < buf.length) {
55
+ var byte = buf[i++];
56
+ result += (byte & 0x7f) * Math.pow(2, shift);
57
+ if ((byte & 0x80) === 0) break;
58
+ shift += 7;
59
+ }
60
+ return result;
61
+ }
62
+ while (i < buf.length) {
63
+ var tag = readVarint();
64
+ var field = Math.floor(tag / 8);
65
+ var wire = tag & 7;
66
+ fields.push([field, wire]);
67
+ if (wire === 0) { readVarint(); }
68
+ else if (wire === 1) { i += 8; }
69
+ else if (wire === 2) { var len = readVarint(); i += len; }
70
+ else if (wire === 5) { i += 4; }
71
+ else break;
72
+ }
73
+ return fields;
74
+ }
75
+
19
76
  // ---- Tracestate ----
20
77
 
21
78
  function testTracestateParse() {
@@ -666,6 +723,308 @@ function testTracerToJSONIsImmutable() {
666
723
  json2.attributes.foo === "bar");
667
724
  }
668
725
 
726
+ // ---- OTLP builder: attribute type coercion (JSON path) ----
727
+
728
+ function testOtlpAttrValueCoercion() {
729
+ b.observability.setRedactor(null); // default redactor — non-sensitive keys pass through
730
+ var out = otlpEx._attrToOtlp({
731
+ s: "x",
732
+ i: 42,
733
+ d: 1.5,
734
+ bt: true,
735
+ bf: false,
736
+ arr: [1, "two", true],
737
+ obj: { a: 1 },
738
+ });
739
+ var by = {};
740
+ for (var j = 0; j < out.length; j++) { by[out[j].key] = out[j].value; }
741
+ check("otlp.attr: string → stringValue", by.s && by.s.stringValue === "x");
742
+ check("otlp.attr: integer → intValue string", by.i && by.i.intValue === "42");
743
+ check("otlp.attr: float → doubleValue", by.d && by.d.doubleValue === 1.5);
744
+ check("otlp.attr: true → boolValue", by.bt && by.bt.boolValue === true);
745
+ check("otlp.attr: false → boolValue", by.bf && by.bf.boolValue === false);
746
+ check("otlp.attr: array → arrayValue.values length",
747
+ by.arr && by.arr.arrayValue && by.arr.arrayValue.values.length === 3);
748
+ check("otlp.attr: array element types preserved",
749
+ by.arr.arrayValue.values[0].intValue === "1" &&
750
+ by.arr.arrayValue.values[1].stringValue === "two" &&
751
+ by.arr.arrayValue.values[2].boolValue === true);
752
+ check("otlp.attr: plain object → String() coercion",
753
+ by.obj && by.obj.stringValue === "[object Object]");
754
+ }
755
+
756
+ function testOtlpAttrNonObjectInputs() {
757
+ // _attrToOtlp tolerates a non-object attribute bag (a malformed span
758
+ // that carries a scalar / null where a map is expected) → empty array,
759
+ // never a throw.
760
+ check("otlp.attr: null attrs → []", otlpEx._attrToOtlp(null).length === 0);
761
+ check("otlp.attr: undefined attrs → []", otlpEx._attrToOtlp(undefined).length === 0);
762
+ check("otlp.attr: string attrs → []", otlpEx._attrToOtlp("nope").length === 0);
763
+ check("otlp.attr: number attrs → []", otlpEx._attrToOtlp(42).length === 0);
764
+ }
765
+
766
+ // ---- OTLP builder: span defaulting / fallbacks (JSON path) ----
767
+
768
+ function testOtlpSpanToOtlpDefaults() {
769
+ // Unknown kind → SPAN_KIND_INTERNAL (1); missing endTime → startTime;
770
+ // missing status → { code: 0, message: "" }; undefined events → [].
771
+ var s = otlpEx._spanToOtlp({
772
+ traceId: "aa",
773
+ spanId: "bb",
774
+ name: "op",
775
+ kind: "bogus-kind",
776
+ startTimeUnixNano: "500",
777
+ // endTimeUnixNano, status, events, parentSpanId, attributes omitted
778
+ });
779
+ check("otlp.span: unknown kind falls back to internal(1)", s.kind === 1);
780
+ check("otlp.span: missing endTime falls back to startTime",
781
+ s.endTimeUnixNano === "500");
782
+ check("otlp.span: missing status → code 0", s.status.code === 0);
783
+ check("otlp.span: missing status → empty msg", s.status.message === "");
784
+ check("otlp.span: missing parentSpanId → ''", s.parentSpanId === "");
785
+ check("otlp.span: undefined events → []", Array.isArray(s.events) && s.events.length === 0);
786
+ check("otlp.span: undefined attributes → []", Array.isArray(s.attributes) && s.attributes.length === 0);
787
+
788
+ // Named kind maps through, status code maps through, events map through.
789
+ var s2 = otlpEx._spanToOtlp(_mkSpan({
790
+ kind: "server",
791
+ status: { code: "error", message: "boom" },
792
+ events: [{ name: "ev", timeUnixNano: "5", attributes: { k: "v" } }],
793
+ droppedEventsCount: 3,
794
+ }));
795
+ check("otlp.span: server kind → 2", s2.kind === 2);
796
+ check("otlp.span: error status → 2", s2.status.code === 2);
797
+ check("otlp.span: status message preserved", s2.status.message === "boom");
798
+ check("otlp.span: event mapped with name + attrs",
799
+ s2.events.length === 1 && s2.events[0].name === "ev" &&
800
+ s2.events[0].attributes[0].key === "k");
801
+ check("otlp.span: droppedEventsCount preserved", s2.droppedEventsCount === 3);
802
+ }
803
+
804
+ // ---- OTLP builder: resource bundling / batching edges ----
805
+
806
+ function testOtlpBundleEmptyAndGrouping() {
807
+ check("otlp.bundle: empty batch → empty resourceSpans",
808
+ otlpEx._bundleSpans([]).resourceSpans.length === 0);
809
+
810
+ // Two spans, distinct resource attrs → two resourceSpans entries.
811
+ var multi = otlpEx._bundleSpans([
812
+ _mkSpan({ resource: { "service.name": "alpha" } }),
813
+ _mkSpan({ resource: { "service.name": "beta" } }),
814
+ ]);
815
+ check("otlp.bundle: distinct resources split into 2 envelopes",
816
+ multi.resourceSpans.length === 2);
817
+ check("otlp.bundle: resource attributes emitted as KeyValue array",
818
+ Array.isArray(multi.resourceSpans[0].resource.attributes) &&
819
+ multi.resourceSpans[0].resource.attributes[0].key === "service.name");
820
+
821
+ // Two spans, SAME resource → one envelope holding both spans.
822
+ var grouped = otlpEx._bundleSpans([
823
+ _mkSpan({ resource: { "service.name": "same" }, name: "a" }),
824
+ _mkSpan({ resource: { "service.name": "same" }, name: "b" }),
825
+ ]);
826
+ check("otlp.bundle: shared resource groups into 1 envelope",
827
+ grouped.resourceSpans.length === 1);
828
+ check("otlp.bundle: grouped envelope holds both spans",
829
+ grouped.resourceSpans[0].scopeSpans[0].spans.length === 2);
830
+
831
+ // Missing scope → default blamejs scope name, empty version string.
832
+ var noScope = otlpEx._bundleSpans([_mkSpan({})]);
833
+ var scope = noScope.resourceSpans[0].scopeSpans[0].scope;
834
+ check("otlp.bundle: default scope name", scope.name === "blamejs");
835
+ check("otlp.bundle: default scope version → ''", scope.version === "");
836
+ }
837
+
838
+ // ---- OTLP builder: protobuf wire-format edges ----
839
+
840
+ function testOtlpProtobufSpanFieldLayout() {
841
+ // Span-message top-level field layout regression guard. Status is proto
842
+ // field 15 (a length-delimited message); dropped_attributes_count is 10,
843
+ // dropped_events_count is 12, dropped_links_count is 14. The encoder must
844
+ // never place a bare varint on the Status field number 15 — that would
845
+ // corrupt the Status message for a strict OTLP protobuf collector. (The
846
+ // hardcoded dropped_links_count is 0 and proto3 omits it from the wire, so
847
+ // both field 14 and a stray field-15 varint are absent today; this asserts
848
+ // the invariant so a future non-zero placeholder can't regress onto 15.)
849
+ var buf = otlpEx._spanToProto(_mkSpan({
850
+ droppedAttributesCount: 3, // → field 10 emits (non-zero)
851
+ droppedEventsCount: 2, // → field 12 emits (non-zero)
852
+ }));
853
+ check("otlp.proto: span encodes to a non-empty Buffer",
854
+ Buffer.isBuffer(buf) && buf.length > 0);
855
+ var fields = _scanTopLevelProtoFields(buf);
856
+ function has(field, wire) {
857
+ return fields.some(function (f) { return f[0] === field && f[1] === wire; });
858
+ }
859
+ check("otlp.proto: dropped_attributes_count at field 10 (varint)", has(10, 0));
860
+ check("otlp.proto: dropped_events_count at field 12 (varint)", has(12, 0));
861
+ check("otlp.proto: no bare varint on Status field 15", !has(15, 0));
862
+ check("otlp.proto: Status at field 15 as length-delimited message", has(15, 2));
863
+ }
864
+
865
+ function testOtlpProtobufMalformedHexIds() {
866
+ // Malformed inbound trace/span ids (odd length, non-hex chars, empty)
867
+ // must not crash the encoder — _hexToBytes drops to empty bytes.
868
+ var buf = otlpEx._spanToProto(_mkSpan({
869
+ traceId: "abc", // odd length → empty
870
+ spanId: "zzzzzzzzzzzzzzzz", // non-hex → empty
871
+ parentSpanId: "", // empty → empty
872
+ }));
873
+ check("otlp.proto: malformed ids encode without throwing",
874
+ Buffer.isBuffer(buf) && buf.length > 0);
875
+ }
876
+
877
+ function testOtlpProtobufAnyValueDepthCap() {
878
+ // A deeply nested array attribute must not blow the stack / recurse
879
+ // past MAX_ANYVALUE_DEPTH — the encoder caps descent and emits empty.
880
+ var deep = 0;
881
+ for (var d = 0; d < 130; d++) { deep = [deep]; }
882
+ var buf = otlpEx._spanToProto(_mkSpan({ attributes: { nested: deep } }));
883
+ check("otlp.proto: deep-nested array attribute encodes without crashing",
884
+ Buffer.isBuffer(buf) && buf.length > 0);
885
+ }
886
+
887
+ // ---- OTLP exporter: create() option validation ----
888
+
889
+ function testOtlpCreateEncodingValidation() {
890
+ function code(fn) { try { fn(); } catch (e) { return e.code; } return null; }
891
+ check("otlp.create: bogus encoding rejected",
892
+ code(function () {
893
+ otlpEx.create({ endpoint: "https://c.invalid/v1/traces", encoding: "xml", fetchImpl: function () {} });
894
+ }) === "otlp/bad-encoding");
895
+ // http/protobuf is a documented alias for protobuf — constructs fine.
896
+ var ex = otlpEx.create({
897
+ endpoint: "https://c.invalid/v1/traces",
898
+ encoding: "http/protobuf",
899
+ fetchImpl: function () {},
900
+ flushIntervalMs: 0,
901
+ });
902
+ check("otlp.create: http/protobuf alias constructs", typeof ex.flush === "function");
903
+ }
904
+
905
+ function testOtlpCreateFetchImplValidation() {
906
+ var threw = false, codeVal = null;
907
+ try {
908
+ otlpEx.create({ endpoint: "https://c.invalid/v1/traces", fetchImpl: 42 });
909
+ } catch (e) { threw = true; codeVal = e.code; }
910
+ check("otlp.create: non-function fetchImpl rejected", threw && codeVal === "otlp/no-fetch");
911
+ }
912
+
913
+ function testOtlpCreateNumericOptValidation() {
914
+ function code(fn) { try { fn(); } catch (e) { return e.code; } return null; }
915
+ var base = { endpoint: "https://c.invalid/v1/traces", fetchImpl: function () {}, flushIntervalMs: 0 };
916
+ check("otlp.create: negative batchSize rejected",
917
+ code(function () { otlpEx.create(Object.assign({}, base, { batchSize: -5 })); }) === "otlp/bad-opts");
918
+ check("otlp.create: non-numeric batchSize rejected",
919
+ code(function () { otlpEx.create(Object.assign({}, base, { batchSize: "big" })); }) === "otlp/bad-opts");
920
+ check("otlp.create: zero maxAttempts rejected",
921
+ code(function () { otlpEx.create(Object.assign({}, base, { maxAttempts: 0 })); }) === "otlp/bad-opts");
922
+ check("otlp.create: infinite maxQueueSize rejected",
923
+ code(function () { otlpEx.create(Object.assign({}, base, { maxQueueSize: Infinity })); }) === "otlp/bad-opts");
924
+ }
925
+
926
+ // ---- OTLP exporter: queue / flush / retry behaviour (injected transport) ----
927
+
928
+ function _mkExporter(fetchImpl, extra) {
929
+ return otlpEx.create(Object.assign({
930
+ endpoint: "http://localhost:4318/v1/traces",
931
+ allowedProtocols: b.safeUrl.ALLOW_HTTP_ALL,
932
+ fetchImpl: fetchImpl,
933
+ batchSize: 100, // large → queue() never auto-flushes; we flush explicitly
934
+ flushIntervalMs: 0, // no ticker
935
+ }, extra || {}));
936
+ }
937
+
938
+ async function testOtlpFlushEmptyQueue() {
939
+ var ex = _mkExporter(function () { throw new Error("must not post on empty queue"); });
940
+ var r = await ex.flush();
941
+ check("otlp.flush: empty queue → sent 0", r.sent === 0);
942
+ await ex.shutdown();
943
+ }
944
+
945
+ async function testOtlpPostPermanent4xx() {
946
+ var attempts = 0;
947
+ var ex = _mkExporter(function () {
948
+ attempts += 1;
949
+ return Promise.resolve({ ok: false, status: 400 }); // permanent, non-retryable
950
+ }, { backoffInitialMs: 1 });
951
+ ex.queue(_mkSpan({}));
952
+ var r = await ex.flush();
953
+ check("otlp.post: 400 not retried (single attempt)", attempts === 1);
954
+ check("otlp.post: 400 batch dropped", r.dropped === 1 && r.sent === 0);
955
+ check("otlp.stats: droppedExportFailed incremented", ex.stats().droppedExportFailed === 1);
956
+ await ex.shutdown();
957
+ }
958
+
959
+ async function testOtlpPostRetryable429() {
960
+ var attempts = 0;
961
+ var ex = _mkExporter(function () {
962
+ attempts += 1;
963
+ if (attempts === 1) return Promise.resolve({ ok: false, status: 429 }); // retryable
964
+ return Promise.resolve({ ok: true, status: 200 });
965
+ }, { backoffInitialMs: 1 });
966
+ ex.queue(_mkSpan({}));
967
+ var r = await ex.flush();
968
+ check("otlp.post: 429 retried then succeeded", attempts === 2 && r.sent === 1);
969
+ await ex.shutdown();
970
+ }
971
+
972
+ async function testOtlpPostNetworkErrorExhausts() {
973
+ var attempts = 0;
974
+ var ex = _mkExporter(function () {
975
+ attempts += 1;
976
+ return Promise.reject(new Error("ECONNREFUSED"));
977
+ }, { backoffInitialMs: 1, maxAttempts: 2 });
978
+ ex.queue(_mkSpan({}));
979
+ var r = await ex.flush();
980
+ check("otlp.post: network error retried to maxAttempts", attempts === 2);
981
+ check("otlp.post: exhausted network error drops batch", r.dropped === 1 && r.sent === 0);
982
+ check("otlp.stats: network drop counted", ex.stats().droppedExportFailed === 1);
983
+ await ex.shutdown();
984
+ }
985
+
986
+ function testOtlpQueueOverflowDropsOldest() {
987
+ var ex = _mkExporter(function () { return Promise.resolve({ ok: true, status: 200 }); },
988
+ { maxQueueSize: 2 });
989
+ ex.queue(_mkSpan({ name: "one" }));
990
+ ex.queue(_mkSpan({ name: "two" }));
991
+ ex.queue(_mkSpan({ name: "three" })); // overflow → drop oldest
992
+ var st = ex.stats();
993
+ check("otlp.queue: overflow capped at maxQueueSize", st.queueLength === 2);
994
+ check("otlp.queue: overflow drop counted", st.droppedQueueOverflow === 1);
995
+ }
996
+
997
+ function testOtlpQueueGarbageAndStopping() {
998
+ var ex = _mkExporter(function () { return Promise.resolve({ ok: true, status: 200 }); });
999
+ ex.queue(null);
1000
+ ex.queue(42);
1001
+ ex.queue("not-a-span");
1002
+ check("otlp.queue: non-object spans ignored", ex.stats().queueLength === 0);
1003
+ }
1004
+
1005
+ async function testOtlpQueueAfterShutdown() {
1006
+ var ex = _mkExporter(function () { return Promise.resolve({ ok: true, status: 200 }); });
1007
+ await ex.shutdown(); // sets stopping
1008
+ ex.queue(_mkSpan({})); // must be dropped, not queued
1009
+ var st = ex.stats();
1010
+ check("otlp.queue: post-shutdown span not queued", st.queueLength === 0);
1011
+ check("otlp.queue: post-shutdown span counted as export-failed drop",
1012
+ st.droppedExportFailed >= 1);
1013
+ }
1014
+
1015
+ async function testOtlpFlushProtobufBodyIsBuffer() {
1016
+ var bodies = [];
1017
+ var ex = _mkExporter(function (url, init) {
1018
+ bodies.push(init.body);
1019
+ return Promise.resolve({ ok: true, status: 200 });
1020
+ }, { encoding: "protobuf" });
1021
+ ex.queue(_mkSpan({ attributes: { retry: -7 } })); // negative int64 through proto path
1022
+ var r = await ex.flush();
1023
+ check("otlp.flush: protobuf batch sent", r.sent === 1);
1024
+ check("otlp.flush: protobuf body is a Buffer", Buffer.isBuffer(bodies[0]) && bodies[0].length > 0);
1025
+ await ex.shutdown();
1026
+ }
1027
+
669
1028
  // ---- Run all ----
670
1029
 
671
1030
  async function run() {
@@ -699,6 +1058,25 @@ async function run() {
699
1058
  testTracerToJSONIsImmutable();
700
1059
  testTraceLogCorrelationRejectsAuditOpt();
701
1060
  testTracerRejectsAuditOpt();
1061
+ // OTLP wire-format builder edges
1062
+ testOtlpAttrValueCoercion();
1063
+ testOtlpAttrNonObjectInputs();
1064
+ testOtlpSpanToOtlpDefaults();
1065
+ testOtlpBundleEmptyAndGrouping();
1066
+ testOtlpProtobufSpanFieldLayout();
1067
+ testOtlpProtobufMalformedHexIds();
1068
+ testOtlpProtobufAnyValueDepthCap();
1069
+ testOtlpCreateEncodingValidation();
1070
+ testOtlpCreateFetchImplValidation();
1071
+ testOtlpCreateNumericOptValidation();
1072
+ await testOtlpFlushEmptyQueue();
1073
+ await testOtlpPostPermanent4xx();
1074
+ await testOtlpPostRetryable429();
1075
+ await testOtlpPostNetworkErrorExhausts();
1076
+ testOtlpQueueOverflowDropsOldest();
1077
+ testOtlpQueueGarbageAndStopping();
1078
+ await testOtlpQueueAfterShutdown();
1079
+ await testOtlpFlushProtobufBodyIsBuffer();
702
1080
  }
703
1081
 
704
1082
  module.exports = { run: run };