@swapper-finance/sdk
Version:
JavaScript SDK form Swapper
134 lines (122 loc) • 3.11 kB
text/typescript
import swapperConfig from "../../swapper.config";
import {
Chain,
Ecosystem,
GetPricesPayload,
GenerateRoutePayload,
GetTokenBalancesPayload,
Route,
Token,
TokenPrices,
TransactionHistory,
TransactionStatus,
} from "@src/models";
async function _sendRequest<T>(
urlPath: string,
options?: RequestInit,
): Promise<T> {
const response = await fetch(`${swapperConfig.apiUrl}${urlPath}`, {
method: "GET",
headers: {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
...options?.headers,
},
...options,
});
if (!response.ok) {
throw new Error(
`API request failed with status ${response.status}: ${response.statusText}`,
);
}
return response.json();
}
/**
* Get swap route based on provided criteria.
* @param payload required
* @param abortSignal
*/
export async function getRoute(
payload: GenerateRoutePayload,
abortSignal?: AbortSignal,
): Promise<Route> {
return _sendRequest<Route>("/route", {
method: "POST",
body: JSON.stringify(payload),
signal: abortSignal,
});
}
/**
* GET chains based on provided criteria.
* @param ecosystem optional
*/
export async function getChains(ecosystem?: Ecosystem): Promise<Chain[]> {
return _sendRequest<Chain[]>(`/chains?data=${JSON.stringify({ ecosystem })}
`);
}
/**
* GET chain data based on provided criteria.
* @param chainId
* @param ecosystem optional - Default: {@link DEFAULT_ECOSYSTEM}
*/
export async function getChainData(
chainId?: string,
ecosystem?: Ecosystem,
): Promise<Chain> {
return _sendRequest<Chain>(
`/chains?data=${JSON.stringify({
chainId,
ecosystem,
})}`,
);
}
/**
* GET Tokens based on provided criteria
* @param chainId required
* @param address optional
* @param ecosystem optional but {@link DEFAULT_ECOSYSTEM} will be considered
*/
export async function getTokens(
chainId: string,
address?: string,
ecosystem?: Ecosystem,
): Promise<Token[]> {
return _sendRequest<Token[]>(
`/tokens?data=${JSON.stringify({
chainId,
address,
ecosystem,
})}`,
);
}
export async function getHistory(payload: { walletAddress: string }) {
return await _sendRequest<TransactionHistory>(
`/history?${new URLSearchParams({
data: JSON.stringify(payload),
})}`,
);
}
export async function getPrices(payload: GetPricesPayload) {
return await _sendRequest<TokenPrices>(
`/tokenPrices?${new URLSearchParams({
data: JSON.stringify(payload),
})}`,
);
}
export async function getBalances(payload: GetTokenBalancesPayload) {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
return _sendRequest<any>(
`/tokenBalances?${new URLSearchParams({
data: JSON.stringify(payload),
})}`,
);
}
export async function getTxStatus(payload: {
routeHash: string;
}): Promise<{ status: TransactionStatus }> {
return await _sendRequest<{ status: TransactionStatus }>(
`/getTxStatus?${new URLSearchParams({
data: JSON.stringify(payload), // todo remove once gcp starts working
})}`,
);
}