diff --git a/.gitignore b/.gitignore index dd2daac44..92d3ce204 100644 --- a/.gitignore +++ b/.gitignore @@ -45,6 +45,7 @@ typescript/coverage/ # Kotlin SDK build artifacts kotlin/.gradle/ +kotlin/.kotlin/ kotlin/build/ kotlin/sdk/build/ kotlin/generator/build/ diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c9083c682..fb123f147 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -208,12 +208,14 @@ All SDKs are generated from a single Smithy specification. When adding support f - Define the resource, operations, and shapes - Follow patterns from existing resources (e.g., `Project`, `Todo`) -2. **Regenerate the OpenAPI spec** +2. **Regenerate everything** in one step: ```bash - make smithy-build + make generate ``` -3. **Run per-SDK generators** to update generated service code: + This runs Smithy build, behavior model, URL routes, provenance sync, and per-language generators (TypeScript, Ruby, Python, Kotlin, Swift, Go) in dependency order. + +3. **Run per-SDK generators individually** if you only need one: - **Go:** `make go-check-drift` — Go services are hand-written wrappers around the generated client; the drift check verifies all generated operations are covered - **TypeScript:** `make ts-generate-services` - **Ruby:** `make rb-generate-services` @@ -229,6 +231,47 @@ All SDKs are generated from a single Smithy specification. When adding support f - Add to the services table in each SDK's README - Add to CHANGELOG under `[Unreleased]` +## Spec-shape lints + +The repo enforces a small set of structural invariants on the OpenAPI spec +beyond the language-specific drift checks. These run as part of `make check`: + +- **Bucket↔flat parity** (`make check-bucket-flat-parity`): every + `GET /{accountId}/buckets/{bucketId}/(/...).json` list operation + must have a flat counterpart at `/{accountId}/.json`, or be + justified in [`spec/bucket-scoped-allowlist.txt`](spec/bucket-scoped-allowlist.txt). + The intent is that cross-project SDK consumers shouldn't have to walk every + project to query account-wide resources. + + When adding a bucket-scoped list endpoint, either add the matching flat + endpoint or append a one-line entry to the allowlist with a justification + comment. + +## API gap registry (`spec/api-gaps/`) + +When BC ships a new user-visible feature without a JSON API (or with an +incomplete one), add an entry under [`spec/api-gaps/`](spec/api-gaps/). +The registry is the SDK side of the [BC3 API parity coordination](COORDINATION.md): +the BC3 plan owns server-side delivery; the registry tracks the gap from +detection through absorption, with status changes in git history. + +To add a new entry: + +1. Copy an existing entry in `spec/api-gaps/` as a template. +2. Set frontmatter status to `no-json-contract` (or `partial-coverage` / + `ambiguous` as appropriate). See + [`spec/api-gaps/schema.json`](spec/api-gaps/schema.json) for valid + statuses. +3. Add a row to the table in + [`spec/api-gaps/README.md`](spec/api-gaps/README.md). +4. Run `make validate-api-gaps` to confirm frontmatter and required body + sections are well-formed. Wired into `make check`. + +For routes that should *not* warrant an entry (transient nav state, internal +endpoints, duplicates of a route already covered elsewhere), add a record +to [`spec/api-gaps/allowlist.yml`](spec/api-gaps/allowlist.yml) with a +justification. + ## Reporting Issues - Use GitHub Issues for bug reports and feature requests diff --git a/COORDINATION.md b/COORDINATION.md new file mode 100644 index 000000000..bf4cca352 --- /dev/null +++ b/COORDINATION.md @@ -0,0 +1,56 @@ +# Coordination: SDK ↔ BC3 API Parity for BC5 + +This SDK works in lockstep with the BC3 API parity plan, tracked on the +`basecamp/bc3` `five+api` branch. The authoritative server-side audit lives +in that branch under `tmp/api_audit.md` (generated by the BC3 plan's +`script/api/audit`). + +## Division of labor + +- **BC3 plan owns**: server-side audit, jbuilder + controller + doc + additions, BC4 compat verification, regenerating live-server doc + snapshots, eventually opening Smithy PRs in this repo. +- **This SDK plan owns**: live canary against both backends, schema + + pairwise validation on raw wire bytes, additive Smithy absorption per + BC3 deliverable, the API-gap detector that catches anything BC3 hasn't + registered, the bucket-flat parity lint, the API gap registry at + [`spec/api-gaps/`](spec/api-gaps/). + +## Lifecycle per gap + +1. BC3 plan inventories a gap (Phase 1 audit) → SDK adds a corresponding + entry in [`spec/api-gaps/`](spec/api-gaps/). +2. BC3 ships the JSON API for the gap → SDK canary auto-detects new + fields/endpoints. +3. SDK opens a Smithy + per-language regeneration PR absorbing the new + contract. +4. Entry frontmatter updates: `status: addressed-in-bc3-pr-N` then + `status: absorbed-in-sdk` with Smithy refs. + +## Contract decisions (cross-team) + +Two items the SDK canary surfaced that need product/API leadership decisions: + +1. `memories` going to `[]` on `GET /my/readings.json` — back-compat or + accept-and-document. BC4 populates the array; BC5 emits literal `[]`. + Existing BC4 API users reading `memories` would silently see no data on + BC5 — a subtractive change disguised as compatible. +2. Longstanding `app_todoslists_url` typo at + `app/views/api/todosets/_todoset.json.jbuilder:28` — server fix, alias + period, or SDK accommodation. The SDK spec models the correctly-spelled + `app_todolists_url`, so SDK clients reading that field have always seen + `null`. + +Both are tracked in the BC3 plan's Phase 2 compat verification and this +SDK plan's §8. + +## Where to look + +- BC3-side authoritative inventory: `tmp/api_audit.md` (generated by BC3 + plan's `script/api/audit`) +- SDK-side absorption status: [`spec/api-gaps/README.md`](spec/api-gaps/README.md) +- Live canary results: `make check-bc5-compat` against current refs + (lands in PR 4 of the SDK plan) +- Cross-team alignment status: this file + +— The basecamp-sdk team diff --git a/Makefile b/Makefile index 3519166c7..704b24422 100644 --- a/Makefile +++ b/Makefile @@ -103,22 +103,19 @@ BC3_REPO ?= basecamp/bc3 sync-status: @command -v gh > /dev/null 2>&1 || { echo "ERROR: gh CLI not found. Install: https://cli.github.com"; exit 1; } + @command -v jq > /dev/null 2>&1 || { echo "ERROR: jq not found. Install: https://jqlang.github.io/jq/"; exit 1; } @gh auth status > /dev/null 2>&1 || { echo "ERROR: gh not authenticated. Run: gh auth login"; exit 1; } - @REV=$$(jq -r '.bc3.revision // empty' spec/api-provenance.json); \ - if [ -z "$$REV" ]; then \ - echo "==> bc3 API docs: no baseline revision set"; \ + @BC3_REPO="$(BC3_REPO)" ./scripts/report-bc3-drift.sh \ + "$$(jq -r '.bc3.revision // empty' spec/api-provenance.json)" \ + "$$(jq -r '.bc3.branch // "master"' spec/api-provenance.json)" \ + "primary" + @for COMPAT_KEY in $$(jq -r '.compatibility // {} | keys[]' spec/api-provenance.json); do \ echo ""; \ - echo "==> bc3 API implementation: no baseline revision set"; \ - else \ - SHORT_REV=$$(echo $$REV | cut -c1-7); \ - echo "==> bc3 API docs changes since last sync ($$SHORT_REV):"; \ - gh api "repos/$(BC3_REPO)/compare/$$REV...HEAD" \ - --jq '[.files[] | select(.filename | startswith("doc/api/"))] | if length == 0 then " (no changes in doc/api/)" else .[] | " " + .status[:1] + " " + .filename end'; \ - echo ""; \ - echo "==> bc3 API implementation changes since last sync ($$SHORT_REV):"; \ - gh api "repos/$(BC3_REPO)/compare/$$REV...HEAD" \ - --jq '[.files[] | select(.filename | startswith("app/controllers/"))] | if length == 0 then " (no changes in app/controllers/)" else .[] | " " + .status[:1] + " " + .filename end'; \ - fi + BC3_REPO="$(BC3_REPO)" ./scripts/report-bc3-drift.sh \ + "$$(jq -r --arg k "$$COMPAT_KEY" '.compatibility[$$k].revision // empty' spec/api-provenance.json)" \ + "$$(jq -r --arg k "$$COMPAT_KEY" '.compatibility[$$k].branch // "master"' spec/api-provenance.json)" \ + "compat"; \ + done #------------------------------------------------------------------------------ # Version management @@ -588,12 +585,45 @@ tools: @command -v swift >/dev/null 2>&1 || echo "NOTE: swift is optional (macOS: xcode-select --install, Arch: yay -S swift-bin)" @echo "==> Done" +#------------------------------------------------------------------------------ +# Spec-shape lints +#------------------------------------------------------------------------------ + +.PHONY: check-bucket-flat-parity validate-api-gaps + +# Verify every bucket-scoped GET list operation has a flat-path counterpart +# (or is justified in spec/bucket-scoped-allowlist.txt). Cross-project SDK +# consumers shouldn't need to enumerate projects to reach account-wide data. +check-bucket-flat-parity: + @./scripts/check-bucket-flat-parity.sh + +# Validate spec/api-gaps/ entry frontmatter, required body sections, and allowlist. +validate-api-gaps: + @./scripts/validate-api-gaps.sh + #------------------------------------------------------------------------------ # Combined targets #------------------------------------------------------------------------------ +.PHONY: generate + +# Regenerate every machine-derived artifact in the repo, in dependency order. +# Run after editing spec/basecamp.smithy or spec/api-provenance.json. +# Sequential phases via sub-makes so language generators don't run in +# parallel against a stale openapi.json under `make -j`. +generate: + @$(MAKE) smithy-build + @$(MAKE) behavior-model url-routes provenance-sync + @$(MAKE) ts-generate ts-generate-services \ + rb-generate rb-generate-services \ + py-generate \ + kt-generate-services \ + swift-generate + @$(MAKE) -C go generate + @echo "==> Generation complete" + # Run all checks (Smithy + Go + TypeScript + Ruby + Kotlin + Swift + Python + Behavior Model + Conformance + Provenance + Actions lint) -check: lint-actions sync-spec-version-check smithy-check behavior-model-check provenance-check sync-api-version-check go-check-drift auth-routable-check kt-check-drift go-check ts-check rb-check kt-check swift-check py-check conformance +check: lint-actions sync-spec-version-check smithy-check behavior-model-check provenance-check sync-api-version-check go-check-drift auth-routable-check kt-check-drift go-check ts-check rb-check kt-check swift-check py-check conformance check-bucket-flat-parity validate-api-gaps @echo "==> All checks passed" # Clean all build artifacts @@ -699,6 +729,7 @@ help: @echo " tools Install development tools (smithy, golangci-lint, actionlint, zizmor)" @echo "" @echo "Combined:" - @echo " check Run all checks (Smithy + behavior-model/drift + Go + TypeScript + Ruby + Swift + Kotlin + Python + Conformance + Provenance + API version sync + Actions lint)" + @echo " generate Regenerate every machine-derived artifact (Smithy + per-language SDKs + provenance)" + @echo " check Run all checks (Smithy + behavior-model/drift + Go + TypeScript + Ruby + Swift + Kotlin + Python + Conformance + Provenance + API version sync + parity lint + api-gaps + Actions lint)" @echo " clean Remove all build artifacts" @echo " help Show this help" diff --git a/behavior-model.json b/behavior-model.json index feb0afc6b..7ff08ace4 100644 --- a/behavior-model.json +++ b/behavior-model.json @@ -2601,6 +2601,7 @@ "$.email_address", "$.title", "$.bio", + "$.tagline", "$.location", "$.avatar_url" ], diff --git a/go.work.sum b/go.work.sum index f99408c11..1b4a32541 100644 --- a/go.work.sum +++ b/go.work.sum @@ -34,6 +34,7 @@ github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcP github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.10.1/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE= github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= @@ -86,6 +87,7 @@ github.com/labstack/gommon v0.4.2/go.mod h1:QlUFxVM+SNXhDL/Z7YhocGIBYOiwB0mXm1+1 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/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= 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= diff --git a/go/pkg/basecamp/api-provenance.json b/go/pkg/basecamp/api-provenance.json index a4a62cea1..ad2ef0b78 100644 --- a/go/pkg/basecamp/api-provenance.json +++ b/go/pkg/basecamp/api-provenance.json @@ -1,6 +1,14 @@ { "bc3": { + "branch": "master", "revision": "e52453ff35a6292473eb095a8568649aa132fef9", "date": "2026-07-17" + }, + "compatibility": { + "bc3-four": { + "branch": "four", + "revision": "9d73959a62538bbd2d474fbf806ce386bb4092a8", + "date": "2026-06-12" + } } } diff --git a/go/pkg/generated/client.gen.go b/go/pkg/generated/client.gen.go index de31b19c1..52422dc81 100644 --- a/go/pkg/generated/client.gen.go +++ b/go/pkg/generated/client.gen.go @@ -36,6 +36,28 @@ const ( Wednesday FirstWeekDay = "Wednesday" ) +// Valid indicates whether the value is a known member of the FirstWeekDay enum. +func (e FirstWeekDay) Valid() bool { + switch e { + case Friday: + return true + case Monday: + return true + case Saturday: + return true + case Sunday: + return true + case Thursday: + return true + case Tuesday: + return true + case Wednesday: + return true + default: + return false + } +} + // Account defines model for Account. type Account struct { Active bool `json:"active,omitempty"` @@ -999,9 +1021,25 @@ type GetMyDueAssignmentsResponseContent = []MyAssignment // GetMyNotificationsResponseContent defines model for GetMyNotificationsResponseContent. type GetMyNotificationsResponseContent struct { + // BubbleUps Items the user has saved with Bubble Up (BC5 addition). Roughly the + // successor to `memories` but with optional scheduling — see + // `scheduled_bubble_ups` for the time-deferred subset. + BubbleUps []Notification `json:"bubble_ups,omitempty"` + + // Memories Legacy "save forever" collection. Observed BC5 behavior: emits `[]` + // while BC4 still populates with real items — the BC team has not yet + // resolved whether to keep BC4-shaped data on BC5 (back-compat) or to + // accept the empty-array break with a documented BC5 changelog entry. + // See COORDINATION.md for the open decision. The conceptual + // replacement is `bubble_ups` (with optional scheduling via + // `scheduled_bubble_ups`), though wire shapes are not interchangeable + // per-item, so cross-version readers should consume both. Memories []Notification `json:"memories,omitempty"` Reads []Notification `json:"reads,omitempty"` - Unreads []Notification `json:"unreads,omitempty"` + + // ScheduledBubbleUps Bubble Ups scheduled to resurface in the future (BC5 addition). + ScheduledBubbleUps []Notification `json:"scheduled_bubble_ups,omitempty"` + Unreads []Notification `json:"unreads,omitempty"` } // GetMyPreferencesResponseContent defines model for GetMyPreferencesResponseContent. @@ -1407,8 +1445,16 @@ type NotFoundErrorResponseContent struct { // Notification defines model for Notification. type Notification struct { - AppUrl string `json:"app_url,omitempty"` - BookmarkUrl string `json:"bookmark_url,omitempty"` + AppUrl string `json:"app_url,omitempty"` + BookmarkUrl string `json:"bookmark_url,omitempty"` + + // BubbleUpAt Scheduled resurfacing time when this item is queued as a scheduled + // Bubble Up (BC5 addition). Absent when there is no scheduled time. + BubbleUpAt time.Time `json:"bubble_up_at,omitempty"` + + // BubbleUpUrl URL for the Bubble Up record covering this notification (BC5 addition). + // Eligibility-gated — only present on items the current user can bubble up. + BubbleUpUrl string `json:"bubble_up_url,omitempty"` BucketName string `json:"bucket_name,omitempty"` ContentExcerpt string `json:"content_excerpt,omitempty"` CreatedAt time.Time `json:"created_at"` @@ -1489,9 +1535,13 @@ type Person struct { Name string `json:"name"` Owner bool `json:"owner,omitempty"` PersonableType string `json:"personable_type,omitempty"` - TimeZone string `json:"time_zone,omitempty"` - Title string `json:"title,omitempty"` - UpdatedAt time.Time `json:"updated_at,omitempty"` + + // Tagline Alias of `bio` introduced in BC5. BC3 emits both keys with identical content; + // older BC4 responses may omit `tagline`. Prefer `bio` for cross-version reads. + Tagline string `json:"tagline,omitempty"` + TimeZone string `json:"time_zone,omitempty"` + Title string `json:"title,omitempty"` + UpdatedAt time.Time `json:"updated_at,omitempty"` } // PersonCompany defines model for PersonCompany. @@ -1966,13 +2016,18 @@ type Todo struct { StartsOn types.Date `json:"starts_on,omitempty"` // Status active|archived|trashed - Status string `json:"status"` - SubscriptionUrl string `json:"subscription_url,omitempty"` - Title string `json:"title"` - Type string `json:"type"` - UpdatedAt time.Time `json:"updated_at"` - Url string `json:"url"` - VisibleToClients bool `json:"visible_to_clients"` + Status string `json:"status"` + + // Steps Steps embedded in the Todo response (BC5 addition). The shared + // `steps/step` jbuilder partial emits the same shape as `CardStep`, + // so the existing `CardStepList` is reused. + Steps []CardStep `json:"steps,omitempty"` + SubscriptionUrl string `json:"subscription_url,omitempty"` + Title string `json:"title"` + Type string `json:"type"` + UpdatedAt time.Time `json:"updated_at"` + Url string `json:"url"` + VisibleToClients bool `json:"visible_to_clients"` } // TodoBucket defines model for TodoBucket. @@ -2068,26 +2123,38 @@ type TodolistOrGroup1 struct { // Todoset defines model for Todoset. type Todoset struct { - AppTodolistsUrl string `json:"app_todolists_url,omitempty"` - AppUrl string `json:"app_url"` - BookmarkUrl string `json:"bookmark_url,omitempty"` - Bucket TodoBucket `json:"bucket"` - Completed bool `json:"completed,omitempty"` - CompletedRatio string `json:"completed_ratio,omitempty"` - CreatedAt time.Time `json:"created_at"` - Creator Person `json:"creator"` - Id int64 `json:"id"` - InheritsStatus bool `json:"inherits_status"` - Name string `json:"name"` - Position int32 `json:"position,omitempty"` - Status string `json:"status"` - Title string `json:"title"` - TodolistsCount int32 `json:"todolists_count,omitempty"` - TodolistsUrl string `json:"todolists_url,omitempty"` - Type string `json:"type"` - UpdatedAt time.Time `json:"updated_at"` - Url string `json:"url"` - VisibleToClients bool `json:"visible_to_clients"` + AppTodolistsUrl string `json:"app_todolists_url,omitempty"` + + // AppTodosUrl In-app URL for viewing the todoset's todos (BC5 addition). + AppTodosUrl string `json:"app_todos_url,omitempty"` + AppUrl string `json:"app_url"` + BookmarkUrl string `json:"bookmark_url,omitempty"` + Bucket TodoBucket `json:"bucket"` + Completed bool `json:"completed,omitempty"` + + // CompletedLooseTodosCount Count of completed loose todos at the todoset level (BC5 addition). + CompletedLooseTodosCount int32 `json:"completed_loose_todos_count,omitempty"` + CompletedRatio string `json:"completed_ratio,omitempty"` + CreatedAt time.Time `json:"created_at"` + Creator Person `json:"creator"` + Id int64 `json:"id"` + InheritsStatus bool `json:"inherits_status"` + Name string `json:"name"` + Position int32 `json:"position,omitempty"` + Status string `json:"status"` + Title string `json:"title"` + TodolistsCount int32 `json:"todolists_count,omitempty"` + TodolistsUrl string `json:"todolists_url,omitempty"` + + // TodosCount Total count of todos across all todolists in this todoset (BC5 addition). + TodosCount int32 `json:"todos_count,omitempty"` + + // TodosUrl API URL for listing todos directly under this todoset (BC5 addition). + TodosUrl string `json:"todos_url,omitempty"` + Type string `json:"type"` + UpdatedAt time.Time `json:"updated_at"` + Url string `json:"url"` + VisibleToClients bool `json:"visible_to_clients"` } // ToggleGaugeRequestContent defines model for ToggleGaugeRequestContent. @@ -18799,6 +18866,14 @@ func (r GetAccountResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetAccountResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type RemoveAccountLogoResponse struct { Body []byte HTTPResponse *http.Response @@ -18824,6 +18899,14 @@ func (r RemoveAccountLogoResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r RemoveAccountLogoResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type UpdateAccountLogoResponse struct { Body []byte HTTPResponse *http.Response @@ -18850,6 +18933,14 @@ func (r UpdateAccountLogoResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r UpdateAccountLogoResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type UpdateAccountNameResponse struct { Body []byte HTTPResponse *http.Response @@ -18877,6 +18968,14 @@ func (r UpdateAccountNameResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r UpdateAccountNameResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type CreateAttachmentResponse struct { Body []byte HTTPResponse *http.Response @@ -18904,6 +19003,14 @@ func (r CreateAttachmentResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r CreateAttachmentResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type DeleteBoostResponse struct { Body []byte HTTPResponse *http.Response @@ -18929,6 +19036,14 @@ func (r DeleteBoostResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r DeleteBoostResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetBoostResponse struct { Body []byte HTTPResponse *http.Response @@ -18955,6 +19070,14 @@ func (r GetBoostResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetBoostResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type SetCardColumnColorResponse struct { Body []byte HTTPResponse *http.Response @@ -18983,6 +19106,14 @@ func (r SetCardColumnColorResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r SetCardColumnColorResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type DisableCardColumnOnHoldResponse struct { Body []byte HTTPResponse *http.Response @@ -19010,6 +19141,14 @@ func (r DisableCardColumnOnHoldResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r DisableCardColumnOnHoldResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type EnableCardColumnOnHoldResponse struct { Body []byte HTTPResponse *http.Response @@ -19037,6 +19176,14 @@ func (r EnableCardColumnOnHoldResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r EnableCardColumnOnHoldResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type ListWebhooksResponse struct { Body []byte HTTPResponse *http.Response @@ -19063,6 +19210,14 @@ func (r ListWebhooksResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r ListWebhooksResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type CreateWebhookResponse struct { Body []byte HTTPResponse *http.Response @@ -19091,6 +19246,14 @@ func (r CreateWebhookResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r CreateWebhookResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetCardResponse struct { Body []byte HTTPResponse *http.Response @@ -19117,6 +19280,14 @@ func (r GetCardResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetCardResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type UpdateCardResponse struct { Body []byte HTTPResponse *http.Response @@ -19144,6 +19315,14 @@ func (r UpdateCardResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r UpdateCardResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type MoveCardResponse struct { Body []byte HTTPResponse *http.Response @@ -19170,6 +19349,14 @@ func (r MoveCardResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r MoveCardResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type RepositionCardStepResponse struct { Body []byte HTTPResponse *http.Response @@ -19196,6 +19383,14 @@ func (r RepositionCardStepResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r RepositionCardStepResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type CreateCardStepResponse struct { Body []byte HTTPResponse *http.Response @@ -19223,6 +19418,14 @@ func (r CreateCardStepResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r CreateCardStepResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetCardColumnResponse struct { Body []byte HTTPResponse *http.Response @@ -19249,6 +19452,14 @@ func (r GetCardColumnResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetCardColumnResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type UpdateCardColumnResponse struct { Body []byte HTTPResponse *http.Response @@ -19276,6 +19487,14 @@ func (r UpdateCardColumnResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r UpdateCardColumnResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type ListCardsResponse struct { Body []byte HTTPResponse *http.Response @@ -19302,6 +19521,14 @@ func (r ListCardsResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r ListCardsResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type CreateCardResponse struct { Body []byte HTTPResponse *http.Response @@ -19329,6 +19556,14 @@ func (r CreateCardResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r CreateCardResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type UnsubscribeFromCardColumnResponse struct { Body []byte HTTPResponse *http.Response @@ -19354,6 +19589,14 @@ func (r UnsubscribeFromCardColumnResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r UnsubscribeFromCardColumnResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type SubscribeToCardColumnResponse struct { Body []byte HTTPResponse *http.Response @@ -19380,6 +19623,14 @@ func (r SubscribeToCardColumnResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r SubscribeToCardColumnResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetCardStepResponse struct { Body []byte HTTPResponse *http.Response @@ -19406,6 +19657,14 @@ func (r GetCardStepResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetCardStepResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type UpdateCardStepResponse struct { Body []byte HTTPResponse *http.Response @@ -19433,6 +19692,14 @@ func (r UpdateCardStepResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r UpdateCardStepResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type SetCardStepCompletionResponse struct { Body []byte HTTPResponse *http.Response @@ -19460,6 +19727,14 @@ func (r SetCardStepCompletionResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r SetCardStepCompletionResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetCardTableResponse struct { Body []byte HTTPResponse *http.Response @@ -19486,6 +19761,14 @@ func (r GetCardTableResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetCardTableResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type CreateCardColumnResponse struct { Body []byte HTTPResponse *http.Response @@ -19513,6 +19796,14 @@ func (r CreateCardColumnResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r CreateCardColumnResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type MoveCardColumnResponse struct { Body []byte HTTPResponse *http.Response @@ -19539,6 +19830,14 @@ func (r MoveCardColumnResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r MoveCardColumnResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type ListMessageTypesResponse struct { Body []byte HTTPResponse *http.Response @@ -19565,6 +19864,14 @@ func (r ListMessageTypesResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r ListMessageTypesResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type CreateMessageTypeResponse struct { Body []byte HTTPResponse *http.Response @@ -19592,6 +19899,14 @@ func (r CreateMessageTypeResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r CreateMessageTypeResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type DeleteMessageTypeResponse struct { Body []byte HTTPResponse *http.Response @@ -19617,6 +19932,14 @@ func (r DeleteMessageTypeResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r DeleteMessageTypeResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetMessageTypeResponse struct { Body []byte HTTPResponse *http.Response @@ -19643,6 +19966,14 @@ func (r GetMessageTypeResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetMessageTypeResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type UpdateMessageTypeResponse struct { Body []byte HTTPResponse *http.Response @@ -19670,6 +20001,14 @@ func (r UpdateMessageTypeResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r UpdateMessageTypeResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type ListCampfiresResponse struct { Body []byte HTTPResponse *http.Response @@ -19696,6 +20035,14 @@ func (r ListCampfiresResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r ListCampfiresResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetCampfireResponse struct { Body []byte HTTPResponse *http.Response @@ -19722,6 +20069,14 @@ func (r GetCampfireResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetCampfireResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type ListChatbotsResponse struct { Body []byte HTTPResponse *http.Response @@ -19748,6 +20103,14 @@ func (r ListChatbotsResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r ListChatbotsResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type CreateChatbotResponse struct { Body []byte HTTPResponse *http.Response @@ -19775,6 +20138,14 @@ func (r CreateChatbotResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r CreateChatbotResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type DeleteChatbotResponse struct { Body []byte HTTPResponse *http.Response @@ -19800,6 +20171,14 @@ func (r DeleteChatbotResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r DeleteChatbotResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetChatbotResponse struct { Body []byte HTTPResponse *http.Response @@ -19826,6 +20205,14 @@ func (r GetChatbotResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetChatbotResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type UpdateChatbotResponse struct { Body []byte HTTPResponse *http.Response @@ -19853,6 +20240,14 @@ func (r UpdateChatbotResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r UpdateChatbotResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type ListCampfireLinesResponse struct { Body []byte HTTPResponse *http.Response @@ -19879,6 +20274,14 @@ func (r ListCampfireLinesResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r ListCampfireLinesResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type CreateCampfireLineResponse struct { Body []byte HTTPResponse *http.Response @@ -19906,6 +20309,14 @@ func (r CreateCampfireLineResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r CreateCampfireLineResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type DeleteCampfireLineResponse struct { Body []byte HTTPResponse *http.Response @@ -19931,6 +20342,14 @@ func (r DeleteCampfireLineResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r DeleteCampfireLineResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetCampfireLineResponse struct { Body []byte HTTPResponse *http.Response @@ -19957,6 +20376,14 @@ func (r GetCampfireLineResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetCampfireLineResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type ListCampfireUploadsResponse struct { Body []byte HTTPResponse *http.Response @@ -19983,6 +20410,14 @@ func (r ListCampfireUploadsResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r ListCampfireUploadsResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type CreateCampfireUploadResponse struct { Body []byte HTTPResponse *http.Response @@ -20010,6 +20445,14 @@ func (r CreateCampfireUploadResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r CreateCampfireUploadResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type ListPingablePeopleResponse struct { Body []byte HTTPResponse *http.Response @@ -20036,6 +20479,14 @@ func (r ListPingablePeopleResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r ListPingablePeopleResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type ListClientApprovalsResponse struct { Body []byte HTTPResponse *http.Response @@ -20062,6 +20513,14 @@ func (r ListClientApprovalsResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r ListClientApprovalsResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetClientApprovalResponse struct { Body []byte HTTPResponse *http.Response @@ -20088,6 +20547,14 @@ func (r GetClientApprovalResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetClientApprovalResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type ListClientCorrespondencesResponse struct { Body []byte HTTPResponse *http.Response @@ -20114,9 +20581,17 @@ func (r ListClientCorrespondencesResponse) StatusCode() int { return 0 } -type GetClientCorrespondenceResponse struct { - Body []byte - HTTPResponse *http.Response +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r ListClientCorrespondencesResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + +type GetClientCorrespondenceResponse struct { + Body []byte + HTTPResponse *http.Response JSON200 *GetClientCorrespondenceResponseContent JSON401 *UnauthorizedErrorResponseContent JSON403 *ForbiddenErrorResponseContent @@ -20140,6 +20615,14 @@ func (r GetClientCorrespondenceResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetClientCorrespondenceResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type ListClientRepliesResponse struct { Body []byte HTTPResponse *http.Response @@ -20166,6 +20649,14 @@ func (r ListClientRepliesResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r ListClientRepliesResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetClientReplyResponse struct { Body []byte HTTPResponse *http.Response @@ -20192,6 +20683,14 @@ func (r GetClientReplyResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetClientReplyResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetCommentResponse struct { Body []byte HTTPResponse *http.Response @@ -20218,6 +20717,14 @@ func (r GetCommentResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetCommentResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type UpdateCommentResponse struct { Body []byte HTTPResponse *http.Response @@ -20245,6 +20752,14 @@ func (r UpdateCommentResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r UpdateCommentResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type CloneToolResponse struct { Body []byte HTTPResponse *http.Response @@ -20272,6 +20787,14 @@ func (r CloneToolResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r CloneToolResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type DeleteToolResponse struct { Body []byte HTTPResponse *http.Response @@ -20297,6 +20820,14 @@ func (r DeleteToolResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r DeleteToolResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetToolResponse struct { Body []byte HTTPResponse *http.Response @@ -20323,6 +20854,14 @@ func (r GetToolResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetToolResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type UpdateToolResponse struct { Body []byte HTTPResponse *http.Response @@ -20350,6 +20889,14 @@ func (r UpdateToolResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r UpdateToolResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetDocumentResponse struct { Body []byte HTTPResponse *http.Response @@ -20376,6 +20923,14 @@ func (r GetDocumentResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetDocumentResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type UpdateDocumentResponse struct { Body []byte HTTPResponse *http.Response @@ -20403,6 +20958,14 @@ func (r UpdateDocumentResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r UpdateDocumentResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type DestroyGaugeNeedleResponse struct { Body []byte HTTPResponse *http.Response @@ -20429,6 +20992,14 @@ func (r DestroyGaugeNeedleResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r DestroyGaugeNeedleResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetGaugeNeedleResponse struct { Body []byte HTTPResponse *http.Response @@ -20455,6 +21026,14 @@ func (r GetGaugeNeedleResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetGaugeNeedleResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type UpdateGaugeNeedleResponse struct { Body []byte HTTPResponse *http.Response @@ -20483,6 +21062,14 @@ func (r UpdateGaugeNeedleResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r UpdateGaugeNeedleResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetForwardResponse struct { Body []byte HTTPResponse *http.Response @@ -20509,6 +21096,14 @@ func (r GetForwardResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetForwardResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type ListForwardRepliesResponse struct { Body []byte HTTPResponse *http.Response @@ -20535,6 +21130,14 @@ func (r ListForwardRepliesResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r ListForwardRepliesResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type CreateForwardReplyResponse struct { Body []byte HTTPResponse *http.Response @@ -20562,6 +21165,14 @@ func (r CreateForwardReplyResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r CreateForwardReplyResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetForwardReplyResponse struct { Body []byte HTTPResponse *http.Response @@ -20588,6 +21199,14 @@ func (r GetForwardReplyResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetForwardReplyResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetInboxResponse struct { Body []byte HTTPResponse *http.Response @@ -20614,6 +21233,14 @@ func (r GetInboxResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetInboxResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type ListForwardsResponse struct { Body []byte HTTPResponse *http.Response @@ -20640,6 +21267,14 @@ func (r ListForwardsResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r ListForwardsResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type ListLineupMarkersResponse struct { Body []byte HTTPResponse *http.Response @@ -20666,6 +21301,14 @@ func (r ListLineupMarkersResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r ListLineupMarkersResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type CreateLineupMarkerResponse struct { Body []byte HTTPResponse *http.Response @@ -20692,6 +21335,14 @@ func (r CreateLineupMarkerResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r CreateLineupMarkerResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type DeleteLineupMarkerResponse struct { Body []byte HTTPResponse *http.Response @@ -20717,6 +21368,14 @@ func (r DeleteLineupMarkerResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r DeleteLineupMarkerResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type UpdateLineupMarkerResponse struct { Body []byte HTTPResponse *http.Response @@ -20743,6 +21402,14 @@ func (r UpdateLineupMarkerResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r UpdateLineupMarkerResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetMessageBoardResponse struct { Body []byte HTTPResponse *http.Response @@ -20769,6 +21436,14 @@ func (r GetMessageBoardResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetMessageBoardResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type ListMessagesResponse struct { Body []byte HTTPResponse *http.Response @@ -20795,6 +21470,14 @@ func (r ListMessagesResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r ListMessagesResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type CreateMessageResponse struct { Body []byte HTTPResponse *http.Response @@ -20822,6 +21505,14 @@ func (r CreateMessageResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r CreateMessageResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetMessageResponse struct { Body []byte HTTPResponse *http.Response @@ -20848,6 +21539,14 @@ func (r GetMessageResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetMessageResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type UpdateMessageResponse struct { Body []byte HTTPResponse *http.Response @@ -20875,6 +21574,14 @@ func (r UpdateMessageResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r UpdateMessageResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetMyAssignmentsResponse struct { Body []byte HTTPResponse *http.Response @@ -20900,6 +21607,14 @@ func (r GetMyAssignmentsResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetMyAssignmentsResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetMyCompletedAssignmentsResponse struct { Body []byte HTTPResponse *http.Response @@ -20925,6 +21640,14 @@ func (r GetMyCompletedAssignmentsResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetMyCompletedAssignmentsResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetMyDueAssignmentsResponse struct { Body []byte HTTPResponse *http.Response @@ -20951,6 +21674,14 @@ func (r GetMyDueAssignmentsResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetMyDueAssignmentsResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetMyPreferencesResponse struct { Body []byte HTTPResponse *http.Response @@ -20976,6 +21707,14 @@ func (r GetMyPreferencesResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetMyPreferencesResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type UpdateMyPreferencesResponse struct { Body []byte HTTPResponse *http.Response @@ -21003,6 +21742,14 @@ func (r UpdateMyPreferencesResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r UpdateMyPreferencesResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetMyProfileResponse struct { Body []byte HTTPResponse *http.Response @@ -21029,6 +21776,14 @@ func (r GetMyProfileResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetMyProfileResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type UpdateMyProfileResponse struct { Body []byte HTTPResponse *http.Response @@ -21054,6 +21809,14 @@ func (r UpdateMyProfileResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r UpdateMyProfileResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetQuestionRemindersResponse struct { Body []byte HTTPResponse *http.Response @@ -21080,6 +21843,14 @@ func (r GetQuestionRemindersResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetQuestionRemindersResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetMyNotificationsResponse struct { Body []byte HTTPResponse *http.Response @@ -21105,6 +21876,14 @@ func (r GetMyNotificationsResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetMyNotificationsResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type MarkAsReadResponse struct { Body []byte HTTPResponse *http.Response @@ -21130,6 +21909,14 @@ func (r MarkAsReadResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r MarkAsReadResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type ListPeopleResponse struct { Body []byte HTTPResponse *http.Response @@ -21156,6 +21943,14 @@ func (r ListPeopleResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r ListPeopleResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetPersonResponse struct { Body []byte HTTPResponse *http.Response @@ -21182,6 +21977,14 @@ func (r GetPersonResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetPersonResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type DisableOutOfOfficeResponse struct { Body []byte HTTPResponse *http.Response @@ -21207,6 +22010,14 @@ func (r DisableOutOfOfficeResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r DisableOutOfOfficeResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetOutOfOfficeResponse struct { Body []byte HTTPResponse *http.Response @@ -21233,6 +22044,14 @@ func (r GetOutOfOfficeResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetOutOfOfficeResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type EnableOutOfOfficeResponse struct { Body []byte HTTPResponse *http.Response @@ -21260,6 +22079,14 @@ func (r EnableOutOfOfficeResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r EnableOutOfOfficeResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type ListProjectsResponse struct { Body []byte HTTPResponse *http.Response @@ -21286,6 +22113,14 @@ func (r ListProjectsResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r ListProjectsResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type CreateProjectResponse struct { Body []byte HTTPResponse *http.Response @@ -21313,6 +22148,14 @@ func (r CreateProjectResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r CreateProjectResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type ListRecordingsResponse struct { Body []byte HTTPResponse *http.Response @@ -21339,6 +22182,14 @@ func (r ListRecordingsResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r ListRecordingsResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type TrashProjectResponse struct { Body []byte HTTPResponse *http.Response @@ -21364,6 +22215,14 @@ func (r TrashProjectResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r TrashProjectResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetProjectResponse struct { Body []byte HTTPResponse *http.Response @@ -21390,6 +22249,14 @@ func (r GetProjectResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetProjectResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type UpdateProjectResponse struct { Body []byte HTTPResponse *http.Response @@ -21417,6 +22284,14 @@ func (r UpdateProjectResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r UpdateProjectResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type ToggleGaugeResponse struct { Body []byte HTTPResponse *http.Response @@ -21442,6 +22317,14 @@ func (r ToggleGaugeResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r ToggleGaugeResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type ListGaugeNeedlesResponse struct { Body []byte HTTPResponse *http.Response @@ -21469,6 +22352,14 @@ func (r ListGaugeNeedlesResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r ListGaugeNeedlesResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type CreateGaugeNeedleResponse struct { Body []byte HTTPResponse *http.Response @@ -21496,6 +22387,14 @@ func (r CreateGaugeNeedleResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r CreateGaugeNeedleResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type ListProjectPeopleResponse struct { Body []byte HTTPResponse *http.Response @@ -21522,6 +22421,14 @@ func (r ListProjectPeopleResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r ListProjectPeopleResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type UpdateProjectAccessResponse struct { Body []byte HTTPResponse *http.Response @@ -21550,6 +22457,14 @@ func (r UpdateProjectAccessResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r UpdateProjectAccessResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetProjectTimelineResponse struct { Body []byte HTTPResponse *http.Response @@ -21577,6 +22492,14 @@ func (r GetProjectTimelineResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetProjectTimelineResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetProjectTimesheetResponse struct { Body []byte HTTPResponse *http.Response @@ -21603,6 +22526,14 @@ func (r GetProjectTimesheetResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetProjectTimesheetResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetAnswerResponse struct { Body []byte HTTPResponse *http.Response @@ -21629,6 +22560,14 @@ func (r GetAnswerResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetAnswerResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type UpdateAnswerResponse struct { Body []byte HTTPResponse *http.Response @@ -21655,6 +22594,14 @@ func (r UpdateAnswerResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r UpdateAnswerResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetQuestionnaireResponse struct { Body []byte HTTPResponse *http.Response @@ -21681,6 +22628,14 @@ func (r GetQuestionnaireResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetQuestionnaireResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type ListQuestionsResponse struct { Body []byte HTTPResponse *http.Response @@ -21707,6 +22662,14 @@ func (r ListQuestionsResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r ListQuestionsResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type CreateQuestionResponse struct { Body []byte HTTPResponse *http.Response @@ -21734,6 +22697,14 @@ func (r CreateQuestionResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r CreateQuestionResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetQuestionResponse struct { Body []byte HTTPResponse *http.Response @@ -21760,6 +22731,14 @@ func (r GetQuestionResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetQuestionResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type UpdateQuestionResponse struct { Body []byte HTTPResponse *http.Response @@ -21787,6 +22766,14 @@ func (r UpdateQuestionResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r UpdateQuestionResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type ListAnswersResponse struct { Body []byte HTTPResponse *http.Response @@ -21813,6 +22800,14 @@ func (r ListAnswersResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r ListAnswersResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type CreateAnswerResponse struct { Body []byte HTTPResponse *http.Response @@ -21840,6 +22835,14 @@ func (r CreateAnswerResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r CreateAnswerResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type ListQuestionAnswerersResponse struct { Body []byte HTTPResponse *http.Response @@ -21867,6 +22870,14 @@ func (r ListQuestionAnswerersResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r ListQuestionAnswerersResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetAnswersByPersonResponse struct { Body []byte HTTPResponse *http.Response @@ -21894,6 +22905,14 @@ func (r GetAnswersByPersonResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetAnswersByPersonResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type UpdateQuestionNotificationSettingsResponse struct { Body []byte HTTPResponse *http.Response @@ -21921,6 +22940,14 @@ func (r UpdateQuestionNotificationSettingsResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r UpdateQuestionNotificationSettingsResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type ResumeQuestionResponse struct { Body []byte HTTPResponse *http.Response @@ -21947,6 +22974,14 @@ func (r ResumeQuestionResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r ResumeQuestionResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type PauseQuestionResponse struct { Body []byte HTTPResponse *http.Response @@ -21974,6 +23009,14 @@ func (r PauseQuestionResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r PauseQuestionResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type UnpinMessageResponse struct { Body []byte HTTPResponse *http.Response @@ -21999,6 +23042,14 @@ func (r UnpinMessageResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r UnpinMessageResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type PinMessageResponse struct { Body []byte HTTPResponse *http.Response @@ -22025,6 +23076,14 @@ func (r PinMessageResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r PinMessageResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetRecordingResponse struct { Body []byte HTTPResponse *http.Response @@ -22051,6 +23110,14 @@ func (r GetRecordingResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetRecordingResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type ListRecordingBoostsResponse struct { Body []byte HTTPResponse *http.Response @@ -22077,6 +23144,14 @@ func (r ListRecordingBoostsResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r ListRecordingBoostsResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type CreateRecordingBoostResponse struct { Body []byte HTTPResponse *http.Response @@ -22104,6 +23179,14 @@ func (r CreateRecordingBoostResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r CreateRecordingBoostResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type SetClientVisibilityResponse struct { Body []byte HTTPResponse *http.Response @@ -22131,6 +23214,14 @@ func (r SetClientVisibilityResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r SetClientVisibilityResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type ListCommentsResponse struct { Body []byte HTTPResponse *http.Response @@ -22157,6 +23248,14 @@ func (r ListCommentsResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r ListCommentsResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type CreateCommentResponse struct { Body []byte HTTPResponse *http.Response @@ -22184,6 +23283,14 @@ func (r CreateCommentResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r CreateCommentResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type ListEventsResponse struct { Body []byte HTTPResponse *http.Response @@ -22210,6 +23317,14 @@ func (r ListEventsResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r ListEventsResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type ListEventBoostsResponse struct { Body []byte HTTPResponse *http.Response @@ -22236,6 +23351,14 @@ func (r ListEventBoostsResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r ListEventBoostsResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type CreateEventBoostResponse struct { Body []byte HTTPResponse *http.Response @@ -22263,6 +23386,14 @@ func (r CreateEventBoostResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r CreateEventBoostResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type UnarchiveRecordingResponse struct { Body []byte HTTPResponse *http.Response @@ -22289,6 +23420,14 @@ func (r UnarchiveRecordingResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r UnarchiveRecordingResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type ArchiveRecordingResponse struct { Body []byte HTTPResponse *http.Response @@ -22315,6 +23454,14 @@ func (r ArchiveRecordingResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r ArchiveRecordingResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type TrashRecordingResponse struct { Body []byte HTTPResponse *http.Response @@ -22341,6 +23488,14 @@ func (r TrashRecordingResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r TrashRecordingResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type UnsubscribeResponse struct { Body []byte HTTPResponse *http.Response @@ -22366,6 +23521,14 @@ func (r UnsubscribeResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r UnsubscribeResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetSubscriptionResponse struct { Body []byte HTTPResponse *http.Response @@ -22392,6 +23555,14 @@ func (r GetSubscriptionResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetSubscriptionResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type SubscribeResponse struct { Body []byte HTTPResponse *http.Response @@ -22419,6 +23590,14 @@ func (r SubscribeResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r SubscribeResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type UpdateSubscriptionResponse struct { Body []byte HTTPResponse *http.Response @@ -22446,6 +23625,14 @@ func (r UpdateSubscriptionResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r UpdateSubscriptionResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetRecordingTimesheetResponse struct { Body []byte HTTPResponse *http.Response @@ -22472,6 +23659,14 @@ func (r GetRecordingTimesheetResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetRecordingTimesheetResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type CreateTimesheetEntryResponse struct { Body []byte HTTPResponse *http.Response @@ -22499,6 +23694,14 @@ func (r CreateTimesheetEntryResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r CreateTimesheetEntryResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type DisableToolResponse struct { Body []byte HTTPResponse *http.Response @@ -22524,6 +23727,14 @@ func (r DisableToolResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r DisableToolResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type EnableToolResponse struct { Body []byte HTTPResponse *http.Response @@ -22550,6 +23761,14 @@ func (r EnableToolResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r EnableToolResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type RepositionToolResponse struct { Body []byte HTTPResponse *http.Response @@ -22576,6 +23795,14 @@ func (r RepositionToolResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r RepositionToolResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type ListGaugesResponse struct { Body []byte HTTPResponse *http.Response @@ -22602,6 +23829,14 @@ func (r ListGaugesResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r ListGaugesResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetProgressReportResponse struct { Body []byte HTTPResponse *http.Response @@ -22628,6 +23863,14 @@ func (r GetProgressReportResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetProgressReportResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetUpcomingScheduleResponse struct { Body []byte HTTPResponse *http.Response @@ -22654,6 +23897,14 @@ func (r GetUpcomingScheduleResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetUpcomingScheduleResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetTimesheetReportResponse struct { Body []byte HTTPResponse *http.Response @@ -22680,6 +23931,14 @@ func (r GetTimesheetReportResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetTimesheetReportResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type ListAssignablePeopleResponse struct { Body []byte HTTPResponse *http.Response @@ -22706,6 +23965,14 @@ func (r ListAssignablePeopleResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r ListAssignablePeopleResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetAssignedTodosResponse struct { Body []byte HTTPResponse *http.Response @@ -22733,6 +24000,14 @@ func (r GetAssignedTodosResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetAssignedTodosResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetOverdueTodosResponse struct { Body []byte HTTPResponse *http.Response @@ -22759,6 +24034,14 @@ func (r GetOverdueTodosResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetOverdueTodosResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetPersonProgressResponse struct { Body []byte HTTPResponse *http.Response @@ -22786,6 +24069,14 @@ func (r GetPersonProgressResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetPersonProgressResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetScheduleEntryResponse struct { Body []byte HTTPResponse *http.Response @@ -22812,6 +24103,14 @@ func (r GetScheduleEntryResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetScheduleEntryResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type UpdateScheduleEntryResponse struct { Body []byte HTTPResponse *http.Response @@ -22839,6 +24138,14 @@ func (r UpdateScheduleEntryResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r UpdateScheduleEntryResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetScheduleEntryOccurrenceResponse struct { Body []byte HTTPResponse *http.Response @@ -22865,6 +24172,14 @@ func (r GetScheduleEntryOccurrenceResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetScheduleEntryOccurrenceResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetScheduleResponse struct { Body []byte HTTPResponse *http.Response @@ -22891,6 +24206,14 @@ func (r GetScheduleResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetScheduleResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type UpdateScheduleSettingsResponse struct { Body []byte HTTPResponse *http.Response @@ -22918,6 +24241,14 @@ func (r UpdateScheduleSettingsResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r UpdateScheduleSettingsResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type ListScheduleEntriesResponse struct { Body []byte HTTPResponse *http.Response @@ -22944,6 +24275,14 @@ func (r ListScheduleEntriesResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r ListScheduleEntriesResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type CreateScheduleEntryResponse struct { Body []byte HTTPResponse *http.Response @@ -22971,6 +24310,14 @@ func (r CreateScheduleEntryResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r CreateScheduleEntryResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type SearchResponse struct { Body []byte HTTPResponse *http.Response @@ -22997,6 +24344,14 @@ func (r SearchResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r SearchResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetSearchMetadataResponse struct { Body []byte HTTPResponse *http.Response @@ -23023,6 +24378,14 @@ func (r GetSearchMetadataResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetSearchMetadataResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type ListTemplatesResponse struct { Body []byte HTTPResponse *http.Response @@ -23049,6 +24412,14 @@ func (r ListTemplatesResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r ListTemplatesResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type CreateTemplateResponse struct { Body []byte HTTPResponse *http.Response @@ -23076,6 +24447,14 @@ func (r CreateTemplateResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r CreateTemplateResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type DeleteTemplateResponse struct { Body []byte HTTPResponse *http.Response @@ -23101,6 +24480,14 @@ func (r DeleteTemplateResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r DeleteTemplateResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetTemplateResponse struct { Body []byte HTTPResponse *http.Response @@ -23127,6 +24514,14 @@ func (r GetTemplateResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetTemplateResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type UpdateTemplateResponse struct { Body []byte HTTPResponse *http.Response @@ -23154,6 +24549,14 @@ func (r UpdateTemplateResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r UpdateTemplateResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type CreateProjectFromTemplateResponse struct { Body []byte HTTPResponse *http.Response @@ -23181,6 +24584,14 @@ func (r CreateProjectFromTemplateResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r CreateProjectFromTemplateResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetProjectConstructionResponse struct { Body []byte HTTPResponse *http.Response @@ -23207,6 +24618,14 @@ func (r GetProjectConstructionResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetProjectConstructionResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetTimesheetEntryResponse struct { Body []byte HTTPResponse *http.Response @@ -23233,6 +24652,14 @@ func (r GetTimesheetEntryResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetTimesheetEntryResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type UpdateTimesheetEntryResponse struct { Body []byte HTTPResponse *http.Response @@ -23260,6 +24687,14 @@ func (r UpdateTimesheetEntryResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r UpdateTimesheetEntryResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type RepositionTodolistGroupResponse struct { Body []byte HTTPResponse *http.Response @@ -23286,6 +24721,14 @@ func (r RepositionTodolistGroupResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r RepositionTodolistGroupResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetTodolistOrGroupResponse struct { Body []byte HTTPResponse *http.Response @@ -23312,6 +24755,14 @@ func (r GetTodolistOrGroupResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetTodolistOrGroupResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type UpdateTodolistOrGroupResponse struct { Body []byte HTTPResponse *http.Response @@ -23339,6 +24790,14 @@ func (r UpdateTodolistOrGroupResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r UpdateTodolistOrGroupResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type ListTodolistGroupsResponse struct { Body []byte HTTPResponse *http.Response @@ -23365,6 +24824,14 @@ func (r ListTodolistGroupsResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r ListTodolistGroupsResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type CreateTodolistGroupResponse struct { Body []byte HTTPResponse *http.Response @@ -23392,6 +24859,14 @@ func (r CreateTodolistGroupResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r CreateTodolistGroupResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type ListTodosResponse struct { Body []byte HTTPResponse *http.Response @@ -23418,6 +24893,14 @@ func (r ListTodosResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r ListTodosResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type CreateTodoResponse struct { Body []byte HTTPResponse *http.Response @@ -23445,6 +24928,14 @@ func (r CreateTodoResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r CreateTodoResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type TrashTodoResponse struct { Body []byte HTTPResponse *http.Response @@ -23470,6 +24961,14 @@ func (r TrashTodoResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r TrashTodoResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetTodoResponse struct { Body []byte HTTPResponse *http.Response @@ -23496,6 +24995,14 @@ func (r GetTodoResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetTodoResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type ReplaceTodoResponse struct { Body []byte HTTPResponse *http.Response @@ -23523,6 +25030,14 @@ func (r ReplaceTodoResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r ReplaceTodoResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type UncompleteTodoResponse struct { Body []byte HTTPResponse *http.Response @@ -23548,6 +25063,14 @@ func (r UncompleteTodoResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r UncompleteTodoResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type CompleteTodoResponse struct { Body []byte HTTPResponse *http.Response @@ -23574,6 +25097,14 @@ func (r CompleteTodoResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r CompleteTodoResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type RepositionTodoResponse struct { Body []byte HTTPResponse *http.Response @@ -23600,6 +25131,14 @@ func (r RepositionTodoResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r RepositionTodoResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetTodosetResponse struct { Body []byte HTTPResponse *http.Response @@ -23626,6 +25165,14 @@ func (r GetTodosetResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetTodosetResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetHillChartResponse struct { Body []byte HTTPResponse *http.Response @@ -23652,6 +25199,14 @@ func (r GetHillChartResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetHillChartResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type UpdateHillChartSettingsResponse struct { Body []byte HTTPResponse *http.Response @@ -23679,6 +25234,14 @@ func (r UpdateHillChartSettingsResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r UpdateHillChartSettingsResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type ListTodolistsResponse struct { Body []byte HTTPResponse *http.Response @@ -23705,6 +25268,14 @@ func (r ListTodolistsResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r ListTodolistsResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type CreateTodolistResponse struct { Body []byte HTTPResponse *http.Response @@ -23732,6 +25303,14 @@ func (r CreateTodolistResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r CreateTodolistResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetUploadResponse struct { Body []byte HTTPResponse *http.Response @@ -23758,6 +25337,14 @@ func (r GetUploadResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetUploadResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type UpdateUploadResponse struct { Body []byte HTTPResponse *http.Response @@ -23785,6 +25372,14 @@ func (r UpdateUploadResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r UpdateUploadResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type ListUploadVersionsResponse struct { Body []byte HTTPResponse *http.Response @@ -23811,6 +25406,14 @@ func (r ListUploadVersionsResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r ListUploadVersionsResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetVaultResponse struct { Body []byte HTTPResponse *http.Response @@ -23837,6 +25440,14 @@ func (r GetVaultResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetVaultResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type UpdateVaultResponse struct { Body []byte HTTPResponse *http.Response @@ -23864,6 +25475,14 @@ func (r UpdateVaultResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r UpdateVaultResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type ListDocumentsResponse struct { Body []byte HTTPResponse *http.Response @@ -23890,6 +25509,14 @@ func (r ListDocumentsResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r ListDocumentsResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type CreateDocumentResponse struct { Body []byte HTTPResponse *http.Response @@ -23917,6 +25544,14 @@ func (r CreateDocumentResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r CreateDocumentResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type ListUploadsResponse struct { Body []byte HTTPResponse *http.Response @@ -23943,6 +25578,14 @@ func (r ListUploadsResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r ListUploadsResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type CreateUploadResponse struct { Body []byte HTTPResponse *http.Response @@ -23970,6 +25613,14 @@ func (r CreateUploadResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r CreateUploadResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type ListVaultsResponse struct { Body []byte HTTPResponse *http.Response @@ -23996,6 +25647,14 @@ func (r ListVaultsResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r ListVaultsResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type CreateVaultResponse struct { Body []byte HTTPResponse *http.Response @@ -24023,6 +25682,14 @@ func (r CreateVaultResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r CreateVaultResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type DeleteWebhookResponse struct { Body []byte HTTPResponse *http.Response @@ -24048,6 +25715,14 @@ func (r DeleteWebhookResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r DeleteWebhookResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type GetWebhookResponse struct { Body []byte HTTPResponse *http.Response @@ -24074,6 +25749,14 @@ func (r GetWebhookResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r GetWebhookResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + type UpdateWebhookResponse struct { Body []byte HTTPResponse *http.Response @@ -24102,6 +25785,14 @@ func (r UpdateWebhookResponse) StatusCode() int { return 0 } +// ContentType is a convenience method to retrieve the Content-Type value from the HTTP response headers +func (r UpdateWebhookResponse) ContentType() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Header.Get("Content-Type") + } + return "" +} + // GetAccountWithResponse request returning *GetAccountResponse func (c *ClientWithResponses) GetAccountWithResponse(ctx context.Context, accountId string, reqEditors ...RequestEditorFn) (*GetAccountResponse, error) { rsp, err := c.GetAccount(ctx, accountId, reqEditors...) diff --git a/kotlin/sdk/src/commonMain/kotlin/com/basecamp/sdk/generated/models/Person.kt b/kotlin/sdk/src/commonMain/kotlin/com/basecamp/sdk/generated/models/Person.kt index 83dc00733..72df7ef47 100644 --- a/kotlin/sdk/src/commonMain/kotlin/com/basecamp/sdk/generated/models/Person.kt +++ b/kotlin/sdk/src/commonMain/kotlin/com/basecamp/sdk/generated/models/Person.kt @@ -22,6 +22,7 @@ data class Person( @SerialName("personable_type") val personableType: String? = null, val title: String? = null, val bio: String? = null, + val tagline: String? = null, val location: String? = null, @SerialName("created_at") val createdAt: String? = null, @SerialName("updated_at") val updatedAt: String? = null, diff --git a/kotlin/sdk/src/commonMain/kotlin/com/basecamp/sdk/generated/models/Todo.kt b/kotlin/sdk/src/commonMain/kotlin/com/basecamp/sdk/generated/models/Todo.kt index 117e8c9ef..bc8c82946 100644 --- a/kotlin/sdk/src/commonMain/kotlin/com/basecamp/sdk/generated/models/Todo.kt +++ b/kotlin/sdk/src/commonMain/kotlin/com/basecamp/sdk/generated/models/Todo.kt @@ -39,5 +39,6 @@ data class Todo( @SerialName("completion_subscribers") val completionSubscribers: List = emptyList(), @SerialName("completion_url") val completionUrl: String? = null, @SerialName("boosts_count") val boostsCount: Int = 0, - @SerialName("boosts_url") val boostsUrl: String? = null + @SerialName("boosts_url") val boostsUrl: String? = null, + val steps: List = emptyList() ) diff --git a/kotlin/sdk/src/commonMain/kotlin/com/basecamp/sdk/generated/models/Todoset.kt b/kotlin/sdk/src/commonMain/kotlin/com/basecamp/sdk/generated/models/Todoset.kt index 0f9bd519b..0e9dddd5f 100644 --- a/kotlin/sdk/src/commonMain/kotlin/com/basecamp/sdk/generated/models/Todoset.kt +++ b/kotlin/sdk/src/commonMain/kotlin/com/basecamp/sdk/generated/models/Todoset.kt @@ -31,5 +31,9 @@ data class Todoset( @SerialName("todolists_url") val todolistsUrl: String? = null, @SerialName("completed_ratio") val completedRatio: String? = null, val completed: Boolean = false, - @SerialName("app_todolists_url") val appTodolistsUrl: String? = null + @SerialName("app_todolists_url") val appTodolistsUrl: String? = null, + @SerialName("todos_count") val todosCount: Int = 0, + @SerialName("completed_loose_todos_count") val completedLooseTodosCount: Int = 0, + @SerialName("todos_url") val todosUrl: String? = null, + @SerialName("app_todos_url") val appTodosUrl: String? = null ) diff --git a/openapi.json b/openapi.json index 57fbadf0c..9dc62c7f4 100644 --- a/openapi.json +++ b/openapi.json @@ -23584,7 +23584,22 @@ "type": "array", "items": { "$ref": "#/components/schemas/Notification" - } + }, + "description": "Legacy \"save forever\" collection. Observed BC5 behavior: emits `[]`\nwhile BC4 still populates with real items — the BC team has not yet\nresolved whether to keep BC4-shaped data on BC5 (back-compat) or to\naccept the empty-array break with a documented BC5 changelog entry.\nSee COORDINATION.md for the open decision. The conceptual\nreplacement is `bubble_ups` (with optional scheduling via\n`scheduled_bubble_ups`), though wire shapes are not interchangeable\nper-item, so cross-version readers should consume both." + }, + "bubble_ups": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Notification" + }, + "description": "Items the user has saved with Bubble Up (BC5 addition). Roughly the\nsuccessor to `memories` but with optional scheduling — see\n`scheduled_bubble_ups` for the time-deferred subset." + }, + "scheduled_bubble_ups": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Notification" + }, + "description": "Bubble Ups scheduled to resurface in the future (BC5 addition)." } } }, @@ -24694,6 +24709,19 @@ "memory_url": { "type": "string" }, + "bubble_up_url": { + "type": "string", + "description": "URL for the Bubble Up record covering this notification (BC5 addition).\nEligibility-gated — only present on items the current user can bubble up." + }, + "bubble_up_at": { + "type": "string", + "description": "Scheduled resurfacing time when this item is queued as a scheduled\nBubble Up (BC5 addition). Absent when there is no scheduled time.", + "x-go-type": "time.Time", + "x-go-type-import": { + "path": "time" + }, + "x-go-type-skip-optional-pointer": true + }, "subscription_url": { "type": "string" }, @@ -24840,6 +24868,15 @@ "redact": false } }, + "tagline": { + "type": "string", + "description": "Alias of `bio` introduced in BC5. BC3 emits both keys with identical content;\nolder BC4 responses may omit `tagline`. Prefer `bio` for cross-version reads.", + "format": "password", + "x-basecamp-sensitive": { + "category": "pii", + "redact": false + } + }, "location": { "type": "string", "format": "password", @@ -26482,6 +26519,13 @@ }, "boosts_url": { "type": "string" + }, + "steps": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CardStep" + }, + "description": "Steps embedded in the Todo response (BC5 addition). The shared\n`steps/step` jbuilder partial emits the same shape as `CardStep`,\nso the existing `CardStepList` is reused." } }, "required": [ @@ -26878,6 +26922,24 @@ }, "app_todolists_url": { "type": "string" + }, + "todos_count": { + "type": "integer", + "description": "Total count of todos across all todolists in this todoset (BC5 addition).", + "format": "int32" + }, + "completed_loose_todos_count": { + "type": "integer", + "description": "Count of completed loose todos at the todoset level (BC5 addition).", + "format": "int32" + }, + "todos_url": { + "type": "string", + "description": "API URL for listing todos directly under this todoset (BC5 addition)." + }, + "app_todos_url": { + "type": "string", + "description": "In-app URL for viewing the todoset's todos (BC5 addition)." } }, "required": [ diff --git a/python/src/basecamp/generated/types.py b/python/src/basecamp/generated/types.py index fc2530337..49082a158 100644 --- a/python/src/basecamp/generated/types.py +++ b/python/src/basecamp/generated/types.py @@ -706,8 +706,10 @@ class GetMyAssignmentsResponseContent(TypedDict): class GetMyNotificationsResponseContent(TypedDict): + bubble_ups: NotRequired[list[Notification]] memories: NotRequired[list[Notification]] reads: NotRequired[list[Notification]] + scheduled_bubble_ups: NotRequired[list[Notification]] unreads: NotRequired[list[Notification]] @@ -890,6 +892,8 @@ class NotFoundErrorResponseContent(TypedDict): class Notification(TypedDict): app_url: NotRequired[str] bookmark_url: NotRequired[str] + bubble_up_at: NotRequired[str] + bubble_up_url: NotRequired[str] bucket_name: NotRequired[str] content_excerpt: NotRequired[str] created_at: str @@ -957,6 +961,7 @@ class Person(TypedDict): name: str owner: NotRequired[bool] personable_type: NotRequired[str] + tagline: NotRequired[str] time_zone: NotRequired[str] title: NotRequired[str] updated_at: NotRequired[str] @@ -1363,6 +1368,7 @@ class Todo(TypedDict): position: NotRequired[int] starts_on: NotRequired[str] status: str + steps: NotRequired[list[CardStep]] subscription_url: NotRequired[str] title: str type: str @@ -1443,10 +1449,12 @@ class TodolistGroup(TypedDict): class Todoset(TypedDict): app_todolists_url: NotRequired[str] + app_todos_url: NotRequired[str] app_url: str bookmark_url: NotRequired[str] bucket: TodoBucket completed: NotRequired[bool] + completed_loose_todos_count: NotRequired[int] completed_ratio: NotRequired[str] created_at: str creator: Person @@ -1458,6 +1466,8 @@ class Todoset(TypedDict): title: str todolists_count: NotRequired[int] todolists_url: NotRequired[str] + todos_count: NotRequired[int] + todos_url: NotRequired[str] type: str updated_at: str url: str diff --git a/ruby/lib/basecamp/generated/metadata.json b/ruby/lib/basecamp/generated/metadata.json index fcf9d9af1..fb46a0779 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-07-18T00:53:27Z", + "generated": "2026-07-22T02:19:46Z", "operations": { "GetAccount": { "retry": { diff --git a/ruby/lib/basecamp/generated/types.rb b/ruby/lib/basecamp/generated/types.rb index bcf1b9b6b..e0250f567 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-07-18T00:53:27Z +# Generated: 2026-07-22T02:19:46Z require "json" require "time" @@ -2093,7 +2093,7 @@ def to_json(*args) # Notification class Notification include TypeHelpers - attr_accessor :created_at, :id, :updated_at, :app_url, :bookmark_url, :bucket_name, :content_excerpt, :creator, :image_url, :memory_url, :named, :participants, :previewable_attachments, :read_at, :readable_identifier, :readable_sgid, :section, :subscribed, :subscription_url, :title, :type, :unread_at, :unread_count, :unread_url + attr_accessor :created_at, :id, :updated_at, :app_url, :bookmark_url, :bubble_up_at, :bubble_up_url, :bucket_name, :content_excerpt, :creator, :image_url, :memory_url, :named, :participants, :previewable_attachments, :read_at, :readable_identifier, :readable_sgid, :section, :subscribed, :subscription_url, :title, :type, :unread_at, :unread_count, :unread_url # @return [Array] def self.required_fields @@ -2106,6 +2106,8 @@ def initialize(data = {}) @updated_at = parse_datetime(data["updated_at"]) @app_url = data["app_url"] @bookmark_url = data["bookmark_url"] + @bubble_up_at = parse_datetime(data["bubble_up_at"]) + @bubble_up_url = data["bubble_up_url"] @bucket_name = data["bucket_name"] @content_excerpt = data["content_excerpt"] @creator = parse_type(data["creator"], "Person") @@ -2134,6 +2136,8 @@ def to_h "updated_at" => @updated_at, "app_url" => @app_url, "bookmark_url" => @bookmark_url, + "bubble_up_at" => @bubble_up_at, + "bubble_up_url" => @bubble_up_url, "bucket_name" => @bucket_name, "content_excerpt" => @content_excerpt, "creator" => @creator, @@ -2246,7 +2250,7 @@ def to_json(*args) # Person class Person include TypeHelpers - attr_accessor :id, :name, :admin, :attachable_sgid, :avatar_url, :bio, :can_access_hill_charts, :can_access_timesheet, :can_manage_people, :can_manage_projects, :can_ping, :client, :company, :created_at, :email_address, :employee, :location, :owner, :personable_type, :time_zone, :title, :updated_at, :system_label + attr_accessor :id, :name, :admin, :attachable_sgid, :avatar_url, :bio, :can_access_hill_charts, :can_access_timesheet, :can_manage_people, :can_manage_projects, :can_ping, :client, :company, :created_at, :email_address, :employee, :location, :owner, :personable_type, :tagline, :time_zone, :title, :updated_at, :system_label # @return [Array] def self.required_fields @@ -2274,6 +2278,7 @@ def initialize(data = {}) @location = data["location"] @owner = parse_boolean(data["owner"]) @personable_type = data["personable_type"] + @tagline = data["tagline"] @time_zone = data["time_zone"] @title = data["title"] @updated_at = parse_datetime(data["updated_at"]) @@ -2300,6 +2305,7 @@ def to_h "location" => @location, "owner" => @owner, "personable_type" => @personable_type, + "tagline" => @tagline, "time_zone" => @time_zone, "title" => @title, "updated_at" => @updated_at, @@ -3379,7 +3385,7 @@ def to_json(*args) # Todo class Todo include TypeHelpers - attr_accessor :app_url, :bucket, :content, :created_at, :creator, :id, :inherits_status, :parent, :status, :title, :type, :updated_at, :url, :visible_to_clients, :assignees, :bookmark_url, :boosts_count, :boosts_url, :comments_count, :comments_url, :completed, :completion_subscribers, :completion_url, :description, :due_on, :position, :starts_on, :subscription_url + attr_accessor :app_url, :bucket, :content, :created_at, :creator, :id, :inherits_status, :parent, :status, :title, :type, :updated_at, :url, :visible_to_clients, :assignees, :bookmark_url, :boosts_count, :boosts_url, :comments_count, :comments_url, :completed, :completion_subscribers, :completion_url, :description, :due_on, :position, :starts_on, :steps, :subscription_url # @return [Array] def self.required_fields @@ -3414,6 +3420,7 @@ def initialize(data = {}) @due_on = data["due_on"] @position = parse_integer(data["position"]) @starts_on = data["starts_on"] + @steps = parse_array(data["steps"], "CardStep") @subscription_url = data["subscription_url"] end @@ -3446,6 +3453,7 @@ def to_h "due_on" => @due_on, "position" => @position, "starts_on" => @starts_on, + "steps" => @steps, "subscription_url" => @subscription_url, }.compact end @@ -3666,7 +3674,7 @@ def to_json(*args) # Todoset class Todoset include TypeHelpers - attr_accessor :app_url, :bucket, :created_at, :creator, :id, :inherits_status, :name, :status, :title, :type, :updated_at, :url, :visible_to_clients, :app_todolists_url, :bookmark_url, :completed, :completed_ratio, :position, :todolists_count, :todolists_url + attr_accessor :app_url, :bucket, :created_at, :creator, :id, :inherits_status, :name, :status, :title, :type, :updated_at, :url, :visible_to_clients, :app_todolists_url, :app_todos_url, :bookmark_url, :completed, :completed_loose_todos_count, :completed_ratio, :position, :todolists_count, :todolists_url, :todos_count, :todos_url # @return [Array] def self.required_fields @@ -3688,12 +3696,16 @@ def initialize(data = {}) @url = data["url"] @visible_to_clients = parse_boolean(data["visible_to_clients"]) @app_todolists_url = data["app_todolists_url"] + @app_todos_url = data["app_todos_url"] @bookmark_url = data["bookmark_url"] @completed = parse_boolean(data["completed"]) + @completed_loose_todos_count = parse_integer(data["completed_loose_todos_count"]) @completed_ratio = data["completed_ratio"] @position = parse_integer(data["position"]) @todolists_count = parse_integer(data["todolists_count"]) @todolists_url = data["todolists_url"] + @todos_count = parse_integer(data["todos_count"]) + @todos_url = data["todos_url"] end def to_h @@ -3712,12 +3724,16 @@ def to_h "url" => @url, "visible_to_clients" => @visible_to_clients, "app_todolists_url" => @app_todolists_url, + "app_todos_url" => @app_todos_url, "bookmark_url" => @bookmark_url, "completed" => @completed, + "completed_loose_todos_count" => @completed_loose_todos_count, "completed_ratio" => @completed_ratio, "position" => @position, "todolists_count" => @todolists_count, "todolists_url" => @todolists_url, + "todos_count" => @todos_count, + "todos_url" => @todos_url, }.compact end diff --git a/scripts/check-bucket-flat-parity.sh b/scripts/check-bucket-flat-parity.sh new file mode 100755 index 000000000..4634f8fdb --- /dev/null +++ b/scripts/check-bucket-flat-parity.sh @@ -0,0 +1,110 @@ +#!/usr/bin/env bash +# Bucket↔flat parity lint. +# +# For every GET /{accountId}/buckets/{bucketId or projectId}/(/)?.json operation +# ( may be a literal segment like "completed" or a path parameter) +# whose response is a list, check that a flat counterpart at +# /{accountId}/(/{filter})?.json exists. If not, the path must be +# entered in spec/bucket-scoped-allowlist.txt with a justification. +# +# Cross-project SDK consumers shouldn't have to walk every project to query +# resources that already exist account-wide. Catching this early at the spec +# layer prevents bucket-only collections from shipping by accident. +# +# Allowlist format: one bucket path-pattern per line. Comments (lines starting +# with `#`) and blank lines are ignored. Each entry should have a justification +# comment on the line immediately above it. +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(dirname "$SCRIPT_DIR")" + +SPEC="${1:-$PROJECT_ROOT/openapi.json}" +ALLOWLIST="${2:-$PROJECT_ROOT/spec/bucket-scoped-allowlist.txt}" + +if [ ! -f "$SPEC" ]; then + echo "ERROR: openapi spec not found at $SPEC" >&2 + exit 2 +fi + +if ! command -v jq >/dev/null 2>&1; then + echo "ERROR: jq is required" >&2 + exit 2 +fi + +# Build the set of allowlisted patterns. +ALLOWED="" +if [ -f "$ALLOWLIST" ]; then + ALLOWED=$(grep -Ev '^[[:space:]]*(#|$)' "$ALLOWLIST" || true) +fi + +# Find candidate bucket-scoped GET list operations and their expected flat paths. +# A "list" response is a top-level array (recursively resolving $ref one level). +# jq exits non-zero for invalid OpenAPI / broken filter — let it fail loud rather +# than silently turning bad input into "0 operations found". +CANDIDATES=$(jq -r ' + . as $s + | $s.paths + | to_entries[] + | select(.key | test("^/\\{accountId\\}/buckets/\\{(bucketId|projectId)\\}/[^/]+(/[^/]+)?\\.json$")) + | select(.value.get != null) + | . as $entry + | ( + $entry.value.get.responses["200"].content["application/json"].schema as $rs + | if $rs == null then null + elif $rs["$ref"] then + ($rs["$ref"] | sub("^#/components/schemas/"; "")) as $name + | $s.components.schemas[$name] + else $rs end + ) as $resolved + | select($resolved.type == "array") + | $entry.key +' "$SPEC") + +if [ -z "$CANDIDATES" ]; then + echo "==> Bucket↔flat parity: 0 bucket-scoped list operations found" + exit 0 +fi + +VIOLATIONS="" +COUNT=0 +while IFS= read -r BUCKET_PATH; do + [ -z "$BUCKET_PATH" ] && continue + COUNT=$((COUNT + 1)) + + # Compute the flat path: strip the /buckets/{