diff --git a/.codegen/_openapi_sha b/.codegen/_openapi_sha index ddc34be53..76599c0a1 100755 --- a/.codegen/_openapi_sha +++ b/.codegen/_openapi_sha @@ -1 +1 @@ -4811189a6ca18d0632b06ad1d44b696a0a17dbe4 \ No newline at end of file +e3586ea1d9b0c6df1b28f95888a425958b13b582 \ No newline at end of file diff --git a/NEXT_CHANGELOG.md b/NEXT_CHANGELOG.md old mode 100644 new mode 100755 index cc9e99159..cf031aa6e --- a/NEXT_CHANGELOG.md +++ b/NEXT_CHANGELOG.md @@ -17,3 +17,10 @@ * Switch workspace addressing header on workspace-scoped API calls from `X-Databricks-Org-Id` to `X-Databricks-Workspace-Id`. The value continues to come from `Config.WorkspaceID` (`DATABRICKS_WORKSPACE_ID`), and now accepts either a classic numeric workspace ID or a CPDR connection ID (server disambiguates). Part of the DECO + Unified Workspace Addressing initiative. ### API Changes +* Add `UpdateTokenManagement` method for [w.TokenManagement](https://pkg.go.dev/github.com/databricks/databricks-sdk-go/service/settings#TokenManagementAPI) workspace-level service. +* Add `DeploymentId` and `VersionId` fields for [jobs.JobDeployment](https://pkg.go.dev/github.com/databricks/databricks-sdk-go/service/jobs#JobDeployment). +* Add `DeploymentId` and `VersionId` fields for [pipelines.PipelineDeployment](https://pkg.go.dev/github.com/databricks/databricks-sdk-go/service/pipelines#PipelineDeployment). +* Add `AutoscopeEnabled` field for [settings.CreateOboTokenRequest](https://pkg.go.dev/github.com/databricks/databricks-sdk-go/service/settings#CreateOboTokenRequest). +* Add `AutoscopeEnabled` field for [settings.CreateTokenRequest](https://pkg.go.dev/github.com/databricks/databricks-sdk-go/service/settings#CreateTokenRequest). +* Add `AutoscopeState`, `BackfillScopes`, `InferredScopes` and `Scopes` fields for [settings.PublicTokenInfo](https://pkg.go.dev/github.com/databricks/databricks-sdk-go/service/settings#PublicTokenInfo). +* Add `AutoscopeState`, `BackfillScopes`, `InferredScopes` and `Scopes` fields for [settings.TokenInfo](https://pkg.go.dev/github.com/databricks/databricks-sdk-go/service/settings#TokenInfo). \ No newline at end of file diff --git a/experimental/mocks/service/settings/mock_token_management_interface.go b/experimental/mocks/service/settings/mock_token_management_interface.go index 179e7c46b..46e14caf1 100755 --- a/experimental/mocks/service/settings/mock_token_management_interface.go +++ b/experimental/mocks/service/settings/mock_token_management_interface.go @@ -754,6 +754,65 @@ func (_c *MockTokenManagementInterface_UpdatePermissions_Call) RunAndReturn(run return _c } +// UpdateTokenManagement provides a mock function with given fields: ctx, request +func (_m *MockTokenManagementInterface) UpdateTokenManagement(ctx context.Context, request settings.UpdateTokenManagementRequest) (*settings.TokenInfo, error) { + ret := _m.Called(ctx, request) + + if len(ret) == 0 { + panic("no return value specified for UpdateTokenManagement") + } + + var r0 *settings.TokenInfo + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, settings.UpdateTokenManagementRequest) (*settings.TokenInfo, error)); ok { + return rf(ctx, request) + } + if rf, ok := ret.Get(0).(func(context.Context, settings.UpdateTokenManagementRequest) *settings.TokenInfo); ok { + r0 = rf(ctx, request) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*settings.TokenInfo) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, settings.UpdateTokenManagementRequest) error); ok { + r1 = rf(ctx, request) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// MockTokenManagementInterface_UpdateTokenManagement_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'UpdateTokenManagement' +type MockTokenManagementInterface_UpdateTokenManagement_Call struct { + *mock.Call +} + +// UpdateTokenManagement is a helper method to define mock.On call +// - ctx context.Context +// - request settings.UpdateTokenManagementRequest +func (_e *MockTokenManagementInterface_Expecter) UpdateTokenManagement(ctx interface{}, request interface{}) *MockTokenManagementInterface_UpdateTokenManagement_Call { + return &MockTokenManagementInterface_UpdateTokenManagement_Call{Call: _e.mock.On("UpdateTokenManagement", ctx, request)} +} + +func (_c *MockTokenManagementInterface_UpdateTokenManagement_Call) Run(run func(ctx context.Context, request settings.UpdateTokenManagementRequest)) *MockTokenManagementInterface_UpdateTokenManagement_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(settings.UpdateTokenManagementRequest)) + }) + return _c +} + +func (_c *MockTokenManagementInterface_UpdateTokenManagement_Call) Return(_a0 *settings.TokenInfo, _a1 error) *MockTokenManagementInterface_UpdateTokenManagement_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *MockTokenManagementInterface_UpdateTokenManagement_Call) RunAndReturn(run func(context.Context, settings.UpdateTokenManagementRequest) (*settings.TokenInfo, error)) *MockTokenManagementInterface_UpdateTokenManagement_Call { + _c.Call.Return(run) + return _c +} + // NewMockTokenManagementInterface creates a new instance of MockTokenManagementInterface. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. // The first argument is typically a *testing.T value. func NewMockTokenManagementInterface(t interface { diff --git a/service/catalog/model.go b/service/catalog/model.go index bbcfe26aa..6cec43aee 100755 --- a/service/catalog/model.go +++ b/service/catalog/model.go @@ -7242,7 +7242,7 @@ func (s Securable) MarshalJSON() ([]byte, error) { } // Latest kind: CONNECTION_GOOGLE_CLOUD_LAKEHOUSE_SERVICE_ACCOUNT = 340; Next -// id: 341 +// id: 342 type SecurableKind string const SecurableKindTableDbStorage SecurableKind = `TABLE_DB_STORAGE` diff --git a/service/iam/model.go b/service/iam/model.go index e4282ab43..ed6c257f1 100755 --- a/service/iam/model.go +++ b/service/iam/model.go @@ -155,6 +155,61 @@ func (s Actor) MarshalJSON() ([]byte, error) { return marshal.Marshal(s) } +// State of inferred scope collection (autoscope) for an external PAT. Mirrored +// in databricks.identity.AutoscopeState in +// common/principal-context/api/proto/tokendetails.proto. Token store and token +// management proto can depend on this. Principal context proto should NOT +// depend on this proto definitions because too many services depend on the +// principal context proto. +type AutoscopeState string + +const AutoscopeStateAutoscopeStateApiNotCovered AutoscopeState = `AUTOSCOPE_STATE_API_NOT_COVERED` + +const AutoscopeStateAutoscopeStateBackfilled AutoscopeState = `AUTOSCOPE_STATE_BACKFILLED` + +const AutoscopeStateAutoscopeStateCompleted AutoscopeState = `AUTOSCOPE_STATE_COMPLETED` + +const AutoscopeStateAutoscopeStateDisabled AutoscopeState = `AUTOSCOPE_STATE_DISABLED` + +const AutoscopeStateAutoscopeStateRunning AutoscopeState = `AUTOSCOPE_STATE_RUNNING` + +const AutoscopeStateAutoscopeStateUserSelected AutoscopeState = `AUTOSCOPE_STATE_USER_SELECTED` + +// String representation for [fmt.Print] +func (f *AutoscopeState) String() string { + return string(*f) +} + +// Set raw string value and validate it against allowed values +func (f *AutoscopeState) Set(v string) error { + switch v { + case `AUTOSCOPE_STATE_API_NOT_COVERED`, `AUTOSCOPE_STATE_BACKFILLED`, `AUTOSCOPE_STATE_COMPLETED`, `AUTOSCOPE_STATE_DISABLED`, `AUTOSCOPE_STATE_RUNNING`, `AUTOSCOPE_STATE_USER_SELECTED`: + *f = AutoscopeState(v) + return nil + default: + return fmt.Errorf(`value "%s" is not one of "AUTOSCOPE_STATE_API_NOT_COVERED", "AUTOSCOPE_STATE_BACKFILLED", "AUTOSCOPE_STATE_COMPLETED", "AUTOSCOPE_STATE_DISABLED", "AUTOSCOPE_STATE_RUNNING", "AUTOSCOPE_STATE_USER_SELECTED"`, v) + } +} + +// Values returns all possible values for AutoscopeState. +// +// There is no guarantee on the order of the values in the slice. +func (f *AutoscopeState) Values() []AutoscopeState { + return []AutoscopeState{ + AutoscopeStateAutoscopeStateApiNotCovered, + AutoscopeStateAutoscopeStateBackfilled, + AutoscopeStateAutoscopeStateCompleted, + AutoscopeStateAutoscopeStateDisabled, + AutoscopeStateAutoscopeStateRunning, + AutoscopeStateAutoscopeStateUserSelected, + } +} + +// Type always returns AutoscopeState to satisfy [pflag.Value] interface +func (f *AutoscopeState) Type() string { + return "AutoscopeState" +} + type CheckPolicyRequest struct { Actor Actor `json:"-" url:"actor"` diff --git a/service/jobs/model.go b/service/jobs/model.go index 2dbab8f8c..5d2e3e0f1 100755 --- a/service/jobs/model.go +++ b/service/jobs/model.go @@ -1844,6 +1844,10 @@ func (s JobCompliance) MarshalJSON() ([]byte, error) { } type JobDeployment struct { + // ID of the deployment that manages this job. Only set when `kind` is + // `BUNDLE`. Used to look up deployment metadata from the Deployment + // Metadata service. + DeploymentId string `json:"deployment_id,omitempty"` // The kind of deployment that manages the job. // // * `BUNDLE`: The job is managed by Databricks Asset Bundle. * @@ -1851,6 +1855,10 @@ type JobDeployment struct { Kind JobDeploymentKind `json:"kind"` // Path of the file that contains deployment metadata. MetadataFilePath string `json:"metadata_file_path,omitempty"` + // ID of the version of the deployment that produced this job. Only set when + // `kind` is `BUNDLE`. Identifies a specific snapshot of the deployment in + // the Deployment Metadata service. + VersionId string `json:"version_id,omitempty"` ForceSendFields []string `json:"-" url:"-"` } diff --git a/service/marketplace/impl.go b/service/marketplace/impl.go index 3e70f99e8..8784a4970 100755 --- a/service/marketplace/impl.go +++ b/service/marketplace/impl.go @@ -1136,6 +1136,7 @@ func (a *providerProviderAnalyticsDashboardsImpl) Create(ctx context.Context) (* headers := make(map[string]string) headers["Accept"] = "application/json" + headers["Content-Type"] = "application/json" cfg := a.client.Config if cfg.WorkspaceID != "" { headers["X-Databricks-Workspace-Id"] = cfg.WorkspaceID diff --git a/service/ml/impl.go b/service/ml/impl.go index 25c9231b0..23f688b1a 100755 --- a/service/ml/impl.go +++ b/service/ml/impl.go @@ -819,7 +819,7 @@ func (a *featureEngineeringImpl) CreateStream(ctx context.Context, request Creat headers["Content-Type"] = "application/json" cfg := a.client.Config if cfg.WorkspaceID != "" { - headers["X-Databricks-Org-Id"] = cfg.WorkspaceID + headers["X-Databricks-Workspace-Id"] = cfg.WorkspaceID } err := a.client.Do(ctx, http.MethodPost, path, headers, queryParams, request.Stream, &stream) return &stream, err @@ -871,7 +871,7 @@ func (a *featureEngineeringImpl) DeleteStream(ctx context.Context, request Delet headers["Accept"] = "application/json" cfg := a.client.Config if cfg.WorkspaceID != "" { - headers["X-Databricks-Org-Id"] = cfg.WorkspaceID + headers["X-Databricks-Workspace-Id"] = cfg.WorkspaceID } err := a.client.Do(ctx, http.MethodDelete, path, headers, queryParams, request, nil) return err @@ -927,7 +927,7 @@ func (a *featureEngineeringImpl) GetStream(ctx context.Context, request GetStrea headers["Accept"] = "application/json" cfg := a.client.Config if cfg.WorkspaceID != "" { - headers["X-Databricks-Org-Id"] = cfg.WorkspaceID + headers["X-Databricks-Workspace-Id"] = cfg.WorkspaceID } err := a.client.Do(ctx, http.MethodGet, path, headers, queryParams, request, &stream) return &stream, err @@ -1111,7 +1111,7 @@ func (a *featureEngineeringImpl) internalListStreams(ctx context.Context, reques headers["Accept"] = "application/json" cfg := a.client.Config if cfg.WorkspaceID != "" { - headers["X-Databricks-Org-Id"] = cfg.WorkspaceID + headers["X-Databricks-Workspace-Id"] = cfg.WorkspaceID } err := a.client.Do(ctx, http.MethodGet, path, headers, queryParams, request, &listStreamsResponse) return &listStreamsResponse, err @@ -1193,7 +1193,7 @@ func (a *featureEngineeringImpl) UpdateStream(ctx context.Context, request Updat headers["Content-Type"] = "application/json" cfg := a.client.Config if cfg.WorkspaceID != "" { - headers["X-Databricks-Org-Id"] = cfg.WorkspaceID + headers["X-Databricks-Workspace-Id"] = cfg.WorkspaceID } err := a.client.Do(ctx, http.MethodPatch, path, headers, queryParams, request.Stream, &stream) return &stream, err diff --git a/service/pipelines/model.go b/service/pipelines/model.go index 9f9a9ff18..beba46d74 100755 --- a/service/pipelines/model.go +++ b/service/pipelines/model.go @@ -2188,10 +2188,18 @@ func (f *PipelineClusterAutoscaleMode) Type() string { } type PipelineDeployment struct { + // ID of the deployment that manages this pipeline. Only set when `kind` is + // `BUNDLE`. Used to look up deployment metadata from the Deployment + // Metadata service. + DeploymentId string `json:"deployment_id,omitempty"` // The deployment method that manages the pipeline. Kind DeploymentKind `json:"kind"` // The path to the file containing metadata about the deployment. MetadataFilePath string `json:"metadata_file_path,omitempty"` + // ID of the version of the deployment that produced this pipeline. Only set + // when `kind` is `BUNDLE`. Identifies a specific snapshot of the deployment + // in the Deployment Metadata service. + VersionId string `json:"version_id,omitempty"` ForceSendFields []string `json:"-" url:"-"` } diff --git a/service/settings/api.go b/service/settings/api.go index 63a385e0b..cdb963c6c 100755 --- a/service/settings/api.go +++ b/service/settings/api.go @@ -1942,6 +1942,9 @@ type TokenManagementInterface interface { // Updates the permissions on all tokens. Tokens can inherit permissions from // their root object. UpdatePermissions(ctx context.Context, request TokenPermissionsRequest) (*TokenPermissions, error) + + // Updates a token, specified by its ID. + UpdateTokenManagement(ctx context.Context, request UpdateTokenManagementRequest) (*TokenInfo, error) } func NewTokenManagement(client *client.DatabricksClient) *TokenManagementAPI { @@ -2077,7 +2080,7 @@ type TokensInterface interface { // Updates the comment or scopes of a token. // // If a token with the specified ID is not valid, this call returns an error - // **RESOURCE_DOES_NOT_EXIST**. + // **NOT_FOUND**. Update(ctx context.Context, request UpdateTokenRequest) (*UpdateTokenResponse, error) } diff --git a/service/settings/impl.go b/service/settings/impl.go index 78d87ed50..7dc42b28e 100755 --- a/service/settings/impl.go +++ b/service/settings/impl.go @@ -1675,6 +1675,21 @@ func (a *tokenManagementImpl) UpdatePermissions(ctx context.Context, request Tok return &tokenPermissions, err } +func (a *tokenManagementImpl) UpdateTokenManagement(ctx context.Context, request UpdateTokenManagementRequest) (*TokenInfo, error) { + var tokenInfo TokenInfo + path := fmt.Sprintf("/api/2.0/token-management/tokens/%v", request.TokenId) + queryParams := make(map[string]any) + headers := make(map[string]string) + headers["Accept"] = "application/json" + headers["Content-Type"] = "application/json" + cfg := a.client.Config + if cfg.WorkspaceID != "" { + headers["X-Databricks-Workspace-Id"] = cfg.WorkspaceID + } + err := a.client.Do(ctx, http.MethodPatch, path, headers, queryParams, request, &tokenInfo) + return &tokenInfo, err +} + // unexported type that holds implementations of just Tokens API methods type tokensImpl struct { client *client.DatabricksClient diff --git a/service/settings/interface.go b/service/settings/interface.go index daeca6666..7df6cd29e 100755 --- a/service/settings/interface.go +++ b/service/settings/interface.go @@ -830,6 +830,9 @@ type TokenManagementService interface { // Updates the permissions on all tokens. Tokens can inherit permissions // from their root object. UpdatePermissions(ctx context.Context, request TokenPermissionsRequest) (*TokenPermissions, error) + + // Updates a token, specified by its ID. + UpdateTokenManagement(ctx context.Context, request UpdateTokenManagementRequest) (*TokenInfo, error) } // The Token API allows you to create, list, and revoke tokens that can be used @@ -856,7 +859,7 @@ type TokensService interface { // Updates the comment or scopes of a token. // // If a token with the specified ID is not valid, this call returns an error - // **RESOURCE_DOES_NOT_EXIST**. + // **NOT_FOUND**. Update(ctx context.Context, request UpdateTokenRequest) (*UpdateTokenResponse, error) } diff --git a/service/settings/model.go b/service/settings/model.go index 1715e0d54..283e5f4cd 100755 --- a/service/settings/model.go +++ b/service/settings/model.go @@ -7,6 +7,7 @@ import ( "github.com/databricks/databricks-sdk-go/common/types/fieldmask" "github.com/databricks/databricks-sdk-go/marshal" + "github.com/databricks/databricks-sdk-go/service/iam" ) type AccountIpAccessEnable struct { @@ -584,6 +585,8 @@ func (s CreateNotificationDestinationRequest) MarshalJSON() ([]byte, error) { type CreateOboTokenRequest struct { // Application ID of the service principal. ApplicationId string `json:"application_id"` + // Whether to enable autoscoping for this token. + AutoscopeEnabled bool `json:"autoscope_enabled,omitempty"` // Comment that describes the purpose of the token. Comment string `json:"comment,omitempty"` // The number of seconds before the token expires. @@ -670,6 +673,9 @@ type CreatePrivateEndpointRuleRequest struct { } type CreateTokenRequest struct { + // Whether to enable autoscoping for this token. When true, the token will + // automatically collect inferred API path scopes as it is used. + AutoscopeEnabled bool `json:"autoscope_enabled,omitempty"` // Optional description to attach to the token. Comment string `json:"comment,omitempty"` // The lifetime of the token, in seconds. @@ -4320,6 +4326,10 @@ func (s PersonalComputeSetting) MarshalJSON() ([]byte, error) { } type PublicTokenInfo struct { + // Output only. The autoscope state of this token. + AutoscopeState iam.AutoscopeState `json:"autoscope_state,omitempty"` + // Output only. Scopes inferred from offline backfill processing. + BackfillScopes []string `json:"backfill_scopes,omitempty"` // Comment the token was created with, if applicable. Comment string `json:"comment,omitempty"` // Server time (in epoch milliseconds) when the token was created. @@ -4327,6 +4337,11 @@ type PublicTokenInfo struct { // Server time (in epoch milliseconds) when the token will expire, or -1 if // not applicable. ExpiryTime int64 `json:"expiry_time,omitempty"` + // Output only. Inferred API path scopes collected for this token when + // autoscope is enabled. + InferredScopes []string `json:"inferred_scopes,omitempty"` + // Scope of the token was created with, if applicable. + Scopes []string `json:"scopes,omitempty"` // The ID of this token. TokenId string `json:"token_id,omitempty"` @@ -4557,6 +4572,10 @@ func (s TokenAccessControlResponse) MarshalJSON() ([]byte, error) { } type TokenInfo struct { + // Output only. The autoscope state of this token. + AutoscopeState iam.AutoscopeState `json:"autoscope_state,omitempty"` + // Output only. Scopes inferred from offline backfill processing. + BackfillScopes []string `json:"backfill_scopes,omitempty"` // Comment that describes the purpose of the token, specified by the token // creator. Comment string `json:"comment,omitempty"` @@ -4568,11 +4587,16 @@ type TokenInfo struct { CreationTime int64 `json:"creation_time,omitempty"` // Timestamp when the token expires. ExpiryTime int64 `json:"expiry_time,omitempty"` + // Output only. Inferred API path scopes collected for this token when + // autoscope is enabled. + InferredScopes []string `json:"inferred_scopes,omitempty"` // Approximate timestamp for the day the token was last used. Accurate up to // 1 day. LastUsedDay int64 `json:"last_used_day,omitempty"` // User ID of the user that owns the token. OwnerId int64 `json:"owner_id,omitempty"` + // Scope of the token was created with, if applicable. + Scopes []string `json:"scopes,omitempty"` // ID of the token. TokenId string `json:"token_id,omitempty"` // If applicable, the ID of the workspace that the token was created in. @@ -5315,12 +5339,37 @@ type UpdateSqlResultsDownloadRequest struct { Setting SqlResultsDownload `json:"setting"` } +// For the list of supported token scopes, see +// https://docs.databricks.com/api/workspace/api/scopes. +type UpdateTokenManagementRequest struct { + Token TokenInfo `json:"token"` + // ID of the token. + TokenId string `json:"-" url:"-"` + // A list of field name under token, For example, {"update_mask": + // "comment,scopes"} + // + // The field mask must be a single string, with multiple fields separated by + // commas (no spaces). The field path is relative to the resource object, + // using a dot (`.`) to navigate sub-fields (e.g., `author.given_name`). + // Specification of elements in sequence or map fields is not allowed, as + // only the entire collection field can be specified. Field names must + // exactly match the resource field names. + // + // A field mask of `*` indicates full replacement. It’s recommended to + // always explicitly list the fields being updated and avoid using `*` + // wildcards, as it can lead to unintended results if the API changes in the + // future. + UpdateMask fieldmask.FieldMask `json:"update_mask"` +} + +// For the list of supported token scopes, see +// https://docs.databricks.com/api/workspace/api/scopes. type UpdateTokenRequest struct { Token PublicTokenInfo `json:"token"` // The SHA-256 hash of the token to be updated. TokenId string `json:"-" url:"-"` - // A list of field name under PublicTokenInfo, For example in request use - // {"update_mask": "comment,scopes"} + // A list of field name under token, For example, {"update_mask": + // "comment,scopes"} // // The field mask must be a single string, with multiple fields separated by // commas (no spaces). The field path is relative to the resource object, diff --git a/service/sql/impl.go b/service/sql/impl.go index 4dcd10841..a740392d9 100755 --- a/service/sql/impl.go +++ b/service/sql/impl.go @@ -992,11 +992,12 @@ func (a *statementExecutionImpl) CancelExecution(ctx context.Context, request Ca path := fmt.Sprintf("/api/2.0/sql/statements/%v/cancel", request.StatementId) queryParams := make(map[string]any) headers := make(map[string]string) + headers["Content-Type"] = "application/json" cfg := a.client.Config if cfg.WorkspaceID != "" { headers["X-Databricks-Workspace-Id"] = cfg.WorkspaceID } - err := a.client.Do(ctx, http.MethodPost, path, headers, queryParams, nil, nil) + err := a.client.Do(ctx, http.MethodPost, path, headers, queryParams, request, nil) return err } diff --git a/service/vectorsearch/impl.go b/service/vectorsearch/impl.go index 54603d8bb..1b0732575 100755 --- a/service/vectorsearch/impl.go +++ b/service/vectorsearch/impl.go @@ -378,11 +378,12 @@ func (a *vectorSearchIndexesImpl) SyncIndex(ctx context.Context, request SyncInd queryParams := make(map[string]any) headers := make(map[string]string) headers["Accept"] = "application/json" + headers["Content-Type"] = "application/json" cfg := a.client.Config if cfg.WorkspaceID != "" { headers["X-Databricks-Workspace-Id"] = cfg.WorkspaceID } - err := a.client.Do(ctx, http.MethodPost, path, headers, queryParams, nil, nil) + err := a.client.Do(ctx, http.MethodPost, path, headers, queryParams, request, nil) return err }