SIGN IN SIGN UP

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