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.