Skip to content
Snippets Groups Projects
tank-types.ts 30 KiB
Newer Older
 * This file was auto-generated by `make update-types` at 2023-10-13 19:41:45.807Z.
 * DO NOT make changes to this file.
 */

export interface paths {
  '/api/v1/playlists': {
    /**
     * List playlists
     * @description Lists all playlists.
     */
    get: {
      parameters: {
          /** @description Limit number of results */
          /** @description Start listing from offset */
          offset?: number
        }
      }
      responses: {
        /** @description OK */
        200: {
          content: {
            'application/json': components['schemas']['v1.PlaylistsListing']
          }
        }
        /** @description Bad Request */
        400: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Forbidden */
        403: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Internal Server Error */
        500: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
      }
    }
  }
  '/api/v1/playlists/{id}': {
    /**
     * Retrieve playlist
     * @description Retrieves a playlist.
     */
    get: {
      parameters: {
        path: {
          /** @description ID of the playlist */
          id: number
        }
      }
      responses: {
        /** @description OK */
        200: {
          content: {
            'application/json': components['schemas']['store.Playlist']
          }
        }
        /** @description Bad Request */
        400: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Forbidden */
        403: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Not Found */
        404: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Internal Server Error */
        500: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
      }
    }
  }
  '/api/v1/shows': {
    /**
     * List shows
     * @description Lists all existing shows
     */
    get: {
      parameters: {
          /** @description Limit number of results */
          /** @description Start listing from offset */
          offset?: number
        }
      }
      responses: {
        /** @description OK */
        200: {
          content: {
            'application/json': components['schemas']['v1.ShowsListing']
          }
        }
        /** @description Bad Request */
        400: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Internal Server Error */
        500: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
      }
    }
  }
  '/api/v1/shows/{name}': {
    /**
     * Create show
     * @description Creates a new show
     */
    post: {
      parameters: {
        query?: {
          /** @description If given, all files and playlists will be copied from the show */
          /** @description Name of the show to be created */
          name: string
        }
      }
      responses: {
        /** @description Created */
        201: {
          content: {
            'application/json': components['schemas']['store.Show']
          }
        }
        /** @description Forbidden */
        403: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Not Found */
        404: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Conflict */
        409: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Internal Server Error */
        500: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
      }
    }
    /**
     * Delete show
     * @description Deletes a show
     */
    delete: {
      parameters: {
        path: {
          /** @description Name of the show to be deleted */
          name: string
        }
      }
      responses: {
        /** @description No Content */
        204: {
          content: {}
        }
        /** @description Forbidden */
        403: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Internal Server Error */
        500: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
      }
    }
  }
  '/api/v1/shows/{name}/files': {
    /**
     * List files
     * @description Lists files of show
     */
    get: {
      parameters: {
        query?: {
          /** @description Limit number of results */
          /** @description Start listing from offset */
          /** @description Name of the show */
          name: string
        }
      }
      responses: {
        /** @description OK */
        200: {
          content: {
            'application/json': components['schemas']['v1.FilesListing']
          }
        }
        /** @description Bad Request */
        400: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Forbidden */
        403: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Internal Server Error */
        500: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
      }
    }
    /**
     * Add file
     * @description Adds a file and starts import
     */
    post: {
      parameters: {
        query?: {
          /** @description running|done - If given, return not before import has the given state */
          /** @description Name of the show */
          name: string
        }
      }
      /** @description URI of the file */
      requestBody: {
        content: {
          'application/json': components['schemas']['v1.FileCreateRequest']
        }
      }
      responses: {
        /** @description Created */
        201: {
          content: {
            'application/json': components['schemas']['store.File']
          }
        }
        /** @description Bad Request */
        400: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Forbidden */
        403: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Internal Server Error */
        500: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
      }
    }
  }
  '/api/v1/shows/{name}/files/{id}': {
    /**
     * Retrieve file
     * @description Retrieves file object.
     */
    get: {
      parameters: {
        path: {
          /** @description Name of the show */
          /** @description ID of the file */
          id: number
        }
      }
      responses: {
        /** @description OK */
        200: {
          content: {
            'application/json': components['schemas']['store.File']
          }
        }
        /** @description Bad Request */
        400: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Forbidden */
        403: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Not Found */
        404: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Internal Server Error */
        500: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
      }
    }
    /**
     * Delete file
     * @description Removes a file.
     */
    delete: {
      parameters: {
        path: {
          /** @description Name of the show */
          /** @description ID of the file */
          id: number
        }
      }
      responses: {
        /** @description No Content */
        204: {
          content: {}
        }
        /** @description Bad Request */
        400: {
          content: {
            '*/*': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Forbidden */
        403: {
          content: {
            '*/*': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Not Found */
        404: {
          content: {
            '*/*': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Conflict */
        409: {
          content: {
            '*/*': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Internal Server Error */
        500: {
          content: {
            '*/*': components['schemas']['v1.ErrorResponse']
          }
        }
      }
    }
    /**
     * Update file
     * @description Updates file metadata.
     */
    patch: {
      parameters: {
        path: {
          /** @description Name of the show */
          /** @description ID of the file */
          id: number
        }
      }
      /** @description File metadata */
      requestBody?: {
        content: {
          'application/json': components['schemas']['store.FileMetadata']
        }
      }
      responses: {
        /** @description OK */
        200: {
          content: {
            'application/json': components['schemas']['store.File']
          }
        }
        /** @description Bad Request */
        400: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Forbidden */
        403: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Not Found */
        404: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Internal Server Error */
        500: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
      }
    }
  }
  '/api/v1/shows/{name}/files/{id}/import': {
    /**
     * Retrieve import status
     * @description Retrieves import status of the file.
     */
    get: {
      parameters: {
        query?: {
          /** @description running|done - If given, return not before import has the given state */
          /** @description Name of the show */
          /** @description ID of the file */
          id: number
        }
      }
      responses: {
        /** @description OK */
        200: {
          content: {
            'application/json': components['schemas']['importer.Job']
          }
        }
        /** @description Bad Request */
        400: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Forbidden */
        403: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description No job for this file */
        404: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Internal Server Error */
        500: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
      }
    }
    /**
     * Cancel file import
     * @description Cancels import of file.
     */
    delete: {
      parameters: {
        path: {
          /** @description Name of the show */
          /** @description ID of the file */
          id: number
        }
      }
      responses: {
        /** @description No Content */
        204: {
          content: {}
        }
        /** @description Bad Request */
        400: {
          content: {
            '*/*': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Forbidden */
        403: {
          content: {
            '*/*': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description No job for this file */
        404: {
          content: {
            '*/*': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Internal Server Error */
        500: {
          content: {
            '*/*': components['schemas']['v1.ErrorResponse']
          }
        }
      }
    }
  }
  '/api/v1/shows/{name}/files/{id}/logs': {
    /**
     * Retrieve import logs
     * @description Retrieves import logs of the file.
     */
    get: {
      parameters: {
        path: {
          /** @description Name of the show */
          /** @description ID of the file */
          id: number
        }
      }
      responses: {
        /** @description OK */
        200: {
          content: {
            'application/json': components['schemas']['v1.FileImportLogs']
          }
        }
        /** @description Bad Request */
        400: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Forbidden */
        403: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Not Found */
        404: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Internal Server Error */
        500: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
      }
    }
  }
  '/api/v1/shows/{name}/files/{id}/upload': {
    /**
     * Upload file content
     * @description Uploads file content. Only available if file was created using SourceURI set to upload://-type and file import state is running.
     */
    get: {
      parameters: {
        query: {
          /** @description A unique identifier for the uploaded file */
          /** @description Name of the show */
          /** @description ID of the file */
          id: number
        }
      }
      responses: {
        /** @description OK */
        200: {
          content: {}
        }
        /** @description No Content */
        204: {
          content: {}
        }
        /** @description Bad Request */
        400: {
          content: {
            '*/*': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Forbidden */
        403: {
          content: {
            '*/*': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Conflict */
        409: {
          content: {
            '*/*': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Internal Server Error */
        500: {
          content: {
            '*/*': components['schemas']['v1.ErrorResponse']
          }
        }
      }
    }
    /**
     * Upload file content
     * @description Uploads file content. Only available if file was created using SourceURI set to upload://-type and file import state is running.
     */
    put: {
      parameters: {
        path: {
          /** @description Name of the show */
          /** @description ID of the file */
          id: number
        }
      }
      responses: {
        /** @description OK */
        200: {
          content: {}
        }
        /** @description Bad Request */
        400: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Forbidden */
        403: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Not Found */
        404: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Internal Server Error */
        500: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
      }
    }
    /**
     * Upload file content
     * @description Uploads file content via flow.js. Only available if file was created using SourceURI set to upload://-type and file import state is running.
     */
    post: {
      parameters: {
        path: {
          /** @description Name of the show */
          /** @description ID of the file */
          id: number
        }
      }
      responses: {
        /** @description OK */
        200: {
          content: {}
        }
        /** @description Bad Request */
        400: {
          content: {
            '*/*': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Forbidden */
        403: {
          content: {
            '*/*': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Conflict */
        409: {
          content: {
            '*/*': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Internal Server Error */
        500: {
          content: {
            '*/*': components['schemas']['v1.ErrorResponse']
          }
        }
      }
    }
  }
  '/api/v1/shows/{name}/files/{id}/usage': {
    /**
     * List referring playlists
     * @description Lists playlists referring to the file.
     */
    get: {
      parameters: {
        path: {
          /** @description Name of the show */
          /** @description ID of the file */
          id: number
        }
      }
      responses: {
        /** @description OK */
        200: {
          content: {
            'application/json': components['schemas']['v1.FileUsageListing']
          }
        }
        /** @description Bad Request */
        400: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Forbidden */
        403: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Not Found */
        404: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Internal Server Error */
        500: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
      }
    }
  }
  '/api/v1/shows/{name}/imports': {
    /**
     * List imports
     * @description Lists all running and pending imports
     */
    get: {
      parameters: {
        query?: {
          /** @description Limit number of results */
          /** @description Start listing from offset */
          /** @description Name of the show */
          name: string
        }
      }
      responses: {
        /** @description OK */
        200: {
          content: {
            'application/json': components['schemas']['v1.JobsListing']
          }
        }
        /** @description Bad Request */
        400: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Forbidden */
        403: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Internal Server Error */
        500: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
      }
    }
  }
  '/api/v1/shows/{name}/playlists': {
    /**
     * List playlists
     * @description Lists playlists of show.
     */
    get: {
      parameters: {
        query?: {
          /** @description Limit number of results */
          /** @description Start listing from offset */
          /** @description Name of the show */
          name: string
        }
      }
      responses: {
        /** @description OK */
        200: {
          content: {
            'application/json': components['schemas']['v1.PlaylistsListing']
          }
        }
        /** @description Bad Request */
        400: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Forbidden */
        403: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Internal Server Error */
        500: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
      }
    }
    /**
     * Create playlist
     * @description Creates a new playlist for the show.
     */
    post: {
      parameters: {
        path: {
          /** @description Name of the show */
          name: string
        }
      }
      /** @description Playlist data */
      requestBody: {
        content: {
          'application/json': components['schemas']['store.Playlist']
        }
      }
      responses: {
        /** @description Created */
        201: {
          content: {
            'application/json': components['schemas']['store.Playlist']
          }
        }
        /** @description Bad Request */
        400: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Forbidden */
        403: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Internal Server Error */
        500: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
      }
    }
  }
  '/api/v1/shows/{name}/playlists/{id}': {
    /**
     * Retrieve playlist
     * @description Retrieves a playlist of a show.
     */
    get: {
      parameters: {
        path: {
          /** @description Name of the show */
          /** @description ID of the playlist */
          id: number
        }
      }
      responses: {
        /** @description OK */
        200: {
          content: {
            'application/json': components['schemas']['store.Playlist']
          }
        }
        /** @description Bad Request */
        400: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Forbidden */
        403: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Not Found */
        404: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Internal Server Error */
        500: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
      }
    }
    /**
     * Update playlist
     * @description Updates a playlist of a show.
     */
    put: {
      parameters: {
        path: {
          /** @description Name of the show */
          /** @description ID of the playlist */
          id: number
        }
      }
      /** @description Playlist data */
      requestBody: {
        content: {
          'application/json': components['schemas']['store.Playlist']
        }
      }
      responses: {
        /** @description OK */
        200: {
          content: {
            'application/json': components['schemas']['store.Playlist']
          }
        }
        /** @description Bad Request */
        400: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Forbidden */
        403: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Not Found */
        404: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Internal Server Error */
        500: {
          content: {
            'application/json': components['schemas']['v1.ErrorResponse']
          }
        }
      }
    }
    /**
     * Delete playlist
     * @description Deletes a playlist of a show.
     */
    delete: {
      parameters: {
        path: {
          /** @description Name of the show */
          /** @description ID of the playlist */
          id: number
        }
      }
      responses: {
        /** @description No Content */
        204: {
          content: {}
        }
        /** @description Bad Request */
        400: {
          content: {
            '*/*': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Forbidden */
        403: {
          content: {
            '*/*': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Not Found */
        404: {
          content: {
            '*/*': components['schemas']['v1.ErrorResponse']
          }
        }
        /** @description Internal Server Error */
        500: {
          content: {
            '*/*': components['schemas']['v1.ErrorResponse']
          }
        }
      }
    }
  }
  '/healthz': {
    /**
     * Check health
     * @description Checks daemon health.
     */
    get: {
      responses: {
        /** @description OK */
        200: {
          content: {
            'application/json': components['schemas']['main.Health']
          }
        }
        /** @description Service Unavailable */
        503: {
          content: {
            'application/json': components['schemas']['main.Health']
          }
        }
      }
    }
  }
}

export type webhooks = Record<string, never>

export interface components {
  schemas: {
    'importer.Job': {
      created?: string
      id?: number
      progress?: number
      show?: string
      source?: components['schemas']['importer.SourceURL']
      started?: number
      state?: components['schemas']['importer.JobState']
      user?: string
    /** @enum {integer} */
    'importer.JobState': 0 | 1 | 2 | 3 | 4 | 5
    'importer.SourceURL': string
    'main.Health': {
      auth?: string
      importer?: string
      store?: string
    }
    'store.File': {
      created?: string
      duration?: number
      id?: number
      metadata?: components['schemas']['store.FileMetadata']
      show?: string
      size?: number
      source?: components['schemas']['store.FileSource']
      updated?: string
    }
    'store.FileMetadata': {
      album?: string
      /** @description actually a full-text index would be nice here... */
      artist?: string
      isrc?: string
      organization?: string
      title?: string
    }
    'store.FileSource': {
      hash?: string
      import?: components['schemas']['store.Import']
      uri?: string
    }
    'store.Import': {
      error?: string
      state?: string
    }
    'store.ImportLogs': {
      [key: string]: components['schemas']['store.Log']
    }
    'store.Log': Record<string, never>
    'store.Playlist': {
      created?: string
      description?: string
      entries?: components['schemas']['store.PlaylistEntry'][]
      id?: number
      playoutMode?: string
      show?: string
      updated?: string
    }
    'store.PlaylistEntry': {
      duration?: number
      file?: components['schemas']['store.File']
      uri?: string
    }
    'store.Show': {
      created?: string
      name?: string
      updated?: string
    }
    'url.Userinfo': Record<string, never>
    'v1.ErrorResponse': {
      detail?: Record<string, never>
      error?: string
    }
    'v1.FileCreateRequest': {
      /** @enum {string} */
      sourceURI?: 'upload://<filename>' | 'https://<host>/<path>' | 'file:///<path>'
    }
    'v1.FileImportLogs': {
      results?: components['schemas']['store.ImportLogs']
    }
    'v1.FileUsageListing': {
      results?: components['schemas']['v1_FileUsageListing_results']
    }
    'v1.FilesListing': {
      results?: components['schemas']['store.File'][]
    }
    'v1.JobsListing': {
      results?: components['schemas']['importer.Job'][]
    }
    'v1.PlaylistsListing': {
      results?: components['schemas']['store.Playlist'][]
    }
    'v1.ShowsListing': {
      results?: components['schemas']['store.Show'][]
    }
    v1_FileUsageListing_results: {
      playlists?: components['schemas']['store.Playlist'][]
    }
  }
  responses: never
  parameters: never
  requestBodies: never
  headers: never
  pathItems: never
}

export type $defs = Record<string, never>

export type external = Record<string, never>

export type operations = Record<string, never>