import { Album, AlbumBaseWithRefs, AlbumWithRefs, Artist, ArtistBaseWithRefs, ArtistWithRefs, IntegrationData, IntegrationDataWithId, IntegrationDataWithSecret, isAlbumBaseWithRefs, isAlbumWithRefs, isArtistBaseWithRefs, isArtistWithRefs, isIntegrationData, isPartialIntegrationData, isTagBaseWithRefs, isTagWithRefs, isTrackBaseWithRefs, isTrackWithRefs, PartialIntegrationData, Tag, TagBaseWithRefs, TagWithRefs, TrackBaseWithRefs, TrackWithDetails, TrackWithRefs } from "../types/resources"; // The API supports RESTful access to single API resources: // - GET for retrieving details about a single item // - PUT for replacing a single item // - POST for creating a new item // - PATCH for modifying a single item // - DELETE for deleting a single item // // The above are implemented for: // - tracks // - artists // - albums // - tags // - integrations // // The following special requests exist in addition: // - Merge a tag into another using a POST // - List all integrations using a GET // Get track details (GET). export const GetTrackEndpoint = '/track/:id'; export type GetTrackResponse = TrackWithDetails; // Get artist details (GET). export const GetArtistEndpoint = '/artist/:id'; export type GetArtistResponse = Artist; // Get album details (GET). export const GetAlbumEndpoint = "/album/:id"; export type GetAlbumResponse = Album; // Get tag details (GET). export const GetTagEndpoint = "/tag/:id"; export type GetTagResponse = Tag; // Get integration details (GET). export const GetIntegrationEndpoint = "/integration/:id"; export type GetIntegrationResponse = IntegrationData; // Post new track (POST). export const PostTrackEndpoint = "/track"; export type PostTrackRequest = TrackWithRefs; export interface PostTrackResponse { id: number }; export const checkPostTrackRequest: (v: any) => boolean = isTrackWithRefs; // Post new artist (POST). export const PostArtistEndpoint = "/artist"; export type PostArtistRequest = ArtistWithRefs; export interface PostArtistResponse { id: number }; export const checkPostArtistRequest: (v: any) => boolean = isArtistWithRefs; // Post new album (POST). export const PostAlbumEndpoint = "/album"; export type PostAlbumRequest = AlbumWithRefs; export interface PostAlbumResponse { id: number }; export const checkPostAlbumRequest: (v: any) => boolean = isAlbumWithRefs; // Post new tag (POST). export const PostTagEndpoint = "/tag"; export type PostTagRequest = TagWithRefs; export interface PostTagResponse { id: number }; export const checkPostTagRequest: (v: any) => boolean = isTagWithRefs; // Post new integration (POST). export const PostIntegrationEndpoint = "/integration"; export type PostIntegrationRequest = IntegrationDataWithSecret; export interface PostIntegrationResponse { id: number }; export const checkPostIntegrationRequest: (v: any) => boolean = isIntegrationData; // Replace track (PUT). export const PutTrackEndpoint = "/track/:id"; export type PutTrackRequest = TrackWithRefs; export type PutTrackResponse = void; export const checkPutTrackRequest: (v: any) => boolean = isTrackWithRefs; // Replace artist (PUT). export const PutArtistEndpoint = "/artist/:id"; export type PutArtistRequest = ArtistWithRefs; export type PutArtistResponse = void; export const checkPutArtistRequest: (v: any) => boolean = isArtistWithRefs; // Replace album (PUT). export const PutAlbumEndpoint = "/album/:id"; export type PutAlbumRequest = AlbumWithRefs; export type PutAlbumResponse = void; export const checkPutAlbumRequest: (v: any) => boolean = isAlbumWithRefs; // Replace tag (PUT). export const PutTagEndpoint = "/tag/:id"; export type PutTagRequest = TagWithRefs; export type PutTagResponse = void; export const checkPutTagRequest: (v: any) => boolean = isTagWithRefs; // Replace integration (PUT). export const PutIntegrationEndpoint = "/integration/:id"; export type PutIntegrationRequest = IntegrationDataWithSecret; export type PutIntegrationResponse = void; export const checkPutIntegrationRequest: (v: any) => boolean = isIntegrationData; // Modify track (PATCH). export const PatchTrackEndpoint = "/track/:id"; export type PatchTrackRequest = TrackBaseWithRefs; export type PatchTrackResponse = void; export const checkPatchTrackRequest: (v: any) => boolean = isTrackBaseWithRefs; // Modify artist (PATCH). export const PatchArtistEndpoint = "/artist/:id"; export type PatchArtistRequest = ArtistBaseWithRefs; export type PatchArtistResponse = void; export const checkPatchArtistRequest: (v: any) => boolean = isArtistBaseWithRefs; // Modify album (PATCH). export const PatchAlbumEndpoint = "/album/:id"; export type PatchAlbumRequest = AlbumBaseWithRefs; export type PatchAlbumResponse = void; export const checkPatchAlbumRequest: (v: any) => boolean = isAlbumBaseWithRefs; // Modify tag (PATCH). export const PatchTagEndpoint = "/tag/:id"; export type PatchTagRequest = TagBaseWithRefs; export type PatchTagResponse = void; export const checkPatchTagRequest: (v: any) => boolean = isTagBaseWithRefs; // Modify integration (PATCH). export const PatchIntegrationEndpoint = "/integration/:id"; export type PatchIntegrationRequest = PartialIntegrationData; export type PatchIntegrationResponse = void; export const checkPatchIntegrationRequest: (v: any) => boolean = isPartialIntegrationData; // DELETE track. export const DeleteTrackEndpoint = '/track/:id'; export type DeleteTrackResponse = void // DELETE artist. export const DeleteArtistEndpoint = '/artist/:id'; export type DeleteArtistResponse = void // DELETE album. export const DeleteAlbumEndpoint = "/album/:id"; export type DeleteAlbumResponse = void // DELETE tag. export const DeleteTagEndpoint = "/tag/:id"; export type DeleteTagResponse = void // DELETE integration. export const DeleteIntegrationEndpoint = "/integration/:id"; export type DeleteIntegrationResponse = void // List integrations (GET). export const ListIntegrationsEndpoint = "/integration"; export type ListIntegrationsResponse = IntegrationDataWithId[]; // Merge tag (POST). // This will tag any items which are tagged by :id // with :toId instead, and then delete tag :id. export const MergeTagEndpoint = '/tag/:id/merge/:toId'; export type MergeTagResponse = void;