gologin-commonjs 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/babel.config.json +17 -0
  2. package/dist/README.md +163 -0
  3. package/dist/example.js +35 -0
  4. package/dist/examples/example-amazon-cloud-browser.js +52 -0
  5. package/dist/examples/example-amazon-headless.js +56 -0
  6. package/dist/examples/example-amazon.js +53 -0
  7. package/dist/examples/example-create-custom-profile.js +42 -0
  8. package/dist/examples/example-create-profile.js +43 -0
  9. package/dist/examples/example-custom-args.js +34 -0
  10. package/dist/examples/example-fast-profile-settings.js +59 -0
  11. package/dist/examples/example-gmail.js +82 -0
  12. package/dist/examples/example-iphey.js +19 -0
  13. package/dist/examples/example-local-profile.js +28 -0
  14. package/dist/examples/example-login-walmart.js +38 -0
  15. package/dist/examples/example-startremote.js +29 -0
  16. package/dist/examples/example-stopremote.js +22 -0
  17. package/dist/examples/example-timezone.js +51 -0
  18. package/dist/fonts.js +3339 -0
  19. package/dist/fonts_config +104 -0
  20. package/dist/gologin-browser-ext.zip +0 -0
  21. package/dist/gologin_zeroprofile.b64 +1 -0
  22. package/dist/index.d.ts +61 -0
  23. package/dist/profile_export_example.csv +2 -0
  24. package/dist/run.sh +1 -0
  25. package/dist/src/bookmarks/utils.js +23 -0
  26. package/dist/src/browser/browser-api.js +106 -0
  27. package/dist/src/browser/browser-checker.js +336 -0
  28. package/dist/src/browser/browser-user-data-manager.js +306 -0
  29. package/dist/src/cookies/cookies-manager.js +164 -0
  30. package/dist/src/extensions/extensions-extractor.js +50 -0
  31. package/dist/src/extensions/extensions-manager.js +301 -0
  32. package/dist/src/extensions/user-extensions-manager.js +246 -0
  33. package/dist/src/gologin-api.js +103 -0
  34. package/dist/src/gologin.js +1319 -0
  35. package/dist/src/profile/profile-archiver.js +68 -0
  36. package/dist/src/profile/profile-directories-to-remove.js +71 -0
  37. package/dist/src/utils/browser.js +59 -0
  38. package/dist/src/utils/common.js +60 -0
  39. package/dist/src/utils/constants.js +7 -0
  40. package/dist/src/utils/utils.js +53 -0
  41. package/dist/test.html +1 -0
  42. package/dist/zero_profile.zip +0 -0
  43. package/gologin/.eslintrc.json +290 -0
  44. package/gologin/.sentry-native/a65389b2-9a7d-41ed-7de5-95c4570f0d3d.run.lock +0 -0
  45. package/gologin/README.md +163 -0
  46. package/gologin/example.js +36 -0
  47. package/gologin/examples/example-amazon-cloud-browser.js +44 -0
  48. package/gologin/examples/example-amazon-headless.js +50 -0
  49. package/gologin/examples/example-amazon.js +47 -0
  50. package/gologin/examples/example-create-custom-profile.js +39 -0
  51. package/gologin/examples/example-create-profile.js +40 -0
  52. package/gologin/examples/example-custom-args.js +34 -0
  53. package/gologin/examples/example-fast-profile-settings.js +69 -0
  54. package/gologin/examples/example-gmail.js +67 -0
  55. package/gologin/examples/example-iphey.js +17 -0
  56. package/gologin/examples/example-local-profile.js +26 -0
  57. package/gologin/examples/example-login-walmart.js +35 -0
  58. package/gologin/examples/example-startremote.js +25 -0
  59. package/gologin/examples/example-stopremote.js +20 -0
  60. package/gologin/examples/example-timezone.js +44 -0
  61. package/gologin/fonts.js +3339 -0
  62. package/gologin/fonts_config +104 -0
  63. package/gologin/gologin-browser-ext.zip +0 -0
  64. package/gologin/gologin_zeroprofile.b64 +1 -0
  65. package/gologin/index.d.ts +61 -0
  66. package/gologin/package.json +49 -0
  67. package/gologin/profile_export_example.csv +2 -0
  68. package/gologin/run.sh +1 -0
  69. package/gologin/src/bookmarks/utils.js +16 -0
  70. package/gologin/src/browser/browser-api.js +95 -0
  71. package/gologin/src/browser/browser-checker.js +392 -0
  72. package/gologin/src/browser/browser-user-data-manager.js +335 -0
  73. package/gologin/src/cookies/cookies-manager.js +189 -0
  74. package/gologin/src/extensions/extensions-extractor.js +56 -0
  75. package/gologin/src/extensions/extensions-manager.js +384 -0
  76. package/gologin/src/extensions/user-extensions-manager.js +295 -0
  77. package/gologin/src/gologin-api.js +110 -0
  78. package/gologin/src/gologin.js +1553 -0
  79. package/gologin/src/profile/profile-archiver.js +86 -0
  80. package/gologin/src/profile/profile-directories-to-remove.js +75 -0
  81. package/gologin/src/utils/browser.js +62 -0
  82. package/gologin/src/utils/common.js +76 -0
  83. package/gologin/src/utils/constants.js +1 -0
  84. package/gologin/src/utils/utils.js +49 -0
  85. package/gologin/test.html +1 -0
  86. package/gologin/zero_profile.zip +0 -0
  87. package/package.json +46 -0
  88. package/tes.js +35 -0
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.decompressProfile = exports.checkProfileArchiveIsValid = exports.archiveProfile = void 0;
7
+ var _admZip = _interopRequireDefault(require("adm-zip"));
8
+ var _fs = require("fs");
9
+ var _path = _interopRequireDefault(require("path"));
10
+ var _profileDirectoriesToRemove = require("./profile-directories-to-remove.js");
11
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
+ const {
13
+ access
14
+ } = _fs.promises;
15
+ const archiveProfile = async (profileFolder = '', tryAgain = true) => {
16
+ const folderExists = await access(profileFolder).then(() => true, () => false);
17
+ if (!folderExists) {
18
+ throw new Error('Invalid profile folder path: ' + profileFolder);
19
+ }
20
+ const archive = new _admZip.default();
21
+ archive.addLocalFolder(_path.default.join(profileFolder, 'Default'), 'Default');
22
+ try {
23
+ archive.addLocalFile(_path.default.join(profileFolder, 'First Run'));
24
+ } catch (e) {
25
+ archive.addFile('First Run', Buffer.from(''));
26
+ }
27
+ const dirsToRemove = (0, _profileDirectoriesToRemove.getDirectoriesForArchiver)();
28
+ dirsToRemove.forEach(entry => archive.deleteFile(entry));
29
+ const archiveIsValid = checkProfileArchiveIsValid(archive);
30
+ if (tryAgain && !archiveIsValid) {
31
+ await new Promise(r => setTimeout(() => r(), 300));
32
+ return archiveProfile(profileFolder, false);
33
+ }
34
+ return new Promise((resolve, reject) => archive.toBuffer(resolve, reject));
35
+ };
36
+ exports.archiveProfile = archiveProfile;
37
+ const decompressProfile = async (zipPath = '', profileFolder = '') => {
38
+ const zipExists = await access(zipPath).then(() => true, () => false);
39
+ if (!zipExists) {
40
+ throw new Error('Invalid zip path: ' + zipPath);
41
+ }
42
+ const archive = new _admZip.default(zipPath);
43
+ archive.getEntries().forEach(elem => {
44
+ if (!elem.isDirectory && (elem.entryName.includes('RunningChromeVersion') || elem.entryName.includes('SingletonLock') || elem.entryName.includes('SingletonSocket') || elem.entryName.includes('SingletonCookie'))) {
45
+ archive.deleteFile(elem);
46
+ }
47
+ });
48
+ archive.extractAllTo(profileFolder, true);
49
+ };
50
+ exports.decompressProfile = decompressProfile;
51
+ const checkProfileArchiveIsValid = zipObject => {
52
+ if (!zipObject) {
53
+ throw new Error('No zip object provided');
54
+ }
55
+ return zipObject.getEntries().map(elem => {
56
+ if (elem.isDirectory) {
57
+ return false;
58
+ }
59
+ return elem.entryName.includes('Preferences') || elem.entryName.includes('Cookies');
60
+ }).filter(Boolean).length >= 2;
61
+ };
62
+ exports.checkProfileArchiveIsValid = checkProfileArchiveIsValid;
63
+ const flatArray = (array = []) => array.map(elem => {
64
+ if (Array.isArray(elem)) {
65
+ return flatArray(elem).flat();
66
+ }
67
+ return elem;
68
+ }).flat().filter(Boolean);
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getDirectoriesToDeleteForNode = exports.getDirectoriesForArchiver = void 0;
7
+ const DEFAULT_FOLDER_USELESS_FILE = [{
8
+ name: 'Cache',
9
+ subs: [],
10
+ isDirectory: true
11
+ }, {
12
+ name: 'fonts_config',
13
+ subs: [],
14
+ isDirectory: false
15
+ }, {
16
+ name: 'Service Worker',
17
+ subs: [],
18
+ isDirectory: true
19
+ }, {
20
+ name: 'Code Cache',
21
+ subs: [],
22
+ isDirectory: true
23
+ }, {
24
+ name: 'Extensions',
25
+ subs: [],
26
+ isDirectory: true
27
+ }, {
28
+ name: 'IndexedDB',
29
+ subs: [],
30
+ isDirectory: true
31
+ }, {
32
+ name: 'fonts_config',
33
+ subs: [],
34
+ isDirectory: true
35
+ }, {
36
+ name: 'DawnCache',
37
+ subs: [],
38
+ isDirectory: true
39
+ }, {
40
+ name: 'GPUCache',
41
+ subs: [],
42
+ isDirectory: true
43
+ }];
44
+ const getDirectoriesToDeleteForNode = (routerSlash = '/') => DEFAULT_FOLDER_USELESS_FILE.reduce((res, el) => {
45
+ const basePath = routerSlash + 'Default' + routerSlash + el.name;
46
+ if (el.subs.length) {
47
+ el.subs.forEach(sub => res.push(basePath + routerSlash + sub));
48
+ } else {
49
+ res.push(basePath);
50
+ }
51
+ return res;
52
+ }, []);
53
+ exports.getDirectoriesToDeleteForNode = getDirectoriesToDeleteForNode;
54
+ const getDirectoriesForArchiver = () => DEFAULT_FOLDER_USELESS_FILE.reduce((res, el) => {
55
+ const {
56
+ name,
57
+ subs,
58
+ isDirectory
59
+ } = el;
60
+ const basePath = 'Default/' + name;
61
+ if (subs.length) {
62
+ subs.forEach(sub => {
63
+ const resPath = basePath + '/' + (isDirectory ? sub + '/' : sub);
64
+ res.push(resPath);
65
+ });
66
+ } else {
67
+ res.push(basePath + (isDirectory ? '/' : ''));
68
+ }
69
+ return res;
70
+ }, []);
71
+ exports.getDirectoriesForArchiver = getDirectoriesForArchiver;
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.checkAutoLang = void 0;
7
+ const checkAutoLang = (profileData, timezoneCheckResult) => {
8
+ if (!profileData.autoLang) {
9
+ return checkBrowserLang(profileData);
10
+ }
11
+ let timezoneLang = '';
12
+ const {
13
+ country: timezoneCountry = '',
14
+ languages
15
+ } = timezoneCheckResult || {};
16
+ if (languages) {
17
+ const [firstDetectedLangLocale] = languages.split(',');
18
+ timezoneLang = `${firstDetectedLangLocale}-${timezoneCountry}` || '';
19
+ let resultLangsArr = [];
20
+ const [lang = '', country = ''] = timezoneLang.split('-');
21
+ if (country) {
22
+ resultLangsArr.push([lang, country].join('-'));
23
+ }
24
+ resultLangsArr.push(lang, 'en-US', 'en');
25
+ resultLangsArr = [...new Set(resultLangsArr)];
26
+ const gologinLangsArr = [];
27
+ const result = resultLangsArr.reduce((acc, cur, index) => {
28
+ if (!index) {
29
+ acc += `${cur},`;
30
+ gologinLangsArr.push(cur);
31
+ return acc;
32
+ }
33
+ const qualityParam = 10 - index;
34
+ if (qualityParam > 0) {
35
+ const separator = resultLangsArr.length - index < 2 ? '' : ',';
36
+ gologinLangsArr.push(cur);
37
+ acc += `${cur};q=${Number(qualityParam * 0.1).toFixed(1)}${separator}`;
38
+ }
39
+ return acc;
40
+ }, '');
41
+ [profileData.browserLang] = resultLangsArr;
42
+ profileData.languages = gologinLangsArr.join(',');
43
+ profileData.langHeader = result;
44
+ profileData.navigator.language = result;
45
+ return profileData.browserLang;
46
+ }
47
+ return checkBrowserLang(profileData);
48
+ };
49
+ exports.checkAutoLang = checkAutoLang;
50
+ const checkBrowserLang = (profileData, defaultLocale = 'en-US') => {
51
+ if (profileData.langHeader) {
52
+ return profileData.browserLang;
53
+ }
54
+ profileData.browserLang = defaultLocale;
55
+ profileData.languages = defaultLocale;
56
+ profileData.langHeader = defaultLocale;
57
+ profileData.navigator.language = defaultLocale;
58
+ return defaultLocale;
59
+ };
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getOsAdvanced = exports.getOS = exports.composeExtractionPromises = exports.USER_EXTENSIONS_PATH = exports.CHROME_EXTENSIONS_PATH = exports.API_URL = void 0;
7
+ var _child_process = require("child_process");
8
+ var _os = require("os");
9
+ var _path = require("path");
10
+ var _util = require("util");
11
+ var _extensionsExtractor = require("../extensions/extensions-extractor.js");
12
+ const API_URL = exports.API_URL = 'https://api.gologin.com';
13
+ const HOMEDIR = (0, _os.homedir)();
14
+ const CHROME_EXT_DIR_NAME = 'chrome-extensions';
15
+ const EXTENSIONS_PATH = (0, _path.join)(HOMEDIR, '.gologin', 'extensions');
16
+ const CHROME_EXTENSIONS_PATH = (0, _path.join)(EXTENSIONS_PATH, CHROME_EXT_DIR_NAME);
17
+ const USER_EXTENSIONS_PATH = (0, _path.join)(HOMEDIR, '.gologin', 'extensions', 'user-extensions');
18
+ const composeExtractionPromises = (filteredArchives, destPath = CHROME_EXTENSIONS_PATH) => filteredArchives.map(extArchivePath => {
19
+ const [archiveName = ''] = extArchivePath.split(_path.sep).reverse();
20
+ const [destFolder] = archiveName.split('.');
21
+ return (0, _extensionsExtractor.extractExtension)(extArchivePath, (0, _path.join)(destPath, destFolder)).then(() => (0, _extensionsExtractor.deleteExtensionArchive)(extArchivePath));
22
+ });
23
+ const getMacArmSpec = async () => {
24
+ const doExec = (0, _util.promisify)(_child_process.exec);
25
+ const {
26
+ stdout
27
+ } = await doExec('sysctl machdep.cpu');
28
+ const regExp = /Apple M\d/;
29
+ const [match] = stdout.match(regExp);
30
+ const [_, armVersion] = match.split(' ');
31
+ return armVersion;
32
+ };
33
+ const getOsAdvanced = async () => {
34
+ const os = getOS();
35
+ if (!['mac', 'macM1'].includes(os)) {
36
+ return {
37
+ os,
38
+ osSpec: ''
39
+ };
40
+ }
41
+ const osSpec = await getMacArmSpec();
42
+ return {
43
+ os: 'mac',
44
+ osSpec
45
+ };
46
+ };
47
+ const getOS = () => {
48
+ if (process.platform === 'win32') {
49
+ return 'win';
50
+ }
51
+ if (process.platform === 'darwin') {
52
+ return process.arch === 'arm64' ? 'macM1' : 'mac';
53
+ }
54
+ return 'lin';
55
+ };
56
+ const _composeExtractionPromises = exports.composeExtractionPromises = composeExtractionPromises;
57
+ const _getOS = exports.getOS = getOS;
58
+ const _getOsAdvanced = exports.getOsAdvanced = getOsAdvanced;
59
+ const _USER_EXTENSIONS_PATH = exports.USER_EXTENSIONS_PATH = USER_EXTENSIONS_PATH;
60
+ const _CHROME_EXTENSIONS_PATH = exports.CHROME_EXTENSIONS_PATH = CHROME_EXTENSIONS_PATH;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.STORAGE_GATEWAY_BASE_URL = void 0;
7
+ const STORAGE_GATEWAY_BASE_URL = exports.STORAGE_GATEWAY_BASE_URL = 'https://files-gateway.gologin.com';
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.isPortReachable = exports.get = exports.findLatestBrowserVersionDirectory = void 0;
7
+ var _nodeFs = require("node:fs");
8
+ var _nodeNet = _interopRequireDefault(require("node:net"));
9
+ var _nodePath = require("node:path");
10
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
+ const get = (value, path, defaultValue) => String(path).split('.').reduce((acc, val) => {
12
+ try {
13
+ acc = acc[val] ? acc[val] : defaultValue;
14
+ } catch (e) {
15
+ return defaultValue;
16
+ }
17
+ return acc;
18
+ }, value);
19
+ exports.get = get;
20
+ const isPortReachable = port => new Promise(resolve => {
21
+ const checker = _nodeNet.default.createServer().once('error', () => {
22
+ resolve(false);
23
+ }).once('listening', () => checker.once('close', () => resolve(true)).close()).listen(port);
24
+ });
25
+ exports.isPortReachable = isPortReachable;
26
+ const findLatestBrowserVersionDirectory = browserPath => {
27
+ const folderContents = (0, _nodeFs.readdirSync)(browserPath);
28
+ const directories = folderContents.filter(file => (0, _nodeFs.statSync)((0, _nodePath.join)(browserPath, file)).isDirectory());
29
+ const {
30
+ folderName,
31
+ version
32
+ } = directories.reduce((newest, currentFolderName) => {
33
+ const match = currentFolderName.match(/\d+/);
34
+ if (match) {
35
+ const findedVersion = parseInt(match[0], 10);
36
+ if (findedVersion > newest.version) {
37
+ return {
38
+ folderName: currentFolderName,
39
+ version: findedVersion
40
+ };
41
+ }
42
+ }
43
+ return newest;
44
+ }, {
45
+ folderName: '',
46
+ version: 0
47
+ });
48
+ if (!version) {
49
+ return 'error';
50
+ }
51
+ return folderName;
52
+ };
53
+ exports.findLatestBrowserVersionDirectory = findLatestBrowserVersionDirectory;
package/dist/test.html ADDED
@@ -0,0 +1 @@
1
+ <!DOCTYPE html><html lang="en-US"><head><title>Just a moment...</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=Edge"><meta name="robots" content="noindex,nofollow"><meta name="viewport" content="width=device-width,initial-scale=1"><style>*{box-sizing:border-box;margin:0;padding:0}html{line-height:1.15;-webkit-text-size-adjust:100%;color:#313131}button,html{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}@media (prefers-color-scheme:dark){body{background-color:#222;color:#d9d9d9}body a{color:#fff}body a:hover{color:#ee730a;text-decoration:underline}body .lds-ring div{border-color:#999 transparent transparent}body .font-red{color:#b20f03}body .pow-button{background-color:#4693ff;color:#1d1d1d}body #challenge-success-text{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI2IDI2Ij48cGF0aCBmaWxsPSIjZDlkOWQ5IiBkPSJNMTMgMGExMyAxMyAwIDEgMCAwIDI2IDEzIDEzIDAgMCAwIDAtMjZtMCAyNGExMSAxMSAwIDEgMSAwLTIyIDExIDExIDAgMCAxIDAgMjIiLz48cGF0aCBmaWxsPSIjZDlkOWQ5IiBkPSJtMTAuOTU1IDE2LjA1NS0zLjk1LTQuMTI1LTEuNDQ1IDEuMzg1IDUuMzcgNS42MSA5LjQ5NS05LjYtMS40Mi0xLjQwNXoiLz48L3N2Zz4=)}body #challenge-error-text{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI0IyMEYwMyIgZD0iTTE2IDNhMTMgMTMgMCAxIDAgMTMgMTNBMTMuMDE1IDEzLjAxNSAwIDAgMCAxNiAzbTAgMjRhMTEgMTEgMCAxIDEgMTEtMTEgMTEuMDEgMTEuMDEgMCAwIDEtMTEgMTEiLz48cGF0aCBmaWxsPSIjQjIwRjAzIiBkPSJNMTcuMDM4IDE4LjYxNUgxNC44N0wxNC41NjMgOS41aDIuNzgzem0tMS4wODQgMS40MjdxLjY2IDAgMS4wNTcuMzg4LjQwNy4zODkuNDA3Ljk5NCAwIC41OTYtLjQwNy45ODQtLjM5Ny4zOS0xLjA1Ny4zODktLjY1IDAtMS4wNTYtLjM4OS0uMzk4LS4zODktLjM5OC0uOTg0IDAtLjU5Ny4zOTgtLjk4NS40MDYtLjM5NyAxLjA1Ni0uMzk3Ii8+PC9zdmc+)}}body{display:flex;flex-direction:column;min-height:100vh}body.no-js .loading-spinner{visibility:hidden}body.no-js .challenge-running{display:none}body.dark{background-color:#222;color:#d9d9d9}body.dark a{color:#fff}body.dark a:hover{color:#ee730a;text-decoration:underline}body.dark .lds-ring div{border-color:#999 transparent transparent}body.dark .font-red{color:#b20f03}body.dark .pow-button{background-color:#4693ff;color:#1d1d1d}body.dark #challenge-success-text{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI2IDI2Ij48cGF0aCBmaWxsPSIjZDlkOWQ5IiBkPSJNMTMgMGExMyAxMyAwIDEgMCAwIDI2IDEzIDEzIDAgMCAwIDAtMjZtMCAyNGExMSAxMSAwIDEgMSAwLTIyIDExIDExIDAgMCAxIDAgMjIiLz48cGF0aCBmaWxsPSIjZDlkOWQ5IiBkPSJtMTAuOTU1IDE2LjA1NS0zLjk1LTQuMTI1LTEuNDQ1IDEuMzg1IDUuMzcgNS42MSA5LjQ5NS05LjYtMS40Mi0xLjQwNXoiLz48L3N2Zz4=)}body.dark #challenge-error-text{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI0IyMEYwMyIgZD0iTTE2IDNhMTMgMTMgMCAxIDAgMTMgMTNBMTMuMDE1IDEzLjAxNSAwIDAgMCAxNiAzbTAgMjRhMTEgMTEgMCAxIDEgMTEtMTEgMTEuMDEgMTEuMDEgMCAwIDEtMTEgMTEiLz48cGF0aCBmaWxsPSIjQjIwRjAzIiBkPSJNMTcuMDM4IDE4LjYxNUgxNC44N0wxNC41NjMgOS41aDIuNzgzem0tMS4wODQgMS40MjdxLjY2IDAgMS4wNTcuMzg4LjQwNy4zODkuNDA3Ljk5NCAwIC41OTYtLjQwNy45ODQtLjM5Ny4zOS0xLjA1Ny4zODktLjY1IDAtMS4wNTYtLjM4OS0uMzk4LS4zODktLjM5OC0uOTg0IDAtLjU5Ny4zOTgtLjk4NS40MDYtLjM5NyAxLjA1Ni0uMzk3Ii8+PC9zdmc+)}body.light{background-color:transparent;color:#313131}body.light a{color:#0051c3}body.light a:hover{color:#ee730a;text-decoration:underline}body.light .lds-ring div{border-color:#595959 transparent transparent}body.light .font-red{color:#fc574a}body.light .pow-button{background-color:#003681;border-color:#003681;color:#fff}body.light #challenge-success-text{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI2IDI2Ij48cGF0aCBmaWxsPSIjMzEzMTMxIiBkPSJNMTMgMGExMyAxMyAwIDEgMCAwIDI2IDEzIDEzIDAgMCAwIDAtMjZtMCAyNGExMSAxMSAwIDEgMSAwLTIyIDExIDExIDAgMCAxIDAgMjIiLz48cGF0aCBmaWxsPSIjMzEzMTMxIiBkPSJtMTAuOTU1IDE2LjA1NS0zLjk1LTQuMTI1LTEuNDQ1IDEuMzg1IDUuMzcgNS42MSA5LjQ5NS05LjYtMS40Mi0xLjQwNXoiLz48L3N2Zz4=)}body.light #challenge-error-text{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZjNTc0YSIgZD0iTTE2IDNhMTMgMTMgMCAxIDAgMTMgMTNBMTMuMDE1IDEzLjAxNSAwIDAgMCAxNiAzbTAgMjRhMTEgMTEgMCAxIDEgMTEtMTEgMTEuMDEgMTEuMDEgMCAwIDEtMTEgMTEiLz48cGF0aCBmaWxsPSIjZmM1NzRhIiBkPSJNMTcuMDM4IDE4LjYxNUgxNC44N0wxNC41NjMgOS41aDIuNzgzem0tMS4wODQgMS40MjdxLjY2IDAgMS4wNTcuMzg4LjQwNy4zODkuNDA3Ljk5NCAwIC41OTYtLjQwNy45ODQtLjM5Ny4zOS0xLjA1Ny4zODktLjY1IDAtMS4wNTYtLjM4OS0uMzk4LS4zODktLjM5OC0uOTg0IDAtLjU5Ny4zOTgtLjk4NS40MDYtLjM5NyAxLjA1Ni0uMzk3Ii8+PC9zdmc+)}a{background-color:transparent;color:#0051c3;text-decoration:none;transition:color .15s ease}a:hover{color:#ee730a;text-decoration:underline}.main-content{margin:8rem auto;max-width:60rem;width:100%}.heading-favicon{height:2rem;margin-right:.5rem;width:2rem}@media (width <= 720px){.main-content{margin-top:4rem}.heading-favicon{height:1.5rem;width:1.5rem}}.footer,.main-content{padding-left:1.5rem;padding-right:1.5rem}.main-wrapper{align-items:center;display:flex;flex:1;flex-direction:column}.font-red{color:#b20f03}.spacer{margin:2rem 0}.h1{font-size:2.5rem;font-weight:500;line-height:3.75rem}.h2{font-weight:500}.core-msg,.h2{font-size:1.5rem;line-height:2.25rem}.body-text,.core-msg{font-weight:400}.body-text{font-size:1rem;line-height:1.25rem}@media (width <= 720px){.h1{font-size:1.5rem;line-height:1.75rem}.h2{font-size:1.25rem}.core-msg,.h2{line-height:1.5rem}.core-msg{font-size:1rem}}#challenge-error-text{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZjNTc0YSIgZD0iTTE2IDNhMTMgMTMgMCAxIDAgMTMgMTNBMTMuMDE1IDEzLjAxNSAwIDAgMCAxNiAzbTAgMjRhMTEgMTEgMCAxIDEgMTEtMTEgMTEuMDEgMTEuMDEgMCAwIDEtMTEgMTEiLz48cGF0aCBmaWxsPSIjZmM1NzRhIiBkPSJNMTcuMDM4IDE4LjYxNUgxNC44N0wxNC41NjMgOS41aDIuNzgzem0tMS4wODQgMS40MjdxLjY2IDAgMS4wNTcuMzg4LjQwNy4zODkuNDA3Ljk5NCAwIC41OTYtLjQwNy45ODQtLjM5Ny4zOS0xLjA1Ny4zODktLjY1IDAtMS4wNTYtLjM4OS0uMzk4LS4zODktLjM5OC0uOTg0IDAtLjU5Ny4zOTgtLjk4NS40MDYtLjM5NyAxLjA1Ni0uMzk3Ii8+PC9zdmc+);padding-left:34px}#challenge-error-text,#challenge-success-text{background-repeat:no-repeat;background-size:contain}#challenge-success-text{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI2IDI2Ij48cGF0aCBmaWxsPSIjMzEzMTMxIiBkPSJNMTMgMGExMyAxMyAwIDEgMCAwIDI2IDEzIDEzIDAgMCAwIDAtMjZtMCAyNGExMSAxMSAwIDEgMSAwLTIyIDExIDExIDAgMCAxIDAgMjIiLz48cGF0aCBmaWxsPSIjMzEzMTMxIiBkPSJtMTAuOTU1IDE2LjA1NS0zLjk1LTQuMTI1LTEuNDQ1IDEuMzg1IDUuMzcgNS42MSA5LjQ5NS05LjYtMS40Mi0xLjQwNXoiLz48L3N2Zz4=);padding-left:42px}.text-center{text-align:center}.pow-button{background-color:#0051c3;border:.063rem solid #0051c3;border-radius:.313rem;color:#fff;font-size:.875rem;line-height:1.313rem;margin:2rem 0;padding:.375rem 1rem;transition-duration:.2s;transition-property:background-color,border-color,color;transition-timing-function:ease}.pow-button:hover{background-color:#003681;border-color:#003681;color:#fff;cursor:pointer}.footer{font-size:.75rem;line-height:1.125rem;margin:0 auto;max-width:60rem;width:100%}.footer-inner{border-top:1px solid #d9d9d9;padding-bottom:1rem;padding-top:1rem}.clearfix:after{clear:both;content:"";display:table}.clearfix .column{float:left;padding-right:1.5rem;width:50%}.diagnostic-wrapper{margin-bottom:.5rem}.footer .ray-id{text-align:center}.footer .ray-id code{font-family:monaco,courier,monospace}.core-msg,.zone-name-title{overflow-wrap:break-word}@media (width <= 720px){.diagnostic-wrapper{display:flex;flex-wrap:wrap;justify-content:center}.clearfix:after{clear:none;content:none;display:initial;text-align:center}.column{padding-bottom:2rem}.clearfix .column{float:none;padding:0;width:auto;word-break:keep-all}.zone-name-title{margin-bottom:1rem}}.loading-spinner{height:76.391px}.lds-ring{display:inline-block;position:relative}.lds-ring,.lds-ring div{height:1.875rem;width:1.875rem}.lds-ring div{animation:lds-ring 1.2s cubic-bezier(.5,0,.5,1) infinite;border:.3rem solid transparent;border-radius:50%;border-top-color:#313131;box-sizing:border-box;display:block;position:absolute}.lds-ring div:first-child{animation-delay:-.45s}.lds-ring div:nth-child(2){animation-delay:-.3s}.lds-ring div:nth-child(3){animation-delay:-.15s}@keyframes lds-ring{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@media screen and (-ms-high-contrast:active),screen and (-ms-high-contrast:none){.main-wrapper,body{display:block}}.rtl .heading-favicon{margin-left:.5rem;margin-right:0}.rtl #challenge-success-text{background-position:100%;padding-left:0;padding-right:42px}.rtl #challenge-error-text{background-position:100%;padding-left:0;padding-right:34px}</style><meta http-equiv="refresh" content="390"></head><body class="no-js"><div class="main-wrapper" role="main"><div class="main-content"><noscript><div id="challenge-error-title"><div class="h2"><span id="challenge-error-text">Enable JavaScript and cookies to continue</span></div></div></noscript></div></div><script>(function(){window._cf_chl_opt={cvId: '3',cZone: "ipgeo.gologin.com",cType: 'managed',cNounce: '66748',cRay: '88e6f89e9e74906b',cHash: '0151e46f0a289d3',cUPMDTk: "\/?__cf_chl_tk=7Wa4hHOtxYk6_UyRySQ_Wog6pxDQ1MMeL09x3UrcYXE-1717494128-0.0.1.1-3710",cFPWv: 'g',cTTimeMs: '1000',cMTimeMs: '390000',cTplV: 5,cTplB: 'cf',cK: "visitor-time",fa: "\/?__cf_chl_f_tk=7Wa4hHOtxYk6_UyRySQ_Wog6pxDQ1MMeL09x3UrcYXE-1717494128-0.0.1.1-3710",md: "NUEVJeLORkY3ctw5kFupy54wQ.Bw2XoiUHU155dsPe4-1717494128-1.1.1.1-VEXy_Ks50GB5RMJOslVWz7AMwubr4klp8NAQx.WpzyscwaAZIT977vQbplJHHxUMOfGQIrS7IoZsFuIi_kAG_6uzG89PjpXRbbWGUAdSBoBqVDvSLdmj32qRiiENnKa45qhWKS.2j59nh0EBxCmYnAA82B7OuCKpx7uuxmbU5TMm._9u7WdzxOLNR1eXivsDBiAjylgz3lfr01XNGKtwyi.WgRleVDf3Bktj2cCNYM0.TDELx2aXxnXICTLvg2hylLi8jz7Gq2NUy.yI5J0b5wivrYglsonDNm5NBDdtj.ySyHpcbHLJB1JjtBJo5tPLJ6KWnQXq9985_isPMbJzLi5FoKMWBx34B8ze.VVptgVgTwXxDcD.v9HtcPA.3Fh.GuInVykpAAD1YomiHnGwMSii6t3cF7.DIB6KUD99uNV3o8f8ff3DTXxjfXli4jDA.27AfPr12V55AELVyICoxGvlkqKXo.Ftpg8ZRirZfigy0Hh7dQ0_s0zYm.uxnkE.vjkBcDgHwVmSSMIwkcGgdwucwrRM0Hw..A_pTbKjDXhc.X1kBgIAMnbg2XLfGYMMHOnFYnRmzCyi8FzYSc.F.1teWQMVD7SRU8Mql17Ei8tdNsrLUAcR_0X.mo5NlKV1tRy3CQH9.Fw35FGf73ZPb.hmGIWtFdNHUkvk0fDie5dSQ6e.R4Bxd8MXUXYhZXoCDPlkkbfYLxrkuZNug_7RoE8EK6g.XFI9DuB_.Pgnw9rlu8pOp82Js0LyOiSAjKeReqTaoMTfMzRRTpz0GJUmoZ7VJCbTka71vgvJLG3WfniW_bxMJGKoP.MGIRnAgdVReG1XEVP5Dr.weAM17ZKe8KoUwNbbffg9pVavJYNM230C_sqjQbEfgQaYEfqpgmOB92zxvDcVBRPJgVcAqyyGAl28o4aIqK7ZiHFgInofroaziFEkGwWhx8RVC8.wMQYnKTxzrvH6dlUXCmH9ptYKzBxsLA3aAd0JZYF8tmck7CiuBGWgQnYrjK0wI7r0XRgVar2JD90i7j90sYWDnbnntHdV5dnVAqkMgPE9CZVEEV3IoVkvshSTr6bVPp5nQxIByNmG55BDIAmV82tshyQaEJq2PWe55qD6AY.5.XJkY2WF7SVH.FENH0_he2OQTQQZBXSokc78r2D6qMSLDqlpcwmprbJTcpCaScGZxmBPf1tPMo3Jssl7p9Dw86iKYnkbkfheTSlYs9DPbOLOZNzkKzCNClDowqoNaCYU5KNshG.ECh2QrFljLnE_N30HkRBBYBGSw1UHkdNrKz62hBrZ9FhZ6XxGKxrJsYQCrKfd8KgsJclURn6B.6umEaFGsbGTNqoJLfDp.aW_t8aUuyafzbLwnFo.M6oQrOHbMT2g2C9srRBnWrGTTTT3lkJ2di.PB816zho7SjcnnWR_fu23_ZCj5PZY2ccNfyRz_OxxgssyIJ2XRMvDnoH2I_SfSxgo",mdrd: "fG3JGIxYOKyhZo.XKniJcmxUOHl0smYMDQLj3nmOhFQ-1717494128-1.1.1.1-v0f6ICuc3qDLhtnLZ1Wx9VmiKjc8Sb7ooO4rXHP2Ao3uCumr9N1mAP1wy.BsVzPHc4_nPPdBZjVql0JBBjmeeKRbhY16OOMb2xdjgUpSIFOmez5wMjVYC3xED7OgTgtnrioKKQ1rEaF._6yfY5dc1VrkLMXazCY7oOpWutYI.8SFl9UJo7aY7Vatdixgz_mZbpj.MddWc9i_BGA6QlRcobtLx0HgePYTStTa23hX5QDGvc.Zewn.1.LvQR9y6VUWFrjYbxs63Is0BbinVae6s5_AqoziYGt2Vxzt6deouMieYzv.9uA3XQW1cc_5Ulo8.vnYkxrVKQ8u6WKvVmMB1Z5EhwXOzGwB1.NPXGxUFOGx7F1iz7WsJvkfZurqRwOmBpmQyR0fHfNt53JvDMvfCnGLUTfaeyMskKra4KtmVcXoQUTygxtvTIr1A3eewPZ6WUmKa8B7l9oE9v4hEub4LnFZIl6J1pZYDQ3GGkkohOu9aaRCJade9vaUQImr.nWKAsDxYeUFdh0p.7F1VJ8WtiAxVfuxGLOx59yluvxZdNVB2OXrOBcRhfuhS2qVFanRppgC7BSt150GYFp68bTEr1ZVrgUY70olfBfGz_TVYy6s5pbWzQQuev0tghS9uRB3Gi7JGuWZqvddBs73WIHbV8Nc6Dd7O7G0TRcOkBpAa7n_1OIiYGFhQkCxoeejnVauTmLbCGlCScGgb_ayA1xYBPR2wVGIn9gLhT66i8bseGJo97xGRUOK9Y.wok9RCXZVFthCgzDMmFjQBuelqHhDNfx8QU2uaHcVzW_tHVAQSxTdUuy_6fZyi_Rk2XI75tIWv7c5v0TqumL9fOz0BoPQpjb59YRbhQeGipDx63.eR1HAq0598X9RUyqLh1rUoYEQWpmpgbvlWgsGgmGbANROB2Igtgjti79CAU12GY0fVBKQoPUH2M7KDGCwnRaFXOLRNZwf500rJsFVquR_pGFJfYXagLfjJGKkw9fe0iQRsaUOqjCAC0RY1hfVm8sA3Kk5fSI5rSSEG5YkZE5uoH4dsLBst2Q3aL4zDk1axNio3rs7aCbil9yKJhurswS2c0pNEAZQ9OeBXN6SqSiAfnoyv432.3ke1k9LF0BH4OSBotPT4_3b4kAg__XV3pAjvFY_1d_MIK.eXjfQl_3Qhi0oD2wXXITPZLPtWVYoBW.UM3My7qntrs5R2YlSoM3BK4eqzH3nWDVFbiVyVJKYrgMzOMMJU_q.fN144gRPWOjdtaQTZzffCysnuuuyriKXQwbkQdzkM5uN0.DK9p99.uOS7B.FV_VjOiGvHu_Q_SGmw3c.fNzTv8smVRXqkxIkYV.VmYX5UdpHG5.PVTadHKM_aMJlUh.dV4fUrNmRX5ZltXjoZ4Rh2Xq3M5IruxsrbvjdS574gwGZ7noCF.yvOEEGnJsb1i5kVrgAwmsCENfGADL3a9xOFIFGLCMV2Bipd0_67Um7tjJZdDVuFiCy4mazir6Jw6q7LuQDPdrZENlw9r1.RqmPOMfRZxmdO8ngwHXwCE_IJUdTgKq2zNFWbJnv4RMpT3YIiVQ63gMYXO6CjUA2o1lSuiMzEl4La0pzZG8g1BcCROslvoMJMKGe.vQg4hW2SvAEcciejXAsO6uwcotsRQTfHo0cIy0BqD0I4zzLf63_UA2drS1oTjtvYg7yobwQbjNiEx3utD8x4qQnumVya6gL5W19.jlZyhxWAOQtIy02xIr.9Is58K.1Hz_h5xA3xj7CF0wSpLK5NqJeIzT4WRfuQwQMGYk5r5yfpzJg3qEoWeHIigsl9AM1vj3eMi982lox_r6o8HYzZ926mEKVsU5kAyrDNhS1gYI09Y.ogJekRIjpdx702wCjk3Dwlc96_4fL9ftKqUAOjpte6ZwJKOLUBAB3JVbtEQcDvwHHjLgf0kJgLwzQ7HwGmZlBEMuxaQO6SqmdzD71_37TQsPl0Gvz_LOuPQrjGolyktxurCAisjwas6h7DbhmBGHner1E6GRE4vaX7IIJVT8aXZT8KYO.BA25IgpoC4HASSp.rwyRnREnfGy5HRA_1vesXCIFastjAdCHM4qQusU63_mbYqnyELk5aUQbq20yOrxH",cRq: {ru: 'aHR0cHM6Ly9pcGdlby5nb2xvZ2luLmNvbS8=',ra: 'Tk9fVUE=',rm: 'R0VU',d: 'qKBkJcVxpK0gS9+Dncqnobox7zFZJq4tIR364HImyNL674Z6rjXGb0N5CnEE8MaC80e/fhDCZ1NALxmLlvABU3B1YBJ6u2HiuqwHa7IE8x2mjW83zHbi3+3jDJYhVGhxorhS0jQw8/HVJwNzPdRR+gDu8ohEqIciINfSlwiOu2qp6VqDQ1whv1npm21w1rxkix6yey82DI0wF9dLwklPQTICBTq24Yebnrjp8zoIPP4/Sr5C5pgAtHSN7DEOzvqBSXk8eaE9phw2wvyIdtqhP4b2fvQdI2B2Hngwtd21eiWMCqt16U+GInyuByoGoPVHfW4tRxe92aLcLHFtrU8DP8jPqWCr9ADZzPeGLbsEHsOvkBsnTmtMxMeiad+enNvXvTsC1m4tqcR9xPLoIFu1i13t561TzsJSyFcO1rVLBSG6XtY80cKU2tTxfIDzw4XJ/fZle22zeUWmhXsmtx8EufZbC7X69SwtMTdGpMvQtA1K/CKDH7oaLDrMXzrNrySmb+gvDV11h9sh4f/sdbUbS51uU9qpxjhRDrYW8dvYJDK0TWVvVGIpth0UX+HqH+JV',t: 'MTcxNzQ5NDEyOC40MjAwMDA=',cT: Math.floor(Date.now() / 1000),m: '5mFiLvS/5/akVFoHXJ25bFALknI1IUlzM8xFhK3suo4=',i1: 'wI6KiYPpIW0OhXRVGtqXlg==',i2: '6oZk6BntW8JZQ+HgujT1JA==',zh: 'JR0cIv85cUJhqgTjRa9QSuNFo/9GUndlo5xkcCmDPX8=',uh: 'DV4j3Tmrbi5Rs1q3ahwVS6SgbPbI7np5884QO1u1Cgg=',hh: 'iTzi3JnXztDsyTsA3Shvuu+oDN/wU8B2rwcgKq/my4Q=',}};var cpo = document.createElement('script');cpo.src = '/cdn-cgi/challenge-platform/h/g/orchestrate/chl_page/v1?ray=88e6f89e9e74906b';window._cf_chl_opt.cOgUHash = location.hash === '' && location.href.indexOf('#') !== -1 ? '#' : location.hash;window._cf_chl_opt.cOgUQuery = location.search === '' && location.href.slice(0, location.href.length - window._cf_chl_opt.cOgUHash.length).indexOf('?') !== -1 ? '?' : location.search;if (window.history && window.history.replaceState) {var ogU = location.pathname + window._cf_chl_opt.cOgUQuery + window._cf_chl_opt.cOgUHash;history.replaceState(null, null, "\/?__cf_chl_rt_tk=7Wa4hHOtxYk6_UyRySQ_Wog6pxDQ1MMeL09x3UrcYXE-1717494128-0.0.1.1-3710" + window._cf_chl_opt.cOgUHash);cpo.onload = function() {history.replaceState(null, null, ogU);}}document.getElementsByTagName('head')[0].appendChild(cpo);}());</script></body></html>
Binary file
@@ -0,0 +1,290 @@
1
+ {
2
+ "env": {
3
+ "browser": true,
4
+ "es2021": true,
5
+ "node": true
6
+ },
7
+ "extends": "eslint:recommended",
8
+ "overrides": [
9
+ ],
10
+ "parserOptions": {
11
+ "ecmaVersion": "latest",
12
+ "sourceType": "module"
13
+ },
14
+ "plugins": [
15
+ "simple-import-sort"
16
+ ],
17
+ "rules": {
18
+ "padding-line-between-statements": [
19
+ "warn",
20
+ {
21
+ "blankLine": "always",
22
+ "prev": [
23
+ "if",
24
+ "switch",
25
+ "while",
26
+ "function",
27
+ "multiline-const",
28
+ "try"
29
+ ],
30
+ "next": "*"
31
+ },
32
+ {
33
+ "blankLine": "always",
34
+ "prev": "*",
35
+ "next": [
36
+ "return"
37
+ ]
38
+ }
39
+ ],
40
+ "indent": [
41
+ "warn",
42
+ 2,
43
+ {
44
+ "SwitchCase": 1,
45
+ "ignoredNodes": [
46
+ "ClassBody.body > PropertyDefinition[decorators.length > 0] > .key"
47
+ ]
48
+ }
49
+ ],
50
+ "linebreak-style": 0,
51
+ "quotes": [
52
+ "warn",
53
+ "single"
54
+ ],
55
+ "semi": [
56
+ "warn",
57
+ "always"
58
+ ],
59
+ "array-callback-return": [
60
+ "warn"
61
+ ],
62
+ "no-await-in-loop": [
63
+ "off"
64
+ ],
65
+ "no-duplicate-imports": [
66
+ "warn"
67
+ ],
68
+ "arrow-body-style": [
69
+ "warn",
70
+ "as-needed"
71
+ ],
72
+ "curly": [
73
+ "warn",
74
+ "all"
75
+ ],
76
+ "default-case": [
77
+ "warn"
78
+ ],
79
+ "default-case-last": [
80
+ "warn"
81
+ ],
82
+ "dot-notation": [
83
+ "warn"
84
+ ],
85
+ "eqeqeq": [
86
+ "warn",
87
+ "always"
88
+ ],
89
+ "id-length": [
90
+ "warn",
91
+ {
92
+ "min": 1,
93
+ "max": 40,
94
+ "properties": "never"
95
+ }
96
+ ],
97
+ "max-depth": [
98
+ "warn",
99
+ {
100
+ "max": 4
101
+ }
102
+ ],
103
+ "max-lines": [
104
+ "warn",
105
+ 1500
106
+ ],
107
+ "no-else-return": [
108
+ "warn",
109
+ {
110
+ "allowElseIf": true
111
+ }
112
+ ],
113
+ "no-unused-vars": [
114
+ "warn",
115
+ {
116
+ "vars": "all",
117
+ "args": "after-used",
118
+ "ignoreRestSiblings": false,
119
+ "varsIgnorePattern": "^_"
120
+ }
121
+ ],
122
+ "keyword-spacing": [
123
+ "error",
124
+ {
125
+ "before": true,
126
+ "after": true
127
+ }
128
+ ],
129
+ "no-empty-function": [
130
+ "warn",
131
+ {
132
+ "allow": [
133
+ "constructors"
134
+ ]
135
+ }
136
+ ],
137
+ "no-inline-comments": [
138
+ "warn"
139
+ ],
140
+ "no-labels": [
141
+ "warn"
142
+ ],
143
+ "no-lone-blocks": [
144
+ "warn"
145
+ ],
146
+ "no-lonely-if": [
147
+ "warn"
148
+ ],
149
+ "no-magic-numbers": [
150
+ "off",
151
+ {
152
+ "ignoreArrayIndexes": true,
153
+ "ignoreDefaultValues": true,
154
+ "ignore": [
155
+ 1,
156
+ 2,
157
+ 3,
158
+ 10,
159
+ 1000,
160
+ -1,
161
+ 0
162
+ ]
163
+ }
164
+ ],
165
+ "no-multi-assign": [
166
+ "warn"
167
+ ],
168
+ "no-multi-str": [
169
+ "warn"
170
+ ],
171
+ "no-nested-ternary": [
172
+ "warn"
173
+ ],
174
+ "no-return-assign": [
175
+ "warn"
176
+ ],
177
+ "no-return-await": [
178
+ "warn"
179
+ ],
180
+ "no-sequences": [
181
+ "warn"
182
+ ],
183
+ "no-shadow": [
184
+ "warn"
185
+ ],
186
+ "no-undefined": [
187
+ "warn"
188
+ ],
189
+ "no-underscore-dangle": [
190
+ "warn",
191
+ {
192
+ "allow": [
193
+ "_id"
194
+ ]
195
+ }
196
+ ],
197
+ "no-unneeded-ternary": [
198
+ "warn"
199
+ ],
200
+ "no-unused-expressions": [
201
+ "warn",
202
+ {
203
+ "allowShortCircuit": true,
204
+ "allowTernary": true
205
+ }
206
+ ],
207
+ "no-useless-return": [
208
+ "warn"
209
+ ],
210
+ "object-shorthand": [
211
+ "warn",
212
+ "always"
213
+ ],
214
+ "prefer-arrow-callback": [
215
+ "warn"
216
+ ],
217
+ "prefer-const": [
218
+ "warn"
219
+ ],
220
+ "prefer-destructuring": [
221
+ "warn"
222
+ ],
223
+ "prefer-object-spread": [
224
+ "warn"
225
+ ],
226
+ "prefer-spread": [
227
+ "warn"
228
+ ],
229
+ "prefer-template": [
230
+ "off"
231
+ ],
232
+ "spaced-comment": [
233
+ "warn"
234
+ ],
235
+ "yoda": [
236
+ "warn"
237
+ ],
238
+ "arrow-spacing": [
239
+ "warn"
240
+ ],
241
+ "brace-style": [
242
+ "warn",
243
+ "1tbs",
244
+ {
245
+ "allowSingleLine": false
246
+ }
247
+ ],
248
+ "comma-dangle": [
249
+ "warn",
250
+ "always-multiline"
251
+ ],
252
+ "dot-location": [
253
+ "warn",
254
+ "property"
255
+ ],
256
+ "eol-last": [
257
+ "warn"
258
+ ],
259
+ "no-extra-parens": [
260
+ "off"
261
+ ],
262
+ "no-multiple-empty-lines": [
263
+ "warn",
264
+ {
265
+ "max": 1
266
+ }
267
+ ],
268
+ "no-trailing-spaces": [
269
+ "warn"
270
+ ],
271
+ "no-whitespace-before-property": [
272
+ "warn"
273
+ ],
274
+ "object-curly-spacing": [
275
+ "warn",
276
+ "always"
277
+ ],
278
+ "space-in-parens": [
279
+ "warn"
280
+ ],
281
+ "template-curly-spacing": [
282
+ "warn"
283
+ ],
284
+ "max-len": [
285
+ "warn",
286
+ 150
287
+ ],
288
+ "simple-import-sort/imports": "warn"
289
+ }
290
+ }