diff --git a/src/lib/server/apple-music-client.ts b/src/lib/server/apple-music-client.ts index 221798d..1369dbb 100644 --- a/src/lib/server/apple-music-client.ts +++ b/src/lib/server/apple-music-client.ts @@ -51,11 +51,16 @@ async function makeAppleMusicRequest(endpoint: string, identifier?: string): if (!response.ok) { const errorText = await response.text() - logger.error('Apple Music API error response:', undefined, { - status: response.status, - statusText: response.statusText, - body: errorText - }, 'music') + logger.error( + 'Apple Music API error response:', + undefined, + { + status: response.status, + statusText: response.statusText, + body: errorText + }, + 'music' + ) // Record failure and handle rate limiting if (identifier) { @@ -232,7 +237,8 @@ export async function findAlbum(artist: string, album: string): Promise 0) { - logger.music('debug', + logger.music( + 'debug', `No match found for "${album}", trying without leading punctuation: "${cleanedAlbum}"` ) result = await searchAndMatch(cleanedAlbum) @@ -258,7 +264,12 @@ export async function findAlbum(artist: string, album: string): Promise { - logger.music('debug', + logger.music( + 'debug', `Track ${index + 1}: ${track.name} - Preview: ${track.previewUrl ? 'Yes' : 'No'} - Duration: ${track.durationMs}ms` ) }) diff --git a/src/lib/server/cloudinary-audit.ts b/src/lib/server/cloudinary-audit.ts index 1c51b60..9edac95 100644 --- a/src/lib/server/cloudinary-audit.ts +++ b/src/lib/server/cloudinary-audit.ts @@ -317,7 +317,7 @@ export async function cleanupBrokenReferences(publicIds: string[]): Promise<{ // Handle gallery items if (project.gallery && typeof project.gallery === 'object') { const gallery = project.gallery as any[] - const cleanedGallery = gallery.filter(item => { + const cleanedGallery = gallery.filter((item) => { if (item.url?.includes('cloudinary.com')) { const publicId = extractPublicId(item.url) return !(publicId && publicIds.includes(publicId)) @@ -362,7 +362,7 @@ export async function cleanupBrokenReferences(publicIds: string[]): Promise<{ // Handle attachments if (post.attachments && typeof post.attachments === 'object') { const attachments = post.attachments as any[] - const cleanedAttachments = attachments.filter(attachment => { + const cleanedAttachments = attachments.filter((attachment) => { if (attachment.url?.includes('cloudinary.com')) { const publicId = extractPublicId(attachment.url) return !(publicId && publicIds.includes(publicId)) diff --git a/src/lib/server/cloudinary.ts b/src/lib/server/cloudinary.ts index 384767d..4115c6d 100644 --- a/src/lib/server/cloudinary.ts +++ b/src/lib/server/cloudinary.ts @@ -96,9 +96,8 @@ export async function uploadFile( } } - const aspectRatio = localResult.width && localResult.height - ? localResult.width / localResult.height - : undefined + const aspectRatio = + localResult.width && localResult.height ? localResult.width / localResult.height : undefined return { success: true, diff --git a/src/lib/server/logger.ts b/src/lib/server/logger.ts index 140f691..00baee5 100644 --- a/src/lib/server/logger.ts +++ b/src/lib/server/logger.ts @@ -19,8 +19,8 @@ class Logger { // Parse DEBUG environment variable to enable specific categories const debugEnv = process.env.DEBUG || '' if (debugEnv) { - const categories = debugEnv.split(',').map(c => c.trim()) as LogCategory[] - categories.forEach(cat => this.debugCategories.add(cat)) + const categories = debugEnv.split(',').map((c) => c.trim()) as LogCategory[] + categories.forEach((cat) => this.debugCategories.add(cat)) } } @@ -43,11 +43,11 @@ class Logger { private formatLog(entry: LogEntry): string { const parts = [`[${entry.timestamp}]`, `[${entry.level.toUpperCase()}]`] - + if (entry.category) { parts.push(`[${entry.category.toUpperCase()}]`) } - + parts.push(entry.message) if (entry.context) { @@ -64,7 +64,13 @@ class Logger { return parts.join(' ') } - private log(level: LogLevel, message: string, context?: Record, error?: Error, category?: LogCategory) { + private log( + level: LogLevel, + message: string, + context?: Record, + error?: Error, + category?: LogCategory + ) { if (!this.shouldLog(level, category)) return const entry: LogEntry = { diff --git a/src/routes/api/admin/cloudinary-audit/+server.ts b/src/routes/api/admin/cloudinary-audit/+server.ts index 436e08c..50bd5f4 100644 --- a/src/routes/api/admin/cloudinary-audit/+server.ts +++ b/src/routes/api/admin/cloudinary-audit/+server.ts @@ -1,7 +1,11 @@ import { json } from '@sveltejs/kit' import type { RequestHandler } from './$types' import { checkAdminAuth } from '$lib/server/api-utils' -import { auditCloudinaryResources, deleteOrphanedFiles, cleanupBrokenReferences } from '$lib/server/cloudinary-audit' +import { + auditCloudinaryResources, + deleteOrphanedFiles, + cleanupBrokenReferences +} from '$lib/server/cloudinary-audit' import { formatBytes } from '$lib/utils/format' import { isCloudinaryConfigured } from '$lib/server/cloudinary' diff --git a/src/routes/api/admin/media-stats/+server.ts b/src/routes/api/admin/media-stats/+server.ts index 0d8f8ea..1070f18 100644 --- a/src/routes/api/admin/media-stats/+server.ts +++ b/src/routes/api/admin/media-stats/+server.ts @@ -56,7 +56,7 @@ export const GET: RequestHandler = async (event) => { }) const greyDominantColors = mediaWithColors.filter( - media => media.dominantColor && isGreyColor(media.dominantColor) + (media) => media.dominantColor && isGreyColor(media.dominantColor) ).length const stats = { @@ -77,4 +77,4 @@ export const GET: RequestHandler = async (event) => { 500 ) } -} \ No newline at end of file +} diff --git a/src/routes/api/admin/regenerate-thumbnails/+server.ts b/src/routes/api/admin/regenerate-thumbnails/+server.ts index c6b0026..81fb756 100644 --- a/src/routes/api/admin/regenerate-thumbnails/+server.ts +++ b/src/routes/api/admin/regenerate-thumbnails/+server.ts @@ -61,7 +61,7 @@ export const POST: RequestHandler = async (event) => { // Generate new thumbnail URL with aspect ratio preservation // 800px on the longest edge let thumbnailUrl: string - + if (media.width && media.height) { // Use actual dimensions if available if (media.width > media.height) { @@ -108,12 +108,13 @@ export const POST: RequestHandler = async (event) => { // Log progress every 10 items if (results.processed % 10 === 0) { - logger.info(`Thumbnail regeneration progress: ${results.processed}/${mediaWithOldThumbnails.length}`) + logger.info( + `Thumbnail regeneration progress: ${results.processed}/${mediaWithOldThumbnails.length}` + ) } // Add a small delay to avoid rate limiting - await new Promise(resolve => setTimeout(resolve, 50)) - + await new Promise((resolve) => setTimeout(resolve, 50)) } catch (error) { results.failed++ results.processed++ @@ -161,7 +162,6 @@ export const POST: RequestHandler = async (event) => { ...results, photosUpdated: photosWithOldThumbnails.length }) - } catch (error) { logger.error('Thumbnail regeneration error', error as Error) return errorResponse( @@ -169,4 +169,4 @@ export const POST: RequestHandler = async (event) => { 500 ) } -} \ No newline at end of file +} diff --git a/src/routes/api/lastfm/stream/+server.ts b/src/routes/api/lastfm/stream/+server.ts index be33c43..bf250e0 100644 --- a/src/routes/api/lastfm/stream/+server.ts +++ b/src/routes/api/lastfm/stream/+server.ts @@ -82,7 +82,12 @@ export const GET: RequestHandler = async ({ request }) => { return withAppleMusic } catch (error) { - logger.error(`Error enriching album ${album.name}:`, error as Error, undefined, 'music') + logger.error( + `Error enriching album ${album.name}:`, + error as Error, + undefined, + 'music' + ) return album } }) @@ -91,7 +96,8 @@ export const GET: RequestHandler = async ({ request }) => { // Ensure only one album is marked as now playing in the enriched albums const nowPlayingCount = enrichedAlbums.filter((a) => a.isNowPlaying).length if (nowPlayingCount > 1) { - logger.music('debug', + logger.music( + 'debug', `Multiple enriched albums marked as now playing (${nowPlayingCount}), keeping only the most recent one` ) @@ -101,11 +107,17 @@ export const GET: RequestHandler = async ({ request }) => { enrichedAlbums.forEach((album, index) => { if (album.isNowPlaying) { if (foundFirst) { - logger.music('debug', `Marking album "${album.name}" at position ${index} as not playing`) + logger.music( + 'debug', + `Marking album "${album.name}" at position ${index} as not playing` + ) album.isNowPlaying = false album.nowPlayingTrack = undefined } else { - logger.music('debug', `Keeping album "${album.name}" at position ${index} as now playing`) + logger.music( + 'debug', + `Keeping album "${album.name}" at position ${index} as now playing` + ) foundFirst = true } } @@ -184,7 +196,8 @@ export const GET: RequestHandler = async ({ request }) => { (album.isNowPlaying && album.nowPlayingTrack !== lastTrack) ) { updates.push(album) - logger.music('debug', + logger.music( + 'debug', `Now playing update for non-recent album ${album.albumName}: playing=${album.isNowPlaying}, track=${album.nowPlayingTrack}` ) } @@ -334,7 +347,8 @@ async function getNowPlayingAlbums(client: LastClient): Promise a.isNowPlaying) if (nowPlayingAlbums.length > 1) { - logger.music('debug', + logger.music( + 'debug', `Multiple albums marked as now playing (${nowPlayingAlbums.length}), keeping only the most recent one` ) @@ -436,7 +450,8 @@ function checkWithTracks( ) if (now < trackEndTime) { - logger.music('debug', + logger.music( + 'debug', `Track "${mostRecentTrack.trackName}" is still playing (ends at ${trackEndTime.toLocaleTimeString()})` ) return {