# 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.
