From dbd8d5fb5a50522bdb5e8cb1321923854571ac75 Mon Sep 17 00:00:00 2001 From: Viren070 Date: Fri, 7 Nov 2025 19:46:22 +0000 Subject: [PATCH] chore(debrid): improve logging in usenet-stream-base --- .../core/src/debrid/usenet-stream-base.ts | 31 +++++++++++++------ packages/core/src/utils/logger.ts | 1 + 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/packages/core/src/debrid/usenet-stream-base.ts b/packages/core/src/debrid/usenet-stream-base.ts index 601a92ca..54eaf8ed 100644 --- a/packages/core/src/debrid/usenet-stream-base.ts +++ b/packages/core/src/debrid/usenet-stream-base.ts @@ -7,6 +7,7 @@ import { Cache, DistributedLock, fromUrlSafeBase64, + formatZodError, } from '../utils/index.js'; import { isVideoFile, selectFileInTorrentOrNZB } from './utils.js'; import { @@ -23,8 +24,7 @@ import { createClient, WebDAVClient, FileStat } from 'webdav'; import { fetch } from 'undici'; import { BuiltinProxy } from '../proxy/builtin.js'; import { basename } from 'path'; - -const logger = createLogger('usenet-stream-base'); +import { Logger } from 'winston'; // Zod schemas for SABnzbd-compatible API responses (used by streaming usenet services) const AddUrlResponseSchema = z.object({ @@ -107,11 +107,15 @@ const convertStatusCodeToError = (code: number): DebridError['code'] => { * API client for SABnzbd APIs */ export class SABnzbdApi { + private readonly logger: Logger; constructor( protected readonly apiUrl: string, protected readonly apiKey: string, - protected readonly serviceName: string - ) {} + protected readonly serviceName: string, + logger: Logger + ) { + this.logger = logger; + } protected async request( params: Record, @@ -128,7 +132,7 @@ export class SABnzbdApi { url.searchParams.append(key, value); }); - logger.debug(`Making ${this.serviceName} API request`, { + this.logger.debug(`Making ${this.serviceName} API request`, { ...params, apikey: maskSensitiveInfo(params.apikey), fullUrl: maskSensitiveInfo(url.toString()), @@ -187,12 +191,15 @@ export class SABnzbdApi { } if (error instanceof ZodError) { + this.logger.error( + `Failed to parse ${this.serviceName} API response: ${formatZodError(error)}` + ); throw new DebridError(`Invalid ${this.serviceName} API response`, { statusCode: response.status, statusText: response.statusText, code: 'UNKNOWN', headers: Object.fromEntries(response.headers.entries()), - body: data, + body: JSON.stringify(data), type: 'api_error', }); } @@ -286,7 +293,7 @@ export class SABnzbdApi { }); } - logger.debug(`NZB job successfully added`, { + this.logger.debug(`NZB job successfully added`, { nzoId, }); return { nzoId }; @@ -396,9 +403,9 @@ export abstract class UsenetStreamService implements DebridService { readonly supportsUsenet = true; abstract readonly serviceName: ServiceId; - abstract readonly serviceLogger: ReturnType; protected readonly auth: UsenetStreamServiceConfig; + protected readonly serviceLogger: Logger; protected static readonly MIN_FILE_SIZE = 500 * 1024 * 1024; // 500 MB protected static readonly MAX_DEPTH = 6; @@ -423,11 +430,17 @@ export abstract class UsenetStreamService implements DebridService { serviceName: ServiceId ) { this.auth = auth; + this.serviceLogger = createLogger(serviceName); this.webdavClient = createClient(auth.webdavUrl, { username: auth.webdavUser, password: auth.webdavPassword, }); - this.api = new SABnzbdApi(auth.apiUrl, auth.apiKey, serviceName); + this.api = new SABnzbdApi( + auth.apiUrl, + auth.apiKey, + serviceName, + this.serviceLogger + ); } protected async collectFiles( diff --git a/packages/core/src/utils/logger.ts b/packages/core/src/utils/logger.ts index d923a602..ad0e4bf6 100644 --- a/packages/core/src/utils/logger.ts +++ b/packages/core/src/utils/logger.ts @@ -49,6 +49,7 @@ const moduleMap: { [key: string]: string } = { 'torrent-galaxy': '🌐 TGx', templates: '📄 TEMPLATES', nzbdav: '📂 NZBDAV', + altmount: '📂 ALTMOUNT', }; // Define colors for each log level using full names