sfiledl 2.2.4 → 2.2.5
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/build/cli.mjs +1281 -0
- package/build/cli.mjs.map +1 -0
- package/build/lib.cjs +2 -969
- package/build/lib.cjs.map +1 -1
- package/build/lib.mjs +2 -919
- package/build/lib.mjs.map +1 -1
- package/build/licenses.txt +1 -0
- package/package.json +52 -15
- package/readme.md +194 -69
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.mjs","sources":["../../lib/errors/base.ts","../../lib/errors/errors.ts","../../lib/config/defaults.ts","../../lib/browser/page-interactions.ts","../../lib/utils/helpers.ts","../../lib/browser/browser-manager.ts","../../lib/utils/logger.ts","../../lib/config/schema.ts","../../lib/core/validator.ts","../../lib/core/downloader.ts","../../cli/config.ts","../../cli/error.ts","../../cli/ui.ts","../../cli/logger.ts","../../cli/cmd.ts"],"sourcesContent":["export abstract class AppError extends Error {\n\tpublic readonly timestamp: string\n\tpublic readonly context: Readonly<Record<string, unknown>>\n\tpublic readonly code: string\n\tpublic readonly retryable: boolean\n\tconstructor(\n\t\tmessage: string,\n\t\tcode: string,\n\t\tretryable: boolean = false,\n\t\tcontext?: Record<string, unknown>,\n\t) {\n\t\tsuper(message)\n\t\tthis.name = this.constructor.name\n\t\tthis.code = code\n\t\tthis.retryable = retryable\n\t\tthis.timestamp = new Date().toISOString()\n\t\tthis.context = context ? Object.freeze({ ...context }) : Object.freeze({})\n\t\tif (Error.captureStackTrace) {\n\t\t\tError.captureStackTrace(this, this.constructor)\n\t\t}\n\t\tObject.freeze(this)\n\t}\n\ttoJSON(): Record<string, unknown> {\n\t\treturn {\n\t\t\tname: this.name,\n\t\t\tcode: this.code,\n\t\t\tmessage: this.message,\n\t\t\tretryable: this.retryable,\n\t\t\ttimestamp: this.timestamp,\n\t\t\tcontext: this.context,\n\t\t\tstack: process.env['NODE_ENV'] === 'development' ? this.stack : undefined,\n\t\t}\n\t}\n\ttoString(): string {\n\t\treturn `${this.name} [${this.code}]: ${this.message}`\n\t}\n\tisCode(code: string): boolean {\n\t\treturn this.code === code\n\t}\n\tisRetryable(): boolean {\n\t\treturn this.retryable\n\t}\n}\n","import { AppError } from './base.js'\nexport class ValidationError extends AppError {\n\tconstructor(message: string, context?: Record<string, unknown>) {\n\t\tsuper(message, 'VALIDATION_ERROR', false, context)\n\t\tObject.freeze(this)\n\t}\n}\nexport class NetworkError extends AppError {\n\tconstructor(message: string, context?: Record<string, unknown>) {\n\t\tsuper(message, 'NETWORK_ERROR', true, context)\n\t\tObject.freeze(this)\n\t}\n}\nexport class FileError extends AppError {\n\tconstructor(message: string, context?: Record<string, unknown>) {\n\t\tsuper(message, 'FILE_ERROR', false, context)\n\t\tObject.freeze(this)\n\t}\n}\nexport class BrowserError extends AppError {\n\tconstructor(message: string, context?: Record<string, unknown>) {\n\t\tsuper(message, 'BROWSER_ERROR', true, context)\n\t\tObject.freeze(this)\n\t}\n}\nexport function isAppError(err: unknown): err is AppError {\n\treturn err instanceof AppError\n}\nexport function isRetryableError(err: unknown): boolean {\n\treturn isAppError(err) && err.retryable\n}\nexport function isErrorWithCode(err: unknown, code: string): boolean {\n\treturn isAppError(err) && err.code === code\n}\n","export const DEFAULTS = {\n\tuserAgent:\n\t\t'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36',\n\theadless: true,\n\ttimeout: 60000,\n\tdownloadButtonTimeout: 30000,\n\tfallbackWaitMs: 3000,\n\tretries: 3,\n\tretryDelay: 1000,\n\tmaxRetryDelay: 30000,\n\tsaveDebugArtifacts: true,\n\tmaxFilenameLength: 255,\n\tsanitizeReplacement: '_',\n} as const\nexport type Defaults = typeof DEFAULTS\n","import { Page } from 'playwright'\nimport { Logger } from '../utils/logger.js'\nimport { NetworkError } from '../errors/index.js'\nexport class SfilePageInteractions {\n\tconstructor(\n\t\tprivate page: Page,\n\t\tprivate logger: Logger,\n\t) {}\n\tasync waitForDownloadButton(timeout: number): Promise<void> {\n\t\tthis.logger.debug('Waiting for #download button', { timeout })\n\t\tconst button = this.page.locator('#download')\n\t\tawait button.waitFor({ state: 'visible', timeout })\n\t\tthis.logger.debug('Button is visible, checking if active')\n\t\tawait this.page.waitForFunction(\n\t\t\t() => {\n\t\t\t\tconst btn = document.querySelector('#download') as HTMLAnchorElement | null\n\t\t\t\tif (!btn) return false\n\t\t\t\tconst href = btn.getAttribute('href')\n\t\t\t\tconst style = window.getComputedStyle(btn)\n\t\t\t\tconst isDisabled =\n\t\t\t\t\tbtn.hasAttribute('disabled') ||\n\t\t\t\t\tbtn.getAttribute('aria-disabled') === 'true' ||\n\t\t\t\t\tbtn.classList.contains('disabled')\n\t\t\t\treturn !!(\n\t\t\t\t\thref &&\n\t\t\t\t\thref !== '#' &&\n\t\t\t\t\thref.trim() !== '' &&\n\t\t\t\t\tstyle.pointerEvents !== 'none' &&\n\t\t\t\t\t!isDisabled\n\t\t\t\t)\n\t\t\t},\n\t\t\t{ timeout },\n\t\t)\n\t\tthis.logger.debug('Download button is active and ready')\n\t}\n\tasync extractIntermediateUrl(): Promise<string> {\n\t\tthis.logger.debug('Extracting href from #download button')\n\t\ttry {\n\t\t\tconst href = await this.page.$eval('#download', (el) => {\n\t\t\t\tconst anchor = el as HTMLAnchorElement\n\t\t\t\treturn anchor.href\n\t\t\t})\n\t\t\tif (!href || href === '#' || href.trim() === '') {\n\t\t\t\tthrow new NetworkError('Download button href is empty or invalid', { href })\n\t\t\t}\n\t\t\treturn href\n\t\t} catch (err: unknown) {\n\t\t\tif (err instanceof Error && err.message?.includes('Element not found')) {\n\t\t\t\tthrow new NetworkError('Download button (#download) not found in page', {\n\t\t\t\t\tselector: '#download',\n\t\t\t\t\toriginalError: err.message,\n\t\t\t\t})\n\t\t\t}\n\t\t\tthrow err\n\t\t}\n\t}\n}\n","export function sanitizeFilename(name: string, replacement = '_'): string {\n\tconst safeName = name.replace(/\\.\\.[\\\\/]/g, '')\n\tconst sanitized = safeName\n\t\t.replace(/[<>:\"/\\\\|?*\\x00-\\x1F]/g, replacement)\n\t\t.replace(new RegExp(`${replacement}+`, 'g'), replacement)\n\t\t.trim()\n\tconst maxLength = 255\n\tconst trimmed = sanitized.slice(0, maxLength)\n\treturn trimmed || `file${replacement}bin`\n}\nexport const sleep = (ms: number): Promise<void> =>\n\tnew Promise((resolve) => setTimeout(resolve, ms))\nexport function safeStringify(value: unknown, indent = 0): string {\n\ttry {\n\t\tconst seen = new WeakSet()\n\t\treturn JSON.stringify(\n\t\t\tvalue,\n\t\t\t(_key, val) => {\n\t\t\t\tif (typeof val === 'object' && val !== null) {\n\t\t\t\t\tif (seen.has(val)) return '[Circular]'\n\t\t\t\t\tseen.add(val)\n\t\t\t\t}\n\t\t\t\tif (typeof val === 'bigint') return val.toString() + 'n'\n\t\t\t\tif (val instanceof Error) {\n\t\t\t\t\treturn { name: val.name, message: val.message, stack: val.stack }\n\t\t\t\t}\n\t\t\t\treturn val\n\t\t\t},\n\t\t\tindent,\n\t\t)\n\t} catch {\n\t\treturn '[unserializable]'\n\t}\n}\nexport function extractFilenameFromContentDisposition(header: string | undefined): string | null {\n\tif (!header) return null\n\tconst encodedMatch = header.match(/filename\\*=UTF-8''([^;\\n\"]+)/i)\n\tif (encodedMatch?.[1]) {\n\t\ttry {\n\t\t\treturn decodeURIComponent(encodedMatch[1])\n\t\t} catch {}\n\t}\n\tconst quotedMatch = header.match(/filename\\s*=\\s*\"([^\"]+)\"/i)\n\tif (quotedMatch?.[1]) return quotedMatch[1]\n\tconst plainMatch = header.match(/filename\\s*=\\s*([^;,\\n\"]+)/i)\n\tif (plainMatch?.[1]) return plainMatch[1].trim()\n\treturn null\n}\nexport function calculateRetryDelay(\n\tattempt: number,\n\tbaseDelayMs: number,\n\tmaxDelayMs = 30000,\n): number {\n\tconst exponential = baseDelayMs * Math.pow(2, attempt - 1)\n\tconst jitter = Math.random() * 0.3 * exponential\n\treturn Math.min(exponential + jitter, maxDelayMs)\n}\nexport function isError(value: unknown): value is Error {\n\treturn (\n\t\tvalue instanceof Error ||\n\t\t(typeof value === 'object' && value !== null && 'message' in value)\n\t)\n}\n","import { chromium, Browser, BrowserContext, Page, Download, Response } from 'playwright'\nimport * as fs from 'fs/promises'\nimport path from 'path'\nimport os from 'os'\nimport { Logger } from '../utils/logger.js'\nimport { BrowserError, NetworkError } from '../errors/index.js'\nimport { DEFAULTS } from '../config/defaults.js'\nimport { SfilePageInteractions } from './page-interactions.js'\nimport { sleep, extractFilenameFromContentDisposition } from '../utils/helpers.js'\nexport interface BrowserManagerOptions {\n\theadless: boolean\n\tuserAgent: string\n\ttimeout: number\n\tdebug: boolean\n\tdownloadButtonTimeout?: number\n}\nexport class BrowserManager {\n\tprivate browser: Browser | null = null\n\tprivate context: BrowserContext | null = null\n\tprivate page: Page | null = null\n\tprivate interactions: SfilePageInteractions | null = null\n\tprivate debugDir: string | null = null\n\tprivate readonly stageHistory: Array<{ stage: string; ts: number }> = []\n\tconstructor(\n\t\tprivate logger: Logger,\n\t\tprivate opts: BrowserManagerOptions,\n\t) {}\n\tprivate trackStage(stage: string): void {\n\t\tthis.stageHistory.push({ stage, ts: Date.now() })\n\t}\n\tasync launch(): Promise<void> {\n\t\tconst stage = 'launch'\n\t\tthis.trackStage(stage)\n\t\ttry {\n\t\t\tthis.logger.info('Launching browser', { headless: this.opts.headless })\n\t\t\tthis.browser = await chromium.launch({\n\t\t\t\theadless: this.opts.headless,\n\t\t\t\targs: [\n\t\t\t\t\t'--no-sandbox',\n\t\t\t\t\t'--disable-setuid-sandbox',\n\t\t\t\t\t'--disable-dev-shm-usage',\n\t\t\t\t\t'--disable-accelerated-2d-canvas',\n\t\t\t\t\t'--no-first-run',\n\t\t\t\t\t'--no-zygote',\n\t\t\t\t],\n\t\t\t})\n\t\t\tthis.context = await this.browser.newContext({\n\t\t\t\tuserAgent: this.opts.userAgent,\n\t\t\t\tacceptDownloads: true,\n\t\t\t\tlocale: 'en-US',\n\t\t\t\ttimezoneId: 'UTC',\n\t\t\t\tviewport: { width: 1280, height: 720 },\n\t\t\t})\n\t\t\tawait this.context.addCookies([\n\t\t\t\t{\n\t\t\t\t\tname: 'safe_link_counter',\n\t\t\t\t\tvalue: '1',\n\t\t\t\t\tdomain: '.sfile.co',\n\t\t\t\t\tpath: '/',\n\t\t\t\t\texpires: Math.floor(Date.now() / 1000) + 3600,\n\t\t\t\t},\n\t\t\t])\n\t\t\tthis.page = await this.context.newPage()\n\t\t\tthis.interactions = new SfilePageInteractions(this.page, this.logger)\n\t\t\tif (this.opts.debug) {\n\t\t\t\tthis.setupDebugListeners()\n\t\t\t}\n\t\t\tthis.logger.info('Browser ready')\n\t\t} catch (err: any) {\n\t\t\tawait this.handleStageError(stage, err)\n\t\t\tthrow new BrowserError(`Failed to launch browser: ${err.message}`, {\n\t\t\t\tstage,\n\t\t\t\toriginalError: err.message,\n\t\t\t\tuserAgent: this.opts.userAgent,\n\t\t\t})\n\t\t}\n\t}\n\tprivate setupDebugListeners(): void {\n\t\tif (!this.page) return\n\t\tthis.page.on('console', (msg) => {\n\t\t\tconst type = msg.type()\n\t\t\tconst text = msg.text()\n\t\t\tif (type === 'error') {\n\t\t\t\tthis.logger.error(`[console] ${text}`, { location: msg.location() })\n\t\t\t} else if (type === 'warning') {\n\t\t\t\tthis.logger.warn(`[console] ${text}`)\n\t\t\t} else if (type === 'debug') {\n\t\t\t\tthis.logger.debug(`[console] ${text}`)\n\t\t\t}\n\t\t})\n\t\tthis.page.on('pageerror', (err) => {\n\t\t\tthis.logger.error('[pageerror]', undefined, err)\n\t\t})\n\t\tthis.page.on('requestfailed', (req) => {\n\t\t\tconst failure = req.failure()\n\t\t\tthis.logger.warn('[requestfailed]', {\n\t\t\t\turl: req.url(),\n\t\t\t\tmethod: req.method(),\n\t\t\t\terror: failure?.errorText,\n\t\t\t})\n\t\t})\n\t}\n\tasync goto(\n\t\turl: string,\n\t\twaitUntil: 'load' | 'networkidle' | 'commit' | 'domcontentloaded' = 'networkidle',\n\t): Promise<void> {\n\t\tconst stage = 'navigation'\n\t\tthis.trackStage(stage)\n\t\tif (!this.page) {\n\t\t\tthrow new BrowserError('Page not initialized', { stage })\n\t\t}\n\t\ttry {\n\t\t\tthis.logger.debug(`Navigating to ${url}`, { waitUntil, timeout: this.opts.timeout })\n\t\t\tawait this.page.goto(url, { waitUntil, timeout: this.opts.timeout })\n\t\t} catch (err: any) {\n\t\t\tawait this.handleStageError(stage, err)\n\t\t\tthrow new NetworkError(`Navigation failed: ${err.message}`, {\n\t\t\t\turl,\n\t\t\t\tstage,\n\t\t\t\twaitUntil,\n\t\t\t\ttimeout: this.opts.timeout,\n\t\t\t\toriginalError: err.message,\n\t\t\t})\n\t\t}\n\t}\n\tasync waitForDownloadButton(): Promise<void> {\n\t\tconst stage = 'waitForButton'\n\t\tthis.trackStage(stage)\n\t\tif (!this.interactions) {\n\t\t\tthrow new BrowserError('Interactions not ready', { stage })\n\t\t}\n\t\tconst timeout = this.opts.downloadButtonTimeout ?? DEFAULTS.downloadButtonTimeout\n\t\ttry {\n\t\t\tawait this.interactions.waitForDownloadButton(timeout)\n\t\t} catch (err: any) {\n\t\t\tawait this.handleStageError(stage, err)\n\t\t\tthrow new NetworkError(`Failed to wait for download button: ${err.message}`, {\n\t\t\t\tstage,\n\t\t\t\ttimeout,\n\t\t\t\toriginalError: err.message,\n\t\t\t})\n\t\t}\n\t}\n\tasync getIntermediateUrl(): Promise<string> {\n\t\tconst stage = 'extractUrl'\n\t\tthis.trackStage(stage)\n\t\tif (!this.interactions) {\n\t\t\tthrow new BrowserError('Interactions not ready', { stage })\n\t\t}\n\t\ttry {\n\t\t\tconst url = await this.interactions.extractIntermediateUrl()\n\t\t\tthis.logger.debug('Intermediate URL extracted', { url })\n\t\t\treturn url\n\t\t} catch (err: any) {\n\t\t\tawait this.handleStageError(stage, err)\n\t\t\tthrow new NetworkError(`Failed to extract intermediate URL: ${err.message}`, {\n\t\t\t\tstage,\n\t\t\t\toriginalError: err.message,\n\t\t\t})\n\t\t}\n\t}\n\tasync startDownloadAndWait(autoUrl: string): Promise<Download | null> {\n\t\tconst stage = 'downloadWait'\n\t\tthis.trackStage(stage)\n\t\tif (!this.page) {\n\t\t\tthrow new BrowserError('Page not initialized', { stage })\n\t\t}\n\t\tconst downloadPromise = this.page\n\t\t\t.waitForEvent('download', { timeout: this.opts.timeout })\n\t\t\t.catch((err) => {\n\t\t\t\tthis.logger.debug('Download event timeout', {\n\t\t\t\t\ttimeout: this.opts.timeout,\n\t\t\t\t\terror: err.message,\n\t\t\t\t})\n\t\t\t\treturn null\n\t\t\t})\n\t\tthis.logger.debug('Navigating to auto download URL', { url: autoUrl })\n\t\tawait this.page\n\t\t\t.goto(autoUrl, { waitUntil: 'commit', timeout: this.opts.timeout })\n\t\t\t.catch((err) => {\n\t\t\t\tthis.logger.warn('Navigation to auto URL failed, continuing anyway', {\n\t\t\t\t\terror: err.message,\n\t\t\t\t})\n\t\t\t})\n\t\tconst download = await downloadPromise\n\t\tif (download) {\n\t\t\tthis.logger.info('Download event captured')\n\t\t\treturn download\n\t\t}\n\t\tthis.logger.debug('No download event captured within timeout')\n\t\treturn null\n\t}\n\tasync fallbackCollectFileResponse(): Promise<{ buffer: Buffer; filename: string } | null> {\n\t\tconst stage = 'fallbackIntercept'\n\t\tthis.trackStage(stage)\n\t\tif (!this.page) {\n\t\t\tthrow new BrowserError('Page not initialized', { stage })\n\t\t}\n\t\tthis.logger.info('Falling back to response interception')\n\t\tconst responses: Response[] = []\n\t\tconst handler = (res: Response) => responses.push(res)\n\t\tthis.page.on('response', handler)\n\t\tawait sleep(DEFAULTS.fallbackWaitMs)\n\t\tthis.page.off('response', handler)\n\t\tconst fileResponse = [...responses].reverse().find((r) => {\n\t\t\tconst headers = r.headers()\n\t\t\tconst disposition = headers['content-disposition']\n\t\t\tconst contentType = headers['content-type']\n\t\t\tconst url = r.url()\n\t\t\treturn (\n\t\t\t\t(disposition && disposition.includes('attachment')) ||\n\t\t\t\turl.includes('/downloadfile/') ||\n\t\t\t\t(contentType &&\n\t\t\t\t\t!contentType.startsWith('text/html') &&\n\t\t\t\t\t!contentType.startsWith('application/json'))\n\t\t\t)\n\t\t})\n\t\tif (!fileResponse) {\n\t\t\tthis.logger.debug('No suitable file response found in fallback', {\n\t\t\t\tresponseCount: responses.length,\n\t\t\t\tsampleUrls: responses.slice(0, 3).map((r) => r.url()),\n\t\t\t})\n\t\t\treturn null\n\t\t}\n\t\ttry {\n\t\t\tconst buffer = await fileResponse.body()\n\t\t\tlet filename = extractFilenameFromContentDisposition(\n\t\t\t\tfileResponse.headers()['content-disposition'],\n\t\t\t)\n\t\t\tif (!filename) {\n\t\t\t\tconst urlParts = fileResponse.url().split('/')\n\t\t\t\tfilename = urlParts[urlParts.length - 1]?.split('?')[0] || 'file.bin'\n\t\t\t}\n\t\t\tfilename = filename.replace(/[<>:\"/\\\\|?*]/g, '_')\n\t\t\tthis.logger.info('Fallback response captured', {\n\t\t\t\tfilename,\n\t\t\t\tsize: buffer.length,\n\t\t\t\tcontentType: fileResponse.headers()['content-type'],\n\t\t\t})\n\t\t\treturn { buffer, filename }\n\t\t} catch (err: any) {\n\t\t\tthis.logger.error('Failed to read fallback response body', { error: err.message })\n\t\t\treturn null\n\t\t}\n\t}\n\tasync saveDebugArtifacts(errorMessage: string): Promise<string | null> {\n\t\tif (!this.opts.debug || !this.page) return null\n\t\ttry {\n\t\t\tthis.debugDir = path.join(\n\t\t\t\tos.tmpdir(),\n\t\t\t\t`sfile_debug_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`,\n\t\t\t)\n\t\t\tawait fs.mkdir(this.debugDir, { recursive: true })\n\t\t\tconst tasks: Promise<void>[] = [\n\t\t\t\tthis.page\n\t\t\t\t\t.screenshot({\n\t\t\t\t\t\tpath: path.join(this.debugDir, 'error.png'),\n\t\t\t\t\t\tfullPage: true,\n\t\t\t\t\t})\n\t\t\t\t\t.then(() => {}),\n\t\t\t\tfs.writeFile(path.join(this.debugDir, 'error.html'), await this.page.content()),\n\t\t\t\tfs.writeFile(path.join(this.debugDir, 'error.txt'), errorMessage),\n\t\t\t\tfs.writeFile(\n\t\t\t\t\tpath.join(this.debugDir, 'stages.json'),\n\t\t\t\t\tJSON.stringify(this.stageHistory, null, 2),\n\t\t\t\t),\n\t\t\t]\n\t\t\tawait Promise.all(tasks)\n\t\t\tthis.logger.info('Debug artifacts saved', { debugDir: this.debugDir })\n\t\t\treturn this.debugDir\n\t\t} catch (e: any) {\n\t\t\tthis.logger.error('Failed to save debug artifacts', { error: e.message })\n\t\t\treturn null\n\t\t}\n\t}\n\tprivate async handleStageError(stage: string, error: any): Promise<void> {\n\t\tif (this.opts.debug) {\n\t\t\tawait this.saveDebugArtifacts(\n\t\t\t\t`Error at stage \"${stage}\": ${error?.message || 'Unknown error'}`,\n\t\t\t)\n\t\t}\n\t}\n\tasync close(): Promise<void> {\n\t\tconst closePromises = [\n\t\t\tthis.page?.close().catch(() => {}),\n\t\t\tthis.context?.close().catch(() => {}),\n\t\t\tthis.browser?.close().catch(() => {}),\n\t\t].filter(Boolean) as Promise<void>[]\n\t\tawait Promise.all(closePromises)\n\t\tthis.logger.debug('Browser closed', { stages: this.stageHistory.length })\n\t}\n\tasync getPage(): Promise<Page | null> {\n\t\treturn this.page\n\t}\n\tgetDebugDir(): string | null {\n\t\treturn this.debugDir\n\t}\n\tgetStageHistory(): ReadonlyArray<{ stage: string; ts: number }> {\n\t\treturn [...this.stageHistory]\n\t}\n}\n","import { createWriteStream, type WriteStream } from 'fs'\nimport { safeStringify } from './helpers.js'\ntype LogLevel = 'debug' | 'info' | 'warn' | 'error'\nexport interface LoggerOptions {\n\tdebugMode?: boolean\n\tcorrelationId?: string\n\tlogFile?: string\n\tprefix?: string\n}\nexport class Logger {\n\tprivate minLevel: LogLevel\n\tprivate correlationId: string | undefined\n\tprivate fileStream: WriteStream | null = null\n\tprivate prefix: string\n\tconstructor(options: LoggerOptions = {}) {\n\t\tthis.minLevel = options.debugMode ? 'debug' : 'info'\n\t\tthis.correlationId = options.correlationId\n\t\tthis.prefix = options.prefix || ''\n\t\tif (options.logFile) {\n\t\t\tthis.fileStream = createWriteStream(options.logFile, { flags: 'a' })\n\t\t}\n\t}\n\tsetCorrelationId(id: string): void {\n\t\tthis.correlationId = id\n\t}\n\tsetDebug(enabled: boolean): void {\n\t\tthis.minLevel = enabled ? 'debug' : 'info'\n\t}\n\tprivate levelPriority(level: LogLevel): number {\n\t\treturn { debug: 0, info: 1, warn: 2, error: 3 }[level]\n\t}\n\tprivate shouldLog(level: LogLevel): boolean {\n\t\treturn this.levelPriority(level) >= this.levelPriority(this.minLevel)\n\t}\n\tprivate format(level: LogLevel, message: string, context?: unknown): string {\n\t\tconst ts = new Date().toISOString()\n\t\tconst corr = this.correlationId ? ` [${this.correlationId}]` : ''\n\t\tconst prefix = this.prefix ? ` [${this.prefix}]` : ''\n\t\tconst ctx = context ? ` | ${safeStringify(context)}` : ''\n\t\treturn `[${ts}]${corr}${prefix} ${level.toUpperCase()}: ${message}${ctx}`\n\t}\n\tprivate write(level: LogLevel, message: string, context?: unknown): void {\n\t\tif (!this.shouldLog(level)) return\n\t\tconst formatted = this.format(level, message, context)\n\t\tconst consoleMethod = level === 'error' ? 'error' : level === 'warn' ? 'warn' : 'log'\n\t\tconsole[consoleMethod](formatted)\n\t\tif (this.fileStream?.writable) {\n\t\t\tthis.fileStream.write(formatted + '\\n')\n\t\t}\n\t}\n\tdebug(msg: string, ctx?: unknown): void {\n\t\tthis.write('debug', msg, ctx)\n\t}\n\tinfo(msg: string, ctx?: unknown): void {\n\t\tthis.write('info', msg, ctx)\n\t}\n\twarn(msg: string, ctx?: unknown): void {\n\t\tthis.write('warn', msg, ctx)\n\t}\n\terror(msg: string, ctx?: unknown, err?: Error): void {\n\t\tlet errorCtx: unknown\n\t\tif (err) {\n\t\t\tconst baseObj =\n\t\t\t\tctx && typeof ctx === 'object' && ctx !== null\n\t\t\t\t\t? { ...(ctx as Record<string, unknown>) }\n\t\t\t\t\t: {}\n\t\t\terrorCtx = {\n\t\t\t\t...baseObj,\n\t\t\t\terror: { name: err.name, message: err.message },\n\t\t\t}\n\t\t} else {\n\t\t\terrorCtx = ctx\n\t\t}\n\t\tthis.write('error', msg, errorCtx)\n\t}\n\tchild(prefix: string): Logger {\n\t\tconst childOptions: LoggerOptions = {\n\t\t\tdebugMode: this.minLevel === 'debug',\n\t\t\t...(this.correlationId !== undefined && { correlationId: this.correlationId }),\n\t\t\tprefix: this.prefix ? `${this.prefix}:${prefix}` : prefix,\n\t\t}\n\t\tconst child = new Logger(childOptions)\n\t\tif (this.fileStream) {\n\t\t\t;(child as any).fileStream = this.fileStream\n\t\t}\n\t\treturn child\n\t}\n\tasync close(): Promise<void> {\n\t\tif (this.fileStream && !this.fileStream.closed) {\n\t\t\treturn new Promise((resolve) => this.fileStream?.end(resolve))\n\t\t}\n\t}\n}\n","import { DEFAULTS } from './defaults.js'\nexport interface DownloadOptions {\n\theadless?: boolean\n\tuserAgent?: string\n\ttimeout?: number\n\tdownloadButtonTimeout?: number\n\tretries?: number\n\tretryDelay?: number\n\tonProgress?: (\n\t\tpercent: number,\n\t\ttotal: 100,\n\t\tmeta: { stage: string; message: string; attempt?: number },\n\t) => void\n\tcorrelationId?: string\n\tdebug?: boolean\n\tsaveDebugArtifacts?: boolean\n\tlogFile?: string\n\t_internal?: {\n\t\tstage?: string\n\t}\n}\nexport interface DownloadResult {\n\tfilePath: string\n\tsize: number\n\tmethod: 'direct' | 'fallback'\n\tcorrelationId?: string\n\tdurationMs?: number\n\tattempts?: number\n}\ntype NormalizedOptions = Required<\n\tOmit<DownloadOptions, 'onProgress' | 'correlationId' | '_internal' | 'logFile'>\n> & {\n\tonProgress?: DownloadOptions['onProgress']\n\tcorrelationId?: string\n\t_internal?: DownloadOptions['_internal']\n\tlogFile?: string\n}\nexport function normalizeOptions(opts?: DownloadOptions): NormalizedOptions {\n\tconst base = {\n\t\theadless: opts?.headless ?? DEFAULTS.headless,\n\t\tuserAgent: opts?.userAgent ?? DEFAULTS.userAgent,\n\t\ttimeout: opts?.timeout ?? DEFAULTS.timeout,\n\t\tdownloadButtonTimeout: opts?.downloadButtonTimeout ?? DEFAULTS.downloadButtonTimeout,\n\t\tretries: opts?.retries ?? DEFAULTS.retries,\n\t\tretryDelay: opts?.retryDelay ?? DEFAULTS.retryDelay,\n\t\tdebug: opts?.debug ?? false,\n\t\tsaveDebugArtifacts: opts?.saveDebugArtifacts ?? DEFAULTS.saveDebugArtifacts,\n\t}\n\tconst optional = {\n\t\t...(opts?.onProgress !== undefined && { onProgress: opts.onProgress }),\n\t\t...(opts?.correlationId !== undefined && { correlationId: opts.correlationId }),\n\t\t...(opts?._internal !== undefined && { _internal: opts._internal }),\n\t\t...(opts?.logFile !== undefined && { logFile: opts.logFile }),\n\t}\n\treturn { ...base, ...optional } as NormalizedOptions\n}\n","import { ValidationError } from '../errors/index.js'\nimport { sanitizeFilename } from '../utils/helpers.js'\nimport { DEFAULTS } from '../config/defaults.js'\nexport class InputValidator {\n\tstatic validateUrl(\n\t\turl: unknown,\n\t\tallowedDomains: readonly string[] = ['sfile.co', 'sfile.mobi'],\n\t): asserts url is string {\n\t\tif (!url || typeof url !== 'string') {\n\t\t\tthrow new ValidationError('URL must be a non-empty string', {\n\t\t\t\treceived: typeof url,\n\t\t\t\turl,\n\t\t\t})\n\t\t}\n\t\tconst hasAllowedDomain = allowedDomains.some((domain) => url.includes(domain))\n\t\tif (!hasAllowedDomain) {\n\t\t\tthrow new ValidationError(`URL must contain one of: ${allowedDomains.join(', ')}`, {\n\t\t\t\turl,\n\t\t\t\tallowedDomains,\n\t\t\t})\n\t\t}\n\t\ttry {\n\t\t\tconst parsed = new URL(url)\n\t\t\tif (!['http:', 'https:'].includes(parsed.protocol)) {\n\t\t\t\tthrow new ValidationError('URL must use http or https protocol', {\n\t\t\t\t\turl,\n\t\t\t\t\tprotocol: parsed.protocol,\n\t\t\t\t})\n\t\t\t}\n\t\t} catch (parseErr) {\n\t\t\tthrow new ValidationError('Invalid URL format', {\n\t\t\t\turl,\n\t\t\t\tparseError: parseErr instanceof Error ? parseErr.message : String(parseErr),\n\t\t\t})\n\t\t}\n\t}\n\tstatic validateSaveDir(dir: unknown): asserts dir is string {\n\t\tif (!dir || typeof dir !== 'string') {\n\t\t\tthrow new ValidationError('Save directory must be a non-empty string', {\n\t\t\t\treceived: typeof dir,\n\t\t\t\tdir,\n\t\t\t})\n\t\t}\n\t}\n\tstatic sanitizeFilename(name: string): string {\n\t\tconst replacement = DEFAULTS.sanitizeReplacement\n\t\tconst maxLength = DEFAULTS.maxFilenameLength\n\t\tconst sanitized = sanitizeFilename(name, replacement)\n\t\tif (!sanitized || sanitized.length === 0) {\n\t\t\tconst ext = name.includes('.') ? name.split('.').pop() : 'bin'\n\t\t\treturn `downloaded_file${ext ? '.' + ext : ''}`.slice(0, maxLength)\n\t\t}\n\t\treturn sanitized.slice(0, maxLength)\n\t}\n\tstatic validateOptions(options: unknown): void {\n\t\tif (options === undefined || options === null) {\n\t\t\treturn\n\t\t}\n\t\tif (typeof options !== 'object') {\n\t\t\tthrow new ValidationError('Options must be an object or undefined', {\n\t\t\t\treceived: typeof options,\n\t\t\t})\n\t\t}\n\t\tconst opts = options as Record<string, unknown>\n\t\tconst numericFields = ['timeout', 'retries', 'retryDelay', 'downloadButtonTimeout'] as const\n\t\tfor (const field of numericFields) {\n\t\t\tif (field in opts && opts[field] !== undefined && typeof opts[field] !== 'number') {\n\t\t\t\tthrow new ValidationError(`Option '${field}' must be a number`, {\n\t\t\t\t\tfield,\n\t\t\t\t\treceived: typeof opts[field],\n\t\t\t\t\tvalue: opts[field],\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\tconst booleanFields = ['headless', 'debug', 'saveDebugArtifacts'] as const\n\t\tfor (const field of booleanFields) {\n\t\t\tif (field in opts && opts[field] !== undefined && typeof opts[field] !== 'boolean') {\n\t\t\t\tthrow new ValidationError(`Option '${field}' must be a boolean`, {\n\t\t\t\t\tfield,\n\t\t\t\t\treceived: typeof opts[field],\n\t\t\t\t\tvalue: opts[field],\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\tconst stringFields = ['correlationId', 'logFile', 'userAgent'] as const\n\t\tfor (const field of stringFields) {\n\t\t\tif (field in opts && opts[field] !== undefined && typeof opts[field] !== 'string') {\n\t\t\t\tthrow new ValidationError(`Option '${field}' must be a string`, {\n\t\t\t\t\tfield,\n\t\t\t\t\treceived: typeof opts[field],\n\t\t\t\t\tvalue: opts[field],\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\tif (\n\t\t\t'onProgress' in opts &&\n\t\t\topts['onProgress'] !== undefined &&\n\t\t\ttypeof opts['onProgress'] !== 'function'\n\t\t) {\n\t\t\tthrow new ValidationError(`Option 'onProgress' must be a function`, {\n\t\t\t\treceived: typeof opts['onProgress'],\n\t\t\t})\n\t\t}\n\t}\n}\n","import * as path from 'path'\nimport { promises as fs } from 'fs'\nimport { randomUUID } from 'crypto'\nimport { BrowserManager } from '../browser/browser-manager.js'\nimport { Logger } from '../utils/logger.js'\nimport { NetworkError, AppError } from '../errors/index.js'\nimport { DownloadOptions, DownloadResult, normalizeOptions } from '../config/schema.js'\nimport { DEFAULTS } from '../config/defaults.js'\nimport { InputValidator } from './validator.js'\nimport { sleep, calculateRetryDelay } from '../utils/helpers.js'\nfunction stripUndefined<T extends Record<string, unknown>>(obj: T): T {\n\treturn Object.fromEntries(Object.entries(obj).filter(([, v]) => v !== undefined)) as T\n}\nfunction safeProgress(\n\tonProgress: unknown,\n\tpercent: number,\n\ttotal: number,\n\tmeta: Record<string, unknown>,\n): void {\n\tif (typeof onProgress === 'function') {\n\t\ttry {\n\t\t\t;(onProgress as any)(percent, total, meta)\n\t\t} catch (err) {\n\t\t\tconsole.warn('Progress callback error:', err)\n\t\t}\n\t}\n}\nasync function executeDownload(\n\turl: string,\n\tsaveDir: string,\n\topts: ReturnType<typeof normalizeOptions>,\n\tlogger: Logger,\n): Promise<DownloadResult> {\n\tconst startTime = Date.now()\n\tconst browserMgr = new BrowserManager(logger.child('BrowserManager'), {\n\t\theadless: opts.headless,\n\t\tuserAgent: opts.userAgent,\n\t\ttimeout: opts.timeout,\n\t\tdebug: opts.debug,\n\t\tdownloadButtonTimeout: opts.downloadButtonTimeout,\n\t})\n\tlet finalPath: string\n\tlet fileSize: number\n\tlet method: 'direct' | 'fallback'\n\ttry {\n\t\tlogger.info('Starting download workflow', { url })\n\t\tsafeProgress(opts.onProgress, 10, 100, {\n\t\t\tstage: 'launch',\n\t\t\tmessage: 'Launching browser',\n\t\t\tattempt: 1,\n\t\t})\n\t\tawait browserMgr.launch()\n\t\tawait browserMgr.goto(url, 'networkidle')\n\t\tsafeProgress(opts.onProgress, 30, 100, { stage: 'navigation', message: 'Page loaded' })\n\t\tawait browserMgr.waitForDownloadButton()\n\t\tsafeProgress(opts.onProgress, 50, 100, {\n\t\t\tstage: 'button',\n\t\t\tmessage: 'Download button ready',\n\t\t})\n\t\tconst intermediateUrl = await browserMgr.getIntermediateUrl()\n\t\tconst autoUrl = intermediateUrl.includes('?')\n\t\t\t? `${intermediateUrl}&auto=1`\n\t\t\t: `${intermediateUrl}?auto=1`\n\t\tlogger.debug('Triggering download', { autoUrl })\n\t\tsafeProgress(opts.onProgress, 70, 100, { stage: 'trigger', message: 'Download triggered' })\n\t\tlet download = await browserMgr.startDownloadAndWait(autoUrl)\n\t\tif (download) {\n\t\t\tconst suggested = download.suggestedFilename() || 'file.bin'\n\t\t\tconst filename = InputValidator.sanitizeFilename(suggested)\n\t\t\tfinalPath = path.join(saveDir, filename)\n\t\t\tawait download.saveAs(finalPath)\n\t\t\tconst stat = await fs.stat(finalPath)\n\t\t\tfileSize = stat.size\n\t\t\tmethod = 'direct'\n\t\t\tlogger.info('Saved via direct download', { path: finalPath, size: fileSize })\n\t\t} else {\n\t\t\tlogger.warn('Direct download not captured, trying fallback')\n\t\t\tconst fallback = await browserMgr.fallbackCollectFileResponse()\n\t\t\tif (!fallback) {\n\t\t\t\tthrow new NetworkError('No download event and no file response found', {\n\t\t\t\t\turl,\n\t\t\t\t\tintermediateUrl,\n\t\t\t\t\tautoUrl,\n\t\t\t\t\tstage: 'fallbackFailed',\n\t\t\t\t})\n\t\t\t}\n\t\t\tconst { buffer, filename: rawName } = fallback\n\t\t\tconst filename = InputValidator.sanitizeFilename(rawName)\n\t\t\tfinalPath = path.join(saveDir, filename)\n\t\t\tawait fs.writeFile(finalPath, buffer)\n\t\t\tfileSize = buffer.length\n\t\t\tmethod = 'fallback'\n\t\t\tlogger.info('Saved via fallback', { path: finalPath, size: fileSize })\n\t\t}\n\t\tsafeProgress(opts.onProgress, 100, 100, { stage: 'complete', message: 'Download finished' })\n\t\tconst result: DownloadResult = {\n\t\t\tfilePath: finalPath,\n\t\t\tsize: fileSize,\n\t\t\tmethod,\n\t\t\tdurationMs: Date.now() - startTime,\n\t\t\tattempts: 1,\n\t\t}\n\t\tif (opts.correlationId !== undefined) {\n\t\t\tresult.correlationId = opts.correlationId\n\t\t}\n\t\treturn result\n\t} catch (err: unknown) {\n\t\tconst error = err instanceof Error ? err : new Error(String(err))\n\t\tconst appError =\n\t\t\terror instanceof AppError\n\t\t\t\t? error\n\t\t\t\t: new NetworkError(error.message, {\n\t\t\t\t\t\turl,\n\t\t\t\t\t\tsaveDir,\n\t\t\t\t\t\tcorrelationId: opts.correlationId,\n\t\t\t\t\t\toriginalError: error.message,\n\t\t\t\t\t\terrorName: error.name,\n\t\t\t\t\t})\n\t\tif (opts.saveDebugArtifacts) {\n\t\t\tconst debugPath = await browserMgr.saveDebugArtifacts(appError.message)\n\t\t\tif (debugPath) {\n\t\t\t\t;(appError as any).debugPath = debugPath\n\t\t\t\tif (appError.context && typeof appError.context === 'object') {\n\t\t\t\t\t;(appError.context as any).debugPath = debugPath\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthrow appError\n\t} finally {\n\t\tawait browserMgr\n\t\t\t.close()\n\t\t\t.catch((e) => logger.error('Failed to close browser', { error: e.message }))\n\t\tawait logger.close().catch((e) => console.error('Failed to close logger', e))\n\t}\n}\nexport async function downloadSfile(\n\turl: string,\n\tsaveDir: string,\n\toptions?: DownloadOptions,\n): Promise<DownloadResult> {\n\tconst opts = normalizeOptions(options)\n\tconst correlationId = opts.correlationId || randomUUID()\n\ttype LoggerConstructorParams = ConstructorParameters<typeof Logger>\n\ttype LoggerOptionsType = LoggerConstructorParams[0]\n\tconst loggerOptions: LoggerOptionsType = {\n\t\tdebugMode: opts.debug,\n\t\tcorrelationId,\n\t\tprefix: 'downloadSfile',\n\t}\n\tif (opts.logFile !== undefined) {\n\t\tloggerOptions.logFile = opts.logFile\n\t}\n\tconst logger = new Logger(loggerOptions)\n\tInputValidator.validateUrl(url)\n\tInputValidator.validateSaveDir(saveDir)\n\tInputValidator.validateOptions(options)\n\tawait fs.mkdir(saveDir, { recursive: true })\n\tlet lastError: Error | undefined\n\tlet attempt = 0\n\twhile (attempt < opts.retries) {\n\t\tattempt++\n\t\ttry {\n\t\t\tlogger.info(`Download attempt ${attempt}/${opts.retries}`, { url })\n\t\t\tconst result = await executeDownload(url, saveDir, opts, logger)\n\t\t\tlogger.info(`Download succeeded`, {\n\t\t\t\tduration: result.durationMs,\n\t\t\t\tattempts: attempt,\n\t\t\t\tmethod: result.method,\n\t\t\t})\n\t\t\treturn {\n\t\t\t\t...result,\n\t\t\t\tattempts: attempt,\n\t\t\t\tcorrelationId,\n\t\t\t}\n\t\t} catch (err: unknown) {\n\t\t\tlastError = err instanceof Error ? err : new Error(String(err))\n\t\t\tconst isRetryable = lastError instanceof AppError && lastError.retryable\n\t\t\tconst isLastAttempt = attempt >= opts.retries\n\t\t\tif (!isRetryable || isLastAttempt) {\n\t\t\t\tlogger.error(`Download failed permanently`, {\n\t\t\t\t\terror: lastError.message,\n\t\t\t\t\tattempt,\n\t\t\t\t\tretryable: isRetryable,\n\t\t\t\t\tlastAttempt: isLastAttempt,\n\t\t\t\t})\n\t\t\t\tthrow lastError\n\t\t\t}\n\t\t\tconst delay = calculateRetryDelay(attempt, opts.retryDelay, DEFAULTS.maxRetryDelay)\n\t\t\tlogger.warn(`Retrying download`, {\n\t\t\t\tattempt,\n\t\t\t\tmaxAttempts: opts.retries,\n\t\t\t\tdelayMs: Math.round(delay),\n\t\t\t\terror: lastError.message,\n\t\t\t})\n\t\t\tsafeProgress(opts.onProgress, 0, 100, {\n\t\t\t\tstage: 'retry',\n\t\t\t\tmessage: `Retry ${attempt}/${opts.retries}`,\n\t\t\t\tattempt,\n\t\t\t})\n\t\t\tawait sleep(delay)\n\t\t}\n\t}\n\tthrow lastError || new Error('Download failed after all retries')\n}\nexport async function downloadSfileSafe(\n\turl: string,\n\tsaveDir: string,\n\toptions?: DownloadOptions,\n): Promise<import('../utils/result.js').Result<DownloadResult, Error>> {\n\ttry {\n\t\tconst result = await downloadSfile(url, saveDir, options)\n\t\treturn { success: true, value: result }\n\t} catch (error) {\n\t\treturn { success: false, error: error as Error }\n\t}\n}\nexport function createDownloader(defaultOptions?: DownloadOptions) {\n\tconst defaults = normalizeOptions(defaultOptions)\n\treturn {\n\t\tasync download(\n\t\t\turl: string,\n\t\t\tsaveDir: string,\n\t\t\tcallOptions?: DownloadOptions,\n\t\t): Promise<DownloadResult> {\n\t\t\tconst merged = stripUndefined({ ...defaults, ...callOptions })\n\t\t\treturn downloadSfile(url, saveDir, merged as DownloadOptions)\n\t\t},\n\t\tasync downloadSafe(\n\t\t\turl: string,\n\t\t\tsaveDir: string,\n\t\t\tcallOptions?: DownloadOptions,\n\t\t): Promise<import('../utils/result.js').Result<DownloadResult, Error>> {\n\t\t\tconst merged = stripUndefined({ ...defaults, ...callOptions })\n\t\t\treturn downloadSfileSafe(url, saveDir, merged as DownloadOptions)\n\t\t},\n\t\twithOptions(newDefaults: Partial<DownloadOptions>) {\n\t\t\tconst merged = stripUndefined({ ...defaults, ...newDefaults })\n\t\t\treturn createDownloader(merged as DownloadOptions)\n\t\t},\n\t}\n}\n","import { readFileSync, existsSync } from 'fs'\nimport { resolve } from 'path'\nimport { DEFAULTS } from '../lib/lib.js'\nimport type { DownloadOptions } from '../lib/lib.js'\nexport interface FileConfig {\n\toutput?: string\n\theadless?: boolean\n\ttimeout?: number\n\tbuttonTimeout?: number\n\tretries?: number\n\tretryDelay?: number\n\tdebug?: boolean\n\tuserAgent?: string\n\tlogFile?: string\n\tdebugArtifacts?: boolean\n\tprogress?: boolean\n}\nexport interface CliOptions {\n\toutput: string\n\theaded?: boolean\n\ttimeout?: number\n\tbuttonTimeout?: number\n\tretries?: number\n\tretryDelay?: number\n\tdebug?: boolean\n\tuserAgent?: string\n\tprogress: boolean\n\tlogFile?: string\n\tartifacts: boolean\n}\nexport interface ResolvedConfig {\n\toutput: string\n\theadless: boolean\n\ttimeout: number\n\tbuttonTimeout: number\n\tretries: number\n\tretryDelay: number\n\tdebug: boolean\n\tuserAgent: string\n\tprogress: boolean\n\tlogFile: string | undefined\n\tdebugArtifacts: boolean\n}\nexport class ConfigFileError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message)\n\t\tthis.name = 'ConfigFileError'\n\t}\n}\nconst CONFIG_FILES = ['.sfiledlrc.json', '.sfiledlrc'] as const\nfunction isStr(v: unknown): v is string {\n\treturn typeof v === 'string'\n}\nfunction isPosNum(v: unknown): v is number {\n\treturn typeof v === 'number' && Number.isFinite(v) && v > 0\n}\nfunction isBool(v: unknown): v is boolean {\n\treturn typeof v === 'boolean'\n}\nfunction validateFileConfig(raw: Record<string, unknown>, source: string): FileConfig {\n\tconst out: FileConfig = {}\n\tfunction check<T>(\n\t\tkey: string,\n\t\tvalue: unknown,\n\t\tlabel: string,\n\t\tguard: (v: unknown) => v is T,\n\t): T {\n\t\tif (!guard(value)) {\n\t\t\tthrow new ConfigFileError(`\"${source}\": \"${key}\" must be ${label}, got ${typeof value}`)\n\t\t}\n\t\treturn value\n\t}\n\tfor (const [key, value] of Object.entries(raw)) {\n\t\tif (value === undefined) continue\n\t\tswitch (key) {\n\t\t\tcase 'output':\n\t\t\t\tout.output = check(key, value, 'a string', isStr)\n\t\t\t\tbreak\n\t\t\tcase 'userAgent':\n\t\t\t\tout.userAgent = check(key, value, 'a string', isStr)\n\t\t\t\tbreak\n\t\t\tcase 'logFile':\n\t\t\t\tout.logFile = check(key, value, 'a string', isStr)\n\t\t\t\tbreak\n\t\t\tcase 'timeout':\n\t\t\t\tout.timeout = check(key, value, 'a positive number', isPosNum)\n\t\t\t\tbreak\n\t\t\tcase 'buttonTimeout':\n\t\t\t\tout.buttonTimeout = check(key, value, 'a positive number', isPosNum)\n\t\t\t\tbreak\n\t\t\tcase 'retries':\n\t\t\t\tout.retries = check(key, value, 'a positive number', isPosNum)\n\t\t\t\tbreak\n\t\t\tcase 'retryDelay':\n\t\t\t\tout.retryDelay = check(key, value, 'a positive number', isPosNum)\n\t\t\t\tbreak\n\t\t\tcase 'headless':\n\t\t\t\tout.headless = check(key, value, 'a boolean', isBool)\n\t\t\t\tbreak\n\t\t\tcase 'debug':\n\t\t\t\tout.debug = check(key, value, 'a boolean', isBool)\n\t\t\t\tbreak\n\t\t\tcase 'debugArtifacts':\n\t\t\t\tout.debugArtifacts = check(key, value, 'a boolean', isBool)\n\t\t\t\tbreak\n\t\t\tcase 'progress':\n\t\t\t\tout.progress = check(key, value, 'a boolean', isBool)\n\t\t\t\tbreak\n\t\t}\n\t}\n\treturn out\n}\nexport function loadFileConfig(): FileConfig {\n\tfor (const filename of CONFIG_FILES) {\n\t\tconst filePath = resolve(filename)\n\t\tif (!existsSync(filePath)) continue\n\t\ttry {\n\t\t\tconst raw = readFileSync(filePath, 'utf-8')\n\t\t\tconst parsed = JSON.parse(raw)\n\t\t\tif (typeof parsed !== 'object' || parsed === null) {\n\t\t\t\tthrow new ConfigFileError(`\"${filename}\" must contain a JSON object`)\n\t\t\t}\n\t\t\treturn validateFileConfig(parsed as Record<string, unknown>, filename)\n\t\t} catch (err) {\n\t\t\tif (err instanceof ConfigFileError) throw err\n\t\t\tif (err instanceof SyntaxError) {\n\t\t\t\tthrow new ConfigFileError(`Invalid JSON in \"${filename}\": ${err.message}`)\n\t\t\t}\n\t\t\tthrow new ConfigFileError(`Failed to read \"${filename}\": ${(err as Error).message}`)\n\t\t}\n\t}\n\treturn {}\n}\nexport function resolveConfig(file: FileConfig, args: CliOptions): ResolvedConfig {\n\treturn {\n\t\toutput: args.output.trim() || './downloads',\n\t\theadless: args.headed ? false : (file.headless ?? DEFAULTS.headless),\n\t\ttimeout: args.timeout ?? file.timeout ?? DEFAULTS.timeout,\n\t\tbuttonTimeout: args.buttonTimeout ?? file.buttonTimeout ?? DEFAULTS.downloadButtonTimeout,\n\t\tretries: args.retries ?? file.retries ?? DEFAULTS.retries,\n\t\tretryDelay: args.retryDelay ?? file.retryDelay ?? DEFAULTS.retryDelay,\n\t\tdebug: args.debug === true ? true : file.debug === true,\n\t\tuserAgent: args.userAgent ?? file.userAgent ?? DEFAULTS.userAgent,\n\t\tprogress: args.progress === false ? false : file.progress !== false,\n\t\tlogFile: args.logFile ?? file.logFile,\n\t\tdebugArtifacts:\n\t\t\targs.artifacts === false ? false : (file.debugArtifacts ?? DEFAULTS.saveDebugArtifacts),\n\t}\n}\nexport function toDownloadOptions(config: ResolvedConfig): DownloadOptions {\n\treturn {\n\t\theadless: config.headless,\n\t\tuserAgent: config.userAgent,\n\t\ttimeout: config.timeout,\n\t\tdownloadButtonTimeout: config.buttonTimeout,\n\t\tretries: config.retries,\n\t\tretryDelay: config.retryDelay,\n\t\tdebug: config.debug,\n\t\tsaveDebugArtifacts: config.debugArtifacts,\n\t\t...(config.logFile !== undefined && { logFile: config.logFile }),\n\t}\n}\n","import chalk from 'chalk'\nimport { isAppError, isRetryableError } from '../lib/lib.js'\nimport { ConfigFileError } from './config.js'\nexport enum ExitCode {\n\tSuccess = 0,\n\tGeneric = 1,\n\tValidation = 2,\n\tConfig = 3,\n}\nconst SUGGESTIONS: Record<string, string> = {\n\tVALIDATION_ERROR: 'Check the URL format — it must point to sfile.co or sfile.mobi',\n\tNETWORK_ERROR: 'Check your internet connection and ensure sfile.co is reachable',\n\tBROWSER_ERROR: 'Ensure Chromium/Chrome is installed. Try --headed to diagnose',\n\tFILE_ERROR: 'Verify the output directory exists and is writable',\n}\nexport function formatError(err: unknown): string {\n\tif (err instanceof ConfigFileError) {\n\t\treturn [chalk.red.bold('Config Error'), '', chalk.white(err.message)].join('\\n')\n\t}\n\tif (isAppError(err)) {\n\t\tconst lines: string[] = [\n\t\t\tchalk.red.bold(`${err.name} [${err.code}]`),\n\t\t\t'',\n\t\t\tchalk.white(err.message),\n\t\t]\n\t\tconst ctx = err.context as Record<string, unknown> | undefined\n\t\tif (ctx && Object.keys(ctx).length > 0) {\n\t\t\tlines.push('', chalk.dim('Context:'))\n\t\t\tfor (const [key, value] of Object.entries(ctx)) {\n\t\t\t\tconst display =\n\t\t\t\t\ttypeof value === 'string' ? value : JSON.stringify(value)?.slice(0, 120)\n\t\t\t\tlines.push(` ${chalk.dim(`${key}:`)} ${chalk.gray(display ?? 'undefined')}`)\n\t\t\t}\n\t\t}\n\t\tif (isRetryableError(err)) {\n\t\t\tlines.push('', chalk.yellow('⚠ This error may resolve on retry'))\n\t\t}\n\t\tconst tip = SUGGESTIONS[err.code]\n\t\tif (tip) {\n\t\t\tlines.push('', chalk.dim('💡 Tip:'), ` ${chalk.cyan(tip)}`)\n\t\t}\n\t\treturn lines.join('\\n')\n\t}\n\tif (err instanceof Error) {\n\t\treturn chalk.red(`${err.name}: ${err.message}`)\n\t}\n\treturn chalk.red(String(err))\n}\nexport function getExitCode(err: unknown): ExitCode {\n\tif (err instanceof ConfigFileError) return ExitCode.Config\n\tif (isAppError(err) && err.code === 'VALIDATION_ERROR') return ExitCode.Validation\n\treturn ExitCode.Generic\n}\n","import chalk from 'chalk'\nimport ora from 'ora'\nexport interface SpinnerHandle {\n\tsetText: (msg: string) => void\n\tsucceed: (msg?: string) => void\n\tfail: (msg?: string) => void\n\tstop: () => void\n}\nexport interface PrintResultInput {\n\tfilePath: string\n\tsize: number\n\tmethod: 'direct' | 'fallback'\n\tdurationMs?: number | undefined\n\tattempts?: number | undefined\n}\nconst ICON = {\n\tsuccess: '✅',\n\terror: '❌',\n\twarn: '⚠️',\n\tinfo: 'ℹ️',\n\tdownload: '📥',\n} as const\nconst SEP = chalk.dim('─'.repeat(45))\nexport function createSpinner(text: string): SpinnerHandle {\n\tconst instance = ora({ text, color: 'cyan', spinner: 'dots' }).start()\n\treturn {\n\t\tsetText: (msg: string) => {\n\t\t\tinstance.text = msg\n\t\t},\n\t\tsucceed: (msg?: string) => instance.succeed(msg),\n\t\tfail: (msg?: string) => instance.fail(msg),\n\t\tstop: () => instance.stop(),\n\t}\n}\nexport function formatBytes(bytes: number): string {\n\tif (bytes <= 0) return '0 B'\n\tconst units = ['B', 'KB', 'MB', 'GB']\n\tconst i = Math.floor(Math.log(bytes) / Math.log(1024))\n\treturn `${(bytes / Math.pow(1024, i)).toFixed(1)} ${units[i]}`\n}\nexport function formatDuration(ms: number): string {\n\tif (ms <= 0) return '0ms'\n\tif (ms < 1000) return `${Math.round(ms)}ms`\n\tconst sec = ms / 1000\n\tif (sec < 60) return `${sec.toFixed(1)}s`\n\tconst min = Math.floor(sec / 60)\n\tconst rem = Math.round(sec % 60)\n\treturn `${min}m ${rem}s`\n}\nexport function printResult(result: PrintResultInput): void {\n\tconst size = formatBytes(result.size)\n\tconst duration = formatDuration(result.durationMs ?? 0)\n\tconst methodIcon = result.method === 'direct' ? ICON.success : ICON.warn\n\tconst methodColored =\n\t\tresult.method === 'direct'\n\t\t\t? chalk.green.bold(`${methodIcon} direct`)\n\t\t\t: chalk.yellow.bold(`${methodIcon} fallback`)\n\tconst lines = [\n\t\t'',\n\t\t`${chalk.cyan(`${ICON.download} Download Summary`)}`,\n\t\tSEP,\n\t\t` ${chalk.bold('File:')} ${chalk.whiteBright(result.filePath)}`,\n\t\t` ${chalk.bold('Size:')} ${chalk.magenta(size)}`,\n\t\t` ${chalk.bold('Method:')} ${methodColored}`,\n\t\t` ${chalk.bold('Duration:')} ${chalk.blue(duration)}`,\n\t]\n\tif ((result.attempts ?? 1) > 1) {\n\t\tlines.push(` ${chalk.bold('Attempts:')} ${chalk.yellow(String(result.attempts))}`)\n\t}\n\tif (result.durationMs !== undefined && result.durationMs > 0 && result.size > 0) {\n\t\tconst speed = result.size / (result.durationMs / 1000)\n\t\tlines.push(` ${chalk.bold('Speed:')} ${chalk.cyan(`${formatBytes(speed)}/s`)}`)\n\t}\n\tlines.push(SEP, '')\n\tconsole.log(lines.join('\\n'))\n}\nexport const log = {\n\tinfo: (msg: string): void => console.log(`${chalk.blue(ICON.info)} ${msg}`),\n\tsuccess: (msg: string): void => console.log(`${chalk.green(ICON.success)} ${msg}`),\n\twarn: (msg: string): void => console.log(`${chalk.yellow(ICON.warn)} ${msg}`),\n\terror: (msg: string): void => console.error(`${chalk.red(ICON.error)} ${msg}`),\n\tdebug: (msg: string): void => {\n\t\tif (process.env['DEBUG'] === 'true') {\n\t\t\tconsole.log(`${chalk.gray('[DEBUG]')} ${msg}`)\n\t\t}\n\t},\n}\n","import { appendFileSync, existsSync, mkdirSync } from 'fs'\nimport { dirname } from 'path'\nexport interface FileLogger {\n\tinfo: (msg: string, data?: unknown) => void\n\twarn: (msg: string, data?: unknown) => void\n\terror: (msg: string, data?: unknown) => void\n\tdebug: (msg: string, data?: unknown) => void\n}\nexport function createFileLogger(filePath: string): FileLogger {\n\tconst dir = dirname(filePath)\n\tif (!existsSync(dir)) {\n\t\tmkdirSync(dir, { recursive: true })\n\t}\n\tconst write = (level: string, msg: string, data?: unknown): void => {\n\t\tconst timestamp = new Date().toISOString()\n\t\tlet line = `[${timestamp}] [${level.toUpperCase()}] ${msg}`\n\t\tif (data !== undefined) {\n\t\t\tline += ` ${JSON.stringify(data)}`\n\t\t}\n\t\tappendFileSync(filePath, line + '\\n')\n\t}\n\treturn {\n\t\tinfo: (msg, data) => write('info', msg, data),\n\t\twarn: (msg, data) => write('warn', msg, data),\n\t\terror: (msg, data) => write('error', msg, data),\n\t\tdebug: (msg, data) => {\n\t\t\tif (process.env['DEBUG'] === 'true') write('debug', msg, data)\n\t\t},\n\t}\n}\n","#!/usr/bin/env node\nimport { Command } from 'commander'\nimport chalk from 'chalk'\nimport { existsSync, readFileSync } from 'fs'\nimport { dirname, join } from 'path'\nimport { fileURLToPath } from 'url'\nimport { downloadSfile } from '../lib/lib.js'\nimport { loadFileConfig, resolveConfig, toDownloadOptions, type CliOptions } from './config.js'\nimport { formatError, getExitCode, ExitCode } from './error.js'\nimport { createSpinner, printResult, log as uiLog, type PrintResultInput } from './ui.js'\nimport { createFileLogger, type FileLogger } from './logger.js'\nfunction findPackageJson(startDir: string): string | null {\n\tlet current = startDir\n\tconst root = dirname(process.cwd())\n\twhile (current !== root) {\n\t\tconst pkgPath = join(current, 'package.json')\n\t\tif (existsSync(pkgPath)) return pkgPath\n\t\tcurrent = dirname(current)\n\t}\n\tconst fallbackPath = join(process.cwd(), 'package.json')\n\tif (existsSync(fallbackPath)) return fallbackPath\n\treturn null\n}\nconst __dirname = dirname(fileURLToPath(import.meta.url))\nconst pkgPath = findPackageJson(__dirname)\nif (!pkgPath) throw new Error('package.json not found!')\nconst pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'))\nfunction parsePositiveInt(value: string): number {\n\tconst n = parseInt(value, 10)\n\tif (!Number.isFinite(n) || n <= 0) {\n\t\tthrow new Error(`expected a positive integer, got \"${value}\"`)\n\t}\n\treturn n\n}\nfunction parseTimeout(value: string): number {\n\tconst ms = parsePositiveInt(value)\n\tif (ms < 1000) throw new Error('timeout must be at least 1000ms')\n\treturn ms\n}\nfunction buildHelpFooter(): string {\n\tconst dim = chalk.dim\n\tconst gray = chalk.gray\n\tconst cyan = chalk.cyan\n\tconst bold = chalk.bold\n\treturn `\n ${dim('─'.repeat(44))}\n ${bold('Examples:')}\n ${gray('$')} sfiledl https://sfile.co/abc123\n ${gray('$')} sfiledl https://sfile.co/abc123 ${cyan('-o ~/Downloads')}\n ${gray('$')} sfiledl https://sfile.co/abc123 ${cyan('--headed --debug')}\n ${gray('$')} sfiledl https://sfile.co/abc123 ${cyan('-r 5 -d 2000')}\n ${bold('Config')} ${gray('.sfiledlrc.json')}\n ${cyan('{')}\n ${cyan(' \"output\":') + ' \"./downloads\",'}\n ${cyan(' \"retries\":') + ' 3,'}\n ${cyan(' \"debug\":') + ' false'}\n ${cyan('}')}\n`\n}\nclass SfileCli {\n\tprivate program: Command\n\tprivate fileLogger: FileLogger | null = null\n\tconstructor() {\n\t\tthis.program = new Command()\n\t\tthis.setupProgram()\n\t}\n\tprivate setupProgram(): void {\n\t\tthis.program\n\t\t\t.name('sfiledl')\n\t\t\t.description('Download files from sfile.co')\n\t\t\t.version(pkg.version, '-v, --version')\n\t\t\t.helpOption('-h, --help')\n\t\t\t.argument('<url>', 'sfile.co download URL')\n\t\t\t.option('-o, --output <dir>', 'Save to directory', './downloads')\n\t\t\t.option('--headed', 'Show browser window (disable headless)')\n\t\t\t.option('-t, --timeout <ms>', 'Navigation timeout in milliseconds', parseTimeout)\n\t\t\t.option(\n\t\t\t\t'--button-timeout <ms>',\n\t\t\t\t'Download button wait timeout in milliseconds',\n\t\t\t\tparsePositiveInt,\n\t\t\t)\n\t\t\t.option('-r, --retries <n>', 'Maximum retry attempts', parsePositiveInt)\n\t\t\t.option('-d, --retry-delay <ms>', 'Base retry delay in milliseconds', parsePositiveInt)\n\t\t\t.option('--debug', 'Enable debug mode')\n\t\t\t.option('--ua, --user-agent <string>', 'Custom User-Agent header')\n\t\t\t.option('--no-progress', 'Disable progress spinner')\n\t\t\t.option('--log-file <path>', 'Write logs to file')\n\t\t\t.option('--no-artifacts', 'Skip saving debug artifacts on error')\n\t\t\t.addHelpText('after', buildHelpFooter())\n\t\t\t.configureOutput({\n\t\t\t\toutputError: (str, write) => write(chalk.red(str)),\n\t\t\t})\n\t\t\t.action(async (url: string, opts: CliOptions) => {\n\t\t\t\tawait this.run(url, opts)\n\t\t\t})\n\t}\n\tprivate async run(url: string, opts: CliOptions): Promise<void> {\n\t\tif (opts.logFile) {\n\t\t\tthis.fileLogger = createFileLogger(opts.logFile)\n\t\t\tthis.fileLogger.info(`CLI started with URL: ${url}`)\n\t\t}\n\t\tlet spinner: SpinnerHandle | null = null\n\t\ttry {\n\t\t\tconst fileConfig = loadFileConfig()\n\t\t\tconst config = resolveConfig(fileConfig, opts)\n\t\t\tconst dlOpts = toDownloadOptions(config)\n\t\t\tif (config.progress) {\n\t\t\t\tspinner = createSpinner('Initializing...')\n\t\t\t\tdlOpts.onProgress = (_pct, _total, meta) => {\n\t\t\t\t\tspinner?.setText(meta.message)\n\t\t\t\t\tthis.fileLogger?.debug(`Progress: ${meta.message}`)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (config.debug) {\n\t\t\t\tuiLog.debug(`Output directory: ${config.output}`)\n\t\t\t\tuiLog.debug(`Headless: ${config.headless}, Timeout: ${config.timeout}ms`)\n\t\t\t\tuiLog.debug(`Retries: ${config.retries}, Retry delay: ${config.retryDelay}ms`)\n\t\t\t\tthis.fileLogger?.debug('Download options', dlOpts)\n\t\t\t}\n\t\t\tconst result = await downloadSfile(url, config.output, dlOpts)\n\t\t\tspinner?.succeed(chalk.green('Download complete'))\n\t\t\tconst printData: PrintResultInput = {\n\t\t\t\tfilePath: result.filePath,\n\t\t\t\tsize: result.size,\n\t\t\t\tmethod: result.method,\n\t\t\t\t...(result.durationMs !== undefined && { durationMs: result.durationMs }),\n\t\t\t\t...(result.attempts !== undefined && { attempts: result.attempts }),\n\t\t\t}\n\t\t\tprintResult(printData)\n\t\t\tthis.fileLogger?.info(\n\t\t\t\t`Download successful: ${result.filePath} (${result.size} bytes, ${result.method})`,\n\t\t\t)\n\t\t\tprocess.exit(ExitCode.Success)\n\t\t} catch (err) {\n\t\t\tspinner?.fail(chalk.red('Download failed'))\n\t\t\tconst errorMsg = formatError(err)\n\t\t\tconsole.error()\n\t\t\tconsole.error(errorMsg)\n\t\t\tconsole.error()\n\t\t\tthis.fileLogger?.error(`Download failed: ${errorMsg}`)\n\t\t\tif (err instanceof Error && err.stack !== undefined && opts.debug) {\n\t\t\t\tthis.fileLogger?.debug(`Stack trace: ${err.stack}`)\n\t\t\t}\n\t\t\tprocess.exit(getExitCode(err))\n\t\t}\n\t}\n\tpublic parse(): void {\n\t\tthis.program.parse()\n\t}\n}\nimport type { SpinnerHandle } from './ui.js'\nconst cli = new SfileCli()\ncli.parse()\n"],"names":["path","fs","__dirname","uiLog"],"mappings":"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"}
|