UNPKG

@qso-soft/shared

Version:

Shared library for QSO-soft

122 lines 4.72 kB
import { sep } from 'path'; import { INPUTS_CSV_FOLDER, NUMBER_ONLY_REGEXP, OUTPUTS_JSON_FOLDER } from '../../constants'; import { decryptKey, encryptKey } from '../cryptography-handlers'; import { convertAndWriteToJSON, convertToCSV, printResults } from '../file-handlers'; import { getFileNameWithPrefix } from '../msg-to-template'; import { initLocalLogger } from '../show-logs'; const PRIV_KEY_LENGTH = 70; export const formatId = (inputString) => { const parts = inputString.split(NUMBER_ONLY_REGEXP); const isNumberPartCorrect = !isNaN(Number(parts[0])); const isPartsSplittedCorrectly = parts.length >= 1 && isNumberPartCorrect; if (isPartsSplittedCorrectly) { const numberPart = Number(parts[0]); const formattedNumberPart = numberPart.toString().padStart(4, '0'); const namePart = parts.slice(1).join('').trim(); return `${formattedNumberPart}${namePart ? ' ' + namePart : ''}`; } return ''; }; export const prepareRowFromCSV = ({ walletData, logger, client }) => { const { id, privKey, ...restRow } = walletData; let decryptedPrivKey = privKey; if (privKey.length > PRIV_KEY_LENGTH) { decryptedPrivKey = decryptKey(privKey); } const { walletAddress } = new client(decryptedPrivKey, logger); return { ...restRow, privKey, id: formatId(id), walletAddress, }; }; export const prepareFromCsv = async ({ logger, projectName, client }) => { const fileName = getFileNameWithPrefix(projectName, 'wallets'); const logTemplate = { action: 'prepareFromCsv', status: 'in progress', }; try { logger.info(`Preparing data from ${fileName}.csv...`, logTemplate); const inputName = `${fileName}.csv`; const inputPath = `${INPUTS_CSV_FOLDER}${sep}${inputName}`; const outputName = `${fileName}.json`; const outputPath = `${OUTPUTS_JSON_FOLDER}${sep}${outputName}`; const data = (await convertAndWriteToJSON({ inputPath, outputPath, logger, withSaving: true, })); const idOrPrivKeyIsEmpty = data.some(({ id, privKey }) => !id || !privKey); if (idOrPrivKeyIsEmpty) { logger.error('Unable to create rows, some ID or PrivKey is empty', { ...logTemplate, status: 'failed', }); return; } const dataToSave = data.map((walletData) => prepareRowFromCSV({ client, walletData, logger })); if (dataToSave.length !== data.length) { logger.error('Unable to prepare all data correctly', { ...logTemplate, status: 'failed', }); return; } const dataToSaveInCsv = dataToSave.map(({ id, walletAddress, privKey, okxAddress, secondAddress, proxy_type, proxy }) => { let encryptedPrivKey = privKey; if (privKey.length <= PRIV_KEY_LENGTH) { encryptedPrivKey = encryptKey(privKey); } return { id, walletAddress, privKey: encryptedPrivKey, okxAddress, secondAddress, proxy_type, proxy, }; }); const dataToSaveInJson = dataToSaveInCsv.map((data, index) => ({ ...data, index, })); const stringifiedDataForJson = JSON.stringify(dataToSaveInJson, null, 2); printResults({ data: stringifiedDataForJson, fileName: outputName, outputPath: OUTPUTS_JSON_FOLDER }); if (dataToSaveInCsv.length) { const csvStringData = convertToCSV(dataToSaveInCsv); printResults({ data: csvStringData, fileName: inputName, outputPath: INPUTS_CSV_FOLDER }); } return dataToSaveInJson; } catch (err) { const e = err; logger.error(`Unable to prepare data from CSV: \n${e.message}`, { ...logTemplate, status: 'failed', }); } return; }; export const prepareWalletsData = async ({ logsFolderName, ...restProps }) => { const logger = initLocalLogger(logsFolderName, 'prepare-wallets-data'); logger.setLoggerMeta({ moduleName: 'PrepareWalletsData' }); const logTemplate = { action: 'prepareWalletsData', status: 'in progress', }; try { return ((await prepareFromCsv({ logger, ...restProps, })) || []); } catch (err) { logger.error('Unable to prepare wallets data', { ...logTemplate, status: 'failed' }); } return []; }; //# sourceMappingURL=prepare-wallets-data.js.map