diff --git a/src/backend/common/vendor/ListenbrainzApiClient.ts b/src/backend/common/vendor/ListenbrainzApiClient.ts index 1e6cc77d..dc71f40c 100644 --- a/src/backend/common/vendor/ListenbrainzApiClient.ts +++ b/src/backend/common/vendor/ListenbrainzApiClient.ts @@ -29,6 +29,7 @@ import { findCauseByFunc } from '../../utils/ErrorUtils.ts'; import { isSuperAgentResponseError } from '../errors/ErrorUtils.ts'; import { playToSubmitPayload } from './listenbrainz/lzUtils.ts'; import { isrcNoHyphens } from '../../../core/PlayUtils.ts'; +import { getRoot } from '../../ioc.ts'; export interface SubmitOptions { @@ -59,6 +60,7 @@ export class ListenbrainzApiClient extends AbstractApiClient implements Pageless declare config: ListenBrainzClientData; url: URLData; + userAgent: string constructor(name: any, config: ListenBrainzClientData, options: AbstractApiOptions) { super('ListenBrainz', name, config, options); @@ -66,6 +68,7 @@ export class ListenbrainzApiClient extends AbstractApiClient implements Pageless url = 'https://api.listenbrainz.org/' } = config; let cleanUrl = url; + this.userAgent = `multi-scrobbler/${getRoot().items.version}` const pathedUrl = normalizeListenbrainzUrl(cleanUrl); if(pathedUrl !== undefined) { this.logger.verbose(`LZ Server URL contained /1/, removing this because MS adds it automatically`); @@ -84,6 +87,7 @@ export class ListenbrainzApiClient extends AbstractApiClient implements Pageless try { req.set('Authorization', `Token ${this.config.token}`); + req.set('User-Agent', this.userAgent); return await req as T; } catch (e) { const { diff --git a/src/backend/common/vendor/musicbrainz/MusicbrainzApiClient.ts b/src/backend/common/vendor/musicbrainz/MusicbrainzApiClient.ts index 57510c9d..53b52f99 100644 --- a/src/backend/common/vendor/musicbrainz/MusicbrainzApiClient.ts +++ b/src/backend/common/vendor/musicbrainz/MusicbrainzApiClient.ts @@ -9,10 +9,8 @@ import { difference, sleep } from "../../../utils.ts"; import {SequentialRoundRobin} from 'round-robin-js'; import type { Cacheable } from "cacheable"; import { getRoot } from "../../../ioc.ts"; -import { version } from "../../../version.ts"; import { hashObject } from "../../../utils/StringUtils.ts"; import { playContentInvariantTransform } from "../../../utils/PlayComparisonUtils.ts"; -; import { AsyncLocalStorage } from "async_hooks"; import { nanoid } from "nanoid"; import { stripIndents } from "common-tags"; @@ -79,7 +77,7 @@ export class MusicbrainzApiClient extends AbstractApiClient { if(mb === undefined) { const api = new MusicBrainzApi({ appName: 'multi-scrobbler', - appVersion: version, + appVersion: getRoot().items.version, appContactInfo: mbConfig.contact, baseUrl: u.url.toString(), preRequest: (method, url, headers) => { diff --git a/src/backend/ioc.ts b/src/backend/ioc.ts index 4e25d402..82281a05 100644 --- a/src/backend/ioc.ts +++ b/src/backend/ioc.ts @@ -12,7 +12,7 @@ import TransformerManager from "./common/transforms/TransformerManager.ts"; import type {TransformerCommonConfig} from "../core/Atomic.ts"; import prom from 'prom-client'; import { CoverArtApiClient } from "./common/vendor/musicbrainz/CoverArtApiClient.ts"; -import { version } from "./version.ts"; +import { version, stable } from "./version.ts"; import type {DbConcrete} from "./common/database/drizzle/drizzleUtils.ts"; import type { MSBackendEventMap } from "./common/infrastructure/MSBackendEventMap.ts"; @@ -130,8 +130,18 @@ const createRoot = (options: RootOptions = {logger: loggerDebug}) => { const portVal: number | string = process.env.PORT ?? port; + const versionParts: string[] = []; + if(stable === version) { + versionParts.push(stable); + } else { + if(stable !== 'unknown') { + versionParts.push(stable); + } + versionParts.push(version); + } + return createContainer().add({ - version, + version: versionParts.join('-'), configDir: getConfigDir(), isProd: process.env.NODE_ENV !== undefined && (process.env.NODE_ENV === 'production' || process.env.NODE_ENV === 'prod'), // @ts-ignore diff --git a/src/backend/version.ts b/src/backend/version.ts index aec441e9..5cc5b9cc 100644 --- a/src/backend/version.ts +++ b/src/backend/version.ts @@ -1,9 +1,11 @@ import { getVersion } from "@foxxmd/get-version"; export let version: string = 'unknown'; +export let stable: string = 'unknown'; export const parseVersion = async () => { version = await getVersion({ priority: ['env', 'git', 'file'] }); + stable = await getVersion({ priority: ['file'] }); return version; }; -- 2.51.2 From 3bdc9447b87c0a59f5e2fca663242afee8fc5482 Mon Sep 17 00:00:00 2001 From: FoxxMD Date: Mon, 24 Aug 2026 21:38:46 +0000 Subject: [PATCH 2/2] chore(release): Bump version for release --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4442371c..e50074f3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "multi-scrobbler", - "version": "0.16.4", + "version": "0.16.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "multi-scrobbler", - "version": "0.16.4", + "version": "0.16.5", "hasInstallScript": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index ad7e3803..2371bfc9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "multi-scrobbler", - "version": "0.16.4", + "version": "0.16.5", "type": "module", "description": "scrobble plays from multiple sources to multiple clients", "scripts": {