UNPKG

bitcore-wallet-service

Version:
174 lines 7.42 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.OneInchService = void 0; const crypto_wallet_core_1 = require("crypto-wallet-core"); const request = __importStar(require("request")); const config_1 = __importDefault(require("../config")); const defaults_1 = require("../lib/common/defaults"); const clienterror_1 = require("../lib/errors/clienterror"); const logger_1 = __importDefault(require("../lib/logger")); const server_1 = require("../lib/server"); class OneInchService { constructor(storage) { this.request = request; this.storage = storage; } oneInchGetCredentials() { if (!config_1.default.oneInch) throw new Error('1Inch missing credentials'); const credentials = { API: config_1.default.oneInch.api, API_KEY: config_1.default.oneInch.apiKey, referrerAddress: config_1.default.oneInch.referrerAddress, referrerFee: config_1.default.oneInch.referrerFee }; return credentials; } oneInchGetReferrerFee(req) { return new Promise((resolve, reject) => { const credentials = this.oneInchGetCredentials(); const referrerFee = credentials.referrerFee; resolve({ referrerFee }); }); } oneInchGetSwap(req) { return new Promise((resolve, reject) => { const credentials = this.oneInchGetCredentials(); if (!(0, server_1.checkRequired)(req.body, [ 'fromTokenAddress', 'toTokenAddress', 'amount', 'fromAddress', 'slippage', 'destReceiver' ])) { return reject(new clienterror_1.ClientError('oneInchGetSwap request missing arguments')); } const headers = { 'Content-Type': 'application/json' }; let qs = []; qs.push('fromTokenAddress=' + req.body.fromTokenAddress); qs.push('toTokenAddress=' + req.body.toTokenAddress); qs.push('amount=' + req.body.amount); qs.push('fromAddress=' + req.body.fromAddress); qs.push('slippage=' + req.body.slippage); qs.push('destReceiver=' + req.body.destReceiver); if (credentials.referrerFee) qs.push('fee=' + credentials.referrerFee); if (credentials.referrerAddress) qs.push('referrerAddress=' + credentials.referrerAddress); const chainNetwork = `${req.params?.['chain']?.toUpperCase()}_mainnet` || 'eth_mainnet'; const chainId = crypto_wallet_core_1.Constants.EVM_CHAIN_NETWORK_TO_CHAIN_ID[chainNetwork]; const URL = `${credentials.API}/v5.2/${chainId}/swap/?${qs.join('&')}`; this.request.get(URL, { headers, json: true }, (err, data) => { if (err) { return reject(err.body ?? err); } else { return resolve(data.body); } }); }); } oneInchGetTokens(req) { return new Promise((resolve, reject) => { const credentials = this.oneInchGetCredentials(); const chain = req.params?.['chain'] || 'eth'; const cacheKey = `oneInchTokens:${chain}`; this.storage.checkAndUseGlobalCache(cacheKey, defaults_1.Defaults.ONE_INCH_CACHE_DURATION, (err, values, oldvalues) => { if (err) logger_1.default.warn('Could not get stored tokens list', err); if (values) return resolve(values); const headers = { 'Content-Type': 'application/json', Accept: 'application/json', Authorization: 'Bearer ' + credentials.API_KEY, }; const chainIdMap = { eth: 1, matic: 137, pol: 137, arb: 42161, base: 8453, op: 10, }; const chainId = chainIdMap[chain]; const URL = `${credentials.API}/v5.2/${chainId}/tokens`; this.request.get(URL, { headers, json: true }, (err, data) => { if (err) { logger_1.default.warn('An error occured while retrieving the token list', err); if (oldvalues) { logger_1.default.warn('Using old cached values'); return resolve(oldvalues); } return reject(err.body ?? err); } else if (data?.statusCode === 429 && oldvalues) { return resolve(oldvalues); } else { if (!data?.body?.tokens) { if (oldvalues) { logger_1.default.warn('No token list available... using old cached values'); return resolve(oldvalues); } return reject(new Error('Could not get tokens list')); } this.storage.storeGlobalCache(cacheKey, data.body.tokens, err => { if (err) { logger_1.default.warn('Could not store tokens list'); } return resolve(data.body.tokens); }); } }); }); }); } } exports.OneInchService = OneInchService; //# sourceMappingURL=oneInch.js.map