@blitzbrowser/blitzbrowser 1.0.1 → 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.
@@ -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,uEAAmE;AACnE,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,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;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"}
package/dist/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { BrowserInstance, BrowserInstanceEvent, BrowserInstanceRequestEvent, BrowserInstanceStatus, BrowserInstanceStatusEvent, CDPCloseEvent, CDPTerminatedEvent, ConnectionOptionsEvent } from "./components/browser-instance.component";
2
2
  import { StatusController } from './controllers/status.controller';
3
- import { UserDataS3Service, UserDataService } from './services/user-data.service';
3
+ import { UserDataService } from './services/user-data.service';
4
4
  import { BrowserPoolService, BrowserPoolStatus } from './services/browser-pool.service';
5
5
  import { TimezoneService } from './services/timezone.service';
6
6
  import { CDPController } from './controllers/cdp.controller';
7
7
  import LimitStream from "./transforms/limit-stream";
8
- export { ConnectionOptionsEvent, CDPCloseEvent, CDPTerminatedEvent, BrowserInstanceStatusEvent, BrowserInstanceRequestEvent, BrowserInstanceEvent, BrowserInstanceStatus, BrowserInstance, StatusController, UserDataService, UserDataS3Service, BrowserPoolStatus, BrowserPoolService, TimezoneService, CDPController, LimitStream };
8
+ export { ConnectionOptionsEvent, CDPCloseEvent, CDPTerminatedEvent, BrowserInstanceStatusEvent, BrowserInstanceRequestEvent, BrowserInstanceEvent, BrowserInstanceStatus, BrowserInstance, StatusController, UserDataService, BrowserPoolStatus, BrowserPoolService, TimezoneService, CDPController, LimitStream };
package/dist/index.js CHANGED
@@ -1,12 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.LimitStream = exports.CDPController = exports.TimezoneService = exports.BrowserPoolService = exports.UserDataS3Service = exports.UserDataService = exports.StatusController = exports.BrowserInstance = void 0;
3
+ exports.LimitStream = exports.CDPController = exports.TimezoneService = exports.BrowserPoolService = exports.UserDataService = exports.StatusController = exports.BrowserInstance = void 0;
4
4
  const browser_instance_component_1 = require("./components/browser-instance.component");
5
5
  Object.defineProperty(exports, "BrowserInstance", { enumerable: true, get: function () { return browser_instance_component_1.BrowserInstance; } });
6
6
  const status_controller_1 = require("./controllers/status.controller");
7
7
  Object.defineProperty(exports, "StatusController", { enumerable: true, get: function () { return status_controller_1.StatusController; } });
8
8
  const user_data_service_1 = require("./services/user-data.service");
9
- Object.defineProperty(exports, "UserDataS3Service", { enumerable: true, get: function () { return user_data_service_1.UserDataS3Service; } });
10
9
  Object.defineProperty(exports, "UserDataService", { enumerable: true, get: function () { return user_data_service_1.UserDataService; } });
11
10
  const browser_pool_service_1 = require("./services/browser-pool.service");
12
11
  Object.defineProperty(exports, "BrowserPoolService", { enumerable: true, get: function () { return browser_pool_service_1.BrowserPoolService; } });
package/dist/index.js.map CHANGED
@@ -1 +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,oEAAkF;AAiB9E,kGAjBK,qCAAiB,OAiBL;AADjB,gGAhBwB,mCAAe,OAgBxB;AAfnB,0EAAwF;AAkBpF,mGAlBK,yCAAkB,OAkBL;AAjBtB,kEAA8D;AAkB1D,gGAlBK,kCAAe,OAkBL;AAjBnB,iEAA6D;AAkBzD,8FAlBK,8BAAa,OAkBL;AAjBjB,4DAAoD;AAkBhD,sBAlBG,sBAAW,CAkBH"}
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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"}