{ "name": "blockscout-frontend", "version": "1.0.0", "private": false, "homepage": "https://github.com/blockscout/frontend#readme", "engines": { "node": ">=22.14.0", "npm": ">=10.9.0" }, "scripts": { "dev": "./tools/scripts/dev.sh", "dev:preset": "./tools/scripts/dev.preset.sh", "dev:preset:sync": "tsc -p ./tools/preset-sync/tsconfig.json && node ./tools/preset-sync/index.js", "build": "next build", "build:next": "./deploy/scripts/download_assets.sh ./public/assets/configs && yarn svg:build-sprite && ./deploy/scripts/make_envs_script.sh && next build", "build:docker": "./tools/scripts/build.docker.sh", "start": "next start", "start:docker:local": "docker run -p 3000:3000 --env-file .env.local blockscout-frontend:local", "start:docker:preset": "./tools/scripts/docker.preset.sh", "chakra:snippets:add": "chakra snippet add --outdir ./toolkit/chakra", "chakra:typegen": "chakra typegen ./toolkit/theme/theme.ts", "lint:eslint": "eslint .", "lint:eslint:fix": "eslint . --fix", "lint:tsc": "tsc -p ./tsconfig.json", "lint:license:check": "license-report > ./license.json && license-report-check --source=./license.json --output=table --forbidden=n/a", "lint:envs-validator:test": "cd ./deploy/tools/envs-validator && ./test.sh", "prepare": "husky install", "svg:format": "svgo -r --config svgo.config.format.js ./icons ./toolkit/chakra/assets", "svg:build-sprite": "./deploy/scripts/build_sprite.sh", "test:pw": "./tools/scripts/pw.sh", "test:pw:local": "export NODE_PATH=$(pwd)/node_modules && yarn test:pw", "test:pw:docker": "docker run --rm --ipc=host -v $(pwd):/work/ -w /work/ -it mcr.microsoft.com/playwright:v1.57.0-noble ./tools/scripts/pw.docker.sh", "test:pw:docker:deps": "docker run --rm --ipc=host -v $(pwd):/work/ -w /work/ -it mcr.microsoft.com/playwright:v1.57.0-noble ./tools/scripts/pw.docker.deps.sh", "test:pw:ci": "yarn test:pw --project=$PW_PROJECT", "test:pw:detect-affected": "node ./deploy/tools/affected-tests/index.js", "test:vitest": "vitest", "favicon:generate:dev": "./tools/scripts/favicon-generator.dev.sh", "og-image:generate:dev": "./tools/scripts/og-image-generator.dev.sh", "sitemap:generate:dev": "./tools/scripts/sitemap-generator.dev.sh", "monitoring:prometheus:local": "docker run --name blockscout_prometheus -d -p 127.0.0.1:9090:9090 -v $(pwd)/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus", "monitoring:grafana:local": "docker run -d -p 4000:3000 --name=blockscout_grafana --user $(id -u) --volume $(pwd)/grafana:/var/lib/grafana grafana/grafana-enterprise", "postinstall": "chakra typegen ./toolkit/theme/theme.ts" }, "dependencies": { "@blockscout/bens-types": "1.4.1", "@blockscout/multichain-aggregator-types": "1.6.3-alpha.3", "@blockscout/points-types": "1.4.0-alpha.1", "@blockscout/stats-types": "2.11.1", "@blockscout/tac-operation-lifecycle-types": "0.0.1-alpha.6", "@blockscout/visualizer-types": "0.2.0", "@blockscout/zetachain-cctx-types": "^1.0.0-rc.6", "@chakra-ui/react": "3.15.0", "@emotion/react": "11.14.0", "@growthbook/growthbook-react": "0.21.0", "@helia/verified-fetch": "2.6.12", "@metamask/post-message-stream": "^7.0.0", "@metamask/providers": "^10.2.1", "@monaco-editor/react": "^4.7.0", "@multisender.app/multisender-react-widget": "0.2.3", "@next/bundle-analyzer": "15.5.9", "@nouns/assets": "^0.10.0", "@nouns/sdk": "^1.2.0", "@opentelemetry/api": "^1.4.1", "@opentelemetry/auto-instrumentations-node": "0.43.0", "@opentelemetry/exporter-jaeger": "1.27.0", "@opentelemetry/exporter-metrics-otlp-proto": "0.49.1", "@opentelemetry/exporter-trace-otlp-http": "0.49.1", "@opentelemetry/resources": "1.22.0", "@opentelemetry/sdk-node": "0.49.1", "@opentelemetry/sdk-trace-node": "1.22.0", "@opentelemetry/semantic-conventions": "1.22.0", "@openzeppelin/contracts": "5.4.0", "@reown/appkit": "1.7.20", "@reown/appkit-adapter-wagmi": "1.7.20", "@rollbar/react": "0.12.1", "@scure/base": "1.1.9", "@slise/embed-react": "^2.2.0", "@specify-sh/sdk": "0.4.2", "@tanstack/react-query": "5.55.4", "@tanstack/react-query-devtools": "5.55.4", "@types/papaparse": "^5.3.5", "@types/react-scroll": "^1.8.4", "@uidotdev/usehooks": "2.4.1", "airtable": "^0.12.2", "bignumber.js": "^9.1.0", "blo": "^1.1.1", "brotli-compress": "1.3.3", "crypto-js": "^4.2.0", "d3": "^7.6.1", "dappscout-iframe": "0.4.0", "dayjs": "^1.11.5", "dom-to-image": "^2.6.0", "es-toolkit": "1.39.10", "esbuild": "0.25.12", "focus-visible": "^5.2.0", "gradient-avatar": "git+https://github.com/blockscout/gradient-avatar.git", "graphiql": "^4.1.2", "graphql": "^16.8.1", "graphql-ws": "^5.11.3", "js-cookie": "^3.0.1", "magic-bytes.js": "1.8.0", "mixpanel-browser": "2.67.0", "monaco-editor": "^0.34.1", "next": "15.5.10", "next-themes": "0.4.4", "nextjs-routes": "^1.0.8", "node-fetch": "^3.2.9", "papaparse": "^5.3.2", "path-to-regexp": "8.1.0", "phoenix": "^1.6.15", "pino-http": "^8.2.1", "pino-pretty": "^9.1.1", "prom-client": "15.1.1", "qrcode": "^1.5.1", "react": "19.1.4", "react-device-detect": "^2.2.3", "react-dom": "19.1.4", "react-google-recaptcha": "3.1.0", "react-hook-form": "7.52.1", "react-icons": "5.4.0", "react-identicons": "^1.2.5", "react-intersection-observer": "^9.5.2", "react-jazzicon": "^1.0.4", "react-number-format": "^5.3.1", "react-scroll": "^1.8.7", "rollbar": "2.26.5", "swagger-ui-react": "5.30.3", "use-font-face-observer": "^1.3.0", "valibot": "1.2.0", "viem": "2.41.2", "wagmi": "2.19.5", "xss": "^1.0.14" }, "devDependencies": { "@chakra-ui/cli": "3.30.0", "@eslint/compat": "1.2.2", "@eslint/js": "9.14.0", "@next/eslint-plugin-next": "15.0.3", "@playwright/experimental-ct-react": "1.57.0", "@playwright/test": "1.57.0", "@stylistic/eslint-plugin": "5.2.3", "@svgr/webpack": "^6.5.1", "@tanstack/eslint-plugin-query": "5.91.2", "@testing-library/react": "^14.0.0", "@total-typescript/ts-reset": "^0.4.0", "@types/crypto-js": "^4.1.1", "@types/csp-dev": "^1.0.0", "@types/d3": "^7.4.0", "@types/dom-to-image": "^2.6.4", "@types/js-cookie": "^3.0.2", "@types/mixpanel-browser": "^2.38.1", "@types/node": "20.16.7", "@types/phoenix": "^1.5.4", "@types/qrcode": "^1.5.0", "@types/react": "19.1.7", "@types/react-dom": "19.1.6", "@types/react-google-recaptcha": "^2.1.5", "@types/swagger-ui-react": "5.18.0", "@types/ws": "^8.5.3", "@typescript-eslint/eslint-plugin": "^5.60.0", "@vitejs/plugin-react": "^4.0.0", "css-loader": "^6.7.3", "dotenv-cli": "^6.0.0", "eslint": "9.39.2", "eslint-config-next": "15.4.10", "eslint-plugin-consistent-default-export-name": "^0.0.15", "eslint-plugin-import": "2.31.0", "eslint-plugin-import-helpers": "2.0.1", "eslint-plugin-jsx-a11y": "6.10.2", "eslint-plugin-no-cyrillic-string": "^1.0.5", "eslint-plugin-playwright": "2.0.1", "eslint-plugin-react": "7.37.5", "eslint-plugin-react-hooks": "5.0.0", "eslint-plugin-regexp": "2.6.0", "eslint-plugin-vitest": "0.5.4", "globals": "15.12.0", "husky": "^8.0.0", "jsdom": "27.3.0", "license-report": "6.8.1", "license-report-check": "0.1.2", "lint-staged": ">=10", "mockdate": "^3.0.5", "style-loader": "^3.3.1", "svg-icons-cli": "0.0.8", "svgo": "^2.8.0", "ts-node": "^10.9.1", "typescript": "5.9.2", "typescript-eslint": "8.41.0", "vite-plugin-svgr": "^2.2.2", "vite-tsconfig-paths": "5.1.4", "vitest": "4.0.15", "vitest-fetch-mock": "0.4.5", "ws": "^8.17.1" }, "lint-staged": { "*.{js,jsx,ts,tsx}": "eslint --cache --fix" }, "resolutions": { "@types/react": "18.3.12", "@types/react-dom": "18.3.1", "wagmi/**/ws": "8.17.1", "@helia/verified-fetch/**/axios": "1.12.0", "@helia/verified-fetch/**/tar-fs": "2.1.4", "@helia/verified-fetch/**/node-forge": "1.3.2", "@multisender.app/multisender-react-widget/**/axios": "1.12.0", "@reown/appkit/**/node-forge": "1.3.2", "@reown/appkit-adapter-wagmi/**/node-forge": "1.3.2", "eslint/**/brace-expansion": "1.1.12", "swagger-ui-react/**/js-yaml": "4.1.1", "dappscout-iframe/**/ws": "8.17.1" }, "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e" }