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]>
31 lines
1.2 KiB
TypeScript
31 lines
1.2 KiB
TypeScript
import { compile } from 'path-to-regexp';
|
|
|
|
import type { ExternalChainExtended } from 'types/externalChains';
|
|
|
|
import config from 'configs/app';
|
|
|
|
import getResourceParams from './getResourceParams';
|
|
import isNeedProxy from './isNeedProxy';
|
|
import type { ResourceName, ResourcePathParams } from './resources';
|
|
|
|
export default function buildUrl<R extends ResourceName>(
|
|
resourceFullName: R,
|
|
pathParams?: ResourcePathParams<R>,
|
|
queryParams?: Record<string, string | Array<string> | number | boolean | null | undefined>,
|
|
noProxy?: boolean,
|
|
chain?: ExternalChainExtended,
|
|
): string {
|
|
const { api, resource } = getResourceParams(resourceFullName, chain);
|
|
const baseUrl = !noProxy && isNeedProxy() ? config.app.baseUrl : api.endpoint;
|
|
const basePath = api.basePath ?? '';
|
|
const path = !noProxy && isNeedProxy() ? '/v1/proxy' + basePath + resource.path : basePath + resource.path;
|
|
const url = new URL(compile(path)(pathParams), baseUrl);
|
|
|
|
queryParams && Object.entries(queryParams).forEach(([ key, value ]) => {
|
|
// there are some pagination params that can be null or false for the next page
|
|
value !== undefined && value !== '' && url.searchParams.append(key, String(value));
|
|
});
|
|
|
|
return url.toString();
|
|
}
|