3.40.0

(feat): Run npm pkg fix after saving package.json to disk to normalize the package.json file. This is enabled by default and can be disabled by setting skipNpmPkgFix: true in the generator config.

3.39.3

(fix): Fix missing information in generated package.json.


3.39.2

(fix): Fix reference.md generation for APIs with multiple root-level endpoints. Previously, only the last root endpoint appeared in the reference documentation because addRootSection() was called inside the endpoint loop, replacing the root section each time. The fix moves section creation before the endpoint loop, ensuring all root endpoints are included and removing the empty ## section header that was being generated.

3.39.1

(fix): Fix wire tests for paginated endpoints to expect an empty array [] instead of undefined when response.data is not present. This aligns with the paginator’s behavior which uses ?? [] to return an empty array when the data property is undefined.


3.39.0

(feat): Add support for custom pagination with a dedicated CustomPager class, similar to the C# SDK generator. The CustomPager class provides:

  • A CustomPagerParser callback type that SDK authors implement to define pagination logic
  • Support for both forward (getNextPage) and backward (getPreviousPage) pagination
  • AsyncIterable implementation for ergonomic consumption with for await...of
  • Access to raw response data via response and rawResponse properties

The generated endpoint returns a CustomPager with a default parser that extracts items from the configured results property and sets hasNextPage/hasPreviousPage to false. SDK authors who need custom pagination logic can create their own wrapper/factory that calls CustomPager.create() with their own CustomPagerParser implementation.

3.38.3

(chore): Sort imports and exports in generated TypeScript SDK files for consistent, deterministic output. This eliminates the need to rely on formatters like prettier, biome, or oxfmt to order imports and exports.

3.38.2

(chore): Pre format and lint as is files and core utilities.

3.38.1

(fix): hasNextPage employs the default for the step attribute on offset-based pagination endpoints if it’s set.

3.38.0

(feat): The oauthTokenOverride feature flag has been removed and is now always enabled. OAuth token override allows users to skip the OAuth flow by providing a pre-generated bearer token directly. This feature is now the default behavior and no longer requires configuration.


3.37.4

(chore): The README now demonstrates how to pass custom headers to both the client constructor and individual endpoint invocations.

3.37.3

(chore): Update generator-cli to 0.5.0.

3.37.2

(chore): Update oxfmt to 0.17.0, oxlint to 1.32.0, and oxlint-tsgolint to 0.8.4.

3.37.1

(fix): Fixed a possible type issue in Fetcher.test.ts.


3.36.0

(feat): Refactor auth options to be defined in individual AuthProvider classes instead of directly in BaseClientOptions. BaseClientOptions is now a type alias that intersects with the auth provider’s AuthOptions interface. This improves code organization and makes auth options more discoverable.


3.37.0

(feat): Add support for OAuth token override, allowing users to skip the OAuth flow by providing a pre-generated bearer token directly. This is useful when users already have a valid token and don’t need to go through the OAuth client credentials flow.

To enable this feature, add the oauthTokenOverride configuration to your generators.yml file:

1# In generators.yml
2groups:
3 generators:
4 - name: fernapi/fern-typescript-sdk
5 config:
6 oauthTokenOverride: true

Users can then instantiate the client with either OAuth credentials or a pre-generated token:

1// Option 1: OAuth flow (existing behavior)
2const client = new Client({
3 clientId: "YOUR_CLIENT_ID",
4 clientSecret: "YOUR_CLIENT_SECRET",
5 ...
6});
7
8// Option 2: Direct bearer token override (new capability)
9const client = new Client({
10 token: "my-pre-generated-bearer-token",
11 ...
12});

3.35.9

(fix): Fix generated error classes to correctly set the prototype chain, capture stack traces, and set the error name so instanceof checks behave as expected. Error classes now use new.target.prototype instead of the static class name for Object.setPrototypeOf, conditionally call Error.captureStackTrace for V8 environments, and set this.name dynamically.


3.35.8

(chore): Added writeUnitTests config option to control unit test generation. Both writeUnitTests and generateWireTests now default to true and operate independently.

3.35.7

(fix): Wire tests are now controlled entirely by the generateWireTests custom config option, no longer falling back to the CLI’s writeUnitTests flag.

3.35.6

(chore): Remove noisy IR services log from inferred auth provider generation.


3.35.5

(fix): Fix WebSocket client to only generate auth code when the channel has auth: true. Previously, auth code was generated whenever the API had auth schemes defined, even if the WebSocket channel didn’t require auth. This caused a mismatch where the client used NormalizedClientOptions but the connect method tried to access authProvider.

3.35.4

(fix): Centralize non-status code error handling to a single reusable function in the generated SDK. This will reduce the amount of duplicated code and make it easier to maintain consistent error handling across all endpoints.

3.35.3

(fix): Fix WebSocket client ConnectArgs interface to correctly handle allow-multiple: true query parameters. Previously, query parameters with allow-multiple: true were typed as T | undefined instead of T | T[] | undefined.

3.35.2

(chore): * Add —frozen-lockfile flag to pnpm and yarn install commands in generated ci.yml workflow.

  • Update actions/checkout to v6 and actions/setup-node to v6 in generated ci.yml workflow.

3.35.1

(fix): Fix WebSocket query parameter destructuring for property names that are not valid JavaScript identifiers (e.g., language-code). The generated code now correctly uses renaming syntax in destructuring (e.g., const { "language-code": languageCode } = args;).


3.34.3

(fix): Improve React Native compatibility in the SDK runtime and fetcher:

  • Move React Native detection before Node.js detection since React Native may have a process polyfill
  • Use ReturnType<typeof setTimeout> instead of NodeJS.Timeout for better cross-platform compatibility
  • Remove ResponseWithBody type guard that incorrectly failed in React Native environments where response.body may be null
  • Update BinaryResponse type to use Response types directly for better compatibility
  • Add structured error responses with body-is-null reason for SSE and streaming endpoints when response.body is unavailable
  • Simplify JSON parsing error handling to return consistent error structure with non-json reason

3.34.2

(fix): Avoid infinite recursion when an auth client is incorrectly configured to use itself for authentication. To circumvent the infinite recursion, auth providers receive a no-op auth provider when constructing themselves.

3.34.1

(fix): Remove error on null config in README generation.