{ "name": "thunderhub", "version": "0.18.4", "description": "Lightning Node Manager - Monitor and manage your node from any browser and any device.", "homepage": "https://thunderhub.io", "license": "MIT", "scripts": { "prebuild": "rimraf dist && rimraf src/client/dist", "build": "npm run build:nest && npm run build:client", "build:all": "sh ./scripts/buildMultiArchImage.sh", "build:all:test": "sh ./scripts/buildMultiArchImage.sh --test", "build:client": "cd src/client && npx vite build", "build:image": "docker build --pull --rm -f Dockerfile -t thunderhub:testing '.'", "build:image:base": "docker build --pull --rm -f Dockerfile --build-arg BASE_PATH=/thub -t thunderhub:testing .", "build:nest": "nest build", "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", "generate": "graphql-codegen --config codegen.yml", "lint": "eslint \"{src,apps,libs,test}/**/*.{ts,tsx}\" --fix", "lint:check": "eslint \"{src,apps,libs,test}/**/*.{ts,tsx}\"", "lint-staged": "lint-staged", "postinstall": "patch-package", "prepare": "husky", "start": "cross-env NODE_ENV=production nest start", "start:debug": "nest start --debug --watch", "start:dev": "concurrently \"nest start --watch\" \"cd src/client && npx vite\"", "start:prod": "node dist/main", "start:prod:env": "NODE_ENV=production node dist/main", "test": "jest --passWithNoTests", "test:cov": "jest --coverage", "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", "test:e2e": "jest --config ./test/jest-e2e.json", "test:watch": "jest --watch", "update": "sh ./scripts/updateToLatest.sh", "upgrade-latest": "npx npm-check -u" }, "lint-staged": { "*.+(ts|tsx)": [ "prettier --write", "jest --bail --findRelatedTests --passWithNoTests", "eslint --fix" ] }, "jest": { "collectCoverageFrom": [ "**/*.(t|j)s" ], "coverageDirectory": "../coverage", "moduleFileExtensions": [ "js", "json", "ts" ], "rootDir": "src", "testEnvironment": "node", "testRegex": ".*\\.spec\\.ts$", "transform": { "^.+\\.(t|j)s$": "ts-jest" }, "transformIgnorePatterns": [ "node_modules/(?!.*uuid/)" ] }, "dependencies": { "@apollo/client": "^3.8.8", "@apollo/server": "^5.4.0", "@as-integrations/express5": "^1.1.2", "@fontsource-variable/jetbrains-mono": "^5.2.8", "@fontsource-variable/noto-sans": "^5.2.10", "@lightningpolar/tapd-api": "^0.7.0-alpha", "@nestjs/apollo": "^13.2.4", "@nestjs/common": "^11.1.16", "@nestjs/config": "^4.0.3", "@nestjs/core": "^11.1.16", "@nestjs/graphql": "^13.2.4", "@nestjs/jwt": "^11.0.2", "@nestjs/passport": "^11.0.5", "@nestjs/platform-express": "^11.1.16", "@nestjs/schedule": "^6.1.1", "@nestjs/serve-static": "^5.0.4", "@nestjs/throttler": "^6.5.0", "@node-rs/argon2": "^2.0.2", "@radix-ui/react-dialog": "^1.1.15", "@radix-ui/react-slider": "^1.3.6", "@radix-ui/react-slot": "^1.2.4", "@tailwindcss/vite": "^4.2.1", "@tanstack/react-table": "^8.21.3", "@vulpemventures/secp256k1-zkp": "^3.2.1", "async": "^3.2.6", "bcryptjs": "^3.0.3", "bech32": "^2.0.0", "better-sqlite3": "^12.8.0", "big.js": "^7.0.1", "bip32": "^4.0.0", "bip39": "^3.1.0", "bitcoinjs-lib": "^6.1.7", "boltz-core": "^3.1.2", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "cookie": "^1.1.1", "d3-time-format": "^4.1.0", "dataloader": "^2.2.3", "date-fns": "^4.1.0", "drizzle-orm": "^0.45.2", "echarts": "^6.0.0", "echarts-for-react": "^3.0.6", "ecpair": "^3.0.1", "graphql": "^16.13.1", "helmet": "^8.1.0", "js-yaml": "^4.1.1", "jsonwebtoken": "^9.0.3", "light-bolt11-decoder": "^3.2.0", "lightning": "11.1.0", "lodash": "^4.17.23", "lucide-react": "^0.577.0", "nest-winston": "^1.10.2", "otplib": "^13.4.0", "passport": "^0.7.0", "passport-jwt": "^4.0.1", "postgres": "^3.4.8", "qrcode.react": "^4.2.0", "radix-ui": "^1.4.3", "react": "^18.2.0", "react-dom": "^18.2.0", "react-grid-layout": "^2.2.2", "react-hook-form": "^7.72.0", "react-hot-toast": "^2.6.0", "react-router-dom": "^7.13.1", "react-tooltip": "^5.30.0", "reflect-metadata": "^0.2.2", "rxjs": "^7.8.2", "secp256k1": "^5.0.1", "shadcn": "^4.0.5", "socks-proxy-agent": "^8.0.5", "tailwind-merge": "^3.5.0", "tailwindcss": "^4.2.1", "tiny-secp256k1": "^2.2.4", "tw-animate-css": "^1.4.0", "uuid": "^13.0.0", "winston": "^3.19.0" }, "devDependencies": { "@eslint/eslintrc": "^3.3.5", "@eslint/js": "^10.0.1", "@graphql-codegen/cli": "^6.1.3", "@graphql-codegen/fragment-matcher": "^6.0.0", "@graphql-codegen/introspection": "^5.0.1", "@graphql-codegen/near-operation-file-preset": "^5.0.0", "@graphql-codegen/typescript": "^5.0.9", "@graphql-codegen/typescript-operations": "^5.0.9", "@graphql-codegen/typescript-react-apollo": "^4.4.1", "@graphql-codegen/typescript-resolvers": "^5.1.7", "@nestjs/cli": "^11.0.16", "@nestjs/schematics": "^11.0.9", "@types/async": "^3.2.25", "@types/better-sqlite3": "^7.6.13", "@types/big.js": "^6.2.2", "@types/d3-time-format": "^4.0.3", "@types/jest": "^30.0.0", "@types/js-yaml": "^4.0.9", "@types/jsonwebtoken": "^9.0.10", "@types/lodash": "^4.17.24", "@types/node": "^25.4.0", "@types/react": "^19.2.14", "@types/react-dom": "^19.2.3", "@types/secp256k1": "^4.0.7", "@typescript-eslint/eslint-plugin": "^8.57.0", "@typescript-eslint/parser": "^8.57.0", "@vitejs/plugin-react": "^5.1.4", "concurrently": "^9.2.1", "cross-env": "^10.1.0", "drizzle-kit": "^0.31.10", "eslint": "^10.0.3", "eslint-config-prettier": "^10.1.8", "eslint-plugin-prettier": "^5.5.5", "globals": "^17.4.0", "husky": "^9.1.7", "jest": "^30.3.0", "lint-staged": "^16.3.3", "patch-package": "^8.0.1", "prettier": "^3.8.1", "rimraf": "^6.1.3", "ts-jest": "^29.4.6", "ts-node": "^10.9.2", "tsconfig-paths": "^4.2.0", "typescript": "^5.9.3", "vite": "^7.3.1" }, "patchedDependencies": { "@lightningpolar/tapd-api@0.7.0-alpha": "patches/@lightningpolar+tapd-api+0.7.0-alpha.patch" } }