import { IpcClientService } from "@autoplex/ipc"; import { Microservice } from "@autoplex/microservice"; import { SOCKET_PATH } from "./constants"; import { IMovie, IMovieDetails, IPaginatedResponse } from "./schema"; export class IpcClient extends IpcClientService { /** * The name of the service */ public readonly NAME = "Search"; /** * The path to the socket file */ protected readonly SOCKET_PATH = SOCKET_PATH; /** * Get the details of a movie */ public async movieDetails(tmdbId: number) { let result = await this.request("details", tmdbId); if (result.error) { console.error("Failed to fetch movie details:", result.error); throw new Error("Failed to fetch movie details"); } return result.data; } /** * Find a movie by its IMDb ID */ public async findMovieFromImdb(imdbId: string) { let result = await this.request("find", imdbId); if (result.error) { console.error("Failed to find a movie by its IMDb ID:", result.error); throw new Error("Failed to find a movie by its IMDb ID"); } return result.data; } /** * Search for a movie */ public async searchMovie(query: string, year?: number, page?: number) { let result = await this.request("search", { query, year, page }); if (result.error) { console.error("Failed to search for a movie:", result.error); throw new Error("Failed to search for a movie"); } return >result.data; } /** * Verify an IMDb ID */ public async verifyImdbId(imdbId: string) { let result = await this.request("verify_imdb_id", imdbId); if (result.error) { console.error("Failed to verify an IMDb ID:", result.error); throw new Error("Failed to verify an IMDb ID"); } return result.data; } }