crypto-janitor
Version:
The Crypto Janitor provides a simple interface for fetching and cleaning crypto account data.
138 lines (132 loc) • 3.76 kB
text/typescript
/* eslint-disable max-len */
/* eslint-disable indent */
require("dotenv").config();
import {
Transaction,
Order,
BaseConnection,
CcxtConnection,
CsvConnection,
} from "./target.types";
import {
Bittrex,
Celsius,
Coinbase,
CoinbasePro,
Etherscan,
Kucoin,
Nexo,
} from "./targets";
// Export Connections
export {
Bittrex,
Celsius,
Coinbase,
CoinbasePro,
Etherscan,
Kucoin,
Nexo,
BaseConnection,
CcxtConnection,
CsvConnection,
};
// Export Types
export { Transaction, Order };
/**
* @description Return initialized connection instance
* @param {string} name - Name of exchange
* @param {string} type - Type of connection
* @param {any} params - Params for connection instance
* @return {Promise<any>} response of test
*/
export const resolveConnection = async (
name: string,
type: string,
params: any
): Promise<any> => {
if (name === undefined) {
return { error: "Must specify the name of the connection." };
}
if (type === undefined) {
return { error: "Must specify the type of the connection." };
}
let connection: any = null;
if (type === "api") {
if (params.credentials === undefined) {
return { error: `Must supply 'credentials' for ${name} in params` };
}
switch (name) {
case "bittrex":
connection = new Bittrex(params.credentials);
break;
case "celsius":
connection = new Celsius(params.credentials);
break;
case "coinbase":
connection = new Coinbase(params.credentials);
break;
case "coinbasepro":
connection = new CoinbasePro(params.credentials);
break;
case "kucoin":
connection = new Kucoin(params.credentials);
break;
default:
break;
}
if (connection === null) {
return {
error: `Connecting to ${name} via API is not yet supported.`,
};
}
} else if (type === "address") {
if (params.address === undefined) {
return {
error: "Must supply address for ledger connection in params",
};
}
if (params.chain === undefined) {
return {
error: "Must supply 'chain' for ledger connection in params",
};
}
switch (params.chain) {
case "ethereum":
connection = new Etherscan(params.address, params.apiKey);
break;
default:
break;
}
if (connection === null) {
return {
error: `Connecting to ${params.chain} via ledger is not yet supported.`,
};
}
} else if (type === "csv") {
if (params.fileName === undefined) {
return {
error: "Must supply 'fileName' for csv connection in params",
};
}
switch (name) {
case "nexo":
connection = new Nexo(params.fileName, params.loadFileContents);
break;
default:
break;
}
if (connection === null) {
return {
error: `Connecting to ${name} via CSV is not yet supported.`,
};
}
} else {
return { error: `Connecting with ${type} is not yet supported.` };
}
try {
await connection.initialize();
return { status: "success", connection };
} catch (error) {
return { status: "failure", error: error.message };
}
};