polyv-live-cli 1.2.27 → 1.2.29-rc.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.
Files changed (467) hide show
  1. package/README.md +81 -422
  2. package/dist/commands/account.commands.d.ts.map +1 -1
  3. package/dist/commands/account.commands.js +298 -0
  4. package/dist/commands/account.commands.js.map +1 -1
  5. package/dist/commands/ai.commands.d.ts +4 -1
  6. package/dist/commands/ai.commands.d.ts.map +1 -1
  7. package/dist/commands/ai.commands.js +245 -6
  8. package/dist/commands/ai.commands.js.map +1 -1
  9. package/dist/commands/card-push.commands.d.ts +1 -0
  10. package/dist/commands/card-push.commands.d.ts.map +1 -1
  11. package/dist/commands/card-push.commands.js +66 -0
  12. package/dist/commands/card-push.commands.js.map +1 -1
  13. package/dist/commands/channel.commands.d.ts +6 -1
  14. package/dist/commands/channel.commands.d.ts.map +1 -1
  15. package/dist/commands/channel.commands.js +752 -0
  16. package/dist/commands/channel.commands.js.map +1 -1
  17. package/dist/commands/chat.commands.d.ts +10 -0
  18. package/dist/commands/chat.commands.d.ts.map +1 -1
  19. package/dist/commands/chat.commands.js +397 -0
  20. package/dist/commands/chat.commands.js.map +1 -1
  21. package/dist/commands/checkin.commands.d.ts.map +1 -1
  22. package/dist/commands/checkin.commands.js +34 -0
  23. package/dist/commands/checkin.commands.js.map +1 -1
  24. package/dist/commands/coupon.commands.d.ts +2 -0
  25. package/dist/commands/coupon.commands.d.ts.map +1 -1
  26. package/dist/commands/coupon.commands.js +140 -0
  27. package/dist/commands/coupon.commands.js.map +1 -1
  28. package/dist/commands/custom-field.commands.d.ts +3 -0
  29. package/dist/commands/custom-field.commands.d.ts.map +1 -0
  30. package/dist/commands/custom-field.commands.js +44 -0
  31. package/dist/commands/custom-field.commands.js.map +1 -0
  32. package/dist/commands/document.commands.d.ts.map +1 -1
  33. package/dist/commands/document.commands.js +79 -0
  34. package/dist/commands/document.commands.js.map +1 -1
  35. package/dist/commands/donate.commands.d.ts.map +1 -1
  36. package/dist/commands/donate.commands.js +42 -0
  37. package/dist/commands/donate.commands.js.map +1 -1
  38. package/dist/commands/finance.commands.d.ts +3 -0
  39. package/dist/commands/finance.commands.d.ts.map +1 -0
  40. package/dist/commands/finance.commands.js +89 -0
  41. package/dist/commands/finance.commands.js.map +1 -0
  42. package/dist/commands/global.commands.d.ts +3 -0
  43. package/dist/commands/global.commands.d.ts.map +1 -0
  44. package/dist/commands/global.commands.js +117 -0
  45. package/dist/commands/global.commands.js.map +1 -0
  46. package/dist/commands/group.commands.d.ts +3 -0
  47. package/dist/commands/group.commands.d.ts.map +1 -0
  48. package/dist/commands/group.commands.js +177 -0
  49. package/dist/commands/group.commands.js.map +1 -0
  50. package/dist/commands/index.d.ts +5 -0
  51. package/dist/commands/index.d.ts.map +1 -1
  52. package/dist/commands/index.js +11 -1
  53. package/dist/commands/index.js.map +1 -1
  54. package/dist/commands/interaction.commands.d.ts +6 -0
  55. package/dist/commands/interaction.commands.d.ts.map +1 -0
  56. package/dist/commands/interaction.commands.js +429 -0
  57. package/dist/commands/interaction.commands.js.map +1 -0
  58. package/dist/commands/invite-sales.commands.d.ts +3 -0
  59. package/dist/commands/invite-sales.commands.d.ts.map +1 -0
  60. package/dist/commands/invite-sales.commands.js +64 -0
  61. package/dist/commands/invite-sales.commands.js.map +1 -0
  62. package/dist/commands/lottery.commands.d.ts +3 -0
  63. package/dist/commands/lottery.commands.d.ts.map +1 -1
  64. package/dist/commands/lottery.commands.js +378 -1
  65. package/dist/commands/lottery.commands.js.map +1 -1
  66. package/dist/commands/material.commands.d.ts +3 -0
  67. package/dist/commands/material.commands.d.ts.map +1 -0
  68. package/dist/commands/material.commands.js +76 -0
  69. package/dist/commands/material.commands.js.map +1 -0
  70. package/dist/commands/monitor.commands.d.ts.map +1 -1
  71. package/dist/commands/monitor.commands.js +54 -0
  72. package/dist/commands/monitor.commands.js.map +1 -1
  73. package/dist/commands/partner.commands.d.ts +3 -0
  74. package/dist/commands/partner.commands.d.ts.map +1 -0
  75. package/dist/commands/partner.commands.js +48 -0
  76. package/dist/commands/partner.commands.js.map +1 -0
  77. package/dist/commands/platform.commands.d.ts.map +1 -1
  78. package/dist/commands/platform.commands.js +377 -0
  79. package/dist/commands/platform.commands.js.map +1 -1
  80. package/dist/commands/playback.commands.d.ts.map +1 -1
  81. package/dist/commands/playback.commands.js +115 -0
  82. package/dist/commands/playback.commands.js.map +1 -1
  83. package/dist/commands/player.commands.d.ts.map +1 -1
  84. package/dist/commands/player.commands.js +202 -0
  85. package/dist/commands/player.commands.js.map +1 -1
  86. package/dist/commands/product.commands.d.ts +3 -0
  87. package/dist/commands/product.commands.d.ts.map +1 -1
  88. package/dist/commands/product.commands.js +388 -0
  89. package/dist/commands/product.commands.js.map +1 -1
  90. package/dist/commands/promotion.commands.d.ts.map +1 -1
  91. package/dist/commands/promotion.commands.js +2 -0
  92. package/dist/commands/promotion.commands.js.map +1 -1
  93. package/dist/commands/qa.commands.d.ts +2 -0
  94. package/dist/commands/qa.commands.d.ts.map +1 -1
  95. package/dist/commands/qa.commands.js +164 -0
  96. package/dist/commands/qa.commands.js.map +1 -1
  97. package/dist/commands/questionnaire.commands.d.ts +2 -0
  98. package/dist/commands/questionnaire.commands.d.ts.map +1 -1
  99. package/dist/commands/questionnaire.commands.js +115 -0
  100. package/dist/commands/questionnaire.commands.js.map +1 -1
  101. package/dist/commands/record.commands.d.ts.map +1 -1
  102. package/dist/commands/record.commands.js +154 -0
  103. package/dist/commands/record.commands.js.map +1 -1
  104. package/dist/commands/robot.commands.d.ts +3 -0
  105. package/dist/commands/robot.commands.d.ts.map +1 -0
  106. package/dist/commands/robot.commands.js +40 -0
  107. package/dist/commands/robot.commands.js.map +1 -0
  108. package/dist/commands/session.commands.d.ts.map +1 -1
  109. package/dist/commands/session.commands.js +95 -0
  110. package/dist/commands/session.commands.js.map +1 -1
  111. package/dist/commands/statistics.commands.d.ts.map +1 -1
  112. package/dist/commands/statistics.commands.js +200 -0
  113. package/dist/commands/statistics.commands.js.map +1 -1
  114. package/dist/commands/stream.commands.d.ts.map +1 -1
  115. package/dist/commands/stream.commands.js +115 -0
  116. package/dist/commands/stream.commands.js.map +1 -1
  117. package/dist/commands/transmit.commands.d.ts +1 -0
  118. package/dist/commands/transmit.commands.d.ts.map +1 -1
  119. package/dist/commands/transmit.commands.js +33 -0
  120. package/dist/commands/transmit.commands.js.map +1 -1
  121. package/dist/commands/user.commands.d.ts +3 -0
  122. package/dist/commands/user.commands.d.ts.map +1 -0
  123. package/dist/commands/user.commands.js +175 -0
  124. package/dist/commands/user.commands.js.map +1 -0
  125. package/dist/commands/viewer.commands.d.ts.map +1 -1
  126. package/dist/commands/viewer.commands.js +274 -0
  127. package/dist/commands/viewer.commands.js.map +1 -1
  128. package/dist/commands/web.commands.d.ts +3 -0
  129. package/dist/commands/web.commands.d.ts.map +1 -0
  130. package/dist/commands/web.commands.js +215 -0
  131. package/dist/commands/web.commands.js.map +1 -0
  132. package/dist/commands/webapp.commands.d.ts +3 -0
  133. package/dist/commands/webapp.commands.d.ts.map +1 -0
  134. package/dist/commands/webapp.commands.js +69 -0
  135. package/dist/commands/webapp.commands.js.map +1 -0
  136. package/dist/handlers/account-api.handler.d.ts +31 -0
  137. package/dist/handlers/account-api.handler.d.ts.map +1 -0
  138. package/dist/handlers/account-api.handler.js +166 -0
  139. package/dist/handlers/account-api.handler.js.map +1 -0
  140. package/dist/handlers/ai-video-produce.handler.d.ts +24 -0
  141. package/dist/handlers/ai-video-produce.handler.d.ts.map +1 -0
  142. package/dist/handlers/ai-video-produce.handler.js +220 -0
  143. package/dist/handlers/ai-video-produce.handler.js.map +1 -0
  144. package/dist/handlers/card-push.handler.d.ts +5 -2
  145. package/dist/handlers/card-push.handler.d.ts.map +1 -1
  146. package/dist/handlers/card-push.handler.js +34 -0
  147. package/dist/handlers/card-push.handler.js.map +1 -1
  148. package/dist/handlers/channel.handler.d.ts +50 -0
  149. package/dist/handlers/channel.handler.d.ts.map +1 -1
  150. package/dist/handlers/channel.handler.js +421 -0
  151. package/dist/handlers/channel.handler.js.map +1 -1
  152. package/dist/handlers/chat.handler.d.ts +238 -1
  153. package/dist/handlers/chat.handler.d.ts.map +1 -1
  154. package/dist/handlers/chat.handler.js +379 -0
  155. package/dist/handlers/chat.handler.js.map +1 -1
  156. package/dist/handlers/checkin.handler.d.ts +4 -1
  157. package/dist/handlers/checkin.handler.d.ts.map +1 -1
  158. package/dist/handlers/checkin.handler.js +41 -0
  159. package/dist/handlers/checkin.handler.js.map +1 -1
  160. package/dist/handlers/coupon.handler.d.ts +27 -0
  161. package/dist/handlers/coupon.handler.d.ts.map +1 -1
  162. package/dist/handlers/coupon.handler.js +117 -0
  163. package/dist/handlers/coupon.handler.js.map +1 -1
  164. package/dist/handlers/custom-field.handler.d.ts +14 -0
  165. package/dist/handlers/custom-field.handler.d.ts.map +1 -0
  166. package/dist/handlers/custom-field.handler.js +73 -0
  167. package/dist/handlers/custom-field.handler.js.map +1 -0
  168. package/dist/handlers/document.handler.d.ts +17 -0
  169. package/dist/handlers/document.handler.d.ts.map +1 -1
  170. package/dist/handlers/document.handler.js +67 -0
  171. package/dist/handlers/document.handler.js.map +1 -1
  172. package/dist/handlers/donate.handler.d.ts +4 -1
  173. package/dist/handlers/donate.handler.d.ts.map +1 -1
  174. package/dist/handlers/donate.handler.js +47 -0
  175. package/dist/handlers/donate.handler.js.map +1 -1
  176. package/dist/handlers/finance.handler.d.ts +17 -0
  177. package/dist/handlers/finance.handler.d.ts.map +1 -0
  178. package/dist/handlers/finance.handler.js +58 -0
  179. package/dist/handlers/finance.handler.js.map +1 -0
  180. package/dist/handlers/global.handler.d.ts +14 -0
  181. package/dist/handlers/global.handler.d.ts.map +1 -0
  182. package/dist/handlers/global.handler.js +60 -0
  183. package/dist/handlers/global.handler.js.map +1 -0
  184. package/dist/handlers/group.handler.d.ts +26 -0
  185. package/dist/handlers/group.handler.d.ts.map +1 -0
  186. package/dist/handlers/group.handler.js +97 -0
  187. package/dist/handlers/group.handler.js.map +1 -0
  188. package/dist/handlers/interaction.handler.d.ts +38 -0
  189. package/dist/handlers/interaction.handler.d.ts.map +1 -0
  190. package/dist/handlers/interaction.handler.js +279 -0
  191. package/dist/handlers/interaction.handler.js.map +1 -0
  192. package/dist/handlers/invite-sales.handler.d.ts +18 -0
  193. package/dist/handlers/invite-sales.handler.d.ts.map +1 -0
  194. package/dist/handlers/invite-sales.handler.js +80 -0
  195. package/dist/handlers/invite-sales.handler.js.map +1 -0
  196. package/dist/handlers/lottery.handler.d.ts +29 -1
  197. package/dist/handlers/lottery.handler.d.ts.map +1 -1
  198. package/dist/handlers/lottery.handler.js +319 -2
  199. package/dist/handlers/lottery.handler.js.map +1 -1
  200. package/dist/handlers/material.handler.d.ts +17 -0
  201. package/dist/handlers/material.handler.d.ts.map +1 -0
  202. package/dist/handlers/material.handler.js +56 -0
  203. package/dist/handlers/material.handler.js.map +1 -0
  204. package/dist/handlers/partner.handler.d.ts +11 -0
  205. package/dist/handlers/partner.handler.d.ts.map +1 -0
  206. package/dist/handlers/partner.handler.js +34 -0
  207. package/dist/handlers/partner.handler.js.map +1 -0
  208. package/dist/handlers/platform.handler.d.ts +19 -2
  209. package/dist/handlers/platform.handler.d.ts.map +1 -1
  210. package/dist/handlers/platform.handler.js +187 -12
  211. package/dist/handlers/platform.handler.js.map +1 -1
  212. package/dist/handlers/playback.handler.d.ts +20 -0
  213. package/dist/handlers/playback.handler.d.ts.map +1 -1
  214. package/dist/handlers/playback.handler.js +91 -0
  215. package/dist/handlers/playback.handler.js.map +1 -1
  216. package/dist/handlers/player.handler.d.ts +22 -0
  217. package/dist/handlers/player.handler.d.ts.map +1 -1
  218. package/dist/handlers/player.handler.js +61 -0
  219. package/dist/handlers/player.handler.js.map +1 -1
  220. package/dist/handlers/product.handler.d.ts +141 -1
  221. package/dist/handlers/product.handler.d.ts.map +1 -1
  222. package/dist/handlers/product.handler.js +288 -0
  223. package/dist/handlers/product.handler.js.map +1 -1
  224. package/dist/handlers/promotion.handler.d.ts.map +1 -1
  225. package/dist/handlers/promotion.handler.js +2 -0
  226. package/dist/handlers/promotion.handler.js.map +1 -1
  227. package/dist/handlers/qa-questionnaire.handler.d.ts +15 -1
  228. package/dist/handlers/qa-questionnaire.handler.d.ts.map +1 -1
  229. package/dist/handlers/qa-questionnaire.handler.js +179 -0
  230. package/dist/handlers/qa-questionnaire.handler.js.map +1 -1
  231. package/dist/handlers/record.handler.d.ts +32 -0
  232. package/dist/handlers/record.handler.d.ts.map +1 -1
  233. package/dist/handlers/record.handler.js +146 -0
  234. package/dist/handlers/record.handler.js.map +1 -1
  235. package/dist/handlers/robot.handler.d.ts +13 -0
  236. package/dist/handlers/robot.handler.d.ts.map +1 -0
  237. package/dist/handlers/robot.handler.js +38 -0
  238. package/dist/handlers/robot.handler.js.map +1 -0
  239. package/dist/handlers/session.handler.d.ts +20 -0
  240. package/dist/handlers/session.handler.d.ts.map +1 -1
  241. package/dist/handlers/session.handler.js +68 -0
  242. package/dist/handlers/session.handler.js.map +1 -1
  243. package/dist/handlers/statistics.handler.d.ts +4 -0
  244. package/dist/handlers/statistics.handler.d.ts.map +1 -1
  245. package/dist/handlers/statistics.handler.js +11 -0
  246. package/dist/handlers/statistics.handler.js.map +1 -1
  247. package/dist/handlers/stream.handler.d.ts +73 -1
  248. package/dist/handlers/stream.handler.d.ts.map +1 -1
  249. package/dist/handlers/stream.handler.js +120 -0
  250. package/dist/handlers/stream.handler.js.map +1 -1
  251. package/dist/handlers/transmit.handler.d.ts +8 -1
  252. package/dist/handlers/transmit.handler.d.ts.map +1 -1
  253. package/dist/handlers/transmit.handler.js +26 -0
  254. package/dist/handlers/transmit.handler.js.map +1 -1
  255. package/dist/handlers/user-settings.handler.d.ts +45 -0
  256. package/dist/handlers/user-settings.handler.d.ts.map +1 -0
  257. package/dist/handlers/user-settings.handler.js +248 -0
  258. package/dist/handlers/user-settings.handler.js.map +1 -0
  259. package/dist/handlers/viewer.handler.d.ts +29 -1
  260. package/dist/handlers/viewer.handler.d.ts.map +1 -1
  261. package/dist/handlers/viewer.handler.js +399 -8
  262. package/dist/handlers/viewer.handler.js.map +1 -1
  263. package/dist/handlers/web.handler.d.ts +46 -0
  264. package/dist/handlers/web.handler.d.ts.map +1 -0
  265. package/dist/handlers/web.handler.js +194 -0
  266. package/dist/handlers/web.handler.js.map +1 -0
  267. package/dist/handlers/webapp.handler.d.ts +16 -0
  268. package/dist/handlers/webapp.handler.d.ts.map +1 -0
  269. package/dist/handlers/webapp.handler.js +52 -0
  270. package/dist/handlers/webapp.handler.js.map +1 -0
  271. package/dist/index.d.ts.map +1 -1
  272. package/dist/index.js +114 -19
  273. package/dist/index.js.map +1 -1
  274. package/dist/services/account-service.d.ts +28 -0
  275. package/dist/services/account-service.d.ts.map +1 -0
  276. package/dist/services/account-service.js +88 -0
  277. package/dist/services/account-service.js.map +1 -0
  278. package/dist/services/ai-digital-human-service.d.ts +2 -0
  279. package/dist/services/ai-digital-human-service.d.ts.map +1 -1
  280. package/dist/services/ai-digital-human-service.js +14 -15
  281. package/dist/services/ai-digital-human-service.js.map +1 -1
  282. package/dist/services/ai-video-produce-service.d.ts +32 -0
  283. package/dist/services/ai-video-produce-service.d.ts.map +1 -0
  284. package/dist/services/ai-video-produce-service.js +118 -0
  285. package/dist/services/ai-video-produce-service.js.map +1 -0
  286. package/dist/services/card-push-service.d.ts +6 -1
  287. package/dist/services/card-push-service.d.ts.map +1 -1
  288. package/dist/services/card-push-service.js +51 -18
  289. package/dist/services/card-push-service.js.map +1 -1
  290. package/dist/services/channel.service.sdk.d.ts +73 -0
  291. package/dist/services/channel.service.sdk.d.ts.map +1 -1
  292. package/dist/services/channel.service.sdk.js +508 -0
  293. package/dist/services/channel.service.sdk.js.map +1 -1
  294. package/dist/services/chat.service.sdk.d.ts +170 -0
  295. package/dist/services/chat.service.sdk.d.ts.map +1 -1
  296. package/dist/services/chat.service.sdk.js +256 -0
  297. package/dist/services/chat.service.sdk.js.map +1 -1
  298. package/dist/services/checkin-service.d.ts +2 -1
  299. package/dist/services/checkin-service.d.ts.map +1 -1
  300. package/dist/services/checkin-service.js +12 -0
  301. package/dist/services/checkin-service.js.map +1 -1
  302. package/dist/services/custom-field-service.d.ts +11 -0
  303. package/dist/services/custom-field-service.d.ts.map +1 -0
  304. package/dist/services/custom-field-service.js +24 -0
  305. package/dist/services/custom-field-service.js.map +1 -0
  306. package/dist/services/document.service.sdk.d.ts +13 -0
  307. package/dist/services/document.service.sdk.d.ts.map +1 -1
  308. package/dist/services/document.service.sdk.js +28 -0
  309. package/dist/services/document.service.sdk.js.map +1 -1
  310. package/dist/services/donate-service.d.ts +4 -1
  311. package/dist/services/donate-service.d.ts.map +1 -1
  312. package/dist/services/donate-service.js +69 -9
  313. package/dist/services/donate-service.js.map +1 -1
  314. package/dist/services/finance-service.d.ts +15 -0
  315. package/dist/services/finance-service.d.ts.map +1 -0
  316. package/dist/services/finance-service.js +40 -0
  317. package/dist/services/finance-service.js.map +1 -0
  318. package/dist/services/global-service.d.ts +13 -0
  319. package/dist/services/global-service.d.ts.map +1 -0
  320. package/dist/services/global-service.js +28 -0
  321. package/dist/services/global-service.js.map +1 -0
  322. package/dist/services/group-service.d.ts +24 -0
  323. package/dist/services/group-service.d.ts.map +1 -0
  324. package/dist/services/group-service.js +76 -0
  325. package/dist/services/group-service.js.map +1 -0
  326. package/dist/services/interaction-service.d.ts +32 -0
  327. package/dist/services/interaction-service.d.ts.map +1 -0
  328. package/dist/services/interaction-service.js +248 -0
  329. package/dist/services/interaction-service.js.map +1 -0
  330. package/dist/services/invite-sales-service.d.ts +13 -0
  331. package/dist/services/invite-sales-service.d.ts.map +1 -0
  332. package/dist/services/invite-sales-service.js +32 -0
  333. package/dist/services/invite-sales-service.js.map +1 -0
  334. package/dist/services/lottery-service.d.ts +25 -1
  335. package/dist/services/lottery-service.d.ts.map +1 -1
  336. package/dist/services/lottery-service.js +327 -9
  337. package/dist/services/lottery-service.js.map +1 -1
  338. package/dist/services/material-service.d.ts +15 -0
  339. package/dist/services/material-service.d.ts.map +1 -0
  340. package/dist/services/material-service.js +40 -0
  341. package/dist/services/material-service.js.map +1 -0
  342. package/dist/services/monitor-service.d.ts +10 -0
  343. package/dist/services/monitor-service.d.ts.map +1 -0
  344. package/dist/services/monitor-service.js +20 -0
  345. package/dist/services/monitor-service.js.map +1 -0
  346. package/dist/services/partner-service.d.ts +10 -0
  347. package/dist/services/partner-service.d.ts.map +1 -0
  348. package/dist/services/partner-service.js +20 -0
  349. package/dist/services/partner-service.js.map +1 -0
  350. package/dist/services/platform-label-service.d.ts +1 -0
  351. package/dist/services/platform-label-service.d.ts.map +1 -1
  352. package/dist/services/platform-label-service.js +20 -6
  353. package/dist/services/platform-label-service.js.map +1 -1
  354. package/dist/services/platform-service.d.ts +12 -1
  355. package/dist/services/platform-service.d.ts.map +1 -1
  356. package/dist/services/platform-service.js +46 -2
  357. package/dist/services/platform-service.js.map +1 -1
  358. package/dist/services/playback.service.sdk.d.ts +27 -0
  359. package/dist/services/playback.service.sdk.d.ts.map +1 -1
  360. package/dist/services/playback.service.sdk.js +38 -2
  361. package/dist/services/playback.service.sdk.js.map +1 -1
  362. package/dist/services/player.service.sdk.d.ts +12 -0
  363. package/dist/services/player.service.sdk.d.ts.map +1 -1
  364. package/dist/services/player.service.sdk.js +36 -0
  365. package/dist/services/player.service.sdk.js.map +1 -1
  366. package/dist/services/product.service.sdk.d.ts +78 -1
  367. package/dist/services/product.service.sdk.d.ts.map +1 -1
  368. package/dist/services/product.service.sdk.js +470 -0
  369. package/dist/services/product.service.sdk.js.map +1 -1
  370. package/dist/services/promotion-service.d.ts +2 -0
  371. package/dist/services/promotion-service.d.ts.map +1 -1
  372. package/dist/services/promotion-service.js +34 -21
  373. package/dist/services/promotion-service.js.map +1 -1
  374. package/dist/services/qa-questionnaire-service.d.ts +12 -1
  375. package/dist/services/qa-questionnaire-service.d.ts.map +1 -1
  376. package/dist/services/qa-questionnaire-service.js +158 -9
  377. package/dist/services/qa-questionnaire-service.js.map +1 -1
  378. package/dist/services/record.service.sdk.d.ts +67 -0
  379. package/dist/services/record.service.sdk.d.ts.map +1 -1
  380. package/dist/services/record.service.sdk.js +60 -3
  381. package/dist/services/record.service.sdk.js.map +1 -1
  382. package/dist/services/robot-service.d.ts +11 -0
  383. package/dist/services/robot-service.d.ts.map +1 -0
  384. package/dist/services/robot-service.js +24 -0
  385. package/dist/services/robot-service.js.map +1 -0
  386. package/dist/services/session.service.sdk.d.ts +34 -0
  387. package/dist/services/session.service.sdk.d.ts.map +1 -1
  388. package/dist/services/session.service.sdk.js +36 -0
  389. package/dist/services/session.service.sdk.js.map +1 -1
  390. package/dist/services/statistics.service.sdk.d.ts +21 -0
  391. package/dist/services/statistics.service.sdk.d.ts.map +1 -1
  392. package/dist/services/statistics.service.sdk.js +99 -0
  393. package/dist/services/statistics.service.sdk.js.map +1 -1
  394. package/dist/services/stream.service.sdk.d.ts +19 -0
  395. package/dist/services/stream.service.sdk.d.ts.map +1 -1
  396. package/dist/services/stream.service.sdk.js +109 -0
  397. package/dist/services/stream.service.sdk.js.map +1 -1
  398. package/dist/services/transmit-service.d.ts +7 -0
  399. package/dist/services/transmit-service.d.ts.map +1 -1
  400. package/dist/services/transmit-service.js +28 -14
  401. package/dist/services/transmit-service.js.map +1 -1
  402. package/dist/services/user-settings-service.d.ts +40 -0
  403. package/dist/services/user-settings-service.d.ts.map +1 -0
  404. package/dist/services/user-settings-service.js +108 -0
  405. package/dist/services/user-settings-service.js.map +1 -0
  406. package/dist/services/user.service.d.ts +40 -0
  407. package/dist/services/user.service.d.ts.map +1 -0
  408. package/dist/services/user.service.js +106 -0
  409. package/dist/services/user.service.js.map +1 -0
  410. package/dist/services/viewer-service.d.ts +15 -1
  411. package/dist/services/viewer-service.d.ts.map +1 -1
  412. package/dist/services/viewer-service.js +118 -0
  413. package/dist/services/viewer-service.js.map +1 -1
  414. package/dist/services/web-service.d.ts +43 -0
  415. package/dist/services/web-service.d.ts.map +1 -0
  416. package/dist/services/web-service.js +162 -0
  417. package/dist/services/web-service.js.map +1 -0
  418. package/dist/services/webapp-service.d.ts +14 -0
  419. package/dist/services/webapp-service.d.ts.map +1 -0
  420. package/dist/services/webapp-service.js +36 -0
  421. package/dist/services/webapp-service.js.map +1 -0
  422. package/dist/setup/resource-handlers.js +2 -3
  423. package/dist/setup/resource-handlers.js.map +1 -1
  424. package/dist/types/account-api.d.ts +68 -0
  425. package/dist/types/account-api.d.ts.map +1 -0
  426. package/dist/types/account-api.js +3 -0
  427. package/dist/types/account-api.js.map +1 -0
  428. package/dist/types/ai-video-produce.d.ts +69 -0
  429. package/dist/types/ai-video-produce.d.ts.map +1 -0
  430. package/dist/types/ai-video-produce.js +3 -0
  431. package/dist/types/ai-video-produce.js.map +1 -0
  432. package/dist/types/auth-source.types.d.ts +2 -2
  433. package/dist/types/auth-source.types.js +2 -2
  434. package/dist/types/auth-source.types.js.map +1 -1
  435. package/dist/types/card-push.d.ts +15 -0
  436. package/dist/types/card-push.d.ts.map +1 -1
  437. package/dist/types/chat.d.ts +12 -0
  438. package/dist/types/chat.d.ts.map +1 -1
  439. package/dist/types/checkin.d.ts +9 -0
  440. package/dist/types/checkin.d.ts.map +1 -1
  441. package/dist/types/donate.d.ts +39 -0
  442. package/dist/types/donate.d.ts.map +1 -1
  443. package/dist/types/global.d.ts +18 -0
  444. package/dist/types/global.d.ts.map +1 -0
  445. package/dist/types/global.js +3 -0
  446. package/dist/types/global.js.map +1 -0
  447. package/dist/types/interaction.d.ts +87 -0
  448. package/dist/types/interaction.d.ts.map +1 -1
  449. package/dist/types/lottery.d.ts +56 -0
  450. package/dist/types/lottery.d.ts.map +1 -1
  451. package/dist/types/platform.d.ts +69 -0
  452. package/dist/types/platform.d.ts.map +1 -1
  453. package/dist/types/product.d.ts +82 -0
  454. package/dist/types/product.d.ts.map +1 -1
  455. package/dist/types/promotion.d.ts +1 -0
  456. package/dist/types/promotion.d.ts.map +1 -1
  457. package/dist/types/qa.d.ts +111 -0
  458. package/dist/types/qa.d.ts.map +1 -1
  459. package/dist/types/record.d.ts +1 -0
  460. package/dist/types/record.d.ts.map +1 -1
  461. package/dist/types/viewer.d.ts +103 -0
  462. package/dist/types/viewer.d.ts.map +1 -1
  463. package/dist/utils/api-command.d.ts +27 -0
  464. package/dist/utils/api-command.d.ts.map +1 -0
  465. package/dist/utils/api-command.js +164 -0
  466. package/dist/utils/api-command.js.map +1 -0
  467. package/package.json +7 -6
@@ -6,10 +6,17 @@ exports.validateScene = validateScene;
6
6
  exports.validateTemplate = validateTemplate;
7
7
  exports.validateLimit = validateLimit;
8
8
  exports.validateOutputFormat = validateOutputFormat;
9
+ exports.validateChannelViewerScope = validateChannelViewerScope;
10
+ exports.validateYnFlag = validateYnFlag;
11
+ exports.validateChatTokenRole = validateChatTokenRole;
12
+ exports.parseBoolean = parseBoolean;
13
+ exports.ensureAtLeastOneOption = ensureAtLeastOneOption;
9
14
  const channel_handler_1 = require("../handlers/channel.handler");
15
+ const channel_service_sdk_1 = require("../services/channel.service.sdk");
10
16
  const manager_1 = require("../config/manager");
11
17
  const auth_adapter_1 = require("../config/auth-adapter");
12
18
  const errors_1 = require("../utils/errors");
19
+ const api_command_1 = require("../utils/api-command");
13
20
  async function loadAuthAndServiceConfig(parentOptions) {
14
21
  const authResult = auth_adapter_1.authAdapter.tryGetAuthConfig(parentOptions);
15
22
  if (!authResult) {
@@ -66,6 +73,53 @@ async function loadAuthAndServiceConfig(parentOptions) {
66
73
  function registerChannelCommands(program) {
67
74
  const channelCmd = program.command('channel');
68
75
  channelCmd.description('Manage live streaming channels');
76
+ const runChannelViewerCommand = async (action) => {
77
+ try {
78
+ const { authConfig, serviceConfig } = await loadAuthAndServiceConfig(program.opts());
79
+ const channelHandler = new channel_handler_1.ChannelHandler(authConfig, serviceConfig);
80
+ await action(channelHandler);
81
+ }
82
+ catch (error) {
83
+ (0, errors_1.logError)(error instanceof Error ? error : new Error(String(error)));
84
+ process.exit(1);
85
+ }
86
+ };
87
+ const runChannelViewerWriteCommand = async (options, confirmationMessage, action) => {
88
+ try {
89
+ await (0, api_command_1.confirmWrite)(options.force, confirmationMessage);
90
+ const { authConfig, serviceConfig } = await loadAuthAndServiceConfig(program.opts());
91
+ const channelHandler = new channel_handler_1.ChannelHandler(authConfig, serviceConfig);
92
+ await action(channelHandler);
93
+ }
94
+ catch (error) {
95
+ (0, errors_1.logError)(error instanceof Error ? error : new Error(String(error)));
96
+ process.exit(1);
97
+ }
98
+ };
99
+ const runChannelApiCommand = async (options, action) => {
100
+ try {
101
+ const { authConfig, serviceConfig } = await loadAuthAndServiceConfig(program.opts());
102
+ const service = new channel_service_sdk_1.ChannelServiceSdk(authConfig, serviceConfig);
103
+ (0, api_command_1.displayApiResult)(await action(service), options.output);
104
+ }
105
+ catch (error) {
106
+ (0, errors_1.logError)(error instanceof Error ? error : new Error(String(error)));
107
+ process.exit(1);
108
+ }
109
+ };
110
+ const runChannelApiWriteCommand = async (options, confirmationMessage, action) => {
111
+ try {
112
+ await (0, api_command_1.confirmWrite)(options.force, confirmationMessage);
113
+ const { authConfig, serviceConfig } = await loadAuthAndServiceConfig(program.opts());
114
+ const service = new channel_service_sdk_1.ChannelServiceSdk(authConfig, serviceConfig);
115
+ const result = await action(service);
116
+ (0, api_command_1.displayApiResult)({ success: true, result: result ?? true }, options.output);
117
+ }
118
+ catch (error) {
119
+ (0, errors_1.logError)(error instanceof Error ? error : new Error(String(error)));
120
+ process.exit(1);
121
+ }
122
+ };
69
123
  const createCmd = channelCmd
70
124
  .command('create')
71
125
  .description('Create a new live streaming channel')
@@ -446,6 +500,671 @@ Note:
446
500
  This command allows deleting up to 100 channels in a single operation.
447
501
  For single channel deletion with interactive confirmation, use 'channel delete' instead.
448
502
  `);
503
+ const addViewerCommonOptions = (cmd) => cmd
504
+ .option('--scope <scope>', 'live-bg endpoint scope (user|teacher)', validateChannelViewerScope, 'user')
505
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table');
506
+ const addViewerFilterOptions = (cmd) => addViewerCommonOptions(cmd
507
+ .option('--group-id <id>', 'viewer group ID', parseInteger)
508
+ .option('--viewer-id <viewerId>', 'viewer ID')
509
+ .option('--nickname <nickname>', 'viewer nickname')
510
+ .option('--mobile <mobile>', 'viewer mobile'));
511
+ const viewerCmd = channelCmd
512
+ .command('viewer')
513
+ .description('Manage channel-owned viewers and viewer groups');
514
+ viewerCmd.addHelpText('after', `
515
+ Examples:
516
+ $ polyv-live-cli channel viewer group list --channel-id 3151318
517
+ $ polyv-live-cli channel viewer list --channel-id 3151318 --page 1 --size 20 -o json
518
+ $ polyv-live-cli channel viewer import --channel-id 3151318 --file viewers.xlsx --force
519
+
520
+ Scope:
521
+ --scope user Use /live-bg/v3/user endpoints (default)
522
+ --scope teacher Use /live-bg/v3/teacher endpoints
523
+ `);
524
+ const viewerGroupCmd = viewerCmd
525
+ .command('group')
526
+ .description('Manage channel viewer groups');
527
+ addViewerCommonOptions(viewerGroupCmd.command('list')
528
+ .description('List channel viewer groups')
529
+ .requiredOption('--channel-id <id>', 'channel ID')).action((options) => runChannelViewerCommand((handler) => handler.listChannelViewerGroups(options)));
530
+ addViewerCommonOptions(viewerGroupCmd.command('create')
531
+ .description('Create a channel viewer group')
532
+ .requiredOption('--channel-id <id>', 'channel ID')
533
+ .requiredOption('--name <name>', 'group name')
534
+ .option('-f, --force', 'skip confirmation prompt')).action((options) => runChannelViewerWriteCommand(options, `Create channel viewer group "${options.name}"?`, (handler) => handler.createChannelViewerGroup(options)));
535
+ addViewerCommonOptions(viewerGroupCmd.command('update')
536
+ .description('Update a channel viewer group')
537
+ .requiredOption('--channel-id <id>', 'channel ID')
538
+ .requiredOption('--id <id>', 'group ID', parseInteger)
539
+ .requiredOption('--name <name>', 'group name')
540
+ .option('-f, --force', 'skip confirmation prompt')).action((options) => runChannelViewerWriteCommand(options, `Update channel viewer group ${options.id}?`, (handler) => handler.updateChannelViewerGroup(options)));
541
+ addViewerCommonOptions(viewerGroupCmd.command('delete')
542
+ .description('Delete a channel viewer group')
543
+ .requiredOption('--channel-id <id>', 'channel ID')
544
+ .requiredOption('--id <id>', 'group ID', parseInteger)
545
+ .option('-f, --force', 'skip confirmation prompt')).action((options) => runChannelViewerWriteCommand(options, `Delete channel viewer group ${options.id}?`, (handler) => handler.deleteChannelViewerGroup(options)));
546
+ const viewerGroupSettingCmd = viewerCmd
547
+ .command('group-setting')
548
+ .description('Manage channel viewer group settings');
549
+ addViewerCommonOptions(viewerGroupSettingCmd.command('get')
550
+ .description('Get channel viewer group settings')
551
+ .requiredOption('--channel-id <id>', 'channel ID')).action((options) => runChannelViewerCommand((handler) => handler.getChannelViewerGroupSetting(options)));
552
+ addViewerCommonOptions(viewerGroupSettingCmd.command('update')
553
+ .description('Update channel viewer group settings')
554
+ .requiredOption('--channel-id <id>', 'channel ID')
555
+ .option('--channel-viewer-group-enabled <Y|N>', 'enable channel viewer groups', validateYnFlag)
556
+ .option('--not-in-group-watch-enabled <Y|N>', 'allow viewers outside groups to watch', validateYnFlag)
557
+ .option('-f, --force', 'skip confirmation prompt')).action((options) => runChannelViewerWriteCommand(options, `Update channel viewer group settings for ${options.channelId}?`, (handler) => handler.updateChannelViewerGroupSetting(options)));
558
+ addViewerFilterOptions(viewerCmd.command('list')
559
+ .description('List viewers belonging to a channel')
560
+ .requiredOption('--channel-id <id>', 'channel ID')
561
+ .option('--page <page>', 'page number', parseInteger, 1)
562
+ .option('--size <size>', 'page size', parseInteger, 10)).action((options) => runChannelViewerCommand((handler) => handler.listChannelViewers(options)));
563
+ addViewerFilterOptions(viewerCmd.command('export')
564
+ .description('Export viewers belonging to a channel')
565
+ .requiredOption('--channel-id <id>', 'channel ID')).action((options) => runChannelViewerCommand((handler) => handler.exportChannelViewers(options)));
566
+ addViewerCommonOptions(viewerCmd.command('add')
567
+ .description('Add viewers to a channel')
568
+ .requiredOption('--channel-id <id>', 'channel ID')
569
+ .requiredOption('--viewer-ids <ids>', 'viewer IDs, comma-separated')
570
+ .option('--group-id <id>', 'target group ID', parseInteger)
571
+ .option('-f, --force', 'skip confirmation prompt')).action((options) => runChannelViewerWriteCommand(options, `Add viewers to channel ${options.channelId}?`, (handler) => handler.addChannelViewers(options)));
572
+ addViewerCommonOptions(viewerCmd.command('delete')
573
+ .description('Delete viewers from a channel')
574
+ .requiredOption('--channel-id <id>', 'channel ID')
575
+ .requiredOption('--viewer-ids <ids>', 'viewer IDs, comma-separated')
576
+ .option('-f, --force', 'skip confirmation prompt')).action((options) => runChannelViewerWriteCommand(options, `Delete viewers from channel ${options.channelId}?`, (handler) => handler.deleteChannelViewers(options)));
577
+ addViewerCommonOptions(viewerCmd.command('transfer')
578
+ .description('Transfer viewers to another group')
579
+ .requiredOption('--channel-id <id>', 'channel ID')
580
+ .requiredOption('--viewer-ids <ids>', 'viewer IDs, comma-separated')
581
+ .option('--target-group-id <id>', 'target group ID; omit to clear group association', parseInteger)
582
+ .option('-f, --force', 'skip confirmation prompt')).action((options) => runChannelViewerWriteCommand(options, `Transfer viewers in channel ${options.channelId}?`, (handler) => handler.transferChannelViewers(options)));
583
+ addViewerCommonOptions(viewerCmd.command('import')
584
+ .description('Import channel viewers from a file')
585
+ .requiredOption('--channel-id <id>', 'channel ID')
586
+ .requiredOption('--file <path>', 'viewer import file (.xls, .xlsx, or .csv)')
587
+ .option('--group-id <id>', 'target group ID', parseInteger)
588
+ .option('-f, --force', 'skip confirmation prompt')).action((options) => runChannelViewerWriteCommand(options, `Import viewers into channel ${options.channelId} from ${options.file}?`, (handler) => handler.importChannelViewers(options)));
589
+ addViewerCommonOptions(viewerCmd.command('unrelated-list')
590
+ .description('List viewers not joined to any channel group')
591
+ .requiredOption('--channel-id <id>', 'channel ID')
592
+ .option('--name <name>', 'viewer name')
593
+ .option('--mobile <mobile>', 'mobile number')
594
+ .option('--external-viewer-id <id>', 'external viewer ID')
595
+ .option('--wx-open-id <id>', 'WeChat OpenID')
596
+ .option('--wx-union-id <id>', 'WeChat UnionID')
597
+ .option('--nickname <nickname>', 'viewer nickname')
598
+ .option('--wx-nick-name <nickname>', 'WeChat nickname')
599
+ .option('--source <source>', 'viewer source')
600
+ .option('--email <email>', 'email')
601
+ .option('--area <area>', 'area')
602
+ .option('--last-collect-mobile <mobile>', 'last collected mobile')
603
+ .option('--search-keyword <keyword>', 'keyword for nickname search')
604
+ .option('--viewer-id <viewerId>', 'viewer ID')
605
+ .option('--status <status>', 'viewer status')
606
+ .option('--start-create-time <time>', 'registration start time, yyyy-MM-dd HH:mm:ss')
607
+ .option('--end-create-time <time>', 'registration end time, yyyy-MM-dd HH:mm:ss')
608
+ .option('--label-ids <ids>', 'label IDs, comma-separated')
609
+ .option('--page <page>', 'page number', parseInteger, 1)
610
+ .option('--size <size>', 'page size', parseInteger, 10)).action((options) => runChannelViewerCommand((handler) => handler.listUnrelatedChannelViewers(options)));
611
+ channelCmd.command('basic-list')
612
+ .description('List V4 channel basic information')
613
+ .option('--page-number <page>', 'page number', parseInteger)
614
+ .option('--page-size <size>', 'page size', parseInteger)
615
+ .option('--category-ids <ids>', 'category IDs, comma-separated', api_command_1.parseStringList)
616
+ .option('--channel-ids <ids>', 'channel IDs, comma-separated', api_command_1.parseStringList)
617
+ .option('--watch-status <status>', 'watch status filter')
618
+ .option('--start-time <timestamp>', 'start timestamp', parseInteger)
619
+ .option('--end-time <timestamp>', 'end timestamp', parseInteger)
620
+ .option('--order-by <orderBy>', 'order by value')
621
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
622
+ .action((options) => runChannelApiCommand(options, (service) => service.listChannelBasicExact((0, api_command_1.apiParams)(options))));
623
+ channelCmd.command('simple-list')
624
+ .description('List V4 channel compact information')
625
+ .option('--page-number <page>', 'page number', parseInteger)
626
+ .option('--page-size <size>', 'page size', parseInteger)
627
+ .option('--category-id <id>', 'category ID')
628
+ .option('--watch-status <status>', 'watch status filter')
629
+ .option('--keyword <keyword>', 'channel keyword')
630
+ .option('--order-by <orderBy>', 'order by value')
631
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
632
+ .action((options) => runChannelApiCommand(options, (service) => service.listChannelSimple((0, api_command_1.apiParams)(options))));
633
+ channelCmd.command('live-status-list')
634
+ .description('Batch query V4 channel live status')
635
+ .requiredOption('--channel-ids <ids>', 'channel IDs, comma-separated, max 200', api_command_1.parseStringList)
636
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
637
+ .action((options) => runChannelApiCommand(options, (service) => service.listLiveStatus((0, api_command_1.apiParams)(options))));
638
+ channelCmd.command('batch-create')
639
+ .description('Batch create V4 live channels')
640
+ .requiredOption('--channels-json <json>', 'channels JSON array', api_command_1.parseJsonArray)
641
+ .option('-f, --force', 'skip confirmation prompt')
642
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
643
+ .action((options) => runChannelApiWriteCommand(options, `Create ${options.channelsJson.length} channel(s)?`, (service) => service.createBatch((0, api_command_1.apiParams)({
644
+ ...options,
645
+ channels: options.channelsJson,
646
+ channelsJson: undefined,
647
+ }))));
648
+ channelCmd.command('v4-update')
649
+ .description('Update V4 channel basic information')
650
+ .requiredOption('--channel-id <id>', 'channel ID')
651
+ .option('--name <name>', 'channel name')
652
+ .option('--publisher <publisher>', 'publisher name')
653
+ .option('--channel-passwd <password>', 'channel password')
654
+ .option('--start-time <timestamp>', 'start timestamp', parseInteger)
655
+ .option('--end-time <timestamp>', 'end timestamp', parseInteger)
656
+ .option('--cover-img <url>', 'cover image URL')
657
+ .option('--splash-img <url>', 'splash image URL')
658
+ .option('--desc <description>', 'channel description')
659
+ .option('--publishing-region <region>', 'publishing region')
660
+ .option('-f, --force', 'skip confirmation prompt')
661
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
662
+ .action(async (options) => {
663
+ try {
664
+ ensureAtLeastOneOption(options, [
665
+ 'name',
666
+ 'publisher',
667
+ 'channelPasswd',
668
+ 'startTime',
669
+ 'endTime',
670
+ 'coverImg',
671
+ 'splashImg',
672
+ 'desc',
673
+ 'publishingRegion',
674
+ ]);
675
+ await runChannelApiWriteCommand(options, `Update V4 channel ${options.channelId}?`, (service) => service.updateV4((0, api_command_1.apiParams)(options)));
676
+ }
677
+ catch (error) {
678
+ (0, errors_1.logError)(error instanceof Error ? error : new Error(String(error)));
679
+ process.exit(1);
680
+ }
681
+ });
682
+ channelCmd.command('create-init')
683
+ .description('Create and initialize a V4 channel')
684
+ .requiredOption('--basic-setting-json <json>', 'basicSetting JSON object', api_command_1.parseJsonObject)
685
+ .option('--master-auth-setting-json <json>', 'masterAuthSetting JSON object', api_command_1.parseJsonObject)
686
+ .option('--playback-setting-json <json>', 'playbackSetting JSON object', api_command_1.parseJsonObject)
687
+ .option('--roles-json <json>', 'roles JSON array', api_command_1.parseJsonArray)
688
+ .option('-f, --force', 'skip confirmation prompt')
689
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
690
+ .action((options) => runChannelApiWriteCommand(options, `Create initialized channel "${options.basicSettingJson?.name || ''}"?`, (service) => service.createInit((0, api_command_1.apiParams)({
691
+ ...options,
692
+ basicSetting: options.basicSettingJson,
693
+ masterAuthSetting: options.masterAuthSettingJson,
694
+ playbackSetting: options.playbackSettingJson,
695
+ roles: options.rolesJson,
696
+ basicSettingJson: undefined,
697
+ masterAuthSettingJson: undefined,
698
+ playbackSettingJson: undefined,
699
+ rolesJson: undefined,
700
+ }))));
701
+ channelCmd.command('mr-create')
702
+ .description('Create a V4 MR channel')
703
+ .requiredOption('--name <name>', 'channel name')
704
+ .option('--category-id <id>', 'category ID', parseInteger)
705
+ .option('--start-time <timestamp>', 'start timestamp', parseInteger)
706
+ .option('--channel-passwd <password>', 'channel password')
707
+ .option('--assistant-passwd <password>', 'assistant password')
708
+ .option('--splash-img <url>', 'splash image URL')
709
+ .option('--sub-account <email>', 'sub account email')
710
+ .option('-f, --force', 'skip confirmation prompt')
711
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
712
+ .action((options) => runChannelApiWriteCommand(options, `Create MR channel "${options.name}"?`, (service) => service.createMrChannel((0, api_command_1.apiParams)(options))));
713
+ channelCmd.command('pull-bitrate-set')
714
+ .description('Set V4 channel pull bitrate')
715
+ .requiredOption('--channel-id <id>', 'channel ID')
716
+ .requiredOption('--pull-bit-rate <bitrate>', 'pull bitrate: -1,400,600,800,1000,1500,2000,2500', parseInteger)
717
+ .option('-f, --force', 'skip confirmation prompt')
718
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
719
+ .action((options) => runChannelApiWriteCommand(options, `Set pull bitrate for channel ${options.channelId}?`, (service) => service.setPullBitrate((0, api_command_1.apiParams)(options))));
720
+ channelCmd.command('template-update')
721
+ .description('Update V4 channel live template')
722
+ .requiredOption('--channel-id <id>', 'channel ID')
723
+ .requiredOption('--template <template>', 'template value', validateTemplate)
724
+ .option('-f, --force', 'skip confirmation prompt')
725
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
726
+ .action((options) => runChannelApiWriteCommand(options, `Update template for channel ${options.channelId}?`, (service) => service.updateTemplate((0, api_command_1.apiParams)(options))));
727
+ const roleCmd = channelCmd.command('role').description('Manage historical channel role accounts');
728
+ roleCmd.command('get')
729
+ .description('Get one role account')
730
+ .requiredOption('--channel-id <id>', 'channel ID')
731
+ .requiredOption('--account <account>', 'role account ID')
732
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
733
+ .action((options) => runChannelViewerCommand((handler) => handler.getRoleAccount(options)));
734
+ roleCmd.command('list')
735
+ .description('List role accounts')
736
+ .requiredOption('--channel-id <id>', 'channel ID')
737
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
738
+ .action((options) => runChannelViewerCommand((handler) => handler.listRoleAccounts(options)));
739
+ roleCmd.command('batch-create')
740
+ .description('Batch create role accounts')
741
+ .requiredOption('--channel-id <id>', 'channel ID')
742
+ .requiredOption('--accounts-json <json>', 'accounts JSON array', api_command_1.parseJsonArray)
743
+ .option('-f, --force', 'skip confirmation prompt')
744
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
745
+ .action((options) => runChannelViewerCommand((handler) => handler.batchCreateRoleAccounts({
746
+ ...options,
747
+ accounts: options.accountsJson
748
+ })));
749
+ roleCmd.command('delete')
750
+ .description('Delete one role account')
751
+ .requiredOption('--channel-id <id>', 'channel ID')
752
+ .requiredOption('--account <account>', 'role account ID')
753
+ .option('-f, --force', 'skip confirmation prompt')
754
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
755
+ .action((options) => runChannelViewerCommand((handler) => handler.deleteRoleAccount(options)));
756
+ roleCmd.command('account-create')
757
+ .description('Create a V4 assistant or guest role account')
758
+ .requiredOption('--channel-id <id>', 'channel ID')
759
+ .requiredOption('--role <role>', 'role, for example Assistant or Guest')
760
+ .option('--actor <actor>', 'actor label')
761
+ .option('--nick-name <name>', 'nickname')
762
+ .option('--avatar <url>', 'avatar URL')
763
+ .option('--passwd <password>', 'role account password')
764
+ .option('--purview-list-json <json>', 'purviewList JSON array', api_command_1.parseJsonArray)
765
+ .option('-f, --force', 'skip confirmation prompt')
766
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
767
+ .action((options) => runChannelApiWriteCommand(options, `Create ${options.role} account in channel ${options.channelId}?`, (service) => service.createAccount((0, api_command_1.apiParams)({
768
+ ...options,
769
+ purviewList: options.purviewListJson,
770
+ purviewListJson: undefined,
771
+ }))));
772
+ roleCmd.command('account-update')
773
+ .description('Update a V4 role account')
774
+ .requiredOption('--channel-id <id>', 'channel ID')
775
+ .requiredOption('--account <account>', 'role account')
776
+ .option('--actor <actor>', 'actor label')
777
+ .option('--nick-name <name>', 'nickname')
778
+ .option('--avatar <url>', 'avatar URL')
779
+ .option('--passwd <password>', 'role account password')
780
+ .option('--purview-list-json <json>', 'purviewList JSON array', api_command_1.parseJsonArray)
781
+ .option('-f, --force', 'skip confirmation prompt')
782
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
783
+ .action((options) => runChannelApiWriteCommand(options, `Update role account ${options.account} in channel ${options.channelId}?`, (service) => service.updateAccountInfo((0, api_command_1.apiParams)({
784
+ ...options,
785
+ purviewList: options.purviewListJson,
786
+ purviewListJson: undefined,
787
+ }))));
788
+ roleCmd.command('accounts-delete')
789
+ .description('Batch delete V4 role accounts')
790
+ .requiredOption('--channel-id <id>', 'channel ID')
791
+ .requiredOption('--accounts <accounts>', 'role accounts, comma-separated', api_command_1.parseStringList)
792
+ .option('-f, --force', 'skip confirmation prompt')
793
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
794
+ .action((options) => runChannelApiWriteCommand(options, `Delete ${options.accounts.length} role account(s) from channel ${options.channelId}?`, (service) => service.deleteAccountsBatch((0, api_command_1.apiParams)(options))));
795
+ roleCmd.command('teacher-list')
796
+ .description('Batch query V4 teacher information')
797
+ .requiredOption('--channel-ids <ids>', 'channel IDs, comma-separated', api_command_1.parseStringList)
798
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
799
+ .action((options) => runChannelApiCommand(options, (service) => service.teacherList((0, api_command_1.apiParams)(options))));
800
+ roleCmd.command('viewer-get')
801
+ .description('Get V4 role-viewer display config')
802
+ .requiredOption('--channel-id <id>', 'channel ID')
803
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
804
+ .action((options) => runChannelApiCommand(options, (service) => service.getAccountViewerConfig((0, api_command_1.apiParams)(options))));
805
+ roleCmd.command('viewer-update')
806
+ .description('Update V4 role-viewer display config')
807
+ .requiredOption('--channel-id <id>', 'channel ID')
808
+ .option('--actor <actor>', 'actor title')
809
+ .option('--actor-enabled <Y|N>', 'actor title switch', validateYnFlag)
810
+ .option('--question-student-title <title>', 'question student title')
811
+ .option('--question-student-title-enabled <Y|N>', 'question student title switch', validateYnFlag)
812
+ .option('-f, --force', 'skip confirmation prompt')
813
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
814
+ .action((options) => runChannelApiWriteCommand(options, `Update role-viewer config for channel ${options.channelId}?`, (service) => service.updateAccountViewerConfig((0, api_command_1.apiParams)(options))));
815
+ roleCmd.command('config-get')
816
+ .description('Get V4 role config by role')
817
+ .requiredOption('--channel-id <id>', 'channel ID')
818
+ .requiredOption('--role <role>', 'role')
819
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
820
+ .action((options) => runChannelApiCommand(options, (service) => service.getByRole((0, api_command_1.apiParams)(options))));
821
+ roleCmd.command('config-update')
822
+ .description('Update V4 role config by role')
823
+ .requiredOption('--channel-id <id>', 'channel ID')
824
+ .requiredOption('--role <role>', 'role')
825
+ .requiredOption('--config-json <json>', 'config JSON object', api_command_1.parseJsonObject)
826
+ .option('-f, --force', 'skip confirmation prompt')
827
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
828
+ .action((options) => runChannelApiWriteCommand(options, `Update role config ${options.role} for channel ${options.channelId}?`, (service) => service.updateByRole((0, api_command_1.apiParams)({
829
+ ...options,
830
+ config: options.configJson,
831
+ configJson: undefined,
832
+ }))));
833
+ const subtitleCmd = channelCmd.command('subtitle').description('Manage V4 realtime subtitle settings');
834
+ subtitleCmd.command('config-get')
835
+ .description('Get realtime subtitle config')
836
+ .requiredOption('--channel-id <id>', 'channel ID')
837
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
838
+ .action((options) => runChannelApiCommand(options, (service) => service.getSubtitleConfig((0, api_command_1.apiParams)(options))));
839
+ subtitleCmd.command('languages')
840
+ .description('List all realtime subtitle languages')
841
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
842
+ .action((options) => runChannelApiCommand(options, (service) => service.listSubtitleLanguages()));
843
+ subtitleCmd.command('config-update')
844
+ .description('Update realtime subtitle config')
845
+ .requiredOption('--channel-id <id>', 'channel ID')
846
+ .option('--real-time-subtitle-enabled <Y|N>', 'realtime subtitle switch', validateYnFlag)
847
+ .option('--real-time-subtitle-display-enabled <Y|N>', 'display realtime subtitle switch', validateYnFlag)
848
+ .option('--source-language <code>', 'source language code')
849
+ .option('--subtitle-translation-enabled <Y|N>', 'translation switch', validateYnFlag)
850
+ .option('--translation-language <code>', 'single translation language')
851
+ .option('--translation-languages <codes>', 'translation language codes, comma-separated', api_command_1.parseStringList)
852
+ .option('--subtitle-callback-enabled <Y|N>', 'subtitle callback switch', validateYnFlag)
853
+ .option('--subtitle-callback-url <url>', 'subtitle callback URL')
854
+ .option('--real-time-subtitle-display-number-limit-enabled <Y|N>', 'display line limit switch', validateYnFlag)
855
+ .option('--real-time-subtitle-display-number <number>', 'display line count', parseInteger)
856
+ .option('-f, --force', 'skip confirmation prompt')
857
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
858
+ .action((options) => runChannelApiWriteCommand(options, `Update subtitle config for channel ${options.channelId}?`, (service) => service.updateSubtitleConfig((0, api_command_1.apiParams)(options))));
859
+ const distributeCmd = channelCmd.command('distribute').description('Manage V4 cloud distribution');
860
+ distributeCmd.command('list')
861
+ .description('List cloud distribution endpoints')
862
+ .requiredOption('--channel-id <id>', 'channel ID')
863
+ .option('--distribute-ids <ids>', 'distribution IDs, comma-separated')
864
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
865
+ .action((options) => runChannelApiCommand(options, (service) => service.distributeList((0, api_command_1.apiParams)(options))));
866
+ distributeCmd.command('create-batch')
867
+ .description('Batch create cloud distribution endpoints')
868
+ .requiredOption('--channel-id <id>', 'channel ID')
869
+ .requiredOption('--distributes-json <json>', 'distributes JSON array', api_command_1.parseJsonArray)
870
+ .option('-f, --force', 'skip confirmation prompt')
871
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
872
+ .action((options) => runChannelApiWriteCommand(options, `Create ${options.distributesJson.length} distribution endpoint(s) for channel ${options.channelId}?`, (service) => service.distributeCreateBatch((0, api_command_1.apiParams)({
873
+ ...options,
874
+ distributes: options.distributesJson,
875
+ distributesJson: undefined,
876
+ }))));
877
+ distributeCmd.command('update-batch')
878
+ .description('Batch update cloud distribution endpoints')
879
+ .requiredOption('--channel-id <id>', 'channel ID')
880
+ .requiredOption('--distributes-json <json>', 'distributes JSON array', api_command_1.parseJsonArray)
881
+ .option('-f, --force', 'skip confirmation prompt')
882
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
883
+ .action((options) => runChannelApiWriteCommand(options, `Update ${options.distributesJson.length} distribution endpoint(s) for channel ${options.channelId}?`, (service) => service.distributeUpdateBatch((0, api_command_1.apiParams)({
884
+ ...options,
885
+ distributes: options.distributesJson,
886
+ distributesJson: undefined,
887
+ }))));
888
+ distributeCmd.command('delete-batch')
889
+ .description('Batch delete cloud distribution endpoints')
890
+ .requiredOption('--channel-id <id>', 'channel ID')
891
+ .requiredOption('--ids <ids>', 'distribution IDs, comma-separated', api_command_1.parseNumberList)
892
+ .option('-f, --force', 'skip confirmation prompt')
893
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
894
+ .action((options) => runChannelApiWriteCommand(options, `Delete ${options.ids.length} distribution endpoint(s) from channel ${options.channelId}?`, (service) => service.distributeDeleteBatch((0, api_command_1.apiParams)(options))));
895
+ distributeCmd.command('statistic')
896
+ .description('Get cloud distribution statistics')
897
+ .requiredOption('--channel-id <id>', 'channel ID')
898
+ .option('--session-ids <ids>', 'session IDs, comma-separated', api_command_1.parseStringList)
899
+ .option('--start-time <timestamp>', 'start timestamp', parseInteger)
900
+ .option('--end-time <timestamp>', 'end timestamp', parseInteger)
901
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
902
+ .action((options) => runChannelApiCommand(options, (service) => service.getDistributeStatistic((0, api_command_1.apiParams)(options))));
903
+ distributeCmd.command('master-switch')
904
+ .description('Update cloud distribution master switch')
905
+ .requiredOption('--channel-id <id>', 'channel ID')
906
+ .requiredOption('--enabled <Y|N>', 'master switch', validateYnFlag)
907
+ .option('-f, --force', 'skip confirmation prompt')
908
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
909
+ .action((options) => runChannelApiWriteCommand(options, `Update distribution master switch for channel ${options.channelId}?`, (service) => service.updateMasterSwitch((0, api_command_1.apiParams)(options))));
910
+ distributeCmd.command('switch')
911
+ .description('Update one cloud distribution endpoint switch')
912
+ .requiredOption('--channel-id <id>', 'channel ID')
913
+ .requiredOption('--distribute-id <id>', 'distribution ID', parseInteger)
914
+ .requiredOption('--enabled <Y|N>', 'endpoint switch', validateYnFlag)
915
+ .option('-f, --force', 'skip confirmation prompt')
916
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
917
+ .action((options) => runChannelApiWriteCommand(options, `Update distribution ${options.distributeId} switch for channel ${options.channelId}?`, (service) => service.updateSwitch((0, api_command_1.apiParams)(options))));
918
+ channelCmd.command('advert-list')
919
+ .description('List channel adverts')
920
+ .requiredOption('--channel-id <id>', 'channel ID')
921
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
922
+ .action((options) => runChannelViewerCommand((handler) => handler.getChannelAdverts(options)));
923
+ const callbackCmd = channelCmd.command('callback').description('Manage channel callback settings');
924
+ callbackCmd.command('get')
925
+ .description('Get channel callback settings')
926
+ .requiredOption('--channel-id <id>', 'channel ID')
927
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
928
+ .action((options) => runChannelViewerCommand((handler) => handler.getCallbackSetting(options)));
929
+ callbackCmd.command('update')
930
+ .description('Update channel callback settings')
931
+ .requiredOption('--channel-id <id>', 'channel ID')
932
+ .option('--record-callback-url <url>', 'record callback URL')
933
+ .option('--record-callback-video-type <type>', 'record callback video type')
934
+ .option('--playback-callback-url <url>', 'playback callback URL')
935
+ .option('--stream-callback-url <url>', 'stream callback URL')
936
+ .option('--ppt-record-callback-url <url>', 'PPT record callback URL')
937
+ .option('--live-scan-callback-url <url>', 'live scan callback URL')
938
+ .option('--playback-cache-callback-url <url>', 'playback cache callback URL')
939
+ .option('--subtitle-callback-url <url>', 'subtitle callback URL')
940
+ .option('--live-violation-cutoff-callback-url <url>', 'live violation cutoff callback URL')
941
+ .option('-f, --force', 'skip confirmation prompt')
942
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
943
+ .action((options) => runChannelViewerCommand((handler) => handler.updateCallbackSetting(options)));
944
+ const pptRecordCmd = channelCmd.command('ppt-record').description('Manage PPT record remake tasks and settings');
945
+ const pptRecordSettingCmd = pptRecordCmd.command('setting').description('Manage PPT record setting');
946
+ pptRecordSettingCmd.command('get')
947
+ .description('Get PPT record setting')
948
+ .requiredOption('--channel-id <id>', 'channel ID')
949
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
950
+ .action((options) => runChannelViewerCommand((handler) => handler.getPptRecordSetting(options)));
951
+ pptRecordSettingCmd.command('update')
952
+ .description('Update PPT record setting')
953
+ .requiredOption('--channel-id <id>', 'channel ID')
954
+ .option('--global-setting-enabled <Y|N>', 'global setting enabled', validateYnFlag)
955
+ .option('--type <type>', 'record layout type: 0|1|2', parseInteger)
956
+ .option('--video-ratio <ratio>', 'camera ratio: 0|1', parseInteger)
957
+ .option('--brand-img-file <pathOrUrl>', 'brand image file or URL')
958
+ .option('--background-img-file <pathOrUrl>', 'background image file or URL')
959
+ .option('-f, --force', 'skip confirmation prompt')
960
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
961
+ .action((options) => runChannelViewerCommand((handler) => handler.updatePptRecordSetting(options)));
962
+ pptRecordCmd.command('list')
963
+ .description('List PPT record tasks')
964
+ .requiredOption('--channel-id <id>', 'channel ID')
965
+ .option('--session-id <id>', 'session ID')
966
+ .option('--status <status>', 'task status')
967
+ .option('--start-time <time>', 'start time yyyyMMddHHmmss')
968
+ .option('--end-time <time>', 'end time yyyyMMddHHmmss')
969
+ .option('--page <page>', 'page number', parseInteger)
970
+ .option('--page-size <size>', 'page size', parseInteger)
971
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
972
+ .action((options) => runChannelViewerCommand((handler) => handler.listPptRecordTasks(options)));
973
+ pptRecordCmd.command('add-task')
974
+ .description('Create a PPT record remake task')
975
+ .requiredOption('--channel-id <id>', 'channel ID')
976
+ .requiredOption('--video-id <id>', 'playback video ID')
977
+ .option('-f, --force', 'skip confirmation prompt')
978
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
979
+ .action((options) => runChannelViewerCommand((handler) => handler.addPptRecordTask(options)));
980
+ pptRecordCmd.command('delete')
981
+ .description('Delete PPT record tasks')
982
+ .requiredOption('--channel-id <id>', 'channel ID')
983
+ .requiredOption('--task-ids <ids>', 'task IDs, comma-separated', api_command_1.parseStringList)
984
+ .option('-f, --force', 'skip confirmation prompt')
985
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
986
+ .action((options) => runChannelViewerCommand((handler) => handler.deletePptRecord(options)));
987
+ channelCmd.command('copy')
988
+ .description('Copy a channel')
989
+ .requiredOption('--channel-id <id>', 'source channel ID')
990
+ .option('--name <name>', 'new channel name')
991
+ .option('--category-id <id>', 'category ID', parseInteger)
992
+ .option('--start-time <timestamp>', 'start time timestamp', parseInteger)
993
+ .option('--sub-account <account>', 'sub account')
994
+ .option('-f, --force', 'skip confirmation prompt')
995
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
996
+ .action((options) => runChannelViewerCommand((handler) => handler.copyChannel(options)));
997
+ channelCmd.command('children-list')
998
+ .description('List channels owned by a child account')
999
+ .requiredOption('--child-user-id <id>', 'child user ID')
1000
+ .option('--start-time <timestamp>', 'created start timestamp', parseInteger)
1001
+ .option('--end-time <timestamp>', 'created end timestamp', parseInteger)
1002
+ .option('--page-number <page>', 'page number', parseInteger, 1)
1003
+ .option('--page-size <size>', 'page size', parseInteger, 20)
1004
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
1005
+ .action((options) => runChannelViewerCommand((handler) => handler.getUserChildrenChannels(options)));
1006
+ const tokenCmd = channelCmd.command('token').description('Manage channel historical tokens');
1007
+ tokenCmd.command('watch-api')
1008
+ .description('Get watch API token')
1009
+ .requiredOption('--channel-id <id>', 'channel ID')
1010
+ .requiredOption('--viewer-id <id>', 'viewer ID')
1011
+ .option('--nickname <nickname>', 'viewer nickname')
1012
+ .option('--avatar <url>', 'viewer avatar')
1013
+ .option('--openid <openid>', 'WeChat OpenID')
1014
+ .option('--actor <actor>', 'viewer actor')
1015
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
1016
+ .action((options) => runChannelViewerCommand((handler) => handler.getWatchApiToken(options)));
1017
+ tokenCmd.command('api')
1018
+ .description('Get channel API token')
1019
+ .requiredOption('--channel-id <id>', 'channel ID')
1020
+ .requiredOption('--viewer-id <id>', 'viewer ID')
1021
+ .option('--nickname <nickname>', 'viewer nickname')
1022
+ .option('--avatar <url>', 'viewer avatar')
1023
+ .option('--openid <openid>', 'WeChat OpenID')
1024
+ .option('--actor <actor>', 'viewer actor')
1025
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
1026
+ .action((options) => runChannelViewerCommand((handler) => handler.getApiToken(options)));
1027
+ tokenCmd.command('login-url')
1028
+ .description('Get passwordless role login URL')
1029
+ .requiredOption('--channel-id <id>', 'channel ID')
1030
+ .option('--account-id <id>', 'role account ID')
1031
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
1032
+ .action((options) => runChannelViewerCommand((handler) => handler.getTokenLoginUrl(options)));
1033
+ tokenCmd.command('chat')
1034
+ .description('Get chat token')
1035
+ .requiredOption('--channel-id <id>', 'channel ID')
1036
+ .requiredOption('--user-id <id>', 'viewer/user ID')
1037
+ .requiredOption('--role <role>', 'role: teacher|admin|guest|assistant|viewer', validateChatTokenRole)
1038
+ .option('--origin <origin>', 'watch origin')
1039
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
1040
+ .action((options) => runChannelViewerCommand((handler) => handler.getChatToken(options)));
1041
+ tokenCmd.command('set')
1042
+ .description('Set one-time login token for a channel')
1043
+ .requiredOption('--channel-id <id>', 'channel ID')
1044
+ .requiredOption('--token <token>', 'token')
1045
+ .option('-f, --force', 'skip confirmation prompt')
1046
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
1047
+ .action((options) => runChannelViewerCommand((handler) => handler.setChannelToken(options)));
1048
+ tokenCmd.command('set-account')
1049
+ .description('Set one-time login token for a sub-account channel')
1050
+ .requiredOption('--channel-id <id>', 'channel ID')
1051
+ .requiredOption('--token <token>', 'token')
1052
+ .option('-f, --force', 'skip confirmation prompt')
1053
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
1054
+ .action((options) => runChannelViewerCommand((handler) => handler.setAccountToken(options)));
1055
+ const authCmd = channelCmd.command('auth').description('Manage channel auth tokens');
1056
+ authCmd.command('api-token')
1057
+ .description('Get a channel API access token')
1058
+ .requiredOption('--channel-id <id>', 'channel ID')
1059
+ .option('--disposable <true|false>', 'whether the token is disposable', parseBoolean)
1060
+ .option('--expire-seconds <seconds>', 'token expiration seconds', parseInteger)
1061
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
1062
+ .action((options) => runChannelApiCommand(options, (service) => service.getChannelApiAccessToken((0, api_command_1.apiParams)(options))));
1063
+ authCmd.command('test-mode-token')
1064
+ .description('Get a watch-page test mode token')
1065
+ .requiredOption('--channel-id <id>', 'channel ID')
1066
+ .option('--expire-time <seconds>', 'token validity seconds, max 30 days', parseInteger)
1067
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
1068
+ .action((options) => runChannelApiCommand(options, (service) => service.getTestModeToken((0, api_command_1.apiParams)(options))));
1069
+ const followCmd = channelCmd.command('follow').description('Manage follow-public-account settings');
1070
+ followCmd.command('list')
1071
+ .description('List channel follow settings')
1072
+ .requiredOption('--channel-ids <ids>', 'channel IDs, comma-separated', api_command_1.parseStringList)
1073
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
1074
+ .action((options) => runChannelViewerCommand((handler) => handler.listChannelsFollow(options)));
1075
+ followCmd.command('update')
1076
+ .description('Update channel follow settings')
1077
+ .requiredOption('--channel-ids <ids>', 'channel IDs, comma-separated', api_command_1.parseStringList)
1078
+ .requiredOption('--qr-code-url <url>', 'QR code image URL')
1079
+ .option('--enabled <Y|N>', 'follow feature switch', validateYnFlag)
1080
+ .option('--auto-show-enabled <Y|N>', 'auto popup switch', validateYnFlag)
1081
+ .option('--entrance-text <text>', 'entry text')
1082
+ .option('--tips <text>', 'popup tips')
1083
+ .option('--pc-follow-tips <text>', 'PC popup tips')
1084
+ .option('-f, --force', 'skip confirmation prompt')
1085
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
1086
+ .action((options) => runChannelViewerCommand((handler) => handler.updateChannelsFollow(options)));
1087
+ channelCmd.command('submeeting-batch-add')
1088
+ .description('Batch save submeeting channels')
1089
+ .requiredOption('--channel-id <id>', 'main meeting channel ID')
1090
+ .requiredOption('--sub-channels-json <json>', 'sub channels JSON array', api_command_1.parseJsonArray)
1091
+ .option('-f, --force', 'skip confirmation prompt')
1092
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
1093
+ .action((options) => runChannelViewerCommand((handler) => handler.batchAddSubmeeting({
1094
+ ...options,
1095
+ subChannels: options.subChannelsJson
1096
+ })));
1097
+ channelCmd.command('questionnaire-stop')
1098
+ .description('Stop questionnaires for channels')
1099
+ .requiredOption('--channel-ids <ids>', 'channel IDs, comma-separated', api_command_1.parseStringList)
1100
+ .option('-f, --force', 'skip confirmation prompt')
1101
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
1102
+ .action((options) => runChannelViewerCommand((handler) => handler.stopQuestionnaires(options)));
1103
+ channelCmd.command('danmu-batch-update')
1104
+ .description('Batch update channel danmu settings')
1105
+ .requiredOption('--channel-ids <ids>', 'channel IDs, comma-separated', api_command_1.parseStringList)
1106
+ .requiredOption('--close-danmu <Y|N>', 'Y closes danmu, N opens danmu', validateYnFlag)
1107
+ .requiredOption('--show-danmu-info-enabled <Y|N>', 'show danmu info enabled', validateYnFlag)
1108
+ .option('-f, --force', 'skip confirmation prompt')
1109
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
1110
+ .action((options) => runChannelViewerCommand((handler) => handler.batchUpdateDanmu(options)));
1111
+ channelCmd.command('max-viewer-set')
1112
+ .description('Set max viewer count')
1113
+ .requiredOption('--channel-id <id>', 'channel ID')
1114
+ .requiredOption('--user-id <id>', 'user ID')
1115
+ .requiredOption('--max-viewer <count>', 'max viewer count', parseInteger)
1116
+ .option('-f, --force', 'skip confirmation prompt')
1117
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
1118
+ .action((options) => runChannelViewerCommand((handler) => handler.setMaxViewer(options)));
1119
+ channelCmd.command('password-update')
1120
+ .description('Update channel password')
1121
+ .requiredOption('--user-id <id>', 'user ID')
1122
+ .requiredOption('--passwd <password>', 'new password')
1123
+ .option('--channel-id <id>', 'channel ID; omit to update all channels')
1124
+ .option('-f, --force', 'skip confirmation prompt')
1125
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
1126
+ .action((options) => runChannelViewerCommand((handler) => handler.updateChannelPassword(options)));
1127
+ channelCmd.command('marquee-url-set')
1128
+ .description('Set custom URL marquee protection')
1129
+ .requiredOption('--channel-id <id>', 'channel ID')
1130
+ .requiredOption('--marquee-restrict <Y|N>', 'marquee restriction switch', validateYnFlag)
1131
+ .option('--url <url>', 'marquee URL, required when switch is Y')
1132
+ .option('-f, --force', 'skip confirmation prompt')
1133
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
1134
+ .action((options) => runChannelViewerCommand((handler) => handler.setDiyUrlMarquee(options)));
1135
+ channelCmd.command('status-valid')
1136
+ .description('Check whether channel statuses are valid')
1137
+ .requiredOption('--channels <ids>', 'channel IDs, comma-separated, max 100')
1138
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
1139
+ .action(async (options) => {
1140
+ try {
1141
+ const { authConfig, serviceConfig } = await loadAuthAndServiceConfig(program.opts());
1142
+ const result = await new channel_service_sdk_1.ChannelServiceSdk(authConfig, serviceConfig).checkChannelStatusValid((0, api_command_1.apiParams)(options));
1143
+ console.log(JSON.stringify(result, null, 2));
1144
+ }
1145
+ catch (error) {
1146
+ (0, errors_1.logError)(error instanceof Error ? error : new Error(String(error)));
1147
+ process.exit(1);
1148
+ }
1149
+ });
1150
+ channelCmd.command('ccb-focus-reset')
1151
+ .description('Reset CCB focus channels')
1152
+ .option('--channel-ids <ids>', 'channel IDs, comma-separated; omit to clear focus')
1153
+ .option('-f, --force', 'skip confirmation prompt')
1154
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
1155
+ .action(async (options) => {
1156
+ try {
1157
+ await (0, api_command_1.confirmWrite)(options.force, 'Reset CCB focus channels?');
1158
+ const { authConfig, serviceConfig } = await loadAuthAndServiceConfig(program.opts());
1159
+ const params = (0, api_command_1.apiParams)(options);
1160
+ const result = await new channel_service_sdk_1.ChannelServiceSdk(authConfig, serviceConfig).resetCcbFocus(params);
1161
+ console.log(JSON.stringify({ success: true, result }, null, 2));
1162
+ }
1163
+ catch (error) {
1164
+ (0, errors_1.logError)(error instanceof Error ? error : new Error(String(error)));
1165
+ process.exit(1);
1166
+ }
1167
+ });
449
1168
  }
450
1169
  function parseInteger(value) {
451
1170
  const parsed = parseInt(value, 10);
@@ -454,6 +1173,19 @@ function parseInteger(value) {
454
1173
  }
455
1174
  return parsed;
456
1175
  }
1176
+ function parseBoolean(value) {
1177
+ if (['true', '1', 'Y', 'y', 'yes'].includes(value))
1178
+ return true;
1179
+ if (['false', '0', 'N', 'n', 'no'].includes(value))
1180
+ return false;
1181
+ throw new Error(`Invalid boolean: ${value}. Must be true or false.`);
1182
+ }
1183
+ function ensureAtLeastOneOption(options, fields) {
1184
+ const hasValue = fields.some((field) => options[field] !== undefined && options[field] !== null && options[field] !== '');
1185
+ if (!hasValue) {
1186
+ throw new Error(`At least one update option is required: ${fields.join(', ')}`);
1187
+ }
1188
+ }
457
1189
  function validateScene(value) {
458
1190
  const validScenes = ['topclass', 'alone', 'seminar', 'train', 'double', 'guide'];
459
1191
  if (!validScenes.includes(value)) {
@@ -485,4 +1217,24 @@ function validateOutputFormat(value) {
485
1217
  }
486
1218
  return value;
487
1219
  }
1220
+ function validateChannelViewerScope(value) {
1221
+ const validScopes = ['user', 'teacher'];
1222
+ if (!validScopes.includes(value)) {
1223
+ throw new Error(`Invalid scope: ${value}. Must be one of: ${validScopes.join(', ')}`);
1224
+ }
1225
+ return value;
1226
+ }
1227
+ function validateYnFlag(value) {
1228
+ if (value !== 'Y' && value !== 'N') {
1229
+ throw new Error('Invalid value. Must be Y or N');
1230
+ }
1231
+ return value;
1232
+ }
1233
+ function validateChatTokenRole(value) {
1234
+ const validRoles = ['teacher', 'admin', 'guest', 'assistant', 'viewer'];
1235
+ if (!validRoles.includes(value)) {
1236
+ throw new Error(`Invalid role: ${value}. Must be one of: ${validRoles.join(', ')}`);
1237
+ }
1238
+ return value;
1239
+ }
488
1240
  //# sourceMappingURL=channel.commands.js.map