@blamejs/blamejs-shop 0.4.30 → 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.
- package/CHANGELOG.md +4 -0
- package/lib/asset-manifest.json +1 -1
- package/lib/checkout.js +8 -0
- package/lib/order.js +71 -11
- package/lib/vendor/MANIFEST.json +392 -278
- 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 +26 -0
- package/lib/vendor/blamejs/MIGRATING.md +43 -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/oauth.js +53 -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 +31 -5
- 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 +206 -4
- package/lib/vendor/blamejs/lib/consent.js +82 -29
- package/lib/vendor/blamejs/lib/constants.js +27 -11
- 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 +101 -40
- 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 +35 -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 +151 -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/scripts/check-services.js +21 -0
- package/lib/vendor/blamejs/scripts/gen-migrating.js +51 -0
- package/lib/vendor/blamejs/scripts/release.js +398 -38
- package/lib/vendor/blamejs/test/00-primitives.js +117 -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 +1120 -14
- package/lib/vendor/blamejs/test/layer-0-primitives/compliance.test.js +229 -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/router-use-path-scope.test.js +255 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-url-canonicalize.test.js +309 -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/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 +1 -1
- 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
|
@@ -40,11 +40,22 @@ var { sha3Hash } = require("./crypto");
|
|
|
40
40
|
var cryptoField = require("./crypto-field");
|
|
41
41
|
var audit = require("./audit");
|
|
42
42
|
var cluster = require("./cluster");
|
|
43
|
+
var safeSql = require("./safe-sql");
|
|
44
|
+
var sql = require("./sql");
|
|
43
45
|
var lazyRequire = require("./lazy-require");
|
|
44
46
|
|
|
45
47
|
var db = lazyRequire(function () { return require("./db"); });
|
|
46
48
|
var legalHold = lazyRequire(function () { return require("./legal-hold"); });
|
|
47
49
|
|
|
50
|
+
// Local-SQLite framework tables for the Art. 18 restriction flag + the
|
|
51
|
+
// erasure marker. These run against the b.db() handle directly, so the
|
|
52
|
+
// b.sql builders carry { quoteName: true } to emit the quoted local name
|
|
53
|
+
// (no clusterStorage prefix rewrite on this path). The names are literals
|
|
54
|
+
// for the same reason db.js declares them as literals — they ARE the
|
|
55
|
+
// canonical local table identifiers.
|
|
56
|
+
var RESTRICTIONS_TABLE = "_blamejs_subject_restrictions"; // allow:hand-rolled-sql — canonical local table-name; passed to b.sql with quoteName
|
|
57
|
+
var ERASURES_TABLE = "_blamejs_subject_erasures"; // allow:hand-rolled-sql — canonical local table-name; passed to b.sql with quoteName
|
|
58
|
+
|
|
48
59
|
// Required acknowledgements before subject.erase will run. Operator must
|
|
49
60
|
// explicitly attest each one to confirm no statutory retention or active
|
|
50
61
|
// litigation hold blocks the deletion.
|
|
@@ -138,15 +149,13 @@ function exportData(subjectId, opts) {
|
|
|
138
149
|
}
|
|
139
150
|
|
|
140
151
|
function _findRowsForSubject(tableName, subjectField, subjectId) {
|
|
141
|
-
var
|
|
142
|
-
if (
|
|
143
|
-
// The schema has a derived hash for the subjectField — look up via
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
return db().from(tableName).where(pred).all();
|
|
149
|
-
}
|
|
152
|
+
var cand = db().hashCandidatesFor(tableName, subjectField, subjectId);
|
|
153
|
+
if (cand) {
|
|
154
|
+
// The schema has a derived hash for the subjectField — look up via it,
|
|
155
|
+
// dual-reading across the keyed-MAC flip (whereIn matches both the active
|
|
156
|
+
// keyed-MAC digest and the legacy salted-sha3 digest a pre-flip row
|
|
157
|
+
// carries) so the subject's pre-flip rows are not silently skipped.
|
|
158
|
+
return db().from(tableName).whereIn(cand.field, cand.values).all();
|
|
150
159
|
}
|
|
151
160
|
// No derived hash — assume subjectField is raw, do direct equality
|
|
152
161
|
var rawPred = {};
|
|
@@ -211,7 +220,7 @@ function rectify(subjectId, opts) {
|
|
|
211
220
|
rowId: opts.id,
|
|
212
221
|
requestReason: opts.reason,
|
|
213
222
|
});
|
|
214
|
-
throw new Error("subject.rectify: row not found in '" + opts.table + "'
|
|
223
|
+
throw new Error("subject.rectify: row not found in '" + opts.table + "' for _id '" + opts.id + "'");
|
|
215
224
|
}
|
|
216
225
|
|
|
217
226
|
var changedKeys = Object.keys(opts.changes);
|
|
@@ -330,19 +339,18 @@ function erase(subjectId, opts) {
|
|
|
330
339
|
|
|
331
340
|
for (var t = 0; t < tables.length; t++) {
|
|
332
341
|
var spec = tables[t];
|
|
333
|
-
var
|
|
334
|
-
var
|
|
335
|
-
if (
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
pred = {}; pred[spec.subjectField] = subjectId;
|
|
341
|
-
}
|
|
342
|
+
var cand = db().hashCandidatesFor(spec.name, spec.subjectField, subjectId);
|
|
343
|
+
var delQb = db().from(spec.name);
|
|
344
|
+
if (cand) {
|
|
345
|
+
// Dual-read across the keyed-MAC flip so erasure matches (and deletes)
|
|
346
|
+
// the subject's pre-flip rows carrying the legacy salted-sha3 digest —
|
|
347
|
+
// a GDPR erasure that skips un-migrated rows would leave PII behind.
|
|
348
|
+
delQb.whereIn(cand.field, cand.values);
|
|
342
349
|
} else {
|
|
343
|
-
|
|
350
|
+
var delPred = {}; delPred[spec.subjectField] = subjectId;
|
|
351
|
+
delQb.where(delPred);
|
|
344
352
|
}
|
|
345
|
-
var deleted =
|
|
353
|
+
var deleted = delQb.deleteMany();
|
|
346
354
|
totalDeleted += deleted;
|
|
347
355
|
perTable[spec.name] = deleted;
|
|
348
356
|
}
|
|
@@ -450,20 +458,18 @@ function eraseHard(subjectId, opts) {
|
|
|
450
458
|
db().transaction(function () {
|
|
451
459
|
for (var t = 0; t < tables.length; t++) {
|
|
452
460
|
var spec = tables[t];
|
|
453
|
-
var
|
|
454
|
-
var
|
|
455
|
-
if (
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
} else {
|
|
460
|
-
pred = {}; pred[spec.subjectField] = subjectId;
|
|
461
|
-
}
|
|
461
|
+
var cand = db().hashCandidatesFor(spec.name, spec.subjectField, subjectId);
|
|
462
|
+
var findQb = db().from(spec.name);
|
|
463
|
+
if (cand) {
|
|
464
|
+
// Dual-read across the keyed-MAC flip so per-row-key destruction +
|
|
465
|
+
// erasure covers the subject's pre-flip (legacy salted-sha3) rows too.
|
|
466
|
+
findQb.whereIn(cand.field, cand.values);
|
|
462
467
|
} else {
|
|
463
|
-
|
|
468
|
+
var rawPred = {}; rawPred[spec.subjectField] = subjectId;
|
|
469
|
+
findQb.where(rawPred);
|
|
464
470
|
}
|
|
465
471
|
// Find rows so we can destroy their per-row keys before delete.
|
|
466
|
-
var rows =
|
|
472
|
+
var rows = findQb.all();
|
|
467
473
|
if (cryptoField.hasPerRowKey(spec.name)) {
|
|
468
474
|
for (var r = 0; r < rows.length; r++) {
|
|
469
475
|
var rowId = rows[r]._id;
|
|
@@ -473,12 +479,22 @@ function eraseHard(subjectId, opts) {
|
|
|
473
479
|
}
|
|
474
480
|
}
|
|
475
481
|
}
|
|
476
|
-
var
|
|
482
|
+
var delQb2 = db().from(spec.name);
|
|
483
|
+
if (cand) {
|
|
484
|
+
delQb2.whereIn(cand.field, cand.values);
|
|
485
|
+
} else {
|
|
486
|
+
var delPred3 = {}; delPred3[spec.subjectField] = subjectId;
|
|
487
|
+
delQb2.where(delPred3);
|
|
488
|
+
}
|
|
489
|
+
var deleted = delQb2.deleteMany();
|
|
477
490
|
totalDeleted += deleted;
|
|
478
491
|
perTable[spec.name] = deleted;
|
|
479
492
|
// REINDEX the table so B-tree pages holding the deleted row's
|
|
480
493
|
// index entries are rebuilt — closes the erase-vacuum residual class.
|
|
481
|
-
|
|
494
|
+
// REINDEX is a sqlite maintenance verb with no b.sql builder; the
|
|
495
|
+
// table identifier is quoted through b.safeSql so the name is safe by
|
|
496
|
+
// construction (it comes from FRAMEWORK_SCHEMA / the subject-table set).
|
|
497
|
+
try { db().runSql("REINDEX " + safeSql.quoteIdentifier(spec.name, "sqlite", { allowReserved: true })); }
|
|
482
498
|
catch (_e) { /* cluster mode / unsupported dialect */ }
|
|
483
499
|
}
|
|
484
500
|
_markErased(subjectId);
|
|
@@ -536,20 +552,38 @@ function restrict(subjectId, opts) {
|
|
|
536
552
|
if (!opts || typeof opts.on !== "boolean") {
|
|
537
553
|
throw new Error("subject.restrict requires { on: true|false }");
|
|
538
554
|
}
|
|
539
|
-
var
|
|
540
|
-
"
|
|
541
|
-
|
|
555
|
+
var restrictSelBuilt = sql.select(RESTRICTIONS_TABLE, { dialect: "sqlite", quoteName: true })
|
|
556
|
+
.columns(["subjectIdHash"])
|
|
557
|
+
.where("subjectIdHash", _subjectHash(subjectId))
|
|
558
|
+
.toSql();
|
|
559
|
+
var restrictSelStmt = db().prepare(restrictSelBuilt.sql);
|
|
560
|
+
var existing = restrictSelStmt.get.apply(restrictSelStmt, restrictSelBuilt.params);
|
|
542
561
|
|
|
543
562
|
if (opts.on) {
|
|
544
563
|
if (!existing) {
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
564
|
+
// The restriction `reason` is a ticket reference / legal basis — PII at
|
|
565
|
+
// rest. db.js declares sealedFields:["reason"] on this table, but the raw
|
|
566
|
+
// write path bypasses the structured builder's auto-seal, so seal here
|
|
567
|
+
// explicitly (idempotent registration guard covers a reset registry).
|
|
568
|
+
if (!cryptoField.getSchema(RESTRICTIONS_TABLE)) {
|
|
569
|
+
cryptoField.registerTable(RESTRICTIONS_TABLE, { sealedFields: ["reason"] });
|
|
570
|
+
}
|
|
571
|
+
var restrictInsBuilt = sql.insert(RESTRICTIONS_TABLE, { dialect: "sqlite", quoteName: true })
|
|
572
|
+
.values(cryptoField.sealRow(RESTRICTIONS_TABLE, {
|
|
573
|
+
subjectIdHash: _subjectHash(subjectId),
|
|
574
|
+
since: Date.now(),
|
|
575
|
+
reason: opts.reason || null,
|
|
576
|
+
}))
|
|
577
|
+
.toSql();
|
|
578
|
+
var restrictInsStmt = db().prepare(restrictInsBuilt.sql);
|
|
579
|
+
restrictInsStmt.run.apply(restrictInsStmt, restrictInsBuilt.params);
|
|
548
580
|
}
|
|
549
581
|
} else if (existing) {
|
|
550
|
-
|
|
551
|
-
"
|
|
552
|
-
|
|
582
|
+
var restrictDelBuilt = sql.delete(RESTRICTIONS_TABLE, { dialect: "sqlite", quoteName: true })
|
|
583
|
+
.where("subjectIdHash", _subjectHash(subjectId))
|
|
584
|
+
.toSql();
|
|
585
|
+
var restrictDelStmt = db().prepare(restrictDelBuilt.sql);
|
|
586
|
+
restrictDelStmt.run.apply(restrictDelStmt, restrictDelBuilt.params);
|
|
553
587
|
}
|
|
554
588
|
|
|
555
589
|
_writeAudit("subject.restrict", subjectId, "success", {
|
|
@@ -581,9 +615,15 @@ function restrict(subjectId, opts) {
|
|
|
581
615
|
*/
|
|
582
616
|
function isRestricted(subjectId) {
|
|
583
617
|
if (!subjectId) return false;
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
618
|
+
// Presence check — project the PK column (b.sql columns must be real
|
|
619
|
+
// identifiers, not a `SELECT 1` literal); a matched row is truthy.
|
|
620
|
+
var built = sql.select(RESTRICTIONS_TABLE, { dialect: "sqlite", quoteName: true })
|
|
621
|
+
.columns(["subjectIdHash"])
|
|
622
|
+
.where("subjectIdHash", _subjectHash(subjectId))
|
|
623
|
+
.limit(1)
|
|
624
|
+
.toSql();
|
|
625
|
+
var stmt = db().prepare(built.sql);
|
|
626
|
+
var row = stmt.get.apply(stmt, built.params);
|
|
587
627
|
return !!row;
|
|
588
628
|
}
|
|
589
629
|
|
|
@@ -629,9 +669,16 @@ function recordObjection(subjectId, opts) {
|
|
|
629
669
|
// ---- Internal helpers ----
|
|
630
670
|
|
|
631
671
|
function _markErased(subjectId) {
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
672
|
+
// "INSERT OR REPLACE" is the sqlite upsert idiom — express it portably as
|
|
673
|
+
// INSERT … ON CONFLICT(subjectIdHash) DO UPDATE SET erasedAt = EXCLUDED.erasedAt
|
|
674
|
+
// (the row is keyed by subjectIdHash; a re-erase just refreshes the timestamp).
|
|
675
|
+
var built = sql.upsert(ERASURES_TABLE, { dialect: "sqlite", quoteName: true })
|
|
676
|
+
.values({ subjectIdHash: _subjectHash(subjectId), erasedAt: Date.now() })
|
|
677
|
+
.onConflict(["subjectIdHash"])
|
|
678
|
+
.doUpdateFromExcluded(["erasedAt"])
|
|
679
|
+
.toSql();
|
|
680
|
+
var stmt = db().prepare(built.sql);
|
|
681
|
+
stmt.run.apply(stmt, built.params);
|
|
635
682
|
}
|
|
636
683
|
|
|
637
684
|
function _subjectHash(subjectId) {
|
|
@@ -71,6 +71,7 @@ var { boot } = require("../log");
|
|
|
71
71
|
var safeBuffer = require("../safe-buffer");
|
|
72
72
|
var safeJson = require("../safe-json");
|
|
73
73
|
var observability = require("../observability");
|
|
74
|
+
var frameworkFiles = require("../framework-files");
|
|
74
75
|
var vaultPassphraseSource = require("./passphrase-source");
|
|
75
76
|
var vaultWrap = require("./wrap");
|
|
76
77
|
var { defineClass } = require("../framework-error");
|
|
@@ -99,8 +100,8 @@ var log = boot("vault");
|
|
|
99
100
|
function resolvePaths(dataDir) {
|
|
100
101
|
return {
|
|
101
102
|
dataDir: dataDir,
|
|
102
|
-
plaintext: nodePath.join(dataDir,
|
|
103
|
-
sealed: nodePath.join(dataDir, "
|
|
103
|
+
plaintext: nodePath.join(dataDir, frameworkFiles.fileName("vaultKey")),
|
|
104
|
+
sealed: nodePath.join(dataDir, frameworkFiles.fileName("vaultKey") + ".sealed"),
|
|
104
105
|
derivedHashSalt: nodePath.join(dataDir, "vault.derived-hash-salt"),
|
|
105
106
|
derivedHashMacKey: nodePath.join(dataDir, "vault.derived-hash-mac.sealed"),
|
|
106
107
|
};
|
|
@@ -38,13 +38,14 @@
|
|
|
38
38
|
var nodeFs = require("node:fs");
|
|
39
39
|
var nodePath = require("node:path");
|
|
40
40
|
var atomicFile = require("../atomic-file");
|
|
41
|
+
var frameworkFiles = require("../framework-files");
|
|
41
42
|
var vaultWrap = require("./wrap");
|
|
42
43
|
var { defineClass } = require("../framework-error");
|
|
43
44
|
|
|
44
45
|
var VaultPassphraseError = defineClass("VaultPassphraseError", { alwaysPermanent: true });
|
|
45
46
|
|
|
46
|
-
var PLAINTEXT_NAME =
|
|
47
|
-
var SEALED_NAME = "
|
|
47
|
+
var PLAINTEXT_NAME = frameworkFiles.fileName("vaultKey");
|
|
48
|
+
var SEALED_NAME = frameworkFiles.fileName("vaultKey") + ".sealed";
|
|
48
49
|
|
|
49
50
|
function _paths(dataDir) {
|
|
50
51
|
return {
|