/ utils / ioUtils.js
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  }