All notable changes to this project will be documented in this file. See standard-version for commit guidelines.
- Typed error hierarchy for the Stream API per CHA-2958. New checked subclasses of the existing
StreamException:StreamApiException— HTTP 4xx/5xx with theAPIErrorenvelope parsed. Getters:getStatusCode,getCode,getMessage,getExceptionFields,isUnrecoverable,getRawResponseBody,getMoreInfo,getDetails. Theunrecoverableanddetailsfields were previously dropped on the floor.StreamRateLimitException— HTTP 429. Subclass ofStreamApiExceptionwithDuration getRetryAfter()populated fromRetry-After(RFC 7231 §7.1.3 integer seconds + HTTP-date).nullwhen header absent or unparseable.StreamTransportException— connection reset, timeout, DNS, TLS, etc. CarriesgetErrorType()matching the logging spec enum (connection_reset/timeout/dns_failure/tls_handshake_failed/unknown). Cause chain preserved.StreamTaskException— async task observed withstatus: "failed". CarriesgetTaskId,getErrorType,getDescription,getStackTraceText,getVersion. (getStackTraceTextrather thangetStackTraceto avoid colliding withThrowable.getStackTrace().)
StreamSDKClient.waitForTask(taskId)— main-source helper that polls the task endpoint to a terminal state. ReturnsGetTaskResponseoncompleted, throwsStreamTaskExceptiononfailed, throwsStreamTransportException(errorType=timeout)if the wait elapses (defaults: 1s poll, 60s timeout; overloaded with explicitDurations). Replaces the test-onlyChatTestBase.waitForTask(removed).- Webhook handling spec helpers (CHA-2961):
UnknownEventclass for forward-compat;gunzipPayload,decodeSqsPayload,decodeSnsPayloadprimitives;verifyAndParseWebhookHTTP composite;parseSqs/parseSnsqueue composites (no HMAC signature on the payload: queue transports rely on AWS IAM for authentication). Transparent gzip via magic-byte detection. - New instance methods on
StreamSDKClient:verifySignature(body, signature)andverifyAndParseWebhook(body, signature)that drop the api_secret parameter in favor of the client's stored secret. Dual API: staticWebhook.*methods remain available. - New instance methods on
StreamSDKClient:parseSqs(String),parseSns(String)(no signature; AWS IAM). - New exception class:
Webhook.InvalidWebhookException(unified, covering both signature mismatch and malformed payloads). - Conformance fixture suite under
src/test/resources/fixtures/webhooks/. - Explicit HTTP connection pool configuration (CHA-2956). New
StreamClientOptionsPOJO with fluent setters:setMaxConnsPerHost(int): default5setIdleTimeout(Duration): default55ssetConnectTimeout(Duration): default10ssetRequestTimeout(Duration): default30s(was10s; see Behavior changes)setHttpClient(OkHttpClient): escape hatch; bypasses the four knobs above Pass via the new constructor:new StreamSDKClient(apiKey, secret, options).
- Per-call
RequestTimeoutoverride onStreamRequest:request.callTimeout(Duration.ofSeconds(5)).execute(). - INFO log on client construction lists the effective pool config. Uses
java.util.logging.Logger(no new dependency).
- Exceptions remain checked (CHA-2958 §9.3). All new subclasses extend the existing checked
StreamException, sothrows StreamExceptiondeclarations continue to compile andcatch (StreamException)continues to handle every SDK error. StreamRequestnow throwsStreamApiException(orStreamRateLimitExceptionfor 429) for HTTP-response errors, andStreamTransportExceptionfor IO failures. The static type on declarations is stillStreamException— these are subclasses. The staticStreamException.build(Throwable)factory continues to wrap into a baseStreamException(the request path classifies transport failures directly so this factory is no longer auto-routed).StreamException.getResponseData()is still populated on API exceptions for back-compat.- The
APIErrorenvelope parser (formerlyStreamException.ResponseData) gained the previously-droppeddetailsandunrecoverablefields. - Default per-call
RequestTimeoutis now30s(was10s). Aligns with CHA-2956 cross-SDK contract. The previous10scame from the hardcodedtimeout = 10000ms inStreamHTTPClient. To keep the old ceiling, passnew StreamClientOptions().setRequestTimeout(Duration.ofSeconds(10)). - Default idle-connection lifetime now
55s(was59svia theSTREAM_API_CONNECTION_MAX_AGEenv var path). 55s sits 5s below the typical 60s LB idle timeout for safer eviction.MaxConnsPerHostdefault is unchanged at5. - No other breaking changes. Existing
StreamSDKClient(apiKey, secret),StreamSDKClient(apiKey, secret, OkHttpClient), andStreamSDKClient(Properties)constructors are preserved.
7.2.0 (2026-04-30)
7.1.0 (2026-04-10)
- allow users to provide a custom OkHttpClient (780443e)
7.0.0 (2026-03-31)
- regenerate from latest OpenAPI spec, keep only retention runs test (2c7e910)
- apply spotless formatting to generated code (e593fce)
- remove trailing blank line for spotless (6b300f7)
- use lowercase builder method for limit field (841e0cb)
6.1.0 (2026-03-20)
6.0.1 (2026-03-19)
6.0.0 (2026-03-05)
- Type names across all products now follow the OpenAPI spec naming convention: response types are suffixed with
Response, input types withRequest. See MIGRATION_v5_to_v6.md for the complete rename mapping. Event(WebSocket envelope type) renamed toWSEvent. Base event type renamed fromBaseEventtoEvent(with fieldtypeinstead ofT).- Event composition changed from monolithic
*Presetembeds to modularHas*types. Pagerrenamed toPagerResponseand migrated from offset-based to cursor-based pagination (next/prevtokens).
- Full product coverage: Chat, Video, Moderation, and Feeds APIs are all supported in a single SDK.
- Feeds: activities, feeds, feed groups, follows, comments, reactions, collections, bookmarks, membership levels, feed views and more.
- Video: calls, recordings, transcription, closed captions, SFU, call statistics, user feedback analytics, and more.
- Moderation: flags, review queue, moderation rules, config, appeals, moderation logs, and more.
- Push notification types, preferences, and templates.
- Webhook support:
WHEventenvelope 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. - Cursor-based pagination across all list endpoints.