feat: update to open api version 235.20.1 (#333)
Regenerates the client from the `chat` serverside spec at **v235.20.1**
(previously v235.16.3, #328). Generated from the `chat` working tree at
`v235.20.1-91-g6c6373e6cd`, so it also picks up spec changes merged
after that tag.
## Chat: pinned messages
- `ChatApi.getPinnedMessages` — `GET
/chat/channels/{type}/{id}/pinned_messages`, with both id and
`pinned_at` cursor pagination
(`id_gt`/`id_gte`/`id_lt`/`id_lte`/`id_around`,
`pinned_at_after`/`pinned_at_after_or_equal`/`pinned_at_before`/`pinned_at_before_or_equal`/`pinned_at_around`),
plus `limit`, `offset`, `sort`, `member_custom_include` and `user_id`.
- `Channel.getPinnedMessages` convenience wrapper on `ChannelApi`.
- Model: `GetPinnedMessagesResponse` (`messages: MessageResponse[]`).
## Chat: predefined filters
Named, server-stored filters for `QueryChannels`:
- `ChatApi.createPredefinedFilter` — `POST /chat/predefined_filters`
- `ChatApi.getPredefinedFilters` — `GET /chat/predefined_filters`
(optional `include_stats`, `sort`)
- `ChatApi.getPredefinedFilter` / `updatePredefinedFilter` /
`deletePredefinedFilter` — `GET|PUT|DELETE
/chat/predefined_filters/{name}`
Models: `CreatePredefinedFilterRequest`,
`CreatePredefinedFilterResponse`, `UpdatePredefinedFilterRequest`,
`UpdatePredefinedFilterResponse`, `GetPredefinedFilterResponse`,
`QueryPredefinedFiltersResponse`, `PredefinedFilterResponse`,
`PredefinedFilterStatsResponse` (`calls`, `max_latency_ms`,
`last_seen`), `PerformanceAnalysisResponse` (index/scan analysis with
`score`, `recommendations`, `unindexed_fields`, `unindexed_sort_fields`,
`warnings`), `SortParam`.
## Permissions: custom permission CRUD
- `CommonApi.createPermission` — `POST /permissions`
- `CommonApi.updatePermission` — `PUT /permissions/{id}`
- `CommonApi.deletePermission` — `DELETE /permissions/{id}`
Model: `PermissionRequest` (`action`, `name`, `description`, `owner`,
`same_team`, `condition`). `getPermission` and `listPermissions` already
existed.
## Other additions
- `getOrCreateChannel` (`ChatApi` and `ChannelApi`) accepts `user_id`.
- `QueryTeamUsageStatsRequest.team` — filter results to a single team
ID; empty string selects users not assigned to any team; mutually
exclusive with `next`.
- `ModerationPayload.other_media` and
`ModerationPayloadResponse.other_media` — media URLs from attachments
outside the typed image/video/audio lists (custom attachment types such
as GIF pickers).
## Documentation-only spec changes
- The moderation `restore` action is now documented as state-aware: it
reverses whichever of a delete, a block, or a shadow block currently
applies (including both at once). `unblock` is marked deprecated in
favour of it.
- `push_types` is clarified as an allowlist — empty or omitted means no
types trigger push.
## Codegen churn (no behaviour change)
Most of the diff is the generator's output style changing:
- `T[]` → `Array<T>` in model and request types
- `decoders.X` → `decoders['X']`
- `Record<string, any>` → `{ [key: string]: any }` in decoder signatures
Normalizing those three patterns away shrinks the diff from ~4,450
changed lines to ~500, all accounted for above. `FeedsApi` and
`ModerationApi` have no semantic change at all; `VideoApi` only reflows
one call.
## ⚠️ Breaking changes
None. No endpoints, models, or fields were removed, no signatures
changed, and no optionality changed.
## Verification
- `yarn lint` — clean
- `yarn build` — succeeds (vite bundles + `tsc --emitDeclarationOnly`) O
Oliver Lazoroski committed
d2123464fa3eb2d71d80827f67f59de8dcbe396a
Parent: a14a8b1
Committed by GitHub <noreply@github.com>
on 8/18/2026, 2:12:41 PM