3.65.5
(fix): Stop emitting the legacy queryParameters object at endpoint call sites. Query parameters
are now passed exclusively via queryString (produced by core.url.queryBuilder()).
The runtime Fetcher.Args.queryParameters field is retained (marked deprecated) for
custom-fetcher back-compat, and both queryParameters and queryString receive equivalent
log metadata and redaction of sensitive keys.
3.65.4
(chore): Bump @fern-api/generator-cli to 0.9.13, which fixes the publish of 0.9.12
(autoversion pipeline + @fern-api/replay 0.12.0) by marking @boundaryml/baml
as external in the generator-cli CLI bundle so esbuild no longer tries to
statically resolve baml’s platform-specific native bindings.
3.65.3
(chore): Bump @fern-api/generator-cli to 0.9.12, which ships the FER-9980 autoversion
pipeline (AutoVersionStep runs between the [fern-generated] commit and replay
apply, diffing pure generator output across runs to drive a semver bump and
changelog entry via FAI) and pins @fern-api/replay to 0.12.0.
3.65.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.
3.65.1
(chore): Wire the generator runtime into Sentry so internal generator errors are
reported with full context. User-facing failures (config, validation, auth,
network, environment) remain unreported. No change to generated output.
3.65.0
(feat): Add clientDefault support for headers, query parameters, and path
parameters. When a parameter has a clientDefault value (set via the
x-fern-default OpenAPI extension), the generated SDK uses that value
as a fallback when the caller does not provide one. Parameters with
clientDefault become optional in the client constructor and endpoint
signatures.
3.64.2
(fix): Read the SDK version and package name from the IR’s publishConfig when
available, not just for self-hosted orgs. This lets --version flow through
to the generated package.json and X-Fern-SDK-Version header when the
generator is invoked with output.location: local-file-system (where the
generator exec output mode is downloadFiles and does not itself carry a
version).
3.64.1
(chore): Bump @fern-api/generator-cli to 0.9.10 which upgrades @fern-api/replay to 0.11.0
and only pushes the fern-generation-base tag when replay has unresolved conflicts.
3.64.0
(feat): Add queryBuilder() for query parameter serialization with per-parameter format control.
The generator now emits a fluent builder pattern (core.url.queryBuilder()) for query string
construction, where each parameter’s serialization format is decided at code-gen time via
.add(key, value, { style: "comma" }). OpenAPI query parameters with explode: false use
the comma style to produce comma-separated values (e.g., tags=a,b,c).
3.63.8
(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.
3.63.7
(fix): Fix per-endpoint server overrides being ignored when top-level servers
define multiple base URLs with x-fern-server-name. Endpoints now correctly
resolve to their specified server URL instead of always using the default.
3.63.6
(fix): Fix OAuth token request to include literal custom properties (e.g., grant_type)
from the token endpoint request. Previously, only client_id and client_secret
were passed, causing TypeScript compilation errors for APIs that require
additional literal properties like grant_type on the token request.
3.63.5
(fix): Support inferred OAuth auth with form-encoded (application/x-www-form-urlencoded) token endpoints.
Previously, the generator crashed with “Cannot get exported name for request wrapper” when the
token endpoint used a justRequestBody shape instead of a wrapper shape.
3.63.4
(fix): Propagate license config to the license field in generated
package.json when publishing to npm registries.
3.63.3
(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, preventing empty objects from being
returned for union fields like options in generated code snippets.
3.63.1
(fix): Fix wire test expected response mismatch when noSerdeLayer is enabled and
the IR example shape contains fewer properties than the JSON example (e.g. for
inline types). The mock server sends the full raw JSON body, but the expected
assertion was built from the typed example which only included a subset of
properties. The test generator now uses the raw response body as the expected
value when noSerdeLayer is enabled, matching the SDK’s pass-through behavior.
3.63.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.
3.62.1
(fix): Fix incorrect import paths in generated test files when using a custom
package path (e.g. src/management). Multi-line imports in test files
like makeRequest.test.ts were emitting ../../../src/management/core/...
instead of ../../../core/..., causing the import to resolve to a
nonexistent path.
3.62.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.
3.61.1
(feat): Propagate the original error as cause on the SDK error class using the
ES2022 Error.cause standard. When a custom fetcher throws (e.g. network
failure, DNS issues, or custom logic), the thrown error is now preserved as
error.cause on the resulting SDK error, giving consumers access to the
full stack trace and any custom properties from the original error.
3.60.9
(fix): Fix wire test generator emitting pagination assertions (hasNextPage, getNextPage)
for endpoints whose results property type is a named alias to a list rather than
a direct list type. The client generator does not produce a Page object in this case,
so the test was calling methods that don’t exist on the response. The test generator
now checks that the results property value type is a concrete list (or optional/nullable
wrapping a list) before emitting Page-specific assertions, matching the client
generator’s behavior.