typescript-fetch generator

https://openapi-generator.tech/docs/generators/typescript-fetch

## To Run the demo code

```bash
npm install
./run.sh
# Set `TOKEN` in `src/example_script.ts` to a valid bearer token.
npm start
```


## Pros / Cons

Pros
- Automatic conversion between camelCase to snake_case for requests and responses.
- Concrete TS types for all models and errors.
- The `fetch` logic is abstracted with in the IdentityApi class. 

Cons
- No type validation on the response like Zod provides.
- The type names are really long (ex. `GetMyAllowedTenantsIdentitySelfAllowedTenantsPostRequest).
- The `IdentityApi` may need `OwsPdpDataSource` behavior that's not included by default.

## Example run / output

[example_script.ts](./src/example_script.ts)

```shell
$ ts-node src/example_script.ts

Allowed Tenants: {
  resourceType: 'audience',
  action: 'view',
  tenants: [
    {
      tenantType: 'account',
      tenantUuid: '0268c332-8e7c-4c4e-9bb3-04532eb51c82',
      subaccount: undefined,
      account: undefined,
      companyBrand: undefined,
      tenantId: undefined
    },
    {
      tenantType: 'subaccount',
      tenantUuid: 'a2dbe1e9-e100-4ec1-88ae-75d4f8cec8f6',
      subaccount: undefined,
      account: undefined,
      companyBrand: undefined,
      tenantId: undefined
    }
  ]
}
My Roles: {
  cursor: { cursor: undefined, shorthand: undefined },
  errors: {},
  tenants: {
    '0268c332-8e7c-4c4e-9bb3-04532eb51c82': {
      tenantType: 'account',
      tenantUuid: '0268c332-8e7c-4c4e-9bb3-04532eb51c82',
      roles: [Array]
    },
    'a2dbe1e9-e100-4ec1-88ae-75d4f8cec8f6': {
      tenantType: 'subaccount',
      tenantUuid: 'a2dbe1e9-e100-4ec1-88ae-75d4f8cec8f6',
      roles: [Array]
    }
  }
}
```



