swapnet-sdk-test-4
Version:
TypeScript SDK for SwapNet API.
91 lines (90 loc) • 3.39 kB
JavaScript
const resolveErrorAsync = async (response)=>{
if (response.status === 400 || response.status === 409 || response.status === 500) {
const { error } = await response.json();
return {
succeeded: false,
error
};
} else if (response.status !== 200) {
let error;
if (response.status >= 500) {
error = `Unknown server error with code ${response.status}.`;
} else if (response.status >= 400) {
error = `Unknown client error with code ${response.status}.`;
} else {
error = `Unknown status code ${response.status}.`;
}
return {
succeeded: false,
error
};
}
return {
succeeded: true,
error: ""
};
};
export class SwapnetClient {
_apiKey;
_baseUrl;
_apiVersion;
constructor(_apiKey, _baseUrl = 'https://app.swap-net.xyz', _apiVersion = 'v1.0'){
this._apiKey = _apiKey;
this._baseUrl = _baseUrl;
this._apiVersion = _apiVersion;
}
async getSupportedTokensAsync(chainId) {
const url = `${this._baseUrl}/api/${this._apiVersion}/tokens?` + `apiKey=${this._apiKey}&` + `chainId=${chainId}`;
const response = await fetch(url);
const { succeeded, error } = await resolveErrorAsync(response);
if (!succeeded) {
return {
succeeded: false,
error
};
}
const tokens = await response.json();
return {
succeeded: true,
tokens
};
}
async swapAsync(chainId, sellTokenAddress, buyTokenAddress, sellAmount, buyAmount, userAddress = undefined) {
if (sellAmount === undefined && buyAmount === undefined) {
throw new Error(`Both sellAmount and buyAmount are missing!`);
}
if (sellAmount !== undefined && buyAmount !== undefined) {
throw new Error(`Both sellAmount and buyAmount are specified!`);
}
const url = `${this._baseUrl}/api/${this._apiVersion}/swap?` + `apiKey=${this._apiKey}&` + `chainId=${chainId}&` + `sellToken=${sellTokenAddress}&` + `buyToken=${buyTokenAddress}` + (sellAmount !== undefined ? `&sellAmount=${sellAmount.toString()}` : "") + (buyAmount !== undefined ? `&buyAmount=${buyAmount.toString()}` : "") + (userAddress !== undefined ? `&userAddress=${userAddress}` : "");
const response = await fetch(url);
const { succeeded, error } = await resolveErrorAsync(response);
if (!succeeded) {
return {
succeeded: false,
error
};
}
const swapResponse = await response.json();
return {
succeeded: true,
swapResponse
};
}
async getTokenPricesAsync(chainId, tokens) {
const url = `${this._baseUrl}/api/${this._apiVersion}/prices?` + `apiKey=${this._apiKey}&` + `chainId=${chainId}&` + `tokens=${tokens.join(',')}`;
const response = await fetch(url);
const { succeeded, error } = await resolveErrorAsync(response);
if (!succeeded) {
return {
succeeded: false,
error
};
}
const tokenPrices = await response.json();
return {
succeeded: true,
tokenPrices
};
}
}