UNPKG

polyv-live-cli

Version:

CLI tool for managing PolyV live streaming services.

177 lines 6.09 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.loadApiCommandConfig = loadApiCommandConfig; exports.validateOutputFormat = validateOutputFormat; exports.validateYn = validateYn; exports.parsePositiveInteger = parsePositiveInteger; exports.parseNonNegativeNumber = parseNonNegativeNumber; exports.parseTimestamp = parseTimestamp; exports.parseJsonObject = parseJsonObject; exports.resolveJsonObjectOption = resolveJsonObjectOption; exports.parseJsonArray = parseJsonArray; exports.parseStringList = parseStringList; exports.parseNumberList = parseNumberList; exports.compactParams = compactParams; exports.apiParams = apiParams; exports.confirmWrite = confirmWrite; exports.displayApiResult = displayApiResult; exports.commandParentOptions = commandParentOptions; const auth_adapter_1 = require("../config/auth-adapter"); const manager_1 = require("../config/manager"); const confirmation_1 = require("./confirmation"); const formatter_1 = require("./formatter"); async function loadApiCommandConfig(parentOptions) { const authResult = auth_adapter_1.authAdapter.tryGetAuthConfig(parentOptions); if (!authResult) { throw new Error(auth_adapter_1.authAdapter.getStatusMessage(parentOptions)); } let configResult; try { configResult = await manager_1.configManager.load({ cliOptions: parentOptions }); } catch (error) { if (error instanceof Error && error.message.includes('Auth configuration is incomplete')) { configResult = { config: { baseUrl: 'https://api.polyv.net', timeout: 30000, maxRetries: 3, debug: false, }, }; } else { throw error; } } return { authConfig: authResult.config, serviceConfig: { baseUrl: configResult.config.baseUrl, timeout: configResult.config.timeout, maxRetries: configResult.config.maxRetries, debug: configResult.config.debug, }, }; } function validateOutputFormat(value) { if (value !== 'table' && value !== 'json') { throw new Error('output must be table or json'); } return value; } function validateYn(value) { if (value !== 'Y' && value !== 'N') { throw new Error('value must be Y or N'); } return value; } function parsePositiveInteger(value) { const parsed = Number(value); if (!Number.isInteger(parsed) || parsed <= 0) { throw new Error('value must be a positive integer'); } return parsed; } function parseNonNegativeNumber(value) { const parsed = Number(value); if (!Number.isFinite(parsed) || parsed < 0) { throw new Error('value must be a non-negative number'); } return parsed; } function parseTimestamp(value) { const parsed = Number(value); if (!Number.isFinite(parsed) || parsed <= 0) { throw new Error('timestamp must be a positive number'); } return parsed; } function parseJsonObject(value) { const parsed = JSON.parse(value); if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) { throw new Error('value must be a JSON object'); } return parsed; } function resolveJsonObjectOption(value, legacyGlobalConfigValue) { if (value && typeof value === 'object' && !Array.isArray(value)) { return value; } if (typeof value === 'string') { return parseJsonObject(value); } if (typeof legacyGlobalConfigValue === 'string' && legacyGlobalConfigValue.trim().startsWith('{')) { return parseJsonObject(legacyGlobalConfigValue); } return undefined; } function parseJsonArray(value) { const parsed = JSON.parse(value); if (!Array.isArray(parsed)) { throw new Error('value must be a JSON array'); } return parsed; } function parseStringList(value) { const list = value.split(',').map((item) => item.trim()).filter(Boolean); if (list.length === 0) { throw new Error('list must not be empty'); } return list; } function parseNumberList(value) { return parseStringList(value).map((item) => parsePositiveInteger(item)); } function compactParams(params) { return Object.fromEntries(Object.entries(params).filter(([, value]) => value !== undefined && value !== '')); } function apiParams(params) { const { output, force, dryRun, ...rest } = params; void output; void force; void dryRun; return compactParams(rest); } async function confirmWrite(force, message) { if (force) return; const confirmed = await (0, confirmation_1.confirmDeletion)(message); if (!confirmed) { throw new Error('Operation cancelled.'); } } function displayApiResult(data, output = 'table') { if (output === 'json') { console.log((0, formatter_1.formatJSON)(data)); return; } if (Array.isArray(data) && data.length > 0 && typeof data[0] === 'object' && data[0] !== null) { const headers = Object.keys(data[0]); const rows = data.map((item) => headers.map((header) => formatCell(item[header]))); console.log((0, formatter_1.formatTable)({ headers, data: rows })); return; } if (data && typeof data === 'object' && !Array.isArray(data)) { const entries = Object.entries(data); if (entries.every(([, value]) => typeof value !== 'object' || value === null)) { console.log((0, formatter_1.formatTable)({ headers: ['Field', 'Value'], data: entries.map(([key, value]) => [key, formatCell(value)]), })); return; } } console.log((0, formatter_1.formatJSON)(data)); } function formatCell(value) { if (value === undefined || value === null) return ''; if (typeof value === 'object') return JSON.stringify(value); return String(value); } function commandParentOptions(program) { return program.opts(); } //# sourceMappingURL=api-command.js.map