@blitzbrowser/blitzbrowser 1.0.0

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 (51) hide show
  1. package/.eslintrc.js +25 -0
  2. package/.prettierrc +4 -0
  3. package/Dockerfile +26 -0
  4. package/LICENSE +201 -0
  5. package/README.md +1 -0
  6. package/dist/app.module.d.ts +2 -0
  7. package/dist/app.module.js +51 -0
  8. package/dist/app.module.js.map +1 -0
  9. package/dist/components/browser-instance.component.d.ts +53 -0
  10. package/dist/components/browser-instance.component.js +373 -0
  11. package/dist/components/browser-instance.component.js.map +1 -0
  12. package/dist/components/browser-instance.process.d.ts +1 -0
  13. package/dist/components/browser-instance.process.js +174 -0
  14. package/dist/components/browser-instance.process.js.map +1 -0
  15. package/dist/controllers/cdp.controller.d.ts +17 -0
  16. package/dist/controllers/cdp.controller.js +122 -0
  17. package/dist/controllers/cdp.controller.js.map +1 -0
  18. package/dist/controllers/pool-status.controller.d.ts +10 -0
  19. package/dist/controllers/pool-status.controller.js +38 -0
  20. package/dist/controllers/pool-status.controller.js.map +1 -0
  21. package/dist/main.d.ts +1 -0
  22. package/dist/main.js +10 -0
  23. package/dist/main.js.map +1 -0
  24. package/dist/services/browser-pool.service.d.ts +36 -0
  25. package/dist/services/browser-pool.service.js +128 -0
  26. package/dist/services/browser-pool.service.js.map +1 -0
  27. package/dist/services/timezone.service.d.ts +6 -0
  28. package/dist/services/timezone.service.js +64 -0
  29. package/dist/services/timezone.service.js.map +1 -0
  30. package/dist/services/user-data.service.d.ts +15 -0
  31. package/dist/services/user-data.service.js +107 -0
  32. package/dist/services/user-data.service.js.map +1 -0
  33. package/dist/transforms/limit-stream.d.ts +7 -0
  34. package/dist/transforms/limit-stream.js +22 -0
  35. package/dist/transforms/limit-stream.js.map +1 -0
  36. package/dist/tsconfig.build.tsbuildinfo +1 -0
  37. package/docker-compose.yml +23 -0
  38. package/nest-cli.json +8 -0
  39. package/package.json +68 -0
  40. package/src/app.module.ts +39 -0
  41. package/src/components/browser-instance.component.ts +534 -0
  42. package/src/components/browser-instance.process.ts +193 -0
  43. package/src/controllers/cdp.controller.ts +122 -0
  44. package/src/controllers/pool-status.controller.ts +18 -0
  45. package/src/main.ts +9 -0
  46. package/src/services/browser-pool.service.ts +139 -0
  47. package/src/services/timezone.service.ts +42 -0
  48. package/src/services/user-data.service.ts +111 -0
  49. package/src/transforms/limit-stream.ts +30 -0
  50. package/tsconfig.build.json +4 -0
  51. package/tsconfig.json +21 -0
@@ -0,0 +1,373 @@
1
+ "use strict";
2
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
3
+ if (kind === "m") throw new TypeError("Private method is not writable");
4
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
5
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
6
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
7
+ };
8
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
10
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
+ };
13
+ var _PortPool_next_port_to_claim, _PortPool_available_ports, _BrowserInstance_instances, _a, _BrowserInstance_CDP_PORT_POOL, _BrowserInstance_logger, _BrowserInstance_browser_pool_service, _BrowserInstance_browser_instance_process, _BrowserInstance_proxy_server, _BrowserInstance_cdp_websocket, _BrowserInstance_connected_at, _BrowserInstance_preparation_tasks_started_at, _BrowserInstance_browser_process_launching_at, _BrowserInstance_browser_process_launched_at, _BrowserInstance_browser_process_cdp_connected_at, _BrowserInstance_browser_process_cdp_terminated_at, _BrowserInstance_completion_tasks_started_at, _BrowserInstance_cdp_close_event_at, _BrowserInstance_user_data_folder, _BrowserInstance_connection_options, _BrowserInstance_tunnel, _BrowserInstance_event_channel, _BrowserInstance_cdp_channel, _BrowserInstance_timezone, _BrowserInstance_cdp_port, _BrowserInstance_startPreparationTasks, _BrowserInstance_downloadUserData, _BrowserInstance_proxy_connections, _BrowserInstance_startProxyServer, _BrowserInstance_updateTimezone, _BrowserInstance_uploadUserData, _BrowserInstance_launchProcess, _BrowserInstance_sendBrowserInstanceStatus, _BrowserInstance_isBrowserProcessAlive;
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.BrowserInstance = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const child_process_1 = require("child_process");
18
+ const ProxyChain = require("proxy-chain");
19
+ const EventEmitter = require("events");
20
+ const ws_1 = require("ws");
21
+ const user_data_service_1 = require("../services/user-data.service");
22
+ const fsPromise = require("fs/promises");
23
+ const timezone_service_1 = require("../services/timezone.service");
24
+ const browser_pool_service_1 = require("../services/browser-pool.service");
25
+ class PortPool {
26
+ constructor(starting_port) {
27
+ _PortPool_next_port_to_claim.set(this, 13000);
28
+ _PortPool_available_ports.set(this, []);
29
+ __classPrivateFieldSet(this, _PortPool_next_port_to_claim, starting_port, "f");
30
+ }
31
+ getAvailablePort() {
32
+ var _b, _c;
33
+ if (__classPrivateFieldGet(this, _PortPool_available_ports, "f").length === 0) {
34
+ return __classPrivateFieldSet(this, _PortPool_next_port_to_claim, (_c = __classPrivateFieldGet(this, _PortPool_next_port_to_claim, "f"), _b = _c++, _c), "f"), _b;
35
+ }
36
+ return __classPrivateFieldGet(this, _PortPool_available_ports, "f").shift();
37
+ }
38
+ releasePort(port) {
39
+ if (typeof port !== 'number') {
40
+ return;
41
+ }
42
+ __classPrivateFieldGet(this, _PortPool_available_ports, "f").push(port);
43
+ }
44
+ }
45
+ _PortPool_next_port_to_claim = new WeakMap(), _PortPool_available_ports = new WeakMap();
46
+ class BrowserInstance extends EventEmitter {
47
+ constructor(id, module_ref) {
48
+ super();
49
+ _BrowserInstance_instances.add(this);
50
+ this.id = id;
51
+ this.module_ref = module_ref;
52
+ _BrowserInstance_logger.set(this, void 0);
53
+ _BrowserInstance_browser_pool_service.set(this, void 0);
54
+ _BrowserInstance_browser_instance_process.set(this, void 0);
55
+ _BrowserInstance_proxy_server.set(this, void 0);
56
+ _BrowserInstance_cdp_websocket.set(this, void 0);
57
+ _BrowserInstance_connected_at.set(this, void 0);
58
+ _BrowserInstance_preparation_tasks_started_at.set(this, void 0);
59
+ _BrowserInstance_browser_process_launching_at.set(this, void 0);
60
+ _BrowserInstance_browser_process_launched_at.set(this, void 0);
61
+ _BrowserInstance_browser_process_cdp_connected_at.set(this, void 0);
62
+ _BrowserInstance_browser_process_cdp_terminated_at.set(this, void 0);
63
+ _BrowserInstance_completion_tasks_started_at.set(this, void 0);
64
+ _BrowserInstance_cdp_close_event_at.set(this, void 0);
65
+ _BrowserInstance_user_data_folder.set(this, void 0);
66
+ _BrowserInstance_connection_options.set(this, void 0);
67
+ _BrowserInstance_tunnel.set(this, void 0);
68
+ _BrowserInstance_event_channel.set(this, void 0);
69
+ _BrowserInstance_cdp_channel.set(this, void 0);
70
+ _BrowserInstance_timezone.set(this, void 0);
71
+ _BrowserInstance_cdp_port.set(this, void 0);
72
+ _BrowserInstance_proxy_connections.set(this, {});
73
+ __classPrivateFieldSet(this, _BrowserInstance_browser_pool_service, this.module_ref.get(browser_pool_service_1.BrowserPoolService), "f");
74
+ __classPrivateFieldSet(this, _BrowserInstance_logger, new common_1.Logger(`${_a.name}|${id}`), "f");
75
+ __classPrivateFieldSet(this, _BrowserInstance_user_data_folder, `/home/pptruser/user-data/${id}`, "f");
76
+ }
77
+ get in_use() {
78
+ return typeof __classPrivateFieldGet(this, _BrowserInstance_connected_at, "f") === 'string';
79
+ }
80
+ get cdp_terminated() {
81
+ return typeof __classPrivateFieldGet(this, _BrowserInstance_browser_process_cdp_terminated_at, "f") === 'string';
82
+ }
83
+ connectTunnel(tunnel) {
84
+ if (this.in_use) {
85
+ throw new Error(`Browser instance ${this.id} is already in use.`);
86
+ }
87
+ __classPrivateFieldSet(this, _BrowserInstance_connected_at, new Date().toISOString(), "f");
88
+ __classPrivateFieldSet(this, _BrowserInstance_tunnel, tunnel, "f");
89
+ __classPrivateFieldGet(this, _BrowserInstance_tunnel, "f").on('closed', () => {
90
+ __classPrivateFieldGet(this, _BrowserInstance_logger, "f").log('Tunnel closed');
91
+ this.close();
92
+ });
93
+ __classPrivateFieldGet(this, _BrowserInstance_logger, "f").log('Connecting tunnel.');
94
+ __classPrivateFieldSet(this, _BrowserInstance_event_channel, __classPrivateFieldGet(this, _BrowserInstance_tunnel, "f").createChannel(_a.EVENT_CHANNEL_ID, async (data) => {
95
+ const event = JSON.parse(data.toString('utf8'));
96
+ switch (event.type) {
97
+ case 'CONNECTION_OPTIONS':
98
+ __classPrivateFieldSet(this, _BrowserInstance_connection_options, event.options, "f");
99
+ __classPrivateFieldGet(this, _BrowserInstance_instances, "m", _BrowserInstance_startPreparationTasks).call(this);
100
+ break;
101
+ case 'CDP_CLOSE':
102
+ __classPrivateFieldSet(this, _BrowserInstance_cdp_close_event_at, new Date().toISOString(), "f");
103
+ __classPrivateFieldGet(this, _BrowserInstance_logger, "f").log('Received CDP Close event');
104
+ this.close();
105
+ break;
106
+ }
107
+ }), "f");
108
+ __classPrivateFieldGet(this, _BrowserInstance_instances, "m", _BrowserInstance_sendBrowserInstanceStatus).call(this);
109
+ this.once('cdp_terminated', () => {
110
+ __classPrivateFieldGet(this, _BrowserInstance_instances, "m", _BrowserInstance_sendBrowserInstanceStatus).call(this);
111
+ __classPrivateFieldGet(this, _BrowserInstance_event_channel, "f").send(JSON.stringify({ type: 'CDP_TERMINATED', status: this.status }));
112
+ __classPrivateFieldGet(this, _BrowserInstance_logger, "f").log('CDP terminated, will now close.');
113
+ this.close();
114
+ });
115
+ this.once('terminated', () => {
116
+ __classPrivateFieldGet(_a, _a, "f", _BrowserInstance_CDP_PORT_POOL).releasePort(__classPrivateFieldGet(this, _BrowserInstance_cdp_port, "f"));
117
+ __classPrivateFieldGet(this, _BrowserInstance_logger, "f").log('Released CDP port');
118
+ __classPrivateFieldGet(this, _BrowserInstance_instances, "m", _BrowserInstance_sendBrowserInstanceStatus).call(this);
119
+ __classPrivateFieldGet(this, _BrowserInstance_tunnel, "f").close();
120
+ __classPrivateFieldGet(this, _BrowserInstance_logger, "f").log('Closed tunnel.');
121
+ });
122
+ }
123
+ async close() {
124
+ if (typeof __classPrivateFieldGet(this, _BrowserInstance_completion_tasks_started_at, "f") === 'string') {
125
+ return;
126
+ }
127
+ __classPrivateFieldSet(this, _BrowserInstance_completion_tasks_started_at, new Date().toISOString(), "f");
128
+ __classPrivateFieldGet(this, _BrowserInstance_instances, "m", _BrowserInstance_sendBrowserInstanceStatus).call(this);
129
+ __classPrivateFieldGet(this, _BrowserInstance_logger, "f").log('Starting completion tasks.');
130
+ if (__classPrivateFieldGet(this, _BrowserInstance_instances, "m", _BrowserInstance_isBrowserProcessAlive).call(this)) {
131
+ __classPrivateFieldGet(this, _BrowserInstance_logger, "f").log('Killing process');
132
+ try {
133
+ await new Promise((res) => {
134
+ __classPrivateFieldGet(this, _BrowserInstance_browser_instance_process, "f").once('exit', () => {
135
+ res(undefined);
136
+ });
137
+ __classPrivateFieldGet(this, _BrowserInstance_browser_instance_process, "f").kill();
138
+ });
139
+ }
140
+ catch (e) {
141
+ __classPrivateFieldGet(this, _BrowserInstance_logger, "f").error('Error while killing process', e?.stack);
142
+ }
143
+ }
144
+ else {
145
+ __classPrivateFieldGet(this, _BrowserInstance_logger, "f").log('Process already killed.');
146
+ }
147
+ if (__classPrivateFieldGet(this, _BrowserInstance_cdp_websocket, "f")) {
148
+ __classPrivateFieldGet(this, _BrowserInstance_logger, "f").log('Closing cdp websocket.');
149
+ __classPrivateFieldGet(this, _BrowserInstance_cdp_websocket, "f").close();
150
+ }
151
+ if (__classPrivateFieldGet(this, _BrowserInstance_proxy_server, "f")) {
152
+ __classPrivateFieldGet(this, _BrowserInstance_logger, "f").log('Closing proxy server.');
153
+ try {
154
+ await __classPrivateFieldGet(this, _BrowserInstance_proxy_server, "f").close(true);
155
+ }
156
+ catch (e) {
157
+ __classPrivateFieldGet(this, _BrowserInstance_logger, "f").error('Error while closing proxy server', e?.stack);
158
+ }
159
+ }
160
+ try {
161
+ await __classPrivateFieldGet(this, _BrowserInstance_instances, "m", _BrowserInstance_uploadUserData).call(this);
162
+ }
163
+ catch (e) {
164
+ __classPrivateFieldGet(this, _BrowserInstance_logger, "f").error('Error while uploading user data', e?.stack || e);
165
+ }
166
+ try {
167
+ __classPrivateFieldGet(this, _BrowserInstance_logger, "f").log('Deleting user data.');
168
+ await fsPromise.rm(__classPrivateFieldGet(this, _BrowserInstance_user_data_folder, "f"), { recursive: true, force: true, maxRetries: 3, retryDelay: 250 });
169
+ }
170
+ catch (e) {
171
+ __classPrivateFieldGet(this, _BrowserInstance_logger, "f").error('Error while deleting user data', e?.stack || e);
172
+ }
173
+ __classPrivateFieldGet(this, _BrowserInstance_logger, "f").log('Completion tasks terminated.');
174
+ this.emit('terminated');
175
+ }
176
+ get status() {
177
+ return {
178
+ browser_pool: __classPrivateFieldGet(this, _BrowserInstance_browser_pool_service, "f").status,
179
+ connected_at: __classPrivateFieldGet(this, _BrowserInstance_connected_at, "f"),
180
+ preparation_tasks_started_at: __classPrivateFieldGet(this, _BrowserInstance_preparation_tasks_started_at, "f"),
181
+ browser_process_launching_at: __classPrivateFieldGet(this, _BrowserInstance_browser_process_launching_at, "f"),
182
+ browser_process_launched_at: __classPrivateFieldGet(this, _BrowserInstance_browser_process_launched_at, "f"),
183
+ browser_process_cdp_connected_at: __classPrivateFieldGet(this, _BrowserInstance_browser_process_cdp_connected_at, "f"),
184
+ browser_process_cdp_terminated_at: __classPrivateFieldGet(this, _BrowserInstance_browser_process_cdp_terminated_at, "f"),
185
+ completion_tasks_started_at: __classPrivateFieldGet(this, _BrowserInstance_completion_tasks_started_at, "f"),
186
+ cdp_close_event_at: __classPrivateFieldGet(this, _BrowserInstance_cdp_close_event_at, "f"),
187
+ };
188
+ }
189
+ }
190
+ exports.BrowserInstance = BrowserInstance;
191
+ _a = BrowserInstance, _BrowserInstance_logger = new WeakMap(), _BrowserInstance_browser_pool_service = new WeakMap(), _BrowserInstance_browser_instance_process = new WeakMap(), _BrowserInstance_proxy_server = new WeakMap(), _BrowserInstance_cdp_websocket = new WeakMap(), _BrowserInstance_connected_at = new WeakMap(), _BrowserInstance_preparation_tasks_started_at = new WeakMap(), _BrowserInstance_browser_process_launching_at = new WeakMap(), _BrowserInstance_browser_process_launched_at = new WeakMap(), _BrowserInstance_browser_process_cdp_connected_at = new WeakMap(), _BrowserInstance_browser_process_cdp_terminated_at = new WeakMap(), _BrowserInstance_completion_tasks_started_at = new WeakMap(), _BrowserInstance_cdp_close_event_at = new WeakMap(), _BrowserInstance_user_data_folder = new WeakMap(), _BrowserInstance_connection_options = new WeakMap(), _BrowserInstance_tunnel = new WeakMap(), _BrowserInstance_event_channel = new WeakMap(), _BrowserInstance_cdp_channel = new WeakMap(), _BrowserInstance_timezone = new WeakMap(), _BrowserInstance_cdp_port = new WeakMap(), _BrowserInstance_proxy_connections = new WeakMap(), _BrowserInstance_instances = new WeakSet(), _BrowserInstance_startPreparationTasks = async function _BrowserInstance_startPreparationTasks() {
192
+ try {
193
+ __classPrivateFieldSet(this, _BrowserInstance_preparation_tasks_started_at, new Date().toISOString(), "f");
194
+ __classPrivateFieldGet(this, _BrowserInstance_logger, "f").log('Starting preparation tasks');
195
+ await fsPromise.mkdir(__classPrivateFieldGet(this, _BrowserInstance_user_data_folder, "f"), { recursive: true });
196
+ __classPrivateFieldSet(this, _BrowserInstance_cdp_port, __classPrivateFieldGet(_a, _a, "f", _BrowserInstance_CDP_PORT_POOL).getAvailablePort(), "f");
197
+ await Promise.all([
198
+ __classPrivateFieldGet(this, _BrowserInstance_instances, "m", _BrowserInstance_startProxyServer).call(this),
199
+ __classPrivateFieldGet(this, _BrowserInstance_instances, "m", _BrowserInstance_updateTimezone).call(this),
200
+ (async () => {
201
+ if (__classPrivateFieldGet(this, _BrowserInstance_connection_options, "f")?.user_data_id) {
202
+ await __classPrivateFieldGet(this, _BrowserInstance_instances, "m", _BrowserInstance_downloadUserData).call(this);
203
+ }
204
+ })()
205
+ ]);
206
+ await __classPrivateFieldGet(this, _BrowserInstance_instances, "m", _BrowserInstance_launchProcess).call(this);
207
+ __classPrivateFieldGet(this, _BrowserInstance_instances, "m", _BrowserInstance_sendBrowserInstanceStatus).call(this);
208
+ }
209
+ catch (e) {
210
+ __classPrivateFieldGet(this, _BrowserInstance_logger, "f").error('Error while doing preparation tasks', e?.stack || e);
211
+ this.close();
212
+ }
213
+ }, _BrowserInstance_downloadUserData = async function _BrowserInstance_downloadUserData() {
214
+ if (!__classPrivateFieldGet(this, _BrowserInstance_connection_options, "f").user_data_id) {
215
+ return;
216
+ }
217
+ await this.module_ref.get(user_data_service_1.UserDataService).downloadUserData(__classPrivateFieldGet(this, _BrowserInstance_connection_options, "f").user_data_id, __classPrivateFieldGet(this, _BrowserInstance_user_data_folder, "f"));
218
+ }, _BrowserInstance_startProxyServer = async function _BrowserInstance_startProxyServer() {
219
+ if (__classPrivateFieldGet(this, _BrowserInstance_proxy_server, "f")) {
220
+ return;
221
+ }
222
+ return new Promise((res, rej) => {
223
+ __classPrivateFieldSet(this, _BrowserInstance_proxy_server, new ProxyChain.Server({
224
+ port: 0,
225
+ host: '127.0.0.1',
226
+ verbose: false,
227
+ prepareRequestFunction: async ({ request, connectionId }) => {
228
+ __classPrivateFieldGet(this, _BrowserInstance_proxy_connections, "f")[connectionId] = { url: request.url };
229
+ if (!this.in_use || !__classPrivateFieldGet(this, _BrowserInstance_connection_options, "f")?.proxy_url) {
230
+ return {};
231
+ }
232
+ return {
233
+ upstreamProxyUrl: __classPrivateFieldGet(this, _BrowserInstance_connection_options, "f").proxy_url
234
+ };
235
+ },
236
+ }), "f");
237
+ __classPrivateFieldGet(this, _BrowserInstance_proxy_server, "f").listen((err) => {
238
+ if (err) {
239
+ rej(err);
240
+ return;
241
+ }
242
+ __classPrivateFieldGet(this, _BrowserInstance_proxy_server, "f").on('connectionClosed', ({ connectionId, stats }) => {
243
+ if (__classPrivateFieldGet(this, _BrowserInstance_event_channel, "f")) {
244
+ const proxy_connection = __classPrivateFieldGet(this, _BrowserInstance_proxy_connections, "f")[connectionId];
245
+ if (proxy_connection) {
246
+ __classPrivateFieldGet(this, _BrowserInstance_event_channel, "f").send(JSON.stringify({
247
+ type: 'BROWSER_INSTANCE_REQUEST',
248
+ url: proxy_connection.url,
249
+ bytes_downloaded: stats.trgRxBytes,
250
+ bytes_uploaded: stats.trgTxBytes,
251
+ created_at: new Date().toISOString()
252
+ }));
253
+ }
254
+ }
255
+ delete __classPrivateFieldGet(this, _BrowserInstance_proxy_connections, "f")[connectionId];
256
+ });
257
+ res(undefined);
258
+ });
259
+ });
260
+ }, _BrowserInstance_updateTimezone = async function _BrowserInstance_updateTimezone() {
261
+ if (__classPrivateFieldGet(this, _BrowserInstance_connection_options, "f")?.timezone) {
262
+ __classPrivateFieldSet(this, _BrowserInstance_timezone, __classPrivateFieldGet(this, _BrowserInstance_connection_options, "f").timezone, "f");
263
+ }
264
+ else if (__classPrivateFieldGet(this, _BrowserInstance_connection_options, "f")?.proxy_url) {
265
+ __classPrivateFieldSet(this, _BrowserInstance_timezone, await this.module_ref.get(timezone_service_1.TimezoneService).getProxyTimezone(__classPrivateFieldGet(this, _BrowserInstance_connection_options, "f").proxy_url), "f");
266
+ }
267
+ else {
268
+ __classPrivateFieldSet(this, _BrowserInstance_timezone, await this.module_ref.get(timezone_service_1.TimezoneService).getDefaultTimezone(), "f");
269
+ }
270
+ }, _BrowserInstance_uploadUserData = async function _BrowserInstance_uploadUserData() {
271
+ if (!__classPrivateFieldGet(this, _BrowserInstance_connection_options, "f")?.user_data_id || __classPrivateFieldGet(this, _BrowserInstance_connection_options, "f")?.user_data_read_only === true) {
272
+ return;
273
+ }
274
+ __classPrivateFieldGet(this, _BrowserInstance_logger, "f").log('Uploading user data.');
275
+ await this.module_ref.get(user_data_service_1.UserDataService).uploadUserData(__classPrivateFieldGet(this, _BrowserInstance_connection_options, "f").user_data_id, __classPrivateFieldGet(this, _BrowserInstance_user_data_folder, "f"));
276
+ }, _BrowserInstance_launchProcess = async function _BrowserInstance_launchProcess() {
277
+ __classPrivateFieldSet(this, _BrowserInstance_browser_process_launching_at, new Date().toISOString(), "f");
278
+ __classPrivateFieldSet(this, _BrowserInstance_browser_instance_process, (0, child_process_1.spawn)(`tini`, ['-s', `--`, `node`, `./dist/components/browser-instance.process.js`], {
279
+ stdio: ['pipe', 'pipe', 'pipe', 'ipc'],
280
+ env: {
281
+ ...process.env,
282
+ CDP_PORT: `${__classPrivateFieldGet(this, _BrowserInstance_cdp_port, "f")}`,
283
+ PROXY_SERVER_PORT: `${__classPrivateFieldGet(this, _BrowserInstance_proxy_server, "f").port}`,
284
+ USER_DATA_FOLDER: __classPrivateFieldGet(this, _BrowserInstance_user_data_folder, "f"),
285
+ TZ: __classPrivateFieldGet(this, _BrowserInstance_timezone, "f")
286
+ }
287
+ }), "f");
288
+ __classPrivateFieldGet(this, _BrowserInstance_browser_instance_process, "f").stdout.on('data', (data) => {
289
+ data.toString().split('\n').map(s => s.trim()).filter(s => s !== '').forEach(log => {
290
+ __classPrivateFieldGet(this, _BrowserInstance_logger, "f").log(`stdout: ${log}`);
291
+ });
292
+ });
293
+ __classPrivateFieldGet(this, _BrowserInstance_browser_instance_process, "f").stderr.on('data', (data) => {
294
+ data.toString().split('\n').map(s => s.trim()).filter(s => s !== '').forEach(log => {
295
+ __classPrivateFieldGet(this, _BrowserInstance_logger, "f").error(`stderr: ${log}`);
296
+ });
297
+ });
298
+ await new Promise((res, rej) => {
299
+ __classPrivateFieldGet(this, _BrowserInstance_browser_instance_process, "f").on('spawn', () => {
300
+ __classPrivateFieldGet(this, _BrowserInstance_logger, "f").log('Process spawned');
301
+ res(undefined);
302
+ });
303
+ __classPrivateFieldGet(this, _BrowserInstance_browser_instance_process, "f").on('error', err => {
304
+ rej(err);
305
+ });
306
+ });
307
+ __classPrivateFieldSet(this, _BrowserInstance_browser_process_launched_at, new Date().toISOString(), "f");
308
+ __classPrivateFieldGet(this, _BrowserInstance_logger, "f").log('Process launched');
309
+ __classPrivateFieldGet(this, _BrowserInstance_browser_instance_process, "f").once('exit', (e, i) => {
310
+ __classPrivateFieldGet(this, _BrowserInstance_logger, "f").log(`Process exited ${e} ${i}`);
311
+ this.close();
312
+ });
313
+ const start = Date.now();
314
+ do {
315
+ try {
316
+ const response = await fetch(`http://127.0.0.1:${__classPrivateFieldGet(this, _BrowserInstance_cdp_port, "f")}/json/version`, { signal: AbortSignal.timeout(350) });
317
+ if (response.status !== 200) {
318
+ continue;
319
+ }
320
+ const data = await response.json();
321
+ if (!data.webSocketDebuggerUrl) {
322
+ continue;
323
+ }
324
+ __classPrivateFieldSet(this, _BrowserInstance_cdp_websocket, new ws_1.WebSocket(data.webSocketDebuggerUrl), "f");
325
+ await new Promise((res, rej) => {
326
+ __classPrivateFieldGet(this, _BrowserInstance_cdp_websocket, "f").on('error', err => {
327
+ __classPrivateFieldGet(this, _BrowserInstance_logger, "f").error('Error with CDP websocket', err?.stack || err);
328
+ rej(err);
329
+ });
330
+ __classPrivateFieldGet(this, _BrowserInstance_cdp_websocket, "f").on('open', () => {
331
+ __classPrivateFieldSet(this, _BrowserInstance_browser_process_cdp_connected_at, new Date().toISOString(), "f");
332
+ __classPrivateFieldGet(this, _BrowserInstance_logger, "f").log('CDP websocket connected');
333
+ __classPrivateFieldGet(this, _BrowserInstance_cdp_websocket, "f").on('close', (code, reason) => {
334
+ __classPrivateFieldSet(this, _BrowserInstance_browser_process_cdp_terminated_at, new Date().toISOString(), "f");
335
+ __classPrivateFieldGet(this, _BrowserInstance_logger, "f").log(`CDP Terminated ${code} ${reason.toString()}`);
336
+ this.emit('cdp_terminated');
337
+ });
338
+ __classPrivateFieldSet(this, _BrowserInstance_cdp_channel, __classPrivateFieldGet(this, _BrowserInstance_tunnel, "f").createChannel(_a.CDP_CHANNEL_ID, data => {
339
+ __classPrivateFieldGet(this, _BrowserInstance_cdp_websocket, "f").send(data.toString('utf8'), { binary: false });
340
+ }), "f");
341
+ __classPrivateFieldGet(this, _BrowserInstance_cdp_websocket, "f").on('message', (data) => {
342
+ __classPrivateFieldGet(this, _BrowserInstance_cdp_channel, "f").send(data.toString('utf8'));
343
+ });
344
+ res(undefined);
345
+ });
346
+ });
347
+ return;
348
+ }
349
+ catch (e) {
350
+ await new Promise(r => setTimeout(r, 20));
351
+ }
352
+ } while (Date.now() - start < 8000);
353
+ __classPrivateFieldGet(this, _BrowserInstance_logger, "f").error('CDP websocket failed to connect. Closing.');
354
+ }, _BrowserInstance_sendBrowserInstanceStatus = function _BrowserInstance_sendBrowserInstanceStatus() {
355
+ if (__classPrivateFieldGet(this, _BrowserInstance_event_channel, "f")) {
356
+ __classPrivateFieldGet(this, _BrowserInstance_event_channel, "f").send(JSON.stringify({ type: 'BROWSER_INSTANCE_STATUS', status: this.status }));
357
+ }
358
+ }, _BrowserInstance_isBrowserProcessAlive = function _BrowserInstance_isBrowserProcessAlive() {
359
+ if (!__classPrivateFieldGet(this, _BrowserInstance_browser_instance_process, "f")) {
360
+ return false;
361
+ }
362
+ try {
363
+ process.kill(__classPrivateFieldGet(this, _BrowserInstance_browser_instance_process, "f").pid, 0);
364
+ return true;
365
+ }
366
+ catch (e) {
367
+ return false;
368
+ }
369
+ };
370
+ BrowserInstance.CDP_CHANNEL_ID = 2;
371
+ BrowserInstance.EVENT_CHANNEL_ID = 3;
372
+ _BrowserInstance_CDP_PORT_POOL = { value: new PortPool(13000) };
373
+ //# sourceMappingURL=browser-instance.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-instance.component.js","sourceRoot":"","sources":["../../src/components/browser-instance.component.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,174 @@
1
+ "use strict";
2
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
3
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
4
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
5
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
6
+ };
7
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
8
+ if (kind === "m") throw new TypeError("Private method is not writable");
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
10
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
11
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
12
+ };
13
+ var _BrowserInstanceProcess_instances, _BrowserInstanceProcess_cdp_port, _BrowserInstanceProcess_proxy_server_port, _BrowserInstanceProcess_timezone, _BrowserInstanceProcess_user_data_folder, _BrowserInstanceProcess_xvfb_process, _BrowserInstanceProcess_puppeteer_process, _BrowserInstanceProcess_is_closing, _BrowserInstanceProcess_client_disconnected, _BrowserInstanceProcess_waitGoogleChromeKilled;
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const child_process_1 = require("child_process");
16
+ const fsPromise = require("fs/promises");
17
+ const process_1 = require("process");
18
+ const puppeteer_1 = require("puppeteer");
19
+ let SIGTERM_RECEIVED = false;
20
+ class BrowserInstanceProcess {
21
+ constructor() {
22
+ _BrowserInstanceProcess_instances.add(this);
23
+ _BrowserInstanceProcess_cdp_port.set(this, parseInt(process.env.CDP_PORT));
24
+ _BrowserInstanceProcess_proxy_server_port.set(this, parseInt(process.env.PROXY_SERVER_PORT));
25
+ _BrowserInstanceProcess_timezone.set(this, process.env.TZ);
26
+ _BrowserInstanceProcess_user_data_folder.set(this, process.env.USER_DATA_FOLDER);
27
+ _BrowserInstanceProcess_xvfb_process.set(this, void 0);
28
+ _BrowserInstanceProcess_puppeteer_process.set(this, void 0);
29
+ _BrowserInstanceProcess_is_closing.set(this, false);
30
+ _BrowserInstanceProcess_client_disconnected.set(this, false);
31
+ }
32
+ get launched() {
33
+ return __classPrivateFieldGet(this, _BrowserInstanceProcess_xvfb_process, "f") !== undefined && __classPrivateFieldGet(this, _BrowserInstanceProcess_puppeteer_process, "f") !== undefined;
34
+ }
35
+ async launch() {
36
+ if (SIGTERM_RECEIVED) {
37
+ console.log(`Can't launch, received sigterm before launching.`);
38
+ await this.close();
39
+ return;
40
+ }
41
+ console.log('Launching');
42
+ try {
43
+ const display_id = __classPrivateFieldGet(this, _BrowserInstanceProcess_cdp_port, "f");
44
+ const display = `:${display_id}`;
45
+ const display_lock_file = `/tmp/.X${display_id}-lock`;
46
+ await fsPromise.rm(display_lock_file, { force: true });
47
+ console.log('Creating xvfb process');
48
+ __classPrivateFieldSet(this, _BrowserInstanceProcess_xvfb_process, (0, child_process_1.spawn)('Xvfb', [display, '-screen', '0', '1920x1080x24'], { stdio: 'inherit' }), "f");
49
+ console.log('Creating puppeteer process');
50
+ __classPrivateFieldSet(this, _BrowserInstanceProcess_puppeteer_process, await puppeteer_1.default.launch({
51
+ headless: false,
52
+ executablePath: puppeteer_1.default.executablePath(),
53
+ userDataDir: __classPrivateFieldGet(this, _BrowserInstanceProcess_user_data_folder, "f"),
54
+ dumpio: true,
55
+ handleSIGTERM: false,
56
+ args: [
57
+ `--remote-debugging-port=${__classPrivateFieldGet(this, _BrowserInstanceProcess_cdp_port, "f")}`,
58
+ '--remote-debugging-address=0.0.0.0',
59
+ '--no-first-run',
60
+ '--no-default-browser-check',
61
+ `--display=${display}`,
62
+ '--disable-breakpad',
63
+ '--disable-component-update',
64
+ '--disable-print-preview',
65
+ '--disable-domain-reliability',
66
+ '--disk-cache-dir=/dev/null',
67
+ '--no-pings',
68
+ '--disable-notifications',
69
+ '--disable-features=TranslateUI',
70
+ '--disable-background-networking',
71
+ '--disable-sync',
72
+ '--disable-extensions',
73
+ '--disable-signin-promo',
74
+ '--disable-gpu',
75
+ '--metrics-recording-only',
76
+ '--disable-features=PersistentHistograms',
77
+ `--start-maximized`,
78
+ `--proxy-server=http://127.0.0.1:${__classPrivateFieldGet(this, _BrowserInstanceProcess_proxy_server_port, "f")}`,
79
+ process.env.DISABLE_SHM === 'true' ? '--disable-dev-shm-usage' : undefined
80
+ ].filter(s => typeof s === 'string'),
81
+ env: {
82
+ TZ: __classPrivateFieldGet(this, _BrowserInstanceProcess_timezone, "f")
83
+ },
84
+ }), "f");
85
+ console.log('Created puppeteer process.');
86
+ __classPrivateFieldGet(this, _BrowserInstanceProcess_puppeteer_process, "f").on('disconnected', () => {
87
+ __classPrivateFieldSet(this, _BrowserInstanceProcess_client_disconnected, true, "f");
88
+ console.log('Client disconnected');
89
+ });
90
+ const interval_id = setInterval(() => {
91
+ if (__classPrivateFieldGet(this, _BrowserInstanceProcess_puppeteer_process, "f").connected) {
92
+ return;
93
+ }
94
+ clearInterval(interval_id);
95
+ if (__classPrivateFieldGet(this, _BrowserInstanceProcess_is_closing, "f")) {
96
+ return;
97
+ }
98
+ console.log(`Puppeteer not connected.`);
99
+ this.close();
100
+ }, 200);
101
+ }
102
+ catch (e) {
103
+ console.log('Error while launching processes', e);
104
+ this.close();
105
+ }
106
+ finally {
107
+ if (SIGTERM_RECEIVED) {
108
+ this.close();
109
+ return;
110
+ }
111
+ }
112
+ }
113
+ async close() {
114
+ if (__classPrivateFieldGet(this, _BrowserInstanceProcess_is_closing, "f")) {
115
+ return;
116
+ }
117
+ __classPrivateFieldSet(this, _BrowserInstanceProcess_is_closing, true, "f");
118
+ console.log('Closing.');
119
+ if (__classPrivateFieldGet(this, _BrowserInstanceProcess_puppeteer_process, "f")) {
120
+ try {
121
+ if (!__classPrivateFieldGet(this, _BrowserInstanceProcess_client_disconnected, "f") && __classPrivateFieldGet(this, _BrowserInstanceProcess_puppeteer_process, "f").connected) {
122
+ await __classPrivateFieldGet(this, _BrowserInstanceProcess_puppeteer_process, "f").close();
123
+ }
124
+ await __classPrivateFieldGet(this, _BrowserInstanceProcess_instances, "m", _BrowserInstanceProcess_waitGoogleChromeKilled).call(this);
125
+ }
126
+ catch (e) {
127
+ console.error('Error while killing puppeteer', e?.stack);
128
+ }
129
+ }
130
+ if (__classPrivateFieldGet(this, _BrowserInstanceProcess_xvfb_process, "f")) {
131
+ try {
132
+ __classPrivateFieldGet(this, _BrowserInstanceProcess_xvfb_process, "f").kill();
133
+ }
134
+ catch (e) {
135
+ console.error('Error while killing xvfb process', e?.stack);
136
+ }
137
+ }
138
+ (0, process_1.exit)(0);
139
+ }
140
+ }
141
+ _BrowserInstanceProcess_cdp_port = new WeakMap(), _BrowserInstanceProcess_proxy_server_port = new WeakMap(), _BrowserInstanceProcess_timezone = new WeakMap(), _BrowserInstanceProcess_user_data_folder = new WeakMap(), _BrowserInstanceProcess_xvfb_process = new WeakMap(), _BrowserInstanceProcess_puppeteer_process = new WeakMap(), _BrowserInstanceProcess_is_closing = new WeakMap(), _BrowserInstanceProcess_client_disconnected = new WeakMap(), _BrowserInstanceProcess_instances = new WeakSet(), _BrowserInstanceProcess_waitGoogleChromeKilled = async function _BrowserInstanceProcess_waitGoogleChromeKilled() {
142
+ let count = 0;
143
+ await new Promise((res) => {
144
+ const interval_id = setInterval(() => {
145
+ if (count === 60) {
146
+ clearInterval(interval_id);
147
+ res(undefined);
148
+ return;
149
+ }
150
+ const ps = (0, child_process_1.spawn)('ps', ['ax']);
151
+ ps.on('exit', () => {
152
+ count++;
153
+ });
154
+ ps.stdout.on('data', (data) => {
155
+ const message = data.toString();
156
+ if (!message.includes(__classPrivateFieldGet(this, _BrowserInstanceProcess_user_data_folder, "f"))) {
157
+ clearInterval(interval_id);
158
+ res(undefined);
159
+ }
160
+ });
161
+ }, 50);
162
+ });
163
+ };
164
+ let browser_instance_process;
165
+ process.on('SIGTERM', () => {
166
+ SIGTERM_RECEIVED = true;
167
+ console.log('Received SIGTERM');
168
+ if (browser_instance_process && browser_instance_process.launched) {
169
+ browser_instance_process.close();
170
+ }
171
+ });
172
+ browser_instance_process = new BrowserInstanceProcess();
173
+ browser_instance_process.launch();
174
+ //# sourceMappingURL=browser-instance.process.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-instance.process.js","sourceRoot":"","sources":["../../src/components/browser-instance.process.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { OnModuleInit } from '@nestjs/common';
2
+ import { HttpAdapterHost } from '@nestjs/core';
3
+ import { BrowserPoolService } from 'src/services/browser-pool.service';
4
+ export declare const PROXY_URL_QUERY_PARAM = "proxyUrl";
5
+ export declare const TIMEZONE_QUERY_PARAM = "timezone";
6
+ export declare const USER_DATA_ID_QUERY_PARAM = "userDataId";
7
+ export declare const USER_DATA_READ_ONLY_QUERY_PARAM = "userDataReadOnly";
8
+ export declare class CDPController implements OnModuleInit {
9
+ #private;
10
+ private readonly browser_pool_service;
11
+ private readonly http_adapter_host;
12
+ static readonly INTERNAL_SERVER_ERROR_CODE = 4000;
13
+ static readonly BAD_REQUEST_CODE = 4002;
14
+ constructor(browser_pool_service: BrowserPoolService, http_adapter_host: HttpAdapterHost);
15
+ onModuleInit(): Promise<void>;
16
+ private getQueryParamValue;
17
+ }