Spaces:
Sleeping
Sleeping
File size: 2,994 Bytes
f871fed | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 | import apiClient from './client'
import { getApiUrl } from '@/lib/config'
import {
PodcastEpisode,
EpisodeProfile,
SpeakerProfile,
PodcastGenerationRequest,
PodcastGenerationResponse,
} from '@/lib/types/podcasts'
export type EpisodeProfileInput = Omit<EpisodeProfile, 'id'>
export type SpeakerProfileInput = Omit<SpeakerProfile, 'id'>
export async function resolvePodcastAssetUrl(path?: string | null): Promise<string | undefined> {
if (!path) {
return undefined
}
if (/^https?:\/\//i.test(path)) {
return path
}
const base = await getApiUrl()
if (path.startsWith('/')) {
return `${base}${path}`
}
return `${base}/${path}`
}
export const podcastsApi = {
listEpisodes: async () => {
const response = await apiClient.get<PodcastEpisode[]>('/podcasts/episodes')
return response.data
},
deleteEpisode: async (episodeId: string) => {
await apiClient.delete(`/podcasts/episodes/${episodeId}`)
},
listEpisodeProfiles: async () => {
const response = await apiClient.get<EpisodeProfile[]>('/episode-profiles')
return response.data
},
createEpisodeProfile: async (payload: EpisodeProfileInput) => {
const response = await apiClient.post<EpisodeProfile>(
'/episode-profiles',
payload
)
return response.data
},
updateEpisodeProfile: async (profileId: string, payload: EpisodeProfileInput) => {
const response = await apiClient.put<EpisodeProfile>(
`/episode-profiles/${profileId}`,
payload
)
return response.data
},
deleteEpisodeProfile: async (profileId: string) => {
await apiClient.delete(`/episode-profiles/${profileId}`)
},
duplicateEpisodeProfile: async (profileId: string) => {
const response = await apiClient.post<EpisodeProfile>(
`/episode-profiles/${profileId}/duplicate`
)
return response.data
},
listSpeakerProfiles: async () => {
const response = await apiClient.get<SpeakerProfile[]>('/speaker-profiles')
return response.data
},
createSpeakerProfile: async (payload: SpeakerProfileInput) => {
const response = await apiClient.post<SpeakerProfile>(
'/speaker-profiles',
payload
)
return response.data
},
updateSpeakerProfile: async (profileId: string, payload: SpeakerProfileInput) => {
const response = await apiClient.put<SpeakerProfile>(
`/speaker-profiles/${profileId}`,
payload
)
return response.data
},
deleteSpeakerProfile: async (profileId: string) => {
await apiClient.delete(`/speaker-profiles/${profileId}`)
},
duplicateSpeakerProfile: async (profileId: string) => {
const response = await apiClient.post<SpeakerProfile>(
`/speaker-profiles/${profileId}/duplicate`
)
return response.data
},
generatePodcast: async (payload: PodcastGenerationRequest) => {
const response = await apiClient.post<PodcastGenerationResponse>(
'/podcasts/generate',
payload
)
return response.data
},
}
|