{
  "name": "tenant-guard",
  "version": "0.47.0",
  "description": "Guard tests that fail your CI when multi-tenant Postgres code can leak across tenants. 24 guards: static ones run zero-dependency; runtime ones PROVE isolation by running real SQL as your app role in a rolled-back transaction — reads, the full write path, views, partitions, SECURITY DEFINER RPCs, Storage, Realtime, foreign keys that let one tenant delete another's rows, the anon surface, and whether the identity your policies trust can be forged. Every guard is itself proven able to fail. GitHub Action + SARIF + JSON output.",
  "type": "module",
  "license": "MIT",
  "author": "Federico Sciuca",
  "bin": {
    "tenant-guard": "bin/tenant-guard.mjs"
  },
  "exports": {
    ".": "./src/index.mjs",
    "./guards/migration-collisions": "./src/guards/migration-collisions.mjs",
    "./guards/definer-grants": "./src/guards/definer-grants.mjs",
    "./guards/route-org-scoping": "./src/guards/route-org-scoping.mjs",
    "./guards/rls-proof": "./src/guards/rls-proof.mjs",
    "./guards/rls-drift": "./src/guards/rls-drift.mjs",
    "./guards/anon-writes": "./src/guards/anon-writes.mjs",
    "./guards/anon-reads": "./src/guards/anon-reads.mjs",
    "./guards/view-isolation": "./src/guards/view-isolation.mjs",
    "./guards/identity-trust": "./src/guards/identity-trust.mjs",
    "./guards/storage-isolation": "./src/guards/storage-isolation.mjs",
    "./guards/constraint-oracles": "./src/guards/constraint-oracles.mjs",
    "./guards/realtime-isolation": "./src/guards/realtime-isolation.mjs",
    "./guards/definer-rpc": "./src/guards/definer-rpc.mjs",
    "./guards/shadow-tables": "./src/guards/shadow-tables.mjs",
    "./guards/role-capabilities": "./src/guards/role-capabilities.mjs",
    "./guards/schema-tenancy": "./src/guards/schema-tenancy.mjs",
    "./output/json": "./src/output/json.mjs",
    "./output/sarif": "./src/output/sarif.mjs",
    "./output/markdown": "./src/output/markdown.mjs",
    "./guards/pooler-bleed": "./src/guards/pooler-bleed.mjs",
    "./guards/default-privileges": "./src/guards/default-privileges.mjs",
    "./guards/cross-tenant-fk": "./src/guards/cross-tenant-fk.mjs",
    "./guards/create-grants": "./src/guards/create-grants.mjs",
    "./guards/updatable-view-writethrough": "./src/guards/updatable-view-writethrough.mjs",
    "./guards/mfa-enforcement": "./src/guards/mfa-enforcement.mjs"
  },
  "files": [
    "bin",
    "src",
    "test",
    "examples",
    "README.md",
    "METHODOLOGY.md",
    "THREAT-MODEL.md",
    "CHANGELOG.md",
    "LICENSE",
    "action.yml",
    "docs"
  ],
  "scripts": {
    "test": "node --test",
    "selfcheck": "node bin/tenant-guard.mjs run",
    "prove": "node bin/tenant-guard.mjs prove",
    "demo:rls": "node examples/rls-proof/demo.mjs",
    "demo": "node examples/demo/demo.mjs"
  },
  "peerDependencies": {
    "pg": ">=8"
  },
  "peerDependenciesMeta": {
    "pg": {
      "optional": true
    }
  },
  "devDependencies": {
    "@electric-sql/pglite": "^0.5.5"
  },
  "keywords": [
    "multi-tenant",
    "tenant-isolation",
    "rls",
    "row-level-security",
    "idor",
    "cross-tenant",
    "security",
    "ci",
    "guard",
    "guardrails",
    "supabase",
    "postgres",
    "nextjs",
    "saas",
    "ai-generated-code",
    "vibe-coding",
    "sarif",
    "github-action",
    "code-scanning",
    "devsecops",
    "pgbouncer",
    "connection-pooling"
  ],
  "engines": {
    "node": ">=18"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/FedericoTs/tenant-guard.git"
  }
}
