diff --git a/package-lock.json b/package-lock.json index 22e6952..208650f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,8 +25,8 @@ } }, "node_modules/@dpu/shared": { - "version": "1.4.0", - "resolved": "git+https://git.dariusbag.dev/DarDarBinks/dpu-shared.git#862401fa9b2a358b2338490f4c7c6f125d11675e", + "version": "1.4.1", + "resolved": "git+https://git.dariusbag.dev/DarDarBinks/dpu-shared.git#b55e1dd0a651c4cc3a7aabd8a44d49eb654f0189", "dependencies": { "axios": "^1.7.9", "chalk": "^5.6.2", @@ -709,9 +709,9 @@ } }, "node_modules/@isaacs/brace-expansion": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", - "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.1.tgz", + "integrity": "sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ==", "license": "MIT", "dependencies": { "@isaacs/balanced-match": "^4.0.1" @@ -736,9 +736,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "24.10.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.9.tgz", - "integrity": "sha512-ne4A0IpG3+2ETuREInjPNhUGis1SFjv1d5asp8MzEAGtOZeTeHVDOYqOgqfhvseqg/iXty2hjBf1zAOb7RNiNw==", + "version": "24.10.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.10.tgz", + "integrity": "sha512-+0/4J266CBGPUq/ELg7QUHhN25WYjE0wYTPSQJn1xeu8DOlIOPxXxrNGiLmfAWl7HMMgWFWXpt9IDjMWrF5Iow==", "dev": true, "license": "MIT", "dependencies": { @@ -1108,9 +1108,9 @@ "license": "BSD-3-Clause" }, "node_modules/fastify": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/fastify/-/fastify-5.7.2.tgz", - "integrity": "sha512-dBJolW+hm6N/yJVf6J5E1BxOBNkuXNl405nrfeR8SpvGWG3aCC2XDHyiFBdow8Win1kj7sjawQc257JlYY6M/A==", + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/fastify/-/fastify-5.7.4.tgz", + "integrity": "sha512-e6l5NsRdaEP8rdD8VR0ErJASeyaRbzXYpmkrpr2SuvuMq6Si3lvsaVy5C+7gLanEkvjpMDzBXWE5HPeb/hgTxA==", "funding": [ { "type": "github", @@ -1309,9 +1309,9 @@ } }, "node_modules/get-tsconfig": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz", - "integrity": "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==", + "version": "4.13.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.1.tgz", + "integrity": "sha512-EoY1N2xCn44xU6750Sx7OjOIT59FkmstNc3X6y5xpz7D5cBtZRe/3pSlTkDJgqsOk3WwZPkWfonhhUJfttQo3w==", "dev": true, "license": "MIT", "dependencies": { @@ -1322,12 +1322,12 @@ } }, "node_modules/glob": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.0.tgz", - "integrity": "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==", + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.1.tgz", + "integrity": "sha512-B7U/vJpE3DkJ5WXTgTpTRN63uV42DseiXXKMwG14LQBXmsdeIoHAPbU/MEo6II0k5ED74uc2ZGTC6MwHFQhF6w==", "license": "BlueOak-1.0.0", "dependencies": { - "minimatch": "^10.1.1", + "minimatch": "^10.1.2", "minipass": "^7.1.2", "path-scurry": "^2.0.0" }, @@ -1555,12 +1555,12 @@ } }, "node_modules/minimatch": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", - "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.2.tgz", + "integrity": "sha512-fu656aJ0n2kcXwsnwnv9g24tkU5uSmOlTjd6WyyaKm2Z+h1qmY6bAjrcaIxF/BslFqbZ8UBtbJi7KgQOZD2PTw==", "license": "BlueOak-1.0.0", "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" + "@isaacs/brace-expansion": "^5.0.1" }, "engines": { "node": "20 || >=22" diff --git a/src/tidal/routes.ts b/src/tidal/routes.ts index 26ca67e..2a8b436 100644 --- a/src/tidal/routes.ts +++ b/src/tidal/routes.ts @@ -81,9 +81,7 @@ export async function tidalRoutes( description: "Get current volume level", tags: ["tidal"], response: { - 200: z.object({ - volume: z.number(), - }), + 200: z.number(), 418: z.object({ error: z.string(), }), @@ -110,13 +108,9 @@ export async function tidalRoutes( description: "Set volume level (accepts absolute number or relative +/- value)", tags: ["tidal"], - body: z.object({ - volume: z.string(), - }), + body: z.string(), response: { - 200: z.object({ - volume: z.number(), - }), + 200: z.number(), 401: z.object({ error: z.literal("Invalid API key"), }), diff --git a/src/tidal/service.ts b/src/tidal/service.ts index 81f9714..f18e0d3 100644 --- a/src/tidal/service.ts +++ b/src/tidal/service.ts @@ -2,7 +2,6 @@ import { BaseService, type ServiceResult, type TidalGetCurrent, - type TidalPutVolume, } from "@dpu/shared"; import { logWarning } from "@dpu/shared/dist/logger.js"; import type { TidalClient } from "./client.js"; @@ -33,13 +32,13 @@ export class TidalService extends BaseService { } } - async getVolume(): Promise> { + async getVolume(): Promise> { try { const response = await this.getClient().get("current"); - return this.getSuccessfulResult({ - volume: response.volume, - }); + return this.getSuccessfulResult( + this.decimalToPercentage(response.volume), + ); } catch { const error_message = "error getting volume from tidal"; logWarning(error_message); @@ -48,20 +47,18 @@ export class TidalService extends BaseService { } clamp(value: number): number { - return Math.min(Math.max(value, 0), 100); + return Math.min(Math.max(value, 0.0), 1.0); } - async setVolume( - argument: string, - ): Promise> { - const value = this.percentageToDecimal(argument); + async setVolume(argument: string): Promise> { + const value = this.percentageToDecimal(parseFloat(argument)); // relative const adjustMatch = argument.match(/^([+-])/); if (adjustMatch) { const req = await this.getVolume(); if (req.successful) { - const volume = req.result as TidalPutVolume; - const wantedVolume = volume.volume + value; + const volume = req.result as number; + const wantedVolume = volume + value; const clampWantedVolume = this.clamp(wantedVolume); return await this.setVolumeToTidal(clampWantedVolume); } @@ -81,16 +78,11 @@ export class TidalService extends BaseService { async setVolumeToTidal( volume: number, - ): Promise> { + ): Promise> { try { - const response = await this.getClient().put( - `player/volume?volume=${volume}`, - {}, - ); + await this.getClient().put(`player/volume?volume=${volume}`, {}); - return this.getSuccessfulResult( - this.decimalToPercentage(response.volume).toString(), - ); + return this.getSuccessfulResult(this.decimalToPercentage(volume)); } catch { const error_message = "error setting volume from tidal"; logWarning(error_message); @@ -102,8 +94,7 @@ export class TidalService extends BaseService { return decimal * 100; } - percentageToDecimal(percentage: string): number { - const num = parseFloat(percentage); - return num / 100; + percentageToDecimal(percentage: number): number { + return percentage / 100; } }