Skip to content

Commit 87ce5f3

Browse files
feat(api): manual updates
1 parent 2a8b9e7 commit 87ce5f3

7 files changed

Lines changed: 205 additions & 84 deletions

File tree

.stats.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
configured_endpoints: 7
22
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/browserbase%2Fstagehand-3607b588cab78536eb7de9f6acffe8ddda1d34aebe5910c2147421aa6c16bf22.yml
33
openapi_spec_hash: fb507e8d38b4978a5717fbb144197868
4-
config_hash: 2f1ec44e7e07906e07bdc6e075763da9
4+
config_hash: fc6606301b5142487a69d296f154b265

README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,9 @@ require "bundler/setup"
2929
require "stagehand"
3030

3131
stagehand = Stagehand::Client.new(
32-
api_key: ENV["STAGEHAND_API_KEY"], # This is the default and can be omitted
33-
environment: "dev" # or "production" | "local"; defaults to "production"
32+
browserbase_api_key: ENV["BROWSERBASE_API_KEY"], # This is the default and can be omitted
33+
browserbase_project_id: ENV["BROWSERBASE_PROJECT_ID"], # This is the default and can be omitted
34+
model_api_key: ENV["MODEL_API_KEY"] # This is the default and can be omitted
3435
)
3536

3637
response = stagehand.sessions.act("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", input: "click the first link on the page")

lib/stagehand/client.rb

Lines changed: 42 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,14 @@ class Client < Stagehand::Internal::Transport::BaseClient
1515
# Default max retry delay in seconds.
1616
DEFAULT_MAX_RETRY_DELAY = 8.0
1717

18-
# rubocop:disable Style/MutableConstant
19-
# @type [Hash{Symbol=>String}]
20-
ENVIRONMENTS =
21-
{
22-
production: "https://api.stagehand.browserbase.com/v1",
23-
dev: "https://api.stagehand.dev.browserbase.com/v1",
24-
local: "http://localhost:5000/v1"
25-
}
26-
# rubocop:enable Style/MutableConstant
18+
# @return [String]
19+
attr_reader :browserbase_api_key
2720

2821
# @return [String]
29-
attr_reader :api_key
22+
attr_reader :browserbase_project_id
23+
24+
# @return [String, nil]
25+
attr_reader :model_api_key
3026

3127
# @return [Stagehand::Resources::Sessions]
3228
attr_reader :sessions
@@ -35,22 +31,37 @@ class Client < Stagehand::Internal::Transport::BaseClient
3531
#
3632
# @return [Hash{String=>String}]
3733
private def auth_headers
38-
return {} if @api_key.nil?
34+
{**bb_api_key_auth, **bb_project_id_auth, **llm_model_api_key_auth}
35+
end
3936

40-
{"authorization" => "Bearer #{@api_key}"}
37+
# @api private
38+
#
39+
# @return [Hash{String=>String}]
40+
private def bb_api_key_auth
41+
{"x-bb-api-key" => @browserbase_api_key}
4142
end
4243

43-
# Creates and returns a new client for interacting with the API.
44+
# @api private
4445
#
45-
# @param api_key [String, nil] Defaults to `ENV["STAGEHAND_API_KEY"]`
46+
# @return [Hash{String=>String}]
47+
private def bb_project_id_auth
48+
{"x-bb-project-id" => @browserbase_project_id}
49+
end
50+
51+
# @api private
4652
#
47-
# @param environment [:production, :dev, :local, nil] Specifies the environment to use for the API.
53+
# @return [Hash{String=>String}]
54+
private def llm_model_api_key_auth
55+
{"x-model-api-key" => @model_api_key}
56+
end
57+
58+
# Creates and returns a new client for interacting with the API.
59+
#
60+
# @param browserbase_api_key [String, nil] Defaults to `ENV["BROWSERBASE_API_KEY"]`
4861
#
49-
# Each environment maps to a different base URL:
62+
# @param browserbase_project_id [String, nil] Defaults to `ENV["BROWSERBASE_PROJECT_ID"]`
5063
#
51-
# - `production` corresponds to `https://api.stagehand.browserbase.com/v1`
52-
# - `dev` corresponds to `https://api.stagehand.dev.browserbase.com/v1`
53-
# - `local` corresponds to `http://localhost:5000/v1`
64+
# @param model_api_key [String, nil] Defaults to `ENV["MODEL_API_KEY"]`
5465
#
5566
# @param base_url [String, nil] Override the default base URL for the API, e.g.,
5667
# `"https://api.example.com/v2/"`. Defaults to `ENV["STAGEHAND_BASE_URL"]`
@@ -63,24 +74,27 @@ class Client < Stagehand::Internal::Transport::BaseClient
6374
#
6475
# @param max_retry_delay [Float]
6576
def initialize(
66-
api_key: ENV["STAGEHAND_API_KEY"],
67-
environment: nil,
77+
browserbase_api_key: ENV["BROWSERBASE_API_KEY"],
78+
browserbase_project_id: ENV["BROWSERBASE_PROJECT_ID"],
79+
model_api_key: ENV["MODEL_API_KEY"],
6880
base_url: ENV["STAGEHAND_BASE_URL"],
6981
max_retries: self.class::DEFAULT_MAX_RETRIES,
7082
timeout: self.class::DEFAULT_TIMEOUT_IN_SECONDS,
7183
initial_retry_delay: self.class::DEFAULT_INITIAL_RETRY_DELAY,
7284
max_retry_delay: self.class::DEFAULT_MAX_RETRY_DELAY
7385
)
74-
base_url ||= Stagehand::Client::ENVIRONMENTS.fetch(environment&.to_sym || :production) do
75-
message = "environment must be one of #{Stagehand::Client::ENVIRONMENTS.keys}, got #{environment}"
76-
raise ArgumentError.new(message)
77-
end
86+
base_url ||= "https://api.stagehand.browserbase.com/v1"
7887

79-
if api_key.nil?
80-
raise ArgumentError.new("api_key is required, and can be set via environ: \"STAGEHAND_API_KEY\"")
88+
if browserbase_api_key.nil?
89+
raise ArgumentError.new("browserbase_api_key is required, and can be set via environ: \"BROWSERBASE_API_KEY\"")
90+
end
91+
if browserbase_project_id.nil?
92+
raise ArgumentError.new("browserbase_project_id is required, and can be set via environ: \"BROWSERBASE_PROJECT_ID\"")
8193
end
8294

83-
@api_key = api_key.to_s
95+
@browserbase_api_key = browserbase_api_key.to_s
96+
@browserbase_project_id = browserbase_project_id.to_s
97+
@model_api_key = model_api_key&.to_s
8498

8599
super(
86100
base_url: base_url,

rbi/stagehand/client.rbi

Lines changed: 30 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,14 @@ module Stagehand
1010

1111
DEFAULT_MAX_RETRY_DELAY = T.let(8.0, Float)
1212

13-
ENVIRONMENTS =
14-
T.let(
15-
{
16-
production: "https://api.stagehand.browserbase.com/v1",
17-
dev: "https://api.stagehand.dev.browserbase.com/v1",
18-
local: "http://localhost:5000/v1"
19-
},
20-
T::Hash[Symbol, String]
21-
)
13+
sig { returns(String) }
14+
attr_reader :browserbase_api_key
2215

2316
sig { returns(String) }
24-
attr_reader :api_key
17+
attr_reader :browserbase_project_id
18+
19+
sig { returns(T.nilable(String)) }
20+
attr_reader :model_api_key
2521

2622
sig { returns(Stagehand::Resources::Sessions) }
2723
attr_reader :sessions
@@ -31,11 +27,27 @@ module Stagehand
3127
private def auth_headers
3228
end
3329

30+
# @api private
31+
sig { returns(T::Hash[String, String]) }
32+
private def bb_api_key_auth
33+
end
34+
35+
# @api private
36+
sig { returns(T::Hash[String, String]) }
37+
private def bb_project_id_auth
38+
end
39+
40+
# @api private
41+
sig { returns(T::Hash[String, String]) }
42+
private def llm_model_api_key_auth
43+
end
44+
3445
# Creates and returns a new client for interacting with the API.
3546
sig do
3647
params(
37-
api_key: T.nilable(String),
38-
environment: T.nilable(T.any(Symbol, String)),
48+
browserbase_api_key: T.nilable(String),
49+
browserbase_project_id: T.nilable(String),
50+
model_api_key: T.nilable(String),
3951
base_url: T.nilable(String),
4052
max_retries: Integer,
4153
timeout: Float,
@@ -44,16 +56,12 @@ module Stagehand
4456
).returns(T.attached_class)
4557
end
4658
def self.new(
47-
# Defaults to `ENV["STAGEHAND_API_KEY"]`
48-
api_key: ENV["STAGEHAND_API_KEY"],
49-
# Specifies the environment to use for the API.
50-
#
51-
# Each environment maps to a different base URL:
52-
#
53-
# - `production` corresponds to `https://api.stagehand.browserbase.com/v1`
54-
# - `dev` corresponds to `https://api.stagehand.dev.browserbase.com/v1`
55-
# - `local` corresponds to `http://localhost:5000/v1`
56-
environment: nil,
59+
# Defaults to `ENV["BROWSERBASE_API_KEY"]`
60+
browserbase_api_key: ENV["BROWSERBASE_API_KEY"],
61+
# Defaults to `ENV["BROWSERBASE_PROJECT_ID"]`
62+
browserbase_project_id: ENV["BROWSERBASE_PROJECT_ID"],
63+
# Defaults to `ENV["MODEL_API_KEY"]`
64+
model_api_key: ENV["MODEL_API_KEY"],
5765
# Override the default base URL for the API, e.g.,
5866
# `"https://api.example.com/v2/"`. Defaults to `ENV["STAGEHAND_BASE_URL"]`
5967
base_url: ENV["STAGEHAND_BASE_URL"],

sig/stagehand/client.rbs

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,26 @@ module Stagehand
88

99
DEFAULT_MAX_RETRY_DELAY: Float
1010

11-
ENVIRONMENTS: {
12-
production: "https://api.stagehand.browserbase.com/v1",
13-
dev: "https://api.stagehand.dev.browserbase.com/v1",
14-
local: "http://localhost:5000/v1"
15-
}
11+
attr_reader browserbase_api_key: String
1612

17-
attr_reader api_key: String
13+
attr_reader browserbase_project_id: String
14+
15+
attr_reader model_api_key: String?
1816

1917
attr_reader sessions: Stagehand::Resources::Sessions
2018

2119
private def auth_headers: -> ::Hash[String, String]
2220

21+
private def bb_api_key_auth: -> ::Hash[String, String]
22+
23+
private def bb_project_id_auth: -> ::Hash[String, String]
24+
25+
private def llm_model_api_key_auth: -> ::Hash[String, String]
26+
2327
def initialize: (
24-
?api_key: String?,
25-
?environment: :production | :dev | :local | nil,
28+
?browserbase_api_key: String?,
29+
?browserbase_project_id: String?,
30+
?model_api_key: String?,
2631
?base_url: String?,
2732
?max_retries: Integer,
2833
?timeout: Float,

0 commit comments

Comments
 (0)