@blitzbrowser/blitzbrowser 1.1.2 → 1.1.4

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.
@@ -0,0 +1,49 @@
1
+ name: CI/CD
2
+ on:
3
+ workflow_dispatch:
4
+
5
+ permissions:
6
+ id-token: write
7
+ contents: read
8
+ packages: write
9
+
10
+ jobs:
11
+ publish:
12
+ runs-on: ubuntu-latest
13
+ steps:
14
+ - uses: actions/checkout@v4
15
+ - uses: pnpm/action-setup@v4
16
+ with:
17
+ version: latest
18
+ - uses: actions/setup-node@v4
19
+ with:
20
+ node-version: '24'
21
+ registry-url: 'https://registry.npmjs.org'
22
+ cache: 'pnpm'
23
+ - run: pnpm install --frozen-lockfile
24
+ - run: pnpm build
25
+ - run: pnpm publish --access public --no-git-checks
26
+ - id: package_version
27
+ run: echo "VERSION=$(node -p "require('./package.json').version")" >> $GITHUB_OUTPUT
28
+ - uses: actions/github-script@v8
29
+ with:
30
+ script: |
31
+ github.rest.git.createRef({
32
+ owner: context.repo.owner,
33
+ repo: context.repo.repo,
34
+ ref: 'refs/tags/${{ steps.package_version.outputs.VERSION }}',
35
+ sha: context.sha
36
+ })
37
+ - uses: docker/login-action@v3
38
+ with:
39
+ registry: ghcr.io
40
+ username: ${{ github.actor }}
41
+ password: ${{ secrets.GITHUB_TOKEN }}
42
+ - uses: docker/setup-buildx-action@v3
43
+ - uses: docker/build-push-action@v6
44
+ with:
45
+ context: .
46
+ push: true
47
+ tags: |
48
+ ghcr.io/${{ github.repository }}:latest
49
+ ghcr.io/${{ github.repository }}:${{ steps.package_version.outputs.VERSION }}
package/Dockerfile CHANGED
@@ -23,4 +23,6 @@ COPY ./tsconfig.json ./tsconfig.json
23
23
 
24
24
  RUN npm run build
25
25
 
26
- ENTRYPOINT ["tini", "--"]
26
+ ENTRYPOINT ["tini", "--"]
27
+
28
+ CMD ["node", "./dist/main.js"]
package/README.md CHANGED
@@ -1 +1,116 @@
1
- # BlitzBrowser
1
+ # BlitzBrowser
2
+
3
+ ## 🚀 Quick Start
4
+
5
+ Start in seconds with docker and then connect your code.
6
+
7
+ ### Docker
8
+
9
+ ```bash
10
+ docker run -p=9999:9999 --shm-size=2g ghcr.io/blitzbrowser/blitzbrowser:latest
11
+ ```
12
+
13
+ <details>
14
+ <summary><b>Docker Compose</b></summary>
15
+
16
+ ```yaml
17
+ services:
18
+ blitzbrowser:
19
+ image: ghcr.io/blitzbrowser/blitzbrowser:latest
20
+ ports:
21
+ - "9999:9999"
22
+ shm_size: "2gb"
23
+ restart: always
24
+ ```
25
+
26
+ </details>
27
+
28
+ <details>
29
+ <summary><b>Docker Compose with Rustfs (User Data Storage)</b></summary>
30
+
31
+ Before using user data storage with BlitzBrowser. You need to create the bucket `user-data` in Rustfs [http://localhost:9001](http://localhost:9001).
32
+
33
+ ```yaml
34
+ services:
35
+ blitzbrowser:
36
+ image: ghcr.io/blitzbrowser/blitzbrowser:latest
37
+ ports:
38
+ - "9999:9999"
39
+ environment:
40
+ S3_ENDPOINT: http://s3:9000
41
+ S3_ACCESS_KEY_ID: rustfsadmin
42
+ S3_SECRET_ACCESS_KEY: rustfsadmin
43
+ S3_USER_DATA_BUCKET: user-data
44
+ shm_size: "2gb"
45
+ restart: always
46
+ s3:
47
+ image: rustfs/rustfs
48
+ ports:
49
+ - "9000:9000"
50
+ - "9001:9001"
51
+ environment:
52
+ RUSTFS_VOLUMES: /data
53
+ RUSTFS_ADDRESS: :9000
54
+ RUSTFS_ACCESS_KEY: rustfsadmin
55
+ RUSTFS_SECRET_KEY: rustfsadmin
56
+ RUSTFS_CONSOLE_ENABLE: true
57
+ restart: always
58
+ volumes:
59
+ - s3_data:/data
60
+ # RustFS volume permissions fixer service
61
+ volume-permission-helper:
62
+ image: alpine
63
+ volumes:
64
+ - s3_data:/data
65
+ command: >
66
+ sh -c "
67
+ chown -R 10001:10001 /data &&
68
+ echo 'Volume Permissions fixed' &&
69
+ exit 0
70
+ "
71
+ restart: "no"
72
+ volumes:
73
+ s3_data:
74
+ ```
75
+
76
+ </details>
77
+
78
+ ### Connect your code
79
+
80
+ <details open>
81
+ <summary><b>Puppeteer</b></summary>
82
+
83
+ ```typescript
84
+ import puppeteer from 'puppeteer';
85
+
86
+ const browser = await puppeteer.connect({
87
+ browserWSEndpoint: `ws://localhost:9999`
88
+ });
89
+
90
+ const context = await browser.createBrowserContext();
91
+ const page = await context.newPage();
92
+
93
+ // ...
94
+
95
+ await browser.close();
96
+ ```
97
+
98
+ </details>
99
+
100
+ <details>
101
+ <summary><b>Playwright + NodeJS</b></summary>
102
+
103
+ ```typescript
104
+ import { chromium } from 'playwright';
105
+
106
+ const browser = await chromium.connectOverCDP(`ws://localhost:9999`);
107
+
108
+ const context = await browser.newContext();
109
+ const page = await context.newPage();
110
+
111
+ // ...
112
+
113
+ await browser.close();
114
+ ```
115
+
116
+ </details>
@@ -14,6 +14,23 @@ 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");
16
16
  const cdp_controller_1 = require("./controllers/cdp.controller");
17
+ const USER_DATA_PROVIDERS = Object.keys(process.env).filter(k => k.startsWith('S3_')).length === 0 ? [] : [
18
+ {
19
+ provide: client_s3_1.S3Client,
20
+ useFactory: async () => {
21
+ return new client_s3_1.S3Client({
22
+ region: 'auto',
23
+ endpoint: process.env.S3_ENDPOINT,
24
+ credentials: {
25
+ accessKeyId: process.env.S3_ACCESS_KEY_ID,
26
+ secretAccessKey: process.env.S3_SECRET_ACCESS_KEY,
27
+ },
28
+ forcePathStyle: true,
29
+ });
30
+ }
31
+ },
32
+ user_data_service_1.UserDataService,
33
+ ];
17
34
  let AppModule = class AppModule {
18
35
  };
19
36
  exports.AppModule = AppModule;
@@ -25,21 +42,7 @@ exports.AppModule = AppModule = __decorate([
25
42
  status_controller_1.StatusController,
26
43
  ],
27
44
  providers: [
28
- {
29
- provide: client_s3_1.S3Client,
30
- useFactory: async () => {
31
- return new client_s3_1.S3Client({
32
- region: 'auto',
33
- endpoint: process.env.S3_ENDPOINT,
34
- credentials: {
35
- accessKeyId: process.env.S3_ACCESS_KEY_ID,
36
- secretAccessKey: process.env.S3_SECRET_ACCESS_KEY,
37
- },
38
- forcePathStyle: true,
39
- });
40
- }
41
- },
42
- user_data_service_1.UserDataService,
45
+ ...USER_DATA_PROVIDERS,
43
46
  browser_pool_service_1.BrowserPoolService,
44
47
  timezone_service_1.TimezoneService
45
48
  ],
@@ -1 +1 @@
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"}
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;AAE7D,MAAM,mBAAmB,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACxG;QACE,OAAO,EAAE,oBAAQ;QACjB,UAAU,EAAE,KAAK,IAAI,EAAE;YACrB,OAAO,IAAI,oBAAQ,CAAC;gBAClB,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW;gBACjC,WAAW,EAAE;oBACX,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB;oBACzC,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB;iBAClD;gBACD,cAAc,EAAE,IAAI;aACrB,CAAC,CAAC;QACL,CAAC;KACF;IAED,mCAAe;CAChB,CAAA;AAcM,IAAM,SAAS,GAAf,MAAM,SAAS;CAAI,CAAA;AAAb,8BAAS;oBAAT,SAAS;IAZrB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,EAAE;QACX,WAAW,EAAE;YACX,8BAAa;YACb,oCAAgB;SACjB;QACD,SAAS,EAAE;YACT,GAAG,mBAAmB;YACtB,yCAAkB;YAClB,kCAAe;SAChB;KACF,CAAC;GACW,SAAS,CAAI"}