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,392 @@
1
+ import { exec as execNonPromise } from 'child_process';
2
+ import decompress from 'decompress';
3
+ import decompressUnzip from 'decompress-unzip';
4
+ import { createWriteStream, promises as _promises } from 'fs';
5
+ import { get } from 'https';
6
+ import { homedir } from 'os';
7
+ import { join } from 'path';
8
+ import ProgressBar from 'progress';
9
+ import { createInterface } from 'readline';
10
+ import util from 'util';
11
+
12
+ import { findLatestBrowserVersionDirectory } from '../utils/utils.js';
13
+ import { API_URL, getOS } from '../utils/common.js';
14
+
15
+ const exec = util.promisify(execNonPromise);
16
+ const { access, mkdir, readdir, rmdir, unlink, copyFile, readlink, symlink, lstat, rename, writeFile } = _promises;
17
+
18
+ const PLATFORM = process.platform;
19
+ const ARCH = process.arch;
20
+
21
+ const VERSION_FILE = 'latest-version.txt';
22
+
23
+ const WIN_FOLDERSIZE_FILE = 'foldersize.txt';
24
+ const WIN_FOLDERSIZE_FILE_LINK = `https://orbita-browser-windows.gologin.com/${WIN_FOLDERSIZE_FILE}`;
25
+
26
+ const BROWSER_ARCHIVE_NAME = `orbita-browser-latest.${PLATFORM === 'win32' ? 'zip' : 'tar.gz'}`;
27
+
28
+ const MAC_HASH_FILE = 'hashfile.mtree';
29
+ const DEB_HASH_FILE = 'hashfile.txt';
30
+ const WIN_HASH_FILE = DEB_HASH_FILE;
31
+ const MAC_HASHFILE_LINK = `https://orbita-browser-mac.gologin.com/${MAC_HASH_FILE}`;
32
+ const DEB_HASHFILE_LINK = `https://orbita-browser-linux.gologin.com/${DEB_HASH_FILE}`;
33
+ const WIN_HASHFILE_LINK = `https://orbita-browser-windows.gologin.com/${WIN_HASH_FILE}`;
34
+ const MAC_ARM_HASHFILE_LINK = `https://orbita-browser-mac-arm.gologin.com/${MAC_HASH_FILE}`;
35
+
36
+ const FAIL_SUM_MATCH_MESSAGE = 'hash_sum_not_matched';
37
+ const EXTRACTED_FOLDER = 'extracted-browser';
38
+
39
+ export class BrowserChecker {
40
+ #homedir;
41
+ #browserPath;
42
+ #executableFilePath;
43
+ #skipOrbitaHashChecking = false;
44
+
45
+ constructor(skipOrbitaHashChecking) {
46
+ this.#skipOrbitaHashChecking = skipOrbitaHashChecking;
47
+ this.#homedir = homedir();
48
+ this.#browserPath = join(this.#homedir, '.gologin', 'browser');
49
+
50
+ let executableFilePath = join(this.#browserPath, 'orbita-browser', 'chrome');
51
+ if (PLATFORM === 'darwin') {
52
+ const orbitaFolderName = findLatestBrowserVersionDirectory(this.#browserPath);
53
+ if (orbitaFolderName === 'error') {
54
+ throw Error('Orbita folder not found in this directory: ' + this.#browserPath);
55
+ }
56
+
57
+ executableFilePath = join(this.#browserPath, orbitaFolderName, 'Orbita-Browser.app', 'Contents', 'MacOS', 'Orbita');
58
+ } else if (PLATFORM === 'win32') {
59
+ executableFilePath = join(this.#browserPath, 'orbita-browser', 'chrome.exe');
60
+ }
61
+
62
+ this.#executableFilePath = executableFilePath;
63
+ // console.log('executableFilePath:', executableFilePath);
64
+ }
65
+
66
+ async checkBrowser(autoUpdateBrowser = false, checkBrowserUpdate = true) {
67
+ const browserFolderExists = await access(this.#executableFilePath).then(() => true).catch(() => false);
68
+
69
+ const { latestVersion: browserLatestVersion, browserDownloadUrl } = await this.getLatestBrowserVersion();
70
+
71
+ if (!browserFolderExists) {
72
+ return this.downloadBrowser(browserLatestVersion, browserDownloadUrl);
73
+ }
74
+
75
+ const currentVersionReq = await this.getCurrentVersion();
76
+ const currentVersion = (currentVersionReq?.stdout || '').replace(/(\r\n|\n|\r)/gm, '');
77
+
78
+ if (browserLatestVersion === currentVersion || !checkBrowserUpdate) {
79
+ return;
80
+ }
81
+
82
+ if (autoUpdateBrowser) {
83
+ return this.downloadBrowser(browserLatestVersion, browserDownloadUrl);
84
+ }
85
+
86
+ return new Promise(resolve => {
87
+ const rl = createInterface(process.stdin, process.stdout);
88
+ const timeout = setTimeout(() => {
89
+ console.log(`\nContinue with current ${currentVersion} version.`);
90
+ resolve();
91
+ }, 10000);
92
+
93
+ rl.question(`New Orbita ${browserLatestVersion} is available. Update? [y/n] `, (answer) => {
94
+ clearTimeout(timeout);
95
+ rl.close();
96
+ if (answer && answer[0].toString().toLowerCase() === 'y') {
97
+ return this.downloadBrowser(browserLatestVersion, browserDownloadUrl).then(() => resolve());
98
+ }
99
+
100
+ console.log(`Continue with current ${currentVersion} version.`);
101
+ resolve();
102
+ });
103
+ });
104
+ }
105
+
106
+ async downloadBrowser(latestVersion, browserDownloadUrl) {
107
+ await this.deleteOldArchives(true);
108
+ await mkdir(this.#browserPath, { recursive: true });
109
+
110
+ const pathStr = join(this.#browserPath, BROWSER_ARCHIVE_NAME);
111
+
112
+ await this.downloadBrowserArchive(browserDownloadUrl, pathStr);
113
+ await this.checkBrowserArchive(pathStr);
114
+ await this.extractBrowser();
115
+ await this.checkBrowserSum(latestVersion);
116
+ console.log('Orbita hash checked successfully');
117
+ await this.replaceBrowser();
118
+ await this.addLatestVersion(latestVersion).catch(() => null);
119
+ await this.deleteOldArchives();
120
+ console.log('Orbita updated successfully');
121
+ }
122
+
123
+ addLatestVersion(latestVersion) {
124
+ return mkdir(join(this.#browserPath, 'orbita-browser', 'version'), { recursive: true })
125
+ .then(() => writeFile(join(this.#browserPath, 'orbita-browser', 'version', 'latest-version.txt'), latestVersion));
126
+ }
127
+
128
+ downloadBrowserArchive(link, pathStr) {
129
+ return new Promise((resolve, reject) => {
130
+ const writableStream = createWriteStream(pathStr);
131
+ writableStream.on('error', async err => {
132
+ await unlink(pathStr);
133
+ reject(err);
134
+ });
135
+ writableStream.on('finish', () => resolve());
136
+
137
+ const req = get(link, {
138
+ timeout: 15 * 1000,
139
+ }, (res) => {
140
+ const len = parseInt(res.headers['content-length'], 10);
141
+ const formattedLen = len / 1024 / 1024;
142
+ const bar = new ProgressBar('Orbita downloading [:bar] :rate/mps :downloadedMb/:fullMbMB :percent :etas', {
143
+ complete: '=',
144
+ incomplete: ' ',
145
+ width: 30,
146
+ total: Math.round(formattedLen),
147
+ });
148
+
149
+ let downloadedMb = 0;
150
+
151
+ res.on('data', (chunk) => {
152
+ const formattedChunckLenght = chunk.length / 1024 / 1024;
153
+ downloadedMb += formattedChunckLenght;
154
+ bar.tick(formattedChunckLenght, {
155
+ fullMb: formattedLen.toFixed(2),
156
+ downloadedMb: downloadedMb.toFixed(2),
157
+ });
158
+ });
159
+
160
+ res.on('end', () => {
161
+ bar.tick(bar.total, {
162
+ fullMb: formattedLen.toFixed(2),
163
+ downloadedMb: formattedLen.toFixed(2),
164
+ });
165
+ console.log('\nDownload completed');
166
+ writableStream.end();
167
+ });
168
+
169
+ res.pipe(writableStream);
170
+ });
171
+
172
+ req.on('error', (err) => writableStream.destroy(err));
173
+ req.end();
174
+ });
175
+ }
176
+
177
+ async checkBrowserArchive(pathStr) {
178
+ console.log('Checking Orbita archive');
179
+ try {
180
+ await access(pathStr);
181
+ } catch (e) {
182
+ throw new Error('Archive has not been found. Please run script again.');
183
+ }
184
+ }
185
+
186
+ async extractBrowser() {
187
+ console.log('Extracting Orbita');
188
+ await mkdir(join(this.#browserPath, EXTRACTED_FOLDER), { recursive: true });
189
+ if (PLATFORM === 'win32') {
190
+ return decompress(join(this.#browserPath, BROWSER_ARCHIVE_NAME), join(this.#browserPath, EXTRACTED_FOLDER),
191
+ {
192
+ plugins: [decompressUnzip()],
193
+ filter: file => !file.path.endsWith('/'),
194
+ },
195
+ );
196
+ }
197
+
198
+ return exec(
199
+ `tar xzf ${join(this.#browserPath, BROWSER_ARCHIVE_NAME)} --directory ${join(this.#browserPath, EXTRACTED_FOLDER)}`,
200
+ );
201
+ }
202
+
203
+ async downloadHashFile(latestVersion) {
204
+ let hashLink = DEB_HASHFILE_LINK;
205
+ let resultPath = join(this.#browserPath, DEB_HASH_FILE);
206
+ if (PLATFORM === 'darwin') {
207
+ hashLink = MAC_HASHFILE_LINK;
208
+ if (ARCH === 'arm64') {
209
+ hashLink = MAC_ARM_HASHFILE_LINK;
210
+ }
211
+ resultPath = join(this.#browserPath, MAC_HASH_FILE);
212
+ }
213
+
214
+ if (latestVersion) {
215
+ const [majorVer] = latestVersion.split('.');
216
+ hashLink = hashLink.replace('hashfile.', `hashfile-${majorVer}.`);
217
+ }
218
+
219
+ const writableStream = createWriteStream(resultPath);
220
+ writableStream.on('error', async (err) => {
221
+ await unlink(resultPath);
222
+ throw err;
223
+ });
224
+
225
+ await new Promise(resolve => get(hashLink,
226
+ {
227
+ timeout: 10 * 1000,
228
+ }, (res) => {
229
+ res.on('end', () => {
230
+ console.log('Hashfile downloading completed');
231
+ writableStream.end();
232
+ resolve();
233
+ });
234
+
235
+ res.pipe(writableStream);
236
+ }).on('error', (err) => writableStream.destroy(err)));
237
+
238
+ const hashFile = PLATFORM === 'darwin' ? MAC_HASH_FILE : DEB_HASH_FILE;
239
+ const hashFilePath = join(this.#browserPath, hashFile);
240
+
241
+ return access(hashFilePath);
242
+ }
243
+
244
+ async checkBrowserSum(latestVersion) {
245
+ if (this.#skipOrbitaHashChecking) {
246
+ return Promise.resolve();
247
+ }
248
+
249
+ console.log('Orbita hash checking');
250
+ if (PLATFORM === 'win32') {
251
+ return Promise.resolve();
252
+ }
253
+
254
+ await this.downloadHashFile(latestVersion);
255
+ if (PLATFORM === 'darwin') {
256
+ const calculatedHash = await exec(
257
+ `mtree -p ${join(this.#browserPath, EXTRACTED_FOLDER, 'Orbita-Browser.app')} < ${join(this.#browserPath, MAC_HASH_FILE)} || echo ${FAIL_SUM_MATCH_MESSAGE}`,
258
+ );
259
+
260
+ const checkedRes = (calculatedHash || '').toString().trim();
261
+ if (checkedRes.includes(FAIL_SUM_MATCH_MESSAGE)) {
262
+ throw new Error('Error in sum matching. Please run script again.');
263
+ }
264
+
265
+ return;
266
+ }
267
+
268
+ const hashFileContent = await exec(`cat ${join(this.#browserPath, DEB_HASH_FILE)}`);
269
+ let serverRes = (hashFileContent.stdout || '').toString().trim();
270
+ serverRes = serverRes.split(' ')[0];
271
+
272
+ const calculateLocalBrowserHash = await exec(
273
+ `cd ${join(this.#browserPath, EXTRACTED_FOLDER)} && find orbita-browser -type f -print0 | sort -z | \
274
+ xargs -0 sha256sum > ${this.#browserPath}/calculatedFolderSha.txt`,
275
+ );
276
+
277
+ const localHashContent = await exec(`cd ${this.#browserPath} && sha256sum calculatedFolderSha.txt`);
278
+ let userRes = (localHashContent.stdout || '').toString().trim();
279
+ userRes = userRes.split(' ')[0];
280
+ if (userRes !== serverRes) {
281
+ throw new Error('Error in sum matching. Please run script again.');
282
+ }
283
+ }
284
+
285
+ async replaceBrowser() {
286
+ console.log('Copy Orbita to target path');
287
+ if (PLATFORM === 'darwin') {
288
+ return rename(join(this.#browserPath, EXTRACTED_FOLDER), join(this.#browserPath, 'orbita-browser'))
289
+ }
290
+
291
+ const targetBrowserPath = join(this.#browserPath, 'orbita-browser');
292
+ await this.deleteDir(targetBrowserPath);
293
+
294
+ await this.copyDir(
295
+ join(this.#browserPath, EXTRACTED_FOLDER, 'orbita-browser'),
296
+ targetBrowserPath,
297
+ );
298
+ }
299
+
300
+ async deleteOldArchives(deleteCurrentBrowser = false) {
301
+ if (deleteCurrentBrowser) {
302
+ return this.deleteDir(join(this.#browserPath, 'orbita-browser'));
303
+ }
304
+
305
+ await this.deleteDir(join(this.#browserPath, EXTRACTED_FOLDER));
306
+
307
+ return readdir(this.#browserPath)
308
+ .then((files) => {
309
+ const promises = [];
310
+ files.forEach((filename) => {
311
+ if (filename.match(/(txt|dylib|mtree)/)) {
312
+ promises.push(unlink(join(this.#browserPath, filename)));
313
+ }
314
+ });
315
+
316
+ return Promise.all(promises);
317
+ })
318
+ .catch(e => {
319
+ console.log(`Error in deleting old archives. ${e.message}`);
320
+
321
+ return Promise.resolve();
322
+ });
323
+ }
324
+
325
+ async copyDir(src, dest) {
326
+ await mkdir(dest);
327
+ const files = await readdir(src);
328
+ for (let i = 0; i < files.length; i++) {
329
+ const current = await lstat(join(src, files[i]));
330
+ if (current.isDirectory()) {
331
+ await this.copyDir(join(src, files[i]), join(dest, files[i]));
332
+ } else if (current.isSymbolicLink()) {
333
+ const symlinkObj = await readlink(join(src, files[i]));
334
+ await symlink(symlinkObj, join(dest, files[i]));
335
+ } else {
336
+ await copyFile(join(src, files[i]), join(dest, files[i]));
337
+ }
338
+ }
339
+ }
340
+
341
+ getCurrentVersion() {
342
+ let command = `if [ -f ${join(this.#browserPath, 'orbita-browser', 'version')} ]; then cat ${join(this.#browserPath, 'orbita-browser', 'version')}; else echo 0.0.0; fi`;
343
+ if (PLATFORM === 'win32') {
344
+ command = `if exist "${join(this.#browserPath, 'orbita-browser', 'version')}" (type "${join(this.#browserPath, 'orbita-browser', 'version')}") else (echo 0.0.0)`;
345
+ } else if (PLATFORM === 'darwin') {
346
+ command = `if [ -f ${join(this.#browserPath, 'orbita-browser', 'version', VERSION_FILE)} ]; then cat ${join(this.#browserPath, 'orbita-browser', 'version', VERSION_FILE)}; else echo 0.0.0; fi`;
347
+ }
348
+
349
+ return exec(command);
350
+ }
351
+
352
+ getLatestBrowserVersion() {
353
+ const userOs = getOS();
354
+
355
+ return new Promise(resolve => get(`${API_URL}/gologin-global-settings/latest-browser-info?os=${userOs}`,
356
+ {
357
+ timeout: 15 * 1000,
358
+ headers: {
359
+ 'Content-Type': 'application/json',
360
+ 'User-Agent': 'gologin-api',
361
+ },
362
+ }, (res) => {
363
+ res.setEncoding('utf8');
364
+
365
+ let resultResponse = '';
366
+ res.on('data', (data) => resultResponse += data);
367
+
368
+ res.on('end', () => {
369
+ resolve(JSON.parse(resultResponse.trim()));
370
+ });
371
+ }).on('error', (err) => resolve('')));
372
+ }
373
+
374
+ get getOrbitaPath() {
375
+ return this.#executableFilePath;
376
+ }
377
+
378
+ async deleteDir(path = '') {
379
+ if (!path) {
380
+ return;
381
+ }
382
+
383
+ const directoryExists = await access(path).then(() => true).catch(() => false);
384
+ if (!directoryExists) {
385
+ return;
386
+ }
387
+
388
+ return rmdir(path, { recursive: true });
389
+ }
390
+ }
391
+
392
+ export default BrowserChecker;