Aurora SpotiRip desktop and web app
- Spotify playlist, library, album and artist browsing with in-app playback - Song, playlist and album downloads via spotdl with YouTube and Bandcamp fallbacks - Electron desktop app (castLabs Widevine) with a permanent sidebar layout - Linux and Windows packaging scripts
This commit is contained in:
@@ -0,0 +1,228 @@
|
||||
import "./loadEnv.js";
|
||||
import { Hono } from 'hono'
|
||||
import { serveStatic } from '@hono/node-server/serve-static'
|
||||
import { serve } from '@hono/node-server';
|
||||
|
||||
const app = new Hono();
|
||||
|
||||
app.post('_api/identify',async c => {
|
||||
try {
|
||||
const { handle } = await import("./endpoints/identify_POST.js");
|
||||
let request = c.req.raw;
|
||||
const response = await handle(request);
|
||||
if (!(response instanceof Response) && response.constructor.name !== "Response") {
|
||||
return c.text("Invalid response format. handle should always return a Response object." + response.constructor.name, 500);
|
||||
}
|
||||
return response;
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
return c.text("Error loading endpoint code " + e.message, 500)
|
||||
}
|
||||
})
|
||||
app.get('_api/spotify-auth',async c => {
|
||||
try {
|
||||
const { handle } = await import("./endpoints/spotify-auth_GET.js");
|
||||
let request = c.req.raw;
|
||||
const response = await handle(request);
|
||||
if (!(response instanceof Response) && response.constructor.name !== "Response") {
|
||||
return c.text("Invalid response format. handle should always return a Response object." + response.constructor.name, 500);
|
||||
}
|
||||
return response;
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
return c.text("Error loading endpoint code " + e.message, 500)
|
||||
}
|
||||
})
|
||||
app.post('_api/spotify-exchange',async c => {
|
||||
try {
|
||||
const { handle } = await import("./endpoints/spotify-exchange_POST.js");
|
||||
let request = c.req.raw;
|
||||
const response = await handle(request);
|
||||
if (!(response instanceof Response) && response.constructor.name !== "Response") {
|
||||
return c.text("Invalid response format. handle should always return a Response object." + response.constructor.name, 500);
|
||||
}
|
||||
return response;
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
return c.text("Error loading endpoint code " + e.message, 500)
|
||||
}
|
||||
})
|
||||
app.get('_api/spotify-session',async c => {
|
||||
try {
|
||||
const { handle } = await import("./endpoints/spotify-session_GET.js");
|
||||
let request = c.req.raw;
|
||||
const response = await handle(request);
|
||||
if (!(response instanceof Response) && response.constructor.name !== "Response") {
|
||||
return c.text("Invalid response format. handle should always return a Response object." + response.constructor.name, 500);
|
||||
}
|
||||
return response;
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
return c.text("Error loading endpoint code " + e.message, 500)
|
||||
}
|
||||
})
|
||||
app.post('_api/spotify-logout',async c => {
|
||||
try {
|
||||
const { handle } = await import("./endpoints/spotify-logout_POST.js");
|
||||
let request = c.req.raw;
|
||||
const response = await handle(request);
|
||||
if (!(response instanceof Response) && response.constructor.name !== "Response") {
|
||||
return c.text("Invalid response format. handle should always return a Response object." + response.constructor.name, 500);
|
||||
}
|
||||
return response;
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
return c.text("Error loading endpoint code " + e.message, 500)
|
||||
}
|
||||
})
|
||||
app.post('_api/spotify-playlist',async c => {
|
||||
try {
|
||||
const { handle } = await import("./endpoints/spotify-playlist_POST.js");
|
||||
let request = c.req.raw;
|
||||
const response = await handle(request);
|
||||
if (!(response instanceof Response) && response.constructor.name !== "Response") {
|
||||
return c.text("Invalid response format. handle should always return a Response object." + response.constructor.name, 500);
|
||||
}
|
||||
return response;
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
return c.text("Error loading endpoint code " + e.message, 500)
|
||||
}
|
||||
})
|
||||
app.get('_api/spotify-playlists',async c => {
|
||||
try {
|
||||
const { handle } = await import("./endpoints/spotify-playlists_GET.js");
|
||||
let request = c.req.raw;
|
||||
const response = await handle(request);
|
||||
if (!(response instanceof Response) && response.constructor.name !== "Response") {
|
||||
return c.text("Invalid response format. handle should always return a Response object." + response.constructor.name, 500);
|
||||
}
|
||||
return response;
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
return c.text("Error loading endpoint code " + e.message, 500)
|
||||
}
|
||||
})
|
||||
app.post('_api/metadata-enrich',async c => {
|
||||
try {
|
||||
const { handle } = await import("./endpoints/metadata-enrich_POST.js");
|
||||
let request = c.req.raw;
|
||||
const response = await handle(request);
|
||||
if (!(response instanceof Response) && response.constructor.name !== "Response") {
|
||||
return c.text("Invalid response format. handle should always return a Response object." + response.constructor.name, 500);
|
||||
}
|
||||
return response;
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
return c.text("Error loading endpoint code " + e.message, 500)
|
||||
}
|
||||
})
|
||||
app.post('_api/lyrics',async c => {
|
||||
try {
|
||||
const { handle } = await import("./endpoints/lyrics_POST.js");
|
||||
let request = c.req.raw;
|
||||
const response = await handle(request);
|
||||
if (!(response instanceof Response) && response.constructor.name !== "Response") {
|
||||
return c.text("Invalid response format. handle should always return a Response object." + response.constructor.name, 500);
|
||||
}
|
||||
return response;
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
return c.text("Error loading endpoint code " + e.message, 500)
|
||||
}
|
||||
})
|
||||
app.get('_api/spotify-library',async c => {
|
||||
try {
|
||||
const { handle } = await import("./endpoints/spotify-library_GET.js");
|
||||
let request = c.req.raw;
|
||||
const response = await handle(request);
|
||||
if (!(response instanceof Response) && response.constructor.name !== "Response") {
|
||||
return c.text("Invalid response format. handle should always return a Response object." + response.constructor.name, 500);
|
||||
}
|
||||
return response;
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
return c.text("Error loading endpoint code " + e.message, 500)
|
||||
}
|
||||
})
|
||||
app.get('_api/spotify-artist-albums',async c => {
|
||||
try {
|
||||
const { handle } = await import("./endpoints/spotify-artist-albums_GET.js");
|
||||
let request = c.req.raw;
|
||||
const response = await handle(request);
|
||||
if (!(response instanceof Response) && response.constructor.name !== "Response") {
|
||||
return c.text("Invalid response format. handle should always return a Response object." + response.constructor.name, 500);
|
||||
}
|
||||
return response;
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
return c.text("Error loading endpoint code " + e.message, 500)
|
||||
}
|
||||
})
|
||||
app.get('_api/spotify-album',async c => {
|
||||
try {
|
||||
const { handle } = await import("./endpoints/spotify-album_GET.js");
|
||||
let request = c.req.raw;
|
||||
const response = await handle(request);
|
||||
if (!(response instanceof Response) && response.constructor.name !== "Response") {
|
||||
return c.text("Invalid response format. handle should always return a Response object." + response.constructor.name, 500);
|
||||
}
|
||||
return response;
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
return c.text("Error loading endpoint code " + e.message, 500)
|
||||
}
|
||||
})
|
||||
app.post('_api/spotify-download',async c => {
|
||||
try {
|
||||
const { handle } = await import("./endpoints/spotify-download_POST.js");
|
||||
let request = c.req.raw;
|
||||
const response = await handle(request);
|
||||
if (!(response instanceof Response) && response.constructor.name !== "Response") {
|
||||
return c.text("Invalid response format. handle should always return a Response object." + response.constructor.name, 500);
|
||||
}
|
||||
return response;
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
return c.text("Error loading endpoint code " + e.message, 500)
|
||||
}
|
||||
})
|
||||
app.get('_api/spotify-download-status',async c => {
|
||||
try {
|
||||
const { handle } = await import("./endpoints/spotify-download-status_GET.js");
|
||||
let request = c.req.raw;
|
||||
const response = await handle(request);
|
||||
if (!(response instanceof Response) && response.constructor.name !== "Response") {
|
||||
return c.text("Invalid response format. handle should always return a Response object." + response.constructor.name, 500);
|
||||
}
|
||||
return response;
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
return c.text("Error loading endpoint code " + e.message, 500)
|
||||
}
|
||||
})
|
||||
app.get('_api/spotify-download-file',async c => {
|
||||
try {
|
||||
const { handle } = await import("./endpoints/spotify-download-file_GET.js");
|
||||
let request = c.req.raw;
|
||||
const response = await handle(request);
|
||||
if (!(response instanceof Response) && response.constructor.name !== "Response") {
|
||||
return c.text("Invalid response format. handle should always return a Response object." + response.constructor.name, 500);
|
||||
}
|
||||
return response;
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
return c.text("Error loading endpoint code " + e.message, 500)
|
||||
}
|
||||
})
|
||||
app.use('/*', serveStatic({ root: './dist' }))
|
||||
app.get("*", async (c, next) => {
|
||||
const p = c.req.path;
|
||||
if (p.startsWith("/_api")) {
|
||||
return next();
|
||||
}
|
||||
return serveStatic({ path: "./dist/index.html" })(c, next);
|
||||
});
|
||||
serve({ fetch: app.fetch, port: 3333 });
|
||||
console.log("Running at http://localhost:3333")
|
||||
|
||||
Reference in New Issue
Block a user