Skip to content

Commit 3a710c4

Browse files
authored
fix: properly type Puppeteer BrowserController (#54)
* Properly type Puppeteer BrowserController * bump version * fixes * Remove duplicated interface
1 parent 9fb9417 commit 3a710c4

File tree

5 files changed

+34
-14
lines changed

5 files changed

+34
-14
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "browser-pool",
3-
"version": "3.0.0",
3+
"version": "3.0.1",
44
"description": "Rotate multiple browsers using popular automation libraries such as Playwright or Puppeteer.",
55
"engines": {
66
"node": ">=15.10.0"

src/puppeteer/puppeteer-controller.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,11 @@
1-
import type Puppeteer from 'puppeteer';
1+
import type Puppeteer from './puppeteer-proxy-per-page';
22
import { BrowserController, Cookie } from '../abstract-classes/browser-controller';
33
import { log } from '../logger';
44

55
const PROCESS_KILL_TIMEOUT_MILLIS = 5000;
66

7-
interface ContextOptions extends Puppeteer.BrowserContextOptions {
8-
proxyUsername?: string;
9-
proxyPassword?: string;
10-
}
11-
127
export class PuppeteerController extends BrowserController<typeof Puppeteer> {
13-
protected async _newPage(contextOptions?: ContextOptions): Promise<Puppeteer.Page> {
8+
protected async _newPage(contextOptions?: Puppeteer.ContextOptions): Promise<Puppeteer.Page> {
149
if (contextOptions !== undefined) {
1510
if (!this.launchContext.useIncognitoPages) {
1611
throw new Error('A new page can be created with provided context only when using incognito pages.');

src/puppeteer/puppeteer-plugin.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// eslint isn't compatible with `import type`
22
/* eslint-disable import/no-duplicates */
3-
import type Puppeteer from 'puppeteer';
4-
import type { Browser, Credentials, Target } from 'puppeteer';
3+
import type Puppeteer from './puppeteer-proxy-per-page';
4+
import type { Browser, Credentials, Target, BrowserContext } from './puppeteer-proxy-per-page';
55
import { BrowserController } from '../abstract-classes/browser-controller';
66
import { BrowserPlugin } from '../abstract-classes/browser-plugin';
77
import { LaunchContext } from '../launch-context';
@@ -48,7 +48,7 @@ export class PuppeteerPlugin extends BrowserPlugin<typeof Puppeteer> {
4848
browser = new Proxy(browser, {
4949
get: (target, property: keyof typeof browser) => {
5050
if (property === 'newPage') {
51-
return (async (...args) => {
51+
return (async (...args: Parameters<BrowserContext['newPage']>) => {
5252
let page: Puppeteer.Page;
5353

5454
if (useIncognitoPages) {
@@ -66,7 +66,7 @@ export class PuppeteerPlugin extends BrowserPlugin<typeof Puppeteer> {
6666
}
6767

6868
return page;
69-
}) as typeof browser.newPage;
69+
});
7070
}
7171

7272
return target[property];
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import type {
2+
BrowserContextOptions,
3+
Browser as PuppeteerBrowser,
4+
Page,
5+
LaunchOptions,
6+
BrowserLaunchArgumentOptions,
7+
BrowserConnectOptions,
8+
Product,
9+
} from 'puppeteer';
10+
11+
export * from 'puppeteer';
12+
13+
export interface ContextOptions extends BrowserContextOptions {
14+
proxyUsername?: string;
15+
proxyPassword?: string;
16+
}
17+
18+
export declare class Browser extends PuppeteerBrowser {
19+
newPage: (contextOptions?: ContextOptions) => Promise<Page>;
20+
}
21+
22+
export declare function launch(options?: LaunchOptions & BrowserLaunchArgumentOptions & BrowserConnectOptions & {
23+
product?: Product;
24+
extraPrefsFirefox?: Record<string, unknown>;
25+
}): Promise<Browser>;

test/browser-plugins/plugins.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ const runPluginTest = <
133133
browserController.activate();
134134

135135
try {
136-
const page = await browserController.newPage({} as any);
136+
const page = await browserController.newPage({});
137137
await page.close();
138138

139139
expect(false).toBe(true);
@@ -300,7 +300,7 @@ describe('Plugins', () => {
300300
proxyUsername: 'foo',
301301
proxyPassword: 'bar',
302302
proxyBypassList: ['<-loopback>'],
303-
} as any);
303+
});
304304

305305
const response = await page.goto(`http://127.0.0.1:${(target.address() as AddressInfo).port}`);
306306
const text = await response!.text();

0 commit comments

Comments
 (0)