diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 911c623..d11c8fc 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "3.19.3" + ".": "3.20.0" } \ No newline at end of file diff --git a/.stats.yml b/.stats.yml index ac9e78a..d8428d4 100644 --- a/.stats.yml +++ b/.stats.yml @@ -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 diff --git a/CHANGELOG.md b/CHANGELOG.md index 0c3ce73..c9dd528 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Changelog +## 3.20.0 (2026-04-09) + +Full Changelog: [v3.19.3...v3.20.0](https://github.com/browserbase/stagehand-java/compare/v3.19.3...v3.20.0) + +### Features + +* [STG-1798] feat: support Browserbase verified sessions ([59ee151](https://github.com/browserbase/stagehand-java/commit/59ee1516eb17d6b8474b12d2722ff4627fa2557c)) +* Bedrock auth passthrough ([7d5037a](https://github.com/browserbase/stagehand-java/commit/7d5037abacedbee829f0fe238565ed81c211eba9)) +* Revert "[STG-1573] Add providerOptions for extensible model auth ([#1822](https://github.com/browserbase/stagehand-java/issues/1822))" ([c337e61](https://github.com/browserbase/stagehand-java/commit/c337e61dd9b2cc366bceec0e7119874acdc3b069)) + ## 3.19.3 (2026-04-03) Full Changelog: [v3.18.0...v3.19.3](https://github.com/browserbase/stagehand-java/compare/v3.18.0...v3.19.3) diff --git a/README.md b/README.md index 7179a61..5a108ce 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,8 @@ -[![Maven Central](https://img.shields.io/maven-central/v/com.browserbase.api/stagehand-java)](https://central.sonatype.com/artifact/com.browserbase.api/stagehand-java/3.19.3) -[![javadoc](https://javadoc.io/badge2/com.browserbase.api/stagehand-java/3.19.3/javadoc.svg)](https://javadoc.io/doc/com.browserbase.api/stagehand-java/3.19.3) +[![Maven Central](https://img.shields.io/maven-central/v/com.browserbase.api/stagehand-java)](https://central.sonatype.com/artifact/com.browserbase.api/stagehand-java/3.20.0) +[![javadoc](https://javadoc.io/badge2/com.browserbase.api/stagehand-java/3.20.0/javadoc.svg)](https://javadoc.io/doc/com.browserbase.api/stagehand-java/3.20.0) @@ -85,7 +85,7 @@ Most existing browser automation tools either require you to write low-level cod ### Gradle ```kotlin -implementation("com.browserbase.api:stagehand-java:3.19.3") +implementation("com.browserbase.api:stagehand-java:3.20.0") ``` ### Maven @@ -94,7 +94,7 @@ implementation("com.browserbase.api:stagehand-java:3.19.3") com.browserbase.api stagehand-java - 3.19.3 + 3.20.0 ``` diff --git a/build.gradle.kts b/build.gradle.kts index 7d91da7..2fc0dbb 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -8,7 +8,7 @@ repositories { allprojects { group = "com.browserbase.api" - version = "3.19.3" // x-release-please-version + version = "3.20.0" // x-release-please-version } subprojects { diff --git a/stagehand-java-core/src/main/kotlin/com/browserbase/api/models/sessions/SessionStartParams.kt b/stagehand-java-core/src/main/kotlin/com/browserbase/api/models/sessions/SessionStartParams.kt index 5e09071..994401f 100644 --- a/stagehand-java-core/src/main/kotlin/com/browserbase/api/models/sessions/SessionStartParams.kt +++ b/stagehand-java-core/src/main/kotlin/com/browserbase/api/models/sessions/SessionStartParams.kt @@ -3614,12 +3614,16 @@ private constructor( private constructor( private val advancedStealth: JsonField, private val blockAds: JsonField, + private val captchaImageSelector: JsonField, + private val captchaInputSelector: JsonField, private val context: JsonField, private val extensionId: JsonField, private val fingerprint: JsonField, private val logSession: JsonField, + private val os: JsonField, private val recordSession: JsonField, private val solveCaptchas: JsonField, + private val verified: JsonField, private val viewport: JsonField, private val additionalProperties: MutableMap, ) { @@ -3632,6 +3636,12 @@ private constructor( @JsonProperty("blockAds") @ExcludeMissing blockAds: JsonField = JsonMissing.of(), + @JsonProperty("captchaImageSelector") + @ExcludeMissing + captchaImageSelector: JsonField = JsonMissing.of(), + @JsonProperty("captchaInputSelector") + @ExcludeMissing + captchaInputSelector: JsonField = JsonMissing.of(), @JsonProperty("context") @ExcludeMissing context: JsonField = JsonMissing.of(), @@ -3644,24 +3654,32 @@ private constructor( @JsonProperty("logSession") @ExcludeMissing logSession: JsonField = JsonMissing.of(), + @JsonProperty("os") @ExcludeMissing os: JsonField = JsonMissing.of(), @JsonProperty("recordSession") @ExcludeMissing recordSession: JsonField = JsonMissing.of(), @JsonProperty("solveCaptchas") @ExcludeMissing solveCaptchas: JsonField = JsonMissing.of(), + @JsonProperty("verified") + @ExcludeMissing + verified: JsonField = JsonMissing.of(), @JsonProperty("viewport") @ExcludeMissing viewport: JsonField = JsonMissing.of(), ) : this( advancedStealth, blockAds, + captchaImageSelector, + captchaInputSelector, context, extensionId, fingerprint, logSession, + os, recordSession, solveCaptchas, + verified, viewport, mutableMapOf(), ) @@ -3679,6 +3697,20 @@ private constructor( */ fun blockAds(): Optional = blockAds.getOptional("blockAds") + /** + * @throws StagehandInvalidDataException if the JSON field has an unexpected type (e.g. + * if the server responded with an unexpected value). + */ + fun captchaImageSelector(): Optional = + captchaImageSelector.getOptional("captchaImageSelector") + + /** + * @throws StagehandInvalidDataException if the JSON field has an unexpected type (e.g. + * if the server responded with an unexpected value). + */ + fun captchaInputSelector(): Optional = + captchaInputSelector.getOptional("captchaInputSelector") + /** * @throws StagehandInvalidDataException if the JSON field has an unexpected type (e.g. * if the server responded with an unexpected value). @@ -3703,6 +3735,12 @@ private constructor( */ fun logSession(): Optional = logSession.getOptional("logSession") + /** + * @throws StagehandInvalidDataException if the JSON field has an unexpected type (e.g. + * if the server responded with an unexpected value). + */ + fun os(): Optional = os.getOptional("os") + /** * @throws StagehandInvalidDataException if the JSON field has an unexpected type (e.g. * if the server responded with an unexpected value). @@ -3715,6 +3753,12 @@ private constructor( */ fun solveCaptchas(): Optional = solveCaptchas.getOptional("solveCaptchas") + /** + * @throws StagehandInvalidDataException if the JSON field has an unexpected type (e.g. + * if the server responded with an unexpected value). + */ + fun verified(): Optional = verified.getOptional("verified") + /** * @throws StagehandInvalidDataException if the JSON field has an unexpected type (e.g. * if the server responded with an unexpected value). @@ -3739,6 +3783,26 @@ private constructor( */ @JsonProperty("blockAds") @ExcludeMissing fun _blockAds(): JsonField = blockAds + /** + * Returns the raw JSON value of [captchaImageSelector]. + * + * Unlike [captchaImageSelector], this method doesn't throw if the JSON field has an + * unexpected type. + */ + @JsonProperty("captchaImageSelector") + @ExcludeMissing + fun _captchaImageSelector(): JsonField = captchaImageSelector + + /** + * Returns the raw JSON value of [captchaInputSelector]. + * + * Unlike [captchaInputSelector], this method doesn't throw if the JSON field has an + * unexpected type. + */ + @JsonProperty("captchaInputSelector") + @ExcludeMissing + fun _captchaInputSelector(): JsonField = captchaInputSelector + /** * Returns the raw JSON value of [context]. * @@ -3776,6 +3840,13 @@ private constructor( @ExcludeMissing fun _logSession(): JsonField = logSession + /** + * Returns the raw JSON value of [os]. + * + * Unlike [os], this method doesn't throw if the JSON field has an unexpected type. + */ + @JsonProperty("os") @ExcludeMissing fun _os(): JsonField = os + /** * Returns the raw JSON value of [recordSession]. * @@ -3796,6 +3867,14 @@ private constructor( @ExcludeMissing fun _solveCaptchas(): JsonField = solveCaptchas + /** + * Returns the raw JSON value of [verified]. + * + * Unlike [verified], this method doesn't throw if the JSON field has an unexpected + * type. + */ + @JsonProperty("verified") @ExcludeMissing fun _verified(): JsonField = verified + /** * Returns the raw JSON value of [viewport]. * @@ -3829,12 +3908,16 @@ private constructor( private var advancedStealth: JsonField = JsonMissing.of() private var blockAds: JsonField = JsonMissing.of() + private var captchaImageSelector: JsonField = JsonMissing.of() + private var captchaInputSelector: JsonField = JsonMissing.of() private var context: JsonField = JsonMissing.of() private var extensionId: JsonField = JsonMissing.of() private var fingerprint: JsonField = JsonMissing.of() private var logSession: JsonField = JsonMissing.of() + private var os: JsonField = JsonMissing.of() private var recordSession: JsonField = JsonMissing.of() private var solveCaptchas: JsonField = JsonMissing.of() + private var verified: JsonField = JsonMissing.of() private var viewport: JsonField = JsonMissing.of() private var additionalProperties: MutableMap = mutableMapOf() @@ -3842,12 +3925,16 @@ private constructor( internal fun from(browserSettings: BrowserSettings) = apply { advancedStealth = browserSettings.advancedStealth blockAds = browserSettings.blockAds + captchaImageSelector = browserSettings.captchaImageSelector + captchaInputSelector = browserSettings.captchaInputSelector context = browserSettings.context extensionId = browserSettings.extensionId fingerprint = browserSettings.fingerprint logSession = browserSettings.logSession + os = browserSettings.os recordSession = browserSettings.recordSession solveCaptchas = browserSettings.solveCaptchas + verified = browserSettings.verified viewport = browserSettings.viewport additionalProperties = browserSettings.additionalProperties.toMutableMap() } @@ -3877,6 +3964,34 @@ private constructor( */ fun blockAds(blockAds: JsonField) = apply { this.blockAds = blockAds } + fun captchaImageSelector(captchaImageSelector: String) = + captchaImageSelector(JsonField.of(captchaImageSelector)) + + /** + * Sets [Builder.captchaImageSelector] to an arbitrary JSON value. + * + * You should usually call [Builder.captchaImageSelector] with a well-typed [String] + * value instead. This method is primarily for setting the field to an undocumented + * or not yet supported value. + */ + fun captchaImageSelector(captchaImageSelector: JsonField) = apply { + this.captchaImageSelector = captchaImageSelector + } + + fun captchaInputSelector(captchaInputSelector: String) = + captchaInputSelector(JsonField.of(captchaInputSelector)) + + /** + * Sets [Builder.captchaInputSelector] to an arbitrary JSON value. + * + * You should usually call [Builder.captchaInputSelector] with a well-typed [String] + * value instead. This method is primarily for setting the field to an undocumented + * or not yet supported value. + */ + fun captchaInputSelector(captchaInputSelector: JsonField) = apply { + this.captchaInputSelector = captchaInputSelector + } + fun context(context: Context) = context(JsonField.of(context)) /** @@ -3927,6 +4042,17 @@ private constructor( this.logSession = logSession } + fun os(os: Os) = os(JsonField.of(os)) + + /** + * Sets [Builder.os] to an arbitrary JSON value. + * + * You should usually call [Builder.os] with a well-typed [Os] value instead. This + * method is primarily for setting the field to an undocumented or not yet supported + * value. + */ + fun os(os: JsonField) = apply { this.os = os } + fun recordSession(recordSession: Boolean) = recordSession(JsonField.of(recordSession)) @@ -3955,6 +4081,17 @@ private constructor( this.solveCaptchas = solveCaptchas } + fun verified(verified: Boolean) = verified(JsonField.of(verified)) + + /** + * Sets [Builder.verified] to an arbitrary JSON value. + * + * You should usually call [Builder.verified] with a well-typed [Boolean] value + * instead. This method is primarily for setting the field to an undocumented or not + * yet supported value. + */ + fun verified(verified: JsonField) = apply { this.verified = verified } + fun viewport(viewport: Viewport) = viewport(JsonField.of(viewport)) /** @@ -3997,12 +4134,16 @@ private constructor( BrowserSettings( advancedStealth, blockAds, + captchaImageSelector, + captchaInputSelector, context, extensionId, fingerprint, logSession, + os, recordSession, solveCaptchas, + verified, viewport, additionalProperties.toMutableMap(), ) @@ -4017,12 +4158,16 @@ private constructor( advancedStealth() blockAds() + captchaImageSelector() + captchaInputSelector() context().ifPresent { it.validate() } extensionId() fingerprint().ifPresent { it.validate() } logSession() + os().ifPresent { it.validate() } recordSession() solveCaptchas() + verified() viewport().ifPresent { it.validate() } validated = true } @@ -4045,12 +4190,16 @@ private constructor( internal fun validity(): Int = (if (advancedStealth.asKnown().isPresent) 1 else 0) + (if (blockAds.asKnown().isPresent) 1 else 0) + + (if (captchaImageSelector.asKnown().isPresent) 1 else 0) + + (if (captchaInputSelector.asKnown().isPresent) 1 else 0) + (context.asKnown().getOrNull()?.validity() ?: 0) + (if (extensionId.asKnown().isPresent) 1 else 0) + (fingerprint.asKnown().getOrNull()?.validity() ?: 0) + (if (logSession.asKnown().isPresent) 1 else 0) + + (os.asKnown().getOrNull()?.validity() ?: 0) + (if (recordSession.asKnown().isPresent) 1 else 0) + (if (solveCaptchas.asKnown().isPresent) 1 else 0) + + (if (verified.asKnown().isPresent) 1 else 0) + (viewport.asKnown().getOrNull()?.validity() ?: 0) class Context @@ -5518,6 +5667,153 @@ private constructor( "Fingerprint{browsers=$browsers, devices=$devices, httpVersion=$httpVersion, locales=$locales, operatingSystems=$operatingSystems, screen=$screen, additionalProperties=$additionalProperties}" } + class Os @JsonCreator private constructor(private val value: JsonField) : Enum { + + /** + * Returns this class instance's raw value. + * + * This is usually only useful if this instance was deserialized from data that + * doesn't match any known member, and you want to know that value. For example, if + * the SDK is on an older version than the API, then the API may respond with new + * members that the SDK is unaware of. + */ + @com.fasterxml.jackson.annotation.JsonValue fun _value(): JsonField = value + + companion object { + + @JvmField val WINDOWS = of("windows") + + @JvmField val MAC = of("mac") + + @JvmField val LINUX = of("linux") + + @JvmField val MOBILE = of("mobile") + + @JvmField val TABLET = of("tablet") + + @JvmStatic fun of(value: String) = Os(JsonField.of(value)) + } + + /** An enum containing [Os]'s known values. */ + enum class Known { + WINDOWS, + MAC, + LINUX, + MOBILE, + TABLET, + } + + /** + * An enum containing [Os]'s known values, as well as an [_UNKNOWN] member. + * + * An instance of [Os] can contain an unknown value in a couple of cases: + * - It was deserialized from data that doesn't match any known member. For example, + * if the SDK is on an older version than the API, then the API may respond with + * new members that the SDK is unaware of. + * - It was constructed with an arbitrary value using the [of] method. + */ + enum class Value { + WINDOWS, + MAC, + LINUX, + MOBILE, + TABLET, + /** + * An enum member indicating that [Os] was instantiated with an unknown value. + */ + _UNKNOWN, + } + + /** + * Returns an enum member corresponding to this class instance's value, or + * [Value._UNKNOWN] if the class was instantiated with an unknown value. + * + * Use the [known] method instead if you're certain the value is always known or if + * you want to throw for the unknown case. + */ + fun value(): Value = + when (this) { + WINDOWS -> Value.WINDOWS + MAC -> Value.MAC + LINUX -> Value.LINUX + MOBILE -> Value.MOBILE + TABLET -> Value.TABLET + else -> Value._UNKNOWN + } + + /** + * Returns an enum member corresponding to this class instance's value. + * + * Use the [value] method instead if you're uncertain the value is always known and + * don't want to throw for the unknown case. + * + * @throws StagehandInvalidDataException if this class instance's value is a not a + * known member. + */ + fun known(): Known = + when (this) { + WINDOWS -> Known.WINDOWS + MAC -> Known.MAC + LINUX -> Known.LINUX + MOBILE -> Known.MOBILE + TABLET -> Known.TABLET + else -> throw StagehandInvalidDataException("Unknown Os: $value") + } + + /** + * Returns this class instance's primitive wire representation. + * + * This differs from the [toString] method because that method is primarily for + * debugging and generally doesn't throw. + * + * @throws StagehandInvalidDataException if this class instance's value does not + * have the expected primitive type. + */ + fun asString(): String = + _value().asString().orElseThrow { + StagehandInvalidDataException("Value is not a String") + } + + private var validated: Boolean = false + + fun validate(): Os = apply { + if (validated) { + return@apply + } + + known() + validated = true + } + + fun isValid(): Boolean = + try { + validate() + true + } catch (e: StagehandInvalidDataException) { + false + } + + /** + * Returns a score indicating how many valid values are contained in this object + * recursively. + * + * Used for best match union deserialization. + */ + @JvmSynthetic internal fun validity(): Int = if (value() == Value._UNKNOWN) 0 else 1 + + override fun equals(other: Any?): Boolean { + if (this === other) { + return true + } + + return other is Os && value == other.value + } + + override fun hashCode() = value.hashCode() + + override fun toString() = value.toString() + } + class Viewport @JsonCreator(mode = JsonCreator.Mode.DISABLED) private constructor( @@ -5709,12 +6005,16 @@ private constructor( return other is BrowserSettings && advancedStealth == other.advancedStealth && blockAds == other.blockAds && + captchaImageSelector == other.captchaImageSelector && + captchaInputSelector == other.captchaInputSelector && context == other.context && extensionId == other.extensionId && fingerprint == other.fingerprint && logSession == other.logSession && + os == other.os && recordSession == other.recordSession && solveCaptchas == other.solveCaptchas && + verified == other.verified && viewport == other.viewport && additionalProperties == other.additionalProperties } @@ -5723,12 +6023,16 @@ private constructor( Objects.hash( advancedStealth, blockAds, + captchaImageSelector, + captchaInputSelector, context, extensionId, fingerprint, logSession, + os, recordSession, solveCaptchas, + verified, viewport, additionalProperties, ) @@ -5737,7 +6041,7 @@ private constructor( override fun hashCode(): Int = hashCode override fun toString() = - "BrowserSettings{advancedStealth=$advancedStealth, blockAds=$blockAds, context=$context, extensionId=$extensionId, fingerprint=$fingerprint, logSession=$logSession, recordSession=$recordSession, solveCaptchas=$solveCaptchas, viewport=$viewport, additionalProperties=$additionalProperties}" + "BrowserSettings{advancedStealth=$advancedStealth, blockAds=$blockAds, captchaImageSelector=$captchaImageSelector, captchaInputSelector=$captchaInputSelector, context=$context, extensionId=$extensionId, fingerprint=$fingerprint, logSession=$logSession, os=$os, recordSession=$recordSession, solveCaptchas=$solveCaptchas, verified=$verified, viewport=$viewport, additionalProperties=$additionalProperties}" } @JsonDeserialize(using = Proxies.Deserializer::class) diff --git a/stagehand-java-core/src/test/kotlin/com/browserbase/api/models/sessions/SessionStartParamsTest.kt b/stagehand-java-core/src/test/kotlin/com/browserbase/api/models/sessions/SessionStartParamsTest.kt index 7ebe44e..0a8dffc 100644 --- a/stagehand-java-core/src/test/kotlin/com/browserbase/api/models/sessions/SessionStartParamsTest.kt +++ b/stagehand-java-core/src/test/kotlin/com/browserbase/api/models/sessions/SessionStartParamsTest.kt @@ -67,6 +67,8 @@ internal class SessionStartParamsTest { SessionStartParams.BrowserbaseSessionCreateParams.BrowserSettings.builder() .advancedStealth(true) .blockAds(true) + .captchaImageSelector("captchaImageSelector") + .captchaInputSelector("captchaInputSelector") .context( SessionStartParams.BrowserbaseSessionCreateParams.BrowserSettings .Context @@ -124,8 +126,13 @@ internal class SessionStartParamsTest { .build() ) .logSession(true) + .os( + SessionStartParams.BrowserbaseSessionCreateParams.BrowserSettings.Os + .WINDOWS + ) .recordSession(true) .solveCaptchas(true) + .verified(true) .viewport( SessionStartParams.BrowserbaseSessionCreateParams.BrowserSettings .Viewport @@ -219,6 +226,8 @@ internal class SessionStartParamsTest { .builder() .advancedStealth(true) .blockAds(true) + .captchaImageSelector("captchaImageSelector") + .captchaInputSelector("captchaInputSelector") .context( SessionStartParams.BrowserbaseSessionCreateParams .BrowserSettings @@ -278,8 +287,15 @@ internal class SessionStartParamsTest { .build() ) .logSession(true) + .os( + SessionStartParams.BrowserbaseSessionCreateParams + .BrowserSettings + .Os + .WINDOWS + ) .recordSession(true) .solveCaptchas(true) + .verified(true) .viewport( SessionStartParams.BrowserbaseSessionCreateParams .BrowserSettings @@ -387,6 +403,8 @@ internal class SessionStartParamsTest { .builder() .advancedStealth(true) .blockAds(true) + .captchaImageSelector("captchaImageSelector") + .captchaInputSelector("captchaInputSelector") .context( SessionStartParams.BrowserbaseSessionCreateParams .BrowserSettings @@ -446,8 +464,15 @@ internal class SessionStartParamsTest { .build() ) .logSession(true) + .os( + SessionStartParams.BrowserbaseSessionCreateParams + .BrowserSettings + .Os + .WINDOWS + ) .recordSession(true) .solveCaptchas(true) + .verified(true) .viewport( SessionStartParams.BrowserbaseSessionCreateParams .BrowserSettings @@ -539,6 +564,8 @@ internal class SessionStartParamsTest { SessionStartParams.BrowserbaseSessionCreateParams.BrowserSettings.builder() .advancedStealth(true) .blockAds(true) + .captchaImageSelector("captchaImageSelector") + .captchaInputSelector("captchaInputSelector") .context( SessionStartParams.BrowserbaseSessionCreateParams.BrowserSettings .Context @@ -596,8 +623,13 @@ internal class SessionStartParamsTest { .build() ) .logSession(true) + .os( + SessionStartParams.BrowserbaseSessionCreateParams.BrowserSettings.Os + .WINDOWS + ) .recordSession(true) .solveCaptchas(true) + .verified(true) .viewport( SessionStartParams.BrowserbaseSessionCreateParams.BrowserSettings .Viewport diff --git a/stagehand-java-core/src/test/kotlin/com/browserbase/api/services/ErrorHandlingTest.kt b/stagehand-java-core/src/test/kotlin/com/browserbase/api/services/ErrorHandlingTest.kt index a3bc8a0..6941c36 100644 --- a/stagehand-java-core/src/test/kotlin/com/browserbase/api/services/ErrorHandlingTest.kt +++ b/stagehand-java-core/src/test/kotlin/com/browserbase/api/services/ErrorHandlingTest.kt @@ -136,6 +136,8 @@ internal class ErrorHandlingTest { .builder() .advancedStealth(true) .blockAds(true) + .captchaImageSelector("captchaImageSelector") + .captchaInputSelector("captchaInputSelector") .context( SessionStartParams.BrowserbaseSessionCreateParams .BrowserSettings @@ -200,8 +202,15 @@ internal class ErrorHandlingTest { .build() ) .logSession(true) + .os( + SessionStartParams.BrowserbaseSessionCreateParams + .BrowserSettings + .Os + .WINDOWS + ) .recordSession(true) .solveCaptchas(true) + .verified(true) .viewport( SessionStartParams.BrowserbaseSessionCreateParams .BrowserSettings @@ -322,6 +331,8 @@ internal class ErrorHandlingTest { .builder() .advancedStealth(true) .blockAds(true) + .captchaImageSelector("captchaImageSelector") + .captchaInputSelector("captchaInputSelector") .context( SessionStartParams.BrowserbaseSessionCreateParams .BrowserSettings @@ -386,8 +397,15 @@ internal class ErrorHandlingTest { .build() ) .logSession(true) + .os( + SessionStartParams.BrowserbaseSessionCreateParams + .BrowserSettings + .Os + .WINDOWS + ) .recordSession(true) .solveCaptchas(true) + .verified(true) .viewport( SessionStartParams.BrowserbaseSessionCreateParams .BrowserSettings @@ -508,6 +526,8 @@ internal class ErrorHandlingTest { .builder() .advancedStealth(true) .blockAds(true) + .captchaImageSelector("captchaImageSelector") + .captchaInputSelector("captchaInputSelector") .context( SessionStartParams.BrowserbaseSessionCreateParams .BrowserSettings @@ -572,8 +592,15 @@ internal class ErrorHandlingTest { .build() ) .logSession(true) + .os( + SessionStartParams.BrowserbaseSessionCreateParams + .BrowserSettings + .Os + .WINDOWS + ) .recordSession(true) .solveCaptchas(true) + .verified(true) .viewport( SessionStartParams.BrowserbaseSessionCreateParams .BrowserSettings @@ -694,6 +721,8 @@ internal class ErrorHandlingTest { .builder() .advancedStealth(true) .blockAds(true) + .captchaImageSelector("captchaImageSelector") + .captchaInputSelector("captchaInputSelector") .context( SessionStartParams.BrowserbaseSessionCreateParams .BrowserSettings @@ -758,8 +787,15 @@ internal class ErrorHandlingTest { .build() ) .logSession(true) + .os( + SessionStartParams.BrowserbaseSessionCreateParams + .BrowserSettings + .Os + .WINDOWS + ) .recordSession(true) .solveCaptchas(true) + .verified(true) .viewport( SessionStartParams.BrowserbaseSessionCreateParams .BrowserSettings @@ -880,6 +916,8 @@ internal class ErrorHandlingTest { .builder() .advancedStealth(true) .blockAds(true) + .captchaImageSelector("captchaImageSelector") + .captchaInputSelector("captchaInputSelector") .context( SessionStartParams.BrowserbaseSessionCreateParams .BrowserSettings @@ -944,8 +982,15 @@ internal class ErrorHandlingTest { .build() ) .logSession(true) + .os( + SessionStartParams.BrowserbaseSessionCreateParams + .BrowserSettings + .Os + .WINDOWS + ) .recordSession(true) .solveCaptchas(true) + .verified(true) .viewport( SessionStartParams.BrowserbaseSessionCreateParams .BrowserSettings @@ -1066,6 +1111,8 @@ internal class ErrorHandlingTest { .builder() .advancedStealth(true) .blockAds(true) + .captchaImageSelector("captchaImageSelector") + .captchaInputSelector("captchaInputSelector") .context( SessionStartParams.BrowserbaseSessionCreateParams .BrowserSettings @@ -1130,8 +1177,15 @@ internal class ErrorHandlingTest { .build() ) .logSession(true) + .os( + SessionStartParams.BrowserbaseSessionCreateParams + .BrowserSettings + .Os + .WINDOWS + ) .recordSession(true) .solveCaptchas(true) + .verified(true) .viewport( SessionStartParams.BrowserbaseSessionCreateParams .BrowserSettings @@ -1252,6 +1306,8 @@ internal class ErrorHandlingTest { .builder() .advancedStealth(true) .blockAds(true) + .captchaImageSelector("captchaImageSelector") + .captchaInputSelector("captchaInputSelector") .context( SessionStartParams.BrowserbaseSessionCreateParams .BrowserSettings @@ -1316,8 +1372,15 @@ internal class ErrorHandlingTest { .build() ) .logSession(true) + .os( + SessionStartParams.BrowserbaseSessionCreateParams + .BrowserSettings + .Os + .WINDOWS + ) .recordSession(true) .solveCaptchas(true) + .verified(true) .viewport( SessionStartParams.BrowserbaseSessionCreateParams .BrowserSettings @@ -1438,6 +1501,8 @@ internal class ErrorHandlingTest { .builder() .advancedStealth(true) .blockAds(true) + .captchaImageSelector("captchaImageSelector") + .captchaInputSelector("captchaInputSelector") .context( SessionStartParams.BrowserbaseSessionCreateParams .BrowserSettings @@ -1502,8 +1567,15 @@ internal class ErrorHandlingTest { .build() ) .logSession(true) + .os( + SessionStartParams.BrowserbaseSessionCreateParams + .BrowserSettings + .Os + .WINDOWS + ) .recordSession(true) .solveCaptchas(true) + .verified(true) .viewport( SessionStartParams.BrowserbaseSessionCreateParams .BrowserSettings @@ -1624,6 +1696,8 @@ internal class ErrorHandlingTest { .builder() .advancedStealth(true) .blockAds(true) + .captchaImageSelector("captchaImageSelector") + .captchaInputSelector("captchaInputSelector") .context( SessionStartParams.BrowserbaseSessionCreateParams .BrowserSettings @@ -1688,8 +1762,15 @@ internal class ErrorHandlingTest { .build() ) .logSession(true) + .os( + SessionStartParams.BrowserbaseSessionCreateParams + .BrowserSettings + .Os + .WINDOWS + ) .recordSession(true) .solveCaptchas(true) + .verified(true) .viewport( SessionStartParams.BrowserbaseSessionCreateParams .BrowserSettings @@ -1810,6 +1891,8 @@ internal class ErrorHandlingTest { .builder() .advancedStealth(true) .blockAds(true) + .captchaImageSelector("captchaImageSelector") + .captchaInputSelector("captchaInputSelector") .context( SessionStartParams.BrowserbaseSessionCreateParams .BrowserSettings @@ -1874,8 +1957,15 @@ internal class ErrorHandlingTest { .build() ) .logSession(true) + .os( + SessionStartParams.BrowserbaseSessionCreateParams + .BrowserSettings + .Os + .WINDOWS + ) .recordSession(true) .solveCaptchas(true) + .verified(true) .viewport( SessionStartParams.BrowserbaseSessionCreateParams .BrowserSettings @@ -1996,6 +2086,8 @@ internal class ErrorHandlingTest { .builder() .advancedStealth(true) .blockAds(true) + .captchaImageSelector("captchaImageSelector") + .captchaInputSelector("captchaInputSelector") .context( SessionStartParams.BrowserbaseSessionCreateParams .BrowserSettings @@ -2060,8 +2152,15 @@ internal class ErrorHandlingTest { .build() ) .logSession(true) + .os( + SessionStartParams.BrowserbaseSessionCreateParams + .BrowserSettings + .Os + .WINDOWS + ) .recordSession(true) .solveCaptchas(true) + .verified(true) .viewport( SessionStartParams.BrowserbaseSessionCreateParams .BrowserSettings @@ -2182,6 +2281,8 @@ internal class ErrorHandlingTest { .builder() .advancedStealth(true) .blockAds(true) + .captchaImageSelector("captchaImageSelector") + .captchaInputSelector("captchaInputSelector") .context( SessionStartParams.BrowserbaseSessionCreateParams .BrowserSettings @@ -2246,8 +2347,15 @@ internal class ErrorHandlingTest { .build() ) .logSession(true) + .os( + SessionStartParams.BrowserbaseSessionCreateParams + .BrowserSettings + .Os + .WINDOWS + ) .recordSession(true) .solveCaptchas(true) + .verified(true) .viewport( SessionStartParams.BrowserbaseSessionCreateParams .BrowserSettings @@ -2368,6 +2476,8 @@ internal class ErrorHandlingTest { .builder() .advancedStealth(true) .blockAds(true) + .captchaImageSelector("captchaImageSelector") + .captchaInputSelector("captchaInputSelector") .context( SessionStartParams.BrowserbaseSessionCreateParams .BrowserSettings @@ -2432,8 +2542,15 @@ internal class ErrorHandlingTest { .build() ) .logSession(true) + .os( + SessionStartParams.BrowserbaseSessionCreateParams + .BrowserSettings + .Os + .WINDOWS + ) .recordSession(true) .solveCaptchas(true) + .verified(true) .viewport( SessionStartParams.BrowserbaseSessionCreateParams .BrowserSettings @@ -2554,6 +2671,8 @@ internal class ErrorHandlingTest { .builder() .advancedStealth(true) .blockAds(true) + .captchaImageSelector("captchaImageSelector") + .captchaInputSelector("captchaInputSelector") .context( SessionStartParams.BrowserbaseSessionCreateParams .BrowserSettings @@ -2618,8 +2737,15 @@ internal class ErrorHandlingTest { .build() ) .logSession(true) + .os( + SessionStartParams.BrowserbaseSessionCreateParams + .BrowserSettings + .Os + .WINDOWS + ) .recordSession(true) .solveCaptchas(true) + .verified(true) .viewport( SessionStartParams.BrowserbaseSessionCreateParams .BrowserSettings @@ -2740,6 +2866,8 @@ internal class ErrorHandlingTest { .builder() .advancedStealth(true) .blockAds(true) + .captchaImageSelector("captchaImageSelector") + .captchaInputSelector("captchaInputSelector") .context( SessionStartParams.BrowserbaseSessionCreateParams .BrowserSettings @@ -2804,8 +2932,15 @@ internal class ErrorHandlingTest { .build() ) .logSession(true) + .os( + SessionStartParams.BrowserbaseSessionCreateParams + .BrowserSettings + .Os + .WINDOWS + ) .recordSession(true) .solveCaptchas(true) + .verified(true) .viewport( SessionStartParams.BrowserbaseSessionCreateParams .BrowserSettings @@ -2926,6 +3061,8 @@ internal class ErrorHandlingTest { .builder() .advancedStealth(true) .blockAds(true) + .captchaImageSelector("captchaImageSelector") + .captchaInputSelector("captchaInputSelector") .context( SessionStartParams.BrowserbaseSessionCreateParams .BrowserSettings @@ -2990,8 +3127,15 @@ internal class ErrorHandlingTest { .build() ) .logSession(true) + .os( + SessionStartParams.BrowserbaseSessionCreateParams + .BrowserSettings + .Os + .WINDOWS + ) .recordSession(true) .solveCaptchas(true) + .verified(true) .viewport( SessionStartParams.BrowserbaseSessionCreateParams .BrowserSettings @@ -3110,6 +3254,8 @@ internal class ErrorHandlingTest { .builder() .advancedStealth(true) .blockAds(true) + .captchaImageSelector("captchaImageSelector") + .captchaInputSelector("captchaInputSelector") .context( SessionStartParams.BrowserbaseSessionCreateParams .BrowserSettings @@ -3174,8 +3320,15 @@ internal class ErrorHandlingTest { .build() ) .logSession(true) + .os( + SessionStartParams.BrowserbaseSessionCreateParams + .BrowserSettings + .Os + .WINDOWS + ) .recordSession(true) .solveCaptchas(true) + .verified(true) .viewport( SessionStartParams.BrowserbaseSessionCreateParams .BrowserSettings diff --git a/stagehand-java-core/src/test/kotlin/com/browserbase/api/services/ServiceParamsTest.kt b/stagehand-java-core/src/test/kotlin/com/browserbase/api/services/ServiceParamsTest.kt index f423bd2..392cc05 100644 --- a/stagehand-java-core/src/test/kotlin/com/browserbase/api/services/ServiceParamsTest.kt +++ b/stagehand-java-core/src/test/kotlin/com/browserbase/api/services/ServiceParamsTest.kt @@ -104,6 +104,8 @@ internal class ServiceParamsTest { .builder() .advancedStealth(true) .blockAds(true) + .captchaImageSelector("captchaImageSelector") + .captchaInputSelector("captchaInputSelector") .context( SessionStartParams.BrowserbaseSessionCreateParams .BrowserSettings @@ -163,8 +165,15 @@ internal class ServiceParamsTest { .build() ) .logSession(true) + .os( + SessionStartParams.BrowserbaseSessionCreateParams + .BrowserSettings + .Os + .WINDOWS + ) .recordSession(true) .solveCaptchas(true) + .verified(true) .viewport( SessionStartParams.BrowserbaseSessionCreateParams .BrowserSettings diff --git a/stagehand-java-core/src/test/kotlin/com/browserbase/api/services/async/SessionServiceAsyncTest.kt b/stagehand-java-core/src/test/kotlin/com/browserbase/api/services/async/SessionServiceAsyncTest.kt index 3635e44..a21bd07 100644 --- a/stagehand-java-core/src/test/kotlin/com/browserbase/api/services/async/SessionServiceAsyncTest.kt +++ b/stagehand-java-core/src/test/kotlin/com/browserbase/api/services/async/SessionServiceAsyncTest.kt @@ -640,6 +640,8 @@ internal class SessionServiceAsyncTest { .builder() .advancedStealth(true) .blockAds(true) + .captchaImageSelector("captchaImageSelector") + .captchaInputSelector("captchaInputSelector") .context( SessionStartParams.BrowserbaseSessionCreateParams .BrowserSettings @@ -699,8 +701,15 @@ internal class SessionServiceAsyncTest { .build() ) .logSession(true) + .os( + SessionStartParams.BrowserbaseSessionCreateParams + .BrowserSettings + .Os + .WINDOWS + ) .recordSession(true) .solveCaptchas(true) + .verified(true) .viewport( SessionStartParams.BrowserbaseSessionCreateParams .BrowserSettings diff --git a/stagehand-java-core/src/test/kotlin/com/browserbase/api/services/blocking/SessionServiceTest.kt b/stagehand-java-core/src/test/kotlin/com/browserbase/api/services/blocking/SessionServiceTest.kt index 15ae6c4..7923bb5 100644 --- a/stagehand-java-core/src/test/kotlin/com/browserbase/api/services/blocking/SessionServiceTest.kt +++ b/stagehand-java-core/src/test/kotlin/com/browserbase/api/services/blocking/SessionServiceTest.kt @@ -633,6 +633,8 @@ internal class SessionServiceTest { .builder() .advancedStealth(true) .blockAds(true) + .captchaImageSelector("captchaImageSelector") + .captchaInputSelector("captchaInputSelector") .context( SessionStartParams.BrowserbaseSessionCreateParams .BrowserSettings @@ -692,8 +694,15 @@ internal class SessionServiceTest { .build() ) .logSession(true) + .os( + SessionStartParams.BrowserbaseSessionCreateParams + .BrowserSettings + .Os + .WINDOWS + ) .recordSession(true) .solveCaptchas(true) + .verified(true) .viewport( SessionStartParams.BrowserbaseSessionCreateParams .BrowserSettings