mirror of
https://github.com/luxfi/explore.git
synced 2026-09-24 00:28:18 +00:00
/bridge showed CONNECTED CHAINS 14, BRIDGE ROUTES 4, BRIDGE SIGNERS 5, ACTIVE
ROUTES 4 — the same four values on lux, hanzo and zoo, while its only backing
RPC 404'd twice per page load. Not one was measured:
* Connected Chains counted the keys of CHAIN_LABELS, a hardcoded lookup table,
plus an L1 list that comes back empty. It is 14 because the map has 14
entries.
* Bridge Routes and Active Routes counted four pairs unshifted into an array
three lines above, each hardcoded status: 'active'.
* Bridge Signers asked the B-Chain and, when that failed, printed the P-Chain
VALIDATOR count under a signer label. A real number, under the wrong name —
the worst of the four, because it moves.
The B-Chain is not served on any prefix: api.<brand>.network answers 404 to
/ext/bc/B/rpc and to /v1/bc/B/rpc alike, so there is no live bridge data to
show and the page has been reporting constants as measurements. Fixing the
path would have moved the 404, not the lie.
So the cards are gone, and with them lib/api/bchain, whose whole job was to
swallow that failure into zeroes. That leaves lib/api/luxnet with no caller —
the P-Chain hooks go through the /v1/pchain proxy, and getPChain/getInfo/
getHealth were re-exported and never called — so it goes too, and the luxnet
dependency with it: 889 lines of lockfile, an elliptic-curve SDK this app
never used at runtime. The retired /ext/ prefix now has no caller here at all.
What stays is what is true: the routes table, C/P/X atomic swaps marked active
and L1 transfers marked coming soon, and the paragraph that says so.
Measured, 1440x900: before, two POST https://api.lux.network/ext/bc/B/rpc per
load, both 404, four stat cards reading 14/4/5/4. After, zero /ext/ or /bc/
requests, zero stat cards, the four route rows unchanged.
Also: name every field when a broadcast becomes a block. toApiBlock spread the
raw EVMBlock and renamed three keys, so gas_used, gas_limit, base_fee_per_gas
and parent_hash stayed camelCase and arrived undefined — a live-pushed row
rendered 0 gas beside REST rows showing the real number, the same block reading
two ways depending on how it got here. It now builds the API shape explicitly,
field for field, matching formatBlock in luxfi/indexer.
272 lines
10 KiB
JSON
272 lines
10 KiB
JSON
{
|
|
"name": "@luxfi/explore",
|
|
"version": "1.1.29",
|
|
"private": false,
|
|
"homepage": "https://github.com/luxfi/explore#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": "node scripts/generate-well-known.js && next build --webpack",
|
|
"build:next": "./deploy/scripts/download_assets.sh ./public/assets/configs && pnpm svg:build-sprite && ./deploy/scripts/make_envs_script.sh && node scripts/generate-well-known.js && next build --webpack",
|
|
"wellknown:generate": "node scripts/generate-well-known.js",
|
|
"wellknown:check": "node scripts/generate-well-known.js --check",
|
|
"build:docker": "./tools/scripts/build.docker.sh",
|
|
"start": "next start",
|
|
"start:docker:local": "docker run -p 3000:3000 --env-file .env.local lux-explore:local",
|
|
"start:docker:preset": "./tools/scripts/docker.preset.sh",
|
|
"lint:eslint": "eslint .",
|
|
"lint:eslint:fix": "eslint . --fix",
|
|
"lint:tsc": "tsc -p ./tsconfig.json",
|
|
"lint:cspell": "cspell . --no-must-find-files",
|
|
"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",
|
|
"icons:sync": "node tools/icons/from-lucide.mjs && pnpm svg:build-sprite",
|
|
"svg:format": "svgo -r --config svgo.config.format.js ./icons",
|
|
"svg:build-sprite": "./deploy/scripts/build_sprite.sh",
|
|
"test:pw": "./tools/scripts/pw.sh",
|
|
"test:pw:local": "export NODE_PATH=$(pwd)/node_modules && pnpm 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": "pnpm 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 lux_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=lux_grafana --user $(id -u) --volume $(pwd)/grafana:/var/lib/grafana grafana/grafana-enterprise"
|
|
},
|
|
"dependencies": {
|
|
"@dynamic-labs/ethereum": "4.52.2",
|
|
"@dynamic-labs/sdk-react-core": "4.52.2",
|
|
"@dynamic-labs/wagmi-connector": "4.52.2",
|
|
"@helia/verified-fetch": "2.6.12",
|
|
"@luxfi/bens-types": "1.4.3",
|
|
"@luxfi/interchain-indexer-types": "0.0.10",
|
|
"@luxfi/multichain-aggregator-types": "2.1.2",
|
|
"@luxfi/points-types": "1.4.2",
|
|
"@luxfi/stats-types": "2.11.1",
|
|
"@luxfi/tac-operation-lifecycle-types": "1.1.0",
|
|
"@luxfi/ui": "7.4.10",
|
|
"@luxfi/visualizer-types": "0.2.0",
|
|
"@luxfi/zetachain-cctx-types": "1.0.1",
|
|
"@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",
|
|
"@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",
|
|
"@radix-ui/react-accordion": "^1.2.12",
|
|
"@radix-ui/react-avatar": "^1.1.11",
|
|
"@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-label": "^2.1.8",
|
|
"@radix-ui/react-popover": "^1.1.15",
|
|
"@radix-ui/react-progress": "^1.1.8",
|
|
"@radix-ui/react-radio-group": "^1.3.8",
|
|
"@radix-ui/react-select": "^2.2.6",
|
|
"@radix-ui/react-slider": "^1.3.6",
|
|
"@radix-ui/react-slot": "^1.2.4",
|
|
"@radix-ui/react-switch": "^1.2.6",
|
|
"@radix-ui/react-tabs": "^1.1.13",
|
|
"@radix-ui/react-tooltip": "^1.2.8",
|
|
"@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",
|
|
"@tailwindcss/postcss": "^4.2.1",
|
|
"@tanstack/react-query": "5.55.4",
|
|
"@tanstack/react-query-devtools": "5.55.4",
|
|
"@uidotdev/usehooks": "2.4.1",
|
|
"airtable": "^0.12.2",
|
|
"bignumber.js": "^9.1.0",
|
|
"blo": "^1.1.1",
|
|
"brotli-compress": "1.3.3",
|
|
"class-variance-authority": "^0.7.1",
|
|
"clsx": "^2.1.1",
|
|
"crypto-js": "^4.2.0",
|
|
"d3": "^7.6.1",
|
|
"d3-sankey": "^0.12.3",
|
|
"dappscout-iframe": "0.4.0",
|
|
"dayjs": "^1.11.5",
|
|
"dom-to-image": "^2.6.0",
|
|
"es-toolkit": "1.39.10",
|
|
"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": "16.1.6",
|
|
"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",
|
|
"postcss": "^8.5.8",
|
|
"prom-client": "15.1.1",
|
|
"qrcode": "^1.5.1",
|
|
"react": "19.2.4",
|
|
"react-device-detect": "^2.2.3",
|
|
"react-dom": "19.2.4",
|
|
"react-google-recaptcha": "3.1.0",
|
|
"react-hook-form": "7.52.1",
|
|
"react-identicons": "^1.2.5",
|
|
"react-intersection-observer": "^9.5.2",
|
|
"react-jazzicon": "^1.0.4",
|
|
"react-native-web": "^0.21.2",
|
|
"react-number-format": "^5.3.1",
|
|
"react-scroll": "^1.8.7",
|
|
"rollbar": "2.26.5",
|
|
"sonner": "^2.0.7",
|
|
"swagger-ui-react": "5.30.3",
|
|
"tailwind-merge": "^3.5.0",
|
|
"tailwindcss": "^4.2.1",
|
|
"tailwindcss-animate": "^1.0.7",
|
|
"use-font-face-observer": "^1.3.0",
|
|
"valibot": "1.2.0",
|
|
"viem": "2.41.2",
|
|
"wagmi": "2.19.5",
|
|
"xss": "^1.0.14"
|
|
},
|
|
"devDependencies": {
|
|
"@eslint/compat": "1.2.2",
|
|
"@eslint/js": "9.14.0",
|
|
"@hanzogui/lucide-icons-2": "7.3.0",
|
|
"@next/bundle-analyzer": "16.1.6",
|
|
"@next/eslint-plugin-next": "16.1.6",
|
|
"@openzeppelin/contracts": "5.4.0",
|
|
"@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/d3-sankey": "^0.12.5",
|
|
"@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/papaparse": "^5.3.5",
|
|
"@types/phoenix": "^1.5.4",
|
|
"@types/qrcode": "^1.5.0",
|
|
"@types/react": "19.2.14",
|
|
"@types/react-dom": "19.2.3",
|
|
"@types/react-google-recaptcha": "^2.1.5",
|
|
"@types/react-scroll": "^1.8.4",
|
|
"@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",
|
|
"cspell": "9.6.4",
|
|
"css-loader": "^6.7.3",
|
|
"dotenv-cli": "^6.0.0",
|
|
"esbuild": "0.25.12",
|
|
"eslint": "9.39.2",
|
|
"eslint-config-next": "16.1.6",
|
|
"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-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.3",
|
|
"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"
|
|
},
|
|
"pnpm": {
|
|
"overrides": {
|
|
"ws": "8.17.1",
|
|
"axios": "1.12.0",
|
|
"tar-fs": "2.1.4",
|
|
"node-forge": "1.3.2",
|
|
"brace-expansion": "1.1.12",
|
|
"js-yaml": "4.1.1",
|
|
"@noble/hashes": "1.8.0",
|
|
"@ipshipyard/node-datachannel": "link:./stubs/node-datachannel",
|
|
"@hanzogui/adapt": "3.0.2",
|
|
"@hanzogui/animate": "3.0.2",
|
|
"@hanzogui/animate-presence": "3.0.2",
|
|
"@hanzogui/compose-refs": "3.0.2",
|
|
"@hanzogui/constants": "3.0.2",
|
|
"@hanzogui/core": "3.0.2",
|
|
"@hanzogui/create-context": "3.0.2",
|
|
"@hanzogui/dismissable": "3.0.2",
|
|
"@hanzogui/floating": "3.0.2",
|
|
"@hanzogui/focus-scope": "3.0.2",
|
|
"@hanzogui/get-font-sized": "3.0.2",
|
|
"@hanzogui/get-token": "3.0.2",
|
|
"@hanzogui/helpers": "3.0.2",
|
|
"@hanzogui/is-equal-shallow": "3.0.1",
|
|
"@hanzogui/polyfill-dev": "3.0.2",
|
|
"@hanzogui/popover": "3.0.2",
|
|
"@hanzogui/popper": "3.0.2",
|
|
"@hanzogui/portal": "3.0.2",
|
|
"@hanzogui/remove-scroll": "3.0.2",
|
|
"@hanzogui/scroll-view": "3.0.2",
|
|
"@hanzogui/sheet": "3.0.2",
|
|
"@hanzogui/stacks": "3.0.2",
|
|
"@hanzogui/text": "3.0.2",
|
|
"@hanzogui/use-controllable-state": "3.0.2",
|
|
"@hanzogui/use-event": "3.0.2",
|
|
"@hanzogui/use-presence": "3.0.1",
|
|
"@hanzogui/web": "3.0.2",
|
|
"@hanzogui/z-index-stack": "3.0.2"
|
|
},
|
|
"patchedDependencies": {
|
|
"@luxfi/[email protected]": "patches/@[email protected]"
|
|
}
|
|
},
|
|
"packageManager": "[email protected]"
|
|
}
|