@blamejs/blamejs-shop 0.4.31 → 0.4.32

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 (336) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/lib/asset-manifest.json +1 -1
  3. package/lib/vendor/MANIFEST.json +392 -278
  4. package/lib/vendor/blamejs/.github/workflows/ci.yml +34 -3
  5. package/lib/vendor/blamejs/.github/workflows/npm-publish.yml +21 -4
  6. package/lib/vendor/blamejs/.gitignore +6 -0
  7. package/lib/vendor/blamejs/CHANGELOG.md +26 -0
  8. package/lib/vendor/blamejs/MIGRATING.md +43 -0
  9. package/lib/vendor/blamejs/README.md +8 -6
  10. package/lib/vendor/blamejs/SECURITY.md +19 -3
  11. package/lib/vendor/blamejs/api-snapshot.json +2190 -664
  12. package/lib/vendor/blamejs/docker/caddy/localstack.Caddyfile +19 -0
  13. package/lib/vendor/blamejs/docker/init/generate-certs.sh +1 -1
  14. package/lib/vendor/blamejs/docker/otel/config.yaml +42 -0
  15. package/lib/vendor/blamejs/docker/otel/export/.gitkeep +0 -0
  16. package/lib/vendor/blamejs/docker/postgres/initdb/10-replication.sh +15 -0
  17. package/lib/vendor/blamejs/docker/postgres/replica-entrypoint.sh +38 -0
  18. package/lib/vendor/blamejs/docker/toxiproxy/toxiproxy.json +14 -0
  19. package/lib/vendor/blamejs/docker-compose.test.yml +209 -0
  20. package/lib/vendor/blamejs/examples/wiki/lib/page-generator.js +132 -0
  21. package/lib/vendor/blamejs/examples/wiki/lib/source-comment-block-validator.js +221 -61
  22. package/lib/vendor/blamejs/examples/wiki/lib/source-doc-parser.js +144 -9
  23. package/lib/vendor/blamejs/examples/wiki/test/e2e.js +99 -0
  24. package/lib/vendor/blamejs/fuzz/guard-sql.fuzz.js +36 -0
  25. package/lib/vendor/blamejs/index.js +4 -0
  26. package/lib/vendor/blamejs/lib/agent-envelope-mac.js +104 -0
  27. package/lib/vendor/blamejs/lib/agent-event-bus.js +105 -4
  28. package/lib/vendor/blamejs/lib/agent-posture-chain.js +8 -42
  29. package/lib/vendor/blamejs/lib/ai-content-detect.js +9 -10
  30. package/lib/vendor/blamejs/lib/api-key.js +158 -77
  31. package/lib/vendor/blamejs/lib/atomic-file.js +62 -4
  32. package/lib/vendor/blamejs/lib/audit-chain.js +47 -11
  33. package/lib/vendor/blamejs/lib/audit-sign.js +77 -2
  34. package/lib/vendor/blamejs/lib/audit-tools.js +79 -51
  35. package/lib/vendor/blamejs/lib/audit.js +259 -123
  36. package/lib/vendor/blamejs/lib/auth/oauth.js +53 -9
  37. package/lib/vendor/blamejs/lib/auth/openid-federation.js +108 -47
  38. package/lib/vendor/blamejs/lib/auth/saml.js +6 -8
  39. package/lib/vendor/blamejs/lib/auth/sd-jwt-vc.js +31 -5
  40. package/lib/vendor/blamejs/lib/backup/index.js +45 -10
  41. package/lib/vendor/blamejs/lib/break-glass.js +355 -147
  42. package/lib/vendor/blamejs/lib/cache.js +174 -105
  43. package/lib/vendor/blamejs/lib/chain-writer.js +38 -16
  44. package/lib/vendor/blamejs/lib/cli.js +19 -14
  45. package/lib/vendor/blamejs/lib/cluster-provider-db.js +130 -104
  46. package/lib/vendor/blamejs/lib/cluster-storage.js +119 -22
  47. package/lib/vendor/blamejs/lib/cluster.js +119 -71
  48. package/lib/vendor/blamejs/lib/codepoint-class.js +23 -0
  49. package/lib/vendor/blamejs/lib/compliance.js +206 -4
  50. package/lib/vendor/blamejs/lib/consent.js +82 -29
  51. package/lib/vendor/blamejs/lib/constants.js +27 -11
  52. package/lib/vendor/blamejs/lib/crypto-field.js +916 -156
  53. package/lib/vendor/blamejs/lib/db-declare-row-policy.js +35 -22
  54. package/lib/vendor/blamejs/lib/db-file-lifecycle.js +3 -2
  55. package/lib/vendor/blamejs/lib/db-query.js +882 -260
  56. package/lib/vendor/blamejs/lib/db-schema.js +228 -44
  57. package/lib/vendor/blamejs/lib/db.js +249 -99
  58. package/lib/vendor/blamejs/lib/dsr.js +385 -55
  59. package/lib/vendor/blamejs/lib/error-page.js +14 -1
  60. package/lib/vendor/blamejs/lib/external-db-migrate.js +239 -137
  61. package/lib/vendor/blamejs/lib/external-db.js +549 -34
  62. package/lib/vendor/blamejs/lib/file-upload.js +52 -7
  63. package/lib/vendor/blamejs/lib/framework-error.js +20 -1
  64. package/lib/vendor/blamejs/lib/framework-files.js +73 -0
  65. package/lib/vendor/blamejs/lib/framework-schema.js +695 -394
  66. package/lib/vendor/blamejs/lib/gate-contract.js +659 -1
  67. package/lib/vendor/blamejs/lib/guard-agent-registry.js +26 -44
  68. package/lib/vendor/blamejs/lib/guard-all.js +1 -0
  69. package/lib/vendor/blamejs/lib/guard-auth.js +42 -112
  70. package/lib/vendor/blamejs/lib/guard-cidr.js +33 -154
  71. package/lib/vendor/blamejs/lib/guard-csv.js +46 -113
  72. package/lib/vendor/blamejs/lib/guard-domain.js +34 -157
  73. package/lib/vendor/blamejs/lib/guard-dsn.js +27 -43
  74. package/lib/vendor/blamejs/lib/guard-email.js +47 -69
  75. package/lib/vendor/blamejs/lib/guard-envelope.js +19 -32
  76. package/lib/vendor/blamejs/lib/guard-event-bus-payload.js +24 -42
  77. package/lib/vendor/blamejs/lib/guard-event-bus-topic.js +25 -43
  78. package/lib/vendor/blamejs/lib/guard-filename.js +42 -106
  79. package/lib/vendor/blamejs/lib/guard-graphql.js +42 -123
  80. package/lib/vendor/blamejs/lib/guard-html.js +53 -108
  81. package/lib/vendor/blamejs/lib/guard-idempotency-key.js +24 -42
  82. package/lib/vendor/blamejs/lib/guard-image.js +46 -103
  83. package/lib/vendor/blamejs/lib/guard-imap-command.js +18 -32
  84. package/lib/vendor/blamejs/lib/guard-jmap.js +16 -30
  85. package/lib/vendor/blamejs/lib/guard-json.js +38 -108
  86. package/lib/vendor/blamejs/lib/guard-jsonpath.js +38 -171
  87. package/lib/vendor/blamejs/lib/guard-jwt.js +49 -179
  88. package/lib/vendor/blamejs/lib/guard-list-id.js +25 -41
  89. package/lib/vendor/blamejs/lib/guard-list-unsubscribe.js +27 -43
  90. package/lib/vendor/blamejs/lib/guard-mail-compose.js +24 -42
  91. package/lib/vendor/blamejs/lib/guard-mail-move.js +26 -44
  92. package/lib/vendor/blamejs/lib/guard-mail-query.js +28 -46
  93. package/lib/vendor/blamejs/lib/guard-mail-reply.js +24 -42
  94. package/lib/vendor/blamejs/lib/guard-mail-sieve.js +24 -42
  95. package/lib/vendor/blamejs/lib/guard-managesieve-command.js +17 -31
  96. package/lib/vendor/blamejs/lib/guard-markdown.js +37 -104
  97. package/lib/vendor/blamejs/lib/guard-message-id.js +26 -45
  98. package/lib/vendor/blamejs/lib/guard-mime.js +39 -151
  99. package/lib/vendor/blamejs/lib/guard-oauth.js +54 -135
  100. package/lib/vendor/blamejs/lib/guard-pdf.js +45 -101
  101. package/lib/vendor/blamejs/lib/guard-pop3-command.js +21 -31
  102. package/lib/vendor/blamejs/lib/guard-posture-chain.js +24 -42
  103. package/lib/vendor/blamejs/lib/guard-regex.js +33 -107
  104. package/lib/vendor/blamejs/lib/guard-saga-config.js +24 -42
  105. package/lib/vendor/blamejs/lib/guard-shell.js +42 -172
  106. package/lib/vendor/blamejs/lib/guard-smtp-command.js +48 -54
  107. package/lib/vendor/blamejs/lib/guard-snapshot-envelope.js +24 -42
  108. package/lib/vendor/blamejs/lib/guard-sql.js +1491 -0
  109. package/lib/vendor/blamejs/lib/guard-stream-args.js +24 -43
  110. package/lib/vendor/blamejs/lib/guard-svg.js +47 -65
  111. package/lib/vendor/blamejs/lib/guard-template.js +35 -172
  112. package/lib/vendor/blamejs/lib/guard-tenant-id.js +26 -45
  113. package/lib/vendor/blamejs/lib/guard-time.js +32 -154
  114. package/lib/vendor/blamejs/lib/guard-trace-context.js +25 -44
  115. package/lib/vendor/blamejs/lib/guard-uuid.js +32 -153
  116. package/lib/vendor/blamejs/lib/guard-xml.js +38 -113
  117. package/lib/vendor/blamejs/lib/guard-yaml.js +51 -163
  118. package/lib/vendor/blamejs/lib/http-client.js +37 -9
  119. package/lib/vendor/blamejs/lib/inbox.js +120 -107
  120. package/lib/vendor/blamejs/lib/legal-hold.js +121 -50
  121. package/lib/vendor/blamejs/lib/log-stream-cloudwatch.js +47 -31
  122. package/lib/vendor/blamejs/lib/log-stream-otlp.js +32 -18
  123. package/lib/vendor/blamejs/lib/mail-auth.js +236 -0
  124. package/lib/vendor/blamejs/lib/mail-crypto-smime.js +2 -6
  125. package/lib/vendor/blamejs/lib/mail-dkim.js +1 -0
  126. package/lib/vendor/blamejs/lib/mail-greylist.js +2 -6
  127. package/lib/vendor/blamejs/lib/mail-helo.js +2 -6
  128. package/lib/vendor/blamejs/lib/mail-journal.js +85 -64
  129. package/lib/vendor/blamejs/lib/mail-rbl.js +2 -6
  130. package/lib/vendor/blamejs/lib/mail-scan.js +2 -6
  131. package/lib/vendor/blamejs/lib/mail-server-jmap.js +117 -12
  132. package/lib/vendor/blamejs/lib/mail-server-mx.js +276 -7
  133. package/lib/vendor/blamejs/lib/mail-spam-score.js +2 -6
  134. package/lib/vendor/blamejs/lib/mail-store.js +293 -154
  135. package/lib/vendor/blamejs/lib/mail.js +8 -4
  136. package/lib/vendor/blamejs/lib/middleware/body-parser.js +71 -25
  137. package/lib/vendor/blamejs/lib/middleware/csrf-protect.js +19 -8
  138. package/lib/vendor/blamejs/lib/middleware/dpop.js +10 -1
  139. package/lib/vendor/blamejs/lib/middleware/fetch-metadata.js +17 -7
  140. package/lib/vendor/blamejs/lib/middleware/idempotency-key.js +75 -51
  141. package/lib/vendor/blamejs/lib/middleware/rate-limit.js +102 -32
  142. package/lib/vendor/blamejs/lib/middleware/security-headers.js +21 -5
  143. package/lib/vendor/blamejs/lib/migrations.js +108 -66
  144. package/lib/vendor/blamejs/lib/network-heartbeat.js +7 -0
  145. package/lib/vendor/blamejs/lib/network-proxy.js +24 -1
  146. package/lib/vendor/blamejs/lib/nonce-store.js +31 -9
  147. package/lib/vendor/blamejs/lib/object-store/azure-blob-bucket-ops.js +9 -4
  148. package/lib/vendor/blamejs/lib/object-store/azure-blob.js +57 -3
  149. package/lib/vendor/blamejs/lib/object-store/gcs.js +4 -1
  150. package/lib/vendor/blamejs/lib/object-store/sigv4-bucket-ops.js +5 -2
  151. package/lib/vendor/blamejs/lib/object-store/sigv4.js +38 -6
  152. package/lib/vendor/blamejs/lib/observability-otlp-exporter.js +9 -1
  153. package/lib/vendor/blamejs/lib/observability.js +124 -0
  154. package/lib/vendor/blamejs/lib/otel-export.js +12 -3
  155. package/lib/vendor/blamejs/lib/outbox.js +184 -83
  156. package/lib/vendor/blamejs/lib/parsers/safe-xml.js +47 -7
  157. package/lib/vendor/blamejs/lib/pqc-agent.js +44 -0
  158. package/lib/vendor/blamejs/lib/pubsub-cluster.js +42 -20
  159. package/lib/vendor/blamejs/lib/queue-local.js +225 -140
  160. package/lib/vendor/blamejs/lib/queue-redis.js +9 -1
  161. package/lib/vendor/blamejs/lib/queue-sqs.js +6 -0
  162. package/lib/vendor/blamejs/lib/queue.js +7 -0
  163. package/lib/vendor/blamejs/lib/redact.js +68 -11
  164. package/lib/vendor/blamejs/lib/redis-client.js +160 -31
  165. package/lib/vendor/blamejs/lib/request-helpers.js +7 -0
  166. package/lib/vendor/blamejs/lib/retention.js +101 -40
  167. package/lib/vendor/blamejs/lib/router.js +212 -5
  168. package/lib/vendor/blamejs/lib/safe-dns.js +29 -45
  169. package/lib/vendor/blamejs/lib/safe-ical.js +18 -33
  170. package/lib/vendor/blamejs/lib/safe-icap.js +27 -43
  171. package/lib/vendor/blamejs/lib/safe-sieve.js +21 -40
  172. package/lib/vendor/blamejs/lib/safe-sql.js +212 -3
  173. package/lib/vendor/blamejs/lib/safe-url.js +170 -3
  174. package/lib/vendor/blamejs/lib/safe-vcard.js +18 -33
  175. package/lib/vendor/blamejs/lib/scheduler.js +35 -12
  176. package/lib/vendor/blamejs/lib/seeders.js +122 -74
  177. package/lib/vendor/blamejs/lib/session-stores.js +42 -14
  178. package/lib/vendor/blamejs/lib/session.js +175 -77
  179. package/lib/vendor/blamejs/lib/sql.js +3842 -0
  180. package/lib/vendor/blamejs/lib/sse.js +26 -0
  181. package/lib/vendor/blamejs/lib/ssrf-guard.js +151 -4
  182. package/lib/vendor/blamejs/lib/static.js +177 -34
  183. package/lib/vendor/blamejs/lib/subject.js +96 -49
  184. package/lib/vendor/blamejs/lib/vault/index.js +3 -2
  185. package/lib/vendor/blamejs/lib/vault/passphrase-ops.js +3 -2
  186. package/lib/vendor/blamejs/lib/vault/rotate.js +168 -108
  187. package/lib/vendor/blamejs/lib/vault-aad.js +6 -0
  188. package/lib/vendor/blamejs/lib/vendor-data.js +2 -0
  189. package/lib/vendor/blamejs/lib/websocket.js +35 -5
  190. package/lib/vendor/blamejs/lib/worker-pool.js +11 -0
  191. package/lib/vendor/blamejs/package.json +2 -2
  192. package/lib/vendor/blamejs/release-notes/v0.14.x.json +1503 -0
  193. package/lib/vendor/blamejs/release-notes/v0.15.0.json +77 -0
  194. package/lib/vendor/blamejs/release-notes/v0.15.1.json +22 -0
  195. package/lib/vendor/blamejs/release-notes/v0.15.2.json +22 -0
  196. package/lib/vendor/blamejs/release-notes/v0.15.3.json +39 -0
  197. package/lib/vendor/blamejs/release-notes/v0.15.4.json +39 -0
  198. package/lib/vendor/blamejs/release-notes/v0.15.5.json +22 -0
  199. package/lib/vendor/blamejs/release-notes/v0.15.6.json +59 -0
  200. package/lib/vendor/blamejs/scripts/check-services.js +21 -0
  201. package/lib/vendor/blamejs/scripts/gen-migrating.js +51 -0
  202. package/lib/vendor/blamejs/scripts/release.js +398 -38
  203. package/lib/vendor/blamejs/test/00-primitives.js +117 -0
  204. package/lib/vendor/blamejs/test/10-state.js +140 -14
  205. package/lib/vendor/blamejs/test/20-db.js +65 -2
  206. package/lib/vendor/blamejs/test/helpers/db.js +9 -0
  207. package/lib/vendor/blamejs/test/helpers/drivers.js +27 -15
  208. package/lib/vendor/blamejs/test/helpers/services.js +21 -0
  209. package/lib/vendor/blamejs/test/integration/audit-actor-binding-pg.test.js +246 -0
  210. package/lib/vendor/blamejs/test/integration/audit-chain-external-db.test.js +517 -0
  211. package/lib/vendor/blamejs/test/integration/audit-stack-mysql.test.js +639 -0
  212. package/lib/vendor/blamejs/test/integration/audit-stack-postgres.test.js +832 -0
  213. package/lib/vendor/blamejs/test/integration/backup-restore-objectstore.test.js +453 -0
  214. package/lib/vendor/blamejs/test/integration/data-layer-cluster-mysql.test.js +649 -0
  215. package/lib/vendor/blamejs/test/integration/data-layer-cluster-pg.test.js +770 -0
  216. package/lib/vendor/blamejs/test/integration/data-layer-mysql-privacy.test.js +630 -0
  217. package/lib/vendor/blamejs/test/integration/data-layer-mysql.test.js +610 -0
  218. package/lib/vendor/blamejs/test/integration/data-layer-pg.test.js +577 -0
  219. package/lib/vendor/blamejs/test/integration/data-layer-postgres.test.js +771 -0
  220. package/lib/vendor/blamejs/test/integration/db-layer-mysql.test.js +549 -0
  221. package/lib/vendor/blamejs/test/integration/db-layer-postgres.test.js +598 -0
  222. package/lib/vendor/blamejs/test/integration/distributed-scheduler-fencing-pg.test.js +602 -0
  223. package/lib/vendor/blamejs/test/integration/external-db-postgres.test.js +576 -0
  224. package/lib/vendor/blamejs/test/integration/framework-schema-mysql.test.js +353 -0
  225. package/lib/vendor/blamejs/test/integration/log-stream-cloudwatch.test.js +224 -0
  226. package/lib/vendor/blamejs/test/integration/mail-crypto-smime.test.js +142 -17
  227. package/lib/vendor/blamejs/test/integration/network-heartbeat.test.js +25 -10
  228. package/lib/vendor/blamejs/test/integration/object-store-azure.test.js +101 -0
  229. package/lib/vendor/blamejs/test/integration/object-store-gcs.test.js +239 -0
  230. package/lib/vendor/blamejs/test/integration/object-store-sigv4.test.js +35 -16
  231. package/lib/vendor/blamejs/test/integration/object-store-worm-lock.test.js +291 -0
  232. package/lib/vendor/blamejs/test/integration/pubsub.test.js +14 -0
  233. package/lib/vendor/blamejs/test/integration/queue-sqs.test.js +322 -0
  234. package/lib/vendor/blamejs/test/integration/redis-reconnect-toxiproxy.test.js +300 -0
  235. package/lib/vendor/blamejs/test/integration/sql-fts5-catalog-sqlite.test.js +154 -0
  236. package/lib/vendor/blamejs/test/integration/tls-classical-downgrade-audit.test.js +71 -0
  237. package/lib/vendor/blamejs/test/layer-0-primitives/agent-event-bus.test.js +175 -12
  238. package/lib/vendor/blamejs/test/layer-0-primitives/atomic-file-exclusive-temp.test.js +216 -0
  239. package/lib/vendor/blamejs/test/layer-0-primitives/audit-checkpoint-false-rollback.test.js +203 -0
  240. package/lib/vendor/blamejs/test/layer-0-primitives/audit-query-self-log.test.js +126 -0
  241. package/lib/vendor/blamejs/test/layer-0-primitives/audit-safeemit-redacts-secrets.test.js +196 -0
  242. package/lib/vendor/blamejs/test/layer-0-primitives/audit-signing-key-rotation.test.js +197 -0
  243. package/lib/vendor/blamejs/test/layer-0-primitives/audit-verifybundle-tamper.test.js +209 -0
  244. package/lib/vendor/blamejs/test/layer-0-primitives/azure-blob-key-encoding.test.js +121 -0
  245. package/lib/vendor/blamejs/test/layer-0-primitives/backup-residency-posture.test.js +168 -0
  246. package/lib/vendor/blamejs/test/layer-0-primitives/backup-scheduletest-drill.test.js +318 -0
  247. package/lib/vendor/blamejs/test/layer-0-primitives/break-glass.test.js +233 -7
  248. package/lib/vendor/blamejs/test/layer-0-primitives/codebase-patterns.test.js +1120 -14
  249. package/lib/vendor/blamejs/test/layer-0-primitives/compliance.test.js +229 -0
  250. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-field-derived-hash.test.js +24 -7
  251. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-field-dual-read-migrate.test.js +165 -0
  252. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-field-per-row-key.test.js +350 -0
  253. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-field-unseal-rate-cap.test.js +27 -9
  254. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-field-upgrade-dialect.test.js +76 -0
  255. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-interop-oracles.test.js +392 -0
  256. package/lib/vendor/blamejs/test/layer-0-primitives/csrf-protect.test.js +159 -0
  257. package/lib/vendor/blamejs/test/layer-0-primitives/db-column-gate.test.js +180 -1
  258. package/lib/vendor/blamejs/test/layer-0-primitives/db-query-cross-schema.test.js +5 -2
  259. package/lib/vendor/blamejs/test/layer-0-primitives/db-query-sealed-field-in.test.js +101 -0
  260. package/lib/vendor/blamejs/test/layer-0-primitives/db-raw-residency-gate.test.js +128 -0
  261. package/lib/vendor/blamejs/test/layer-0-primitives/db-schema-drift.test.js +38 -5
  262. package/lib/vendor/blamejs/test/layer-0-primitives/db-schema-reconcile-emittable.test.js +127 -0
  263. package/lib/vendor/blamejs/test/layer-0-primitives/db-stream-and-payload-shape.test.js +267 -0
  264. package/lib/vendor/blamejs/test/layer-0-primitives/db-worm.test.js +150 -0
  265. package/lib/vendor/blamejs/test/layer-0-primitives/defineguard-default-gate-posture-caps.test.js +30 -0
  266. package/lib/vendor/blamejs/test/layer-0-primitives/dpop-middleware-replaystore-required.test.js +46 -0
  267. package/lib/vendor/blamejs/test/layer-0-primitives/dsr.test.js +218 -0
  268. package/lib/vendor/blamejs/test/layer-0-primitives/erase-posture-vacuum.test.js +210 -0
  269. package/lib/vendor/blamejs/test/layer-0-primitives/external-db-hardening.test.js +4 -1
  270. package/lib/vendor/blamejs/test/layer-0-primitives/external-db-migrate.test.js +48 -2
  271. package/lib/vendor/blamejs/test/layer-0-primitives/federation-vc-suite.test.js +237 -5
  272. package/lib/vendor/blamejs/test/layer-0-primitives/fetch-metadata.test.js +20 -9
  273. package/lib/vendor/blamejs/test/layer-0-primitives/file-upload-content-safety-skip-audit.test.js +193 -0
  274. package/lib/vendor/blamejs/test/layer-0-primitives/guard-csv.test.js +90 -0
  275. package/lib/vendor/blamejs/test/layer-0-primitives/http-client-stream.test.js +85 -0
  276. package/lib/vendor/blamejs/test/layer-0-primitives/idempotency-key.test.js +10 -6
  277. package/lib/vendor/blamejs/test/layer-0-primitives/inbox.test.js +15 -4
  278. package/lib/vendor/blamejs/test/layer-0-primitives/legal-hold.test.js +146 -0
  279. package/lib/vendor/blamejs/test/layer-0-primitives/mail-auth.test.js +189 -0
  280. package/lib/vendor/blamejs/test/layer-0-primitives/mail-journal.test.js +3 -1
  281. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-jmap.test.js +123 -4
  282. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-mx.test.js +207 -2
  283. package/lib/vendor/blamejs/test/layer-0-primitives/mail-store.test.js +74 -0
  284. package/lib/vendor/blamejs/test/layer-0-primitives/oauth-callback.test.js +43 -0
  285. package/lib/vendor/blamejs/test/layer-0-primitives/otel-export.test.js +133 -0
  286. package/lib/vendor/blamejs/test/layer-0-primitives/otlp-attr-redaction.test.js +101 -0
  287. package/lib/vendor/blamejs/test/layer-0-primitives/outbox-inflight-reaper.test.js +136 -0
  288. package/lib/vendor/blamejs/test/layer-0-primitives/parsers-standalone.test.js +83 -0
  289. package/lib/vendor/blamejs/test/layer-0-primitives/passkey-real-vectors.test.js +429 -0
  290. package/lib/vendor/blamejs/test/layer-0-primitives/pqc-agent-curve.test.js +21 -11
  291. package/lib/vendor/blamejs/test/layer-0-primitives/queue-byo-db.test.js +40 -0
  292. package/lib/vendor/blamejs/test/layer-0-primitives/redact-dlp.test.js +83 -0
  293. package/lib/vendor/blamejs/test/layer-0-primitives/redis-client.test.js +113 -0
  294. package/lib/vendor/blamejs/test/layer-0-primitives/retention-dryrun-no-vacuum.test.js +99 -0
  295. package/lib/vendor/blamejs/test/layer-0-primitives/router-use-path-scope.test.js +255 -0
  296. package/lib/vendor/blamejs/test/layer-0-primitives/safe-url-canonicalize.test.js +309 -0
  297. package/lib/vendor/blamejs/test/layer-0-primitives/safe-xml.test.js +143 -0
  298. package/lib/vendor/blamejs/test/layer-0-primitives/saml-subjectconfirmation-notonorafter.test.js +287 -0
  299. package/lib/vendor/blamejs/test/layer-0-primitives/sd-jwt-vc-ecdsa-p1363.test.js +79 -0
  300. package/lib/vendor/blamejs/test/layer-0-primitives/sd-jwt-vc.test.js +50 -0
  301. package/lib/vendor/blamejs/test/layer-0-primitives/security-headers.test.js +31 -4
  302. package/lib/vendor/blamejs/test/layer-0-primitives/session-extensions.test.js +45 -0
  303. package/lib/vendor/blamejs/test/layer-0-primitives/sigv4-bucket-ops.test.js +49 -0
  304. package/lib/vendor/blamejs/test/layer-0-primitives/sql.test.js +595 -0
  305. package/lib/vendor/blamejs/test/layer-0-primitives/sse-backpressure.test.js +91 -0
  306. package/lib/vendor/blamejs/test/layer-0-primitives/ssrf-guard.test.js +69 -0
  307. package/lib/vendor/blamejs/test/layer-0-primitives/static.test.js +194 -2
  308. package/lib/vendor/blamejs/test/layer-0-primitives/websocket-extension-header.test.js +88 -0
  309. package/lib/vendor/blamejs/test/layer-0-primitives/worker-pool-recycle-race.test.js +66 -0
  310. package/lib/vendor/blamejs/test/layer-1-state/api-key.test.js +84 -0
  311. package/lib/vendor/blamejs/test/layer-5-integration/external-db-residency.test.js +638 -0
  312. package/lib/vendor/blamejs/test/layer-5-integration/guard-host-integration.test.js +21 -0
  313. package/lib/vendor/blamejs/test/smoke.js +79 -21
  314. package/package.json +1 -1
  315. package/lib/vendor/blamejs/release-notes/v0.14.0.json +0 -43
  316. package/lib/vendor/blamejs/release-notes/v0.14.1.json +0 -60
  317. package/lib/vendor/blamejs/release-notes/v0.14.10.json +0 -54
  318. package/lib/vendor/blamejs/release-notes/v0.14.11.json +0 -72
  319. package/lib/vendor/blamejs/release-notes/v0.14.12.json +0 -95
  320. package/lib/vendor/blamejs/release-notes/v0.14.13.json +0 -52
  321. package/lib/vendor/blamejs/release-notes/v0.14.14.json +0 -31
  322. package/lib/vendor/blamejs/release-notes/v0.14.16.json +0 -45
  323. package/lib/vendor/blamejs/release-notes/v0.14.17.json +0 -57
  324. package/lib/vendor/blamejs/release-notes/v0.14.18.json +0 -127
  325. package/lib/vendor/blamejs/release-notes/v0.14.19.json +0 -61
  326. package/lib/vendor/blamejs/release-notes/v0.14.2.json +0 -18
  327. package/lib/vendor/blamejs/release-notes/v0.14.20.json +0 -73
  328. package/lib/vendor/blamejs/release-notes/v0.14.21.json +0 -98
  329. package/lib/vendor/blamejs/release-notes/v0.14.22.json +0 -91
  330. package/lib/vendor/blamejs/release-notes/v0.14.3.json +0 -18
  331. package/lib/vendor/blamejs/release-notes/v0.14.4.json +0 -18
  332. package/lib/vendor/blamejs/release-notes/v0.14.5.json +0 -18
  333. package/lib/vendor/blamejs/release-notes/v0.14.6.json +0 -60
  334. package/lib/vendor/blamejs/release-notes/v0.14.7.json +0 -77
  335. package/lib/vendor/blamejs/release-notes/v0.14.8.json +0 -27
  336. package/lib/vendor/blamejs/release-notes/v0.14.9.json +0 -40
@@ -20,6 +20,7 @@
20
20
  */
21
21
 
22
22
  var { defineClass } = require("./framework-error");
23
+ var gateContract = require("./gate-contract");
23
24
 
24
25
  var GuardStreamArgsError = defineClass("GuardStreamArgsError", { alwaysPermanent: true });
25
26
 
@@ -31,11 +32,14 @@ var PROFILES = Object.freeze({
31
32
  permissive: { maxBatchSize: 16384, minBatchSize: 1, maxOpenStreams: 64 },
32
33
  });
33
34
 
34
- var COMPLIANCE_POSTURES = Object.freeze({
35
- hipaa: "strict",
36
- "pci-dss": "strict",
37
- gdpr: "strict",
38
- soc2: "strict",
35
+ var COMPLIANCE_POSTURES = gateContract.ALL_STRICT_POSTURES;
36
+
37
+ var _resolveProfile = gateContract.makeProfileResolver({
38
+ profiles: PROFILES,
39
+ postures: COMPLIANCE_POSTURES,
40
+ defaults: DEFAULT_PROFILE,
41
+ errorClass: GuardStreamArgsError,
42
+ codePrefix: "stream-args",
39
43
  });
40
44
 
41
45
  /**
@@ -90,23 +94,6 @@ function validate(args, opts) {
90
94
  return args;
91
95
  }
92
96
 
93
- /**
94
- * @primitive b.guardStreamArgs.compliancePosture
95
- * @signature b.guardStreamArgs.compliancePosture(posture)
96
- * @since 0.9.24
97
- * @status stable
98
- *
99
- * Return the effective profile for a given compliance posture name.
100
- * Returns `null` for unknown posture names so operator typos surface
101
- * here instead of silently falling through to the default profile.
102
- *
103
- * @example
104
- * b.guardStreamArgs.compliancePosture("hipaa"); // → "strict"
105
- */
106
- function compliancePosture(posture) {
107
- return COMPLIANCE_POSTURES[posture] || null;
108
- }
109
-
110
97
  function _checkCursorOpts(cursorOpts, depth) {
111
98
  depth = depth || 0;
112
99
  if (depth > 8) { // recursion depth cap
@@ -143,24 +130,18 @@ function _checkCursorOpts(cursorOpts, depth) {
143
130
  }
144
131
  }
145
132
 
146
- function _resolveProfile(opts) {
147
- if (opts.posture && COMPLIANCE_POSTURES[opts.posture]) {
148
- return COMPLIANCE_POSTURES[opts.posture];
149
- }
150
- var p = opts.profile || DEFAULT_PROFILE;
151
- if (!PROFILES[p]) {
152
- throw new GuardStreamArgsError("stream-args/bad-profile",
153
- "guardStreamArgs: unknown profile '" + p + "'");
154
- }
155
- return p;
156
- }
157
-
158
- module.exports = {
159
- validate: validate,
160
- compliancePosture: compliancePosture,
161
- PROFILES: PROFILES,
162
- COMPLIANCE_POSTURES: COMPLIANCE_POSTURES,
163
- GuardStreamArgsError: GuardStreamArgsError,
164
- NAME: "streamArgs",
165
- KIND: "stream-args",
166
- };
133
+ // compliancePosture is assembled by gateContract.defineParser below; its
134
+ // wiki section renders from the single-sourced @abiTemplate (defineParser)
135
+ // block in gate-contract.js, instantiated for this guard by the page
136
+ // generator.
137
+ module.exports = gateContract.defineParser({
138
+ name: "stream-args",
139
+ entry: validate,
140
+ errorClass: GuardStreamArgsError,
141
+ profiles: PROFILES,
142
+ postures: COMPLIANCE_POSTURES,
143
+ extra: {
144
+ NAME: "streamArgs",
145
+ KIND: "stream-args",
146
+ },
147
+ });
@@ -1093,71 +1093,53 @@ function gate(opts) {
1093
1093
  });
1094
1094
  }
1095
1095
 
1096
- var buildProfile = gateContract.makeProfileBuilder(PROFILES);
1097
-
1098
- /**
1099
- * @primitive b.guardSvg.compliancePosture
1100
- * @signature b.guardSvg.compliancePosture(name)
1101
- * @since 0.7.7
1102
- * @status stable
1103
- * @compliance hipaa, pci-dss, gdpr, soc2
1104
- * @related b.guardSvg.gate, b.compliance.set
1105
- *
1106
- * Look up a regulatory-posture override. Returns a shallow clone
1107
- * of the named posture's option overlay; throws
1108
- * `GuardSvgError` (`svg.bad-posture`) on unknown names. Operators
1109
- * pass it through `gate({ compliancePosture: "hipaa" })` rather
1110
- * than calling this directly — exposed for introspection and
1111
- * audit-evidence collection.
1112
- *
1113
- * @example
1114
- * var hipaa = b.guardSvg.compliancePosture("hipaa");
1115
- * hipaa.bidiPolicy; // → "reject"
1116
- * hipaa.allowExternalRefs; // → false
1117
- * hipaa.allowAnimation; // → false
1118
- */
1119
- function compliancePosture(name) {
1120
- return gateContract.lookupCompliancePosture(name, COMPLIANCE_POSTURES, _err, "svg");
1121
- }
1122
-
1123
- var _svgRulePacks = gateContract.makeRulePackLoader(GuardSvgError, "svg");
1124
- var loadRulePack = _svgRulePacks.load;
1096
+ // buildProfile / compliancePosture / loadRulePack are assembled by
1097
+ // gateContract.defineGuard below (makeProfileBuilder(PROFILES) /
1098
+ // lookupCompliancePosture(_, COMPLIANCE_POSTURES) / makeRulePackLoader).
1099
+ // Their wiki sections render from the single-sourced @abiTemplate blocks
1100
+ // in gate-contract.js, instantiated per guard by the page generator.
1125
1101
 
1126
1102
  void safeUrl;
1127
1103
 
1128
- module.exports = {
1129
- // ---- guard-* family registry exports ----
1130
- NAME: "svg",
1131
- KIND: "content",
1132
- MIME_TYPES: Object.freeze(["image/svg+xml"]),
1133
- EXTENSIONS: Object.freeze([".svg", ".svgz"]),
1134
- INTEGRATION_FIXTURES: Object.freeze({
1135
- kind: "content",
1136
- contentType: "image/svg+xml",
1137
- extension: ".svg",
1138
- benignBytes: Buffer.from('<svg><circle r="10"/></svg>', "utf8"),
1139
- // Hostile: <script> inside SVG; refused regardless of profile.
1140
- hostileBytes: Buffer.from('<svg><script>alert(1)</script></svg>', "utf8"),
1141
- }),
1142
- // ---- primitive surface ----
1143
- validate: validate,
1144
- sanitize: sanitize,
1145
- gate: gate,
1146
- buildProfile: buildProfile,
1147
- compliancePosture: compliancePosture,
1148
- loadRulePack: loadRulePack,
1149
- PROFILES: PROFILES,
1150
- DEFAULTS: DEFAULTS,
1151
- COMPLIANCE_POSTURES: COMPLIANCE_POSTURES,
1152
- DANGEROUS_TAGS: DANGEROUS_TAGS,
1153
- ANIMATION_TAGS: ANIMATION_TAGS,
1154
- ANIMATION_SAFE_TARGETS: ANIMATION_SAFE_TARGETS,
1155
- STRICT_ALLOWED_TAGS: STRICT_ALLOWED_TAGS,
1156
- BALANCED_ALLOWED_TAGS: BALANCED_ALLOWED_TAGS,
1157
- PERMISSIVE_ALLOWED_TAGS: PERMISSIVE_ALLOWED_TAGS,
1158
- DANGEROUS_ATTRS: DANGEROUS_ATTRS,
1159
- URL_ATTRS: URL_ATTRS,
1160
- SAFE_SCHEMES: SAFE_SCHEMES,
1161
- DANGEROUS_SCHEMES: DANGEROUS_SCHEMES,
1162
- GuardSvgError: GuardSvgError,
1163
- };
1104
+ // ---- adaptive integration-test fixtures (consumed by layer-5 host harness) ----
1105
+ var INTEGRATION_FIXTURES = Object.freeze({
1106
+ kind: "content",
1107
+ contentType: "image/svg+xml",
1108
+ extension: ".svg",
1109
+ benignBytes: Buffer.from('<svg><circle r="10"/></svg>', "utf8"),
1110
+ // Hostile: <script> inside SVG; refused regardless of profile.
1111
+ hostileBytes: Buffer.from('<svg><script>alert(1)</script></svg>', "utf8"),
1112
+ });
1113
+
1114
+ // Assembled from the gate-contract guard factory: error class, registry
1115
+ // exports (NAME / KIND / MIME_TYPES / EXTENSIONS / INTEGRATION_FIXTURES),
1116
+ // buildProfile / compliancePosture / loadRulePack wiring, plus the
1117
+ // per-guard inspection surface (validate / sanitize / gate) and the SVG
1118
+ // tag / scheme tables passed through verbatim. The bespoke `gate` carries
1119
+ // SVG's sanitize-reserialize chain and SVGZ refuse unchanged.
1120
+ module.exports = gateContract.defineGuard({
1121
+ name: "svg",
1122
+ kind: "content",
1123
+ errorClass: GuardSvgError,
1124
+ profiles: PROFILES,
1125
+ defaults: DEFAULTS,
1126
+ postures: COMPLIANCE_POSTURES,
1127
+ mimeTypes: ["image/svg+xml"],
1128
+ extensions: [".svg", ".svgz"],
1129
+ integrationFixtures: INTEGRATION_FIXTURES,
1130
+ validate: validate,
1131
+ sanitize: sanitize,
1132
+ gate: gate,
1133
+ extra: {
1134
+ DANGEROUS_TAGS: DANGEROUS_TAGS,
1135
+ ANIMATION_TAGS: ANIMATION_TAGS,
1136
+ ANIMATION_SAFE_TARGETS: ANIMATION_SAFE_TARGETS,
1137
+ STRICT_ALLOWED_TAGS: STRICT_ALLOWED_TAGS,
1138
+ BALANCED_ALLOWED_TAGS: BALANCED_ALLOWED_TAGS,
1139
+ PERMISSIVE_ALLOWED_TAGS: PERMISSIVE_ALLOWED_TAGS,
1140
+ DANGEROUS_ATTRS: DANGEROUS_ATTRS,
1141
+ URL_ATTRS: URL_ATTRS,
1142
+ SAFE_SCHEMES: SAFE_SCHEMES,
1143
+ DANGEROUS_SCHEMES: DANGEROUS_SCHEMES,
1144
+ },
1145
+ });
@@ -311,180 +311,43 @@ function sanitize(input, opts) {
311
311
  throw _err("template.bad-input", "sanitize requires string input");
312
312
  }
313
313
  var issues = _detectIssues(input, opts);
314
- for (var i = 0; i < issues.length; i += 1) {
315
- if (issues[i].severity === "critical" || issues[i].severity === "high") {
316
- throw _err(issues[i].ruleId || "template.refused",
317
- "guardTemplate.sanitize: " + issues[i].snippet);
318
- }
319
- }
314
+ gateContract.throwOnRefusalSeverity(issues, { errorClass: GuardTemplateError, codePrefix: "template" });
320
315
  return input;
321
316
  }
322
317
 
323
- /**
324
- * @primitive b.guardTemplate.gate
325
- * @signature b.guardTemplate.gate(opts)
326
- * @since 0.7.13
327
- * @status stable
328
- * @compliance hipaa, pci-dss, gdpr, soc2
329
- * @related b.guardTemplate.validate, b.guardTemplate.sanitize
330
- *
331
- * Build a `b.gateContract` gate that screens `ctx.identifier` (or
332
- * `ctx.text`) before any template engine renders the input.
333
- * Action chain: `serve` (no issues) → `audit-only` (warn-only) →
334
- * `refuse` (any `critical` or `high`). No `sanitize` action —
335
- * template input cannot be repaired. Compose into form handlers /
336
- * comment renderers / model fields fed to Mustache / Handlebars /
337
- * Liquid so operator-untrusted strings never reach the rendering
338
- * engine carrying engine syntax.
339
- *
340
- * @opts
341
- * profile: "strict"|"balanced"|"permissive",
342
- * compliancePosture: "hipaa"|"pci-dss"|"gdpr"|"soc2",
343
- * name: string, // override gate name in audit emissions
344
- * jinjaPolicy: "reject"|"audit"|"allow",
345
- * erbPolicy: "reject"|"audit"|"allow",
346
- * pugPolicy: "reject"|"audit"|"allow",
347
- * dollarBracePolicy: "reject"|"audit"|"allow",
348
- * velocityDirectivePolicy: "reject"|"audit"|"allow",
349
- * maxBytes: number,
350
- *
351
- * @example
352
- * var gate = b.guardTemplate.gate({ profile: "strict" });
353
- *
354
- * gate({ identifier: "Hello {{7*7}}" }).then(function (rv) {
355
- * rv.ok; // → false
356
- * rv.action; // → "refuse"
357
- * });
358
- *
359
- * gate({ identifier: "Hello world" }).then(function (rv) {
360
- * rv.action; // → "serve"
361
- * });
362
- */
363
- function gate(opts) {
364
- opts = _resolveOpts(opts);
365
- return gateContract.buildGuardGate(
366
- opts.name || "guardTemplate:" + (opts.profile || "default"),
367
- opts,
368
- async function (ctx) {
369
- var text = ctx && (ctx.identifier || ctx.text);
370
- if (text === undefined || text === null) {
371
- return { ok: true, action: "serve" };
372
- }
373
- var rv = validate(text, opts);
374
- if (rv.issues.length === 0) return { ok: true, action: "serve" };
375
- var hasCritical = rv.issues.some(function (i) {
376
- return i.severity === "critical";
377
- });
378
- var hasHigh = rv.issues.some(function (i) {
379
- return i.severity === "high";
380
- });
381
- if (!hasCritical && !hasHigh) {
382
- return { ok: true, action: "audit-only", issues: rv.issues };
383
- }
384
- return { ok: false, action: "refuse", issues: rv.issues };
385
- });
386
- }
318
+ // gate / buildProfile / compliancePosture / loadRulePack are assembled by
319
+ // gateContract.defineGuard below. The gate is the standard
320
+ // serve -> audit-only -> refuse chain (template input cannot be repaired, so
321
+ // there is no sanitize action), dispatched to ctx.identifier || ctx.text via
322
+ // the spec's ctxFields. Its wiki section renders from the single-sourced
323
+ // @abiTemplate (defineGuard) blocks in gate-contract.js, instantiated per
324
+ // guard by the page generator.
387
325
 
388
- /**
389
- * @primitive b.guardTemplate.buildProfile
390
- * @signature b.guardTemplate.buildProfile(opts)
391
- * @since 0.7.13
392
- * @status stable
393
- * @related b.guardTemplate.gate, b.guardTemplate.compliancePosture
394
- *
395
- * Compose a derived guardTemplate profile from one or more named
396
- * bases plus inline overrides. `opts.extends` is a profile name
397
- * (`"strict"` / `"balanced"` / `"permissive"`) or an array of
398
- * names; later entries shadow earlier ones. Inline `opts` keys win
399
- * last. Used to keep operator-defined profiles traceable to a
400
- * baseline rather than re-typing every key.
401
- *
402
- * @opts
403
- * extends: string|string[], // base profile name(s) to compose
404
- * ...: any guardTemplate key, // inline override of resolved keys
405
- *
406
- * @example
407
- * var custom = b.guardTemplate.buildProfile({
408
- * extends: "balanced",
409
- * dollarBracePolicy: "reject",
410
- * });
411
- * custom.dollarBracePolicy; // → "reject"
412
- * custom.jinjaPolicy; // → "reject"
413
- */
414
- var buildProfile = gateContract.makeProfileBuilder(PROFILES);
415
-
416
- /**
417
- * @primitive b.guardTemplate.compliancePosture
418
- * @signature b.guardTemplate.compliancePosture(name)
419
- * @since 0.7.13
420
- * @status stable
421
- * @compliance hipaa, pci-dss, gdpr, soc2
422
- * @related b.guardTemplate.gate, b.guardTemplate.buildProfile
423
- *
424
- * Look up a compliance-posture overlay by name (`"hipaa"` /
425
- * `"pci-dss"` / `"gdpr"` / `"soc2"`). Returns a shallow clone of
426
- * the posture object — the caller may mutate freely. Throws
427
- * `GuardTemplateError("template.bad-posture")` on unknown name.
428
- *
429
- * @example
430
- * var posture = b.guardTemplate.compliancePosture("hipaa");
431
- * posture.jinjaPolicy; // → "reject"
432
- * posture.forensicSnippetBytes; // → 512
433
- */
434
- function compliancePosture(name) {
435
- return gateContract.lookupCompliancePosture(name, COMPLIANCE_POSTURES,
436
- _err, "template");
437
- }
438
-
439
- var _tplRulePacks = gateContract.makeRulePackLoader(GuardTemplateError, "template");
440
- /**
441
- * @primitive b.guardTemplate.loadRulePack
442
- * @signature b.guardTemplate.loadRulePack(pack)
443
- * @since 0.7.13
444
- * @status stable
445
- * @related b.guardTemplate.gate
446
- *
447
- * Register an operator-supplied rule pack with the guardTemplate
448
- * registry. The pack is identified by `pack.id` (non-empty string)
449
- * and stored for later inspection / dispatch by gates that opt in
450
- * via `opts.rulePackId`. Returns the pack object unchanged on
451
- * success; throws `GuardTemplateError("template.bad-opt")` when
452
- * `pack` is missing or `pack.id` is not a non-empty string.
453
- *
454
- * @example
455
- * var pack = b.guardTemplate.loadRulePack({
456
- * id: "no-prototype-keys",
457
- * rules: [
458
- * { id: "proto-key", severity: "critical",
459
- * detect: function (text) { return /__proto__|constructor/.test(text); },
460
- * reason: "input references prototype-pollution sink" },
461
- * ],
462
- * });
463
- * pack.id; // → "no-prototype-keys"
464
- */
465
- var loadRulePack = _tplRulePacks.load;
326
+ var INTEGRATION_FIXTURES = Object.freeze({
327
+ kind: "identifier",
328
+ benignBytes: Buffer.from("Hello world", "utf8"),
329
+ hostileBytes: Buffer.from("Hello {{7*7}}", "utf8"),
330
+ benignIdentifier: "Hello world",
331
+ // Hostile: Jinja-shape SSTI probe.
332
+ hostileIdentifier: "Hello {{7*7}}",
333
+ });
466
334
 
467
- module.exports = {
468
- // ---- guard-* family registry exports ----
469
- NAME: "template",
470
- KIND: "identifier",
471
- INTEGRATION_FIXTURES: Object.freeze({
472
- kind: "identifier",
473
- benignBytes: Buffer.from("Hello world", "utf8"),
474
- hostileBytes: Buffer.from("Hello {{7*7}}", "utf8"),
475
- benignIdentifier: "Hello world",
476
- // Hostile: Jinja-shape SSTI probe.
477
- hostileIdentifier: "Hello {{7*7}}",
478
- }),
479
- // ---- primitive surface ----
480
- validate: validate,
481
- sanitize: sanitize,
482
- gate: gate,
483
- buildProfile: buildProfile,
484
- compliancePosture: compliancePosture,
485
- loadRulePack: loadRulePack,
486
- PROFILES: PROFILES,
487
- DEFAULTS: DEFAULTS,
488
- COMPLIANCE_POSTURES: COMPLIANCE_POSTURES,
489
- GuardTemplateError: GuardTemplateError,
490
- };
335
+ // Assembled from the gate-contract guard factory: error class, registry
336
+ // exports (NAME / KIND / INTEGRATION_FIXTURES), the default gate, buildProfile
337
+ // / compliancePosture / loadRulePack wiring, plus the per-guard inspection
338
+ // surface (validate / sanitize) passed through verbatim. The gate is the
339
+ // factory default serve -> audit-only -> refuse chain; ctxFields names the
340
+ // ctx fields it reads (ctx.identifier, then ctx.text) so untrusted strings on
341
+ // either field reach the SSTI validator before any engine renders them.
342
+ module.exports = gateContract.defineGuard({
343
+ name: "template",
344
+ kind: "identifier",
345
+ errorClass: GuardTemplateError,
346
+ profiles: PROFILES,
347
+ defaults: DEFAULTS,
348
+ postures: COMPLIANCE_POSTURES,
349
+ integrationFixtures: INTEGRATION_FIXTURES,
350
+ validate: validate,
351
+ sanitize: sanitize,
352
+ ctxFields: ["identifier", "text"],
353
+ });
@@ -23,6 +23,7 @@
23
23
  */
24
24
 
25
25
  var { defineClass } = require("./framework-error");
26
+ var gateContract = require("./gate-contract");
26
27
 
27
28
  var GuardTenantIdError = defineClass("GuardTenantIdError", { alwaysPermanent: true });
28
29
 
@@ -34,15 +35,18 @@ var PROFILES = Object.freeze({
34
35
  permissive: { maxBytes: 512 },
35
36
  });
36
37
 
37
- var COMPLIANCE_POSTURES = Object.freeze({
38
- hipaa: "strict",
39
- "pci-dss": "strict",
40
- gdpr: "strict",
41
- soc2: "strict",
42
- });
38
+ var COMPLIANCE_POSTURES = gateContract.ALL_STRICT_POSTURES;
43
39
 
44
40
  var RESERVED = Object.freeze({ "ROOT": true, "FRAMEWORK": true, "*": true });
45
41
 
42
+ var _resolveProfile = gateContract.makeProfileResolver({
43
+ profiles: PROFILES,
44
+ postures: COMPLIANCE_POSTURES,
45
+ defaults: DEFAULT_PROFILE,
46
+ errorClass: GuardTenantIdError,
47
+ codePrefix: "tenant-id",
48
+ });
49
+
46
50
  /**
47
51
  * @primitive b.guardTenantId.validate
48
52
  * @signature b.guardTenantId.validate(tenantId, opts?)
@@ -97,42 +101,19 @@ function validate(tenantId, opts) {
97
101
  return tenantId;
98
102
  }
99
103
 
100
- /**
101
- * @primitive b.guardTenantId.compliancePosture
102
- * @signature b.guardTenantId.compliancePosture(posture)
103
- * @since 0.9.26
104
- * @status stable
105
- *
106
- * Return the effective profile for a given compliance posture name.
107
- * Returns `null` for unknown posture names so operator typos surface
108
- * here instead of silently falling through to the default profile.
109
- *
110
- * @example
111
- * b.guardTenantId.compliancePosture("hipaa"); // → "strict"
112
- */
113
- function compliancePosture(posture) {
114
- return COMPLIANCE_POSTURES[posture] || null;
115
- }
116
-
117
- function _resolveProfile(opts) {
118
- if (opts.posture && COMPLIANCE_POSTURES[opts.posture]) {
119
- return COMPLIANCE_POSTURES[opts.posture];
120
- }
121
- var p = opts.profile || DEFAULT_PROFILE;
122
- if (!PROFILES[p]) {
123
- throw new GuardTenantIdError("tenant-id/bad-profile",
124
- "guardTenantId: unknown profile '" + p + "'");
125
- }
126
- return p;
127
- }
128
-
129
- module.exports = {
130
- validate: validate,
131
- compliancePosture: compliancePosture,
132
- PROFILES: PROFILES,
133
- COMPLIANCE_POSTURES: COMPLIANCE_POSTURES,
134
- RESERVED: RESERVED,
135
- GuardTenantIdError: GuardTenantIdError,
136
- NAME: "tenantId",
137
- KIND: "tenant-id",
138
- };
104
+ // compliancePosture is assembled by gateContract.defineParser below; its
105
+ // wiki section renders from the single-sourced @abiTemplate (defineParser)
106
+ // block in gate-contract.js, instantiated for this guard by the page
107
+ // generator.
108
+ module.exports = gateContract.defineParser({
109
+ name: "tenant-id",
110
+ entry: validate,
111
+ errorClass: GuardTenantIdError,
112
+ profiles: PROFILES,
113
+ postures: COMPLIANCE_POSTURES,
114
+ extra: {
115
+ RESERVED: RESERVED,
116
+ NAME: "tenantId",
117
+ KIND: "tenant-id",
118
+ },
119
+ });