> This page is for SDKs.

> For clean Markdown content of this page, append .md to this URL. For the complete documentation index, see https://buildwithfern.com/learn/llms.txt.

## 4.30.3

**`(fix):`** SSE unions discriminated by the `event:` line (`x-fern-discriminator-context: protocol`) now parse
both variant styles: envelope variants (`{event, data: Payload}`) are built from the `data:` JSON,
and payload variants (the `data:` JSON itself) get the `event:` value injected as the discriminant.
The event name no longer has to be repeated inside the `data:` JSON.

## 4.30.2

**`(fix):`** The debug logger now lower-cases header names with `Locale.ROOT` when deciding which headers to
redact, in both the request and response log lines. Before, it used the JVM's default locale, so on a
Turkish or Azerbaijani JVM a header such as `AUTHORIZATION` or `X-API-KEY` lower-cased to a dotless `ı`,
missed the redaction list, and its value was logged in plain text. `LogLevel.fromString` now upper-cases
with `Locale.ROOT` too, so `fromString("info")` no longer throws on those locales.

## 4.30.1

**`(fix):`** Async clients no longer sleep on OkHttp dispatcher threads while waiting to retry. The retry is
scheduled after the backoff delay, so calls that are waiting to retry no longer hold OkHttp's
per-host request slots (5 by default) and delay unrelated calls. Cancelling the returned future
now stops the wait immediately and sends no further attempts.

**`(fix):`** Interrupting a synchronous call while it waits to retry now restores the thread's interrupt
flag and throws `InterruptedIOException`, instead of clearing the flag and throwing a generic
`IOException`.