From 6ddb411b94d573e39f3287fa2353846369ed960f Mon Sep 17 00:00:00 2001 From: uimaxbai <61615730+uimaxbai@users.noreply.github.com> Date: Sat, 18 Apr 2026 10:04:31 +0100 Subject: [PATCH] Revert --- functions/proxy-audio.js | 67 ---------------------------------------- js/HiFi.ts | 34 ++++++++++++++------ js/api.js | 10 ------ styles.css | 4 +-- test-search.js | 14 ++++++--- 5 files changed, 36 insertions(+), 93 deletions(-) delete mode 100644 functions/proxy-audio.js diff --git a/functions/proxy-audio.js b/functions/proxy-audio.js deleted file mode 100644 index e05a1e4..0000000 --- a/functions/proxy-audio.js +++ /dev/null @@ -1,67 +0,0 @@ -export async function onRequest(context) { - const { request } = context; - const url = new URL(request.url); - const targetUrl = url.searchParams.get('url'); - - if (!targetUrl) { - return new Response('Missing url parameter', { status: 400 }); - } - - try { - const cacheUrl = new URL(request.url); - try { - const tidalUrl = new URL(targetUrl); - cacheUrl.searchParams.set('cache_key', tidalUrl.pathname); - } catch (e) {} - - const cacheKey = new Request(cacheUrl.toString(), request); - const cache = caches.default; - let response = await cache.match(cacheKey); - - if (!response) { - console.log('Cache Miss. Fetching from Tidal...'); - - const headers = new Headers(request.headers); - headers.delete('host'); - headers.delete('referer'); - headers.set( - 'User-Agent', - 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36' - ); - - response = await fetch(targetUrl, { - method: request.method, - headers: headers, - redirect: 'follow', - cf: { - cacheTtl: 2592000, - cacheEverything: true, - }, - }); - - if (request.method === 'GET' && response.ok) { - const cacheResponse = new Response(response.body, response); - cacheResponse.headers.set('Access-Control-Allow-Origin', '*'); - cacheResponse.headers.set('Cache-Control', 'public, max-age=2592000'); - - cacheResponse.headers.delete('Set-Cookie'); - - context.waitUntil(cache.put(cacheKey, cacheResponse.clone())); - response = cacheResponse; - } - } else { - console.log('Cache Hit! Serving from Edge.'); - } - - const newResponse = new Response(response.body, response); - newResponse.headers.set('Access-Control-Allow-Origin', '*'); - newResponse.headers.set('Access-Control-Allow-Methods', 'GET, HEAD, OPTIONS'); - newResponse.headers.set('Access-Control-Expose-Headers', '*'); - newResponse.headers.delete('content-security-policy'); - newResponse.headers.delete('x-frame-options'); - - return newResponse; - } catch (error) { - return new Response('Proxy Error: ' + error.message, { status: 500 }); - } -} diff --git a/js/HiFi.ts b/js/HiFi.ts index 8278320..3ae309a 100644 --- a/js/HiFi.ts +++ b/js/HiFi.ts @@ -1717,7 +1717,11 @@ class HiFiClient { const artist_url = `https://openapi.tidal.com/v2/artists/${id}`; const payload = await this.#fetchJson( artist_url, - { countryCode: this.#countryCode, include: 'albums,albums.coverArt,tracks,tracks.albums,biography,profileArt', collapseBy: 'FINGERPRINT' }, + { + countryCode: this.#countryCode, + include: 'albums,albums.coverArt,tracks,tracks.albums,biography,profileArt', + collapseBy: 'FINGERPRINT', + }, signal ); @@ -1746,7 +1750,7 @@ class HiFiClient { picture: getPic(data, 'profileArt') || data?.attributes?.selectedAlbumCoverFallback || null, }; - let picture = artist_data.picture; + const picture = artist_data.picture; let cover: ArtistCover | null = null; if (picture) { const slug = picture.replace(/-/g, '/'); @@ -1772,7 +1776,7 @@ class HiFiClient { releaseDate: al.attributes?.releaseDate, type: al.attributes?.albumType, cover: getPic(al, 'coverArt'), - artist: { id: artist_data.id, name: artist_data.name } + artist: { id: artist_data.id, name: artist_data.name }, }); } } @@ -1784,24 +1788,34 @@ class HiFiClient { if (tr) { let albumInfo = undefined; if (tr.relationships?.albums?.data?.[0]) { - const aRef = tr.relationships.albums.data[0]; - const aItem = includedMap.get(`albums:${aRef.id}`); - if (aItem) { - albumInfo = { id: Number(aItem.id), title: aItem.attributes?.title, cover: getPic(aItem, 'coverArt') }; - } + const aRef = tr.relationships.albums.data[0]; + const aItem = includedMap.get(`albums:${aRef.id}`); + if (aItem) { + albumInfo = { + id: Number(aItem.id), + title: aItem.attributes?.title, + cover: getPic(aItem, 'coverArt'), + }; + } } tracks.push({ id: Number(tr.id), title: tr.attributes?.title, duration: tr.attributes?.duration ? 100 : undefined, album: albumInfo, - artist: { id: artist_data.id, name: artist_data.name } + artist: { id: artist_data.id, name: artist_data.name }, }); } } } - return HiFiClient.#jsonResponse({ version: HiFiClient.API_VERSION, artist: artist_data, cover, albums: { items: albums }, tracks }); + return HiFiClient.#jsonResponse({ + version: HiFiClient.API_VERSION, + artist: artist_data, + cover, + albums: { items: albums }, + tracks, + }); } // fallback to original f logic diff --git a/js/api.js b/js/api.js index 6bfb61c..09390ed 100644 --- a/js/api.js +++ b/js/api.js @@ -1507,11 +1507,6 @@ export class LosslessAPI { }; } - if (streamUrl && streamUrl.includes('tidal.com')) { - const encodedUrl = encodeURIComponent(streamUrl); - streamUrl = `/proxy-audio?url=${encodedUrl}`; - } - const result = { url: streamUrl, rgInfo: manifestRgInfo }; this.streamCache.set(cacheKey, result); @@ -1559,11 +1554,6 @@ export class LosslessAPI { throw new Error(`Could not resolve video stream URL for ID: ${id}`); } - if (streamUrl && streamUrl.includes('tidal.com')) { - const encodedUrl = encodeURIComponent(streamUrl); - streamUrl = `/proxy-audio?url=${encodedUrl}`; - } - if (!(lookup instanceof TidalResponse)) { this.streamCache.set(cacheKey, streamUrl); } diff --git a/styles.css b/styles.css index 1bd604e..8f2f61e 100644 --- a/styles.css +++ b/styles.css @@ -1049,8 +1049,8 @@ ul { gap: 0.375rem; padding: 0.4rem 0.6rem; margin-bottom: 1rem; - background: rgba(245, 158, 11, 0.12); - border: 1px solid rgba(245, 158, 11, 0.25); + background: rgb(245, 158, 11, 0.12); + border: 1px solid rgb(245, 158, 11, 0.25); border-radius: var(--radius-md); color: #f59e0b; font-size: 0.7rem; diff --git a/test-search.js b/test-search.js index 39c67c4..a4f6345 100644 --- a/test-search.js +++ b/test-search.js @@ -4,7 +4,13 @@ import { LosslessAPI } from './js/api.js'; // mock out modules to make LosslessAPI load in bun import { mock } from 'bun:test'; mock.module('./js/icons.ts', () => ({})); -mock.module('./js/settings.js', () => ({ devModeSettings: { isEnabled: () => false }, syncManager: {}, musicProviderSettings: {}, audioSettings: {}, apiSettings: {} })); +mock.module('./js/settings.js', () => ({ + devModeSettings: { isEnabled: () => false }, + syncManager: {}, + musicProviderSettings: {}, + audioSettings: {}, + apiSettings: {}, +})); globalThis.localStorage = { getItem: () => null, setItem: () => {}, removeItem: () => {} }; globalThis.window = { matchMedia: () => ({ matches: false }) }; @@ -16,12 +22,12 @@ async function test() { // mock cache api.cache = { get: () => null, set: () => {} }; - api.fetchWithRetry = async function(relativePath, options) { - console.log("fetchWithRetry called:", relativePath); + api.fetchWithRetry = async function (relativePath, options) { + console.log('fetchWithRetry called:', relativePath); return HiFiClient.instance.query(relativePath); }; const res = await api.search('coldplay'); - console.log("Returned tracks:", res.tracks?.items?.length); + console.log('Returned tracks:', res.tracks?.items?.length); } test().catch(console.error);