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.
Files changed (95) hide show
  1. package/dist/examples/puppeter/cloud-browser.js +27 -0
  2. package/dist/examples/puppeter/headless.js +27 -0
  3. package/dist/examples/puppeter/local-browser.js +26 -0
  4. package/dist/examples/puppeter/one-time-use-profile.js +29 -0
  5. package/dist/src/bookmarks/utils.js +3 -3
  6. package/dist/src/browser/browser-api.js +21 -22
  7. package/dist/src/browser/browser-checker.js +70 -65
  8. package/dist/src/browser/browser-user-data-manager.js +35 -35
  9. package/dist/src/cookies/cookies-manager.js +32 -3
  10. package/dist/src/extensions/extensions-manager.js +22 -27
  11. package/dist/src/extensions/user-extensions-manager.js +7 -9
  12. package/dist/src/gologin-api.js +196 -32
  13. package/dist/src/gologin.js +619 -633
  14. package/dist/src/profile/profile-archiver.js +3 -4
  15. package/dist/src/utils/common.js +16 -1
  16. package/dist/src/utils/constants.js +1 -1
  17. package/dist/src/utils/http.js +60 -0
  18. package/dist/src/utils/utils.js +4 -2
  19. package/dist/src/utils/zero-profile-bookmarks.js +167 -0
  20. package/dist/src/utils/zero-profile-preferences.js +258 -0
  21. package/dist/test/e2e/run-tests.js +69 -0
  22. package/gologin/.eslintrc.json +14 -2
  23. package/gologin/.github/workflows/e2e-tests.yml +37 -0
  24. package/gologin/CHANGELOG.md +27 -0
  25. package/gologin/DEVREADME.md +0 -0
  26. package/gologin/README.md +147 -114
  27. package/gologin/docker-compose.yml +32 -0
  28. package/gologin/docs/PRIVACY.md +36 -0
  29. package/gologin/examples/puppeter/cloud-browser.js +30 -0
  30. package/gologin/examples/puppeter/headless.js +30 -0
  31. package/gologin/examples/puppeter/local-browser.js +29 -0
  32. package/gologin/examples/puppeter/one-time-use-profile.js +31 -0
  33. package/gologin/fonts.js +4292 -3338
  34. package/gologin/index.d.ts +60 -16
  35. package/gologin/package.json +6 -2
  36. package/gologin/src/bookmarks/utils.js +1 -2
  37. package/gologin/src/browser/browser-api.js +22 -23
  38. package/gologin/src/browser/browser-checker.js +72 -65
  39. package/gologin/src/browser/browser-user-data-manager.js +14 -13
  40. package/gologin/src/cookies/cookies-manager.js +43 -11
  41. package/gologin/src/extensions/extensions-manager.js +21 -26
  42. package/gologin/src/extensions/user-extensions-manager.js +6 -8
  43. package/gologin/src/gologin-api.js +180 -30
  44. package/gologin/src/gologin.js +685 -975
  45. package/gologin/src/profile/profile-archiver.js +4 -6
  46. package/gologin/src/utils/common.js +13 -0
  47. package/gologin/src/utils/constants.js +1 -1
  48. package/gologin/src/utils/http.js +55 -0
  49. package/gologin/src/utils/utils.js +1 -0
  50. package/gologin/src/utils/zero-profile-bookmarks.js +161 -0
  51. package/gologin/src/utils/zero-profile-preferences.js +259 -0
  52. package/gologin/test/e2e/run-tests.js +73 -0
  53. package/gologin/types/profile-params.d.ts +126 -0
  54. package/package.json +3 -2
  55. package/tes.js +7 -1
  56. package/types/fonts.d.ts +0 -1
  57. package/types/src/browser/browser-api.d.ts +3 -3
  58. package/types/src/browser/browser-checker.d.ts +17 -12
  59. package/types/src/browser/browser-user-data-manager.d.ts +3 -3
  60. package/types/src/cookies/cookies-manager.d.ts +7 -1
  61. package/types/src/extensions/extensions-extractor.d.ts +2 -2
  62. package/types/src/extensions/extensions-manager.d.ts +4 -4
  63. package/types/src/extensions/user-extensions-manager.d.ts +3 -3
  64. package/types/src/gologin-api.d.ts +14 -8
  65. package/types/src/gologin.d.ts +124 -48
  66. package/types/src/profile/profile-archiver.d.ts +1 -1
  67. package/types/src/utils/common.d.ts +6 -4
  68. package/types/src/utils/constants.d.ts +1 -1
  69. package/types/src/utils/http.d.ts +2 -0
  70. package/types/src/utils/utils.d.ts +3 -2
  71. package/types/src/utils/zero-profile-bookmarks.d.ts +41 -0
  72. package/types/src/utils/zero-profile-preferences.d.ts +219 -0
  73. package/gologin/example.js +0 -36
  74. package/gologin/examples/example-amazon-cloud-browser.js +0 -44
  75. package/gologin/examples/example-amazon-headless.js +0 -50
  76. package/gologin/examples/example-amazon.js +0 -47
  77. package/gologin/examples/example-create-custom-profile.js +0 -39
  78. package/gologin/examples/example-create-profile.js +0 -40
  79. package/gologin/examples/example-custom-args.js +0 -34
  80. package/gologin/examples/example-fast-profile-settings.js +0 -69
  81. package/gologin/examples/example-gmail.js +0 -67
  82. package/gologin/examples/example-iphey.js +0 -17
  83. package/gologin/examples/example-local-profile.js +0 -26
  84. package/gologin/examples/example-login-walmart.js +0 -35
  85. package/gologin/examples/example-startremote.js +0 -25
  86. package/gologin/examples/example-stopremote.js +0 -20
  87. package/gologin/examples/example-timezone.js +0 -44
  88. package/gologin/gologin-browser-ext.zip +0 -0
  89. package/gologin/gologin_zeroprofile.b64 +0 -1
  90. package/gologin/package-lock.json +0 -3491
  91. package/gologin/profile_export_example.csv +0 -2
  92. package/gologin/src/utils/timezone.js +0 -470
  93. package/gologin/test.html +0 -1
  94. package/gologin/zero_profile.zip +0 -0
  95. /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
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
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) => _requestretry.default.patch(`${_common.API_URL}/browser/${profileId}/resolution`, {
16
- headers: {
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) => _requestretry.default.patch(`${_common.API_URL}/browser/${profileId}/ua`, {
40
- headers: {
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) => _requestretry.default.patch(`${_common.API_URL}/browser/${profileId}/proxy`, {
69
- headers: {
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 _requestretry.default.patch(`${_common.API_URL}/browser/bookmarks/many`, {
96
- headers: {
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 _utils = require("../utils/utils.js");
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(skipOrbitaHashChecking) {
55
- this.#skipOrbitaHashChecking = skipOrbitaHashChecking;
56
- this.#homedir = (0, _os.homedir)();
57
- this.#browserPath = (0, _path.join)(this.#homedir, '.gologin', 'browser');
58
- let executableFilePath = (0, _path.join)(this.#browserPath, 'orbita-browser', 'chrome');
59
- if (PLATFORM === 'darwin') {
60
- const orbitaFolderName = (0, _utils.findLatestBrowserVersionDirectory)(this.#browserPath);
61
- if (orbitaFolderName === 'error') {
62
- throw Error('Orbita folder not found in this directory: ' + this.#browserPath);
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.#executableFilePath = executableFilePath;
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
- // 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
- // }
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
- // if (autoUpdateBrowser) {
90
- // return this.downloadBrowser(browserLatestVersion, browserDownloadUrl);
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(browserLatestVersion, browserDownloadUrl).then(() => resolve());
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(latestVersion, browserDownloadUrl) {
113
- await this.deleteOldArchives(true);
101
+ async downloadBrowser(majorVersion) {
114
102
  await mkdir(this.#browserPath, {
115
103
  recursive: true
116
104
  });
117
- const pathStr = (0, _path.join)(this.#browserPath, BROWSER_ARCHIVE_NAME);
118
- await this.downloadBrowserArchive(browserDownloadUrl, pathStr);
119
- await this.checkBrowserArchive(pathStr);
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.checkBrowserSum(latestVersion);
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
- console.log('Orbita updated successfully');
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, 'orbita-browser'));
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, 'orbita-browser');
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(deleteCurrentBrowser = false) {
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 command = `if [ -f ${(0, _path.join)(this.#browserPath, 'orbita-browser', 'version')} ]; then cat ${(0, _path.join)(this.#browserPath, 'orbita-browser', 'version')}; else echo 0.0.0; fi`;
302
- if (PLATFORM === 'win32') {
303
- command = `if exist "${(0, _path.join)(this.#browserPath, 'orbita-browser', 'version')}" (type "${(0, _path.join)(this.#browserPath, 'orbita-browser', 'version')}") else (echo 0.0.0)`;
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 exec(command);
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
- function _interopRequireDefault(e) {
23
- return e && e.__esModule ? e : { default: e };
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
- _requestretry.default
47
- .get(`${API_BASE_URL}/browser/${profileId}/cookies`, {
48
- headers: {
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
- .catch((e) => {
58
- console.log(e);
59
- return {
60
- body: [],
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
- _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
- },
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
- .catch((e) => {
82
- console.log(e);
83
- return e;
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
- _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)))
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);