diff --git a/apps/info-dashboard/package.json b/apps/info-dashboard/package.json index 136939d..71e8d17 100644 --- a/apps/info-dashboard/package.json +++ b/apps/info-dashboard/package.json @@ -8,7 +8,8 @@ "start": "next start", "lint": "next lint", "test": "vitest", - "preview": "pnpm dlx http-server out" + "preview": "pnpm dlx http-server out", + "boot": "doppler run --preserve-env --command=\"pnpm i && pnpm -r build\"" }, "dependencies": { "@floating-ui/react": "^0.26.17", diff --git a/apps/info-dashboard/src/lib/fetchers/leaderboard.ts b/apps/info-dashboard/src/lib/fetchers/leaderboard.ts index f6259ab..b450692 100644 --- a/apps/info-dashboard/src/lib/fetchers/leaderboard.ts +++ b/apps/info-dashboard/src/lib/fetchers/leaderboard.ts @@ -16,10 +16,21 @@ import { import { NodesEndpointReturnType } from "./nodes"; export async function fetchLeaderboard() { - const API_HOST = process.env.NEXT_PUBLIC_API_HOST; - const leaderboard_url = `${API_HOST}metrics-dashboard/leaderboard`; - const raw = await fetch(leaderboard_url); - return (await raw.json()) as LeaderboardReturnType; + // Add default value and trim any trailing slashes + const API_HOST = (process.env.NEXT_PUBLIC_API_HOST || '').replace(/\/$/, ''); + // Add error handling and logging + try { + const leaderboard_url = `${API_HOST}/metrics-dashboard/leaderboard`; + console.log('Fetching from:', leaderboard_url); // Debug log + const raw = await fetch(leaderboard_url); + if (!raw.ok) { + throw new Error(`HTTP error! status: ${raw.status}`); + } + return (await raw.json()) as LeaderboardReturnType; + } catch (error) { + console.error('Error fetching leaderboard:', error); + throw error; + } } export function toTableData({ diff --git a/apps/info-dashboard/src/lib/fetchers/nodes.ts b/apps/info-dashboard/src/lib/fetchers/nodes.ts index 36ecdb6..229f143 100644 --- a/apps/info-dashboard/src/lib/fetchers/nodes.ts +++ b/apps/info-dashboard/src/lib/fetchers/nodes.ts @@ -17,11 +17,20 @@ export type NodesEndpointReturnElement = { export type NodesEndpointReturnType = NodesEndpointReturnElement[]; export async function fetchNodes() { - const API_HOST = process.env.NEXT_PUBLIC_API_HOST; - const URL = `${API_HOST}metrics-dashboard/nodes`; - const raw = await fetch(URL); - const res = (await raw.json()) as NodesEndpointReturnType; - return res; + const API_HOST = (process.env.NEXT_PUBLIC_API_HOST || '').replace(/\/$/, ''); + try { + const URL = `${API_HOST}/metrics-dashboard/nodes`; + console.log('Fetching nodes from:', URL); // Debug log + const raw = await fetch(URL); + if (!raw.ok) { + throw new Error(`HTTP error! status: ${raw.status}`); + } + const res = (await raw.json()) as NodesEndpointReturnType; + return res; + } catch (error) { + console.error('Error fetching nodes:', error); + throw error; + } } export function toGeoJson(data: NodesEndpointReturnType) { diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..0cdce20 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,102 @@ +{ + "name": "lilypad-web-ui", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "lilypad-web-ui", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "@lottiefiles/dotlottie-react": "^0.9.3", + "@lottiefiles/react-lottie-player": "^3.5.4" + } + }, + "node_modules/@lottiefiles/dotlottie-react": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@lottiefiles/dotlottie-react/-/dotlottie-react-0.9.3.tgz", + "integrity": "sha512-x4xQlFFulAF/nG044VNMwaXWk8ehg/KEHXpMxGB+L5gv3qohjxv/I7/erHyfhWY9y6C/VMl+PiWZbT54W8+lUQ==", + "dependencies": { + "@lottiefiles/dotlottie-web": "0.36.1" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@lottiefiles/dotlottie-web": { + "version": "0.36.1", + "resolved": "https://registry.npmjs.org/@lottiefiles/dotlottie-web/-/dotlottie-web-0.36.1.tgz", + "integrity": "sha512-KvxOH5Msk0Ivqpgq4p1DGo1IG2XPX4kEVkhssTaOUEvoeCxDLru+DlbUzwG8b5JcJwEBmrAMzCNzCTmn+uMFxQ==" + }, + "node_modules/@lottiefiles/react-lottie-player": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@lottiefiles/react-lottie-player/-/react-lottie-player-3.6.0.tgz", + "integrity": "sha512-WK5TriLJT93VF3w4IjSVyveiedraZCnDhKzCPhpbeLgQeMi6zufxa3dXNc4HmAFRXq+LULPAy+Idv1rAfkReMA==", + "dependencies": { + "lottie-web": "^5.12.2" + }, + "peerDependencies": { + "react": "16 - 19" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "peer": true + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "peer": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lottie-web": { + "version": "5.12.2", + "resolved": "https://registry.npmjs.org/lottie-web/-/lottie-web-5.12.2.tgz", + "integrity": "sha512-uvhvYPC8kGPjXT3MyKMrL3JitEAmDMp30lVkuq/590Mw9ok6pWcFCwXJveo0t5uqYw1UREQHofD+jVpdjBv8wg==" + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" + } + } + } +}