Mirror of static site repo git.pfy.ch/pfych/static
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657import { getParameter } from '../../lib/secrets';import { plexUrl } from './plex';import { err, ok, Result } from 'neverthrow';import { ErrorWithCode, newError, PlexErrors,} from 'web-shared/src/types/errors';
export const getArtwork = async ( path: string,): Promise< Result<{ data: ArrayBuffer; contentType: string }, ErrorWithCode<PlexErrors>>> => { try { const plexToken = await getParameter('/web-api/plex-api-token', true);
if (plexToken.isErr()) { return err(newError('PlexTokenError', 'Unable to fetch plex token')); }
const response = await fetch( `${plexUrl}/${path}?X-Plex-Token=${plexToken.value}`, { method: 'GET', }, );
if (!response.ok) { return err( newError<PlexErrors>('ArtworkNotFound', 'Unable to fetch artwork'), ); }
const data = await response.arrayBuffer(); const contentType = response.headers.get('Content-Type') || 'image/png';
if (!['image/png', 'image/jpg', 'image/jpeg'].includes(contentType)) { return err( newError<PlexErrors>( 'UnexpectedMimeType', `Received unexpected contentType`, { contentType }, ), ); }
return ok({ data, contentType }); } catch (error) { return err( newError<PlexErrors>('ServerError', 'An unexpected error occured', { error, }), ); }};