Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "3.19.3"
".": "3.20.0"
}
4 changes: 2 additions & 2 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 8
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/browserbase%2Fstagehand-b969ce378479c79ee64c05127c0ed6c6ce2edbee017ecd037242fb618a5ebc9f.yml
openapi_spec_hash: a24aabaa5214effb679808b7f2be0ad4
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/browserbase%2Fstagehand-1c6caa2891a7f3bdfc0caab143f285badc9145220c9b29cd5e4cf1a9b3ac11cf.yml
openapi_spec_hash: 28c4b734a5309067c39bb4c4b709b9ab
config_hash: a962ae71493deb11a1c903256fb25386
15 changes: 15 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,20 @@
# Changelog

## 3.20.0 (2026-04-09)

Full Changelog: [v3.19.3...v3.20.0](https://github.com/browserbase/stagehand-ruby/compare/v3.19.3...v3.20.0)

### Features

* [STG-1798] feat: support Browserbase verified sessions ([9647eb3](https://github.com/browserbase/stagehand-ruby/commit/9647eb3a4df86cc9d7aedb2f0a9ddd0babd39565))
* Bedrock auth passthrough ([5cb6ecb](https://github.com/browserbase/stagehand-ruby/commit/5cb6ecbe621e894dc6c5aec379fdca1183eec4fc))
* Revert "[STG-1573] Add providerOptions for extensible model auth ([#1822](https://github.com/browserbase/stagehand-ruby/issues/1822))" ([0c83a09](https://github.com/browserbase/stagehand-ruby/commit/0c83a0978116f8fc11a4edf78586f3d61b8af5e8))


### Bug Fixes

* multipart encoding for file arrays ([149b303](https://github.com/browserbase/stagehand-ruby/commit/149b303eb54f4c9af037a5e073a2d6c92d959b44))

## 3.19.3 (2026-04-03)

Full Changelog: [v3.18.0...v3.19.3](https://github.com/browserbase/stagehand-ruby/compare/v3.18.0...v3.19.3)
Expand Down
2 changes: 1 addition & 1 deletion Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ GIT
PATH
remote: .
specs:
stagehand (3.19.3)
stagehand (3.20.0)
cgi
connection_pool

Expand Down
4 changes: 3 additions & 1 deletion lib/stagehand/internal/util.rb
Original file line number Diff line number Diff line change
Expand Up @@ -610,6 +610,7 @@ def encode_query_params(query)
#
# @return [Array(String, Enumerable<String>)]
private def encode_multipart_streaming(body)
# rubocop:disable Style/CaseEquality
# RFC 1521 Section 7.2.1 says we should have 70 char maximum for boundary length
boundary = SecureRandom.urlsafe_base64(46)

Expand All @@ -619,7 +620,7 @@ def encode_query_params(query)
in Hash
body.each do |key, val|
case val
in Array if val.all? { primitive?(_1) }
in Array if val.all? { primitive?(_1) || Stagehand::Internal::Type::FileInput === _1 }
val.each do |v|
write_multipart_chunk(y, boundary: boundary, key: key, val: v, closing: closing)
end
Expand All @@ -635,6 +636,7 @@ def encode_query_params(query)

fused_io = fused_enum(strio) { closing.each(&:call) }
[boundary, fused_io]
# rubocop:enable Style/CaseEquality
end

# @api private
Expand Down
41 changes: 40 additions & 1 deletion lib/stagehand/models/session_start_params.rb
Original file line number Diff line number Diff line change
Expand Up @@ -401,6 +401,16 @@ class BrowserSettings < Stagehand::Internal::Type::BaseModel
# @return [Boolean, nil]
optional :block_ads, Stagehand::Internal::Type::Boolean, api_name: :blockAds

# @!attribute captcha_image_selector
#
# @return [String, nil]
optional :captcha_image_selector, String, api_name: :captchaImageSelector

# @!attribute captcha_input_selector
#
# @return [String, nil]
optional :captcha_input_selector, String, api_name: :captchaInputSelector

# @!attribute context
#
# @return [Stagehand::Models::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Context, nil]
Expand All @@ -423,6 +433,12 @@ class BrowserSettings < Stagehand::Internal::Type::BaseModel
# @return [Boolean, nil]
optional :log_session, Stagehand::Internal::Type::Boolean, api_name: :logSession

# @!attribute os
#
# @return [Symbol, Stagehand::Models::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Os, nil]
optional :os,
enum: -> { Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Os }

# @!attribute record_session
#
# @return [Boolean, nil]
Expand All @@ -433,21 +449,30 @@ class BrowserSettings < Stagehand::Internal::Type::BaseModel
# @return [Boolean, nil]
optional :solve_captchas, Stagehand::Internal::Type::Boolean, api_name: :solveCaptchas

# @!attribute verified
#
# @return [Boolean, nil]
optional :verified, Stagehand::Internal::Type::Boolean

# @!attribute viewport
#
# @return [Stagehand::Models::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Viewport, nil]
optional :viewport,
-> { Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Viewport }

# @!method initialize(advanced_stealth: nil, block_ads: nil, context: nil, extension_id: nil, fingerprint: nil, log_session: nil, record_session: nil, solve_captchas: nil, viewport: nil)
# @!method initialize(advanced_stealth: nil, block_ads: nil, captcha_image_selector: nil, captcha_input_selector: nil, context: nil, extension_id: nil, fingerprint: nil, log_session: nil, os: nil, record_session: nil, solve_captchas: nil, verified: nil, viewport: nil)
# @param advanced_stealth [Boolean]
# @param block_ads [Boolean]
# @param captcha_image_selector [String]
# @param captcha_input_selector [String]
# @param context [Stagehand::Models::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Context]
# @param extension_id [String]
# @param fingerprint [Stagehand::Models::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Fingerprint]
# @param log_session [Boolean]
# @param os [Symbol, Stagehand::Models::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Os]
# @param record_session [Boolean]
# @param solve_captchas [Boolean]
# @param verified [Boolean]
# @param viewport [Stagehand::Models::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Viewport]

# @see Stagehand::Models::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings#context
Expand Down Expand Up @@ -596,6 +621,20 @@ class Screen < Stagehand::Internal::Type::BaseModel
end
end

# @see Stagehand::Models::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings#os
module Os
extend Stagehand::Internal::Type::Enum

WINDOWS = :windows
MAC = :mac
LINUX = :linux
MOBILE = :mobile
TABLET = :tablet

# @!method self.values
# @return [Array<Symbol>]
end

# @see Stagehand::Models::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings#viewport
class Viewport < Stagehand::Internal::Type::BaseModel
# @!attribute height
Expand Down
2 changes: 1 addition & 1 deletion lib/stagehand/version.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# frozen_string_literal: true

module Stagehand
VERSION = "3.19.3"
VERSION = "3.20.0"
end
98 changes: 98 additions & 0 deletions rbi/stagehand/models/session_start_params.rbi
Original file line number Diff line number Diff line change
Expand Up @@ -800,6 +800,18 @@ module Stagehand
sig { params(block_ads: T::Boolean).void }
attr_writer :block_ads

sig { returns(T.nilable(String)) }
attr_reader :captcha_image_selector

sig { params(captcha_image_selector: String).void }
attr_writer :captcha_image_selector

sig { returns(T.nilable(String)) }
attr_reader :captcha_input_selector

sig { params(captcha_input_selector: String).void }
attr_writer :captcha_input_selector

sig do
returns(
T.nilable(
Expand Down Expand Up @@ -846,6 +858,23 @@ module Stagehand
sig { params(log_session: T::Boolean).void }
attr_writer :log_session

sig do
returns(
T.nilable(
Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Os::OrSymbol
)
)
end
attr_reader :os

sig do
params(
os:
Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Os::OrSymbol
).void
end
attr_writer :os

sig { returns(T.nilable(T::Boolean)) }
attr_reader :record_session

Expand All @@ -858,6 +887,12 @@ module Stagehand
sig { params(solve_captchas: T::Boolean).void }
attr_writer :solve_captchas

sig { returns(T.nilable(T::Boolean)) }
attr_reader :verified

sig { params(verified: T::Boolean).void }
attr_writer :verified

sig do
returns(
T.nilable(
Expand All @@ -879,27 +914,36 @@ module Stagehand
params(
advanced_stealth: T::Boolean,
block_ads: T::Boolean,
captcha_image_selector: String,
captcha_input_selector: String,
context:
Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Context::OrHash,
extension_id: String,
fingerprint:
Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Fingerprint::OrHash,
log_session: T::Boolean,
os:
Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Os::OrSymbol,
record_session: T::Boolean,
solve_captchas: T::Boolean,
verified: T::Boolean,
viewport:
Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Viewport::OrHash
).returns(T.attached_class)
end
def self.new(
advanced_stealth: nil,
block_ads: nil,
captcha_image_selector: nil,
captcha_input_selector: nil,
context: nil,
extension_id: nil,
fingerprint: nil,
log_session: nil,
os: nil,
record_session: nil,
solve_captchas: nil,
verified: nil,
viewport: nil
)
end
Expand All @@ -909,14 +953,19 @@ module Stagehand
{
advanced_stealth: T::Boolean,
block_ads: T::Boolean,
captcha_image_selector: String,
captcha_input_selector: String,
context:
Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Context,
extension_id: String,
fingerprint:
Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Fingerprint,
log_session: T::Boolean,
os:
Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Os::OrSymbol,
record_session: T::Boolean,
solve_captchas: T::Boolean,
verified: T::Boolean,
viewport:
Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Viewport
}
Expand Down Expand Up @@ -1348,6 +1397,55 @@ module Stagehand
end
end

module Os
extend Stagehand::Internal::Type::Enum

TaggedSymbol =
T.type_alias do
T.all(
Symbol,
Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Os
)
end
OrSymbol = T.type_alias { T.any(Symbol, String) }

WINDOWS =
T.let(
:windows,
Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Os::TaggedSymbol
)
MAC =
T.let(
:mac,
Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Os::TaggedSymbol
)
LINUX =
T.let(
:linux,
Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Os::TaggedSymbol
)
MOBILE =
T.let(
:mobile,
Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Os::TaggedSymbol
)
TABLET =
T.let(
:tablet,
Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Os::TaggedSymbol
)

sig do
override.returns(
T::Array[
Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::BrowserSettings::Os::TaggedSymbol
]
)
end
def self.values
end
end

class Viewport < Stagehand::Internal::Type::BaseModel
OrHash =
T.type_alias do
Expand Down
Loading