2.61.2
(chore): Bump @fern-api/generator-cli to 0.9.11. The GitHub pipeline step now creates
signed commits via the GitHub REST API (matching fiddle’s legacy InMemoryGitRepo
push path), restoring verified fern-api[bot] commits on replay-enabled orgs.
2.61.1
(fix): Emit a Body property of type System.IO.Stream on wrapped request records
for endpoints whose request body is bytes. Previously the endpoint client
method emitted Body = request.Body but the generated request record did
not declare a Body property, producing a CS1061 compile error on any
endpoint that combined a binary body with other wrapped parameters
(e.g. query parameters, headers, or path parameters).
2.61.0
(feat): Add offset-semantics config option. When set to "page-index", offset pagination increments by 1 each page instead of by the number of items returned ("item-index", the default).
2.60.2
(chore): Add crash reporting via Sentry to the generator runtime, and classify
thrown errors using the new shared GeneratorError taxonomy so user-facing
failures (config, validation, auth, network, environment) are kept distinct
from internal Fern bugs — only the latter are forwarded to Sentry. No
change to generated output.
2.60.1
(chore): Bump @fern-api/generator-cli to 0.9.8. Changelog URLs in generated PRs
now use the commit SHA instead of the PR branch name, keeping the link
valid after the branch is deleted or squash-merged.
2.59.6
(fix): Add domain-specific event properties (e.g. AssistantMessage, ChatMetadata,
AudioOutput) and UnknownMessage to the generated WebSocket client interface.
Previously, these events were only available on the concrete class, forcing
consumers to downcast from the interface type to access them.
2.59.5
(fix): Skip mock server test examples with empty string path parameters. An
empty path parameter causes the mock server to register a collapsed URL
(e.g. /v0/tools/version/1) while the SDK client sends a double-slash
URL (e.g. /v0/tools//version/1), resulting in a 404 from WireMock.
(fix): Fix dynamic snippet generation for literal types when generate-literals
(or experimental-readonly-constants) is enabled. Inline literal
properties now correctly omit the value (relying on the = new()
default initializer), and named literal alias types emit new TypeName()
instead of a raw string, preventing CS0029 compilation errors.
(fix): Fix file upload request properties declared as list<file> generating
a single FileParameter field instead of List<FileParameter>.
2.59.4
(fix): Add GetSingle() fallback to JsonElementComparer number comparison.
When two JSON numbers differ as decimals but match as singles, they
represent the same float32 value and are now considered equal. This
fixes mock server test failures for fields declared as format: float
where C#‘s System.Text.Json serializes System.Single with a shorter
decimal representation than the original JSON string (e.g.
0.10722749680280685 vs 0.1072275).
2.59.3
(fix): Fix mock server test and snippet generation to skip literal properties
in object initializers when generate-literals is enabled. Previously,
the generator emitted plain string/boolean assignments for TypeLiteral
properties, causing CS0029 compilation errors. Literal properties now
rely on their = new() default initializer.
2.59.2
(fix): Fix dynamic snippet generation failing with “Endpoint does not have an
example that matches the snippet” when the endpoint has examples but the
request is a plain EndpointSnippetRequest without an id. The guard now
only validates the example match when the snippet includes an id.
2.59.1
(fix): Fix undiscriminated union variant matching in dynamic snippets selecting
incorrect variants when errors are added during conversion. The matcher
now checks whether errors were added (via errors.size() > errorsBefore)
alongside the existing isNop check, and adds a missing nop check that
was causing the first variant to be unconditionally returned. This prevents
empty objects from being returned for union fields like options in
generated code snippets.
2.59.0
(feat): Expose HTTP response metadata on paginated endpoints. Page<TItem> now includes
StatusCode, Headers, and Response properties, giving users access to HTTP
status codes, response headers, and the full API response object for each page.
2.58.1
(fix): Fix dynamic snippet generation to include all required properties in
object initializers. Previously, required properties missing from the
example data were omitted, causing CS9035 compilation errors in C#.
Required properties now receive deterministic placeholder values when
not present in the snippet request.
2.58.0
(feat): Support omitting username or password from basic auth when configured via
usernameOmit or passwordOmit in the IR. Omitted fields are removed from
the SDK’s public API and treated as empty strings internally (e.g., omitting
password encodes username:, omitting username encodes :password). When
both are omitted, the Authorization header is skipped entirely.
2.56.6
(fix): Ensure extra-dependencies overrides take precedence over bundled dependency versions, preventing duplicate PackageReference entries in generated .csproj files.
2.56.5
(fix): Fix mock server test generation to omit null values for non-nullable
properties in inlined request bodies, matching the SDK’s
JsonIgnoreCondition.WhenWritingNull serialization behavior. When
enableExplicitNullableOptional is disabled (default), all nulls are
now unconditionally omitted from expected request JSON.
(fix): Fix pagination test build errors (CS8411) when generatePaginatedClients
is disabled. The test generator now checks the config flag before emitting
await foreach code, preventing attempts to iterate over plain response
types that do not implement IAsyncEnumerable.
2.56.4
(fix): Fix duplicate field error in wrapped request generation when an inlined
request body property has the same PascalCase name as a path parameter
(e.g., upload_request_id body property colliding with uploadRequestId
path parameter). When a collision is detected, the path parameter field
([JsonIgnore]) is skipped and the body property ([JsonPropertyName]) is
kept, so the single property serializes to both the URL path and the
JSON request body.
2.56.3
(chore): Remove legacy backslash escape in generated CI workflow’s NuGet publish
step now that Eta template engine does not interpret ${} syntax.
2.56.2
(fix): Make query-string and path parameter encoding RFC 3986 spec-compliant
with three distinct encoding contexts: path segments (pchar), query keys,
and query values. Each context now encodes exactly the characters that
RFC 3986 requires. Query keys exclude &, =, +, #; query values
exclude &, +, # (but allow =); path segments allow all
sub-delimiters plus : and @ (but encode / and ?). Path parameter
values are now percent-encoded via EncodePathSegment in
ValueConvert.ToPathParameterString. Previously, all contexts shared a
single character set and path parameters were not encoded.
2.56.1
(chore): Use a persistent CSharpier process for code formatting. Instead of
spawning a new process per format call, a single csharpier pipe-files
process is kept alive and files are piped to it on demand. This
eliminates repeated .NET startup overhead and significantly speeds up
formatting during SDK generation.
2.56.0
(feat): Add maxRetries custom config option to override the default maximum
number of retries for failed requests. The default remains 2 when not
specified.
2.57.0-rc.0
(feat): Upgrade to IR v66 which compresses the IR Name type, reducing IR size and increasing performance.
2.55.4
(fix): Fix C# compilation errors (CS0118) in generated subpackage clients
where a type name collides with a namespace segment. Type references
are now fully qualified to avoid ambiguity.
2.55.3
(chore): Upgrade WireMock.Net from 1.25.0 to 2.2.0 in generated test projects.
This is a test-only dependency and does not affect the shipped SDK.
2.55.2
(fix): Support multiple Basic Auth schemes with AuthSchemesRequirement.Any.
When an API defines more than one basic auth scheme (e.g.,
accountId/authToken and apiKey/apiKeySecret), the generated client now
produces conditional if/else if blocks that check which credential pair
was provided and sets the Authorization header accordingly. Previously,
only the first basic auth scheme was used.
2.55.1
(fix): Include extraProperties (AdditionalProperties) in WireMock mock server
response objects. Previously, object types with [JsonExtensionData]
additional properties were missing those properties in generated mock
responses, causing incomplete WireMock stubs.
2.55.0
(feat): Add Environments section to generated README showing how to select
different environments (production/sandbox) when initializing the client.