diff --git a/generators/typescript-v2/ast/src/custom-config/TypescriptCustomConfigSchema.ts b/generators/typescript-v2/ast/src/custom-config/TypescriptCustomConfigSchema.ts index d42f219adca4..3b48036e55e1 100644 --- a/generators/typescript-v2/ast/src/custom-config/TypescriptCustomConfigSchema.ts +++ b/generators/typescript-v2/ast/src/custom-config/TypescriptCustomConfigSchema.ts @@ -33,7 +33,7 @@ export const TypescriptCustomConfigSchema = z.strictObject({ includeCredentialsOnCrossOriginRequests: z.optional(z.boolean()), bundle: z.optional(z.boolean()), allowCustomFetcher: z.optional(z.boolean()), - shouldGenerateWebsocketClients: z.optional(z.boolean()), + generateWebSocketClients: z.optional(z.boolean()), defaultTimeoutInSeconds: z.optional(z.union([z.literal("infinity"), z.number()])), skipResponseValidation: z.optional(z.boolean()), extraDependencies: z.optional(z.record(z.string())), @@ -99,6 +99,8 @@ export const TypescriptCustomConfigSchema = z.strictObject({ // deprecated timeoutInSeconds: z.optional(z.union([z.literal("infinity"), z.number()])), includeApiReference: z.optional(z.boolean()), + // @deprecated Use generateWebSocketClients instead + shouldGenerateWebsocketClients: z.optional(z.boolean()), // internal - license name extracted from custom license file _fernLicenseName: z.optional(z.string()) diff --git a/generators/typescript/sdk/cli/src/SdkGeneratorCli.ts b/generators/typescript/sdk/cli/src/SdkGeneratorCli.ts index 7245d69c55b6..aba8f9a2acfe 100644 --- a/generators/typescript/sdk/cli/src/SdkGeneratorCli.ts +++ b/generators/typescript/sdk/cli/src/SdkGeneratorCli.ts @@ -48,7 +48,8 @@ export class SdkGeneratorCli extends AbstractGeneratorCli { includeCredentialsOnCrossOriginRequests: parsed?.includeCredentialsOnCrossOriginRequests ?? false, shouldBundle: parsed?.bundle ?? false, allowCustomFetcher: parsed?.allowCustomFetcher ?? false, - shouldGenerateWebsocketClients: parsed?.shouldGenerateWebsocketClients ?? false, + generateWebSocketClients: + parsed?.generateWebSocketClients ?? parsed?.shouldGenerateWebsocketClients ?? false, includeUtilsOnUnionMembers: !noSerdeLayer && (parsed?.includeUtilsOnUnionMembers ?? false), includeOtherInUnionTypes: parsed?.includeOtherInUnionTypes ?? false, enableForwardCompatibleEnums: parsed?.enableForwardCompatibleEnums ?? false, @@ -203,7 +204,7 @@ export class SdkGeneratorCli extends AbstractGeneratorCli { outputEsm: customConfig.outputEsm, includeCredentialsOnCrossOriginRequests: customConfig.includeCredentialsOnCrossOriginRequests, allowCustomFetcher: customConfig.allowCustomFetcher, - shouldGenerateWebsocketClients: customConfig.shouldGenerateWebsocketClients, + generateWebSocketClients: customConfig.generateWebSocketClients, includeUtilsOnUnionMembers: customConfig.includeUtilsOnUnionMembers, includeOtherInUnionTypes: customConfig.includeOtherInUnionTypes, enableForwardCompatibleEnums: customConfig.enableForwardCompatibleEnums, diff --git a/generators/typescript/sdk/cli/src/custom-config/SdkCustomConfig.ts b/generators/typescript/sdk/cli/src/custom-config/SdkCustomConfig.ts index 583a2b64ae6d..17dcd9ac7e26 100644 --- a/generators/typescript/sdk/cli/src/custom-config/SdkCustomConfig.ts +++ b/generators/typescript/sdk/cli/src/custom-config/SdkCustomConfig.ts @@ -26,7 +26,7 @@ export interface SdkCustomConfig { includeCredentialsOnCrossOriginRequests: boolean; shouldBundle: boolean; allowCustomFetcher: boolean; - shouldGenerateWebsocketClients: boolean; + generateWebSocketClients: boolean; includeUtilsOnUnionMembers: boolean; includeOtherInUnionTypes: boolean; enableForwardCompatibleEnums: boolean; diff --git a/generators/typescript/sdk/client-class-generator/src/GeneratedSdkClientClassImpl.ts b/generators/typescript/sdk/client-class-generator/src/GeneratedSdkClientClassImpl.ts index ff90ad9070b4..259c85e5f9f9 100644 --- a/generators/typescript/sdk/client-class-generator/src/GeneratedSdkClientClassImpl.ts +++ b/generators/typescript/sdk/client-class-generator/src/GeneratedSdkClientClassImpl.ts @@ -64,7 +64,7 @@ export declare namespace GeneratedSdkClientClassImpl { neverThrowErrors: boolean; includeCredentialsOnCrossOriginRequests: boolean; allowCustomFetcher: boolean; - shouldGenerateWebsocketClients: boolean; + generateWebSocketClients: boolean; requireDefaultEnvironment: boolean; defaultTimeoutInSeconds: number | "infinity" | undefined; includeContentHeadersOnFileDownloadResponse: boolean; @@ -107,7 +107,7 @@ export class GeneratedSdkClientClassImpl implements GeneratedSdkClientClass { private readonly generatedWebsocketImplementation: GeneratedWebsocketImplementation | undefined; private readonly generatedWrappedServices: GeneratedWrappedService[]; private readonly allowCustomFetcher: boolean; - private readonly shouldGenerateWebsocketClients: boolean; + private readonly generateWebSocketClients: boolean; private readonly packageResolver: PackageResolver; private readonly requireDefaultEnvironment: boolean; private readonly packageId: PackageId; @@ -134,7 +134,7 @@ export class GeneratedSdkClientClassImpl implements GeneratedSdkClientClass { neverThrowErrors, includeCredentialsOnCrossOriginRequests, allowCustomFetcher, - shouldGenerateWebsocketClients, + generateWebSocketClients, requireDefaultEnvironment, defaultTimeoutInSeconds, includeContentHeadersOnFileDownloadResponse, @@ -156,7 +156,7 @@ export class GeneratedSdkClientClassImpl implements GeneratedSdkClientClass { this.serviceClassName = serviceClassName; this.packageId = packageId; this.allowCustomFetcher = allowCustomFetcher; - this.shouldGenerateWebsocketClients = shouldGenerateWebsocketClients; + this.generateWebSocketClients = generateWebSocketClients; this.packageResolver = packageResolver; this.requireDefaultEnvironment = requireDefaultEnvironment; this.retainOriginalCasing = retainOriginalCasing; @@ -353,7 +353,7 @@ export class GeneratedSdkClientClassImpl implements GeneratedSdkClientClass { }); } - if (websocketChannel != null && websocketChannelId != null && this.shouldGenerateWebsocketClients) { + if (websocketChannel != null && websocketChannelId != null && this.generateWebSocketClients) { this.generatedWebsocketImplementation = new GeneratedDefaultWebsocketImplementation({ channel: websocketChannel, channelId: websocketChannelId, @@ -374,10 +374,7 @@ export class GeneratedSdkClientClassImpl implements GeneratedSdkClientClass { this.generatedWrappedServices = package_.subpackages.reduce( (acc: GeneratedWrappedService[], wrappedSubpackageId: FernIr.SubpackageId) => { const subpackage = this.packageResolver.resolveSubpackage(wrappedSubpackageId); - if ( - subpackage.hasEndpointsInTree || - (this.shouldGenerateWebsocketClients && subpackage.websocket != null) - ) { + if (subpackage.hasEndpointsInTree || (this.generateWebSocketClients && subpackage.websocket != null)) { acc.push( new GeneratedWrappedService({ wrappedSubpackageId, diff --git a/generators/typescript/sdk/client-class-generator/src/SdkClientClassGenerator.ts b/generators/typescript/sdk/client-class-generator/src/SdkClientClassGenerator.ts index 09ca78811b38..f7c862e72f00 100644 --- a/generators/typescript/sdk/client-class-generator/src/SdkClientClassGenerator.ts +++ b/generators/typescript/sdk/client-class-generator/src/SdkClientClassGenerator.ts @@ -13,7 +13,7 @@ export declare namespace SdkClientClassGenerator { neverThrowErrors: boolean; includeCredentialsOnCrossOriginRequests: boolean; allowCustomFetcher: boolean; - shouldGenerateWebsocketClients: boolean; + generateWebSocketClients: boolean; requireDefaultEnvironment: boolean; defaultTimeoutInSeconds: number | "infinity" | undefined; npmPackage: NpmPackage | undefined; @@ -50,7 +50,7 @@ export class SdkClientClassGenerator { private readonly neverThrowErrors: boolean; private readonly includeCredentialsOnCrossOriginRequests: boolean; private readonly allowCustomFetcher: boolean; - private readonly shouldGenerateWebsocketClients: boolean; + private readonly generateWebSocketClients: boolean; private readonly requireDefaultEnvironment: boolean; private readonly defaultTimeoutInSeconds: number | "infinity" | undefined; private readonly npmPackage: NpmPackage | undefined; @@ -76,7 +76,7 @@ export class SdkClientClassGenerator { neverThrowErrors, includeCredentialsOnCrossOriginRequests, allowCustomFetcher, - shouldGenerateWebsocketClients, + generateWebSocketClients, requireDefaultEnvironment, defaultTimeoutInSeconds, npmPackage, @@ -101,7 +101,7 @@ export class SdkClientClassGenerator { this.neverThrowErrors = neverThrowErrors; this.includeCredentialsOnCrossOriginRequests = includeCredentialsOnCrossOriginRequests; this.allowCustomFetcher = allowCustomFetcher; - this.shouldGenerateWebsocketClients = shouldGenerateWebsocketClients; + this.generateWebSocketClients = generateWebSocketClients; this.requireDefaultEnvironment = requireDefaultEnvironment; this.defaultTimeoutInSeconds = defaultTimeoutInSeconds; this.npmPackage = npmPackage; @@ -139,7 +139,7 @@ export class SdkClientClassGenerator { neverThrowErrors: this.neverThrowErrors, includeCredentialsOnCrossOriginRequests: this.includeCredentialsOnCrossOriginRequests, allowCustomFetcher: this.allowCustomFetcher, - shouldGenerateWebsocketClients: this.shouldGenerateWebsocketClients, + generateWebSocketClients: this.generateWebSocketClients, requireDefaultEnvironment: this.requireDefaultEnvironment, defaultTimeoutInSeconds: this.defaultTimeoutInSeconds, includeContentHeadersOnFileDownloadResponse: this.includeContentHeadersOnFileDownloadResponse, diff --git a/generators/typescript/sdk/client-class-generator/src/__test__/GeneratedSdkClientClassImpl.test.ts b/generators/typescript/sdk/client-class-generator/src/__test__/GeneratedSdkClientClassImpl.test.ts index a941731dcd20..0de580934312 100644 --- a/generators/typescript/sdk/client-class-generator/src/__test__/GeneratedSdkClientClassImpl.test.ts +++ b/generators/typescript/sdk/client-class-generator/src/__test__/GeneratedSdkClientClassImpl.test.ts @@ -107,7 +107,7 @@ function createClientClass(opts?: { neverThrowErrors?: boolean; includeCredentialsOnCrossOriginRequests?: boolean; allowCustomFetcher?: boolean; - shouldGenerateWebsocketClients?: boolean; + generateWebSocketClients?: boolean; requireDefaultEnvironment?: boolean; defaultTimeoutInSeconds?: number | "infinity" | undefined; includeContentHeadersOnFileDownloadResponse?: boolean; @@ -137,7 +137,7 @@ function createClientClass(opts?: { neverThrowErrors: opts?.neverThrowErrors ?? false, includeCredentialsOnCrossOriginRequests: opts?.includeCredentialsOnCrossOriginRequests ?? false, allowCustomFetcher: opts?.allowCustomFetcher ?? false, - shouldGenerateWebsocketClients: opts?.shouldGenerateWebsocketClients ?? false, + generateWebSocketClients: opts?.generateWebSocketClients ?? false, requireDefaultEnvironment: opts?.requireDefaultEnvironment ?? false, defaultTimeoutInSeconds: opts?.defaultTimeoutInSeconds, includeContentHeadersOnFileDownloadResponse: opts?.includeContentHeadersOnFileDownloadResponse ?? false, diff --git a/generators/typescript/sdk/client-class-generator/src/__test__/SdkClientClassGenerator.test.ts b/generators/typescript/sdk/client-class-generator/src/__test__/SdkClientClassGenerator.test.ts index b12c8cad4151..e235c52bf803 100644 --- a/generators/typescript/sdk/client-class-generator/src/__test__/SdkClientClassGenerator.test.ts +++ b/generators/typescript/sdk/client-class-generator/src/__test__/SdkClientClassGenerator.test.ts @@ -56,7 +56,7 @@ function createGenerator(opts?: Partial): SdkClien neverThrowErrors: false, includeCredentialsOnCrossOriginRequests: false, allowCustomFetcher: false, - shouldGenerateWebsocketClients: false, + generateWebSocketClients: false, requireDefaultEnvironment: false, defaultTimeoutInSeconds: 60, npmPackage: undefined, @@ -127,7 +127,7 @@ describe("SdkClientClassGenerator", () => { neverThrowErrors: true, includeCredentialsOnCrossOriginRequests: true, allowCustomFetcher: true, - shouldGenerateWebsocketClients: true, + generateWebSocketClients: true, requireDefaultEnvironment: true, includeContentHeadersOnFileDownloadResponse: true, retainOriginalCasing: true, diff --git a/generators/typescript/sdk/generator/src/SdkGenerator.ts b/generators/typescript/sdk/generator/src/SdkGenerator.ts index afe3f359cc6c..a32c63306c65 100644 --- a/generators/typescript/sdk/generator/src/SdkGenerator.ts +++ b/generators/typescript/sdk/generator/src/SdkGenerator.ts @@ -118,7 +118,7 @@ export declare namespace SdkGenerator { outputEsm: boolean; outputJsr: boolean; allowCustomFetcher: boolean; - shouldGenerateWebsocketClients: boolean; + generateWebSocketClients: boolean; includeUtilsOnUnionMembers: boolean; includeOtherInUnionTypes: boolean; enableForwardCompatibleEnums: boolean; @@ -182,7 +182,7 @@ export class SdkGenerator { private npmPackage: NpmPackage | undefined; private generateOAuthClients: boolean; private generateJestTests: boolean; - private shouldGenerateWebsocketClients: boolean; + private generateWebSocketClients: boolean; private extraFiles: Record = {}; private extraScripts: Record = {}; @@ -290,7 +290,7 @@ export class SdkGenerator { this.generateOAuthClients = config.generateOAuthClients && this.intermediateRepresentation.auth.schemes.some((scheme) => scheme.type === "oauth"); - this.shouldGenerateWebsocketClients = config.shouldGenerateWebsocketClients; + this.generateWebSocketClients = config.generateWebSocketClients; this.project = new Project({ useInMemoryFileSystem: true @@ -490,7 +490,7 @@ export class SdkGenerator { neverThrowErrors: config.neverThrowErrors, includeCredentialsOnCrossOriginRequests: config.includeCredentialsOnCrossOriginRequests, allowCustomFetcher: config.allowCustomFetcher, - shouldGenerateWebsocketClients: this.shouldGenerateWebsocketClients, + generateWebSocketClients: this.generateWebSocketClients, requireDefaultEnvironment: config.requireDefaultEnvironment, defaultTimeoutInSeconds: config.defaultTimeoutInSeconds, npmPackage, @@ -597,7 +597,7 @@ export class SdkGenerator { this.context.logger.debug("Generated errors"); this.generateHandleNonStatusCodeError(); this.context.logger.debug("Generated handleNonStatusCodeError"); - if (this.shouldGenerateWebsocketClients) { + if (this.generateWebSocketClients) { if (this.config.includeSerdeLayer) { this.generateUnionedResponseSchemas(); this.context.logger.debug("Generated unioned response schemas"); @@ -1119,7 +1119,7 @@ export class SdkGenerator { this.context.logger.debug("Generating service declarations..."); for (const packageId of this.getAllPackageIds()) { const package_ = this.packageResolver.resolvePackage(packageId); - if (!package_.hasEndpointsInTree && (!this.shouldGenerateWebsocketClients || package_.websocket == null)) { + if (!package_.hasEndpointsInTree && (!this.generateWebSocketClients || package_.websocket == null)) { continue; } this.withSourceFile({ @@ -2077,7 +2077,7 @@ export class SdkGenerator { const package_ = this.packageResolver.resolvePackage(packageId); const hasClient = - package_.hasEndpointsInTree || (this.shouldGenerateWebsocketClients && package_.websocket != null); + package_.hasEndpointsInTree || (this.generateWebSocketClients && package_.websocket != null); if (!hasClient && package_.subpackages.length === 0) { continue; @@ -2116,7 +2116,7 @@ export class SdkGenerator { const package_ = this.packageResolver.resolvePackage(packageId); const hasClient = - package_.hasEndpointsInTree || (this.shouldGenerateWebsocketClients && package_.websocket != null); + package_.hasEndpointsInTree || (this.generateWebSocketClients && package_.websocket != null); const clientFilepath = this.sdkClientClassDeclarationReferencer.getExportedFilepath(packageId); const clientClassName = this.sdkClientClassDeclarationReferencer.getExportedName(packageId); diff --git a/generators/typescript/sdk/versions.yml b/generators/typescript/sdk/versions.yml index 4f1d7cb6f29d..94faa5ce93c7 100644 --- a/generators/typescript/sdk/versions.yml +++ b/generators/typescript/sdk/versions.yml @@ -1,4 +1,24 @@ # yaml-language-server: $schema=../../../fern-versions-yml.schema.json +- version: 3.56.2 + changelogEntry: + - summary: | + Rename the `shouldGenerateWebsocketClients` configuration option to + `generateWebSocketClients`. The old name is still accepted as a deprecated + fallback for backwards compatibility. + type: chore + createdAt: "2026-03-16" + irVersion: 65 + +- version: 3.56.1 + changelogEntry: + - summary: | + Include root markdown files (README.md, reference.md, CONTRIBUTING.md) in + the output when `outputSourceFiles` is `false`. Previously, the compiled + CJS/ESM output mode only included the `dist/` directory contents, silently + dropping generated documentation files. + type: fix + createdAt: "2026-03-15" + irVersion: 65 - version: 3.56.0 changelogEntry: - summary: | diff --git a/generators/typescript/utils/commons/src/typescript-project/PersistedTypescriptProject.ts b/generators/typescript/utils/commons/src/typescript-project/PersistedTypescriptProject.ts index b90a117b3d02..bb3c998d17c9 100644 --- a/generators/typescript/utils/commons/src/typescript-project/PersistedTypescriptProject.ts +++ b/generators/typescript/utils/commons/src/typescript-project/PersistedTypescriptProject.ts @@ -364,7 +364,29 @@ export class PersistedTypescriptProject { unzipOutput?: boolean; logger: Logger; }): Promise { - await this.zipDirectoryContents(join(this.directory, this.distDirectory), { + // Stage dist contents and root documentation files into a temp directory + // so the output zip includes them alongside the compiled cjs/esm output. + const stagingDir = AbsoluteFilePath.of((await tmp.dir()).path); + const distDir = join(this.directory, this.distDirectory); + const distItems = await readdir(distDir); + for (const item of distItems) { + await cp(join(distDir, RelativeFilePath.of(item)), join(stagingDir, RelativeFilePath.of(item)), { + recursive: true + }); + } + + const ROOT_FILES_TO_INCLUDE = ["README.md", "reference.md", "CONTRIBUTING.md"]; + for (const filename of ROOT_FILES_TO_INCLUDE) { + const src = join(this.directory, RelativeFilePath.of(filename)); + try { + await cp(src, join(stagingDir, RelativeFilePath.of(filename))); + } catch (e) { + // File may not exist (e.g. whitelabel skips CONTRIBUTING.md) + logger.debug(`Skipping ${filename}: ${e}`); + } + } + + await this.zipDirectoryContents(stagingDir, { logger, destinationPath, zipFilename, diff --git a/seed/ts-sdk/exhaustive/local-files-no-source/CONTRIBUTING.md b/seed/ts-sdk/exhaustive/local-files-no-source/CONTRIBUTING.md new file mode 100644 index 000000000000..fe5bc2f77e0b --- /dev/null +++ b/seed/ts-sdk/exhaustive/local-files-no-source/CONTRIBUTING.md @@ -0,0 +1,133 @@ +# Contributing + +Thanks for your interest in contributing to this SDK! This document provides guidelines for contributing to the project. + +## Getting Started + +### Prerequisites + +- Node.js 20 or higher +- pnpm package manager + +### Installation + +Install the project dependencies: + +```bash +pnpm install +``` + +### Building + +Build the project: + +```bash +pnpm build +``` + +### Testing + +Run the test suite: + +```bash +pnpm test +``` + +Run specific test types: +- `pnpm test:unit` - Run unit tests +- `pnpm test:wire` - Run wire/integration tests + +### Linting and Formatting + +Check code style: + +```bash +pnpm run lint +pnpm run format:check +``` + +Fix code style issues: + +```bash +pnpm run lint:fix +pnpm run format:fix +``` + +Or use the combined check command: + +```bash +pnpm run check:fix +``` + +## About Generated Code + +**Important**: Most files in this SDK are automatically generated by [Fern](https://buildwithfern.com) from the API definition. Direct modifications to generated files will be overwritten the next time the SDK is generated. + +### Generated Files + +The following directories contain generated code: +- `src/api/` - API client classes and types +- `src/serialization/` - Serialization/deserialization logic +- Most TypeScript files in `src/` + +### How to Customize + +If you need to customize the SDK, you have two options: + +#### Option 1: Use `.fernignore` + +For custom code that should persist across SDK regenerations: + +1. Create a `.fernignore` file in the project root +2. Add file patterns for files you want to preserve (similar to `.gitignore` syntax) +3. Add your custom code to those files + +Files listed in `.fernignore` will not be overwritten when the SDK is regenerated. + +For more information, see the [Fern documentation on custom code](https://buildwithfern.com/learn/sdks/overview/custom-code). + +#### Option 2: Contribute to the Generator + +If you want to change how code is generated for all users of this SDK: + +1. The TypeScript SDK generator lives in the [Fern repository](https://github.com/fern-api/fern) +2. Generator code is located at `generators/typescript/sdk/` +3. Follow the [Fern contributing guidelines](https://github.com/fern-api/fern/blob/main/CONTRIBUTING.md) +4. Submit a pull request with your changes to the generator + +This approach is best for: +- Bug fixes in generated code +- New features that would benefit all users +- Improvements to code generation patterns + +## Making Changes + +### Workflow + +1. Create a new branch for your changes +2. Make your modifications +3. Run tests to ensure nothing breaks: `pnpm test` +4. Run linting and formatting: `pnpm run check:fix` +5. Build the project: `pnpm build` +6. Commit your changes with a clear commit message +7. Push your branch and create a pull request + +### Commit Messages + +Write clear, descriptive commit messages that explain what changed and why. + +### Code Style + +This project uses automated code formatting and linting. Run `pnpm run check:fix` before committing to ensure your code meets the project's style guidelines. + +## Questions or Issues? + +If you have questions or run into issues: + +1. Check the [Fern documentation](https://buildwithfern.com) +2. Search existing [GitHub issues](https://github.com/fern-api/fern/issues) +3. Open a new issue if your question hasn't been addressed + +## License + +By contributing to this project, you agree that your contributions will be licensed under the same license as the project. diff --git a/seed/ts-sdk/exhaustive/local-files-no-source/README.md b/seed/ts-sdk/exhaustive/local-files-no-source/README.md new file mode 100644 index 000000000000..e1f19a9dc1ea --- /dev/null +++ b/seed/ts-sdk/exhaustive/local-files-no-source/README.md @@ -0,0 +1,368 @@ +# Seed TypeScript Library + +[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-Built%20with%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=Seed%2FTypeScript) + +The Seed TypeScript library provides convenient access to the Seed APIs from TypeScript. + +## Table of Contents + +- [Reference](#reference) +- [Usage](#usage) +- [Request and Response Types](#request-and-response-types) +- [Exception Handling](#exception-handling) +- [File Uploads](#file-uploads) +- [Pagination](#pagination) +- [Advanced](#advanced) + - [Subpackage Exports](#subpackage-exports) + - [Additional Headers](#additional-headers) + - [Additional Query String Parameters](#additional-query-string-parameters) + - [Retries](#retries) + - [Timeouts](#timeouts) + - [Aborting Requests](#aborting-requests) + - [Access Raw Response Data](#access-raw-response-data) + - [Logging](#logging) + - [Custom Fetch](#custom-fetch) + - [Runtime Compatibility](#runtime-compatibility) +- [Contributing](#contributing) + +## Reference + +A full reference for this library is available [here](./reference.md). + +## Usage + +Instantiate and use the client with the following: + +```typescript +import { SeedExhaustiveClient } from "./src/Client"; + +const client = new SeedExhaustiveClient({ environment: "YOUR_BASE_URL", token: "YOUR_TOKEN" }); +await client.endpoints.container.getAndReturnListOfPrimitives(["string", "string"]); +``` + +## Request and Response Types + +The SDK exports all request and response types as TypeScript interfaces. Simply import them with the +following namespace: + +```typescript +import { SeedExhaustive } from "SeedExhaustive"; + +const request: SeedExhaustive.ListItemsRequest = { + ... +}; +``` + +## Exception Handling + +When the API returns a non-success status code (4xx or 5xx response), a subclass of the following error +will be thrown. + +```typescript +import { SeedExhaustiveError } from "SeedExhaustive"; + +try { + await client.endpoints.container.getAndReturnListOfPrimitives(...); +} catch (err) { + if (err instanceof SeedExhaustiveError) { + console.log(err.statusCode); + console.log(err.message); + console.log(err.body); + console.log(err.rawResponse); + } +} +``` + +## File Uploads + +You can upload files using the client: + +```typescript +import { createReadStream } from "fs"; + +await client.endpoints.params.uploadWithPath(createReadStream("path/to/file"), ...); +await client.endpoints.params.uploadWithPath(new ReadableStream(), ...); +await client.endpoints.params.uploadWithPath(Buffer.from('binary data'), ...); +await client.endpoints.params.uploadWithPath(new Blob(['binary data'], { type: 'audio/mpeg' }), ...); +await client.endpoints.params.uploadWithPath(new File(['binary data'], 'file.mp3'), ...); +await client.endpoints.params.uploadWithPath(new ArrayBuffer(8), ...); +await client.endpoints.params.uploadWithPath(new Uint8Array([0, 1, 2]), ...); +``` +The client accepts a variety of types for file upload parameters: +* Stream types: `fs.ReadStream`, `stream.Readable`, and `ReadableStream` +* Buffered types: `Buffer`, `Blob`, `File`, `ArrayBuffer`, `ArrayBufferView`, and `Uint8Array` + +### Metadata + +You can configure metadata when uploading a file: +```typescript +const file: Uploadable.WithMetadata = { + data: createReadStream("path/to/file"), + filename: "my-file", // optional + contentType: "audio/mpeg", // optional + contentLength: 1949, // optional +}; +``` + +Alternatively, you can upload a file directly from a file path: +```typescript +const file : Uploadable.FromPath = { + path: "path/to/file", + filename: "my-file", // optional + contentType: "audio/mpeg", // optional + contentLength: 1949, // optional +}; +``` + +The metadata is used to set the `Content-Length`, `Content-Type`, and `Content-Disposition` headers. If not provided, the client will attempt to determine them automatically. +For example, `fs.ReadStream` has a `path` property which the SDK uses to retrieve the file size from the filesystem without loading it into memory. + + +## Pagination + +List endpoints are paginated. The SDK provides an iterator so that you can simply loop over the items: + +```typescript +import { SeedExhaustiveClient } from "./src/Client"; + +const client = new SeedExhaustiveClient({ environment: "YOUR_BASE_URL", token: "YOUR_TOKEN" }); +const pageableResponse = await client.endpoints.pagination.listItems({ + cursor: "cursor", + limit: 1 +}); +for await (const item of pageableResponse) { + console.log(item); +} + +// Or you can manually iterate page-by-page +let page = await client.endpoints.pagination.listItems({ + cursor: "cursor", + limit: 1 +}); +while (page.hasNextPage()) { + page = page.getNextPage(); +} + +// You can also access the underlying response +const response = page.response; +``` + +## Advanced + +### Subpackage Exports + +This SDK supports direct imports of subpackage clients, which allows JavaScript bundlers to tree-shake and include only the imported subpackage code. This results in much smaller bundle sizes. + +```typescript +import { EndpointsClient } from 'SeedExhaustive/endpoints'; + +const client = new EndpointsClient({...}); +``` + +### Additional Headers + +If you would like to send additional headers as part of the request, use the `headers` request option. + +```typescript +import { SeedExhaustiveClient } from "SeedExhaustive"; + +const client = new SeedExhaustiveClient({ + ... + headers: { + 'X-Custom-Header': 'custom value' + } +}); + +const response = await client.endpoints.container.getAndReturnListOfPrimitives(..., { + headers: { + 'X-Custom-Header': 'custom value' + } +}); +``` + +### Additional Query String Parameters + +If you would like to send additional query string parameters as part of the request, use the `queryParams` request option. + +```typescript +const response = await client.endpoints.container.getAndReturnListOfPrimitives(..., { + queryParams: { + 'customQueryParamKey': 'custom query param value' + } +}); +``` + +### Retries + +The SDK is instrumented with automatic retries with exponential backoff. A request will be retried as long +as the request is deemed retryable and the number of retry attempts has not grown larger than the configured +retry limit (default: 2). + +A request is deemed retryable when any of the following HTTP status codes is returned: + +- [408](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/408) (Timeout) +- [429](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429) (Too Many Requests) +- [5XX](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/500) (Internal Server Errors) + +Use the `maxRetries` request option to configure this behavior. + +```typescript +const response = await client.endpoints.container.getAndReturnListOfPrimitives(..., { + maxRetries: 0 // override maxRetries at the request level +}); +``` + +### Timeouts + +The SDK defaults to a 60 second timeout. Use the `timeoutInSeconds` option to configure this behavior. + +```typescript +const response = await client.endpoints.container.getAndReturnListOfPrimitives(..., { + timeoutInSeconds: 30 // override timeout to 30s +}); +``` + +### Aborting Requests + +The SDK allows users to abort requests at any point by passing in an abort signal. + +```typescript +const controller = new AbortController(); +const response = await client.endpoints.container.getAndReturnListOfPrimitives(..., { + abortSignal: controller.signal +}); +controller.abort(); // aborts the request +``` + +### Access Raw Response Data + +The SDK provides access to raw response data, including headers, through the `.withRawResponse()` method. +The `.withRawResponse()` method returns a promise that results to an object with a `data` and a `rawResponse` property. + +```typescript +const { data, rawResponse } = await client.endpoints.container.getAndReturnListOfPrimitives(...).withRawResponse(); + +console.log(data); +console.log(rawResponse.headers['X-My-Header']); +``` + +### Logging + +The SDK supports logging. You can configure the logger by passing in a `logging` object to the client options. + +```typescript +import { SeedExhaustiveClient, logging } from "SeedExhaustive"; + +const client = new SeedExhaustiveClient({ + ... + logging: { + level: logging.LogLevel.Debug, // defaults to logging.LogLevel.Info + logger: new logging.ConsoleLogger(), // defaults to ConsoleLogger + silent: false, // defaults to true, set to false to enable logging + } +}); +``` +The `logging` object can have the following properties: +- `level`: The log level to use. Defaults to `logging.LogLevel.Info`. +- `logger`: The logger to use. Defaults to a `logging.ConsoleLogger`. +- `silent`: Whether to silence the logger. Defaults to `true`. + +The `level` property can be one of the following values: +- `logging.LogLevel.Debug` +- `logging.LogLevel.Info` +- `logging.LogLevel.Warn` +- `logging.LogLevel.Error` + +To provide a custom logger, you can pass in an object that implements the `logging.ILogger` interface. + +
+Custom logger examples + +Here's an example using the popular `winston` logging library. +```ts +import winston from 'winston'; + +const winstonLogger = winston.createLogger({...}); + +const logger: logging.ILogger = { + debug: (msg, ...args) => winstonLogger.debug(msg, ...args), + info: (msg, ...args) => winstonLogger.info(msg, ...args), + warn: (msg, ...args) => winstonLogger.warn(msg, ...args), + error: (msg, ...args) => winstonLogger.error(msg, ...args), +}; +``` + +Here's an example using the popular `pino` logging library. + +```ts +import pino from 'pino'; + +const pinoLogger = pino({...}); + +const logger: logging.ILogger = { + debug: (msg, ...args) => pinoLogger.debug(args, msg), + info: (msg, ...args) => pinoLogger.info(args, msg), + warn: (msg, ...args) => pinoLogger.warn(args, msg), + error: (msg, ...args) => pinoLogger.error(args, msg), +}; +``` +
+ + +### Custom Fetch + +The SDK provides a low-level `fetch` method for making custom HTTP requests while still +benefiting from SDK-level configuration like authentication, retries, timeouts, and logging. +This is useful for calling API endpoints not yet supported in the SDK. + +```typescript +const response = await client.fetch("/v1/custom/endpoint", { + method: "GET", +}, { + timeoutInSeconds: 30, + maxRetries: 3, + headers: { + "X-Custom-Header": "custom-value", + }, +}); + +const data = await response.json(); +``` + +### Runtime Compatibility + + +The SDK works in the following runtimes: + + + +- Node.js 18+ +- Vercel +- Cloudflare Workers +- Deno v1.25+ +- Bun 1.0+ +- React Native + +### Customizing Fetch Client + +The SDK provides a way for you to customize the underlying HTTP client / Fetch function. If you're running in an +unsupported environment, this provides a way for you to break glass and ensure the SDK works. + +```typescript +import { SeedExhaustiveClient } from "SeedExhaustive"; + +const client = new SeedExhaustiveClient({ + ... + fetcher: // provide your implementation here +}); +``` + +## Contributing + +While we value open-source contributions to this SDK, this library is generated programmatically. +Additions made directly to this library would have to be moved over to our generation code, +otherwise they would be overwritten upon the next generated release. Feel free to open a PR as +a proof of concept, but know that we will not be able to merge it as-is. We suggest opening +an issue first to discuss with us! + +On the other hand, contributions to the README are always very welcome! diff --git a/seed/ts-sdk/exhaustive/local-files-no-source/reference.md b/seed/ts-sdk/exhaustive/local-files-no-source/reference.md new file mode 100644 index 000000000000..137689618bf8 --- /dev/null +++ b/seed/ts-sdk/exhaustive/local-files-no-source/reference.md @@ -0,0 +1,3140 @@ +# Reference +## Endpoints Container +
client.endpoints.container.getAndReturnListOfPrimitives({ ...params }) -> string[] +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.container.getAndReturnListOfPrimitives(["string", "string"]); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request:** `string[]` + +
+
+ +
+
+ +**requestOptions:** `ContainerClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +
client.endpoints.container.getAndReturnListOfObjects({ ...params }) -> SeedExhaustive.ObjectWithRequiredField[] +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.container.getAndReturnListOfObjects([{ + string: "string" + }, { + string: "string" + }]); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request:** `SeedExhaustive.ObjectWithRequiredField[]` + +
+
+ +
+
+ +**requestOptions:** `ContainerClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +
client.endpoints.container.getAndReturnSetOfPrimitives({ ...params }) -> string[] +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.container.getAndReturnSetOfPrimitives(["string"]); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request:** `string[]` + +
+
+ +
+
+ +**requestOptions:** `ContainerClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +
client.endpoints.container.getAndReturnSetOfObjects({ ...params }) -> SeedExhaustive.ObjectWithRequiredField[] +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.container.getAndReturnSetOfObjects([{ + string: "string" + }]); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request:** `SeedExhaustive.ObjectWithRequiredField[]` + +
+
+ +
+
+ +**requestOptions:** `ContainerClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +
client.endpoints.container.getAndReturnMapPrimToPrim({ ...params }) -> Record<string, string> +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.container.getAndReturnMapPrimToPrim({ + "string": "string" +}); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request:** `Record` + +
+
+ +
+
+ +**requestOptions:** `ContainerClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +
client.endpoints.container.getAndReturnMapOfPrimToObject({ ...params }) -> Record<string, SeedExhaustive.ObjectWithRequiredField> +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.container.getAndReturnMapOfPrimToObject({ + "string": { + string: "string" + } +}); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request:** `Record` + +
+
+ +
+
+ +**requestOptions:** `ContainerClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +
client.endpoints.container.getAndReturnMapOfPrimToUndiscriminatedUnion({ ...params }) -> Record<string, SeedExhaustive.MixedType> +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.container.getAndReturnMapOfPrimToUndiscriminatedUnion({ + "string": 1.1 +}); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request:** `Record` + +
+
+ +
+
+ +**requestOptions:** `ContainerClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +
client.endpoints.container.getAndReturnOptional({ ...params }) -> SeedExhaustive.ObjectWithRequiredField | undefined +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.container.getAndReturnOptional({ + string: "string" +}); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request:** `SeedExhaustive.ObjectWithRequiredField` + +
+
+ +
+
+ +**requestOptions:** `ContainerClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +## Endpoints ContentType +
client.endpoints.contentType.postJsonPatchContentType({ ...params }) -> void +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.contentType.postJsonPatchContentType({ + string: "string", + integer: 1, + long: 1000000, + double: 1.1, + bool: true, + datetime: "2024-01-15T09:30:00Z", + date: "2023-01-15", + uuid: "d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32", + base64: "SGVsbG8gd29ybGQh", + list: ["list", "list"], + set: ["set"], + map: { + 1: "map" + }, + bigint: "1000000" +}); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request:** `SeedExhaustive.ObjectWithOptionalField` + +
+
+ +
+
+ +**requestOptions:** `ContentTypeClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +
client.endpoints.contentType.postJsonPatchContentWithCharsetType({ ...params }) -> void +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.contentType.postJsonPatchContentWithCharsetType({ + string: "string", + integer: 1, + long: 1000000, + double: 1.1, + bool: true, + datetime: "2024-01-15T09:30:00Z", + date: "2023-01-15", + uuid: "d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32", + base64: "SGVsbG8gd29ybGQh", + list: ["list", "list"], + set: ["set"], + map: { + 1: "map" + }, + bigint: "1000000" +}); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request:** `SeedExhaustive.ObjectWithOptionalField` + +
+
+ +
+
+ +**requestOptions:** `ContentTypeClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +## Endpoints Enum +
client.endpoints.enum.getAndReturnEnum({ ...params }) -> SeedExhaustive.WeatherReport +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.enum.getAndReturnEnum("SUNNY"); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request:** `SeedExhaustive.WeatherReport` + +
+
+ +
+
+ +**requestOptions:** `EnumClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +## Endpoints HttpMethods +
client.endpoints.httpMethods.testGet(id) -> string +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.httpMethods.testGet("id"); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `string` + +
+
+ +
+
+ +**requestOptions:** `HttpMethodsClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +
client.endpoints.httpMethods.testPost({ ...params }) -> SeedExhaustive.ObjectWithOptionalField +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.httpMethods.testPost({ + string: "string" +}); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request:** `SeedExhaustive.ObjectWithRequiredField` + +
+
+ +
+
+ +**requestOptions:** `HttpMethodsClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +
client.endpoints.httpMethods.testPut(id, { ...params }) -> SeedExhaustive.ObjectWithOptionalField +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.httpMethods.testPut("id", { + string: "string" +}); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `string` + +
+
+ +
+
+ +**request:** `SeedExhaustive.ObjectWithRequiredField` + +
+
+ +
+
+ +**requestOptions:** `HttpMethodsClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +
client.endpoints.httpMethods.testPatch(id, { ...params }) -> SeedExhaustive.ObjectWithOptionalField +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.httpMethods.testPatch("id", { + string: "string", + integer: 1, + long: 1000000, + double: 1.1, + bool: true, + datetime: "2024-01-15T09:30:00Z", + date: "2023-01-15", + uuid: "d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32", + base64: "SGVsbG8gd29ybGQh", + list: ["list", "list"], + set: ["set"], + map: { + 1: "map" + }, + bigint: "1000000" +}); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `string` + +
+
+ +
+
+ +**request:** `SeedExhaustive.ObjectWithOptionalField` + +
+
+ +
+
+ +**requestOptions:** `HttpMethodsClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +
client.endpoints.httpMethods.testDelete(id) -> boolean +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.httpMethods.testDelete("id"); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `string` + +
+
+ +
+
+ +**requestOptions:** `HttpMethodsClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +## Endpoints Object +
client.endpoints.object.getAndReturnWithOptionalField({ ...params }) -> SeedExhaustive.ObjectWithOptionalField +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.object.getAndReturnWithOptionalField({ + string: "string", + integer: 1, + long: 1000000, + double: 1.1, + bool: true, + datetime: "2024-01-15T09:30:00Z", + date: "2023-01-15", + uuid: "d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32", + base64: "SGVsbG8gd29ybGQh", + list: ["list", "list"], + set: ["set"], + map: { + 1: "map" + }, + bigint: "1000000" +}); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request:** `SeedExhaustive.ObjectWithOptionalField` + +
+
+ +
+
+ +**requestOptions:** `ObjectClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +
client.endpoints.object.getAndReturnWithRequiredField({ ...params }) -> SeedExhaustive.ObjectWithRequiredField +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.object.getAndReturnWithRequiredField({ + string: "string" +}); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request:** `SeedExhaustive.ObjectWithRequiredField` + +
+
+ +
+
+ +**requestOptions:** `ObjectClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +
client.endpoints.object.getAndReturnWithMapOfMap({ ...params }) -> SeedExhaustive.ObjectWithMapOfMap +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.object.getAndReturnWithMapOfMap({ + map: { + "map": { + "map": "map" + } + } +}); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request:** `SeedExhaustive.ObjectWithMapOfMap` + +
+
+ +
+
+ +**requestOptions:** `ObjectClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +
client.endpoints.object.getAndReturnNestedWithOptionalField({ ...params }) -> SeedExhaustive.NestedObjectWithOptionalField +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.object.getAndReturnNestedWithOptionalField({ + string: "string", + NestedObject: { + string: "string", + integer: 1, + long: 1000000, + double: 1.1, + bool: true, + datetime: "2024-01-15T09:30:00Z", + date: "2023-01-15", + uuid: "d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32", + base64: "SGVsbG8gd29ybGQh", + list: ["list", "list"], + set: ["set"], + map: { + 1: "map" + }, + bigint: "1000000" + } +}); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request:** `SeedExhaustive.NestedObjectWithOptionalField` + +
+
+ +
+
+ +**requestOptions:** `ObjectClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +
client.endpoints.object.getAndReturnNestedWithRequiredField(string, { ...params }) -> SeedExhaustive.NestedObjectWithRequiredField +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.object.getAndReturnNestedWithRequiredField("string", { + string: "string", + NestedObject: { + string: "string", + integer: 1, + long: 1000000, + double: 1.1, + bool: true, + datetime: "2024-01-15T09:30:00Z", + date: "2023-01-15", + uuid: "d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32", + base64: "SGVsbG8gd29ybGQh", + list: ["list", "list"], + set: ["set"], + map: { + 1: "map" + }, + bigint: "1000000" + } +}); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**string:** `string` + +
+
+ +
+
+ +**request:** `SeedExhaustive.NestedObjectWithRequiredField` + +
+
+ +
+
+ +**requestOptions:** `ObjectClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +
client.endpoints.object.getAndReturnNestedWithRequiredFieldAsList({ ...params }) -> SeedExhaustive.NestedObjectWithRequiredField +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.object.getAndReturnNestedWithRequiredFieldAsList([{ + string: "string", + NestedObject: { + string: "string", + integer: 1, + long: 1000000, + double: 1.1, + bool: true, + datetime: "2024-01-15T09:30:00Z", + date: "2023-01-15", + uuid: "d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32", + base64: "SGVsbG8gd29ybGQh", + list: ["list", "list"], + set: ["set"], + map: { + 1: "map" + }, + bigint: "1000000" + } + }, { + string: "string", + NestedObject: { + string: "string", + integer: 1, + long: 1000000, + double: 1.1, + bool: true, + datetime: "2024-01-15T09:30:00Z", + date: "2023-01-15", + uuid: "d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32", + base64: "SGVsbG8gd29ybGQh", + list: ["list", "list"], + set: ["set"], + map: { + 1: "map" + }, + bigint: "1000000" + } + }]); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request:** `SeedExhaustive.NestedObjectWithRequiredField[]` + +
+
+ +
+
+ +**requestOptions:** `ObjectClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +
client.endpoints.object.getAndReturnWithUnknownField({ ...params }) -> SeedExhaustive.ObjectWithUnknownField +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.object.getAndReturnWithUnknownField({ + unknown: { + "$ref": "https://example.com/schema" + } +}); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request:** `SeedExhaustive.ObjectWithUnknownField` + +
+
+ +
+
+ +**requestOptions:** `ObjectClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +
client.endpoints.object.getAndReturnWithDocumentedUnknownType({ ...params }) -> SeedExhaustive.ObjectWithDocumentedUnknownType +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.object.getAndReturnWithDocumentedUnknownType({ + documentedUnknownType: { + "key": "value" + } +}); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request:** `SeedExhaustive.ObjectWithDocumentedUnknownType` + +
+
+ +
+
+ +**requestOptions:** `ObjectClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +
client.endpoints.object.getAndReturnWithDatetimeLikeString({ ...params }) -> SeedExhaustive.ObjectWithDatetimeLikeString +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Tests that string fields containing datetime-like values are NOT reformatted. +The datetimeLikeString field should preserve its exact value "2023-08-31T14:15:22Z" +without being converted to "2023-08-31T14:15:22.000Z". +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.object.getAndReturnWithDatetimeLikeString({ + datetimeLikeString: "2023-08-31T14:15:22Z", + actualDatetime: "2023-08-31T14:15:22Z" +}); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request:** `SeedExhaustive.ObjectWithDatetimeLikeString` + +
+
+ +
+
+ +**requestOptions:** `ObjectClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +## Endpoints Pagination +
client.endpoints.pagination.listItems({ ...params }) -> core.Page<SeedExhaustive.ObjectWithRequiredField, SeedExhaustive.PaginatedResponse> +
+
+ +#### 📝 Description + +
+
+ +
+
+ +List items with cursor pagination +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +const pageableResponse = await client.endpoints.pagination.listItems({ + cursor: "cursor", + limit: 1 +}); +for await (const item of pageableResponse) { + console.log(item); +} + +// Or you can manually iterate page-by-page +let page = await client.endpoints.pagination.listItems({ + cursor: "cursor", + limit: 1 +}); +while (page.hasNextPage()) { + page = page.getNextPage(); +} + +// You can also access the underlying response +const response = page.response; + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request:** `SeedExhaustive.endpoints.ListItemsRequest` + +
+
+ +
+
+ +**requestOptions:** `PaginationClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +## Endpoints Params +
client.endpoints.params.getWithPath(param) -> string +
+
+ +#### 📝 Description + +
+
+ +
+
+ +GET with path param +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.params.getWithPath("param"); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**param:** `string` + +
+
+ +
+
+ +**requestOptions:** `ParamsClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +
client.endpoints.params.getWithInlinePath({ ...params }) -> string +
+
+ +#### 📝 Description + +
+
+ +
+
+ +GET with path param +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.params.getWithInlinePath({ + param: "param" +}); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request:** `SeedExhaustive.endpoints.GetWithInlinePath` + +
+
+ +
+
+ +**requestOptions:** `ParamsClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +
client.endpoints.params.getWithQuery({ ...params }) -> void +
+
+ +#### 📝 Description + +
+
+ +
+
+ +GET with query param +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.params.getWithQuery({ + query: "query", + number: 1 +}); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request:** `SeedExhaustive.endpoints.GetWithQuery` + +
+
+ +
+
+ +**requestOptions:** `ParamsClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +
client.endpoints.params.getWithAllowMultipleQuery({ ...params }) -> void +
+
+ +#### 📝 Description + +
+
+ +
+
+ +GET with multiple of same query param +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.params.getWithAllowMultipleQuery({ + query: "query", + number: 1 +}); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request:** `SeedExhaustive.endpoints.GetWithMultipleQuery` + +
+
+ +
+
+ +**requestOptions:** `ParamsClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +
client.endpoints.params.getWithPathAndQuery(param, { ...params }) -> void +
+
+ +#### 📝 Description + +
+
+ +
+
+ +GET with path and query params +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.params.getWithPathAndQuery("param", { + query: "query" +}); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**param:** `string` + +
+
+ +
+
+ +**request:** `SeedExhaustive.endpoints.GetWithPathAndQuery` + +
+
+ +
+
+ +**requestOptions:** `ParamsClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +
client.endpoints.params.getWithInlinePathAndQuery({ ...params }) -> void +
+
+ +#### 📝 Description + +
+
+ +
+
+ +GET with path and query params +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.params.getWithInlinePathAndQuery({ + param: "param", + query: "query" +}); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request:** `SeedExhaustive.endpoints.GetWithInlinePathAndQuery` + +
+
+ +
+
+ +**requestOptions:** `ParamsClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +
client.endpoints.params.modifyWithPath(param, { ...params }) -> string +
+
+ +#### 📝 Description + +
+
+ +
+
+ +PUT to update with path param +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.params.modifyWithPath("param", "string"); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**param:** `string` + +
+
+ +
+
+ +**request:** `string` + +
+
+ +
+
+ +**requestOptions:** `ParamsClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +
client.endpoints.params.modifyWithInlinePath({ ...params }) -> string +
+
+ +#### 📝 Description + +
+
+ +
+
+ +PUT to update with path param +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.params.modifyWithInlinePath({ + param: "param", + body: "string" +}); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request:** `SeedExhaustive.endpoints.ModifyResourceAtInlinedPath` + +
+
+ +
+
+ +**requestOptions:** `ParamsClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +
client.endpoints.params.uploadWithPath(uploadable, param) -> SeedExhaustive.ObjectWithRequiredField +
+
+ +#### 📝 Description + +
+
+ +
+
+ +POST bytes with path param returning object +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.params.uploadWithPath(createReadStream("path/to/file"), "upload-path"); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**uploadable:** `core.file.Uploadable` + +
+
+ +
+
+ +**param:** `string` + +
+
+ +
+
+ +**requestOptions:** `ParamsClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +## Endpoints Primitive +
client.endpoints.primitive.getAndReturnString({ ...params }) -> string +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.primitive.getAndReturnString("string"); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request:** `string` + +
+
+ +
+
+ +**requestOptions:** `PrimitiveClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +
client.endpoints.primitive.getAndReturnInt({ ...params }) -> number +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.primitive.getAndReturnInt(1); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request:** `number` + +
+
+ +
+
+ +**requestOptions:** `PrimitiveClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +
client.endpoints.primitive.getAndReturnLong({ ...params }) -> number +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.primitive.getAndReturnLong(1000000); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request:** `number` + +
+
+ +
+
+ +**requestOptions:** `PrimitiveClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +
client.endpoints.primitive.getAndReturnDouble({ ...params }) -> number +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.primitive.getAndReturnDouble(1.1); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request:** `number` + +
+
+ +
+
+ +**requestOptions:** `PrimitiveClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +
client.endpoints.primitive.getAndReturnBool({ ...params }) -> boolean +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.primitive.getAndReturnBool(true); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request:** `boolean` + +
+
+ +
+
+ +**requestOptions:** `PrimitiveClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +
client.endpoints.primitive.getAndReturnDatetime({ ...params }) -> string +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.primitive.getAndReturnDatetime("2024-01-15T09:30:00Z"); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request:** `string` + +
+
+ +
+
+ +**requestOptions:** `PrimitiveClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +
client.endpoints.primitive.getAndReturnDate({ ...params }) -> string +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.primitive.getAndReturnDate("2023-01-15"); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request:** `string` + +
+
+ +
+
+ +**requestOptions:** `PrimitiveClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +
client.endpoints.primitive.getAndReturnUuid({ ...params }) -> string +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.primitive.getAndReturnUuid("d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32"); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request:** `string` + +
+
+ +
+
+ +**requestOptions:** `PrimitiveClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +
client.endpoints.primitive.getAndReturnBase64({ ...params }) -> string +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.primitive.getAndReturnBase64("SGVsbG8gd29ybGQh"); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request:** `string` + +
+
+ +
+
+ +**requestOptions:** `PrimitiveClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +## Endpoints Put +
client.endpoints.put.add({ ...params }) -> SeedExhaustive.PutResponse +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.put.add({ + id: "id" +}); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request:** `SeedExhaustive.endpoints.PutRequest` + +
+
+ +
+
+ +**requestOptions:** `PutClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +## Endpoints Union +
client.endpoints.union.getAndReturnUnion({ ...params }) -> SeedExhaustive.Animal +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.union.getAndReturnUnion({ + animal: "dog", + name: "name", + likesToWoof: true +}); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request:** `SeedExhaustive.Animal` + +
+
+ +
+
+ +**requestOptions:** `UnionClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +## Endpoints Urls +
client.endpoints.urls.withMixedCase() -> string +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.urls.withMixedCase(); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**requestOptions:** `UrlsClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +
client.endpoints.urls.noEndingSlash() -> string +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.urls.noEndingSlash(); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**requestOptions:** `UrlsClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +
client.endpoints.urls.withEndingSlash() -> string +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.urls.withEndingSlash(); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**requestOptions:** `UrlsClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +
client.endpoints.urls.withUnderscores() -> string +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.endpoints.urls.withUnderscores(); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**requestOptions:** `UrlsClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +## InlinedRequests +
client.inlinedRequests.postWithObjectBodyandResponse({ ...params }) -> SeedExhaustive.ObjectWithOptionalField +
+
+ +#### 📝 Description + +
+
+ +
+
+ +POST with custom object in request body, response is an object +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.inlinedRequests.postWithObjectBodyandResponse({ + string: "string", + integer: 1, + NestedObject: { + string: "string", + integer: 1, + long: 1000000, + double: 1.1, + bool: true, + datetime: "2024-01-15T09:30:00Z", + date: "2023-01-15", + uuid: "d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32", + base64: "SGVsbG8gd29ybGQh", + list: ["list", "list"], + set: ["set"], + map: { + 1: "map" + }, + bigint: "1000000" + } +}); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request:** `SeedExhaustive.PostWithObjectBody` + +
+
+ +
+
+ +**requestOptions:** `InlinedRequestsClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +## NoAuth +
client.noAuth.postWithNoAuth({ ...params }) -> boolean +
+
+ +#### 📝 Description + +
+
+ +
+
+ +POST request with no auth +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.noAuth.postWithNoAuth({ + "key": "value" +}); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request:** `unknown` + +
+
+ +
+
+ +**requestOptions:** `NoAuthClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +## NoReqBody +
client.noReqBody.getWithNoRequestBody() -> SeedExhaustive.ObjectWithOptionalField +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.noReqBody.getWithNoRequestBody(); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**requestOptions:** `NoReqBodyClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +
client.noReqBody.postWithNoRequestBody() -> string +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.noReqBody.postWithNoRequestBody(); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**requestOptions:** `NoReqBodyClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ +## ReqWithHeaders +
client.reqWithHeaders.getWithCustomHeader({ ...params }) -> void +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.reqWithHeaders.getWithCustomHeader({ + "X-TEST-SERVICE-HEADER": "X-TEST-SERVICE-HEADER", + "X-TEST-ENDPOINT-HEADER": "X-TEST-ENDPOINT-HEADER", + body: "string" +}); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request:** `SeedExhaustive.ReqWithHeaders` + +
+
+ +
+
+ +**requestOptions:** `ReqWithHeadersClient.RequestOptions` + +
+
+
+
+ + +
+
+
+ diff --git a/seed/ts-sdk/seed.yml b/seed/ts-sdk/seed.yml index e8e4c32d0e5f..3e17010ca8e7 100644 --- a/seed/ts-sdk/seed.yml +++ b/seed/ts-sdk/seed.yml @@ -335,11 +335,11 @@ fixtures: - outputFolder: serde customConfig: noSerdeLayer: false - shouldGenerateWebsocketClients: true + generateWebSocketClients: true - outputFolder: no-serde customConfig: noSerdeLayer: true - shouldGenerateWebsocketClients: true + generateWebSocketClients: true property-access: - outputFolder: no-custom-config customConfig: null @@ -349,11 +349,11 @@ fixtures: websocket-bearer-auth: - outputFolder: websockets customConfig: - shouldGenerateWebsocketClients: true + generateWebSocketClients: true websocket-inferred-auth: - outputFolder: websockets customConfig: - shouldGenerateWebsocketClients: true + generateWebSocketClients: true any-auth: - outputFolder: no-custom-config customConfig: null diff --git a/seed/ts-sdk/websocket-bearer-auth/websockets/.fern/metadata.json b/seed/ts-sdk/websocket-bearer-auth/websockets/.fern/metadata.json index 8c6ec6c5cf62..3fd4b356c88f 100644 --- a/seed/ts-sdk/websocket-bearer-auth/websockets/.fern/metadata.json +++ b/seed/ts-sdk/websocket-bearer-auth/websockets/.fern/metadata.json @@ -3,7 +3,7 @@ "generatorName": "fernapi/fern-typescript-sdk", "generatorVersion": "latest", "generatorConfig": { - "shouldGenerateWebsocketClients": true + "generateWebSocketClients": true }, "originGitCommit": "DUMMY", "sdkVersion": "0.0.1" diff --git a/seed/ts-sdk/websocket-inferred-auth/websockets/.fern/metadata.json b/seed/ts-sdk/websocket-inferred-auth/websockets/.fern/metadata.json index 8c6ec6c5cf62..3fd4b356c88f 100644 --- a/seed/ts-sdk/websocket-inferred-auth/websockets/.fern/metadata.json +++ b/seed/ts-sdk/websocket-inferred-auth/websockets/.fern/metadata.json @@ -3,7 +3,7 @@ "generatorName": "fernapi/fern-typescript-sdk", "generatorVersion": "latest", "generatorConfig": { - "shouldGenerateWebsocketClients": true + "generateWebSocketClients": true }, "originGitCommit": "DUMMY", "sdkVersion": "0.0.1" diff --git a/seed/ts-sdk/websocket/no-serde/.fern/metadata.json b/seed/ts-sdk/websocket/no-serde/.fern/metadata.json index f0d753c9d4e9..c56e9a23291d 100644 --- a/seed/ts-sdk/websocket/no-serde/.fern/metadata.json +++ b/seed/ts-sdk/websocket/no-serde/.fern/metadata.json @@ -4,7 +4,7 @@ "generatorVersion": "latest", "generatorConfig": { "noSerdeLayer": true, - "shouldGenerateWebsocketClients": true + "generateWebSocketClients": true }, "originGitCommit": "DUMMY", "sdkVersion": "0.0.1" diff --git a/seed/ts-sdk/websocket/serde/.fern/metadata.json b/seed/ts-sdk/websocket/serde/.fern/metadata.json index baf6d380563d..31f4e599bbba 100644 --- a/seed/ts-sdk/websocket/serde/.fern/metadata.json +++ b/seed/ts-sdk/websocket/serde/.fern/metadata.json @@ -4,7 +4,7 @@ "generatorVersion": "latest", "generatorConfig": { "noSerdeLayer": false, - "shouldGenerateWebsocketClients": true + "generateWebSocketClients": true }, "originGitCommit": "DUMMY", "sdkVersion": "0.0.1"