ioUtils.js
1 import fs from 'fs'; 2 import dotenv from 'dotenv'; 3 import path from 'path'; 4 import process from 'node:process'; 5 6 const PATH_TO_Credentials = 'Assets/.env'; 7 const PATH_TO_BLOCK = 'Assets/toBlock.txt'; 8 const PATH_ALREADY_BLOCKED = 'Assets/alreadyBlocked.txt'; 9 10 // Load personal credentials from .env 11 export function loadPersonalCredentials() { 12 dotenv.config({ path: path.resolve(PATH_TO_Credentials) }); 13 const { IG_USERNAME, IG_PASSWORD, IG_DELAY } = process.env; 14 return { 15 username: IG_USERNAME.trim(), 16 password: IG_PASSWORD.trim(), 17 delay: IG_DELAY, 18 }; 19 } 20 21 export function checkLocalFilesPermissions(path) { 22 console.info( 23 'Checking if local files exits and have read/write permissions', 24 ); 25 try { 26 fs.accessSync(path, fs.constants.R_OK | fs.constants.W_OK); 27 console.info(`${path} File is readable and writable`); 28 return true; 29 } catch (err) { 30 if (err.code === 'ENOENT') { 31 console.error('File does not exist'); 32 } else { 33 console.error('No read/write access'); 34 } 35 return false; 36 } 37 } 38 39 export function readLocalFiles() { 40 let accountsToBlock = []; 41 let alreadyBlocked = []; 42 43 // Read a list of accounts to block from toBlock.txt & list of already blocked accounts from alreadyBlocked.txt 44 if (checkLocalFilesPermissions(PATH_TO_BLOCK)) { 45 accountsToBlock = fs.readFileSync(PATH_TO_BLOCK, 'utf-8').split('\n'); 46 // the already blocked file is not essential! 47 if (checkLocalFilesPermissions(PATH_ALREADY_BLOCKED)) { 48 alreadyBlocked = fs 49 .readFileSync(PATH_ALREADY_BLOCKED, 'utf-8') 50 .split(','); 51 } 52 return { accountsToBlock, alreadyBlocked }; 53 } else { 54 throw Error('Local files has not been found!'); 55 } 56 } 57 58 export function appendDataToFile(data) { 59 fs.appendFileSync(PATH_ALREADY_BLOCKED, data); 60 } 61 62 export function removeCommon(toBlock, alreadyBlocked) { 63 return toBlock 64 .map((account) => account.trim()) 65 .filter((account) => !alreadyBlocked.includes(account)); 66 }