navidrome-mcp 2.0.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +161 -68
- package/assets/navidrome-player.icns +0 -0
- package/assets/navidrome-player.ico +0 -0
- package/assets/navidrome-player.png +0 -0
- package/dist/bootstrap.d.ts +43 -0
- package/dist/bootstrap.d.ts.map +1 -0
- package/dist/bootstrap.js +52 -0
- package/dist/bootstrap.js.map +1 -0
- package/dist/client/auth-manager.d.ts.map +1 -1
- package/dist/client/auth-manager.js +14 -3
- package/dist/client/auth-manager.js.map +1 -1
- package/dist/client/navidrome-client.d.ts.map +1 -1
- package/dist/client/navidrome-client.js +34 -5
- package/dist/client/navidrome-client.js.map +1 -1
- package/dist/config/map-config.d.ts +29 -0
- package/dist/config/map-config.d.ts.map +1 -0
- package/dist/config/map-config.js +97 -0
- package/dist/config/map-config.js.map +1 -0
- package/dist/config/schema.d.ts +65 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +95 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/seed.d.ts +58 -0
- package/dist/config/seed.d.ts.map +1 -0
- package/dist/config/seed.js +190 -0
- package/dist/config/seed.js.map +1 -0
- package/dist/config/store-path.d.ts +32 -0
- package/dist/config/store-path.d.ts.map +1 -0
- package/dist/config/store-path.js +57 -0
- package/dist/config/store-path.js.map +1 -0
- package/dist/config/store.d.ts +84 -0
- package/dist/config/store.d.ts.map +1 -0
- package/dist/config/store.js +141 -0
- package/dist/config/store.js.map +1 -0
- package/dist/config-app/degraded-tools.d.ts +27 -0
- package/dist/config-app/degraded-tools.d.ts.map +1 -0
- package/dist/config-app/degraded-tools.js +61 -0
- package/dist/config-app/degraded-tools.js.map +1 -0
- package/dist/config-app/main.d.ts +20 -0
- package/dist/config-app/main.d.ts.map +1 -0
- package/dist/config-app/main.js +38 -0
- package/dist/config-app/main.js.map +1 -0
- package/dist/config-app/public/app.js +224 -0
- package/dist/config-app/public/index.html +137 -0
- package/dist/config-app/public/styles.css +120 -0
- package/dist/config-app/routes.d.ts +28 -0
- package/dist/config-app/routes.d.ts.map +1 -0
- package/dist/config-app/routes.js +183 -0
- package/dist/config-app/routes.js.map +1 -0
- package/dist/config-app/server.d.ts +48 -0
- package/dist/config-app/server.d.ts.map +1 -0
- package/dist/config-app/server.js +155 -0
- package/dist/config-app/server.js.map +1 -0
- package/dist/config.d.ts +36 -35
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +47 -204
- package/dist/config.js.map +1 -1
- package/dist/constants/defaults.d.ts +20 -1
- package/dist/constants/defaults.d.ts.map +1 -1
- package/dist/constants/defaults.js +20 -1
- package/dist/constants/defaults.js.map +1 -1
- package/dist/constants/timeouts.d.ts +19 -4
- package/dist/constants/timeouts.d.ts.map +1 -1
- package/dist/constants/timeouts.js +19 -4
- package/dist/constants/timeouts.js.map +1 -1
- package/dist/index.js +103 -33
- package/dist/index.js.map +1 -1
- package/dist/resources/index.js +3 -3
- package/dist/resources/index.js.map +1 -1
- package/dist/schemas/common.d.ts +10 -7
- package/dist/schemas/common.d.ts.map +1 -1
- package/dist/schemas/common.js +35 -20
- package/dist/schemas/common.js.map +1 -1
- package/dist/schemas/pagination.d.ts +5 -0
- package/dist/schemas/pagination.d.ts.map +1 -1
- package/dist/schemas/pagination.js +22 -10
- package/dist/schemas/pagination.js.map +1 -1
- package/dist/schemas/validation.d.ts +15 -3
- package/dist/schemas/validation.d.ts.map +1 -1
- package/dist/schemas/validation.js +43 -12
- package/dist/schemas/validation.js.map +1 -1
- package/dist/services/filter-cache-manager.d.ts +2 -1
- package/dist/services/filter-cache-manager.d.ts.map +1 -1
- package/dist/services/filter-cache-manager.js +35 -25
- package/dist/services/filter-cache-manager.js.map +1 -1
- package/dist/services/library-manager.d.ts +1 -0
- package/dist/services/library-manager.d.ts.map +1 -1
- package/dist/services/library-manager.js +50 -29
- package/dist/services/library-manager.js.map +1 -1
- package/dist/services/playback/mpv-process.d.ts +11 -0
- package/dist/services/playback/mpv-process.d.ts.map +1 -1
- package/dist/services/playback/mpv-process.js +36 -2
- package/dist/services/playback/mpv-process.js.map +1 -1
- package/dist/services/playback/playback-engine.d.ts +59 -19
- package/dist/services/playback/playback-engine.d.ts.map +1 -1
- package/dist/services/playback/playback-engine.js +180 -36
- package/dist/services/playback/playback-engine.js.map +1 -1
- package/dist/services/playback/scrobble-tracker.d.ts +117 -0
- package/dist/services/playback/scrobble-tracker.d.ts.map +1 -0
- package/dist/services/playback/scrobble-tracker.js +360 -0
- package/dist/services/playback/scrobble-tracker.js.map +1 -0
- package/dist/tools/handlers/playback-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/playback-handlers.js +54 -16
- package/dist/tools/handlers/playback-handlers.js.map +1 -1
- package/dist/tools/handlers/playlist-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/playlist-handlers.js +20 -10
- package/dist/tools/handlers/playlist-handlers.js.map +1 -1
- package/dist/tools/handlers/queue-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/queue-handlers.js +10 -0
- package/dist/tools/handlers/queue-handlers.js.map +1 -1
- package/dist/tools/handlers/radio-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/radio-handlers.js +26 -9
- package/dist/tools/handlers/radio-handlers.js.map +1 -1
- package/dist/tools/handlers/registry.d.ts.map +1 -1
- package/dist/tools/handlers/registry.js +4 -5
- package/dist/tools/handlers/registry.js.map +1 -1
- package/dist/tools/handlers/search-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/search-handlers.js +20 -0
- package/dist/tools/handlers/search-handlers.js.map +1 -1
- package/dist/tools/handlers/tag-handlers.js +1 -1
- package/dist/tools/handlers/tag-handlers.js.map +1 -1
- package/dist/tools/handlers/user-preferences-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/user-preferences-handlers.js +14 -9
- package/dist/tools/handlers/user-preferences-handlers.js.map +1 -1
- package/dist/tools/lastfm-discovery.d.ts.map +1 -1
- package/dist/tools/lastfm-discovery.js +223 -158
- package/dist/tools/lastfm-discovery.js.map +1 -1
- package/dist/tools/library.d.ts.map +1 -1
- package/dist/tools/library.js +18 -21
- package/dist/tools/library.js.map +1 -1
- package/dist/tools/listening-history.d.ts.map +1 -1
- package/dist/tools/listening-history.js +112 -80
- package/dist/tools/listening-history.js.map +1 -1
- package/dist/tools/lyrics.d.ts.map +1 -1
- package/dist/tools/lyrics.js +35 -39
- package/dist/tools/lyrics.js.map +1 -1
- package/dist/tools/media-library.d.ts.map +1 -1
- package/dist/tools/media-library.js +14 -10
- package/dist/tools/media-library.js.map +1 -1
- package/dist/tools/playback.d.ts +38 -14
- package/dist/tools/playback.d.ts.map +1 -1
- package/dist/tools/playback.js +162 -21
- package/dist/tools/playback.js.map +1 -1
- package/dist/tools/playlist-management/playlist-crud.d.ts.map +1 -1
- package/dist/tools/playlist-management/playlist-crud.js +118 -24
- package/dist/tools/playlist-management/playlist-crud.js.map +1 -1
- package/dist/tools/playlist-management/playlist-export.d.ts.map +1 -1
- package/dist/tools/playlist-management/playlist-export.js +23 -10
- package/dist/tools/playlist-management/playlist-export.js.map +1 -1
- package/dist/tools/playlist-management/track-management.d.ts.map +1 -1
- package/dist/tools/playlist-management/track-management.js +24 -11
- package/dist/tools/playlist-management/track-management.js.map +1 -1
- package/dist/tools/queue-management.d.ts.map +1 -1
- package/dist/tools/queue-management.js +80 -64
- package/dist/tools/queue-management.js.map +1 -1
- package/dist/tools/radio-discovery.d.ts.map +1 -1
- package/dist/tools/radio-discovery.js +137 -68
- package/dist/tools/radio-discovery.js.map +1 -1
- package/dist/tools/radio-validation/index.d.ts +0 -6
- package/dist/tools/radio-validation/index.d.ts.map +1 -1
- package/dist/tools/radio-validation/index.js +6 -5
- package/dist/tools/radio-validation/index.js.map +1 -1
- package/dist/tools/radio-validation/network-validator.d.ts +2 -1
- package/dist/tools/radio-validation/network-validator.d.ts.map +1 -1
- package/dist/tools/radio-validation/network-validator.js +101 -75
- package/dist/tools/radio-validation/network-validator.js.map +1 -1
- package/dist/tools/radio-validation/recommendation-engine.d.ts.map +1 -1
- package/dist/tools/radio-validation/recommendation-engine.js +9 -6
- package/dist/tools/radio-validation/recommendation-engine.js.map +1 -1
- package/dist/tools/radio-validation/stream-detector.d.ts +2 -3
- package/dist/tools/radio-validation/stream-detector.d.ts.map +1 -1
- package/dist/tools/radio-validation/stream-detector.js +13 -7
- package/dist/tools/radio-validation/stream-detector.js.map +1 -1
- package/dist/tools/radio-validation/validation-core.d.ts.map +1 -1
- package/dist/tools/radio-validation/validation-core.js +46 -20
- package/dist/tools/radio-validation/validation-core.js.map +1 -1
- package/dist/tools/radio.d.ts.map +1 -1
- package/dist/tools/radio.js +199 -169
- package/dist/tools/radio.js.map +1 -1
- package/dist/tools/search/filter-resolver.d.ts +13 -0
- package/dist/tools/search/filter-resolver.d.ts.map +1 -1
- package/dist/tools/search/filter-resolver.js +65 -3
- package/dist/tools/search/filter-resolver.js.map +1 -1
- package/dist/tools/search/parallel-searcher.js +3 -3
- package/dist/tools/search/parallel-searcher.js.map +1 -1
- package/dist/tools/search/result-aggregator.d.ts +28 -3
- package/dist/tools/search/result-aggregator.d.ts.map +1 -1
- package/dist/tools/search/result-aggregator.js +44 -17
- package/dist/tools/search/result-aggregator.js.map +1 -1
- package/dist/tools/search/search-orchestrator.d.ts +2 -1
- package/dist/tools/search/search-orchestrator.d.ts.map +1 -1
- package/dist/tools/search/search-orchestrator.js +5 -5
- package/dist/tools/search/search-orchestrator.js.map +1 -1
- package/dist/tools/tags.d.ts.map +1 -1
- package/dist/tools/tags.js +38 -13
- package/dist/tools/tags.js.map +1 -1
- package/dist/tools/test.js +3 -3
- package/dist/tools/test.js.map +1 -1
- package/dist/tools/user-preferences.d.ts +24 -0
- package/dist/tools/user-preferences.d.ts.map +1 -1
- package/dist/tools/user-preferences.js +200 -126
- package/dist/tools/user-preferences.js.map +1 -1
- package/dist/transformers/album-transformer.d.ts +6 -2
- package/dist/transformers/album-transformer.d.ts.map +1 -1
- package/dist/transformers/album-transformer.js +44 -25
- package/dist/transformers/album-transformer.js.map +1 -1
- package/dist/transformers/artist-transformer.d.ts +6 -2
- package/dist/transformers/artist-transformer.d.ts.map +1 -1
- package/dist/transformers/artist-transformer.js +39 -20
- package/dist/transformers/artist-transformer.js.map +1 -1
- package/dist/transformers/playlist-transformer.d.ts.map +1 -1
- package/dist/transformers/playlist-transformer.js +12 -6
- package/dist/transformers/playlist-transformer.js.map +1 -1
- package/dist/transformers/shared-transformers.d.ts +27 -0
- package/dist/transformers/shared-transformers.d.ts.map +1 -1
- package/dist/transformers/shared-transformers.js +31 -7
- package/dist/transformers/shared-transformers.js.map +1 -1
- package/dist/transformers/song-transformer.d.ts +7 -2
- package/dist/transformers/song-transformer.d.ts.map +1 -1
- package/dist/transformers/song-transformer.js +55 -25
- package/dist/transformers/song-transformer.js.map +1 -1
- package/dist/types/core.d.ts +7 -2
- package/dist/types/core.d.ts.map +1 -1
- package/dist/types/playlists.d.ts +7 -5
- package/dist/types/playlists.d.ts.map +1 -1
- package/dist/types/tags.d.ts +4 -4
- package/dist/types/tags.d.ts.map +1 -1
- package/dist/utils/cache.d.ts.map +1 -1
- package/dist/utils/cache.js +1 -3
- package/dist/utils/cache.js.map +1 -1
- package/dist/utils/error-formatter.js +3 -3
- package/dist/utils/error-formatter.js.map +1 -1
- package/dist/utils/fetch-with-timeout.js +1 -1
- package/dist/utils/fetch-with-timeout.js.map +1 -1
- package/dist/utils/logger.d.ts +12 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +24 -9
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/message-manager.js +2 -2
- package/dist/utils/message-manager.js.map +1 -1
- package/dist/utils/network-safety.d.ts.map +1 -1
- package/dist/utils/network-safety.js +12 -1
- package/dist/utils/network-safety.js.map +1 -1
- package/dist/utils/open-browser.d.ts +27 -0
- package/dist/utils/open-browser.d.ts.map +1 -0
- package/dist/utils/open-browser.js +54 -0
- package/dist/utils/open-browser.js.map +1 -0
- package/dist/utils/strip-html.js +1 -1
- package/dist/utils/strip-html.js.map +1 -1
- package/dist/utils/version.d.ts.map +1 -1
- package/dist/utils/version.js +10 -6
- package/dist/utils/version.js.map +1 -1
- package/dist/web/acquire.d.ts +69 -0
- package/dist/web/acquire.d.ts.map +1 -0
- package/dist/web/acquire.js +134 -0
- package/dist/web/acquire.js.map +1 -0
- package/dist/web/main.d.ts +20 -0
- package/dist/web/main.d.ts.map +1 -0
- package/dist/web/main.js +292 -0
- package/dist/web/main.js.map +1 -0
- package/dist/web/player-runtime.d.ts +48 -0
- package/dist/web/player-runtime.d.ts.map +1 -0
- package/dist/web/player-runtime.js +62 -0
- package/dist/web/player-runtime.js.map +1 -0
- package/dist/web/spawn.d.ts +82 -0
- package/dist/web/spawn.d.ts.map +1 -0
- package/dist/web/spawn.js +184 -0
- package/dist/web/spawn.js.map +1 -0
- package/dist/webui/broadcaster.d.ts.map +1 -1
- package/dist/webui/broadcaster.js +17 -3
- package/dist/webui/broadcaster.js.map +1 -1
- package/dist/webui/http-helpers.d.ts +7 -0
- package/dist/webui/http-helpers.d.ts.map +1 -1
- package/dist/webui/http-helpers.js +15 -0
- package/dist/webui/http-helpers.js.map +1 -1
- package/dist/webui/loopback.d.ts +27 -0
- package/dist/webui/loopback.d.ts.map +1 -0
- package/dist/webui/loopback.js +34 -0
- package/dist/webui/loopback.js.map +1 -0
- package/dist/webui/public/app.js +193 -2
- package/dist/webui/public/index.html +58 -0
- package/dist/webui/public/styles.css +92 -0
- package/dist/webui/routes/controls.d.ts +7 -0
- package/dist/webui/routes/controls.d.ts.map +1 -1
- package/dist/webui/routes/controls.js +11 -17
- package/dist/webui/routes/controls.js.map +1 -1
- package/dist/webui/routes/cover.d.ts.map +1 -1
- package/dist/webui/routes/cover.js +28 -1
- package/dist/webui/routes/cover.js.map +1 -1
- package/dist/webui/routes/health.d.ts +35 -0
- package/dist/webui/routes/health.d.ts.map +1 -0
- package/dist/webui/routes/health.js +42 -0
- package/dist/webui/routes/health.js.map +1 -0
- package/dist/webui/routes/player.d.ts +47 -0
- package/dist/webui/routes/player.d.ts.map +1 -0
- package/dist/webui/routes/player.js +127 -0
- package/dist/webui/routes/player.js.map +1 -0
- package/dist/webui/routes/playlists.d.ts +37 -0
- package/dist/webui/routes/playlists.d.ts.map +1 -0
- package/dist/webui/routes/playlists.js +56 -0
- package/dist/webui/routes/playlists.js.map +1 -0
- package/dist/webui/routes/snapshot.d.ts +1 -1
- package/dist/webui/routes/snapshot.d.ts.map +1 -1
- package/dist/webui/routes/snapshot.js +4 -2
- package/dist/webui/routes/snapshot.js.map +1 -1
- package/dist/webui/routes/static-files.d.ts.map +1 -1
- package/dist/webui/routes/static-files.js +6 -1
- package/dist/webui/routes/static-files.js.map +1 -1
- package/dist/webui/server.d.ts +5 -2
- package/dist/webui/server.d.ts.map +1 -1
- package/dist/webui/server.js +45 -5
- package/dist/webui/server.js.map +1 -1
- package/package.json +15 -6
- package/scripts/make-launcher.mjs +388 -0
- package/dist/webui/index.d.ts +0 -74
- package/dist/webui/index.d.ts.map +0 -1
- package/dist/webui/index.js +0 -165
- package/dist/webui/index.js.map +0 -1
|
@@ -176,6 +176,20 @@ export class NavidromeClient {
|
|
|
176
176
|
if (endpoint.includes('..')) {
|
|
177
177
|
throw new Error('Endpoint must not contain path-traversal segments');
|
|
178
178
|
}
|
|
179
|
+
// URL-encoded traversal (`%2e%2e`) survives the literal check above but
|
|
180
|
+
// Node normalizes it back to `..` before the request leaves the process.
|
|
181
|
+
// Decode and re-check; a malformed escape sequence is itself suspect, so
|
|
182
|
+
// reject it rather than letting it through.
|
|
183
|
+
let decoded;
|
|
184
|
+
try {
|
|
185
|
+
decoded = decodeURIComponent(endpoint);
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
throw new Error('Endpoint contains a malformed percent-encoding sequence');
|
|
189
|
+
}
|
|
190
|
+
if (decoded.includes('..')) {
|
|
191
|
+
throw new Error('Endpoint must not contain path-traversal segments');
|
|
192
|
+
}
|
|
179
193
|
if (/^https?:\/\//i.test(endpoint)) {
|
|
180
194
|
throw new Error('Endpoint must be a path, not an absolute URL');
|
|
181
195
|
}
|
|
@@ -186,7 +200,7 @@ export class NavidromeClient {
|
|
|
186
200
|
'X-ND-Authorization': `Bearer ${token}`,
|
|
187
201
|
};
|
|
188
202
|
// Only set Content-Type for non-GET requests
|
|
189
|
-
if (options.method !==
|
|
203
|
+
if (options.method !== undefined && options.method !== 'GET') {
|
|
190
204
|
defaultHeaders['Content-Type'] = 'application/json';
|
|
191
205
|
}
|
|
192
206
|
// Only retry idempotent methods. POST/PUT/DELETE may have side effects
|
|
@@ -197,12 +211,20 @@ export class NavidromeClient {
|
|
|
197
211
|
// to GET in fetch().
|
|
198
212
|
const method = options.method ?? 'GET';
|
|
199
213
|
const isIdempotent = method === 'GET' || method === 'HEAD';
|
|
214
|
+
// RequestInit.headers is HeadersInit, which can be a Headers instance, a
|
|
215
|
+
// [k, v][] tuple array, or a plain object. Object-spreading a Headers
|
|
216
|
+
// instance yields `{}` and silently drops the caller's headers, so merge
|
|
217
|
+
// via the Headers API to preserve every form. Caller headers win on
|
|
218
|
+
// collision (last write).
|
|
219
|
+
const merged = new Headers(defaultHeaders);
|
|
220
|
+
if (options.headers !== undefined) {
|
|
221
|
+
new Headers(options.headers).forEach((value, key) => {
|
|
222
|
+
merged.set(key, value);
|
|
223
|
+
});
|
|
224
|
+
}
|
|
200
225
|
return fetchWithTimeout(`${this.baseUrl}/api${endpoint}`, {
|
|
201
226
|
...options,
|
|
202
|
-
headers:
|
|
203
|
-
...defaultHeaders,
|
|
204
|
-
...options.headers,
|
|
205
|
-
},
|
|
227
|
+
headers: merged,
|
|
206
228
|
}, {
|
|
207
229
|
timeoutMs: getNavidromeRequestTimeoutMs(),
|
|
208
230
|
retryPolicy: isIdempotent ? 'safe' : 'never',
|
|
@@ -232,6 +254,13 @@ export class NavidromeClient {
|
|
|
232
254
|
// Body looked like JSON but didn't parse — fall through to text.
|
|
233
255
|
}
|
|
234
256
|
}
|
|
257
|
+
// KNOWN LATENT TRAP (left as-is per maintainer decision): this cast is only
|
|
258
|
+
// sound when `T` is `string` or `unknown` — i.e. callers that genuinely want
|
|
259
|
+
// the raw text/plain body (M3U export, etc.). A future typed caller such as
|
|
260
|
+
// `request<AlbumDTO[]>()` whose endpoint returns a non-JSON text/plain body
|
|
261
|
+
// would silently receive a raw string typed as `AlbumDTO[]`, with no parse
|
|
262
|
+
// error. No current caller hits that path; revisit if a typed JSON caller
|
|
263
|
+
// starts relying on the text/plain fallthrough.
|
|
235
264
|
return text;
|
|
236
265
|
}
|
|
237
266
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navidrome-client.js","sourceRoot":"","sources":["../../src/client/navidrome-client.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"navidrome-client.js","sourceRoot":"","sources":["../../src/client/navidrome-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Navidrome MCP Server - Settings store → flat Config projection
|
|
3
|
+
* Copyright (C) 2025
|
|
4
|
+
*
|
|
5
|
+
* This program is free software: you can redistribute it and/or modify
|
|
6
|
+
* it under the terms of the GNU Affero General Public License as published
|
|
7
|
+
* by the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
* (at your option) any later version.
|
|
9
|
+
*
|
|
10
|
+
* This program is distributed in the hope that it will be useful,
|
|
11
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
* GNU Affero General Public License for more details.
|
|
14
|
+
*
|
|
15
|
+
* You should have received a copy of the GNU Affero General Public License
|
|
16
|
+
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
*/
|
|
18
|
+
import type { RawConfigInput } from './schema.js';
|
|
19
|
+
import type { SettingsFile } from './store.js';
|
|
20
|
+
/**
|
|
21
|
+
* Project the nested store into the flat `RawConfigInput` that `ConfigSchema`
|
|
22
|
+
* validates. The single place the nested→flat translation lives, shared by
|
|
23
|
+
* `loadConfig()` and the settings server's "test connection" route.
|
|
24
|
+
*
|
|
25
|
+
* Performs mpv detection (so `features.playback` and `mpvPath` are correct),
|
|
26
|
+
* which means it is not side-effect-free (it may shell out via `command -v`).
|
|
27
|
+
*/
|
|
28
|
+
export declare function mapStoreToConfig(settings: SettingsFile): RawConfigInput;
|
|
29
|
+
//# sourceMappingURL=map-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"map-config.d.ts","sourceRoot":"","sources":["../../src/config/map-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAa/C;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,YAAY,GAAG,cAAc,CAsEvE"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Navidrome MCP Server - Settings store → flat Config projection
|
|
3
|
+
* Copyright (C) 2025
|
|
4
|
+
*
|
|
5
|
+
* This program is free software: you can redistribute it and/or modify
|
|
6
|
+
* it under the terms of the GNU Affero General Public License as published
|
|
7
|
+
* by the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
* (at your option) any later version.
|
|
9
|
+
*
|
|
10
|
+
* This program is distributed in the hope that it will be useful,
|
|
11
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
* GNU Affero General Public License for more details.
|
|
14
|
+
*
|
|
15
|
+
* You should have received a copy of the GNU Affero General Public License
|
|
16
|
+
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
*/
|
|
18
|
+
import { resolveMpvBinary } from '../services/playback/mpv-process.js';
|
|
19
|
+
import { DEFAULT_LRCLIB_BASE } from '../constants/defaults.js';
|
|
20
|
+
// Kept in its own module (separate from store.ts's file I/O) so that the
|
|
21
|
+
// read/write path does NOT transitively import the playback subsystem. Only the
|
|
22
|
+
// config-resolution path (which legitimately needs mpv detection) pulls it in.
|
|
23
|
+
/** Coerce null/undefined/blank strings to `undefined`; trim otherwise. */
|
|
24
|
+
function nonEmpty(value) {
|
|
25
|
+
if (value === null || value === undefined)
|
|
26
|
+
return undefined;
|
|
27
|
+
const trimmed = value.trim();
|
|
28
|
+
return trimmed === '' ? undefined : trimmed;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Project the nested store into the flat `RawConfigInput` that `ConfigSchema`
|
|
32
|
+
* validates. The single place the nested→flat translation lives, shared by
|
|
33
|
+
* `loadConfig()` and the settings server's "test connection" route.
|
|
34
|
+
*
|
|
35
|
+
* Performs mpv detection (so `features.playback` and `mpvPath` are correct),
|
|
36
|
+
* which means it is not side-effect-free (it may shell out via `command -v`).
|
|
37
|
+
*/
|
|
38
|
+
export function mapStoreToConfig(settings) {
|
|
39
|
+
const nav = settings.navidrome ?? {};
|
|
40
|
+
const features = settings.features ?? {};
|
|
41
|
+
const playback = settings.playback ?? {};
|
|
42
|
+
const webui = settings.webui ?? {};
|
|
43
|
+
const advanced = settings.advanced ?? {};
|
|
44
|
+
const library = settings.library ?? {};
|
|
45
|
+
const lastFmApiKey = nonEmpty(features.lastFmApiKey);
|
|
46
|
+
const radioBrowserUserAgent = nonEmpty(features.radioBrowserUserAgent);
|
|
47
|
+
const lyricsProvider = nonEmpty(features.lyricsProvider);
|
|
48
|
+
const lrclibUserAgent = nonEmpty(features.lrclibUserAgent);
|
|
49
|
+
// mpv: explicit store path wins; null/empty → auto-detect. Drives the
|
|
50
|
+
// playback feature flag (and is omitted entirely when unresolved, matching
|
|
51
|
+
// the legacy behavior of only setting `mpvPath` when a binary exists).
|
|
52
|
+
const resolvedMpvPath = resolveMpvBinary(playback.mpvPath);
|
|
53
|
+
// defaultLibraryIds: an empty array means "all libraries" — same as unset.
|
|
54
|
+
const libIds = library.defaultLibraryIds;
|
|
55
|
+
const defaultLibraryIds = libIds !== undefined && libIds.length > 0 ? libIds : undefined;
|
|
56
|
+
// webui host: explicit host wins; otherwise `expose` flips the bind to
|
|
57
|
+
// 0.0.0.0 (replaces the legacy env-only buildWebUiConfig()).
|
|
58
|
+
const expose = webui.expose ?? false;
|
|
59
|
+
const explicitHost = nonEmpty(webui.host);
|
|
60
|
+
const host = explicitHost ?? (expose ? '0.0.0.0' : '127.0.0.1');
|
|
61
|
+
return {
|
|
62
|
+
navidromeUrl: nav.url ?? '',
|
|
63
|
+
navidromeUsername: nav.username ?? '',
|
|
64
|
+
navidromePassword: nav.password ?? '',
|
|
65
|
+
debug: advanced.debug ?? false,
|
|
66
|
+
cacheTtl: advanced.cacheTtl ?? 300,
|
|
67
|
+
tokenExpiry: advanced.tokenExpiry ?? 86400,
|
|
68
|
+
defaultLibraryIds,
|
|
69
|
+
features: {
|
|
70
|
+
lastfm: lastFmApiKey !== undefined,
|
|
71
|
+
radioBrowser: radioBrowserUserAgent !== undefined,
|
|
72
|
+
lyrics: lyricsProvider !== undefined && lrclibUserAgent !== undefined,
|
|
73
|
+
playback: resolvedMpvPath !== null,
|
|
74
|
+
},
|
|
75
|
+
lastFmApiKey,
|
|
76
|
+
radioBrowserUserAgent,
|
|
77
|
+
// Only an explicit, real URL pins the mirror; null/blank keeps SRV resolution.
|
|
78
|
+
radioBrowserBaseOverride: nonEmpty(features.radioBrowserBase),
|
|
79
|
+
lyricsProvider,
|
|
80
|
+
lrclibUserAgent,
|
|
81
|
+
// null/blank falls through to the canonical LRCLIB endpoint.
|
|
82
|
+
lrclibBase: nonEmpty(features.lrclibBase) ?? DEFAULT_LRCLIB_BASE,
|
|
83
|
+
...(resolvedMpvPath !== null ? { mpvPath: resolvedMpvPath } : {}),
|
|
84
|
+
playbackTranscodeFormat: nonEmpty(playback.transcodeFormat) ?? 'raw',
|
|
85
|
+
playbackTranscodeBitrate: nonEmpty(playback.transcodeBitrate) ?? '192',
|
|
86
|
+
filterCacheEnabled: library.filterCacheEnabled ?? true,
|
|
87
|
+
webui: {
|
|
88
|
+
enabled: webui.enabled ?? true,
|
|
89
|
+
host,
|
|
90
|
+
port: webui.port ?? 8808,
|
|
91
|
+
expose,
|
|
92
|
+
autoOpenBrowser: webui.autoOpenBrowser ?? false,
|
|
93
|
+
persistAfterMcpExit: webui.persistAfterMcpExit ?? false,
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=map-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"map-config.js","sourceRoot":"","sources":["../../src/config/map-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Navidrome MCP Server - Configuration Schema
|
|
3
|
+
* Copyright (C) 2025
|
|
4
|
+
*
|
|
5
|
+
* This program is free software: you can redistribute it and/or modify
|
|
6
|
+
* it under the terms of the GNU Affero General Public License as published
|
|
7
|
+
* by the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
* (at your option) any later version.
|
|
9
|
+
*
|
|
10
|
+
* This program is distributed in the hope that it will be useful,
|
|
11
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
* GNU Affero General Public License for more details.
|
|
14
|
+
*
|
|
15
|
+
* You should have received a copy of the GNU Affero General Public License
|
|
16
|
+
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
*/
|
|
18
|
+
import { z } from 'zod';
|
|
19
|
+
/**
|
|
20
|
+
* The canonical runtime configuration shape. This is a *flat* projection of the
|
|
21
|
+
* nested `settings.json` store (see `src/config/store.ts`), kept flat because
|
|
22
|
+
* `NavidromeClient`, the playback engine, the managers, and every tool category
|
|
23
|
+
* read fields like `config.navidromeUrl` / `config.features.*` directly.
|
|
24
|
+
*
|
|
25
|
+
* Extracted into its own module (rather than living in `src/config.ts`) so that
|
|
26
|
+
* `store.ts` can map the nested store into this shape without a circular import
|
|
27
|
+
* back through `config.ts`.
|
|
28
|
+
*/
|
|
29
|
+
export declare const ConfigSchema: z.ZodObject<{
|
|
30
|
+
navidromeUrl: z.ZodString;
|
|
31
|
+
navidromeUsername: z.ZodString;
|
|
32
|
+
navidromePassword: z.ZodString;
|
|
33
|
+
debug: z.ZodDefault<z.ZodBoolean>;
|
|
34
|
+
cacheTtl: z.ZodDefault<z.ZodNumber>;
|
|
35
|
+
tokenExpiry: z.ZodDefault<z.ZodNumber>;
|
|
36
|
+
defaultLibraryIds: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
|
|
37
|
+
features: z.ZodObject<{
|
|
38
|
+
lastfm: z.ZodDefault<z.ZodBoolean>;
|
|
39
|
+
radioBrowser: z.ZodDefault<z.ZodBoolean>;
|
|
40
|
+
lyrics: z.ZodDefault<z.ZodBoolean>;
|
|
41
|
+
playback: z.ZodDefault<z.ZodBoolean>;
|
|
42
|
+
}, z.core.$strip>;
|
|
43
|
+
lastFmApiKey: z.ZodOptional<z.ZodString>;
|
|
44
|
+
radioBrowserUserAgent: z.ZodOptional<z.ZodString>;
|
|
45
|
+
radioBrowserBaseOverride: z.ZodOptional<z.ZodString>;
|
|
46
|
+
lyricsProvider: z.ZodOptional<z.ZodString>;
|
|
47
|
+
lrclibUserAgent: z.ZodOptional<z.ZodString>;
|
|
48
|
+
lrclibBase: z.ZodDefault<z.ZodString>;
|
|
49
|
+
mpvPath: z.ZodOptional<z.ZodString>;
|
|
50
|
+
playbackTranscodeFormat: z.ZodDefault<z.ZodString>;
|
|
51
|
+
playbackTranscodeBitrate: z.ZodDefault<z.ZodString>;
|
|
52
|
+
filterCacheEnabled: z.ZodDefault<z.ZodBoolean>;
|
|
53
|
+
webui: z.ZodObject<{
|
|
54
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
55
|
+
host: z.ZodDefault<z.ZodString>;
|
|
56
|
+
port: z.ZodDefault<z.ZodNumber>;
|
|
57
|
+
expose: z.ZodDefault<z.ZodBoolean>;
|
|
58
|
+
autoOpenBrowser: z.ZodDefault<z.ZodBoolean>;
|
|
59
|
+
persistAfterMcpExit: z.ZodDefault<z.ZodBoolean>;
|
|
60
|
+
}, z.core.$strip>;
|
|
61
|
+
}, z.core.$strip>;
|
|
62
|
+
export type Config = z.infer<typeof ConfigSchema>;
|
|
63
|
+
/** The pre-validation input shape (fields with defaults are optional). */
|
|
64
|
+
export type RawConfigInput = z.input<typeof ConfigSchema>;
|
|
65
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;;;;;;;GASG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAuEvB,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAElD,0EAA0E;AAC1E,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Navidrome MCP Server - Configuration Schema
|
|
3
|
+
* Copyright (C) 2025
|
|
4
|
+
*
|
|
5
|
+
* This program is free software: you can redistribute it and/or modify
|
|
6
|
+
* it under the terms of the GNU Affero General Public License as published
|
|
7
|
+
* by the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
* (at your option) any later version.
|
|
9
|
+
*
|
|
10
|
+
* This program is distributed in the hope that it will be useful,
|
|
11
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
* GNU Affero General Public License for more details.
|
|
14
|
+
*
|
|
15
|
+
* You should have received a copy of the GNU Affero General Public License
|
|
16
|
+
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
*/
|
|
18
|
+
import { z } from 'zod';
|
|
19
|
+
import { DEFAULT_LRCLIB_BASE } from '../constants/defaults.js';
|
|
20
|
+
/**
|
|
21
|
+
* The canonical runtime configuration shape. This is a *flat* projection of the
|
|
22
|
+
* nested `settings.json` store (see `src/config/store.ts`), kept flat because
|
|
23
|
+
* `NavidromeClient`, the playback engine, the managers, and every tool category
|
|
24
|
+
* read fields like `config.navidromeUrl` / `config.features.*` directly.
|
|
25
|
+
*
|
|
26
|
+
* Extracted into its own module (rather than living in `src/config.ts`) so that
|
|
27
|
+
* `store.ts` can map the nested store into this shape without a circular import
|
|
28
|
+
* back through `config.ts`.
|
|
29
|
+
*/
|
|
30
|
+
export const ConfigSchema = z.object({
|
|
31
|
+
navidromeUrl: z.string().url('NAVIDROME_URL must be a valid URL'),
|
|
32
|
+
navidromeUsername: z.string().min(1, 'NAVIDROME_USERNAME is required'),
|
|
33
|
+
navidromePassword: z.string().min(1, 'NAVIDROME_PASSWORD is required'),
|
|
34
|
+
debug: z.boolean().default(false),
|
|
35
|
+
cacheTtl: z.number().positive().default(300),
|
|
36
|
+
tokenExpiry: z.number().positive().default(86400), // Default 24 hours in seconds
|
|
37
|
+
// Library Configuration
|
|
38
|
+
defaultLibraryIds: z.array(z.number()).optional(),
|
|
39
|
+
// Feature Configuration
|
|
40
|
+
features: z.object({
|
|
41
|
+
lastfm: z.boolean().default(false),
|
|
42
|
+
radioBrowser: z.boolean().default(false),
|
|
43
|
+
lyrics: z.boolean().default(false),
|
|
44
|
+
playback: z.boolean().default(false),
|
|
45
|
+
}),
|
|
46
|
+
// API Keys and External Service Configuration
|
|
47
|
+
lastFmApiKey: z.string().optional(),
|
|
48
|
+
radioBrowserUserAgent: z.string().optional(),
|
|
49
|
+
// Set only when the user explicitly provides a Radio Browser base in the
|
|
50
|
+
// store — bypasses SRV resolution and pins to the chosen mirror. Production
|
|
51
|
+
// base resolution otherwise flows through `getRadioBrowserBase()` which does
|
|
52
|
+
// SRV-record lookup + caching, with a hardcoded fallback in
|
|
53
|
+
// `RADIO_BROWSER_FALLBACK_BASE`.
|
|
54
|
+
radioBrowserBaseOverride: z.string().url().optional(),
|
|
55
|
+
// Lyrics Configuration
|
|
56
|
+
lyricsProvider: z.string().optional(),
|
|
57
|
+
lrclibUserAgent: z.string().optional(),
|
|
58
|
+
lrclibBase: z.string().url().default(DEFAULT_LRCLIB_BASE),
|
|
59
|
+
// Playback (mpv) Configuration
|
|
60
|
+
mpvPath: z.string().optional(),
|
|
61
|
+
// 'raw' (default) streams the original file untouched: highest quality and
|
|
62
|
+
// fully seekable. Set a codec (e.g. 'mp3', 'opus') to transcode for limited
|
|
63
|
+
// bandwidth — `playbackTranscodeBitrate` then applies.
|
|
64
|
+
playbackTranscodeFormat: z.string().default('raw'),
|
|
65
|
+
playbackTranscodeBitrate: z.string().default('192'),
|
|
66
|
+
// Filter cache — when false, re-fetches tag/genre lists on every filter resolution
|
|
67
|
+
// instead of using the startup snapshot. Set to false if you curate your library
|
|
68
|
+
// mid-session and need newly-added genres/labels/moods to be immediately visible.
|
|
69
|
+
filterCacheEnabled: z.boolean().default(true),
|
|
70
|
+
// Web UI Configuration — companion HTTP control panel for mpv playback.
|
|
71
|
+
// The web UI is implicitly gated by the playback feature: it only ever
|
|
72
|
+
// initializes when mpv is detected. Even when `enabled` is true, the
|
|
73
|
+
// server does not bind a port until something has been queued.
|
|
74
|
+
// `host=127.0.0.1` keeps the panel on localhost only. Setting `expose=true`
|
|
75
|
+
// forces the bind to `0.0.0.0` so a phone on the same LAN can reach it;
|
|
76
|
+
// explicit `host` overrides this.
|
|
77
|
+
webui: z.object({
|
|
78
|
+
enabled: z.boolean().default(true),
|
|
79
|
+
host: z.string().default('127.0.0.1'),
|
|
80
|
+
port: z.number().int().min(1).max(65535).default(8808),
|
|
81
|
+
expose: z.boolean().default(false),
|
|
82
|
+
// When true, the player opens in the user's browser automatically when the
|
|
83
|
+
// MCP server starts (the standalone `navidrome-web` bin always opens, since
|
|
84
|
+
// the user ran it explicitly). Default false to avoid popping a tab on every
|
|
85
|
+
// headless Claude Desktop launch.
|
|
86
|
+
autoOpenBrowser: z.boolean().default(false),
|
|
87
|
+
// When true, a player spawned by the MCP server keeps running (and mpv keeps
|
|
88
|
+
// playing) after the MCP server closes/restarts. Default false: the spawned
|
|
89
|
+
// player and mpv stop with the MCP server, so nothing lingers. A player you
|
|
90
|
+
// launch yourself (`navidrome-web`) always persists regardless. Can be
|
|
91
|
+
// toggled live in the player's loopback-only settings modal.
|
|
92
|
+
persistAfterMcpExit: z.boolean().default(false),
|
|
93
|
+
}),
|
|
94
|
+
});
|
|
95
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Navidrome MCP Server - Settings form seed (pre-fill source)
|
|
3
|
+
* Copyright (C) 2025
|
|
4
|
+
*
|
|
5
|
+
* This program is free software: you can redistribute it and/or modify
|
|
6
|
+
* it under the terms of the GNU Affero General Public License as published
|
|
7
|
+
* by the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
* (at your option) any later version.
|
|
9
|
+
*
|
|
10
|
+
* This program is distributed in the hope that it will be useful,
|
|
11
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
* GNU Affero General Public License for more details.
|
|
14
|
+
*
|
|
15
|
+
* You should have received a copy of the GNU Affero General Public License
|
|
16
|
+
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
*/
|
|
18
|
+
import { type SettingsFile } from './store.js';
|
|
19
|
+
/**
|
|
20
|
+
* Recommended values for the optional radio/lyrics fields that gate a feature
|
|
21
|
+
* on. Single source for two behaviours, keyed by the form's dotted field path
|
|
22
|
+
* (see `app.js` FIELDS):
|
|
23
|
+
*
|
|
24
|
+
* - First run (no settings.json): `importFromLegacyEnv` pre-fills these into
|
|
25
|
+
* the seed, so a fresh install gets working radio + lyrics without the user
|
|
26
|
+
* hunting for what to type.
|
|
27
|
+
* - Later runs (settings.json exists): the file is returned verbatim, and the
|
|
28
|
+
* form surfaces these as non-intrusive "suggested" hints *beside* any field
|
|
29
|
+
* the user left blank — never auto-filling, so a deliberate blank (e.g.
|
|
30
|
+
* radio turned off) is preserved.
|
|
31
|
+
*
|
|
32
|
+
* `features.radioBrowserBase` is intentionally absent: blank there means
|
|
33
|
+
* SRV-based auto mirror selection, which is more robust than pinning a mirror.
|
|
34
|
+
*/
|
|
35
|
+
export declare const FORM_SUGGESTIONS: {
|
|
36
|
+
readonly 'features.radioBrowserUserAgent': "Navidrome-MCP";
|
|
37
|
+
readonly 'features.lyricsProvider': "lrclib";
|
|
38
|
+
readonly 'features.lrclibUserAgent': "Navidrome-MCP";
|
|
39
|
+
readonly 'features.lrclibBase': "https://lrclib.net";
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Compute the seed used to pre-fill the settings form.
|
|
43
|
+
*
|
|
44
|
+
* - If a `settings.json` already exists, it IS the seed (pre-fill from the file
|
|
45
|
+
* so the user edits what they have).
|
|
46
|
+
* - Otherwise, import a partial config from legacy sources so existing users
|
|
47
|
+
* only have to verify + submit rather than re-type: `process.env` (covers the
|
|
48
|
+
* MCP-client JSON env and the shell) merged with a legacy project-root `.env`
|
|
49
|
+
* (covers dev installs). Optional radio/lyrics fields that gate a feature on
|
|
50
|
+
* are pre-filled with working defaults (see `importFromLegacyEnv`) so a
|
|
51
|
+
* fresh install gets functional features without hunting for values.
|
|
52
|
+
*
|
|
53
|
+
* This is import-only and never on the normal runtime path — `loadConfig()`
|
|
54
|
+
* reads `settings.json` exclusively. Returns REAL values (including secrets);
|
|
55
|
+
* masking for display happens at the HTTP layer.
|
|
56
|
+
*/
|
|
57
|
+
export declare function buildFormSeed(): SettingsFile;
|
|
58
|
+
//# sourceMappingURL=seed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../../src/config/seed.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAKH,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAG7D;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,gBAAgB;;;;;CAKnB,CAAC;AAEX;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,IAAI,YAAY,CAM5C"}
|