@blamejs/blamejs-shop 0.4.31 → 0.4.33
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.
- package/CHANGELOG.md +4 -0
- package/README.md +1 -1
- package/lib/asset-manifest.json +1 -1
- package/lib/vendor/MANIFEST.json +400 -282
- package/lib/vendor/blamejs/.github/workflows/ci.yml +34 -3
- package/lib/vendor/blamejs/.github/workflows/npm-publish.yml +21 -4
- package/lib/vendor/blamejs/.gitignore +6 -0
- package/lib/vendor/blamejs/CHANGELOG.md +28 -0
- package/lib/vendor/blamejs/MIGRATING.md +55 -0
- package/lib/vendor/blamejs/README.md +8 -6
- package/lib/vendor/blamejs/SECURITY.md +19 -3
- package/lib/vendor/blamejs/api-snapshot.json +2190 -664
- package/lib/vendor/blamejs/docker/caddy/localstack.Caddyfile +19 -0
- package/lib/vendor/blamejs/docker/init/generate-certs.sh +1 -1
- package/lib/vendor/blamejs/docker/otel/config.yaml +42 -0
- package/lib/vendor/blamejs/docker/otel/export/.gitkeep +0 -0
- package/lib/vendor/blamejs/docker/postgres/initdb/10-replication.sh +15 -0
- package/lib/vendor/blamejs/docker/postgres/replica-entrypoint.sh +38 -0
- package/lib/vendor/blamejs/docker/toxiproxy/toxiproxy.json +14 -0
- package/lib/vendor/blamejs/docker-compose.test.yml +209 -0
- package/lib/vendor/blamejs/examples/wiki/lib/page-generator.js +132 -0
- package/lib/vendor/blamejs/examples/wiki/lib/source-comment-block-validator.js +221 -61
- package/lib/vendor/blamejs/examples/wiki/lib/source-doc-parser.js +144 -9
- package/lib/vendor/blamejs/examples/wiki/test/e2e.js +99 -0
- package/lib/vendor/blamejs/fuzz/guard-sql.fuzz.js +36 -0
- package/lib/vendor/blamejs/index.js +4 -0
- package/lib/vendor/blamejs/lib/agent-envelope-mac.js +104 -0
- package/lib/vendor/blamejs/lib/agent-event-bus.js +105 -4
- package/lib/vendor/blamejs/lib/agent-posture-chain.js +8 -42
- package/lib/vendor/blamejs/lib/ai-content-detect.js +9 -10
- package/lib/vendor/blamejs/lib/api-key.js +158 -77
- package/lib/vendor/blamejs/lib/atomic-file.js +62 -4
- package/lib/vendor/blamejs/lib/audit-chain.js +47 -11
- package/lib/vendor/blamejs/lib/audit-sign.js +77 -2
- package/lib/vendor/blamejs/lib/audit-tools.js +79 -51
- package/lib/vendor/blamejs/lib/audit.js +259 -123
- package/lib/vendor/blamejs/lib/auth/elevation-grant.js +6 -2
- package/lib/vendor/blamejs/lib/auth/oauth.js +66 -9
- package/lib/vendor/blamejs/lib/auth/openid-federation.js +108 -47
- package/lib/vendor/blamejs/lib/auth/saml.js +6 -8
- package/lib/vendor/blamejs/lib/auth/sd-jwt-vc.js +36 -7
- package/lib/vendor/blamejs/lib/backup/index.js +45 -10
- package/lib/vendor/blamejs/lib/break-glass.js +355 -147
- package/lib/vendor/blamejs/lib/cache.js +174 -105
- package/lib/vendor/blamejs/lib/chain-writer.js +38 -16
- package/lib/vendor/blamejs/lib/cli.js +19 -14
- package/lib/vendor/blamejs/lib/cluster-provider-db.js +130 -104
- package/lib/vendor/blamejs/lib/cluster-storage.js +119 -22
- package/lib/vendor/blamejs/lib/cluster.js +119 -71
- package/lib/vendor/blamejs/lib/codepoint-class.js +23 -0
- package/lib/vendor/blamejs/lib/compliance.js +210 -4
- package/lib/vendor/blamejs/lib/consent.js +82 -29
- package/lib/vendor/blamejs/lib/constants.js +27 -11
- package/lib/vendor/blamejs/lib/credential-hash.js +9 -0
- package/lib/vendor/blamejs/lib/crypto-field.js +916 -156
- package/lib/vendor/blamejs/lib/db-declare-row-policy.js +35 -22
- package/lib/vendor/blamejs/lib/db-file-lifecycle.js +3 -2
- package/lib/vendor/blamejs/lib/db-query.js +882 -260
- package/lib/vendor/blamejs/lib/db-schema.js +228 -44
- package/lib/vendor/blamejs/lib/db.js +249 -99
- package/lib/vendor/blamejs/lib/dsr.js +385 -55
- package/lib/vendor/blamejs/lib/error-page.js +14 -1
- package/lib/vendor/blamejs/lib/external-db-migrate.js +239 -137
- package/lib/vendor/blamejs/lib/external-db.js +549 -34
- package/lib/vendor/blamejs/lib/file-upload.js +52 -7
- package/lib/vendor/blamejs/lib/framework-error.js +20 -1
- package/lib/vendor/blamejs/lib/framework-files.js +73 -0
- package/lib/vendor/blamejs/lib/framework-schema.js +695 -394
- package/lib/vendor/blamejs/lib/gate-contract.js +659 -1
- package/lib/vendor/blamejs/lib/guard-agent-registry.js +26 -44
- package/lib/vendor/blamejs/lib/guard-all.js +1 -0
- package/lib/vendor/blamejs/lib/guard-auth.js +42 -112
- package/lib/vendor/blamejs/lib/guard-cidr.js +33 -154
- package/lib/vendor/blamejs/lib/guard-csv.js +46 -113
- package/lib/vendor/blamejs/lib/guard-domain.js +34 -157
- package/lib/vendor/blamejs/lib/guard-dsn.js +27 -43
- package/lib/vendor/blamejs/lib/guard-email.js +47 -69
- package/lib/vendor/blamejs/lib/guard-envelope.js +19 -32
- package/lib/vendor/blamejs/lib/guard-event-bus-payload.js +24 -42
- package/lib/vendor/blamejs/lib/guard-event-bus-topic.js +25 -43
- package/lib/vendor/blamejs/lib/guard-filename.js +42 -106
- package/lib/vendor/blamejs/lib/guard-graphql.js +42 -123
- package/lib/vendor/blamejs/lib/guard-html.js +53 -108
- package/lib/vendor/blamejs/lib/guard-idempotency-key.js +24 -42
- package/lib/vendor/blamejs/lib/guard-image.js +46 -103
- package/lib/vendor/blamejs/lib/guard-imap-command.js +18 -32
- package/lib/vendor/blamejs/lib/guard-jmap.js +16 -30
- package/lib/vendor/blamejs/lib/guard-json.js +38 -108
- package/lib/vendor/blamejs/lib/guard-jsonpath.js +38 -171
- package/lib/vendor/blamejs/lib/guard-jwt.js +49 -179
- package/lib/vendor/blamejs/lib/guard-list-id.js +25 -41
- package/lib/vendor/blamejs/lib/guard-list-unsubscribe.js +27 -43
- package/lib/vendor/blamejs/lib/guard-mail-compose.js +24 -42
- package/lib/vendor/blamejs/lib/guard-mail-move.js +26 -44
- package/lib/vendor/blamejs/lib/guard-mail-query.js +28 -46
- package/lib/vendor/blamejs/lib/guard-mail-reply.js +24 -42
- package/lib/vendor/blamejs/lib/guard-mail-sieve.js +24 -42
- package/lib/vendor/blamejs/lib/guard-managesieve-command.js +17 -31
- package/lib/vendor/blamejs/lib/guard-markdown.js +37 -104
- package/lib/vendor/blamejs/lib/guard-message-id.js +26 -45
- package/lib/vendor/blamejs/lib/guard-mime.js +39 -151
- package/lib/vendor/blamejs/lib/guard-oauth.js +54 -135
- package/lib/vendor/blamejs/lib/guard-pdf.js +45 -101
- package/lib/vendor/blamejs/lib/guard-pop3-command.js +21 -31
- package/lib/vendor/blamejs/lib/guard-posture-chain.js +24 -42
- package/lib/vendor/blamejs/lib/guard-regex.js +33 -107
- package/lib/vendor/blamejs/lib/guard-saga-config.js +24 -42
- package/lib/vendor/blamejs/lib/guard-shell.js +42 -172
- package/lib/vendor/blamejs/lib/guard-smtp-command.js +48 -54
- package/lib/vendor/blamejs/lib/guard-snapshot-envelope.js +24 -42
- package/lib/vendor/blamejs/lib/guard-sql.js +1491 -0
- package/lib/vendor/blamejs/lib/guard-stream-args.js +24 -43
- package/lib/vendor/blamejs/lib/guard-svg.js +47 -65
- package/lib/vendor/blamejs/lib/guard-template.js +35 -172
- package/lib/vendor/blamejs/lib/guard-tenant-id.js +26 -45
- package/lib/vendor/blamejs/lib/guard-time.js +32 -154
- package/lib/vendor/blamejs/lib/guard-trace-context.js +25 -44
- package/lib/vendor/blamejs/lib/guard-uuid.js +32 -153
- package/lib/vendor/blamejs/lib/guard-xml.js +38 -113
- package/lib/vendor/blamejs/lib/guard-yaml.js +51 -163
- package/lib/vendor/blamejs/lib/http-client.js +37 -9
- package/lib/vendor/blamejs/lib/inbox.js +120 -107
- package/lib/vendor/blamejs/lib/legal-hold.js +121 -50
- package/lib/vendor/blamejs/lib/log-stream-cloudwatch.js +47 -31
- package/lib/vendor/blamejs/lib/log-stream-otlp.js +32 -18
- package/lib/vendor/blamejs/lib/mail-auth.js +236 -0
- package/lib/vendor/blamejs/lib/mail-crypto-smime.js +2 -6
- package/lib/vendor/blamejs/lib/mail-dkim.js +1 -0
- package/lib/vendor/blamejs/lib/mail-greylist.js +2 -6
- package/lib/vendor/blamejs/lib/mail-helo.js +2 -6
- package/lib/vendor/blamejs/lib/mail-journal.js +85 -64
- package/lib/vendor/blamejs/lib/mail-rbl.js +2 -6
- package/lib/vendor/blamejs/lib/mail-scan.js +2 -6
- package/lib/vendor/blamejs/lib/mail-server-jmap.js +117 -12
- package/lib/vendor/blamejs/lib/mail-server-mx.js +276 -7
- package/lib/vendor/blamejs/lib/mail-spam-score.js +2 -6
- package/lib/vendor/blamejs/lib/mail-store.js +293 -154
- package/lib/vendor/blamejs/lib/mail.js +8 -4
- package/lib/vendor/blamejs/lib/middleware/body-parser.js +71 -25
- package/lib/vendor/blamejs/lib/middleware/csrf-protect.js +19 -8
- package/lib/vendor/blamejs/lib/middleware/dpop.js +10 -1
- package/lib/vendor/blamejs/lib/middleware/fetch-metadata.js +17 -7
- package/lib/vendor/blamejs/lib/middleware/idempotency-key.js +75 -51
- package/lib/vendor/blamejs/lib/middleware/rate-limit.js +102 -32
- package/lib/vendor/blamejs/lib/middleware/security-headers.js +21 -5
- package/lib/vendor/blamejs/lib/migrations.js +108 -66
- package/lib/vendor/blamejs/lib/network-heartbeat.js +7 -0
- package/lib/vendor/blamejs/lib/network-proxy.js +24 -1
- package/lib/vendor/blamejs/lib/nonce-store.js +31 -9
- package/lib/vendor/blamejs/lib/object-store/azure-blob-bucket-ops.js +9 -4
- package/lib/vendor/blamejs/lib/object-store/azure-blob.js +57 -3
- package/lib/vendor/blamejs/lib/object-store/gcs.js +4 -1
- package/lib/vendor/blamejs/lib/object-store/sigv4-bucket-ops.js +5 -2
- package/lib/vendor/blamejs/lib/object-store/sigv4.js +38 -6
- package/lib/vendor/blamejs/lib/observability-otlp-exporter.js +9 -1
- package/lib/vendor/blamejs/lib/observability.js +124 -0
- package/lib/vendor/blamejs/lib/otel-export.js +12 -3
- package/lib/vendor/blamejs/lib/outbox.js +184 -83
- package/lib/vendor/blamejs/lib/parsers/safe-xml.js +47 -7
- package/lib/vendor/blamejs/lib/pqc-agent.js +44 -0
- package/lib/vendor/blamejs/lib/pubsub-cluster.js +42 -20
- package/lib/vendor/blamejs/lib/queue-local.js +225 -140
- package/lib/vendor/blamejs/lib/queue-redis.js +9 -1
- package/lib/vendor/blamejs/lib/queue-sqs.js +6 -0
- package/lib/vendor/blamejs/lib/queue.js +7 -0
- package/lib/vendor/blamejs/lib/redact.js +68 -11
- package/lib/vendor/blamejs/lib/redis-client.js +160 -31
- package/lib/vendor/blamejs/lib/request-helpers.js +7 -0
- package/lib/vendor/blamejs/lib/retention.js +117 -42
- package/lib/vendor/blamejs/lib/router.js +212 -5
- package/lib/vendor/blamejs/lib/safe-dns.js +29 -45
- package/lib/vendor/blamejs/lib/safe-ical.js +18 -33
- package/lib/vendor/blamejs/lib/safe-icap.js +27 -43
- package/lib/vendor/blamejs/lib/safe-sieve.js +21 -40
- package/lib/vendor/blamejs/lib/safe-sql.js +212 -3
- package/lib/vendor/blamejs/lib/safe-url.js +170 -3
- package/lib/vendor/blamejs/lib/safe-vcard.js +18 -33
- package/lib/vendor/blamejs/lib/scheduler.js +47 -12
- package/lib/vendor/blamejs/lib/seeders.js +122 -74
- package/lib/vendor/blamejs/lib/session-stores.js +42 -14
- package/lib/vendor/blamejs/lib/session.js +175 -77
- package/lib/vendor/blamejs/lib/sql.js +3842 -0
- package/lib/vendor/blamejs/lib/sse.js +26 -0
- package/lib/vendor/blamejs/lib/ssrf-guard.js +169 -4
- package/lib/vendor/blamejs/lib/static.js +177 -34
- package/lib/vendor/blamejs/lib/subject.js +96 -49
- package/lib/vendor/blamejs/lib/vault/index.js +3 -2
- package/lib/vendor/blamejs/lib/vault/passphrase-ops.js +3 -2
- package/lib/vendor/blamejs/lib/vault/rotate.js +168 -108
- package/lib/vendor/blamejs/lib/vault-aad.js +6 -0
- package/lib/vendor/blamejs/lib/vendor-data.js +2 -0
- package/lib/vendor/blamejs/lib/websocket.js +35 -5
- package/lib/vendor/blamejs/lib/worker-pool.js +11 -0
- package/lib/vendor/blamejs/package.json +2 -2
- package/lib/vendor/blamejs/release-notes/v0.14.x.json +1503 -0
- package/lib/vendor/blamejs/release-notes/v0.15.0.json +77 -0
- package/lib/vendor/blamejs/release-notes/v0.15.1.json +22 -0
- package/lib/vendor/blamejs/release-notes/v0.15.2.json +22 -0
- package/lib/vendor/blamejs/release-notes/v0.15.3.json +39 -0
- package/lib/vendor/blamejs/release-notes/v0.15.4.json +39 -0
- package/lib/vendor/blamejs/release-notes/v0.15.5.json +22 -0
- package/lib/vendor/blamejs/release-notes/v0.15.6.json +59 -0
- package/lib/vendor/blamejs/release-notes/v0.15.7.json +43 -0
- package/lib/vendor/blamejs/scripts/check-services.js +21 -0
- package/lib/vendor/blamejs/scripts/gen-migrating.js +67 -0
- package/lib/vendor/blamejs/scripts/release.js +398 -38
- package/lib/vendor/blamejs/test/00-primitives.js +168 -0
- package/lib/vendor/blamejs/test/10-state.js +140 -14
- package/lib/vendor/blamejs/test/20-db.js +65 -2
- package/lib/vendor/blamejs/test/helpers/db.js +9 -0
- package/lib/vendor/blamejs/test/helpers/drivers.js +27 -15
- package/lib/vendor/blamejs/test/helpers/services.js +21 -0
- package/lib/vendor/blamejs/test/integration/audit-actor-binding-pg.test.js +246 -0
- package/lib/vendor/blamejs/test/integration/audit-chain-external-db.test.js +517 -0
- package/lib/vendor/blamejs/test/integration/audit-stack-mysql.test.js +639 -0
- package/lib/vendor/blamejs/test/integration/audit-stack-postgres.test.js +832 -0
- package/lib/vendor/blamejs/test/integration/backup-restore-objectstore.test.js +453 -0
- package/lib/vendor/blamejs/test/integration/data-layer-cluster-mysql.test.js +649 -0
- package/lib/vendor/blamejs/test/integration/data-layer-cluster-pg.test.js +770 -0
- package/lib/vendor/blamejs/test/integration/data-layer-mysql-privacy.test.js +630 -0
- package/lib/vendor/blamejs/test/integration/data-layer-mysql.test.js +610 -0
- package/lib/vendor/blamejs/test/integration/data-layer-pg.test.js +577 -0
- package/lib/vendor/blamejs/test/integration/data-layer-postgres.test.js +771 -0
- package/lib/vendor/blamejs/test/integration/db-layer-mysql.test.js +549 -0
- package/lib/vendor/blamejs/test/integration/db-layer-postgres.test.js +598 -0
- package/lib/vendor/blamejs/test/integration/distributed-scheduler-fencing-pg.test.js +602 -0
- package/lib/vendor/blamejs/test/integration/external-db-postgres.test.js +576 -0
- package/lib/vendor/blamejs/test/integration/framework-schema-mysql.test.js +353 -0
- package/lib/vendor/blamejs/test/integration/log-stream-cloudwatch.test.js +224 -0
- package/lib/vendor/blamejs/test/integration/mail-crypto-smime.test.js +142 -17
- package/lib/vendor/blamejs/test/integration/network-heartbeat.test.js +25 -10
- package/lib/vendor/blamejs/test/integration/object-store-azure.test.js +101 -0
- package/lib/vendor/blamejs/test/integration/object-store-gcs.test.js +239 -0
- package/lib/vendor/blamejs/test/integration/object-store-sigv4.test.js +35 -16
- package/lib/vendor/blamejs/test/integration/object-store-worm-lock.test.js +291 -0
- package/lib/vendor/blamejs/test/integration/pubsub.test.js +14 -0
- package/lib/vendor/blamejs/test/integration/queue-sqs.test.js +322 -0
- package/lib/vendor/blamejs/test/integration/redis-reconnect-toxiproxy.test.js +300 -0
- package/lib/vendor/blamejs/test/integration/sql-fts5-catalog-sqlite.test.js +154 -0
- package/lib/vendor/blamejs/test/integration/tls-classical-downgrade-audit.test.js +71 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/agent-event-bus.test.js +175 -12
- package/lib/vendor/blamejs/test/layer-0-primitives/atomic-file-exclusive-temp.test.js +216 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/audit-checkpoint-false-rollback.test.js +203 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/audit-query-self-log.test.js +126 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/audit-safeemit-redacts-secrets.test.js +196 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/audit-signing-key-rotation.test.js +197 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/audit-verifybundle-tamper.test.js +209 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/azure-blob-key-encoding.test.js +121 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/backup-residency-posture.test.js +168 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/backup-scheduletest-drill.test.js +318 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/break-glass.test.js +233 -7
- package/lib/vendor/blamejs/test/layer-0-primitives/codebase-patterns.test.js +1196 -14
- package/lib/vendor/blamejs/test/layer-0-primitives/compliance.test.js +229 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/credential-hash.test.js +18 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/crypto-field-derived-hash.test.js +24 -7
- package/lib/vendor/blamejs/test/layer-0-primitives/crypto-field-dual-read-migrate.test.js +165 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/crypto-field-per-row-key.test.js +350 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/crypto-field-unseal-rate-cap.test.js +27 -9
- package/lib/vendor/blamejs/test/layer-0-primitives/crypto-field-upgrade-dialect.test.js +76 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/crypto-interop-oracles.test.js +392 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/csrf-protect.test.js +159 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/db-column-gate.test.js +180 -1
- package/lib/vendor/blamejs/test/layer-0-primitives/db-query-cross-schema.test.js +5 -2
- package/lib/vendor/blamejs/test/layer-0-primitives/db-query-sealed-field-in.test.js +101 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/db-raw-residency-gate.test.js +128 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/db-schema-drift.test.js +38 -5
- package/lib/vendor/blamejs/test/layer-0-primitives/db-schema-reconcile-emittable.test.js +127 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/db-stream-and-payload-shape.test.js +267 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/db-worm.test.js +150 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/defineguard-default-gate-posture-caps.test.js +30 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/dpop-middleware-replaystore-required.test.js +46 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/dsr.test.js +218 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/erase-posture-vacuum.test.js +210 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/external-db-hardening.test.js +4 -1
- package/lib/vendor/blamejs/test/layer-0-primitives/external-db-migrate.test.js +48 -2
- package/lib/vendor/blamejs/test/layer-0-primitives/federation-vc-suite.test.js +237 -5
- package/lib/vendor/blamejs/test/layer-0-primitives/fetch-metadata.test.js +20 -9
- package/lib/vendor/blamejs/test/layer-0-primitives/file-upload-content-safety-skip-audit.test.js +193 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-csv.test.js +90 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/http-client-stream.test.js +85 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/idempotency-key.test.js +10 -6
- package/lib/vendor/blamejs/test/layer-0-primitives/inbox.test.js +15 -4
- package/lib/vendor/blamejs/test/layer-0-primitives/legal-hold.test.js +146 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-auth.test.js +189 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-journal.test.js +3 -1
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-jmap.test.js +123 -4
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-mx.test.js +207 -2
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-store.test.js +74 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/oauth-callback.test.js +43 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/otel-export.test.js +133 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/otlp-attr-redaction.test.js +101 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/outbox-inflight-reaper.test.js +136 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/parsers-standalone.test.js +83 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/passkey-real-vectors.test.js +429 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/pqc-agent-curve.test.js +21 -11
- package/lib/vendor/blamejs/test/layer-0-primitives/queue-byo-db.test.js +40 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/redact-dlp.test.js +83 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/redis-client.test.js +113 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/retention-dryrun-no-vacuum.test.js +99 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/retention-floor.test.js +59 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/router-use-path-scope.test.js +255 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-url-canonicalize.test.js +362 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-xml.test.js +143 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/saml-subjectconfirmation-notonorafter.test.js +287 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/scheduler-watchdog-stale-settle.test.js +71 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/sd-jwt-vc-ecdsa-p1363.test.js +79 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/sd-jwt-vc.test.js +50 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/security-headers.test.js +31 -4
- package/lib/vendor/blamejs/test/layer-0-primitives/session-extensions.test.js +45 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/sigv4-bucket-ops.test.js +49 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/sql.test.js +595 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/sse-backpressure.test.js +91 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/ssrf-guard.test.js +69 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/static.test.js +194 -2
- package/lib/vendor/blamejs/test/layer-0-primitives/websocket-extension-header.test.js +88 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/worker-pool-recycle-race.test.js +66 -0
- package/lib/vendor/blamejs/test/layer-1-state/api-key.test.js +84 -0
- package/lib/vendor/blamejs/test/layer-5-integration/external-db-residency.test.js +638 -0
- package/lib/vendor/blamejs/test/layer-5-integration/guard-host-integration.test.js +21 -0
- package/lib/vendor/blamejs/test/smoke.js +79 -21
- package/package.json +2 -2
- package/lib/vendor/blamejs/release-notes/v0.14.0.json +0 -43
- package/lib/vendor/blamejs/release-notes/v0.14.1.json +0 -60
- package/lib/vendor/blamejs/release-notes/v0.14.10.json +0 -54
- package/lib/vendor/blamejs/release-notes/v0.14.11.json +0 -72
- package/lib/vendor/blamejs/release-notes/v0.14.12.json +0 -95
- package/lib/vendor/blamejs/release-notes/v0.14.13.json +0 -52
- package/lib/vendor/blamejs/release-notes/v0.14.14.json +0 -31
- package/lib/vendor/blamejs/release-notes/v0.14.16.json +0 -45
- package/lib/vendor/blamejs/release-notes/v0.14.17.json +0 -57
- package/lib/vendor/blamejs/release-notes/v0.14.18.json +0 -127
- package/lib/vendor/blamejs/release-notes/v0.14.19.json +0 -61
- package/lib/vendor/blamejs/release-notes/v0.14.2.json +0 -18
- package/lib/vendor/blamejs/release-notes/v0.14.20.json +0 -73
- package/lib/vendor/blamejs/release-notes/v0.14.21.json +0 -98
- package/lib/vendor/blamejs/release-notes/v0.14.22.json +0 -91
- package/lib/vendor/blamejs/release-notes/v0.14.3.json +0 -18
- package/lib/vendor/blamejs/release-notes/v0.14.4.json +0 -18
- package/lib/vendor/blamejs/release-notes/v0.14.5.json +0 -18
- package/lib/vendor/blamejs/release-notes/v0.14.6.json +0 -60
- package/lib/vendor/blamejs/release-notes/v0.14.7.json +0 -77
- package/lib/vendor/blamejs/release-notes/v0.14.8.json +0 -27
- package/lib/vendor/blamejs/release-notes/v0.14.9.json +0 -40
|
@@ -46,6 +46,8 @@ var cluster = require("./cluster");
|
|
|
46
46
|
var clusterStorage = require("./cluster-storage");
|
|
47
47
|
var chainWriter = require("./chain-writer");
|
|
48
48
|
var safeAsync = require("./safe-async");
|
|
49
|
+
var safeSql = require("./safe-sql");
|
|
50
|
+
var sql = require("./sql");
|
|
49
51
|
var lazyRequire = require("./lazy-require");
|
|
50
52
|
var C = require("./constants");
|
|
51
53
|
var { ClusterError } = require("./framework-error");
|
|
@@ -300,14 +302,24 @@ function isGranted(opts) {
|
|
|
300
302
|
}
|
|
301
303
|
// Find the most recent consent row for this (subjectId, purpose).
|
|
302
304
|
// subjectId is sealed → look up via subjectIdHash (derived).
|
|
303
|
-
var
|
|
304
|
-
if (!
|
|
305
|
+
var subjectCand = db().hashCandidatesFor("consent_log", "subjectId", opts.subjectId);
|
|
306
|
+
if (!subjectCand) {
|
|
305
307
|
throw new Error("consent_log subjectId is missing a derived hash — schema misconfigured");
|
|
306
308
|
}
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
309
|
+
// Local db() handle: emit the LOCAL table name (consent_log) quoted so
|
|
310
|
+
// the camelCase subjectIdHash / monotonicCounter columns resolve, and
|
|
311
|
+
// run the built { sql, params } against the prepared statement. whereIn
|
|
312
|
+
// dual-reads across the keyed-MAC flip so a row written under the legacy
|
|
313
|
+
// salted-sha3 subjectIdHash is still matched.
|
|
314
|
+
var isGrantedBuilt = sql.select("consent_log", { dialect: "sqlite", quoteName: true })
|
|
315
|
+
.columns(["action"])
|
|
316
|
+
.whereIn("subjectIdHash", subjectCand.values)
|
|
317
|
+
.where("purpose", opts.purpose)
|
|
318
|
+
.orderBy("monotonicCounter", "desc")
|
|
319
|
+
.limit(1)
|
|
320
|
+
.toSql();
|
|
321
|
+
var isGrantedStmt = db().prepare(isGrantedBuilt.sql);
|
|
322
|
+
var row = isGrantedStmt.get.apply(isGrantedStmt, isGrantedBuilt.params);
|
|
311
323
|
if (!row) return false;
|
|
312
324
|
return row.action === "granted";
|
|
313
325
|
}
|
|
@@ -334,12 +346,14 @@ function isGranted(opts) {
|
|
|
334
346
|
*/
|
|
335
347
|
function history(subjectId) {
|
|
336
348
|
if (!subjectId) throw new Error("consent.history requires a subjectId");
|
|
337
|
-
var
|
|
338
|
-
if (!
|
|
349
|
+
var subjectCand = db().hashCandidatesFor("consent_log", "subjectId", subjectId);
|
|
350
|
+
if (!subjectCand) {
|
|
339
351
|
throw new Error("consent_log subjectId is missing a derived hash — schema misconfigured");
|
|
340
352
|
}
|
|
353
|
+
// whereIn dual-reads across the keyed-MAC flip so the subject's pre-flip
|
|
354
|
+
// (legacy salted-sha3) consent rows still appear in the access response.
|
|
341
355
|
var rows = db().from("consent_log")
|
|
342
|
-
.
|
|
356
|
+
.whereIn(subjectCand.field, subjectCand.values)
|
|
343
357
|
.orderBy("monotonicCounter", "asc")
|
|
344
358
|
.all();
|
|
345
359
|
return rows;
|
|
@@ -409,30 +423,69 @@ async function _appendConsentRow(fields) {
|
|
|
409
423
|
}
|
|
410
424
|
|
|
411
425
|
async function _upsertConsentTip(counter, rowHash, signedAt, fencingToken) {
|
|
412
|
-
// Single atomic INSERT … ON CONFLICT DO UPDATE … WHERE … RETURNING
|
|
413
|
-
// Same canonical fencing-token guard as _blamejs_audit_tip: the
|
|
414
|
-
// WHERE
|
|
415
|
-
//
|
|
416
|
-
//
|
|
417
|
-
//
|
|
426
|
+
// Single atomic INSERT … ON CONFLICT(scope) DO UPDATE … WHERE … RETURNING
|
|
427
|
+
// via b.sql. Same canonical fencing-token guard as _blamejs_audit_tip: the
|
|
428
|
+
// fenced WHERE enforces monotonic-non-decreasing fencingToken at the DB
|
|
429
|
+
// level so a partitioned old leader can't overwrite the tip even if its
|
|
430
|
+
// application-layer cluster.requireLeader() gate let the call through. On
|
|
431
|
+
// rejection RETURNING produces 0 rows.
|
|
432
|
+
//
|
|
433
|
+
// The consent-tip is external-only; its LOGICAL name IS the
|
|
434
|
+
// `_blamejs_`-prefixed name (self-mapped in LOCAL_TO_EXTERNAL), passed
|
|
435
|
+
// bare to b.sql so clusterStorage rewrites it (and the same bare name
|
|
436
|
+
// inside the guarded fence) to the configured prefix and placeholderizes.
|
|
437
|
+
//
|
|
438
|
+
// Dialect is the ACTIVE backend (clusterStorage.dialect()) so the fence's
|
|
439
|
+
// identifier quoting + conflict-expression idiom match the server the SQL
|
|
440
|
+
// dispatches to. The fence text itself is dialect-specific because the
|
|
441
|
+
// builder folds it verbatim: on Postgres / SQLite the upsert keeps a
|
|
442
|
+
// `WHERE "<table>"."fencingToken" <= EXCLUDED."fencingToken"` guard (and a
|
|
443
|
+
// RETURNING row that signals fenced-out via 0 rows); on MySQL there is no
|
|
444
|
+
// WHERE and no EXCLUDED, so the builder folds the same guard into per-column
|
|
445
|
+
// `IF(<table>.`fencingToken` <= VALUES(`fencingToken`), VALUES(col), col)`
|
|
446
|
+
// — the fence must therefore reference `VALUES(...)` with backticks. The
|
|
447
|
+
// bare table qualifier (no quoteName) lets clusterStorage rewrite the
|
|
448
|
+
// logical `_blamejs_consent_tip` to the configured prefix inside the fence
|
|
449
|
+
// exactly as it does for the table name.
|
|
450
|
+
var d = clusterStorage.dialect();
|
|
451
|
+
var qFence = safeSql.quoteIdentifier("fencingToken", d);
|
|
452
|
+
var tipFence = d === "mysql"
|
|
453
|
+
? "_blamejs_consent_tip." + qFence + " <= VALUES(" + qFence + ")" // allow:hand-rolled-sql — bare logical name for clusterStorage rewrite
|
|
454
|
+
: "_blamejs_consent_tip." + qFence + " <= EXCLUDED." + qFence; // allow:hand-rolled-sql — bare logical name for clusterStorage rewrite
|
|
455
|
+
var tipBuilt = sql.upsert("_blamejs_consent_tip", { dialect: d }) // allow:hand-rolled-sql — bare logical name for clusterStorage rewrite
|
|
456
|
+
.columns(["scope", "atMonotonicCounter", "rowHash", "signedAt", "fencingToken"])
|
|
457
|
+
.values({
|
|
458
|
+
scope: "consent",
|
|
459
|
+
atMonotonicCounter: counter,
|
|
460
|
+
rowHash: rowHash,
|
|
461
|
+
signedAt: signedAt,
|
|
462
|
+
fencingToken: fencingToken,
|
|
463
|
+
})
|
|
464
|
+
.onConflict(["scope"])
|
|
465
|
+
.doUpdateFromExcluded(["atMonotonicCounter", "rowHash", "signedAt", "fencingToken"])
|
|
466
|
+
// guardColumn pins fencingToken LAST in the MySQL SET list so every
|
|
467
|
+
// other column's IF() evaluates the guard against the PRE-UPDATE token
|
|
468
|
+
// (MySQL evaluates SET left-to-right; a later assignment would otherwise
|
|
469
|
+
// see fencingToken already overwritten). Ignored on Postgres / SQLite,
|
|
470
|
+
// which apply the WHERE atomically.
|
|
471
|
+
.conflictWhere(tipFence, [], { guardColumn: "fencingToken" })
|
|
472
|
+
.returning(["fencingToken"])
|
|
473
|
+
.toSql();
|
|
418
474
|
var result = await safeAsync.withTimeout(
|
|
419
|
-
clusterStorage.execute(
|
|
420
|
-
"INSERT INTO _blamejs_consent_tip " +
|
|
421
|
-
" (scope, atMonotonicCounter, rowHash, signedAt, fencingToken) " +
|
|
422
|
-
"VALUES ('consent', ?, ?, ?, ?) " +
|
|
423
|
-
"ON CONFLICT (scope) DO UPDATE SET " +
|
|
424
|
-
" atMonotonicCounter = EXCLUDED.atMonotonicCounter, " +
|
|
425
|
-
" rowHash = EXCLUDED.rowHash, " +
|
|
426
|
-
" signedAt = EXCLUDED.signedAt, " +
|
|
427
|
-
" fencingToken = EXCLUDED.fencingToken " +
|
|
428
|
-
"WHERE _blamejs_consent_tip.fencingToken <= EXCLUDED.fencingToken " +
|
|
429
|
-
"RETURNING fencingToken",
|
|
430
|
-
[counter, rowHash, signedAt, fencingToken]
|
|
431
|
-
),
|
|
475
|
+
clusterStorage.execute(tipBuilt.sql, tipBuilt.params),
|
|
432
476
|
FRAMEWORK_SQL_TIMEOUT_MS,
|
|
433
477
|
{ name: "consent.upsertConsentTip" }
|
|
434
478
|
);
|
|
435
|
-
|
|
479
|
+
// MySQL upsert has no RETURNING — the builder emits a readback SELECT
|
|
480
|
+
// alongside, but a fenced-out lower-token write still SUCCEEDS as a no-op
|
|
481
|
+
// INSERT…ON DUPLICATE KEY UPDATE (the IF() keeps the stored values), so
|
|
482
|
+
// there is no 0-rows signal to detect. The DB-level fence still PRESERVES
|
|
483
|
+
// the tip (the security property); the FENCED_OUT throw is the
|
|
484
|
+
// Postgres/SQLite RETURNING-0-rows path only. On MySQL clusterStorage is
|
|
485
|
+
// not a supported framework backend, so the consent-tip never dispatches
|
|
486
|
+
// there in production — the threaded dialect makes the SAME builders emit
|
|
487
|
+
// valid MySQL for operators driving these shapes against MySQL directly.
|
|
488
|
+
if (d !== "mysql" && (!result.rows || result.rows.length === 0)) {
|
|
436
489
|
throw new ClusterError(
|
|
437
490
|
"FENCED_OUT",
|
|
438
491
|
"consent-tip update rejected: incoming fencingToken=" + fencingToken +
|
|
@@ -156,22 +156,27 @@ var PQC_GROUPS = Object.freeze({
|
|
|
156
156
|
SecP384r1MLKEM1024: 0x11ED,
|
|
157
157
|
});
|
|
158
158
|
|
|
159
|
-
// Highest-first preference list
|
|
160
|
-
//
|
|
161
|
-
//
|
|
162
|
-
// advertises
|
|
163
|
-
//
|
|
159
|
+
// Highest-first preference list for OUTBOUND TLS (clients only — the
|
|
160
|
+
// server's accept-groups are configured separately). Node TLS picks the
|
|
161
|
+
// first mutually-supported group during the handshake, so a peer that
|
|
162
|
+
// advertises SecP384r1MLKEM1024 (P-384 + ML-KEM-1024) gets it, then the
|
|
163
|
+
// X25519 / SecP256r1 ML-KEM hybrids. X25519 (classical) is the LAST-RESORT
|
|
164
|
+
// fallback for peers that support no ML-KEM hybrid yet — still most of the
|
|
165
|
+
// public TLS surface in 2026 (webhooks, OAuth/OIDC, ACME, third-party APIs).
|
|
164
166
|
//
|
|
165
|
-
//
|
|
166
|
-
//
|
|
167
|
-
//
|
|
168
|
-
//
|
|
169
|
-
//
|
|
170
|
-
//
|
|
167
|
+
// The framework always PREFERS a hybrid on every handshake; classical
|
|
168
|
+
// X25519 is only negotiated when the peer offers none of the hybrids. When
|
|
169
|
+
// a connection lands on classical instead, the outbound path emits a
|
|
170
|
+
// `tls.classical_downgrade` audit event (lib/pqc-agent.js) so operators can
|
|
171
|
+
// see which peers forced a non-PQC negotiation and track their
|
|
172
|
+
// dependencies' PQC readiness. Weaker non-hybrid classical groups
|
|
173
|
+
// (P-256 / P-384) are deliberately NOT offered — the fallback floor is the
|
|
174
|
+
// X25519 group.
|
|
171
175
|
var TLS_GROUP_PREFERENCE = Object.freeze([
|
|
172
176
|
"SecP384r1MLKEM1024",
|
|
173
177
|
"X25519MLKEM768",
|
|
174
178
|
"SecP256r1MLKEM768",
|
|
179
|
+
"X25519",
|
|
175
180
|
]);
|
|
176
181
|
|
|
177
182
|
var TLS_GROUP_CURVE_STR = TLS_GROUP_PREFERENCE.join(":");
|
|
@@ -179,6 +184,16 @@ var TLS_GROUP_CURVE_STR = TLS_GROUP_PREFERENCE.join(":");
|
|
|
179
184
|
// ---- Vault sealed-value prefix ----
|
|
180
185
|
var VAULT_PREFIX = "vault:";
|
|
181
186
|
|
|
187
|
+
// ---- Per-row-key sealed-column prefix ----
|
|
188
|
+
// Columns encrypted under a row-scoped key (K_row) — distinct from the
|
|
189
|
+
// vault-root `vault:` / AAD-bound `vault.aad:` prefixes so the read path
|
|
190
|
+
// can route a cell to its decrypt: K_row-sealed cells unwrap the row's
|
|
191
|
+
// secret from `_blamejs_per_row_keys`, derive K_row, then decrypt under
|
|
192
|
+
// it (XChaCha20-Poly1305, AEAD-bound to (table, rowId, column,
|
|
193
|
+
// schemaVersion)). Destroying the row's wrapped secret leaves these
|
|
194
|
+
// cells mathematically undecryptable — the crypto-shred substrate.
|
|
195
|
+
var ROW_PREFIX = "vault.row:";
|
|
196
|
+
|
|
182
197
|
// ---- Default hash namespaces for derived-hash indexed lookups ----
|
|
183
198
|
// Apps add their own via app-config registries. The 'bj-' namespace
|
|
184
199
|
// prevents collision between framework-derived and app-derived hashes.
|
|
@@ -205,5 +220,6 @@ module.exports = {
|
|
|
205
220
|
TLS_GROUP_PREFERENCE: TLS_GROUP_PREFERENCE,
|
|
206
221
|
TLS_GROUP_CURVE_STR: TLS_GROUP_CURVE_STR,
|
|
207
222
|
VAULT_PREFIX: VAULT_PREFIX,
|
|
223
|
+
ROW_PREFIX: ROW_PREFIX,
|
|
208
224
|
HASH_PREFIX: HASH_PREFIX,
|
|
209
225
|
};
|
|
@@ -380,6 +380,15 @@ function needsRehash(envelope, opts) {
|
|
|
380
380
|
try { return passwordModule().needsRehash(phc, opts && opts.params); }
|
|
381
381
|
catch (_e) { return true; }
|
|
382
382
|
}
|
|
383
|
+
if (decoded.algoId === C.CRED_HASH_IDS.SHAKE256) {
|
|
384
|
+
// Length-rotation: rehash when the stored digest is SHORTER than the
|
|
385
|
+
// configured/default output length. Upgrade-only (`<`, matching the Argon2
|
|
386
|
+
// needsRehash convention) — a longer-than-target digest is not actively
|
|
387
|
+
// shortened. Without this compare, raising the SHAKE256 length never
|
|
388
|
+
// triggered a rehash and the advertised rotation was a silent no-op.
|
|
389
|
+
var targetLength = (opts && opts.params && opts.params.length) || SHAKE256_DEFAULT_LENGTH;
|
|
390
|
+
if (decoded.payload.length < targetLength) return true;
|
|
391
|
+
}
|
|
383
392
|
return false;
|
|
384
393
|
}
|
|
385
394
|
|