{
    "name": "@fosrl/pangolin",
    "version": "0.0.0",
    "private": true,
    "type": "module",
    "description": "Tunneled Reverse Proxy Management Server with Identity and Access Control and Dashboard UI",
    "homepage": "https://github.com/fosrl/pangolin",
    "repository": {
        "type": "git",
        "url": "https://github.com/fosrl/pangolin"
    },
    "license": "SEE LICENSE IN LICENSE AND README.md",
    "scripts": {
        "dev": "NODE_ENV=development ENVIRONMENT=dev tsx watch server/index.ts",
        "db:pg:generate": "drizzle-kit generate --config=./drizzle.pg.config.ts",
        "db:sqlite:generate": "drizzle-kit generate --config=./drizzle.sqlite.config.ts",
        "db:pg:push": "npx tsx server/db/pg/migrate.ts",
        "db:sqlite:push": "npx tsx server/db/sqlite/migrate.ts",
        "db:sqlite:studio": "drizzle-kit studio --config=./drizzle.sqlite.config.ts",
        "db:pg:studio": "drizzle-kit studio --config=./drizzle.pg.config.ts",
        "db:clear-migrations": "rm -rf server/migrations",
        "build:sqlite": "mkdir -p dist && next build && node esbuild.mjs -e server/index.ts -o dist/server.mjs && node esbuild.mjs -e server/setup/migrationsSqlite.ts -o dist/migrations.mjs",
        "build:pg": "mkdir -p dist && next build && node esbuild.mjs -e server/index.ts -o dist/server.mjs && node esbuild.mjs -e server/setup/migrationsPg.ts -o dist/migrations.mjs",
        "start": "ENVIRONMENT=prod node dist/migrations.mjs && ENVIRONMENT=prod NODE_ENV=development node --enable-source-maps dist/server.mjs",
        "email": "email dev --dir server/emails/templates --port 3005",
        "build:cli": "node esbuild.mjs -e cli/index.ts -o dist/cli.mjs"
    },
    "dependencies": {
        "@asteasolutions/zod-to-openapi": "^7.3.4",
        "@hookform/resolvers": "4.1.3",
        "@node-rs/argon2": "^2.0.2",
        "@oslojs/crypto": "1.0.1",
        "@oslojs/encoding": "1.1.0",
        "@radix-ui/react-avatar": "1.1.10",
        "@radix-ui/react-checkbox": "1.3.3",
        "@radix-ui/react-collapsible": "1.1.12",
        "@radix-ui/react-dialog": "1.1.15",
        "@radix-ui/react-dropdown-menu": "2.1.16",
        "@radix-ui/react-icons": "1.3.2",
        "@radix-ui/react-label": "2.1.7",
        "@radix-ui/react-popover": "1.1.15",
        "@radix-ui/react-progress": "^1.1.7",
        "@radix-ui/react-radio-group": "1.3.8",
        "@radix-ui/react-scroll-area": "^1.2.10",
        "@radix-ui/react-select": "2.2.6",
        "@radix-ui/react-separator": "1.1.7",
        "@radix-ui/react-slot": "1.2.3",
        "@radix-ui/react-switch": "1.2.6",
        "@radix-ui/react-tabs": "1.1.13",
        "@radix-ui/react-toast": "1.2.15",
        "@radix-ui/react-tooltip": "^1.2.8",
        "@react-email/components": "0.5.3",
        "@react-email/render": "^1.2.0",
        "@react-email/tailwind": "1.2.2",
        "@simplewebauthn/browser": "^13.1.2",
        "@simplewebauthn/server": "^9.0.3",
        "@tailwindcss/forms": "^0.5.10",
        "@tanstack/react-table": "8.21.3",
        "arctic": "^3.7.0",
        "axios": "^1.12.2",
        "better-sqlite3": "11.7.0",
        "canvas-confetti": "1.9.3",
        "class-variance-authority": "^0.7.1",
        "clsx": "2.1.1",
        "cmdk": "1.1.1",
        "cookie": "^1.0.2",
        "cookie-parser": "1.4.7",
        "cookies": "^0.9.1",
        "cors": "2.8.5",
        "crypto-js": "^4.2.0",
        "drizzle-orm": "0.44.5",
        "eslint": "9.35.0",
        "eslint-config-next": "15.5.3",
        "express": "5.1.0",
        "express-rate-limit": "8.1.0",
        "glob": "11.0.3",
        "helmet": "8.1.0",
        "http-errors": "2.0.0",
        "i": "^0.3.7",
        "input-otp": "1.4.2",
        "jmespath": "^0.16.0",
        "js-yaml": "4.1.0",
        "jsonwebtoken": "^9.0.2",
        "lucide-react": "^0.544.0",
        "moment": "2.30.1",
        "next": "15.5.3",
        "next-intl": "^4.3.9",
        "next-themes": "0.4.6",
        "node-cache": "5.1.2",
        "node-fetch": "3.3.2",
        "nodemailer": "7.0.6",
        "npm": "^11.6.0",
        "oslo": "1.2.1",
        "pg": "^8.16.2",
        "posthog-node": "^5.8.4",
        "qrcode.react": "4.2.0",
        "react": "19.1.1",
        "react-dom": "19.1.1",
        "react-easy-sort": "^1.7.0",
        "react-hook-form": "7.62.0",
        "react-icons": "^5.5.0",
        "rebuild": "0.1.2",
        "semver": "^7.7.2",
        "swagger-ui-express": "^5.0.1",
        "tailwind-merge": "3.3.1",
        "tw-animate-css": "^1.3.8",
        "uuid": "^13.0.0",
        "vaul": "1.1.2",
        "winston": "3.17.0",
        "winston-daily-rotate-file": "5.0.0",
        "ws": "8.18.3",
        "yargs": "18.0.0",
        "zod": "3.25.76",
        "zod-validation-error": "3.5.2"
    },
    "devDependencies": {
        "@dotenvx/dotenvx": "1.49.1",
        "@esbuild-plugins/tsconfig-paths": "0.1.2",
        "@tailwindcss/postcss": "^4.1.13",
        "@types/better-sqlite3": "7.6.12",
        "@types/cookie-parser": "1.4.9",
        "@types/cors": "2.8.19",
        "@types/crypto-js": "^4.2.2",
        "@types/express": "5.0.3",
        "@types/express-session": "^1.18.2",
        "@types/jmespath": "^0.15.2",
        "@types/js-yaml": "4.0.9",
        "@types/jsonwebtoken": "^9.0.10",
        "@types/node": "24.5.2",
        "@types/nodemailer": "7.0.1",
        "@types/pg": "8.15.5",
        "@types/react": "19.1.13",
        "@types/react-dom": "19.1.9",
        "@types/semver": "^7.7.1",
        "@types/swagger-ui-express": "^4.1.8",
        "@types/ws": "8.18.1",
        "@types/yargs": "17.0.33",
        "drizzle-kit": "0.31.4",
        "esbuild": "0.25.10",
        "esbuild-node-externals": "1.18.0",
        "postcss": "^8",
        "react-email": "4.2.11",
        "tailwindcss": "^4.1.4",
        "tsc-alias": "1.8.16",
        "tsx": "4.20.5",
        "typescript": "^5",
        "typescript-eslint": "^8.44.0"
    },
    "overrides": {
        "emblor": {
            "react": "19.0.0",
            "react-dom": "19.0.0"
        }
    }
}
