UNPKG

@openocean.finance/widget-sdk

Version:

OpenOcean Any-to-Any Cross-Chain-Swap SDK

353 lines 14.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getTransactionHistory = exports.getConnections = exports.getGasRecommendation = exports.getTools = exports.getToken = exports.getTokens = exports.getChains = exports.getRelayedTransactionStatus = exports.relayTransaction = exports.getRelayerQuote = exports.getStatus = exports.getStepTransaction = exports.getContractCallsQuote = exports.getRoutes = exports.getQuote = void 0; const widget_types_1 = require("@openocean.finance/widget-types"); const config_js_1 = require("../config.js"); const SDKError_js_1 = require("../errors/SDKError.js"); const baseError_js_1 = require("../errors/baseError.js"); const constants_js_1 = require("../errors/constants.js"); const errors_js_1 = require("../errors/errors.js"); const request_js_1 = require("../request.js"); const typeguards_js_1 = require("../typeguards.js"); const withDedupe_js_1 = require("../utils/withDedupe.js"); const getQuote = async (params, options) => { const requiredParameters = [ 'fromChain', 'fromToken', 'fromAddress', 'fromAmount', 'toChain', 'toToken', ]; for (const requiredParameter of requiredParameters) { if (!params[requiredParameter]) { throw new SDKError_js_1.SDKError(new errors_js_1.ValidationError(`Required parameter "${requiredParameter}" is missing.`)); } } const _config = config_js_1.config.get(); params.integrator ??= _config.integrator; params.order ??= _config.routeOptions?.order; params.slippage ??= _config.routeOptions?.slippage; params.referrer ??= _config.routeOptions?.referrer; params.fee ??= _config.routeOptions?.fee; params.allowBridges ??= _config.routeOptions?.bridges?.allow; params.denyBridges ??= _config.routeOptions?.bridges?.deny; params.preferBridges ??= _config.routeOptions?.bridges?.prefer; params.allowExchanges ??= _config.routeOptions?.exchanges?.allow; params.denyExchanges ??= _config.routeOptions?.exchanges?.deny; params.preferExchanges ??= _config.routeOptions?.exchanges?.prefer; for (const key of Object.keys(params)) { if (!params[key]) { delete params[key]; } } return await (0, request_js_1.request)(`${_config.apiUrl}/quote?${new URLSearchParams(params)}`, { signal: options?.signal, }); }; exports.getQuote = getQuote; const getRoutes = async (params, options) => { if (!(0, typeguards_js_1.isRoutesRequest)(params)) { throw new SDKError_js_1.SDKError(new errors_js_1.ValidationError('Invalid routes request.')); } const _config = config_js_1.config.get(); params.options = { integrator: _config.integrator, ..._config.routeOptions, ...params.options, }; return await (0, request_js_1.request)(`${_config.apiUrl}/advanced/routes`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(params), signal: options?.signal, }); }; exports.getRoutes = getRoutes; const getContractCallsQuote = async (params, options) => { const requiredParameters = [ 'fromChain', 'fromToken', 'fromAddress', 'toChain', 'toToken', 'contractCalls', ]; for (const requiredParameter of requiredParameters) { if (!params[requiredParameter]) { throw new SDKError_js_1.SDKError(new errors_js_1.ValidationError(`Required parameter "${requiredParameter}" is missing.`)); } } if (!(0, widget_types_1.isContractCallsRequestWithFromAmount)(params) && !(0, widget_types_1.isContractCallsRequestWithToAmount)(params)) { throw new SDKError_js_1.SDKError(new errors_js_1.ValidationError(`Required parameter "fromAmount" or "toAmount" is missing.`)); } const _config = config_js_1.config.get(); params.integrator ??= _config.integrator; params.slippage ??= _config.routeOptions?.slippage; params.referrer ??= _config.routeOptions?.referrer; params.fee ??= _config.routeOptions?.fee; params.allowBridges ??= _config.routeOptions?.bridges?.allow; params.denyBridges ??= _config.routeOptions?.bridges?.deny; params.preferBridges ??= _config.routeOptions?.bridges?.prefer; params.allowExchanges ??= _config.routeOptions?.exchanges?.allow; params.denyExchanges ??= _config.routeOptions?.exchanges?.deny; params.preferExchanges ??= _config.routeOptions?.exchanges?.prefer; return await (0, request_js_1.request)(`${_config.apiUrl}/quote/contractCalls`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(params), signal: options?.signal, }); }; exports.getContractCallsQuote = getContractCallsQuote; const getStepTransaction = async (step, options) => { if (!(0, typeguards_js_1.isStep)(step)) { console.warn('SDK Validation: Invalid Step', step); } return await (0, request_js_1.request)(`${config_js_1.config.get().apiUrl}/advanced/stepTransaction`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(step), signal: options?.signal, }); }; exports.getStepTransaction = getStepTransaction; const getStatus = async (params, options) => { if (!params.txHash) { throw new SDKError_js_1.SDKError(new errors_js_1.ValidationError('Required parameter "txHash" is missing.')); } const queryParams = new URLSearchParams(params); return await (0, request_js_1.request)(`${config_js_1.config.get().apiUrl}/status?${queryParams}`, { signal: options?.signal, }); }; exports.getStatus = getStatus; const getRelayerQuote = async (params, options) => { const requiredParameters = [ 'fromChain', 'fromToken', 'fromAddress', 'fromAmount', 'toChain', 'toToken', ]; for (const requiredParameter of requiredParameters) { if (!params[requiredParameter]) { throw new SDKError_js_1.SDKError(new errors_js_1.ValidationError(`Required parameter "${requiredParameter}" is missing.`)); } } const _config = config_js_1.config.get(); params.integrator ??= _config.integrator; params.order ??= _config.routeOptions?.order; params.slippage ??= _config.routeOptions?.slippage; params.referrer ??= _config.routeOptions?.referrer; params.fee ??= _config.routeOptions?.fee; params.allowBridges ??= _config.routeOptions?.bridges?.allow; params.denyBridges ??= _config.routeOptions?.bridges?.deny; params.preferBridges ??= _config.routeOptions?.bridges?.prefer; params.allowExchanges ??= _config.routeOptions?.exchanges?.allow; params.denyExchanges ??= _config.routeOptions?.exchanges?.deny; params.preferExchanges ??= _config.routeOptions?.exchanges?.prefer; for (const key of Object.keys(params)) { if (!params[key]) { delete params[key]; } } const result = await (0, request_js_1.request)(`${config_js_1.config.get().apiUrl}/relayer/quote?${new URLSearchParams(params)}`, { signal: options?.signal, }); if (result.status === 'error') { throw new baseError_js_1.BaseError(constants_js_1.ErrorName.ServerError, result.data.code, result.data.message); } return result.data; }; exports.getRelayerQuote = getRelayerQuote; const relayTransaction = async (params, options) => { const requiredParameters = [ 'typedData', 'transactionRequest', ]; for (const requiredParameter of requiredParameters) { if (!params[requiredParameter]) { throw new SDKError_js_1.SDKError(new errors_js_1.ValidationError(`Required parameter "${requiredParameter}" is missing.`)); } } const result = await (0, request_js_1.request)(`${config_js_1.config.get().apiUrl}/relayer/relay`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(params, (_, value) => { if (typeof value === 'bigint') { return value.toString(); } return value; }), signal: options?.signal, }); if (result.status === 'error') { throw new baseError_js_1.BaseError(constants_js_1.ErrorName.ServerError, result.data.code, result.data.message); } return result.data; }; exports.relayTransaction = relayTransaction; const getRelayedTransactionStatus = async (params, options) => { if (!params.taskId) { throw new SDKError_js_1.SDKError(new errors_js_1.ValidationError('Required parameter "taskId" is missing.')); } const { taskId, ...otherParams } = params; const queryParams = new URLSearchParams(otherParams); const result = await (0, request_js_1.request)(`${config_js_1.config.get().apiUrl}/relayer/status/${taskId}?${queryParams}`, { signal: options?.signal, }); if (result.status === 'error') { throw new baseError_js_1.BaseError(constants_js_1.ErrorName.ServerError, result.data.code, result.data.message); } return result.data; }; exports.getRelayedTransactionStatus = getRelayedTransactionStatus; const getChains = async () => { const response = await (0, withDedupe_js_1.withDedupe)(() => (0, request_js_1.request)(`https://openapi-test.openocean.finance/v3/widgetv2/chains`), { id: `${exports.getChains.name}` }); return convertChainData(response.data); }; exports.getChains = getChains; function convertChainData(data) { return data.map(chain => ({ key: chain.code, chainType: 'EVM', name: chain.name, coin: chain.symbol, id: Number(chain.chainId), mainnet: true, logoURI: chain.icon, tokenlistUrl: chain.tokenlistUrl, multicallAddress: chain.multicallAddress, relayerSupported: false, metamask: chain.metamask, nativeToken: chain.nativeToken, diamondAddress: chain.exchangeAddress, permit2: chain.permit2, permit2Proxy: chain.permit2Proxy, })); } const getTokens = async (params, options) => { if (params) { for (const key of Object.keys(params)) { if (!params[key]) { delete params[key]; } } } const urlSearchParams = new URLSearchParams(params).toString(); const response = await (0, withDedupe_js_1.withDedupe)(() => (0, request_js_1.request)(`${config_js_1.config.get().apiUrl}/tokens?${urlSearchParams}`, { signal: options?.signal, }), { id: `${exports.getTokens.name}.${urlSearchParams}` }); return response; }; exports.getTokens = getTokens; const getToken = async (chain, token, options) => { if (!chain) { throw new SDKError_js_1.SDKError(new errors_js_1.ValidationError('Required parameter "chain" is missing.')); } if (!token) { throw new SDKError_js_1.SDKError(new errors_js_1.ValidationError('Required parameter "token" is missing.')); } return await (0, request_js_1.request)(`${config_js_1.config.get().apiUrl}/token?${new URLSearchParams({ chain, token, })}`, { signal: options?.signal, }); }; exports.getToken = getToken; const getTools = async (params, options) => { if (params) { for (const key of Object.keys(params)) { if (!params[key]) { delete params[key]; } } } return await (0, request_js_1.request)(`${config_js_1.config.get().apiUrl}/tools?${new URLSearchParams(params)}`, { signal: options?.signal, }); }; exports.getTools = getTools; const getGasRecommendation = async (params, options) => { if (!params.chainId) { throw new SDKError_js_1.SDKError(new errors_js_1.ValidationError('Required parameter "chainId" is missing.')); } const url = new URL(`${config_js_1.config.get().apiUrl}/gas/suggestion/${params.chainId}`); if (params.fromChain) { url.searchParams.append('fromChain', params.fromChain); } if (params.fromToken) { url.searchParams.append('fromToken', params.fromToken); } return await (0, request_js_1.request)(url.toString(), { signal: options?.signal, }); }; exports.getGasRecommendation = getGasRecommendation; const getConnections = async (connectionRequest, options) => { const url = new URL(`${config_js_1.config.get().apiUrl}/connections`); const { fromChain, fromToken, toChain, toToken } = connectionRequest; if (fromChain) { url.searchParams.append('fromChain', fromChain); } if (fromToken) { url.searchParams.append('fromToken', fromToken); } if (toChain) { url.searchParams.append('toChain', toChain); } if (toToken) { url.searchParams.append('toToken', toToken); } const connectionRequestArrayParams = [ 'allowBridges', 'denyBridges', 'preferBridges', 'allowExchanges', 'denyExchanges', 'preferExchanges', ]; for (const parameter of connectionRequestArrayParams) { const connectionRequestArrayParam = connectionRequest[parameter]; if (connectionRequestArrayParam?.length) { for (const value of connectionRequestArrayParam) { url.searchParams.append(parameter, value); } } } return await (0, request_js_1.request)(url, options); }; exports.getConnections = getConnections; const getTransactionHistory = async ({ wallet, status, fromTimestamp, toTimestamp }, options) => { if (!wallet) { throw new SDKError_js_1.SDKError(new errors_js_1.ValidationError('Required parameter "wallet" is missing.')); } const _config = config_js_1.config.get(); const url = new URL(`${_config.apiUrl}/analytics/transfers`); url.searchParams.append('integrator', _config.integrator); url.searchParams.append('wallet', wallet); if (status) { url.searchParams.append('status', status); } if (fromTimestamp) { url.searchParams.append('fromTimestamp', fromTimestamp.toString()); } if (toTimestamp) { url.searchParams.append('toTimestamp', toTimestamp.toString()); } return await (0, request_js_1.request)(url, options); }; exports.getTransactionHistory = getTransactionHistory; //# sourceMappingURL=api.js.map