SurfSense/surfsense_web/lib/apis/podcasts-api.service.ts

62 lines
1.7 KiB
TypeScript
Raw Normal View History

2025-11-18 11:32:29 +02:00
import {
2025-11-18 11:35:06 +02:00
type GeneratePodcastRequest,
type GetPodcastByChatIdRequest,
generatePodcastRequest,
getPodcastByChatIdRequest,
2025-11-18 18:35:48 +02:00
getPodcastByChatResponse,
2025-11-18 11:35:06 +02:00
type Podcast,
2025-11-18 11:32:29 +02:00
} from "@/contracts/types/podcast.types";
import { ValidationError } from "../error";
2025-11-18 11:35:06 +02:00
import { baseApiService } from "./base-api.service";
2025-11-18 11:32:29 +02:00
class PodcastsApiService {
2025-11-18 11:35:06 +02:00
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}`);
}
2025-11-18 18:35:48 +02:00
return baseApiService.get(
`/api/v1/podcasts/by-chat/${request.chat_id}`,
getPodcastByChatResponse
);
2025-11-18 11:35:06 +02:00
};
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, {
2025-11-18 18:35:48 +02:00
body: parsedRequest.data,
2025-11-18 11:35:06 +02:00
});
};
loadPodcast = async ({
podcast,
controller,
}: {
podcast: Podcast;
controller?: AbortController;
}) => {
return await baseApiService.getBlob(`/api/v1/podcasts/${podcast.id}/stream`, {
signal: controller?.signal,
});
};
2025-11-18 11:32:29 +02:00
}
export const podcastsApiService = new PodcastsApiService();