/* tslint:disable */
/* eslint-disable */
/**
 * Apideck
 * The Apideck OpenAPI Spec: SDK Optimized
 *
 * The version of the OpenAPI document: 10.13.0
 * Contact: support@apideck.com
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

import {
  CopyFolderRequest,
  CopyFolderRequestToJSON,
  CreateDriveGroupResponse,
  CreateDriveGroupResponseFromJSON,
  CreateDriveResponse,
  CreateDriveResponseFromJSON,
  CreateFolderRequest,
  CreateFolderRequestToJSON,
  CreateFolderResponse,
  CreateFolderResponseFromJSON,
  CreateSharedLinkResponse,
  CreateSharedLinkResponseFromJSON,
  CreateUploadSessionRequest,
  CreateUploadSessionRequestToJSON,
  CreateUploadSessionResponse,
  CreateUploadSessionResponseFromJSON,
  DeleteDriveGroupResponse,
  DeleteDriveGroupResponseFromJSON,
  DeleteDriveResponse,
  DeleteDriveResponseFromJSON,
  DeleteFileResponse,
  DeleteFileResponseFromJSON,
  DeleteFolderResponse,
  DeleteFolderResponseFromJSON,
  DeleteSharedLinkResponse,
  DeleteSharedLinkResponseFromJSON,
  DeleteUploadSessionResponse,
  DeleteUploadSessionResponseFromJSON,
  Drive,
  DriveGroup,
  DriveGroupsFilter,
  DriveGroupToJSON,
  DrivesFilter,
  DriveToJSON,
  FilesFilter,
  FilesSearch,
  FilesSearchToJSON,
  FilesSort,
  GetDriveGroupResponse,
  GetDriveGroupResponseFromJSON,
  GetDriveGroupsResponse,
  GetDriveGroupsResponseFromJSON,
  GetDriveResponse,
  GetDriveResponseFromJSON,
  GetDrivesResponse,
  GetDrivesResponseFromJSON,
  GetFileResponse,
  GetFileResponseFromJSON,
  GetFilesResponse,
  GetFilesResponseFromJSON,
  GetFolderResponse,
  GetFolderResponseFromJSON,
  GetSharedLinkResponse,
  GetSharedLinkResponseFromJSON,
  GetSharedLinksResponse,
  GetSharedLinksResponseFromJSON,
  GetUploadSessionResponse,
  GetUploadSessionResponseFromJSON,
  PassThroughQuery,
  SharedLink,
  SharedLinkToJSON,
  UpdateDriveGroupResponse,
  UpdateDriveGroupResponseFromJSON,
  UpdateDriveResponse,
  UpdateDriveResponseFromJSON,
  UpdateFileRequest,
  UpdateFileRequestToJSON,
  UpdateFileResponse,
  UpdateFileResponseFromJSON,
  UpdateFolderRequest,
  UpdateFolderRequestToJSON,
  UpdateFolderResponse,
  UpdateFolderResponseFromJSON,
  UpdateSharedLinkResponse,
  UpdateSharedLinkResponseFromJSON
} from '../models'
import * as runtime from '../runtime'

export interface FileStorageApiDriveGroupsAddRequest {
  driveGroup: DriveGroup
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
}

export interface FileStorageApiDriveGroupsAllRequest {
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
  cursor?: string | null
  limit?: number
  filter?: DriveGroupsFilter
  passThrough?: PassThroughQuery
  fields?: string | null
}

export interface FileStorageApiDriveGroupsDeleteRequest {
  id: string
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface FileStorageApiDriveGroupsOneRequest {
  id: string
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
  fields?: string | null
}

export interface FileStorageApiDriveGroupsUpdateRequest {
  id: string
  driveGroup: DriveGroup
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface FileStorageApiDrivesAddRequest {
  drive: Drive
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
}

export interface FileStorageApiDrivesAllRequest {
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
  cursor?: string | null
  limit?: number
  filter?: DrivesFilter
  fields?: string | null
}

export interface FileStorageApiDrivesDeleteRequest {
  id: string
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface FileStorageApiDrivesOneRequest {
  id: string
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
  fields?: string | null
}

export interface FileStorageApiDrivesUpdateRequest {
  id: string
  drive: Drive
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface FileStorageApiFilesAllRequest {
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
  cursor?: string | null
  limit?: number
  filter?: FilesFilter
  sort?: FilesSort
  passThrough?: PassThroughQuery
  fields?: string | null
}

export interface FileStorageApiFilesDeleteRequest {
  id: string
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface FileStorageApiFilesDownloadRequest {
  id: string
  consumerId?: string
  appId?: string
  serviceId?: string
  fields?: string | null
}

export interface FileStorageApiFilesExportRequest {
  id: string
  format: string
  consumerId?: string
  appId?: string
  serviceId?: string
  fields?: string | null
}

export interface FileStorageApiFilesOneRequest {
  id: string
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
  fields?: string | null
}

export interface FileStorageApiFilesSearchRequest {
  filesSearch: FilesSearch
  consumerId?: string
  appId?: string
  serviceId?: string
  passThrough?: PassThroughQuery
  fields?: string | null
  cursor?: string | null
  limit?: number
  raw?: boolean
  filter?: FilesFilter
}

export interface FileStorageApiFilesUpdateRequest {
  id: string
  file: UpdateFileRequest
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface FileStorageApiFoldersAddRequest {
  folder: CreateFolderRequest
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
  fields?: string | null
}

export interface FileStorageApiFoldersCopyRequest {
  id: string
  folder: CopyFolderRequest
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
  fields?: string | null
}

export interface FileStorageApiFoldersDeleteRequest {
  id: string
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface FileStorageApiFoldersOneRequest {
  id: string
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
  fields?: string | null
}

export interface FileStorageApiFoldersUpdateRequest {
  id: string
  folder: UpdateFolderRequest
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface FileStorageApiSharedLinksAddRequest {
  sharedLink: SharedLink
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
}

export interface FileStorageApiSharedLinksAllRequest {
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
  cursor?: string | null
  limit?: number
  passThrough?: PassThroughQuery
  fields?: string | null
}

export interface FileStorageApiSharedLinksDeleteRequest {
  id: string
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface FileStorageApiSharedLinksOneRequest {
  id: string
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
  fields?: string | null
}

export interface FileStorageApiSharedLinksUpdateRequest {
  id: string
  sharedLink: SharedLink
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface FileStorageApiUploadSessionsAddRequest {
  uploadSession: CreateUploadSessionRequest
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
}

export interface FileStorageApiUploadSessionsDeleteRequest {
  id: string
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface FileStorageApiUploadSessionsFinishRequest {
  id: string
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
  digest?: string
  body?: object
}

export interface FileStorageApiUploadSessionsOneRequest {
  id: string
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
  fields?: string | null
}

/**
 *
 */
export class FileStorageApi extends runtime.BaseAPI {
  /**
   * Create DriveGroup
   * Create DriveGroup
   */
  async driveGroupsAddRaw(
    requestParameters: FileStorageApiDriveGroupsAddRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<CreateDriveGroupResponse>> {
    if (requestParameters.driveGroup === null || requestParameters.driveGroup === undefined) {
      throw new runtime.RequiredError(
        'driveGroup',
        'Required parameter requestParameters.driveGroup was null or undefined when calling driveGroupsAdd.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/file-storage/drive-groups`,
        method: 'POST',
        headers: headerParameters,
        query: queryParameters,
        body: DriveGroupToJSON(requestParameters.driveGroup)
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      CreateDriveGroupResponseFromJSON(jsonValue)
    )
  }

  /**
   * Create DriveGroup
   * Create DriveGroup
   */
  async driveGroupsAdd(
    requestParameters: FileStorageApiDriveGroupsAddRequest,
    initOverrides?: RequestInit
  ): Promise<CreateDriveGroupResponse> {
    const response = await this.driveGroupsAddRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * List DriveGroups
   * List DriveGroups
   */
  async driveGroupsAllRaw(
    requestParameters: FileStorageApiDriveGroupsAllRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetDriveGroupsResponse>> {
    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    if (requestParameters.cursor !== undefined) {
      queryParameters['cursor'] = requestParameters.cursor
    }

    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit
    }

    if (requestParameters.filter !== undefined) {
      queryParameters['filter'] = requestParameters.filter
    }

    if (requestParameters.passThrough !== undefined) {
      queryParameters['pass_through'] = requestParameters.passThrough
    }

    if (requestParameters.fields !== undefined) {
      queryParameters['fields'] = requestParameters.fields
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/file-storage/drive-groups`,
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      GetDriveGroupsResponseFromJSON(jsonValue)
    )
  }

  /**
   * List DriveGroups
   * List DriveGroups
   */
  async driveGroupsAll(
    requestParameters: FileStorageApiDriveGroupsAllRequest = {},
    initOverrides?: RequestInit
  ): Promise<GetDriveGroupsResponse> {
    const response = await this.driveGroupsAllRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Delete DriveGroup
   * Delete DriveGroup
   */
  async driveGroupsDeleteRaw(
    requestParameters: FileStorageApiDriveGroupsDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<DeleteDriveGroupResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling driveGroupsDelete.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/file-storage/drive-groups/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'DELETE',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      DeleteDriveGroupResponseFromJSON(jsonValue)
    )
  }

  /**
   * Delete DriveGroup
   * Delete DriveGroup
   */
  async driveGroupsDelete(
    requestParameters: FileStorageApiDriveGroupsDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<DeleteDriveGroupResponse> {
    const response = await this.driveGroupsDeleteRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Get DriveGroup
   * Get DriveGroup
   */
  async driveGroupsOneRaw(
    requestParameters: FileStorageApiDriveGroupsOneRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetDriveGroupResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling driveGroupsOne.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    if (requestParameters.fields !== undefined) {
      queryParameters['fields'] = requestParameters.fields
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/file-storage/drive-groups/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      GetDriveGroupResponseFromJSON(jsonValue)
    )
  }

  /**
   * Get DriveGroup
   * Get DriveGroup
   */
  async driveGroupsOne(
    requestParameters: FileStorageApiDriveGroupsOneRequest,
    initOverrides?: RequestInit
  ): Promise<GetDriveGroupResponse> {
    const response = await this.driveGroupsOneRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Update DriveGroup
   * Update DriveGroup
   */
  async driveGroupsUpdateRaw(
    requestParameters: FileStorageApiDriveGroupsUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<UpdateDriveGroupResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling driveGroupsUpdate.'
      )
    }

    if (requestParameters.driveGroup === null || requestParameters.driveGroup === undefined) {
      throw new runtime.RequiredError(
        'driveGroup',
        'Required parameter requestParameters.driveGroup was null or undefined when calling driveGroupsUpdate.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/file-storage/drive-groups/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'PATCH',
        headers: headerParameters,
        query: queryParameters,
        body: DriveGroupToJSON(requestParameters.driveGroup)
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      UpdateDriveGroupResponseFromJSON(jsonValue)
    )
  }

  /**
   * Update DriveGroup
   * Update DriveGroup
   */
  async driveGroupsUpdate(
    requestParameters: FileStorageApiDriveGroupsUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<UpdateDriveGroupResponse> {
    const response = await this.driveGroupsUpdateRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Create Drive
   * Create Drive
   */
  async drivesAddRaw(
    requestParameters: FileStorageApiDrivesAddRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<CreateDriveResponse>> {
    if (requestParameters.drive === null || requestParameters.drive === undefined) {
      throw new runtime.RequiredError(
        'drive',
        'Required parameter requestParameters.drive was null or undefined when calling drivesAdd.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/file-storage/drives`,
        method: 'POST',
        headers: headerParameters,
        query: queryParameters,
        body: DriveToJSON(requestParameters.drive)
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      CreateDriveResponseFromJSON(jsonValue)
    )
  }

  /**
   * Create Drive
   * Create Drive
   */
  async drivesAdd(
    requestParameters: FileStorageApiDrivesAddRequest,
    initOverrides?: RequestInit
  ): Promise<CreateDriveResponse> {
    const response = await this.drivesAddRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * List Drives
   * List Drives
   */
  async drivesAllRaw(
    requestParameters: FileStorageApiDrivesAllRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetDrivesResponse>> {
    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    if (requestParameters.cursor !== undefined) {
      queryParameters['cursor'] = requestParameters.cursor
    }

    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit
    }

    if (requestParameters.filter !== undefined) {
      queryParameters['filter'] = requestParameters.filter
    }

    if (requestParameters.fields !== undefined) {
      queryParameters['fields'] = requestParameters.fields
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/file-storage/drives`,
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue => GetDrivesResponseFromJSON(jsonValue))
  }

  /**
   * List Drives
   * List Drives
   */
  async drivesAll(
    requestParameters: FileStorageApiDrivesAllRequest = {},
    initOverrides?: RequestInit
  ): Promise<GetDrivesResponse> {
    const response = await this.drivesAllRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Delete Drive
   * Delete Drive
   */
  async drivesDeleteRaw(
    requestParameters: FileStorageApiDrivesDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<DeleteDriveResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling drivesDelete.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/file-storage/drives/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'DELETE',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      DeleteDriveResponseFromJSON(jsonValue)
    )
  }

  /**
   * Delete Drive
   * Delete Drive
   */
  async drivesDelete(
    requestParameters: FileStorageApiDrivesDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<DeleteDriveResponse> {
    const response = await this.drivesDeleteRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Get Drive
   * Get Drive
   */
  async drivesOneRaw(
    requestParameters: FileStorageApiDrivesOneRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetDriveResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling drivesOne.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    if (requestParameters.fields !== undefined) {
      queryParameters['fields'] = requestParameters.fields
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/file-storage/drives/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue => GetDriveResponseFromJSON(jsonValue))
  }

  /**
   * Get Drive
   * Get Drive
   */
  async drivesOne(
    requestParameters: FileStorageApiDrivesOneRequest,
    initOverrides?: RequestInit
  ): Promise<GetDriveResponse> {
    const response = await this.drivesOneRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Update Drive
   * Update Drive
   */
  async drivesUpdateRaw(
    requestParameters: FileStorageApiDrivesUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<UpdateDriveResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling drivesUpdate.'
      )
    }

    if (requestParameters.drive === null || requestParameters.drive === undefined) {
      throw new runtime.RequiredError(
        'drive',
        'Required parameter requestParameters.drive was null or undefined when calling drivesUpdate.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/file-storage/drives/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'PATCH',
        headers: headerParameters,
        query: queryParameters,
        body: DriveToJSON(requestParameters.drive)
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      UpdateDriveResponseFromJSON(jsonValue)
    )
  }

  /**
   * Update Drive
   * Update Drive
   */
  async drivesUpdate(
    requestParameters: FileStorageApiDrivesUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<UpdateDriveResponse> {
    const response = await this.drivesUpdateRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * List Files
   * List Files
   */
  async filesAllRaw(
    requestParameters: FileStorageApiFilesAllRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetFilesResponse>> {
    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    if (requestParameters.cursor !== undefined) {
      queryParameters['cursor'] = requestParameters.cursor
    }

    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit
    }

    if (requestParameters.filter !== undefined) {
      queryParameters['filter'] = requestParameters.filter
    }

    if (requestParameters.sort !== undefined) {
      queryParameters['sort'] = requestParameters.sort
    }

    if (requestParameters.passThrough !== undefined) {
      queryParameters['pass_through'] = requestParameters.passThrough
    }

    if (requestParameters.fields !== undefined) {
      queryParameters['fields'] = requestParameters.fields
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/file-storage/files`,
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue => GetFilesResponseFromJSON(jsonValue))
  }

  /**
   * List Files
   * List Files
   */
  async filesAll(
    requestParameters: FileStorageApiFilesAllRequest = {},
    initOverrides?: RequestInit
  ): Promise<GetFilesResponse> {
    const response = await this.filesAllRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Delete File
   * Delete File
   */
  async filesDeleteRaw(
    requestParameters: FileStorageApiFilesDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<DeleteFileResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling filesDelete.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/file-storage/files/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'DELETE',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue => DeleteFileResponseFromJSON(jsonValue))
  }

  /**
   * Delete File
   * Delete File
   */
  async filesDelete(
    requestParameters: FileStorageApiFilesDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<DeleteFileResponse> {
    const response = await this.filesDeleteRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Download File
   * Download File
   */
  async filesDownloadRaw(
    requestParameters: FileStorageApiFilesDownloadRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<Blob>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling filesDownload.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.fields !== undefined) {
      queryParameters['fields'] = requestParameters.fields
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/file-storage/files/{id}/download`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.BlobApiResponse(response)
  }

  /**
   * Download File
   * Download File
   */
  async filesDownload(
    requestParameters: FileStorageApiFilesDownloadRequest,
    initOverrides?: RequestInit
  ): Promise<Blob> {
    const response = await this.filesDownloadRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Export File
   * Export File
   */
  async filesExportRaw(
    requestParameters: FileStorageApiFilesExportRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<Blob>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling filesExport.'
      )
    }

    if (requestParameters.format === null || requestParameters.format === undefined) {
      throw new runtime.RequiredError(
        'format',
        'Required parameter requestParameters.format was null or undefined when calling filesExport.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.fields !== undefined) {
      queryParameters['fields'] = requestParameters.fields
    }

    if (requestParameters.format !== undefined) {
      queryParameters['format'] = requestParameters.format
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/file-storage/files/{id}/export`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.BlobApiResponse(response)
  }

  /**
   * Export File
   * Export File
   */
  async filesExport(
    requestParameters: FileStorageApiFilesExportRequest,
    initOverrides?: RequestInit
  ): Promise<Blob> {
    const response = await this.filesExportRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Get File
   * Get File
   */
  async filesOneRaw(
    requestParameters: FileStorageApiFilesOneRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetFileResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling filesOne.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    if (requestParameters.fields !== undefined) {
      queryParameters['fields'] = requestParameters.fields
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/file-storage/files/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue => GetFileResponseFromJSON(jsonValue))
  }

  /**
   * Get File
   * Get File
   */
  async filesOne(
    requestParameters: FileStorageApiFilesOneRequest,
    initOverrides?: RequestInit
  ): Promise<GetFileResponse> {
    const response = await this.filesOneRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Search Files
   * Search Files
   */
  async filesSearchRaw(
    requestParameters: FileStorageApiFilesSearchRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetFilesResponse>> {
    if (requestParameters.filesSearch === null || requestParameters.filesSearch === undefined) {
      throw new runtime.RequiredError(
        'filesSearch',
        'Required parameter requestParameters.filesSearch was null or undefined when calling filesSearch.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.passThrough !== undefined) {
      queryParameters['pass_through'] = requestParameters.passThrough
    }

    if (requestParameters.fields !== undefined) {
      queryParameters['fields'] = requestParameters.fields
    }

    if (requestParameters.cursor !== undefined) {
      queryParameters['cursor'] = requestParameters.cursor
    }

    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit
    }

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    if (requestParameters.filter !== undefined) {
      queryParameters['filter'] = requestParameters.filter
    }

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/file-storage/files/search`,
        method: 'POST',
        headers: headerParameters,
        query: queryParameters,
        body: FilesSearchToJSON(requestParameters.filesSearch)
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue => GetFilesResponseFromJSON(jsonValue))
  }

  /**
   * Search Files
   * Search Files
   */
  async filesSearch(
    requestParameters: FileStorageApiFilesSearchRequest,
    initOverrides?: RequestInit
  ): Promise<GetFilesResponse> {
    const response = await this.filesSearchRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Rename or move File
   * Rename or move File
   */
  async filesUpdateRaw(
    requestParameters: FileStorageApiFilesUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<UpdateFileResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling filesUpdate.'
      )
    }

    if (requestParameters.file === null || requestParameters.file === undefined) {
      throw new runtime.RequiredError(
        'file',
        'Required parameter requestParameters.file was null or undefined when calling filesUpdate.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/file-storage/files/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'PATCH',
        headers: headerParameters,
        query: queryParameters,
        body: UpdateFileRequestToJSON(requestParameters.file)
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue => UpdateFileResponseFromJSON(jsonValue))
  }

  /**
   * Rename or move File
   * Rename or move File
   */
  async filesUpdate(
    requestParameters: FileStorageApiFilesUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<UpdateFileResponse> {
    const response = await this.filesUpdateRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Create Folder
   * Create Folder
   */
  async foldersAddRaw(
    requestParameters: FileStorageApiFoldersAddRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<CreateFolderResponse>> {
    if (requestParameters.folder === null || requestParameters.folder === undefined) {
      throw new runtime.RequiredError(
        'folder',
        'Required parameter requestParameters.folder was null or undefined when calling foldersAdd.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    if (requestParameters.fields !== undefined) {
      queryParameters['fields'] = requestParameters.fields
    }

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/file-storage/folders`,
        method: 'POST',
        headers: headerParameters,
        query: queryParameters,
        body: CreateFolderRequestToJSON(requestParameters.folder)
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      CreateFolderResponseFromJSON(jsonValue)
    )
  }

  /**
   * Create Folder
   * Create Folder
   */
  async foldersAdd(
    requestParameters: FileStorageApiFoldersAddRequest,
    initOverrides?: RequestInit
  ): Promise<CreateFolderResponse> {
    const response = await this.foldersAddRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Copy Folder
   * Copy Folder
   */
  async foldersCopyRaw(
    requestParameters: FileStorageApiFoldersCopyRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<UpdateFolderResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling foldersCopy.'
      )
    }

    if (requestParameters.folder === null || requestParameters.folder === undefined) {
      throw new runtime.RequiredError(
        'folder',
        'Required parameter requestParameters.folder was null or undefined when calling foldersCopy.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    if (requestParameters.fields !== undefined) {
      queryParameters['fields'] = requestParameters.fields
    }

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/file-storage/folders/{id}/copy`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'POST',
        headers: headerParameters,
        query: queryParameters,
        body: CopyFolderRequestToJSON(requestParameters.folder)
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      UpdateFolderResponseFromJSON(jsonValue)
    )
  }

  /**
   * Copy Folder
   * Copy Folder
   */
  async foldersCopy(
    requestParameters: FileStorageApiFoldersCopyRequest,
    initOverrides?: RequestInit
  ): Promise<UpdateFolderResponse> {
    const response = await this.foldersCopyRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Delete Folder
   * Delete Folder
   */
  async foldersDeleteRaw(
    requestParameters: FileStorageApiFoldersDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<DeleteFolderResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling foldersDelete.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/file-storage/folders/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'DELETE',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      DeleteFolderResponseFromJSON(jsonValue)
    )
  }

  /**
   * Delete Folder
   * Delete Folder
   */
  async foldersDelete(
    requestParameters: FileStorageApiFoldersDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<DeleteFolderResponse> {
    const response = await this.foldersDeleteRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Get Folder
   * Get Folder
   */
  async foldersOneRaw(
    requestParameters: FileStorageApiFoldersOneRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetFolderResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling foldersOne.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    if (requestParameters.fields !== undefined) {
      queryParameters['fields'] = requestParameters.fields
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/file-storage/folders/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue => GetFolderResponseFromJSON(jsonValue))
  }

  /**
   * Get Folder
   * Get Folder
   */
  async foldersOne(
    requestParameters: FileStorageApiFoldersOneRequest,
    initOverrides?: RequestInit
  ): Promise<GetFolderResponse> {
    const response = await this.foldersOneRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Rename or move Folder
   * Rename or move Folder
   */
  async foldersUpdateRaw(
    requestParameters: FileStorageApiFoldersUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<UpdateFolderResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling foldersUpdate.'
      )
    }

    if (requestParameters.folder === null || requestParameters.folder === undefined) {
      throw new runtime.RequiredError(
        'folder',
        'Required parameter requestParameters.folder was null or undefined when calling foldersUpdate.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/file-storage/folders/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'PATCH',
        headers: headerParameters,
        query: queryParameters,
        body: UpdateFolderRequestToJSON(requestParameters.folder)
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      UpdateFolderResponseFromJSON(jsonValue)
    )
  }

  /**
   * Rename or move Folder
   * Rename or move Folder
   */
  async foldersUpdate(
    requestParameters: FileStorageApiFoldersUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<UpdateFolderResponse> {
    const response = await this.foldersUpdateRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Create Shared Link
   * Create Shared Link
   */
  async sharedLinksAddRaw(
    requestParameters: FileStorageApiSharedLinksAddRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<CreateSharedLinkResponse>> {
    if (requestParameters.sharedLink === null || requestParameters.sharedLink === undefined) {
      throw new runtime.RequiredError(
        'sharedLink',
        'Required parameter requestParameters.sharedLink was null or undefined when calling sharedLinksAdd.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/file-storage/shared-links`,
        method: 'POST',
        headers: headerParameters,
        query: queryParameters,
        body: SharedLinkToJSON(requestParameters.sharedLink)
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      CreateSharedLinkResponseFromJSON(jsonValue)
    )
  }

  /**
   * Create Shared Link
   * Create Shared Link
   */
  async sharedLinksAdd(
    requestParameters: FileStorageApiSharedLinksAddRequest,
    initOverrides?: RequestInit
  ): Promise<CreateSharedLinkResponse> {
    const response = await this.sharedLinksAddRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * List SharedLinks
   * List SharedLinks
   */
  async sharedLinksAllRaw(
    requestParameters: FileStorageApiSharedLinksAllRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetSharedLinksResponse>> {
    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    if (requestParameters.cursor !== undefined) {
      queryParameters['cursor'] = requestParameters.cursor
    }

    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit
    }

    if (requestParameters.passThrough !== undefined) {
      queryParameters['pass_through'] = requestParameters.passThrough
    }

    if (requestParameters.fields !== undefined) {
      queryParameters['fields'] = requestParameters.fields
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/file-storage/shared-links`,
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      GetSharedLinksResponseFromJSON(jsonValue)
    )
  }

  /**
   * List SharedLinks
   * List SharedLinks
   */
  async sharedLinksAll(
    requestParameters: FileStorageApiSharedLinksAllRequest = {},
    initOverrides?: RequestInit
  ): Promise<GetSharedLinksResponse> {
    const response = await this.sharedLinksAllRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Delete Shared Link
   * Delete Shared Link
   */
  async sharedLinksDeleteRaw(
    requestParameters: FileStorageApiSharedLinksDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<DeleteSharedLinkResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling sharedLinksDelete.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/file-storage/shared-links/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'DELETE',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      DeleteSharedLinkResponseFromJSON(jsonValue)
    )
  }

  /**
   * Delete Shared Link
   * Delete Shared Link
   */
  async sharedLinksDelete(
    requestParameters: FileStorageApiSharedLinksDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<DeleteSharedLinkResponse> {
    const response = await this.sharedLinksDeleteRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Get Shared Link
   * Get Shared Link
   */
  async sharedLinksOneRaw(
    requestParameters: FileStorageApiSharedLinksOneRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetSharedLinkResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling sharedLinksOne.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    if (requestParameters.fields !== undefined) {
      queryParameters['fields'] = requestParameters.fields
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/file-storage/shared-links/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      GetSharedLinkResponseFromJSON(jsonValue)
    )
  }

  /**
   * Get Shared Link
   * Get Shared Link
   */
  async sharedLinksOne(
    requestParameters: FileStorageApiSharedLinksOneRequest,
    initOverrides?: RequestInit
  ): Promise<GetSharedLinkResponse> {
    const response = await this.sharedLinksOneRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Update Shared Link
   * Update Shared Link
   */
  async sharedLinksUpdateRaw(
    requestParameters: FileStorageApiSharedLinksUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<UpdateSharedLinkResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling sharedLinksUpdate.'
      )
    }

    if (requestParameters.sharedLink === null || requestParameters.sharedLink === undefined) {
      throw new runtime.RequiredError(
        'sharedLink',
        'Required parameter requestParameters.sharedLink was null or undefined when calling sharedLinksUpdate.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/file-storage/shared-links/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'PATCH',
        headers: headerParameters,
        query: queryParameters,
        body: SharedLinkToJSON(requestParameters.sharedLink)
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      UpdateSharedLinkResponseFromJSON(jsonValue)
    )
  }

  /**
   * Update Shared Link
   * Update Shared Link
   */
  async sharedLinksUpdate(
    requestParameters: FileStorageApiSharedLinksUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<UpdateSharedLinkResponse> {
    const response = await this.sharedLinksUpdateRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Start an Upload Session. Upload sessions are used to upload large files, use the [Upload File](#operation/filesUpload) endpoint to upload smaller files (up to 100MB). Note that the base URL is upload.apideck.com instead of unify.apideck.com. For more information on uploads, refer to the [file upload guide](/guides/file-upload).
   * Start Upload Session
   */
  async uploadSessionsAddRaw(
    requestParameters: FileStorageApiUploadSessionsAddRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<CreateUploadSessionResponse>> {
    if (requestParameters.uploadSession === null || requestParameters.uploadSession === undefined) {
      throw new runtime.RequiredError(
        'uploadSession',
        'Required parameter requestParameters.uploadSession was null or undefined when calling uploadSessionsAdd.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/file-storage/upload-sessions`,
        method: 'POST',
        headers: headerParameters,
        query: queryParameters,
        body: CreateUploadSessionRequestToJSON(requestParameters.uploadSession)
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      CreateUploadSessionResponseFromJSON(jsonValue)
    )
  }

  /**
   * Start an Upload Session. Upload sessions are used to upload large files, use the [Upload File](#operation/filesUpload) endpoint to upload smaller files (up to 100MB). Note that the base URL is upload.apideck.com instead of unify.apideck.com. For more information on uploads, refer to the [file upload guide](/guides/file-upload).
   * Start Upload Session
   */
  async uploadSessionsAdd(
    requestParameters: FileStorageApiUploadSessionsAddRequest,
    initOverrides?: RequestInit
  ): Promise<CreateUploadSessionResponse> {
    const response = await this.uploadSessionsAddRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Abort Upload Session. Note that the base URL is upload.apideck.com instead of unify.apideck.com. For more information on uploads, refer to the [file upload guide](/guides/file-upload).
   * Abort Upload Session
   */
  async uploadSessionsDeleteRaw(
    requestParameters: FileStorageApiUploadSessionsDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<DeleteUploadSessionResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling uploadSessionsDelete.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/file-storage/upload-sessions/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'DELETE',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      DeleteUploadSessionResponseFromJSON(jsonValue)
    )
  }

  /**
   * Abort Upload Session. Note that the base URL is upload.apideck.com instead of unify.apideck.com. For more information on uploads, refer to the [file upload guide](/guides/file-upload).
   * Abort Upload Session
   */
  async uploadSessionsDelete(
    requestParameters: FileStorageApiUploadSessionsDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<DeleteUploadSessionResponse> {
    const response = await this.uploadSessionsDeleteRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Finish Upload Session. Only call this endpoint after all File parts have been uploaded to [Upload part of File](#operation/uploadSessionsUpload). Note that the base URL is upload.apideck.com instead of unify.apideck.com. For more information on uploads, refer to the [file upload guide](/guides/file-upload).
   * Finish Upload Session
   */
  async uploadSessionsFinishRaw(
    requestParameters: FileStorageApiUploadSessionsFinishRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetFileResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling uploadSessionsFinish.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (requestParameters.digest !== undefined && requestParameters.digest !== null) {
      headerParameters['digest'] = String(requestParameters.digest)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/file-storage/upload-sessions/{id}/finish`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'POST',
        headers: headerParameters,
        query: queryParameters,
        body: requestParameters.body as any
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue => GetFileResponseFromJSON(jsonValue))
  }

  /**
   * Finish Upload Session. Only call this endpoint after all File parts have been uploaded to [Upload part of File](#operation/uploadSessionsUpload). Note that the base URL is upload.apideck.com instead of unify.apideck.com. For more information on uploads, refer to the [file upload guide](/guides/file-upload).
   * Finish Upload Session
   */
  async uploadSessionsFinish(
    requestParameters: FileStorageApiUploadSessionsFinishRequest,
    initOverrides?: RequestInit
  ): Promise<GetFileResponse> {
    const response = await this.uploadSessionsFinishRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Get Upload Session. Use the `part_size` to split your file into parts. Upload the parts to the [Upload part of File](#operation/uploadSessionsUpload) endpoint. Note that the base URL is upload.apideck.com instead of unify.apideck.com. For more information on uploads, refer to the [file upload guide](/guides/file-upload).
   * Get Upload Session
   */
  async uploadSessionsOneRaw(
    requestParameters: FileStorageApiUploadSessionsOneRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetUploadSessionResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling uploadSessionsOne.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    if (requestParameters.fields !== undefined) {
      queryParameters['fields'] = requestParameters.fields
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/file-storage/upload-sessions/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      GetUploadSessionResponseFromJSON(jsonValue)
    )
  }

  /**
   * Get Upload Session. Use the `part_size` to split your file into parts. Upload the parts to the [Upload part of File](#operation/uploadSessionsUpload) endpoint. Note that the base URL is upload.apideck.com instead of unify.apideck.com. For more information on uploads, refer to the [file upload guide](/guides/file-upload).
   * Get Upload Session
   */
  async uploadSessionsOne(
    requestParameters: FileStorageApiUploadSessionsOneRequest,
    initOverrides?: RequestInit
  ): Promise<GetUploadSessionResponse> {
    const response = await this.uploadSessionsOneRaw(requestParameters, initOverrides)
    return await response.value()
  }
}
