gologin-commonjs 1.1.2 → 1.1.4
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.
- package/dist/src/browser/browser-checker.js +19 -14
- package/dist/src/browser/browser-user-data-manager.js +230 -140
- package/dist/src/gologin.js +392 -722
- package/dist/src/utils/timezone.js +21 -0
- package/dist-old/README.md +163 -0
- package/dist-old/example.js +35 -0
- package/dist-old/examples/example-amazon-cloud-browser.js +52 -0
- package/dist-old/examples/example-amazon-headless.js +56 -0
- package/dist-old/examples/example-amazon.js +53 -0
- package/dist-old/examples/example-create-custom-profile.js +42 -0
- package/dist-old/examples/example-create-profile.js +43 -0
- package/dist-old/examples/example-custom-args.js +34 -0
- package/dist-old/examples/example-fast-profile-settings.js +59 -0
- package/dist-old/examples/example-gmail.js +82 -0
- package/dist-old/examples/example-iphey.js +19 -0
- package/dist-old/examples/example-local-profile.js +28 -0
- package/dist-old/examples/example-login-walmart.js +38 -0
- package/dist-old/examples/example-startremote.js +29 -0
- package/dist-old/examples/example-stopremote.js +22 -0
- package/dist-old/examples/example-timezone.js +51 -0
- package/dist-old/fonts.d.ts +22 -0
- package/dist-old/fonts.js +3339 -0
- package/dist-old/fonts_config +104 -0
- package/dist-old/gologin-browser-ext.zip +0 -0
- package/dist-old/gologin_zeroprofile.b64 +1 -0
- package/dist-old/index.d.ts +61 -0
- package/dist-old/profile_export_example.csv +2 -0
- package/dist-old/run.sh +1 -0
- package/dist-old/src/bookmarks/utils.js +23 -0
- package/dist-old/src/browser/browser-api.js +106 -0
- package/dist-old/src/browser/browser-checker.js +338 -0
- package/dist-old/src/browser/browser-user-data-manager.js +306 -0
- package/dist-old/src/cookies/cookies-manager.js +164 -0
- package/dist-old/src/extensions/extensions-extractor.js +50 -0
- package/dist-old/src/extensions/extensions-manager.js +301 -0
- package/dist-old/src/extensions/user-extensions-manager.js +246 -0
- package/dist-old/src/gologin-api.d.ts +18 -0
- package/dist-old/src/gologin-api.js +103 -0
- package/dist-old/src/gologin.d.ts +142 -0
- package/dist-old/src/gologin.js +1336 -0
- package/dist-old/src/profile/profile-archiver.js +68 -0
- package/dist-old/src/profile/profile-directories-to-remove.js +71 -0
- package/dist-old/src/utils/browser.js +59 -0
- package/dist-old/src/utils/common.js +60 -0
- package/dist-old/src/utils/constants.js +7 -0
- package/dist-old/src/utils/utils.js +53 -0
- package/dist-old/test.html +1 -0
- package/dist-old/zero_profile.zip +0 -0
- package/gologin/src/gologin.js +636 -395
- package/gologin/src/utils/timezone.js +470 -0
- package/gologin-old/.eslintrc.json +290 -0
- package/gologin-old/.sentry-native/a65389b2-9a7d-41ed-7de5-95c4570f0d3d.run.lock +0 -0
- package/gologin-old/README.md +163 -0
- package/gologin-old/example.js +36 -0
- package/gologin-old/examples/example-amazon-cloud-browser.js +44 -0
- package/gologin-old/examples/example-amazon-headless.js +50 -0
- package/gologin-old/examples/example-amazon.js +47 -0
- package/gologin-old/examples/example-create-custom-profile.js +39 -0
- package/gologin-old/examples/example-create-profile.js +40 -0
- package/gologin-old/examples/example-custom-args.js +34 -0
- package/gologin-old/examples/example-fast-profile-settings.js +69 -0
- package/gologin-old/examples/example-gmail.js +67 -0
- package/gologin-old/examples/example-iphey.js +17 -0
- package/gologin-old/examples/example-local-profile.js +26 -0
- package/gologin-old/examples/example-login-walmart.js +35 -0
- package/gologin-old/examples/example-startremote.js +25 -0
- package/gologin-old/examples/example-stopremote.js +20 -0
- package/gologin-old/examples/example-timezone.js +44 -0
- package/gologin-old/fonts.js +3339 -0
- package/gologin-old/fonts_config +104 -0
- package/gologin-old/gologin-browser-ext.zip +0 -0
- package/gologin-old/gologin_zeroprofile.b64 +1 -0
- package/gologin-old/index.d.ts +61 -0
- package/gologin-old/package-lock.json +3491 -0
- package/gologin-old/package.json +49 -0
- package/gologin-old/profile_export_example.csv +2 -0
- package/gologin-old/run.sh +1 -0
- package/gologin-old/src/bookmarks/utils.js +16 -0
- package/gologin-old/src/browser/browser-api.js +95 -0
- package/gologin-old/src/browser/browser-checker.js +394 -0
- package/gologin-old/src/browser/browser-user-data-manager.js +335 -0
- package/gologin-old/src/cookies/cookies-manager.js +189 -0
- package/gologin-old/src/extensions/extensions-extractor.js +56 -0
- package/gologin-old/src/extensions/extensions-manager.js +384 -0
- package/gologin-old/src/extensions/user-extensions-manager.js +295 -0
- package/gologin-old/src/gologin-api.js +110 -0
- package/gologin-old/src/gologin.js +1553 -0
- package/gologin-old/src/profile/profile-archiver.js +86 -0
- package/gologin-old/src/profile/profile-directories-to-remove.js +75 -0
- package/gologin-old/src/utils/browser.js +62 -0
- package/gologin-old/src/utils/common.js +76 -0
- package/gologin-old/src/utils/constants.js +1 -0
- package/gologin-old/src/utils/utils.js +49 -0
- package/gologin-old/test.html +1 -0
- package/gologin-old/zero_profile.zip +0 -0
- package/package.json +4 -1
- package/tes.js +7 -3
|
@@ -77,28 +77,33 @@ class BrowserChecker {
|
|
|
77
77
|
if (!browserFolderExists) {
|
|
78
78
|
return this.downloadBrowser(browserLatestVersion, browserDownloadUrl);
|
|
79
79
|
}
|
|
80
|
-
const currentVersionReq = await this.getCurrentVersion();
|
|
81
|
-
const currentVersion = (currentVersionReq?.stdout || '').replace(/(\r\n|\n|\r)/gm, '');
|
|
82
|
-
if (browserLatestVersion === currentVersion || !checkBrowserUpdate) {
|
|
83
|
-
return;
|
|
84
|
-
}
|
|
85
|
-
if (autoUpdateBrowser) {
|
|
86
|
-
return this.downloadBrowser(browserLatestVersion, browserDownloadUrl);
|
|
87
|
-
}
|
|
88
|
-
console.log(`New Orbita ${browserLatestVersion} is available.`)
|
|
89
80
|
return;
|
|
81
|
+
|
|
82
|
+
// const currentVersionReq = await this.getCurrentVersion();
|
|
83
|
+
// const currentVersion = (currentVersionReq?.stdout || '').replace(/(\r\n|\n|\r)/gm, '');
|
|
84
|
+
|
|
85
|
+
// if (browserLatestVersion === currentVersion || !checkBrowserUpdate) {
|
|
86
|
+
// return;
|
|
87
|
+
// }
|
|
88
|
+
|
|
89
|
+
// if (autoUpdateBrowser) {
|
|
90
|
+
// return this.downloadBrowser(browserLatestVersion, browserDownloadUrl);
|
|
91
|
+
// }
|
|
92
|
+
|
|
90
93
|
// return new Promise(resolve => {
|
|
91
|
-
// const rl =
|
|
94
|
+
// const rl = createInterface(process.stdin, process.stdout);
|
|
92
95
|
// const timeout = setTimeout(() => {
|
|
93
96
|
// console.log(`\nContinue with current ${currentVersion} version.`);
|
|
94
97
|
// resolve();
|
|
95
98
|
// }, 10000);
|
|
96
|
-
|
|
99
|
+
|
|
100
|
+
// rl.question(`New Orbita ${browserLatestVersion} is available. Update? [y/n] `, (answer) => {
|
|
97
101
|
// clearTimeout(timeout);
|
|
98
102
|
// rl.close();
|
|
99
103
|
// if (answer && answer[0].toString().toLowerCase() === 'y') {
|
|
100
104
|
// return this.downloadBrowser(browserLatestVersion, browserDownloadUrl).then(() => resolve());
|
|
101
105
|
// }
|
|
106
|
+
|
|
102
107
|
// console.log(`Continue with current ${currentVersion} version.`);
|
|
103
108
|
// resolve();
|
|
104
109
|
// });
|
|
@@ -246,9 +251,9 @@ class BrowserChecker {
|
|
|
246
251
|
const localHashContent = await exec(`cd ${this.#browserPath} && sha256sum calculatedFolderSha.txt`);
|
|
247
252
|
let userRes = (localHashContent.stdout || '').toString().trim();
|
|
248
253
|
userRes = userRes.split(' ')[0];
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
254
|
+
if (userRes !== serverRes) {
|
|
255
|
+
throw new Error('Error in sum matching. Please run script again.');
|
|
256
|
+
}
|
|
252
257
|
}
|
|
253
258
|
async replaceBrowser() {
|
|
254
259
|
console.log('Copy Orbita to target path');
|
|
@@ -1,9 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
4
|
+
value: true,
|
|
5
5
|
});
|
|
6
|
-
exports.uploadCookies =
|
|
6
|
+
exports.uploadCookies =
|
|
7
|
+
exports.setOriginalExtPaths =
|
|
8
|
+
exports.setExtPathsAndRemoveDeleted =
|
|
9
|
+
exports.recalculateId =
|
|
10
|
+
exports.downloadFonts =
|
|
11
|
+
exports.downloadCookies =
|
|
12
|
+
exports.copyFontsConfigFile =
|
|
13
|
+
exports.composeFonts =
|
|
14
|
+
void 0;
|
|
7
15
|
var _crypto = require("crypto");
|
|
8
16
|
var _fs = require("fs");
|
|
9
17
|
var _os = require("os");
|
|
@@ -11,65 +19,69 @@ var _path = require("path");
|
|
|
11
19
|
var _url = require("url");
|
|
12
20
|
var _requestretry = _interopRequireDefault(require("requestretry"));
|
|
13
21
|
var _fonts = require("../../fonts.js");
|
|
14
|
-
function _interopRequireDefault(e) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
rename
|
|
23
|
-
} = _fs.promises;
|
|
24
|
-
const _filename = (0, _url.fileURLToPath)(require('url').pathToFileURL(__filename).toString());
|
|
22
|
+
function _interopRequireDefault(e) {
|
|
23
|
+
return e && e.__esModule ? e : { default: e };
|
|
24
|
+
}
|
|
25
|
+
const { access, readFile, writeFile, mkdir, readdir, copyFile, rename } =
|
|
26
|
+
_fs.promises;
|
|
27
|
+
const _filename = (0, _url.fileURLToPath)(
|
|
28
|
+
require("url").pathToFileURL(__filename).toString()
|
|
29
|
+
);
|
|
25
30
|
const _dirname = (0, _path.dirname)(_filename);
|
|
26
|
-
const FONTS_URL =
|
|
27
|
-
const FONTS_DIR_NAME =
|
|
31
|
+
const FONTS_URL = "https://fonts.gologin.com/";
|
|
32
|
+
const FONTS_DIR_NAME = "fonts";
|
|
28
33
|
const HOMEDIR = (0, _os.homedir)();
|
|
29
|
-
const BROWSER_PATH = (0, _path.join)(HOMEDIR,
|
|
34
|
+
const BROWSER_PATH = (0, _path.join)(HOMEDIR, ".gologin", "browser");
|
|
30
35
|
const OS_PLATFORM = process.platform;
|
|
31
|
-
const DEFAULT_ORBITA_EXTENSIONS_NAMES = [
|
|
32
|
-
|
|
33
|
-
|
|
36
|
+
const DEFAULT_ORBITA_EXTENSIONS_NAMES = [
|
|
37
|
+
"Google Hangouts",
|
|
38
|
+
"Chromium PDF Viewer",
|
|
39
|
+
"CryptoTokenExtension",
|
|
40
|
+
"Web Store",
|
|
41
|
+
];
|
|
42
|
+
const GOLOGIN_BASE_FOLDER_NAME = ".gologin";
|
|
43
|
+
const GOLOGIN_TEST_FOLDER_NAME = ".gologin_test";
|
|
34
44
|
const osPlatform = process.platform;
|
|
35
|
-
const downloadCookies = ({
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
});
|
|
45
|
+
const downloadCookies = ({ profileId, ACCESS_TOKEN, API_BASE_URL }) =>
|
|
46
|
+
_requestretry.default
|
|
47
|
+
.get(`${API_BASE_URL}/browser/${profileId}/cookies`, {
|
|
48
|
+
headers: {
|
|
49
|
+
Authorization: `Bearer ${ACCESS_TOKEN}`,
|
|
50
|
+
"user-agent": "gologin-api",
|
|
51
|
+
},
|
|
52
|
+
json: true,
|
|
53
|
+
maxAttempts: 3,
|
|
54
|
+
retryDelay: 2000,
|
|
55
|
+
timeout: 10 * 1000,
|
|
56
|
+
})
|
|
57
|
+
.catch((e) => {
|
|
58
|
+
console.log(e);
|
|
59
|
+
return {
|
|
60
|
+
body: [],
|
|
61
|
+
};
|
|
62
|
+
});
|
|
54
63
|
exports.downloadCookies = downloadCookies;
|
|
55
64
|
const uploadCookies = ({
|
|
56
65
|
cookies = [],
|
|
57
66
|
profileId,
|
|
58
67
|
ACCESS_TOKEN,
|
|
59
|
-
API_BASE_URL
|
|
60
|
-
}) =>
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
68
|
+
API_BASE_URL,
|
|
69
|
+
}) =>
|
|
70
|
+
_requestretry.default
|
|
71
|
+
.post(`${API_BASE_URL}/browser/${profileId}/cookies/?encrypted=true`, {
|
|
72
|
+
headers: {
|
|
73
|
+
Authorization: `Bearer ${ACCESS_TOKEN}`,
|
|
74
|
+
"User-Agent": "gologin-api",
|
|
75
|
+
},
|
|
76
|
+
json: cookies,
|
|
77
|
+
maxAttempts: 3,
|
|
78
|
+
retryDelay: 2000,
|
|
79
|
+
timeout: 20 * 1000,
|
|
80
|
+
})
|
|
81
|
+
.catch((e) => {
|
|
82
|
+
console.log(e);
|
|
83
|
+
return e;
|
|
84
|
+
});
|
|
73
85
|
exports.uploadCookies = uploadCookies;
|
|
74
86
|
const downloadFonts = async (fontsList = [], profilePath) => {
|
|
75
87
|
if (!fontsList.length) {
|
|
@@ -77,107 +89,159 @@ const downloadFonts = async (fontsList = [], profilePath) => {
|
|
|
77
89
|
}
|
|
78
90
|
const browserFontsPath = (0, _path.join)(BROWSER_PATH, FONTS_DIR_NAME);
|
|
79
91
|
await mkdir(browserFontsPath, {
|
|
80
|
-
recursive: true
|
|
92
|
+
recursive: true,
|
|
81
93
|
});
|
|
82
94
|
const files = await readdir(browserFontsPath);
|
|
83
|
-
const fontsToDownload = fontsList.filter(font => !files.includes(font));
|
|
84
|
-
let promises = fontsToDownload.map(font =>
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
95
|
+
const fontsToDownload = fontsList.filter((font) => !files.includes(font));
|
|
96
|
+
let promises = fontsToDownload.map((font) =>
|
|
97
|
+
_requestretry.default
|
|
98
|
+
.get(FONTS_URL + font, {
|
|
99
|
+
maxAttempts: 5,
|
|
100
|
+
retryDelay: 2000,
|
|
101
|
+
timeout: 30 * 1000,
|
|
102
|
+
})
|
|
103
|
+
.pipe((0, _fs.createWriteStream)((0, _path.join)(browserFontsPath, font)))
|
|
104
|
+
);
|
|
89
105
|
if (promises.length) {
|
|
90
106
|
await Promise.all(promises);
|
|
91
107
|
}
|
|
92
|
-
promises = fontsList.map(
|
|
108
|
+
promises = fontsList.map((font) =>
|
|
109
|
+
copyFile(
|
|
110
|
+
(0, _path.join)(browserFontsPath, font),
|
|
111
|
+
(0, _path.join)(profilePath, FONTS_DIR_NAME, font)
|
|
112
|
+
)
|
|
113
|
+
);
|
|
93
114
|
await Promise.all(promises);
|
|
94
115
|
};
|
|
95
116
|
exports.downloadFonts = downloadFonts;
|
|
96
|
-
const composeFonts = async (
|
|
117
|
+
const composeFonts = async (
|
|
118
|
+
fontsList = [],
|
|
119
|
+
profilePath,
|
|
120
|
+
differentOs = false
|
|
121
|
+
) => {
|
|
97
122
|
if (!(fontsList.length && profilePath)) {
|
|
98
123
|
return;
|
|
99
124
|
}
|
|
100
|
-
const fontsToDownload = _fonts.fontsCollection
|
|
125
|
+
const fontsToDownload = _fonts.fontsCollection
|
|
126
|
+
.filter((elem) => fontsList.includes(elem.value))
|
|
127
|
+
.reduce((res, elem) => res.concat(elem.fileNames || []), []);
|
|
101
128
|
if (differentOs && !fontsToDownload.length) {
|
|
102
|
-
throw new Error(
|
|
129
|
+
throw new Error(
|
|
130
|
+
"No fonts to download found. Use getAvailableFonts() method and set some fonts from this list"
|
|
131
|
+
);
|
|
103
132
|
}
|
|
104
|
-
fontsToDownload.push(
|
|
105
|
-
fontsToDownload.push(
|
|
133
|
+
fontsToDownload.push("LICENSE.txt");
|
|
134
|
+
fontsToDownload.push("OFL.txt");
|
|
106
135
|
const pathToFontsDir = (0, _path.join)(profilePath, FONTS_DIR_NAME);
|
|
107
|
-
const fontsDirExists = await access(pathToFontsDir).then(
|
|
136
|
+
const fontsDirExists = await access(pathToFontsDir).then(
|
|
137
|
+
() => true,
|
|
138
|
+
() => false
|
|
139
|
+
);
|
|
108
140
|
if (fontsDirExists) {
|
|
109
141
|
(0, _fs.rmdirSync)(pathToFontsDir, {
|
|
110
|
-
recursive: true
|
|
142
|
+
recursive: true,
|
|
111
143
|
});
|
|
112
144
|
}
|
|
113
145
|
await mkdir(pathToFontsDir, {
|
|
114
|
-
recursive: true
|
|
146
|
+
recursive: true,
|
|
115
147
|
});
|
|
116
148
|
await downloadFonts(fontsToDownload, profilePath);
|
|
117
|
-
if (OS_PLATFORM ===
|
|
149
|
+
if (OS_PLATFORM === "linux") {
|
|
118
150
|
await copyFontsConfigFile(profilePath);
|
|
119
151
|
}
|
|
120
152
|
};
|
|
121
153
|
exports.composeFonts = composeFonts;
|
|
122
|
-
const copyFontsConfigFile = async profilePath => {
|
|
154
|
+
const copyFontsConfigFile = async (profilePath) => {
|
|
123
155
|
if (!profilePath) {
|
|
124
156
|
return;
|
|
125
157
|
}
|
|
126
|
-
const fileContent = await readFile(
|
|
127
|
-
|
|
128
|
-
|
|
158
|
+
const fileContent = await readFile(
|
|
159
|
+
(0, _path.resolve)(_dirname, "..", "..", "fonts_config"),
|
|
160
|
+
"utf-8"
|
|
161
|
+
);
|
|
162
|
+
const result = fileContent.replace(
|
|
163
|
+
/\$\$GOLOGIN_FONTS\$\$/g,
|
|
164
|
+
(0, _path.join)(profilePath, FONTS_DIR_NAME)
|
|
165
|
+
);
|
|
166
|
+
const defaultFolderPath = (0, _path.join)(profilePath, "Default");
|
|
129
167
|
await mkdir(defaultFolderPath, {
|
|
130
|
-
recursive: true
|
|
168
|
+
recursive: true,
|
|
131
169
|
});
|
|
132
|
-
await writeFile((0, _path.join)(defaultFolderPath,
|
|
170
|
+
await writeFile((0, _path.join)(defaultFolderPath, "fonts_config"), result);
|
|
133
171
|
};
|
|
134
172
|
exports.copyFontsConfigFile = copyFontsConfigFile;
|
|
135
|
-
const setExtPathsAndRemoveDeleted = (
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
originalId
|
|
145
|
-
|
|
146
|
-
|
|
173
|
+
const setExtPathsAndRemoveDeleted = (
|
|
174
|
+
settings = {},
|
|
175
|
+
profileExtensionsCheckRes = [],
|
|
176
|
+
profileId = ""
|
|
177
|
+
) => {
|
|
178
|
+
const formattedLocalExtArray = profileExtensionsCheckRes
|
|
179
|
+
.map((el) => {
|
|
180
|
+
const [extFolderName = ""] = el.split(_path.sep).reverse();
|
|
181
|
+
const [originalId] = extFolderName.split("@");
|
|
182
|
+
if (!originalId) {
|
|
183
|
+
return null;
|
|
184
|
+
}
|
|
185
|
+
return {
|
|
186
|
+
path: el,
|
|
187
|
+
originalId,
|
|
188
|
+
};
|
|
189
|
+
})
|
|
190
|
+
.filter(Boolean);
|
|
147
191
|
const extensionsSettings = settings.extensions?.settings || {};
|
|
148
192
|
const extensionsEntries = Object.entries(extensionsSettings);
|
|
149
|
-
const promises = extensionsEntries.map(async extensionObj => {
|
|
193
|
+
const promises = extensionsEntries.map(async (extensionObj) => {
|
|
150
194
|
let [extensionId, currentExtSettings = {}] = extensionObj;
|
|
151
|
-
const extName = currentExtSettings.manifest?.name ||
|
|
152
|
-
let extPath = currentExtSettings.path ||
|
|
153
|
-
let originalId =
|
|
154
|
-
const isExtensionToBeDeleted =
|
|
195
|
+
const extName = currentExtSettings.manifest?.name || "";
|
|
196
|
+
let extPath = currentExtSettings.path || "";
|
|
197
|
+
let originalId = "";
|
|
198
|
+
const isExtensionToBeDeleted =
|
|
199
|
+
(["resources", "passwords-ext", "cookies-ext"].some((substring) =>
|
|
200
|
+
extPath.includes(substring)
|
|
201
|
+
) &&
|
|
202
|
+
[GOLOGIN_BASE_FOLDER_NAME, GOLOGIN_TEST_FOLDER_NAME].some((substring) =>
|
|
203
|
+
extPath.includes(substring)
|
|
204
|
+
)) ||
|
|
205
|
+
(DEFAULT_ORBITA_EXTENSIONS_NAMES.includes(extName) &&
|
|
206
|
+
[GOLOGIN_BASE_FOLDER_NAME, GOLOGIN_TEST_FOLDER_NAME].some((substring) =>
|
|
207
|
+
extPath.includes(substring)
|
|
208
|
+
));
|
|
155
209
|
if (isExtensionToBeDeleted) {
|
|
156
210
|
delete extensionsSettings[extensionId];
|
|
157
211
|
return;
|
|
158
212
|
}
|
|
159
|
-
if (osPlatform ===
|
|
160
|
-
extPath = extPath.replace(/\//g,
|
|
213
|
+
if (osPlatform === "win32") {
|
|
214
|
+
extPath = extPath.replace(/\//g, "\\");
|
|
161
215
|
} else {
|
|
162
|
-
extPath = extPath.replace(/\\/g,
|
|
216
|
+
extPath = extPath.replace(/\\/g, "/");
|
|
163
217
|
}
|
|
164
218
|
extensionsSettings[extensionId].path = extPath;
|
|
165
219
|
const splittedPath = extPath.split(_path.sep);
|
|
166
|
-
const isExtensionManageable =
|
|
220
|
+
const isExtensionManageable =
|
|
221
|
+
["chrome-extensions", "user-extensions"].some((substring) =>
|
|
222
|
+
extPath.includes(substring)
|
|
223
|
+
) &&
|
|
224
|
+
[GOLOGIN_BASE_FOLDER_NAME, GOLOGIN_TEST_FOLDER_NAME].some((substring) =>
|
|
225
|
+
extPath.includes(substring)
|
|
226
|
+
);
|
|
167
227
|
if (isExtensionManageable) {
|
|
168
228
|
const [extFolderName] = extPath.split(_path.sep).reverse();
|
|
169
|
-
[originalId] = extFolderName.split(
|
|
229
|
+
[originalId] = extFolderName.split("@");
|
|
170
230
|
} else if (splittedPath.length === 2) {
|
|
171
231
|
[originalId] = splittedPath;
|
|
172
232
|
}
|
|
173
233
|
if (isExtensionManageable || splittedPath.length === 2) {
|
|
174
|
-
const isExtensionInProfileSettings = formattedLocalExtArray.find(el =>
|
|
234
|
+
const isExtensionInProfileSettings = formattedLocalExtArray.find((el) =>
|
|
235
|
+
el.path.includes(originalId)
|
|
236
|
+
);
|
|
175
237
|
if (!isExtensionInProfileSettings) {
|
|
176
238
|
delete extensionsSettings[extensionId];
|
|
177
239
|
return;
|
|
178
240
|
}
|
|
179
241
|
}
|
|
180
|
-
const localExtObj =
|
|
242
|
+
const localExtObj =
|
|
243
|
+
originalId &&
|
|
244
|
+
formattedLocalExtArray.find((el) => el.path.includes(originalId));
|
|
181
245
|
if (!localExtObj) {
|
|
182
246
|
return;
|
|
183
247
|
}
|
|
@@ -186,62 +250,82 @@ const setExtPathsAndRemoveDeleted = (settings = {}, profileExtensionsCheckRes =
|
|
|
186
250
|
localExtObj,
|
|
187
251
|
extensionId,
|
|
188
252
|
extensionsSettings,
|
|
189
|
-
currentExtSettings
|
|
253
|
+
currentExtSettings,
|
|
190
254
|
});
|
|
191
255
|
if (initialExtName !== extensionId) {
|
|
192
|
-
const profilePath = (0, _path.join)(
|
|
193
|
-
|
|
194
|
-
|
|
256
|
+
const profilePath = (0, _path.join)(
|
|
257
|
+
(0, _os.tmpdir)(),
|
|
258
|
+
`gologin_profile_${profileId}`
|
|
259
|
+
);
|
|
260
|
+
const extSyncFolder = (0, _path.join)(
|
|
261
|
+
profilePath,
|
|
262
|
+
"Default",
|
|
263
|
+
"Sync Extension Settings",
|
|
264
|
+
initialExtName
|
|
265
|
+
);
|
|
266
|
+
const newSyncFolder = (0, _path.join)(
|
|
267
|
+
profilePath,
|
|
268
|
+
"Default",
|
|
269
|
+
"Sync Extension Settings",
|
|
270
|
+
extensionId
|
|
271
|
+
);
|
|
195
272
|
await rename(extSyncFolder, newSyncFolder).catch(() => null);
|
|
196
273
|
}
|
|
197
|
-
if (localExtObj.path.endsWith(
|
|
198
|
-
localExtObj.path = localExtObj.path.replace(
|
|
274
|
+
if (localExtObj.path.endsWith(".zip")) {
|
|
275
|
+
localExtObj.path = localExtObj.path.replace(".zip", "");
|
|
199
276
|
}
|
|
200
|
-
extensionsSettings[extensionId].path = localExtObj.path ||
|
|
277
|
+
extensionsSettings[extensionId].path = localExtObj.path || "";
|
|
201
278
|
});
|
|
202
279
|
return Promise.all(promises).then(() => extensionsSettings);
|
|
203
280
|
};
|
|
204
281
|
exports.setExtPathsAndRemoveDeleted = setExtPathsAndRemoveDeleted;
|
|
205
|
-
const setOriginalExtPaths = async (
|
|
282
|
+
const setOriginalExtPaths = async (
|
|
283
|
+
settings = {},
|
|
284
|
+
originalExtensionsFolder = ""
|
|
285
|
+
) => {
|
|
206
286
|
if (!originalExtensionsFolder) {
|
|
207
287
|
return null;
|
|
208
288
|
}
|
|
209
289
|
const extensionsSettings = settings.extensions?.settings || {};
|
|
210
290
|
const extensionsEntries = Object.entries(extensionsSettings);
|
|
211
|
-
const originalExtensionsList = await readdir(originalExtensionsFolder).catch(
|
|
291
|
+
const originalExtensionsList = await readdir(originalExtensionsFolder).catch(
|
|
292
|
+
() => []
|
|
293
|
+
);
|
|
212
294
|
if (!originalExtensionsList.length) {
|
|
213
295
|
return null;
|
|
214
296
|
}
|
|
215
|
-
const promises = originalExtensionsList.map(async originalId => {
|
|
297
|
+
const promises = originalExtensionsList.map(async (originalId) => {
|
|
216
298
|
const extFolderPath = (0, _path.join)(originalExtensionsFolder, originalId);
|
|
217
299
|
const extFolderContent = await readdir(extFolderPath);
|
|
218
300
|
if (!extFolderPath.length) {
|
|
219
301
|
return {};
|
|
220
302
|
}
|
|
221
|
-
if (extFolderContent.includes(
|
|
303
|
+
if (extFolderContent.includes("manifest.json")) {
|
|
222
304
|
return {
|
|
223
305
|
originalId,
|
|
224
|
-
path: (0, _path.join)(originalExtensionsFolder, originalId)
|
|
306
|
+
path: (0, _path.join)(originalExtensionsFolder, originalId),
|
|
225
307
|
};
|
|
226
308
|
}
|
|
227
309
|
const [version] = extFolderContent;
|
|
228
310
|
return {
|
|
229
311
|
originalId,
|
|
230
|
-
path: (0, _path.join)(originalExtensionsFolder, originalId, version)
|
|
312
|
+
path: (0, _path.join)(originalExtensionsFolder, originalId, version),
|
|
231
313
|
};
|
|
232
314
|
});
|
|
233
315
|
const originalExtPaths = await Promise.all(promises);
|
|
234
|
-
extensionsEntries.forEach(extensionObj => {
|
|
316
|
+
extensionsEntries.forEach((extensionObj) => {
|
|
235
317
|
const [extensionsId] = extensionObj;
|
|
236
318
|
const extPath = extensionsSettings[extensionsId].path;
|
|
237
319
|
if (!/chrome-extensions/.test(extPath)) {
|
|
238
320
|
return;
|
|
239
321
|
}
|
|
240
|
-
const originalExtPath = originalExtPaths.find(
|
|
322
|
+
const originalExtPath = originalExtPaths.find(
|
|
323
|
+
(el) => el.originalId === extensionsId
|
|
324
|
+
);
|
|
241
325
|
if (!originalExtPath) {
|
|
242
326
|
return;
|
|
243
327
|
}
|
|
244
|
-
extensionsSettings[extensionsId].path = originalExtPath.path ||
|
|
328
|
+
extensionsSettings[extensionsId].path = originalExtPath.path || "";
|
|
245
329
|
});
|
|
246
330
|
return extensionsSettings;
|
|
247
331
|
};
|
|
@@ -250,14 +334,14 @@ const recalculateId = async ({
|
|
|
250
334
|
localExtObj,
|
|
251
335
|
extensionId,
|
|
252
336
|
extensionsSettings,
|
|
253
|
-
currentExtSettings
|
|
337
|
+
currentExtSettings,
|
|
254
338
|
}) => {
|
|
255
339
|
if (currentExtSettings.manifest?.key) {
|
|
256
340
|
return extensionId;
|
|
257
341
|
}
|
|
258
|
-
const manifestFilePath = (0, _path.join)(localExtObj.path,
|
|
342
|
+
const manifestFilePath = (0, _path.join)(localExtObj.path, "manifest.json");
|
|
259
343
|
const manifestString = await readFile(manifestFilePath, {
|
|
260
|
-
encoding:
|
|
344
|
+
encoding: "utf8",
|
|
261
345
|
}).catch(() => ({}));
|
|
262
346
|
if (!manifestString) {
|
|
263
347
|
return extensionId;
|
|
@@ -271,13 +355,19 @@ const recalculateId = async ({
|
|
|
271
355
|
if (manifestObject.key) {
|
|
272
356
|
return extensionId;
|
|
273
357
|
}
|
|
274
|
-
let encoding =
|
|
275
|
-
if (osPlatform ===
|
|
276
|
-
encoding =
|
|
358
|
+
let encoding = "utf8";
|
|
359
|
+
if (osPlatform === "win32") {
|
|
360
|
+
encoding = "utf16le";
|
|
277
361
|
}
|
|
278
362
|
const extPathToEncode = Buffer.from(localExtObj.path, encoding);
|
|
279
|
-
const hexEncodedPath = (0, _crypto.createHash)(
|
|
280
|
-
|
|
363
|
+
const hexEncodedPath = (0, _crypto.createHash)("sha256")
|
|
364
|
+
.update(extPathToEncode)
|
|
365
|
+
.digest("hex");
|
|
366
|
+
const newId = hexEncodedPath
|
|
367
|
+
.split("")
|
|
368
|
+
.slice(0, 32)
|
|
369
|
+
.map((symbol) => extIdEncoding[symbol])
|
|
370
|
+
.join("");
|
|
281
371
|
if (extensionId !== newId) {
|
|
282
372
|
delete extensionsSettings[extensionId];
|
|
283
373
|
extensionsSettings[newId] = currentExtSettings;
|
|
@@ -287,20 +377,20 @@ const recalculateId = async ({
|
|
|
287
377
|
};
|
|
288
378
|
exports.recalculateId = recalculateId;
|
|
289
379
|
const extIdEncoding = {
|
|
290
|
-
0:
|
|
291
|
-
1:
|
|
292
|
-
2:
|
|
293
|
-
3:
|
|
294
|
-
4:
|
|
295
|
-
5:
|
|
296
|
-
6:
|
|
297
|
-
7:
|
|
298
|
-
8:
|
|
299
|
-
9:
|
|
300
|
-
a:
|
|
301
|
-
b:
|
|
302
|
-
c:
|
|
303
|
-
d:
|
|
304
|
-
e:
|
|
305
|
-
f:
|
|
306
|
-
};
|
|
380
|
+
0: "a",
|
|
381
|
+
1: "b",
|
|
382
|
+
2: "c",
|
|
383
|
+
3: "d",
|
|
384
|
+
4: "e",
|
|
385
|
+
5: "f",
|
|
386
|
+
6: "g",
|
|
387
|
+
7: "h",
|
|
388
|
+
8: "i",
|
|
389
|
+
9: "j",
|
|
390
|
+
a: "k",
|
|
391
|
+
b: "l",
|
|
392
|
+
c: "m",
|
|
393
|
+
d: "n",
|
|
394
|
+
e: "o",
|
|
395
|
+
f: "p",
|
|
396
|
+
};
|