From 2a51770b2ff052f96636b20fb308b40549cff551 Mon Sep 17 00:00:00 2001 From: Jeffrey Hardy Date: Tue, 28 Apr 2026 17:46:59 -0400 Subject: [PATCH 1/3] Add bucketId to card column color and on-hold paths MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Smithy spec for SetCardColumnColor, EnableCardColumnOnHold, and DisableCardColumnOnHold was missing the {bucketId} URI label and input field, so the generated clients in all six SDKs built bucket-less paths like /{accountId}/card_tables/columns/{columnId}/color.json. Basecamp's API rejects those forms with 404 — the endpoints have always required the /buckets/{bucketId} segment. Every consumer of these three SDK methods has been broken since the operations were added. Reproduced with the Go SDK / basecamp-cli: - PUT /{account}/card_tables/columns/{column}/color.json -> 404 - PUT /{account}/buckets/{bucket}/card_tables/columns/{column}/color.json -> 200 Spec change: added @httpLabel bucketId: ProjectId to all three operation inputs and rewrote each @http URI to /{accountId}/buckets/{bucketId}/... to match the rest of the bucket-scoped operations. Get/Update card column paths are NOT changed in this PR — they happen to work without the bucket today, and changing them would be a larger breaking change. We can revisit those for spec parity in a follow-up. Regen pipeline: make smithy-build, make -C go generate, make url-routes, make ts-generate(+services), make rb-generate(+services), make swift-generate, make kt-generate-services, make py-generate. Hand-written changes: - go/pkg/basecamp/cards.go: SetColor / EnableOnHold / DisableOnHold wrappers now take bucketID alongside columnID and pass it through to the generated client (breaking change to public Go API). - typescript/tests/services/card-columns.test.ts: stubs and call sites updated to include bucketId. - ruby/test/basecamp/services/card_columns_service_test.rb: stubs and call sites updated to include bucket_id:. Verification: make smithy-check, go-check-drift, kt-check-drift, ts-check, rb-check, py-check, kt-check, swift-check, conformance all green. (go-check skipped — golangci-lint not installed locally; the underlying go test passes.) Co-Authored-By: Claude Opus 4.7 (1M context) --- go.work.sum | 5 + go/pkg/basecamp/cards.go | 12 +- go/pkg/basecamp/url-routes.json | 68 +- go/pkg/generated/client.gen.go | 993 +++++++++--------- .../basecamp/sdk/generated/services/Types.kt | 10 +- .../sdk/generated/services/card-columns.kt | 71 +- openapi.json | 551 +++++----- .../generated/services/card_columns.py | 92 +- ruby/lib/basecamp/generated/metadata.json | 62 +- .../services/card_columns_service.rb | 49 +- ruby/lib/basecamp/generated/types.rb | 2 +- .../services/card_columns_service_test.rb | 12 +- spec/basecamp.smithy | 18 +- .../Services/CardColumnsService.swift | 12 +- typescript/src/generated/metadata.json | 62 +- .../src/generated/openapi-stripped.json | 551 +++++----- typescript/src/generated/path-mapping.ts | 6 +- typescript/src/generated/schema.d.ts | 397 +++---- .../src/generated/services/card-columns.ts | 121 +-- typescript/src/generated/services/index.ts | 2 +- .../tests/services/card-columns.test.ts | 15 +- 21 files changed, 1613 insertions(+), 1498 deletions(-) diff --git a/go.work.sum b/go.work.sum index f00b5f05..335a7e7d 100644 --- a/go.work.sum +++ b/go.work.sum @@ -74,12 +74,14 @@ github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa02 github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= github.com/labstack/echo/v4 v4.11.4/go.mod h1:noh7EvLwqDsmh/X/HWKPUl1AjzJrhyptRyEbQJfxen8= +github.com/labstack/echo/v4 v4.15.1/go.mod h1:xmw1clThob0BSVRX1CRQkGQ/vjwcpOMjQZSZa9fKA/c= github.com/labstack/gommon v0.4.2/go.mod h1:QlUFxVM+SNXhDL/Z7YhocGIBYOiwB0mXm1+1bAPHPyU= github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= github.com/mailgun/raymond/v2 v2.0.48/go.mod h1:lsgvL50kgt1ylcFJYZiULi5fjPBkkhNfj4KA0W54Z18= github.com/matryer/try v0.0.0-20161228173917-9ac251b645a2/go.mod h1:0KeJpeMD6o+O4hW7qJOT7vyQPKrWmj26uf5wMc/IiIs= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mediocregopher/radix/v3 v3.8.1/go.mod h1:8FL3F6UQRXHXIBSPUs5h0RybMF8i4n7wVopoX3x7Bv8= @@ -143,6 +145,7 @@ golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUu golang.org/x/arch v0.8.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc= golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc= +golang.org/x/crypto v0.46.0/go.mod h1:Evb/oLKmMraqjZ2iQTwDwvCtJkczlDuTmdJXoZVzqU0= golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/net v0.0.0-20190327091125-710a502c58a2/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= @@ -158,10 +161,12 @@ golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/telemetry v0.0.0-20250710130107-8d8967aff50b/go.mod h1:4ZwOYna0/zsOKwuR5X/m0QFOJpSZvAxFfkQT+Erd9D4= golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw= golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= diff --git a/go/pkg/basecamp/cards.go b/go/pkg/basecamp/cards.go index 897d2cc5..729675d7 100644 --- a/go/pkg/basecamp/cards.go +++ b/go/pkg/basecamp/cards.go @@ -739,7 +739,7 @@ func (s *CardColumnsService) Move(ctx context.Context, cardTableID int64, req *M // SetColor sets the color of a column. // Valid colors: white, red, orange, yellow, green, blue, aqua, purple, gray, pink, brown. // Returns the updated column. -func (s *CardColumnsService) SetColor(ctx context.Context, columnID int64, color string) (result *CardColumn, err error) { +func (s *CardColumnsService) SetColor(ctx context.Context, bucketID, columnID int64, color string) (result *CardColumn, err error) { op := OperationInfo{ Service: "CardColumns", Operation: "SetColor", ResourceType: "card_column", IsMutation: true, @@ -763,7 +763,7 @@ func (s *CardColumnsService) SetColor(ctx context.Context, columnID int64, color Color: color, } - resp, err := s.client.parent.gen.SetCardColumnColorWithResponse(ctx, s.client.accountID, columnID, body) + resp, err := s.client.parent.gen.SetCardColumnColorWithResponse(ctx, s.client.accountID, bucketID, columnID, body) if err != nil { return nil, err } @@ -781,7 +781,7 @@ func (s *CardColumnsService) SetColor(ctx context.Context, columnID int64, color // EnableOnHold adds an on-hold section to a column. // Returns the updated column. -func (s *CardColumnsService) EnableOnHold(ctx context.Context, columnID int64) (result *CardColumn, err error) { +func (s *CardColumnsService) EnableOnHold(ctx context.Context, bucketID, columnID int64) (result *CardColumn, err error) { op := OperationInfo{ Service: "CardColumns", Operation: "EnableOnHold", ResourceType: "card_column", IsMutation: true, @@ -796,7 +796,7 @@ func (s *CardColumnsService) EnableOnHold(ctx context.Context, columnID int64) ( ctx = s.client.parent.hooks.OnOperationStart(ctx, op) defer func() { s.client.parent.hooks.OnOperationEnd(ctx, op, err, time.Since(start)) }() - resp, err := s.client.parent.gen.EnableCardColumnOnHoldWithResponse(ctx, s.client.accountID, columnID) + resp, err := s.client.parent.gen.EnableCardColumnOnHoldWithResponse(ctx, s.client.accountID, bucketID, columnID) if err != nil { return nil, err } @@ -814,7 +814,7 @@ func (s *CardColumnsService) EnableOnHold(ctx context.Context, columnID int64) ( // DisableOnHold removes the on-hold section from a column. // Returns the updated column. -func (s *CardColumnsService) DisableOnHold(ctx context.Context, columnID int64) (result *CardColumn, err error) { +func (s *CardColumnsService) DisableOnHold(ctx context.Context, bucketID, columnID int64) (result *CardColumn, err error) { op := OperationInfo{ Service: "CardColumns", Operation: "DisableOnHold", ResourceType: "card_column", IsMutation: true, @@ -829,7 +829,7 @@ func (s *CardColumnsService) DisableOnHold(ctx context.Context, columnID int64) ctx = s.client.parent.hooks.OnOperationStart(ctx, op) defer func() { s.client.parent.hooks.OnOperationEnd(ctx, op, err, time.Since(start)) }() - resp, err := s.client.parent.gen.DisableCardColumnOnHoldWithResponse(ctx, s.client.accountID, columnID) + resp, err := s.client.parent.gen.DisableCardColumnOnHoldWithResponse(ctx, s.client.accountID, bucketID, columnID) if err != nil { return nil, err } diff --git a/go/pkg/basecamp/url-routes.json b/go/pkg/basecamp/url-routes.json index 82dfb1a7..d5780ecf 100644 --- a/go/pkg/basecamp/url-routes.json +++ b/go/pkg/basecamp/url-routes.json @@ -75,11 +75,10 @@ } }, { - "pattern": "/{accountId}/buckets/{bucketId}/webhooks", - "resource": "Automation", + "pattern": "/{accountId}/buckets/{bucketId}/card_tables/columns/{columnId}/color", + "resource": "Card Tables", "operations": { - "GET": "ListWebhooks", - "POST": "CreateWebhook" + "PUT": "SetCardColumnColor" }, "params": { "accountId": { @@ -89,49 +88,59 @@ "bucketId": { "role": "parent", "type": "int64" + }, + "columnId": { + "role": "parent", + "type": "int64" } } }, { - "pattern": "/{accountId}/card_tables/cards/{cardId}", + "pattern": "/{accountId}/buckets/{bucketId}/card_tables/columns/{columnId}/on_hold", "resource": "Card Tables", "operations": { - "GET": "GetCard", - "PUT": "UpdateCard" + "DELETE": "DisableCardColumnOnHold", + "POST": "EnableCardColumnOnHold" }, "params": { "accountId": { "role": "account", "type": "string" }, - "cardId": { - "role": "recording", + "bucketId": { + "role": "parent", + "type": "int64" + }, + "columnId": { + "role": "parent", "type": "int64" } } }, { - "pattern": "/{accountId}/card_tables/cards/{cardId}/moves", - "resource": "Card Tables", + "pattern": "/{accountId}/buckets/{bucketId}/webhooks", + "resource": "Automation", "operations": { - "POST": "MoveCard" + "GET": "ListWebhooks", + "POST": "CreateWebhook" }, "params": { "accountId": { "role": "account", "type": "string" }, - "cardId": { + "bucketId": { "role": "parent", "type": "int64" } } }, { - "pattern": "/{accountId}/card_tables/cards/{cardId}/positions", + "pattern": "/{accountId}/card_tables/cards/{cardId}", "resource": "Card Tables", "operations": { - "POST": "RepositionCardStep" + "GET": "GetCard", + "PUT": "UpdateCard" }, "params": { "accountId": { @@ -139,16 +148,16 @@ "type": "string" }, "cardId": { - "role": "parent", + "role": "recording", "type": "int64" } } }, { - "pattern": "/{accountId}/card_tables/cards/{cardId}/steps", + "pattern": "/{accountId}/card_tables/cards/{cardId}/moves", "resource": "Card Tables", "operations": { - "POST": "CreateCardStep" + "POST": "MoveCard" }, "params": { "accountId": { @@ -162,46 +171,45 @@ } }, { - "pattern": "/{accountId}/card_tables/columns/{columnId}", + "pattern": "/{accountId}/card_tables/cards/{cardId}/positions", "resource": "Card Tables", "operations": { - "GET": "GetCardColumn", - "PUT": "UpdateCardColumn" + "POST": "RepositionCardStep" }, "params": { "accountId": { "role": "account", "type": "string" }, - "columnId": { - "role": "recording", + "cardId": { + "role": "parent", "type": "int64" } } }, { - "pattern": "/{accountId}/card_tables/columns/{columnId}/color", + "pattern": "/{accountId}/card_tables/cards/{cardId}/steps", "resource": "Card Tables", "operations": { - "PUT": "SetCardColumnColor" + "POST": "CreateCardStep" }, "params": { "accountId": { "role": "account", "type": "string" }, - "columnId": { + "cardId": { "role": "parent", "type": "int64" } } }, { - "pattern": "/{accountId}/card_tables/columns/{columnId}/on_hold", + "pattern": "/{accountId}/card_tables/columns/{columnId}", "resource": "Card Tables", "operations": { - "DELETE": "DisableCardColumnOnHold", - "POST": "EnableCardColumnOnHold" + "GET": "GetCardColumn", + "PUT": "UpdateCardColumn" }, "params": { "accountId": { @@ -209,7 +217,7 @@ "type": "string" }, "columnId": { - "role": "parent", + "role": "recording", "type": "int64" } } diff --git a/go/pkg/generated/client.gen.go b/go/pkg/generated/client.gen.go index 084b8282..f7e3b7d4 100644 --- a/go/pkg/generated/client.gen.go +++ b/go/pkg/generated/client.gen.go @@ -2729,6 +2729,9 @@ type UpdateAccountLogoMultipartRequestBody UpdateAccountLogoMultipartBody // UpdateAccountNameJSONRequestBody defines body for UpdateAccountName for application/json ContentType. type UpdateAccountNameJSONRequestBody = UpdateAccountNameRequestContent +// SetCardColumnColorJSONRequestBody defines body for SetCardColumnColor for application/json ContentType. +type SetCardColumnColorJSONRequestBody = SetCardColumnColorRequestContent + // CreateWebhookJSONRequestBody defines body for CreateWebhook for application/json ContentType. type CreateWebhookJSONRequestBody = CreateWebhookRequestContent @@ -2747,9 +2750,6 @@ type CreateCardStepJSONRequestBody = CreateCardStepRequestContent // UpdateCardColumnJSONRequestBody defines body for UpdateCardColumn for application/json ContentType. type UpdateCardColumnJSONRequestBody = UpdateCardColumnRequestContent -// SetCardColumnColorJSONRequestBody defines body for SetCardColumnColor for application/json ContentType. -type SetCardColumnColorJSONRequestBody = SetCardColumnColorRequestContent - // CreateCardJSONRequestBody defines body for CreateCard for application/json ContentType. type CreateCardJSONRequestBody = CreateCardRequestContent @@ -3249,6 +3249,17 @@ type ClientInterface interface { // GetBoost request GetBoost(ctx context.Context, accountId string, boostId int64, reqEditors ...RequestEditorFn) (*http.Response, error) + // SetCardColumnColorWithBody request with any body + SetCardColumnColorWithBody(ctx context.Context, accountId string, bucketId int64, columnId int64, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) + + SetCardColumnColor(ctx context.Context, accountId string, bucketId int64, columnId int64, body SetCardColumnColorJSONRequestBody, reqEditors ...RequestEditorFn) (*http.Response, error) + + // DisableCardColumnOnHold request + DisableCardColumnOnHold(ctx context.Context, accountId string, bucketId int64, columnId int64, reqEditors ...RequestEditorFn) (*http.Response, error) + + // EnableCardColumnOnHold request + EnableCardColumnOnHold(ctx context.Context, accountId string, bucketId int64, columnId int64, reqEditors ...RequestEditorFn) (*http.Response, error) + // ListWebhooks request ListWebhooks(ctx context.Context, accountId string, bucketId int64, reqEditors ...RequestEditorFn) (*http.Response, error) @@ -3288,17 +3299,6 @@ type ClientInterface interface { UpdateCardColumn(ctx context.Context, accountId string, columnId int64, body UpdateCardColumnJSONRequestBody, reqEditors ...RequestEditorFn) (*http.Response, error) - // SetCardColumnColorWithBody request with any body - SetCardColumnColorWithBody(ctx context.Context, accountId string, columnId int64, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) - - SetCardColumnColor(ctx context.Context, accountId string, columnId int64, body SetCardColumnColorJSONRequestBody, reqEditors ...RequestEditorFn) (*http.Response, error) - - // DisableCardColumnOnHold request - DisableCardColumnOnHold(ctx context.Context, accountId string, columnId int64, reqEditors ...RequestEditorFn) (*http.Response, error) - - // EnableCardColumnOnHold request - EnableCardColumnOnHold(ctx context.Context, accountId string, columnId int64, reqEditors ...RequestEditorFn) (*http.Response, error) - // ListCards request ListCards(ctx context.Context, accountId string, columnId int64, reqEditors ...RequestEditorFn) (*http.Response, error) @@ -4060,6 +4060,50 @@ func (c *Client) GetBoost(ctx context.Context, accountId string, boostId int64, } +// SetCardColumnColorWithBody is marked as idempotent and will be retried on transient failures. + +func (c *Client) SetCardColumnColorWithBody(ctx context.Context, accountId string, bucketId int64, columnId int64, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) { + + return c.doWithRetry(ctx, func() (*http.Request, error) { + return NewSetCardColumnColorRequestWithBody(c.Server, accountId, bucketId, columnId, contentType, body) + }, true, "SetCardColumnColor", reqEditors...) + +} + +func (c *Client) SetCardColumnColor(ctx context.Context, accountId string, bucketId int64, columnId int64, body SetCardColumnColorJSONRequestBody, reqEditors ...RequestEditorFn) (*http.Response, error) { + + return c.doWithRetry(ctx, func() (*http.Request, error) { + return NewSetCardColumnColorRequest(c.Server, accountId, bucketId, columnId, body) + }, true, "SetCardColumnColor", reqEditors...) + +} + +// DisableCardColumnOnHold is marked as idempotent and will be retried on transient failures. + +func (c *Client) DisableCardColumnOnHold(ctx context.Context, accountId string, bucketId int64, columnId int64, reqEditors ...RequestEditorFn) (*http.Response, error) { + + return c.doWithRetry(ctx, func() (*http.Request, error) { + return NewDisableCardColumnOnHoldRequest(c.Server, accountId, bucketId, columnId) + }, true, "DisableCardColumnOnHold", reqEditors...) + +} + +// EnableCardColumnOnHold executes the EnableCardColumnOnHold operation. + +func (c *Client) EnableCardColumnOnHold(ctx context.Context, accountId string, bucketId int64, columnId int64, reqEditors ...RequestEditorFn) (*http.Response, error) { + + req, err := NewEnableCardColumnOnHoldRequest(c.Server, accountId, bucketId, columnId) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if err := c.applyEditors(ctx, req, reqEditors); err != nil { + return nil, err + } + return c.Client.Do(req) + +} + // ListWebhooks is marked as idempotent and will be retried on transient failures. func (c *Client) ListWebhooks(ctx context.Context, accountId string, bucketId int64, reqEditors ...RequestEditorFn) (*http.Response, error) { @@ -4246,50 +4290,6 @@ func (c *Client) UpdateCardColumn(ctx context.Context, accountId string, columnI } -// SetCardColumnColorWithBody is marked as idempotent and will be retried on transient failures. - -func (c *Client) SetCardColumnColorWithBody(ctx context.Context, accountId string, columnId int64, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) { - - return c.doWithRetry(ctx, func() (*http.Request, error) { - return NewSetCardColumnColorRequestWithBody(c.Server, accountId, columnId, contentType, body) - }, true, "SetCardColumnColor", reqEditors...) - -} - -func (c *Client) SetCardColumnColor(ctx context.Context, accountId string, columnId int64, body SetCardColumnColorJSONRequestBody, reqEditors ...RequestEditorFn) (*http.Response, error) { - - return c.doWithRetry(ctx, func() (*http.Request, error) { - return NewSetCardColumnColorRequest(c.Server, accountId, columnId, body) - }, true, "SetCardColumnColor", reqEditors...) - -} - -// DisableCardColumnOnHold is marked as idempotent and will be retried on transient failures. - -func (c *Client) DisableCardColumnOnHold(ctx context.Context, accountId string, columnId int64, reqEditors ...RequestEditorFn) (*http.Response, error) { - - return c.doWithRetry(ctx, func() (*http.Request, error) { - return NewDisableCardColumnOnHoldRequest(c.Server, accountId, columnId) - }, true, "DisableCardColumnOnHold", reqEditors...) - -} - -// EnableCardColumnOnHold executes the EnableCardColumnOnHold operation. - -func (c *Client) EnableCardColumnOnHold(ctx context.Context, accountId string, columnId int64, reqEditors ...RequestEditorFn) (*http.Response, error) { - - req, err := NewEnableCardColumnOnHoldRequest(c.Server, accountId, columnId) - if err != nil { - return nil, err - } - req = req.WithContext(ctx) - if err := c.applyEditors(ctx, req, reqEditors); err != nil { - return nil, err - } - return c.Client.Do(req) - -} - // ListCards is marked as idempotent and will be retried on transient failures. func (c *Client) ListCards(ctx context.Context, accountId string, columnId int64, reqEditors ...RequestEditorFn) (*http.Response, error) { @@ -7273,6 +7273,163 @@ func NewGetBoostRequest(server string, accountId string, boostId int64) (*http.R return req, nil } +// NewSetCardColumnColorRequest calls the generic SetCardColumnColor builder with application/json body +func NewSetCardColumnColorRequest(server string, accountId string, bucketId int64, columnId int64, body SetCardColumnColorJSONRequestBody) (*http.Request, error) { + var bodyReader io.Reader + buf, err := json.Marshal(body) + if err != nil { + return nil, err + } + bodyReader = bytes.NewReader(buf) + return NewSetCardColumnColorRequestWithBody(server, accountId, bucketId, columnId, "application/json", bodyReader) +} + +// NewSetCardColumnColorRequestWithBody generates requests for SetCardColumnColor with any type of body +func NewSetCardColumnColorRequestWithBody(server string, accountId string, bucketId int64, columnId int64, contentType string, body io.Reader) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParamWithLocation("simple", false, "accountId", runtime.ParamLocationPath, accountId) + if err != nil { + return nil, err + } + + var pathParam1 string + + pathParam1, err = runtime.StyleParamWithLocation("simple", false, "bucketId", runtime.ParamLocationPath, bucketId) + if err != nil { + return nil, err + } + + var pathParam2 string + + pathParam2, err = runtime.StyleParamWithLocation("simple", false, "columnId", runtime.ParamLocationPath, columnId) + if err != nil { + return nil, err + } + + serverURL, err := url.Parse(server) + if err != nil { + return nil, err + } + + operationPath := fmt.Sprintf("/%s/buckets/%s/card_tables/columns/%s/color.json", pathParam0, pathParam1, pathParam2) + if operationPath[0] == '/' { + operationPath = "." + operationPath + } + + queryURL, err := serverURL.Parse(operationPath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("PUT", queryURL.String(), body) + if err != nil { + return nil, err + } + + req.Header.Add("Content-Type", contentType) + + return req, nil +} + +// NewDisableCardColumnOnHoldRequest generates requests for DisableCardColumnOnHold +func NewDisableCardColumnOnHoldRequest(server string, accountId string, bucketId int64, columnId int64) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParamWithLocation("simple", false, "accountId", runtime.ParamLocationPath, accountId) + if err != nil { + return nil, err + } + + var pathParam1 string + + pathParam1, err = runtime.StyleParamWithLocation("simple", false, "bucketId", runtime.ParamLocationPath, bucketId) + if err != nil { + return nil, err + } + + var pathParam2 string + + pathParam2, err = runtime.StyleParamWithLocation("simple", false, "columnId", runtime.ParamLocationPath, columnId) + if err != nil { + return nil, err + } + + serverURL, err := url.Parse(server) + if err != nil { + return nil, err + } + + operationPath := fmt.Sprintf("/%s/buckets/%s/card_tables/columns/%s/on_hold.json", pathParam0, pathParam1, pathParam2) + if operationPath[0] == '/' { + operationPath = "." + operationPath + } + + queryURL, err := serverURL.Parse(operationPath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("DELETE", queryURL.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewEnableCardColumnOnHoldRequest generates requests for EnableCardColumnOnHold +func NewEnableCardColumnOnHoldRequest(server string, accountId string, bucketId int64, columnId int64) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParamWithLocation("simple", false, "accountId", runtime.ParamLocationPath, accountId) + if err != nil { + return nil, err + } + + var pathParam1 string + + pathParam1, err = runtime.StyleParamWithLocation("simple", false, "bucketId", runtime.ParamLocationPath, bucketId) + if err != nil { + return nil, err + } + + var pathParam2 string + + pathParam2, err = runtime.StyleParamWithLocation("simple", false, "columnId", runtime.ParamLocationPath, columnId) + if err != nil { + return nil, err + } + + serverURL, err := url.Parse(server) + if err != nil { + return nil, err + } + + operationPath := fmt.Sprintf("/%s/buckets/%s/card_tables/columns/%s/on_hold.json", pathParam0, pathParam1, pathParam2) + if operationPath[0] == '/' { + operationPath = "." + operationPath + } + + queryURL, err := serverURL.Parse(operationPath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("POST", queryURL.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + // NewListWebhooksRequest generates requests for ListWebhooks func NewListWebhooksRequest(server string, accountId string, bucketId int64) (*http.Request, error) { var err error @@ -7720,19 +7877,8 @@ func NewUpdateCardColumnRequestWithBody(server string, accountId string, columnI return req, nil } -// NewSetCardColumnColorRequest calls the generic SetCardColumnColor builder with application/json body -func NewSetCardColumnColorRequest(server string, accountId string, columnId int64, body SetCardColumnColorJSONRequestBody) (*http.Request, error) { - var bodyReader io.Reader - buf, err := json.Marshal(body) - if err != nil { - return nil, err - } - bodyReader = bytes.NewReader(buf) - return NewSetCardColumnColorRequestWithBody(server, accountId, columnId, "application/json", bodyReader) -} - -// NewSetCardColumnColorRequestWithBody generates requests for SetCardColumnColor with any type of body -func NewSetCardColumnColorRequestWithBody(server string, accountId string, columnId int64, contentType string, body io.Reader) (*http.Request, error) { +// NewListCardsRequest generates requests for ListCards +func NewListCardsRequest(server string, accountId string, columnId int64) (*http.Request, error) { var err error var pathParam0 string @@ -7754,7 +7900,7 @@ func NewSetCardColumnColorRequestWithBody(server string, accountId string, colum return nil, err } - operationPath := fmt.Sprintf("/%s/card_tables/columns/%s/color.json", pathParam0, pathParam1) + operationPath := fmt.Sprintf("/%s/card_tables/lists/%s/cards.json", pathParam0, pathParam1) if operationPath[0] == '/' { operationPath = "." + operationPath } @@ -7764,132 +7910,7 @@ func NewSetCardColumnColorRequestWithBody(server string, accountId string, colum return nil, err } - req, err := http.NewRequest("PUT", queryURL.String(), body) - if err != nil { - return nil, err - } - - req.Header.Add("Content-Type", contentType) - - return req, nil -} - -// NewDisableCardColumnOnHoldRequest generates requests for DisableCardColumnOnHold -func NewDisableCardColumnOnHoldRequest(server string, accountId string, columnId int64) (*http.Request, error) { - var err error - - var pathParam0 string - - pathParam0, err = runtime.StyleParamWithLocation("simple", false, "accountId", runtime.ParamLocationPath, accountId) - if err != nil { - return nil, err - } - - var pathParam1 string - - pathParam1, err = runtime.StyleParamWithLocation("simple", false, "columnId", runtime.ParamLocationPath, columnId) - if err != nil { - return nil, err - } - - serverURL, err := url.Parse(server) - if err != nil { - return nil, err - } - - operationPath := fmt.Sprintf("/%s/card_tables/columns/%s/on_hold.json", pathParam0, pathParam1) - if operationPath[0] == '/' { - operationPath = "." + operationPath - } - - queryURL, err := serverURL.Parse(operationPath) - if err != nil { - return nil, err - } - - req, err := http.NewRequest("DELETE", queryURL.String(), nil) - if err != nil { - return nil, err - } - - return req, nil -} - -// NewEnableCardColumnOnHoldRequest generates requests for EnableCardColumnOnHold -func NewEnableCardColumnOnHoldRequest(server string, accountId string, columnId int64) (*http.Request, error) { - var err error - - var pathParam0 string - - pathParam0, err = runtime.StyleParamWithLocation("simple", false, "accountId", runtime.ParamLocationPath, accountId) - if err != nil { - return nil, err - } - - var pathParam1 string - - pathParam1, err = runtime.StyleParamWithLocation("simple", false, "columnId", runtime.ParamLocationPath, columnId) - if err != nil { - return nil, err - } - - serverURL, err := url.Parse(server) - if err != nil { - return nil, err - } - - operationPath := fmt.Sprintf("/%s/card_tables/columns/%s/on_hold.json", pathParam0, pathParam1) - if operationPath[0] == '/' { - operationPath = "." + operationPath - } - - queryURL, err := serverURL.Parse(operationPath) - if err != nil { - return nil, err - } - - req, err := http.NewRequest("POST", queryURL.String(), nil) - if err != nil { - return nil, err - } - - return req, nil -} - -// NewListCardsRequest generates requests for ListCards -func NewListCardsRequest(server string, accountId string, columnId int64) (*http.Request, error) { - var err error - - var pathParam0 string - - pathParam0, err = runtime.StyleParamWithLocation("simple", false, "accountId", runtime.ParamLocationPath, accountId) - if err != nil { - return nil, err - } - - var pathParam1 string - - pathParam1, err = runtime.StyleParamWithLocation("simple", false, "columnId", runtime.ParamLocationPath, columnId) - if err != nil { - return nil, err - } - - serverURL, err := url.Parse(server) - if err != nil { - return nil, err - } - - operationPath := fmt.Sprintf("/%s/card_tables/lists/%s/cards.json", pathParam0, pathParam1) - if operationPath[0] == '/' { - operationPath = "." + operationPath - } - - queryURL, err := serverURL.Parse(operationPath) - if err != nil { - return nil, err - } - - req, err := http.NewRequest("GET", queryURL.String(), nil) + req, err := http.NewRequest("GET", queryURL.String(), nil) if err != nil { return nil, err } @@ -16870,6 +16891,9 @@ var operationMetadata = map[string]OperationMetadata{ "CreateAttachment": {Idempotent: false, HasSensitiveParams: false}, "DeleteBoost": {Idempotent: true, HasSensitiveParams: false}, "GetBoost": {Idempotent: true, HasSensitiveParams: false}, + "SetCardColumnColor": {Idempotent: true, HasSensitiveParams: false}, + "DisableCardColumnOnHold": {Idempotent: true, HasSensitiveParams: false}, + "EnableCardColumnOnHold": {Idempotent: false, HasSensitiveParams: false}, "ListWebhooks": {Idempotent: true, HasSensitiveParams: false}, "CreateWebhook": {Idempotent: false, HasSensitiveParams: false}, "GetCard": {Idempotent: true, HasSensitiveParams: false}, @@ -16879,9 +16903,6 @@ var operationMetadata = map[string]OperationMetadata{ "CreateCardStep": {Idempotent: false, HasSensitiveParams: false}, "GetCardColumn": {Idempotent: true, HasSensitiveParams: false}, "UpdateCardColumn": {Idempotent: true, HasSensitiveParams: false}, - "SetCardColumnColor": {Idempotent: true, HasSensitiveParams: false}, - "DisableCardColumnOnHold": {Idempotent: true, HasSensitiveParams: false}, - "EnableCardColumnOnHold": {Idempotent: false, HasSensitiveParams: false}, "ListCards": {Idempotent: true, HasSensitiveParams: false}, "CreateCard": {Idempotent: false, HasSensitiveParams: false}, "UnsubscribeFromCardColumn": {Idempotent: true, HasSensitiveParams: false}, @@ -18024,6 +18045,17 @@ type ClientWithResponsesInterface interface { // GetBoostWithResponse request GetBoostWithResponse(ctx context.Context, accountId string, boostId int64, reqEditors ...RequestEditorFn) (*GetBoostResponse, error) + // SetCardColumnColorWithBodyWithResponse request with any body + SetCardColumnColorWithBodyWithResponse(ctx context.Context, accountId string, bucketId int64, columnId int64, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*SetCardColumnColorResponse, error) + + SetCardColumnColorWithResponse(ctx context.Context, accountId string, bucketId int64, columnId int64, body SetCardColumnColorJSONRequestBody, reqEditors ...RequestEditorFn) (*SetCardColumnColorResponse, error) + + // DisableCardColumnOnHoldWithResponse request + DisableCardColumnOnHoldWithResponse(ctx context.Context, accountId string, bucketId int64, columnId int64, reqEditors ...RequestEditorFn) (*DisableCardColumnOnHoldResponse, error) + + // EnableCardColumnOnHoldWithResponse request + EnableCardColumnOnHoldWithResponse(ctx context.Context, accountId string, bucketId int64, columnId int64, reqEditors ...RequestEditorFn) (*EnableCardColumnOnHoldResponse, error) + // ListWebhooksWithResponse request ListWebhooksWithResponse(ctx context.Context, accountId string, bucketId int64, reqEditors ...RequestEditorFn) (*ListWebhooksResponse, error) @@ -18063,17 +18095,6 @@ type ClientWithResponsesInterface interface { UpdateCardColumnWithResponse(ctx context.Context, accountId string, columnId int64, body UpdateCardColumnJSONRequestBody, reqEditors ...RequestEditorFn) (*UpdateCardColumnResponse, error) - // SetCardColumnColorWithBodyWithResponse request with any body - SetCardColumnColorWithBodyWithResponse(ctx context.Context, accountId string, columnId int64, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*SetCardColumnColorResponse, error) - - SetCardColumnColorWithResponse(ctx context.Context, accountId string, columnId int64, body SetCardColumnColorJSONRequestBody, reqEditors ...RequestEditorFn) (*SetCardColumnColorResponse, error) - - // DisableCardColumnOnHoldWithResponse request - DisableCardColumnOnHoldWithResponse(ctx context.Context, accountId string, columnId int64, reqEditors ...RequestEditorFn) (*DisableCardColumnOnHoldResponse, error) - - // EnableCardColumnOnHoldWithResponse request - EnableCardColumnOnHoldWithResponse(ctx context.Context, accountId string, columnId int64, reqEditors ...RequestEditorFn) (*EnableCardColumnOnHoldResponse, error) - // ListCardsWithResponse request ListCardsWithResponse(ctx context.Context, accountId string, columnId int64, reqEditors ...RequestEditorFn) (*ListCardsResponse, error) @@ -18932,6 +18953,86 @@ func (r GetBoostResponse) StatusCode() int { return 0 } +type SetCardColumnColorResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *SetCardColumnColorResponseContent + JSON401 *UnauthorizedErrorResponseContent + JSON403 *ForbiddenErrorResponseContent + JSON404 *NotFoundErrorResponseContent + JSON422 *ValidationErrorResponseContent + JSON500 *InternalServerErrorResponseContent +} + +// Status returns HTTPResponse.Status +func (r SetCardColumnColorResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r SetCardColumnColorResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type DisableCardColumnOnHoldResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *DisableCardColumnOnHoldResponseContent + JSON401 *UnauthorizedErrorResponseContent + JSON403 *ForbiddenErrorResponseContent + JSON404 *NotFoundErrorResponseContent + JSON500 *InternalServerErrorResponseContent +} + +// Status returns HTTPResponse.Status +func (r DisableCardColumnOnHoldResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r DisableCardColumnOnHoldResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type EnableCardColumnOnHoldResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *EnableCardColumnOnHoldResponseContent + JSON401 *UnauthorizedErrorResponseContent + JSON403 *ForbiddenErrorResponseContent + JSON422 *ValidationErrorResponseContent + JSON429 *RateLimitErrorResponseContent + JSON500 *InternalServerErrorResponseContent +} + +// Status returns HTTPResponse.Status +func (r EnableCardColumnOnHoldResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r EnableCardColumnOnHoldResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + type ListWebhooksResponse struct { Body []byte HTTPResponse *http.Response @@ -19171,19 +19272,18 @@ func (r UpdateCardColumnResponse) StatusCode() int { return 0 } -type SetCardColumnColorResponse struct { +type ListCardsResponse struct { Body []byte HTTPResponse *http.Response - JSON200 *SetCardColumnColorResponseContent + JSON200 *ListCardsResponseContent JSON401 *UnauthorizedErrorResponseContent JSON403 *ForbiddenErrorResponseContent - JSON404 *NotFoundErrorResponseContent - JSON422 *ValidationErrorResponseContent + JSON429 *RateLimitErrorResponseContent JSON500 *InternalServerErrorResponseContent } // Status returns HTTPResponse.Status -func (r SetCardColumnColorResponse) Status() string { +func (r ListCardsResponse) Status() string { if r.HTTPResponse != nil { return r.HTTPResponse.Status } @@ -19191,25 +19291,26 @@ func (r SetCardColumnColorResponse) Status() string { } // StatusCode returns HTTPResponse.StatusCode -func (r SetCardColumnColorResponse) StatusCode() int { +func (r ListCardsResponse) StatusCode() int { if r.HTTPResponse != nil { return r.HTTPResponse.StatusCode } return 0 } -type DisableCardColumnOnHoldResponse struct { +type CreateCardResponse struct { Body []byte HTTPResponse *http.Response - JSON200 *DisableCardColumnOnHoldResponseContent + JSON201 *CreateCardResponseContent JSON401 *UnauthorizedErrorResponseContent JSON403 *ForbiddenErrorResponseContent - JSON404 *NotFoundErrorResponseContent + JSON422 *ValidationErrorResponseContent + JSON429 *RateLimitErrorResponseContent JSON500 *InternalServerErrorResponseContent } // Status returns HTTPResponse.Status -func (r DisableCardColumnOnHoldResponse) Status() string { +func (r CreateCardResponse) Status() string { if r.HTTPResponse != nil { return r.HTTPResponse.Status } @@ -19217,26 +19318,24 @@ func (r DisableCardColumnOnHoldResponse) Status() string { } // StatusCode returns HTTPResponse.StatusCode -func (r DisableCardColumnOnHoldResponse) StatusCode() int { +func (r CreateCardResponse) StatusCode() int { if r.HTTPResponse != nil { return r.HTTPResponse.StatusCode } return 0 } -type EnableCardColumnOnHoldResponse struct { +type UnsubscribeFromCardColumnResponse struct { Body []byte HTTPResponse *http.Response - JSON200 *EnableCardColumnOnHoldResponseContent JSON401 *UnauthorizedErrorResponseContent JSON403 *ForbiddenErrorResponseContent - JSON422 *ValidationErrorResponseContent - JSON429 *RateLimitErrorResponseContent + JSON404 *NotFoundErrorResponseContent JSON500 *InternalServerErrorResponseContent } // Status returns HTTPResponse.Status -func (r EnableCardColumnOnHoldResponse) Status() string { +func (r UnsubscribeFromCardColumnResponse) Status() string { if r.HTTPResponse != nil { return r.HTTPResponse.Status } @@ -19244,103 +19343,25 @@ func (r EnableCardColumnOnHoldResponse) Status() string { } // StatusCode returns HTTPResponse.StatusCode -func (r EnableCardColumnOnHoldResponse) StatusCode() int { +func (r UnsubscribeFromCardColumnResponse) StatusCode() int { if r.HTTPResponse != nil { return r.HTTPResponse.StatusCode } return 0 } -type ListCardsResponse struct { +type SubscribeToCardColumnResponse struct { Body []byte HTTPResponse *http.Response - JSON200 *ListCardsResponseContent JSON401 *UnauthorizedErrorResponseContent JSON403 *ForbiddenErrorResponseContent + JSON404 *NotFoundErrorResponseContent JSON429 *RateLimitErrorResponseContent JSON500 *InternalServerErrorResponseContent } // Status returns HTTPResponse.Status -func (r ListCardsResponse) Status() string { - if r.HTTPResponse != nil { - return r.HTTPResponse.Status - } - return http.StatusText(0) -} - -// StatusCode returns HTTPResponse.StatusCode -func (r ListCardsResponse) StatusCode() int { - if r.HTTPResponse != nil { - return r.HTTPResponse.StatusCode - } - return 0 -} - -type CreateCardResponse struct { - Body []byte - HTTPResponse *http.Response - JSON201 *CreateCardResponseContent - JSON401 *UnauthorizedErrorResponseContent - JSON403 *ForbiddenErrorResponseContent - JSON422 *ValidationErrorResponseContent - JSON429 *RateLimitErrorResponseContent - JSON500 *InternalServerErrorResponseContent -} - -// Status returns HTTPResponse.Status -func (r CreateCardResponse) Status() string { - if r.HTTPResponse != nil { - return r.HTTPResponse.Status - } - return http.StatusText(0) -} - -// StatusCode returns HTTPResponse.StatusCode -func (r CreateCardResponse) StatusCode() int { - if r.HTTPResponse != nil { - return r.HTTPResponse.StatusCode - } - return 0 -} - -type UnsubscribeFromCardColumnResponse struct { - Body []byte - HTTPResponse *http.Response - JSON401 *UnauthorizedErrorResponseContent - JSON403 *ForbiddenErrorResponseContent - JSON404 *NotFoundErrorResponseContent - JSON500 *InternalServerErrorResponseContent -} - -// Status returns HTTPResponse.Status -func (r UnsubscribeFromCardColumnResponse) Status() string { - if r.HTTPResponse != nil { - return r.HTTPResponse.Status - } - return http.StatusText(0) -} - -// StatusCode returns HTTPResponse.StatusCode -func (r UnsubscribeFromCardColumnResponse) StatusCode() int { - if r.HTTPResponse != nil { - return r.HTTPResponse.StatusCode - } - return 0 -} - -type SubscribeToCardColumnResponse struct { - Body []byte - HTTPResponse *http.Response - JSON401 *UnauthorizedErrorResponseContent - JSON403 *ForbiddenErrorResponseContent - JSON404 *NotFoundErrorResponseContent - JSON429 *RateLimitErrorResponseContent - JSON500 *InternalServerErrorResponseContent -} - -// Status returns HTTPResponse.Status -func (r SubscribeToCardColumnResponse) Status() string { +func (r SubscribeToCardColumnResponse) Status() string { if r.HTTPResponse != nil { return r.HTTPResponse.Status } @@ -24148,6 +24169,41 @@ func (c *ClientWithResponses) GetBoostWithResponse(ctx context.Context, accountI return ParseGetBoostResponse(rsp) } +// SetCardColumnColorWithBodyWithResponse request with arbitrary body returning *SetCardColumnColorResponse +func (c *ClientWithResponses) SetCardColumnColorWithBodyWithResponse(ctx context.Context, accountId string, bucketId int64, columnId int64, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*SetCardColumnColorResponse, error) { + rsp, err := c.SetCardColumnColorWithBody(ctx, accountId, bucketId, columnId, contentType, body, reqEditors...) + if err != nil { + return nil, err + } + return ParseSetCardColumnColorResponse(rsp) +} + +func (c *ClientWithResponses) SetCardColumnColorWithResponse(ctx context.Context, accountId string, bucketId int64, columnId int64, body SetCardColumnColorJSONRequestBody, reqEditors ...RequestEditorFn) (*SetCardColumnColorResponse, error) { + rsp, err := c.SetCardColumnColor(ctx, accountId, bucketId, columnId, body, reqEditors...) + if err != nil { + return nil, err + } + return ParseSetCardColumnColorResponse(rsp) +} + +// DisableCardColumnOnHoldWithResponse request returning *DisableCardColumnOnHoldResponse +func (c *ClientWithResponses) DisableCardColumnOnHoldWithResponse(ctx context.Context, accountId string, bucketId int64, columnId int64, reqEditors ...RequestEditorFn) (*DisableCardColumnOnHoldResponse, error) { + rsp, err := c.DisableCardColumnOnHold(ctx, accountId, bucketId, columnId, reqEditors...) + if err != nil { + return nil, err + } + return ParseDisableCardColumnOnHoldResponse(rsp) +} + +// EnableCardColumnOnHoldWithResponse request returning *EnableCardColumnOnHoldResponse +func (c *ClientWithResponses) EnableCardColumnOnHoldWithResponse(ctx context.Context, accountId string, bucketId int64, columnId int64, reqEditors ...RequestEditorFn) (*EnableCardColumnOnHoldResponse, error) { + rsp, err := c.EnableCardColumnOnHold(ctx, accountId, bucketId, columnId, reqEditors...) + if err != nil { + return nil, err + } + return ParseEnableCardColumnOnHoldResponse(rsp) +} + // ListWebhooksWithResponse request returning *ListWebhooksResponse func (c *ClientWithResponses) ListWebhooksWithResponse(ctx context.Context, accountId string, bucketId int64, reqEditors ...RequestEditorFn) (*ListWebhooksResponse, error) { rsp, err := c.ListWebhooks(ctx, accountId, bucketId, reqEditors...) @@ -24277,41 +24333,6 @@ func (c *ClientWithResponses) UpdateCardColumnWithResponse(ctx context.Context, return ParseUpdateCardColumnResponse(rsp) } -// SetCardColumnColorWithBodyWithResponse request with arbitrary body returning *SetCardColumnColorResponse -func (c *ClientWithResponses) SetCardColumnColorWithBodyWithResponse(ctx context.Context, accountId string, columnId int64, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*SetCardColumnColorResponse, error) { - rsp, err := c.SetCardColumnColorWithBody(ctx, accountId, columnId, contentType, body, reqEditors...) - if err != nil { - return nil, err - } - return ParseSetCardColumnColorResponse(rsp) -} - -func (c *ClientWithResponses) SetCardColumnColorWithResponse(ctx context.Context, accountId string, columnId int64, body SetCardColumnColorJSONRequestBody, reqEditors ...RequestEditorFn) (*SetCardColumnColorResponse, error) { - rsp, err := c.SetCardColumnColor(ctx, accountId, columnId, body, reqEditors...) - if err != nil { - return nil, err - } - return ParseSetCardColumnColorResponse(rsp) -} - -// DisableCardColumnOnHoldWithResponse request returning *DisableCardColumnOnHoldResponse -func (c *ClientWithResponses) DisableCardColumnOnHoldWithResponse(ctx context.Context, accountId string, columnId int64, reqEditors ...RequestEditorFn) (*DisableCardColumnOnHoldResponse, error) { - rsp, err := c.DisableCardColumnOnHold(ctx, accountId, columnId, reqEditors...) - if err != nil { - return nil, err - } - return ParseDisableCardColumnOnHoldResponse(rsp) -} - -// EnableCardColumnOnHoldWithResponse request returning *EnableCardColumnOnHoldResponse -func (c *ClientWithResponses) EnableCardColumnOnHoldWithResponse(ctx context.Context, accountId string, columnId int64, reqEditors ...RequestEditorFn) (*EnableCardColumnOnHoldResponse, error) { - rsp, err := c.EnableCardColumnOnHold(ctx, accountId, columnId, reqEditors...) - if err != nil { - return nil, err - } - return ParseEnableCardColumnOnHoldResponse(rsp) -} - // ListCardsWithResponse request returning *ListCardsResponse func (c *ClientWithResponses) ListCardsWithResponse(ctx context.Context, accountId string, columnId int64, reqEditors ...RequestEditorFn) (*ListCardsResponse, error) { rsp, err := c.ListCards(ctx, accountId, columnId, reqEditors...) @@ -26835,22 +26856,22 @@ func ParseGetBoostResponse(rsp *http.Response) (*GetBoostResponse, error) { return response, nil } -// ParseListWebhooksResponse parses an HTTP response from a ListWebhooksWithResponse call -func ParseListWebhooksResponse(rsp *http.Response) (*ListWebhooksResponse, error) { +// ParseSetCardColumnColorResponse parses an HTTP response from a SetCardColumnColorWithResponse call +func ParseSetCardColumnColorResponse(rsp *http.Response) (*SetCardColumnColorResponse, error) { bodyBytes, err := io.ReadAll(rsp.Body) defer func() { _ = rsp.Body.Close() }() if err != nil { return nil, err } - response := &ListWebhooksResponse{ + response := &SetCardColumnColorResponse{ Body: bodyBytes, HTTPResponse: rsp, } switch { case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: - var dest ListWebhooksResponseContent + var dest SetCardColumnColorResponseContent if err := json.Unmarshal(bodyBytes, &dest); err != nil { return nil, err } @@ -26870,12 +26891,19 @@ func ParseListWebhooksResponse(rsp *http.Response) (*ListWebhooksResponse, error } response.JSON403 = &dest - case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 429: - var dest RateLimitErrorResponseContent + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 404: + var dest NotFoundErrorResponseContent if err := json.Unmarshal(bodyBytes, &dest); err != nil { return nil, err } - response.JSON429 = &dest + response.JSON404 = &dest + + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 422: + var dest ValidationErrorResponseContent + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON422 = &dest case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 500: var dest InternalServerErrorResponseContent @@ -26889,33 +26917,26 @@ func ParseListWebhooksResponse(rsp *http.Response) (*ListWebhooksResponse, error return response, nil } -// ParseCreateWebhookResponse parses an HTTP response from a CreateWebhookWithResponse call -func ParseCreateWebhookResponse(rsp *http.Response) (*CreateWebhookResponse, error) { +// ParseDisableCardColumnOnHoldResponse parses an HTTP response from a DisableCardColumnOnHoldWithResponse call +func ParseDisableCardColumnOnHoldResponse(rsp *http.Response) (*DisableCardColumnOnHoldResponse, error) { bodyBytes, err := io.ReadAll(rsp.Body) defer func() { _ = rsp.Body.Close() }() if err != nil { return nil, err } - response := &CreateWebhookResponse{ + response := &DisableCardColumnOnHoldResponse{ Body: bodyBytes, HTTPResponse: rsp, } switch { - case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 201: - var dest CreateWebhookResponseContent - if err := json.Unmarshal(bodyBytes, &dest); err != nil { - return nil, err - } - response.JSON201 = &dest - - case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 400: - var dest BadRequestErrorResponseContent + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest DisableCardColumnOnHoldResponseContent if err := json.Unmarshal(bodyBytes, &dest); err != nil { return nil, err } - response.JSON400 = &dest + response.JSON200 = &dest case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401: var dest UnauthorizedErrorResponseContent @@ -26931,12 +26952,12 @@ func ParseCreateWebhookResponse(rsp *http.Response) (*CreateWebhookResponse, err } response.JSON403 = &dest - case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 429: - var dest RateLimitErrorResponseContent + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 404: + var dest NotFoundErrorResponseContent if err := json.Unmarshal(bodyBytes, &dest); err != nil { return nil, err } - response.JSON429 = &dest + response.JSON404 = &dest case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 500: var dest InternalServerErrorResponseContent @@ -26945,34 +26966,27 @@ func ParseCreateWebhookResponse(rsp *http.Response) (*CreateWebhookResponse, err } response.JSON500 = &dest - case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 507: - var dest WebhookLimitErrorResponseContent - if err := json.Unmarshal(bodyBytes, &dest); err != nil { - return nil, err - } - response.JSON507 = &dest - } return response, nil } -// ParseGetCardResponse parses an HTTP response from a GetCardWithResponse call -func ParseGetCardResponse(rsp *http.Response) (*GetCardResponse, error) { +// ParseEnableCardColumnOnHoldResponse parses an HTTP response from a EnableCardColumnOnHoldWithResponse call +func ParseEnableCardColumnOnHoldResponse(rsp *http.Response) (*EnableCardColumnOnHoldResponse, error) { bodyBytes, err := io.ReadAll(rsp.Body) defer func() { _ = rsp.Body.Close() }() if err != nil { return nil, err } - response := &GetCardResponse{ + response := &EnableCardColumnOnHoldResponse{ Body: bodyBytes, HTTPResponse: rsp, } switch { case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: - var dest GetCardResponseContent + var dest EnableCardColumnOnHoldResponseContent if err := json.Unmarshal(bodyBytes, &dest); err != nil { return nil, err } @@ -26992,12 +27006,19 @@ func ParseGetCardResponse(rsp *http.Response) (*GetCardResponse, error) { } response.JSON403 = &dest - case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 404: - var dest NotFoundErrorResponseContent + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 422: + var dest ValidationErrorResponseContent if err := json.Unmarshal(bodyBytes, &dest); err != nil { return nil, err } - response.JSON404 = &dest + response.JSON422 = &dest + + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 429: + var dest RateLimitErrorResponseContent + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON429 = &dest case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 500: var dest InternalServerErrorResponseContent @@ -27011,22 +27032,22 @@ func ParseGetCardResponse(rsp *http.Response) (*GetCardResponse, error) { return response, nil } -// ParseUpdateCardResponse parses an HTTP response from a UpdateCardWithResponse call -func ParseUpdateCardResponse(rsp *http.Response) (*UpdateCardResponse, error) { +// ParseListWebhooksResponse parses an HTTP response from a ListWebhooksWithResponse call +func ParseListWebhooksResponse(rsp *http.Response) (*ListWebhooksResponse, error) { bodyBytes, err := io.ReadAll(rsp.Body) defer func() { _ = rsp.Body.Close() }() if err != nil { return nil, err } - response := &UpdateCardResponse{ + response := &ListWebhooksResponse{ Body: bodyBytes, HTTPResponse: rsp, } switch { case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: - var dest UpdateCardResponseContent + var dest ListWebhooksResponseContent if err := json.Unmarshal(bodyBytes, &dest); err != nil { return nil, err } @@ -27046,19 +27067,12 @@ func ParseUpdateCardResponse(rsp *http.Response) (*UpdateCardResponse, error) { } response.JSON403 = &dest - case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 404: - var dest NotFoundErrorResponseContent - if err := json.Unmarshal(bodyBytes, &dest); err != nil { - return nil, err - } - response.JSON404 = &dest - - case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 422: - var dest ValidationErrorResponseContent + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 429: + var dest RateLimitErrorResponseContent if err := json.Unmarshal(bodyBytes, &dest); err != nil { return nil, err } - response.JSON422 = &dest + response.JSON429 = &dest case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 500: var dest InternalServerErrorResponseContent @@ -27072,20 +27086,34 @@ func ParseUpdateCardResponse(rsp *http.Response) (*UpdateCardResponse, error) { return response, nil } -// ParseMoveCardResponse parses an HTTP response from a MoveCardWithResponse call -func ParseMoveCardResponse(rsp *http.Response) (*MoveCardResponse, error) { +// ParseCreateWebhookResponse parses an HTTP response from a CreateWebhookWithResponse call +func ParseCreateWebhookResponse(rsp *http.Response) (*CreateWebhookResponse, error) { bodyBytes, err := io.ReadAll(rsp.Body) defer func() { _ = rsp.Body.Close() }() if err != nil { return nil, err } - response := &MoveCardResponse{ + response := &CreateWebhookResponse{ Body: bodyBytes, HTTPResponse: rsp, } switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 201: + var dest CreateWebhookResponseContent + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON201 = &dest + + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 400: + var dest BadRequestErrorResponseContent + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON400 = &dest + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401: var dest UnauthorizedErrorResponseContent if err := json.Unmarshal(bodyBytes, &dest); err != nil { @@ -27100,13 +27128,6 @@ func ParseMoveCardResponse(rsp *http.Response) (*MoveCardResponse, error) { } response.JSON403 = &dest - case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 422: - var dest ValidationErrorResponseContent - if err := json.Unmarshal(bodyBytes, &dest); err != nil { - return nil, err - } - response.JSON422 = &dest - case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 429: var dest RateLimitErrorResponseContent if err := json.Unmarshal(bodyBytes, &dest); err != nil { @@ -27121,25 +27142,39 @@ func ParseMoveCardResponse(rsp *http.Response) (*MoveCardResponse, error) { } response.JSON500 = &dest + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 507: + var dest WebhookLimitErrorResponseContent + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON507 = &dest + } return response, nil } -// ParseRepositionCardStepResponse parses an HTTP response from a RepositionCardStepWithResponse call -func ParseRepositionCardStepResponse(rsp *http.Response) (*RepositionCardStepResponse, error) { +// ParseGetCardResponse parses an HTTP response from a GetCardWithResponse call +func ParseGetCardResponse(rsp *http.Response) (*GetCardResponse, error) { bodyBytes, err := io.ReadAll(rsp.Body) defer func() { _ = rsp.Body.Close() }() if err != nil { return nil, err } - response := &RepositionCardStepResponse{ + response := &GetCardResponse{ Body: bodyBytes, HTTPResponse: rsp, } switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest GetCardResponseContent + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401: var dest UnauthorizedErrorResponseContent if err := json.Unmarshal(bodyBytes, &dest); err != nil { @@ -27154,19 +27189,12 @@ func ParseRepositionCardStepResponse(rsp *http.Response) (*RepositionCardStepRes } response.JSON403 = &dest - case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 422: - var dest ValidationErrorResponseContent - if err := json.Unmarshal(bodyBytes, &dest); err != nil { - return nil, err - } - response.JSON422 = &dest - - case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 429: - var dest RateLimitErrorResponseContent + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 404: + var dest NotFoundErrorResponseContent if err := json.Unmarshal(bodyBytes, &dest); err != nil { return nil, err } - response.JSON429 = &dest + response.JSON404 = &dest case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 500: var dest InternalServerErrorResponseContent @@ -27180,26 +27208,26 @@ func ParseRepositionCardStepResponse(rsp *http.Response) (*RepositionCardStepRes return response, nil } -// ParseCreateCardStepResponse parses an HTTP response from a CreateCardStepWithResponse call -func ParseCreateCardStepResponse(rsp *http.Response) (*CreateCardStepResponse, error) { +// ParseUpdateCardResponse parses an HTTP response from a UpdateCardWithResponse call +func ParseUpdateCardResponse(rsp *http.Response) (*UpdateCardResponse, error) { bodyBytes, err := io.ReadAll(rsp.Body) defer func() { _ = rsp.Body.Close() }() if err != nil { return nil, err } - response := &CreateCardStepResponse{ + response := &UpdateCardResponse{ Body: bodyBytes, HTTPResponse: rsp, } switch { - case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 201: - var dest CreateCardStepResponseContent + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest UpdateCardResponseContent if err := json.Unmarshal(bodyBytes, &dest); err != nil { return nil, err } - response.JSON201 = &dest + response.JSON200 = &dest case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401: var dest UnauthorizedErrorResponseContent @@ -27215,19 +27243,19 @@ func ParseCreateCardStepResponse(rsp *http.Response) (*CreateCardStepResponse, e } response.JSON403 = &dest - case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 422: - var dest ValidationErrorResponseContent + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 404: + var dest NotFoundErrorResponseContent if err := json.Unmarshal(bodyBytes, &dest); err != nil { return nil, err } - response.JSON422 = &dest + response.JSON404 = &dest - case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 429: - var dest RateLimitErrorResponseContent + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 422: + var dest ValidationErrorResponseContent if err := json.Unmarshal(bodyBytes, &dest); err != nil { return nil, err } - response.JSON429 = &dest + response.JSON422 = &dest case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 500: var dest InternalServerErrorResponseContent @@ -27241,27 +27269,20 @@ func ParseCreateCardStepResponse(rsp *http.Response) (*CreateCardStepResponse, e return response, nil } -// ParseGetCardColumnResponse parses an HTTP response from a GetCardColumnWithResponse call -func ParseGetCardColumnResponse(rsp *http.Response) (*GetCardColumnResponse, error) { +// ParseMoveCardResponse parses an HTTP response from a MoveCardWithResponse call +func ParseMoveCardResponse(rsp *http.Response) (*MoveCardResponse, error) { bodyBytes, err := io.ReadAll(rsp.Body) defer func() { _ = rsp.Body.Close() }() if err != nil { return nil, err } - response := &GetCardColumnResponse{ + response := &MoveCardResponse{ Body: bodyBytes, HTTPResponse: rsp, } switch { - case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: - var dest GetCardColumnResponseContent - if err := json.Unmarshal(bodyBytes, &dest); err != nil { - return nil, err - } - response.JSON200 = &dest - case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401: var dest UnauthorizedErrorResponseContent if err := json.Unmarshal(bodyBytes, &dest); err != nil { @@ -27276,12 +27297,19 @@ func ParseGetCardColumnResponse(rsp *http.Response) (*GetCardColumnResponse, err } response.JSON403 = &dest - case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 404: - var dest NotFoundErrorResponseContent + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 422: + var dest ValidationErrorResponseContent if err := json.Unmarshal(bodyBytes, &dest); err != nil { return nil, err } - response.JSON404 = &dest + response.JSON422 = &dest + + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 429: + var dest RateLimitErrorResponseContent + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON429 = &dest case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 500: var dest InternalServerErrorResponseContent @@ -27295,27 +27323,20 @@ func ParseGetCardColumnResponse(rsp *http.Response) (*GetCardColumnResponse, err return response, nil } -// ParseUpdateCardColumnResponse parses an HTTP response from a UpdateCardColumnWithResponse call -func ParseUpdateCardColumnResponse(rsp *http.Response) (*UpdateCardColumnResponse, error) { +// ParseRepositionCardStepResponse parses an HTTP response from a RepositionCardStepWithResponse call +func ParseRepositionCardStepResponse(rsp *http.Response) (*RepositionCardStepResponse, error) { bodyBytes, err := io.ReadAll(rsp.Body) defer func() { _ = rsp.Body.Close() }() if err != nil { return nil, err } - response := &UpdateCardColumnResponse{ + response := &RepositionCardStepResponse{ Body: bodyBytes, HTTPResponse: rsp, } switch { - case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: - var dest UpdateCardColumnResponseContent - if err := json.Unmarshal(bodyBytes, &dest); err != nil { - return nil, err - } - response.JSON200 = &dest - case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401: var dest UnauthorizedErrorResponseContent if err := json.Unmarshal(bodyBytes, &dest); err != nil { @@ -27330,19 +27351,19 @@ func ParseUpdateCardColumnResponse(rsp *http.Response) (*UpdateCardColumnRespons } response.JSON403 = &dest - case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 404: - var dest NotFoundErrorResponseContent + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 422: + var dest ValidationErrorResponseContent if err := json.Unmarshal(bodyBytes, &dest); err != nil { return nil, err } - response.JSON404 = &dest + response.JSON422 = &dest - case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 422: - var dest ValidationErrorResponseContent + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 429: + var dest RateLimitErrorResponseContent if err := json.Unmarshal(bodyBytes, &dest); err != nil { return nil, err } - response.JSON422 = &dest + response.JSON429 = &dest case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 500: var dest InternalServerErrorResponseContent @@ -27356,26 +27377,26 @@ func ParseUpdateCardColumnResponse(rsp *http.Response) (*UpdateCardColumnRespons return response, nil } -// ParseSetCardColumnColorResponse parses an HTTP response from a SetCardColumnColorWithResponse call -func ParseSetCardColumnColorResponse(rsp *http.Response) (*SetCardColumnColorResponse, error) { +// ParseCreateCardStepResponse parses an HTTP response from a CreateCardStepWithResponse call +func ParseCreateCardStepResponse(rsp *http.Response) (*CreateCardStepResponse, error) { bodyBytes, err := io.ReadAll(rsp.Body) defer func() { _ = rsp.Body.Close() }() if err != nil { return nil, err } - response := &SetCardColumnColorResponse{ + response := &CreateCardStepResponse{ Body: bodyBytes, HTTPResponse: rsp, } switch { - case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: - var dest SetCardColumnColorResponseContent + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 201: + var dest CreateCardStepResponseContent if err := json.Unmarshal(bodyBytes, &dest); err != nil { return nil, err } - response.JSON200 = &dest + response.JSON201 = &dest case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401: var dest UnauthorizedErrorResponseContent @@ -27391,19 +27412,19 @@ func ParseSetCardColumnColorResponse(rsp *http.Response) (*SetCardColumnColorRes } response.JSON403 = &dest - case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 404: - var dest NotFoundErrorResponseContent + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 422: + var dest ValidationErrorResponseContent if err := json.Unmarshal(bodyBytes, &dest); err != nil { return nil, err } - response.JSON404 = &dest + response.JSON422 = &dest - case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 422: - var dest ValidationErrorResponseContent + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 429: + var dest RateLimitErrorResponseContent if err := json.Unmarshal(bodyBytes, &dest); err != nil { return nil, err } - response.JSON422 = &dest + response.JSON429 = &dest case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 500: var dest InternalServerErrorResponseContent @@ -27417,22 +27438,22 @@ func ParseSetCardColumnColorResponse(rsp *http.Response) (*SetCardColumnColorRes return response, nil } -// ParseDisableCardColumnOnHoldResponse parses an HTTP response from a DisableCardColumnOnHoldWithResponse call -func ParseDisableCardColumnOnHoldResponse(rsp *http.Response) (*DisableCardColumnOnHoldResponse, error) { +// ParseGetCardColumnResponse parses an HTTP response from a GetCardColumnWithResponse call +func ParseGetCardColumnResponse(rsp *http.Response) (*GetCardColumnResponse, error) { bodyBytes, err := io.ReadAll(rsp.Body) defer func() { _ = rsp.Body.Close() }() if err != nil { return nil, err } - response := &DisableCardColumnOnHoldResponse{ + response := &GetCardColumnResponse{ Body: bodyBytes, HTTPResponse: rsp, } switch { case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: - var dest DisableCardColumnOnHoldResponseContent + var dest GetCardColumnResponseContent if err := json.Unmarshal(bodyBytes, &dest); err != nil { return nil, err } @@ -27471,22 +27492,22 @@ func ParseDisableCardColumnOnHoldResponse(rsp *http.Response) (*DisableCardColum return response, nil } -// ParseEnableCardColumnOnHoldResponse parses an HTTP response from a EnableCardColumnOnHoldWithResponse call -func ParseEnableCardColumnOnHoldResponse(rsp *http.Response) (*EnableCardColumnOnHoldResponse, error) { +// ParseUpdateCardColumnResponse parses an HTTP response from a UpdateCardColumnWithResponse call +func ParseUpdateCardColumnResponse(rsp *http.Response) (*UpdateCardColumnResponse, error) { bodyBytes, err := io.ReadAll(rsp.Body) defer func() { _ = rsp.Body.Close() }() if err != nil { return nil, err } - response := &EnableCardColumnOnHoldResponse{ + response := &UpdateCardColumnResponse{ Body: bodyBytes, HTTPResponse: rsp, } switch { case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: - var dest EnableCardColumnOnHoldResponseContent + var dest UpdateCardColumnResponseContent if err := json.Unmarshal(bodyBytes, &dest); err != nil { return nil, err } @@ -27506,19 +27527,19 @@ func ParseEnableCardColumnOnHoldResponse(rsp *http.Response) (*EnableCardColumnO } response.JSON403 = &dest - case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 422: - var dest ValidationErrorResponseContent + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 404: + var dest NotFoundErrorResponseContent if err := json.Unmarshal(bodyBytes, &dest); err != nil { return nil, err } - response.JSON422 = &dest + response.JSON404 = &dest - case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 429: - var dest RateLimitErrorResponseContent + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 422: + var dest ValidationErrorResponseContent if err := json.Unmarshal(bodyBytes, &dest); err != nil { return nil, err } - response.JSON429 = &dest + response.JSON422 = &dest case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 500: var dest InternalServerErrorResponseContent diff --git a/kotlin/sdk/src/commonMain/kotlin/com/basecamp/sdk/generated/services/Types.kt b/kotlin/sdk/src/commonMain/kotlin/com/basecamp/sdk/generated/services/Types.kt index fa47c90e..c36f5c2f 100644 --- a/kotlin/sdk/src/commonMain/kotlin/com/basecamp/sdk/generated/services/Types.kt +++ b/kotlin/sdk/src/commonMain/kotlin/com/basecamp/sdk/generated/services/Types.kt @@ -61,17 +61,17 @@ data class ListCampfireUploadsOptions( fun toPaginationOptions(): PaginationOptions = PaginationOptions(maxItems = maxItems) } +/** Request body for SetCardColumnColor. */ +data class SetCardColumnColorBody( + val color: String +) + /** Request body for UpdateCardColumn. */ data class UpdateCardColumnBody( val title: String? = null, val description: String? = null ) -/** Request body for SetCardColumnColor. */ -data class SetCardColumnColorBody( - val color: String -) - /** Request body for CreateCardColumn. */ data class CreateCardColumnBody( val title: String, diff --git a/kotlin/sdk/src/commonMain/kotlin/com/basecamp/sdk/generated/services/card-columns.kt b/kotlin/sdk/src/commonMain/kotlin/com/basecamp/sdk/generated/services/card-columns.kt index 415f41ef..6af1a060 100644 --- a/kotlin/sdk/src/commonMain/kotlin/com/basecamp/sdk/generated/services/card-columns.kt +++ b/kotlin/sdk/src/commonMain/kotlin/com/basecamp/sdk/generated/services/card-columns.kt @@ -13,107 +13,110 @@ import kotlinx.serialization.json.JsonElement class CardColumnsService(client: AccountClient) : BaseService(client) { /** - * Get a card column by ID + * Set the color of a column + * @param bucketId The bucket ID * @param columnId The column ID + * @param body Request body */ - suspend fun get(columnId: Long): CardColumn { + suspend fun setColor(bucketId: Long, columnId: Long, body: SetCardColumnColorBody): CardColumn { val info = OperationInfo( service = "CardColumns", - operation = "GetCardColumn", - resourceType = "card_column", - isMutation = false, + operation = "SetCardColumnColor", + resourceType = "card_column_color", + isMutation = true, projectId = null, resourceId = columnId, ) return request(info, { - httpGet("/card_tables/columns/${columnId}", operationName = info.operation) + httpPut("/buckets/${bucketId}/card_tables/columns/${columnId}/color.json", json.encodeToString(kotlinx.serialization.json.buildJsonObject { + put("color", kotlinx.serialization.json.JsonPrimitive(body.color)) + }), operationName = info.operation) }) { body -> json.decodeFromString(body) } } /** - * Update an existing column + * Enable on-hold section in a column + * @param bucketId The bucket ID * @param columnId The column ID - * @param body Request body */ - suspend fun update(columnId: Long, body: UpdateCardColumnBody): CardColumn { + suspend fun enableOnHold(bucketId: Long, columnId: Long): CardColumn { val info = OperationInfo( service = "CardColumns", - operation = "UpdateCardColumn", - resourceType = "card_column", + operation = "EnableCardColumnOnHold", + resourceType = "card_column_on_hold", isMutation = true, projectId = null, resourceId = columnId, ) return request(info, { - httpPut("/card_tables/columns/${columnId}", json.encodeToString(kotlinx.serialization.json.buildJsonObject { - body.title?.let { put("title", kotlinx.serialization.json.JsonPrimitive(it)) } - body.description?.let { put("description", kotlinx.serialization.json.JsonPrimitive(it)) } - }), operationName = info.operation) + httpPost("/buckets/${bucketId}/card_tables/columns/${columnId}/on_hold.json", operationName = info.operation) }) { body -> json.decodeFromString(body) } } /** - * Set the color of a column + * Disable on-hold section in a column + * @param bucketId The bucket ID * @param columnId The column ID - * @param body Request body */ - suspend fun setColor(columnId: Long, body: SetCardColumnColorBody): CardColumn { + suspend fun disableOnHold(bucketId: Long, columnId: Long): CardColumn { val info = OperationInfo( service = "CardColumns", - operation = "SetCardColumnColor", - resourceType = "card_column_color", + operation = "DisableCardColumnOnHold", + resourceType = "card_column_on_hold", isMutation = true, projectId = null, resourceId = columnId, ) return request(info, { - httpPut("/card_tables/columns/${columnId}/color.json", json.encodeToString(kotlinx.serialization.json.buildJsonObject { - put("color", kotlinx.serialization.json.JsonPrimitive(body.color)) - }), operationName = info.operation) + httpDelete("/buckets/${bucketId}/card_tables/columns/${columnId}/on_hold.json", operationName = info.operation) }) { body -> json.decodeFromString(body) } } /** - * Enable on-hold section in a column + * Get a card column by ID * @param columnId The column ID */ - suspend fun enableOnHold(columnId: Long): CardColumn { + suspend fun get(columnId: Long): CardColumn { val info = OperationInfo( service = "CardColumns", - operation = "EnableCardColumnOnHold", - resourceType = "card_column_on_hold", - isMutation = true, + operation = "GetCardColumn", + resourceType = "card_column", + isMutation = false, projectId = null, resourceId = columnId, ) return request(info, { - httpPost("/card_tables/columns/${columnId}/on_hold.json", operationName = info.operation) + httpGet("/card_tables/columns/${columnId}", operationName = info.operation) }) { body -> json.decodeFromString(body) } } /** - * Disable on-hold section in a column + * Update an existing column * @param columnId The column ID + * @param body Request body */ - suspend fun disableOnHold(columnId: Long): CardColumn { + suspend fun update(columnId: Long, body: UpdateCardColumnBody): CardColumn { val info = OperationInfo( service = "CardColumns", - operation = "DisableCardColumnOnHold", - resourceType = "card_column_on_hold", + operation = "UpdateCardColumn", + resourceType = "card_column", isMutation = true, projectId = null, resourceId = columnId, ) return request(info, { - httpDelete("/card_tables/columns/${columnId}/on_hold.json", operationName = info.operation) + httpPut("/card_tables/columns/${columnId}", json.encodeToString(kotlinx.serialization.json.buildJsonObject { + body.title?.let { put("title", kotlinx.serialization.json.JsonPrimitive(it)) } + body.description?.let { put("description", kotlinx.serialization.json.JsonPrimitive(it)) } + }), operationName = info.operation) }) { body -> json.decodeFromString(body) } diff --git a/openapi.json b/openapi.json index 7e0383d9..9ec067b6 100644 --- a/openapi.json +++ b/openapi.json @@ -670,10 +670,20 @@ } } }, - "/{accountId}/buckets/{bucketId}/webhooks.json": { - "get": { - "description": "List all webhooks for a project\n\n**Pagination**: Uses Link header (RFC5988). Follow the `next` rel URL\nto fetch additional pages. X-Total-Count header provides total count.", - "operationId": "ListWebhooks", + "/{accountId}/buckets/{bucketId}/card_tables/columns/{columnId}/color.json": { + "put": { + "description": "Set the color of a column", + "operationId": "SetCardColumnColor", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SetCardColumnColorRequestContent" + } + } + }, + "required": true + }, "parameters": [ { "name": "accountId", @@ -694,15 +704,24 @@ "format": "int64" }, "required": true + }, + { + "name": "columnId", + "in": "path", + "schema": { + "type": "integer", + "format": "int64" + }, + "required": true } ], "responses": { "200": { - "description": "ListWebhooks 200 response", + "description": "SetCardColumnColor 200 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ListWebhooksResponseContent" + "$ref": "#/components/schemas/SetCardColumnColorResponseContent" } } } @@ -727,12 +746,22 @@ } } }, - "429": { - "description": "RateLimitError 429 response", + "404": { + "description": "NotFoundError 404 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RateLimitErrorResponseContent" + "$ref": "#/components/schemas/NotFoundErrorResponseContent" + } + } + } + }, + "422": { + "description": "ValidationError 422 response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponseContent" } } } @@ -749,12 +778,10 @@ } }, "tags": [ - "Automation" + "Card Tables" ], - "x-basecamp-pagination": { - "style": "link", - "totalCountHeader": "X-Total-Count", - "maxPageSize": 50 + "x-basecamp-idempotent": { + "natural": true }, "x-basecamp-retry": { "maxAttempts": 3, @@ -765,20 +792,12 @@ 503 ] } - }, - "post": { - "description": "Create a new webhook for a project", - "operationId": "CreateWebhook", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreateWebhookRequestContent" - } - } - }, - "required": true - }, + } + }, + "/{accountId}/buckets/{bucketId}/card_tables/columns/{columnId}/on_hold.json": { + "delete": { + "description": "Disable on-hold section in a column", + "operationId": "DisableCardColumnOnHold", "parameters": [ { "name": "accountId", @@ -799,25 +818,24 @@ "format": "int64" }, "required": true + }, + { + "name": "columnId", + "in": "path", + "schema": { + "type": "integer", + "format": "int64" + }, + "required": true } ], "responses": { - "201": { - "description": "CreateWebhook 201 response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreateWebhookResponseContent" - } - } - } - }, - "400": { - "description": "BadRequestError 400 response", + "200": { + "description": "DisableCardColumnOnHold 200 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/BadRequestErrorResponseContent" + "$ref": "#/components/schemas/DisableCardColumnOnHoldResponseContent" } } } @@ -842,12 +860,12 @@ } } }, - "429": { - "description": "RateLimitError 429 response", + "404": { + "description": "NotFoundError 404 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RateLimitErrorResponseContent" + "$ref": "#/components/schemas/NotFoundErrorResponseContent" } } } @@ -861,23 +879,16 @@ } } } - }, - "507": { - "description": "WebhookLimitError 507 response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/WebhookLimitErrorResponseContent" - } - } - } } }, "tags": [ - "Automation" + "Card Tables" ], + "x-basecamp-idempotent": { + "natural": true + }, "x-basecamp-retry": { - "maxAttempts": 2, + "maxAttempts": 3, "baseDelayMs": 1000, "backoff": "exponential", "retryOn": [ @@ -885,12 +896,10 @@ 503 ] } - } - }, - "/{accountId}/card_tables/cards/{cardId}": { - "get": { - "description": "Get a card by ID", - "operationId": "GetCard", + }, + "post": { + "description": "Enable on-hold section in a column", + "operationId": "EnableCardColumnOnHold", "parameters": [ { "name": "accountId", @@ -904,7 +913,16 @@ "required": true }, { - "name": "cardId", + "name": "bucketId", + "in": "path", + "schema": { + "type": "integer", + "format": "int64" + }, + "required": true + }, + { + "name": "columnId", "in": "path", "schema": { "type": "integer", @@ -915,11 +933,11 @@ ], "responses": { "200": { - "description": "GetCard 200 response", + "description": "EnableCardColumnOnHold 200 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GetCardResponseContent" + "$ref": "#/components/schemas/EnableCardColumnOnHoldResponseContent" } } } @@ -944,12 +962,22 @@ } } }, - "404": { - "description": "NotFoundError 404 response", + "422": { + "description": "ValidationError 422 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/NotFoundErrorResponseContent" + "$ref": "#/components/schemas/ValidationErrorResponseContent" + } + } + } + }, + "429": { + "description": "RateLimitError 429 response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RateLimitErrorResponseContent" } } } @@ -969,7 +997,7 @@ "Card Tables" ], "x-basecamp-retry": { - "maxAttempts": 3, + "maxAttempts": 2, "baseDelayMs": 1000, "backoff": "exponential", "retryOn": [ @@ -977,19 +1005,12 @@ 503 ] } - }, - "put": { - "description": "Update an existing card", - "operationId": "UpdateCard", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateCardRequestContent" - } - } - } - }, + } + }, + "/{accountId}/buckets/{bucketId}/webhooks.json": { + "get": { + "description": "List all webhooks for a project\n\n**Pagination**: Uses Link header (RFC5988). Follow the `next` rel URL\nto fetch additional pages. X-Total-Count header provides total count.", + "operationId": "ListWebhooks", "parameters": [ { "name": "accountId", @@ -1003,7 +1024,7 @@ "required": true }, { - "name": "cardId", + "name": "bucketId", "in": "path", "schema": { "type": "integer", @@ -1014,11 +1035,11 @@ ], "responses": { "200": { - "description": "UpdateCard 200 response", + "description": "ListWebhooks 200 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateCardResponseContent" + "$ref": "#/components/schemas/ListWebhooksResponseContent" } } } @@ -1043,22 +1064,12 @@ } } }, - "404": { - "description": "NotFoundError 404 response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/NotFoundErrorResponseContent" - } - } - } - }, - "422": { - "description": "ValidationError 422 response", + "429": { + "description": "RateLimitError 429 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ValidationErrorResponseContent" + "$ref": "#/components/schemas/RateLimitErrorResponseContent" } } } @@ -1075,10 +1086,12 @@ } }, "tags": [ - "Card Tables" + "Automation" ], - "x-basecamp-idempotent": { - "natural": true + "x-basecamp-pagination": { + "style": "link", + "totalCountHeader": "X-Total-Count", + "maxPageSize": 50 }, "x-basecamp-retry": { "maxAttempts": 3, @@ -1089,17 +1102,15 @@ 503 ] } - } - }, - "/{accountId}/card_tables/cards/{cardId}/moves.json": { + }, "post": { - "description": "Move a card to a different column", - "operationId": "MoveCard", + "description": "Create a new webhook for a project", + "operationId": "CreateWebhook", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MoveCardRequestContent" + "$ref": "#/components/schemas/CreateWebhookRequestContent" } } }, @@ -1118,7 +1129,7 @@ "required": true }, { - "name": "cardId", + "name": "bucketId", "in": "path", "schema": { "type": "integer", @@ -1128,35 +1139,42 @@ } ], "responses": { - "204": { - "description": "MoveCard 204 response" + "201": { + "description": "CreateWebhook 201 response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateWebhookResponseContent" + } + } + } }, - "401": { - "description": "UnauthorizedError 401 response", + "400": { + "description": "BadRequestError 400 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UnauthorizedErrorResponseContent" + "$ref": "#/components/schemas/BadRequestErrorResponseContent" } } } }, - "403": { - "description": "ForbiddenError 403 response", + "401": { + "description": "UnauthorizedError 401 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ForbiddenErrorResponseContent" + "$ref": "#/components/schemas/UnauthorizedErrorResponseContent" } } } }, - "422": { - "description": "ValidationError 422 response", + "403": { + "description": "ForbiddenError 403 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ValidationErrorResponseContent" + "$ref": "#/components/schemas/ForbiddenErrorResponseContent" } } } @@ -1180,36 +1198,36 @@ } } } + }, + "507": { + "description": "WebhookLimitError 507 response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WebhookLimitErrorResponseContent" + } + } + } } }, "tags": [ - "Card Tables" + "Automation" ], - "x-basecamp-retry": { - "maxAttempts": 2, - "baseDelayMs": 1000, - "backoff": "exponential", - "retryOn": [ - 429, - 503 - ] - } - } - }, - "/{accountId}/card_tables/cards/{cardId}/positions.json": { - "post": { - "description": "Reposition a step within a card", - "operationId": "RepositionCardStep", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RepositionCardStepRequestContent" - } - } - }, - "required": true - }, + "x-basecamp-retry": { + "maxAttempts": 2, + "baseDelayMs": 1000, + "backoff": "exponential", + "retryOn": [ + 429, + 503 + ] + } + } + }, + "/{accountId}/card_tables/cards/{cardId}": { + "get": { + "description": "Get a card by ID", + "operationId": "GetCard", "parameters": [ { "name": "accountId", @@ -1234,44 +1252,41 @@ ], "responses": { "200": { - "description": "RepositionCardStep 200 response" - }, - "401": { - "description": "UnauthorizedError 401 response", + "description": "GetCard 200 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UnauthorizedErrorResponseContent" + "$ref": "#/components/schemas/GetCardResponseContent" } } } }, - "403": { - "description": "ForbiddenError 403 response", + "401": { + "description": "UnauthorizedError 401 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ForbiddenErrorResponseContent" + "$ref": "#/components/schemas/UnauthorizedErrorResponseContent" } } } }, - "422": { - "description": "ValidationError 422 response", + "403": { + "description": "ForbiddenError 403 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ValidationErrorResponseContent" + "$ref": "#/components/schemas/ForbiddenErrorResponseContent" } } } }, - "429": { - "description": "RateLimitError 429 response", + "404": { + "description": "NotFoundError 404 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RateLimitErrorResponseContent" + "$ref": "#/components/schemas/NotFoundErrorResponseContent" } } } @@ -1291,7 +1306,7 @@ "Card Tables" ], "x-basecamp-retry": { - "maxAttempts": 2, + "maxAttempts": 3, "baseDelayMs": 1000, "backoff": "exponential", "retryOn": [ @@ -1299,21 +1314,18 @@ 503 ] } - } - }, - "/{accountId}/card_tables/cards/{cardId}/steps.json": { - "post": { - "description": "Create a step on a card", - "operationId": "CreateCardStep", + }, + "put": { + "description": "Update an existing card", + "operationId": "UpdateCard", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateCardStepRequestContent" + "$ref": "#/components/schemas/UpdateCardRequestContent" } } - }, - "required": true + } }, "parameters": [ { @@ -1338,12 +1350,12 @@ } ], "responses": { - "201": { - "description": "CreateCardStep 201 response", + "200": { + "description": "UpdateCard 200 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateCardStepResponseContent" + "$ref": "#/components/schemas/UpdateCardResponseContent" } } } @@ -1368,22 +1380,22 @@ } } }, - "422": { - "description": "ValidationError 422 response", + "404": { + "description": "NotFoundError 404 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ValidationErrorResponseContent" + "$ref": "#/components/schemas/NotFoundErrorResponseContent" } } } }, - "429": { - "description": "RateLimitError 429 response", + "422": { + "description": "ValidationError 422 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RateLimitErrorResponseContent" + "$ref": "#/components/schemas/ValidationErrorResponseContent" } } } @@ -1402,8 +1414,11 @@ "tags": [ "Card Tables" ], + "x-basecamp-idempotent": { + "natural": true + }, "x-basecamp-retry": { - "maxAttempts": 2, + "maxAttempts": 3, "baseDelayMs": 1000, "backoff": "exponential", "retryOn": [ @@ -1413,10 +1428,20 @@ } } }, - "/{accountId}/card_tables/columns/{columnId}": { - "get": { - "description": "Get a card column by ID", - "operationId": "GetCardColumn", + "/{accountId}/card_tables/cards/{cardId}/moves.json": { + "post": { + "description": "Move a card to a different column", + "operationId": "MoveCard", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MoveCardRequestContent" + } + } + }, + "required": true + }, "parameters": [ { "name": "accountId", @@ -1430,7 +1455,7 @@ "required": true }, { - "name": "columnId", + "name": "cardId", "in": "path", "schema": { "type": "integer", @@ -1440,15 +1465,8 @@ } ], "responses": { - "200": { - "description": "GetCardColumn 200 response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GetCardColumnResponseContent" - } - } - } + "204": { + "description": "MoveCard 204 response" }, "401": { "description": "UnauthorizedError 401 response", @@ -1470,12 +1488,22 @@ } } }, - "404": { - "description": "NotFoundError 404 response", + "422": { + "description": "ValidationError 422 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/NotFoundErrorResponseContent" + "$ref": "#/components/schemas/ValidationErrorResponseContent" + } + } + } + }, + "429": { + "description": "RateLimitError 429 response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RateLimitErrorResponseContent" } } } @@ -1495,7 +1523,7 @@ "Card Tables" ], "x-basecamp-retry": { - "maxAttempts": 3, + "maxAttempts": 2, "baseDelayMs": 1000, "backoff": "exponential", "retryOn": [ @@ -1503,18 +1531,21 @@ 503 ] } - }, - "put": { - "description": "Update an existing column", - "operationId": "UpdateCardColumn", + } + }, + "/{accountId}/card_tables/cards/{cardId}/positions.json": { + "post": { + "description": "Reposition a step within a card", + "operationId": "RepositionCardStep", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateCardColumnRequestContent" + "$ref": "#/components/schemas/RepositionCardStepRequestContent" } } - } + }, + "required": true }, "parameters": [ { @@ -1529,7 +1560,7 @@ "required": true }, { - "name": "columnId", + "name": "cardId", "in": "path", "schema": { "type": "integer", @@ -1540,14 +1571,7 @@ ], "responses": { "200": { - "description": "UpdateCardColumn 200 response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateCardColumnResponseContent" - } - } - } + "description": "RepositionCardStep 200 response" }, "401": { "description": "UnauthorizedError 401 response", @@ -1569,22 +1593,22 @@ } } }, - "404": { - "description": "NotFoundError 404 response", + "422": { + "description": "ValidationError 422 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/NotFoundErrorResponseContent" + "$ref": "#/components/schemas/ValidationErrorResponseContent" } } } }, - "422": { - "description": "ValidationError 422 response", + "429": { + "description": "RateLimitError 429 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ValidationErrorResponseContent" + "$ref": "#/components/schemas/RateLimitErrorResponseContent" } } } @@ -1603,11 +1627,8 @@ "tags": [ "Card Tables" ], - "x-basecamp-idempotent": { - "natural": true - }, "x-basecamp-retry": { - "maxAttempts": 3, + "maxAttempts": 2, "baseDelayMs": 1000, "backoff": "exponential", "retryOn": [ @@ -1617,15 +1638,15 @@ } } }, - "/{accountId}/card_tables/columns/{columnId}/color.json": { - "put": { - "description": "Set the color of a column", - "operationId": "SetCardColumnColor", + "/{accountId}/card_tables/cards/{cardId}/steps.json": { + "post": { + "description": "Create a step on a card", + "operationId": "CreateCardStep", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SetCardColumnColorRequestContent" + "$ref": "#/components/schemas/CreateCardStepRequestContent" } } }, @@ -1644,7 +1665,7 @@ "required": true }, { - "name": "columnId", + "name": "cardId", "in": "path", "schema": { "type": "integer", @@ -1654,12 +1675,12 @@ } ], "responses": { - "200": { - "description": "SetCardColumnColor 200 response", + "201": { + "description": "CreateCardStep 201 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SetCardColumnColorResponseContent" + "$ref": "#/components/schemas/CreateCardStepResponseContent" } } } @@ -1684,22 +1705,22 @@ } } }, - "404": { - "description": "NotFoundError 404 response", + "422": { + "description": "ValidationError 422 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/NotFoundErrorResponseContent" + "$ref": "#/components/schemas/ValidationErrorResponseContent" } } } }, - "422": { - "description": "ValidationError 422 response", + "429": { + "description": "RateLimitError 429 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ValidationErrorResponseContent" + "$ref": "#/components/schemas/RateLimitErrorResponseContent" } } } @@ -1718,11 +1739,8 @@ "tags": [ "Card Tables" ], - "x-basecamp-idempotent": { - "natural": true - }, "x-basecamp-retry": { - "maxAttempts": 3, + "maxAttempts": 2, "baseDelayMs": 1000, "backoff": "exponential", "retryOn": [ @@ -1732,10 +1750,10 @@ } } }, - "/{accountId}/card_tables/columns/{columnId}/on_hold.json": { - "delete": { - "description": "Disable on-hold section in a column", - "operationId": "DisableCardColumnOnHold", + "/{accountId}/card_tables/columns/{columnId}": { + "get": { + "description": "Get a card column by ID", + "operationId": "GetCardColumn", "parameters": [ { "name": "accountId", @@ -1760,11 +1778,11 @@ ], "responses": { "200": { - "description": "DisableCardColumnOnHold 200 response", + "description": "GetCardColumn 200 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DisableCardColumnOnHoldResponseContent" + "$ref": "#/components/schemas/GetCardColumnResponseContent" } } } @@ -1813,9 +1831,6 @@ "tags": [ "Card Tables" ], - "x-basecamp-idempotent": { - "natural": true - }, "x-basecamp-retry": { "maxAttempts": 3, "baseDelayMs": 1000, @@ -1826,9 +1841,18 @@ ] } }, - "post": { - "description": "Enable on-hold section in a column", - "operationId": "EnableCardColumnOnHold", + "put": { + "description": "Update an existing column", + "operationId": "UpdateCardColumn", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateCardColumnRequestContent" + } + } + } + }, "parameters": [ { "name": "accountId", @@ -1853,11 +1877,11 @@ ], "responses": { "200": { - "description": "EnableCardColumnOnHold 200 response", + "description": "UpdateCardColumn 200 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EnableCardColumnOnHoldResponseContent" + "$ref": "#/components/schemas/UpdateCardColumnResponseContent" } } } @@ -1882,22 +1906,22 @@ } } }, - "422": { - "description": "ValidationError 422 response", + "404": { + "description": "NotFoundError 404 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ValidationErrorResponseContent" + "$ref": "#/components/schemas/NotFoundErrorResponseContent" } } } }, - "429": { - "description": "RateLimitError 429 response", + "422": { + "description": "ValidationError 422 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RateLimitErrorResponseContent" + "$ref": "#/components/schemas/ValidationErrorResponseContent" } } } @@ -1916,8 +1940,11 @@ "tags": [ "Card Tables" ], + "x-basecamp-idempotent": { + "natural": true + }, "x-basecamp-retry": { - "maxAttempts": 2, + "maxAttempts": 3, "baseDelayMs": 1000, "backoff": "exponential", "retryOn": [ diff --git a/python/src/basecamp/generated/services/card_columns.py b/python/src/basecamp/generated/services/card_columns.py index f29b3f86..cece5c47 100644 --- a/python/src/basecamp/generated/services/card_columns.py +++ b/python/src/basecamp/generated/services/card_columns.py @@ -11,47 +11,47 @@ class CardColumnsService(BaseService): - def get(self, *, column_id: int) -> dict[str, Any]: - return self._request( - OperationInfo(service="cardcolumns", operation="get", is_mutation=False, resource_id=column_id), - "GET", - f"/card_tables/columns/{column_id}", - ) - - def update(self, *, column_id: int, title: str | None = None, description: str | None = None) -> dict[str, Any]: - return self._request( - OperationInfo(service="cardcolumns", operation="update", is_mutation=True, resource_id=column_id), - "PUT", - f"/card_tables/columns/{column_id}", - json_body=self._compact(title=title, description=description), - operation="UpdateCardColumn", - ) - - def set_color(self, *, column_id: int, color: str) -> dict[str, Any]: + def set_color(self, *, bucket_id: int, column_id: int, color: str) -> dict[str, Any]: return self._request( OperationInfo(service="cardcolumns", operation="set_color", is_mutation=True, resource_id=column_id), "PUT", - f"/card_tables/columns/{column_id}/color.json", + f"/buckets/{bucket_id}/card_tables/columns/{column_id}/color.json", json_body=self._compact(color=color), operation="SetCardColumnColor", ) - def enable_on_hold(self, *, column_id: int) -> dict[str, Any]: + def enable_on_hold(self, *, bucket_id: int, column_id: int) -> dict[str, Any]: return self._request( OperationInfo(service="cardcolumns", operation="enable_on_hold", is_mutation=True, resource_id=column_id), "POST", - f"/card_tables/columns/{column_id}/on_hold.json", + f"/buckets/{bucket_id}/card_tables/columns/{column_id}/on_hold.json", operation="EnableCardColumnOnHold", ) - def disable_on_hold(self, *, column_id: int) -> dict[str, Any]: + def disable_on_hold(self, *, bucket_id: int, column_id: int) -> dict[str, Any]: return self._request( OperationInfo(service="cardcolumns", operation="disable_on_hold", is_mutation=True, resource_id=column_id), "DELETE", - f"/card_tables/columns/{column_id}/on_hold.json", + f"/buckets/{bucket_id}/card_tables/columns/{column_id}/on_hold.json", operation="DisableCardColumnOnHold", ) + def get(self, *, column_id: int) -> dict[str, Any]: + return self._request( + OperationInfo(service="cardcolumns", operation="get", is_mutation=False, resource_id=column_id), + "GET", + f"/card_tables/columns/{column_id}", + ) + + def update(self, *, column_id: int, title: str | None = None, description: str | None = None) -> dict[str, Any]: + return self._request( + OperationInfo(service="cardcolumns", operation="update", is_mutation=True, resource_id=column_id), + "PUT", + f"/card_tables/columns/{column_id}", + json_body=self._compact(title=title, description=description), + operation="UpdateCardColumn", + ) + def subscribe_to_column(self, *, column_id: int) -> None: self._request_void( OperationInfo( @@ -92,49 +92,49 @@ def move(self, *, card_table_id: int, source_id: int, target_id: int, position: class AsyncCardColumnsService(AsyncBaseService): - async def get(self, *, column_id: int) -> dict[str, Any]: - return await self._request( - OperationInfo(service="cardcolumns", operation="get", is_mutation=False, resource_id=column_id), - "GET", - f"/card_tables/columns/{column_id}", - ) - - async def update( - self, *, column_id: int, title: str | None = None, description: str | None = None - ) -> dict[str, Any]: - return await self._request( - OperationInfo(service="cardcolumns", operation="update", is_mutation=True, resource_id=column_id), - "PUT", - f"/card_tables/columns/{column_id}", - json_body=self._compact(title=title, description=description), - operation="UpdateCardColumn", - ) - - async def set_color(self, *, column_id: int, color: str) -> dict[str, Any]: + async def set_color(self, *, bucket_id: int, column_id: int, color: str) -> dict[str, Any]: return await self._request( OperationInfo(service="cardcolumns", operation="set_color", is_mutation=True, resource_id=column_id), "PUT", - f"/card_tables/columns/{column_id}/color.json", + f"/buckets/{bucket_id}/card_tables/columns/{column_id}/color.json", json_body=self._compact(color=color), operation="SetCardColumnColor", ) - async def enable_on_hold(self, *, column_id: int) -> dict[str, Any]: + async def enable_on_hold(self, *, bucket_id: int, column_id: int) -> dict[str, Any]: return await self._request( OperationInfo(service="cardcolumns", operation="enable_on_hold", is_mutation=True, resource_id=column_id), "POST", - f"/card_tables/columns/{column_id}/on_hold.json", + f"/buckets/{bucket_id}/card_tables/columns/{column_id}/on_hold.json", operation="EnableCardColumnOnHold", ) - async def disable_on_hold(self, *, column_id: int) -> dict[str, Any]: + async def disable_on_hold(self, *, bucket_id: int, column_id: int) -> dict[str, Any]: return await self._request( OperationInfo(service="cardcolumns", operation="disable_on_hold", is_mutation=True, resource_id=column_id), "DELETE", - f"/card_tables/columns/{column_id}/on_hold.json", + f"/buckets/{bucket_id}/card_tables/columns/{column_id}/on_hold.json", operation="DisableCardColumnOnHold", ) + async def get(self, *, column_id: int) -> dict[str, Any]: + return await self._request( + OperationInfo(service="cardcolumns", operation="get", is_mutation=False, resource_id=column_id), + "GET", + f"/card_tables/columns/{column_id}", + ) + + async def update( + self, *, column_id: int, title: str | None = None, description: str | None = None + ) -> dict[str, Any]: + return await self._request( + OperationInfo(service="cardcolumns", operation="update", is_mutation=True, resource_id=column_id), + "PUT", + f"/card_tables/columns/{column_id}", + json_body=self._compact(title=title, description=description), + operation="UpdateCardColumn", + ) + async def subscribe_to_column(self, *, column_id: int) -> None: await self._request_void( OperationInfo( diff --git a/ruby/lib/basecamp/generated/metadata.json b/ruby/lib/basecamp/generated/metadata.json index 84b3bbe8..c0c14097 100644 --- a/ruby/lib/basecamp/generated/metadata.json +++ b/ruby/lib/basecamp/generated/metadata.json @@ -1,7 +1,7 @@ { "$schema": "https://basecamp.com/schemas/sdk-metadata.json", "version": "1.0.0", - "generated": "2026-03-26T04:17:28Z", + "generated": "2026-04-28T21:09:16Z", "operations": { "GetAccount": { "retry": { @@ -92,7 +92,7 @@ "natural": true } }, - "ListWebhooks": { + "SetCardColumnColor": { "retry": { "maxAttempts": 3, "baseDelayMs": 1000, @@ -102,13 +102,11 @@ 503 ] }, - "pagination": { - "style": "link", - "totalCountHeader": "X-Total-Count", - "maxPageSize": 50 + "idempotent": { + "natural": true } }, - "CreateWebhook": { + "EnableCardColumnOnHold": { "retry": { "maxAttempts": 2, "baseDelayMs": 1000, @@ -119,7 +117,7 @@ ] } }, - "GetCard": { + "DisableCardColumnOnHold": { "retry": { "maxAttempts": 3, "baseDelayMs": 1000, @@ -128,9 +126,12 @@ 429, 503 ] + }, + "idempotent": { + "natural": true } }, - "UpdateCard": { + "ListWebhooks": { "retry": { "maxAttempts": 3, "baseDelayMs": 1000, @@ -140,11 +141,13 @@ 503 ] }, - "idempotent": { - "natural": true + "pagination": { + "style": "link", + "totalCountHeader": "X-Total-Count", + "maxPageSize": 50 } }, - "MoveCard": { + "CreateWebhook": { "retry": { "maxAttempts": 2, "baseDelayMs": 1000, @@ -155,9 +158,9 @@ ] } }, - "RepositionCardStep": { + "GetCard": { "retry": { - "maxAttempts": 2, + "maxAttempts": 3, "baseDelayMs": 1000, "backoff": "exponential", "retryOn": [ @@ -166,20 +169,23 @@ ] } }, - "CreateCardStep": { + "UpdateCard": { "retry": { - "maxAttempts": 2, + "maxAttempts": 3, "baseDelayMs": 1000, "backoff": "exponential", "retryOn": [ 429, 503 ] + }, + "idempotent": { + "natural": true } }, - "GetCardColumn": { + "MoveCard": { "retry": { - "maxAttempts": 3, + "maxAttempts": 2, "baseDelayMs": 1000, "backoff": "exponential", "retryOn": [ @@ -188,37 +194,31 @@ ] } }, - "UpdateCardColumn": { + "RepositionCardStep": { "retry": { - "maxAttempts": 3, + "maxAttempts": 2, "baseDelayMs": 1000, "backoff": "exponential", "retryOn": [ 429, 503 ] - }, - "idempotent": { - "natural": true } }, - "SetCardColumnColor": { + "CreateCardStep": { "retry": { - "maxAttempts": 3, + "maxAttempts": 2, "baseDelayMs": 1000, "backoff": "exponential", "retryOn": [ 429, 503 ] - }, - "idempotent": { - "natural": true } }, - "EnableCardColumnOnHold": { + "GetCardColumn": { "retry": { - "maxAttempts": 2, + "maxAttempts": 3, "baseDelayMs": 1000, "backoff": "exponential", "retryOn": [ @@ -227,7 +227,7 @@ ] } }, - "DisableCardColumnOnHold": { + "UpdateCardColumn": { "retry": { "maxAttempts": 3, "baseDelayMs": 1000, diff --git a/ruby/lib/basecamp/generated/services/card_columns_service.rb b/ruby/lib/basecamp/generated/services/card_columns_service.rb index 3b2b5253..2a54bfba 100644 --- a/ruby/lib/basecamp/generated/services/card_columns_service.rb +++ b/ruby/lib/basecamp/generated/services/card_columns_service.rb @@ -7,51 +7,54 @@ module Services # @generated from OpenAPI spec class CardColumnsService < BaseService - # Get a card column by ID + # Set the color of a column + # @param bucket_id [Integer] bucket id ID # @param column_id [Integer] column id ID + # @param color [String] Valid colors: white, red, orange, yellow, green, blue, aqua, purple, gray, pink, brown # @return [Hash] response data - def get(column_id:) - with_operation(service: "cardcolumns", operation: "get", is_mutation: false, resource_id: column_id) do - http_get("/card_tables/columns/#{column_id}").json + def set_color(bucket_id:, column_id:, color:) + with_operation(service: "cardcolumns", operation: "set_color", is_mutation: true, resource_id: column_id) do + http_put("/buckets/#{bucket_id}/card_tables/columns/#{column_id}/color.json", body: compact_params(color: color)).json end end - # Update an existing column + # Enable on-hold section in a column + # @param bucket_id [Integer] bucket id ID # @param column_id [Integer] column id ID - # @param title [String, nil] title - # @param description [String, nil] description # @return [Hash] response data - def update(column_id:, title: nil, description: nil) - with_operation(service: "cardcolumns", operation: "update", is_mutation: true, resource_id: column_id) do - http_put("/card_tables/columns/#{column_id}", body: compact_params(title: title, description: description)).json + def enable_on_hold(bucket_id:, column_id:) + with_operation(service: "cardcolumns", operation: "enable_on_hold", is_mutation: true, resource_id: column_id) do + http_post("/buckets/#{bucket_id}/card_tables/columns/#{column_id}/on_hold.json").json end end - # Set the color of a column + # Disable on-hold section in a column + # @param bucket_id [Integer] bucket id ID # @param column_id [Integer] column id ID - # @param color [String] Valid colors: white, red, orange, yellow, green, blue, aqua, purple, gray, pink, brown # @return [Hash] response data - def set_color(column_id:, color:) - with_operation(service: "cardcolumns", operation: "set_color", is_mutation: true, resource_id: column_id) do - http_put("/card_tables/columns/#{column_id}/color.json", body: compact_params(color: color)).json + def disable_on_hold(bucket_id:, column_id:) + with_operation(service: "cardcolumns", operation: "disable_on_hold", is_mutation: true, resource_id: column_id) do + http_delete("/buckets/#{bucket_id}/card_tables/columns/#{column_id}/on_hold.json").json end end - # Enable on-hold section in a column + # Get a card column by ID # @param column_id [Integer] column id ID # @return [Hash] response data - def enable_on_hold(column_id:) - with_operation(service: "cardcolumns", operation: "enable_on_hold", is_mutation: true, resource_id: column_id) do - http_post("/card_tables/columns/#{column_id}/on_hold.json").json + def get(column_id:) + with_operation(service: "cardcolumns", operation: "get", is_mutation: false, resource_id: column_id) do + http_get("/card_tables/columns/#{column_id}").json end end - # Disable on-hold section in a column + # Update an existing column # @param column_id [Integer] column id ID + # @param title [String, nil] title + # @param description [String, nil] description # @return [Hash] response data - def disable_on_hold(column_id:) - with_operation(service: "cardcolumns", operation: "disable_on_hold", is_mutation: true, resource_id: column_id) do - http_delete("/card_tables/columns/#{column_id}/on_hold.json").json + def update(column_id:, title: nil, description: nil) + with_operation(service: "cardcolumns", operation: "update", is_mutation: true, resource_id: column_id) do + http_put("/card_tables/columns/#{column_id}", body: compact_params(title: title, description: description)).json end end diff --git a/ruby/lib/basecamp/generated/types.rb b/ruby/lib/basecamp/generated/types.rb index ffb976a3..b34a9a6c 100644 --- a/ruby/lib/basecamp/generated/types.rb +++ b/ruby/lib/basecamp/generated/types.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true # Auto-generated from OpenAPI spec. Do not edit manually. -# Generated: 2026-03-26T04:17:28Z +# Generated: 2026-04-28T21:09:16Z require "json" require "time" diff --git a/ruby/test/basecamp/services/card_columns_service_test.rb b/ruby/test/basecamp/services/card_columns_service_test.rb index 0e16070b..3b7a649b 100644 --- a/ruby/test/basecamp/services/card_columns_service_test.rb +++ b/ruby/test/basecamp/services/card_columns_service_test.rb @@ -78,9 +78,9 @@ def test_move_column def test_set_color colored_column = sample_column(id: 200) colored_column["color"] = "blue" - stub_put("/12345/card_tables/columns/200/color.json", response_body: colored_column) + stub_put("/12345/buckets/999/card_tables/columns/200/color.json", response_body: colored_column) - column = @account.card_columns.set_color(column_id: 200, color: "blue") + column = @account.card_columns.set_color(bucket_id: 999, column_id: 200, color: "blue") assert_equal "blue", column["color"] end @@ -93,9 +93,9 @@ def test_enable_on_hold "updated_at" => "2024-01-15T10:00:00Z", "cards_count" => 0, "cards_url" => "https://3.basecampapi.com/12345/card_tables/lists/9999/cards.json" } - stub_post("/12345/card_tables/columns/200/on_hold.json", response_body: column_with_hold) + stub_post("/12345/buckets/999/card_tables/columns/200/on_hold.json", response_body: column_with_hold) - column = @account.card_columns.enable_on_hold(column_id: 200) + column = @account.card_columns.enable_on_hold(bucket_id: 999, column_id: 200) assert_equal 9999, column["on_hold"]["id"] assert_equal "active", column["on_hold"]["status"] @@ -103,10 +103,10 @@ def test_enable_on_hold def test_disable_on_hold column_without_hold = sample_column(id: 200) - stub_request(:delete, "https://3.basecampapi.com/12345/card_tables/columns/200/on_hold.json") + stub_request(:delete, "https://3.basecampapi.com/12345/buckets/999/card_tables/columns/200/on_hold.json") .to_return(status: 200, body: column_without_hold.to_json, headers: { "Content-Type" => "application/json" }) - column = @account.card_columns.disable_on_hold(column_id: 200) + column = @account.card_columns.disable_on_hold(bucket_id: 999, column_id: 200) assert_nil column["on_hold"] end diff --git a/spec/basecamp.smithy b/spec/basecamp.smithy index 67f0b341..8c189f9b 100644 --- a/spec/basecamp.smithy +++ b/spec/basecamp.smithy @@ -4277,7 +4277,7 @@ structure MoveCardColumnOutput {} @idempotent @basecampRetry(maxAttempts: 3, baseDelayMs: 1000, backoff: "exponential", retryOn: [429, 503]) @basecampIdempotent(natural: true) -@http(method: "PUT", uri: "/{accountId}/card_tables/columns/{columnId}/color.json") +@http(method: "PUT", uri: "/{accountId}/buckets/{bucketId}/card_tables/columns/{columnId}/color.json") operation SetCardColumnColor { input: SetCardColumnColorInput output: SetCardColumnColorOutput @@ -4289,6 +4289,10 @@ structure SetCardColumnColorInput { @httpLabel accountId: AccountId + @required + @httpLabel + bucketId: ProjectId + @required @httpLabel columnId: CardColumnId @@ -4305,7 +4309,7 @@ structure SetCardColumnColorOutput { /// Enable on-hold section in a column @basecampRetry(maxAttempts: 2, baseDelayMs: 1000, backoff: "exponential", retryOn: [429, 503]) -@http(method: "POST", uri: "/{accountId}/card_tables/columns/{columnId}/on_hold.json") +@http(method: "POST", uri: "/{accountId}/buckets/{bucketId}/card_tables/columns/{columnId}/on_hold.json") operation EnableCardColumnOnHold { input: EnableCardColumnOnHoldInput output: EnableCardColumnOnHoldOutput @@ -4317,6 +4321,10 @@ structure EnableCardColumnOnHoldInput { @httpLabel accountId: AccountId + @required + @httpLabel + bucketId: ProjectId + @required @httpLabel columnId: CardColumnId @@ -4331,7 +4339,7 @@ structure EnableCardColumnOnHoldOutput { @idempotent @basecampRetry(maxAttempts: 3, baseDelayMs: 1000, backoff: "exponential", retryOn: [429, 503]) @basecampIdempotent(natural: true) -@http(method: "DELETE", uri: "/{accountId}/card_tables/columns/{columnId}/on_hold.json") +@http(method: "DELETE", uri: "/{accountId}/buckets/{bucketId}/card_tables/columns/{columnId}/on_hold.json") operation DisableCardColumnOnHold { input: DisableCardColumnOnHoldInput output: DisableCardColumnOnHoldOutput @@ -4343,6 +4351,10 @@ structure DisableCardColumnOnHoldInput { @httpLabel accountId: AccountId + @required + @httpLabel + bucketId: ProjectId + @required @httpLabel columnId: CardColumnId diff --git a/swift/Sources/Basecamp/Generated/Services/CardColumnsService.swift b/swift/Sources/Basecamp/Generated/Services/CardColumnsService.swift index 62122758..db4024b4 100644 --- a/swift/Sources/Basecamp/Generated/Services/CardColumnsService.swift +++ b/swift/Sources/Basecamp/Generated/Services/CardColumnsService.swift @@ -12,20 +12,20 @@ public final class CardColumnsService: BaseService, @unchecked Sendable { ) } - public func disableOnHold(columnId: Int) async throws -> CardColumn { + public func disableOnHold(bucketId: Int, columnId: Int) async throws -> CardColumn { return try await request( OperationInfo(service: "CardColumns", operation: "DisableCardColumnOnHold", resourceType: "card_column_on_hold", isMutation: true, resourceId: columnId), method: "DELETE", - path: "/card_tables/columns/\(columnId)/on_hold.json", + path: "/buckets/\(bucketId)/card_tables/columns/\(columnId)/on_hold.json", retryConfig: Metadata.retryConfig(for: "DisableCardColumnOnHold") ) } - public func enableOnHold(columnId: Int) async throws -> CardColumn { + public func enableOnHold(bucketId: Int, columnId: Int) async throws -> CardColumn { return try await request( OperationInfo(service: "CardColumns", operation: "EnableCardColumnOnHold", resourceType: "card_column_on_hold", isMutation: true, resourceId: columnId), method: "POST", - path: "/card_tables/columns/\(columnId)/on_hold.json", + path: "/buckets/\(bucketId)/card_tables/columns/\(columnId)/on_hold.json", retryConfig: Metadata.retryConfig(for: "EnableCardColumnOnHold") ) } @@ -49,11 +49,11 @@ public final class CardColumnsService: BaseService, @unchecked Sendable { ) } - public func setColor(columnId: Int, req: SetCardColumnColorRequest) async throws -> CardColumn { + public func setColor(bucketId: Int, columnId: Int, req: SetCardColumnColorRequest) async throws -> CardColumn { return try await request( OperationInfo(service: "CardColumns", operation: "SetCardColumnColor", resourceType: "card_column_color", isMutation: true, resourceId: columnId), method: "PUT", - path: "/card_tables/columns/\(columnId)/color.json", + path: "/buckets/\(bucketId)/card_tables/columns/\(columnId)/color.json", body: req, retryConfig: Metadata.retryConfig(for: "SetCardColumnColor") ) diff --git a/typescript/src/generated/metadata.json b/typescript/src/generated/metadata.json index c914d500..91d87074 100644 --- a/typescript/src/generated/metadata.json +++ b/typescript/src/generated/metadata.json @@ -1,7 +1,7 @@ { "$schema": "https://basecamp.com/schemas/sdk-metadata.json", "version": "1.0.0", - "generated": "2026-03-30T13:40:08.204Z", + "generated": "2026-04-28T21:09:04.855Z", "operations": { "GetAccount": { "retry": { @@ -92,7 +92,7 @@ "natural": true } }, - "ListWebhooks": { + "SetCardColumnColor": { "retry": { "maxAttempts": 3, "baseDelayMs": 1000, @@ -102,13 +102,11 @@ 503 ] }, - "pagination": { - "style": "link", - "totalCountHeader": "X-Total-Count", - "maxPageSize": 50 + "idempotent": { + "natural": true } }, - "CreateWebhook": { + "EnableCardColumnOnHold": { "retry": { "maxAttempts": 2, "baseDelayMs": 1000, @@ -119,7 +117,7 @@ ] } }, - "GetCard": { + "DisableCardColumnOnHold": { "retry": { "maxAttempts": 3, "baseDelayMs": 1000, @@ -128,9 +126,12 @@ 429, 503 ] + }, + "idempotent": { + "natural": true } }, - "UpdateCard": { + "ListWebhooks": { "retry": { "maxAttempts": 3, "baseDelayMs": 1000, @@ -140,11 +141,13 @@ 503 ] }, - "idempotent": { - "natural": true + "pagination": { + "style": "link", + "totalCountHeader": "X-Total-Count", + "maxPageSize": 50 } }, - "MoveCard": { + "CreateWebhook": { "retry": { "maxAttempts": 2, "baseDelayMs": 1000, @@ -155,9 +158,9 @@ ] } }, - "RepositionCardStep": { + "GetCard": { "retry": { - "maxAttempts": 2, + "maxAttempts": 3, "baseDelayMs": 1000, "backoff": "exponential", "retryOn": [ @@ -166,20 +169,23 @@ ] } }, - "CreateCardStep": { + "UpdateCard": { "retry": { - "maxAttempts": 2, + "maxAttempts": 3, "baseDelayMs": 1000, "backoff": "exponential", "retryOn": [ 429, 503 ] + }, + "idempotent": { + "natural": true } }, - "GetCardColumn": { + "MoveCard": { "retry": { - "maxAttempts": 3, + "maxAttempts": 2, "baseDelayMs": 1000, "backoff": "exponential", "retryOn": [ @@ -188,37 +194,31 @@ ] } }, - "UpdateCardColumn": { + "RepositionCardStep": { "retry": { - "maxAttempts": 3, + "maxAttempts": 2, "baseDelayMs": 1000, "backoff": "exponential", "retryOn": [ 429, 503 ] - }, - "idempotent": { - "natural": true } }, - "SetCardColumnColor": { + "CreateCardStep": { "retry": { - "maxAttempts": 3, + "maxAttempts": 2, "baseDelayMs": 1000, "backoff": "exponential", "retryOn": [ 429, 503 ] - }, - "idempotent": { - "natural": true } }, - "EnableCardColumnOnHold": { + "GetCardColumn": { "retry": { - "maxAttempts": 2, + "maxAttempts": 3, "baseDelayMs": 1000, "backoff": "exponential", "retryOn": [ @@ -227,7 +227,7 @@ ] } }, - "DisableCardColumnOnHold": { + "UpdateCardColumn": { "retry": { "maxAttempts": 3, "baseDelayMs": 1000, diff --git a/typescript/src/generated/openapi-stripped.json b/typescript/src/generated/openapi-stripped.json index 409ac073..8d49e5e3 100644 --- a/typescript/src/generated/openapi-stripped.json +++ b/typescript/src/generated/openapi-stripped.json @@ -589,10 +589,20 @@ } } }, - "/buckets/{bucketId}/webhooks.json": { - "get": { - "description": "List all webhooks for a project\n\n**Pagination**: Uses Link header (RFC5988). Follow the `next` rel URL\nto fetch additional pages. X-Total-Count header provides total count.", - "operationId": "ListWebhooks", + "/buckets/{bucketId}/card_tables/columns/{columnId}/color.json": { + "put": { + "description": "Set the color of a column", + "operationId": "SetCardColumnColor", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SetCardColumnColorRequestContent" + } + } + }, + "required": true + }, "parameters": [ { "name": "bucketId", @@ -602,15 +612,24 @@ "format": "int64" }, "required": true + }, + { + "name": "columnId", + "in": "path", + "schema": { + "type": "integer", + "format": "int64" + }, + "required": true } ], "responses": { "200": { - "description": "ListWebhooks 200 response", + "description": "SetCardColumnColor 200 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ListWebhooksResponseContent" + "$ref": "#/components/schemas/SetCardColumnColorResponseContent" } } } @@ -635,12 +654,22 @@ } } }, - "429": { - "description": "RateLimitError 429 response", + "404": { + "description": "NotFoundError 404 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RateLimitErrorResponseContent" + "$ref": "#/components/schemas/NotFoundErrorResponseContent" + } + } + } + }, + "422": { + "description": "ValidationError 422 response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationErrorResponseContent" } } } @@ -657,12 +686,10 @@ } }, "tags": [ - "Automation" + "Card Tables" ], - "x-basecamp-pagination": { - "style": "link", - "totalCountHeader": "X-Total-Count", - "maxPageSize": 50 + "x-basecamp-idempotent": { + "natural": true }, "x-basecamp-retry": { "maxAttempts": 3, @@ -673,20 +700,12 @@ 503 ] } - }, - "post": { - "description": "Create a new webhook for a project", - "operationId": "CreateWebhook", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreateWebhookRequestContent" - } - } - }, - "required": true - }, + } + }, + "/buckets/{bucketId}/card_tables/columns/{columnId}/on_hold.json": { + "delete": { + "description": "Disable on-hold section in a column", + "operationId": "DisableCardColumnOnHold", "parameters": [ { "name": "bucketId", @@ -696,25 +715,24 @@ "format": "int64" }, "required": true + }, + { + "name": "columnId", + "in": "path", + "schema": { + "type": "integer", + "format": "int64" + }, + "required": true } ], "responses": { - "201": { - "description": "CreateWebhook 201 response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreateWebhookResponseContent" - } - } - } - }, - "400": { - "description": "BadRequestError 400 response", + "200": { + "description": "DisableCardColumnOnHold 200 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/BadRequestErrorResponseContent" + "$ref": "#/components/schemas/DisableCardColumnOnHoldResponseContent" } } } @@ -739,12 +757,12 @@ } } }, - "429": { - "description": "RateLimitError 429 response", + "404": { + "description": "NotFoundError 404 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RateLimitErrorResponseContent" + "$ref": "#/components/schemas/NotFoundErrorResponseContent" } } } @@ -758,23 +776,16 @@ } } } - }, - "507": { - "description": "WebhookLimitError 507 response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/WebhookLimitErrorResponseContent" - } - } - } } }, "tags": [ - "Automation" + "Card Tables" ], + "x-basecamp-idempotent": { + "natural": true + }, "x-basecamp-retry": { - "maxAttempts": 2, + "maxAttempts": 3, "baseDelayMs": 1000, "backoff": "exponential", "retryOn": [ @@ -782,15 +793,22 @@ 503 ] } - } - }, - "/card_tables/cards/{cardId}": { - "get": { - "description": "Get a card by ID", - "operationId": "GetCard", + }, + "post": { + "description": "Enable on-hold section in a column", + "operationId": "EnableCardColumnOnHold", "parameters": [ { - "name": "cardId", + "name": "bucketId", + "in": "path", + "schema": { + "type": "integer", + "format": "int64" + }, + "required": true + }, + { + "name": "columnId", "in": "path", "schema": { "type": "integer", @@ -801,11 +819,11 @@ ], "responses": { "200": { - "description": "GetCard 200 response", + "description": "EnableCardColumnOnHold 200 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GetCardResponseContent" + "$ref": "#/components/schemas/EnableCardColumnOnHoldResponseContent" } } } @@ -830,12 +848,22 @@ } } }, - "404": { - "description": "NotFoundError 404 response", + "422": { + "description": "ValidationError 422 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/NotFoundErrorResponseContent" + "$ref": "#/components/schemas/ValidationErrorResponseContent" + } + } + } + }, + "429": { + "description": "RateLimitError 429 response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RateLimitErrorResponseContent" } } } @@ -855,7 +883,7 @@ "Card Tables" ], "x-basecamp-retry": { - "maxAttempts": 3, + "maxAttempts": 2, "baseDelayMs": 1000, "backoff": "exponential", "retryOn": [ @@ -863,22 +891,15 @@ 503 ] } - }, - "put": { - "description": "Update an existing card", - "operationId": "UpdateCard", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateCardRequestContent" - } - } - } - }, + } + }, + "/buckets/{bucketId}/webhooks.json": { + "get": { + "description": "List all webhooks for a project\n\n**Pagination**: Uses Link header (RFC5988). Follow the `next` rel URL\nto fetch additional pages. X-Total-Count header provides total count.", + "operationId": "ListWebhooks", "parameters": [ { - "name": "cardId", + "name": "bucketId", "in": "path", "schema": { "type": "integer", @@ -889,11 +910,11 @@ ], "responses": { "200": { - "description": "UpdateCard 200 response", + "description": "ListWebhooks 200 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateCardResponseContent" + "$ref": "#/components/schemas/ListWebhooksResponseContent" } } } @@ -918,22 +939,12 @@ } } }, - "404": { - "description": "NotFoundError 404 response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/NotFoundErrorResponseContent" - } - } - } - }, - "422": { - "description": "ValidationError 422 response", + "429": { + "description": "RateLimitError 429 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ValidationErrorResponseContent" + "$ref": "#/components/schemas/RateLimitErrorResponseContent" } } } @@ -950,10 +961,12 @@ } }, "tags": [ - "Card Tables" + "Automation" ], - "x-basecamp-idempotent": { - "natural": true + "x-basecamp-pagination": { + "style": "link", + "totalCountHeader": "X-Total-Count", + "maxPageSize": 50 }, "x-basecamp-retry": { "maxAttempts": 3, @@ -964,17 +977,15 @@ 503 ] } - } - }, - "/card_tables/cards/{cardId}/moves.json": { + }, "post": { - "description": "Move a card to a different column", - "operationId": "MoveCard", + "description": "Create a new webhook for a project", + "operationId": "CreateWebhook", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MoveCardRequestContent" + "$ref": "#/components/schemas/CreateWebhookRequestContent" } } }, @@ -982,7 +993,7 @@ }, "parameters": [ { - "name": "cardId", + "name": "bucketId", "in": "path", "schema": { "type": "integer", @@ -992,35 +1003,42 @@ } ], "responses": { - "204": { - "description": "MoveCard 204 response" + "201": { + "description": "CreateWebhook 201 response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateWebhookResponseContent" + } + } + } }, - "401": { - "description": "UnauthorizedError 401 response", + "400": { + "description": "BadRequestError 400 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UnauthorizedErrorResponseContent" + "$ref": "#/components/schemas/BadRequestErrorResponseContent" } } } }, - "403": { - "description": "ForbiddenError 403 response", + "401": { + "description": "UnauthorizedError 401 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ForbiddenErrorResponseContent" + "$ref": "#/components/schemas/UnauthorizedErrorResponseContent" } } } }, - "422": { - "description": "ValidationError 422 response", + "403": { + "description": "ForbiddenError 403 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ValidationErrorResponseContent" + "$ref": "#/components/schemas/ForbiddenErrorResponseContent" } } } @@ -1044,36 +1062,36 @@ } } } + }, + "507": { + "description": "WebhookLimitError 507 response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WebhookLimitErrorResponseContent" + } + } + } } }, "tags": [ - "Card Tables" + "Automation" ], - "x-basecamp-retry": { - "maxAttempts": 2, - "baseDelayMs": 1000, - "backoff": "exponential", - "retryOn": [ - 429, - 503 - ] - } - } - }, - "/card_tables/cards/{cardId}/positions.json": { - "post": { - "description": "Reposition a step within a card", - "operationId": "RepositionCardStep", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RepositionCardStepRequestContent" - } - } - }, - "required": true - }, + "x-basecamp-retry": { + "maxAttempts": 2, + "baseDelayMs": 1000, + "backoff": "exponential", + "retryOn": [ + 429, + 503 + ] + } + } + }, + "/card_tables/cards/{cardId}": { + "get": { + "description": "Get a card by ID", + "operationId": "GetCard", "parameters": [ { "name": "cardId", @@ -1087,44 +1105,41 @@ ], "responses": { "200": { - "description": "RepositionCardStep 200 response" - }, - "401": { - "description": "UnauthorizedError 401 response", + "description": "GetCard 200 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UnauthorizedErrorResponseContent" + "$ref": "#/components/schemas/GetCardResponseContent" } } } }, - "403": { - "description": "ForbiddenError 403 response", + "401": { + "description": "UnauthorizedError 401 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ForbiddenErrorResponseContent" + "$ref": "#/components/schemas/UnauthorizedErrorResponseContent" } } } }, - "422": { - "description": "ValidationError 422 response", + "403": { + "description": "ForbiddenError 403 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ValidationErrorResponseContent" + "$ref": "#/components/schemas/ForbiddenErrorResponseContent" } } } }, - "429": { - "description": "RateLimitError 429 response", + "404": { + "description": "NotFoundError 404 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RateLimitErrorResponseContent" + "$ref": "#/components/schemas/NotFoundErrorResponseContent" } } } @@ -1144,7 +1159,7 @@ "Card Tables" ], "x-basecamp-retry": { - "maxAttempts": 2, + "maxAttempts": 3, "baseDelayMs": 1000, "backoff": "exponential", "retryOn": [ @@ -1152,21 +1167,18 @@ 503 ] } - } - }, - "/card_tables/cards/{cardId}/steps.json": { - "post": { - "description": "Create a step on a card", - "operationId": "CreateCardStep", + }, + "put": { + "description": "Update an existing card", + "operationId": "UpdateCard", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateCardStepRequestContent" + "$ref": "#/components/schemas/UpdateCardRequestContent" } } - }, - "required": true + } }, "parameters": [ { @@ -1180,12 +1192,12 @@ } ], "responses": { - "201": { - "description": "CreateCardStep 201 response", + "200": { + "description": "UpdateCard 200 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateCardStepResponseContent" + "$ref": "#/components/schemas/UpdateCardResponseContent" } } } @@ -1210,22 +1222,22 @@ } } }, - "422": { - "description": "ValidationError 422 response", + "404": { + "description": "NotFoundError 404 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ValidationErrorResponseContent" + "$ref": "#/components/schemas/NotFoundErrorResponseContent" } } } }, - "429": { - "description": "RateLimitError 429 response", + "422": { + "description": "ValidationError 422 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RateLimitErrorResponseContent" + "$ref": "#/components/schemas/ValidationErrorResponseContent" } } } @@ -1244,8 +1256,11 @@ "tags": [ "Card Tables" ], + "x-basecamp-idempotent": { + "natural": true + }, "x-basecamp-retry": { - "maxAttempts": 2, + "maxAttempts": 3, "baseDelayMs": 1000, "backoff": "exponential", "retryOn": [ @@ -1255,13 +1270,23 @@ } } }, - "/card_tables/columns/{columnId}": { - "get": { - "description": "Get a card column by ID", - "operationId": "GetCardColumn", + "/card_tables/cards/{cardId}/moves.json": { + "post": { + "description": "Move a card to a different column", + "operationId": "MoveCard", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MoveCardRequestContent" + } + } + }, + "required": true + }, "parameters": [ { - "name": "columnId", + "name": "cardId", "in": "path", "schema": { "type": "integer", @@ -1271,15 +1296,8 @@ } ], "responses": { - "200": { - "description": "GetCardColumn 200 response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GetCardColumnResponseContent" - } - } - } + "204": { + "description": "MoveCard 204 response" }, "401": { "description": "UnauthorizedError 401 response", @@ -1301,12 +1319,22 @@ } } }, - "404": { - "description": "NotFoundError 404 response", + "422": { + "description": "ValidationError 422 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/NotFoundErrorResponseContent" + "$ref": "#/components/schemas/ValidationErrorResponseContent" + } + } + } + }, + "429": { + "description": "RateLimitError 429 response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RateLimitErrorResponseContent" } } } @@ -1326,7 +1354,7 @@ "Card Tables" ], "x-basecamp-retry": { - "maxAttempts": 3, + "maxAttempts": 2, "baseDelayMs": 1000, "backoff": "exponential", "retryOn": [ @@ -1334,22 +1362,25 @@ 503 ] } - }, - "put": { - "description": "Update an existing column", - "operationId": "UpdateCardColumn", + } + }, + "/card_tables/cards/{cardId}/positions.json": { + "post": { + "description": "Reposition a step within a card", + "operationId": "RepositionCardStep", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateCardColumnRequestContent" + "$ref": "#/components/schemas/RepositionCardStepRequestContent" } } - } + }, + "required": true }, "parameters": [ { - "name": "columnId", + "name": "cardId", "in": "path", "schema": { "type": "integer", @@ -1360,14 +1391,7 @@ ], "responses": { "200": { - "description": "UpdateCardColumn 200 response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateCardColumnResponseContent" - } - } - } + "description": "RepositionCardStep 200 response" }, "401": { "description": "UnauthorizedError 401 response", @@ -1389,22 +1413,22 @@ } } }, - "404": { - "description": "NotFoundError 404 response", + "422": { + "description": "ValidationError 422 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/NotFoundErrorResponseContent" + "$ref": "#/components/schemas/ValidationErrorResponseContent" } } } }, - "422": { - "description": "ValidationError 422 response", + "429": { + "description": "RateLimitError 429 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ValidationErrorResponseContent" + "$ref": "#/components/schemas/RateLimitErrorResponseContent" } } } @@ -1423,11 +1447,8 @@ "tags": [ "Card Tables" ], - "x-basecamp-idempotent": { - "natural": true - }, "x-basecamp-retry": { - "maxAttempts": 3, + "maxAttempts": 2, "baseDelayMs": 1000, "backoff": "exponential", "retryOn": [ @@ -1437,15 +1458,15 @@ } } }, - "/card_tables/columns/{columnId}/color.json": { - "put": { - "description": "Set the color of a column", - "operationId": "SetCardColumnColor", + "/card_tables/cards/{cardId}/steps.json": { + "post": { + "description": "Create a step on a card", + "operationId": "CreateCardStep", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SetCardColumnColorRequestContent" + "$ref": "#/components/schemas/CreateCardStepRequestContent" } } }, @@ -1453,7 +1474,7 @@ }, "parameters": [ { - "name": "columnId", + "name": "cardId", "in": "path", "schema": { "type": "integer", @@ -1463,12 +1484,12 @@ } ], "responses": { - "200": { - "description": "SetCardColumnColor 200 response", + "201": { + "description": "CreateCardStep 201 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SetCardColumnColorResponseContent" + "$ref": "#/components/schemas/CreateCardStepResponseContent" } } } @@ -1493,22 +1514,22 @@ } } }, - "404": { - "description": "NotFoundError 404 response", + "422": { + "description": "ValidationError 422 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/NotFoundErrorResponseContent" + "$ref": "#/components/schemas/ValidationErrorResponseContent" } } } }, - "422": { - "description": "ValidationError 422 response", + "429": { + "description": "RateLimitError 429 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ValidationErrorResponseContent" + "$ref": "#/components/schemas/RateLimitErrorResponseContent" } } } @@ -1527,11 +1548,8 @@ "tags": [ "Card Tables" ], - "x-basecamp-idempotent": { - "natural": true - }, "x-basecamp-retry": { - "maxAttempts": 3, + "maxAttempts": 2, "baseDelayMs": 1000, "backoff": "exponential", "retryOn": [ @@ -1541,10 +1559,10 @@ } } }, - "/card_tables/columns/{columnId}/on_hold.json": { - "delete": { - "description": "Disable on-hold section in a column", - "operationId": "DisableCardColumnOnHold", + "/card_tables/columns/{columnId}": { + "get": { + "description": "Get a card column by ID", + "operationId": "GetCardColumn", "parameters": [ { "name": "columnId", @@ -1558,11 +1576,11 @@ ], "responses": { "200": { - "description": "DisableCardColumnOnHold 200 response", + "description": "GetCardColumn 200 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DisableCardColumnOnHoldResponseContent" + "$ref": "#/components/schemas/GetCardColumnResponseContent" } } } @@ -1611,9 +1629,6 @@ "tags": [ "Card Tables" ], - "x-basecamp-idempotent": { - "natural": true - }, "x-basecamp-retry": { "maxAttempts": 3, "baseDelayMs": 1000, @@ -1624,9 +1639,18 @@ ] } }, - "post": { - "description": "Enable on-hold section in a column", - "operationId": "EnableCardColumnOnHold", + "put": { + "description": "Update an existing column", + "operationId": "UpdateCardColumn", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateCardColumnRequestContent" + } + } + } + }, "parameters": [ { "name": "columnId", @@ -1640,11 +1664,11 @@ ], "responses": { "200": { - "description": "EnableCardColumnOnHold 200 response", + "description": "UpdateCardColumn 200 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EnableCardColumnOnHoldResponseContent" + "$ref": "#/components/schemas/UpdateCardColumnResponseContent" } } } @@ -1669,22 +1693,22 @@ } } }, - "422": { - "description": "ValidationError 422 response", + "404": { + "description": "NotFoundError 404 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ValidationErrorResponseContent" + "$ref": "#/components/schemas/NotFoundErrorResponseContent" } } } }, - "429": { - "description": "RateLimitError 429 response", + "422": { + "description": "ValidationError 422 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RateLimitErrorResponseContent" + "$ref": "#/components/schemas/ValidationErrorResponseContent" } } } @@ -1703,8 +1727,11 @@ "tags": [ "Card Tables" ], + "x-basecamp-idempotent": { + "natural": true + }, "x-basecamp-retry": { - "maxAttempts": 2, + "maxAttempts": 3, "baseDelayMs": 1000, "backoff": "exponential", "retryOn": [ diff --git a/typescript/src/generated/path-mapping.ts b/typescript/src/generated/path-mapping.ts index 3a1cb939..1720967e 100644 --- a/typescript/src/generated/path-mapping.ts +++ b/typescript/src/generated/path-mapping.ts @@ -13,6 +13,9 @@ export const PATH_TO_OPERATION: Record = { "PUT:/{accountId}/account/name.json": "UpdateAccountName", "DELETE:/{accountId}/boosts/{boostId}": "DeleteBoost", "GET:/{accountId}/boosts/{boostId}": "GetBoost", + "PUT:/{accountId}/buckets/{bucketId}/card_tables/columns/{columnId}/color.json": "SetCardColumnColor", + "DELETE:/{accountId}/buckets/{bucketId}/card_tables/columns/{columnId}/on_hold.json": "DisableCardColumnOnHold", + "POST:/{accountId}/buckets/{bucketId}/card_tables/columns/{columnId}/on_hold.json": "EnableCardColumnOnHold", "GET:/{accountId}/buckets/{bucketId}/webhooks.json": "ListWebhooks", "POST:/{accountId}/buckets/{bucketId}/webhooks.json": "CreateWebhook", "GET:/{accountId}/card_tables/{cardTableId}": "GetCardTable", @@ -25,9 +28,6 @@ export const PATH_TO_OPERATION: Record = { "POST:/{accountId}/card_tables/cards/{cardId}/steps.json": "CreateCardStep", "GET:/{accountId}/card_tables/columns/{columnId}": "GetCardColumn", "PUT:/{accountId}/card_tables/columns/{columnId}": "UpdateCardColumn", - "PUT:/{accountId}/card_tables/columns/{columnId}/color.json": "SetCardColumnColor", - "DELETE:/{accountId}/card_tables/columns/{columnId}/on_hold.json": "DisableCardColumnOnHold", - "POST:/{accountId}/card_tables/columns/{columnId}/on_hold.json": "EnableCardColumnOnHold", "GET:/{accountId}/card_tables/lists/{columnId}/cards.json": "ListCards", "POST:/{accountId}/card_tables/lists/{columnId}/cards.json": "CreateCard", "DELETE:/{accountId}/card_tables/lists/{columnId}/subscription.json": "UnsubscribeFromCardColumn", diff --git a/typescript/src/generated/schema.d.ts b/typescript/src/generated/schema.d.ts index 5505c23a..976c3355 100644 --- a/typescript/src/generated/schema.d.ts +++ b/typescript/src/generated/schema.d.ts @@ -95,6 +95,41 @@ export interface paths { patch?: never; trace?: never; }; + "/buckets/{bucketId}/card_tables/columns/{columnId}/color.json": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** @description Set the color of a column */ + put: operations["SetCardColumnColor"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/buckets/{bucketId}/card_tables/columns/{columnId}/on_hold.json": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** @description Enable on-hold section in a column */ + post: operations["EnableCardColumnOnHold"]; + /** @description Disable on-hold section in a column */ + delete: operations["DisableCardColumnOnHold"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; "/buckets/{bucketId}/webhooks.json": { parameters: { query?: never; @@ -205,41 +240,6 @@ export interface paths { patch?: never; trace?: never; }; - "/card_tables/columns/{columnId}/color.json": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - /** @description Set the color of a column */ - put: operations["SetCardColumnColor"]; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/card_tables/columns/{columnId}/on_hold.json": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** @description Enable on-hold section in a column */ - post: operations["EnableCardColumnOnHold"]; - /** @description Disable on-hold section in a column */ - delete: operations["DisableCardColumnOnHold"]; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; "/card_tables/lists/{columnId}/cards.json": { parameters: { query?: never; @@ -4936,24 +4936,29 @@ export interface operations { }; }; }; - ListWebhooks: { + SetCardColumnColor: { parameters: { query?: never; header?: never; path: { bucketId: number; + columnId: number; }; cookie?: never; }; - requestBody?: never; + requestBody: { + content: { + "application/json": components["schemas"]["SetCardColumnColorRequestContent"]; + }; + }; responses: { - /** @description ListWebhooks 200 response */ + /** @description SetCardColumnColor 200 response */ 200: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["ListWebhooksResponseContent"]; + "application/json": components["schemas"]["SetCardColumnColorResponseContent"]; }; }; /** @description UnauthorizedError 401 response */ @@ -4974,13 +4979,22 @@ export interface operations { "application/json": components["schemas"]["ForbiddenErrorResponseContent"]; }; }; - /** @description RateLimitError 429 response */ - 429: { + /** @description NotFoundError 404 response */ + 404: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["RateLimitErrorResponseContent"]; + "application/json": components["schemas"]["NotFoundErrorResponseContent"]; + }; + }; + /** @description ValidationError 422 response */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ValidationErrorResponseContent"]; }; }; /** @description InternalServerError 500 response */ @@ -4994,37 +5008,25 @@ export interface operations { }; }; }; - CreateWebhook: { + EnableCardColumnOnHold: { parameters: { query?: never; header?: never; path: { bucketId: number; + columnId: number; }; cookie?: never; }; - requestBody: { - content: { - "application/json": components["schemas"]["CreateWebhookRequestContent"]; - }; - }; + requestBody?: never; responses: { - /** @description CreateWebhook 201 response */ - 201: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["CreateWebhookResponseContent"]; - }; - }; - /** @description BadRequestError 400 response */ - 400: { + /** @description EnableCardColumnOnHold 200 response */ + 200: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["BadRequestErrorResponseContent"]; + "application/json": components["schemas"]["EnableCardColumnOnHoldResponseContent"]; }; }; /** @description UnauthorizedError 401 response */ @@ -5045,53 +5047,54 @@ export interface operations { "application/json": components["schemas"]["ForbiddenErrorResponseContent"]; }; }; - /** @description RateLimitError 429 response */ - 429: { + /** @description ValidationError 422 response */ + 422: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["RateLimitErrorResponseContent"]; + "application/json": components["schemas"]["ValidationErrorResponseContent"]; }; }; - /** @description InternalServerError 500 response */ - 500: { + /** @description RateLimitError 429 response */ + 429: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["InternalServerErrorResponseContent"]; + "application/json": components["schemas"]["RateLimitErrorResponseContent"]; }; }; - /** @description WebhookLimitError 507 response */ - 507: { + /** @description InternalServerError 500 response */ + 500: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["WebhookLimitErrorResponseContent"]; + "application/json": components["schemas"]["InternalServerErrorResponseContent"]; }; }; }; }; - GetCard: { + DisableCardColumnOnHold: { parameters: { query?: never; header?: never; path: { - cardId: number; + bucketId: number; + columnId: number; }; cookie?: never; }; requestBody?: never; responses: { - /** @description GetCard 200 response */ + /** @description DisableCardColumnOnHold 200 response */ 200: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["GetCardResponseContent"]; + "application/json": components["schemas"]["DisableCardColumnOnHoldResponseContent"]; }; }; /** @description UnauthorizedError 401 response */ @@ -5132,28 +5135,24 @@ export interface operations { }; }; }; - UpdateCard: { + ListWebhooks: { parameters: { query?: never; header?: never; path: { - cardId: number; + bucketId: number; }; cookie?: never; }; - requestBody?: { - content: { - "application/json": components["schemas"]["UpdateCardRequestContent"]; - }; - }; + requestBody?: never; responses: { - /** @description UpdateCard 200 response */ + /** @description ListWebhooks 200 response */ 200: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["UpdateCardResponseContent"]; + "application/json": components["schemas"]["ListWebhooksResponseContent"]; }; }; /** @description UnauthorizedError 401 response */ @@ -5174,22 +5173,13 @@ export interface operations { "application/json": components["schemas"]["ForbiddenErrorResponseContent"]; }; }; - /** @description NotFoundError 404 response */ - 404: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["NotFoundErrorResponseContent"]; - }; - }; - /** @description ValidationError 422 response */ - 422: { + /** @description RateLimitError 429 response */ + 429: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["ValidationErrorResponseContent"]; + "application/json": components["schemas"]["RateLimitErrorResponseContent"]; }; }; /** @description InternalServerError 500 response */ @@ -5203,53 +5193,55 @@ export interface operations { }; }; }; - MoveCard: { + CreateWebhook: { parameters: { query?: never; header?: never; path: { - cardId: number; + bucketId: number; }; cookie?: never; }; requestBody: { content: { - "application/json": components["schemas"]["MoveCardRequestContent"]; + "application/json": components["schemas"]["CreateWebhookRequestContent"]; }; }; responses: { - /** @description MoveCard 204 response */ - 204: { + /** @description CreateWebhook 201 response */ + 201: { headers: { [name: string]: unknown; }; - content?: never; + content: { + "application/json": components["schemas"]["CreateWebhookResponseContent"]; + }; }; - /** @description UnauthorizedError 401 response */ - 401: { + /** @description BadRequestError 400 response */ + 400: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["UnauthorizedErrorResponseContent"]; + "application/json": components["schemas"]["BadRequestErrorResponseContent"]; }; }; - /** @description ForbiddenError 403 response */ - 403: { + /** @description UnauthorizedError 401 response */ + 401: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["ForbiddenErrorResponseContent"]; + "application/json": components["schemas"]["UnauthorizedErrorResponseContent"]; }; }; - /** @description ValidationError 422 response */ - 422: { + /** @description ForbiddenError 403 response */ + 403: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["ValidationErrorResponseContent"]; + "application/json": components["schemas"]["ForbiddenErrorResponseContent"]; }; }; /** @description RateLimitError 429 response */ @@ -5270,9 +5262,18 @@ export interface operations { "application/json": components["schemas"]["InternalServerErrorResponseContent"]; }; }; + /** @description WebhookLimitError 507 response */ + 507: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["WebhookLimitErrorResponseContent"]; + }; + }; }; }; - RepositionCardStep: { + GetCard: { parameters: { query?: never; header?: never; @@ -5281,18 +5282,16 @@ export interface operations { }; cookie?: never; }; - requestBody: { - content: { - "application/json": components["schemas"]["RepositionCardStepRequestContent"]; - }; - }; + requestBody?: never; responses: { - /** @description RepositionCardStep 200 response */ + /** @description GetCard 200 response */ 200: { headers: { [name: string]: unknown; }; - content?: never; + content: { + "application/json": components["schemas"]["GetCardResponseContent"]; + }; }; /** @description UnauthorizedError 401 response */ 401: { @@ -5312,22 +5311,13 @@ export interface operations { "application/json": components["schemas"]["ForbiddenErrorResponseContent"]; }; }; - /** @description ValidationError 422 response */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["ValidationErrorResponseContent"]; - }; - }; - /** @description RateLimitError 429 response */ - 429: { + /** @description NotFoundError 404 response */ + 404: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["RateLimitErrorResponseContent"]; + "application/json": components["schemas"]["NotFoundErrorResponseContent"]; }; }; /** @description InternalServerError 500 response */ @@ -5341,7 +5331,7 @@ export interface operations { }; }; }; - CreateCardStep: { + UpdateCard: { parameters: { query?: never; header?: never; @@ -5350,19 +5340,19 @@ export interface operations { }; cookie?: never; }; - requestBody: { + requestBody?: { content: { - "application/json": components["schemas"]["CreateCardStepRequestContent"]; + "application/json": components["schemas"]["UpdateCardRequestContent"]; }; }; responses: { - /** @description CreateCardStep 201 response */ - 201: { + /** @description UpdateCard 200 response */ + 200: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["CreateCardStepResponseContent"]; + "application/json": components["schemas"]["UpdateCardResponseContent"]; }; }; /** @description UnauthorizedError 401 response */ @@ -5383,22 +5373,22 @@ export interface operations { "application/json": components["schemas"]["ForbiddenErrorResponseContent"]; }; }; - /** @description ValidationError 422 response */ - 422: { + /** @description NotFoundError 404 response */ + 404: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["ValidationErrorResponseContent"]; + "application/json": components["schemas"]["NotFoundErrorResponseContent"]; }; }; - /** @description RateLimitError 429 response */ - 429: { + /** @description ValidationError 422 response */ + 422: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["RateLimitErrorResponseContent"]; + "application/json": components["schemas"]["ValidationErrorResponseContent"]; }; }; /** @description InternalServerError 500 response */ @@ -5412,25 +5402,27 @@ export interface operations { }; }; }; - GetCardColumn: { + MoveCard: { parameters: { query?: never; header?: never; path: { - columnId: number; + cardId: number; }; cookie?: never; }; - requestBody?: never; + requestBody: { + content: { + "application/json": components["schemas"]["MoveCardRequestContent"]; + }; + }; responses: { - /** @description GetCardColumn 200 response */ - 200: { + /** @description MoveCard 204 response */ + 204: { headers: { [name: string]: unknown; }; - content: { - "application/json": components["schemas"]["GetCardColumnResponseContent"]; - }; + content?: never; }; /** @description UnauthorizedError 401 response */ 401: { @@ -5450,13 +5442,22 @@ export interface operations { "application/json": components["schemas"]["ForbiddenErrorResponseContent"]; }; }; - /** @description NotFoundError 404 response */ - 404: { + /** @description ValidationError 422 response */ + 422: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["NotFoundErrorResponseContent"]; + "application/json": components["schemas"]["ValidationErrorResponseContent"]; + }; + }; + /** @description RateLimitError 429 response */ + 429: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["RateLimitErrorResponseContent"]; }; }; /** @description InternalServerError 500 response */ @@ -5470,29 +5471,27 @@ export interface operations { }; }; }; - UpdateCardColumn: { + RepositionCardStep: { parameters: { query?: never; header?: never; path: { - columnId: number; + cardId: number; }; cookie?: never; }; - requestBody?: { + requestBody: { content: { - "application/json": components["schemas"]["UpdateCardColumnRequestContent"]; + "application/json": components["schemas"]["RepositionCardStepRequestContent"]; }; }; responses: { - /** @description UpdateCardColumn 200 response */ + /** @description RepositionCardStep 200 response */ 200: { headers: { [name: string]: unknown; }; - content: { - "application/json": components["schemas"]["UpdateCardColumnResponseContent"]; - }; + content?: never; }; /** @description UnauthorizedError 401 response */ 401: { @@ -5512,22 +5511,22 @@ export interface operations { "application/json": components["schemas"]["ForbiddenErrorResponseContent"]; }; }; - /** @description NotFoundError 404 response */ - 404: { + /** @description ValidationError 422 response */ + 422: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["NotFoundErrorResponseContent"]; + "application/json": components["schemas"]["ValidationErrorResponseContent"]; }; }; - /** @description ValidationError 422 response */ - 422: { + /** @description RateLimitError 429 response */ + 429: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["ValidationErrorResponseContent"]; + "application/json": components["schemas"]["RateLimitErrorResponseContent"]; }; }; /** @description InternalServerError 500 response */ @@ -5541,28 +5540,28 @@ export interface operations { }; }; }; - SetCardColumnColor: { + CreateCardStep: { parameters: { query?: never; header?: never; path: { - columnId: number; + cardId: number; }; cookie?: never; }; requestBody: { content: { - "application/json": components["schemas"]["SetCardColumnColorRequestContent"]; + "application/json": components["schemas"]["CreateCardStepRequestContent"]; }; }; responses: { - /** @description SetCardColumnColor 200 response */ - 200: { + /** @description CreateCardStep 201 response */ + 201: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["SetCardColumnColorResponseContent"]; + "application/json": components["schemas"]["CreateCardStepResponseContent"]; }; }; /** @description UnauthorizedError 401 response */ @@ -5583,22 +5582,22 @@ export interface operations { "application/json": components["schemas"]["ForbiddenErrorResponseContent"]; }; }; - /** @description NotFoundError 404 response */ - 404: { + /** @description ValidationError 422 response */ + 422: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["NotFoundErrorResponseContent"]; + "application/json": components["schemas"]["ValidationErrorResponseContent"]; }; }; - /** @description ValidationError 422 response */ - 422: { + /** @description RateLimitError 429 response */ + 429: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["ValidationErrorResponseContent"]; + "application/json": components["schemas"]["RateLimitErrorResponseContent"]; }; }; /** @description InternalServerError 500 response */ @@ -5612,7 +5611,7 @@ export interface operations { }; }; }; - EnableCardColumnOnHold: { + GetCardColumn: { parameters: { query?: never; header?: never; @@ -5623,13 +5622,13 @@ export interface operations { }; requestBody?: never; responses: { - /** @description EnableCardColumnOnHold 200 response */ + /** @description GetCardColumn 200 response */ 200: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["EnableCardColumnOnHoldResponseContent"]; + "application/json": components["schemas"]["GetCardColumnResponseContent"]; }; }; /** @description UnauthorizedError 401 response */ @@ -5650,22 +5649,13 @@ export interface operations { "application/json": components["schemas"]["ForbiddenErrorResponseContent"]; }; }; - /** @description ValidationError 422 response */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["ValidationErrorResponseContent"]; - }; - }; - /** @description RateLimitError 429 response */ - 429: { + /** @description NotFoundError 404 response */ + 404: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["RateLimitErrorResponseContent"]; + "application/json": components["schemas"]["NotFoundErrorResponseContent"]; }; }; /** @description InternalServerError 500 response */ @@ -5679,7 +5669,7 @@ export interface operations { }; }; }; - DisableCardColumnOnHold: { + UpdateCardColumn: { parameters: { query?: never; header?: never; @@ -5688,15 +5678,19 @@ export interface operations { }; cookie?: never; }; - requestBody?: never; + requestBody?: { + content: { + "application/json": components["schemas"]["UpdateCardColumnRequestContent"]; + }; + }; responses: { - /** @description DisableCardColumnOnHold 200 response */ + /** @description UpdateCardColumn 200 response */ 200: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["DisableCardColumnOnHoldResponseContent"]; + "application/json": components["schemas"]["UpdateCardColumnResponseContent"]; }; }; /** @description UnauthorizedError 401 response */ @@ -5726,6 +5720,15 @@ export interface operations { "application/json": components["schemas"]["NotFoundErrorResponseContent"]; }; }; + /** @description ValidationError 422 response */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ValidationErrorResponseContent"]; + }; + }; /** @description InternalServerError 500 response */ 500: { headers: { diff --git a/typescript/src/generated/services/card-columns.ts b/typescript/src/generated/services/card-columns.ts index f3d03389..c67018eb 100644 --- a/typescript/src/generated/services/card-columns.ts +++ b/typescript/src/generated/services/card-columns.ts @@ -15,6 +15,14 @@ import { Errors } from "../../errors.js"; /** CardColumn entity from the Basecamp API. */ export type CardColumn = components["schemas"]["CardColumn"]; +/** + * Request parameters for setColor. + */ +export interface SetColorCardColumnRequest { + /** Valid colors: white, red, orange, yellow, green, blue, aqua, purple, gray, pink, brown */ + color: string; +} + /** * Request parameters for update. */ @@ -25,14 +33,6 @@ export interface UpdateCardColumnRequest { description?: string; } -/** - * Request parameters for setColor. - */ -export interface SetColorCardColumnRequest { - /** Valid colors: white, red, orange, yellow, green, blue, aqua, purple, gray, pink, brown */ - color: string; -} - /** * Request parameters for create. */ @@ -66,29 +66,37 @@ export interface MoveCardColumnRequest { export class CardColumnsService extends BaseService { /** - * Get a card column by ID + * Set the color of a column + * @param bucketId - The bucket ID * @param columnId - The column ID + * @param req - Card_column_color request parameters * @returns The CardColumn - * @throws {BasecampError} If the resource is not found + * @throws {BasecampError} If the request fails * * @example * ```ts - * const result = await client.cardColumns.get(123); + * const result = await client.cardColumns.setColor(123, 123, { color: "example" }); * ``` */ - async get(columnId: number): Promise { + async setColor(bucketId: number, columnId: number, req: SetColorCardColumnRequest): Promise { + if (!req.color) { + throw Errors.validation("Color is required"); + } const response = await this.request( { service: "CardColumns", - operation: "GetCardColumn", - resourceType: "card_column", - isMutation: false, + operation: "SetCardColumnColor", + resourceType: "card_column_color", + isMutation: true, resourceId: columnId, }, () => - this.client.GET("/card_tables/columns/{columnId}", { + this.client.PUT("/buckets/{bucketId}/card_tables/columns/{columnId}/color.json", { params: { - path: { columnId }, + path: { bucketId, columnId }, + }, + body: { + color: req.color, }, }) ); @@ -96,34 +104,30 @@ export class CardColumnsService extends BaseService { } /** - * Update an existing column + * Enable on-hold section in a column + * @param bucketId - The bucket ID * @param columnId - The column ID - * @param req - Card_column update parameters * @returns The CardColumn - * @throws {BasecampError} If the resource is not found or fields are invalid + * @throws {BasecampError} If the request fails * * @example * ```ts - * const result = await client.cardColumns.update(123, { }); + * const result = await client.cardColumns.enableOnHold(123, 123); * ``` */ - async update(columnId: number, req: UpdateCardColumnRequest): Promise { + async enableOnHold(bucketId: number, columnId: number): Promise { const response = await this.request( { service: "CardColumns", - operation: "UpdateCardColumn", - resourceType: "card_column", + operation: "EnableCardColumnOnHold", + resourceType: "card_column_on_hold", isMutation: true, resourceId: columnId, }, () => - this.client.PUT("/card_tables/columns/{columnId}", { + this.client.POST("/buckets/{bucketId}/card_tables/columns/{columnId}/on_hold.json", { params: { - path: { columnId }, - }, - body: { - title: req.title, - description: req.description, + path: { bucketId, columnId }, }, }) ); @@ -131,36 +135,30 @@ export class CardColumnsService extends BaseService { } /** - * Set the color of a column + * Disable on-hold section in a column + * @param bucketId - The bucket ID * @param columnId - The column ID - * @param req - Card_column_color request parameters * @returns The CardColumn * @throws {BasecampError} If the request fails * * @example * ```ts - * const result = await client.cardColumns.setColor(123, { color: "example" }); + * const result = await client.cardColumns.disableOnHold(123, 123); * ``` */ - async setColor(columnId: number, req: SetColorCardColumnRequest): Promise { - if (!req.color) { - throw Errors.validation("Color is required"); - } + async disableOnHold(bucketId: number, columnId: number): Promise { const response = await this.request( { service: "CardColumns", - operation: "SetCardColumnColor", - resourceType: "card_column_color", + operation: "DisableCardColumnOnHold", + resourceType: "card_column_on_hold", isMutation: true, resourceId: columnId, }, () => - this.client.PUT("/card_tables/columns/{columnId}/color.json", { + this.client.DELETE("/buckets/{bucketId}/card_tables/columns/{columnId}/on_hold.json", { params: { - path: { columnId }, - }, - body: { - color: req.color, + path: { bucketId, columnId }, }, }) ); @@ -168,27 +166,27 @@ export class CardColumnsService extends BaseService { } /** - * Enable on-hold section in a column + * Get a card column by ID * @param columnId - The column ID * @returns The CardColumn - * @throws {BasecampError} If the request fails + * @throws {BasecampError} If the resource is not found * * @example * ```ts - * const result = await client.cardColumns.enableOnHold(123); + * const result = await client.cardColumns.get(123); * ``` */ - async enableOnHold(columnId: number): Promise { + async get(columnId: number): Promise { const response = await this.request( { service: "CardColumns", - operation: "EnableCardColumnOnHold", - resourceType: "card_column_on_hold", - isMutation: true, + operation: "GetCardColumn", + resourceType: "card_column", + isMutation: false, resourceId: columnId, }, () => - this.client.POST("/card_tables/columns/{columnId}/on_hold.json", { + this.client.GET("/card_tables/columns/{columnId}", { params: { path: { columnId }, }, @@ -198,30 +196,35 @@ export class CardColumnsService extends BaseService { } /** - * Disable on-hold section in a column + * Update an existing column * @param columnId - The column ID + * @param req - Card_column update parameters * @returns The CardColumn - * @throws {BasecampError} If the request fails + * @throws {BasecampError} If the resource is not found or fields are invalid * * @example * ```ts - * const result = await client.cardColumns.disableOnHold(123); + * const result = await client.cardColumns.update(123, { }); * ``` */ - async disableOnHold(columnId: number): Promise { + async update(columnId: number, req: UpdateCardColumnRequest): Promise { const response = await this.request( { service: "CardColumns", - operation: "DisableCardColumnOnHold", - resourceType: "card_column_on_hold", + operation: "UpdateCardColumn", + resourceType: "card_column", isMutation: true, resourceId: columnId, }, () => - this.client.DELETE("/card_tables/columns/{columnId}/on_hold.json", { + this.client.PUT("/card_tables/columns/{columnId}", { params: { path: { columnId }, }, + body: { + title: req.title, + description: req.description, + }, }) ); return response; diff --git a/typescript/src/generated/services/index.ts b/typescript/src/generated/services/index.ts index 9403e6e8..65eca51c 100644 --- a/typescript/src/generated/services/index.ts +++ b/typescript/src/generated/services/index.ts @@ -1,10 +1,10 @@ export { AccountService } from "./account.js"; export { AttachmentsService } from "./attachments.js"; export { BoostsService } from "./boosts.js"; +export { CardColumnsService } from "./card-columns.js"; export { WebhooksService } from "./webhooks.js"; export { CardsService } from "./cards.js"; export { CardStepsService } from "./card-steps.js"; -export { CardColumnsService } from "./card-columns.js"; export { CardTablesService } from "./card-tables.js"; export { MessageTypesService } from "./message-types.js"; export { CampfiresService } from "./campfires.js"; diff --git a/typescript/tests/services/card-columns.test.ts b/typescript/tests/services/card-columns.test.ts index c695f355..275bad62 100644 --- a/typescript/tests/services/card-columns.test.ts +++ b/typescript/tests/services/card-columns.test.ts @@ -104,17 +104,18 @@ describe("CardColumnsService", () => { describe("setColor", () => { it("should set the color of a column", async () => { + const bucketId = 999; const columnId = 42; server.use( - http.put(`${BASE_URL}/card_tables/columns/${columnId}/color.json`, async ({ request }) => { + http.put(`${BASE_URL}/buckets/${bucketId}/card_tables/columns/${columnId}/color.json`, async ({ request }) => { const body = (await request.json()) as Record; expect(body.color).toBe("green"); return HttpResponse.json(sampleColumn(columnId)); }) ); - const column = await client.cardColumns.setColor(columnId, { + const column = await client.cardColumns.setColor(bucketId, columnId, { color: "green", }); expect(column.id).toBe(columnId); @@ -123,10 +124,11 @@ describe("CardColumnsService", () => { describe("enableOnHold", () => { it("should enable on-hold for a column", async () => { + const bucketId = 999; const columnId = 42; server.use( - http.post(`${BASE_URL}/card_tables/columns/${columnId}/on_hold.json`, () => { + http.post(`${BASE_URL}/buckets/${bucketId}/card_tables/columns/${columnId}/on_hold.json`, () => { return HttpResponse.json({ ...sampleColumn(columnId), on_hold: { @@ -139,7 +141,7 @@ describe("CardColumnsService", () => { }) ); - const column = await client.cardColumns.enableOnHold(columnId); + const column = await client.cardColumns.enableOnHold(bucketId, columnId); expect(column.id).toBe(columnId); expect(column.on_hold?.id).toBe(9999); expect(column.on_hold?.status).toBe("active"); @@ -148,15 +150,16 @@ describe("CardColumnsService", () => { describe("disableOnHold", () => { it("should disable on-hold for a column", async () => { + const bucketId = 999; const columnId = 42; server.use( - http.delete(`${BASE_URL}/card_tables/columns/${columnId}/on_hold.json`, () => { + http.delete(`${BASE_URL}/buckets/${bucketId}/card_tables/columns/${columnId}/on_hold.json`, () => { return HttpResponse.json(sampleColumn(columnId)); }) ); - const column = await client.cardColumns.disableOnHold(columnId); + const column = await client.cardColumns.disableOnHold(bucketId, columnId); expect(column.id).toBe(columnId); expect(column.on_hold).toBeUndefined(); }); From 9c15b67934140d892d168129fe5a3b56d263a3ea Mon Sep 17 00:00:00 2001 From: Jeremy Daer Date: Wed, 29 Apr 2026 11:02:25 -0700 Subject: [PATCH 2/3] Add CardColumns httptest coverage for bucket-scoped paths Asserts method and full URL path for SetColor, EnableOnHold, and DisableOnHold. The path assertion uses distinct bucketID and columnID constants so a future swap of the wrapper's (bucketID, columnID) argument order builds a path with the IDs in the wrong slots and fails the test, rather than silently producing a 404 against the live API like the bug this PR fixes. --- go/pkg/basecamp/cards_test.go | 101 ++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) diff --git a/go/pkg/basecamp/cards_test.go b/go/pkg/basecamp/cards_test.go index f1417f51..ac5fb8a5 100644 --- a/go/pkg/basecamp/cards_test.go +++ b/go/pkg/basecamp/cards_test.go @@ -901,3 +901,104 @@ func TestCardStepsService_UpdatePartial(t *testing.T) { } } } + +// testCardColumnsServer creates an httptest.Server and a CardColumnsService wired to it. +func testCardColumnsServer(t *testing.T, handler http.HandlerFunc) *CardColumnsService { + t.Helper() + server := httptest.NewServer(handler) + t.Cleanup(server.Close) + + cfg := DefaultConfig() + cfg.BaseURL = server.URL + token := &StaticTokenProvider{Token: "test-token"} + client := NewClient(cfg, token) + account := client.ForAccount("99999") + return account.CardColumns() +} + +// Distinct bucketID/columnID — a future swap of the (bucketID, columnID) argument +// order would build a path with the IDs in the wrong slots and fail the assertion. +const ( + cardColumnsTestBucketID = int64(2085958499) + cardColumnsTestColumnID = int64(1069479347) +) + +func TestCardColumnsService_SetColor(t *testing.T) { + fixture := loadCardsFixture(t, "column.json") + wantPath := "/99999/buckets/2085958499/card_tables/columns/1069479347/color.json" + + var receivedBody map[string]any + svc := testCardColumnsServer(t, func(w http.ResponseWriter, r *http.Request) { + if r.Method != "PUT" { + t.Errorf("expected PUT, got %s", r.Method) + } + if r.URL.Path != wantPath { + t.Errorf("path = %q, want %q", r.URL.Path, wantPath) + } + receivedBody = decodeRequestBody(t, r) + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(200) + w.Write(fixture) + }) + + column, err := svc.SetColor(context.Background(), cardColumnsTestBucketID, cardColumnsTestColumnID, "blue") + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if column == nil || column.ID != cardColumnsTestColumnID { + t.Fatalf("expected column ID %d, got %+v", cardColumnsTestColumnID, column) + } + if got := receivedBody["color"]; got != "blue" { + t.Errorf("body color = %v, want \"blue\"", got) + } +} + +func TestCardColumnsService_EnableOnHold(t *testing.T) { + fixture := loadCardsFixture(t, "column.json") + wantPath := "/99999/buckets/2085958499/card_tables/columns/1069479347/on_hold.json" + + svc := testCardColumnsServer(t, func(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + t.Errorf("expected POST, got %s", r.Method) + } + if r.URL.Path != wantPath { + t.Errorf("path = %q, want %q", r.URL.Path, wantPath) + } + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(200) + w.Write(fixture) + }) + + column, err := svc.EnableOnHold(context.Background(), cardColumnsTestBucketID, cardColumnsTestColumnID) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if column == nil || column.ID != cardColumnsTestColumnID { + t.Fatalf("expected column ID %d, got %+v", cardColumnsTestColumnID, column) + } +} + +func TestCardColumnsService_DisableOnHold(t *testing.T) { + fixture := loadCardsFixture(t, "column.json") + wantPath := "/99999/buckets/2085958499/card_tables/columns/1069479347/on_hold.json" + + svc := testCardColumnsServer(t, func(w http.ResponseWriter, r *http.Request) { + if r.Method != "DELETE" { + t.Errorf("expected DELETE, got %s", r.Method) + } + if r.URL.Path != wantPath { + t.Errorf("path = %q, want %q", r.URL.Path, wantPath) + } + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(200) + w.Write(fixture) + }) + + column, err := svc.DisableOnHold(context.Background(), cardColumnsTestBucketID, cardColumnsTestColumnID) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if column == nil || column.ID != cardColumnsTestColumnID { + t.Fatalf("expected column ID %d, got %+v", cardColumnsTestColumnID, column) + } +} From 58c00e38e20be02af7a845544b76a06547f47351 Mon Sep 17 00:00:00 2001 From: Jeremy Daer Date: Wed, 29 Apr 2026 11:14:47 -0700 Subject: [PATCH 3/3] Model RateLimitError on retry-marked card column ops MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit EnableCardColumnOnHold already declared RateLimitError in its errors list, but its two siblings — SetCardColumnColor and DisableCardColumnOnHold — did not, despite all three sharing @basecampRetry(retryOn: [429, 503]). Align the three operations. Inserts RateLimitError between ForbiddenError and InternalServerError to match the existing ordering convention. Regenerates the affected artifacts: openapi.json, the Go generated client (JSON429 fields and parse cases), and the TS schema/openapi-stripped.json. Ruby/TS metadata and Ruby types.rb also pick up regen timestamps. The hand-written wrappers in go/pkg/basecamp/cards.go are unchanged — they route errors through generic checkResponse/checkError, so the new JSON429 fields surface automatically without wrapper updates. --- go/pkg/generated/client.gen.go | 16 +++++++++++++++ openapi.json | 20 +++++++++++++++++++ ruby/lib/basecamp/generated/metadata.json | 2 +- ruby/lib/basecamp/generated/types.rb | 2 +- spec/basecamp.smithy | 4 ++-- typescript/src/generated/metadata.json | 2 +- .../src/generated/openapi-stripped.json | 20 +++++++++++++++++++ typescript/src/generated/schema.d.ts | 18 +++++++++++++++++ 8 files changed, 79 insertions(+), 5 deletions(-) diff --git a/go/pkg/generated/client.gen.go b/go/pkg/generated/client.gen.go index f7e3b7d4..9b5334e5 100644 --- a/go/pkg/generated/client.gen.go +++ b/go/pkg/generated/client.gen.go @@ -18961,6 +18961,7 @@ type SetCardColumnColorResponse struct { JSON403 *ForbiddenErrorResponseContent JSON404 *NotFoundErrorResponseContent JSON422 *ValidationErrorResponseContent + JSON429 *RateLimitErrorResponseContent JSON500 *InternalServerErrorResponseContent } @@ -18987,6 +18988,7 @@ type DisableCardColumnOnHoldResponse struct { JSON401 *UnauthorizedErrorResponseContent JSON403 *ForbiddenErrorResponseContent JSON404 *NotFoundErrorResponseContent + JSON429 *RateLimitErrorResponseContent JSON500 *InternalServerErrorResponseContent } @@ -26905,6 +26907,13 @@ func ParseSetCardColumnColorResponse(rsp *http.Response) (*SetCardColumnColorRes } response.JSON422 = &dest + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 429: + var dest RateLimitErrorResponseContent + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON429 = &dest + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 500: var dest InternalServerErrorResponseContent if err := json.Unmarshal(bodyBytes, &dest); err != nil { @@ -26959,6 +26968,13 @@ func ParseDisableCardColumnOnHoldResponse(rsp *http.Response) (*DisableCardColum } response.JSON404 = &dest + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 429: + var dest RateLimitErrorResponseContent + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON429 = &dest + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 500: var dest InternalServerErrorResponseContent if err := json.Unmarshal(bodyBytes, &dest); err != nil { diff --git a/openapi.json b/openapi.json index 9ec067b6..0c6282e8 100644 --- a/openapi.json +++ b/openapi.json @@ -766,6 +766,16 @@ } } }, + "429": { + "description": "RateLimitError 429 response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RateLimitErrorResponseContent" + } + } + } + }, "500": { "description": "InternalServerError 500 response", "content": { @@ -870,6 +880,16 @@ } } }, + "429": { + "description": "RateLimitError 429 response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RateLimitErrorResponseContent" + } + } + } + }, "500": { "description": "InternalServerError 500 response", "content": { diff --git a/ruby/lib/basecamp/generated/metadata.json b/ruby/lib/basecamp/generated/metadata.json index c0c14097..d5cd3625 100644 --- a/ruby/lib/basecamp/generated/metadata.json +++ b/ruby/lib/basecamp/generated/metadata.json @@ -1,7 +1,7 @@ { "$schema": "https://basecamp.com/schemas/sdk-metadata.json", "version": "1.0.0", - "generated": "2026-04-28T21:09:16Z", + "generated": "2026-04-29T18:03:49Z", "operations": { "GetAccount": { "retry": { diff --git a/ruby/lib/basecamp/generated/types.rb b/ruby/lib/basecamp/generated/types.rb index b34a9a6c..8cc6ed85 100644 --- a/ruby/lib/basecamp/generated/types.rb +++ b/ruby/lib/basecamp/generated/types.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true # Auto-generated from OpenAPI spec. Do not edit manually. -# Generated: 2026-04-28T21:09:16Z +# Generated: 2026-04-29T18:03:49Z require "json" require "time" diff --git a/spec/basecamp.smithy b/spec/basecamp.smithy index 8c189f9b..f1db530b 100644 --- a/spec/basecamp.smithy +++ b/spec/basecamp.smithy @@ -4281,7 +4281,7 @@ structure MoveCardColumnOutput {} operation SetCardColumnColor { input: SetCardColumnColorInput output: SetCardColumnColorOutput - errors: [NotFoundError, ValidationError, UnauthorizedError, ForbiddenError, InternalServerError] + errors: [NotFoundError, ValidationError, UnauthorizedError, ForbiddenError, RateLimitError, InternalServerError] } structure SetCardColumnColorInput { @@ -4343,7 +4343,7 @@ structure EnableCardColumnOnHoldOutput { operation DisableCardColumnOnHold { input: DisableCardColumnOnHoldInput output: DisableCardColumnOnHoldOutput - errors: [NotFoundError, UnauthorizedError, ForbiddenError, InternalServerError] + errors: [NotFoundError, UnauthorizedError, ForbiddenError, RateLimitError, InternalServerError] } structure DisableCardColumnOnHoldInput { diff --git a/typescript/src/generated/metadata.json b/typescript/src/generated/metadata.json index 91d87074..940586b0 100644 --- a/typescript/src/generated/metadata.json +++ b/typescript/src/generated/metadata.json @@ -1,7 +1,7 @@ { "$schema": "https://basecamp.com/schemas/sdk-metadata.json", "version": "1.0.0", - "generated": "2026-04-28T21:09:04.855Z", + "generated": "2026-04-29T18:03:48.821Z", "operations": { "GetAccount": { "retry": { diff --git a/typescript/src/generated/openapi-stripped.json b/typescript/src/generated/openapi-stripped.json index 8d49e5e3..496f978d 100644 --- a/typescript/src/generated/openapi-stripped.json +++ b/typescript/src/generated/openapi-stripped.json @@ -674,6 +674,16 @@ } } }, + "429": { + "description": "RateLimitError 429 response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RateLimitErrorResponseContent" + } + } + } + }, "500": { "description": "InternalServerError 500 response", "content": { @@ -767,6 +777,16 @@ } } }, + "429": { + "description": "RateLimitError 429 response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RateLimitErrorResponseContent" + } + } + } + }, "500": { "description": "InternalServerError 500 response", "content": { diff --git a/typescript/src/generated/schema.d.ts b/typescript/src/generated/schema.d.ts index 976c3355..ad185afd 100644 --- a/typescript/src/generated/schema.d.ts +++ b/typescript/src/generated/schema.d.ts @@ -4997,6 +4997,15 @@ export interface operations { "application/json": components["schemas"]["ValidationErrorResponseContent"]; }; }; + /** @description RateLimitError 429 response */ + 429: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["RateLimitErrorResponseContent"]; + }; + }; /** @description InternalServerError 500 response */ 500: { headers: { @@ -5124,6 +5133,15 @@ export interface operations { "application/json": components["schemas"]["NotFoundErrorResponseContent"]; }; }; + /** @description RateLimitError 429 response */ + 429: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["RateLimitErrorResponseContent"]; + }; + }; /** @description InternalServerError 500 response */ 500: { headers: {