UNPKG

polyv-live-cli

Version:

CLI tool for managing PolyV live streaming services.

761 lines 31.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ChannelServiceSdk = void 0; const errors_1 = require("../utils/errors"); const sdk_1 = require("../sdk"); class ChannelServiceSdk { constructor(authConfig, serviceConfig) { this.authConfig = authConfig; this.config = serviceConfig; } async createChannel(request) { try { this.validateCreateRequest(request); const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); const createParams = { name: request.name, newScene: request.newScene || 'topclass', template: request.template || 'ppt', channelPasswd: request.channelPasswd, linkMicLimit: request.linkMicLimit, startTime: request.startTime, endTime: request.endTime, }; const result = await client.v4Channel.create(createParams); return { channelId: String(result.channelId), name: request.name, userId: result.userId || this.authConfig.userId || '', channelPasswd: request.channelPasswd || '', newScene: request.newScene, template: request.template, status: 'waiting', createdAt: new Date(), }; } catch (error) { throw this.handleError(error, 'createChannel'); } } async listChannels(request = {}) { try { this.validateListRequest(request); const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); const pageNumber = request.page ?? 1; const pageSize = request.limit ?? 20; const result = await client.v4Channel.channelDetailList({ pageNumber, pageSize, }); if (!result?.contents || result.contents.length === 0) { return []; } let channels = result.contents; if (request.keyword) { channels = channels.filter((ch) => ch.name?.toLowerCase().includes(request.keyword.toLowerCase())); } return channels.map((channel) => ({ channelId: String(channel.channelId), name: channel.name, status: this.mapWatchStatus(channel.watchStatus), createdAt: new Date(channel.startTime || Date.now()), scene: channel.newScene || channel.scene, template: channel.template, description: '', ...(channel.maxViewer && channel.maxViewer > 0 && { maxViewers: channel.maxViewer }), })); } catch (error) { throw this.handleError(error, 'listChannels'); } } async getChannelDetail(request) { try { this.validateChannelDetailRequest(request); const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); const result = await client.v4Channel.getChannel({ channelId: request.channelId, }); return result; } catch (error) { throw this.handleError(error, 'getChannelDetail'); } } async updateChannel(request) { try { this.validateChannelUpdateRequest(request); const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); if (request.basicSetting) { await client.channel.updateChannel(request.channelId, this.mapBasicSetting(request.basicSetting)); } return { code: 200, status: 'success', success: true, data: null, }; } catch (error) { throw this.handleError(error, 'updateChannel'); } } async deleteChannel(channelId) { try { this.validateChannelId(channelId); const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); await client.channel.batchDeleteChannels([channelId]); return { code: 200, status: 'success', data: true, }; } catch (error) { throw this.handleError(error, 'deleteChannel'); } } async batchDeleteChannels(request) { try { this.validateBatchDeleteRequest(request); const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); await client.channel.batchDeleteChannels(request.channelIds); return { code: 200, status: 'success', data: true, }; } catch (error) { throw this.handleError(error, 'batchDeleteChannels'); } } async checkChannelStatusValid(params) { try { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return await client.other.checkChannelStatusValid(params); } catch (error) { throw this.handleError(error, 'checkChannelStatusValid'); } } async resetCcbFocus(params) { try { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return await client.other.resetCcbFocus(params); } catch (error) { throw this.handleError(error, 'resetCcbFocus'); } } async listChannelViewerGroups(params) { try { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return await client.channel.listChannelViewerGroups(params); } catch (error) { throw this.handleError(error, 'listChannelViewerGroups'); } } async createChannelViewerGroup(params) { try { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return await client.channel.createChannelViewerGroup(params); } catch (error) { throw this.handleError(error, 'createChannelViewerGroup'); } } async updateChannelViewerGroup(params) { try { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return await client.channel.updateChannelViewerGroup(params); } catch (error) { throw this.handleError(error, 'updateChannelViewerGroup'); } } async deleteChannelViewerGroup(params) { try { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return await client.channel.deleteChannelViewerGroup(params); } catch (error) { throw this.handleError(error, 'deleteChannelViewerGroup'); } } async getChannelViewerGroupSetting(params) { try { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return await client.channel.getChannelViewerGroupSetting(params); } catch (error) { throw this.handleError(error, 'getChannelViewerGroupSetting'); } } async updateChannelViewerGroupSetting(params) { try { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return await client.channel.updateChannelViewerGroupSetting(params); } catch (error) { throw this.handleError(error, 'updateChannelViewerGroupSetting'); } } async listChannelViewers(params) { try { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return await client.channel.listChannelViewers(params); } catch (error) { throw this.handleError(error, 'listChannelViewers'); } } async exportChannelViewers(params) { try { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return await client.channel.exportChannelViewers(params); } catch (error) { throw this.handleError(error, 'exportChannelViewers'); } } async addChannelViewers(params) { try { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return await client.channel.addChannelViewers(params); } catch (error) { throw this.handleError(error, 'addChannelViewers'); } } async deleteChannelViewers(params) { try { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return await client.channel.deleteChannelViewers(params); } catch (error) { throw this.handleError(error, 'deleteChannelViewers'); } } async transferChannelViewers(params) { try { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return await client.channel.transferChannelViewers(params); } catch (error) { throw this.handleError(error, 'transferChannelViewers'); } } async importChannelViewers(params) { try { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return await client.channel.importChannelViewers(params); } catch (error) { throw this.handleError(error, 'importChannelViewers'); } } async listUnrelatedChannelViewers(params) { try { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return await client.channel.listUnrelatedChannelViewers(params); } catch (error) { throw this.handleError(error, 'listUnrelatedChannelViewers'); } } async getAccount(channelId, account) { try { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return await client.channel.getAccount(channelId, account); } catch (error) { throw this.handleError(error, 'getAccount'); } } async getAccounts(channelId) { try { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return await client.channel.getAccounts(channelId); } catch (error) { throw this.handleError(error, 'getAccounts'); } } async deleteAccount(channelId, account) { try { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return await client.channel.deleteAccount(channelId, account); } catch (error) { throw this.handleError(error, 'deleteAccount'); } } async batchCreateAccounts(channelId, accounts) { try { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return await client.channel.batchCreateAccounts(channelId, accounts); } catch (error) { throw this.handleError(error, 'batchCreateAccounts'); } } async getChannelAdverts(channelId) { try { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return await client.channel.getChannelAdverts(channelId); } catch (error) { throw this.handleError(error, 'getChannelAdverts'); } } async getCallbackSetting(channelId) { try { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return await client.channel.getCallbackSetting(channelId); } catch (error) { throw this.handleError(error, 'getCallbackSetting'); } } async updateCallbackSetting(channelId, options) { try { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return await client.channel.updateCallbackSetting(channelId, options); } catch (error) { throw this.handleError(error, 'updateCallbackSetting'); } } async getPptRecordSetting(channelId) { try { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return await client.channel.getPptRecordSetting(channelId); } catch (error) { throw this.handleError(error, 'getPptRecordSetting'); } } async listPptRecordTasks(params) { try { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return await client.channel.listPptRecordTasks(params); } catch (error) { throw this.handleError(error, 'listPptRecordTasks'); } } async addPptRecordTask(params) { try { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return await client.channel.addPptRecordTask(params); } catch (error) { throw this.handleError(error, 'addPptRecordTask'); } } async updatePptRecordSetting(params) { try { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return await client.channel.updatePptRecordSetting(params); } catch (error) { throw this.handleError(error, 'updatePptRecordSetting'); } } async deletePptRecord(params) { try { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return await client.channel.deletePptRecord(params); } catch (error) { throw this.handleError(error, 'deletePptRecord'); } } async copyChannel(channelId, options) { try { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return await client.channel.copyChannel(channelId, options); } catch (error) { throw this.handleError(error, 'copyChannel'); } } async getUserChildrenChannels(params) { try { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return await client.channel.getUserChildrenChannels(params); } catch (error) { throw this.handleError(error, 'getUserChildrenChannels'); } } async getWatchApiToken(params) { try { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return await client.channel.getWatchApiToken(params); } catch (error) { throw this.handleError(error, 'getWatchApiToken'); } } async getApiToken(params) { try { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return await client.channel.getApiToken(params); } catch (error) { throw this.handleError(error, 'getApiToken'); } } async getTokenLoginUrl(params) { try { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return await client.channel.getTokenLoginUrl(params); } catch (error) { throw this.handleError(error, 'getTokenLoginUrl'); } } async getChatToken(params) { try { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return await client.channel.getChatToken(params); } catch (error) { throw this.handleError(error, 'getChatToken'); } } async listChannelsFollow(params) { try { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return await client.channel.listChannelsFollow(params); } catch (error) { throw this.handleError(error, 'listChannelsFollow'); } } async updateChannelsFollow(params) { try { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return await client.channel.updateChannelsFollow(params); } catch (error) { throw this.handleError(error, 'updateChannelsFollow'); } } async batchAddSubmeeting(params) { try { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return await client.channel.batchAddSubmeeting(params); } catch (error) { throw this.handleError(error, 'batchAddSubmeeting'); } } async channelsStopQuestionnaire(params) { try { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return await client.channel.channelsStopQuestionnaire(params); } catch (error) { throw this.handleError(error, 'channelsStopQuestionnaire'); } } async batchUpdateDanmu(params) { try { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return await client.channel.batchUpdateDanmu(params); } catch (error) { throw this.handleError(error, 'batchUpdateDanmu'); } } async setChannelToken(params) { try { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return await client.channel.setChannelToken(params); } catch (error) { throw this.handleError(error, 'setChannelToken'); } } async setAccountToken(params) { try { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return await client.channel.setAccountToken(params); } catch (error) { throw this.handleError(error, 'setAccountToken'); } } async setMaxViewer(channelId, userId, maxViewer) { try { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return await client.channel.setMaxViewer(channelId, userId, maxViewer); } catch (error) { throw this.handleError(error, 'setMaxViewer'); } } async updateChannelPassword(userId, passwd, channelId) { try { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return await client.channel.updateChannelPassword(userId, passwd, channelId); } catch (error) { throw this.handleError(error, 'updateChannelPassword'); } } async setDiyUrlMarquee(params) { try { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return await client.channel.setDiyUrlMarquee(params); } catch (error) { throw this.handleError(error, 'setDiyUrlMarquee'); } } async listAllChannelBasic(params = {}) { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return client.v4Channel.listAllChannelBasic(params); } async listChannelSimple(params = {}) { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return client.v4Channel.listChannelSimple(params); } async listLiveStatus(params) { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return client.v4Channel.listLiveStatus(params); } async getAccountViewerConfig(params) { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return client.v4Channel.getAccountViewerConfig(params); } async updateAccountViewerConfig(params) { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return client.v4Channel.updateAccountViewerConfig(params); } async getByRole(params) { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return client.v4Channel.getByRole(params); } async updateByRole(params) { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return client.v4Channel.updateByRole(params); } async createAccount(params) { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return client.v4Channel.createAccount(params); } async updateAccountInfo(params) { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return client.v4Channel.updateAccountInfo(params); } async deleteAccountsBatch(params) { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return client.v4Channel.deleteAccountsBatch(params); } async teacherList(params) { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return client.v4Channel.teacherList(params); } async getSubtitleConfig(params) { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return client.v4Channel.getSubtitleConfig(params); } async updateSubtitleConfig(params) { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return client.v4Channel.updateSubtitleConfig(params); } async listSubtitleLanguages() { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return client.v4Channel.listSubtitleLanguages(); } async distributeList(params) { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return client.v4Channel.distributeList(params); } async distributeCreateBatch(params) { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return client.v4Channel.distributeCreateBatch(params); } async distributeUpdateBatch(params) { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return client.v4Channel.distributeUpdateBatch(params); } async distributeDeleteBatch(params) { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return client.v4Channel.distributeDeleteBatch(params); } async getDistributeStatistic(params) { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return client.v4Channel.getDistributeStatistic(params); } async updateMasterSwitch(params) { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return client.v4Channel.updateMasterSwitch(params); } async updateSwitch(params) { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return client.v4Channel.updateSwitch(params); } async createInit(params) { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return client.v4Channel.createInit(params); } async createMrChannel(params) { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return client.v4Channel.createMrChannel(params); } async setPullBitrate(params) { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return client.v4Channel.setPullBitrate(params); } async updateTemplate(params) { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return client.v4Channel.updateTemplate(params); } async getChannelApiAccessToken(params) { const { channelId, ...options } = params; const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return client.channel.getChannelApiAccessToken(channelId, this.compactOptions(options)); } async getTestModeToken(params) { const { channelId, ...options } = params; const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return client.channel.getTestModeToken(channelId, this.compactOptions(options)); } async createBatch(params) { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return client.v4Channel.createBatch(params); } async updateV4(params) { const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl); return client.v4Channel.update(params); } validateCreateRequest(request) { const errors = []; if (!request.name || typeof request.name !== 'string') { errors.push('Channel name is required and must be a string'); } else if (request.name.length === 0) { errors.push('Channel name cannot be empty'); } else if (request.name.length > 100) { errors.push('Channel name cannot exceed 100 characters'); } if (!request.newScene || !['topclass', 'alone', 'seminar', 'train', 'double', 'guide'].includes(request.newScene)) { errors.push('newScene must be one of: topclass, alone, seminar, train, double, guide'); } if (!request.template || !['ppt', 'portrait_ppt', 'alone', 'portrait_alone', 'topclass', 'portrait_topclass', 'seminar'].includes(request.template)) { errors.push('template must be one of: ppt, portrait_ppt, alone, portrait_alone, topclass, portrait_topclass, seminar'); } if (errors.length > 0) { throw new errors_1.PolyVValidationError(`Channel creation request validation failed: ${errors.join(', ')}`, 'request', request, 'validation_failed'); } } validateListRequest(request) { const errors = []; if (request.page !== undefined && (typeof request.page !== 'number' || request.page < 1)) { errors.push('page must be a positive integer (minimum 1)'); } if (request.limit !== undefined && (typeof request.limit !== 'number' || request.limit < 1 || request.limit > 100)) { errors.push('limit must be an integer between 1 and 100'); } if (errors.length > 0) { throw new errors_1.PolyVValidationError(`Channel list request validation failed: ${errors.join(', ')}`, 'request', request, 'validation_failed'); } } validateChannelDetailRequest(request) { if (!request.channelId || typeof request.channelId !== 'string') { throw new errors_1.PolyVValidationError('channelId is required and must be a string', 'channelId', request, 'validation_failed'); } } validateChannelUpdateRequest(request) { const errors = []; if (!request.channelId || typeof request.channelId !== 'string') { errors.push('channelId is required and must be a string'); } if (!request.basicSetting && !request.authSettings) { errors.push('at least one update field must be provided'); } if (errors.length > 0) { throw new errors_1.PolyVValidationError(`Channel update request validation failed: ${errors.join(', ')}`, 'request', request, 'validation_failed'); } } validateChannelId(channelId) { if (!channelId || typeof channelId !== 'string') { throw new errors_1.PolyVValidationError('channelId is required and must be a string', 'channelId', channelId, 'validation_failed'); } } validateBatchDeleteRequest(request) { if (!request.channelIds || !Array.isArray(request.channelIds) || request.channelIds.length === 0) { throw new errors_1.PolyVValidationError('channelIds is required and must be a non-empty array', 'channelIds', request, 'validation_failed'); } } mapWatchStatus(status) { const statusMap = { 'waiting': 'waiting', 'living': 'live', 'live': 'live', 'end': 'end', 'ended': 'end', 'unStart': 'unStart', }; return statusMap[status] || 'waiting'; } mapBasicSetting(setting) { const result = {}; if ('name' in setting && setting.name !== undefined) result['name'] = setting['name']; if ('channelPasswd' in setting && setting['channelPasswd'] !== undefined) result['channelPasswd'] = setting['channelPasswd']; if ('publisher' in setting && setting['publisher'] !== undefined) result['publisher'] = setting['publisher']; if ('desc' in setting && setting['desc'] !== undefined) result['desc'] = setting['desc']; if ('startTime' in setting && setting['startTime'] !== undefined) result['startTime'] = setting['startTime']; if ('endTime' in setting && setting['endTime'] !== undefined) result['endTime'] = setting['endTime']; if ('pageView' in setting && setting['pageView'] !== undefined) result['pageView'] = setting['pageView']; if ('likes' in setting && setting['likes'] !== undefined) result['likes'] = setting['likes']; if ('coverImg' in setting && setting['coverImg'] !== undefined) result['coverImg'] = setting['coverImg']; if ('splashImg' in setting && setting['splashImg'] !== undefined) result['splashImg'] = setting['splashImg']; if ('maxViewer' in setting && setting['maxViewer'] !== undefined) result['maxViewer'] = setting['maxViewer']; if ('maxViewerRestrict' in setting && setting['maxViewerRestrict'] !== undefined) result['maxViewerRestrict'] = setting['maxViewerRestrict']; return result; } compactOptions(params) { return Object.fromEntries(Object.entries(params).filter(([, value]) => value !== undefined && value !== '')); } handleError(error, operation) { if (this.config.debug) { console.error(`[ChannelServiceSdk] Error in ${operation}:`, error); } if (error instanceof errors_1.PolyVError || error instanceof errors_1.PolyVAPIError || error instanceof errors_1.PolyVValidationError) { return error; } if (error instanceof Error) { const anyError = error; if (anyError.polyvCode || anyError.code) { return new errors_1.PolyVAPIError(error.message, anyError.code || 'API_ERROR', anyError.status || 500, { polyvCode: anyError.polyvCode, polyvMessage: anyError.polyvMessage || error.message, }); } return new errors_1.PolyVError(`Failed to ${operation}: ${error.message}`, 'CHANNEL_SERVICE_ERROR', 500, { originalError: error.message }); } return new errors_1.PolyVError(`Failed to ${operation}: Unknown error`, 'UNKNOWN_ERROR', 500, { originalError: String(error) }); } } exports.ChannelServiceSdk = ChannelServiceSdk; //# sourceMappingURL=channel.service.sdk.js.map