soundcloud-api-ts 1.13.4 → 1.14.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/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli.ts"],"names":["path","os","fs","readline","SoundCloudClient","generateCodeVerifier","generateCodeChallenge","http","execSync","spawn","net"],"mappings":"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","file":"cli.js","sourcesContent":["#!/usr/bin/env node\n\nimport { SoundCloudClient, generateCodeVerifier, generateCodeChallenge } from \"./index.js\";\nimport * as readline from \"node:readline\";\nimport * as http from \"node:http\";\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport * as os from \"node:os\";\nimport { execSync, spawn, type ChildProcess } from \"node:child_process\";\nimport * as net from \"node:net\";\n\n// ── ANSI Colors ──────────────────────────────────────────────────────────────\n\nconst c = {\n reset: \"\\x1b[0m\",\n bold: \"\\x1b[1m\",\n dim: \"\\x1b[2m\",\n red: \"\\x1b[31m\",\n green: \"\\x1b[32m\",\n yellow: \"\\x1b[33m\",\n blue: \"\\x1b[34m\",\n magenta: \"\\x1b[35m\",\n cyan: \"\\x1b[36m\",\n white: \"\\x1b[37m\",\n bgBlue: \"\\x1b[44m\",\n};\n\nconst isNoColor = !!process.env[\"NO_COLOR\"];\nfunction col(color: string, text: string): string {\n return isNoColor ? text : `${color}${text}${c.reset}`;\n}\n\n// ── Config ───────────────────────────────────────────────────────────────────\n\ninterface CLIConfig {\n clientId?: string;\n clientSecret?: string;\n token?: string;\n refreshToken?: string;\n}\n\nconst CONFIG_PATH = path.join(os.homedir(), \".sc-cli.json\");\n\nfunction loadConfig(): CLIConfig {\n try {\n return JSON.parse(fs.readFileSync(CONFIG_PATH, \"utf-8\")) as CLIConfig;\n } catch {\n return {};\n }\n}\n\nfunction saveConfig(config: CLIConfig): void {\n fs.writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2) + \"\\n\", \"utf-8\");\n}\n\n// ── Spinner ──────────────────────────────────────────────────────────────────\n\nconst SPINNER_FRAMES = [\"⠋\", \"⠙\", \"⠹\", \"⠸\", \"⠼\", \"⠴\", \"⠦\", \"⠧\", \"⠇\", \"⠏\"];\n\nfunction createSpinner(message: string) {\n let i = 0;\n const timer = setInterval(() => {\n process.stdout.write(`\\r${col(c.cyan, SPINNER_FRAMES[i % SPINNER_FRAMES.length])} ${message}`);\n i++;\n }, 80);\n return {\n stop(finalMessage?: string) {\n clearInterval(timer);\n process.stdout.write(`\\r${\" \".repeat(message.length + 4)}\\r`);\n if (finalMessage) console.log(finalMessage);\n },\n };\n}\n\n// ── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction formatDuration(ms: number): string {\n const totalSec = Math.floor(ms / 1000);\n const min = Math.floor(totalSec / 60);\n const sec = totalSec % 60;\n return `${min}:${sec.toString().padStart(2, \"0\")}`;\n}\n\nfunction formatNumber(n: number | undefined | null): string {\n if (n == null) return \"-\";\n if (n >= 1_000_000) return `${(n / 1_000_000).toFixed(1)}M`;\n if (n >= 1_000) return `${(n / 1_000).toFixed(1)}K`;\n return n.toString();\n}\n\nfunction truncate(s: string, max: number): string {\n return s.length > max ? s.slice(0, max - 1) + \"…\" : s;\n}\n\nfunction padRight(s: string, len: number): string {\n return s.length >= len ? s : s + \" \".repeat(len - s.length);\n}\n\nfunction prompt(question: string): Promise<string> {\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout });\n return new Promise((resolve) => {\n rl.question(question, (answer) => {\n rl.close();\n resolve(answer.trim());\n });\n });\n}\n\nfunction die(msg: string): never {\n console.error(`\\n${col(c.red, \"✖\")} ${msg}`);\n process.exit(1);\n}\n\nfunction getClient(config: CLIConfig): SoundCloudClient {\n if (!config.clientId || !config.clientSecret) {\n die(\"Not configured. Run `sc-cli auth` first.\");\n }\n const client = new SoundCloudClient({\n clientId: config.clientId,\n clientSecret: config.clientSecret,\n redirectUri: \"http://localhost:8976/callback\",\n });\n if (config.token) {\n client.setToken(config.token, config.refreshToken);\n }\n return client;\n}\n\nasync function ensureToken(client: SoundCloudClient, config: CLIConfig): Promise<void> {\n if (client.accessToken) return;\n const spinner = createSpinner(\"Getting client token…\");\n try {\n const token = await client.auth.getClientToken();\n client.setToken(token.access_token);\n config.token = token.access_token;\n saveConfig(config);\n spinner.stop();\n } catch (err) {\n spinner.stop();\n die(`Failed to get token: ${err instanceof Error ? err.message : String(err)}`);\n }\n}\n\n// ── Args parsing ─────────────────────────────────────────────────────────────\n\ninterface ParsedArgs {\n command: string;\n positional: string[];\n flags: Record<string, string | boolean>;\n}\n\nfunction parseArgs(argv: string[]): ParsedArgs {\n const args = argv.slice(2);\n const positional: string[] = [];\n const flags: Record<string, string | boolean> = {};\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (arg.startsWith(\"--\")) {\n const eqIdx = arg.indexOf(\"=\");\n if (eqIdx > -1) {\n flags[arg.slice(2, eqIdx)] = arg.slice(eqIdx + 1);\n } else {\n flags[arg.slice(2)] = true;\n }\n } else {\n positional.push(arg);\n }\n }\n const command = positional.shift() ?? \"help\";\n return { command, positional, flags };\n}\n\n// ── Commands ─────────────────────────────────────────────────────────────────\n\nasync function cmdAuth(): Promise<void> {\n console.log(`\\n${col(c.bold + c.cyan, \"⚡ SoundCloud CLI Setup\")}\\n`);\n const clientId = await prompt(`${col(c.yellow, \"?\")} Client ID: `);\n if (!clientId) die(\"Client ID is required.\");\n const clientSecret = await prompt(`${col(c.yellow, \"?\")} Client Secret: `);\n if (!clientSecret) die(\"Client Secret is required.\");\n\n const spinner = createSpinner(\"Verifying credentials…\");\n try {\n const client = new SoundCloudClient({ clientId, clientSecret });\n const token = await client.auth.getClientToken();\n spinner.stop(`${col(c.green, \"✔\")} Credentials verified!`);\n const config: CLIConfig = { clientId, clientSecret, token: token.access_token };\n saveConfig(config);\n console.log(`${col(c.dim, ` Config saved to ${CONFIG_PATH}`)}`);\n } catch (err) {\n spinner.stop();\n die(`Invalid credentials: ${err instanceof Error ? err.message : String(err)}`);\n }\n}\n\nasync function cmdLogin(): Promise<void> {\n const config = loadConfig();\n if (!config.clientId || !config.clientSecret) {\n die(\"Not configured. Run `sc-cli auth` first.\");\n }\n\n const verifier = generateCodeVerifier();\n const challenge = await generateCodeChallenge(verifier);\n\n const client = new SoundCloudClient({\n clientId: config.clientId,\n clientSecret: config.clientSecret,\n redirectUri: \"http://localhost:8976/callback\",\n });\n\n const authUrl = client.auth.getAuthorizationUrl({\n state: \"cli-login\",\n codeChallenge: challenge,\n });\n\n console.log(`\\n${col(c.bold + c.cyan, \"⚡ SoundCloud OAuth Login\")}\\n`);\n console.log(`${col(c.yellow, \"→\")} Open this URL in your browser:\\n`);\n console.log(` ${col(c.blue, authUrl)}\\n`);\n\n // Try to open browser automatically\n const openCmd = process.platform === \"darwin\" ? \"open\" : process.platform === \"win32\" ? \"start\" : \"xdg-open\";\n try {\n const { exec: cpExec } = await import(\"node:child_process\");\n cpExec(`${openCmd} \"${authUrl}\"`);\n } catch {\n // ignore — user can open manually\n }\n\n console.log(`${col(c.dim, \" Waiting for callback on http://localhost:8976/callback …\")}\\n`);\n\n const code = await new Promise<string>((resolve, reject) => {\n const server = http.createServer((req, res) => {\n const url = new URL(req.url ?? \"/\", \"http://localhost:8976\");\n const authCode = url.searchParams.get(\"code\");\n if (authCode) {\n res.writeHead(200, { \"Content-Type\": \"text/html\" });\n res.end(\"<html><body><h2>✅ Authenticated! You can close this tab.</h2></body></html>\");\n server.close();\n resolve(authCode);\n } else {\n res.writeHead(400, { \"Content-Type\": \"text/html\" });\n res.end(\"<html><body><h2>❌ No code received.</h2></body></html>\");\n server.close();\n reject(new Error(\"No authorization code received\"));\n }\n });\n server.listen(8976);\n server.on(\"error\", reject);\n });\n\n const spinner = createSpinner(\"Exchanging code for token…\");\n try {\n const token = await client.auth.getUserToken(code, verifier);\n spinner.stop(`${col(c.green, \"✔\")} Logged in successfully!`);\n config.token = token.access_token;\n config.refreshToken = token.refresh_token;\n saveConfig(config);\n console.log(`${col(c.dim, ` Config saved to ${CONFIG_PATH}`)}`);\n } catch (err) {\n spinner.stop();\n die(`Login failed: ${err instanceof Error ? err.message : String(err)}`);\n }\n}\n\nasync function cmdSearch(args: ParsedArgs): Promise<void> {\n if (args.flags[\"help\"]) {\n console.log(`\n${col(c.bold, \"Usage:\")} sc-cli search <query> [--json]\n\n${col(c.bold, \"Examples:\")}\n sc-cli search \"lofi hip hop\"\n sc-cli search deadmau5 --json\n`);\n return;\n }\n\n const query = args.positional.join(\" \");\n if (!query) die(\"Usage: sc-cli search <query>\");\n\n const config = loadConfig();\n const client = getClient(config);\n await ensureToken(client, config);\n\n const spinner = createSpinner(`Searching \"${query}\"…`);\n const results = await client.search.tracks(query);\n spinner.stop();\n\n if (args.flags[\"json\"]) {\n console.log(JSON.stringify(results.collection, null, 2));\n return;\n }\n\n if (!results.collection.length) {\n console.log(`\\n${col(c.yellow, \"No results found.\")}`);\n return;\n }\n\n console.log(`\\n${col(c.bold + c.cyan, `⚡ Search results for \"${query}\"`)}\\n`);\n console.log(\n ` ${col(c.dim, padRight(\"#\", 4))}${col(c.dim, padRight(\"Title\", 40))}${col(c.dim, padRight(\"Artist\", 24))}${col(c.dim, padRight(\"Duration\", 10))}${col(c.dim, \"Plays\")}`,\n );\n console.log(` ${col(c.dim, \"─\".repeat(90))}`);\n\n results.collection.forEach((track, i) => {\n const num = padRight(`${i + 1}`, 4);\n const title = padRight(truncate(track.title ?? \"Untitled\", 38), 40);\n const artist = padRight(truncate(track.user?.username ?? \"Unknown\", 22), 24);\n const duration = padRight(formatDuration(track.duration ?? 0), 10);\n const plays = formatNumber(track.playback_count);\n console.log(` ${col(c.dim, num)}${col(c.white, title)}${col(c.magenta, artist)}${col(c.yellow, duration)}${col(c.green, plays)}`);\n });\n console.log();\n}\n\nasync function cmdTrack(args: ParsedArgs): Promise<void> {\n if (args.flags[\"help\"]) {\n console.log(`\n${col(c.bold, \"Usage:\")} sc-cli track <id> [--json]\n\n${col(c.bold, \"Examples:\")}\n sc-cli track 123456\n sc-cli track 123456 --json\n`);\n return;\n }\n\n const id = args.positional[0];\n if (!id) die(\"Usage: sc-cli track <id>\");\n\n const config = loadConfig();\n const client = getClient(config);\n await ensureToken(client, config);\n\n const spinner = createSpinner(\"Fetching track…\");\n const track = await client.tracks.getTrack(id);\n spinner.stop();\n\n if (args.flags[\"json\"]) {\n console.log(JSON.stringify(track, null, 2));\n return;\n }\n\n console.log(`\\n${col(c.bold + c.cyan, \"⚡ Track Details\")}\\n`);\n console.log(` ${col(c.dim, \"Title:\")} ${col(c.bold + c.white, track.title ?? \"Untitled\")}`);\n console.log(` ${col(c.dim, \"Artist:\")} ${col(c.magenta, track.user?.username ?? \"Unknown\")}`);\n console.log(` ${col(c.dim, \"Duration:\")} ${col(c.yellow, formatDuration(track.duration ?? 0))}`);\n console.log(` ${col(c.dim, \"Plays:\")} ${col(c.green, formatNumber(track.playback_count))}`);\n console.log(` ${col(c.dim, \"Likes:\")} ${col(c.green, formatNumber(track.favoritings_count))}`);\n console.log(` ${col(c.dim, \"Genre:\")} ${track.genre ?? \"-\"}`);\n console.log(` ${col(c.dim, \"Created:\")} ${track.created_at ?? \"-\"}`);\n console.log(` ${col(c.dim, \"URL:\")} ${col(c.blue, track.permalink_url ?? \"-\")}`);\n console.log();\n}\n\nasync function cmdUser(args: ParsedArgs): Promise<void> {\n if (args.flags[\"help\"]) {\n console.log(`\n${col(c.bold, \"Usage:\")} sc-cli user <id> [--json]\n\n${col(c.bold, \"Examples:\")}\n sc-cli user 123456\n`);\n return;\n }\n\n const id = args.positional[0];\n if (!id) die(\"Usage: sc-cli user <id>\");\n\n const config = loadConfig();\n const client = getClient(config);\n await ensureToken(client, config);\n\n const spinner = createSpinner(\"Fetching user…\");\n const user = await client.users.getUser(id);\n spinner.stop();\n\n if (args.flags[\"json\"]) {\n console.log(JSON.stringify(user, null, 2));\n return;\n }\n\n console.log(`\\n${col(c.bold + c.cyan, \"⚡ User Profile\")}\\n`);\n console.log(` ${col(c.dim, \"Username:\")} ${col(c.bold + c.white, user.username ?? \"Unknown\")}`);\n console.log(` ${col(c.dim, \"Followers:\")} ${col(c.green, formatNumber(user.followers_count))}`);\n console.log(` ${col(c.dim, \"Following:\")} ${col(c.green, formatNumber(user.followings_count))}`);\n console.log(` ${col(c.dim, \"Tracks:\")} ${col(c.yellow, formatNumber(user.track_count))}`);\n console.log(` ${col(c.dim, \"City:\")} ${user.city ?? \"-\"}`);\n console.log(` ${col(c.dim, \"URL:\")} ${col(c.blue, user.permalink_url ?? \"-\")}`);\n console.log();\n}\n\nasync function cmdPlaylist(args: ParsedArgs): Promise<void> {\n if (args.flags[\"help\"]) {\n console.log(`\n${col(c.bold, \"Usage:\")} sc-cli playlist <id> [--json]\n\n${col(c.bold, \"Examples:\")}\n sc-cli playlist 123456\n`);\n return;\n }\n\n const id = args.positional[0];\n if (!id) die(\"Usage: sc-cli playlist <id>\");\n\n const config = loadConfig();\n const client = getClient(config);\n await ensureToken(client, config);\n\n const spinner = createSpinner(\"Fetching playlist…\");\n const playlist = await client.playlists.getPlaylist(id);\n spinner.stop();\n\n if (args.flags[\"json\"]) {\n console.log(JSON.stringify(playlist, null, 2));\n return;\n }\n\n console.log(`\\n${col(c.bold + c.cyan, \"⚡ Playlist\")}\\n`);\n console.log(` ${col(c.dim, \"Title:\")} ${col(c.bold + c.white, playlist.title ?? \"Untitled\")}`);\n console.log(` ${col(c.dim, \"By:\")} ${col(c.magenta, playlist.user?.username ?? \"Unknown\")}`);\n console.log(` ${col(c.dim, \"Tracks:\")} ${playlist.track_count ?? 0}`);\n console.log(` ${col(c.dim, \"Duration:\")} ${col(c.yellow, formatDuration(playlist.duration ?? 0))}`);\n console.log(` ${col(c.dim, \"URL:\")} ${col(c.blue, playlist.permalink_url ?? \"-\")}`);\n\n if (playlist.tracks?.length) {\n console.log(`\\n ${col(c.bold, \"Track listing:\")}\\n`);\n playlist.tracks.forEach((track, i) => {\n const num = padRight(`${i + 1}.`, 5);\n const title = truncate(track.title ?? \"Untitled\", 45);\n const dur = formatDuration(track.duration ?? 0);\n console.log(` ${col(c.dim, num)}${title} ${col(c.dim, `(${dur})`)}`);\n });\n }\n console.log();\n}\n\nasync function cmdStream(args: ParsedArgs): Promise<void> {\n if (args.flags[\"help\"]) {\n console.log(`\n${col(c.bold, \"Usage:\")} sc-cli stream <id> [--json]\n\n${col(c.bold, \"Examples:\")}\n sc-cli stream 123456\n`);\n return;\n }\n\n const id = args.positional[0];\n if (!id) die(\"Usage: sc-cli stream <id>\");\n\n const config = loadConfig();\n const client = getClient(config);\n await ensureToken(client, config);\n\n const spinner = createSpinner(\"Getting stream URLs…\");\n const streams = await client.tracks.getStreams(id);\n spinner.stop();\n\n if (args.flags[\"json\"]) {\n console.log(JSON.stringify(streams, null, 2));\n return;\n }\n\n console.log(`\\n${col(c.bold + c.cyan, \"⚡ Stream URLs\")}\\n`);\n const entries = Object.entries(streams).filter(([, v]) => v);\n if (!entries.length) {\n console.log(` ${col(c.yellow, \"No stream URLs available.\")}`);\n } else {\n for (const [key, url] of entries) {\n const label = key.replace(/_url$/, \"\").replace(/_/g, \" \").toUpperCase();\n console.log(` ${col(c.dim, padRight(label + \":\", 28))}${col(c.blue, String(url))}`);\n }\n }\n console.log();\n}\n\nasync function cmdResolve(args: ParsedArgs): Promise<void> {\n if (args.flags[\"help\"]) {\n console.log(`\n${col(c.bold, \"Usage:\")} sc-cli resolve <url> [--json]\n\n${col(c.bold, \"Examples:\")}\n sc-cli resolve https://soundcloud.com/artist/track\n`);\n return;\n }\n\n const url = args.positional[0];\n if (!url) die(\"Usage: sc-cli resolve <url>\");\n\n const config = loadConfig();\n const client = getClient(config);\n await ensureToken(client, config);\n\n const spinner = createSpinner(\"Resolving URL…\");\n const result = await client.resolve.resolveUrl(url);\n spinner.stop();\n\n if (args.flags[\"json\"]) {\n console.log(JSON.stringify(result, null, 2));\n return;\n }\n\n console.log(`\\n${col(c.green, \"✔\")} Resolved:\\n`);\n if (typeof result === \"string\") {\n console.log(` ${col(c.blue, result)}`);\n } else {\n console.log(JSON.stringify(result, null, 2));\n }\n console.log();\n}\n\nasync function cmdMe(args: ParsedArgs): Promise<void> {\n if (args.flags[\"help\"]) {\n console.log(`\n${col(c.bold, \"Usage:\")} sc-cli me [--json]\n\nShows the authenticated user's profile. Requires \\`sc-cli login\\` first.\n`);\n return;\n }\n\n const config = loadConfig();\n const client = getClient(config);\n if (!client.accessToken) {\n die(\"Not logged in. Run `sc-cli login` first.\");\n }\n\n const spinner = createSpinner(\"Fetching profile…\");\n const me = await client.me.getMe();\n spinner.stop();\n\n if (args.flags[\"json\"]) {\n console.log(JSON.stringify(me, null, 2));\n return;\n }\n\n console.log(`\\n${col(c.bold + c.cyan, \"⚡ Your Profile\")}\\n`);\n console.log(` ${col(c.dim, \"Username:\")} ${col(c.bold + c.white, me.username ?? \"Unknown\")}`);\n console.log(` ${col(c.dim, \"Followers:\")} ${col(c.green, formatNumber(me.followers_count))}`);\n console.log(` ${col(c.dim, \"Following:\")} ${col(c.green, formatNumber(me.followings_count))}`);\n console.log(` ${col(c.dim, \"Tracks:\")} ${col(c.yellow, formatNumber(me.track_count))}`);\n console.log(` ${col(c.dim, \"City:\")} ${me.city ?? \"-\"}`);\n console.log(` ${col(c.dim, \"Plan:\")} ${me.quota?.unlimited_upload_quota ? \"Pro\" : \"Free\"}`);\n console.log(` ${col(c.dim, \"URL:\")} ${col(c.blue, me.permalink_url ?? \"-\")}`);\n console.log();\n}\n\nasync function cmdLikes(args: ParsedArgs): Promise<void> {\n if (args.flags[\"help\"]) {\n console.log(`\n${col(c.bold, \"Usage:\")} sc-cli likes [--json]\n\nShows your liked tracks. Requires \\`sc-cli login\\` first.\n`);\n return;\n }\n\n const config = loadConfig();\n const client = getClient(config);\n if (!client.accessToken) {\n die(\"Not logged in. Run `sc-cli login` first.\");\n }\n\n const spinner = createSpinner(\"Fetching likes…\");\n const likes = await client.me.getLikesTracks(20);\n spinner.stop();\n\n if (args.flags[\"json\"]) {\n console.log(JSON.stringify(likes.collection, null, 2));\n return;\n }\n\n if (!likes.collection.length) {\n console.log(`\\n${col(c.yellow, \"No liked tracks.\")}`);\n return;\n }\n\n console.log(`\\n${col(c.bold + c.cyan, \"⚡ Your Liked Tracks\")}\\n`);\n console.log(\n ` ${col(c.dim, padRight(\"#\", 4))}${col(c.dim, padRight(\"Title\", 40))}${col(c.dim, padRight(\"Artist\", 24))}${col(c.dim, \"Duration\")}`,\n );\n console.log(` ${col(c.dim, \"─\".repeat(80))}`);\n\n likes.collection.forEach((track, i) => {\n const num = padRight(`${i + 1}`, 4);\n const title = padRight(truncate(track.title ?? \"Untitled\", 38), 40);\n const artist = padRight(truncate(track.user?.username ?? \"Unknown\", 22), 24);\n const duration = formatDuration(track.duration ?? 0);\n console.log(` ${col(c.dim, num)}${col(c.white, title)}${col(c.magenta, artist)}${col(c.yellow, duration)}`);\n });\n console.log();\n}\n\n// ── Play Command ─────────────────────────────────────────────────────────────\n\nconst isWindows = process.platform === \"win32\";\n\n/** Detect an available audio player binary */\nfunction detectPlayer(): string | null {\n const candidates = isWindows ? [\"mpv\", \"ffplay\"] : [\"mpv\", \"ffplay\", \"afplay\"];\n const whichCmd = isWindows ? \"where.exe\" : \"command -v\";\n for (const bin of candidates) {\n try {\n execSync(`${whichCmd} ${bin}`, { stdio: \"ignore\" });\n return bin;\n } catch {\n // not found, try next\n }\n }\n return null;\n}\n\n/** IPC socket path for mpv (shared between playerArgs and cmdPlay) */\nconst mpvSocketPath = isWindows ? \"\\\\\\\\.\\\\pipe\\\\sc-cli-mpv\" : path.join(os.tmpdir(), \"sc-cli-mpv.sock\");\n\n/** Build player args (suppress visual output where possible) */\nfunction playerArgs(bin: string, filePath: string): string[] {\n switch (bin) {\n case \"mpv\":\n return [\"--no-video\", \"--no-terminal\", `--input-ipc-server=${mpvSocketPath}`, filePath];\n case \"ffplay\":\n return [\"-nodisp\", \"-autoexit\", \"-loglevel\", \"quiet\", filePath];\n case \"afplay\":\n return [filePath];\n default:\n return [filePath];\n }\n}\n\nasync function cmdPlay(args: ParsedArgs): Promise<void> {\n if (args.flags[\"help\"]) {\n console.log(`\n${col(c.bold, \"Usage:\")} sc-cli play <id> [--url] [--json]\n\nPlay a SoundCloud track in your terminal.\n\n${col(c.bold, \"Options:\")}\n ${col(c.yellow, \"--url\")} Print the best stream URL and exit\n ${col(c.yellow, \"--json\")} Print raw stream URLs JSON and exit\n\n${col(c.bold, \"Examples:\")}\n sc-cli play 123456\n sc-cli play 123456 --url\n`);\n return;\n }\n\n const id = args.positional[0];\n if (!id) die(\"Usage: sc-cli play <track-id>\");\n\n const config = loadConfig();\n const client = getClient(config);\n await ensureToken(client, config);\n\n // Fetch track info and streams in parallel\n const spinner = createSpinner(\"Fetching track…\");\n const [track, streams] = await Promise.all([\n client.tracks.getTrack(id),\n client.tracks.getStreams(id),\n ]);\n spinner.stop();\n\n // --json: dump raw stream URLs\n if (args.flags[\"json\"]) {\n console.log(JSON.stringify(streams, null, 2));\n return;\n }\n\n // Pick best stream URL\n const streamUrl =\n streams.http_mp3_128_url ||\n streams.hls_mp3_128_url ||\n streams.hls_aac_160_url ||\n streams.preview_mp3_128_url;\n\n if (!streamUrl) die(\"No stream URL available for this track.\");\n\n // --url: just print and exit\n if (args.flags[\"url\"]) {\n console.log(streamUrl);\n return;\n }\n\n // Detect player\n const playerBin = detectPlayer();\n if (!playerBin) die(\"No audio player found. Install mpv, ffplay, or afplay.\");\n\n // Show track header\n const title = track.title ?? \"Untitled\";\n const artist = track.user?.username ?? \"Unknown\";\n const durationMs = track.duration ?? 0;\n const durationStr = formatDuration(durationMs);\n\n console.log(`\\n${col(c.bold + c.cyan, \"⚡ Now Playing\")}\\n`);\n console.log(` ${col(c.dim, \"Title:\")} ${col(c.bold + c.white, title)}`);\n console.log(` ${col(c.dim, \"Artist:\")} ${col(c.magenta, artist)}`);\n console.log(` ${col(c.dim, \"Duration:\")} ${col(c.yellow, durationStr)}`);\n console.log(` ${col(c.dim, \"Player:\")} ${playerBin}\\n`);\n\n // Download to temp file\n const tmpFile = path.join(os.tmpdir(), `sc-play-${id}-${Date.now()}.mp3`);\n const dlSpinner = createSpinner(\"Downloading stream…\");\n try {\n const resp = await fetch(streamUrl, {\n headers: { Authorization: `OAuth ${client.accessToken}` },\n });\n if (!resp.ok) die(`Download failed: HTTP ${resp.status}`);\n const buffer = Buffer.from(await resp.arrayBuffer());\n fs.writeFileSync(tmpFile, buffer);\n } catch (err) {\n dlSpinner.stop();\n die(`Download failed: ${err instanceof Error ? err.message : String(err)}`);\n }\n dlSpinner.stop();\n\n // Spawn player\n const totalSec = Math.floor(durationMs / 1000);\n let player: ChildProcess | null = null;\n let progressTimer: ReturnType<typeof setInterval> | null = null;\n let startTime = Date.now();\n const usesMpv = playerBin === \"mpv\";\n\n // Restore terminal state helper\n const restoreStdin = () => {\n if (process.stdin.isTTY) {\n process.stdin.setRawMode(false);\n process.stdin.pause();\n }\n };\n\n // Cleanup helper\n const cleanup = () => {\n if (progressTimer) { clearInterval(progressTimer); progressTimer = null; }\n restoreStdin();\n process.stdout.write(\"\\n\");\n if (player && !player.killed) player.kill();\n try { fs.unlinkSync(tmpFile); } catch { /* ignore */ }\n if (usesMpv) try { fs.unlinkSync(mpvSocketPath); } catch { /* ignore */ }\n };\n\n // Handle Ctrl+C\n const onSigint = () => { cleanup(); process.exit(0); };\n process.on(\"SIGINT\", onSigint);\n\n return new Promise<void>((resolve) => {\n player = spawn(playerBin, playerArgs(playerBin, tmpFile), { stdio: \"ignore\" });\n startTime = Date.now();\n let paused = false;\n let pausedAt = 0; // total ms spent paused\n let pauseStart = 0;\n\n // Live progress bar\n const barWidth = 30;\n const drawProgress = () => {\n const pauseOffset = paused ? Date.now() - pauseStart : 0;\n const elapsed = Math.floor((Date.now() - startTime - pausedAt - pauseOffset) / 1000);\n const capped = Math.min(Math.max(elapsed, 0), totalSec);\n const ratio = totalSec > 0 ? capped / totalSec : 0;\n const filled = Math.round(ratio * barWidth);\n const empty = barWidth - filled;\n const bar = \"█\".repeat(filled) + \"░\".repeat(empty);\n const elapsedStr = formatDuration(capped * 1000);\n const icon = paused ? col(c.yellow, \"⏸\") : col(c.green, \"▶\");\n process.stdout.write(`\\r ${icon} [${col(c.cyan, bar)}] ${elapsedStr} / ${durationStr} `);\n };\n drawProgress(); // draw immediately\n progressTimer = setInterval(drawProgress, 1000);\n\n // Keyboard controls\n // afplay has no pause support; ffplay on Windows can't use SIGSTOP/SIGCONT\n const supportsPause = playerBin === \"mpv\" || (playerBin === \"ffplay\" && !isWindows);\n\n const sendMpvCommand = (cmd: string[]) => {\n if (!usesMpv) return;\n try {\n const sock = net.createConnection(mpvSocketPath);\n sock.on(\"error\", () => { /* ignore connection errors */ });\n sock.write(JSON.stringify({ command: cmd }) + \"\\n\");\n sock.end();\n } catch { /* ignore */ }\n };\n\n if (process.stdin.isTTY) {\n process.stdin.setRawMode(true);\n process.stdin.resume();\n process.stdin.on(\"data\", (key: Buffer) => {\n const ch = key.toString();\n if (ch === \" \" && supportsPause && player && !player.killed) {\n if (usesMpv) {\n // Toggle pause via mpv IPC\n sendMpvCommand([\"cycle\", \"pause\"]);\n } else {\n // Signal-based fallback for ffplay\n if (paused) player.kill(\"SIGCONT\");\n else player.kill(\"SIGSTOP\");\n }\n if (paused) {\n pausedAt += Date.now() - pauseStart;\n paused = false;\n } else {\n pauseStart = Date.now();\n paused = true;\n }\n drawProgress();\n } else if (ch === \"q\" || ch === \"\\x03\") {\n // q or Ctrl+C\n if (usesMpv) sendMpvCommand([\"quit\"]);\n cleanup();\n process.removeListener(\"SIGINT\", onSigint);\n process.exit(0);\n }\n });\n }\n\n const controlHint = supportsPause ? \"[space] pause/play [q] quit\" : \"[q] quit\";\n console.log(` ${col(c.dim, controlHint)}\\n`);\n\n player.on(\"close\", () => {\n cleanup();\n process.removeListener(\"SIGINT\", onSigint);\n console.log(`\\n${col(c.green, \"✔\")} Playback complete.`);\n resolve();\n });\n\n player.on(\"error\", (err) => {\n cleanup();\n process.removeListener(\"SIGINT\", onSigint);\n die(`Player error: ${err.message}`);\n });\n });\n}\n\nfunction showHelp(): void {\n console.log(`\n${col(c.bold + c.cyan, \"⚡ sc-cli\")} ${col(c.dim, \"— Explore the SoundCloud API from your terminal\")}\n\n${col(c.bold, \"Usage:\")} sc-cli <command> [options]\n\n${col(c.bold, \"Setup:\")}\n ${col(c.green, \"auth\")} Set up API credentials (client_id + client_secret)\n ${col(c.green, \"login\")} Log in via OAuth (opens browser)\n\n${col(c.bold, \"Commands:\")}\n ${col(c.green, \"search\")} <query> Search tracks\n ${col(c.green, \"track\")} <id> Show track details\n ${col(c.green, \"user\")} <id> Show user profile\n ${col(c.green, \"playlist\")} <id> Show playlist with track listing\n ${col(c.green, \"play\")} <id> Play a track in your terminal\n ${col(c.green, \"stream\")} <id> Get stream URLs for a track\n ${col(c.green, \"resolve\")} <url> Resolve a SoundCloud URL\n ${col(c.green, \"me\")} Show your profile (requires login)\n ${col(c.green, \"likes\")} Show your liked tracks (requires login)\n\n${col(c.bold, \"Options:\")}\n ${col(c.yellow, \"--json\")} Output raw JSON (works on all commands)\n ${col(c.yellow, \"--help\")} Show help for a command\n\n${col(c.bold, \"Examples:\")}\n ${col(c.dim, \"$\")} sc-cli auth\n ${col(c.dim, \"$\")} sc-cli search \"lofi beats\"\n ${col(c.dim, \"$\")} sc-cli play 293\n ${col(c.dim, \"$\")} sc-cli track 293 --json\n ${col(c.dim, \"$\")} sc-cli resolve https://soundcloud.com/artist/track\n ${col(c.dim, \"$\")} sc-cli login\n ${col(c.dim, \"$\")} sc-cli me\n\n${col(c.dim, \"Config:\")} ${CONFIG_PATH}\n${col(c.dim, \"Powered by\")} soundcloud-api-ts\n`);\n}\n\n// ── Main ─────────────────────────────────────────────────────────────────────\n\nasync function main(): Promise<void> {\n const args = parseArgs(process.argv);\n\n if (args.flags[\"help\"] && ![\"search\", \"track\", \"user\", \"playlist\", \"play\", \"stream\", \"resolve\", \"me\", \"likes\"].includes(args.command)) {\n showHelp();\n return;\n }\n\n try {\n switch (args.command) {\n case \"help\":\n showHelp();\n break;\n case \"auth\":\n await cmdAuth();\n break;\n case \"login\":\n await cmdLogin();\n break;\n case \"search\":\n await cmdSearch(args);\n break;\n case \"track\":\n await cmdTrack(args);\n break;\n case \"user\":\n await cmdUser(args);\n break;\n case \"playlist\":\n await cmdPlaylist(args);\n break;\n case \"play\":\n await cmdPlay(args);\n break;\n case \"stream\":\n await cmdStream(args);\n break;\n case \"resolve\":\n await cmdResolve(args);\n break;\n case \"me\":\n await cmdMe(args);\n break;\n case \"likes\":\n await cmdLikes(args);\n break;\n default:\n console.error(`\\n${col(c.red, \"✖\")} Unknown command: ${args.command}`);\n showHelp();\n process.exit(1);\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n die(message);\n }\n}\n\nmain();\n"]}
1
+ {"version":3,"sources":["../src/cli.ts"],"names":["path","os","fs","readline","SoundCloudClient","generateCodeVerifier","generateCodeChallenge","http","execSync","spawn","net"],"mappings":"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","file":"cli.js","sourcesContent":["#!/usr/bin/env node\n\nimport { SoundCloudClient, generateCodeVerifier, generateCodeChallenge } from \"./index.js\";\nimport * as readline from \"node:readline\";\nimport * as http from \"node:http\";\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport * as os from \"node:os\";\nimport { execSync, spawn, type ChildProcess } from \"node:child_process\";\nimport * as net from \"node:net\";\n\n// ── ANSI Colors ──────────────────────────────────────────────────────────────\n\nconst c = {\n reset: \"\\x1b[0m\",\n bold: \"\\x1b[1m\",\n dim: \"\\x1b[2m\",\n red: \"\\x1b[31m\",\n green: \"\\x1b[32m\",\n yellow: \"\\x1b[33m\",\n blue: \"\\x1b[34m\",\n magenta: \"\\x1b[35m\",\n cyan: \"\\x1b[36m\",\n white: \"\\x1b[37m\",\n bgBlue: \"\\x1b[44m\",\n};\n\nconst isNoColor = !!process.env[\"NO_COLOR\"];\nfunction col(color: string, text: string): string {\n return isNoColor ? text : `${color}${text}${c.reset}`;\n}\n\n// ── Config ───────────────────────────────────────────────────────────────────\n\ninterface CLIConfig {\n clientId?: string;\n clientSecret?: string;\n token?: string;\n refreshToken?: string;\n}\n\nconst CONFIG_PATH = path.join(os.homedir(), \".sc-cli.json\");\n\nfunction loadConfig(): CLIConfig {\n try {\n return JSON.parse(fs.readFileSync(CONFIG_PATH, \"utf-8\")) as CLIConfig;\n } catch {\n return {};\n }\n}\n\nfunction saveConfig(config: CLIConfig): void {\n fs.writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2) + \"\\n\", \"utf-8\");\n}\n\n// ── Spinner ──────────────────────────────────────────────────────────────────\n\nconst SPINNER_FRAMES = [\"⠋\", \"⠙\", \"⠹\", \"⠸\", \"⠼\", \"⠴\", \"⠦\", \"⠧\", \"⠇\", \"⠏\"];\n\nfunction createSpinner(message: string) {\n let i = 0;\n const timer = setInterval(() => {\n process.stdout.write(`\\r${col(c.cyan, SPINNER_FRAMES[i % SPINNER_FRAMES.length])} ${message}`);\n i++;\n }, 80);\n return {\n stop(finalMessage?: string) {\n clearInterval(timer);\n process.stdout.write(`\\r${\" \".repeat(message.length + 4)}\\r`);\n if (finalMessage) console.log(finalMessage);\n },\n };\n}\n\n// ── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction formatDuration(ms: number): string {\n const totalSec = Math.floor(ms / 1000);\n const min = Math.floor(totalSec / 60);\n const sec = totalSec % 60;\n return `${min}:${sec.toString().padStart(2, \"0\")}`;\n}\n\nfunction formatNumber(n: number | undefined | null): string {\n if (n == null) return \"-\";\n if (n >= 1_000_000) return `${(n / 1_000_000).toFixed(1)}M`;\n if (n >= 1_000) return `${(n / 1_000).toFixed(1)}K`;\n return n.toString();\n}\n\nfunction truncate(s: string, max: number): string {\n return s.length > max ? s.slice(0, max - 1) + \"…\" : s;\n}\n\nfunction padRight(s: string, len: number): string {\n return s.length >= len ? s : s + \" \".repeat(len - s.length);\n}\n\nfunction prompt(question: string): Promise<string> {\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout });\n return new Promise((resolve) => {\n rl.question(question, (answer) => {\n rl.close();\n resolve(answer.trim());\n });\n });\n}\n\nfunction die(msg: string): never {\n console.error(`\\n${col(c.red, \"✖\")} ${msg}`);\n process.exit(1);\n}\n\nfunction getClient(config: CLIConfig): SoundCloudClient {\n if (!config.clientId || !config.clientSecret) {\n die(\"Not configured. Run `sc-cli auth` first.\");\n }\n const client = new SoundCloudClient({\n clientId: config.clientId,\n clientSecret: config.clientSecret,\n redirectUri: \"http://localhost:8976/callback\",\n });\n if (config.token) {\n client.setToken(config.token, config.refreshToken);\n }\n return client;\n}\n\nasync function ensureToken(client: SoundCloudClient, config: CLIConfig): Promise<void> {\n if (client.accessToken) return;\n const spinner = createSpinner(\"Getting client token…\");\n try {\n const token = await client.auth.getClientToken();\n client.setToken(token.access_token);\n config.token = token.access_token;\n saveConfig(config);\n spinner.stop();\n } catch (err) {\n spinner.stop();\n die(`Failed to get token: ${err instanceof Error ? err.message : String(err)}`);\n }\n}\n\n// ── Args parsing ─────────────────────────────────────────────────────────────\n\ninterface ParsedArgs {\n command: string;\n positional: string[];\n flags: Record<string, string | boolean>;\n}\n\nfunction parseArgs(argv: string[]): ParsedArgs {\n const args = argv.slice(2);\n const positional: string[] = [];\n const flags: Record<string, string | boolean> = {};\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (arg.startsWith(\"--\")) {\n const eqIdx = arg.indexOf(\"=\");\n if (eqIdx > -1) {\n flags[arg.slice(2, eqIdx)] = arg.slice(eqIdx + 1);\n } else {\n flags[arg.slice(2)] = true;\n }\n } else {\n positional.push(arg);\n }\n }\n const command = positional.shift() ?? \"help\";\n return { command, positional, flags };\n}\n\n// ── Commands ─────────────────────────────────────────────────────────────────\n\nasync function cmdAuth(): Promise<void> {\n console.log(`\\n${col(c.bold + c.cyan, \"⚡ SoundCloud CLI Setup\")}\\n`);\n const clientId = await prompt(`${col(c.yellow, \"?\")} Client ID: `);\n if (!clientId) die(\"Client ID is required.\");\n const clientSecret = await prompt(`${col(c.yellow, \"?\")} Client Secret: `);\n if (!clientSecret) die(\"Client Secret is required.\");\n\n const spinner = createSpinner(\"Verifying credentials…\");\n try {\n const client = new SoundCloudClient({ clientId, clientSecret });\n const token = await client.auth.getClientToken();\n spinner.stop(`${col(c.green, \"✔\")} Credentials verified!`);\n const config: CLIConfig = { clientId, clientSecret, token: token.access_token };\n saveConfig(config);\n console.log(`${col(c.dim, ` Config saved to ${CONFIG_PATH}`)}`);\n } catch (err) {\n spinner.stop();\n die(`Invalid credentials: ${err instanceof Error ? err.message : String(err)}`);\n }\n}\n\nasync function cmdLogin(): Promise<void> {\n const config = loadConfig();\n if (!config.clientId || !config.clientSecret) {\n die(\"Not configured. Run `sc-cli auth` first.\");\n }\n\n const verifier = generateCodeVerifier();\n const challenge = await generateCodeChallenge(verifier);\n\n const client = new SoundCloudClient({\n clientId: config.clientId,\n clientSecret: config.clientSecret,\n redirectUri: \"http://localhost:8976/callback\",\n });\n\n const authUrl = client.auth.getAuthorizationUrl({\n state: \"cli-login\",\n codeChallenge: challenge,\n });\n\n console.log(`\\n${col(c.bold + c.cyan, \"⚡ SoundCloud OAuth Login\")}\\n`);\n console.log(`${col(c.yellow, \"→\")} Open this URL in your browser:\\n`);\n console.log(` ${col(c.blue, authUrl)}\\n`);\n\n // Try to open browser automatically\n // cmd.exe `start` treats the first quoted arg as a window title, so pass an empty title\n const openCmd =\n process.platform === \"darwin\" ? `open \"${authUrl}\"`\n : process.platform === \"win32\" ? `start \"\" \"${authUrl}\"`\n : `xdg-open \"${authUrl}\"`;\n try {\n const { exec: cpExec } = await import(\"node:child_process\");\n cpExec(openCmd);\n } catch {\n // ignore — user can open manually\n }\n\n console.log(`${col(c.dim, \" Waiting for callback on http://localhost:8976/callback …\")}\\n`);\n\n const code = await new Promise<string>((resolve, reject) => {\n const server = http.createServer((req, res) => {\n const url = new URL(req.url ?? \"/\", \"http://localhost:8976\");\n const authCode = url.searchParams.get(\"code\");\n if (authCode) {\n res.writeHead(200, { \"Content-Type\": \"text/html\" });\n res.end(\"<html><body><h2>✅ Authenticated! You can close this tab.</h2></body></html>\");\n server.close();\n resolve(authCode);\n } else {\n res.writeHead(400, { \"Content-Type\": \"text/html\" });\n res.end(\"<html><body><h2>❌ No code received.</h2></body></html>\");\n server.close();\n reject(new Error(\"No authorization code received\"));\n }\n });\n server.listen(8976);\n server.on(\"error\", reject);\n });\n\n const spinner = createSpinner(\"Exchanging code for token…\");\n try {\n const token = await client.auth.getUserToken(code, verifier);\n spinner.stop(`${col(c.green, \"✔\")} Logged in successfully!`);\n config.token = token.access_token;\n config.refreshToken = token.refresh_token;\n saveConfig(config);\n console.log(`${col(c.dim, ` Config saved to ${CONFIG_PATH}`)}`);\n } catch (err) {\n spinner.stop();\n die(`Login failed: ${err instanceof Error ? err.message : String(err)}`);\n }\n}\n\nasync function cmdSearch(args: ParsedArgs): Promise<void> {\n if (args.flags[\"help\"]) {\n console.log(`\n${col(c.bold, \"Usage:\")} sc-cli search <query> [--json]\n\n${col(c.bold, \"Examples:\")}\n sc-cli search \"lofi hip hop\"\n sc-cli search deadmau5 --json\n`);\n return;\n }\n\n const query = args.positional.join(\" \");\n if (!query) die(\"Usage: sc-cli search <query>\");\n\n const config = loadConfig();\n const client = getClient(config);\n await ensureToken(client, config);\n\n const spinner = createSpinner(`Searching \"${query}\"…`);\n const results = await client.search.tracks(query);\n spinner.stop();\n\n if (args.flags[\"json\"]) {\n console.log(JSON.stringify(results.collection, null, 2));\n return;\n }\n\n if (!results.collection.length) {\n console.log(`\\n${col(c.yellow, \"No results found.\")}`);\n return;\n }\n\n console.log(`\\n${col(c.bold + c.cyan, `⚡ Search results for \"${query}\"`)}\\n`);\n console.log(\n ` ${col(c.dim, padRight(\"#\", 4))}${col(c.dim, padRight(\"Title\", 40))}${col(c.dim, padRight(\"Artist\", 24))}${col(c.dim, padRight(\"Duration\", 10))}${col(c.dim, \"Plays\")}`,\n );\n console.log(` ${col(c.dim, \"─\".repeat(90))}`);\n\n results.collection.forEach((track, i) => {\n const num = padRight(`${i + 1}`, 4);\n const title = padRight(truncate(track.title ?? \"Untitled\", 38), 40);\n const artist = padRight(truncate(track.user?.username ?? \"Unknown\", 22), 24);\n const duration = padRight(formatDuration(track.duration ?? 0), 10);\n const plays = formatNumber(track.playback_count);\n console.log(` ${col(c.dim, num)}${col(c.white, title)}${col(c.magenta, artist)}${col(c.yellow, duration)}${col(c.green, plays)}`);\n });\n console.log();\n}\n\nasync function cmdTrack(args: ParsedArgs): Promise<void> {\n if (args.flags[\"help\"]) {\n console.log(`\n${col(c.bold, \"Usage:\")} sc-cli track <id> [--json]\n\n${col(c.bold, \"Examples:\")}\n sc-cli track 123456\n sc-cli track 123456 --json\n`);\n return;\n }\n\n const id = args.positional[0];\n if (!id) die(\"Usage: sc-cli track <id>\");\n\n const config = loadConfig();\n const client = getClient(config);\n await ensureToken(client, config);\n\n const spinner = createSpinner(\"Fetching track…\");\n const track = await client.tracks.getTrack(id);\n spinner.stop();\n\n if (args.flags[\"json\"]) {\n console.log(JSON.stringify(track, null, 2));\n return;\n }\n\n console.log(`\\n${col(c.bold + c.cyan, \"⚡ Track Details\")}\\n`);\n console.log(` ${col(c.dim, \"Title:\")} ${col(c.bold + c.white, track.title ?? \"Untitled\")}`);\n console.log(` ${col(c.dim, \"Artist:\")} ${col(c.magenta, track.user?.username ?? \"Unknown\")}`);\n console.log(` ${col(c.dim, \"Duration:\")} ${col(c.yellow, formatDuration(track.duration ?? 0))}`);\n console.log(` ${col(c.dim, \"Plays:\")} ${col(c.green, formatNumber(track.playback_count))}`);\n console.log(` ${col(c.dim, \"Likes:\")} ${col(c.green, formatNumber(track.favoritings_count))}`);\n console.log(` ${col(c.dim, \"Genre:\")} ${track.genre ?? \"-\"}`);\n console.log(` ${col(c.dim, \"Created:\")} ${track.created_at ?? \"-\"}`);\n console.log(` ${col(c.dim, \"URL:\")} ${col(c.blue, track.permalink_url ?? \"-\")}`);\n console.log();\n}\n\nasync function cmdUser(args: ParsedArgs): Promise<void> {\n if (args.flags[\"help\"]) {\n console.log(`\n${col(c.bold, \"Usage:\")} sc-cli user <id> [--json]\n\n${col(c.bold, \"Examples:\")}\n sc-cli user 123456\n`);\n return;\n }\n\n const id = args.positional[0];\n if (!id) die(\"Usage: sc-cli user <id>\");\n\n const config = loadConfig();\n const client = getClient(config);\n await ensureToken(client, config);\n\n const spinner = createSpinner(\"Fetching user…\");\n const user = await client.users.getUser(id);\n spinner.stop();\n\n if (args.flags[\"json\"]) {\n console.log(JSON.stringify(user, null, 2));\n return;\n }\n\n console.log(`\\n${col(c.bold + c.cyan, \"⚡ User Profile\")}\\n`);\n console.log(` ${col(c.dim, \"Username:\")} ${col(c.bold + c.white, user.username ?? \"Unknown\")}`);\n console.log(` ${col(c.dim, \"Followers:\")} ${col(c.green, formatNumber(user.followers_count))}`);\n console.log(` ${col(c.dim, \"Following:\")} ${col(c.green, formatNumber(user.followings_count))}`);\n console.log(` ${col(c.dim, \"Tracks:\")} ${col(c.yellow, formatNumber(user.track_count))}`);\n console.log(` ${col(c.dim, \"City:\")} ${user.city ?? \"-\"}`);\n console.log(` ${col(c.dim, \"URL:\")} ${col(c.blue, user.permalink_url ?? \"-\")}`);\n console.log();\n}\n\nasync function cmdPlaylist(args: ParsedArgs): Promise<void> {\n if (args.flags[\"help\"]) {\n console.log(`\n${col(c.bold, \"Usage:\")} sc-cli playlist <id> [--json]\n\n${col(c.bold, \"Examples:\")}\n sc-cli playlist 123456\n`);\n return;\n }\n\n const id = args.positional[0];\n if (!id) die(\"Usage: sc-cli playlist <id>\");\n\n const config = loadConfig();\n const client = getClient(config);\n await ensureToken(client, config);\n\n const spinner = createSpinner(\"Fetching playlist…\");\n const playlist = await client.playlists.getPlaylist(id);\n spinner.stop();\n\n if (args.flags[\"json\"]) {\n console.log(JSON.stringify(playlist, null, 2));\n return;\n }\n\n console.log(`\\n${col(c.bold + c.cyan, \"⚡ Playlist\")}\\n`);\n console.log(` ${col(c.dim, \"Title:\")} ${col(c.bold + c.white, playlist.title ?? \"Untitled\")}`);\n console.log(` ${col(c.dim, \"By:\")} ${col(c.magenta, playlist.user?.username ?? \"Unknown\")}`);\n console.log(` ${col(c.dim, \"Tracks:\")} ${playlist.track_count ?? 0}`);\n console.log(` ${col(c.dim, \"Duration:\")} ${col(c.yellow, formatDuration(playlist.duration ?? 0))}`);\n console.log(` ${col(c.dim, \"URL:\")} ${col(c.blue, playlist.permalink_url ?? \"-\")}`);\n\n if (playlist.tracks?.length) {\n console.log(`\\n ${col(c.bold, \"Track listing:\")}\\n`);\n playlist.tracks.forEach((track, i) => {\n const num = padRight(`${i + 1}.`, 5);\n const title = truncate(track.title ?? \"Untitled\", 45);\n const dur = formatDuration(track.duration ?? 0);\n console.log(` ${col(c.dim, num)}${title} ${col(c.dim, `(${dur})`)}`);\n });\n }\n console.log();\n}\n\nasync function cmdStream(args: ParsedArgs): Promise<void> {\n if (args.flags[\"help\"]) {\n console.log(`\n${col(c.bold, \"Usage:\")} sc-cli stream <id> [--json]\n\n${col(c.bold, \"Examples:\")}\n sc-cli stream 123456\n`);\n return;\n }\n\n const id = args.positional[0];\n if (!id) die(\"Usage: sc-cli stream <id>\");\n\n const config = loadConfig();\n const client = getClient(config);\n await ensureToken(client, config);\n\n const spinner = createSpinner(\"Getting stream URLs…\");\n const streams = await client.tracks.getStreams(id);\n spinner.stop();\n\n if (args.flags[\"json\"]) {\n console.log(JSON.stringify(streams, null, 2));\n return;\n }\n\n console.log(`\\n${col(c.bold + c.cyan, \"⚡ Stream URLs\")}\\n`);\n const entries = Object.entries(streams).filter(([, v]) => v);\n if (!entries.length) {\n console.log(` ${col(c.yellow, \"No stream URLs available.\")}`);\n } else {\n for (const [key, url] of entries) {\n const label = key.replace(/_url$/, \"\").replace(/_/g, \" \").toUpperCase();\n console.log(` ${col(c.dim, padRight(label + \":\", 28))}${col(c.blue, String(url))}`);\n }\n }\n console.log();\n}\n\nasync function cmdResolve(args: ParsedArgs): Promise<void> {\n if (args.flags[\"help\"]) {\n console.log(`\n${col(c.bold, \"Usage:\")} sc-cli resolve <url> [--json]\n\n${col(c.bold, \"Examples:\")}\n sc-cli resolve https://soundcloud.com/artist/track\n`);\n return;\n }\n\n const url = args.positional[0];\n if (!url) die(\"Usage: sc-cli resolve <url>\");\n\n const config = loadConfig();\n const client = getClient(config);\n await ensureToken(client, config);\n\n const spinner = createSpinner(\"Resolving URL…\");\n const result = await client.resolve.resolveUrl(url);\n spinner.stop();\n\n if (args.flags[\"json\"]) {\n console.log(JSON.stringify(result, null, 2));\n return;\n }\n\n console.log(`\\n${col(c.green, \"✔\")} Resolved:\\n`);\n if (typeof result === \"string\") {\n console.log(` ${col(c.blue, result)}`);\n } else {\n console.log(JSON.stringify(result, null, 2));\n }\n console.log();\n}\n\nasync function cmdMe(args: ParsedArgs): Promise<void> {\n if (args.flags[\"help\"]) {\n console.log(`\n${col(c.bold, \"Usage:\")} sc-cli me [--json]\n\nShows the authenticated user's profile. Requires \\`sc-cli login\\` first.\n`);\n return;\n }\n\n const config = loadConfig();\n const client = getClient(config);\n if (!client.accessToken) {\n die(\"Not logged in. Run `sc-cli login` first.\");\n }\n\n const spinner = createSpinner(\"Fetching profile…\");\n const me = await client.me.getMe();\n spinner.stop();\n\n if (args.flags[\"json\"]) {\n console.log(JSON.stringify(me, null, 2));\n return;\n }\n\n console.log(`\\n${col(c.bold + c.cyan, \"⚡ Your Profile\")}\\n`);\n console.log(` ${col(c.dim, \"Username:\")} ${col(c.bold + c.white, me.username ?? \"Unknown\")}`);\n console.log(` ${col(c.dim, \"Followers:\")} ${col(c.green, formatNumber(me.followers_count))}`);\n console.log(` ${col(c.dim, \"Following:\")} ${col(c.green, formatNumber(me.followings_count))}`);\n console.log(` ${col(c.dim, \"Tracks:\")} ${col(c.yellow, formatNumber(me.track_count))}`);\n console.log(` ${col(c.dim, \"City:\")} ${me.city ?? \"-\"}`);\n console.log(` ${col(c.dim, \"Plan:\")} ${me.quota?.unlimited_upload_quota ? \"Pro\" : \"Free\"}`);\n console.log(` ${col(c.dim, \"URL:\")} ${col(c.blue, me.permalink_url ?? \"-\")}`);\n console.log();\n}\n\nasync function cmdLikes(args: ParsedArgs): Promise<void> {\n if (args.flags[\"help\"]) {\n console.log(`\n${col(c.bold, \"Usage:\")} sc-cli likes [--json]\n\nShows your liked tracks. Requires \\`sc-cli login\\` first.\n`);\n return;\n }\n\n const config = loadConfig();\n const client = getClient(config);\n if (!client.accessToken) {\n die(\"Not logged in. Run `sc-cli login` first.\");\n }\n\n const spinner = createSpinner(\"Fetching likes…\");\n const likes = await client.me.getLikesTracks(20);\n spinner.stop();\n\n if (args.flags[\"json\"]) {\n console.log(JSON.stringify(likes.collection, null, 2));\n return;\n }\n\n if (!likes.collection.length) {\n console.log(`\\n${col(c.yellow, \"No liked tracks.\")}`);\n return;\n }\n\n console.log(`\\n${col(c.bold + c.cyan, \"⚡ Your Liked Tracks\")}\\n`);\n console.log(\n ` ${col(c.dim, padRight(\"#\", 4))}${col(c.dim, padRight(\"Title\", 40))}${col(c.dim, padRight(\"Artist\", 24))}${col(c.dim, \"Duration\")}`,\n );\n console.log(` ${col(c.dim, \"─\".repeat(80))}`);\n\n likes.collection.forEach((track, i) => {\n const num = padRight(`${i + 1}`, 4);\n const title = padRight(truncate(track.title ?? \"Untitled\", 38), 40);\n const artist = padRight(truncate(track.user?.username ?? \"Unknown\", 22), 24);\n const duration = formatDuration(track.duration ?? 0);\n console.log(` ${col(c.dim, num)}${col(c.white, title)}${col(c.magenta, artist)}${col(c.yellow, duration)}`);\n });\n console.log();\n}\n\n// ── Play Command ─────────────────────────────────────────────────────────────\n\nconst isWindows = process.platform === \"win32\";\n\n/** Detect an available audio player binary */\nfunction detectPlayer(): string | null {\n const candidates = isWindows ? [\"mpv\", \"ffplay\"] : [\"mpv\", \"ffplay\", \"afplay\"];\n const whichCmd = isWindows ? \"where.exe\" : \"command -v\";\n for (const bin of candidates) {\n try {\n execSync(`${whichCmd} ${bin}`, { stdio: \"ignore\" });\n return bin;\n } catch {\n // not found, try next\n }\n }\n return null;\n}\n\n/** IPC socket path for mpv (shared between playerArgs and cmdPlay) */\nconst mpvSocketPath = isWindows ? \"\\\\\\\\.\\\\pipe\\\\sc-cli-mpv\" : path.join(os.tmpdir(), \"sc-cli-mpv.sock\");\n\n/** Build player args (suppress visual output where possible) */\nfunction playerArgs(bin: string, filePath: string): string[] {\n switch (bin) {\n case \"mpv\":\n return [\"--no-video\", \"--no-terminal\", `--input-ipc-server=${mpvSocketPath}`, filePath];\n case \"ffplay\":\n return [\"-nodisp\", \"-autoexit\", \"-loglevel\", \"quiet\", filePath];\n case \"afplay\":\n return [filePath];\n default:\n return [filePath];\n }\n}\n\nasync function cmdPlay(args: ParsedArgs): Promise<void> {\n if (args.flags[\"help\"]) {\n console.log(`\n${col(c.bold, \"Usage:\")} sc-cli play <id> [--url] [--json]\n\nPlay a SoundCloud track in your terminal.\n\n${col(c.bold, \"Options:\")}\n ${col(c.yellow, \"--url\")} Print the best stream URL and exit\n ${col(c.yellow, \"--json\")} Print raw stream URLs JSON and exit\n\n${col(c.bold, \"Examples:\")}\n sc-cli play 123456\n sc-cli play 123456 --url\n`);\n return;\n }\n\n const id = args.positional[0];\n if (!id) die(\"Usage: sc-cli play <track-id>\");\n\n const config = loadConfig();\n const client = getClient(config);\n await ensureToken(client, config);\n\n // Fetch track info and streams in parallel\n const spinner = createSpinner(\"Fetching track…\");\n const [track, streams] = await Promise.all([\n client.tracks.getTrack(id),\n client.tracks.getStreams(id),\n ]);\n spinner.stop();\n\n // --json: dump raw stream URLs\n if (args.flags[\"json\"]) {\n console.log(JSON.stringify(streams, null, 2));\n return;\n }\n\n // Pick best stream URL\n const streamUrl =\n streams.http_mp3_128_url ||\n streams.hls_mp3_128_url ||\n streams.hls_aac_160_url ||\n streams.preview_mp3_128_url;\n\n if (!streamUrl) die(\"No stream URL available for this track.\");\n\n // --url: just print and exit\n if (args.flags[\"url\"]) {\n console.log(streamUrl);\n return;\n }\n\n // Detect player\n const playerBin = detectPlayer();\n if (!playerBin) die(\"No audio player found. Install mpv, ffplay, or afplay.\");\n\n // Show track header\n const title = track.title ?? \"Untitled\";\n const artist = track.user?.username ?? \"Unknown\";\n const durationMs = track.duration ?? 0;\n const durationStr = formatDuration(durationMs);\n\n console.log(`\\n${col(c.bold + c.cyan, \"⚡ Now Playing\")}\\n`);\n console.log(` ${col(c.dim, \"Title:\")} ${col(c.bold + c.white, title)}`);\n console.log(` ${col(c.dim, \"Artist:\")} ${col(c.magenta, artist)}`);\n console.log(` ${col(c.dim, \"Duration:\")} ${col(c.yellow, durationStr)}`);\n console.log(` ${col(c.dim, \"Player:\")} ${playerBin}\\n`);\n\n // Download to temp file\n const tmpFile = path.join(os.tmpdir(), `sc-play-${id}-${Date.now()}.mp3`);\n const dlSpinner = createSpinner(\"Downloading stream…\");\n try {\n const resp = await fetch(streamUrl, {\n headers: { Authorization: `OAuth ${client.accessToken}` },\n });\n if (!resp.ok) die(`Download failed: HTTP ${resp.status}`);\n const buffer = Buffer.from(await resp.arrayBuffer());\n fs.writeFileSync(tmpFile, buffer);\n } catch (err) {\n dlSpinner.stop();\n die(`Download failed: ${err instanceof Error ? err.message : String(err)}`);\n }\n dlSpinner.stop();\n\n // Spawn player\n const totalSec = Math.floor(durationMs / 1000);\n let player: ChildProcess | null = null;\n let progressTimer: ReturnType<typeof setInterval> | null = null;\n let startTime = Date.now();\n const usesMpv = playerBin === \"mpv\";\n\n // Restore terminal state helper\n const restoreStdin = () => {\n if (process.stdin.isTTY) {\n process.stdin.setRawMode(false);\n process.stdin.pause();\n }\n };\n\n // Cleanup helper\n const cleanup = () => {\n if (progressTimer) { clearInterval(progressTimer); progressTimer = null; }\n restoreStdin();\n process.stdout.write(\"\\n\");\n if (player && !player.killed) player.kill();\n try { fs.unlinkSync(tmpFile); } catch { /* ignore */ }\n if (usesMpv) try { fs.unlinkSync(mpvSocketPath); } catch { /* ignore */ }\n };\n\n // Handle Ctrl+C\n const onSigint = () => { cleanup(); process.exit(0); };\n process.on(\"SIGINT\", onSigint);\n\n return new Promise<void>((resolve) => {\n player = spawn(playerBin, playerArgs(playerBin, tmpFile), { stdio: \"ignore\" });\n startTime = Date.now();\n let paused = false;\n let pausedAt = 0; // total ms spent paused\n let pauseStart = 0;\n\n // Live progress bar\n const barWidth = 30;\n const drawProgress = () => {\n const pauseOffset = paused ? Date.now() - pauseStart : 0;\n const elapsed = Math.floor((Date.now() - startTime - pausedAt - pauseOffset) / 1000);\n const capped = Math.min(Math.max(elapsed, 0), totalSec);\n const ratio = totalSec > 0 ? capped / totalSec : 0;\n const filled = Math.round(ratio * barWidth);\n const empty = barWidth - filled;\n const bar = \"█\".repeat(filled) + \"░\".repeat(empty);\n const elapsedStr = formatDuration(capped * 1000);\n const icon = paused ? col(c.yellow, \"⏸\") : col(c.green, \"▶\");\n process.stdout.write(`\\r ${icon} [${col(c.cyan, bar)}] ${elapsedStr} / ${durationStr} `);\n };\n drawProgress(); // draw immediately\n progressTimer = setInterval(drawProgress, 1000);\n\n // Keyboard controls\n // afplay has no pause support; ffplay on Windows can't use SIGSTOP/SIGCONT\n const supportsPause = playerBin === \"mpv\" || (playerBin === \"ffplay\" && !isWindows);\n\n const sendMpvCommand = (cmd: string[]) => {\n if (!usesMpv) return;\n try {\n const sock = net.createConnection(mpvSocketPath);\n sock.on(\"error\", () => { /* ignore connection errors */ });\n sock.write(JSON.stringify({ command: cmd }) + \"\\n\");\n sock.end();\n } catch { /* ignore */ }\n };\n\n if (process.stdin.isTTY) {\n process.stdin.setRawMode(true);\n process.stdin.resume();\n process.stdin.on(\"data\", (key: Buffer) => {\n const ch = key.toString();\n if (ch === \" \" && supportsPause && player && !player.killed) {\n if (usesMpv) {\n // Toggle pause via mpv IPC\n sendMpvCommand([\"cycle\", \"pause\"]);\n } else {\n // Signal-based fallback for ffplay\n if (paused) player.kill(\"SIGCONT\");\n else player.kill(\"SIGSTOP\");\n }\n if (paused) {\n pausedAt += Date.now() - pauseStart;\n paused = false;\n } else {\n pauseStart = Date.now();\n paused = true;\n }\n drawProgress();\n } else if (ch === \"q\" || ch === \"\\x03\") {\n // q or Ctrl+C\n if (usesMpv) sendMpvCommand([\"quit\"]);\n cleanup();\n process.removeListener(\"SIGINT\", onSigint);\n process.exit(0);\n }\n });\n }\n\n const controlHint = supportsPause ? \"[space] pause/play [q] quit\" : \"[q] quit\";\n console.log(` ${col(c.dim, controlHint)}\\n`);\n\n player.on(\"close\", () => {\n cleanup();\n process.removeListener(\"SIGINT\", onSigint);\n console.log(`\\n${col(c.green, \"✔\")} Playback complete.`);\n resolve();\n });\n\n player.on(\"error\", (err) => {\n cleanup();\n process.removeListener(\"SIGINT\", onSigint);\n die(`Player error: ${err.message}`);\n });\n });\n}\n\nfunction showHelp(): void {\n console.log(`\n${col(c.bold + c.cyan, \"⚡ sc-cli\")} ${col(c.dim, \"— Explore the SoundCloud API from your terminal\")}\n\n${col(c.bold, \"Usage:\")} sc-cli <command> [options]\n\n${col(c.bold, \"Setup:\")}\n ${col(c.green, \"auth\")} Set up API credentials (client_id + client_secret)\n ${col(c.green, \"login\")} Log in via OAuth (opens browser)\n\n${col(c.bold, \"Commands:\")}\n ${col(c.green, \"search\")} <query> Search tracks\n ${col(c.green, \"track\")} <id> Show track details\n ${col(c.green, \"user\")} <id> Show user profile\n ${col(c.green, \"playlist\")} <id> Show playlist with track listing\n ${col(c.green, \"play\")} <id> Play a track in your terminal\n ${col(c.green, \"stream\")} <id> Get stream URLs for a track\n ${col(c.green, \"resolve\")} <url> Resolve a SoundCloud URL\n ${col(c.green, \"me\")} Show your profile (requires login)\n ${col(c.green, \"likes\")} Show your liked tracks (requires login)\n\n${col(c.bold, \"Options:\")}\n ${col(c.yellow, \"--json\")} Output raw JSON (works on all commands)\n ${col(c.yellow, \"--help\")} Show help for a command\n\n${col(c.bold, \"Examples:\")}\n ${col(c.dim, \"$\")} sc-cli auth\n ${col(c.dim, \"$\")} sc-cli search \"lofi beats\"\n ${col(c.dim, \"$\")} sc-cli play 293\n ${col(c.dim, \"$\")} sc-cli track 293 --json\n ${col(c.dim, \"$\")} sc-cli resolve https://soundcloud.com/artist/track\n ${col(c.dim, \"$\")} sc-cli login\n ${col(c.dim, \"$\")} sc-cli me\n\n${col(c.dim, \"Config:\")} ${CONFIG_PATH}\n${col(c.dim, \"Powered by\")} soundcloud-api-ts\n`);\n}\n\n// ── Main ─────────────────────────────────────────────────────────────────────\n\nasync function main(): Promise<void> {\n const args = parseArgs(process.argv);\n\n if (args.flags[\"help\"] && ![\"search\", \"track\", \"user\", \"playlist\", \"play\", \"stream\", \"resolve\", \"me\", \"likes\"].includes(args.command)) {\n showHelp();\n return;\n }\n\n try {\n switch (args.command) {\n case \"help\":\n showHelp();\n break;\n case \"auth\":\n await cmdAuth();\n break;\n case \"login\":\n await cmdLogin();\n break;\n case \"search\":\n await cmdSearch(args);\n break;\n case \"track\":\n await cmdTrack(args);\n break;\n case \"user\":\n await cmdUser(args);\n break;\n case \"playlist\":\n await cmdPlaylist(args);\n break;\n case \"play\":\n await cmdPlay(args);\n break;\n case \"stream\":\n await cmdStream(args);\n break;\n case \"resolve\":\n await cmdResolve(args);\n break;\n case \"me\":\n await cmdMe(args);\n break;\n case \"likes\":\n await cmdLikes(args);\n break;\n default:\n console.error(`\\n${col(c.red, \"✖\")} Unknown command: ${args.command}`);\n showHelp();\n process.exit(1);\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n die(message);\n }\n}\n\nmain();\n"]}
package/dist/cli.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { generateCodeVerifier, generateCodeChallenge, SoundCloudClient } from './chunk-B3OPPWJN.mjs';
2
+ import { generateCodeVerifier, generateCodeChallenge, SoundCloudClient } from './chunk-4FNI5QIN.mjs';
3
3
  import './chunk-QYYEWUIJ.mjs';
4
4
  import * as readline from 'readline';
5
5
  import * as http from 'http';
@@ -176,10 +176,10 @@ ${col(c.bold + c.cyan, "\u26A1 SoundCloud OAuth Login")}
176
176
  `);
177
177
  console.log(` ${col(c.blue, authUrl)}
178
178
  `);
179
- const openCmd = process.platform === "darwin" ? "open" : process.platform === "win32" ? "start" : "xdg-open";
179
+ const openCmd = process.platform === "darwin" ? `open "${authUrl}"` : process.platform === "win32" ? `start "" "${authUrl}"` : `xdg-open "${authUrl}"`;
180
180
  try {
181
181
  const { exec: cpExec } = await import('child_process');
182
- cpExec(`${openCmd} "${authUrl}"`);
182
+ cpExec(openCmd);
183
183
  } catch {
184
184
  }
185
185
  console.log(`${col(c.dim, " Waiting for callback on http://localhost:8976/callback \u2026")}