Skip to content
Merged
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 @@
{
".": "0.7.0"
".": "0.7.1"
}
8 changes: 4 additions & 4 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 17
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel%2Fkernel-3ec96d0022acb32aa2676c2e7ae20152b899a776ccd499380c334c955b9ba071.yml
openapi_spec_hash: b64c095d82185c1cd0355abea88b606f
config_hash: 00ec9df250b9dc077f8d3b93a442d252
configured_endpoints: 18
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel%2Fkernel-d173129101e26f450c200e84430d993479c034700cf826917425d513b88912e6.yml
openapi_spec_hash: 150b86da7588979d7619b1a894e4720c
config_hash: eaeed470b1070b34df69c49d68e67355
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,18 @@
# Changelog

## 0.7.1 (2025-07-08)

Full Changelog: [v0.7.0...v0.7.1](https://github.com/onkernel/kernel-go-sdk/compare/v0.7.0...v0.7.1)

### Features

* **api:** manual updates ([2162b0a](https://github.com/onkernel/kernel-go-sdk/commit/2162b0a2396b520acf176b8622b8728e51f8787d))


### Chores

* lint tests ([29d98ac](https://github.com/onkernel/kernel-go-sdk/commit/29d98ac8ec7d9fe704d07ac0bce4b60d0f2ed121))

## 0.7.0 (2025-07-02)

Full Changelog: [v0.6.5...v0.7.0](https://github.com/onkernel/kernel-go-sdk/compare/v0.6.5...v0.7.0)
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ Or to pin the version:
<!-- x-release-please-start-version -->

```sh
go get -u 'github.com/onkernel/kernel-go-sdk@v0.7.0'
go get -u 'github.com/onkernel/kernel-go-sdk@v0.7.1'
```

<!-- x-release-please-end -->
Expand Down
1 change: 1 addition & 0 deletions api.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,3 +84,4 @@ Methods:
- <code title="get /browsers">client.Browsers.<a href="https://pkg.go.dev/github.com/onkernel/kernel-go-sdk#BrowserService.List">List</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>) ([]<a href="https://pkg.go.dev/github.com/onkernel/kernel-go-sdk">kernel</a>.<a href="https://pkg.go.dev/github.com/onkernel/kernel-go-sdk#BrowserListResponse">BrowserListResponse</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code>
- <code title="delete /browsers">client.Browsers.<a href="https://pkg.go.dev/github.com/onkernel/kernel-go-sdk#BrowserService.Delete">Delete</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, body <a href="https://pkg.go.dev/github.com/onkernel/kernel-go-sdk">kernel</a>.<a href="https://pkg.go.dev/github.com/onkernel/kernel-go-sdk#BrowserDeleteParams">BrowserDeleteParams</a>) <a href="https://pkg.go.dev/builtin#error">error</a></code>
- <code title="delete /browsers/{id}">client.Browsers.<a href="https://pkg.go.dev/github.com/onkernel/kernel-go-sdk#BrowserService.DeleteByID">DeleteByID</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, id <a href="https://pkg.go.dev/builtin#string">string</a>) <a href="https://pkg.go.dev/builtin#error">error</a></code>
- <code title="get /browsers/{id}/replay">client.Browsers.<a href="https://pkg.go.dev/github.com/onkernel/kernel-go-sdk#BrowserService.GetReplay">GetReplay</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, id <a href="https://pkg.go.dev/builtin#string">string</a>) (http.Response, <a href="https://pkg.go.dev/builtin#error">error</a>)</code>
24 changes: 24 additions & 0 deletions browser.go
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,19 @@ func (r *BrowserService) DeleteByID(ctx context.Context, id string, opts ...opti
return
}

// Get browser session replay.
func (r *BrowserService) GetReplay(ctx context.Context, id string, opts ...option.RequestOption) (res *http.Response, err error) {
opts = append(r.Options[:], opts...)
opts = append([]option.RequestOption{option.WithHeader("Accept", "video/mp4")}, opts...)
if id == "" {
err = errors.New("missing required id parameter")
return
}
path := fmt.Sprintf("browsers/%s/replay", id)
err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, nil, &res, opts...)
return
}

// Optional persistence configuration for the browser session.
type BrowserPersistence struct {
// Unique identifier for the persistent browser session.
Expand Down Expand Up @@ -141,12 +154,15 @@ type BrowserNewResponse struct {
BrowserLiveViewURL string `json:"browser_live_view_url"`
// Optional persistence configuration for the browser session.
Persistence BrowserPersistence `json:"persistence"`
// Remote URL for viewing the browser session replay if enabled
ReplayViewURL string `json:"replay_view_url"`
// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
JSON struct {
CdpWsURL respjson.Field
SessionID respjson.Field
BrowserLiveViewURL respjson.Field
Persistence respjson.Field
ReplayViewURL respjson.Field
ExtraFields map[string]respjson.Field
raw string
} `json:"-"`
Expand All @@ -168,12 +184,15 @@ type BrowserGetResponse struct {
BrowserLiveViewURL string `json:"browser_live_view_url"`
// Optional persistence configuration for the browser session.
Persistence BrowserPersistence `json:"persistence"`
// Remote URL for viewing the browser session replay if enabled
ReplayViewURL string `json:"replay_view_url"`
// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
JSON struct {
CdpWsURL respjson.Field
SessionID respjson.Field
BrowserLiveViewURL respjson.Field
Persistence respjson.Field
ReplayViewURL respjson.Field
ExtraFields map[string]respjson.Field
raw string
} `json:"-"`
Expand All @@ -195,12 +214,15 @@ type BrowserListResponse struct {
BrowserLiveViewURL string `json:"browser_live_view_url"`
// Optional persistence configuration for the browser session.
Persistence BrowserPersistence `json:"persistence"`
// Remote URL for viewing the browser session replay if enabled
ReplayViewURL string `json:"replay_view_url"`
// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
JSON struct {
CdpWsURL respjson.Field
SessionID respjson.Field
BrowserLiveViewURL respjson.Field
Persistence respjson.Field
ReplayViewURL respjson.Field
ExtraFields map[string]respjson.Field
raw string
} `json:"-"`
Expand All @@ -218,6 +240,8 @@ type BrowserNewParams struct {
Headless param.Opt[bool] `json:"headless,omitzero"`
// action invocation ID
InvocationID param.Opt[string] `json:"invocation_id,omitzero"`
// If true, enables replay recording of the browser session. Defaults to false.
Replay param.Opt[bool] `json:"replay,omitzero"`
// If true, launches the browser in stealth mode to reduce detection by anti-bot
// mechanisms.
Stealth param.Opt[bool] `json:"stealth,omitzero"`
Expand Down
40 changes: 40 additions & 0 deletions browser_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,12 @@
package kernel_test

import (
"bytes"
"context"
"errors"
"io"
"net/http"
"net/http/httptest"
"os"
"testing"

Expand Down Expand Up @@ -32,6 +36,7 @@ func TestBrowserNewWithOptionalParams(t *testing.T) {
Persistence: kernel.BrowserPersistenceParam{
ID: "my-awesome-browser-for-user-1234",
},
Replay: kernel.Bool(true),
Stealth: kernel.Bool(true),
})
if err != nil {
Expand Down Expand Up @@ -136,3 +141,38 @@ func TestBrowserDeleteByID(t *testing.T) {
t.Fatalf("err should be nil: %s", err.Error())
}
}

func TestBrowserGetReplay(t *testing.T) {
t.Skip("skipped: tests are disabled for the time being")
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(200)
w.Write([]byte("abc"))
}))
defer server.Close()
baseURL := server.URL
client := kernel.NewClient(
option.WithBaseURL(baseURL),
option.WithAPIKey("My API Key"),
)
resp, err := client.Browsers.GetReplay(context.TODO(), "htzv5orfit78e1m2biiifpbv")
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())
}
defer resp.Body.Close()

b, err := io.ReadAll(resp.Body)
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())
}
if !bytes.Equal(b, []byte("abc")) {
t.Fatalf("return value not %s: %s", "abc", b)
}
}
2 changes: 1 addition & 1 deletion internal/version.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@

package internal

const PackageVersion = "0.7.0" // x-release-please-version
const PackageVersion = "0.7.1" // x-release-please-version
5 changes: 4 additions & 1 deletion scripts/lint
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,7 @@ set -e
cd "$(dirname "$0")/.."

echo "==> Running Go build"
go build ./...
go build .

# Compile the tests but don't run them
go test -c .