gologin-commonjs 1.1.9 → 1.2.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.
- package/dist/examples/puppeter/cloud-browser.js +27 -0
- package/dist/examples/puppeter/headless.js +27 -0
- package/dist/examples/puppeter/local-browser.js +26 -0
- package/dist/examples/puppeter/one-time-use-profile.js +29 -0
- package/dist/src/bookmarks/utils.js +3 -3
- package/dist/src/browser/browser-api.js +21 -22
- package/dist/src/browser/browser-checker.js +70 -65
- package/dist/src/browser/browser-user-data-manager.js +35 -35
- package/dist/src/cookies/cookies-manager.js +32 -3
- package/dist/src/extensions/extensions-manager.js +22 -27
- package/dist/src/extensions/user-extensions-manager.js +7 -9
- package/dist/src/gologin-api.js +196 -32
- package/dist/src/gologin.js +619 -633
- package/dist/src/profile/profile-archiver.js +3 -4
- package/dist/src/utils/common.js +16 -1
- package/dist/src/utils/constants.js +1 -1
- package/dist/src/utils/http.js +60 -0
- package/dist/src/utils/utils.js +4 -2
- package/dist/src/utils/zero-profile-bookmarks.js +167 -0
- package/dist/src/utils/zero-profile-preferences.js +258 -0
- package/dist/test/e2e/run-tests.js +69 -0
- package/gologin/.eslintrc.json +14 -2
- package/gologin/.github/workflows/e2e-tests.yml +37 -0
- package/gologin/CHANGELOG.md +27 -0
- package/gologin/DEVREADME.md +0 -0
- package/gologin/README.md +147 -114
- package/gologin/docker-compose.yml +32 -0
- package/gologin/docs/PRIVACY.md +36 -0
- package/gologin/examples/puppeter/cloud-browser.js +30 -0
- package/gologin/examples/puppeter/headless.js +30 -0
- package/gologin/examples/puppeter/local-browser.js +29 -0
- package/gologin/examples/puppeter/one-time-use-profile.js +31 -0
- package/gologin/fonts.js +4292 -3338
- package/gologin/index.d.ts +60 -16
- package/gologin/package.json +6 -2
- package/gologin/src/bookmarks/utils.js +1 -2
- package/gologin/src/browser/browser-api.js +22 -23
- package/gologin/src/browser/browser-checker.js +72 -65
- package/gologin/src/browser/browser-user-data-manager.js +14 -13
- package/gologin/src/cookies/cookies-manager.js +43 -11
- package/gologin/src/extensions/extensions-manager.js +21 -26
- package/gologin/src/extensions/user-extensions-manager.js +6 -8
- package/gologin/src/gologin-api.js +180 -30
- package/gologin/src/gologin.js +685 -975
- package/gologin/src/profile/profile-archiver.js +4 -6
- package/gologin/src/utils/common.js +13 -0
- package/gologin/src/utils/constants.js +1 -1
- package/gologin/src/utils/http.js +55 -0
- package/gologin/src/utils/utils.js +1 -0
- package/gologin/src/utils/zero-profile-bookmarks.js +161 -0
- package/gologin/src/utils/zero-profile-preferences.js +259 -0
- package/gologin/test/e2e/run-tests.js +73 -0
- package/gologin/types/profile-params.d.ts +126 -0
- package/package.json +3 -2
- package/tes.js +7 -1
- package/types/fonts.d.ts +0 -1
- package/types/src/browser/browser-api.d.ts +3 -3
- package/types/src/browser/browser-checker.d.ts +17 -12
- package/types/src/browser/browser-user-data-manager.d.ts +3 -3
- package/types/src/cookies/cookies-manager.d.ts +7 -1
- package/types/src/extensions/extensions-extractor.d.ts +2 -2
- package/types/src/extensions/extensions-manager.d.ts +4 -4
- package/types/src/extensions/user-extensions-manager.d.ts +3 -3
- package/types/src/gologin-api.d.ts +14 -8
- package/types/src/gologin.d.ts +124 -48
- package/types/src/profile/profile-archiver.d.ts +1 -1
- package/types/src/utils/common.d.ts +6 -4
- package/types/src/utils/constants.d.ts +1 -1
- package/types/src/utils/http.d.ts +2 -0
- package/types/src/utils/utils.d.ts +3 -2
- package/types/src/utils/zero-profile-bookmarks.d.ts +41 -0
- package/types/src/utils/zero-profile-preferences.d.ts +219 -0
- package/gologin/example.js +0 -36
- package/gologin/examples/example-amazon-cloud-browser.js +0 -44
- package/gologin/examples/example-amazon-headless.js +0 -50
- package/gologin/examples/example-amazon.js +0 -47
- package/gologin/examples/example-create-custom-profile.js +0 -39
- package/gologin/examples/example-create-profile.js +0 -40
- package/gologin/examples/example-custom-args.js +0 -34
- package/gologin/examples/example-fast-profile-settings.js +0 -69
- package/gologin/examples/example-gmail.js +0 -67
- package/gologin/examples/example-iphey.js +0 -17
- package/gologin/examples/example-local-profile.js +0 -26
- package/gologin/examples/example-login-walmart.js +0 -35
- package/gologin/examples/example-startremote.js +0 -25
- package/gologin/examples/example-stopremote.js +0 -20
- package/gologin/examples/example-timezone.js +0 -44
- package/gologin/gologin-browser-ext.zip +0 -0
- package/gologin/gologin_zeroprofile.b64 +0 -1
- package/gologin/package-lock.json +0 -3491
- package/gologin/profile_export_example.csv +0 -2
- package/gologin/src/utils/timezone.js +0 -470
- package/gologin/test.html +0 -1
- package/gologin/zero_profile.zip +0 -0
- /package/gologin/.sentry-native/{a65389b2-9a7d-41ed-7de5-95c4570f0d3d.run.lock → 3af76fbc-ac64-4947-d1bf-0ab01540301f.run.lock} +0 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _gologin = require("gologin");
|
|
4
|
+
// Gologin provides a cloud browser that can be used to run puppeteer aytomation.
|
|
5
|
+
// It will handle the browser start and close management - you just need to control the browser with pupputter
|
|
6
|
+
|
|
7
|
+
const token = process.env.GL_API_TOKEN || 'your dev token here';
|
|
8
|
+
const gologin = (0, _gologin.GologinApi)({
|
|
9
|
+
token
|
|
10
|
+
});
|
|
11
|
+
async function main() {
|
|
12
|
+
const {
|
|
13
|
+
browser
|
|
14
|
+
} = await gologin.launch({
|
|
15
|
+
cloud: true
|
|
16
|
+
// pass profileId parameter if you want to run particular profile
|
|
17
|
+
// profileId: 'your profileId here',
|
|
18
|
+
});
|
|
19
|
+
const page = await browser.newPage();
|
|
20
|
+
await page.goto('https://iphey.com/', {
|
|
21
|
+
waitUntil: 'networkidle2'
|
|
22
|
+
});
|
|
23
|
+
const status = await page.$eval('.trustworthy:not(.hide)', elt => elt?.innerText?.trim());
|
|
24
|
+
console.log('status', status);
|
|
25
|
+
return status;
|
|
26
|
+
}
|
|
27
|
+
main().catch(console.error).finally(gologin.exit);
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _gologin = require("gologin");
|
|
4
|
+
// SDK will prepare the browser and will start it on your machine then you can control it with puppeteer
|
|
5
|
+
|
|
6
|
+
const token = process.env.GL_API_TOKEN || 'your dev token here';
|
|
7
|
+
const gologin = (0, _gologin.GologinApi)({
|
|
8
|
+
token
|
|
9
|
+
});
|
|
10
|
+
async function main() {
|
|
11
|
+
const {
|
|
12
|
+
browser
|
|
13
|
+
} = await gologin.launch({
|
|
14
|
+
extra_params: ['--headless']
|
|
15
|
+
// pass profileId parameter if you want to run particular profile
|
|
16
|
+
// profileId: 'your profileId here',
|
|
17
|
+
});
|
|
18
|
+
const page = await browser.newPage();
|
|
19
|
+
await page.goto('https://iphey.com/', {
|
|
20
|
+
waitUntil: 'networkidle2'
|
|
21
|
+
});
|
|
22
|
+
const status = await page.$eval('.trustworthy:not(.hide)', elt => elt?.innerText?.trim());
|
|
23
|
+
await new Promise(resolve => setTimeout(resolve, 10000));
|
|
24
|
+
console.log('status', status);
|
|
25
|
+
return status;
|
|
26
|
+
}
|
|
27
|
+
main().catch(console.error).finally(gologin.exit);
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _gologin = require("gologin");
|
|
4
|
+
// SDK will prepare the browser and will start it on your machine then you can control it with puppeteer
|
|
5
|
+
|
|
6
|
+
const token = process.env.GL_API_TOKEN || 'your dev token here';
|
|
7
|
+
const gologin = (0, _gologin.GologinApi)({
|
|
8
|
+
token
|
|
9
|
+
});
|
|
10
|
+
async function main() {
|
|
11
|
+
const {
|
|
12
|
+
browser
|
|
13
|
+
} = await gologin.launch({
|
|
14
|
+
// pass profileId parameter if you want to run particular profile
|
|
15
|
+
// profileId: 'your profileId here',
|
|
16
|
+
});
|
|
17
|
+
const page = await browser.newPage();
|
|
18
|
+
await page.goto('https://iphey.com/', {
|
|
19
|
+
waitUntil: 'networkidle2'
|
|
20
|
+
});
|
|
21
|
+
const status = await page.$eval('.trustworthy:not(.hide)', elt => elt?.innerText?.trim());
|
|
22
|
+
await new Promise(resolve => setTimeout(resolve, 10000));
|
|
23
|
+
console.log('status', status);
|
|
24
|
+
return status;
|
|
25
|
+
}
|
|
26
|
+
main().catch(console.error).finally(gologin.exit);
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _gologinApi = require("../../src/gologin-api.js");
|
|
4
|
+
// You need to create profile add proxy, use it with puppetter and then delete it
|
|
5
|
+
|
|
6
|
+
const token = process.env.GL_API_TOKEN || 'your dev token here';
|
|
7
|
+
const gologin = (0, _gologinApi.GologinApi)({
|
|
8
|
+
token
|
|
9
|
+
});
|
|
10
|
+
async function main() {
|
|
11
|
+
const profile = await gologin.createProfileRandomFingerprint();
|
|
12
|
+
const profileId = profile.id;
|
|
13
|
+
await gologin.addGologinProxyToProfile(profileId, 'US');
|
|
14
|
+
const {
|
|
15
|
+
browser
|
|
16
|
+
} = await gologin.launch({
|
|
17
|
+
profileId
|
|
18
|
+
});
|
|
19
|
+
const page = await browser.newPage();
|
|
20
|
+
await page.goto('https://iphey.com/', {
|
|
21
|
+
waitUntil: 'networkidle2'
|
|
22
|
+
});
|
|
23
|
+
const status = await page.$eval('.trustworthy:not(.hide)', elt => elt?.innerText?.trim());
|
|
24
|
+
await new Promise(resolve => setTimeout(resolve, 10000));
|
|
25
|
+
console.log('status', status);
|
|
26
|
+
await gologin.deleteProfile(profileId);
|
|
27
|
+
return status;
|
|
28
|
+
}
|
|
29
|
+
main().catch(console.error).finally(gologin.exit);
|
|
@@ -9,11 +9,11 @@ const {
|
|
|
9
9
|
readFile
|
|
10
10
|
} = _fs.promises;
|
|
11
11
|
const getCurrentProfileBookmarks = async pathToBookmarks => {
|
|
12
|
-
const currentBookmarksFileData = await readFile(pathToBookmarks, {
|
|
13
|
-
encoding: 'utf-8'
|
|
14
|
-
});
|
|
15
12
|
let bookmarks = {};
|
|
16
13
|
try {
|
|
14
|
+
const currentBookmarksFileData = await readFile(pathToBookmarks, {
|
|
15
|
+
encoding: 'utf-8'
|
|
16
|
+
});
|
|
17
17
|
bookmarks = JSON.parse(currentBookmarksFileData);
|
|
18
18
|
} catch (error) {
|
|
19
19
|
console.log(error);
|
|
@@ -4,25 +4,24 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.updateProfileUserAgent = exports.updateProfileResolution = exports.updateProfileProxy = exports.updateProfileBookmarks = void 0;
|
|
7
|
-
var _requestretry = _interopRequireDefault(require("requestretry"));
|
|
8
7
|
var _common = require("../utils/common.js");
|
|
9
|
-
|
|
8
|
+
var _http = require("../utils/http.js");
|
|
10
9
|
/**
|
|
11
10
|
* @param {string} profileId
|
|
12
11
|
* @param {string} ACCESS_TOKEN
|
|
13
12
|
* @param {string} resolution
|
|
14
13
|
*/
|
|
15
|
-
const updateProfileResolution = (profileId, ACCESS_TOKEN, resolution) =>
|
|
16
|
-
|
|
17
|
-
Authorization: `Bearer ${ACCESS_TOKEN}`,
|
|
18
|
-
'user-agent': 'gologin-api'
|
|
19
|
-
},
|
|
14
|
+
const updateProfileResolution = (profileId, ACCESS_TOKEN, resolution) => (0, _http.makeRequest)(`${_common.API_URL}/browser/${profileId}/resolution`, {
|
|
15
|
+
method: 'PATCH',
|
|
20
16
|
json: {
|
|
21
17
|
resolution
|
|
22
18
|
},
|
|
23
19
|
maxAttempts: 3,
|
|
24
20
|
retryDelay: 2000,
|
|
25
21
|
timeout: 10 * 1000
|
|
22
|
+
}, {
|
|
23
|
+
token: ACCESS_TOKEN,
|
|
24
|
+
fallbackUrl: `${_common.FALLBACK_API_URL}/browser/${profileId}/resolution`
|
|
26
25
|
}).catch(e => {
|
|
27
26
|
console.log(e);
|
|
28
27
|
return {
|
|
@@ -36,17 +35,17 @@ const updateProfileResolution = (profileId, ACCESS_TOKEN, resolution) => _reques
|
|
|
36
35
|
* @param {string} userAgent
|
|
37
36
|
*/
|
|
38
37
|
exports.updateProfileResolution = updateProfileResolution;
|
|
39
|
-
const updateProfileUserAgent = (profileId, ACCESS_TOKEN, userAgent) =>
|
|
40
|
-
|
|
41
|
-
Authorization: `Bearer ${ACCESS_TOKEN}`,
|
|
42
|
-
'user-agent': 'gologin-api'
|
|
43
|
-
},
|
|
38
|
+
const updateProfileUserAgent = (profileId, ACCESS_TOKEN, userAgent) => (0, _http.makeRequest)(`${_common.API_URL}/browser/${profileId}/ua`, {
|
|
39
|
+
method: 'PATCH',
|
|
44
40
|
json: {
|
|
45
41
|
userAgent
|
|
46
42
|
},
|
|
47
43
|
maxAttempts: 3,
|
|
48
44
|
retryDelay: 2000,
|
|
49
45
|
timeout: 10 * 1000
|
|
46
|
+
}, {
|
|
47
|
+
token: ACCESS_TOKEN,
|
|
48
|
+
fallbackUrl: `${_common.FALLBACK_API_URL}/browser/${profileId}/ua`
|
|
50
49
|
}).catch(e => {
|
|
51
50
|
console.log(e);
|
|
52
51
|
return {
|
|
@@ -65,15 +64,15 @@ const updateProfileUserAgent = (profileId, ACCESS_TOKEN, userAgent) => _requestr
|
|
|
65
64
|
* @param {string} [browserProxyData.password]
|
|
66
65
|
*/
|
|
67
66
|
exports.updateProfileUserAgent = updateProfileUserAgent;
|
|
68
|
-
const updateProfileProxy = (profileId, ACCESS_TOKEN, browserProxyData) =>
|
|
69
|
-
|
|
70
|
-
Authorization: `Bearer ${ACCESS_TOKEN}`,
|
|
71
|
-
'user-agent': 'gologin-api'
|
|
72
|
-
},
|
|
67
|
+
const updateProfileProxy = (profileId, ACCESS_TOKEN, browserProxyData) => (0, _http.makeRequest)(`${_common.API_URL}/browser/${profileId}/proxy`, {
|
|
68
|
+
method: 'PATCH',
|
|
73
69
|
json: browserProxyData,
|
|
74
70
|
maxAttempts: 3,
|
|
75
71
|
retryDelay: 2000,
|
|
76
72
|
timeout: 10 * 1000
|
|
73
|
+
}, {
|
|
74
|
+
token: ACCESS_TOKEN,
|
|
75
|
+
fallbackUrl: `${_common.FALLBACK_API_URL}/browser/${profileId}/proxy`
|
|
77
76
|
}).catch(e => {
|
|
78
77
|
console.log(e);
|
|
79
78
|
return {
|
|
@@ -92,15 +91,15 @@ const updateProfileBookmarks = async (profileIds, ACCESS_TOKEN, bookmarks) => {
|
|
|
92
91
|
profileIds,
|
|
93
92
|
bookmarks
|
|
94
93
|
};
|
|
95
|
-
return
|
|
96
|
-
|
|
97
|
-
Authorization: `Bearer ${ACCESS_TOKEN}`,
|
|
98
|
-
'user-agent': 'gologin-api'
|
|
99
|
-
},
|
|
94
|
+
return (0, _http.makeRequest)(`${_common.API_URL}/browser/bookmarks/many`, {
|
|
95
|
+
method: 'PATCH',
|
|
100
96
|
json: params,
|
|
101
97
|
maxAttempts: 3,
|
|
102
98
|
retryDelay: 2000,
|
|
103
99
|
timeout: 10 * 1000
|
|
100
|
+
}, {
|
|
101
|
+
token: ACCESS_TOKEN,
|
|
102
|
+
fallbackUrl: `${_common.FALLBACK_API_URL}/browser/bookmarks/many`
|
|
104
103
|
}).catch(error => console.log(error));
|
|
105
104
|
};
|
|
106
105
|
exports.updateProfileBookmarks = updateProfileBookmarks;
|
|
@@ -12,9 +12,8 @@ var _https = require("https");
|
|
|
12
12
|
var _os = require("os");
|
|
13
13
|
var _path = require("path");
|
|
14
14
|
var _progress = _interopRequireDefault(require("progress"));
|
|
15
|
-
var _readline = require("readline");
|
|
16
15
|
var _util = _interopRequireDefault(require("util"));
|
|
17
|
-
var
|
|
16
|
+
var _readline = require("readline");
|
|
18
17
|
var _common = require("../utils/common.js");
|
|
19
18
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
20
19
|
const exec = _util.default.promisify(_child_process.exec);
|
|
@@ -29,7 +28,8 @@ const {
|
|
|
29
28
|
symlink,
|
|
30
29
|
lstat,
|
|
31
30
|
rename,
|
|
32
|
-
writeFile
|
|
31
|
+
writeFile,
|
|
32
|
+
readFile
|
|
33
33
|
} = _fs.promises;
|
|
34
34
|
const PLATFORM = process.platform;
|
|
35
35
|
const ARCH = process.arch;
|
|
@@ -47,47 +47,36 @@ const MAC_ARM_HASHFILE_LINK = `https://orbita-browser-mac-arm.gologin.com/${MAC_
|
|
|
47
47
|
const FAIL_SUM_MATCH_MESSAGE = 'hash_sum_not_matched';
|
|
48
48
|
const EXTRACTED_FOLDER = 'extracted-browser';
|
|
49
49
|
class BrowserChecker {
|
|
50
|
-
#homedir;
|
|
51
|
-
#browserPath;
|
|
50
|
+
#homedir = (0, _os.homedir)();
|
|
51
|
+
#browserPath = (0, _path.join)(this.#homedir, '.gologin', 'browser');
|
|
52
52
|
#executableFilePath;
|
|
53
53
|
#skipOrbitaHashChecking = false;
|
|
54
|
-
constructor(
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
executableFilePath = (0, _path.join)(this.#browserPath, orbitaFolderName, 'Orbita-Browser.app', 'Contents', 'MacOS', 'Orbita');
|
|
65
|
-
} else if (PLATFORM === 'win32') {
|
|
66
|
-
executableFilePath = (0, _path.join)(this.#browserPath, 'orbita-browser', 'chrome.exe');
|
|
54
|
+
constructor() {}
|
|
55
|
+
async checkBrowser({
|
|
56
|
+
autoUpdateBrowser,
|
|
57
|
+
checkBrowserUpdate,
|
|
58
|
+
majorVersion
|
|
59
|
+
}) {
|
|
60
|
+
const isBrowserFolderExists = await access((0, _path.join)(this.#browserPath, `orbita-browser-${majorVersion}`)).then(() => true).catch(() => false);
|
|
61
|
+
if (!isBrowserFolderExists || autoUpdateBrowser) {
|
|
62
|
+
await this.downloadBrowser(majorVersion);
|
|
63
|
+
return this.getBrowserExecutablePath(majorVersion);
|
|
67
64
|
}
|
|
68
|
-
this
|
|
69
|
-
// console.log('executableFilePath:', executableFilePath);
|
|
70
|
-
}
|
|
71
|
-
async checkBrowser(autoUpdateBrowser = false, checkBrowserUpdate = true) {
|
|
72
|
-
const browserFolderExists = await access(this.#executableFilePath).then(() => true).catch(() => false);
|
|
73
|
-
const {
|
|
74
|
-
latestVersion: browserLatestVersion,
|
|
75
|
-
browserDownloadUrl
|
|
76
|
-
} = await this.getLatestBrowserVersion();
|
|
77
|
-
if (!browserFolderExists) {
|
|
78
|
-
return this.downloadBrowser(browserLatestVersion, browserDownloadUrl);
|
|
79
|
-
}
|
|
80
|
-
return;
|
|
65
|
+
return this.getBrowserExecutablePath(majorVersion);
|
|
81
66
|
|
|
82
|
-
//
|
|
83
|
-
// const
|
|
84
|
-
|
|
85
|
-
//
|
|
86
|
-
// return;
|
|
87
|
-
// }
|
|
67
|
+
// TO DO: add check for browser update
|
|
68
|
+
// const { latestVersion: browserLatestVersion } = await this.getLatestBrowserVersion();
|
|
69
|
+
// const [latestBrowserMajorVersion] = browserLatestVersion.split('.');
|
|
70
|
+
// const currentVersion = await this.getCurrentVersion(majorVersion);
|
|
88
71
|
|
|
89
|
-
//
|
|
90
|
-
//
|
|
72
|
+
// const isCurrentVersionsLatest = majorVersion === latestBrowserMajorVersion;
|
|
73
|
+
// console.log('browserLatestVersion', browserLatestVersion);
|
|
74
|
+
// console.log('currentVersion', currentVersion);
|
|
75
|
+
// console.log('isCurrentVersionsLatest', isCurrentVersionsLatest);
|
|
76
|
+
// console.log('checkBrowserUpdate', checkBrowserUpdate);
|
|
77
|
+
// console.log('autoUpdateBrowser', autoUpdateBrowser);
|
|
78
|
+
// if (browserLatestVersion === currentVersion || !(checkBrowserUpdate && isCurrentVersionsLatest)) {
|
|
79
|
+
// return this.getBrowserExecutablePath(majorVersion);
|
|
91
80
|
// }
|
|
92
81
|
|
|
93
82
|
// return new Promise(resolve => {
|
|
@@ -101,29 +90,50 @@ class BrowserChecker {
|
|
|
101
90
|
// clearTimeout(timeout);
|
|
102
91
|
// rl.close();
|
|
103
92
|
// if (answer && answer[0].toString().toLowerCase() === 'y') {
|
|
104
|
-
// return this.downloadBrowser(
|
|
93
|
+
// return this.downloadBrowser(majorVersion).then(() => resolve(this.getBrowserExecutablePath(majorVersion)));
|
|
105
94
|
// }
|
|
106
95
|
|
|
107
96
|
// console.log(`Continue with current ${currentVersion} version.`);
|
|
108
|
-
// resolve();
|
|
97
|
+
// resolve(this.getBrowserExecutablePath(majorVersion));
|
|
109
98
|
// });
|
|
110
99
|
// });
|
|
111
100
|
}
|
|
112
|
-
async downloadBrowser(
|
|
113
|
-
await this.deleteOldArchives(true);
|
|
101
|
+
async downloadBrowser(majorVersion) {
|
|
114
102
|
await mkdir(this.#browserPath, {
|
|
115
103
|
recursive: true
|
|
116
104
|
});
|
|
117
|
-
const
|
|
118
|
-
|
|
119
|
-
await this.
|
|
105
|
+
const browserPath = (0, _path.join)(this.#browserPath, BROWSER_ARCHIVE_NAME);
|
|
106
|
+
const browserDownloadUrl = this.getBrowserDownloadUrl(majorVersion);
|
|
107
|
+
await this.downloadBrowserArchive(browserDownloadUrl, browserPath);
|
|
120
108
|
await this.extractBrowser();
|
|
121
|
-
await this.
|
|
122
|
-
console.log('Orbita hash checked successfully');
|
|
123
|
-
await this.replaceBrowser();
|
|
124
|
-
await this.addLatestVersion(latestVersion).catch(() => null);
|
|
109
|
+
await this.replaceBrowser(majorVersion);
|
|
125
110
|
await this.deleteOldArchives();
|
|
126
|
-
|
|
111
|
+
}
|
|
112
|
+
getBrowserExecutablePath(majorVersion) {
|
|
113
|
+
const os = (0, _common.getOS)();
|
|
114
|
+
switch (os) {
|
|
115
|
+
case 'mac':
|
|
116
|
+
return (0, _path.join)(this.#browserPath, `orbita-browser-${majorVersion}`, 'Orbita-Browser.app', 'Contents', 'MacOS', 'Orbita');
|
|
117
|
+
case 'win':
|
|
118
|
+
return (0, _path.join)(this.#browserPath, `orbita-browser-${majorVersion}`, 'chrome.exe');
|
|
119
|
+
case 'macM1':
|
|
120
|
+
return (0, _path.join)(this.#browserPath, `orbita-browser-${majorVersion}`, 'Orbita-Browser.app', 'Contents', 'MacOS', 'Orbita');
|
|
121
|
+
default:
|
|
122
|
+
return (0, _path.join)(this.#browserPath, `orbita-browser-${majorVersion}`, 'chrome');
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
getBrowserDownloadUrl(majorVersion) {
|
|
126
|
+
const os = (0, _common.getOS)();
|
|
127
|
+
switch (os) {
|
|
128
|
+
case 'mac':
|
|
129
|
+
return `https://orbita-browser-mac.gologin.com/orbita-browser-latest-${majorVersion}.tar.gz`;
|
|
130
|
+
case 'win':
|
|
131
|
+
return `https://orbita-browser-windows.gologin.com/orbita-browser-latest-${majorVersion}.zip`;
|
|
132
|
+
case 'macM1':
|
|
133
|
+
return `https://orbita-browser-mac-arm.gologin.com/orbita-browser-latest-${majorVersion}.tar.gz`;
|
|
134
|
+
default:
|
|
135
|
+
return `https://orbita-browser-linux.gologin.com/orbita-browser-latest-${majorVersion}.tar.gz`;
|
|
136
|
+
}
|
|
127
137
|
}
|
|
128
138
|
addLatestVersion(latestVersion) {
|
|
129
139
|
return mkdir((0, _path.join)(this.#browserPath, 'orbita-browser', 'version'), {
|
|
@@ -255,19 +265,16 @@ class BrowserChecker {
|
|
|
255
265
|
throw new Error('Error in sum matching. Please run script again.');
|
|
256
266
|
}
|
|
257
267
|
}
|
|
258
|
-
async replaceBrowser() {
|
|
268
|
+
async replaceBrowser(majorVersion) {
|
|
259
269
|
console.log('Copy Orbita to target path');
|
|
260
270
|
if (PLATFORM === 'darwin') {
|
|
261
|
-
return rename((0, _path.join)(this.#browserPath, EXTRACTED_FOLDER), (0, _path.join)(this.#browserPath,
|
|
271
|
+
return rename((0, _path.join)(this.#browserPath, EXTRACTED_FOLDER), (0, _path.join)(this.#browserPath, `orbita-browser-${majorVersion}`));
|
|
262
272
|
}
|
|
263
|
-
const targetBrowserPath = (0, _path.join)(this.#browserPath,
|
|
273
|
+
const targetBrowserPath = (0, _path.join)(this.#browserPath, `orbita-browser-${majorVersion}`);
|
|
264
274
|
await this.deleteDir(targetBrowserPath);
|
|
265
275
|
await this.copyDir((0, _path.join)(this.#browserPath, EXTRACTED_FOLDER, 'orbita-browser'), targetBrowserPath);
|
|
266
276
|
}
|
|
267
|
-
async deleteOldArchives(
|
|
268
|
-
if (deleteCurrentBrowser) {
|
|
269
|
-
return this.deleteDir((0, _path.join)(this.#browserPath, 'orbita-browser'));
|
|
270
|
-
}
|
|
277
|
+
async deleteOldArchives() {
|
|
271
278
|
await this.deleteDir((0, _path.join)(this.#browserPath, EXTRACTED_FOLDER));
|
|
272
279
|
return readdir(this.#browserPath).then(files => {
|
|
273
280
|
const promises = [];
|
|
@@ -297,14 +304,12 @@ class BrowserChecker {
|
|
|
297
304
|
}
|
|
298
305
|
}
|
|
299
306
|
}
|
|
300
|
-
getCurrentVersion() {
|
|
301
|
-
let
|
|
302
|
-
if (PLATFORM === '
|
|
303
|
-
|
|
304
|
-
} else if (PLATFORM === 'darwin') {
|
|
305
|
-
command = `if [ -f ${(0, _path.join)(this.#browserPath, 'orbita-browser', 'version', VERSION_FILE)} ]; then cat ${(0, _path.join)(this.#browserPath, 'orbita-browser', 'version', VERSION_FILE)}; else echo 0.0.0; fi`;
|
|
307
|
+
async getCurrentVersion(majorVersion) {
|
|
308
|
+
let versionFilePath = (0, _path.join)(this.#browserPath, `orbita-browser-${majorVersion}`, 'version');
|
|
309
|
+
if (PLATFORM === 'darwin') {
|
|
310
|
+
versionFilePath = (0, _path.join)(this.#browserPath, `orbita-browser-${majorVersion}`, 'version', VERSION_FILE);
|
|
306
311
|
}
|
|
307
|
-
return
|
|
312
|
+
return (await readFile(versionFilePath, 'utf8').catch(() => '0.0.0')).replace(/[\r\n\t\f\v\u0000-\u001F\u007F]/g, '');
|
|
308
313
|
}
|
|
309
314
|
getLatestBrowserVersion() {
|
|
310
315
|
const userOs = (0, _common.getOS)();
|
|
@@ -17,11 +17,9 @@ var _fs = require("fs");
|
|
|
17
17
|
var _os = require("os");
|
|
18
18
|
var _path = require("path");
|
|
19
19
|
var _url = require("url");
|
|
20
|
-
var _requestretry = _interopRequireDefault(require("requestretry"));
|
|
21
20
|
var _fonts = require("../../fonts.js");
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}
|
|
21
|
+
var _common = require("../utils/common.js");
|
|
22
|
+
var _http = require("../utils/http.js");
|
|
25
23
|
const { access, readFile, writeFile, mkdir, readdir, copyFile, rename } =
|
|
26
24
|
_fs.promises;
|
|
27
25
|
const _filename = (0, _url.fileURLToPath)(
|
|
@@ -43,23 +41,25 @@ const GOLOGIN_BASE_FOLDER_NAME = ".gologin";
|
|
|
43
41
|
const GOLOGIN_TEST_FOLDER_NAME = ".gologin_test";
|
|
44
42
|
const osPlatform = process.platform;
|
|
45
43
|
const downloadCookies = ({ profileId, ACCESS_TOKEN, API_BASE_URL }) =>
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
Authorization: `Bearer ${ACCESS_TOKEN}`,
|
|
50
|
-
"user-agent": "gologin-api",
|
|
51
|
-
},
|
|
44
|
+
(0, _http.makeRequest)(
|
|
45
|
+
`${API_BASE_URL}/browser/${profileId}/cookies`,
|
|
46
|
+
{
|
|
52
47
|
json: true,
|
|
53
48
|
maxAttempts: 3,
|
|
54
49
|
retryDelay: 2000,
|
|
55
50
|
timeout: 10 * 1000,
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
51
|
+
method: "GET",
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
token: ACCESS_TOKEN,
|
|
55
|
+
fallbackUrl: `${_common.FALLBACK_API_URL}/browser/${profileId}/cookies`,
|
|
56
|
+
}
|
|
57
|
+
).catch((e) => {
|
|
58
|
+
console.log(e);
|
|
59
|
+
return {
|
|
60
|
+
body: [],
|
|
61
|
+
};
|
|
62
|
+
});
|
|
63
63
|
exports.downloadCookies = downloadCookies;
|
|
64
64
|
const uploadCookies = ({
|
|
65
65
|
cookies = [],
|
|
@@ -67,21 +67,23 @@ const uploadCookies = ({
|
|
|
67
67
|
ACCESS_TOKEN,
|
|
68
68
|
API_BASE_URL,
|
|
69
69
|
}) =>
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
Authorization: `Bearer ${ACCESS_TOKEN}`,
|
|
74
|
-
"User-Agent": "gologin-api",
|
|
75
|
-
},
|
|
70
|
+
(0, _http.makeRequest)(
|
|
71
|
+
`${API_BASE_URL}/browser/${profileId}/cookies?encrypted=true`,
|
|
72
|
+
{
|
|
76
73
|
json: cookies,
|
|
77
74
|
maxAttempts: 3,
|
|
78
75
|
retryDelay: 2000,
|
|
79
76
|
timeout: 20 * 1000,
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
77
|
+
method: "POST",
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
token: ACCESS_TOKEN,
|
|
81
|
+
fallbackUrl: `${_common.FALLBACK_API_URL}/browser/${profileId}/cookies?encrypted=true`,
|
|
82
|
+
}
|
|
83
|
+
).catch((e) => {
|
|
84
|
+
console.log(e);
|
|
85
|
+
return e;
|
|
86
|
+
});
|
|
85
87
|
exports.uploadCookies = uploadCookies;
|
|
86
88
|
const downloadFonts = async (fontsList = [], profilePath) => {
|
|
87
89
|
if (!fontsList.length) {
|
|
@@ -94,13 +96,11 @@ const downloadFonts = async (fontsList = [], profilePath) => {
|
|
|
94
96
|
const files = await readdir(browserFontsPath);
|
|
95
97
|
const fontsToDownload = fontsList.filter((font) => !files.includes(font));
|
|
96
98
|
let promises = fontsToDownload.map((font) =>
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
})
|
|
103
|
-
.pipe((0, _fs.createWriteStream)((0, _path.join)(browserFontsPath, font)))
|
|
99
|
+
(0, _http.makeRequest)(FONTS_URL + font, {
|
|
100
|
+
maxAttempts: 5,
|
|
101
|
+
retryDelay: 2000,
|
|
102
|
+
timeout: 30 * 1000,
|
|
103
|
+
}).pipe((0, _fs.createWriteStream)((0, _path.join)(browserFontsPath, font)))
|
|
104
104
|
);
|
|
105
105
|
if (promises.length) {
|
|
106
106
|
await Promise.all(promises);
|
|
@@ -3,11 +3,12 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.unixToLDAP = exports.loadCookiesFromFile = exports.ldapToUnix = exports.getDB = exports.getCookiesFilePath = exports.getChunckedInsertValues = exports.chunk = exports.buildCookieURL = void 0;
|
|
7
|
-
var _sqlite = require("sqlite");
|
|
8
|
-
var _sqlite2 = _interopRequireDefault(require("sqlite3"));
|
|
6
|
+
exports.unixToLDAP = exports.loadCookiesFromFile = exports.ldapToUnix = exports.getUniqueCookies = exports.getDB = exports.getCookiesFilePath = exports.getChunckedInsertValues = exports.createDBFile = exports.chunk = exports.buildCookieURL = void 0;
|
|
9
7
|
var _fs = require("fs");
|
|
10
8
|
var _path = require("path");
|
|
9
|
+
var _sqlite = require("sqlite");
|
|
10
|
+
var _sqlite2 = _interopRequireDefault(require("sqlite3"));
|
|
11
|
+
var _common = require("../utils/common.js");
|
|
11
12
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
13
|
const {
|
|
13
14
|
access
|
|
@@ -34,6 +35,34 @@ const getDB = (filePath, readOnly = true) => {
|
|
|
34
35
|
return (0, _sqlite.open)(connectionOpts);
|
|
35
36
|
};
|
|
36
37
|
exports.getDB = getDB;
|
|
38
|
+
const createDBFile = async ({
|
|
39
|
+
cookiesFilePath,
|
|
40
|
+
cookiesFileSecondPath,
|
|
41
|
+
createCookiesTableQuery
|
|
42
|
+
}) => {
|
|
43
|
+
await _fs.promises.writeFile(cookiesFilePath, '', {
|
|
44
|
+
mode: 0o666
|
|
45
|
+
});
|
|
46
|
+
const connectionOpts = {
|
|
47
|
+
filename: cookiesFilePath,
|
|
48
|
+
driver: _sqlite2.default.Database
|
|
49
|
+
};
|
|
50
|
+
const db = await (0, _sqlite.open)(connectionOpts);
|
|
51
|
+
await db.run(createCookiesTableQuery);
|
|
52
|
+
await db.close();
|
|
53
|
+
await (0, _common.ensureDirectoryExists)(cookiesFilePath);
|
|
54
|
+
await (0, _common.ensureDirectoryExists)(cookiesFileSecondPath);
|
|
55
|
+
cookiesFileSecondPath && (await _fs.promises.copyFile(cookiesFilePath, cookiesFileSecondPath).catch(error => {
|
|
56
|
+
console.error('error in copyFile createDBFile', error.message);
|
|
57
|
+
}));
|
|
58
|
+
};
|
|
59
|
+
exports.createDBFile = createDBFile;
|
|
60
|
+
const getUniqueCookies = async (cookiesArr, cookiesFilePath) => {
|
|
61
|
+
const cookiesInFile = await loadCookiesFromFile(cookiesFilePath);
|
|
62
|
+
const existingCookieNames = new Set(cookiesInFile.map(c => `${c.name}-${c.value.toString('base64')}`));
|
|
63
|
+
return cookiesArr.filter(cookie => !existingCookieNames.has(`${cookie.name}-${cookie.value.toString('base64')}`));
|
|
64
|
+
};
|
|
65
|
+
exports.getUniqueCookies = getUniqueCookies;
|
|
37
66
|
const getChunckedInsertValues = cookiesArr => {
|
|
38
67
|
const todayUnix = Math.floor(new Date().getTime() / 1000.0);
|
|
39
68
|
const chunckedCookiesArr = chunk(cookiesArr, MAX_SQLITE_VARIABLES);
|