Skip to content

Releases: fern-api/fern

3.22.3

16 Dec 00:46
7a5c4c9

Choose a tag to compare

feat(csharp): add support for inferred authentication scheme (#11109)

* feat(csharp): add support for inferred authentication scheme

Co-Authored-By: Niels Swimberghe <[email protected]>

* fix(csharp): fix TypeScript compile errors and update seed output for inferred auth

Co-Authored-By: Niels Swimberghe <[email protected]>

* fix(csharp): fix property naming in inferred auth request initializer

Use PascalCase property names (XApiKey, ClientId, ClientSecret) instead of
private field names (_xApiKey, _clientId, _clientSecret) when initializing
the token request object in InferredAuthTokenProvider.

Co-Authored-By: Niels Swimberghe <[email protected]>

* feat(csharp): implement inferred authentication support across SDK clients and tests

* seed

* seed

* Refactor authentication client initialization to include scope parameter

- Updated the SeedInferredAuthExplicitClient, SeedInferredAuthImplicitNoExpiryClient, and SeedWebsocketAuthClient constructors to accept an optional scope parameter.
- Modified example snippets and test cases to reflect the new constructor signature, ensuring consistent usage of "X-Api-Key", "client_id", "client_secret", and "scope".
- Adjusted README files and code snippets to demonstrate the updated client initialization.

* refactor: streamline token endpoint identification and credential extraction

* inferred updates

* fix(csharp): update authorization header handling to use async Func<ValueTask<string>> for non-blocking calls

* Update IR in csharp generator

* feat: update C# SDK and model to version 62, including auth examples

- Updated the C# model to version 62 in seed.yml.
- Updated the C# SDK to version 62 in seed.yml.
- Modified example files in inferred-auth-explicit, inferred-auth-implicit, inferred-auth-implicit-no-expiry, and websocket-inferred-auth to include new authentication parameters (xApiKey, clientId, clientSecret, scope).
- Updated BaseMockServerTest to reflect changes in header values for inferred-auth-implicit-api-key.
- Updated package.json files across multiple generators (Go, Java, Python, Ruby, Swift) to use dynamic-ir-sdk version 62.3.0.
- Adjusted pnpm-lock.yaml to reflect updated dependencies for dynamic-ir-sdk.
- Enhanced the BaseMockServerTestGenerator to update example values based on client instantiation.

* feat(csharp): implement thread-safe token handling and update IR version to 62

* feat(csharp): enhance token provider with error handling and caching logic

* feat: Implement RawClient for handling raw HTTP requests with retries and timeouts

- Added RawClient class for making raw HTTP requests to the API.
- Implemented methods for sending requests with retries and handling different content types.
- Introduced StreamRequest for streaming uploads.
- Created StringEnum interface and related extensions for better enum handling.
- Added ValueConvert utility for converting values to string for path and query parameters.
- Developed ApiClient and NestedClient for structured API interactions.
- Established NestedNoAuthClient for handling requests without authentication.
- Defined API specifications in YAML for inferred-auth-implicit and nested services.
- Configured project properties and dependencies in the .csproj file.

* Refactor code for improved readability and consistency

- Updated formatting in RawClient.ts, ReferencedEndpointRequest.ts, WrappedEndpointRequest.ts, EndpointSnippetsGenerator.ts, getEndpointReturnType.ts, and various error generators to enhance code clarity.
- Changed access modifiers from public to internal in InferredAuthTokenProvider classes across multiple projects to restrict visibility.
- Adjusted parameter formatting in several methods for better alignment and readability.
- Ensured consistent use of object destructuring in function calls throughout the codebase.
- Enhanced type reference handling in WebsocketClientGenerator and WrappedRequestGenerator for improved type safety.

* feat(csharp): refactor inferred auth handling to use collectInferredAuthCredentials utility

* Add JSON schema snapshots for authentication requests and responses

- Created schema for GetTokenRequest with required fields: client_id, client_secret, audience, and grant_type.
- Created schema for RefreshTokenRequest with required fields: client_id, client_secret, refresh_token, audience, and grant_type.
- Created schema for TokenResponse with required fields: access_token and expires_in.

* feat: add inferred auth endpoint paths for testing

* fix: update changelog entry type for inferred auth dynamic IR generation

* fix: update snapshot names for broken links and init tests for clarity

* Automated update of seed files

* chore(versions): update versioning for inferred auth improvements

* feat(seed): add inferred auth failure cases for FastAPI, Ruby SDK, and Swift SDK

* update snapshots, fix seed.yml

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: Niels Swimberghe <[email protected]>
Co-authored-by: Fern Support <[email protected]>
Co-authored-by: fern-support <[email protected]>

3.22.2

15 Dec 22:36
9b6efe4

Choose a tag to compare

fix(openapi): preserve explicit null values in OpenAPI examples (#11160)

* chore(internal): add test for nullable balance_max in tiered rates

Co-Authored-By: Sarah Bawabe <[email protected]>

* test: add explicit example with null balance_max and regression assertions

- Add explicit response example with 3 tiers where the third tier has balance_max: null
- Add assertions to verify null value is preserved in the output
- Mark test as expected-failing (it.fails) since the bug currently replaces null with schema example value
- Once the bug is fixed, this test should be changed back to a normal it(...) test

Co-Authored-By: Sarah Bawabe <[email protected]>

* fix: preserve explicit null values in OpenAPI examples

The nullish coalescing operator (??) was treating explicit null values
as nullish and falling back to schema examples. Changed to use explicit
undefined check to preserve null values in examples.

This fixes the bug where balance_max: null in tiered rate structures
was being replaced with the schema example value (e.g., '100000000').

Co-Authored-By: Sarah Bawabe <[email protected]>

* test: update valtown snapshots to reflect null value preservation

The fix for preserving explicit null values in OpenAPI examples now
correctly shows profileImageUrl: null instead of the schema example,
and omits lastInsertRowid when not present in the example.

Co-Authored-By: Sarah Bawabe <[email protected]>

* chore: trigger CI re-run for updated PR title

Co-Authored-By: Sarah Bawabe <[email protected]>

* test: update balance-max-null snapshot after merge

Co-Authored-By: Sarah Bawabe <[email protected]>

* chore: add changelog entry for null value preservation fix (3.21.1)

Co-Authored-By: Sarah Bawabe <[email protected]>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

3.22.1

15 Dec 21:55
c104bf6

Choose a tag to compare

fix(cli): respect $ref sibling examples in OpenAPI 3.1+ parsing (#11238)

* fix(cli): respect $ref sibling examples in OpenAPI 3.1+ parsing

In OpenAPI 3.1+, $ref siblings are supported. When a property has both
$ref and sibling examples/example, the sibling examples should take
precedence over the referenced schema's examples.

This fix updates both the old parser (openapi-ir-parser) and the new
parser (v3-importer-commons) to check for sibling examples before
falling back to the resolved schema's examples.

Fixes the issue where property-level examples were being ignored in
favor of the referenced schema's examples.

Co-Authored-By: Sarah Bawabe <[email protected]>

* chore(cli): add version 3.21.2 for $ref sibling examples fix

Co-Authored-By: Sarah Bawabe <[email protected]>

* chore(cli): add code snippet to changelog entry for $ref sibling examples

Co-Authored-By: Sarah Bawabe <[email protected]>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

3.22.0

15 Dec 20:59
8659d85

Choose a tag to compare

chore(cli): bump versions.yml for fernignore sharing feature (#11239)

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

3.21.1

15 Dec 19:08
27b8123

Choose a tag to compare

feat(ruby): add `x-fern-server-name` support for multiple base URLs (…

3.21.0

15 Dec 16:17
75f4227

Choose a tag to compare

feat(cli): add custom page actions (#11221)

* chore(cli): add custom page actions

* support slug, domain, and url

* feat(cli): add support for locally-hosted icons in custom page actions

Co-Authored-By: Catherine Deskur <[email protected]>

* update description

* update description

* add version

---------

Co-authored-by: fern-bot <[email protected]>
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

3.20.0

15 Dec 03:15
125af40

Choose a tag to compare

feat(openapi): add webhook response descriptions to IR (#11222)

* feat(openapi): add webhook response descriptions to IR

This PR adds support for webhook response descriptions by:
1. Adding response field to OpenAPI IR Webhook type
2. Adding response/response-stream fields to Fern definition webhook schema
3. Converting OpenAPI webhook responses to Fern definition format
4. Converting Fern definition webhook responses to IR format

The descriptions are stored in the body-level docs fields (JsonResponse, FileDownloadResponse, etc.) rather than adding a response-level docs field to HttpResponse, which avoids widespread changes to endpoint handling.

Co-Authored-By: Sarah Bawabe <[email protected]>

* fix: add response and response-stream fields to webhook validator visitor

Co-Authored-By: Sarah Bawabe <[email protected]>

* chore: regenerate JSON schema files with webhook response fields

Co-Authored-By: Sarah Bawabe <[email protected]>

* feat(ir): add docs field to HttpResponse for webhook response descriptions

- Add extends: commons.WithDocs to HttpResponse in IR schema
- Regenerate IR SDK types for ir-types-latest
- Update convertWebhookGroup.ts to populate docs field on webhook responses
- Update convertHttpResponse.ts to include docs field on endpoint responses
- Update openapi-to-ir WebhookConverter.ts to capture response descriptions
- Update openapi-to-ir OperationConverter.ts to include docs field
- Update openrpc-to-ir MethodConverter.ts to include docs field
- Update test snapshots with new docs field

Co-Authored-By: Sarah Bawabe <[email protected]>

* fix: add docs field to protoc-gen-fern MethodConverter HttpResponse

Co-Authored-By: Sarah Bawabe <[email protected]>

* test: update ete-tests snapshots for HttpResponse docs field

Co-Authored-By: Sarah Bawabe <[email protected]>

* feat(ir): bump IR version to 62.5.0 and update snapshots for HttpResponse docs field

Co-Authored-By: Sarah Bawabe <[email protected]>

* test: update protoc-gen-fern snapshot for HttpResponse docs field

Co-Authored-By: Sarah Bawabe <[email protected]>

* test: update grpc-comments-ir snapshot for HttpResponse docs field

Co-Authored-By: Sarah Bawabe <[email protected]>

* test: update webhook-openapi-responses-fdr snapshot with response descriptions

Co-Authored-By: Sarah Bawabe <[email protected]>

* fix(fdr): propagate response-level docs to FDR description field

Co-Authored-By: Sarah Bawabe <[email protected]>

* fix: remove trailing newlines from snapshot files

Co-Authored-By: Sarah Bawabe <[email protected]>

* test: update v61-to-v60 migration snapshot for HttpResponse docs field

Co-Authored-By: Sarah Bawabe <[email protected]>

* test: regenerate ir-generator-tests JSON fixtures for HttpResponse docs field

Co-Authored-By: Sarah Bawabe <[email protected]>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

3.19.0

14 Dec 11:38
b1ceca2

Choose a tag to compare

feat(openapi): add explode field to PathParameter and QueryParameter …

3.18.4

14 Dec 05:45
d7fd049

Choose a tag to compare

fix(cli): revert regex parsing for <Code> (#11219)

revert regex

3.18.3

14 Dec 02:32
0f3bda0

Choose a tag to compare

fix(cli): fix duplicate type declarations for allOf in request bodies…