Fix explorer routing, links, and frontend API loading

This commit is contained in:
defiQUG
2026-03-28 00:21:18 -07:00
parent 011b4ff9b7
commit 26892ccbb9
23 changed files with 728 additions and 137 deletions

View File

@@ -1,4 +1,5 @@
import { apiClient, ApiResponse } from './client'
import { ApiResponse } from './client'
import { fetchBlockscoutJson, normalizeBlock } from './blockscout'
export interface Block {
chain_id: number
@@ -22,12 +23,6 @@ export interface BlockListParams {
order?: 'asc' | 'desc'
}
/** Normalize list response: backend may return { data: T[] } or { items: T[] }. */
function normalizeListResponse<T>(raw: { data?: T[]; items?: T[] }): ApiResponse<T[]> {
const data = Array.isArray(raw?.data) ? raw.data : Array.isArray(raw?.items) ? raw.items : []
return { data }
}
export const blocksApi = {
list: async (params: BlockListParams): Promise<ApiResponse<Block[]>> => {
const queryParams = new URLSearchParams()
@@ -40,16 +35,18 @@ export const blocksApi = {
if (params.sort) queryParams.append('sort', params.sort)
if (params.order) queryParams.append('order', params.order)
const raw = (await apiClient.get(`/api/v1/blocks?${queryParams.toString()}`)) as unknown as { data?: Block[]; items?: Block[] }
return normalizeListResponse(raw)
const raw = await fetchBlockscoutJson<{ items?: unknown[] }>(`/api/v2/blocks?${queryParams.toString()}`)
const data = Array.isArray(raw?.items) ? raw.items.map((item) => normalizeBlock(item as never, params.chain_id)) : []
return { data }
},
getByNumber: async (chainId: number, number: number): Promise<ApiResponse<Block>> => {
return apiClient.get<Block>(`/api/v1/blocks/${chainId}/${number}`)
const raw = await fetchBlockscoutJson<unknown>(`/api/v2/blocks/${number}`)
return { data: normalizeBlock(raw as never, chainId) }
},
getByHash: async (chainId: number, hash: string): Promise<ApiResponse<Block>> => {
return apiClient.get<Block>(`/api/v1/blocks/${chainId}/hash/${hash}`)
const raw = await fetchBlockscoutJson<unknown>(`/api/v2/blocks/${hash}`)
return { data: normalizeBlock(raw as never, chainId) }
},
}