github.com/anthropics/anthropic-sdk-go@v1.70.1/betavault.go (about)

     1  // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
     2  
     3  package anthropic
     4  
     5  import (
     6  	"context"
     7  	"errors"
     8  	"fmt"
     9  	"net/http"
    10  	"net/url"
    11  	"slices"
    12  	"time"
    13  
    14  	"github.com/anthropics/anthropic-sdk-go/internal/apijson"
    15  	"github.com/anthropics/anthropic-sdk-go/internal/apiquery"
    16  	"github.com/anthropics/anthropic-sdk-go/internal/requestconfig"
    17  	"github.com/anthropics/anthropic-sdk-go/option"
    18  	"github.com/anthropics/anthropic-sdk-go/packages/pagination"
    19  	"github.com/anthropics/anthropic-sdk-go/packages/param"
    20  	"github.com/anthropics/anthropic-sdk-go/packages/respjson"
    21  )
    22  
    23  // BetaVaultService contains methods and other services that help with interacting
    24  // with the anthropic API.
    25  //
    26  // Note, unlike clients, this service does not read variables from the environment
    27  // automatically. You should not instantiate this service directly, and instead use
    28  // the [NewBetaVaultService] method instead.
    29  type BetaVaultService struct {
    30  	Options     []option.RequestOption
    31  	Credentials BetaVaultCredentialService
    32  }
    33  
    34  // NewBetaVaultService generates a new service that applies the given options to
    35  // each request. These options are applied after the parent client's options (if
    36  // there is one), and before any request-specific options.
    37  func NewBetaVaultService(opts ...option.RequestOption) (r BetaVaultService) {
    38  	r = BetaVaultService{}
    39  	r.Options = opts
    40  	r.Credentials = NewBetaVaultCredentialService(opts...)
    41  	return
    42  }
    43  
    44  // Create Vault
    45  func (r *BetaVaultService) New(ctx context.Context, params BetaVaultNewParams, opts ...option.RequestOption) (res *BetaManagedAgentsVault, err error) {
    46  	for _, v := range params.Betas {
    47  		opts = append(opts, option.WithHeaderAdd("anthropic-beta", fmt.Sprintf("%v", v)))
    48  	}
    49  	if !param.IsOmitted(params.WorkspaceID) {
    50  		opts = append(opts, option.WithHeader("anthropic-workspace-id", fmt.Sprintf("%v", params.WorkspaceID.Value)))
    51  	}
    52  	opts = slices.Concat(r.Options, opts)
    53  	opts = append([]option.RequestOption{option.WithHeader("anthropic-beta", "managed-agents-2026-04-01")}, opts...)
    54  	path := "v1/vaults?beta=true"
    55  	err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, params, &res, opts...)
    56  	return res, err
    57  }
    58  
    59  // Get Vault
    60  func (r *BetaVaultService) Get(ctx context.Context, vaultID string, query BetaVaultGetParams, opts ...option.RequestOption) (res *BetaManagedAgentsVault, err error) {
    61  	for _, v := range query.Betas {
    62  		opts = append(opts, option.WithHeaderAdd("anthropic-beta", fmt.Sprintf("%v", v)))
    63  	}
    64  	if !param.IsOmitted(query.WorkspaceID) {
    65  		opts = append(opts, option.WithHeader("anthropic-workspace-id", fmt.Sprintf("%v", query.WorkspaceID.Value)))
    66  	}
    67  	opts = slices.Concat(r.Options, opts)
    68  	opts = append([]option.RequestOption{option.WithHeader("anthropic-beta", "managed-agents-2026-04-01")}, opts...)
    69  	if vaultID == "" {
    70  		err = errors.New("missing required vault_id parameter")
    71  		return nil, err
    72  	}
    73  	path := fmt.Sprintf("v1/vaults/%s?beta=true", vaultID)
    74  	err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, nil, &res, opts...)
    75  	return res, err
    76  }
    77  
    78  // Update Vault
    79  func (r *BetaVaultService) Update(ctx context.Context, vaultID string, params BetaVaultUpdateParams, opts ...option.RequestOption) (res *BetaManagedAgentsVault, err error) {
    80  	for _, v := range params.Betas {
    81  		opts = append(opts, option.WithHeaderAdd("anthropic-beta", fmt.Sprintf("%v", v)))
    82  	}
    83  	if !param.IsOmitted(params.WorkspaceID) {
    84  		opts = append(opts, option.WithHeader("anthropic-workspace-id", fmt.Sprintf("%v", params.WorkspaceID.Value)))
    85  	}
    86  	opts = slices.Concat(r.Options, opts)
    87  	opts = append([]option.RequestOption{option.WithHeader("anthropic-beta", "managed-agents-2026-04-01")}, opts...)
    88  	if vaultID == "" {
    89  		err = errors.New("missing required vault_id parameter")
    90  		return nil, err
    91  	}
    92  	path := fmt.Sprintf("v1/vaults/%s?beta=true", vaultID)
    93  	err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, params, &res, opts...)
    94  	return res, err
    95  }
    96  
    97  // List Vaults
    98  func (r *BetaVaultService) List(ctx context.Context, params BetaVaultListParams, opts ...option.RequestOption) (res *pagination.PageCursor[BetaManagedAgentsVault], err error) {
    99  	var raw *http.Response
   100  	for _, v := range params.Betas {
   101  		opts = append(opts, option.WithHeaderAdd("anthropic-beta", fmt.Sprintf("%v", v)))
   102  	}
   103  	if !param.IsOmitted(params.WorkspaceID) {
   104  		opts = append(opts, option.WithHeader("anthropic-workspace-id", fmt.Sprintf("%v", params.WorkspaceID.Value)))
   105  	}
   106  	opts = slices.Concat(r.Options, opts)
   107  	opts = append([]option.RequestOption{option.WithHeader("anthropic-beta", "managed-agents-2026-04-01"), option.WithResponseInto(&raw)}, opts...)
   108  	path := "v1/vaults?beta=true"
   109  	cfg, err := requestconfig.NewRequestConfig(ctx, http.MethodGet, path, params, &res, opts...)
   110  	if err != nil {
   111  		return nil, err
   112  	}
   113  	err = cfg.Execute()
   114  	if err != nil {
   115  		return nil, err
   116  	}
   117  	res.SetPageConfig(cfg, raw)
   118  	return res, nil
   119  }
   120  
   121  // List Vaults
   122  func (r *BetaVaultService) ListAutoPaging(ctx context.Context, params BetaVaultListParams, opts ...option.RequestOption) *pagination.PageCursorAutoPager[BetaManagedAgentsVault] {
   123  	return pagination.NewPageCursorAutoPager(r.List(ctx, params, opts...))
   124  }
   125  
   126  // Delete Vault
   127  func (r *BetaVaultService) Delete(ctx context.Context, vaultID string, body BetaVaultDeleteParams, opts ...option.RequestOption) (res *BetaManagedAgentsDeletedVault, err error) {
   128  	for _, v := range body.Betas {
   129  		opts = append(opts, option.WithHeaderAdd("anthropic-beta", fmt.Sprintf("%v", v)))
   130  	}
   131  	if !param.IsOmitted(body.WorkspaceID) {
   132  		opts = append(opts, option.WithHeader("anthropic-workspace-id", fmt.Sprintf("%v", body.WorkspaceID.Value)))
   133  	}
   134  	opts = slices.Concat(r.Options, opts)
   135  	opts = append([]option.RequestOption{option.WithHeader("anthropic-beta", "managed-agents-2026-04-01")}, opts...)
   136  	if vaultID == "" {
   137  		err = errors.New("missing required vault_id parameter")
   138  		return nil, err
   139  	}
   140  	path := fmt.Sprintf("v1/vaults/%s?beta=true", vaultID)
   141  	err = requestconfig.ExecuteNewRequest(ctx, http.MethodDelete, path, nil, &res, opts...)
   142  	return res, err
   143  }
   144  
   145  // Archive Vault
   146  func (r *BetaVaultService) Archive(ctx context.Context, vaultID string, body BetaVaultArchiveParams, opts ...option.RequestOption) (res *BetaManagedAgentsVault, err error) {
   147  	for _, v := range body.Betas {
   148  		opts = append(opts, option.WithHeaderAdd("anthropic-beta", fmt.Sprintf("%v", v)))
   149  	}
   150  	if !param.IsOmitted(body.WorkspaceID) {
   151  		opts = append(opts, option.WithHeader("anthropic-workspace-id", fmt.Sprintf("%v", body.WorkspaceID.Value)))
   152  	}
   153  	opts = slices.Concat(r.Options, opts)
   154  	opts = append([]option.RequestOption{option.WithHeader("anthropic-beta", "managed-agents-2026-04-01")}, opts...)
   155  	if vaultID == "" {
   156  		err = errors.New("missing required vault_id parameter")
   157  		return nil, err
   158  	}
   159  	path := fmt.Sprintf("v1/vaults/%s/archive?beta=true", vaultID)
   160  	err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, nil, &res, opts...)
   161  	return res, err
   162  }
   163  
   164  // Confirmation of a deleted vault.
   165  type BetaManagedAgentsDeletedVault struct {
   166  	// Unique identifier of the deleted vault.
   167  	ID string `json:"id" api:"required"`
   168  	// Any of "vault_deleted".
   169  	Type BetaManagedAgentsDeletedVaultType `json:"type" api:"required"`
   170  	// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
   171  	JSON struct {
   172  		ID          respjson.Field
   173  		Type        respjson.Field
   174  		ExtraFields map[string]respjson.Field
   175  		raw         string
   176  	} `json:"-"`
   177  }
   178  
   179  // Returns the unmodified JSON received from the API
   180  func (r BetaManagedAgentsDeletedVault) RawJSON() string { return r.JSON.raw }
   181  func (r *BetaManagedAgentsDeletedVault) UnmarshalJSON(data []byte) error {
   182  	return apijson.UnmarshalRoot(data, r)
   183  }
   184  
   185  type BetaManagedAgentsDeletedVaultType string
   186  
   187  const (
   188  	BetaManagedAgentsDeletedVaultTypeVaultDeleted BetaManagedAgentsDeletedVaultType = "vault_deleted"
   189  )
   190  
   191  // A vault that stores credentials for use by agents during sessions.
   192  type BetaManagedAgentsVault struct {
   193  	// Unique identifier for the vault.
   194  	ID string `json:"id" api:"required"`
   195  	// A timestamp in RFC 3339 format
   196  	ArchivedAt time.Time `json:"archived_at" api:"required" format:"date-time"`
   197  	// A timestamp in RFC 3339 format
   198  	CreatedAt time.Time `json:"created_at" api:"required" format:"date-time"`
   199  	// Human-readable name for the vault.
   200  	DisplayName string `json:"display_name" api:"required"`
   201  	// Arbitrary key-value metadata attached to the vault.
   202  	Metadata map[string]string `json:"metadata" api:"required"`
   203  	// Any of "vault".
   204  	Type BetaManagedAgentsVaultType `json:"type" api:"required"`
   205  	// A timestamp in RFC 3339 format
   206  	UpdatedAt time.Time `json:"updated_at" api:"required" format:"date-time"`
   207  	// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
   208  	JSON struct {
   209  		ID          respjson.Field
   210  		ArchivedAt  respjson.Field
   211  		CreatedAt   respjson.Field
   212  		DisplayName respjson.Field
   213  		Metadata    respjson.Field
   214  		Type        respjson.Field
   215  		UpdatedAt   respjson.Field
   216  		ExtraFields map[string]respjson.Field
   217  		raw         string
   218  	} `json:"-"`
   219  }
   220  
   221  // Returns the unmodified JSON received from the API
   222  func (r BetaManagedAgentsVault) RawJSON() string { return r.JSON.raw }
   223  func (r *BetaManagedAgentsVault) UnmarshalJSON(data []byte) error {
   224  	return apijson.UnmarshalRoot(data, r)
   225  }
   226  
   227  type BetaManagedAgentsVaultType string
   228  
   229  const (
   230  	BetaManagedAgentsVaultTypeVault BetaManagedAgentsVaultType = "vault"
   231  )
   232  
   233  type BetaVaultNewParams struct {
   234  	// Human-readable name for the vault. 1-255 characters.
   235  	DisplayName string            `json:"display_name" api:"required"`
   236  	WorkspaceID param.Opt[string] `header:"anthropic-workspace-id,omitzero" json:"-"`
   237  	// Arbitrary key-value metadata to attach to the vault. Maximum 16 pairs, keys up
   238  	// to 64 chars, values up to 512 chars.
   239  	Metadata map[string]string `json:"metadata,omitzero"`
   240  	// Optional header to specify the beta version(s) you want to use.
   241  	Betas []AnthropicBeta `header:"anthropic-beta,omitzero" json:"-"`
   242  	paramObj
   243  }
   244  
   245  func (r BetaVaultNewParams) MarshalJSON() (data []byte, err error) {
   246  	type shadow BetaVaultNewParams
   247  	return param.MarshalObject(r, (*shadow)(&r))
   248  }
   249  func (r *BetaVaultNewParams) UnmarshalJSON(data []byte) error {
   250  	return apijson.UnmarshalRoot(data, r)
   251  }
   252  
   253  type BetaVaultGetParams struct {
   254  	WorkspaceID param.Opt[string] `header:"anthropic-workspace-id,omitzero" json:"-"`
   255  	// Optional header to specify the beta version(s) you want to use.
   256  	Betas []AnthropicBeta `header:"anthropic-beta,omitzero" json:"-"`
   257  	paramObj
   258  }
   259  
   260  type BetaVaultUpdateParams struct {
   261  	// Updated human-readable name for the vault. 1-255 characters.
   262  	DisplayName param.Opt[string] `json:"display_name,omitzero"`
   263  	WorkspaceID param.Opt[string] `header:"anthropic-workspace-id,omitzero" json:"-"`
   264  	// Metadata patch. Set a key to a string to upsert it, or to null to delete it.
   265  	// Omitted keys are preserved.
   266  	Metadata map[string]string `json:"metadata,omitzero"`
   267  	// Optional header to specify the beta version(s) you want to use.
   268  	Betas []AnthropicBeta `header:"anthropic-beta,omitzero" json:"-"`
   269  	paramObj
   270  }
   271  
   272  func (r BetaVaultUpdateParams) MarshalJSON() (data []byte, err error) {
   273  	type shadow BetaVaultUpdateParams
   274  	return param.MarshalObject(r, (*shadow)(&r))
   275  }
   276  func (r *BetaVaultUpdateParams) UnmarshalJSON(data []byte) error {
   277  	return apijson.UnmarshalRoot(data, r)
   278  }
   279  
   280  type BetaVaultListParams struct {
   281  	// Whether to include archived vaults in the results.
   282  	IncludeArchived param.Opt[bool] `query:"include_archived,omitzero" json:"-"`
   283  	// Maximum number of vaults to return per page. Defaults to 20, maximum 100.
   284  	Limit param.Opt[int64] `query:"limit,omitzero" json:"-"`
   285  	// Opaque pagination token from a previous `list_vaults` response.
   286  	Page        param.Opt[string] `query:"page,omitzero" json:"-"`
   287  	WorkspaceID param.Opt[string] `header:"anthropic-workspace-id,omitzero" json:"-"`
   288  	// Optional header to specify the beta version(s) you want to use.
   289  	Betas []AnthropicBeta `header:"anthropic-beta,omitzero" json:"-"`
   290  	paramObj
   291  }
   292  
   293  // URLQuery serializes [BetaVaultListParams]'s query parameters as `url.Values`.
   294  func (r BetaVaultListParams) URLQuery() (v url.Values, err error) {
   295  	return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{
   296  		ArrayFormat:  apiquery.ArrayQueryFormatBrackets,
   297  		NestedFormat: apiquery.NestedQueryFormatBrackets,
   298  	})
   299  }
   300  
   301  type BetaVaultDeleteParams struct {
   302  	WorkspaceID param.Opt[string] `header:"anthropic-workspace-id,omitzero" json:"-"`
   303  	// Optional header to specify the beta version(s) you want to use.
   304  	Betas []AnthropicBeta `header:"anthropic-beta,omitzero" json:"-"`
   305  	paramObj
   306  }
   307  
   308  type BetaVaultArchiveParams struct {
   309  	WorkspaceID param.Opt[string] `header:"anthropic-workspace-id,omitzero" json:"-"`
   310  	// Optional header to specify the beta version(s) you want to use.
   311  	Betas []AnthropicBeta `header:"anthropic-beta,omitzero" json:"-"`
   312  	paramObj
   313  }