SurfSense/surfsense_web/lib/apis/podcasts-api.service.ts
2025-11-20 08:17:56 +02:00

68 lines
1.8 KiB
TypeScript

import { baseApiService } from "./base-api.service";
import {
GeneratePodcastRequest,
generatePodcastRequest,
getPodcastByChatIdRequest,
GetPodcastByChatIdRequest,
Podcast,
podcast,
} from "@/contracts/types/podcast.types";
import { ValidationError } from "../error";
class PodcastsApiService {
getPodcastByChatId = async (request: GetPodcastByChatIdRequest) => {
// Validate the request
const parsedRequest = getPodcastByChatIdRequest.safeParse(request);
if (!parsedRequest.success) {
console.error("Invalid request:", parsedRequest.error);
// Format a user frendly error message
const errorMessage = parsedRequest.error.errors
.map((err) => err.message)
.join(", ");
throw new ValidationError(`Invalid request: ${errorMessage}`);
}
return baseApiService.get(
`/api/v1/podcasts/by-chat/${request.chat_id}`,
podcast
);
};
generatePodcast = async (request: GeneratePodcastRequest) => {
// Validate the request
const parsedRequest = generatePodcastRequest.safeParse(request);
if (!parsedRequest.success) {
console.error("Invalid request:", parsedRequest.error);
// Format a user frendly error message
const errorMessage = parsedRequest.error.errors
.map((err) => err.message)
.join(", ");
throw new ValidationError(`Invalid request: ${errorMessage}`);
}
return baseApiService.post(`/api/v1/podcasts/generate`, undefined, {
body: request,
});
};
loadPodcast = async ({
podcast,
controller,
}: {
podcast: Podcast;
controller?: AbortController;
}) => {
return await baseApiService.getBlob(
`/api/v1/podcasts/${podcast.id}/stream`,
{
signal: controller?.signal,
}
);
};
}
export const podcastsApiService = new PodcastsApiService();