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.89.0"
".": "0.90.0"
}
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
# Changelog

## [0.90.0](https://github.com/kernel/kernel-go-sdk/compare/v0.89.0...v0.90.0) (2026-08-12)


### Features

* Preserve canonical managed auth input metadata ([6a142ab](https://github.com/kernel/kernel-go-sdk/commit/6a142ab834fe7714d460b5507795546144b3c114))
* Support project selection by ID or name ([79d4c5c](https://github.com/kernel/kernel-go-sdk/commit/79d4c5c4ab915159c0536019ea1504576a9c26f4))

## [0.89.0](https://github.com/kernel/kernel-go-sdk/compare/v0.88.0...v0.89.0) (2026-08-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.89.0'
go get -u 'github.com/kernel/kernel-go-sdk@v0.90.0'
```

<!-- x-release-please-end -->
Expand Down
10 changes: 5 additions & 5 deletions api.md
Original file line number Diff line number Diff line change
Expand Up @@ -409,10 +409,10 @@ Response Types:
Methods:

- <code title="post /org/projects">client.Projects.<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk#ProjectService.New">New</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/kernel/kernel-go-sdk">kernel</a>.<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk#ProjectNewParams">ProjectNewParams</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#Project">Project</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code>
- <code title="get /org/projects/{id}">client.Projects.<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk#ProjectService.Get">Get</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/github.com/kernel/kernel-go-sdk">kernel</a>.<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk#Project">Project</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code>
- <code title="patch /org/projects/{id}">client.Projects.<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk#ProjectService.Update">Update</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>, 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#ProjectUpdateParams">ProjectUpdateParams</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#Project">Project</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code>
- <code title="get /org/projects/{id_or_name}">client.Projects.<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk#ProjectService.Get">Get</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>) (\*<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#Project">Project</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code>
- <code title="patch /org/projects/{id_or_name}">client.Projects.<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk#ProjectService.Update">Update</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#ProjectUpdateParams">ProjectUpdateParams</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#Project">Project</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code>
- <code title="get /org/projects">client.Projects.<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk#ProjectService.List">List</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</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#ProjectListParams">ProjectListParams</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#Project">Project</a>], <a href="https://pkg.go.dev/builtin#error">error</a>)</code>
- <code title="delete /org/projects/{id}">client.Projects.<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk#ProjectService.Delete">Delete</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="delete /org/projects/{id_or_name}">client.Projects.<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk#ProjectService.Delete">Delete</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>) <a href="https://pkg.go.dev/builtin#error">error</a></code>

## Limits

Expand All @@ -426,8 +426,8 @@ Response Types:

Methods:

- <code title="get /org/projects/{id}/limits">client.Projects.Limits.<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk#ProjectLimitService.Get">Get</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/github.com/kernel/kernel-go-sdk">kernel</a>.<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk#ProjectLimits">ProjectLimits</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code>
- <code title="patch /org/projects/{id}/limits">client.Projects.Limits.<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk#ProjectLimitService.Update">Update</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>, 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#ProjectLimitUpdateParams">ProjectLimitUpdateParams</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#ProjectLimits">ProjectLimits</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code>
- <code title="get /org/projects/{id_or_name}/limits">client.Projects.Limits.<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk#ProjectLimitService.Get">Get</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>) (\*<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#ProjectLimits">ProjectLimits</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code>
- <code title="patch /org/projects/{id_or_name}/limits">client.Projects.Limits.<a href="https://pkg.go.dev/github.com/kernel/kernel-go-sdk#ProjectLimitService.Update">Update</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#ProjectLimitUpdateParams">ProjectLimitUpdateParams</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#ProjectLimits">ProjectLimits</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code>

# Organization

Expand Down
66 changes: 52 additions & 14 deletions authconnection.go
Original file line number Diff line number Diff line change
Expand Up @@ -666,19 +666,35 @@ type ManagedAuthChoice struct {
// Any of "mfa_method", "sso_provider", "sign_in_method", "auth_method",
// "identifier_method", "account", "other".
Type string `json:"type" api:"required"`
// Context captured for a choice.
Context string `json:"context" api:"nullable"`
// Additional context for the choice.
Description string `json:"description" api:"nullable"`
// Display text captured for a choice.
DisplayText string `json:"display_text" api:"nullable"`
// Masked phone number or email address shown for an MFA choice.
MaskedDestination string `json:"masked_destination" api:"nullable"`
// Semantic MFA method. Choice id remains the stable identity of the exact option
// selected.
//
// Any of "sms", "call", "email", "totp", "push", "password", "passkey", "switch",
// "other".
MfaType string `json:"mfa_type" api:"nullable"`
// Selector for the visible choice, when available.
ObservedSelector string `json:"observed_selector" api:"nullable"`
// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
JSON struct {
ID respjson.Field
Label respjson.Field
Type respjson.Field
Description respjson.Field
ObservedSelector respjson.Field
ExtraFields map[string]respjson.Field
raw string
ID respjson.Field
Label respjson.Field
Type respjson.Field
Context respjson.Field
Description respjson.Field
DisplayText respjson.Field
MaskedDestination respjson.Field
MfaType respjson.Field
ObservedSelector respjson.Field
ExtraFields map[string]respjson.Field
raw string
} `json:"-"`
}

Expand Down Expand Up @@ -774,6 +790,8 @@ type ManagedAuthField struct {
//
// Any of "identifier", "password", "code", "totp_code", "totp_secret", "text".
Type string `json:"type" api:"required"`
// Context shown near the field, including a masked code destination.
Hint string `json:"hint"`
// Human-readable label shown to the user.
Label string `json:"label"`
// Selector for the visible field, when available.
Expand All @@ -788,6 +806,7 @@ type ManagedAuthField struct {
ID respjson.Field
Ref respjson.Field
Type respjson.Field
Hint respjson.Field
Label respjson.Field
ObservedSelector respjson.Field
ReplaceExisting respjson.Field
Expand Down Expand Up @@ -1970,19 +1989,35 @@ type AuthConnectionFollowResponseManagedAuthStateChoice struct {
// Any of "mfa_method", "sso_provider", "sign_in_method", "auth_method",
// "identifier_method", "account", "other".
Type string `json:"type" api:"required"`
// Context captured for a choice.
Context string `json:"context" api:"nullable"`
// Additional context for the choice.
Description string `json:"description" api:"nullable"`
// Display text captured for a choice.
DisplayText string `json:"display_text" api:"nullable"`
// Masked phone number or email address shown for an MFA choice.
MaskedDestination string `json:"masked_destination" api:"nullable"`
// Semantic MFA method. Choice id remains the stable identity of the exact option
// selected.
//
// Any of "sms", "call", "email", "totp", "push", "password", "passkey", "switch",
// "other".
MfaType string `json:"mfa_type" api:"nullable"`
// Selector for the visible choice, when available.
ObservedSelector string `json:"observed_selector" api:"nullable"`
// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
JSON struct {
ID respjson.Field
Label respjson.Field
Type respjson.Field
Description respjson.Field
ObservedSelector respjson.Field
ExtraFields map[string]respjson.Field
raw string
ID respjson.Field
Label respjson.Field
Type respjson.Field
Context respjson.Field
Description respjson.Field
DisplayText respjson.Field
MaskedDestination respjson.Field
MfaType respjson.Field
ObservedSelector respjson.Field
ExtraFields map[string]respjson.Field
raw string
} `json:"-"`
}

Expand Down Expand Up @@ -2049,6 +2084,8 @@ type AuthConnectionFollowResponseManagedAuthStateField struct {
//
// Any of "identifier", "password", "code", "totp_code", "totp_secret", "text".
Type string `json:"type" api:"required"`
// Context shown near the field, including a masked code destination.
Hint string `json:"hint"`
// Human-readable label shown to the user.
Label string `json:"label"`
// Selector for the visible field, when available.
Expand All @@ -2063,6 +2100,7 @@ type AuthConnectionFollowResponseManagedAuthStateField struct {
ID respjson.Field
Ref respjson.Field
Type respjson.Field
Hint respjson.Field
Label respjson.Field
ObservedSelector respjson.Field
ReplaceExisting respjson.Field
Expand Down
2 changes: 2 additions & 0 deletions internal/requestconfig/requestconfig.go
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,7 @@ type RequestConfig struct {
Middlewares []middleware
APIKey string
ProjectID string
Project string
// If ResponseBodyInto not nil, then we will attempt to deserialize into
// ResponseBodyInto. If Destination is a []byte, then it will return the body as
// is.
Expand Down Expand Up @@ -595,6 +596,7 @@ func (cfg *RequestConfig) Clone(ctx context.Context) *RequestConfig {
Middlewares: cfg.Middlewares,
APIKey: cfg.APIKey,
ProjectID: cfg.ProjectID,
Project: cfg.Project,
}

return new
Expand Down
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.89.0" // x-release-please-version
const PackageVersion = "0.90.0" // x-release-please-version
8 changes: 8 additions & 0 deletions option/requestoption.go
Original file line number Diff line number Diff line change
Expand Up @@ -288,3 +288,11 @@ func WithProjectID(value string) RequestOption {
return r.Apply(WithHeader("X-Kernel-Project-Id", value))
})
}

// WithProject returns a RequestOption that sets the client setting "project".
func WithProject(value string) RequestOption {
return requestconfig.RequestOptionFunc(func(r *requestconfig.RequestConfig) error {
r.Project = value
return r.Apply(WithHeader("X-Kernel-Project", value))
})
}
28 changes: 14 additions & 14 deletions project.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,25 +58,25 @@ func (r *ProjectService) New(ctx context.Context, body ProjectNewParams, opts ..
}

// Get a project by its ID or by its name. Names are unique within an organization.
func (r *ProjectService) Get(ctx context.Context, id string, opts ...option.RequestOption) (res *Project, err error) {
func (r *ProjectService) Get(ctx context.Context, idOrName string, opts ...option.RequestOption) (res *Project, err error) {
opts = slices.Concat(r.Options, opts)
if id == "" {
err = errors.New("missing required id parameter")
if idOrName == "" {
err = errors.New("missing required id_or_name parameter")
return nil, err
}
path := fmt.Sprintf("org/projects/%s", id)
path := fmt.Sprintf("org/projects/%s", idOrName)
err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, nil, &res, opts...)
return res, err
}

// Update a project's name or status.
func (r *ProjectService) Update(ctx context.Context, id string, body ProjectUpdateParams, opts ...option.RequestOption) (res *Project, err error) {
func (r *ProjectService) Update(ctx context.Context, idOrName string, body ProjectUpdateParams, opts ...option.RequestOption) (res *Project, err error) {
opts = slices.Concat(r.Options, opts)
if id == "" {
err = errors.New("missing required id parameter")
if idOrName == "" {
err = errors.New("missing required id_or_name parameter")
return nil, err
}
path := fmt.Sprintf("org/projects/%s", id)
path := fmt.Sprintf("org/projects/%s", idOrName)
err = requestconfig.ExecuteNewRequest(ctx, http.MethodPatch, path, body, &res, opts...)
return res, err
}
Expand Down Expand Up @@ -105,21 +105,21 @@ func (r *ProjectService) ListAutoPaging(ctx context.Context, query ProjectListPa
}

// Soft-delete a project. The project must be empty (no active resources).
func (r *ProjectService) Delete(ctx context.Context, id string, opts ...option.RequestOption) (err error) {
func (r *ProjectService) Delete(ctx context.Context, idOrName string, opts ...option.RequestOption) (err error) {
opts = slices.Concat(r.Options, opts)
opts = append([]option.RequestOption{option.WithHeader("Accept", "*/*")}, opts...)
if id == "" {
err = errors.New("missing required id parameter")
if idOrName == "" {
err = errors.New("missing required id_or_name parameter")
return err
}
path := fmt.Sprintf("org/projects/%s", id)
path := fmt.Sprintf("org/projects/%s", idOrName)
err = requestconfig.ExecuteNewRequest(ctx, http.MethodDelete, path, nil, nil, opts...)
return err
}

// The property Name is required.
type CreateProjectRequestParam struct {
// Project name (1-255 Unicode code points)
// Project name (1-255 Unicode code points; cannot contain `/` or `%`)
Name string `json:"name" api:"required"`
paramObj
}
Expand Down Expand Up @@ -172,7 +172,7 @@ const (
)

type UpdateProjectRequestParam struct {
// New project name (1-255 Unicode code points)
// New project name (1-255 Unicode code points; cannot contain `/` or `%`)
Name param.Opt[string] `json:"name,omitzero"`
// New project status
//
Expand Down
6 changes: 3 additions & 3 deletions project_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ func TestProjectGet(t *testing.T) {
option.WithBaseURL(baseURL),
option.WithAPIKey("My API Key"),
)
_, err := client.Projects.Get(context.TODO(), "id")
_, err := client.Projects.Get(context.TODO(), "id_or_name")
if err != nil {
var apierr *kernel.Error
if errors.As(err, &apierr) {
Expand All @@ -78,7 +78,7 @@ func TestProjectUpdateWithOptionalParams(t *testing.T) {
)
_, err := client.Projects.Update(
context.TODO(),
"id",
"id_or_name",
kernel.ProjectUpdateParams{
UpdateProjectRequest: kernel.UpdateProjectRequestParam{
Name: kernel.String("x"),
Expand Down Expand Up @@ -136,7 +136,7 @@ func TestProjectDelete(t *testing.T) {
option.WithBaseURL(baseURL),
option.WithAPIKey("My API Key"),
)
err := client.Projects.Delete(context.TODO(), "id")
err := client.Projects.Delete(context.TODO(), "id_or_name")
if err != nil {
var apierr *kernel.Error
if errors.As(err, &apierr) {
Expand Down
Loading
Loading