From 7f8cb2c581acca802eab90af690a979a8c4be42a Mon Sep 17 00:00:00 2001 From: karooolis Date: Wed, 14 Aug 2024 19:23:03 +0200 Subject: [PATCH] add script to fetch worlds.json config --- examples/local-explorer/mprocs.yaml | 2 +- .../local-explorer/packages/contracts/worlds.json | 2 +- .../explorer/src/app/utils/server/getWorldAddress.ts | 11 ++++++++++- packages/explorer/src/hooks/useWorldAddress.ts | 11 ++++++++++- packages/explorer/src/middleware.ts | 12 ++++++++++-- 5 files changed, 32 insertions(+), 6 deletions(-) diff --git a/examples/local-explorer/mprocs.yaml b/examples/local-explorer/mprocs.yaml index 04b2dacb06..34ff398596 100644 --- a/examples/local-explorer/mprocs.yaml +++ b/examples/local-explorer/mprocs.yaml @@ -15,7 +15,7 @@ procs: FOLLOW_BLOCK_TAG: "latest" SQLITE_FILENAME: "indexer.db" explorer-watcher: - shell: bash explorer-watcher.sh + shell: node explorer-watcher.mjs env: PORT: "13690" MODE: "development" diff --git a/examples/local-explorer/packages/contracts/worlds.json b/examples/local-explorer/packages/contracts/worlds.json index 6fed600155..4d4f6774fa 100644 --- a/examples/local-explorer/packages/contracts/worlds.json +++ b/examples/local-explorer/packages/contracts/worlds.json @@ -2,4 +2,4 @@ "31337": { "address": "0x8d8b6b8414e1e3dcfd4168561b9be6bd3bf6ec4b" } -} \ No newline at end of file +} diff --git a/packages/explorer/src/app/utils/server/getWorldAddress.ts b/packages/explorer/src/app/utils/server/getWorldAddress.ts index 2b18d8d00d..8348406163 100644 --- a/packages/explorer/src/app/utils/server/getWorldAddress.ts +++ b/packages/explorer/src/app/utils/server/getWorldAddress.ts @@ -3,7 +3,16 @@ import { Hex, isAddress } from "viem"; export function getWorldAddress(): Hex { const headersList = headers(); - const worldAddress = headersList.get("x-world-address") || process.env.NEXT_PUBLIC_WORLD_ADDRESS; + + let worldAddress = headersList.get("x-world-address") || process.env.NEXT_PUBLIC_WORLD_ADDRESS; + if (!worldAddress) { + const worldsConfig = process.env.NEXT_PUBLIC_WORLDS_CONFIG; + if (worldsConfig) { + const chainId = headersList.get("x-chain-id") || process.env.NEXT_PUBLIC_CHAIN_ID || 31337; + const worlds = JSON.parse(worldsConfig); + worldAddress = worlds[chainId]?.address; + } + } if (!worldAddress) { throw new Error("World address not found"); diff --git a/packages/explorer/src/hooks/useWorldAddress.ts b/packages/explorer/src/hooks/useWorldAddress.ts index f4f66110bb..5b1d69469e 100644 --- a/packages/explorer/src/hooks/useWorldAddress.ts +++ b/packages/explorer/src/hooks/useWorldAddress.ts @@ -3,7 +3,16 @@ import { Hex, isAddress } from "viem"; export function useWorldAddress(): Hex { const searchParams = useSearchParams(); - const worldAddress = searchParams.get("worldAddress") || process.env.NEXT_PUBLIC_WORLD_ADDRESS; + + let worldAddress = searchParams.get("worldAddress") || process.env.NEXT_PUBLIC_WORLD_ADDRESS; + if (!worldAddress) { + const worldsConfig = process.env.NEXT_PUBLIC_WORLDS_CONFIG; + if (worldsConfig) { + const chainId = searchParams.get("chainId") || process.env.NEXT_PUBLIC_CHAIN_ID || 31337; + const worlds = JSON.parse(worldsConfig); + worldAddress = worlds[chainId]?.address; + } + } if (!worldAddress) { throw new Error("World address not found"); diff --git a/packages/explorer/src/middleware.ts b/packages/explorer/src/middleware.ts index 5409c00448..ac3f655196 100644 --- a/packages/explorer/src/middleware.ts +++ b/packages/explorer/src/middleware.ts @@ -2,9 +2,17 @@ import { NextResponse } from "next/server"; import type { NextRequest } from "next/server"; export function middleware(request: NextRequest) { - const worldAddress = request.nextUrl.searchParams.get("worldAddress") || process.env.NEXT_PUBLIC_WORLD_ADDRESS; + const chainId = request.nextUrl.searchParams.get("chainId"); + const worldAddress = request.nextUrl.searchParams.get("worldAddress"); const requestHeaders = new Headers(request.headers); - requestHeaders.set("x-world-address", worldAddress as string); + + if (chainId) { + requestHeaders.set("x-chain-id", chainId); + } + + if (worldAddress) { + requestHeaders.set("x-world-address", worldAddress as string); + } return NextResponse.next({ request: {