UNPKG

swapnet-sdk-test-4

Version:
91 lines (90 loc) 3.39 kB
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 }; } }