{
  "name": "juice-shop",
  "version": "20.1.1",
  "private": true,
  "description": "Probably the most modern and sophisticated insecure web application",
  "keywords": [
    "web security",
    "web application security",
    "webappsec",
    "owasp",
    "pentest",
    "pentesting",
    "security",
    "vulnerable",
    "vulnerability",
    "broken",
    "bodgeit",
    "ctf",
    "capture the flag",
    "awareness"
  ],
  "homepage": "https://owasp-juice.shop",
  "bugs": {
    "url": "https://github.com/juice-shop/juice-shop/issues"
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/juice-shop/juice-shop.git"
  },
  "license": "MIT",
  "author": "Björn Kimminich <bjoern.kimminich@owasp.org> (https://kimminich.de)",
  "contributors": [
    "Björn Kimminich",
    "Jannik Hollenbach",
    "Aashish683",
    "greenkeeper[bot]",
    "MarcRler",
    "agrawalarpit14",
    "Scar26",
    "JuiceShopBot",
    "ShubhamPalriwala",
    "CaptainFreak",
    "Supratik Das",
    "the-pro",
    "Harsh Kumar",
    "rishabhkeshan",
    "Ziyang Li",
    "..."
  ],
  "scripts": {
    "build": "npm run build:frontend && npm run build:server",
    "build:frontend": "cd frontend && npm run build",
    "build:server": "tsc",
    "cypress:open": "cypress open",
    "cypress:run": "cypress run",
    "postinstall": "cd frontend && npm install && cd .. && npm run build:frontend && (npm run --silent build:server || cd .)",
    "lint": "eslint *.ts data lib models routes test/**/*.ts views && npm run lint:config && cd frontend && npm run lint && npm run lint:scss && cd ..",
    "lint:config": "tsx lib/scripts/lintConfig.ts",
    "lint:fix": "eslint *.ts data lib models routes test/**/*.ts views rsn --fix && cd frontend && npm run lint:fix && cd ..",
    "package": "grunt package",
    "package:ci": "npm prune --production && npm dedupe && cd frontend && npm prune --production && cd .. && npm run --silent sbom && grunt package",
    "serve": "concurrently --kill-others \"tsx app.ts\" \"cd frontend && npm run start\"",
    "serve:dev": "concurrently --kill-others \"tsx watch app.ts\" \"cd frontend && npm run start\"",
    "start": "node build/app",
    "test": "npm run test:frontend && npm run test:server && npm run test:api",
    "test:coverage": "npm run test:frontend:coverage && npm run test:server:coverage && npm run test:api:coverage",
    "test:frontend": "cd frontend && npm run test",
    "test:frontend:coverage": "cd frontend && npm run test:coverage",
    "test:server": "node --import ./test/server/helpers/test-env.mjs --import tsx --test --test-force-exit \"test/server/**/*.unit.test.ts\"",
    "test:server:coverage": "nyc --report-dir=./coverage/server-tests npm run test:server",
    "test:api": "node --import ./test/api/helpers/test-env.mjs --import tsx --test --test-force-exit \"test/api/**/*.test.ts\"",
    "test:api:coverage": "nyc --report-dir=./coverage/api-tests npm run test:api",
    "test:e2e": "npm run cypress:run",
    "rsn": "tsx rsn/rsn.ts",
    "rsn:update": "tsx rsn/rsn-update.ts",
    "vagrant": "cd vagrant && vagrant up",
    "sbom": "cyclonedx-npm --omit=dev --output-format=JSON --output-file=bom.json"
  },
  "nyc": {
    "extends": "@istanbuljs/nyc-config-typescript",
    "all": true,
    "include": [
      "lib/*.ts",
      "models/*.ts",
      "routes/*.ts",
      "server.ts"
    ],
    "reporter": [
      "lcov",
      "text-summary"
    ]
  },
  "dependencies": {
    "@ai-sdk/openai-compatible": "^2.0.35",
    "@fontsource/roboto": "^5.2.9",
    "ai": "^6.0.116",
    "beercss": "^4.0.19",
    "body-parser": "^1.20.4",
    "check-dependencies": "^2.0.0",
    "clarinet": "^0.12.6",
    "colors": "1.4.0",
    "compression": "^1.8.1",
    "config": "^3.3.12",
    "cookie-parser": "^1.4.7",
    "cookieconsent": "^3.1.1",
    "cors": "^2.8.5",
    "download": "^8.0.0",
    "errorhandler": "^1.5.1",
    "ethers": "^6.16.0",
    "express": "^4.22.1",
    "express-ipfilter": "^1.3.2",
    "express-jwt": "0.1.3",
    "express-rate-limit": "^7.5.1",
    "express-robots-txt": "^0.5.0",
    "express-security.txt": "^2.0.0",
    "feature-policy": "^0.6.0",
    "file-stream-rotator": "^1.0.0",
    "file-type": "^16.5.4",
    "finale-rest": "^1.2.2",
    "fs-extra": "^9.1.0",
    "glob": "^10.4.5",
    "graceful-fs": "^4.2.11",
    "grunt": "^1.6.1",
    "grunt-contrib-compress": "^1.6.0",
    "grunt-replace-json": "^0.1.0",
    "hashids": "^2.3.0",
    "hbs": "^4.2.0",
    "helmet": "^4.6.0",
    "html-entities": "^1.4.0",
    "i18n": "^0.11.1",
    "js-yaml": "^3.14.0",
    "jsonwebtoken": "0.4.0",
    "libxml2-wasm": "^0.7.1",
    "marsdb": "^0.6.11",
    "material-icons": "^1.13.14",
    "median": "^0.0.2",
    "morgan": "^1.10.0",
    "multer": "^1.4.5-lts.1",
    "notevil": "^1.3.3",
    "on-finished": "^2.3.0",
    "otplib": "^13.4.0",
    "pdfkit": "^0.11.0",
    "portscanner": "^2.2.0",
    "prom-client": "^15.1.3",
    "pug": "^3.0.3",
    "replace": "^1.2.2",
    "sanitize-filename": "^1.6.3",
    "sanitize-html": "1.4.2",
    "semver": "^7.6.3",
    "sequelize": "^6.37.3",
    "serve-index": "^1.9.1",
    "socket.io": "^3.1.2",
    "sqlite3": "^5.1.7",
    "svg-captcha": "^1.4.0",
    "swagger-ui-express": "^5.0.1",
    "unzipper": "^0.12.3",
    "winston": "^3.16.0",
    "z85": "^0.0.2",
    "zod": "^4.4.3"
  },
  "devDependencies": {
    "@cyclonedx/cyclonedx-npm": "^2.0.0||^3.0.0||^4.00",
    "@eslint/js": "^9.33.0",
    "@istanbuljs/nyc-config-typescript": "^1.0.2",
    "@types/clarinet": "^0.12.3",
    "@types/compression": "^1.8.1",
    "@types/config": "^3.3.5",
    "@types/cookie-parser": "^1.4.10",
    "@types/cors": "^2.8.19",
    "@types/cross-spawn": "^6.0.6",
    "@types/diff": "^7.0.1",
    "@types/download": "^8.0.5",
    "@types/errorhandler": "^1.5.3",
    "@types/exif": "^0.6.5",
    "@types/express": "^4.17.25",
    "@types/express-jwt": "^6.0.4",
    "@types/fs-extra": "^9.0.13",
    "@types/glob": "^7.2.0",
    "@types/graceful-fs": "^4.1.9",
    "@types/i18n": "^0.12.0",
    "@types/js-yaml": "^3.12.10",
    "@types/jsonwebtoken": "^8.5.9",
    "@types/jws": "^3.2.10",
    "@types/lodash": "^4.17.14",
    "@types/morgan": "^1.9.9",
    "@types/multer": "^1.4.12",
    "@types/node": "^25.9.1",
    "@types/on-finished": "^2.3.4",
    "@types/pdfkit": "^0.10.6",
    "@types/portscanner": "^2.1.4",
    "@types/pug": "^2.0.10",
    "@types/sanitize-html": "^1.27.2",
    "@types/semver": "^7.5.8",
    "@types/sequelize": "^4.28.20",
    "@types/serve-index": "^1.9.4",
    "@types/supertest": "^7.2.0",
    "@types/swagger-ui-express": "^4.1.6",
    "@types/unzipper": "^0.10.10",
    "concurrently": "^5.3.0",
    "cypress": "^15.16.0",
    "diff": "^9.0.0",
    "eslint": "^9.39.4",
    "exif": "^0.6.0",
    "globals": "^17.4.0",
    "grunt-cli": "^1.5.0",
    "neostandard": "^0.13.0",
    "nyc": "^15.1.0",
    "socket.io-client": "^3.1.3",
    "supertest": "^7.2.2",
    "tsx": "^4.21.0",
    "typescript": "^6.0.3",
    "typescript-eslint": "^8.57.1"
  },
  "engines": {
    "node": "22 - 26"
  },
  "os": [
    "win32",
    "linux",
    "darwin",
    "freebsd",
    "openbsd"
  ],
  "cpu": [
    "x64",
    "x32",
    "arm64",
    "arm"
  ],
  "heroku-run-build-script": true
}
