Skip to content

Commit

Permalink
feat: support coinlist trades import
Browse files Browse the repository at this point in the history
  • Loading branch information
Zahrun committed Dec 12, 2022
1 parent 97b3986 commit f44d132
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 0 deletions.
58 changes: 58 additions & 0 deletions src/parsers/trades/coinlist/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import { getCSVData } from '../../';
import { EXCHANGES, IImport, IPartialTrade, ITrade } from '../../../types';
import { createID } from '../../utils';

interface ICoinList {
Date: string;
Description: string;
Asset: string;
Amount: string;
Balance: string;
}

export default async function processData(importDetails: IImport): Promise<ITrade[]> {
const data: ICoinList[] = await getCSVData(importDetails.data) as ICoinList[];
const internalFormat: ITrade[] = [];
if (data.length < 1) {
return internalFormat;
}
let splitTrade = data[0];
let lineContinuity = 0;
for (const trade of data) {
console.log(trade);
const tradeToAdd: IPartialTrade = {
date : new Date(trade.Date).getTime(),
exchange : EXCHANGES.CoinList,
};
let descriptionSplit = trade.Description.split(' ');
let type = descriptionSplit[0];
if (type === 'Sold' || type === 'Bought') {
switch (lineContinuity) {
case 0: {
splitTrade = trade;
lineContinuity = 1;
continue;
}
case 1: {
lineContinuity = 0;
tradeToAdd.boughtCurrency = splitTrade.Asset;
tradeToAdd.soldCurrency = trade.Asset;
tradeToAdd.amountSold = Math.abs(parseFloat(trade.Amount));
tradeToAdd.rate = Math.abs(parseFloat(trade.Amount) / parseFloat(splitTrade.Amount));
tradeToAdd.ID = createID(tradeToAdd);
internalFormat.push(tradeToAdd as ITrade);
continue;
}
default: {
console.error(`Error parsing CoinList trade lineContinuity=${lineContinuity}`);
break;
}
}
break;
} else {
console.log(`Ignored CoinList trade of type ${type}`);
continue;
}
}
return internalFormat;
}
2 changes: 2 additions & 0 deletions src/parsers/trades/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { EXCHANGES, ExchangesTradeHeaders, IImport, ITrade } from '@types';
import * as crypto from 'crypto';
import binanceParser from './binance';
import bittrexParser from './bittrex';
import coinListParser from './coinlist';
import geminiParser from './gemini';
import krakenParser from './kraken';
import poloniexParser from './poloniex';
Expand All @@ -10,6 +11,7 @@ import revolutParser from './revolut';
const parserMapping: {[key in EXCHANGES]: any} = {
[EXCHANGES.Binance]: binanceParser,
[EXCHANGES.Bittrex]: bittrexParser,
[EXCHANGES.CoinList]: coinListParser,
[EXCHANGES.Gemini]: geminiParser,
[EXCHANGES.Kraken]: krakenParser,
[EXCHANGES.Poloniex]: poloniexParser,
Expand Down
2 changes: 2 additions & 0 deletions src/types/locations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ export type Location = EXCHANGES | string;

export enum EXCHANGES {
Bittrex = 'BITTREX',
CoinList = 'COINLIST',
Gemini= 'GEMINI',
Poloniex = 'POLONIEX',
Kraken = 'KRAKEN',
Expand All @@ -15,6 +16,7 @@ export enum IncomeImportTypes {

export enum ExchangesTradeHeaders {
BITTREX = '07230399aaa8d1f15e88e38bd43a01c5ef1af6c1f9131668d346e196ff090d80',
COINLIST = 'a700f71b8629872a0d8d5320612aedcb53f58cc55937eb146124a14360d991f1',
GEMINI = '996edee25db7f3d1dd16c83c164c6cff8c6d0f5d6b3aafe6d1700f2a830f6c9e',
POLONIEX = 'd7484d726e014edaa059c0137ac91183a7eaa9ee5d52713aa48bb4104b01afb0',
KRAKEN = '85bf27e799cc0a30fe5b201cd6a4724e4a52feb433f41a1e8b046924e3bf8dc5',
Expand Down

0 comments on commit f44d132

Please sign in to comment.