polyv-live-cli
Version:
CLI tool for managing PolyV live streaming services.
134 lines • 6.02 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.AIDigitalHumanHandler = void 0;
const base_handler_1 = require("./base.handler");
const errors_1 = require("../utils/errors");
const ai_digital_human_service_1 = require("../services/ai-digital-human-service");
class AIDigitalHumanHandler extends base_handler_1.BaseHandler {
constructor(authConfig, serviceConfig) {
super();
this.aiDigitalHumanService = new ai_digital_human_service_1.AIDigitalHumanServiceSdk(authConfig, serviceConfig);
}
async listDigitalHumans(options) {
const format = options.output || 'table';
const page = options.page || 1;
const size = options.size || 10;
const response = await this.aiDigitalHumanService.listDigitalHumans(page, size);
if (format === 'json') {
this.displayData(response, 'json');
}
else {
this.displayDigitalHumansTable(response);
}
}
async listOrganizations(options) {
const format = options.output || 'table';
this.validateIds(options.ids);
const associations = await this.aiDigitalHumanService.listOrganizations(options.ids);
if (format === 'json') {
this.displayData(associations, 'json');
}
else {
this.displayOrganizationsTable(associations);
}
}
async setOrganizations(options) {
const format = options.output || 'table';
let params;
if (options.configJson) {
try {
params = JSON.parse(options.configJson);
}
catch {
throw new errors_1.PolyVValidationError('Invalid JSON config format', 'configJson', options.configJson, 'invalid');
}
if (!Array.isArray(params) || params.length === 0) {
throw new errors_1.PolyVValidationError('config-json must be a non-empty array', 'configJson', options.configJson, 'invalid');
}
}
else {
if (!options.aiDigitalHumanId || options.aiDigitalHumanId.trim() === '') {
throw new errors_1.PolyVValidationError('aiDigitalHumanId is required when config-json is not provided', 'aiDigitalHumanId', options.aiDigitalHumanId, 'required');
}
if (!options.organizationIds || options.organizationIds.trim() === '') {
throw new errors_1.PolyVValidationError('organizationIds is required when config-json is not provided', 'organizationIds', options.organizationIds, 'required');
}
const orgIds = options.organizationIds
.split(',')
.map(id => parseInt(id.trim(), 10))
.filter(id => !isNaN(id));
params = [{
aiDigitalHumanId: parseInt(options.aiDigitalHumanId, 10),
organizationIds: orgIds,
includeChildren: options.includeChildren ?? true,
}];
}
const result = await this.aiDigitalHumanService.setOrganizations(params);
if (format === 'json') {
this.displayData({ success: result, count: params.length }, 'json');
}
else {
this.displaySetSuccessTable(params.length);
}
}
validateIds(ids) {
if (!ids || ids.trim() === '') {
throw new errors_1.PolyVValidationError('ids is required', 'ids', ids, 'required');
}
const idsArray = ids.split(',').map(id => id.trim()).filter(id => id.length > 0);
if (idsArray.length === 0) {
throw new errors_1.PolyVValidationError('ids must contain at least one valid ID', 'ids', ids, 'invalid');
}
for (const id of idsArray) {
if (!/^\d+$/.test(id)) {
throw new errors_1.PolyVValidationError(`Invalid ID format: ${id}. IDs must be numeric`, 'ids', ids, 'invalid');
}
}
if (idsArray.length > 100) {
throw new errors_1.PolyVValidationError(`ids count (${idsArray.length}) exceeds maximum of 100`, 'ids', ids, 'exceed_maximum');
}
}
displayDigitalHumansTable(response) {
if (response.contents.length === 0) {
console.log('No AI Digital Humans found (未找到AI数字人)');
return;
}
const tableData = response.contents.map((dh) => {
return {
'ID': dh.id,
'名称': dh.name,
'角色代码': dh.thirdRoleCode,
'服装': dh.clothesDesc,
'默认语音ID': dh.defaultTtsVoiceId,
'创建时间': this.formatTimestamp(dh.createTime),
};
});
this.displayAsTable(tableData);
console.log(`\nPage ${response.pageNumber}/${response.totalPages} | Total: ${response.totalItems} items (第 ${response.pageNumber}/${response.totalPages} 页 | 共 ${response.totalItems} 条)`);
}
displayOrganizationsTable(associations) {
if (associations.length === 0) {
console.log('No organization associations found (未找到组织关联)');
return;
}
const tableData = associations.map((assoc) => {
return {
'数字人ID': assoc.aiDigitalHumanId,
'关联组织ID': (assoc.organizationIds || []).join(', '),
'包含子组织': assoc.includeChildren ? 'Yes' : 'No',
};
});
this.displayAsTable(tableData);
}
displaySetSuccessTable(count) {
console.log(`✅ Successfully set organizations for ${count} AI Digital Human(s) (成功设置 ${count} 个AI数字人的组织关联)`);
}
formatTimestamp(timestamp) {
if (!timestamp)
return '-';
const date = new Date(timestamp);
return date.toISOString().split('T')[0] || '-';
}
}
exports.AIDigitalHumanHandler = AIDigitalHumanHandler;
//# sourceMappingURL=ai-digital-human.handler.js.map