Skip to content

Commit c1c90de

Browse files
mogitaclaude
andauthored
[CHA-1578] refactor: code generated from openapi specs (#27)
* feat: update by openapi refactor * fix: correct the namespace * feat: update test library and align model names * feat: enable all products and update generated code * feat: update by openapi refactor * feat: add chat test helpers and UpsertUsers integration test Create ChatTestBase.cs with reusable test helpers (CreateTestUsers, CreateTestChannel, CreateTestChannelWithMembers, SendTestMessage, DeleteUsersWithRetry, WaitForTask, RandomString, QueryChannels, QueryUsers) following getstream-go patterns. Add initial ChatUserIntegrationTests with UpsertUsers test to verify helpers work. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add QueryUsers integration test Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add QueryUsersWithOffsetLimit integration test Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add PartialUpdateUser integration test Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add BlockUnblockUser integration test Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add DeactivateReactivateUser integration test Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add DeleteUsers integration test with retry and task polling Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add ExportUser integration test for .NET SDK Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add CreateGuest integration test for .NET SDK Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add UpsertUsersWithRoleAndTeamsRole integration test Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: PartialUpdateUserWithTeam integration test Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: UpdatePrivacySettings integration test Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add PartialUpdatePrivacySettings integration test for .NET SDK Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add QueryUsersWithDeactivated integration test Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * chore: ignore .env file * feat: add DeactivateUsersPlural integration test Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add UserCustomData integration test for .NET SDK Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add CreateChannelWithID integration test and fix OwnCapability deserialization Add ChannelOwnCapabilityConverter and OwnCapabilityConverter to handle string deserialization of empty model classes returned by the API. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add CreateChannelWithMembers integration test for .NET SDK Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add CreateDistinctChannel integration test for .NET SDK Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add QueryChannels integration test for .NET SDK Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add UpdateChannel integration test for .NET SDK Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add PartialUpdateChannel integration test for .NET SDK Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add DeleteChannel integration test for .NET SDK Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add HardDeleteChannels integration test Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add AddRemoveMembers channel integration test (.NET) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add QueryMembers channel integration test Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add InviteAcceptReject channel integration test Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add HideShowChannel integration test Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add TruncateChannel integration test Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add FreezeUnfreezeChannel integration test Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add MarkReadUnread integration test for .NET SDK Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add MuteUnmuteChannel integration test for .NET SDK Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add MemberPartialUpdate integration test Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: AssignRoles - assign channel_moderator role, verify via QueryMembers * feat: AddDemoteModerators channel integration test for .NET SDK * feat: MarkUnreadWithThread - create thread and mark unread from thread Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: TruncateWithOptions - truncate channel with message, skip_push, hard_delete * feat: PinUnpinChannel integration test for .NET SDK * feat: add ArchiveUnarchiveChannel integration test Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: AddMembersWithRoles channel integration test * feat: add MessageCount channel integration test Implements MessageCount test per sdk-test-parity-dotnet.md: sends a message, queries the channel, and asserts message_count >= 1 (handled as nullable per Go reference pattern when count_messages is disabled) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: add SendChannelEvent integration test Add test that sends a typing.start event to a channel via POST /api/v2/chat/channels/{type}/{id}/event and verifies the response. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: add FilterTags channel integration test * feat: MessageCountDisabled - disable count_messages via config_overrides, verify message_count nil * feat: add MarkUnreadWithTimestamp channel integration test Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: HideForCreator channel integration test for .NET SDK * feat: UploadAndDeleteFile channel integration test * feat: UploadAndDeleteImage - upload PNG image file to channel, verify URL, delete image * feat: SendAndGetMessage integration test for .NET SDK * feat: GetManyMessages integration test * feat: UpdateMessage integration test for .NET SDK * feat: PartialUpdateMessage integration test for .NET SDK Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: DeleteMessage integration test (soft delete, verify type=deleted) * feat: add HardDeleteMessage integration test Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: PinUnpinMessage integration test * feat: add TranslateMessage integration test * feat: ThreadReply - send parent, send reply with parent_id, get replies Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: add SearchMessages integration test Implements the SearchMessages test that sends a message with a unique search term, waits for indexing, then queries GET /api/v2/chat/search with a JSON-encoded payload query param and verifies results are returned. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: add SilentMessage integration test for .NET SDK Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: add PendingMessage integration test Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: add QueryMessageHistory and QueryMessageHistorySort integration tests Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: SkipEnrichUrl - send message with skip_enrich_url=true, verify no attachments * feat: KeepChannelHidden integration test * feat: add UndeleteMessage integration test Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: add DeleteMessageForMe integration test Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: add PinExpiration integration test Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: add SystemMessage integration test Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: add PendingFalse integration test * feat: add SearchWithMessageFilters integration test Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: add SearchOffsetAndSortError integration test * feat: add SearchOffsetAndNextError integration test * feat: ChannelRoleInMember - verify member.channel_role in message response Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: SendAndGetReactions integration test * feat: add DeleteReaction integration test Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: add EnforceUniqueReaction integration test * feat: add CreateAndQueryPoll integration test * feat: add CastPollVote integration test Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: add CreateListDeleteDevice test to ChatMiscIntegrationTests Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: add CreateListDeleteBlocklist integration test Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: add CreateListDeleteCommand integration test * feat: add CreateUpdateDeleteChannelType integration test * feat: add ListChannelTypes integration test Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: add ListPermissions integration test * feat: add CreatePermission integration test (skipped - not in generated spec) * feat: add GetPermission integration test Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: QueryBannedUsers integration test * feat: add MuteUnmuteUser integration test * feat: add GetAppSettings integration test * feat: add ExportChannels integration test * feat: add Threads integration test Create parent + 2 replies in a channel, query threads with channel_cid filter, verify thread appears with correct CreatedByUserID, also verify GetThread returns the thread with LatestReplies. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: add GetUnreadCounts integration test * feat: add GetUnreadCountsBatch integration test * feat: add Reminders integration test with create/query/update/delete * feat: add SendUserCustomEvent integration test Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: QueryTeamUsageStats integration test * feat: add ChannelBatchUpdate test (skips gracefully as Beta feature) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: add CRUDCallTypeOperations video integration test Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: add CreateCallWithMembers video integration test Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: add BlockUnblockUserFromCalls video integration test * feat: add SendCustomEvent video integration test * feat: add MuteAll video integration test * feat: mark MuteAll complete * feat: add MuteSomeUsers video integration test Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: add UpdateUserPermissions video integration test * feat: add DeactivateUser video integration test * feat: add CreateCallWithSessionTimer video integration test * feat: add UserBlocking video integration test * feat: add CreateCallWithBackstageAndJoinAhead integration test Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: add DeleteCall (soft) video integration test Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: add HardDeleteCall video integration test Implements hard delete call test using DeleteCallRequest { Hard = true }, verifies non-null TaskID and polls async task to completion via WaitForTask. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: add Teams video integration test * feat: add ExternalStorageOperations integration test * feat: add EnableCallRecordingAndBackstageMode integration test * feat: add DeleteRecordingsAndTranscriptions integration test * feat: add BanUnbanUser moderation integration test Adds ChatModerationIntegrationTests.cs with BanUnbanUser test that: - Bans a user at app level using ModerationClient.BanAsync - Verifies the ban via QueryBannedUsers chat API - Unbans via POST /api/v2/moderation/unban with target_user_id query param - Verifies ban is removed Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: add MuteUnmuteUser moderation integration test * feat: add FlagMessageAndUser moderation integration test * ci: add pre-release workflow and update changelog * feat: update by openapi refactor * test: chat and video clients * test: fine tuning --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 8d041b3 commit c1c90de

35 files changed

Lines changed: 25552 additions & 6136 deletions

.github/workflows/prerelease.yml

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
name: Pre-release
2+
3+
on:
4+
release:
5+
types: [prereleased]
6+
7+
env:
8+
DOTNET_VERSION: '9.0.x'
9+
10+
jobs:
11+
prerelease:
12+
name: 🚀 Pre-release
13+
runs-on: ubuntu-latest
14+
steps:
15+
- uses: actions/checkout@v4
16+
17+
- name: Resolve version
18+
run: |
19+
TAG="${{ github.event.release.tag_name }}"
20+
VERSION="${TAG#v}"
21+
echo "VERSION=$VERSION" >> $GITHUB_ENV
22+
23+
- name: Setup .NET
24+
uses: actions/setup-dotnet@v4
25+
with:
26+
dotnet-version: ${{ env.DOTNET_VERSION }}
27+
28+
- name: Restore dependencies
29+
run: dotnet restore
30+
31+
- name: Update version in project files
32+
run: |
33+
sed -i "s/<Version>.*<\/Version>/<Version>$VERSION<\/Version>/" src/stream-feed-net.csproj
34+
sed -i "s/private const string VersionName = \".*\";/private const string VersionName = \"$VERSION\";/" src/Client.cs
35+
36+
- name: Build
37+
run: dotnet build --no-restore --configuration Release
38+
39+
- name: Create NuGet package
40+
run: dotnet pack src/stream-feed-net.csproj --configuration Release --no-build --output ./packages
41+
42+
- name: Publish to NuGet
43+
env:
44+
NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }}
45+
run: |
46+
dotnet nuget push ./packages/*.nupkg \
47+
--api-key "$NUGET_API_KEY" \
48+
--source https://api.nuget.org/v3/index.json \
49+
--skip-duplicate \
50+
--no-symbols

.github/workflows/release.yml

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@ on:
1919
required: false
2020
default: false
2121
type: boolean
22+
use_current_version:
23+
description: 'Skip version bump and publish the version already in .csproj (version_bump is ignored)'
24+
required: false
25+
default: false
26+
type: boolean
2227

2328
env:
2429
DOTNET_VERSION: '9.0.x'
@@ -115,7 +120,14 @@ jobs:
115120
run: |
116121
CURRENT_VERSION="${{ steps.current_version.outputs.current_version }}"
117122
VERSION_BUMP="${{ needs.check-release.outputs.version_bump }}"
118-
123+
124+
# Publish whatever version is already set in .csproj, no bump
125+
if [ "${{ github.event.inputs.use_current_version }}" = "true" ]; then
126+
echo "new_version=$CURRENT_VERSION" >> $GITHUB_OUTPUT
127+
echo "Release version (current): $CURRENT_VERSION"
128+
exit 0
129+
fi
130+
119131
# If version was already bumped in a release PR, use that version
120132
if [ "$VERSION_BUMP" = "from_pr" ]; then
121133
NEW_VERSION="$CURRENT_VERSION"

.gitignore

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# Build output
2+
[Bb]in/
3+
[Oo]bj/
4+
[Oo]ut/
5+
6+
# NuGet
7+
*.nupkg
8+
*.snupkg
9+
.nuget/
10+
packages/
11+
12+
# Visual Studio / Rider
13+
.vs/
14+
*.user
15+
*.suo
16+
*.userosscache
17+
*.sln.docstates
18+
*.userprefs
19+
_ReSharper*/
20+
*.[Rr]e[Ss]harper
21+
*.DotSettings.user
22+
23+
# Build results
24+
[Dd]ebug/
25+
[Rr]elease/
26+
x64/
27+
x86/
28+
[Ww][Ii][Nn]32/
29+
[Aa][Rr][Mm]/
30+
[Aa][Rr][Mm]64/
31+
bld/
32+
[Ll]og/
33+
[Ll]ogs/
34+
35+
# Test results
36+
[Tt]est[Rr]esult*/
37+
[Bb]uild[Ll]og.*
38+
*.TestAdapter.dll
39+
TestResult.xml
40+
41+
# OS files
42+
.DS_Store
43+
Thumbs.db
44+
45+
.env

CHANGELOG.md

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# Changelog
2+
3+
All notable changes to this project will be documented in this file.
4+
5+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7+
8+
## [6.0.0-beta.1] - 2026-02-27
9+
10+
### Breaking Changes
11+
12+
- Type names across all products now follow the OpenAPI spec naming convention: response types are suffixed with `Response`, input types with `Request`. See [MIGRATION_v5_to_v6.md](./MIGRATION_v5_to_v6.md) for the complete rename mapping.
13+
- `Event` (WebSocket envelope type) renamed to `WSEvent`. Base event type renamed from `BaseEvent` to `Event` (with field `type` instead of `T`).
14+
- Event composition changed from monolithic `*Preset` embeds to modular `Has*` types.
15+
- `Pager` renamed to `PagerResponse` and migrated from offset-based to cursor-based pagination (`next`/`prev` tokens).
16+
17+
### Added
18+
19+
- Full product coverage: Chat, Video, Moderation, and Feeds APIs are all supported in a single SDK.
20+
- **Feeds**: activities, feeds, feed groups, follows, comments, reactions, collections, bookmarks, membership levels, feed views, and more.
21+
- **Video**: calls, recordings, transcription, closed captions, SFU, call statistics, user feedback analytics, and more.
22+
- **Moderation**: flags, review queue, moderation rules, config, appeals, moderation logs, and more.
23+
- Push notification types, preferences, and templates.
24+
- Webhook support: `WHEvent` envelope class for receiving webhook payloads, utility methods for decoding and verifying webhook signatures, and a full set of individual typed event classes for every event across all products (Chat, Video, Moderation, Feeds) usable as discriminated event types.
25+
- Cursor-based pagination across all list endpoints.
26+
27+
## [5.1.0] - 2026-02-18
28+
29+
## [4.0.0] - 2025-09-30
30+
31+
## [3.1.0] - 2025-07-15
32+
33+
## [3.0.0] - 2025-06-01
34+
35+
## [2.1.0] - 2025-03-15

MIGRATION_v5_to_v6.md

Lines changed: 209 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,209 @@
1+
# Migration Guide: v5 → v6
2+
3+
This guide covers all breaking changes when upgrading from `getstream-net` v5 to v6.
4+
5+
## Overview
6+
7+
v6 is a full OpenAPI-aligned release. The primary change is a **systematic type renaming**: types that appear in API responses now have a `Response` suffix, and input types have a `Request` suffix. There are no removed features — all functionality from v5 is available in v6. Additionally, v6 adds complete coverage of the **Feeds**, **Video**, and **Moderation** product APIs.
8+
9+
## Installation
10+
11+
Update the NuGet package:
12+
13+
```bash
14+
dotnet add package Stream.NET --version 6.*
15+
```
16+
17+
Or via the NuGet Package Manager:
18+
19+
```
20+
Install-Package Stream.NET -Version 6.*
21+
```
22+
23+
## Naming Conventions
24+
25+
All types use `PascalCase` (standard C# convention). The general rules:
26+
27+
- Types returned in API responses: `Foo``FooResponse`
28+
- Types used as API inputs: `Foo``FooRequest`
29+
- Some moderation action payloads: `FooRequest``FooRequestPayload`
30+
31+
## Breaking Changes
32+
33+
### Common / Shared Types
34+
35+
| v5 | v6 | Notes |
36+
| --- | --- | --- |
37+
| `ApplicationConfig` | `AppResponseFields` | App configuration in responses |
38+
| `ChannelPushPreferences` | `ChannelPushPreferencesResponse` | Per-channel push settings |
39+
| `Device` | `DeviceResponse` | Device data (push, voip) |
40+
| `Event` | `WSEvent` | WebSocket event envelope |
41+
| `FeedsPreferences` | `FeedsPreferencesResponse` | Feeds push preferences |
42+
| `ImportV2Task` | `ImportV2TaskItem` | V2 import task |
43+
| `OwnUser` | `OwnUserResponse` | Authenticated user data |
44+
| `Pager` | `PagerResponse` | Now cursor-based (`next`/`prev`) |
45+
| `PushPreferences` | `PushPreferencesResponse` | Push preferences |
46+
| `PushTemplate` | `PushTemplateResponse` | Push template |
47+
| `PrivacySettings` | `PrivacySettingsResponse` | Typing indicators, read receipts |
48+
| `RateLimitInfo` | `LimitInfoResponse` | Rate limit info |
49+
| `SortParam` | `SortParamRequest` | Sort parameter for queries |
50+
| `User` | `UserResponse` | Full user in responses |
51+
| `UserBlock` | `BlockedUserResponse` | Blocked user details |
52+
| `UserCustomEvent` | `CustomEvent` | Custom user event |
53+
| `UserMute` | `UserMuteResponse` | User mute details |
54+
55+
### Event System
56+
57+
| Before (v5) | After (v6) | Notes |
58+
| --- | --- | --- |
59+
| `BaseEvent` (field `T`) | `Event` (field `type`) | Base event type |
60+
| `Event` (WS envelope) | `WSEvent` | WebSocket event wrapper |
61+
| `*Preset` embeds | `Has*` composition types | e.g., `HasChannel`, `HasMessage` |
62+
|| `WHEvent` | New webhook envelope type |
63+
64+
New composition types: `HasOwnUser`, `HasUserCommonFields`, `HasUserPrivacyFields`, `HasOptionalUserCommonFields`, `HasChannel`, `HasOptionalChannel`, `HasMessage`, `HasOptionalMessage`, `HasThreadParticipants`, `HasChannelTypeAndID`.
65+
66+
### Chat Types
67+
68+
| v5 | v6 | Notes |
69+
| --- | --- | --- |
70+
| `Campaign` | `CampaignResponse` | |
71+
| `CampaignStats` | `CampaignStatsResponse` | |
72+
| `Channel` | `ChannelResponse` | |
73+
| `ChannelConfigFields` | `ChannelConfigWithInfo` | Channel config + commands/grants |
74+
| `ChannelMember` | `ChannelMemberResponse` | |
75+
| `ChannelTypeConfigWithInfo` | `ChannelTypeConfig` | |
76+
| `ConfigOverrides` | `ConfigOverridesRequest` | |
77+
| `DraftMessage` / `DraftMessagePayload` | `DraftResponse` | Two types merged into one |
78+
| `Message` | `MessageResponse` | |
79+
| `MessageReminder` | `ReminderResponseData` | |
80+
| `PendingMessage` | `PendingMessageResponse` | |
81+
| `Poll` | `PollResponse` | |
82+
| `PollOption` | `PollOptionResponse` | |
83+
| `PollVote` | `PollVoteResponse` | |
84+
| `Reaction` | `ReactionResponse` | |
85+
| `ReadState` | `ReadStateResponse` | |
86+
| `Thread` | `ThreadResponse` | |
87+
88+
### Video Types
89+
90+
| v5 | v6 | Notes |
91+
| --- | --- | --- |
92+
| `AudioSettings` | `AudioSettingsResponse` | |
93+
| `BackstageSettings` | `BackstageSettingsResponse` | |
94+
| `BroadcastSettings` | `BroadcastSettingsResponse` | |
95+
| `Call` | `CallResponse` | |
96+
| `CallEgress` | `EgressResponse` | |
97+
| `CallMember` | `MemberResponse` | Note: not `CallMemberResponse` |
98+
| `CallParticipant` | `CallParticipantResponse` | |
99+
| `CallParticipantFeedback` | *(removed)* | Use `CollectUserFeedbackRequest` |
100+
| `CallSession` | `CallSessionResponse` | |
101+
| `CallSettings` | `CallSettingsResponse` | |
102+
| `CallType` | `CallTypeResponse` | |
103+
| `EventNotificationSettings` | `EventNotificationSettingsResponse` | |
104+
| `FrameRecordSettings` | `FrameRecordingSettingsResponse` | `Recording` inserted in name |
105+
| `GeofenceSettings` | `GeofenceSettingsResponse` | |
106+
| `HLSSettings` | `HLSSettingsResponse` | |
107+
| `IndividualRecordSettings` | `IndividualRecordingSettingsResponse` | `Recording` inserted in name |
108+
| `IngressSettings` | `IngressSettingsResponse` | |
109+
| `IngressSource` | `IngressSourceResponse` | |
110+
| `IngressAudioEncodingOptions` | `IngressAudioEncodingResponse` | Shortened name |
111+
| `IngressVideoEncodingOptions` | `IngressVideoEncodingResponse` | Shortened name |
112+
| `IngressVideoLayer` | `IngressVideoLayerResponse` | |
113+
| `LimitsSettings` | `LimitsSettingsResponse` | |
114+
| `NotificationSettings` | `NotificationSettingsResponse` | |
115+
| `RawRecordSettings` | `RawRecordingSettingsResponse` | `Recording` inserted in name |
116+
| `RecordSettings` | `RecordSettingsResponse` | |
117+
| `RingSettings` | `RingSettingsResponse` | |
118+
| `RTMPSettings` | `RTMPSettingsResponse` | |
119+
| `ScreensharingSettings` | `ScreensharingSettingsResponse` | |
120+
| `SessionSettings` | `SessionSettingsResponse` | |
121+
| `SIPCallConfigs` | `SIPCallConfigsResponse` | |
122+
| `SIPCallerConfigs` | `SIPCallerConfigsResponse` | |
123+
| `SIPDirectRoutingRuleCallConfigs` | `SIPDirectRoutingRuleCallConfigsResponse` | |
124+
| `SIPInboundRoutingRules` | `SIPInboundRoutingRuleResponse` | Plural → singular |
125+
| `SIPPinProtectionConfigs` | `SIPPinProtectionConfigsResponse` | |
126+
| `SIPTrunk` | `SIPTrunkResponse` | |
127+
| `ThumbnailsSettings` | `ThumbnailsSettingsResponse` | |
128+
| `TranscriptionSettings` | `TranscriptionSettingsResponse` | |
129+
| `VideoSettings` | `VideoSettingsResponse` | |
130+
131+
### Moderation Types
132+
133+
| v5 | v6 | Notes |
134+
| --- | --- | --- |
135+
| `ActionLog` | `ActionLogResponse` | |
136+
| `Appeal` | `AppealItemResponse` | |
137+
| `AutomodDetails` | `AutomodDetailsResponse` | |
138+
| `Ban` | `BanInfoResponse` | |
139+
| `BanOptions` | *(removed)* | Merged into `BanActionRequestPayload` |
140+
| `BanActionRequest` | `BanActionRequestPayload` | |
141+
| `BlockActionRequest` | `BlockActionRequestPayload` | |
142+
| `BlockedMessage` | *(removed)* | Internal only |
143+
| `CustomActionRequest` | `CustomActionRequestPayload` | |
144+
| `DeleteMessageRequest` | `DeleteMessageRequestPayload` | |
145+
| `DeleteUserRequest` | `DeleteUserRequestPayload` | |
146+
| `EntityCreator` | `EntityCreatorResponse` | |
147+
| `Evaluation` | `EvaluationResponse` | |
148+
| `FeedsModerationTemplate` | `QueryFeedModerationTemplate` | No `Response` suffix |
149+
| `FeedsModerationTemplateConfig` | `FeedsModerationTemplateConfigPayload` | |
150+
| `Flag` | *(removed)* | Use `ModerationFlagResponse` |
151+
| `Flag2` | `ModerationFlagResponse` | |
152+
| `FlagDetails` | `FlagDetailsResponse` | |
153+
| `FlagFeedback` | `FlagFeedbackResponse` | |
154+
| `FlagMessageDetails` | `FlagMessageDetailsResponse` | |
155+
| `FlagReport` | *(removed)* | Internal only |
156+
| `FutureChannelBan` | `FutureChannelBanResponse` | |
157+
| `MarkReviewedRequest` | `MarkReviewedRequestPayload` | |
158+
| `Match` | `MatchResponse` | |
159+
| `ModerationActionConfig` | `ModerationActionConfigResponse` | |
160+
| `ModerationBulkSubmitActionRequest` | `BulkSubmitActionRequest` | `Moderation` prefix dropped |
161+
| `ModerationConfig` | `ConfigResponse` | |
162+
| `ModerationFlags` | *(removed)* | Use `List<ModerationFlagResponse>` |
163+
| `ModerationLog` | *(removed)* | Use `ActionLogResponse` |
164+
| `ModerationLogResponse` | *(removed)* | Use `QueryModerationLogsResponse` |
165+
| `ModerationUsageStats` | `ModerationUsageStatsResponse` | |
166+
| `RestoreActionRequest` | `RestoreActionRequestPayload` | |
167+
| `ReviewQueueItem` | `ReviewQueueItemResponse` | |
168+
| `Rule` | `RuleResponse` | |
169+
| `ShadowBlockActionRequest` | `ShadowBlockActionRequestPayload` | |
170+
| `Task` | `TaskResponse` | |
171+
| `Trigger` | `TriggerResponse` | |
172+
| `UnbanActionRequest` | `UnbanActionRequestPayload` | |
173+
| `UnblockActionRequest` | `UnblockActionRequestPayload` | |
174+
| `VideoEndCallRequest` | `VideoEndCallRequestPayload` | |
175+
| `VideoKickUserRequest` | `VideoKickUserRequestPayload` | |
176+
177+
### Feeds Types
178+
179+
| v5 | v6 | Notes |
180+
| --- | --- | --- |
181+
| `Activity` | `ActivityResponse` | |
182+
| `ActivityFeedback` | `ActivityFeedbackRequest` | Request-only (no `Response` suffix) |
183+
| `ActivityMark` | `MarkActivityRequest` | |
184+
| `ActivityPin` | `ActivityPinResponse` | |
185+
| `AggregatedActivity` | `AggregatedActivityResponse` | |
186+
| `Bookmark` | `BookmarkResponse` | |
187+
| `BookmarkFolder` | `BookmarkFolderResponse` | |
188+
| `Collection` | `CollectionResponse` | |
189+
| `Comment` | `CommentResponse` | |
190+
| `CommentMedia` | *(removed)* | Embedded inline in `CommentResponse` |
191+
| `CommentMention` | *(removed)* | Embedded inline in `CommentResponse` |
192+
| `DenormalizedFeedsReaction` | *(removed)* | Internal only |
193+
| `Feed` | `FeedResponse` | |
194+
| `FeedGroup` | `FeedGroupResponse` | |
195+
| `FeedMember` | `FeedMemberResponse` | |
196+
| `FeedsReaction` | `FeedsReactionResponse` | |
197+
| `FeedsReactionGroup` | `FeedsReactionGroupResponse` | |
198+
| `FeedSuggestion` | `FeedSuggestionResponse` | |
199+
| `FeedView` | `FeedViewResponse` | |
200+
| `FeedVisibilityInfo` | `FeedVisibilityResponse` | |
201+
| `Follow` | `FollowResponse` | |
202+
| `MembershipLevel` | `MembershipLevelResponse` | |
203+
| `ThreadedComment` | `ThreadedCommentResponse` | |
204+
205+
## Getting Help
206+
207+
- [Stream documentation](https://getstream.io/docs/)
208+
- [GitHub Issues](https://github.com/GetStream/getstream-net/issues)
209+
- [Stream support](https://getstream.io/contact/support/)

generate.sh

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ fi
1212
set -ex
1313

1414
# cd in API repo, generate new spec and then generate code from it
15-
( cd $SOURCE_PATH ; make openapi; go run ./cmd/chat-manager openapi generate-client --language dotnet --spec ./releases/v2/feeds-serverside-api.yaml --output $DST_PATH )
15+
( cd $SOURCE_PATH ; make openapi; go run ./cmd/chat-manager openapi generate-client --language dotnet --spec ./releases/v2/serverside-api.yaml --output $DST_PATH )
1616

1717
# Comment out problematic lines from openapi generation
1818
sed -i '' 's/\[JsonPropertyName("delete_activity")\]/\/\/ [JsonPropertyName("delete_activity")]/' $DST_PATH/src/requests.cs
@@ -29,3 +29,7 @@ sed -i '' 's/UploadFile/FileUpload/g' $DST_PATH/src/feed.cs $DST_PATH/tests/Feed
2929
sed -i '' 's/UploadImage/ImageUpload/g' $DST_PATH/src/feed.cs $DST_PATH/tests/FeedIntegrationTests.cs $DST_PATH/src/CommonClient.cs
3030

3131
echo "Generated .NET SDK for feeds in $DST_PATH"
32+
33+
echo "Formatting code..."
34+
dotnet format
35+
echo "Finished"

0 commit comments

Comments
 (0)