1 import { createHash, Hash } from 'crypto';
2 import * as csvParse from 'csv-parse';
3 import { Service } from 'typedi';
6 export class CsvParser {
7 public async parse(buffer: Buffer): Promise<ICsvRow[]> {
8 const records = await this.parseCsv(buffer);
11 (columns: string[]): ICsvRow => {
13 hash: this.getHash(columns[0]),
14 lastSeen: new Date(`${columns[2]}Z`).getTime(),
15 occurrences: parseInt(columns[1], 10),
21 protected async parseCsv(buffer: Buffer): Promise<string[][]> {
22 return new Promise<string[][]>(
24 resolve: (rows: string[][]) => void,
25 reject: (err: Error) => void,
30 (err: Error | undefined, records: string[][] | undefined) => {
42 protected getHash(input: string): string {
43 return createHash('sha256')
49 export interface ICsvRow {