@qso-soft/shared
Version:
Shared library for QSO-soft
122 lines • 4.72 kB
JavaScript
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