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.147.0"
".": "0.148.0"
}
2 changes: 1 addition & 1 deletion .stats.yml
Original file line number Diff line number Diff line change
@@ -1 +1 @@
configured_endpoints: 178
configured_endpoints: 179
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
# Changelog

## [0.148.0](https://github.com/kernel/kernel-go-sdk/compare/v0.147.0...v0.148.0) (2026-11-12)


### Features

* Add scoped live view URLs ([af02011](https://github.com/kernel/kernel-go-sdk/commit/af02011057b49e8e3f4899c43ecba7f6a18b27b2))
* Pace 1Password status checks on the partner schedule ([af02011](https://github.com/kernel/kernel-go-sdk/commit/af02011057b49e8e3f4899c43ecba7f6a18b27b2))
* Return the 1Password access request reference on the approval action ([af02011](https://github.com/kernel/kernel-go-sdk/commit/af02011057b49e8e3f4899c43ecba7f6a18b27b2))

## [0.147.0](https://github.com/kernel/kernel-go-sdk/compare/v0.146.0...v0.147.0) (2026-11-12)


Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ Or to pin the version:
<!-- x-release-please-start-version -->

```sh
go get -u 'github.com/kernel/kernel-go-sdk@v0.147.0'
go get -u 'github.com/kernel/kernel-go-sdk@v0.148.0'
```

<!-- x-release-please-end -->
Expand Down
16 changes: 16 additions & 0 deletions api.md
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,22 @@ Methods:
- <code title="get /browsers/{id_or_name}/telemetry/events">client.Browsers.Telemetry.<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk#BrowserTelemetryService.Events">Events</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, idOrName <a href="https://pkg.go.dev/builtin#string">string</a>, query <a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk">kernel</a>.<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk#BrowserTelemetryEventsParams">BrowserTelemetryEventsParams</a>) (\*<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk/packages/pagination">pagination</a>.<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk/packages/pagination#OffsetPagination">OffsetPagination</a>[<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk">kernel</a>.<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk#BrowserTelemetryEventsResponse">BrowserTelemetryEventsResponse</a>], <a href="https://pkg.go.dev/builtin#error">error</a>)</code>
- <code title="get /browsers/{id_or_name}/telemetry/stream">client.Browsers.Telemetry.<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk#BrowserTelemetryService.Stream">Stream</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, idOrName <a href="https://pkg.go.dev/builtin#string">string</a>, params <a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk">kernel</a>.<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk#BrowserTelemetryStreamParams">BrowserTelemetryStreamParams</a>) (\*<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk">kernel</a>.<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk#BrowserTelemetryStreamResponse">BrowserTelemetryStreamResponse</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code>

## LiveView

Params Types:

- <a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk">kernel</a>.<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk#BrowserLiveViewRequestParam">BrowserLiveViewRequestParam</a>
- <a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk">kernel</a>.<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk#BrowserLiveViewScope">BrowserLiveViewScope</a>

Response Types:

- <a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk">kernel</a>.<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk#BrowserLiveView">BrowserLiveView</a>
- <a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk">kernel</a>.<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk#BrowserLiveViewScope">BrowserLiveViewScope</a>

Methods:

- <code title="post /browsers/{id_or_name}/live_view">client.Browsers.LiveView.<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk#BrowserLiveViewService.New">New</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, idOrName <a href="https://pkg.go.dev/builtin#string">string</a>, body <a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk">kernel</a>.<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk#BrowserLiveViewNewParams">BrowserLiveViewNewParams</a>) (\*<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk">kernel</a>.<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk#BrowserLiveView">BrowserLiveView</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code>

## Replays

Response Types:
Expand Down
3 changes: 3 additions & 0 deletions browser.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ type BrowserService struct {
// Stream live telemetry events from a browser session, and manage the destinations
// sessions export them to.
Telemetry BrowserTelemetryService
// Create and manage browser sessions.
LiveView BrowserLiveViewService
// Record and manage browser session video replays.
Replays BrowserReplayService
// Read, write, and manage files on the browser instance.
Expand All @@ -62,6 +64,7 @@ func NewBrowserService(opts ...option.RequestOption) (r BrowserService) {
r = BrowserService{}
r.Options = opts
r.Telemetry = NewBrowserTelemetryService(opts...)
r.LiveView = NewBrowserLiveViewService(opts...)
r.Replays = NewBrowserReplayService(opts...)
r.Fs = NewBrowserFService(opts...)
r.Process = NewBrowserProcessService(opts...)
Expand Down
125 changes: 125 additions & 0 deletions browserliveview.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.

package kernel

import (
"context"
"errors"
"fmt"
"net/http"
"slices"
"time"

"github.com/kernel/kernel-go-sdk/internal/apijson"
shimjson "github.com/kernel/kernel-go-sdk/internal/encoding/json"
"github.com/kernel/kernel-go-sdk/internal/requestconfig"
"github.com/kernel/kernel-go-sdk/option"
"github.com/kernel/kernel-go-sdk/packages/param"
"github.com/kernel/kernel-go-sdk/packages/respjson"
)

// Create and manage browser sessions.
//
// BrowserLiveViewService contains methods and other services that help with
// interacting with the kernel API.
//
// Note, unlike clients, this service does not read variables from the environment
// automatically. You should not instantiate this service directly, and instead use
// the [NewBrowserLiveViewService] method instead.
type BrowserLiveViewService struct {
Options []option.RequestOption
}

// NewBrowserLiveViewService generates a new service that applies the given options
// to each request. These options are applied after the parent client's options (if
// there is one), and before any request-specific options.
func NewBrowserLiveViewService(opts ...option.RequestOption) (r BrowserLiveViewService) {
r = BrowserLiveViewService{}
r.Options = opts
return
}

// Creates a live view URL for a headful browser that grants either read-only or
// control access. The URL works only for the live view: it cannot connect to CDP,
// WebDriver, or any other browser endpoint. A read-only URL shows the browser but
// cannot send input, regardless of query parameters. The URL stays valid until the
// browser is deleted, or until `ttl_seconds` elapse when set. For a browser
// acquired from a pool, it stops working when the browser is released. Nothing is
// stored, so a URL cannot be revoked before then.
func (r *BrowserLiveViewService) New(ctx context.Context, idOrName string, body BrowserLiveViewNewParams, opts ...option.RequestOption) (res *BrowserLiveView, err error) {
opts = slices.Concat(r.Options, opts)
if idOrName == "" {
err = errors.New("missing required id_or_name parameter")
return nil, err
}
path := fmt.Sprintf("browsers/%s/live_view", idOrName)
err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, body, &res, opts...)
return res, err
}

type BrowserLiveView struct {
// `read` shows the browser without accepting input. `control` also lets the viewer
// drive the browser through the live view.
//
// Any of "read", "control".
Scope BrowserLiveViewScope `json:"scope" api:"required"`
// Live view URL. Treat it as a credential.
URL string `json:"url" api:"required"`
// When the URL expires. Absent when it stays valid until the browser is deleted.
ExpiresAt time.Time `json:"expires_at" format:"date-time"`
// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
JSON struct {
Scope respjson.Field
URL respjson.Field
ExpiresAt respjson.Field
ExtraFields map[string]respjson.Field
raw string
} `json:"-"`
}

// Returns the unmodified JSON received from the API
func (r BrowserLiveView) RawJSON() string { return r.JSON.raw }
func (r *BrowserLiveView) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}

type BrowserLiveViewRequestParam struct {
// Seconds until the URL expires. Omit to keep it valid until the browser is
// deleted.
TtlSeconds param.Opt[int64] `json:"ttl_seconds,omitzero"`
// `read` shows the browser without accepting input. `control` also lets the viewer
// drive the browser through the live view.
//
// Any of "read", "control".
Scope BrowserLiveViewScope `json:"scope,omitzero"`
paramObj
}

func (r BrowserLiveViewRequestParam) MarshalJSON() (data []byte, err error) {
type shadow BrowserLiveViewRequestParam
return param.MarshalObject(r, (*shadow)(&r))
}
func (r *BrowserLiveViewRequestParam) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}

// `read` shows the browser without accepting input. `control` also lets the viewer
// drive the browser through the live view.
type BrowserLiveViewScope string

const (
BrowserLiveViewScopeRead BrowserLiveViewScope = "read"
BrowserLiveViewScopeControl BrowserLiveViewScope = "control"
)

type BrowserLiveViewNewParams struct {
BrowserLiveViewRequest BrowserLiveViewRequestParam
paramObj
}

func (r BrowserLiveViewNewParams) MarshalJSON() (data []byte, err error) {
return shimjson.Marshal(r.BrowserLiveViewRequest)
}
func (r *BrowserLiveViewNewParams) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
46 changes: 46 additions & 0 deletions browserliveview_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.

package kernel_test

import (
"context"
"errors"
"os"
"testing"

"github.com/kernel/kernel-go-sdk"
"github.com/kernel/kernel-go-sdk/internal/testutil"
"github.com/kernel/kernel-go-sdk/option"
)

func TestBrowserLiveViewNewWithOptionalParams(t *testing.T) {
t.Skip("Mock server 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.LiveView.New(
context.TODO(),
"htzv5orfit78e1m2biiifpbv",
kernel.BrowserLiveViewNewParams{
BrowserLiveViewRequest: kernel.BrowserLiveViewRequestParam{
Scope: kernel.BrowserLiveViewScopeRead,
TtlSeconds: kernel.Int(3600),
},
},
)
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())
}
}
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.147.0" // x-release-please-version
const PackageVersion = "0.148.0" // x-release-please-version
Loading
Loading