@@ -78,24 +78,16 @@ async function getBrowser(
78
78
) : Promise < BrowserResult > {
79
79
if ( env === "BROWSERBASE" ) {
80
80
if ( ! apiKey ) {
81
- throw new Error (
82
- 'BROWSERBASE_API_KEY is required to use the BROWSERBASE environment. Please set it in your .env or pass it in.'
81
+ throw new MissingEnvironmentVariableError (
82
+ "BROWSERBASE_API_KEY" ,
83
+ "Browserbase" ,
83
84
) ;
84
85
}
85
-
86
86
if ( ! projectId ) {
87
- logger ( {
88
- category : "init" ,
89
- message :
90
- "BROWSERBASE_PROJECT_ID is required for some Browserbase features that may not work without it." ,
91
- level : 1 ,
92
- } ) ;
93
- }
94
- }
95
-
96
- if ( env === "BROWSERBASE" ) {
97
- if ( ! apiKey ) {
98
- throw new StagehandError ( "BROWSERBASE_API_KEY is required." ) ;
87
+ throw new MissingEnvironmentVariableError (
88
+ "BROWSERBASE_PROJECT_ID" ,
89
+ "Browserbase" ,
90
+ ) ;
99
91
}
100
92
101
93
let debugUrl : string | undefined = undefined ;
@@ -110,17 +102,16 @@ async function getBrowser(
110
102
if ( browserbaseSessionID ) {
111
103
// Validate the session status
112
104
try {
113
- const sessionStatus =
105
+ const session =
114
106
await browserbase . sessions . retrieve ( browserbaseSessionID ) ;
115
107
116
- if ( sessionStatus . status !== "RUNNING" ) {
108
+ if ( session . status !== "RUNNING" ) {
117
109
throw new StagehandError (
118
- `Session ${ browserbaseSessionID } is not running (status: ${ sessionStatus . status } )` ,
110
+ `Session ${ browserbaseSessionID } is not running (status: ${ session . status } )` ,
119
111
) ;
120
112
}
121
113
122
114
sessionId = browserbaseSessionID ;
123
- const session = await browserbase . sessions . retrieve ( sessionId ) ;
124
115
connectUrl = session . connectUrl ;
125
116
126
117
logger ( {
@@ -191,6 +182,7 @@ async function getBrowser(
191
182
}
192
183
193
184
const browser = await chromium . connectOverCDP ( connectUrl ) ;
185
+
194
186
const { debuggerUrl } = await browserbase . sessions . debug ( sessionId ) ;
195
187
196
188
debugUrl = debuggerUrl ;
@@ -249,7 +241,7 @@ async function getBrowser(
249
241
logger ( {
250
242
category : "init" ,
251
243
message : "connecting to local browser via CDP URL" ,
252
- level : 0 ,
244
+ level : 1 ,
253
245
auxiliary : {
254
246
cdpUrl : {
255
247
value : localBrowserLaunchOptions . cdpUrl ,
@@ -386,16 +378,13 @@ async function applyStealthScripts(context: BrowserContext) {
386
378
export class Stagehand {
387
379
private stagehandPage ! : StagehandPage ;
388
380
private stagehandContext ! : StagehandContext ;
389
- private intEnv : "LOCAL" | "BROWSERBASE" ;
390
-
391
381
public browserbaseSessionID ?: string ;
392
382
public readonly domSettleTimeoutMs : number ;
393
383
public readonly debugDom : boolean ;
394
384
public readonly headless : boolean ;
395
385
public verbose : 0 | 1 | 2 ;
396
386
public llmProvider : LLMProvider ;
397
387
public enableCaching : boolean ;
398
-
399
388
private apiKey : string | undefined ;
400
389
private projectId : string | undefined ;
401
390
private externalLogger ?: ( logLine : LogLine ) => void ;
@@ -415,6 +404,7 @@ export class Stagehand {
415
404
public readonly logInferenceToFile ?: boolean ;
416
405
private stagehandLogger : StagehandLogger ;
417
406
private disablePino : boolean ;
407
+ private _env : "LOCAL" | "BROWSERBASE" ;
418
408
419
409
protected setActivePage ( page : StagehandPage ) : void {
420
410
this . stagehandPage = page ;
@@ -530,17 +520,26 @@ export class Stagehand {
530
520
this . llmProvider =
531
521
llmProvider || new LLMProvider ( this . logger , this . enableCaching ) ;
532
522
533
- this . intEnv = env ;
534
523
this . apiKey = apiKey ?? process . env . BROWSERBASE_API_KEY ;
535
524
this . projectId = projectId ?? process . env . BROWSERBASE_PROJECT_ID ;
536
525
537
- if ( this . intEnv === "BROWSERBASE" && ! this . apiKey ) {
538
- throw new Error (
539
- 'Stagehand is set to use "BROWSERBASE" but no BROWSERBASE_API_KEY was found. Please set it in your .env or pass it explicitly.'
540
- ) ;
526
+ // Store the environment value
527
+ this . _env = env ?? "BROWSERBASE" ;
528
+
529
+ if ( this . _env === "BROWSERBASE" ) {
530
+ if ( ! this . apiKey ) {
531
+ throw new MissingEnvironmentVariableError (
532
+ "BROWSERBASE_API_KEY" ,
533
+ "Browserbase" ,
534
+ ) ;
535
+ } else if ( ! this . projectId ) {
536
+ throw new MissingEnvironmentVariableError (
537
+ "BROWSERBASE_PROJECT_ID" ,
538
+ "Browserbase" ,
539
+ ) ;
540
+ }
541
541
}
542
542
543
-
544
543
this . verbose = verbose ?? 0 ;
545
544
// Update logger verbosity level
546
545
this . stagehandLogger . setVerbosity ( this . verbose ) ;
@@ -623,10 +622,22 @@ export class Stagehand {
623
622
}
624
623
625
624
public get env ( ) : "LOCAL" | "BROWSERBASE" {
626
- if ( this . intEnv === "BROWSERBASE" && this . apiKey && this . projectId ) {
625
+ if ( this . _env === "BROWSERBASE" ) {
626
+ if ( ! this . apiKey ) {
627
+ throw new MissingEnvironmentVariableError (
628
+ "BROWSERBASE_API_KEY" ,
629
+ "Browserbase" ,
630
+ ) ;
631
+ } else if ( ! this . projectId ) {
632
+ throw new MissingEnvironmentVariableError (
633
+ "BROWSERBASE_PROJECT_ID" ,
634
+ "Browserbase" ,
635
+ ) ;
636
+ }
627
637
return "BROWSERBASE" ;
638
+ } else {
639
+ return "LOCAL" ;
628
640
}
629
- return "LOCAL" ;
630
641
}
631
642
632
643
public get context ( ) : EnhancedContext {
@@ -671,7 +682,7 @@ export class Stagehand {
671
682
this . browserbaseSessionID = sessionId ;
672
683
}
673
684
674
- const { context, debugUrl, sessionUrl, contextPath, sessionId, env } =
685
+ const { context, debugUrl, sessionUrl, contextPath, sessionId } =
675
686
await getBrowser (
676
687
this . apiKey ,
677
688
this . projectId ,
@@ -692,7 +703,6 @@ export class Stagehand {
692
703
} ;
693
704
return br ;
694
705
} ) ;
695
- this . intEnv = env ;
696
706
this . contextPath = contextPath ;
697
707
698
708
this . stagehandContext = await StagehandContext . init ( context , this ) ;
0 commit comments