@blitzbrowser/blitzbrowser 1.0.0 → 1.1.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.
@@ -9,7 +9,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.AppModule = void 0;
10
10
  const common_1 = require("@nestjs/common");
11
11
  const client_s3_1 = require("@aws-sdk/client-s3");
12
- const pool_status_controller_1 = require("./controllers/pool-status.controller");
12
+ const status_controller_1 = require("./controllers/status.controller");
13
13
  const user_data_service_1 = require("./services/user-data.service");
14
14
  const browser_pool_service_1 = require("./services/browser-pool.service");
15
15
  const timezone_service_1 = require("./services/timezone.service");
@@ -22,7 +22,7 @@ exports.AppModule = AppModule = __decorate([
22
22
  imports: [],
23
23
  controllers: [
24
24
  cdp_controller_1.CDPController,
25
- pool_status_controller_1.PoolStatusController,
25
+ status_controller_1.StatusController,
26
26
  ],
27
27
  providers: [
28
28
  {
@@ -39,10 +39,7 @@ exports.AppModule = AppModule = __decorate([
39
39
  });
40
40
  }
41
41
  },
42
- {
43
- provide: user_data_service_1.UserDataService,
44
- useClass: user_data_service_1.UserDataS3Service,
45
- },
42
+ user_data_service_1.UserDataService,
46
43
  browser_pool_service_1.BrowserPoolService,
47
44
  timezone_service_1.TimezoneService
48
45
  ],
@@ -1 +1 @@
1
- {"version":3,"file":"app.module.js","sourceRoot":"","sources":["../src/app.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,kDAA8C;AAC9C,iFAA4E;AAC5E,oEAAkF;AAClF,0EAAqE;AACrE,kEAA8D;AAC9D,iEAA6D;AAgCtD,IAAM,SAAS,GAAf,MAAM,SAAS;CAAI,CAAA;AAAb,8BAAS;oBAAT,SAAS;IA9BrB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,EAAE;QACX,WAAW,EAAE;YACX,8BAAa;YACb,6CAAoB;SACrB;QACD,SAAS,EAAE;YACT;gBACE,OAAO,EAAE,oBAAQ;gBACjB,UAAU,EAAE,KAAK,IAAI,EAAE;oBACrB,OAAO,IAAI,oBAAQ,CAAC;wBAClB,MAAM,EAAE,MAAM;wBACd,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW;wBACjC,WAAW,EAAE;4BACX,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB;4BACzC,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB;yBAClD;wBACD,cAAc,EAAE,IAAI;qBACrB,CAAC,CAAC;gBACL,CAAC;aACF;YACD;gBACE,OAAO,EAAE,mCAAe;gBACxB,QAAQ,EAAE,qCAAiB;aAC5B;YAED,yCAAkB;YAClB,kCAAe;SAChB;KACF,CAAC;GACW,SAAS,CAAI"}
1
+ {"version":3,"file":"app.module.js","sourceRoot":"","sources":["../src/app.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,kDAA8C;AAC9C,uEAAmE;AACnE,oEAA+D;AAC/D,0EAAqE;AACrE,kEAA8D;AAC9D,iEAA6D;AA6BtD,IAAM,SAAS,GAAf,MAAM,SAAS;CAAI,CAAA;AAAb,8BAAS;oBAAT,SAAS;IA3BrB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,EAAE;QACX,WAAW,EAAE;YACX,8BAAa;YACb,oCAAgB;SACjB;QACD,SAAS,EAAE;YACT;gBACE,OAAO,EAAE,oBAAQ;gBACjB,UAAU,EAAE,KAAK,IAAI,EAAE;oBACrB,OAAO,IAAI,oBAAQ,CAAC;wBAClB,MAAM,EAAE,MAAM;wBACd,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW;wBACjC,WAAW,EAAE;4BACX,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB;4BACzC,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB;yBAClD;wBACD,cAAc,EAAE,IAAI;qBACrB,CAAC,CAAC;gBACL,CAAC;aACF;YAED,mCAAe;YACf,yCAAkB;YAClB,kCAAe;SAChB;KACF,CAAC;GACW,SAAS,CAAI"}
@@ -2,7 +2,7 @@ import * as EventEmitter from 'events';
2
2
  import { Tunnel } from '@blitzbrowser/tunnel';
3
3
  import { ModuleRef } from '@nestjs/core';
4
4
  import { BrowserPoolStatus } from 'src/services/browser-pool.service';
5
- export interface BrowserInstanceEvents {
5
+ interface BrowserInstanceEvents {
6
6
  cdp_terminated: [];
7
7
  terminated: [];
8
8
  }
@@ -16,6 +16,25 @@ export interface ConnectionOptionsEvent {
16
16
  type: 'CONNECTION_OPTIONS';
17
17
  options: ConnectionOptions;
18
18
  }
19
+ export interface CDPCloseEvent {
20
+ type: 'CDP_CLOSE';
21
+ }
22
+ export interface CDPTerminatedEvent {
23
+ type: 'CDP_TERMINATED';
24
+ status: BrowserInstanceStatus;
25
+ }
26
+ export interface BrowserInstanceStatusEvent {
27
+ type: 'BROWSER_INSTANCE_STATUS';
28
+ status: BrowserInstanceStatus;
29
+ }
30
+ export interface BrowserInstanceRequestEvent {
31
+ type: 'BROWSER_INSTANCE_REQUEST';
32
+ url: string;
33
+ bytes_downloaded: number;
34
+ bytes_uploaded: number;
35
+ created_at: string;
36
+ }
37
+ export type BrowserInstanceEvent = ConnectionOptionsEvent | CDPCloseEvent | CDPTerminatedEvent | BrowserInstanceStatusEvent | BrowserInstanceRequestEvent;
19
38
  export interface BrowserInstanceStatus {
20
39
  browser_pool: BrowserPoolStatus;
21
40
  connected_at: string | undefined;
@@ -1,7 +1,7 @@
1
1
  import { BrowserPoolService } from 'src/services/browser-pool.service';
2
- export declare class PoolStatusController {
3
- private readonly pool_service;
4
- constructor(pool_service: BrowserPoolService);
2
+ export declare class StatusController {
3
+ private readonly browser_pool_service;
4
+ constructor(browser_pool_service: BrowserPoolService);
5
5
  getStatus(): {
6
6
  sigterm_received: boolean;
7
7
  browsers_running: number;
@@ -9,30 +9,30 @@ var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.PoolStatusController = void 0;
12
+ exports.StatusController = void 0;
13
13
  const common_1 = require("@nestjs/common");
14
14
  const browser_pool_service_1 = require("../services/browser-pool.service");
15
- let PoolStatusController = class PoolStatusController {
16
- constructor(pool_service) {
17
- this.pool_service = pool_service;
15
+ let StatusController = class StatusController {
16
+ constructor(browser_pool_service) {
17
+ this.browser_pool_service = browser_pool_service;
18
18
  }
19
19
  getStatus() {
20
20
  return {
21
- sigterm_received: this.pool_service.sigterm_received,
22
- browsers_running: this.pool_service.nb_browser_instances_alive,
23
- max_browsers: this.pool_service.max_browser_instances,
21
+ sigterm_received: this.browser_pool_service.sigterm_received,
22
+ browsers_running: this.browser_pool_service.nb_browser_instances_alive,
23
+ max_browsers: this.browser_pool_service.max_browser_instances,
24
24
  };
25
25
  }
26
26
  };
27
- exports.PoolStatusController = PoolStatusController;
27
+ exports.StatusController = StatusController;
28
28
  __decorate([
29
29
  (0, common_1.Get)(),
30
30
  __metadata("design:type", Function),
31
31
  __metadata("design:paramtypes", []),
32
32
  __metadata("design:returntype", void 0)
33
- ], PoolStatusController.prototype, "getStatus", null);
34
- exports.PoolStatusController = PoolStatusController = __decorate([
33
+ ], StatusController.prototype, "getStatus", null);
34
+ exports.StatusController = StatusController = __decorate([
35
35
  (0, common_1.Controller)('/status'),
36
36
  __metadata("design:paramtypes", [browser_pool_service_1.BrowserPoolService])
37
- ], PoolStatusController);
38
- //# sourceMappingURL=pool-status.controller.js.map
37
+ ], StatusController);
38
+ //# sourceMappingURL=status.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.controller.js","sourceRoot":"","sources":["../../src/controllers/status.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAiD;AACjD,2EAAuE;AAGhE,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAE3B,YAA6B,oBAAwC;QAAxC,yBAAoB,GAApB,oBAAoB,CAAoB;IAAI,CAAC;IAG1E,SAAS;QACP,OAAO;YACL,gBAAgB,EAAE,IAAI,CAAC,oBAAoB,CAAC,gBAAgB;YAC5D,gBAAgB,EAAE,IAAI,CAAC,oBAAoB,CAAC,0BAA0B;YACtE,YAAY,EAAE,IAAI,CAAC,oBAAoB,CAAC,qBAAqB;SAC9D,CAAC;IACJ,CAAC;CAEF,CAAA;AAbY,4CAAgB;AAK3B;IADC,IAAA,YAAG,GAAE;;;;iDAOL;2BAXU,gBAAgB;IAD5B,IAAA,mBAAU,EAAC,SAAS,CAAC;qCAG+B,yCAAkB;GAF1D,gBAAgB,CAa5B"}
@@ -0,0 +1,8 @@
1
+ import { BrowserInstance, BrowserInstanceEvent, BrowserInstanceRequestEvent, BrowserInstanceStatus, BrowserInstanceStatusEvent, CDPCloseEvent, CDPTerminatedEvent, ConnectionOptionsEvent } from "./components/browser-instance.component";
2
+ import { StatusController } from './controllers/status.controller';
3
+ import { UserDataService } from './services/user-data.service';
4
+ import { BrowserPoolService, BrowserPoolStatus } from './services/browser-pool.service';
5
+ import { TimezoneService } from './services/timezone.service';
6
+ import { CDPController } from './controllers/cdp.controller';
7
+ import LimitStream from "./transforms/limit-stream";
8
+ export { ConnectionOptionsEvent, CDPCloseEvent, CDPTerminatedEvent, BrowserInstanceStatusEvent, BrowserInstanceRequestEvent, BrowserInstanceEvent, BrowserInstanceStatus, BrowserInstance, StatusController, UserDataService, BrowserPoolStatus, BrowserPoolService, TimezoneService, CDPController, LimitStream };
package/dist/index.js ADDED
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LimitStream = exports.CDPController = exports.TimezoneService = exports.BrowserPoolService = exports.UserDataService = exports.StatusController = exports.BrowserInstance = void 0;
4
+ const browser_instance_component_1 = require("./components/browser-instance.component");
5
+ Object.defineProperty(exports, "BrowserInstance", { enumerable: true, get: function () { return browser_instance_component_1.BrowserInstance; } });
6
+ const status_controller_1 = require("./controllers/status.controller");
7
+ Object.defineProperty(exports, "StatusController", { enumerable: true, get: function () { return status_controller_1.StatusController; } });
8
+ const user_data_service_1 = require("./services/user-data.service");
9
+ Object.defineProperty(exports, "UserDataService", { enumerable: true, get: function () { return user_data_service_1.UserDataService; } });
10
+ const browser_pool_service_1 = require("./services/browser-pool.service");
11
+ Object.defineProperty(exports, "BrowserPoolService", { enumerable: true, get: function () { return browser_pool_service_1.BrowserPoolService; } });
12
+ const timezone_service_1 = require("./services/timezone.service");
13
+ Object.defineProperty(exports, "TimezoneService", { enumerable: true, get: function () { return timezone_service_1.TimezoneService; } });
14
+ const cdp_controller_1 = require("./controllers/cdp.controller");
15
+ Object.defineProperty(exports, "CDPController", { enumerable: true, get: function () { return cdp_controller_1.CDPController; } });
16
+ const limit_stream_1 = require("./transforms/limit-stream");
17
+ exports.LimitStream = limit_stream_1.default;
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,wFAA2O;AAgBvO,gGAhBK,4CAAe,OAgBL;AAfnB,uEAAmE;AAgB/D,iGAhBK,oCAAgB,OAgBL;AAfpB,oEAA+D;AAgB3D,gGAhBK,mCAAe,OAgBL;AAfnB,0EAAwF;AAiBpF,mGAjBK,yCAAkB,OAiBL;AAhBtB,kEAA8D;AAiB1D,gGAjBK,kCAAe,OAiBL;AAhBnB,iEAA6D;AAiBzD,8FAjBK,8BAAa,OAiBL;AAhBjB,4DAAoD;AAiBhD,sBAjBG,sBAAW,CAiBH"}
@@ -1,15 +1,11 @@
1
1
  import { S3Client } from "@aws-sdk/client-s3";
2
- export declare abstract class UserDataService {
2
+ export declare class UserDataService {
3
3
  #private;
4
- abstract downloadUserData(id: string, user_data_folder: string): Promise<void>;
5
- abstract uploadUserData(id: string, user_data_folder: string): Promise<void>;
6
- protected tarUserDataFolder(user_data_folder: string): Promise<string>;
7
- protected untarUserDataFolder(tar_file: string, user_data_folder: string): Promise<void>;
8
- }
9
- export declare class UserDataS3Service extends UserDataService {
10
4
  private readonly s3_client;
11
5
  private readonly logger;
12
6
  constructor(s3_client: S3Client);
13
7
  downloadUserData(id: string, user_data_folder: string): Promise<void>;
14
8
  uploadUserData(id: string, user_data_folder: string): Promise<void>;
9
+ protected tarUserDataFolder(user_data_folder: string): Promise<string>;
10
+ protected untarUserDataFolder(tar_file: string, user_data_folder: string): Promise<void>;
15
11
  }
@@ -14,9 +14,9 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
14
14
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
15
15
  };
16
16
  var _UserDataService_instances, _UserDataService_cleanUserDataFolder;
17
- var UserDataS3Service_1;
17
+ var UserDataService_1;
18
18
  Object.defineProperty(exports, "__esModule", { value: true });
19
- exports.UserDataS3Service = exports.UserDataService = void 0;
19
+ exports.UserDataService = void 0;
20
20
  const client_s3_1 = require("@aws-sdk/client-s3");
21
21
  const common_1 = require("@nestjs/common");
22
22
  const fs = require("fs");
@@ -24,9 +24,40 @@ const fsPromise = require("fs/promises");
24
24
  const zlib = require("zlib");
25
25
  const tar = require("tar");
26
26
  const limit_stream_1 = require("../transforms/limit-stream");
27
- class UserDataService {
28
- constructor() {
27
+ let UserDataService = UserDataService_1 = class UserDataService {
28
+ constructor(s3_client) {
29
29
  _UserDataService_instances.add(this);
30
+ this.s3_client = s3_client;
31
+ this.logger = new common_1.Logger(UserDataService_1.name);
32
+ }
33
+ async downloadUserData(id, user_data_folder) {
34
+ try {
35
+ const tar_file = `/tmp/${crypto.randomUUID()}`;
36
+ const response = await this.s3_client.send(new client_s3_1.GetObjectCommand({
37
+ Bucket: process.env.S3_USER_DATA_BUCKET,
38
+ Key: id,
39
+ }));
40
+ await fsPromise.writeFile(tar_file, await response.Body.transformToByteArray());
41
+ await this.untarUserDataFolder(tar_file, user_data_folder);
42
+ await fsPromise.rm(tar_file);
43
+ this.logger.log(`Downloaded user data ${id} folder:${user_data_folder}`);
44
+ }
45
+ catch (e) {
46
+ if (e.Code === 'NoSuchKey') {
47
+ return;
48
+ }
49
+ throw e;
50
+ }
51
+ }
52
+ async uploadUserData(id, user_data_folder) {
53
+ const tar_file = await this.tarUserDataFolder(user_data_folder);
54
+ await this.s3_client.send(new client_s3_1.PutObjectCommand({
55
+ Bucket: process.env.S3_USER_DATA_BUCKET,
56
+ Key: id,
57
+ Body: await fsPromise.readFile(tar_file)
58
+ }));
59
+ await fsPromise.rm(tar_file);
60
+ this.logger.log(`Uploaded user data ${id} folder:${user_data_folder}`);
30
61
  }
31
62
  async tarUserDataFolder(user_data_folder) {
32
63
  const tar_file = `${crypto.randomUUID()}.tar.gz`;
@@ -53,9 +84,10 @@ class UserDataService {
53
84
  });
54
85
  await __classPrivateFieldGet(this, _UserDataService_instances, "m", _UserDataService_cleanUserDataFolder).call(this, user_data_folder);
55
86
  }
56
- }
87
+ };
57
88
  exports.UserDataService = UserDataService;
58
- _UserDataService_instances = new WeakSet(), _UserDataService_cleanUserDataFolder = async function _UserDataService_cleanUserDataFolder(user_data_folder) {
89
+ _UserDataService_instances = new WeakSet();
90
+ _UserDataService_cleanUserDataFolder = async function _UserDataService_cleanUserDataFolder(user_data_folder) {
59
91
  await Promise.allSettled([
60
92
  fsPromise.rm(`${user_data_folder}/Default/Sessions`, { recursive: true, force: true }),
61
93
  fsPromise.rm(`${user_data_folder}/SingletonLock`, { force: true }),
@@ -63,45 +95,8 @@ _UserDataService_instances = new WeakSet(), _UserDataService_cleanUserDataFolder
63
95
  fsPromise.rm(`${user_data_folder}/SingletonSocket`, { force: true }),
64
96
  ]);
65
97
  };
66
- let UserDataS3Service = UserDataS3Service_1 = class UserDataS3Service extends UserDataService {
67
- constructor(s3_client) {
68
- super();
69
- this.s3_client = s3_client;
70
- this.logger = new common_1.Logger(UserDataS3Service_1.name);
71
- }
72
- async downloadUserData(id, user_data_folder) {
73
- try {
74
- const tar_file = `/tmp/${crypto.randomUUID()}`;
75
- const response = await this.s3_client.send(new client_s3_1.GetObjectCommand({
76
- Bucket: process.env.S3_USER_DATA_BUCKET,
77
- Key: id,
78
- }));
79
- await fsPromise.writeFile(tar_file, await response.Body.transformToByteArray());
80
- await this.untarUserDataFolder(tar_file, user_data_folder);
81
- await fsPromise.rm(tar_file);
82
- this.logger.log(`Downloaded user data ${id} folder:${user_data_folder}`);
83
- }
84
- catch (e) {
85
- if (e.Code === 'NoSuchKey') {
86
- return;
87
- }
88
- throw e;
89
- }
90
- }
91
- async uploadUserData(id, user_data_folder) {
92
- const tar_file = await this.tarUserDataFolder(user_data_folder);
93
- await this.s3_client.send(new client_s3_1.PutObjectCommand({
94
- Bucket: process.env.S3_USER_DATA_BUCKET,
95
- Key: id,
96
- Body: await fsPromise.readFile(tar_file)
97
- }));
98
- await fsPromise.rm(tar_file);
99
- this.logger.log(`Uploaded user data ${id} folder:${user_data_folder}`);
100
- }
101
- };
102
- exports.UserDataS3Service = UserDataS3Service;
103
- exports.UserDataS3Service = UserDataS3Service = UserDataS3Service_1 = __decorate([
98
+ exports.UserDataService = UserDataService = UserDataService_1 = __decorate([
104
99
  (0, common_1.Injectable)(),
105
100
  __metadata("design:paramtypes", [client_s3_1.S3Client])
106
- ], UserDataS3Service);
101
+ ], UserDataService);
107
102
  //# sourceMappingURL=user-data.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"user-data.service.js","sourceRoot":"","sources":["../../src/services/user-data.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"user-data.service.js","sourceRoot":"","sources":["../../src/services/user-data.service.ts"],"names":[],"mappings":"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"}