Skip to content

Commit b412461

Browse files
mogitaclaude
andauthored
[CHA-1578] refactor: code generated from openapi specs (#32)
* feat: update by openapi refactor * test: update types for openapi refactor * test: fix formatting * feat: update by openapi refactor * feat: update by openapi refactor * fix: use the correct name of stop campaign * feat: add ChatTestBase with chat integration test helpers Adds ChatTestBase.java extending BasicTest with helpers for: - createTestUsers(n): create n users with unique IDs - createTestChannel(creatorId): create messaging channel - createTestChannelWithMembers(creatorId, memberIds): create channel with members - sendTestMessage(type, id, userId, text): send message, return messageId - deleteUsersWithRetry(userIds): hard-delete with rate-limit retry - waitForTask(taskId): poll async task until completed/failed - randomString(n): generate random alphanumeric string Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: UpsertUsers test for Java SDK * feat: add QueryUsers integration test Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: QueryUsersWithOffsetLimit test for Java SDK * feat: PartialUpdateUser - set custom fields and unset country * feat: BlockUnblockUser integration test for chat users * feat: DeactivateReactivateUser Java integration test * feat: add DeleteUsers integration test Create 2 users, delete them via deleteUsers API with rate-limit retry, capture task_id from response, and poll waitForTask until completed. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: ExportUser - export a user and verify response * feat: add CreateGuest test to ChatUserIntegrationTest * feat: UpsertUsersWithRoleAndTeamsRole test for Java SDK * feat: PartialUpdateUserWithTeam - partial update user to add teams and teams_role * feat: add UpdatePrivacySettings integration test Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: PartialUpdatePrivacySettings integration test for Java SDK Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: QueryUsersWithDeactivated - deactivate one user, query without/with include_deactivated * feat: DeactivateUsersPlural - deactivate multiple users async task (Java SDK) * feat: add UserCustomData integration test Add testUserCustomData to ChatUserIntegrationTest.java - creates a user with custom fields (favorite_color, age, tags) via updateUsers, verifies persistence in both the create response and a subsequent queryUsers call. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: add ChatChannelIntegrationTest with CreateChannelWithID test Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: CreateChannelWithMembers integration test * feat: add CreateDistinctChannel integration test * feat: add QueryChannels integration test * feat: UpdateChannel integration test for Java SDK * feat: add PartialUpdateChannel integration test * feat: add DeleteChannel integration test * feat: add HardDeleteChannels integration test * feat: AddRemoveMembers channel integration test * feat: add QueryMembers integration test for Java SDK * feat: InviteAcceptReject channel integration test * feat: HideShowChannel integration test * feat: TruncateChannel integration test * feat: add FreezeUnfreezeChannel integration test * feat: add MarkReadUnread channel integration test * feat: add MuteUnmuteChannel integration test Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: add MemberPartialUpdate integration test * feat: AssignRoles - assign channel_moderator role, verify via QueryMembers * feat: add AddDemoteModerators integration test * feat: add MarkUnreadWithThread channel integration test * feat: TruncateWithOptions - truncate channel with message, skip_push, hard_delete * feat: add PinUnpinChannel integration test * feat: ArchiveUnarchiveChannel integration test * feat: add AddMembersWithRoles integration test * feat: MessageCount - send message, query channel, verify message_count >= 1 * feat: SendChannelEvent - send typing.start event in channel * feat: add FilterTags channel integration test Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: add MessageCountDisabled channel integration test * feat: add MarkUnreadWithTimestamp integration test Add testMarkUnreadWithTimestamp to ChatChannelIntegrationTest.java. Sends a message, extracts createdAt timestamp, and marks channel unread using the message timestamp (messageTimestamp field) for a member user. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: add HideForCreator channel integration test Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: UploadAndDeleteFile - upload text file to channel, verify URL, delete Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: UploadAndDeleteImage channel integration test * feat: SendAndGetMessage - send message, get by ID, verify text * feat: add GetManyMessages integration test * feat: add UpdateMessage integration test Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: add PartialUpdateMessage integration test * feat: add DeleteMessage and HardDeleteMessage integration tests Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: add PinUnpinMessage integration test * feat: TranslateMessage integration test * feat: ThreadReply - send parent, send reply with parent_id, get replies * feat: add SearchMessages integration test * feat: add SilentMessage integration test * feat: add testPendingMessage integration test * feat: add QueryMessageHistory and QueryMessageHistorySort tests Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: add testSkipEnrichUrl integration test * feat: add testKeepChannelHidden message integration test * feat: add UndeleteMessage integration test (skip gracefully if undeleted_by missing) * feat: RestrictedVisibility message test (skip if not enabled) * feat: add DeleteMessageForMe integration test * feat: PinExpiration - pin with 3s expiry, wait 4s, verify expired * feat: add SystemMessage integration test * feat: add PendingFalse integration test for ChatMessageIntegrationTest * feat: add SearchWithMessageFilters integration test Port SearchWithMessageFilters test from getstream-go reference: creates a channel, sends 2 messages with a unique term, waits 2s for indexing, searches using message_filter_conditions with $q operator, verifies at least 2 results returned. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: add testSearchQueryAndMessageFiltersError integration test * feat: add SearchOffsetAndSortError integration test The API now allows using offset with sort (no error expected). Test verifies search with offset=0 + sort by created_at succeeds. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: add SearchOffsetAndNextError test to ChatMessageIntegrationTest * feat: add ChannelRoleInMember test to ChatMessageIntegrationTest * feat: add ChatReactionIntegrationTest with SendAndGetReactions, DeleteReaction, EnforceUniqueReaction * feat: add CreateAndQueryPoll integration test for Java SDK Create ChatPollsIntegrationTest with testCreateAndQueryPoll test that creates a poll with options, queries it by ID, and verifies the response. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: add CastPollVote integration test to ChatPollsIntegrationTest Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: CreateListDeleteDevice test in ChatMiscIntegrationTest * feat: CreateListDeleteBlocklist integration test * feat: CreateListDeleteCommand - Java SDK misc chat test * feat: add CreateUpdateDeleteChannelType integration test * feat: ListChannelTypes - list all channel types, verify default types present * feat: ListPermissions integration test * feat: add CreatePermission and GetPermission integration tests - testCreatePermission: skips gracefully since CreatePermission is marked Ignore:true in the backend spec and is not in the generated SDK - testGetPermission: verifies the "create-channel" well-known permission can be retrieved by ID with correct fields Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: add QueryBannedUsers integration test to ChatMiscIntegrationTest Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: add MuteUnmuteUser integration test to ChatMiscIntegrationTest * feat: add GetAppSettings integration test to ChatMiscIntegrationTest Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: ExportChannels integration test * feat: add testThreads integration test for query and get thread operations Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: add GetUnreadCounts integration test to ChatMiscIntegrationTest * feat: add GetUnreadCountsBatch integration test * feat: add Reminders test to ChatMiscIntegrationTest (skip if not enabled) * feat: add SendUserCustomEvent integration test Add testSendUserCustomEvent to ChatMiscIntegrationTest - creates a user and sends a custom event of type "friendship_request" with custom data. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: add QueryTeamUsageStats integration test Uses StreamRequest directly since the method is not yet in the generated Chat service. Calls POST /api/v2/chat/stats/team_usage with skip logic if the endpoint is unavailable on the test app. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: add ChannelBatchUpdate integration test Implements testChannelBatchUpdate in ChatMiscIntegrationTest.java. ChannelBatchUpdate is behind Beta in the backend spec, so the generated Chat service does not include the method. The test calls PUT /api/v2/chat/channels/batch directly via StreamRequest with ChannelBatchUpdateRequest (operation=addMembers, filter by cid $in). Skips gracefully with Assumptions.assumeTrue when the feature is not enabled on this app (the API returns "ChannelBatchUpdate failed with error: "). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: CRUDCallTypeOperations video integration test for Java SDK * feat: add CreateCallWithMembers video integration test * feat: BlockUnblockUserFromCalls video integration test * feat: add SendCustomEvent video integration test * feat: add MuteAll video integration test * feat: add MuteSomeUsers video integration test * feat: add UpdateUserPermissions video integration test * feat: add DeactivateUser video integration test * feat: add testCreateCallWithSessionTimer video integration test * feat: add UserBlocking video integration test * feat: CreateCallWithBackstageAndJoinAhead video integration test * feat: DeleteCall (soft) - soft delete call, verify not found * feat: HardDeleteCall video integration test Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: add Teams video integration test * feat: ExternalStorageOperations video integration test Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: EnableCallRecordingAndBackstageMode integration test * feat: add testDeleteRecordingsAndTranscriptions to VideoIntegrationTest * feat: add ModerationIntegrationTest with BanUnbanUser test Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: MuteUnmuteUser moderation integration test for Java SDK * feat: add FlagMessageAndUser moderation integration test Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * docs: update changelog * style: fix code formatting * ci: add pre-release workflow * feat: update by openapi refactor * fix: compilation error * style: fix code formatting * ci: pre-release by making a pre-release on github * feat: update by openapi refactor * feat: update by openapi refactor * test: chat and video clients --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent cfa7904 commit b412461

File tree

839 files changed

+14359
-477
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

839 files changed

+14359
-477
lines changed

.github/workflows/prerelease.yml

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
name: Pre-release
2+
3+
on:
4+
release:
5+
types: [prereleased]
6+
7+
jobs:
8+
Prerelease:
9+
name: 🚀 Pre-release
10+
runs-on: ubuntu-latest
11+
steps:
12+
- uses: actions/checkout@v3
13+
with:
14+
fetch-depth: 0
15+
16+
- name: Resolve version
17+
run: |
18+
TAG="${{ github.event.release.tag_name }}"
19+
if [ -n "$TAG" ]; then
20+
echo "VERSION=$TAG" >> $GITHUB_ENV
21+
else
22+
PROP=$(grep '^version=' gradle.properties | cut -d'=' -f2)
23+
if [ -n "$PROP" ]; then
24+
echo "VERSION=$PROP" >> $GITHUB_ENV
25+
else
26+
echo "❌ Could not determine version from tag or gradle.properties" && exit 1
27+
fi
28+
fi
29+
30+
- name: Setup JDK 17
31+
uses: actions/setup-java@v5.1.0
32+
with:
33+
distribution: 'corretto'
34+
java-version: '17'
35+
36+
- name: Setup Gradle
37+
uses: gradle/actions/setup-gradle@v4
38+
39+
- name: Publish to MavenCentral
40+
run: |
41+
./gradlew -Pversion=$VERSION publishToSonatype --no-daemon --max-workers 1 closeAndReleaseSonatypeStagingRepository
42+
env:
43+
STREAM_API_KEY: ${{ vars.STREAM_API_KEY }}
44+
STREAM_API_SECRET: ${{ secrets.STREAM_API_SECRET }}
45+
GPG_KEY_CONTENTS: ${{ secrets.GPG_KEY_CONTENTS }}
46+
OSSRH_USERNAME: ${{ secrets.OSSRH_USERNAME }}
47+
OSSRH_PASSWORD: ${{ secrets.OSSRH_PASSWORD }}
48+
SIGNING_KEY_ID: ${{ secrets.SIGNING_KEY_ID }}
49+
SIGNING_PASSWORD: ${{ secrets.SIGNING_PASSWORD }}
50+
SIGNING_SECRET_KEY_RING_FILE: ${{ secrets.SIGNING_SECRET_KEY_RING_FILE }}
51+
SONATYPE_STAGING_PROFILE_ID: ${{ secrets.SONATYPE_STAGING_PROFILE_ID }}
52+

.github/workflows/release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ jobs:
2121
script: |
2222
// Getting the release version from the PR source branch
2323
// Source branch looks like this: release-1.0.0
24-
const version = context.payload.pull_request.head.ref.split('-')[1]
24+
const version = context.payload.pull_request.head.ref.replace(/^release-/, '')
2525
core.exportVariable('VERSION', version)
2626
2727
- name: Setup JDK 17

CHANGELOG.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,25 @@
22

33
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
44

5+
## [6.0.0-beta.1](https://github.com/GetStream/stream-sdk-java/compare/5.0.1...6.0.0-beta.1) (2026-02-27)
6+
7+
### Breaking Changes
8+
9+
- 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.
10+
- `Event` (WebSocket envelope type) renamed to `WSEvent`. Base event type renamed from `BaseEvent` to `Event` (with field `type` instead of `T`).
11+
- Event composition changed from monolithic `*Preset` embeds to modular `Has*` types.
12+
- `Pager` renamed to `PagerResponse` and migrated from offset-based to cursor-based pagination (`next`/`prev` tokens).
13+
14+
### Added
15+
16+
- Full product coverage: Chat, Video, Moderation, and Feeds APIs are all supported in a single SDK.
17+
- **Feeds**: activities, feeds, feed groups, follows, comments, reactions, collections, bookmarks, membership levels, feed views, and more.
18+
- **Video**: calls, recordings, transcription, closed captions, SFU, call statistics, user feedback analytics, and more.
19+
- **Moderation**: flags, review queue, moderation rules, config, appeals, moderation logs, and more.
20+
- Push notification types, preferences, and templates.
21+
- 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.
22+
- Cursor-based pagination across all list endpoints.
23+
524
### [5.0.1](https://github.com/GetStream/stream-sdk-java/compare/5.0.0...5.0.1) (2026-02-11)
625

726
## [5.0.0](https://github.com/GetStream/stream-sdk-java/compare/4.1.1...5.0.0) (2026-02-03)

CONTRIBUTING.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,3 +120,7 @@ The job creates a pull request with the changelog. Check if it looks good.
120120
- Merge the pull request.
121121

122122
Once the PR is merged, it automatically kicks off another job which will upload the Gem to RubyGems.org and creates a GitHub release.
123+
124+
### Pre-releases
125+
126+
Push a tag (e.g. `1.0.0-beta.1`), then go to **GitHub Releases → Draft a new release**, select the tag, check **"Set as a pre-release"**, and publish. The CI job will trigger automatically and publish to MavenCentral.

MIGRATION_v5_to_v6.md

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

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,9 @@ call.getOrCreate(
9090
.build());
9191
```
9292

93+
> **Note:** When constructing models, always use the **builder pattern** (e.g. `UserRequest.builder().id("id").build()`).
94+
> While some generated models expose positional constructors (for example via Lombok's `@AllArgsConstructor`), their parameter order is not part of the public API and may change between releases; using positional constructors is therefore strongly discouraged and may break across SDK updates.
95+
9396
## Development
9497

9598
To run tests, create the `local.properties` file using the `local.properties.example` and adjust it to have valid API credentials:

generate.sh

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,13 @@ fi
1111
set -ex
1212

1313
# cd in API repo, generate new spec and then generate code from it
14-
( cd $SOURCE_PATH ; make openapi ; go run ./cmd/chat-manager openapi generate-client --language java --spec ./releases/v2/serverside-api.yaml --output ../stream-sdk-java/src/main/java/io/getstream )
14+
( cd $SOURCE_PATH ; make openapi ; go run ./cmd/chat-manager openapi generate-client --language java --spec ./releases/v2/serverside-api.yaml --output ../stream-sdk-java )
1515

16-
sed -i '' '/^ @JsonProperty("Role")$/N;/\n private String role;$/d' src/main/java/io/getstream/models/CallParticipant.java
16+
perl -i -0pe 's/ \@JsonProperty\("Role"\)\n private String role;\n//g' src/main/java/io/getstream/models/CallParticipant.java
1717

18-
# format generated code
19-
./gradlew spotlessApply
18+
# Clean up test files that may exist in main source from older generator versions
19+
# (generator now outputs tests directly to src/test/)
20+
rm -f src/main/java/io/getstream/WebhookTest.java
2021

21-
./gradlew build -x test
22+
# format generated code, clean stale Gradle/Spotless caches, then build
23+
./gradlew clean spotlessApply build -x test

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
version=5.0.1
1+
version=6.0.0-beta.1

0 commit comments

Comments
 (0)