polyv-live-cli 1.2.17 → 1.2.21

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 (240) hide show
  1. package/dist/commands/ai.commands.d.ts +12 -0
  2. package/dist/commands/ai.commands.d.ts.map +1 -0
  3. package/dist/commands/ai.commands.js +126 -0
  4. package/dist/commands/ai.commands.js.map +1 -0
  5. package/dist/commands/card-push.commands.d.ts +15 -0
  6. package/dist/commands/card-push.commands.d.ts.map +1 -0
  7. package/dist/commands/card-push.commands.js +257 -0
  8. package/dist/commands/card-push.commands.js.map +1 -0
  9. package/dist/commands/chat.commands.d.ts.map +1 -1
  10. package/dist/commands/chat.commands.js +152 -0
  11. package/dist/commands/chat.commands.js.map +1 -1
  12. package/dist/commands/checkin.commands.d.ts +4 -0
  13. package/dist/commands/checkin.commands.d.ts.map +1 -0
  14. package/dist/commands/checkin.commands.js +228 -0
  15. package/dist/commands/checkin.commands.js.map +1 -0
  16. package/dist/commands/donate.commands.d.ts +5 -0
  17. package/dist/commands/donate.commands.d.ts.map +1 -0
  18. package/dist/commands/donate.commands.js +177 -0
  19. package/dist/commands/donate.commands.js.map +1 -0
  20. package/dist/commands/index.d.ts +1 -0
  21. package/dist/commands/index.d.ts.map +1 -1
  22. package/dist/commands/index.js +3 -1
  23. package/dist/commands/index.js.map +1 -1
  24. package/dist/commands/lottery.commands.d.ts +5 -0
  25. package/dist/commands/lottery.commands.d.ts.map +1 -0
  26. package/dist/commands/lottery.commands.js +330 -0
  27. package/dist/commands/lottery.commands.js.map +1 -0
  28. package/dist/commands/platform-label.commands.d.ts +11 -0
  29. package/dist/commands/platform-label.commands.d.ts.map +1 -0
  30. package/dist/commands/platform-label.commands.js +173 -0
  31. package/dist/commands/platform-label.commands.js.map +1 -0
  32. package/dist/commands/platform.commands.d.ts +13 -0
  33. package/dist/commands/platform.commands.d.ts.map +1 -0
  34. package/dist/commands/platform.commands.js +366 -0
  35. package/dist/commands/platform.commands.js.map +1 -0
  36. package/dist/commands/promotion.commands.d.ts +12 -0
  37. package/dist/commands/promotion.commands.d.ts.map +1 -0
  38. package/dist/commands/promotion.commands.js +98 -0
  39. package/dist/commands/promotion.commands.js.map +1 -0
  40. package/dist/commands/qa.commands.d.ts +4 -0
  41. package/dist/commands/qa.commands.d.ts.map +1 -0
  42. package/dist/commands/qa.commands.js +159 -0
  43. package/dist/commands/qa.commands.js.map +1 -0
  44. package/dist/commands/questionnaire.commands.d.ts +4 -0
  45. package/dist/commands/questionnaire.commands.d.ts.map +1 -0
  46. package/dist/commands/questionnaire.commands.js +187 -0
  47. package/dist/commands/questionnaire.commands.js.map +1 -0
  48. package/dist/commands/transmit.commands.d.ts +12 -0
  49. package/dist/commands/transmit.commands.d.ts.map +1 -0
  50. package/dist/commands/transmit.commands.js +98 -0
  51. package/dist/commands/transmit.commands.js.map +1 -0
  52. package/dist/commands/viewer.commands.d.ts +5 -0
  53. package/dist/commands/viewer.commands.d.ts.map +1 -0
  54. package/dist/commands/viewer.commands.js +257 -0
  55. package/dist/commands/viewer.commands.js.map +1 -0
  56. package/dist/commands/watch-condition.commands.d.ts +5 -0
  57. package/dist/commands/watch-condition.commands.d.ts.map +1 -0
  58. package/dist/commands/watch-condition.commands.js +158 -0
  59. package/dist/commands/watch-condition.commands.js.map +1 -0
  60. package/dist/commands/whitelist.commands.d.ts +5 -0
  61. package/dist/commands/whitelist.commands.d.ts.map +1 -0
  62. package/dist/commands/whitelist.commands.js +216 -0
  63. package/dist/commands/whitelist.commands.js.map +1 -0
  64. package/dist/handlers/ai-digital-human.handler.d.ts +18 -0
  65. package/dist/handlers/ai-digital-human.handler.d.ts.map +1 -0
  66. package/dist/handlers/ai-digital-human.handler.js +134 -0
  67. package/dist/handlers/ai-digital-human.handler.js.map +1 -0
  68. package/dist/handlers/card-push.handler.d.ts +25 -0
  69. package/dist/handlers/card-push.handler.d.ts.map +1 -0
  70. package/dist/handlers/card-push.handler.js +287 -0
  71. package/dist/handlers/card-push.handler.js.map +1 -0
  72. package/dist/handlers/chat.handler.d.ts +17 -1
  73. package/dist/handlers/chat.handler.d.ts.map +1 -1
  74. package/dist/handlers/chat.handler.js +272 -0
  75. package/dist/handlers/chat.handler.js.map +1 -1
  76. package/dist/handlers/checkin.handler.d.ts +22 -0
  77. package/dist/handlers/checkin.handler.d.ts.map +1 -0
  78. package/dist/handlers/checkin.handler.js +261 -0
  79. package/dist/handlers/checkin.handler.js.map +1 -0
  80. package/dist/handlers/donate.handler.d.ts +18 -0
  81. package/dist/handlers/donate.handler.d.ts.map +1 -0
  82. package/dist/handlers/donate.handler.js +221 -0
  83. package/dist/handlers/donate.handler.js.map +1 -0
  84. package/dist/handlers/lottery.handler.d.ts +29 -0
  85. package/dist/handlers/lottery.handler.d.ts.map +1 -0
  86. package/dist/handlers/lottery.handler.js +386 -0
  87. package/dist/handlers/lottery.handler.js.map +1 -0
  88. package/dist/handlers/platform-label.handler.d.ts +18 -0
  89. package/dist/handlers/platform-label.handler.d.ts.map +1 -0
  90. package/dist/handlers/platform-label.handler.js +113 -0
  91. package/dist/handlers/platform-label.handler.js.map +1 -0
  92. package/dist/handlers/platform.handler.d.ts +24 -0
  93. package/dist/handlers/platform.handler.d.ts.map +1 -0
  94. package/dist/handlers/platform.handler.js +302 -0
  95. package/dist/handlers/platform.handler.js.map +1 -0
  96. package/dist/handlers/promotion.handler.d.ts +16 -0
  97. package/dist/handlers/promotion.handler.d.ts.map +1 -0
  98. package/dist/handlers/promotion.handler.js +103 -0
  99. package/dist/handlers/promotion.handler.js.map +1 -0
  100. package/dist/handlers/qa-questionnaire.handler.d.ts +27 -0
  101. package/dist/handlers/qa-questionnaire.handler.d.ts.map +1 -0
  102. package/dist/handlers/qa-questionnaire.handler.js +386 -0
  103. package/dist/handlers/qa-questionnaire.handler.js.map +1 -0
  104. package/dist/handlers/transmit.handler.d.ts +15 -0
  105. package/dist/handlers/transmit.handler.d.ts.map +1 -0
  106. package/dist/handlers/transmit.handler.js +86 -0
  107. package/dist/handlers/transmit.handler.js.map +1 -0
  108. package/dist/handlers/viewer.handler.d.ts +23 -0
  109. package/dist/handlers/viewer.handler.d.ts.map +1 -0
  110. package/dist/handlers/viewer.handler.js +322 -0
  111. package/dist/handlers/viewer.handler.js.map +1 -0
  112. package/dist/handlers/watch-condition.handler.d.ts +18 -0
  113. package/dist/handlers/watch-condition.handler.d.ts.map +1 -0
  114. package/dist/handlers/watch-condition.handler.js +178 -0
  115. package/dist/handlers/watch-condition.handler.js.map +1 -0
  116. package/dist/handlers/whitelist.handler.d.ts +20 -0
  117. package/dist/handlers/whitelist.handler.d.ts.map +1 -0
  118. package/dist/handlers/whitelist.handler.js +241 -0
  119. package/dist/handlers/whitelist.handler.js.map +1 -0
  120. package/dist/index.d.ts.map +1 -1
  121. package/dist/index.js +30 -4
  122. package/dist/index.js.map +1 -1
  123. package/dist/services/ai-digital-human-service.d.ts +10 -0
  124. package/dist/services/ai-digital-human-service.d.ts.map +1 -0
  125. package/dist/services/ai-digital-human-service.js +64 -0
  126. package/dist/services/ai-digital-human-service.js.map +1 -0
  127. package/dist/services/card-push-service.d.ts +16 -0
  128. package/dist/services/card-push-service.d.ts.map +1 -0
  129. package/dist/services/card-push-service.js +153 -0
  130. package/dist/services/card-push-service.js.map +1 -0
  131. package/dist/services/chat.service.sdk.d.ts +39 -1
  132. package/dist/services/chat.service.sdk.d.ts.map +1 -1
  133. package/dist/services/chat.service.sdk.js +60 -0
  134. package/dist/services/chat.service.sdk.js.map +1 -1
  135. package/dist/services/checkin-service.d.ts +14 -0
  136. package/dist/services/checkin-service.d.ts.map +1 -0
  137. package/dist/services/checkin-service.js +89 -0
  138. package/dist/services/checkin-service.js.map +1 -0
  139. package/dist/services/donate-service.d.ts +12 -0
  140. package/dist/services/donate-service.d.ts.map +1 -0
  141. package/dist/services/donate-service.js +59 -0
  142. package/dist/services/donate-service.js.map +1 -0
  143. package/dist/services/lottery-service.d.ts +17 -0
  144. package/dist/services/lottery-service.d.ts.map +1 -0
  145. package/dist/services/lottery-service.js +84 -0
  146. package/dist/services/lottery-service.js.map +1 -0
  147. package/dist/services/platform-label-service.d.ts +21 -0
  148. package/dist/services/platform-label-service.d.ts.map +1 -0
  149. package/dist/services/platform-label-service.js +56 -0
  150. package/dist/services/platform-label-service.js.map +1 -0
  151. package/dist/services/platform-service.d.ts +47 -0
  152. package/dist/services/platform-service.d.ts.map +1 -0
  153. package/dist/services/platform-service.js +144 -0
  154. package/dist/services/platform-service.js.map +1 -0
  155. package/dist/services/promotion-service.d.ts +12 -0
  156. package/dist/services/promotion-service.d.ts.map +1 -0
  157. package/dist/services/promotion-service.js +54 -0
  158. package/dist/services/promotion-service.js.map +1 -0
  159. package/dist/services/qa-questionnaire-service.d.ts +15 -0
  160. package/dist/services/qa-questionnaire-service.d.ts.map +1 -0
  161. package/dist/services/qa-questionnaire-service.js +102 -0
  162. package/dist/services/qa-questionnaire-service.js.map +1 -0
  163. package/dist/services/stream.service.sdk.d.ts.map +1 -1
  164. package/dist/services/stream.service.sdk.js +8 -12
  165. package/dist/services/stream.service.sdk.js.map +1 -1
  166. package/dist/services/transmit-service.d.ts +9 -0
  167. package/dist/services/transmit-service.d.ts.map +1 -0
  168. package/dist/services/transmit-service.js +45 -0
  169. package/dist/services/transmit-service.js.map +1 -0
  170. package/dist/services/viewer-service.d.ts +29 -0
  171. package/dist/services/viewer-service.d.ts.map +1 -0
  172. package/dist/services/viewer-service.js +106 -0
  173. package/dist/services/viewer-service.js.map +1 -0
  174. package/dist/services/watch-condition-service.d.ts +16 -0
  175. package/dist/services/watch-condition-service.d.ts.map +1 -0
  176. package/dist/services/watch-condition-service.js +38 -0
  177. package/dist/services/watch-condition-service.js.map +1 -0
  178. package/dist/services/whitelist-service.d.ts +50 -0
  179. package/dist/services/whitelist-service.d.ts.map +1 -0
  180. package/dist/services/whitelist-service.js +56 -0
  181. package/dist/services/whitelist-service.js.map +1 -0
  182. package/dist/types/ai-digital-human.d.ts +49 -0
  183. package/dist/types/ai-digital-human.d.ts.map +1 -0
  184. package/dist/types/ai-digital-human.js +3 -0
  185. package/dist/types/ai-digital-human.js.map +1 -0
  186. package/dist/types/card-push.d.ts +151 -0
  187. package/dist/types/card-push.d.ts.map +1 -0
  188. package/dist/types/card-push.js +3 -0
  189. package/dist/types/card-push.js.map +1 -0
  190. package/dist/types/chat.d.ts +35 -0
  191. package/dist/types/chat.d.ts.map +1 -1
  192. package/dist/types/checkin.d.ts +57 -0
  193. package/dist/types/checkin.d.ts.map +1 -0
  194. package/dist/types/checkin.js +3 -0
  195. package/dist/types/checkin.js.map +1 -0
  196. package/dist/types/donate.d.ts +92 -0
  197. package/dist/types/donate.d.ts.map +1 -0
  198. package/dist/types/donate.js +3 -0
  199. package/dist/types/donate.js.map +1 -0
  200. package/dist/types/index.d.ts +2 -0
  201. package/dist/types/index.d.ts.map +1 -1
  202. package/dist/types/index.js +2 -0
  203. package/dist/types/index.js.map +1 -1
  204. package/dist/types/lottery.d.ts +110 -0
  205. package/dist/types/lottery.d.ts.map +1 -0
  206. package/dist/types/lottery.js +3 -0
  207. package/dist/types/lottery.js.map +1 -0
  208. package/dist/types/platform-label.d.ts +29 -0
  209. package/dist/types/platform-label.d.ts.map +1 -0
  210. package/dist/types/platform-label.js +3 -0
  211. package/dist/types/platform-label.js.map +1 -0
  212. package/dist/types/platform.d.ts +44 -0
  213. package/dist/types/platform.d.ts.map +1 -0
  214. package/dist/types/platform.js +11 -0
  215. package/dist/types/platform.js.map +1 -0
  216. package/dist/types/promotion.d.ts +31 -0
  217. package/dist/types/promotion.d.ts.map +1 -0
  218. package/dist/types/promotion.js +3 -0
  219. package/dist/types/promotion.js.map +1 -0
  220. package/dist/types/qa.d.ts +90 -0
  221. package/dist/types/qa.d.ts.map +1 -0
  222. package/dist/types/qa.js +3 -0
  223. package/dist/types/qa.js.map +1 -0
  224. package/dist/types/transmit.d.ts +40 -0
  225. package/dist/types/transmit.d.ts.map +1 -0
  226. package/dist/types/transmit.js +3 -0
  227. package/dist/types/transmit.js.map +1 -0
  228. package/dist/types/viewer.d.ts +36 -0
  229. package/dist/types/viewer.d.ts.map +1 -0
  230. package/dist/types/viewer.js +3 -0
  231. package/dist/types/viewer.js.map +1 -0
  232. package/dist/types/watch-condition.d.ts +49 -0
  233. package/dist/types/watch-condition.d.ts.map +1 -0
  234. package/dist/types/watch-condition.js +18 -0
  235. package/dist/types/watch-condition.js.map +1 -0
  236. package/dist/types/whitelist.d.ts +36 -0
  237. package/dist/types/whitelist.d.ts.map +1 -0
  238. package/dist/types/whitelist.js +3 -0
  239. package/dist/types/whitelist.js.map +1 -0
  240. package/package.json +4 -4
@@ -0,0 +1,257 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateOutputFormat = validateOutputFormat;
4
+ exports.registerViewerCommands = registerViewerCommands;
5
+ const viewer_handler_1 = require("../handlers/viewer.handler");
6
+ const manager_1 = require("../config/manager");
7
+ const auth_adapter_1 = require("../config/auth-adapter");
8
+ const errors_1 = require("../utils/errors");
9
+ function validateOutputFormat(value) {
10
+ if (!['table', 'json'].includes(value)) {
11
+ throw new Error('Output format must be either "table" or "json"');
12
+ }
13
+ return value;
14
+ }
15
+ function registerViewerCommands(program) {
16
+ const viewerCmd = program.command('viewer');
17
+ viewerCmd.description('Manage viewer information queries');
18
+ const getCmd = viewerCmd
19
+ .command('get')
20
+ .description('Get single viewer details')
21
+ .requiredOption('-i, --viewer-id <id>', 'viewer unique ID')
22
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
23
+ .action(async (options) => {
24
+ try {
25
+ const parentOptions = program.opts();
26
+ const { authConfig, serviceConfig } = await loadAuthAndServiceConfig(parentOptions);
27
+ const viewerHandler = new viewer_handler_1.ViewerHandler(authConfig, serviceConfig);
28
+ await viewerHandler.getViewer({
29
+ viewerId: options.viewerId,
30
+ output: options.output,
31
+ });
32
+ }
33
+ catch (error) {
34
+ (0, errors_1.logError)(error instanceof Error ? error : new Error(String(error)));
35
+ process.exit(1);
36
+ }
37
+ });
38
+ getCmd.addHelpText('after', `
39
+ Examples:
40
+ # Get viewer details
41
+ $ polyv-live-cli viewer get -i "2_v378gn997yovtl3p8h77db9e224t6hg9"
42
+
43
+ # JSON output
44
+ $ polyv-live-cli viewer get -i "2_v378gn997yovtl3p8h77db9e224t6hg9" -o json
45
+
46
+ Output Formats:
47
+ table - Formatted table output (default)
48
+ json - JSON format for programmatic use
49
+ `);
50
+ const listCmd = viewerCmd
51
+ .command('list')
52
+ .description('List viewers with pagination and filters')
53
+ .option('--source <type>', 'filter by source (IMPORT|WX|MOBILE)')
54
+ .option('--mobile <number>', 'filter by mobile number')
55
+ .option('--email <email>', 'filter by email')
56
+ .option('--area <area>', 'filter by area')
57
+ .option('--page <number>', 'page number', parseInt)
58
+ .option('--size <number>', 'page size', parseInt)
59
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
60
+ .action(async (options) => {
61
+ try {
62
+ const parentOptions = program.opts();
63
+ const { authConfig, serviceConfig } = await loadAuthAndServiceConfig(parentOptions);
64
+ const viewerHandler = new viewer_handler_1.ViewerHandler(authConfig, serviceConfig);
65
+ await viewerHandler.listViewers({
66
+ source: options.source,
67
+ mobile: options.mobile,
68
+ email: options.email,
69
+ area: options.area,
70
+ page: options.page,
71
+ size: options.size,
72
+ output: options.output,
73
+ });
74
+ }
75
+ catch (error) {
76
+ (0, errors_1.logError)(error instanceof Error ? error : new Error(String(error)));
77
+ process.exit(1);
78
+ }
79
+ });
80
+ listCmd.addHelpText('after', `
81
+ Examples:
82
+ # List all viewers (default pagination)
83
+ $ polyv-live-cli viewer list
84
+
85
+ # List with custom pagination
86
+ $ polyv-live-cli viewer list --page 1 --size 20
87
+
88
+ # Filter by source
89
+ $ polyv-live-cli viewer list --source IMPORT
90
+ $ polyv-live-cli viewer list --source WX
91
+ $ polyv-live-cli viewer list --source MOBILE
92
+
93
+ # Filter by mobile number
94
+ $ polyv-live-cli viewer list --mobile "13800138000"
95
+
96
+ # Filter by email
97
+ $ polyv-live-cli viewer list --email "user@example.com"
98
+
99
+ # Filter by area
100
+ $ polyv-live-cli viewer list --area "Beijing"
101
+
102
+ # Combine multiple filters
103
+ $ polyv-live-cli viewer list --source IMPORT --page 1 --size 50 -o json
104
+
105
+ Output Formats:
106
+ table - Formatted table output (default)
107
+ json - JSON format for programmatic use
108
+ `);
109
+ const tagCmd = viewerCmd.command('tag');
110
+ tagCmd.description('Manage viewer tags');
111
+ const tagListCmd = tagCmd
112
+ .command('list')
113
+ .description('List all viewer tags')
114
+ .option('-k, --keyword <keyword>', 'keyword to search tag name')
115
+ .option('--page <number>', 'page number', parseInt)
116
+ .option('--size <number>', 'page size', parseInt)
117
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
118
+ .action(async (options) => {
119
+ try {
120
+ const parentOptions = program.opts();
121
+ const { authConfig, serviceConfig } = await loadAuthAndServiceConfig(parentOptions);
122
+ const viewerHandler = new viewer_handler_1.ViewerHandler(authConfig, serviceConfig);
123
+ await viewerHandler.listViewerTags({
124
+ keyword: options.keyword,
125
+ page: options.page,
126
+ size: options.size,
127
+ output: options.output,
128
+ });
129
+ }
130
+ catch (error) {
131
+ (0, errors_1.logError)(error instanceof Error ? error : new Error(String(error)));
132
+ process.exit(1);
133
+ }
134
+ });
135
+ tagListCmd.addHelpText('after', `
136
+ Examples:
137
+ # List all tags
138
+ $ polyv-live-cli viewer tag list
139
+
140
+ # Search tags by keyword
141
+ $ polyv-live-cli viewer tag list -k "VIP"
142
+
143
+ # Paginated list
144
+ $ polyv-live-cli viewer tag list --page 1 --size 20
145
+
146
+ # JSON output
147
+ $ polyv-live-cli viewer tag list -o json
148
+ `);
149
+ const tagAddCmd = tagCmd
150
+ .command('add')
151
+ .description('Add tags to viewers')
152
+ .requiredOption('-V, --viewer-ids <ids>', 'comma-separated viewer IDs')
153
+ .requiredOption('-l, --label-ids <ids>', 'comma-separated label IDs')
154
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
155
+ .action(async (options) => {
156
+ try {
157
+ const parentOptions = program.opts();
158
+ const { authConfig, serviceConfig } = await loadAuthAndServiceConfig(parentOptions);
159
+ const viewerHandler = new viewer_handler_1.ViewerHandler(authConfig, serviceConfig);
160
+ await viewerHandler.addViewerTag({
161
+ viewerIds: options.viewerIds,
162
+ labelIds: options.labelIds,
163
+ output: options.output,
164
+ });
165
+ }
166
+ catch (error) {
167
+ (0, errors_1.logError)(error instanceof Error ? error : new Error(String(error)));
168
+ process.exit(1);
169
+ }
170
+ });
171
+ tagAddCmd.addHelpText('after', `
172
+ Examples:
173
+ # Add single tag to single viewer
174
+ $ polyv-live-cli viewer tag add -V "viewer1" -l 1
175
+
176
+ # Add multiple tags to single viewer
177
+ $ polyv-live-cli viewer tag add -V "viewer1" -l 1,2,3
178
+
179
+ # Add tags to multiple viewers
180
+ $ polyv-live-cli viewer tag add -V "viewer1,viewer2,viewer3" -l 1,2
181
+
182
+ # JSON output
183
+ $ polyv-live-cli viewer tag add -V "viewer1" -l 1 -o json
184
+ `);
185
+ const tagRemoveCmd = tagCmd
186
+ .command('remove')
187
+ .description('Remove tags from viewers')
188
+ .requiredOption('-V, --viewer-ids <ids>', 'comma-separated viewer IDs')
189
+ .requiredOption('-l, --label-ids <ids>', 'comma-separated label IDs')
190
+ .option('-o, --output <format>', 'output format (table|json)', validateOutputFormat, 'table')
191
+ .action(async (options) => {
192
+ try {
193
+ const parentOptions = program.opts();
194
+ const { authConfig, serviceConfig } = await loadAuthAndServiceConfig(parentOptions);
195
+ const viewerHandler = new viewer_handler_1.ViewerHandler(authConfig, serviceConfig);
196
+ await viewerHandler.removeViewerTag({
197
+ viewerIds: options.viewerIds,
198
+ labelIds: options.labelIds,
199
+ output: options.output,
200
+ });
201
+ }
202
+ catch (error) {
203
+ (0, errors_1.logError)(error instanceof Error ? error : new Error(String(error)));
204
+ process.exit(1);
205
+ }
206
+ });
207
+ tagRemoveCmd.addHelpText('after', `
208
+ Examples:
209
+ # Remove single tag from single viewer
210
+ $ polyv-live-cli viewer tag remove -V "viewer1" -l 1
211
+
212
+ # Remove multiple tags from single viewer
213
+ $ polyv-live-cli viewer tag remove -V "viewer1" -l 1,2,3
214
+
215
+ # Remove tags from multiple viewers
216
+ $ polyv-live-cli viewer tag remove -V "viewer1,viewer2" -l 1,2
217
+
218
+ # JSON output
219
+ $ polyv-live-cli viewer tag remove -V "viewer1" -l 1 -o json
220
+ `);
221
+ }
222
+ async function loadAuthAndServiceConfig(parentOptions) {
223
+ const authResult = auth_adapter_1.authAdapter.tryGetAuthConfig(parentOptions);
224
+ if (!authResult) {
225
+ throw new Error(auth_adapter_1.authAdapter.getStatusMessage(parentOptions));
226
+ }
227
+ let configResult;
228
+ try {
229
+ configResult = await manager_1.configManager.load({
230
+ cliOptions: parentOptions,
231
+ });
232
+ }
233
+ catch (error) {
234
+ if (error instanceof Error && error.message.includes('Auth configuration is incomplete')) {
235
+ configResult = {
236
+ config: {
237
+ baseUrl: 'https://api.polyv.net',
238
+ timeout: 30000,
239
+ debug: false
240
+ }
241
+ };
242
+ }
243
+ else {
244
+ throw error;
245
+ }
246
+ }
247
+ const serviceConfig = {
248
+ baseUrl: configResult.config.baseUrl,
249
+ timeout: configResult.config.timeout,
250
+ debug: configResult.config.debug,
251
+ };
252
+ return {
253
+ authConfig: authResult.config,
254
+ serviceConfig,
255
+ };
256
+ }
257
+ //# sourceMappingURL=viewer.commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viewer.commands.js","sourceRoot":"","sources":["../../src/commands/viewer.commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { Command } from 'commander';
2
+ import { OutputFormat } from '../handlers/base.handler';
3
+ export declare function validateOutputFormat(value: string): OutputFormat;
4
+ export declare function registerWatchConditionCommands(program: Command): void;
5
+ //# sourceMappingURL=watch-condition.commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch-condition.commands.d.ts","sourceRoot":"","sources":["../../src/commands/watch-condition.commands.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAOxD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAKhE;AAMD,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuHrE"}
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateOutputFormat = validateOutputFormat;
4
+ exports.registerWatchConditionCommands = registerWatchConditionCommands;
5
+ const watch_condition_handler_1 = require("../handlers/watch-condition.handler");
6
+ const manager_1 = require("../config/manager");
7
+ const auth_adapter_1 = require("../config/auth-adapter");
8
+ const errors_1 = require("../utils/errors");
9
+ function validateOutputFormat(value) {
10
+ if (!['table', 'json'].includes(value)) {
11
+ throw new Error('Output format must be either "table" or "json"');
12
+ }
13
+ return value;
14
+ }
15
+ function registerWatchConditionCommands(program) {
16
+ const watchConditionCmd = program.command('watch-condition');
17
+ watchConditionCmd.description('观看条件配置管理');
18
+ const getCmd = watchConditionCmd
19
+ .command('get')
20
+ .description('获取观看条件配置')
21
+ .option('--channel-id <id>', '频道ID (可选,不传为全局设置)')
22
+ .option('-o, --output <format>', '输出格式 (table|json)', validateOutputFormat, 'table')
23
+ .action(async (options) => {
24
+ try {
25
+ const parentOptions = program.opts();
26
+ const { authConfig, serviceConfig } = await loadAuthAndServiceConfig(parentOptions);
27
+ const watchConditionHandler = new watch_condition_handler_1.WatchConditionHandler(authConfig, serviceConfig);
28
+ await watchConditionHandler.getWatchCondition({
29
+ channelId: options.channelId,
30
+ output: options.output,
31
+ });
32
+ }
33
+ catch (error) {
34
+ (0, errors_1.logError)(error instanceof Error ? error : new Error(String(error)));
35
+ process.exit(1);
36
+ }
37
+ });
38
+ getCmd.addHelpText('after', `
39
+ Examples:
40
+ # 获取全局观看条件
41
+ $ polyv-live-cli watch-condition get
42
+
43
+ # 获取频道观看条件
44
+ $ polyv-live-cli watch-condition get --channel-id 123456
45
+
46
+ # JSON 输出格式
47
+ $ polyv-live-cli watch-condition get --channel-id 123456 -o json
48
+
49
+ Output Formats:
50
+ table - 表格输出格式 (默认)
51
+ json - JSON 格式输出,适合程序化处理
52
+ `);
53
+ const setCmd = watchConditionCmd
54
+ .command('set')
55
+ .description('设置观看条件配置')
56
+ .option('--channel-id <id>', '频道ID (可选,不传为全局设置)')
57
+ .option('--rank <number>', '条件级别 (1=主要条件/ 2=次要条件)', parseInt)
58
+ .option('--auth-type <type>', '认证类型 (none|code|pay|phone|info|custom|external|direct)')
59
+ .option('--enabled <value>', '是否启用 (Y|N)')
60
+ .option('--auth-code <password>', '密码 (authType=code 时使用)')
61
+ .option('--price <amount>', '价格/元 (authType=pay 时使用)', parseFloat)
62
+ .option('--config-file <path>', 'JSON 配置文件路径 (复杂配置场景)')
63
+ .option('-o, --output <format>', '输出格式 (table|json)', validateOutputFormat, 'table')
64
+ .action(async (options) => {
65
+ try {
66
+ const parentOptions = program.opts();
67
+ const { authConfig, serviceConfig } = await loadAuthAndServiceConfig(parentOptions);
68
+ const watchConditionHandler = new watch_condition_handler_1.WatchConditionHandler(authConfig, serviceConfig);
69
+ await watchConditionHandler.setWatchCondition({
70
+ channelId: options.channelId,
71
+ rank: options.rank,
72
+ authType: options.authType,
73
+ enabled: options.enabled,
74
+ authCode: options.authCode,
75
+ price: options.price,
76
+ configFile: options.configFile,
77
+ output: options.output,
78
+ });
79
+ }
80
+ catch (error) {
81
+ (0, errors_1.logError)(error instanceof Error ? error : new Error(String(error)));
82
+ process.exit(1);
83
+ }
84
+ });
85
+ setCmd.addHelpText('after', `
86
+ Examples:
87
+ # 简单设置:关闭观看条件(公开观看)
88
+ $ polyv-live-cli watch-condition set --channel-id 123456 --rank 1 --auth-type none --enabled Y
89
+
90
+ # 简单设置:密码观看
91
+ $ polyv-live-cli watch-condition set --channel-id 123456 --rank 1 --auth-type code --enabled Y --auth-code "abc123"
92
+
93
+ # 简单设置:付费观看
94
+ $ polyv-live-cli watch-condition set --channel-id 123456 --rank 1 --auth-type pay --enabled Y --price 99.9
95
+
96
+ # 复杂设置:使用 JSON 配置文件
97
+ $ polyv-live-cli watch-condition set --channel-id 123456 --config-file ./watch-condition.json
98
+
99
+ # 设置全局观看条件
100
+ $ polyv-live-cli watch-condition set --rank 1 --auth-type none --enabled N
101
+
102
+ JSON Config File Format:
103
+ {
104
+ "authSettings": [
105
+ {
106
+ "rank": 1,
107
+ "enabled": "Y",
108
+ "authType": "code",
109
+ "authCode": "abc123"
110
+ },
111
+ {
112
+ "rank": 2,
113
+ "enabled": "N"
114
+ }
115
+ ]
116
+ }
117
+
118
+ Output Formats:
119
+ table - 表格输出格式 (默认)
120
+ json - JSON 格式输出,适合程序化处理
121
+ `);
122
+ }
123
+ async function loadAuthAndServiceConfig(parentOptions) {
124
+ const authResult = auth_adapter_1.authAdapter.tryGetAuthConfig(parentOptions);
125
+ if (!authResult) {
126
+ throw new Error(auth_adapter_1.authAdapter.getStatusMessage(parentOptions));
127
+ }
128
+ let configResult;
129
+ try {
130
+ configResult = await manager_1.configManager.load({
131
+ cliOptions: parentOptions,
132
+ });
133
+ }
134
+ catch (error) {
135
+ if (error instanceof Error && error.message.includes('Auth configuration is incomplete')) {
136
+ configResult = {
137
+ config: {
138
+ baseUrl: 'https://api.polyv.net',
139
+ timeout: 30000,
140
+ debug: false
141
+ }
142
+ };
143
+ }
144
+ else {
145
+ throw error;
146
+ }
147
+ }
148
+ const serviceConfig = {
149
+ baseUrl: configResult.config.baseUrl,
150
+ timeout: configResult.config.timeout,
151
+ debug: configResult.config.debug,
152
+ };
153
+ return {
154
+ authConfig: authResult.config,
155
+ serviceConfig,
156
+ };
157
+ }
158
+ //# sourceMappingURL=watch-condition.commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch-condition.commands.js","sourceRoot":"","sources":["../../src/commands/watch-condition.commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { Command } from 'commander';
2
+ import { OutputFormat } from '../handlers/base.handler';
3
+ export declare function validateOutputFormat(value: string): OutputFormat;
4
+ export declare function registerWhitelistCommands(program: Command): void;
5
+ //# sourceMappingURL=whitelist.commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whitelist.commands.d.ts","sourceRoot":"","sources":["../../src/commands/whitelist.commands.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAOxD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAKhE;AAMD,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6LhE"}
@@ -0,0 +1,216 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateOutputFormat = validateOutputFormat;
4
+ exports.registerWhitelistCommands = registerWhitelistCommands;
5
+ const whitelist_handler_1 = require("../handlers/whitelist.handler");
6
+ const manager_1 = require("../config/manager");
7
+ const auth_adapter_1 = require("../config/auth-adapter");
8
+ const errors_1 = require("../utils/errors");
9
+ function validateOutputFormat(value) {
10
+ if (!['table', 'json'].includes(value)) {
11
+ throw new Error('Output format must be either "table" or "json"');
12
+ }
13
+ return value;
14
+ }
15
+ function registerWhitelistCommands(program) {
16
+ const whitelistCmd = program.command('whitelist');
17
+ whitelistCmd.description('白名单管理');
18
+ const listCmd = whitelistCmd
19
+ .command('list')
20
+ .description('获取白名单列表')
21
+ .requiredOption('--rank <number>', '条件级别 (1=主要条件/ 2=次要条件)', parseInt)
22
+ .option('--channel-id <id>', '频道ID (可选,不传为全局设置)')
23
+ .option('--page <number>', '页码,默认为1', parseInt)
24
+ .option('--page-size <number>', '每页数量,默认为10', parseInt)
25
+ .option('--keyword <keyword>', '关键词(可根据会员码和名称查询)')
26
+ .option('-o, --output <format>', '输出格式 (table|json)', validateOutputFormat, 'table')
27
+ .action(async (options) => {
28
+ try {
29
+ const parentOptions = program.opts();
30
+ const { authConfig, serviceConfig } = await loadAuthAndServiceConfig(parentOptions);
31
+ const whitelistHandler = new whitelist_handler_1.WhitelistHandler(authConfig, serviceConfig);
32
+ await whitelistHandler.listWhitelist({
33
+ channelId: options.channelId,
34
+ rank: options.rank,
35
+ page: options.page,
36
+ pageSize: options.pageSize,
37
+ keyword: options.keyword,
38
+ output: options.output,
39
+ });
40
+ }
41
+ catch (error) {
42
+ (0, errors_1.logError)(error instanceof Error ? error : new Error(String(error)));
43
+ process.exit(1);
44
+ }
45
+ });
46
+ listCmd.addHelpText('after', `
47
+ Examples:
48
+ # 获取频道白名单
49
+ $ polyv-live-cli whitelist list --channel-id 123456 --rank 1
50
+
51
+ # 获取全局白名单
52
+ $ polyv-live-cli whitelist list --rank 1
53
+
54
+ # 分页和搜索
55
+ $ polyv-live-cli whitelist list --channel-id 123456 --rank 1 --page 1 --page-size 20 --keyword "张三"
56
+
57
+ # JSON 输出格式
58
+ $ polyv-live-cli whitelist list --channel-id 123456 --rank 1 -o json
59
+
60
+ Output Formats:
61
+ table - 表格输出格式 (默认)
62
+ json - JSON 格式输出,适合程序化处理
63
+ `);
64
+ const addCmd = whitelistCmd
65
+ .command('add')
66
+ .description('添加白名单项')
67
+ .requiredOption('--rank <number>', '条件级别 (1=主要条件/ 2=次要条件)', parseInt)
68
+ .requiredOption('--code <code>', '会员码 (最多50个字符)')
69
+ .option('--channel-id <id>', '频道ID (可选,不传为全局设置)')
70
+ .option('--name <name>', '昵称 (可选,最多50个字符)')
71
+ .option('-o, --output <format>', '输出格式 (table|json)', validateOutputFormat, 'table')
72
+ .action(async (options) => {
73
+ try {
74
+ const parentOptions = program.opts();
75
+ const { authConfig, serviceConfig } = await loadAuthAndServiceConfig(parentOptions);
76
+ const whitelistHandler = new whitelist_handler_1.WhitelistHandler(authConfig, serviceConfig);
77
+ await whitelistHandler.addWhitelist({
78
+ channelId: options.channelId,
79
+ rank: options.rank,
80
+ code: options.code,
81
+ name: options.name,
82
+ output: options.output,
83
+ });
84
+ }
85
+ catch (error) {
86
+ (0, errors_1.logError)(error instanceof Error ? error : new Error(String(error)));
87
+ process.exit(1);
88
+ }
89
+ });
90
+ addCmd.addHelpText('after', `
91
+ Examples:
92
+ # 添加频道白名单
93
+ $ polyv-live-cli whitelist add --channel-id 123456 --rank 1 --code "13800138000" --name "张三"
94
+
95
+ # 添加全局白名单
96
+ $ polyv-live-cli whitelist add --rank 1 --code "13800138000" --name "张三"
97
+
98
+ # JSON 输出格式
99
+ $ polyv-live-cli whitelist add --rank 1 --code "13800138000" -o json
100
+ `);
101
+ const updateCmd = whitelistCmd
102
+ .command('update')
103
+ .description('更新白名单项')
104
+ .requiredOption('--rank <number>', '条件级别 (1=主要条件/ 2=次要条件)', parseInt)
105
+ .requiredOption('--old-code <code>', '原会员码')
106
+ .requiredOption('--code <code>', '新会员码 (最多50个字符)')
107
+ .option('--channel-id <id>', '频道ID (可选,不传为全局设置)')
108
+ .option('--name <name>', '昵称 (可选,最多50个字符)')
109
+ .option('-o, --output <format>', '输出格式 (table|json)', validateOutputFormat, 'table')
110
+ .action(async (options) => {
111
+ try {
112
+ const parentOptions = program.opts();
113
+ const { authConfig, serviceConfig } = await loadAuthAndServiceConfig(parentOptions);
114
+ const whitelistHandler = new whitelist_handler_1.WhitelistHandler(authConfig, serviceConfig);
115
+ await whitelistHandler.updateWhitelist({
116
+ channelId: options.channelId,
117
+ rank: options.rank,
118
+ oldCode: options.oldCode,
119
+ code: options.code,
120
+ name: options.name,
121
+ output: options.output,
122
+ });
123
+ }
124
+ catch (error) {
125
+ (0, errors_1.logError)(error instanceof Error ? error : new Error(String(error)));
126
+ process.exit(1);
127
+ }
128
+ });
129
+ updateCmd.addHelpText('after', `
130
+ Examples:
131
+ # 更新频道白名单
132
+ $ polyv-live-cli whitelist update --channel-id 123456 --rank 1 --old-code "13800138000" --code "13900139000" --name "李四"
133
+
134
+ # 更新全局白名单
135
+ $ polyv-live-cli whitelist update --rank 1 --old-code "13800138000" --code "13900139000" --name "李四"
136
+
137
+ # JSON 输出格式
138
+ $ polyv-live-cli whitelist update --rank 1 --old-code "13800138000" --code "13900139000" -o json
139
+ `);
140
+ const removeCmd = whitelistCmd
141
+ .command('remove')
142
+ .description('删除白名单项')
143
+ .requiredOption('--rank <number>', '条件级别 (1=主要条件/ 2=次要条件)', parseInt)
144
+ .option('--channel-id <id>', '频道ID (可选,不传为全局设置)')
145
+ .option('--codes <codes>', '要删除的会员码 (逗号分隔)')
146
+ .option('--clear', '清空所有白名单')
147
+ .option('-o, --output <format>', '输出格式 (table|json)', validateOutputFormat, 'table')
148
+ .action(async (options) => {
149
+ try {
150
+ const parentOptions = program.opts();
151
+ const { authConfig, serviceConfig } = await loadAuthAndServiceConfig(parentOptions);
152
+ const whitelistHandler = new whitelist_handler_1.WhitelistHandler(authConfig, serviceConfig);
153
+ await whitelistHandler.removeWhitelist({
154
+ channelId: options.channelId,
155
+ rank: options.rank,
156
+ codes: options.codes,
157
+ clear: options.clear,
158
+ output: options.output,
159
+ });
160
+ }
161
+ catch (error) {
162
+ (0, errors_1.logError)(error instanceof Error ? error : new Error(String(error)));
163
+ process.exit(1);
164
+ }
165
+ });
166
+ removeCmd.addHelpText('after', `
167
+ Examples:
168
+ # 删除单个白名单
169
+ $ polyv-live-cli whitelist remove --channel-id 123456 --rank 1 --codes "13800138000"
170
+
171
+ # 清空所有白名单
172
+ $ polyv-live-cli whitelist remove --channel-id 123456 --rank 1 --clear
173
+
174
+ # JSON 输出格式
175
+ $ polyv-live-cli whitelist remove --channel-id 123456 --rank 1 --codes "13800138000" -o json
176
+
177
+ Note:
178
+ --codes 参数目前只支持单个会员码(API限制)
179
+ `);
180
+ }
181
+ async function loadAuthAndServiceConfig(parentOptions) {
182
+ const authResult = auth_adapter_1.authAdapter.tryGetAuthConfig(parentOptions);
183
+ if (!authResult) {
184
+ throw new Error(auth_adapter_1.authAdapter.getStatusMessage(parentOptions));
185
+ }
186
+ let configResult;
187
+ try {
188
+ configResult = await manager_1.configManager.load({
189
+ cliOptions: parentOptions,
190
+ });
191
+ }
192
+ catch (error) {
193
+ if (error instanceof Error && error.message.includes('Auth configuration is incomplete')) {
194
+ configResult = {
195
+ config: {
196
+ baseUrl: 'https://api.polyv.net',
197
+ timeout: 30000,
198
+ debug: false
199
+ }
200
+ };
201
+ }
202
+ else {
203
+ throw error;
204
+ }
205
+ }
206
+ const serviceConfig = {
207
+ baseUrl: configResult.config.baseUrl,
208
+ timeout: configResult.config.timeout,
209
+ debug: configResult.config.debug,
210
+ };
211
+ return {
212
+ authConfig: authResult.config,
213
+ serviceConfig,
214
+ };
215
+ }
216
+ //# sourceMappingURL=whitelist.commands.js.map