mirror of
https://github.com/ZHANGTIANYAO1/teamspeak-music-bot.git
synced 2026-10-02 21:12:49 +08:00
feat(spotify): report resolved backend + binaryAvailable on /status; share backend resolver [S4.2]
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
b672d76634
commit
6a72833c2a
6 files changed
+79
-21
No files matched your search
@@ -18,7 +18,7 @@ function makeApp(oauth: SpotifyOAuthLike, role: Role = "admin", caps: string[] =
|
||||
createSpotifyRouter({
|
||||
oauth,
|
||||
logger: pino({ level: "silent" }),
|
||||
getBackendInfo: () => ({ backend: "librespot", deviceName: "TS-Bot" }),
|
||||
getBackendInfo: () => ({ backend: "librespot", deviceName: "TS-Bot", binaryAvailable: true }),
|
||||
webUiRedirect: "/",
|
||||
}),
|
||||
);
|
||||
@@ -84,7 +84,7 @@ describe("spotify OAuth router", () => {
|
||||
const app = makeApp(fakeOauth({ isAuthorized: () => true }));
|
||||
const res = await request(app).get("/api/spotify/status");
|
||||
expect(res.status).toBe(200);
|
||||
expect(res.body).toEqual({ authorized: true, backend: "librespot", deviceName: "TS-Bot" });
|
||||
expect(res.body).toEqual({ authorized: true, backend: "librespot", deviceName: "TS-Bot", binaryAvailable: true });
|
||||
});
|
||||
|
||||
it("GET /status is 403 for a guest", async () => {
|
||||
|
||||
@@ -15,7 +15,11 @@ export interface SpotifyRouterOptions {
|
||||
oauth: SpotifyOAuthLike;
|
||||
logger: Logger;
|
||||
/** Process-wide backend info for /status (single Premium account, Stage 3). */
|
||||
getBackendInfo: () => { backend: string; deviceName: string };
|
||||
getBackendInfo: () => {
|
||||
backend: string;
|
||||
deviceName: string;
|
||||
binaryAvailable: boolean;
|
||||
};
|
||||
/** Web UI page to bounce the browser back to after the OAuth callback. */
|
||||
webUiRedirect?: string;
|
||||
}
|
||||
@@ -67,6 +71,7 @@ export function createSpotifyRouter(opts: SpotifyRouterOptions): Router {
|
||||
authorized: oauth.isAuthorized(),
|
||||
backend: info.backend,
|
||||
deviceName: info.deviceName,
|
||||
binaryAvailable: info.binaryAvailable,
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
+24
-4
@@ -21,6 +21,14 @@ import { createAuditRouter } from "./api/audit.js";
|
||||
import { createFavoritesRouter } from "./api/favorites.js";
|
||||
import { createSpotifyRouter } from "./api/spotify.js";
|
||||
import type { SpotifyOAuth } from "../music/spotify/spotify-oauth.js";
|
||||
import { resolveSpotifyBackendKind } from "../music/spotify/backend-select.js";
|
||||
import {
|
||||
isGoLibrespotSupported,
|
||||
findGoLibrespot,
|
||||
isRustLibrespotSupported,
|
||||
findLibrespot,
|
||||
} from "../music/spotify/binary.js";
|
||||
import { existsSync } from "node:fs";
|
||||
import { setupWebSocket } from "./websocket.js";
|
||||
import { createUserStore } from "../data/users.js";
|
||||
import { createSessionStore } from "../data/sessions.js";
|
||||
@@ -147,10 +155,22 @@ export function createWebServer(options: WebServerOptions): WebServer {
|
||||
createSpotifyRouter({
|
||||
oauth: options.spotifyOAuth,
|
||||
logger,
|
||||
getBackendInfo: () => ({
|
||||
backend: options.config.spotify.backend,
|
||||
deviceName: options.config.spotify.deviceName,
|
||||
}),
|
||||
getBackendInfo: () => {
|
||||
const goPresent =
|
||||
isGoLibrespotSupported() && existsSync(findGoLibrespot());
|
||||
const rustPresent =
|
||||
isRustLibrespotSupported() && existsSync(findLibrespot());
|
||||
const resolved = resolveSpotifyBackendKind(
|
||||
options.config.spotify.backend,
|
||||
goPresent,
|
||||
rustPresent,
|
||||
);
|
||||
return {
|
||||
backend: resolved ?? "none",
|
||||
deviceName: options.config.spotify.deviceName,
|
||||
binaryAvailable: resolved !== null,
|
||||
};
|
||||
},
|
||||
webUiRedirect: "/",
|
||||
}),
|
||||
);
|
||||
|
||||
Reference in new issue
Block a user