diff --git a/.stats.yml b/.stats.yml
index 434275e..330b531 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
-configured_endpoints: 89
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel%2Fkernel-8d66dbedea5b240936b338809f272568ca84a452fc13dbda835479f2ec068b41.yml
-openapi_spec_hash: 7c499bfce2e996f1fff5e7791cea390e
-config_hash: fcc2db3ed48ab4e8d1b588d31d394a23
+configured_endpoints: 91
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel%2Fkernel-4f5307643555b7917e8681b1966ae0b99f770cf59805e2f917ec7528edf11ba8.yml
+openapi_spec_hash: 873a9aa3a88b6cec1ad94f848eeb1c45
+config_hash: 20337f7888852c165d099faa7589c90a
diff --git a/CHANGELOG.md b/CHANGELOG.md
index fdeefc5..ff477f3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,26 +1,23 @@
# Changelog
-## 0.25.0 (2026-01-07)
+## 0.25.0 (2026-01-16)
-Full Changelog: [v0.24.0...v0.25.0](https://github.com/onkernel/kernel-go-sdk/compare/v0.24.0...v0.25.0)
+Full Changelog: [v0.24.0...v0.25.0](https://github.com/kernel/kernel-go-sdk/compare/v0.24.0...v0.25.0)
### Features
-* **api:** add health check endpoint for proxies ([c7b8728](https://github.com/onkernel/kernel-go-sdk/commit/c7b8728369482de76bdf143a59f16b0de8bc03bb))
-* **auth:** add auto_login credential flow ([2eec1a1](https://github.com/onkernel/kernel-go-sdk/commit/2eec1a147279fe64a060c2066b30a2f0a13e74ab))
-* Enhance AuthAgentInvocation with step and last activity tracking ([ccb1425](https://github.com/onkernel/kernel-go-sdk/commit/ccb1425ea205fbb18129f341ae36bfc55c70ca64))
-
-
-### Bug Fixes
-
-* skip usage tests that don't work with Prism ([8872193](https://github.com/onkernel/kernel-go-sdk/commit/88721930052bff16639f371a9a7e46e7e34e7ff4))
+* add MFA options to agent authentication workflow ([0f5b637](https://github.com/kernel/kernel-go-sdk/commit/0f5b63778ed3fce2f8662053eb213ba55a77cde9))
+* add WebSocket process attach and PTY support ([690d473](https://github.com/kernel/kernel-go-sdk/commit/690d4737fe6b3d13c64acc5de08da76deb74a597))
+* **api:** add IP address logging for residential and custom proxies ([35a09ad](https://github.com/kernel/kernel-go-sdk/commit/35a09ad5ece2cdaf09a8d3b6420b4744377f5d6f))
+* **api:** manual updates ([0980329](https://github.com/kernel/kernel-go-sdk/commit/0980329671baab3951d42b472f69fcd5ef29aab7))
+* **api:** update production repos ([0cdfbfd](https://github.com/kernel/kernel-go-sdk/commit/0cdfbfdfccab1abe18180bce8500623be8bcad66))
+* Support hot swap proxy on a session ([5c479d9](https://github.com/kernel/kernel-go-sdk/commit/5c479d9abb0f42edbb4bdf8d0cef681f5aeeca3a))
### Chores
-* add float64 to valid types for RegisterFieldValidator ([1e23b39](https://github.com/onkernel/kernel-go-sdk/commit/1e23b39aca94dd1a98d6ec6669d2c8b87f8ccf02))
-* **internal:** codegen related update ([e07718d](https://github.com/onkernel/kernel-go-sdk/commit/e07718dbecbbc00c19e9d0725c04297fe48f2121))
-* **internal:** codegen related update ([0320876](https://github.com/onkernel/kernel-go-sdk/commit/0320876c8f64185768a3ad562b9656f96ab7e935))
+* sync repo ([1728134](https://github.com/kernel/kernel-go-sdk/commit/1728134103bf4a4bcb1c74ad335408cc3f7cc65a))
+* update module path from onkernel to kernel ([52c5887](https://github.com/kernel/kernel-go-sdk/commit/52c588700307b752e5d239718a00aafddc86ab96))
## 0.24.0 (2025-12-17)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index b668092..36f85c6 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -41,7 +41,7 @@ To use a local version of this library from source in another project, edit the
directive. This can be done through the CLI with the following:
```sh
-$ go mod edit -replace github.com/onkernel/kernel-go-sdk=/path/to/kernel-go-sdk
+$ go mod edit -replace github.com/kernel/kernel-go-sdk=/path/to/kernel-go-sdk
```
## Running tests
diff --git a/README.md b/README.md
index 124904d..25c5e3d 100644
--- a/README.md
+++ b/README.md
@@ -2,11 +2,11 @@
-
+
-The Kernel Go library provides convenient access to the [Kernel REST API](https://docs.onkernel.com)
+The Kernel Go library provides convenient access to the [Kernel REST API](https://www.kernel.sh/docs/api-reference)
from applications written in Go.
It is generated with [Stainless](https://www.stainless.com/).
@@ -17,7 +17,7 @@ It is generated with [Stainless](https://www.stainless.com/).
```go
import (
- "github.com/onkernel/kernel-go-sdk" // imported as kernel
+ "github.com/kernel/kernel-go-sdk" // imported as kernel
)
```
@@ -28,7 +28,7 @@ Or to pin the version:
```sh
-go get -u 'github.com/onkernel/kernel-go-sdk@v0.25.0'
+go get -u 'github.com/kernel/kernel-go-sdk@v0.25.0'
```
@@ -48,8 +48,8 @@ import (
"context"
"fmt"
- "github.com/onkernel/kernel-go-sdk"
- "github.com/onkernel/kernel-go-sdk/option"
+ "github.com/kernel/kernel-go-sdk"
+ "github.com/kernel/kernel-go-sdk/option"
)
func main() {
@@ -279,7 +279,7 @@ client.Browsers.New(context.TODO(), ...,
The request option `option.WithDebugLog(nil)` may be helpful while debugging.
-See the [full list of request options](https://pkg.go.dev/github.com/onkernel/kernel-go-sdk/option).
+See the [full list of request options](https://pkg.go.dev/github.com/kernel/kernel-go-sdk/option).
### Pagination
@@ -542,7 +542,7 @@ This package generally follows [SemVer](https://semver.org/spec/v2.0.0.html) con
We take backwards-compatibility seriously and work hard to ensure you can rely on a smooth upgrade experience.
-We are keen for your feedback; please open an [issue](https://www.github.com/onkernel/kernel-go-sdk/issues) with questions, bugs, or suggestions.
+We are keen for your feedback; please open an [issue](https://www.github.com/kernel/kernel-go-sdk/issues) with questions, bugs, or suggestions.
## Contributing
diff --git a/agentauth.go b/agentauth.go
index 065a906..4e30d8f 100644
--- a/agentauth.go
+++ b/agentauth.go
@@ -139,6 +139,9 @@ type AgentAuthInvocationResponse struct {
ExternalActionMessage string `json:"external_action_message,nullable"`
// Browser live view URL for debugging the invocation
LiveViewURL string `json:"live_view_url,nullable"`
+ // MFA method options to choose from (present when step=awaiting_input and MFA
+ // selection is required)
+ MfaOptions []AgentAuthInvocationResponseMfaOption `json:"mfa_options,nullable"`
// Fields currently awaiting input (present when step=awaiting_input)
PendingFields []DiscoveredField `json:"pending_fields,nullable"`
// SSO buttons available on the page (present when step=awaiting_input)
@@ -156,6 +159,7 @@ type AgentAuthInvocationResponse struct {
ErrorMessage respjson.Field
ExternalActionMessage respjson.Field
LiveViewURL respjson.Field
+ MfaOptions respjson.Field
PendingFields respjson.Field
PendingSSOButtons respjson.Field
SubmittedFields respjson.Field
@@ -207,6 +211,35 @@ const (
AgentAuthInvocationResponseTypeReauth AgentAuthInvocationResponseType = "reauth"
)
+// An MFA method option for verification
+type AgentAuthInvocationResponseMfaOption struct {
+ // The visible option text
+ Label string `json:"label,required"`
+ // The MFA delivery method type
+ //
+ // Any of "sms", "call", "email", "totp", "push", "security_key".
+ Type string `json:"type,required"`
+ // Additional instructions from the site
+ Description string `json:"description,nullable"`
+ // The masked destination (phone/email) if shown
+ Target string `json:"target,nullable"`
+ // JSON contains metadata for fields, check presence with [respjson.Field.Valid].
+ JSON struct {
+ Label respjson.Field
+ Type respjson.Field
+ Description respjson.Field
+ Target respjson.Field
+ ExtraFields map[string]respjson.Field
+ raw string
+ } `json:"-"`
+}
+
+// Returns the unmodified JSON received from the API
+func (r AgentAuthInvocationResponseMfaOption) RawJSON() string { return r.JSON.raw }
+func (r *AgentAuthInvocationResponseMfaOption) UnmarshalJSON(data []byte) error {
+ return apijson.UnmarshalRoot(data, r)
+}
+
// An SSO button for signing in with an external identity provider
type AgentAuthInvocationResponsePendingSSOButton struct {
// Visible button text
diff --git a/agentauthinvocation.go b/agentauthinvocation.go
index 830c592..91acce7 100644
--- a/agentauthinvocation.go
+++ b/agentauthinvocation.go
@@ -145,12 +145,14 @@ type AgentAuthInvocationSubmitParams struct {
OfFieldValues *AgentAuthInvocationSubmitParamsBodyFieldValues `json:",inline"`
// This field is a request body variant, only one variant field can be set.
OfSSOButton *AgentAuthInvocationSubmitParamsBodySSOButton `json:",inline"`
+ // This field is a request body variant, only one variant field can be set.
+ OfSelectedMfaType *AgentAuthInvocationSubmitParamsBodySelectedMfaType `json:",inline"`
paramObj
}
func (u AgentAuthInvocationSubmitParams) MarshalJSON() ([]byte, error) {
- return param.MarshalUnion(u, u.OfFieldValues, u.OfSSOButton)
+ return param.MarshalUnion(u, u.OfFieldValues, u.OfSSOButton, u.OfSelectedMfaType)
}
func (r *AgentAuthInvocationSubmitParams) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
@@ -185,3 +187,26 @@ func (r AgentAuthInvocationSubmitParamsBodySSOButton) MarshalJSON() (data []byte
func (r *AgentAuthInvocationSubmitParamsBodySSOButton) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
+
+// The property SelectedMfaType is required.
+type AgentAuthInvocationSubmitParamsBodySelectedMfaType struct {
+ // The MFA delivery method type
+ //
+ // Any of "sms", "call", "email", "totp", "push", "security_key".
+ SelectedMfaType string `json:"selected_mfa_type,omitzero,required"`
+ paramObj
+}
+
+func (r AgentAuthInvocationSubmitParamsBodySelectedMfaType) MarshalJSON() (data []byte, err error) {
+ type shadow AgentAuthInvocationSubmitParamsBodySelectedMfaType
+ return param.MarshalObject(r, (*shadow)(&r))
+}
+func (r *AgentAuthInvocationSubmitParamsBodySelectedMfaType) UnmarshalJSON(data []byte) error {
+ return apijson.UnmarshalRoot(data, r)
+}
+
+func init() {
+ apijson.RegisterFieldValidator[AgentAuthInvocationSubmitParamsBodySelectedMfaType](
+ "selected_mfa_type", "sms", "call", "email", "totp", "push", "security_key",
+ )
+}
diff --git a/api.md b/api.md
index e849839..d70728a 100644
--- a/api.md
+++ b/api.md
@@ -1,252 +1,256 @@
# Shared Params Types
-- shared.BrowserExtensionParam
-- shared.BrowserProfileParam
-- shared.BrowserViewportParam
+- shared.BrowserExtensionParam
+- shared.BrowserProfileParam
+- shared.BrowserViewportParam
# Shared Response Types
-- shared.AppAction
-- shared.BrowserExtension
-- shared.BrowserProfile
-- shared.BrowserViewport
-- shared.ErrorDetail
-- shared.ErrorEvent
-- shared.ErrorModel
-- shared.HeartbeatEvent
-- shared.LogEvent
+- shared.AppAction
+- shared.BrowserExtension
+- shared.BrowserProfile
+- shared.BrowserViewport
+- shared.ErrorDetail
+- shared.ErrorEvent
+- shared.ErrorModel
+- shared.HeartbeatEvent
+- shared.LogEvent
# Deployments
Response Types:
-- kernel.DeploymentStateEvent
-- kernel.DeploymentNewResponse
-- kernel.DeploymentGetResponse
-- kernel.DeploymentListResponse
-- kernel.DeploymentFollowResponseUnion
+- kernel.DeploymentStateEvent
+- kernel.DeploymentNewResponse
+- kernel.DeploymentGetResponse
+- kernel.DeploymentListResponse
+- kernel.DeploymentFollowResponseUnion
Methods:
-- client.Deployments.New(ctx context.Context, body kernel.DeploymentNewParams) (kernel.DeploymentNewResponse, error)
-- client.Deployments.Get(ctx context.Context, id string) (kernel.DeploymentGetResponse, error)
-- client.Deployments.List(ctx context.Context, query kernel.DeploymentListParams) (pagination.OffsetPagination[kernel.DeploymentListResponse], error)
-- client.Deployments.Follow(ctx context.Context, id string, query kernel.DeploymentFollowParams) (kernel.DeploymentFollowResponseUnion, error)
+- client.Deployments.New(ctx context.Context, body kernel.DeploymentNewParams) (kernel.DeploymentNewResponse, error)
+- client.Deployments.Get(ctx context.Context, id string) (kernel.DeploymentGetResponse, error)
+- client.Deployments.List(ctx context.Context, query kernel.DeploymentListParams) (pagination.OffsetPagination[kernel.DeploymentListResponse], error)
+- client.Deployments.Follow(ctx context.Context, id string, query kernel.DeploymentFollowParams) (kernel.DeploymentFollowResponseUnion, error)
# Apps
Response Types:
-- kernel.AppListResponse
+- kernel.AppListResponse
Methods:
-- client.Apps.List(ctx context.Context, query kernel.AppListParams) (pagination.OffsetPagination[kernel.AppListResponse], error)
+- client.Apps.List(ctx context.Context, query kernel.AppListParams) (pagination.OffsetPagination[kernel.AppListResponse], error)
# Invocations
Response Types:
-- kernel.InvocationStateEvent
-- kernel.InvocationNewResponse
-- kernel.InvocationGetResponse
-- kernel.InvocationUpdateResponse
-- kernel.InvocationListResponse
-- kernel.InvocationFollowResponseUnion
+- kernel.InvocationStateEvent
+- kernel.InvocationNewResponse
+- kernel.InvocationGetResponse
+- kernel.InvocationUpdateResponse
+- kernel.InvocationListResponse
+- kernel.InvocationFollowResponseUnion
Methods:
-- client.Invocations.New(ctx context.Context, body kernel.InvocationNewParams) (kernel.InvocationNewResponse, error)
-- client.Invocations.Get(ctx context.Context, id string) (kernel.InvocationGetResponse, error)
-- client.Invocations.Update(ctx context.Context, id string, body kernel.InvocationUpdateParams) (kernel.InvocationUpdateResponse, error)
-- client.Invocations.List(ctx context.Context, query kernel.InvocationListParams) (pagination.OffsetPagination[kernel.InvocationListResponse], error)
-- client.Invocations.DeleteBrowsers(ctx context.Context, id string) error
-- client.Invocations.Follow(ctx context.Context, id string, query kernel.InvocationFollowParams) (kernel.InvocationFollowResponseUnion, error)
+- client.Invocations.New(ctx context.Context, body kernel.InvocationNewParams) (kernel.InvocationNewResponse, error)
+- client.Invocations.Get(ctx context.Context, id string) (kernel.InvocationGetResponse, error)
+- client.Invocations.Update(ctx context.Context, id string, body kernel.InvocationUpdateParams) (kernel.InvocationUpdateResponse, error)
+- client.Invocations.List(ctx context.Context, query kernel.InvocationListParams) (pagination.OffsetPagination[kernel.InvocationListResponse], error)
+- client.Invocations.DeleteBrowsers(ctx context.Context, id string) error
+- client.Invocations.Follow(ctx context.Context, id string, query kernel.InvocationFollowParams) (kernel.InvocationFollowResponseUnion, error)
# Browsers
Params Types:
-- kernel.BrowserPersistenceParam
+- kernel.BrowserPersistenceParam
Response Types:
-- kernel.BrowserPersistence
-- kernel.Profile
-- kernel.BrowserNewResponse
-- kernel.BrowserGetResponse
-- kernel.BrowserListResponse
+- kernel.BrowserPersistence
+- kernel.Profile
+- kernel.BrowserNewResponse
+- kernel.BrowserGetResponse
+- kernel.BrowserUpdateResponse
+- kernel.BrowserListResponse
Methods:
-- client.Browsers.New(ctx context.Context, body kernel.BrowserNewParams) (kernel.BrowserNewResponse, error)
-- client.Browsers.Get(ctx context.Context, id string) (kernel.BrowserGetResponse, error)
-- client.Browsers.List(ctx context.Context, query kernel.BrowserListParams) (pagination.OffsetPagination[kernel.BrowserListResponse], error)
-- client.Browsers.Delete(ctx context.Context, body kernel.BrowserDeleteParams) error
-- client.Browsers.DeleteByID(ctx context.Context, id string) error
-- client.Browsers.LoadExtensions(ctx context.Context, id string, body kernel.BrowserLoadExtensionsParams) error
+- client.Browsers.New(ctx context.Context, body kernel.BrowserNewParams) (kernel.BrowserNewResponse, error)
+- client.Browsers.Get(ctx context.Context, id string) (kernel.BrowserGetResponse, error)
+- client.Browsers.Update(ctx context.Context, id string, body kernel.BrowserUpdateParams) (kernel.BrowserUpdateResponse, error)
+- client.Browsers.List(ctx context.Context, query kernel.BrowserListParams) (pagination.OffsetPagination[kernel.BrowserListResponse], error)
+- client.Browsers.Delete(ctx context.Context, body kernel.BrowserDeleteParams) error
+- client.Browsers.DeleteByID(ctx context.Context, id string) error
+- client.Browsers.LoadExtensions(ctx context.Context, id string, body kernel.BrowserLoadExtensionsParams) error
## Replays
Response Types:
-- kernel.BrowserReplayListResponse
-- kernel.BrowserReplayStartResponse
+- kernel.BrowserReplayListResponse
+- kernel.BrowserReplayStartResponse
Methods:
-- client.Browsers.Replays.List(ctx context.Context, id string) ([]kernel.BrowserReplayListResponse, error)
-- client.Browsers.Replays.Download(ctx context.Context, replayID string, query kernel.BrowserReplayDownloadParams) (http.Response, error)
-- client.Browsers.Replays.Start(ctx context.Context, id string, body kernel.BrowserReplayStartParams) (kernel.BrowserReplayStartResponse, error)
-- client.Browsers.Replays.Stop(ctx context.Context, replayID string, body kernel.BrowserReplayStopParams) error
+- client.Browsers.Replays.List(ctx context.Context, id string) ([]kernel.BrowserReplayListResponse, error)
+- client.Browsers.Replays.Download(ctx context.Context, replayID string, query kernel.BrowserReplayDownloadParams) (http.Response, error)
+- client.Browsers.Replays.Start(ctx context.Context, id string, body kernel.BrowserReplayStartParams) (kernel.BrowserReplayStartResponse, error)
+- client.Browsers.Replays.Stop(ctx context.Context, replayID string, body kernel.BrowserReplayStopParams) error
## Fs
Response Types:
-- kernel.BrowserFFileInfoResponse
-- kernel.BrowserFListFilesResponse
+- kernel.BrowserFFileInfoResponse
+- kernel.BrowserFListFilesResponse
Methods:
-- client.Browsers.Fs.NewDirectory(ctx context.Context, id string, body kernel.BrowserFNewDirectoryParams) error
-- client.Browsers.Fs.DeleteDirectory(ctx context.Context, id string, body kernel.BrowserFDeleteDirectoryParams) error
-- client.Browsers.Fs.DeleteFile(ctx context.Context, id string, body kernel.BrowserFDeleteFileParams) error
-- client.Browsers.Fs.DownloadDirZip(ctx context.Context, id string, query kernel.BrowserFDownloadDirZipParams) (http.Response, error)
-- client.Browsers.Fs.FileInfo(ctx context.Context, id string, query kernel.BrowserFFileInfoParams) (kernel.BrowserFFileInfoResponse, error)
-- client.Browsers.Fs.ListFiles(ctx context.Context, id string, query kernel.BrowserFListFilesParams) ([]kernel.BrowserFListFilesResponse, error)
-- client.Browsers.Fs.Move(ctx context.Context, id string, body kernel.BrowserFMoveParams) error
-- client.Browsers.Fs.ReadFile(ctx context.Context, id string, query kernel.BrowserFReadFileParams) (http.Response, error)
-- client.Browsers.Fs.SetFilePermissions(ctx context.Context, id string, body kernel.BrowserFSetFilePermissionsParams) error
-- client.Browsers.Fs.Upload(ctx context.Context, id string, body kernel.BrowserFUploadParams) error
-- client.Browsers.Fs.UploadZip(ctx context.Context, id string, body kernel.BrowserFUploadZipParams) error
-- client.Browsers.Fs.WriteFile(ctx context.Context, id string, contents io.Reader, params kernel.BrowserFWriteFileParams) error
+- client.Browsers.Fs.NewDirectory(ctx context.Context, id string, body kernel.BrowserFNewDirectoryParams) error
+- client.Browsers.Fs.DeleteDirectory(ctx context.Context, id string, body kernel.BrowserFDeleteDirectoryParams) error
+- client.Browsers.Fs.DeleteFile(ctx context.Context, id string, body kernel.BrowserFDeleteFileParams) error
+- client.Browsers.Fs.DownloadDirZip(ctx context.Context, id string, query kernel.BrowserFDownloadDirZipParams) (http.Response, error)
+- client.Browsers.Fs.FileInfo(ctx context.Context, id string, query kernel.BrowserFFileInfoParams) (kernel.BrowserFFileInfoResponse, error)
+- client.Browsers.Fs.ListFiles(ctx context.Context, id string, query kernel.BrowserFListFilesParams) ([]kernel.BrowserFListFilesResponse, error)
+- client.Browsers.Fs.Move(ctx context.Context, id string, body kernel.BrowserFMoveParams) error
+- client.Browsers.Fs.ReadFile(ctx context.Context, id string, query kernel.BrowserFReadFileParams) (http.Response, error)
+- client.Browsers.Fs.SetFilePermissions(ctx context.Context, id string, body kernel.BrowserFSetFilePermissionsParams) error
+- client.Browsers.Fs.Upload(ctx context.Context, id string, body kernel.BrowserFUploadParams) error
+- client.Browsers.Fs.UploadZip(ctx context.Context, id string, body kernel.BrowserFUploadZipParams) error
+- client.Browsers.Fs.WriteFile(ctx context.Context, id string, contents io.Reader, params kernel.BrowserFWriteFileParams) error
### Watch
Response Types:
-- kernel.BrowserFWatchEventsResponse
-- kernel.BrowserFWatchStartResponse
+- kernel.BrowserFWatchEventsResponse
+- kernel.BrowserFWatchStartResponse
Methods:
-- client.Browsers.Fs.Watch.Events(ctx context.Context, watchID string, query kernel.BrowserFWatchEventsParams) (kernel.BrowserFWatchEventsResponse, error)
-- client.Browsers.Fs.Watch.Start(ctx context.Context, id string, body kernel.BrowserFWatchStartParams) (kernel.BrowserFWatchStartResponse, error)
-- client.Browsers.Fs.Watch.Stop(ctx context.Context, watchID string, body kernel.BrowserFWatchStopParams) error
+- client.Browsers.Fs.Watch.Events(ctx context.Context, watchID string, query kernel.BrowserFWatchEventsParams) (kernel.BrowserFWatchEventsResponse, error)
+- client.Browsers.Fs.Watch.Start(ctx context.Context, id string, body kernel.BrowserFWatchStartParams) (kernel.BrowserFWatchStartResponse, error)
+- client.Browsers.Fs.Watch.Stop(ctx context.Context, watchID string, body kernel.BrowserFWatchStopParams) error
## Process
Response Types:
-- kernel.BrowserProcessExecResponse
-- kernel.BrowserProcessKillResponse
-- kernel.BrowserProcessSpawnResponse
-- kernel.BrowserProcessStatusResponse
-- kernel.BrowserProcessStdinResponse
-- kernel.BrowserProcessStdoutStreamResponse
+- kernel.BrowserProcessExecResponse
+- kernel.BrowserProcessKillResponse
+- kernel.BrowserProcessResizeResponse
+- kernel.BrowserProcessSpawnResponse
+- kernel.BrowserProcessStatusResponse
+- kernel.BrowserProcessStdinResponse
+- kernel.BrowserProcessStdoutStreamResponse
Methods:
-- client.Browsers.Process.Exec(ctx context.Context, id string, body kernel.BrowserProcessExecParams) (kernel.BrowserProcessExecResponse, error)
-- client.Browsers.Process.Kill(ctx context.Context, processID string, params kernel.BrowserProcessKillParams) (kernel.BrowserProcessKillResponse, error)
-- client.Browsers.Process.Spawn(ctx context.Context, id string, body kernel.BrowserProcessSpawnParams) (kernel.BrowserProcessSpawnResponse, error)
-- client.Browsers.Process.Status(ctx context.Context, processID string, query kernel.BrowserProcessStatusParams) (kernel.BrowserProcessStatusResponse, error)
-- client.Browsers.Process.Stdin(ctx context.Context, processID string, params kernel.BrowserProcessStdinParams) (kernel.BrowserProcessStdinResponse, error)
-- client.Browsers.Process.StdoutStream(ctx context.Context, processID string, query kernel.BrowserProcessStdoutStreamParams) (kernel.BrowserProcessStdoutStreamResponse, error)
+- client.Browsers.Process.Exec(ctx context.Context, id string, body kernel.BrowserProcessExecParams) (kernel.BrowserProcessExecResponse, error)
+- client.Browsers.Process.Kill(ctx context.Context, processID string, params kernel.BrowserProcessKillParams) (kernel.BrowserProcessKillResponse, error)
+- client.Browsers.Process.Resize(ctx context.Context, processID string, params kernel.BrowserProcessResizeParams) (kernel.BrowserProcessResizeResponse, error)
+- client.Browsers.Process.Spawn(ctx context.Context, id string, body kernel.BrowserProcessSpawnParams) (kernel.BrowserProcessSpawnResponse, error)
+- client.Browsers.Process.Status(ctx context.Context, processID string, query kernel.BrowserProcessStatusParams) (kernel.BrowserProcessStatusResponse, error)
+- client.Browsers.Process.Stdin(ctx context.Context, processID string, params kernel.BrowserProcessStdinParams) (kernel.BrowserProcessStdinResponse, error)
+- client.Browsers.Process.StdoutStream(ctx context.Context, processID string, query kernel.BrowserProcessStdoutStreamParams) (kernel.BrowserProcessStdoutStreamResponse, error)
## Logs
Methods:
-- client.Browsers.Logs.Stream(ctx context.Context, id string, query kernel.BrowserLogStreamParams) (shared.LogEvent, error)
+- client.Browsers.Logs.Stream(ctx context.Context, id string, query kernel.BrowserLogStreamParams) (shared.LogEvent, error)
## Computer
Response Types:
-- kernel.BrowserComputerSetCursorVisibilityResponse
+- kernel.BrowserComputerSetCursorVisibilityResponse
Methods:
-- client.Browsers.Computer.CaptureScreenshot(ctx context.Context, id string, body kernel.BrowserComputerCaptureScreenshotParams) (http.Response, error)
-- client.Browsers.Computer.ClickMouse(ctx context.Context, id string, body kernel.BrowserComputerClickMouseParams) error
-- client.Browsers.Computer.DragMouse(ctx context.Context, id string, body kernel.BrowserComputerDragMouseParams) error
-- client.Browsers.Computer.MoveMouse(ctx context.Context, id string, body kernel.BrowserComputerMoveMouseParams) error
-- client.Browsers.Computer.PressKey(ctx context.Context, id string, body kernel.BrowserComputerPressKeyParams) error
-- client.Browsers.Computer.Scroll(ctx context.Context, id string, body kernel.BrowserComputerScrollParams) error
-- client.Browsers.Computer.SetCursorVisibility(ctx context.Context, id string, body kernel.BrowserComputerSetCursorVisibilityParams) (kernel.BrowserComputerSetCursorVisibilityResponse, error)
-- client.Browsers.Computer.TypeText(ctx context.Context, id string, body kernel.BrowserComputerTypeTextParams) error
+- client.Browsers.Computer.CaptureScreenshot(ctx context.Context, id string, body kernel.BrowserComputerCaptureScreenshotParams) (http.Response, error)
+- client.Browsers.Computer.ClickMouse(ctx context.Context, id string, body kernel.BrowserComputerClickMouseParams) error
+- client.Browsers.Computer.DragMouse(ctx context.Context, id string, body kernel.BrowserComputerDragMouseParams) error
+- client.Browsers.Computer.MoveMouse(ctx context.Context, id string, body kernel.BrowserComputerMoveMouseParams) error
+- client.Browsers.Computer.PressKey(ctx context.Context, id string, body kernel.BrowserComputerPressKeyParams) error
+- client.Browsers.Computer.Scroll(ctx context.Context, id string, body kernel.BrowserComputerScrollParams) error
+- client.Browsers.Computer.SetCursorVisibility(ctx context.Context, id string, body kernel.BrowserComputerSetCursorVisibilityParams) (kernel.BrowserComputerSetCursorVisibilityResponse, error)
+- client.Browsers.Computer.TypeText(ctx context.Context, id string, body kernel.BrowserComputerTypeTextParams) error
## Playwright
Response Types:
-- kernel.BrowserPlaywrightExecuteResponse
+- kernel.BrowserPlaywrightExecuteResponse
Methods:
-- client.Browsers.Playwright.Execute(ctx context.Context, id string, body kernel.BrowserPlaywrightExecuteParams) (kernel.BrowserPlaywrightExecuteResponse, error)
+- client.Browsers.Playwright.Execute(ctx context.Context, id string, body kernel.BrowserPlaywrightExecuteParams) (kernel.BrowserPlaywrightExecuteResponse, error)
# Profiles
Methods:
-- client.Profiles.New(ctx context.Context, body kernel.ProfileNewParams) (kernel.Profile, error)
-- client.Profiles.Get(ctx context.Context, idOrName string) (kernel.Profile, error)
-- client.Profiles.List(ctx context.Context) ([]kernel.Profile, error)
-- client.Profiles.Delete(ctx context.Context, idOrName string) error
-- client.Profiles.Download(ctx context.Context, idOrName string) (http.Response, error)
+- client.Profiles.New(ctx context.Context, body kernel.ProfileNewParams) (kernel.Profile, error)
+- client.Profiles.Get(ctx context.Context, idOrName string) (kernel.Profile, error)
+- client.Profiles.List(ctx context.Context) ([]kernel.Profile, error)
+- client.Profiles.Delete(ctx context.Context, idOrName string) error
+- client.Profiles.Download(ctx context.Context, idOrName string) (http.Response, error)
# Proxies
Response Types:
-- kernel.ProxyNewResponse
-- kernel.ProxyGetResponse
-- kernel.ProxyListResponse
-- kernel.ProxyCheckResponse
+- kernel.ProxyNewResponse
+- kernel.ProxyGetResponse
+- kernel.ProxyListResponse
+- kernel.ProxyCheckResponse
Methods:
-- client.Proxies.New(ctx context.Context, body kernel.ProxyNewParams) (kernel.ProxyNewResponse, error)
-- client.Proxies.Get(ctx context.Context, id string) (kernel.ProxyGetResponse, error)
-- client.Proxies.List(ctx context.Context) ([]kernel.ProxyListResponse, error)
-- client.Proxies.Delete(ctx context.Context, id string) error
-- client.Proxies.Check(ctx context.Context, id string) (kernel.ProxyCheckResponse, error)
+- client.Proxies.New(ctx context.Context, body kernel.ProxyNewParams) (kernel.ProxyNewResponse, error)
+- client.Proxies.Get(ctx context.Context, id string) (kernel.ProxyGetResponse, error)
+- client.Proxies.List(ctx context.Context) ([]kernel.ProxyListResponse, error)
+- client.Proxies.Delete(ctx context.Context, id string) error
+- client.Proxies.Check(ctx context.Context, id string) (kernel.ProxyCheckResponse, error)
# Extensions
Response Types:
-- kernel.ExtensionListResponse
-- kernel.ExtensionUploadResponse
+- kernel.ExtensionListResponse
+- kernel.ExtensionUploadResponse
Methods:
-- client.Extensions.List(ctx context.Context) ([]kernel.ExtensionListResponse, error)
-- client.Extensions.Delete(ctx context.Context, idOrName string) error
-- client.Extensions.Download(ctx context.Context, idOrName string) (http.Response, error)
-- client.Extensions.DownloadFromChromeStore(ctx context.Context, query kernel.ExtensionDownloadFromChromeStoreParams) (http.Response, error)
-- client.Extensions.Upload(ctx context.Context, body kernel.ExtensionUploadParams) (kernel.ExtensionUploadResponse, error)
+- client.Extensions.List(ctx context.Context) ([]kernel.ExtensionListResponse, error)
+- client.Extensions.Delete(ctx context.Context, idOrName string) error
+- client.Extensions.Download(ctx context.Context, idOrName string) (http.Response, error)
+- client.Extensions.DownloadFromChromeStore(ctx context.Context, query kernel.ExtensionDownloadFromChromeStoreParams) (http.Response, error)
+- client.Extensions.Upload(ctx context.Context, body kernel.ExtensionUploadParams) (kernel.ExtensionUploadResponse, error)
# BrowserPools
Response Types:
-- kernel.BrowserPool
-- kernel.BrowserPoolAcquireResponse
+- kernel.BrowserPool
+- kernel.BrowserPoolAcquireResponse
Methods:
-- client.BrowserPools.New(ctx context.Context, body kernel.BrowserPoolNewParams) (kernel.BrowserPool, error)
-- client.BrowserPools.Get(ctx context.Context, idOrName string) (kernel.BrowserPool, error)
-- client.BrowserPools.Update(ctx context.Context, idOrName string, body kernel.BrowserPoolUpdateParams) (kernel.BrowserPool, error)
-- client.BrowserPools.List(ctx context.Context) ([]kernel.BrowserPool, error)
-- client.BrowserPools.Delete(ctx context.Context, idOrName string, body kernel.BrowserPoolDeleteParams) error
-- client.BrowserPools.Acquire(ctx context.Context, idOrName string, body kernel.BrowserPoolAcquireParams) (kernel.BrowserPoolAcquireResponse, error)
-- client.BrowserPools.Flush(ctx context.Context, idOrName string) error
-- client.BrowserPools.Release(ctx context.Context, idOrName string, body kernel.BrowserPoolReleaseParams) error
+- client.BrowserPools.New(ctx context.Context, body kernel.BrowserPoolNewParams) (kernel.BrowserPool, error)
+- client.BrowserPools.Get(ctx context.Context, idOrName string) (kernel.BrowserPool, error)
+- client.BrowserPools.Update(ctx context.Context, idOrName string, body kernel.BrowserPoolUpdateParams) (kernel.BrowserPool, error)
+- client.BrowserPools.List(ctx context.Context) ([]kernel.BrowserPool, error)
+- client.BrowserPools.Delete(ctx context.Context, idOrName string, body kernel.BrowserPoolDeleteParams) error
+- client.BrowserPools.Acquire(ctx context.Context, idOrName string, body kernel.BrowserPoolAcquireParams) (kernel.BrowserPoolAcquireResponse, error)
+- client.BrowserPools.Flush(ctx context.Context, idOrName string) error
+- client.BrowserPools.Release(ctx context.Context, idOrName string, body kernel.BrowserPoolReleaseParams) error
# Agents
@@ -254,54 +258,54 @@ Methods:
Params Types:
-- kernel.AuthAgentCreateRequestParam
-- kernel.AuthAgentInvocationCreateRequestParam
+- kernel.AuthAgentCreateRequestParam
+- kernel.AuthAgentInvocationCreateRequestParam
Response Types:
-- kernel.AgentAuthInvocationResponse
-- kernel.AgentAuthSubmitResponse
-- kernel.AuthAgent
-- kernel.AuthAgentInvocationCreateResponse
-- kernel.DiscoveredField
+- kernel.AgentAuthInvocationResponse
+- kernel.AgentAuthSubmitResponse
+- kernel.AuthAgent
+- kernel.AuthAgentInvocationCreateResponse
+- kernel.DiscoveredField
Methods:
-- client.Agents.Auth.New(ctx context.Context, body kernel.AgentAuthNewParams) (kernel.AuthAgent, error)
-- client.Agents.Auth.Get(ctx context.Context, id string) (kernel.AuthAgent, error)
-- client.Agents.Auth.List(ctx context.Context, query kernel.AgentAuthListParams) (pagination.OffsetPagination[kernel.AuthAgent], error)
-- client.Agents.Auth.Delete(ctx context.Context, id string) error
+- client.Agents.Auth.New(ctx context.Context, body kernel.AgentAuthNewParams) (kernel.AuthAgent, error)
+- client.Agents.Auth.Get(ctx context.Context, id string) (kernel.AuthAgent, error)
+- client.Agents.Auth.List(ctx context.Context, query kernel.AgentAuthListParams) (pagination.OffsetPagination[kernel.AuthAgent], error)
+- client.Agents.Auth.Delete(ctx context.Context, id string) error
### Invocations
Response Types:
-- kernel.AgentAuthInvocationExchangeResponse
+- kernel.AgentAuthInvocationExchangeResponse
Methods:
-- client.Agents.Auth.Invocations.New(ctx context.Context, body kernel.AgentAuthInvocationNewParams) (kernel.AuthAgentInvocationCreateResponse, error)
-- client.Agents.Auth.Invocations.Get(ctx context.Context, invocationID string) (kernel.AgentAuthInvocationResponse, error)
-- client.Agents.Auth.Invocations.Exchange(ctx context.Context, invocationID string, body kernel.AgentAuthInvocationExchangeParams) (kernel.AgentAuthInvocationExchangeResponse, error)
-- client.Agents.Auth.Invocations.Submit(ctx context.Context, invocationID string, body kernel.AgentAuthInvocationSubmitParams) (kernel.AgentAuthSubmitResponse, error)
+- client.Agents.Auth.Invocations.New(ctx context.Context, body kernel.AgentAuthInvocationNewParams) (kernel.AuthAgentInvocationCreateResponse, error)
+- client.Agents.Auth.Invocations.Get(ctx context.Context, invocationID string) (kernel.AgentAuthInvocationResponse, error)
+- client.Agents.Auth.Invocations.Exchange(ctx context.Context, invocationID string, body kernel.AgentAuthInvocationExchangeParams) (kernel.AgentAuthInvocationExchangeResponse, error)
+- client.Agents.Auth.Invocations.Submit(ctx context.Context, invocationID string, body kernel.AgentAuthInvocationSubmitParams) (kernel.AgentAuthSubmitResponse, error)
# Credentials
Params Types:
-- kernel.CreateCredentialRequestParam
-- kernel.UpdateCredentialRequestParam
+- kernel.CreateCredentialRequestParam
+- kernel.UpdateCredentialRequestParam
Response Types:
-- kernel.Credential
-- kernel.CredentialTotpCodeResponse
+- kernel.Credential
+- kernel.CredentialTotpCodeResponse
Methods:
-- client.Credentials.New(ctx context.Context, body kernel.CredentialNewParams) (kernel.Credential, error)
-- client.Credentials.Get(ctx context.Context, idOrName string) (kernel.Credential, error)
-- client.Credentials.Update(ctx context.Context, idOrName string, body kernel.CredentialUpdateParams) (kernel.Credential, error)
-- client.Credentials.List(ctx context.Context, query kernel.CredentialListParams) (pagination.OffsetPagination[kernel.Credential], error)
-- client.Credentials.Delete(ctx context.Context, idOrName string) error
-- client.Credentials.TotpCode(ctx context.Context, idOrName string) (kernel.CredentialTotpCodeResponse, error)
+- client.Credentials.New(ctx context.Context, body kernel.CredentialNewParams) (kernel.Credential, error)
+- client.Credentials.Get(ctx context.Context, idOrName string) (kernel.Credential, error)
+- client.Credentials.Update(ctx context.Context, idOrName string, body kernel.CredentialUpdateParams) (kernel.Credential, error)
+- client.Credentials.List(ctx context.Context, query kernel.CredentialListParams) (pagination.OffsetPagination[kernel.Credential], error)
+- client.Credentials.Delete(ctx context.Context, idOrName string) error
+- client.Credentials.TotpCode(ctx context.Context, idOrName string) (kernel.CredentialTotpCodeResponse, error)
diff --git a/browser.go b/browser.go
index 0c024cd..c8da385 100644
--- a/browser.go
+++ b/browser.go
@@ -77,6 +77,18 @@ func (r *BrowserService) Get(ctx context.Context, id string, opts ...option.Requ
return
}
+// Update a browser session.
+func (r *BrowserService) Update(ctx context.Context, id string, body BrowserUpdateParams, opts ...option.RequestOption) (res *BrowserUpdateResponse, err error) {
+ opts = slices.Concat(r.Options, opts)
+ if id == "" {
+ err = errors.New("missing required id parameter")
+ return
+ }
+ path := fmt.Sprintf("browsers/%s", id)
+ err = requestconfig.ExecuteNewRequest(ctx, http.MethodPatch, path, body, &res, opts...)
+ return
+}
+
// List all browser sessions with pagination support. Use include_deleted=true to
// include soft-deleted sessions in the results.
func (r *BrowserService) List(ctx context.Context, query BrowserListParams, opts ...option.RequestOption) (res *pagination.OffsetPagination[BrowserListResponse], err error) {
@@ -345,6 +357,69 @@ func (r *BrowserGetResponse) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
+type BrowserUpdateResponse struct {
+ // Websocket URL for Chrome DevTools Protocol connections to the browser session
+ CdpWsURL string `json:"cdp_ws_url,required"`
+ // When the browser session was created.
+ CreatedAt time.Time `json:"created_at,required" format:"date-time"`
+ // Whether the browser session is running in headless mode.
+ Headless bool `json:"headless,required"`
+ // Unique identifier for the browser session
+ SessionID string `json:"session_id,required"`
+ // Whether the browser session is running in stealth mode.
+ Stealth bool `json:"stealth,required"`
+ // The number of seconds of inactivity before the browser session is terminated.
+ TimeoutSeconds int64 `json:"timeout_seconds,required"`
+ // Remote URL for live viewing the browser session. Only available for non-headless
+ // browsers.
+ BrowserLiveViewURL string `json:"browser_live_view_url"`
+ // When the browser session was soft-deleted. Only present for deleted sessions.
+ DeletedAt time.Time `json:"deleted_at" format:"date-time"`
+ // Whether the browser session is running in kiosk mode.
+ KioskMode bool `json:"kiosk_mode"`
+ // DEPRECATED: Use timeout_seconds (up to 72 hours) and Profiles instead.
+ //
+ // Deprecated: deprecated
+ Persistence BrowserPersistence `json:"persistence"`
+ // Browser profile metadata.
+ Profile Profile `json:"profile"`
+ // ID of the proxy associated with this browser session, if any.
+ ProxyID string `json:"proxy_id"`
+ // Initial browser window size in pixels with optional refresh rate. If omitted,
+ // image defaults apply (1920x1080@25). Only specific viewport configurations are
+ // supported. The server will reject unsupported combinations. Supported
+ // resolutions are: 2560x1440@10, 1920x1080@25, 1920x1200@25, 1440x900@25,
+ // 1024x768@60, 1200x800@60 If refresh_rate is not provided, it will be
+ // automatically determined from the width and height if they match a supported
+ // configuration exactly. Note: Higher resolutions may affect the responsiveness of
+ // live view browser
+ Viewport shared.BrowserViewport `json:"viewport"`
+ // JSON contains metadata for fields, check presence with [respjson.Field.Valid].
+ JSON struct {
+ CdpWsURL respjson.Field
+ CreatedAt respjson.Field
+ Headless respjson.Field
+ SessionID respjson.Field
+ Stealth respjson.Field
+ TimeoutSeconds respjson.Field
+ BrowserLiveViewURL respjson.Field
+ DeletedAt respjson.Field
+ KioskMode respjson.Field
+ Persistence respjson.Field
+ Profile respjson.Field
+ ProxyID respjson.Field
+ Viewport respjson.Field
+ ExtraFields map[string]respjson.Field
+ raw string
+ } `json:"-"`
+}
+
+// Returns the unmodified JSON received from the API
+func (r BrowserUpdateResponse) RawJSON() string { return r.JSON.raw }
+func (r *BrowserUpdateResponse) UnmarshalJSON(data []byte) error {
+ return apijson.UnmarshalRoot(data, r)
+}
+
type BrowserListResponse struct {
// Websocket URL for Chrome DevTools Protocol connections to the browser session
CdpWsURL string `json:"cdp_ws_url,required"`
@@ -457,6 +532,21 @@ func (r *BrowserNewParams) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
+type BrowserUpdateParams struct {
+ // ID of the proxy to use. Omit to leave unchanged, set to empty string to remove
+ // proxy.
+ ProxyID param.Opt[string] `json:"proxy_id,omitzero"`
+ paramObj
+}
+
+func (r BrowserUpdateParams) MarshalJSON() (data []byte, err error) {
+ type shadow BrowserUpdateParams
+ return param.MarshalObject(r, (*shadow)(&r))
+}
+func (r *BrowserUpdateParams) UnmarshalJSON(data []byte) error {
+ return apijson.UnmarshalRoot(data, r)
+}
+
type BrowserListParams struct {
// When true, includes soft-deleted browser sessions in the results alongside
// active sessions.
diff --git a/browser_test.go b/browser_test.go
index 137b62f..d0ab6f5 100644
--- a/browser_test.go
+++ b/browser_test.go
@@ -86,6 +86,35 @@ func TestBrowserGet(t *testing.T) {
}
}
+func TestBrowserUpdateWithOptionalParams(t *testing.T) {
+ t.Skip("Prism tests are disabled")
+ baseURL := "http://localhost:4010"
+ if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok {
+ baseURL = envURL
+ }
+ if !testutil.CheckTestServer(t, baseURL) {
+ return
+ }
+ client := kernel.NewClient(
+ option.WithBaseURL(baseURL),
+ option.WithAPIKey("My API Key"),
+ )
+ _, err := client.Browsers.Update(
+ context.TODO(),
+ "htzv5orfit78e1m2biiifpbv",
+ kernel.BrowserUpdateParams{
+ ProxyID: kernel.String("proxy_id"),
+ },
+ )
+ if err != nil {
+ var apierr *kernel.Error
+ if errors.As(err, &apierr) {
+ t.Log(string(apierr.DumpRequest(true)))
+ }
+ t.Fatalf("err should be nil: %s", err.Error())
+ }
+}
+
func TestBrowserListWithOptionalParams(t *testing.T) {
t.Skip("Prism tests are disabled")
baseURL := "http://localhost:4010"
diff --git a/browserprocess.go b/browserprocess.go
index b3df23c..50bbbb4 100644
--- a/browserprocess.go
+++ b/browserprocess.go
@@ -65,6 +65,22 @@ func (r *BrowserProcessService) Kill(ctx context.Context, processID string, para
return
}
+// Resize a PTY-backed process terminal
+func (r *BrowserProcessService) Resize(ctx context.Context, processID string, params BrowserProcessResizeParams, opts ...option.RequestOption) (res *BrowserProcessResizeResponse, err error) {
+ opts = slices.Concat(r.Options, opts)
+ if params.ID == "" {
+ err = errors.New("missing required id parameter")
+ return
+ }
+ if processID == "" {
+ err = errors.New("missing required process_id parameter")
+ return
+ }
+ path := fmt.Sprintf("browsers/%s/process/%s/resize", params.ID, processID)
+ err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, params, &res, opts...)
+ return
+}
+
// Execute a command asynchronously
func (r *BrowserProcessService) Spawn(ctx context.Context, id string, body BrowserProcessSpawnParams, opts ...option.RequestOption) (res *BrowserProcessSpawnResponse, err error) {
opts = slices.Concat(r.Options, opts)
@@ -175,6 +191,24 @@ func (r *BrowserProcessKillResponse) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
+// Generic OK response.
+type BrowserProcessResizeResponse struct {
+ // Indicates success.
+ Ok bool `json:"ok,required"`
+ // JSON contains metadata for fields, check presence with [respjson.Field.Valid].
+ JSON struct {
+ Ok respjson.Field
+ ExtraFields map[string]respjson.Field
+ raw string
+ } `json:"-"`
+}
+
+// Returns the unmodified JSON received from the API
+func (r BrowserProcessResizeResponse) RawJSON() string { return r.JSON.raw }
+func (r *BrowserProcessResizeResponse) UnmarshalJSON(data []byte) error {
+ return apijson.UnmarshalRoot(data, r)
+}
+
// Information about a spawned process.
type BrowserProcessSpawnResponse struct {
// OS process ID.
@@ -353,6 +387,23 @@ const (
BrowserProcessKillParamsSignalHup BrowserProcessKillParamsSignal = "HUP"
)
+type BrowserProcessResizeParams struct {
+ ID string `path:"id,required" json:"-"`
+ // New terminal columns.
+ Cols int64 `json:"cols,required"`
+ // New terminal rows.
+ Rows int64 `json:"rows,required"`
+ paramObj
+}
+
+func (r BrowserProcessResizeParams) MarshalJSON() (data []byte, err error) {
+ type shadow BrowserProcessResizeParams
+ return param.MarshalObject(r, (*shadow)(&r))
+}
+func (r *BrowserProcessResizeParams) UnmarshalJSON(data []byte) error {
+ return apijson.UnmarshalRoot(data, r)
+}
+
type BrowserProcessSpawnParams struct {
// Executable or shell command to run.
Command string `json:"command,required"`
@@ -362,8 +413,14 @@ type BrowserProcessSpawnParams struct {
Cwd param.Opt[string] `json:"cwd,omitzero"`
// Maximum execution time in seconds.
TimeoutSec param.Opt[int64] `json:"timeout_sec,omitzero"`
+ // Allocate a pseudo-terminal (PTY) for interactive shells.
+ AllocateTty param.Opt[bool] `json:"allocate_tty,omitzero"`
// Run the process with root privileges.
AsRoot param.Opt[bool] `json:"as_root,omitzero"`
+ // Initial terminal columns. Only used when allocate_tty is true.
+ Cols param.Opt[int64] `json:"cols,omitzero"`
+ // Initial terminal rows. Only used when allocate_tty is true.
+ Rows param.Opt[int64] `json:"rows,omitzero"`
// Command arguments.
Args []string `json:"args,omitzero"`
// Environment variables to set for the process.
diff --git a/browserprocess_test.go b/browserprocess_test.go
index b6ca67d..1e5ecf2 100644
--- a/browserprocess_test.go
+++ b/browserprocess_test.go
@@ -80,6 +80,37 @@ func TestBrowserProcessKill(t *testing.T) {
}
}
+func TestBrowserProcessResize(t *testing.T) {
+ t.Skip("Prism tests are disabled")
+ baseURL := "http://localhost:4010"
+ if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok {
+ baseURL = envURL
+ }
+ if !testutil.CheckTestServer(t, baseURL) {
+ return
+ }
+ client := kernel.NewClient(
+ option.WithBaseURL(baseURL),
+ option.WithAPIKey("My API Key"),
+ )
+ _, err := client.Browsers.Process.Resize(
+ context.TODO(),
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ kernel.BrowserProcessResizeParams{
+ ID: "id",
+ Cols: 1,
+ Rows: 1,
+ },
+ )
+ if err != nil {
+ var apierr *kernel.Error
+ if errors.As(err, &apierr) {
+ t.Log(string(apierr.DumpRequest(true)))
+ }
+ t.Fatalf("err should be nil: %s", err.Error())
+ }
+}
+
func TestBrowserProcessSpawnWithOptionalParams(t *testing.T) {
t.Skip("Prism tests are disabled")
baseURL := "http://localhost:4010"
@@ -97,14 +128,17 @@ func TestBrowserProcessSpawnWithOptionalParams(t *testing.T) {
context.TODO(),
"id",
kernel.BrowserProcessSpawnParams{
- Command: "command",
- Args: []string{"string"},
- AsRoot: kernel.Bool(true),
- AsUser: kernel.String("as_user"),
- Cwd: kernel.String("/J!"),
+ Command: "command",
+ AllocateTty: kernel.Bool(true),
+ Args: []string{"string"},
+ AsRoot: kernel.Bool(true),
+ AsUser: kernel.String("as_user"),
+ Cols: kernel.Int(1),
+ Cwd: kernel.String("/J!"),
Env: map[string]string{
"foo": "string",
},
+ Rows: kernel.Int(1),
TimeoutSec: kernel.Int(0),
},
)
diff --git a/proxy.go b/proxy.go
index 628f7d7..0cd6e66 100644
--- a/proxy.go
+++ b/proxy.go
@@ -100,6 +100,8 @@ type ProxyNewResponse struct {
ID string `json:"id"`
// Configuration specific to the selected proxy `type`.
Config ProxyNewResponseConfigUnion `json:"config"`
+ // IP address that the proxy uses when making requests.
+ IPAddress string `json:"ip_address"`
// Timestamp of the last health check performed on this proxy.
LastChecked time.Time `json:"last_checked" format:"date-time"`
// Readable name of the proxy.
@@ -117,6 +119,7 @@ type ProxyNewResponse struct {
Type respjson.Field
ID respjson.Field
Config respjson.Field
+ IPAddress respjson.Field
LastChecked respjson.Field
Name respjson.Field
Protocol respjson.Field
@@ -388,6 +391,8 @@ type ProxyGetResponse struct {
ID string `json:"id"`
// Configuration specific to the selected proxy `type`.
Config ProxyGetResponseConfigUnion `json:"config"`
+ // IP address that the proxy uses when making requests.
+ IPAddress string `json:"ip_address"`
// Timestamp of the last health check performed on this proxy.
LastChecked time.Time `json:"last_checked" format:"date-time"`
// Readable name of the proxy.
@@ -405,6 +410,7 @@ type ProxyGetResponse struct {
Type respjson.Field
ID respjson.Field
Config respjson.Field
+ IPAddress respjson.Field
LastChecked respjson.Field
Name respjson.Field
Protocol respjson.Field
@@ -676,6 +682,8 @@ type ProxyListResponse struct {
ID string `json:"id"`
// Configuration specific to the selected proxy `type`.
Config ProxyListResponseConfigUnion `json:"config"`
+ // IP address that the proxy uses when making requests.
+ IPAddress string `json:"ip_address"`
// Timestamp of the last health check performed on this proxy.
LastChecked time.Time `json:"last_checked" format:"date-time"`
// Readable name of the proxy.
@@ -693,6 +701,7 @@ type ProxyListResponse struct {
Type respjson.Field
ID respjson.Field
Config respjson.Field
+ IPAddress respjson.Field
LastChecked respjson.Field
Name respjson.Field
Protocol respjson.Field
@@ -964,6 +973,8 @@ type ProxyCheckResponse struct {
ID string `json:"id"`
// Configuration specific to the selected proxy `type`.
Config ProxyCheckResponseConfigUnion `json:"config"`
+ // IP address that the proxy uses when making requests.
+ IPAddress string `json:"ip_address"`
// Timestamp of the last health check performed on this proxy.
LastChecked time.Time `json:"last_checked" format:"date-time"`
// Readable name of the proxy.
@@ -981,6 +992,7 @@ type ProxyCheckResponse struct {
Type respjson.Field
ID respjson.Field
Config respjson.Field
+ IPAddress respjson.Field
LastChecked respjson.Field
Name respjson.Field
Protocol respjson.Field