@so-me/cli 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +170 -0
- package/dist/bin/so-me.js +2727 -0
- package/dist/bin/so-me.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +2718 -0
- package/dist/index.js.map +1 -0
- package/package.json +51 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/commands/auth.ts","../../src/lib/config.ts","../../src/commands/posts.ts","../../src/lib/api.ts","../../src/lib/output.ts","../../src/commands/accounts.ts","../../src/commands/media.ts","../../src/commands/analytics.ts","../../src/commands/inbox.ts","../../src/commands/approvals.ts","../../src/commands/teams.ts","../../src/commands/biolink.ts","../../src/commands/settings.ts","../../src/commands/drafts.ts","../../bin/so-me.ts"],"sourcesContent":["import { Command } from 'commander';\nimport { registerAuthCommands } from './commands/auth.js';\nimport { registerPostsCommands } from './commands/posts.js';\nimport { registerAccountsCommands } from './commands/accounts.js';\nimport { registerMediaCommands } from './commands/media.js';\nimport { registerAnalyticsCommands } from './commands/analytics.js';\nimport { registerInboxCommands } from './commands/inbox.js';\nimport { registerApprovalsCommands } from './commands/approvals.js';\nimport { registerTeamsCommands } from './commands/teams.js';\nimport { registerBiolinkCommands } from './commands/biolink.js';\nimport { registerSettingsCommands } from './commands/settings.js';\nimport { registerDraftsCommands } from './commands/drafts.js';\n\nexport function createProgram(): Command {\n const program = new Command();\n\n program\n .name('so-me')\n .description('CLI tool for so-me social media scheduler')\n .version('0.1.0')\n .option('--api-key <key>', 'API key (overrides stored credentials)')\n .option('--api-url <url>', 'API base URL (overrides stored config)')\n .option('--json', 'Output as JSON (default)', true)\n .option('--table', 'Output as table')\n .option('--verbose', 'Show detailed error information');\n\n program.addHelpText('after', `\nExamples:\n $ so-me auth:login --api-key sk_live_xxx Save API key\n $ so-me auth:login Login via browser\n $ so-me posts:list List all posts (JSON)\n $ so-me posts:list --table List all posts (table)\n $ so-me posts:create -c \"Hello!\" --platform TWITTER\n $ so-me media:upload ./image.png Upload a file\n $ so-me analytics:platform acc-123 --days 30\n\nEnvironment variables:\n SOME_API_KEY API key (alternative to --api-key flag)\n SOME_API_URL API base URL (default: http://localhost:8000)\n`);\n\n registerAuthCommands(program);\n registerPostsCommands(program);\n registerAccountsCommands(program);\n registerMediaCommands(program);\n registerAnalyticsCommands(program);\n registerInboxCommands(program);\n registerApprovalsCommands(program);\n registerTeamsCommands(program);\n registerBiolinkCommands(program);\n registerSettingsCommands(program);\n registerDraftsCommands(program);\n\n return program;\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport axios from 'axios';\nimport { getConfig, setConfig, clearConfig, getApiKey, getApiUrl } from '../lib/config.js';\n\nasync function deviceFlow(apiUrl: string): Promise<void> {\n const spinner = ora('Starting device authorization...').start();\n\n try {\n // Step 1: Request device code\n const { data } = await axios.post(`${apiUrl}/auth/device/code`);\n spinner.stop();\n\n const { device_code, user_code, verification_uri, expires_in, interval } = data;\n\n console.log();\n console.log(chalk.bold(' To authenticate, open this URL in your browser:'));\n console.log();\n console.log(` ${chalk.cyan(verification_uri)}`);\n console.log();\n console.log(chalk.bold(' And enter this code:'));\n console.log();\n console.log(` ${chalk.yellow.bold(user_code)}`);\n console.log();\n console.log(chalk.dim(` Code expires in ${Math.floor(expires_in / 60)} minutes.`));\n console.log();\n\n // Try to open browser\n try {\n const open = await import('open');\n await open.default(verification_uri);\n console.log(chalk.dim(' Browser opened automatically.'));\n } catch {\n // Browser open is best-effort\n }\n\n // Step 2: Poll for authorization\n const pollSpinner = ora('Waiting for authorization...').start();\n const pollInterval = (interval || 5) * 1000;\n const deadline = Date.now() + expires_in * 1000;\n\n while (Date.now() < deadline) {\n await new Promise((resolve) => setTimeout(resolve, pollInterval));\n\n try {\n const { data: tokenData } = await axios.post(`${apiUrl}/auth/device/token`, {\n device_code,\n });\n\n if (tokenData.status === 'authorized') {\n pollSpinner.succeed('Device authorized!');\n console.log();\n console.log(chalk.green(` Logged in as ${tokenData.email}`));\n\n if (tokenData.api_key) {\n // Store API key for CLI usage\n setConfig({ apiKey: tokenData.api_key });\n console.log(chalk.dim(' API key generated and saved.'));\n } else {\n console.log(chalk.yellow(' Warning: Could not generate API key.'));\n console.log(chalk.dim(' Your plan may not support API access (Scale plan required).'));\n console.log(chalk.dim(' Use \"so-me auth:login --api-key <key>\" with a manually created key.'));\n }\n\n console.log(chalk.dim(' Run \"so-me auth:status\" to verify.'));\n return;\n }\n // status === 'authorization_pending' — keep polling\n } catch (error: any) {\n const status = error?.response?.status;\n if (status === 400) {\n const msg = error?.response?.data?.message;\n if (msg?.includes('expired') || msg?.includes('invalid')) {\n pollSpinner.fail('Device code expired');\n console.log(chalk.dim(' Run \"so-me auth:login\" to try again.'));\n process.exitCode = 1;\n return;\n }\n }\n // Other errors — keep polling\n }\n }\n\n pollSpinner.fail('Authorization timed out');\n console.log(chalk.dim(' Run \"so-me auth:login\" to try again.'));\n process.exitCode = 1;\n } catch (error: any) {\n spinner.fail('Failed to start device authorization');\n const msg = error?.response?.data?.message || error?.message || 'Unknown error';\n console.error(chalk.red(` ${msg}`));\n process.exitCode = 1;\n }\n}\n\nexport function registerAuthCommands(program: Command): void {\n program\n .command('auth:login')\n .description('Authenticate with the API')\n .option('--api-key <key>', 'API key to store')\n .action(async function (opts) {\n // Commander may route --api-key to the parent program when both define the same option\n const apiKey = opts.apiKey ?? (this as Command).parent?.opts()?.apiKey;\n if (apiKey) {\n opts = { ...opts, apiKey };\n }\n if (opts.apiKey) {\n setConfig({ apiKey: opts.apiKey });\n console.log(chalk.green('API key saved successfully.'));\n console.log(chalk.dim('Run \"so-me auth:status\" to verify.'));\n return;\n }\n\n // OAuth2 device flow\n const globalOpts = program.opts();\n const apiUrl = getApiUrl(globalOpts.apiUrl);\n await deviceFlow(apiUrl);\n });\n\n program\n .command('auth:status')\n .description('Show current authentication status')\n .action(async () => {\n const apiKey = getApiKey();\n const apiUrl = getApiUrl();\n\n if (!apiKey) {\n console.log(chalk.yellow('Not authenticated.'));\n console.log(chalk.dim('Run \"so-me auth:login --api-key <key>\" to authenticate.'));\n return;\n }\n\n const maskedKey = apiKey.slice(0, 12) + '...' + apiKey.slice(-4);\n console.log(chalk.green('Authenticated'));\n console.log(` API Key: ${maskedKey}`);\n console.log(` API URL: ${apiUrl}`);\n\n const config = getConfig();\n if (config.defaultWorkspace) {\n console.log(` Workspace: ${config.defaultWorkspace}`);\n }\n });\n\n program\n .command('auth:logout')\n .description('Remove stored credentials')\n .action(async () => {\n clearConfig();\n console.log(chalk.green('Logged out. Credentials removed.'));\n });\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport os from 'node:os';\n\nexport interface CliConfig {\n apiKey?: string;\n accessToken?: string;\n refreshToken?: string;\n apiUrl?: string;\n outputFormat?: 'json' | 'table';\n defaultWorkspace?: string;\n}\n\nconst DEFAULT_CONFIG: CliConfig = {\n apiUrl: 'http://localhost:8000',\n outputFormat: 'json',\n};\n\nfunction getConfigDir(): string {\n return process.env.SOME_CONFIG_DIR || path.join(os.homedir(), '.so-me');\n}\n\nfunction getConfigPath(): string {\n return path.join(getConfigDir(), 'config.json');\n}\n\nexport function getConfig(): CliConfig {\n const configPath = getConfigPath();\n if (!fs.existsSync(configPath)) {\n return { ...DEFAULT_CONFIG };\n }\n const raw = fs.readFileSync(configPath, 'utf-8');\n return { ...DEFAULT_CONFIG, ...JSON.parse(raw) };\n}\n\nexport function setConfig(partial: Partial<CliConfig>): void {\n const configDir = getConfigDir();\n if (!fs.existsSync(configDir)) {\n fs.mkdirSync(configDir, { recursive: true, mode: 0o700 });\n }\n const current = getConfig();\n const updated = { ...current, ...partial };\n fs.writeFileSync(getConfigPath(), JSON.stringify(updated, null, 2), {\n mode: 0o600,\n });\n}\n\nexport function clearConfig(): void {\n const configPath = getConfigPath();\n if (fs.existsSync(configPath)) {\n fs.unlinkSync(configPath);\n }\n}\n\nexport function getApiKey(flagValue?: string): string | undefined {\n if (flagValue) return flagValue;\n if (process.env.SOME_API_KEY) return process.env.SOME_API_KEY;\n return getConfig().apiKey;\n}\n\nexport function getApiUrl(flagValue?: string): string {\n if (flagValue) return flagValue;\n if (process.env.SOME_API_URL) return process.env.SOME_API_URL;\n return getConfig().apiUrl || DEFAULT_CONFIG.apiUrl!;\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { createInterface } from 'readline';\nimport { createApiClient, ApiError } from '../lib/api.js';\nimport { getConfig } from '../lib/config.js';\nimport { printOutput, printError, OutputFormat } from '../lib/output.js';\n\nfunction getFormat(program: Command): OutputFormat {\n const opts = program.opts();\n if (opts.table) return 'table';\n return getConfig().outputFormat || 'json';\n}\n\nfunction getGlobalOpts(program: Command) {\n return program.opts() as { apiKey?: string; apiUrl?: string; verbose?: boolean };\n}\n\nfunction askQuestion(question: string): Promise<string> {\n const rl = 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\nasync function resolveAccountForPlatform(client: any, platform: string): Promise<any | null> {\n const { data: accounts } = await client.get('/v1/accounts');\n const matches = accounts.filter(\n (a: any) => a.platform === platform.toUpperCase(),\n );\n if (matches.length === 0) {\n console.error(chalk.red(`No ${platform} account found. Connect one first.`));\n return null;\n }\n if (matches.length === 1) return matches[0];\n console.log(chalk.bold(` Found ${matches.length} ${platform} accounts:`));\n console.log();\n matches.forEach((a: any, i: number) => {\n const name = a.accountName || a.userName || a.accountId;\n console.log(` ${chalk.cyan(String(i + 1))}. ${name}`);\n });\n console.log();\n const answer = await askQuestion(` Select account (1-${matches.length}): `);\n const index = parseInt(answer, 10) - 1;\n if (isNaN(index) || index < 0 || index >= matches.length) {\n console.log(chalk.yellow(' Invalid selection. Cancelled.'));\n return null;\n }\n return matches[index];\n}\n\nexport function registerPostsCommands(program: Command): void {\n program\n .command('posts:list')\n .description('List posts')\n .option('--start-date <date>', 'Filter by start date (ISO 8601)')\n .option('--end-date <date>', 'Filter by end date (ISO 8601)')\n .option('--status <status>', 'Filter by status')\n .option('--platform <platform>', 'Filter by platform (e.g. TWITTER, LINKEDIN)')\n .option('--page <number>', 'Page number', '1')\n .option('--limit <number>', 'Items per page', '20')\n .action(async (opts) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Fetching posts...').start();\n\n try {\n const params: Record<string, unknown> = {\n page: parseInt(opts.page),\n limit: parseInt(opts.limit),\n };\n if (opts.startDate) params.startDate = opts.startDate;\n if (opts.endDate) params.endDate = opts.endDate;\n if (opts.status) params.status = opts.status;\n if (opts.platform) params.socialMedia = opts.platform;\n\n const { data } = await client.get('/v1/posts', { params });\n spinner.stop();\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to fetch posts');\n printError(error);\n if (globalOpts.verbose && error instanceof Error) {\n console.error(error.stack);\n }\n process.exitCode = 1;\n }\n });\n\n program\n .command('posts:get')\n .description('Get a single post')\n .argument('<id>', 'Post ID')\n .action(async (id) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Fetching post...').start();\n\n try {\n const { data } = await client.get(`/v1/posts/${id}`);\n spinner.stop();\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to fetch post');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('posts:create')\n .description('Create a post')\n .requiredOption('-c, --content <text>', 'Post content')\n .option('-s, --date <date>', 'Scheduled date (ISO 8601)')\n .option('-t, --type <type>', 'Post type: schedule or draft', 'schedule')\n .option('-m, --media <ids>', 'Comma-separated file IDs')\n .option('-a, --accounts <ids>', 'Comma-separated account IDs')\n .option('--post-type <type>', 'Content type: TEXT, IMAGE, VIDEO, etc.', 'TEXT')\n .option('--platform <platform>', 'Social platform: TWITTER, LINKEDIN, etc.', 'TWITTER')\n .option('--settings <json>', 'Platform-specific settings as JSON')\n .option('-j, --json-file <path>', 'Path to JSON file for complex post')\n .addHelpText('after', `\nExamples:\n $ so-me posts:create -c \"Hello world!\" --platform TWITTER\n $ so-me posts:create -c \"Scheduled post\" -s 2026-04-10T14:00:00Z --platform LINKEDIN\n $ so-me posts:create -c \"With media\" -m file-id-1,file-id-2 --post-type IMAGE\n $ so-me posts:create -j ./campaign.json Create from JSON file`)\n .action(async (opts) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n let spinner: ReturnType<typeof ora> | null = null;\n\n try {\n let body: Record<string, unknown>;\n\n if (opts.jsonFile) {\n const fs = await import('node:fs');\n body = JSON.parse(fs.readFileSync(opts.jsonFile, 'utf-8'));\n } else {\n body = {\n text: opts.content,\n postType: opts.postType,\n socialMedia: opts.platform,\n };\n\n if (opts.date) body.scheduledAt = opts.date;\n if (opts.media) {\n body.files = opts.media.split(',').map((id: string) => ({ id: id.trim() }));\n }\n if (opts.settings) body.settings = JSON.parse(opts.settings);\n\n // Auto-resolve account from platform if not explicitly provided\n if (opts.accounts) {\n body.accountId = opts.accounts;\n } else if (opts.platform) {\n const account = await resolveAccountForPlatform(client, opts.platform);\n if (!account) { process.exitCode = 1; return; }\n body.accountId = account.accountId;\n }\n }\n\n spinner = ora('Creating post...').start();\n const { data } = await client.post('/v1/posts', body);\n spinner.succeed('Post created');\n printOutput(data, getFormat(program));\n } catch (error) {\n if (spinner) spinner.fail('Failed to create post');\n else console.error(chalk.red('Failed to create post'));\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('posts:update')\n .description('Update a post')\n .argument('<id>', 'Post ID')\n .option('-c, --content <text>', 'Updated content')\n .option('-s, --date <date>', 'Updated scheduled date (ISO 8601)')\n .option('-m, --media <ids>', 'Updated comma-separated file IDs')\n .action(async (id, opts) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Updating post...').start();\n\n try {\n const body: Record<string, unknown> = {};\n if (opts.content) body.text = opts.content;\n if (opts.date) body.scheduledAt = opts.date;\n if (opts.media) body.fileIds = opts.media.split(',').map((id: string) => id.trim());\n\n const { data } = await client.patch(`/v1/posts/${id}`, body);\n spinner.succeed('Post updated');\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to update post');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('posts:delete')\n .description('Delete one or more posts')\n .argument('<ids...>', 'Post ID(s)')\n .option('-y, --yes', 'Skip confirmation prompt')\n .action(async (ids: string[], opts) => {\n const globalOpts = getGlobalOpts(program);\n\n if (!opts.yes) {\n const readline = await import('node:readline');\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout });\n const label = ids.length === 1 ? `post ${ids[0]}` : `${ids.length} posts`;\n const answer = await new Promise<string>((resolve) => {\n rl.question(`Are you sure you want to delete ${label}? (y/N) `, resolve);\n });\n rl.close();\n if (answer.toLowerCase() !== 'y') {\n console.log('Cancelled.');\n return;\n }\n }\n\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Deleting post(s)...').start();\n\n try {\n if (ids.length === 1) {\n await client.delete(`/v1/posts/${ids[0]}`);\n spinner.succeed(`Post ${ids[0]} deleted`);\n } else {\n const { data } = await client.post('/v1/posts/bulk-delete', { ids });\n spinner.succeed(`Deleted ${data.deleted}/${data.total} posts`);\n printOutput(data, getFormat(program));\n }\n } catch (error) {\n spinner.fail('Failed to delete post(s)');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('posts:schedule')\n .description('Schedule a draft post')\n .argument('<id>', 'Post ID')\n .option('-s, --date <date>', 'Schedule date (ISO 8601)')\n .action(async (id, opts) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Scheduling post...').start();\n\n try {\n const body: Record<string, unknown> = {};\n if (opts.date) body.scheduledAt = opts.date;\n\n const { data } = await client.post(`/v1/posts/${id}/schedule`, body);\n spinner.succeed(`Post ${id} scheduled`);\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to schedule post');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('posts:unschedule')\n .description('Remove a post from the schedule')\n .argument('<id>', 'Post ID')\n .action(async (id) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Unscheduling post...').start();\n\n try {\n const { data } = await client.post(`/v1/posts/${id}/unschedule`);\n spinner.succeed(`Post ${id} unscheduled`);\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to unschedule post');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('posts:retry')\n .description('Retry a failed post')\n .argument('<id>', 'Post ID')\n .action(async (id) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Retrying post...').start();\n\n try {\n const { data } = await client.post(`/v1/posts/${id}/retry`);\n spinner.succeed(`Post ${id} queued for retry`);\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to retry post');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('posts:resubmit')\n .description('Resubmit a rejected post for approval')\n .argument('<id>', 'Post ID')\n .action(async (id) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Resubmitting post...').start();\n\n try {\n const { data } = await client.post(`/v1/posts/${id}/resubmit`);\n spinner.succeed(`Post ${id} resubmitted for approval`);\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to resubmit post');\n printError(error);\n process.exitCode = 1;\n }\n });\n}\n","import axios, { AxiosError, AxiosInstance } from 'axios';\nimport { getApiKey, getApiUrl } from './config.js';\n\nexport class ApiError extends Error {\n constructor(\n public readonly statusCode: number,\n public readonly status: string,\n public readonly detail: string,\n ) {\n super(`Error (${statusCode}): ${detail}`);\n this.name = 'ApiError';\n }\n}\n\nexport function createApiClient(opts?: {\n apiKey?: string;\n apiUrl?: string;\n}): AxiosInstance {\n const baseURL = getApiUrl(opts?.apiUrl);\n\n const client = axios.create({\n baseURL,\n timeout: 30_000,\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n });\n\n // Request interceptor: attach API key\n client.interceptors.request.use((config) => {\n const key = getApiKey(opts?.apiKey);\n if (!key) {\n throw new ApiError(\n 401,\n 'Unauthorized',\n \"No API key configured. Set SOME_API_KEY or run 'so-me auth:login'.\",\n );\n }\n config.headers['X-API-Key'] = key;\n return config;\n });\n\n // Response interceptor: transform errors\n client.interceptors.response.use(\n (response) => response,\n (error: AxiosError<{ message?: string; error?: string }>) => {\n if (error instanceof ApiError) throw error;\n\n if (!error.response) {\n throw new ApiError(\n 0,\n 'NetworkError',\n `Could not connect to API at ${baseURL}. Check your internet connection.`,\n );\n }\n\n const { status, data } = error.response;\n const detail = data?.message || data?.error || error.message;\n\n if (status === 401) {\n throw new ApiError(401, 'Unauthorized', \"Invalid API key. Run 'so-me auth:login' or set SOME_API_KEY.\");\n }\n if (status === 403) {\n throw new ApiError(403, 'Forbidden', 'Insufficient permissions. Your plan may not include this feature.');\n }\n if (status === 429) {\n throw new ApiError(429, 'TooManyRequests', 'Rate limit exceeded. Try again later.');\n }\n\n throw new ApiError(status, 'Error', detail);\n },\n );\n\n return client;\n}\n","import Table from 'cli-table3';\n\nexport type OutputFormat = 'json' | 'table';\n\nexport function formatOutput(data: unknown, format: OutputFormat): string {\n if (format === 'json') {\n return JSON.stringify(data, null, 2);\n }\n return formatTable(data);\n}\n\nfunction formatTable(data: unknown): string {\n if (Array.isArray(data)) {\n if (data.length === 0) {\n return 'No data';\n }\n const keys = Object.keys(data[0]);\n const table = new Table({ head: keys });\n for (const row of data) {\n table.push(keys.map((k) => truncate(String(row[k] ?? ''), 50)));\n }\n return table.toString();\n }\n\n if (data && typeof data === 'object') {\n const table = new Table();\n for (const [key, value] of Object.entries(data)) {\n table.push({ [key]: truncate(String(value ?? ''), 80) });\n }\n return table.toString();\n }\n\n return String(data);\n}\n\nfunction truncate(str: string, max: number): string {\n if (str.length <= max) return str;\n return str.slice(0, max - 3) + '...';\n}\n\nexport function printOutput(data: unknown, format: OutputFormat): void {\n console.log(formatOutput(data, format));\n}\n\nexport function printError(error: unknown): void {\n if (error instanceof Error) {\n console.error(error.message);\n } else {\n console.error(String(error));\n }\n}\n","import { Command } from 'commander';\nimport ora from 'ora';\nimport axios from 'axios';\nimport chalk from 'chalk';\nimport { createInterface } from 'readline';\nimport { createApiClient } from '../lib/api.js';\nimport { getConfig, getApiKey, getApiUrl } from '../lib/config.js';\nimport { printOutput, printError, OutputFormat } from '../lib/output.js';\n\nfunction getFormat(program: Command): OutputFormat {\n const opts = program.opts();\n if (opts.table) return 'table';\n return getConfig().outputFormat || 'json';\n}\n\nfunction getGlobalOpts(program: Command) {\n return program.opts() as { apiKey?: string; apiUrl?: string; verbose?: boolean };\n}\n\nconst PLATFORMS = [\n 'twitter',\n 'linkedin',\n 'linkedin_page',\n 'instagram',\n 'facebook',\n 'tiktok',\n 'youtube',\n 'threads',\n] as const;\n\ntype Platform = (typeof PLATFORMS)[number];\n\nfunction validatePlatform(value: string): Platform {\n const normalized = value.toLowerCase() as Platform;\n if (!PLATFORMS.includes(normalized)) {\n console.error(\n chalk.red(`Invalid platform: ${value}`),\n );\n console.error(\n chalk.dim(`Valid platforms: ${PLATFORMS.join(', ')}`),\n );\n process.exit(1);\n }\n return normalized;\n}\n\nfunction askQuestion(question: string): Promise<string> {\n const rl = 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\nexport function registerAccountsCommands(program: Command): void {\n program\n .command('accounts:list')\n .description('List connected social accounts')\n .action(async () => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Fetching accounts...').start();\n try {\n const { data } = await client.get('/v1/accounts');\n spinner.stop();\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to fetch accounts');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('accounts:get')\n .description('Get account details by ID or platform name')\n .argument('<id-or-platform>', 'Account ID or platform name (twitter, linkedin, etc.)')\n .action(async (idOrPlatform) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Fetching account...').start();\n try {\n const isPlatform = PLATFORMS.includes(idOrPlatform.toLowerCase() as Platform);\n if (isPlatform) {\n const { data: accounts } = await client.get('/v1/accounts');\n const filtered = accounts.filter(\n (a: any) => a.platform.toLowerCase() === idOrPlatform.toLowerCase(),\n );\n if (filtered.length === 0) {\n spinner.info(`No ${idOrPlatform.toLowerCase()} accounts found.`);\n return;\n }\n spinner.stop();\n printOutput(filtered.length === 1 ? filtered[0] : filtered, getFormat(program));\n } else {\n const { data } = await client.get(`/v1/accounts/${idOrPlatform}`);\n spinner.stop();\n printOutput(data, getFormat(program));\n }\n } catch (error) {\n spinner.fail('Failed to fetch account');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('accounts:connect')\n .description('Connect a social account via browser OAuth')\n .requiredOption('--platform <platform>', 'Social platform to connect')\n .action(async (opts) => {\n const globalOpts = getGlobalOpts(program);\n const platform = validatePlatform(opts.platform);\n const apiKey = getApiKey(globalOpts.apiKey);\n const apiUrl = getApiUrl(globalOpts.apiUrl);\n\n if (!apiKey) {\n console.error(chalk.red('Not authenticated. Run \"so-me auth:login\" first.'));\n process.exitCode = 1;\n return;\n }\n\n const spinner = ora('Starting device authorization...').start();\n\n try {\n const { data } = await axios.post(\n `${apiUrl}/auth/device/code`,\n { action: 'connect_social', platform },\n { headers: { 'X-API-Key': apiKey } },\n );\n\n spinner.stop();\n\n const { device_code, user_code, verification_uri, expires_in, interval } = data;\n\n console.log();\n console.log(chalk.bold(' To connect your account, open this URL in your browser:'));\n console.log();\n console.log(` ${chalk.cyan(verification_uri)}`);\n console.log();\n console.log(chalk.bold(' And enter this code:'));\n console.log();\n console.log(` ${chalk.yellow.bold(user_code)}`);\n console.log();\n console.log(chalk.dim(` Code expires in ${Math.floor(expires_in / 60)} minutes.`));\n console.log();\n\n // Try to open browser\n try {\n const open = await import('open');\n await open.default(verification_uri);\n console.log(chalk.dim(' Browser opened automatically.'));\n } catch {\n // Browser open is best-effort\n }\n\n // Poll for authorization\n const pollSpinner = ora('Waiting for account connection...').start();\n const pollInterval = (interval || 5) * 1000;\n const deadline = Date.now() + expires_in * 1000;\n\n while (Date.now() < deadline) {\n await new Promise((resolve) => setTimeout(resolve, pollInterval));\n\n try {\n const { data: tokenData } = await axios.post(`${apiUrl}/auth/device/token`, {\n device_code,\n });\n\n if (tokenData.status === 'authorized') {\n pollSpinner.succeed('Account connected!');\n console.log();\n const name = tokenData.account_name || tokenData.user_name || platform;\n const username = tokenData.user_name ? ` (${tokenData.user_name})` : '';\n console.log(\n chalk.green(` Connected ${platform} account: ${name}${username}`),\n );\n console.log(chalk.dim(' Run \"so-me accounts:list\" to see all accounts.'));\n return;\n }\n // status === 'authorization_pending' — keep polling\n } catch (error: any) {\n const status = error?.response?.status;\n if (status === 400) {\n const msg = error?.response?.data?.message;\n if (msg?.includes('expired') || msg?.includes('invalid')) {\n pollSpinner.fail('Device code expired');\n console.log(chalk.dim(' Run \"so-me accounts:connect\" to try again.'));\n process.exitCode = 1;\n return;\n }\n }\n // Other errors — keep polling\n }\n }\n\n pollSpinner.fail('Authorization timed out');\n console.log(chalk.dim(' Run \"so-me accounts:connect\" to try again.'));\n process.exitCode = 1;\n } catch (error: any) {\n spinner.fail('Failed to start device authorization');\n const msg = error?.response?.data?.message || error?.message || 'Unknown error';\n console.error(chalk.red(` ${msg}`));\n process.exitCode = 1;\n }\n });\n\n program\n .command('accounts:remove')\n .description('Remove a connected social account')\n .argument('<platform>', 'Social platform (twitter, linkedin, linkedin_page, instagram, facebook, tiktok, youtube, threads)')\n .action(async (platformArg) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const platform = validatePlatform(platformArg);\n\n const spinner = ora('Fetching accounts...').start();\n\n try {\n const { data: accounts } = await client.get('/v1/accounts');\n const filtered = accounts.filter(\n (a: any) => a.platform.toLowerCase() === platform,\n );\n\n if (filtered.length === 0) {\n spinner.info(`No ${platform} accounts found.`);\n return;\n }\n\n spinner.stop();\n\n let account: any;\n\n if (filtered.length === 1) {\n account = filtered[0];\n } else {\n // Multiple accounts — ask user to pick\n console.log();\n console.log(chalk.bold(` Found ${filtered.length} ${platform} accounts:`));\n console.log();\n filtered.forEach((a: any, i: number) => {\n const name = a.accountName || a.userName || a.accountId;\n const user = a.userName ? ` (@${a.userName})` : '';\n console.log(` ${chalk.cyan(String(i + 1))}. ${name}${user}`);\n });\n console.log();\n\n const answer = await askQuestion(` Select account to remove (1-${filtered.length}): `);\n const index = parseInt(answer, 10) - 1;\n\n if (isNaN(index) || index < 0 || index >= filtered.length) {\n console.log(chalk.yellow(' Invalid selection. Cancelled.'));\n return;\n }\n\n account = filtered[index];\n }\n\n const name = account.accountName || account.userName || account.accountId;\n const confirm = await askQuestion(\n ` Remove ${name} (${account.platform})? (y/N): `,\n );\n\n if (confirm.toLowerCase() !== 'y') {\n console.log(chalk.dim(' Cancelled.'));\n return;\n }\n\n const deleteSpinner = ora('Removing account...').start();\n await client.delete(`/v1/accounts/${account.id}`);\n deleteSpinner.succeed('Account removed.');\n console.log(chalk.green(` Removed ${name} (${account.platform}).`));\n } catch (error) {\n spinner.fail('Failed to remove account');\n printError(error);\n process.exitCode = 1;\n }\n });\n}\n","import { Command } from 'commander';\nimport ora from 'ora';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport axios from 'axios';\nimport chalk from 'chalk';\nimport { createInterface } from 'readline';\nimport { createApiClient } from '../lib/api.js';\nimport { getConfig } from '../lib/config.js';\nimport { printOutput, printError, OutputFormat } from '../lib/output.js';\n\nfunction getFormat(program: Command): OutputFormat {\n const opts = program.opts();\n if (opts.table) return 'table';\n return getConfig().outputFormat || 'json';\n}\n\nfunction getGlobalOpts(program: Command) {\n return program.opts() as { apiKey?: string; apiUrl?: string; verbose?: boolean };\n}\n\nconst UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n\nfunction isUUID(value: string): boolean {\n return UUID_RE.test(value);\n}\n\nfunction askQuestion(question: string): Promise<string> {\n const rl = 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\nasync function pickOne(items: any[], labelFn: (item: any) => string, prompt: string): Promise<any> {\n console.log();\n items.forEach((item, i) => {\n console.log(` ${chalk.cyan(String(i + 1))}. ${labelFn(item)}`);\n });\n console.log();\n const answer = await askQuestion(prompt);\n const index = parseInt(answer, 10) - 1;\n if (isNaN(index) || index < 0 || index >= items.length) {\n console.log(chalk.yellow(' Invalid selection. Cancelled.'));\n return null;\n }\n return items[index];\n}\n\nconst UUID_PREFIX_RE = /^([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})-/i;\n\nasync function resolveFile(client: any, idOrName: string): Promise<any | null> {\n // Direct UUID lookup\n if (isUUID(idOrName)) {\n const { data } = await client.get(`/v1/media/files/${idOrName}`);\n return data;\n }\n\n // UUID-prefixed filename (e.g. \"f200d255-...-photo.pdf\") → extract UUID and lookup\n const uuidPrefix = idOrName.match(UUID_PREFIX_RE);\n if (uuidPrefix) {\n try {\n const { data } = await client.get(`/v1/media/files/${uuidPrefix[1]}`);\n return data;\n } catch {\n // Fall through to name search\n }\n }\n\n // Search by name across all folders\n const { data: matches } = await client.get('/v1/media/files/search', {\n params: { name: idOrName },\n });\n const exact = matches.filter(\n (f: any) =>\n f.originalName?.toLowerCase() === idOrName.toLowerCase() ||\n f.filename?.toLowerCase() === idOrName.toLowerCase(),\n );\n const results = exact.length > 0 ? exact : matches;\n\n if (results.length === 0) {\n console.error(chalk.red(`No file found matching \"${idOrName}\"`));\n return null;\n }\n if (results.length === 1) return results[0];\n console.log(chalk.bold(` Found ${results.length} files matching \"${idOrName}\":`));\n return pickOne(results, (f) => `${f.originalName} (${f.id})`, ` Select file (1-${results.length}): `);\n}\n\nasync function resolveFolder(client: any, idOrName: string): Promise<any | null> {\n const { data: folders } = await client.get('/v1/media/folders');\n if (isUUID(idOrName)) {\n const match = folders.find((f: any) => f.id === idOrName);\n if (!match) {\n console.error(chalk.red(`No folder found matching \"${idOrName}\"`));\n return null;\n }\n return match;\n }\n const matches = folders.filter(\n (f: any) => f.name?.toLowerCase() === idOrName.toLowerCase(),\n );\n if (matches.length === 0) {\n console.error(chalk.red(`No folder found matching \"${idOrName}\"`));\n return null;\n }\n if (matches.length === 1) return matches[0];\n console.log(chalk.bold(` Found ${matches.length} folders matching \"${idOrName}\":`));\n return pickOne(matches, (f) => `${f.name} (${f.id})`, ` Select folder (1-${matches.length}): `);\n}\n\nasync function resolveTarget(client: any, idOrName: string): Promise<{ type: 'file' | 'folder'; item: any } | null> {\n const { data: folders } = await client.get('/v1/media/folders');\n\n let folderMatches: any[];\n let fileMatches: any[];\n\n if (isUUID(idOrName)) {\n folderMatches = folders.filter((f: any) => f.id === idOrName);\n // Try direct file lookup\n try {\n const { data } = await client.get(`/v1/media/files/${idOrName}`);\n fileMatches = data ? [data] : [];\n } catch {\n fileMatches = [];\n }\n } else {\n folderMatches = folders.filter((f: any) => f.name?.toLowerCase() === idOrName.toLowerCase());\n // Search files across all folders\n const { data: searchResults } = await client.get('/v1/media/files/search', {\n params: { name: idOrName },\n });\n const exact = searchResults.filter(\n (f: any) =>\n f.originalName?.toLowerCase() === idOrName.toLowerCase() ||\n f.filename?.toLowerCase() === idOrName.toLowerCase(),\n );\n fileMatches = exact.length > 0 ? exact : searchResults;\n }\n\n const all = [\n ...folderMatches.map((f: any) => ({ type: 'folder' as const, item: f })),\n ...fileMatches.map((f: any) => ({ type: 'file' as const, item: f })),\n ];\n\n if (all.length === 0) {\n console.error(chalk.red(`No file or folder found matching \"${idOrName}\"`));\n return null;\n }\n if (all.length === 1) return all[0];\n\n console.log(chalk.bold(` Found ${all.length} items matching \"${idOrName}\":`));\n const picked = await pickOne(\n all,\n (entry) => {\n const label = entry.type === 'folder' ? entry.item.name : entry.item.originalName;\n return `[${entry.type}] ${label} (${entry.item.id})`;\n },\n ` Select item (1-${all.length}): `,\n );\n return picked;\n}\n\nexport function registerMediaCommands(program: Command): void {\n program\n .command('media:upload')\n .description('Upload a file (presign + upload to S3)')\n .argument('[file]', 'Path to file (or drag & drop)')\n .option('--folder <id-or-name>', 'Upload into a specific folder')\n .addHelpText('after', `\nExamples:\n $ so-me media:upload ./photo.jpg\n $ so-me media:upload ./photo.jpg --folder Assets\n $ so-me media:upload # prompts for path (drag & drop a file)`)\n .action(async (filePath, opts) => {\n if (!filePath) {\n filePath = await askQuestion(' Drop a file here (or enter path): ');\n }\n // Strip surrounding quotes and whitespace from drag-and-drop paths\n filePath = filePath.replace(/^['\"]|['\"]$/g, '').trim();\n\n if (!filePath) {\n console.error(chalk.red('No file path provided.'));\n process.exitCode = 1;\n return;\n }\n\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Uploading file...').start();\n\n try {\n const resolvedPath = path.resolve(filePath);\n const stat = fs.statSync(resolvedPath);\n const filename = path.basename(resolvedPath);\n const ext = path.extname(resolvedPath).toLowerCase();\n\n const mimeTypes: Record<string, string> = {\n '.png': 'image/png', '.jpg': 'image/jpeg', '.jpeg': 'image/jpeg',\n '.gif': 'image/gif', '.webp': 'image/webp', '.svg': 'image/svg+xml',\n '.mp4': 'video/mp4', '.mov': 'video/quicktime', '.avi': 'video/x-msvideo',\n '.webm': 'video/webm', '.mp3': 'audio/mpeg', '.wav': 'audio/wav',\n '.pdf': 'application/pdf',\n };\n const mimetype = mimeTypes[ext] || 'application/octet-stream';\n\n let folderId: string | undefined;\n if (opts.folder) {\n spinner.text = 'Resolving folder...';\n if (isUUID(opts.folder)) {\n folderId = opts.folder;\n } else {\n spinner.stop();\n const folder = await resolveFolder(client, opts.folder);\n if (!folder) { process.exitCode = 1; return; }\n folderId = folder.id;\n spinner.start();\n }\n }\n\n spinner.text = 'Getting presigned URL...';\n const { data: presignData } = await client.post('/v1/media/presign-upload', {\n files: [{ filename, mimetype, size: stat.size }],\n ...(folderId && { folderId }),\n });\n\n const presigned = presignData[0];\n spinner.text = 'Uploading to storage...';\n\n const fileBuffer = fs.readFileSync(resolvedPath);\n await axios.put(presigned.uploadUrl, fileBuffer, {\n headers: { 'Content-Type': mimetype },\n maxBodyLength: Infinity,\n });\n\n spinner.succeed('File uploaded');\n printOutput({\n fileId: presigned.fileId,\n url: presigned.fileSrc,\n filename,\n size: stat.size,\n }, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to upload file');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('media:list')\n .description('List media files and folders')\n .option('--folder <id-or-name>', 'Folder ID or name to list contents of')\n .option('--file <id-or-name>', 'File ID or name to get details of')\n .action(async (opts) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Fetching media...').start();\n try {\n if (opts.file) {\n spinner.text = 'Fetching file...';\n const file = await resolveFile(client, opts.file);\n spinner.stop();\n if (!file) { process.exitCode = 1; return; }\n printOutput(file, getFormat(program));\n return;\n }\n\n let folderId: string | undefined;\n if (opts.folder) {\n spinner.text = 'Resolving folder...';\n if (isUUID(opts.folder)) {\n folderId = opts.folder;\n } else {\n spinner.stop();\n const folder = await resolveFolder(client, opts.folder);\n if (!folder) { process.exitCode = 1; return; }\n folderId = folder.id;\n spinner.start('Fetching media...');\n }\n }\n\n const params: Record<string, string> = {};\n if (folderId) params.folderId = folderId;\n const { data } = await client.get('/v1/media', { params });\n spinner.stop();\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to fetch media');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('media:delete')\n .description('Delete one or more media files, or a folder')\n .argument('<items...>', 'File/folder ID(s) or name(s)')\n .option('--type <type>', 'Type: file (default) or folder', 'file')\n .option('-y, --yes', 'Skip confirmation')\n .action(async (items: string[], opts) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Resolving...').start();\n try {\n if (opts.type === 'folder') {\n if (items.length > 1) {\n spinner.fail('Only one folder can be deleted at a time.');\n process.exitCode = 1;\n return;\n }\n spinner.stop();\n const folder = await resolveFolder(client, items[0]);\n if (!folder) { process.exitCode = 1; return; }\n\n if (!opts.yes) {\n const answer = await askQuestion(\n ` Delete folder \"${folder.name}\" and all its contents? (y/N) `,\n );\n if (answer.toLowerCase() !== 'y') { console.log(chalk.dim(' Cancelled.')); return; }\n }\n\n const deleteSpinner = ora('Deleting folder...').start();\n await client.delete(`/v1/media/folders/${folder.id}`);\n deleteSpinner.succeed(`Folder \"${folder.name}\" deleted.`);\n return;\n }\n\n // File deletion — resolve all items\n spinner.stop();\n const resolved: any[] = [];\n for (const item of items) {\n const file = await resolveFile(client, item);\n if (!file) { process.exitCode = 1; return; }\n resolved.push(file);\n }\n\n // Show confirmation with file list\n if (!opts.yes) {\n if (resolved.length === 1) {\n const answer = await askQuestion(\n ` Delete file \"${resolved[0].originalName}\"? (y/N) `,\n );\n if (answer.toLowerCase() !== 'y') { console.log(chalk.dim(' Cancelled.')); return; }\n } else {\n console.log();\n console.log(chalk.bold(` Files to delete:`));\n console.log();\n resolved.forEach((f, i) => {\n console.log(` ${chalk.cyan(String(i + 1))}. ${f.originalName} (${f.id})`);\n });\n console.log();\n const answer = await askQuestion(\n ` Delete ${resolved.length} files? (y/N) `,\n );\n if (answer.toLowerCase() !== 'y') { console.log(chalk.dim(' Cancelled.')); return; }\n }\n }\n\n const deleteSpinner = ora('Deleting...').start();\n if (resolved.length === 1) {\n await client.delete(`/v1/media/${resolved[0].id}`);\n deleteSpinner.succeed(`File \"${resolved[0].originalName}\" deleted.`);\n } else {\n await client.post('/v1/media/files/bulk-delete', {\n fileIds: resolved.map((f: any) => f.id),\n });\n deleteSpinner.succeed(`${resolved.length} files deleted.`);\n }\n } catch (error) {\n spinner.fail('Failed to delete');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('media:move')\n .description('Move a file or folder to a different location')\n .argument('<id-or-name>', 'File or folder ID or name')\n .requiredOption('--to <folder-id-or-name>', 'Destination folder ID, name, or \"root\"')\n .action(async (idOrName, opts) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Resolving...').start();\n try {\n spinner.stop();\n const source = await resolveTarget(client, idOrName);\n if (!source) { process.exitCode = 1; return; }\n\n let destinationId: string | undefined;\n let destinationName = 'root';\n if (opts.to.toLowerCase() !== 'root') {\n const destFolder = await resolveFolder(client, opts.to);\n if (!destFolder) { process.exitCode = 1; return; }\n destinationId = destFolder.id;\n destinationName = destFolder.name;\n }\n\n const sourceName = source.type === 'folder' ? source.item.name : source.item.originalName;\n const moveSpinner = ora(`Moving \"${sourceName}\" to \"${destinationName}\"...`).start();\n\n if (source.type === 'file') {\n await client.patch(`/v1/media/files/${source.item.id}/move`, {\n folderId: destinationId || null,\n });\n } else {\n await client.patch(`/v1/media/folders/${source.item.id}/move`, {\n parentId: destinationId || null,\n });\n }\n\n moveSpinner.succeed(`Moved \"${sourceName}\" to \"${destinationName}\".`);\n } catch (error) {\n spinner.fail('Failed to move');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('media:rename')\n .description('Rename a file or folder')\n .argument('<id-or-name>', 'File or folder ID or name')\n .requiredOption('--name <new-name>', 'New name')\n .option('--type <type>', 'Type: file (default) or folder', 'file')\n .action(async (idOrName, opts) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Resolving...').start();\n try {\n if (opts.type === 'folder') {\n spinner.stop();\n const folder = await resolveFolder(client, idOrName);\n if (!folder) { process.exitCode = 1; return; }\n\n const renameSpinner = ora('Renaming folder...').start();\n await client.patch(`/v1/media/folders/${folder.id}/rename`, { name: opts.name });\n renameSpinner.succeed(`Renamed \"${folder.name}\" to \"${opts.name}\".`);\n } else {\n spinner.stop();\n const file = await resolveFile(client, idOrName);\n if (!file) { process.exitCode = 1; return; }\n\n const renameSpinner = ora('Renaming file...').start();\n await client.patch(`/v1/media/files/${file.id}/rename`, { name: opts.name });\n renameSpinner.succeed(`Renamed \"${file.originalName}\" to \"${opts.name}\".`);\n }\n } catch (error) {\n spinner.fail('Failed to rename');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('media:folders')\n .description('List media folders')\n .action(async () => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Fetching folders...').start();\n try {\n const { data } = await client.get('/v1/media/folders');\n spinner.stop();\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to fetch folders');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('media:create-folder')\n .description('Create a media folder')\n .requiredOption('--name <name>', 'Folder name')\n .action(async (opts) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Creating folder...').start();\n try {\n const { data } = await client.post('/v1/media/folders', { name: opts.name });\n spinner.succeed('Folder created');\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to create folder');\n printError(error);\n process.exitCode = 1;\n }\n });\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { createApiClient } from '../lib/api.js';\nimport { getConfig } from '../lib/config.js';\nimport { printOutput, printError, OutputFormat } from '../lib/output.js';\n\nfunction getFormat(program: Command): OutputFormat {\n const opts = program.opts();\n if (opts.table) return 'table';\n return getConfig().outputFormat || 'json';\n}\n\nfunction getGlobalOpts(program: Command) {\n return program.opts() as { apiKey?: string; apiUrl?: string; verbose?: boolean };\n}\n\ninterface PlatformSection {\n sections: string[];\n description: string;\n}\n\nconst PLATFORM_SECTIONS: Record<string, PlatformSection> = {\n facebook: { sections: ['page', 'posts', 'videos'], description: 'Facebook' },\n instagram: { sections: ['account', 'media', 'stories'], description: 'Instagram' },\n linkedin: { sections: ['page', 'posts'], description: 'LinkedIn' },\n linkedin_page: { sections: ['page', 'posts'], description: 'LinkedIn Page' },\n youtube: { sections: ['channel', 'videos'], description: 'YouTube' },\n x: { sections: ['account', 'content'], description: 'Twitter / X' },\n twitter: { sections: ['account', 'content'], description: 'Twitter / X' },\n whatsapp: { sections: ['account'], description: 'WhatsApp' },\n};\n\nfunction resolveCliPlatform(input: string): string {\n const lower = input.toLowerCase();\n if (lower === 'twitter') return 'x';\n if (lower === 'linkedin_page') return 'linkedin';\n return lower;\n}\n\nexport function registerAnalyticsCommands(program: Command): void {\n // Per-platform section analytics (matches frontend route names)\n program\n .command('analytics:platform')\n .description('Get analytics for a platform section')\n .argument('<account-id-or-platform>', 'Account ID or platform name (facebook, instagram, linkedin, youtube, x, whatsapp)')\n .argument('[section]', 'Section (e.g. page, posts, videos, account, media, stories, channel, content)')\n .option('-d, --days <number>', 'Lookback period in days (7, 30, 90)', '7')\n .addHelpText('after', `\nSections per platform:\n facebook page, posts, videos\n instagram account, media, stories\n linkedin page, posts\n youtube channel, videos\n x / twitter account, content\n whatsapp account\n\nExamples:\n $ so-me analytics:platform facebook page --days 30\n $ so-me analytics:platform instagram media --days 7\n $ so-me analytics:platform <account-id> posts --days 90`)\n .action(async (identifier, section, opts) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n\n // If no section provided and identifier is a platform name, show available sections\n const platformInfo = PLATFORM_SECTIONS[identifier.toLowerCase()];\n if (platformInfo && !section) {\n console.log(chalk.bold(` Available sections for ${platformInfo.description}:`));\n console.log();\n platformInfo.sections.forEach((s) => {\n console.log(` ${chalk.cyan(s)}`);\n });\n console.log();\n console.log(chalk.dim(` Usage: so-me analytics:platform ${identifier} <section> --days <number>`));\n return;\n }\n\n if (!section) {\n // identifier is an account ID — use the legacy platform endpoint\n const spinner = ora('Fetching analytics...').start();\n try {\n const { data } = await client.get(`/v1/analytics/platform/${identifier}`, {\n params: { days: opts.days },\n });\n spinner.stop();\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to fetch analytics');\n printError(error);\n process.exitCode = 1;\n }\n return;\n }\n\n // Validate section for known platforms\n if (platformInfo && !platformInfo.sections.includes(section)) {\n console.error(chalk.red(`Invalid section \"${section}\" for ${platformInfo.description}`));\n console.error(chalk.dim(`Valid sections: ${platformInfo.sections.join(', ')}`));\n process.exitCode = 1;\n return;\n }\n\n const apiPlatform = resolveCliPlatform(identifier);\n const spinner = ora(`Fetching ${identifier} ${section} analytics...`).start();\n try {\n const { data } = await client.get(\n `/v1/analytics/${apiPlatform}/${identifier}/${section}`,\n { params: { days: opts.days } },\n );\n spinner.stop();\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to fetch analytics');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { createInterface } from 'readline';\nimport { createApiClient } from '../lib/api.js';\nimport { getConfig } from '../lib/config.js';\nimport { printOutput, printError, OutputFormat } from '../lib/output.js';\n\nconst UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n\nconst PLATFORMS = [\n 'twitter', 'linkedin', 'linkedin_page', 'instagram',\n 'facebook', 'tiktok', 'youtube', 'threads', 'whatsapp',\n];\n\nasync function resolveAccount(client: any, identifier: string): Promise<any | null> {\n const { data: accounts } = await client.get('/v1/accounts');\n if (UUID_RE.test(identifier)) {\n const match = accounts.find((a: any) => a.id === identifier);\n if (!match) {\n console.error(chalk.red(`No account found matching \"${identifier}\"`));\n return null;\n }\n return match;\n }\n const platform = identifier.toUpperCase();\n const matches = accounts.filter((a: any) => a.platform === platform);\n if (matches.length === 0) {\n console.error(chalk.red(`No ${identifier} account found`));\n return null;\n }\n if (matches.length === 1) return matches[0];\n console.log(chalk.bold(` Found ${matches.length} ${identifier} accounts:`));\n console.log();\n matches.forEach((a: any, i: number) => {\n const name = a.accountName || a.userName || a.accountId;\n console.log(` ${chalk.cyan(String(i + 1))}. ${name}`);\n });\n console.log();\n const answer = await askQuestion(` Select account (1-${matches.length}): `);\n const index = parseInt(answer, 10) - 1;\n if (isNaN(index) || index < 0 || index >= matches.length) {\n console.log(chalk.yellow(' Invalid selection. Cancelled.'));\n return null;\n }\n return matches[index];\n}\n\nfunction askQuestion(question: string): Promise<string> {\n const rl = 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 getFormat(program: Command): OutputFormat {\n const opts = program.opts();\n if (opts.table) return 'table';\n return getConfig().outputFormat || 'json';\n}\n\nfunction getGlobalOpts(program: Command) {\n return program.opts() as { apiKey?: string; apiUrl?: string; verbose?: boolean };\n}\n\nexport function registerInboxCommands(program: Command): void {\n program\n .command('inbox:list')\n .description('List inbox conversations')\n .option('--status <status>', 'Filter by status: resolved, unresolved, archived')\n .option('--platform <platform>', 'Filter by platform: facebook, instagram, twitter, linkedin, tiktok, youtube, threads, whatsapp')\n .option('--type <type>', 'Filter by type: message, comment, mention')\n .option('--read', 'Show only read conversations')\n .option('--unread', 'Show only unread conversations')\n .option('--search <query>', 'Search by sender name, message, or page name')\n .addHelpText('after', `\nExamples:\n $ so-me inbox:list --status unresolved\n $ so-me inbox:list --platform facebook --type comment\n $ so-me inbox:list --unread\n $ so-me inbox:list --platform instagram --unread --type message\n $ so-me inbox:list --search \"john\"`)\n .action(async (opts) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Fetching conversations...').start();\n try {\n const { data } = await client.get('/v1/inbox/conversations');\n spinner.stop();\n let results = Array.isArray(data) ? data : [];\n\n if (opts.status) {\n results = results.filter((t: any) =>\n t.threadStatus?.toLowerCase() === opts.status.toLowerCase(),\n );\n }\n if (opts.platform) {\n results = results.filter((t: any) =>\n t.platform?.toLowerCase() === opts.platform.toLowerCase(),\n );\n }\n if (opts.type) {\n results = results.filter((t: any) =>\n t.threadType?.toLowerCase() === opts.type.toLowerCase(),\n );\n }\n if (opts.read) {\n results = results.filter((t: any) => t.isSeen === true);\n }\n if (opts.unread) {\n results = results.filter((t: any) => t.isSeen === false);\n }\n if (opts.search) {\n const q = opts.search.toLowerCase();\n results = results.filter((t: any) =>\n t.senderName?.toLowerCase().includes(q) ||\n t.lastMessage?.toLowerCase().includes(q) ||\n t.pageName?.toLowerCase().includes(q),\n );\n }\n\n printOutput(results, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to fetch conversations');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('inbox:messages')\n .description('Get messages in a conversation thread')\n .argument('<thread-id>', 'Thread ID')\n .action(async (threadId) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Fetching messages...').start();\n try {\n const { data } = await client.get(`/v1/inbox/conversations/${threadId}/messages`);\n spinner.stop();\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to fetch messages');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('inbox:read')\n .description('Mark a conversation as read')\n .argument('<thread-id>', 'Thread ID')\n .action(async (threadId) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Marking as read...').start();\n try {\n await client.patch(`/v1/inbox/conversations/${threadId}`, { isSeen: true });\n spinner.succeed('Conversation marked as read.');\n } catch (error) {\n spinner.fail('Failed to mark as read');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('inbox:resolve')\n .description('Mark a conversation as resolved, unresolved, or archived')\n .argument('<thread-id>', 'Thread ID')\n .requiredOption('--status <status>', 'Status: resolved, unresolved, archived')\n .action(async (threadId, opts) => {\n const validStatuses = ['resolved', 'unresolved', 'archived'];\n if (!validStatuses.includes(opts.status.toLowerCase())) {\n console.error(chalk.red(`Invalid status: ${opts.status}`));\n console.error(chalk.dim(`Valid options: ${validStatuses.join(', ')}`));\n process.exitCode = 1;\n return;\n }\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora(`Marking as ${opts.status}...`).start();\n try {\n await client.patch(`/v1/inbox/conversations/${threadId}`, {\n threadStatus: opts.status.toLowerCase(),\n });\n spinner.succeed(`Conversation marked as ${opts.status}.`);\n } catch (error) {\n spinner.fail('Failed to update status');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('inbox:delete')\n .description('Delete one or more conversations')\n .argument('<thread-ids...>', 'Thread ID(s) to delete')\n .option('-y, --yes', 'Skip confirmation')\n .action(async (threadIds: string[], opts) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n\n if (!opts.yes) {\n const msg = threadIds.length === 1\n ? ` Delete conversation ${threadIds[0]}? (y/N) `\n : ` Delete ${threadIds.length} conversations? (y/N) `;\n const answer = await askQuestion(msg);\n if (answer.toLowerCase() !== 'y') {\n console.log(chalk.dim(' Cancelled.'));\n return;\n }\n }\n\n const spinner = ora('Deleting...').start();\n try {\n let failed = 0;\n for (const id of threadIds) {\n try {\n await client.delete(`/v1/inbox/conversations/${id}`);\n } catch {\n failed++;\n }\n }\n if (failed === 0) {\n spinner.succeed(`${threadIds.length === 1 ? 'Conversation' : `${threadIds.length} conversations`} deleted.`);\n } else {\n spinner.warn(`${threadIds.length - failed} deleted, ${failed} failed.`);\n }\n } catch (error) {\n spinner.fail('Failed to delete conversations');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('inbox:reply')\n .description('Reply to a conversation with text, files, or both')\n .argument('<thread-id>', 'Thread ID')\n .option('--message <text>', 'Reply text message')\n .option('--image <urls...>', 'Image URLs to attach')\n .option('--video <url>', 'Video URL to attach')\n .option('--audio <url>', 'Audio URL to attach')\n .option('--file <url>', 'Document URL to attach')\n .addHelpText('after', `\nExamples:\n $ so-me inbox:reply <thread-id> --message \"Thanks!\"\n $ so-me inbox:reply <thread-id> --message \"Check this\" --image https://cdn.example.com/photo.jpg\n $ so-me inbox:reply <thread-id> --image <url1> <url2>\n $ so-me inbox:reply <thread-id> --video https://cdn.example.com/clip.mp4\n $ so-me inbox:reply <thread-id> --file https://cdn.example.com/doc.pdf\n $ so-me inbox:reply <thread-id> --message \"Here you go 😊\"`)\n .action(async (threadId, opts) => {\n if (!opts.message && !opts.image && !opts.video && !opts.audio && !opts.file) {\n console.error(chalk.red('Provide --message, --image, --video, --audio, --file, or a combination.'));\n process.exitCode = 1;\n return;\n }\n\n const attachments: Array<{ type: string; url: string; filename?: string }> = [];\n if (opts.image) {\n for (const url of opts.image) {\n attachments.push({ type: 'image', url });\n }\n }\n if (opts.video) {\n attachments.push({ type: 'video', url: opts.video });\n }\n if (opts.audio) {\n attachments.push({ type: 'audio', url: opts.audio });\n }\n if (opts.file) {\n attachments.push({ type: 'document', url: opts.file });\n }\n\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Sending reply...').start();\n try {\n const { data } = await client.post(`/v1/inbox/conversations/${threadId}/reply`, {\n ...(opts.message && { message: opts.message }),\n ...(attachments.length > 0 && { attachments }),\n });\n spinner.succeed('Reply sent');\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to send reply');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('inbox:subscribe')\n .description('Enable inbox for a social account')\n .argument('<id-or-platform>', 'Account ID or platform name (twitter, facebook, etc.)')\n .action(async (identifier) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Resolving account...').start();\n try {\n const account = await resolveAccount(client, identifier);\n if (!account) { spinner.stop(); process.exitCode = 1; return; }\n spinner.text = 'Subscribing to inbox...';\n const { data } = await client.post('/v1/inbox/subscribe', {\n accountId: account.accountId,\n platform: account.platform,\n });\n spinner.succeed(`Inbox enabled for ${account.accountName || account.platform}`);\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to enable inbox');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('inbox:unsubscribe')\n .description('Disable inbox for a social account')\n .argument('<id-or-platform>', 'Account ID or platform name (twitter, facebook, etc.)')\n .action(async (identifier) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Resolving account...').start();\n try {\n const account = await resolveAccount(client, identifier);\n if (!account) { spinner.stop(); process.exitCode = 1; return; }\n spinner.text = 'Unsubscribing from inbox...';\n const { data } = await client.delete('/v1/inbox/unsubscribe', {\n data: { accountId: account.accountId, platform: account.platform },\n });\n spinner.succeed(`Inbox disabled for ${account.accountName || account.platform}`);\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to disable inbox');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('inbox:saved-replies')\n .description('List saved replies or get a single reply')\n .argument('[id]', 'Reply ID to get details of')\n .action(async (id) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Fetching saved replies...').start();\n try {\n if (id) {\n const { data } = await client.get(`/v1/inbox/saved-replies/${id}`);\n spinner.stop();\n printOutput(data, getFormat(program));\n } else {\n const { data } = await client.get('/v1/inbox/saved-replies');\n spinner.stop();\n printOutput(data, getFormat(program));\n }\n } catch (error) {\n spinner.fail('Failed to fetch saved replies');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('inbox:create-reply')\n .description('Create a saved reply')\n .option('--text <text>', 'Reply text content')\n .option('--file <file-ids...>', 'File IDs to attach (max 4 images)')\n .addHelpText('after', `\nExamples:\n $ so-me inbox:create-reply --text \"Thanks for reaching out!\"\n $ so-me inbox:create-reply --text \"Check this out\" --file <file-id>\n $ so-me inbox:create-reply --file <id1> <id2>`)\n .action(async (opts) => {\n if (!opts.text && (!opts.file || opts.file.length === 0)) {\n console.error(chalk.red('Provide --text, --file, or both.'));\n process.exitCode = 1;\n return;\n }\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Creating saved reply...').start();\n try {\n const { data } = await client.post('/v1/inbox/saved-replies', {\n ...(opts.text && { text: opts.text }),\n ...(opts.file && { fileIds: opts.file }),\n });\n spinner.succeed('Saved reply created');\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to create saved reply');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('inbox:edit-reply')\n .description('Edit a saved reply')\n .argument('<id>', 'Saved reply ID')\n .option('--text <text>', 'New reply text')\n .option('--file <file-ids...>', 'New file IDs (replaces existing, max 4 images)')\n .action(async (id, opts) => {\n if (!opts.text && !opts.file) {\n console.error(chalk.red('Provide --text, --file, or both to update.'));\n process.exitCode = 1;\n return;\n }\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Updating saved reply...').start();\n try {\n const { data } = await client.patch(`/v1/inbox/saved-replies/${id}`, {\n ...(opts.text && { text: opts.text }),\n ...(opts.file && { fileIds: opts.file }),\n });\n spinner.succeed('Saved reply updated');\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to update saved reply');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('inbox:delete-reply')\n .description('Delete one or more saved replies')\n .argument('<ids...>', 'Saved reply ID(s)')\n .option('-y, --yes', 'Skip confirmation')\n .action(async (ids: string[], opts) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n\n if (!opts.yes) {\n const msg = ids.length === 1\n ? ` Delete saved reply ${ids[0]}? (y/N) `\n : ` Delete ${ids.length} saved replies? (y/N) `;\n const answer = await askQuestion(msg);\n if (answer.toLowerCase() !== 'y') {\n console.log(chalk.dim(' Cancelled.'));\n return;\n }\n }\n\n const spinner = ora('Deleting...').start();\n try {\n let failed = 0;\n for (const id of ids) {\n try {\n await client.delete(`/v1/inbox/saved-replies/${id}`);\n } catch {\n failed++;\n }\n }\n if (failed === 0) {\n spinner.succeed(`${ids.length === 1 ? 'Saved reply' : `${ids.length} saved replies`} deleted.`);\n } else {\n spinner.warn(`${ids.length - failed} deleted, ${failed} failed.`);\n }\n } catch (error) {\n spinner.fail('Failed to delete saved replies');\n printError(error);\n process.exitCode = 1;\n }\n });\n}\n","import { Command } from 'commander';\nimport ora from 'ora';\nimport { createApiClient } from '../lib/api.js';\nimport { getConfig } from '../lib/config.js';\nimport { printOutput, printError, OutputFormat } from '../lib/output.js';\n\nfunction getFormat(program: Command): OutputFormat {\n const opts = program.opts();\n if (opts.table) return 'table';\n return getConfig().outputFormat || 'json';\n}\n\nfunction getGlobalOpts(program: Command) {\n return program.opts() as { apiKey?: string; apiUrl?: string; verbose?: boolean };\n}\n\nexport function registerApprovalsCommands(program: Command): void {\n program\n .command('approvals:list')\n .description('List posts pending approval')\n .action(async () => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Fetching pending approvals...').start();\n try {\n const { data } = await client.get('/v1/approvals');\n spinner.stop();\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to fetch approvals');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('approvals:approve')\n .description('Approve a post')\n .argument('<post-id>', 'Post ID')\n .option('--comment <text>', 'Approval comment')\n .action(async (postId, opts) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Approving post...').start();\n try {\n const body: Record<string, string> = {};\n if (opts.comment) body.comment = opts.comment;\n const { data } = await client.post(`/v1/approvals/${postId}/approve`, body);\n spinner.succeed(`Post ${postId} approved`);\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to approve post');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('approvals:reject')\n .description('Reject a post')\n .argument('<post-id>', 'Post ID')\n .requiredOption('--comment <text>', 'Rejection reason')\n .action(async (postId, opts) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Rejecting post...').start();\n try {\n const { data } = await client.post(`/v1/approvals/${postId}/reject`, {\n comment: opts.comment,\n });\n spinner.succeed(`Post ${postId} rejected`);\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to reject post');\n printError(error);\n process.exitCode = 1;\n }\n });\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { createInterface } from 'readline';\nimport { createApiClient } from '../lib/api.js';\nimport { getConfig } from '../lib/config.js';\nimport { printOutput, printError, OutputFormat } from '../lib/output.js';\n\nfunction getFormat(program: Command): OutputFormat {\n const opts = program.opts();\n if (opts.table) return 'table';\n return getConfig().outputFormat || 'json';\n}\n\nfunction getGlobalOpts(program: Command) {\n return program.opts() as { apiKey?: string; apiUrl?: string; verbose?: boolean };\n}\n\nconst ROLES = ['member', 'owner'] as const;\nconst POST_APPROVALS = ['requires_approval', 'auto_approve'] as const;\n\nfunction askQuestion(question: string): Promise<string> {\n const rl = 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\nexport function registerTeamsCommands(program: Command): void {\n program\n .command('teams:list')\n .description('List team members')\n .action(async () => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Fetching team members...').start();\n try {\n const { data } = await client.get('/v1/teams/members');\n spinner.stop();\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to fetch team members');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('teams:remove')\n .description('Remove a team member by ID or email')\n .argument('<id-or-email>', 'Member ID or email address')\n .action(async (identifier) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n\n const confirm = await askQuestion(\n ` Remove team member \"${identifier}\"? (y/N) `,\n );\n if (confirm.toLowerCase() !== 'y') {\n console.log(chalk.dim(' Cancelled.'));\n return;\n }\n\n const spinner = ora('Removing member...').start();\n try {\n await client.delete(`/v1/teams/members/${encodeURIComponent(identifier)}`);\n spinner.succeed(`Member \"${identifier}\" removed.`);\n } catch (error) {\n spinner.fail('Failed to remove member');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('teams:update')\n .description('Update a team member settings')\n .argument('<id-or-email>', 'Member ID or email address')\n .option('--post-approval <approval>', 'Post approval: requires_approval or auto_approve')\n .action(async (identifier, opts) => {\n if (opts.postApproval && !POST_APPROVALS.includes(opts.postApproval as any)) {\n console.error(chalk.red(`Invalid post approval: ${opts.postApproval}`));\n console.error(chalk.dim(`Valid options: ${POST_APPROVALS.join(', ')}`));\n process.exitCode = 1;\n return;\n }\n\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Updating member...').start();\n try {\n await client.put(`/v1/teams/members/${encodeURIComponent(identifier)}/role`, {\n role: 'member',\n ...(opts.postApproval && { postApproval: opts.postApproval }),\n });\n spinner.succeed(`Updated \"${identifier}\"`);\n } catch (error) {\n spinner.fail('Failed to update member');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('teams:invite')\n .description('Invite a team member')\n .requiredOption('--email <email>', 'Email address to invite')\n .option('--post-approval <approval>', 'Post approval: requires_approval (default) or auto_approve')\n .action(async (opts) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Sending invitation...').start();\n try {\n const { data } = await client.post('/v1/teams/invite', {\n email: opts.email,\n role: 'member',\n ...(opts.postApproval && { postApproval: opts.postApproval }),\n });\n spinner.succeed(`Invitation sent to ${opts.email}`);\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to send invitation');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('teams:invitations')\n .description('List pending team invitations')\n .action(async () => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Fetching invitations...').start();\n try {\n const { data } = await client.get('/v1/teams/invitations');\n spinner.stop();\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to fetch invitations');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('teams:cancel-invite')\n .description('Cancel a pending invitation by ID or email')\n .argument('<id-or-email>', 'Invitation ID or email address')\n .action(async (identifier) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n\n const confirm = await askQuestion(\n ` Cancel invitation for \"${identifier}\"? (y/N) `,\n );\n if (confirm.toLowerCase() !== 'y') {\n console.log(chalk.dim(' Cancelled.'));\n return;\n }\n\n const spinner = ora('Cancelling invitation...').start();\n try {\n await client.delete(`/v1/teams/invitations/${encodeURIComponent(identifier)}`);\n spinner.succeed(`Invitation for \"${identifier}\" cancelled.`);\n } catch (error) {\n spinner.fail('Failed to cancel invitation');\n printError(error);\n process.exitCode = 1;\n }\n });\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { createInterface } from 'readline';\nimport { createApiClient } from '../lib/api.js';\nimport { getConfig } from '../lib/config.js';\nimport { printOutput, printError, OutputFormat } from '../lib/output.js';\n\nfunction getFormat(program: Command): OutputFormat {\n const opts = program.opts();\n if (opts.table) return 'table';\n return getConfig().outputFormat || 'json';\n}\n\nfunction getGlobalOpts(program: Command) {\n return program.opts() as { apiKey?: string; apiUrl?: string; verbose?: boolean };\n}\n\nfunction askQuestion(question: string): Promise<string> {\n const rl = 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\nexport function registerBiolinkCommands(program: Command): void {\n // ── Biolink CRUD ──\n\n program\n .command('biolink:list')\n .description('List all biolinks')\n .action(async () => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Fetching biolinks...').start();\n try {\n const { data } = await client.get('/v1/biolinks');\n spinner.stop();\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to fetch biolinks');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('biolink:get')\n .description('Get biolink details')\n .argument('<id>', 'Biolink ID')\n .action(async (id) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Fetching biolink...').start();\n try {\n const { data } = await client.get(`/v1/biolinks/${id}`);\n spinner.stop();\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to fetch biolink');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('biolink:create')\n .description('Create a new biolink')\n .option('--slug <slug>', 'Custom slug (3-50 alphanumeric chars)')\n .option('--name <name>', 'Display name')\n .option('--bio <bio>', 'Bio text')\n .action(async (opts) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Creating biolink...').start();\n try {\n const { data } = await client.post('/v1/biolinks', {\n ...(opts.slug && { customSlug: opts.slug }),\n ...(opts.name && { displayName: opts.name }),\n ...(opts.bio && { bio: opts.bio }),\n });\n spinner.succeed('Biolink created');\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to create biolink');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('biolink:update')\n .description('Update a biolink')\n .argument('<id>', 'Biolink ID')\n .option('--name <name>', 'Display name')\n .option('--bio <bio>', 'Bio text')\n .option('--slug <slug>', 'Custom slug')\n .option('--button-style <style>', 'Button style: rounded, square, pill, outline')\n .option('--show-grid', 'Show Instagram grid')\n .option('--hide-grid', 'Hide Instagram grid')\n .action(async (id, opts) => {\n const body: any = {};\n if (opts.name) body.displayName = opts.name;\n if (opts.bio) body.bio = opts.bio;\n if (opts.slug) body.customSlug = opts.slug;\n if (opts.buttonStyle) body.buttonStyle = opts.buttonStyle;\n if (opts.showGrid) body.showInstagramGrid = true;\n if (opts.hideGrid) body.showInstagramGrid = false;\n\n if (Object.keys(body).length === 0) {\n console.error(chalk.red('Provide at least one option to update.'));\n process.exitCode = 1;\n return;\n }\n\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Updating biolink...').start();\n try {\n const { data } = await client.put(`/v1/biolinks/${id}`, body);\n spinner.succeed('Biolink updated');\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to update biolink');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('biolink:delete')\n .description('Delete a biolink')\n .argument('<id>', 'Biolink ID')\n .option('-y, --yes', 'Skip confirmation')\n .action(async (id, opts) => {\n if (!opts.yes) {\n const answer = await askQuestion(` Delete biolink ${id}? (y/N) `);\n if (answer.toLowerCase() !== 'y') {\n console.log(chalk.dim(' Cancelled.'));\n return;\n }\n }\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Deleting biolink...').start();\n try {\n await client.delete(`/v1/biolinks/${id}`);\n spinner.succeed('Biolink deleted.');\n } catch (error) {\n spinner.fail('Failed to delete biolink');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('biolink:publish')\n .description('Toggle publish/unpublish a biolink')\n .argument('<id>', 'Biolink ID')\n .action(async (id) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Toggling publish status...').start();\n try {\n const { data } = await client.put(`/v1/biolinks/${id}/publish`);\n const status = data.isPublished ? 'published' : 'unpublished';\n spinner.succeed(`Biolink ${status}.`);\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to toggle publish status');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n // ── Theme ──\n\n program\n .command('biolink:theme')\n .description('Change biolink theme')\n .argument('<id>', 'Biolink ID')\n .option('--preset <theme>', 'Preset theme: default, dark, gradient, minimal, neon, sunset, ocean, forest')\n .option('--bg <color>', 'Custom background color (hex)')\n .option('--text <color>', 'Custom text color (hex)')\n .option('--button <color>', 'Custom button color (hex)')\n .option('--button-text <color>', 'Custom button text color (hex)')\n .action(async (id, opts) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n\n if (opts.preset) {\n const spinner = ora('Changing theme...').start();\n try {\n const { data } = await client.put(`/v1/biolinks/${id}/theme`, {\n theme: opts.preset.toUpperCase(),\n });\n spinner.succeed(`Theme set to ${opts.preset}.`);\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to change theme');\n printError(error);\n process.exitCode = 1;\n }\n return;\n }\n\n if (opts.bg || opts.text || opts.button || opts.buttonText) {\n const spinner = ora('Setting custom theme...').start();\n try {\n const { data } = await client.put(`/v1/biolinks/${id}/custom-theme`, {\n ...(opts.bg && { backgroundColor: opts.bg }),\n ...(opts.text && { textColor: opts.text }),\n ...(opts.button && { buttonColor: opts.button }),\n ...(opts.buttonText && { buttonTextColor: opts.buttonText }),\n });\n spinner.succeed('Custom theme applied.');\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to set custom theme');\n printError(error);\n process.exitCode = 1;\n }\n return;\n }\n\n console.error(chalk.red('Provide --preset or custom colors (--bg, --text, --button, --button-text).'));\n process.exitCode = 1;\n });\n\n // ── Buttons ──\n\n program\n .command('biolink:buttons')\n .description('List buttons for a biolink')\n .argument('<biolink-id>', 'Biolink ID')\n .action(async (biolinkId) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Fetching buttons...').start();\n try {\n const { data } = await client.get(`/v1/biolinks/${biolinkId}/buttons`);\n spinner.stop();\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to fetch buttons');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('biolink:add-button')\n .description('Add a button to a biolink')\n .argument('<biolink-id>', 'Biolink ID')\n .requiredOption('--type <type>', 'Button type: link, social, email, phone, file, text')\n .requiredOption('--text <text>', 'Button text (max 100 chars)')\n .option('--url <url>', 'URL (for link/social type)')\n .option('--email <email>', 'Email (for email type)')\n .option('--phone <phone>', 'Phone (for phone type)')\n .option('--file-url <url>', 'File URL (for file type)')\n .option('--content <content>', 'Content (for text type)')\n .option('--icon <icon>', 'Icon name')\n .option('--color <hex>', 'Custom button color (hex)')\n .action(async (biolinkId, opts) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Adding button...').start();\n try {\n const { data } = await client.post(`/v1/biolinks/${biolinkId}/buttons`, {\n type: opts.type.toUpperCase(),\n text: opts.text,\n ...(opts.url && { url: opts.url }),\n ...(opts.email && { email: opts.email }),\n ...(opts.phone && { phone: opts.phone }),\n ...(opts.fileUrl && { fileUrl: opts.fileUrl }),\n ...(opts.content && { content: opts.content }),\n ...(opts.icon && { icon: opts.icon }),\n ...(opts.color && { customColor: opts.color }),\n });\n spinner.succeed('Button added');\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to add button');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('biolink:update-button')\n .description('Update a button')\n .argument('<biolink-id>', 'Biolink ID')\n .argument('<button-id>', 'Button ID')\n .option('--text <text>', 'Button text')\n .option('--url <url>', 'URL')\n .option('--icon <icon>', 'Icon')\n .option('--color <hex>', 'Custom color')\n .option('--active', 'Set active')\n .option('--inactive', 'Set inactive')\n .action(async (biolinkId, buttonId, opts) => {\n const body: any = {};\n if (opts.text) body.text = opts.text;\n if (opts.url) body.url = opts.url;\n if (opts.icon) body.icon = opts.icon;\n if (opts.color) body.customColor = opts.color;\n if (opts.active) body.isActive = true;\n if (opts.inactive) body.isActive = false;\n\n if (Object.keys(body).length === 0) {\n console.error(chalk.red('Provide at least one option to update.'));\n process.exitCode = 1;\n return;\n }\n\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Updating button...').start();\n try {\n const { data } = await client.put(`/v1/biolinks/${biolinkId}/buttons/${buttonId}`, body);\n spinner.succeed('Button updated');\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to update button');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('biolink:delete-button')\n .description('Delete a button')\n .argument('<biolink-id>', 'Biolink ID')\n .argument('<button-id>', 'Button ID')\n .option('-y, --yes', 'Skip confirmation')\n .action(async (biolinkId, buttonId, opts) => {\n if (!opts.yes) {\n const answer = await askQuestion(` Delete button ${buttonId}? (y/N) `);\n if (answer.toLowerCase() !== 'y') {\n console.log(chalk.dim(' Cancelled.'));\n return;\n }\n }\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Deleting button...').start();\n try {\n await client.delete(`/v1/biolinks/${biolinkId}/buttons/${buttonId}`);\n spinner.succeed('Button deleted.');\n } catch (error) {\n spinner.fail('Failed to delete button');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('biolink:reorder-buttons')\n .description('Reorder buttons')\n .argument('<biolink-id>', 'Biolink ID')\n .argument('<button-ids...>', 'Button IDs in desired order')\n .action(async (biolinkId, buttonIds) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Reordering buttons...').start();\n try {\n await client.put(`/v1/biolinks/${biolinkId}/buttons/reorder`, {\n itemIds: buttonIds,\n });\n spinner.succeed('Buttons reordered.');\n } catch (error) {\n spinner.fail('Failed to reorder buttons');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n // ── Posts/Gallery ──\n\n program\n .command('biolink:posts')\n .description('List posts/gallery for a biolink')\n .argument('<biolink-id>', 'Biolink ID')\n .action(async (biolinkId) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Fetching posts...').start();\n try {\n const { data } = await client.get(`/v1/biolinks/${biolinkId}/posts`);\n spinner.stop();\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to fetch posts');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('biolink:add-post')\n .description('Add a post to the gallery')\n .argument('<biolink-id>', 'Biolink ID')\n .option('--image <url>', 'Image URL')\n .option('--caption <text>', 'Caption')\n .option('--link <url>', 'Link URL')\n .action(async (biolinkId, opts) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Adding post...').start();\n try {\n const { data } = await client.post(`/v1/biolinks/${biolinkId}/posts`, {\n ...(opts.image && { imageUrl: opts.image }),\n ...(opts.caption && { caption: opts.caption }),\n ...(opts.link && { linkUrl: opts.link }),\n });\n spinner.succeed('Post added');\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to add post');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('biolink:update-post')\n .description('Update a gallery post')\n .argument('<biolink-id>', 'Biolink ID')\n .argument('<post-id>', 'Post ID')\n .option('--caption <text>', 'Caption')\n .option('--link <url>', 'Link URL')\n .option('--visible', 'Set visible')\n .option('--hidden', 'Set hidden')\n .action(async (biolinkId, postId, opts) => {\n const body: any = {};\n if (opts.caption) body.caption = opts.caption;\n if (opts.link) body.linkUrl = opts.link;\n if (opts.visible) body.isVisible = true;\n if (opts.hidden) body.isVisible = false;\n\n if (Object.keys(body).length === 0) {\n console.error(chalk.red('Provide at least one option to update.'));\n process.exitCode = 1;\n return;\n }\n\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Updating post...').start();\n try {\n const { data } = await client.put(`/v1/biolinks/${biolinkId}/posts/${postId}`, body);\n spinner.succeed('Post updated');\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to update post');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('biolink:delete-post')\n .description('Delete a gallery post')\n .argument('<biolink-id>', 'Biolink ID')\n .argument('<post-id>', 'Post ID')\n .option('-y, --yes', 'Skip confirmation')\n .action(async (biolinkId, postId, opts) => {\n if (!opts.yes) {\n const answer = await askQuestion(` Delete post ${postId}? (y/N) `);\n if (answer.toLowerCase() !== 'y') {\n console.log(chalk.dim(' Cancelled.'));\n return;\n }\n }\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Deleting post...').start();\n try {\n await client.delete(`/v1/biolinks/${biolinkId}/posts/${postId}`);\n spinner.succeed('Post deleted.');\n } catch (error) {\n spinner.fail('Failed to delete post');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('biolink:reorder-posts')\n .description('Reorder gallery posts')\n .argument('<biolink-id>', 'Biolink ID')\n .argument('<post-ids...>', 'Post IDs in desired order')\n .action(async (biolinkId, postIds) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Reordering posts...').start();\n try {\n await client.put(`/v1/biolinks/${biolinkId}/posts/reorder`, {\n itemIds: postIds,\n });\n spinner.succeed('Posts reordered.');\n } catch (error) {\n spinner.fail('Failed to reorder posts');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n // ── Analytics ──\n\n program\n .command('biolink:analytics')\n .description('Get biolink analytics (views, clicks, CTR)')\n .argument('<id>', 'Biolink ID')\n .action(async (id) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Fetching analytics...').start();\n try {\n const { data } = await client.get(`/v1/biolinks/${id}/analytics`);\n spinner.stop();\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to fetch analytics');\n printError(error);\n process.exitCode = 1;\n }\n });\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { createInterface } from 'readline';\nimport { createApiClient } from '../lib/api.js';\nimport { getConfig } from '../lib/config.js';\nimport { printOutput, printError, OutputFormat } from '../lib/output.js';\n\nfunction getFormat(program: Command): OutputFormat {\n const opts = program.opts();\n if (opts.table) return 'table';\n return getConfig().outputFormat || 'json';\n}\n\nfunction getGlobalOpts(program: Command) {\n return program.opts() as { apiKey?: string; apiUrl?: string; verbose?: boolean };\n}\n\nfunction askQuestion(question: string): Promise<string> {\n const rl = 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\nexport function registerSettingsCommands(program: Command): void {\n // ── Profile ──\n\n program\n .command('settings:profile')\n .description('Get your user profile')\n .action(async () => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Fetching profile...').start();\n try {\n const { data } = await client.get('/v1/settings/profile');\n spinner.stop();\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to fetch profile');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('settings:update-profile')\n .description('Update your user profile')\n .option('--name <name>', 'Display name')\n .option('--password <password>', 'New password')\n .action(async (opts) => {\n const body: any = {};\n if (opts.name) body.name = opts.name;\n if (opts.password) body.password = opts.password;\n\n if (Object.keys(body).length === 0) {\n console.error(chalk.red('Provide --name or --password to update.'));\n process.exitCode = 1;\n return;\n }\n\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Updating profile...').start();\n try {\n const { data } = await client.patch('/v1/settings/profile', body);\n spinner.succeed('Profile updated');\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to update profile');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n // ── Organization ──\n\n program\n .command('settings:org')\n .description('Get organization details')\n .action(async () => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Fetching organization...').start();\n try {\n const { data } = await client.get('/v1/settings/organization');\n spinner.stop();\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to fetch organization');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('settings:update-org')\n .description('Update organization settings')\n .option('--name <name>', 'Organization name')\n .option('--description <text>', 'Organization description')\n .option('--color <hex>', 'Brand color (hex)')\n .action(async (opts) => {\n const body: any = {};\n if (opts.name) body.name = opts.name;\n if (opts.description) body.description = opts.description;\n if (opts.color) body.color = opts.color;\n\n if (Object.keys(body).length === 0) {\n console.error(chalk.red('Provide --name, --description, or --color to update.'));\n process.exitCode = 1;\n return;\n }\n\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Updating organization...').start();\n try {\n const { data } = await client.patch('/v1/settings/organization', body);\n spinner.succeed('Organization updated');\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to update organization');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n // ── Tenants ──\n\n program\n .command('settings:tenants')\n .description('List all organizations you belong to')\n .action(async () => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Fetching organizations...').start();\n try {\n const { data } = await client.get('/v1/settings/tenants');\n spinner.stop();\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to fetch organizations');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('settings:create-org')\n .description('Create a new organization')\n .requiredOption('--name <name>', 'Organization name')\n .option('--description <text>', 'Description')\n .action(async (opts) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Creating organization...').start();\n try {\n const { data } = await client.post('/v1/settings/tenants', {\n name: opts.name,\n ...(opts.description && { description: opts.description }),\n });\n spinner.succeed(`Organization \"${opts.name}\" created`);\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to create organization');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('settings:delete-org')\n .description('Delete an organization')\n .argument('<id>', 'Organization/tenant ID')\n .option('-y, --yes', 'Skip confirmation')\n .action(async (id, opts) => {\n if (!opts.yes) {\n const answer = await askQuestion(` Delete organization ${id}? This cannot be undone. (y/N) `);\n if (answer.toLowerCase() !== 'y') {\n console.log(chalk.dim(' Cancelled.'));\n return;\n }\n }\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Deleting organization...').start();\n try {\n await client.delete(`/v1/settings/tenants/${id}`);\n spinner.succeed('Organization deleted.');\n } catch (error) {\n spinner.fail('Failed to delete organization');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('settings:leave-org')\n .description('Leave an organization')\n .argument('<id>', 'Organization/tenant ID')\n .option('-y, --yes', 'Skip confirmation')\n .action(async (id, opts) => {\n if (!opts.yes) {\n const answer = await askQuestion(` Leave organization ${id}? (y/N) `);\n if (answer.toLowerCase() !== 'y') {\n console.log(chalk.dim(' Cancelled.'));\n return;\n }\n }\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Leaving organization...').start();\n try {\n await client.post('/v1/settings/tenants/leave', { tenantId: id });\n spinner.succeed('Left organization.');\n } catch (error) {\n spinner.fail('Failed to leave organization');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n // ── API Keys ──\n\n program\n .command('settings:api-keys')\n .description('List API keys')\n .action(async () => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Fetching API keys...').start();\n try {\n const { data } = await client.get('/v1/settings/api-keys');\n spinner.stop();\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to fetch API keys');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('settings:create-api-key')\n .description('Create a new API key')\n .requiredOption('--name <name>', 'Key name')\n .action(async (opts) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Creating API key...').start();\n try {\n const { data } = await client.post('/v1/settings/api-keys', {\n name: opts.name,\n });\n spinner.succeed('API key created');\n console.log();\n console.log(chalk.bold(' Save this key — it will not be shown again:'));\n console.log();\n console.log(` ${chalk.green.bold(data.fullKey)}`);\n console.log();\n printOutput({\n id: data.id,\n name: data.name,\n keyPrefix: data.keyPrefix,\n createdAt: data.createdAt,\n }, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to create API key');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('settings:revoke-api-key')\n .description('Revoke an API key')\n .argument('<id>', 'API key ID')\n .option('-y, --yes', 'Skip confirmation')\n .action(async (id, opts) => {\n if (!opts.yes) {\n const answer = await askQuestion(` Revoke API key ${id}? (y/N) `);\n if (answer.toLowerCase() !== 'y') {\n console.log(chalk.dim(' Cancelled.'));\n return;\n }\n }\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Revoking API key...').start();\n try {\n await client.delete(`/v1/settings/api-keys/${id}`);\n spinner.succeed('API key revoked.');\n } catch (error) {\n spinner.fail('Failed to revoke API key');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n // ── Billing & Usage ──\n\n program\n .command('settings:billing')\n .description('Get subscription status and plan info')\n .action(async () => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Fetching billing info...').start();\n try {\n const { data } = await client.get('/v1/settings/billing');\n spinner.stop();\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to fetch billing info');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('settings:usage')\n .description('Get usage breakdown for current billing period')\n .action(async () => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Fetching usage...').start();\n try {\n const { data } = await client.get('/v1/settings/usage');\n spinner.stop();\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to fetch usage');\n printError(error);\n process.exitCode = 1;\n }\n });\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { createInterface } from 'readline';\nimport { createApiClient } from '../lib/api.js';\nimport { getConfig } from '../lib/config.js';\nimport { printOutput, printError, OutputFormat } from '../lib/output.js';\n\nfunction getFormat(program: Command): OutputFormat {\n const opts = program.opts();\n if (opts.table) return 'table';\n return getConfig().outputFormat || 'json';\n}\n\nfunction getGlobalOpts(program: Command) {\n return program.opts() as { apiKey?: string; apiUrl?: string; verbose?: boolean };\n}\n\nfunction askQuestion(question: string): Promise<string> {\n const rl = 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\nasync function resolveAccountForPlatform(client: any, platform: string): Promise<any | null> {\n const { data: accounts } = await client.get('/v1/accounts');\n const matches = accounts.filter(\n (a: any) => a.platform === platform.toUpperCase(),\n );\n if (matches.length === 0) {\n console.error(chalk.red(`No ${platform} account found. Connect one first.`));\n return null;\n }\n if (matches.length === 1) return matches[0];\n console.log(chalk.bold(` Found ${matches.length} ${platform} accounts:`));\n console.log();\n matches.forEach((a: any, i: number) => {\n const name = a.accountName || a.userName || a.accountId;\n console.log(` ${chalk.cyan(String(i + 1))}. ${name}`);\n });\n console.log();\n const answer = await askQuestion(` Select account (1-${matches.length}): `);\n const index = parseInt(answer, 10) - 1;\n if (isNaN(index) || index < 0 || index >= matches.length) {\n console.log(chalk.yellow(' Invalid selection. Cancelled.'));\n return null;\n }\n return matches[index];\n}\n\nexport function registerDraftsCommands(program: Command): void {\n program\n .command('drafts:list')\n .description('List draft posts')\n .option('--page <number>', 'Page number', '1')\n .option('--limit <number>', 'Items per page', '20')\n .action(async (opts) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Fetching drafts...').start();\n\n try {\n const params: Record<string, unknown> = {\n page: parseInt(opts.page),\n limit: parseInt(opts.limit),\n };\n\n const { data } = await client.get('/v1/drafts', { params });\n spinner.stop();\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to fetch drafts');\n printError(error);\n if (globalOpts.verbose && error instanceof Error) {\n console.error(error.stack);\n }\n process.exitCode = 1;\n }\n });\n\n program\n .command('drafts:get')\n .description('Get a single draft')\n .argument('<id>', 'Draft ID')\n .action(async (id) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Fetching draft...').start();\n\n try {\n const { data } = await client.get(`/v1/drafts/${id}`);\n spinner.stop();\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to fetch draft');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('drafts:create')\n .description('Create a draft post')\n .option('-c, --content <text>', 'Draft content')\n .option('--title <title>', 'Draft title')\n .option('--post-type <type>', 'Content type: TEXT, IMAGE, VIDEO, etc.')\n .option('--description <desc>', 'Draft description')\n .option('-a, --account <id>', 'Social account ID')\n .option('-m, --media <urls...>', 'Media URLs (from media:upload or CDN)')\n .option('--metadata <json>', 'Metadata as JSON')\n .addHelpText('after', `\nExamples:\n $ so-me drafts:create -c \"Draft idea\" --post-type TEXT\n $ so-me drafts:create -c \"With image\" --post-type IMAGE -m https://cdn.example.com/photo.jpg\n $ so-me drafts:create -c \"Multiple media\" -m <url1> <url2> <url3> --post-type MULTIPLE_IMAGES\n $ so-me drafts:create -c \"With metadata\" --metadata '{\"key\":\"value\"}'`)\n .action(async (opts) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Creating draft...').start();\n\n try {\n const body: Record<string, unknown> = {};\n if (opts.content) body.text = opts.content;\n if (opts.title) body.title = opts.title;\n if (opts.postType) body.postType = opts.postType;\n if (opts.description) body.description = opts.description;\n if (opts.account) body.accountId = opts.account;\n\n const metaData: Record<string, unknown> = opts.metadata ? JSON.parse(opts.metadata) : {};\n if (opts.media) metaData.mediaUrls = opts.media;\n if (Object.keys(metaData).length > 0) body.metaData = metaData;\n\n const { data } = await client.post('/v1/drafts', body);\n spinner.succeed('Draft created');\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to create draft');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('drafts:update')\n .description('Update a draft post')\n .argument('<id>', 'Draft ID')\n .option('-c, --content <text>', 'Updated content')\n .option('--title <title>', 'Updated title')\n .option('--post-type <type>', 'Updated content type')\n .option('--description <desc>', 'Updated description')\n .option('-m, --media <urls...>', 'Media URLs (replaces existing)')\n .option('--metadata <json>', 'Updated metadata as JSON')\n .action(async (id, opts) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Updating draft...').start();\n\n try {\n const body: Record<string, unknown> = {};\n if (opts.content) body.text = opts.content;\n if (opts.title) body.title = opts.title;\n if (opts.postType) body.postType = opts.postType;\n if (opts.description) body.description = opts.description;\n\n const metaData: Record<string, unknown> = opts.metadata ? JSON.parse(opts.metadata) : {};\n if (opts.media) metaData.mediaUrls = opts.media;\n if (Object.keys(metaData).length > 0) body.metaData = metaData;\n\n const { data } = await client.patch(`/v1/drafts/${id}`, body);\n spinner.succeed('Draft updated');\n printOutput(data, getFormat(program));\n } catch (error) {\n spinner.fail('Failed to update draft');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('drafts:delete')\n .description('Delete one or more drafts')\n .argument('<ids...>', 'Draft ID(s)')\n .option('-y, --yes', 'Skip confirmation prompt')\n .action(async (ids: string[], opts) => {\n const globalOpts = getGlobalOpts(program);\n\n if (!opts.yes) {\n const readline = await import('node:readline');\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout });\n const label = ids.length === 1 ? `draft ${ids[0]}` : `${ids.length} drafts`;\n const answer = await new Promise<string>((resolve) => {\n rl.question(`Are you sure you want to delete ${label}? (y/N) `, resolve);\n });\n rl.close();\n if (answer.toLowerCase() !== 'y') {\n console.log('Cancelled.');\n return;\n }\n }\n\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n const spinner = ora('Deleting draft(s)...').start();\n\n try {\n let deleted = 0;\n for (const id of ids) {\n try {\n await client.delete(`/v1/drafts/${id}`);\n deleted++;\n } catch (err) {\n // Continue deleting remaining drafts\n }\n }\n if (ids.length === 1) {\n spinner.succeed(`Draft ${ids[0]} deleted`);\n } else {\n spinner.succeed(`Deleted ${deleted}/${ids.length} drafts`);\n }\n } catch (error) {\n spinner.fail('Failed to delete draft(s)');\n printError(error);\n process.exitCode = 1;\n }\n });\n\n program\n .command('drafts:convert')\n .description('Convert a draft to a post')\n .argument('<id>', 'Draft ID')\n .option('--platform <platform>', 'Social platform: TWITTER, LINKEDIN, INSTAGRAM, etc.')\n .option('--post-type <type>', 'Content type: TEXT, IMAGE, VIDEO, etc.')\n .option('-c, --content <text>', 'Post content (overrides draft text)')\n .option('-a, --account <id>', 'Social account ID')\n .option('-s, --date <date>', 'Schedule date (ISO 8601)')\n .addHelpText('after', `\nExamples:\n $ so-me drafts:convert <id> --platform TWITTER --post-type TEXT\n $ so-me drafts:convert <id> --platform LINKEDIN -s 2026-04-10T14:00:00Z\n $ so-me drafts:convert <id> --platform INSTAGRAM --post-type IMAGE`)\n .action(async (id, opts) => {\n const globalOpts = getGlobalOpts(program);\n const client = createApiClient({ apiKey: globalOpts.apiKey, apiUrl: globalOpts.apiUrl });\n let spinner: ReturnType<typeof ora> | null = null;\n\n try {\n const body: Record<string, unknown> = {};\n if (opts.platform) body.platform = opts.platform;\n if (opts.postType) body.postType = opts.postType;\n if (opts.content) body.text = opts.content;\n if (opts.date) body.scheduledAt = opts.date;\n\n // Auto-resolve account from platform if not explicitly provided\n if (opts.account) {\n body.accountId = opts.account;\n } else if (opts.platform) {\n const account = await resolveAccountForPlatform(client, opts.platform);\n if (!account) { process.exitCode = 1; return; }\n body.accountId = account.accountId;\n }\n\n spinner = ora('Converting draft to post...').start();\n const { data } = await client.post(`/v1/drafts/${id}/convert`, body);\n spinner.succeed(`Draft ${id} converted to post ${data.id}`);\n printOutput(data, getFormat(program));\n } catch (error) {\n if (spinner) spinner.fail('Failed to convert draft');\n else console.error(chalk.red('Failed to convert draft'));\n printError(error);\n process.exitCode = 1;\n }\n });\n}\n","import { createProgram } from '../src/index.js';\n\nconst program = createProgram();\n\nprogram.parseAsync(process.argv).catch((error) => {\n if (error.code === 'commander.helpDisplayed' || error.code === 'commander.version') {\n process.exit(0);\n }\n console.error(error.message || error);\n process.exit(1);\n});\n"],"mappings":"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","names":["program","chalk","ora","axios","axios","program","chalk","ora","fs","id","ora","axios","chalk","createInterface","getFormat","program","getGlobalOpts","chalk","askQuestion","createInterface","ora","axios","name","ora","fs","path","axios","chalk","createInterface","getFormat","program","getGlobalOpts","askQuestion","createInterface","chalk","ora","path","fs","axios","deleteSpinner","chalk","ora","getFormat","program","getGlobalOpts","chalk","spinner","ora","chalk","ora","createInterface","UUID_RE","UUID_RE","chalk","askQuestion","createInterface","getFormat","program","getGlobalOpts","ora","ora","getFormat","program","getGlobalOpts","ora","chalk","ora","createInterface","getFormat","program","getGlobalOpts","askQuestion","createInterface","program","getGlobalOpts","ora","getFormat","chalk","chalk","ora","createInterface","getFormat","program","getGlobalOpts","askQuestion","createInterface","ora","chalk","chalk","ora","createInterface","getFormat","program","getGlobalOpts","askQuestion","createInterface","ora","chalk","chalk","ora","createInterface","getFormat","program","getGlobalOpts","askQuestion","createInterface","resolveAccountForPlatform","chalk","ora","program"]}
|