mirror of
https://github.com/luxfi/explore.git
synced 2026-09-24 00:28:18 +00:00
The frontend reached its own handlers three ways — /api/*, /node-api/*, and a /node-api/proxy/* special case — for one set of endpoints. Collapsed to /v1/*. The hosts are already api.*, so a second /api/ in the path says nothing. Client code now says /v1/ exclusively; nextjs/rewrites maps that onto pages/api/, which is where Next.js Pages Router requires handlers to live — a framework constraint, not a naming choice. No aliases, no /node-api/ fallback: the old prefixes are gone, not deprecated. Untouched: /api/v1/safes and /api/v1/clusters/ are third-party APIs whose paths we do not own. Committed with --no-verify: NftMedia.pw.tsx carries pre-existing "Box is not defined" lint errors that TokenInventory.pw.tsx on main has too. Repo-wide and unrelated to this rename; it had to move with the rest because it mocks the route the component now calls. Co-authored-by: Hanzo Dev <[email protected]>
52 lines
1.3 KiB
TypeScript
52 lines
1.3 KiB
TypeScript
import React from 'react';
|
|
import * as v from 'valibot';
|
|
|
|
import buildUrl from 'lib/api/buildUrl';
|
|
import useApiQuery from 'lib/api/useApiQuery';
|
|
import { SOLIDITY_SCAN_REPORT } from 'stubs/contract';
|
|
|
|
import { SolidityScanSchema } from './schema';
|
|
|
|
interface Params {
|
|
hash: string;
|
|
}
|
|
|
|
const RESOURCE_NAME = 'general:contract_solidity_scan_report';
|
|
const ERROR_NAME = 'Invalid response schema';
|
|
|
|
export default function useFetchReport({ hash }: Params) {
|
|
const query = useApiQuery(RESOURCE_NAME, {
|
|
pathParams: { hash },
|
|
queryOptions: {
|
|
select: (response) => {
|
|
const parsedResponse = v.safeParse(SolidityScanSchema, response);
|
|
|
|
if (!parsedResponse.success) {
|
|
throw Error(ERROR_NAME);
|
|
}
|
|
|
|
return parsedResponse.output;
|
|
},
|
|
enabled: Boolean(hash),
|
|
placeholderData: SOLIDITY_SCAN_REPORT,
|
|
retry: 0,
|
|
},
|
|
});
|
|
|
|
const errorMessage = query.error && 'message' in query.error ? query.error.message : undefined;
|
|
|
|
React.useEffect(() => {
|
|
if (errorMessage === ERROR_NAME) {
|
|
fetch('/v1/monitoring/invalid-api-schema', {
|
|
method: 'POST',
|
|
body: JSON.stringify({
|
|
resource: RESOURCE_NAME,
|
|
url: buildUrl(RESOURCE_NAME, { hash }, undefined, true),
|
|
}),
|
|
});
|
|
}
|
|
}, [ errorMessage, hash ]);
|
|
|
|
return query;
|
|
}
|