@the-forge-flow/camoufox-pi 0.1.1 → 0.1.2

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.
package/README.md CHANGED
@@ -111,6 +111,79 @@ Defaults baked into `DEFAULT_CONFIG`:
111
111
  | `maxBytes` | `2097152` | 2 MiB response cap for `fetch_url`, overridable via `max_bytes` |
112
112
  | `defaultEngine` | `"duckduckgo"` | Only valid value in v0.1.0 |
113
113
 
114
+ ## Programmatic API (library mode)
115
+
116
+ `@the-forge-flow/camoufox-pi` can be imported directly from non-PI code (TFF daemon, scripts, CI harnesses). This is an off-label integration path — PI itself does not officially document cross-extension imports — but the client is PI-agnostic by design and has no PI runtime dependency.
117
+
118
+ ```typescript
119
+ import { createClient } from "@the-forge-flow/camoufox-pi";
120
+
121
+ const client = createClient();
122
+ // Optional: wait for ready up-front (factory is lazy; first op would block otherwise).
123
+ await client.ensureReady();
124
+
125
+ const { html, status } = await client.fetchUrl("https://example.com", {
126
+ signal: AbortSignal.timeout(30_000),
127
+ });
128
+
129
+ const { results } = await client.search("claude code", {
130
+ signal: AbortSignal.timeout(30_000),
131
+ maxResults: 10,
132
+ });
133
+
134
+ await client.close();
135
+ ```
136
+
137
+ ### `createClient(opts?)`
138
+
139
+ - `opts.config?: Partial<CamoufoxConfig>` — shallow-merged over `DEFAULT_CONFIG`.
140
+ - `opts.launcher?: Launcher` — swap in a custom launcher (tests inject a fake).
141
+
142
+ Returns a `CamoufoxClient` synchronously. `ensureReady()` is fired in the background; the first op awaits the in-flight promise.
143
+
144
+ ### `client.checkHealth({ probe? })`
145
+
146
+ Lightweight snapshot (default):
147
+
148
+ ```typescript
149
+ {
150
+ status: "launching" | "ready" | "failed" | "closed",
151
+ browserConnected: boolean,
152
+ browserVersion: string | null,
153
+ launchedAt: number | null,
154
+ uptimeMs: number | null,
155
+ lastError: CamoufoxError | null,
156
+ }
157
+ ```
158
+
159
+ Active probe (`{ probe: true }`) adds `probe: { ok, roundTripMs, error }` by opening and closing an `about:blank` page with a fixed 2 s timeout. Probe failure does NOT mutate client state.
160
+
161
+ ### Events
162
+
163
+ `client.events` is a typed `EventEmitter` with five events:
164
+
165
+ | Event | Payload | Emitted when |
166
+ |---|---|---|
167
+ | `browser_launch` | `{ spanId, browserVersion, durationMs }` | Launch completes successfully |
168
+ | `binary_download_progress` | `{ bytesDownloaded, bytesTotal }` | camoufox-js downloads the binary (first launch only) |
169
+ | `fetch_url` | `{ spanId, url, finalUrl, status, bytes, truncated, isolate, durationMs }` | `fetchUrl()` resolves |
170
+ | `search` | `{ spanId, engine, query, maxResults, resultCount, atLimit, durationMs }` | `search()` resolves |
171
+ | `error` | `{ spanId, op, error: CamoufoxError }` | Any op throws — fired BEFORE `throw` |
172
+
173
+ `spanId` is an 8-char hex string minted per op. The `error` event always fires before the `CamoufoxErrorBox` reaches the caller's `catch`. A listener that throws is caught (`console.error`) and does NOT mask the original error, and other listeners on the same event still run. Async listener rejections are swallowed-and-logged too.
174
+
175
+ ## Event reference (inside PI)
176
+
177
+ When the extension is loaded by PI, `CamoufoxService.attach(pi)` bridges every client event to `pi.events` under the `camoufox:` prefix. Other PI extensions subscribe idiomatically:
178
+
179
+ ```typescript
180
+ pi.events.on("camoufox:fetch_url", (e) => {
181
+ console.log(`fetch_url ${e.url} → ${e.status} (${e.durationMs} ms)`);
182
+ });
183
+ ```
184
+
185
+ Binary-download progress additionally drives `pi.ui.setStatus("camoufox:binary", …)` for a footer status line during the ~500 MB first-use download.
186
+
114
187
  ## Architecture
115
188
 
116
189
  ```
@@ -2,7 +2,21 @@ import type { Browser, BrowserContext, Page } from "playwright-core";
2
2
  import type { RawResult } from "../search/types.js";
3
3
  import { type LookupFn } from "../security/ssrf.js";
4
4
  import type { CamoufoxConfig } from "../types.js";
5
+ import { type CamoufoxEventEmitter } from "./events.js";
5
6
  import type { Launcher } from "./launcher.js";
7
+ export interface HealthStatus {
8
+ status: "launching" | "ready" | "failed" | "closed";
9
+ browserConnected: boolean;
10
+ browserVersion: string | null;
11
+ launchedAt: number | null;
12
+ uptimeMs: number | null;
13
+ lastError: import("../errors.js").CamoufoxError | null;
14
+ probe?: {
15
+ ok: boolean;
16
+ roundTripMs: number;
17
+ error: import("../errors.js").CamoufoxError | null;
18
+ };
19
+ }
6
20
  export interface CamoufoxClientOptions {
7
21
  readonly launcher: Launcher;
8
22
  readonly config?: CamoufoxConfig;
@@ -10,12 +24,18 @@ export interface CamoufoxClientOptions {
10
24
  readonly ssrfLookup?: LookupFn;
11
25
  }
12
26
  export declare class CamoufoxClient {
27
+ readonly events: CamoufoxEventEmitter;
13
28
  private readonly launcher;
14
- private readonly config;
29
+ readonly config: CamoufoxConfig;
15
30
  private readonly ssrfLookup;
16
31
  private state;
17
32
  constructor(opts: CamoufoxClientOptions);
18
33
  isAlive(): boolean;
34
+ checkHealth(opts?: {
35
+ probe?: boolean;
36
+ signal?: AbortSignal;
37
+ }): Promise<HealthStatus>;
38
+ private emitError;
19
39
  ensureReady(signal?: AbortSignal): Promise<void>;
20
40
  fetchUrl(url: string, opts: {
21
41
  signal: AbortSignal;
@@ -1 +1 @@
1
- {"version":3,"file":"camoufox-client.d.ts","sourceRoot":"","sources":["../../src/client/camoufox-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAIrE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,KAAK,QAAQ,EAAoB,MAAM,qBAAqB,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAY9C,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,cAAc,CAAC;IACjC,mEAAmE;IACnE,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC;CAC/B;AAED,qBAAa,cAAc;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAuB;IAClD,OAAO,CAAC,KAAK,CAAkC;gBAEnC,IAAI,EAAE,qBAAqB;IAMvC,OAAO,IAAI,OAAO;IAIZ,WAAW,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAehD,QAAQ,CACb,GAAG,EAAE,MAAM,EACX,IAAI,EAAE;QACL,MAAM,EAAE,WAAW,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,OAAO,CAAC;KAClB,GACC,OAAO,CAAC;QACV,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,OAAO,CAAC;KACnB,CAAC;IAqEI,MAAM,CACX,KAAK,EAAE,MAAM,EACb,IAAI,EAAE;QACL,MAAM,EAAE,WAAW,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,OAAO,CAAC;KAClB,GACC,OAAO,CAAC;QAAE,OAAO,EAAE,SAAS,EAAE,CAAC;QAAC,MAAM,EAAE,YAAY,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;cAiDzD,QAAQ,CACvB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE;QACL,MAAM,EAAE,WAAW,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,GAAG,kBAAkB,GAAG,aAAa,CAAC;QACvD,OAAO,CAAC,EAAE,OAAO,CAAC;KAClB,GACC,OAAO,CAAC;QACV,IAAI,EAAE,IAAI,CAAC;QACX,QAAQ,EAAE;YAAE,MAAM,IAAI,MAAM,CAAC;YAAC,GAAG,IAAI,MAAM,CAAA;SAAE,CAAC;QAC9C,OAAO,EAAE,MAAM,IAAI,CAAC;KACpB,CAAC;IAuDI,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAY5B,SAAS,CAAC,SAAS,IAAI,cAAc;IAIrC,SAAS,CAAC,UAAU,IAAI,cAAc;IAUtC,SAAS,CAAC,UAAU,IAAI,OAAO;YAUjB,QAAQ;YAsBR,eAAe;CAqB7B"}
1
+ {"version":3,"file":"camoufox-client.d.ts","sourceRoot":"","sources":["../../src/client/camoufox-client.ts"],"names":[],"mappings":"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"}
@@ -2,8 +2,10 @@ import { CamoufoxErrorBox, mapPlaywrightError } from "../errors.js";
2
2
  import { duckduckgoAdapter } from "../search/adapters/duckduckgo.js";
3
3
  import { assertSafeTarget } from "../security/ssrf.js";
4
4
  import { DEFAULT_CONFIG } from "../types.js";
5
+ import { createEventEmitter, newSpanId, } from "./events.js";
5
6
  import { combineSignals } from "./signal.js";
6
7
  export class CamoufoxClient {
8
+ events = createEventEmitter();
7
9
  launcher;
8
10
  config;
9
11
  ssrfLookup;
@@ -16,6 +18,63 @@ export class CamoufoxClient {
16
18
  isAlive() {
17
19
  return this.state.status === "ready" && this.state.browser?.isConnected() === true;
18
20
  }
21
+ async checkHealth(opts = {}) {
22
+ const status = this.state.status === "idle" ? "launching" : this.state.status;
23
+ const snapshot = {
24
+ status,
25
+ browserConnected: this.state.status === "ready" ? this.state.browser?.isConnected() === true : false,
26
+ browserVersion: this.state.version ?? null,
27
+ launchedAt: this.state.launchedAt ?? null,
28
+ uptimeMs: this.state.status === "ready" && this.state.launchedAt
29
+ ? Date.now() - this.state.launchedAt
30
+ : null,
31
+ lastError: this.state.status === "failed" && this.state.error ? this.state.error.err : null,
32
+ };
33
+ if (opts.probe) {
34
+ if (this.state.status !== "ready" || !this.state.context || !this.state.browser) {
35
+ snapshot.probe = {
36
+ ok: false,
37
+ roundTripMs: 0,
38
+ error: { type: "playwright_disconnected" },
39
+ };
40
+ return snapshot;
41
+ }
42
+ const probeStarted = Date.now();
43
+ try {
44
+ const page = await this.state.context.newPage();
45
+ try {
46
+ await page.goto("about:blank", { timeout: 2_000, waitUntil: "load" });
47
+ snapshot.probe = {
48
+ ok: true,
49
+ roundTripMs: Date.now() - probeStarted,
50
+ error: null,
51
+ };
52
+ }
53
+ finally {
54
+ await page.close().catch(() => undefined);
55
+ }
56
+ }
57
+ catch (err) {
58
+ const mapped = mapPlaywrightError(err, {
59
+ url: "about:blank",
60
+ phase: "nav",
61
+ elapsedMs: Date.now() - probeStarted,
62
+ ...(opts.signal !== undefined ? { signal: opts.signal } : {}),
63
+ });
64
+ snapshot.probe = {
65
+ ok: false,
66
+ roundTripMs: Date.now() - probeStarted,
67
+ error: mapped,
68
+ };
69
+ }
70
+ }
71
+ return snapshot;
72
+ }
73
+ emitError(spanId, op, err) {
74
+ if (err instanceof CamoufoxErrorBox) {
75
+ this.events.emit("error", { spanId, op, error: err.err });
76
+ }
77
+ }
19
78
  async ensureReady(signal) {
20
79
  if (this.state.status === "ready")
21
80
  return;
@@ -28,117 +87,170 @@ export class CamoufoxClient {
28
87
  await this.awaitWithSignal(this.state.launchPromise, signal);
29
88
  return;
30
89
  }
31
- const launchPromise = this.doLaunch();
90
+ const spanId = newSpanId();
91
+ const launchPromise = this.doLaunch(spanId);
32
92
  this.state = { status: "launching", launchPromise };
33
93
  await this.awaitWithSignal(launchPromise, signal);
34
94
  }
35
95
  async fetchUrl(url, opts) {
36
- await this.ensureReady(opts.signal);
37
- if (opts.timeoutMs !== undefined &&
38
- (!Number.isInteger(opts.timeoutMs) || opts.timeoutMs < 1_000 || opts.timeoutMs > 120_000)) {
39
- throw new CamoufoxErrorBox({
40
- type: "config_invalid",
41
- field: "timeoutMs",
42
- reason: `must be integer in [1000, 120000], got ${opts.timeoutMs}`,
43
- });
44
- }
45
- if (opts.maxBytes !== undefined &&
46
- (!Number.isInteger(opts.maxBytes) || opts.maxBytes < 1_024 || opts.maxBytes > 52_428_800)) {
47
- throw new CamoufoxErrorBox({
48
- type: "config_invalid",
49
- field: "maxBytes",
50
- reason: `must be integer in [1024, 52428800], got ${opts.maxBytes}`,
51
- });
52
- }
53
- try {
54
- await assertSafeTarget(url, this.ssrfLookup ? { lookup: this.ssrfLookup } : {});
55
- }
56
- catch (err) {
57
- throw new CamoufoxErrorBox({
58
- type: "config_invalid",
59
- field: "url",
60
- reason: err instanceof Error ? err.message : String(err),
61
- });
62
- }
63
- const navOpts = {
64
- signal: opts.signal,
65
- timeoutMs: opts.timeoutMs ?? this.config.timeoutMs,
66
- waitUntil: "load",
67
- };
68
- if (opts.isolate !== undefined)
69
- navOpts.isolate = opts.isolate;
70
- const { page, response, cleanup } = await this.navigate(url, navOpts);
96
+ const spanId = newSpanId();
97
+ const started = Date.now();
71
98
  try {
72
- const rawHtml = await page.content();
73
- const maxBytes = opts.maxBytes ?? this.config.maxBytes;
74
- const rawBytes = Buffer.byteLength(rawHtml, "utf8");
75
- let html = rawHtml;
76
- let bytes = rawBytes;
77
- let truncated = false;
78
- if (rawBytes > maxBytes) {
79
- const buf = Buffer.from(rawHtml, "utf8");
80
- html = buf.subarray(0, maxBytes).toString("utf8");
81
- bytes = Buffer.byteLength(html, "utf8");
82
- truncated = true;
99
+ await this.ensureReady(opts.signal);
100
+ if (opts.timeoutMs !== undefined &&
101
+ (!Number.isInteger(opts.timeoutMs) || opts.timeoutMs < 1_000 || opts.timeoutMs > 120_000)) {
102
+ throw new CamoufoxErrorBox({
103
+ type: "config_invalid",
104
+ field: "timeoutMs",
105
+ reason: `must be integer in [1000, 120000], got ${opts.timeoutMs}`,
106
+ });
83
107
  }
84
- return { html, status: response.status(), finalUrl: response.url(), bytes, truncated };
85
- }
86
- catch (err) {
87
- if (opts.signal.aborted) {
88
- throw new CamoufoxErrorBox({ type: "aborted" });
108
+ if (opts.maxBytes !== undefined &&
109
+ (!Number.isInteger(opts.maxBytes) || opts.maxBytes < 1_024 || opts.maxBytes > 52_428_800)) {
110
+ throw new CamoufoxErrorBox({
111
+ type: "config_invalid",
112
+ field: "maxBytes",
113
+ reason: `must be integer in [1024, 52428800], got ${opts.maxBytes}`,
114
+ });
89
115
  }
90
- if (err instanceof CamoufoxErrorBox)
116
+ try {
117
+ await assertSafeTarget(url, this.ssrfLookup ? { lookup: this.ssrfLookup } : {});
118
+ }
119
+ catch (err) {
120
+ throw new CamoufoxErrorBox({
121
+ type: "config_invalid",
122
+ field: "url",
123
+ reason: err instanceof Error ? err.message : String(err),
124
+ });
125
+ }
126
+ const navOpts = {
127
+ signal: opts.signal,
128
+ timeoutMs: opts.timeoutMs ?? this.config.timeoutMs,
129
+ waitUntil: "load",
130
+ };
131
+ if (opts.isolate !== undefined)
132
+ navOpts.isolate = opts.isolate;
133
+ const { page, response, cleanup } = await this.navigate(url, navOpts);
134
+ try {
135
+ const rawHtml = await page.content();
136
+ const maxBytes = opts.maxBytes ?? this.config.maxBytes;
137
+ const rawBytes = Buffer.byteLength(rawHtml, "utf8");
138
+ let html = rawHtml;
139
+ let bytes = rawBytes;
140
+ let truncated = false;
141
+ if (rawBytes > maxBytes) {
142
+ const buf = Buffer.from(rawHtml, "utf8");
143
+ html = buf.subarray(0, maxBytes).toString("utf8");
144
+ bytes = Buffer.byteLength(html, "utf8");
145
+ truncated = true;
146
+ }
147
+ const result = {
148
+ html,
149
+ status: response.status(),
150
+ finalUrl: response.url(),
151
+ bytes,
152
+ truncated,
153
+ };
154
+ this.events.emit("fetch_url", {
155
+ spanId,
156
+ url,
157
+ finalUrl: result.finalUrl,
158
+ status: result.status,
159
+ bytes: result.bytes,
160
+ truncated: result.truncated,
161
+ isolate: opts.isolate ?? false,
162
+ durationMs: Date.now() - started,
163
+ });
164
+ return result;
165
+ }
166
+ catch (err) {
167
+ if (opts.signal.aborted) {
168
+ throw new CamoufoxErrorBox({ type: "aborted" });
169
+ }
170
+ if (err instanceof CamoufoxErrorBox)
171
+ throw err;
91
172
  throw err;
92
- throw err;
173
+ }
174
+ finally {
175
+ cleanup();
176
+ await page.close().catch(() => undefined);
177
+ }
93
178
  }
94
- finally {
95
- cleanup();
96
- await page.close().catch(() => undefined);
179
+ catch (err) {
180
+ this.emitError(spanId, "fetchUrl", err);
181
+ throw err;
97
182
  }
98
183
  }
99
184
  async search(query, opts) {
100
- await this.ensureReady(opts.signal);
101
- const maxResults = opts.maxResults ?? 10;
102
- if (!Number.isInteger(maxResults) || maxResults < 1 || maxResults > 50) {
103
- throw new CamoufoxErrorBox({
104
- type: "config_invalid",
105
- field: "maxResults",
106
- reason: `must be integer in [1, 50], got ${maxResults}`,
107
- });
108
- }
109
- if (opts.timeoutMs !== undefined &&
110
- (!Number.isInteger(opts.timeoutMs) || opts.timeoutMs < 1_000 || opts.timeoutMs > 120_000)) {
111
- throw new CamoufoxErrorBox({
112
- type: "config_invalid",
113
- field: "timeoutMs",
114
- reason: `must be integer in [1000, 120000], got ${opts.timeoutMs}`,
115
- });
116
- }
117
- const adapter = duckduckgoAdapter;
118
- const url = adapter.buildUrl(query);
119
- const navOpts = {
120
- signal: opts.signal,
121
- timeoutMs: opts.timeoutMs ?? this.config.timeoutMs,
122
- waitUntil: adapter.waitStrategy.readyState,
123
- };
124
- if (opts.isolate !== undefined)
125
- navOpts.isolate = opts.isolate;
126
- const { page, cleanup } = await this.navigate(url, navOpts);
185
+ const spanId = newSpanId();
186
+ const started = Date.now();
127
187
  try {
128
- const results = await adapter.parseResults(page, maxResults);
129
- return { results, engine: "duckduckgo", query };
130
- }
131
- catch (err) {
132
- if (opts.signal.aborted) {
133
- throw new CamoufoxErrorBox({ type: "aborted" });
188
+ await this.ensureReady(opts.signal);
189
+ const maxResults = opts.maxResults ?? 10;
190
+ if (!Number.isInteger(maxResults) || maxResults < 1 || maxResults > 50) {
191
+ throw new CamoufoxErrorBox({
192
+ type: "config_invalid",
193
+ field: "maxResults",
194
+ reason: `must be integer in [1, 50], got ${maxResults}`,
195
+ });
134
196
  }
135
- if (err instanceof CamoufoxErrorBox)
197
+ if (opts.timeoutMs !== undefined &&
198
+ (!Number.isInteger(opts.timeoutMs) || opts.timeoutMs < 1_000 || opts.timeoutMs > 120_000)) {
199
+ throw new CamoufoxErrorBox({
200
+ type: "config_invalid",
201
+ field: "timeoutMs",
202
+ reason: `must be integer in [1000, 120000], got ${opts.timeoutMs}`,
203
+ });
204
+ }
205
+ const adapter = duckduckgoAdapter;
206
+ const url = adapter.buildUrl(query);
207
+ try {
208
+ await assertSafeTarget(url, this.ssrfLookup ? { lookup: this.ssrfLookup } : {});
209
+ }
210
+ catch (err) {
211
+ throw new CamoufoxErrorBox({
212
+ type: "config_invalid",
213
+ field: "url",
214
+ reason: err instanceof Error ? err.message : String(err),
215
+ });
216
+ }
217
+ const navOpts = {
218
+ signal: opts.signal,
219
+ timeoutMs: opts.timeoutMs ?? this.config.timeoutMs,
220
+ waitUntil: adapter.waitStrategy.readyState,
221
+ };
222
+ if (opts.isolate !== undefined)
223
+ navOpts.isolate = opts.isolate;
224
+ const { page, cleanup } = await this.navigate(url, navOpts);
225
+ try {
226
+ const results = await adapter.parseResults(page, maxResults);
227
+ this.events.emit("search", {
228
+ spanId,
229
+ engine: "duckduckgo",
230
+ query,
231
+ maxResults,
232
+ durationMs: Date.now() - started,
233
+ resultCount: results.length,
234
+ atLimit: results.length === maxResults,
235
+ });
236
+ return { results, engine: "duckduckgo", query };
237
+ }
238
+ catch (err) {
239
+ if (opts.signal.aborted) {
240
+ throw new CamoufoxErrorBox({ type: "aborted" });
241
+ }
242
+ if (err instanceof CamoufoxErrorBox)
243
+ throw err;
136
244
  throw err;
137
- throw err;
245
+ }
246
+ finally {
247
+ cleanup();
248
+ await page.close().catch(() => undefined);
249
+ }
138
250
  }
139
- finally {
140
- cleanup();
141
- await page.close().catch(() => undefined);
251
+ catch (err) {
252
+ this.emitError(spanId, "search", err);
253
+ throw err;
142
254
  }
143
255
  }
144
256
  async navigate(url, opts) {
@@ -231,25 +343,43 @@ export class CamoufoxClient {
231
343
  }
232
344
  return this.state.browser;
233
345
  }
234
- async doLaunch() {
346
+ async doLaunch(spanId) {
347
+ const started = Date.now();
235
348
  try {
236
- const { browser, context, version } = await this.launcher.launch();
349
+ const { browser, context, version } = await this.launcher.launch({
350
+ onProgress: (e) => this.events.emit("binary_download_progress", e),
351
+ });
237
352
  // If close() was called while we were launching, tear down the fresh
238
353
  // browser instead of resurrecting into ready. Leaves state as "closed".
239
354
  if (this.state.status !== "launching") {
240
355
  await browser.close().catch(() => undefined);
241
356
  return;
242
357
  }
243
- this.state = { status: "ready", browser, context, version };
358
+ this.state = {
359
+ status: "ready",
360
+ browser,
361
+ context,
362
+ version,
363
+ launchedAt: Date.now(),
364
+ };
365
+ const payload = {
366
+ spanId,
367
+ browserVersion: version,
368
+ durationMs: Date.now() - started,
369
+ };
370
+ this.events.emit("browser_launch", payload);
244
371
  }
245
372
  catch (err) {
246
373
  const stderr = err instanceof Error ? err.message : String(err);
247
- const boxed = new CamoufoxErrorBox({ type: "browser_launch_failed", stderr });
248
- // If close() was called during the failed launch, keep the closed state
249
- // (don't overwrite it with failed closed is terminal).
374
+ const camErr = { type: "browser_launch_failed", stderr };
375
+ const boxed = new CamoufoxErrorBox(camErr);
376
+ // If close() was called during the failed launch, keep the closed
377
+ // state (don't overwrite it with failed — closed is terminal).
250
378
  if (this.state.status === "launching") {
251
379
  this.state = { status: "failed", error: boxed };
252
380
  }
381
+ const errPayload = { spanId, op: "ensureReady", error: camErr };
382
+ this.events.emit("error", errPayload);
253
383
  throw boxed;
254
384
  }
255
385
  }
@@ -1 +1 @@
1
- {"version":3,"file":"camoufox-client.js","sourceRoot":"","sources":["../../src/client/camoufox-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"camoufox-client.js","sourceRoot":"","sources":["../../src/client/camoufox-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { LookupFn } from "../security/ssrf.js";
2
+ import type { CamoufoxConfig } from "../types.js";
3
+ import { CamoufoxClient } from "./camoufox-client.js";
4
+ import { type Launcher } from "./launcher.js";
5
+ export interface CreateClientOptions {
6
+ readonly config?: Partial<CamoufoxConfig>;
7
+ readonly launcher?: Launcher;
8
+ /** Optional DNS lookup override; forwarded to CamoufoxClient for test injection. */
9
+ readonly ssrfLookup?: LookupFn;
10
+ }
11
+ /**
12
+ * Factory for library-mode consumers. Constructs a CamoufoxClient with
13
+ * either an injected launcher or a RealLauncher, shallow-merges config
14
+ * over DEFAULT_CONFIG, and fires ensureReady() in the background. First op
15
+ * awaits the in-flight launch promise via ensureReady.
16
+ *
17
+ * Returns synchronously. Factory caller that wants eager behavior writes
18
+ * `const c = createClient(); await c.ensureReady();` — one explicit line.
19
+ */
20
+ export declare function createClient(opts?: CreateClientOptions): CamoufoxClient;
21
+ //# sourceMappingURL=create-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-client.d.ts","sourceRoot":"","sources":["../../src/client/create-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,KAAK,QAAQ,EAAgB,MAAM,eAAe,CAAC;AAE5D,MAAM,WAAW,mBAAmB;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IAC1C,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAC7B,oFAAoF;IACpF,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC;CAC/B;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,IAAI,GAAE,mBAAwB,GAAG,cAAc,CAW3E"}
@@ -0,0 +1,25 @@
1
+ import { DEFAULT_CONFIG } from "../types.js";
2
+ import { CamoufoxClient } from "./camoufox-client.js";
3
+ import { RealLauncher } from "./launcher.js";
4
+ /**
5
+ * Factory for library-mode consumers. Constructs a CamoufoxClient with
6
+ * either an injected launcher or a RealLauncher, shallow-merges config
7
+ * over DEFAULT_CONFIG, and fires ensureReady() in the background. First op
8
+ * awaits the in-flight launch promise via ensureReady.
9
+ *
10
+ * Returns synchronously. Factory caller that wants eager behavior writes
11
+ * `const c = createClient(); await c.ensureReady();` — one explicit line.
12
+ */
13
+ export function createClient(opts = {}) {
14
+ const launcher = opts.launcher ?? new RealLauncher();
15
+ const config = { ...DEFAULT_CONFIG, ...opts.config };
16
+ const client = new CamoufoxClient({
17
+ launcher,
18
+ config,
19
+ ...(opts.ssrfLookup !== undefined ? { ssrfLookup: opts.ssrfLookup } : {}),
20
+ });
21
+ // Fire-and-forget: first op awaits the in-flight promise via ensureReady.
22
+ client.ensureReady().catch(() => undefined);
23
+ return client;
24
+ }
25
+ //# sourceMappingURL=create-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-client.js","sourceRoot":"","sources":["../../src/client/create-client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAiB,YAAY,EAAE,MAAM,eAAe,CAAC;AAS5D;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,OAA4B,EAAE;IAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,YAAY,EAAE,CAAC;IACrD,MAAM,MAAM,GAAmB,EAAE,GAAG,cAAc,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IACrE,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC;QACjC,QAAQ;QACR,MAAM;QACN,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACzE,CAAC,CAAC;IACH,0EAA0E;IAC1E,MAAM,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC5C,OAAO,MAAM,CAAC;AACf,CAAC"}