twentythree-cli 1.0.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 (426) hide show
  1. package/README.md +25 -0
  2. package/bin/dev.cmd +2 -0
  3. package/bin/dev.js +28 -0
  4. package/bin/run.cmd +2 -0
  5. package/bin/run.js +23 -0
  6. package/dist/_virtual/_rolldown/runtime.cjs +23 -0
  7. package/dist/api/client.cjs +24 -0
  8. package/dist/api/types.cjs +0 -0
  9. package/dist/auth/credential-store.cjs +22 -0
  10. package/dist/auth/token-refresh.cjs +70 -0
  11. package/dist/auth/workspace-config.cjs +61 -0
  12. package/dist/commands/action/add.cjs +75 -0
  13. package/dist/commands/action/delete.cjs +64 -0
  14. package/dist/commands/action/exclude.cjs +70 -0
  15. package/dist/commands/action/get.cjs +112 -0
  16. package/dist/commands/action/include.cjs +70 -0
  17. package/dist/commands/action/list.cjs +119 -0
  18. package/dist/commands/action/types.cjs +63 -0
  19. package/dist/commands/action/update.cjs +86 -0
  20. package/dist/commands/action/upload.cjs +89 -0
  21. package/dist/commands/analytics/conversions/index.cjs +83 -0
  22. package/dist/commands/analytics/conversions/timeseries.cjs +83 -0
  23. package/dist/commands/analytics/conversions/totals.cjs +83 -0
  24. package/dist/commands/analytics/live/event-timeseries.cjs +86 -0
  25. package/dist/commands/analytics/live/event-totals.cjs +86 -0
  26. package/dist/commands/analytics/live/event.cjs +88 -0
  27. package/dist/commands/analytics/live/index.cjs +89 -0
  28. package/dist/commands/analytics/live/timeseries.cjs +85 -0
  29. package/dist/commands/analytics/live/totals.cjs +85 -0
  30. package/dist/commands/analytics/live/weekday/timeseries.cjs +85 -0
  31. package/dist/commands/analytics/live/weekday/totals.cjs +85 -0
  32. package/dist/commands/analytics/live/weekday.cjs +88 -0
  33. package/dist/commands/analytics/usage/devices/timeseries.cjs +83 -0
  34. package/dist/commands/analytics/usage/devices/totals.cjs +86 -0
  35. package/dist/commands/analytics/usage/devices.cjs +89 -0
  36. package/dist/commands/analytics/usage/domains/totals.cjs +83 -0
  37. package/dist/commands/analytics/usage/domains.cjs +89 -0
  38. package/dist/commands/analytics/usage/locations/totals.cjs +83 -0
  39. package/dist/commands/analytics/usage/locations.cjs +89 -0
  40. package/dist/commands/analytics/usage/sourceids/totals.cjs +83 -0
  41. package/dist/commands/analytics/usage/sourceids.cjs +89 -0
  42. package/dist/commands/analytics/usage/sources/totals.cjs +83 -0
  43. package/dist/commands/analytics/usage/sources.cjs +89 -0
  44. package/dist/commands/analytics/usage/spots/timeseries.cjs +83 -0
  45. package/dist/commands/analytics/usage/spots/totals.cjs +83 -0
  46. package/dist/commands/analytics/usage/spots.cjs +89 -0
  47. package/dist/commands/analytics/usage/storage.cjs +52 -0
  48. package/dist/commands/analytics/usage/traffic/timeseries.cjs +83 -0
  49. package/dist/commands/analytics/usage/traffic/totals.cjs +86 -0
  50. package/dist/commands/analytics/usage/traffic.cjs +89 -0
  51. package/dist/commands/analytics/video/index.cjs +89 -0
  52. package/dist/commands/analytics/video/performance/timeseries.cjs +83 -0
  53. package/dist/commands/analytics/video/performance/totals.cjs +80 -0
  54. package/dist/commands/analytics/video/performance.cjs +89 -0
  55. package/dist/commands/analytics/video/published/timeseries.cjs +83 -0
  56. package/dist/commands/analytics/video/published/totals.cjs +80 -0
  57. package/dist/commands/analytics/video/published.cjs +89 -0
  58. package/dist/commands/analytics/video/timeseries.cjs +86 -0
  59. package/dist/commands/analytics/video/totals.cjs +86 -0
  60. package/dist/commands/analytics/video/weekday/timeseries.cjs +86 -0
  61. package/dist/commands/analytics/video/weekday/totals.cjs +83 -0
  62. package/dist/commands/analytics/video/weekday.cjs +89 -0
  63. package/dist/commands/app/add.cjs +76 -0
  64. package/dist/commands/app/delete.cjs +57 -0
  65. package/dist/commands/app/update.cjs +77 -0
  66. package/dist/commands/audience/companies.cjs +116 -0
  67. package/dist/commands/audience/field/list.cjs +83 -0
  68. package/dist/commands/audience/field/remove.cjs +63 -0
  69. package/dist/commands/audience/field/set.cjs +78 -0
  70. package/dist/commands/audience/field/types.cjs +57 -0
  71. package/dist/commands/audience/funnel.cjs +77 -0
  72. package/dist/commands/audience/identity-sources.cjs +64 -0
  73. package/dist/commands/audience/list-collectors.cjs +88 -0
  74. package/dist/commands/audience/list.cjs +122 -0
  75. package/dist/commands/audience/metrics.cjs +89 -0
  76. package/dist/commands/audience/register.cjs +106 -0
  77. package/dist/commands/audience/remove.cjs +72 -0
  78. package/dist/commands/audience/search.cjs +106 -0
  79. package/dist/commands/audience/timelines.cjs +115 -0
  80. package/dist/commands/audience/unregister.cjs +65 -0
  81. package/dist/commands/auth/credentials.cjs +89 -0
  82. package/dist/commands/auth/status.cjs +34 -0
  83. package/dist/commands/category/create.cjs +80 -0
  84. package/dist/commands/category/delete.cjs +70 -0
  85. package/dist/commands/category/index.cjs +11 -0
  86. package/dist/commands/category/list.cjs +98 -0
  87. package/dist/commands/category/update.cjs +134 -0
  88. package/dist/commands/collector/exclude.cjs +56 -0
  89. package/dist/commands/collector/include.cjs +56 -0
  90. package/dist/commands/collector/list.cjs +81 -0
  91. package/dist/commands/comment/add.cjs +102 -0
  92. package/dist/commands/comment/clone.cjs +59 -0
  93. package/dist/commands/comment/delete.cjs +55 -0
  94. package/dist/commands/comment/list.cjs +126 -0
  95. package/dist/commands/comment/promote.cjs +65 -0
  96. package/dist/commands/comment/reaction/add.cjs +81 -0
  97. package/dist/commands/comment/reaction/list.cjs +92 -0
  98. package/dist/commands/comment/reaction/remove.cjs +81 -0
  99. package/dist/commands/comment/set-order.cjs +63 -0
  100. package/dist/commands/comment/update.cjs +63 -0
  101. package/dist/commands/doctor.cjs +129 -0
  102. package/dist/commands/openupload/list.cjs +95 -0
  103. package/dist/commands/openupload/update-file.cjs +85 -0
  104. package/dist/commands/openupload/upload-file.cjs +130 -0
  105. package/dist/commands/player/delete.cjs +66 -0
  106. package/dist/commands/player/embed-versions.cjs +83 -0
  107. package/dist/commands/player/embed.cjs +134 -0
  108. package/dist/commands/player/list.cjs +86 -0
  109. package/dist/commands/player/styles.cjs +70 -0
  110. package/dist/commands/player/update.cjs +80 -0
  111. package/dist/commands/poll/add.cjs +84 -0
  112. package/dist/commands/poll/answer.cjs +89 -0
  113. package/dist/commands/poll/list.cjs +92 -0
  114. package/dist/commands/poll/remove.cjs +57 -0
  115. package/dist/commands/poll/set-options.cjs +84 -0
  116. package/dist/commands/poll/update.cjs +79 -0
  117. package/dist/commands/presentation/page/link-locations.cjs +57 -0
  118. package/dist/commands/presentation/setting/list.cjs +44 -0
  119. package/dist/commands/presentation/setting/update.cjs +67 -0
  120. package/dist/commands/protection/protect.cjs +68 -0
  121. package/dist/commands/protection/unprotect.cjs +65 -0
  122. package/dist/commands/protection/verify.cjs +80 -0
  123. package/dist/commands/session/get-token.cjs +75 -0
  124. package/dist/commands/session/redeem-token.cjs +56 -0
  125. package/dist/commands/setting/update.cjs +79 -0
  126. package/dist/commands/site/get.cjs +73 -0
  127. package/dist/commands/site/search.cjs +93 -0
  128. package/dist/commands/spot/check.cjs +52 -0
  129. package/dist/commands/spot/create.cjs +79 -0
  130. package/dist/commands/spot/delete.cjs +68 -0
  131. package/dist/commands/spot/list.cjs +120 -0
  132. package/dist/commands/spot/reset-version.cjs +53 -0
  133. package/dist/commands/spot/set-videos.cjs +64 -0
  134. package/dist/commands/spot/update.cjs +78 -0
  135. package/dist/commands/tag/list.cjs +98 -0
  136. package/dist/commands/tag/related.cjs +57 -0
  137. package/dist/commands/thumbnail/add.cjs +66 -0
  138. package/dist/commands/thumbnail/data.cjs +60 -0
  139. package/dist/commands/thumbnail/delete.cjs +61 -0
  140. package/dist/commands/thumbnail/duplicate.cjs +67 -0
  141. package/dist/commands/thumbnail/file/delete.cjs +71 -0
  142. package/dist/commands/thumbnail/file/list.cjs +74 -0
  143. package/dist/commands/thumbnail/file/upload.cjs +79 -0
  144. package/dist/commands/thumbnail/index.cjs +11 -0
  145. package/dist/commands/thumbnail/list.cjs +89 -0
  146. package/dist/commands/thumbnail/update.cjs +87 -0
  147. package/dist/commands/user/create.cjs +87 -0
  148. package/dist/commands/user/get-login-token.cjs +72 -0
  149. package/dist/commands/user/get.cjs +67 -0
  150. package/dist/commands/user/list.cjs +95 -0
  151. package/dist/commands/user/redeem-login-token.cjs +55 -0
  152. package/dist/commands/user/send-invitation.cjs +63 -0
  153. package/dist/commands/user/tokens.cjs +80 -0
  154. package/dist/commands/user/update.cjs +121 -0
  155. package/dist/commands/video/delete.cjs +67 -0
  156. package/dist/commands/video/frame.cjs +69 -0
  157. package/dist/commands/video/get.cjs +68 -0
  158. package/dist/commands/video/index.cjs +11 -0
  159. package/dist/commands/video/list.cjs +98 -0
  160. package/dist/commands/video/replace.cjs +126 -0
  161. package/dist/commands/video/section/create.cjs +73 -0
  162. package/dist/commands/video/section/delete.cjs +78 -0
  163. package/dist/commands/video/section/index.cjs +11 -0
  164. package/dist/commands/video/section/list.cjs +75 -0
  165. package/dist/commands/video/section/set-thumbnail.cjs +73 -0
  166. package/dist/commands/video/section/update.cjs +84 -0
  167. package/dist/commands/video/subtitle/archive.cjs +76 -0
  168. package/dist/commands/video/subtitle/create.cjs +80 -0
  169. package/dist/commands/video/subtitle/data.cjs +75 -0
  170. package/dist/commands/video/subtitle/delete.cjs +84 -0
  171. package/dist/commands/video/subtitle/duplicate.cjs +89 -0
  172. package/dist/commands/video/subtitle/index.cjs +11 -0
  173. package/dist/commands/video/subtitle/list.cjs +94 -0
  174. package/dist/commands/video/subtitle/locales.cjs +60 -0
  175. package/dist/commands/video/subtitle/set-primary.cjs +64 -0
  176. package/dist/commands/video/subtitle/types.cjs +42 -0
  177. package/dist/commands/video/subtitle/update.cjs +93 -0
  178. package/dist/commands/video/subtitle/upload.cjs +104 -0
  179. package/dist/commands/video/transcoding-progress.cjs +71 -0
  180. package/dist/commands/video/update.cjs +184 -0
  181. package/dist/commands/video/upload.cjs +151 -0
  182. package/dist/commands/webhook/events.cjs +68 -0
  183. package/dist/commands/webhook/list.cjs +64 -0
  184. package/dist/commands/webhook/sample.cjs +47 -0
  185. package/dist/commands/webhook/subscribe.cjs +66 -0
  186. package/dist/commands/webhook/unsubscribe.cjs +71 -0
  187. package/dist/commands/webinar/attachment/delete.cjs +79 -0
  188. package/dist/commands/webinar/attachment/list.cjs +94 -0
  189. package/dist/commands/webinar/attachment/set-hidden.cjs +85 -0
  190. package/dist/commands/webinar/attachment/upload.cjs +128 -0
  191. package/dist/commands/webinar/clips.cjs +77 -0
  192. package/dist/commands/webinar/create.cjs +107 -0
  193. package/dist/commands/webinar/delete.cjs +62 -0
  194. package/dist/commands/webinar/highlights.cjs +84 -0
  195. package/dist/commands/webinar/index.cjs +11 -0
  196. package/dist/commands/webinar/list-formats.cjs +50 -0
  197. package/dist/commands/webinar/list.cjs +134 -0
  198. package/dist/commands/webinar/log.cjs +69 -0
  199. package/dist/commands/webinar/mail/add.cjs +101 -0
  200. package/dist/commands/webinar/mail/list.cjs +83 -0
  201. package/dist/commands/webinar/mail/preview.cjs +75 -0
  202. package/dist/commands/webinar/mail/remove.cjs +75 -0
  203. package/dist/commands/webinar/mail/send.cjs +68 -0
  204. package/dist/commands/webinar/mail/test.cjs +86 -0
  205. package/dist/commands/webinar/mail/update.cjs +84 -0
  206. package/dist/commands/webinar/metrics.cjs +59 -0
  207. package/dist/commands/webinar/queued-video/add.cjs +81 -0
  208. package/dist/commands/webinar/queued-video/remove.cjs +81 -0
  209. package/dist/commands/webinar/recording/split.cjs +53 -0
  210. package/dist/commands/webinar/recording/start.cjs +53 -0
  211. package/dist/commands/webinar/recording/status.cjs +52 -0
  212. package/dist/commands/webinar/recording/stop.cjs +53 -0
  213. package/dist/commands/webinar/repeat.cjs +65 -0
  214. package/dist/commands/webinar/room/connect.cjs +60 -0
  215. package/dist/commands/webinar/room/info.cjs +60 -0
  216. package/dist/commands/webinar/room/send-recording.cjs +59 -0
  217. package/dist/commands/webinar/room/themes.cjs +63 -0
  218. package/dist/commands/webinar/section/add.cjs +98 -0
  219. package/dist/commands/webinar/section/list.cjs +86 -0
  220. package/dist/commands/webinar/section/remove.cjs +75 -0
  221. package/dist/commands/webinar/section/update.cjs +85 -0
  222. package/dist/commands/webinar/series/apply-recurrence.cjs +68 -0
  223. package/dist/commands/webinar/series/cancel.cjs +73 -0
  224. package/dist/commands/webinar/series/create.cjs +80 -0
  225. package/dist/commands/webinar/series/delete.cjs +73 -0
  226. package/dist/commands/webinar/series/list.cjs +79 -0
  227. package/dist/commands/webinar/series/mapped-objects.cjs +69 -0
  228. package/dist/commands/webinar/series/metrics.cjs +57 -0
  229. package/dist/commands/webinar/series/recurrences.cjs +72 -0
  230. package/dist/commands/webinar/series/set-ondemand.cjs +67 -0
  231. package/dist/commands/webinar/series/skip-recurrence.cjs +79 -0
  232. package/dist/commands/webinar/series/update.cjs +71 -0
  233. package/dist/commands/webinar/series/upload-thumbnail.cjs +117 -0
  234. package/dist/commands/webinar/speaker/add-from-speaker.cjs +78 -0
  235. package/dist/commands/webinar/speaker/add-from-user.cjs +78 -0
  236. package/dist/commands/webinar/speaker/add.cjs +112 -0
  237. package/dist/commands/webinar/speaker/cancel-guest-request.cjs +62 -0
  238. package/dist/commands/webinar/speaker/connection-types.cjs +66 -0
  239. package/dist/commands/webinar/speaker/library.cjs +59 -0
  240. package/dist/commands/webinar/speaker/list.cjs +90 -0
  241. package/dist/commands/webinar/speaker/remove-avatar.cjs +62 -0
  242. package/dist/commands/webinar/speaker/remove.cjs +69 -0
  243. package/dist/commands/webinar/speaker/request-guest.cjs +62 -0
  244. package/dist/commands/webinar/speaker/send-invitation.cjs +62 -0
  245. package/dist/commands/webinar/speaker/set-avatar.cjs +130 -0
  246. package/dist/commands/webinar/speaker/set-order.cjs +95 -0
  247. package/dist/commands/webinar/speaker/update.cjs +90 -0
  248. package/dist/commands/webinar/transcription/connect.cjs +69 -0
  249. package/dist/commands/webinar/transcription/list.cjs +88 -0
  250. package/dist/commands/webinar/transcription/locales.cjs +76 -0
  251. package/dist/commands/webinar/transcription/transcriptionlist.cjs +67 -0
  252. package/dist/commands/webinar/update.cjs +192 -0
  253. package/dist/commands/webinar/upload-image.cjs +133 -0
  254. package/dist/commands/workspace/list.cjs +47 -0
  255. package/dist/commands/workspace/use.cjs +52 -0
  256. package/dist/index.cjs +6 -0
  257. package/dist/lib/analytics-flags.cjs +60 -0
  258. package/dist/lib/audit.cjs +44 -0
  259. package/dist/lib/base-command.cjs +156 -0
  260. package/dist/lib/output.cjs +82 -0
  261. package/dist/lib/pagination.cjs +36 -0
  262. package/dist/lib/term-map.cjs +48 -0
  263. package/dist/upload/chunk-pool.cjs +47 -0
  264. package/dist/upload/chunked-upload.cjs +131 -0
  265. package/dist/upload/types.cjs +9 -0
  266. package/docs/commands/README.md +31 -0
  267. package/docs/commands/action/add.md +36 -0
  268. package/docs/commands/action/delete.md +32 -0
  269. package/docs/commands/action/exclude.md +38 -0
  270. package/docs/commands/action/get.md +47 -0
  271. package/docs/commands/action/include.md +38 -0
  272. package/docs/commands/action/list.md +43 -0
  273. package/docs/commands/action/types.md +34 -0
  274. package/docs/commands/action/update.md +42 -0
  275. package/docs/commands/action/upload.md +36 -0
  276. package/docs/commands/action.md +306 -0
  277. package/docs/commands/analytics/conversions.md +113 -0
  278. package/docs/commands/analytics/live.md +338 -0
  279. package/docs/commands/analytics/usage.md +674 -0
  280. package/docs/commands/analytics/video.md +449 -0
  281. package/docs/commands/analytics.md +1559 -0
  282. package/docs/commands/app/add.md +38 -0
  283. package/docs/commands/app/delete.md +32 -0
  284. package/docs/commands/app/update.md +41 -0
  285. package/docs/commands/app.md +101 -0
  286. package/docs/commands/audience/companies.md +41 -0
  287. package/docs/commands/audience/field.md +119 -0
  288. package/docs/commands/audience/funnel.md +38 -0
  289. package/docs/commands/audience/identity-sources.md +29 -0
  290. package/docs/commands/audience/list-collectors.md +35 -0
  291. package/docs/commands/audience/list.md +42 -0
  292. package/docs/commands/audience/metrics.md +40 -0
  293. package/docs/commands/audience/register.md +45 -0
  294. package/docs/commands/audience/remove.md +35 -0
  295. package/docs/commands/audience/search.md +39 -0
  296. package/docs/commands/audience/timelines.md +41 -0
  297. package/docs/commands/audience/unregister.md +36 -0
  298. package/docs/commands/audience.md +485 -0
  299. package/docs/commands/auth/credentials.md +23 -0
  300. package/docs/commands/auth/status.md +27 -0
  301. package/docs/commands/auth.md +45 -0
  302. package/docs/commands/category/create.md +36 -0
  303. package/docs/commands/category/delete.md +32 -0
  304. package/docs/commands/category/list.md +34 -0
  305. package/docs/commands/category/update.md +39 -0
  306. package/docs/commands/category.md +141 -0
  307. package/docs/commands/collector/exclude.md +33 -0
  308. package/docs/commands/collector/include.md +33 -0
  309. package/docs/commands/collector/list.md +37 -0
  310. package/docs/commands/collector.md +93 -0
  311. package/docs/commands/comment/add.md +43 -0
  312. package/docs/commands/comment/clone.md +35 -0
  313. package/docs/commands/comment/delete.md +32 -0
  314. package/docs/commands/comment/list.md +42 -0
  315. package/docs/commands/comment/promote.md +37 -0
  316. package/docs/commands/comment/reaction.md +106 -0
  317. package/docs/commands/comment/set-order.md +34 -0
  318. package/docs/commands/comment/update.md +36 -0
  319. package/docs/commands/comment.md +330 -0
  320. package/docs/commands/doctor.md +28 -0
  321. package/docs/commands/openupload/list.md +36 -0
  322. package/docs/commands/openupload/update-file.md +40 -0
  323. package/docs/commands/openupload/upload-file.md +39 -0
  324. package/docs/commands/openupload.md +105 -0
  325. package/docs/commands/player/delete.md +32 -0
  326. package/docs/commands/player/embed-versions.md +34 -0
  327. package/docs/commands/player/embed.md +51 -0
  328. package/docs/commands/player/list.md +32 -0
  329. package/docs/commands/player/styles.md +32 -0
  330. package/docs/commands/player/update.md +37 -0
  331. package/docs/commands/player.md +193 -0
  332. package/docs/commands/poll/add.md +33 -0
  333. package/docs/commands/poll/answer.md +38 -0
  334. package/docs/commands/poll/list.md +33 -0
  335. package/docs/commands/poll/remove.md +32 -0
  336. package/docs/commands/poll/set-options.md +35 -0
  337. package/docs/commands/poll/update.md +41 -0
  338. package/docs/commands/poll.md +187 -0
  339. package/docs/commands/presentation/page.md +29 -0
  340. package/docs/commands/presentation/setting.md +58 -0
  341. package/docs/commands/presentation.md +82 -0
  342. package/docs/commands/protection/protect.md +37 -0
  343. package/docs/commands/protection/unprotect.md +34 -0
  344. package/docs/commands/protection/verify.md +39 -0
  345. package/docs/commands/protection.md +100 -0
  346. package/docs/commands/session/get-token.md +38 -0
  347. package/docs/commands/session/redeem-token.md +32 -0
  348. package/docs/commands/session.md +65 -0
  349. package/docs/commands/setting/update.md +37 -0
  350. package/docs/commands/setting.md +37 -0
  351. package/docs/commands/site/get.md +35 -0
  352. package/docs/commands/site/search.md +38 -0
  353. package/docs/commands/site.md +68 -0
  354. package/docs/commands/spot/check.md +32 -0
  355. package/docs/commands/spot/create.md +38 -0
  356. package/docs/commands/spot/delete.md +32 -0
  357. package/docs/commands/spot/list.md +43 -0
  358. package/docs/commands/spot/reset-version.md +32 -0
  359. package/docs/commands/spot/set-videos.md +35 -0
  360. package/docs/commands/spot/update.md +40 -0
  361. package/docs/commands/spot.md +222 -0
  362. package/docs/commands/tag/list.md +44 -0
  363. package/docs/commands/tag/related.md +32 -0
  364. package/docs/commands/tag.md +71 -0
  365. package/docs/commands/thumbnail/add.md +33 -0
  366. package/docs/commands/thumbnail/data.md +35 -0
  367. package/docs/commands/thumbnail/delete.md +32 -0
  368. package/docs/commands/thumbnail/duplicate.md +37 -0
  369. package/docs/commands/thumbnail/file.md +90 -0
  370. package/docs/commands/thumbnail/list.md +37 -0
  371. package/docs/commands/thumbnail/update.md +44 -0
  372. package/docs/commands/thumbnail.md +293 -0
  373. package/docs/commands/user/create.md +41 -0
  374. package/docs/commands/user/get-login-token.md +37 -0
  375. package/docs/commands/user/get.md +37 -0
  376. package/docs/commands/user/list.md +40 -0
  377. package/docs/commands/user/redeem-login-token.md +32 -0
  378. package/docs/commands/user/send-invitation.md +37 -0
  379. package/docs/commands/user/tokens.md +34 -0
  380. package/docs/commands/user/update.md +44 -0
  381. package/docs/commands/user.md +267 -0
  382. package/docs/commands/video/delete.md +32 -0
  383. package/docs/commands/video/frame.md +37 -0
  384. package/docs/commands/video/get.md +32 -0
  385. package/docs/commands/video/list.md +33 -0
  386. package/docs/commands/video/replace.md +37 -0
  387. package/docs/commands/video/section.md +177 -0
  388. package/docs/commands/video/subtitle.md +362 -0
  389. package/docs/commands/video/transcoding-progress.md +32 -0
  390. package/docs/commands/video/update.md +45 -0
  391. package/docs/commands/video/upload.md +44 -0
  392. package/docs/commands/video.md +801 -0
  393. package/docs/commands/webhook/events.md +34 -0
  394. package/docs/commands/webhook/list.md +29 -0
  395. package/docs/commands/webhook/sample.md +32 -0
  396. package/docs/commands/webhook/subscribe.md +33 -0
  397. package/docs/commands/webhook/unsubscribe.md +35 -0
  398. package/docs/commands/webhook.md +143 -0
  399. package/docs/commands/webinar/attachment.md +135 -0
  400. package/docs/commands/webinar/clips.md +32 -0
  401. package/docs/commands/webinar/create.md +40 -0
  402. package/docs/commands/webinar/delete.md +32 -0
  403. package/docs/commands/webinar/highlights.md +37 -0
  404. package/docs/commands/webinar/list-formats.md +29 -0
  405. package/docs/commands/webinar/list.md +41 -0
  406. package/docs/commands/webinar/log.md +32 -0
  407. package/docs/commands/webinar/mail.md +238 -0
  408. package/docs/commands/webinar/metrics.md +32 -0
  409. package/docs/commands/webinar/queued-video.md +65 -0
  410. package/docs/commands/webinar/recording.md +113 -0
  411. package/docs/commands/webinar/repeat.md +35 -0
  412. package/docs/commands/webinar/room.md +110 -0
  413. package/docs/commands/webinar/section.md +134 -0
  414. package/docs/commands/webinar/series.md +365 -0
  415. package/docs/commands/webinar/speaker.md +430 -0
  416. package/docs/commands/webinar/transcription.md +125 -0
  417. package/docs/commands/webinar/update.md +43 -0
  418. package/docs/commands/webinar/upload-image.md +42 -0
  419. package/docs/commands/webinar.md +2030 -0
  420. package/docs/commands/workspace/list.md +27 -0
  421. package/docs/commands/workspace/use.md +32 -0
  422. package/docs/commands/workspace.md +54 -0
  423. package/docs/guides/api-spec-upgrade.md +92 -0
  424. package/docs/guides/getting-started.md +66 -0
  425. package/oclif.manifest.json +21609 -0
  426. package/package.json +71 -0
@@ -0,0 +1,69 @@
1
+ const require_runtime = require("../../../_virtual/_rolldown/runtime.cjs");
2
+ const require_lib_term_map = require("../../../lib/term-map.cjs");
3
+ const require_lib_base_command = require("../../../lib/base-command.cjs");
4
+ const require_lib_output = require("../../../lib/output.cjs");
5
+ let _oclif_core = require("@oclif/core");
6
+ let chalk = require("chalk");
7
+ chalk = require_runtime.__toESM(chalk);
8
+ //#region src/commands/webinar/transcription/connect.ts
9
+ /**
10
+ * Webinar transcription connect command — connects a transcription to a webinar.
11
+ *
12
+ * Action command pattern (Decision D-1): outputs a single green success line only.
13
+ *
14
+ * Threat mitigations:
15
+ * T-05-12: applyCliTerms() on all error messages
16
+ */
17
+ var WebinarTranscriptionConnect = class WebinarTranscriptionConnect extends require_lib_base_command.AuthenticatedCommand {
18
+ static description = "Connect a transcription to a webinar";
19
+ static examples = [
20
+ "<%= config.bin %> webinar transcription connect 12345",
21
+ "<%= config.bin %> webinar transcription connect 12345 --presenter-token abc123",
22
+ "<%= config.bin %> webinar transcription connect 12345 --json"
23
+ ];
24
+ static enableJsonFlag = true;
25
+ static flags = {
26
+ ...require_lib_base_command.AuthenticatedCommand.baseFlags,
27
+ "presenter-token": _oclif_core.Flags.string({
28
+ description: "Presenter token",
29
+ required: false
30
+ })
31
+ };
32
+ static args = { id: _oclif_core.Args.string({
33
+ description: "Webinar ID",
34
+ required: true
35
+ }) };
36
+ static agentMetadata = {
37
+ api_endpoint: "POST /live/transcription/connect",
38
+ auth_scope: "write",
39
+ output_shape: { type: "none" },
40
+ side_effects: "updates"
41
+ };
42
+ async run() {
43
+ const { args, flags } = await this.parse(WebinarTranscriptionConnect);
44
+ this.printWorkspaceHeader();
45
+ const body = { live_id: Number(args.id) };
46
+ if (flags["presenter-token"] !== void 0) body.presenter_token = flags["presenter-token"];
47
+ const { data, error } = await this.apiClient.POST("/live/transcription/connect", {
48
+ body,
49
+ headers: { "Content-Type": "application/x-www-form-urlencoded" }
50
+ });
51
+ if (error) this.error(require_lib_term_map.applyCliTerms(formatApiError(error)), { exit: 1 });
52
+ this.log(chalk.default.green("Transcription connected"));
53
+ if (this.jsonEnabled()) return require_lib_output.formatJsonOutput({
54
+ ok: true,
55
+ data,
56
+ summary: "Transcription connected",
57
+ breadcrumbs: [
58
+ { domain: this.activeWorkspace.domain },
59
+ {
60
+ resource: "webinar",
61
+ id: args.id
62
+ },
63
+ { resource: "transcription" }
64
+ ]
65
+ });
66
+ }
67
+ };
68
+ //#endregion
69
+ module.exports = WebinarTranscriptionConnect;
@@ -0,0 +1,88 @@
1
+ require("../../../_virtual/_rolldown/runtime.cjs");
2
+ const require_lib_term_map = require("../../../lib/term-map.cjs");
3
+ const require_lib_base_command = require("../../../lib/base-command.cjs");
4
+ const require_lib_output = require("../../../lib/output.cjs");
5
+ let _oclif_core = require("@oclif/core");
6
+ //#region src/commands/webinar/transcription/list.ts
7
+ /**
8
+ * Webinar transcription list command — lists transcriptions for a webinar.
9
+ *
10
+ * Uses token auto-lookup (Decision D-4): accepts optional --token flag,
11
+ * auto-looks up via fetchWebinarToken if not provided.
12
+ *
13
+ * Threat mitigations:
14
+ * T-05-12: applyCliTerms() on all error messages
15
+ */
16
+ var WebinarTranscriptionList = class WebinarTranscriptionList extends require_lib_base_command.AuthenticatedCommand {
17
+ static description = "List transcriptions for a webinar";
18
+ static examples = [
19
+ "<%= config.bin %> webinar transcription list 12345",
20
+ "<%= config.bin %> webinar transcription list 12345 --json",
21
+ "<%= config.bin %> webinar transcription list 12345 --token mytoken"
22
+ ];
23
+ static enableJsonFlag = true;
24
+ static flags = {
25
+ ...require_lib_base_command.AuthenticatedCommand.baseFlags,
26
+ token: _oclif_core.Flags.string({
27
+ description: "Webinar token (auto-looked up if not provided)",
28
+ required: false
29
+ })
30
+ };
31
+ static args = { id: _oclif_core.Args.string({
32
+ description: "Webinar ID",
33
+ required: true
34
+ }) };
35
+ static agentMetadata = {
36
+ api_endpoint: "GET /live/transcription/list",
37
+ auth_scope: "read",
38
+ output_shape: {
39
+ type: "table",
40
+ columns: [
41
+ "ID",
42
+ "Language",
43
+ "Status"
44
+ ]
45
+ },
46
+ side_effects: "none"
47
+ };
48
+ async run() {
49
+ const { args, flags } = await this.parse(WebinarTranscriptionList);
50
+ this.printWorkspaceHeader();
51
+ const token = flags.token ?? await this.fetchWebinarToken(args.id);
52
+ const { data, error } = await this.apiClient.GET("/live/transcription/list", { params: { query: {
53
+ live_id: Number(args.id),
54
+ token
55
+ } } });
56
+ if (error) this.error(require_lib_term_map.applyCliTerms(formatApiError(error)), { exit: 1 });
57
+ const items = Array.isArray(data?.data) ? data.data : data?.data ? [data.data] : [];
58
+ if (this.jsonEnabled()) return require_lib_output.formatJsonOutput({
59
+ ok: true,
60
+ data: items,
61
+ summary: `${items.length} transcription${items.length === 1 ? "" : "s"} for webinar ${args.id}`,
62
+ breadcrumbs: [
63
+ { domain: this.activeWorkspace.domain },
64
+ {
65
+ resource: "webinar",
66
+ id: args.id
67
+ },
68
+ { resource: "transcription" }
69
+ ]
70
+ });
71
+ if (items.length === 0) {
72
+ this.log("No transcriptions found.");
73
+ return;
74
+ }
75
+ const table = require_lib_output.renderTable([
76
+ "ID",
77
+ "Language",
78
+ "Status"
79
+ ], items.map((t) => [
80
+ String(t.transcription_id ?? t.id ?? ""),
81
+ String(t.language ?? t.locale ?? ""),
82
+ String(t.status ?? "")
83
+ ]));
84
+ this.log(table.toString());
85
+ }
86
+ };
87
+ //#endregion
88
+ module.exports = WebinarTranscriptionList;
@@ -0,0 +1,76 @@
1
+ require("../../../_virtual/_rolldown/runtime.cjs");
2
+ const require_lib_term_map = require("../../../lib/term-map.cjs");
3
+ const require_lib_base_command = require("../../../lib/base-command.cjs");
4
+ const require_lib_output = require("../../../lib/output.cjs");
5
+ let _oclif_core = require("@oclif/core");
6
+ //#region src/commands/webinar/transcription/locales.ts
7
+ /**
8
+ * Webinar transcription locales command — lists available transcription locales for a webinar.
9
+ *
10
+ * Uses token auto-lookup (Decision D-4): accepts optional --token flag,
11
+ * auto-looks up via fetchWebinarToken if not provided.
12
+ *
13
+ * Threat mitigations:
14
+ * T-05-12: applyCliTerms() on all error messages
15
+ */
16
+ var WebinarTranscriptionLocales = class WebinarTranscriptionLocales extends require_lib_base_command.AuthenticatedCommand {
17
+ static description = "List available transcription locales for a webinar";
18
+ static examples = [
19
+ "<%= config.bin %> webinar transcription locales 12345",
20
+ "<%= config.bin %> webinar transcription locales 12345 --json",
21
+ "<%= config.bin %> webinar transcription locales 12345 --token mytoken"
22
+ ];
23
+ static enableJsonFlag = true;
24
+ static flags = {
25
+ ...require_lib_base_command.AuthenticatedCommand.baseFlags,
26
+ token: _oclif_core.Flags.string({
27
+ description: "Webinar token (auto-looked up if not provided)",
28
+ required: false
29
+ })
30
+ };
31
+ static args = { id: _oclif_core.Args.string({
32
+ description: "Webinar ID",
33
+ required: true
34
+ }) };
35
+ static agentMetadata = {
36
+ api_endpoint: "GET /live/transcription/locales",
37
+ auth_scope: "read",
38
+ output_shape: {
39
+ type: "table",
40
+ columns: ["Locale", "Name"]
41
+ },
42
+ side_effects: "none"
43
+ };
44
+ async run() {
45
+ const { args, flags } = await this.parse(WebinarTranscriptionLocales);
46
+ this.printWorkspaceHeader();
47
+ const token = flags.token ?? await this.fetchWebinarToken(args.id);
48
+ const { data, error } = await this.apiClient.GET("/live/transcription/locales", { params: { query: {
49
+ live_id: Number(args.id),
50
+ token
51
+ } } });
52
+ if (error) this.error(require_lib_term_map.applyCliTerms(formatApiError(error)), { exit: 1 });
53
+ const items = Array.isArray(data?.data) ? data.data : data?.data ? [data.data] : Array.isArray(data) ? data : [];
54
+ if (this.jsonEnabled()) return require_lib_output.formatJsonOutput({
55
+ ok: true,
56
+ data: items,
57
+ summary: `${items.length} locale${items.length === 1 ? "" : "s"} available`,
58
+ breadcrumbs: [
59
+ { domain: this.activeWorkspace.domain },
60
+ {
61
+ resource: "webinar",
62
+ id: args.id
63
+ },
64
+ { resource: "transcription" }
65
+ ]
66
+ });
67
+ if (items.length === 0) {
68
+ this.log("No transcription locales found.");
69
+ return;
70
+ }
71
+ const table = require_lib_output.renderTable(["Locale", "Name"], items.map((l) => [String(l.locale ?? l.code ?? l.id ?? ""), String(l.name ?? l.label ?? "")]));
72
+ this.log(table.toString());
73
+ }
74
+ };
75
+ //#endregion
76
+ module.exports = WebinarTranscriptionLocales;
@@ -0,0 +1,67 @@
1
+ const require_lib_term_map = require("../../../lib/term-map.cjs");
2
+ const require_lib_base_command = require("../../../lib/base-command.cjs");
3
+ const require_lib_output = require("../../../lib/output.cjs");
4
+ //#region src/commands/webinar/transcription/transcriptionlist.ts
5
+ /**
6
+ * Webinar transcription transcriptionlist command — lists all transcriptions in the workspace.
7
+ *
8
+ * CRITICAL (Pitfall 4): This command calls /live/transcriptionlist (workspace-scoped),
9
+ * NOT /live/transcription/list (webinar-scoped). These are distinct endpoints.
10
+ *
11
+ * This is a workspace-scoped command — no webinar ID arg needed.
12
+ *
13
+ * Threat mitigations:
14
+ * T-05-12: applyCliTerms() on all error messages
15
+ */
16
+ var WebinarTranscriptionTranscriptionlist = class WebinarTranscriptionTranscriptionlist extends require_lib_base_command.AuthenticatedCommand {
17
+ static description = "List all transcriptions in the workspace";
18
+ static examples = ["<%= config.bin %> webinar transcription transcriptionlist", "<%= config.bin %> webinar transcription transcriptionlist --json"];
19
+ static enableJsonFlag = true;
20
+ static flags = { ...require_lib_base_command.AuthenticatedCommand.baseFlags };
21
+ static args = {};
22
+ static agentMetadata = {
23
+ api_endpoint: "GET /live/transcriptionlist",
24
+ auth_scope: "read",
25
+ output_shape: {
26
+ type: "table",
27
+ columns: [
28
+ "ID",
29
+ "Webinar ID",
30
+ "Language",
31
+ "Status"
32
+ ]
33
+ },
34
+ side_effects: "none"
35
+ };
36
+ async run() {
37
+ await this.parse(WebinarTranscriptionTranscriptionlist);
38
+ this.printWorkspaceHeader();
39
+ const { data, error } = await this.apiClient.GET("/live/transcriptionlist", { params: { query: {} } });
40
+ if (error) this.error(require_lib_term_map.applyCliTerms(formatApiError(error)), { exit: 1 });
41
+ const items = Array.isArray(data?.data) ? data.data : data?.data ? [data.data] : Array.isArray(data) ? data : [];
42
+ if (this.jsonEnabled()) return require_lib_output.formatJsonOutput({
43
+ ok: true,
44
+ data: items,
45
+ summary: `${items.length} transcription${items.length === 1 ? "" : "s"} in workspace`,
46
+ breadcrumbs: [{ domain: this.activeWorkspace.domain }, { resource: "transcription" }]
47
+ });
48
+ if (items.length === 0) {
49
+ this.log("No transcriptions found.");
50
+ return;
51
+ }
52
+ const table = require_lib_output.renderTable([
53
+ "ID",
54
+ "Webinar ID",
55
+ "Language",
56
+ "Status"
57
+ ], items.map((t) => [
58
+ String(t.transcription_id ?? t.id ?? ""),
59
+ String(t.live_id ?? ""),
60
+ String(t.language ?? t.locale ?? ""),
61
+ String(t.status ?? "")
62
+ ]));
63
+ this.log(table.toString());
64
+ }
65
+ };
66
+ //#endregion
67
+ module.exports = WebinarTranscriptionTranscriptionlist;
@@ -0,0 +1,192 @@
1
+ const require_runtime = require("../../_virtual/_rolldown/runtime.cjs");
2
+ const require_lib_term_map = require("../../lib/term-map.cjs");
3
+ const require_lib_base_command = require("../../lib/base-command.cjs");
4
+ const require_lib_output = require("../../lib/output.cjs");
5
+ let _oclif_core = require("@oclif/core");
6
+ let chalk = require("chalk");
7
+ chalk = require_runtime.__toESM(chalk);
8
+ let _clack_prompts = require("@clack/prompts");
9
+ //#region src/commands/webinar/update.ts
10
+ /**
11
+ * Webinar update command — updates metadata for an existing webinar.
12
+ *
13
+ * Two modes:
14
+ * - Flag mode: only flags explicitly provided are sent to the API
15
+ * - Interactive mode: triggered when no metadata flags provided and not --json;
16
+ * uses @clack/prompts with current values pre-filled
17
+ *
18
+ * CRITICAL field mapping: CLI --title flag maps to API body field `name` (NOT `title`).
19
+ * CRITICAL field mapping: CLI --live-date flag maps to API body field `start_time` (NOT `live_date`).
20
+ *
21
+ * Threat mitigations:
22
+ * T-04-05: Validates live_id is numeric; only flags !== undefined sent to body
23
+ * T-04-08: extends AuthenticatedCommand — anonymous mode rejected
24
+ */
25
+ var WebinarUpdate = class WebinarUpdate extends require_lib_base_command.AuthenticatedCommand {
26
+ static description = "Update details for a webinar";
27
+ static examples = [
28
+ "<%= config.bin %> webinar update 12345 --title \"New Title\"",
29
+ "<%= config.bin %> webinar update 12345 --status upcoming",
30
+ "<%= config.bin %> webinar update 12345"
31
+ ];
32
+ static enableJsonFlag = true;
33
+ static flags = {
34
+ ...require_lib_base_command.AuthenticatedCommand.baseFlags,
35
+ title: _oclif_core.Flags.string({
36
+ description: "New title for the webinar",
37
+ required: false
38
+ }),
39
+ description: _oclif_core.Flags.string({
40
+ description: "New description for the webinar",
41
+ required: false
42
+ }),
43
+ status: _oclif_core.Flags.string({
44
+ description: "Webinar status: upcoming, live, or previous",
45
+ required: false
46
+ }),
47
+ "live-date": _oclif_core.Flags.string({
48
+ description: "Schedule date/time (ISO 8601)",
49
+ required: false
50
+ }),
51
+ draft: _oclif_core.Flags.boolean({
52
+ description: "Set as draft",
53
+ allowNo: true,
54
+ required: false
55
+ }),
56
+ publish: _oclif_core.Flags.boolean({
57
+ description: "Publish or unpublish the webinar",
58
+ allowNo: true,
59
+ required: false
60
+ }),
61
+ "draft-p": _oclif_core.Flags.string({
62
+ hidden: true,
63
+ required: false
64
+ }),
65
+ "published-p": _oclif_core.Flags.string({
66
+ hidden: true,
67
+ required: false
68
+ })
69
+ };
70
+ static args = { id: _oclif_core.Args.string({
71
+ description: "Webinar ID",
72
+ required: true
73
+ }) };
74
+ static agentMetadata = {
75
+ api_endpoint: "POST /live/update",
76
+ auth_scope: "write",
77
+ output_shape: { type: "key-value" },
78
+ side_effects: "updates"
79
+ };
80
+ async run() {
81
+ const { args, flags } = await this.parse(WebinarUpdate);
82
+ this.printWorkspaceHeader();
83
+ const webinarId = Number(args.id);
84
+ if (!Number.isFinite(webinarId) || webinarId <= 0) this.error(`Invalid webinar ID: ${args.id}`, { exit: 1 });
85
+ const metadataFlagsProvided = [
86
+ flags.title,
87
+ flags.description,
88
+ flags.status,
89
+ flags["live-date"],
90
+ flags.draft,
91
+ flags.publish,
92
+ flags["draft-p"],
93
+ flags["published-p"]
94
+ ].some((v) => v !== void 0);
95
+ const body = { live_id: webinarId };
96
+ if (!metadataFlagsProvided && !this.jsonEnabled()) {
97
+ const { data, error } = await this.apiClient.GET("/live/list", { params: { query: { live_id: webinarId } } });
98
+ if (error) this.error(require_lib_term_map.applyCliTerms(formatApiError(error)), { exit: 1 });
99
+ const resp = data;
100
+ let current;
101
+ if (Array.isArray(resp?.data)) current = resp.data[0];
102
+ else if (resp?.data) current = resp.data;
103
+ if (!current) this.error(`Webinar ${args.id} not found`, { exit: 1 });
104
+ const titleResult = await (0, _clack_prompts.text)({
105
+ message: "Title",
106
+ initialValue: current.name ?? current.title ?? "",
107
+ placeholder: "Webinar title"
108
+ });
109
+ if ((0, _clack_prompts.isCancel)(titleResult)) process.exit(2);
110
+ const descriptionResult = await (0, _clack_prompts.text)({
111
+ message: "Description",
112
+ initialValue: current.description ?? "",
113
+ placeholder: "Webinar description"
114
+ });
115
+ if ((0, _clack_prompts.isCancel)(descriptionResult)) process.exit(2);
116
+ const statusResult = await (0, _clack_prompts.select)({
117
+ message: "Status",
118
+ options: [
119
+ {
120
+ value: "upcoming",
121
+ label: "Upcoming"
122
+ },
123
+ {
124
+ value: "live",
125
+ label: "Live"
126
+ },
127
+ {
128
+ value: "previous",
129
+ label: "Previous"
130
+ }
131
+ ],
132
+ initialValue: current.live_status ?? "upcoming"
133
+ });
134
+ if ((0, _clack_prompts.isCancel)(statusResult)) process.exit(2);
135
+ const draftResult = await (0, _clack_prompts.select)({
136
+ message: "Draft",
137
+ options: [{
138
+ value: "yes",
139
+ label: "Yes — draft"
140
+ }, {
141
+ value: "no",
142
+ label: "No — not draft"
143
+ }],
144
+ initialValue: current.draft_p ? "yes" : "no"
145
+ });
146
+ if ((0, _clack_prompts.isCancel)(draftResult)) process.exit(2);
147
+ const publishedResult = await (0, _clack_prompts.select)({
148
+ message: "Published",
149
+ options: [{
150
+ value: "yes",
151
+ label: "Yes — published"
152
+ }, {
153
+ value: "no",
154
+ label: "No — unpublished"
155
+ }],
156
+ initialValue: current.published_p ? "yes" : "no"
157
+ });
158
+ if ((0, _clack_prompts.isCancel)(publishedResult)) process.exit(2);
159
+ body.name = titleResult;
160
+ body.description = descriptionResult;
161
+ body.live_status = statusResult;
162
+ body.draft_p = draftResult === "yes" ? 1 : 0;
163
+ body.published_p = publishedResult === "yes" ? 1 : 0;
164
+ } else {
165
+ if (flags.title !== void 0) body.name = flags.title;
166
+ if (flags.description !== void 0) body.description = flags.description;
167
+ if (flags.status !== void 0) body.live_status = flags.status;
168
+ if (flags["live-date"] !== void 0) body.start_time = flags["live-date"];
169
+ const draftVal = parseBoolParam(flags.draft, flags["draft-p"]);
170
+ if (draftVal !== void 0) body.draft_p = draftVal ? 1 : 0;
171
+ const publishVal = parseBoolParam(flags.publish, flags["published-p"]);
172
+ if (publishVal !== void 0) body.published_p = publishVal ? 1 : 0;
173
+ }
174
+ const { data: updateData, error: updateError } = await this.apiClient.POST("/live/update", {
175
+ body,
176
+ headers: { "Content-Type": "application/x-www-form-urlencoded" }
177
+ });
178
+ if (updateError) this.error(require_lib_term_map.applyCliTerms(formatApiError(updateError)), { exit: 1 });
179
+ this.log(chalk.default.green(`Webinar ${args.id} updated`));
180
+ if (this.jsonEnabled()) return require_lib_output.formatJsonOutput({
181
+ ok: true,
182
+ data: updateData,
183
+ summary: `Webinar ${args.id} updated`,
184
+ breadcrumbs: [{ domain: this.activeWorkspace.domain }, {
185
+ resource: "webinar",
186
+ id: args.id
187
+ }]
188
+ });
189
+ }
190
+ };
191
+ //#endregion
192
+ module.exports = WebinarUpdate;
@@ -0,0 +1,133 @@
1
+ const require_runtime = require("../../_virtual/_rolldown/runtime.cjs");
2
+ const require_lib_term_map = require("../../lib/term-map.cjs");
3
+ const require_lib_base_command = require("../../lib/base-command.cjs");
4
+ const require_lib_output = require("../../lib/output.cjs");
5
+ const require_upload_types = require("../../upload/types.cjs");
6
+ const require_upload_chunked_upload = require("../../upload/chunked-upload.cjs");
7
+ let _oclif_core = require("@oclif/core");
8
+ let chalk = require("chalk");
9
+ chalk = require_runtime.__toESM(chalk);
10
+ let node_fs_promises = require("node:fs/promises");
11
+ //#region src/commands/webinar/upload-image.ts
12
+ /**
13
+ * Simple inline progress bar that writes directly to stderr using \r.
14
+ * T-04-09: shows only byte counts, never the live_id token.
15
+ */
16
+ var ProgressBar = class {
17
+ lastLen = 0;
18
+ render(bytesUploaded, total, speed) {
19
+ const pct = total > 0 ? Math.floor(bytesUploaded / total * 100) : 0;
20
+ const filled = Math.floor(pct / 5);
21
+ const line = `[${"█".repeat(filled) + "░".repeat(20 - filled)}] ${pct}% | ${require_lib_output.formatBytes(bytesUploaded)} / ${require_lib_output.formatBytes(total)} | ${require_lib_output.formatBytes(speed)}/s`;
22
+ const padding = " ".repeat(Math.max(0, this.lastLen - line.length));
23
+ process.stderr.write(`\r${line}${padding}`);
24
+ this.lastLen = line.length;
25
+ }
26
+ finish() {
27
+ process.stderr.write("\n");
28
+ this.lastLen = 0;
29
+ }
30
+ };
31
+ /**
32
+ * Webinar upload-image command — uploads a thumbnail, preview, or before-webinar image.
33
+ *
34
+ * Uses the chunked upload engine with live_id as the token field name.
35
+ * Image type is sent via extraFields so it reaches every chunk's FormData.
36
+ *
37
+ * Threat mitigations:
38
+ * T-04-09: live_id never logged to stdout — only byte counts shown in progress bar
39
+ * T-04-11: extends AuthenticatedCommand — anonymous mode rejected
40
+ */
41
+ var WebinarUploadImage = class WebinarUploadImage extends require_lib_base_command.AuthenticatedCommand {
42
+ static description = "Upload an image for a webinar (thumbnail, preview, or before-webinar)";
43
+ static examples = [
44
+ "<%= config.bin %> webinar upload-image 12345 ./thumb.jpg",
45
+ "<%= config.bin %> webinar upload-image 12345 ./preview.png --type preview",
46
+ "<%= config.bin %> webinar upload-image 12345 ./before.jpg --type before_webinar"
47
+ ];
48
+ static enableJsonFlag = true;
49
+ static flags = {
50
+ ...require_lib_base_command.AuthenticatedCommand.baseFlags,
51
+ type: _oclif_core.Flags.string({
52
+ description: "Image type",
53
+ options: [
54
+ "thumbnail",
55
+ "preview",
56
+ "before_webinar"
57
+ ],
58
+ default: "thumbnail"
59
+ }),
60
+ "chunk-size": _oclif_core.Flags.integer({
61
+ description: `Chunk size in bytes (default: ${require_upload_types.DEFAULT_CHUNK_SIZE})`,
62
+ default: require_upload_types.DEFAULT_CHUNK_SIZE
63
+ }),
64
+ concurrency: _oclif_core.Flags.integer({
65
+ description: `Number of chunks to upload in parallel (default: 5)`,
66
+ default: 5
67
+ })
68
+ };
69
+ static args = {
70
+ id: _oclif_core.Args.string({
71
+ description: "Webinar ID",
72
+ required: true
73
+ }),
74
+ file: _oclif_core.Args.string({
75
+ description: "Path to the image file to upload",
76
+ required: true
77
+ })
78
+ };
79
+ static agentMetadata = {
80
+ api_endpoint: "POST /live/upload-image",
81
+ auth_scope: "write",
82
+ output_shape: { type: "none" },
83
+ side_effects: "creates"
84
+ };
85
+ async run() {
86
+ const { args, flags } = await this.parse(WebinarUploadImage);
87
+ this.printWorkspaceHeader();
88
+ try {
89
+ await (0, node_fs_promises.stat)(args.file);
90
+ } catch {
91
+ this.error(require_lib_term_map.applyCliTerms(`File not found: ${args.file}`), { exit: 1 });
92
+ }
93
+ const totalBytes = (await (0, node_fs_promises.stat)(args.file)).size;
94
+ const bar = new ProgressBar();
95
+ const startTime = Date.now();
96
+ let result;
97
+ bar.render(0, totalBytes, 0);
98
+ try {
99
+ result = await require_upload_chunked_upload.uploadChunked({
100
+ filePath: args.file,
101
+ uploadToken: String(args.id),
102
+ tokenFieldName: "live_id",
103
+ uploadUrl: `${this.apiBaseUrl}live/upload-image`,
104
+ bearerToken: this.activeWorkspace.bearer_token || void 0,
105
+ chunkSize: flags["chunk-size"],
106
+ concurrency: flags.concurrency,
107
+ extraFields: { type: flags.type },
108
+ onProgress(bytesUploaded, total) {
109
+ const elapsed = (Date.now() - startTime) / 1e3;
110
+ const speed = elapsed > 0 ? bytesUploaded / elapsed : 0;
111
+ bar.render(bytesUploaded, total, speed);
112
+ }
113
+ });
114
+ } finally {
115
+ bar.finish();
116
+ }
117
+ this.log(chalk.default.green("Webinar image uploaded"));
118
+ this.log(`ID: ${args.id}`);
119
+ this.log(`Type: ${flags.type}`);
120
+ this.log(`Admin: https://${this.activeWorkspace.domain}/manage/webinar/${args.id}`);
121
+ if (this.jsonEnabled()) return require_lib_output.formatJsonOutput({
122
+ ok: true,
123
+ data: result,
124
+ summary: "Webinar image uploaded",
125
+ breadcrumbs: [{ domain: this.activeWorkspace.domain }, {
126
+ resource: "webinar",
127
+ id: args.id
128
+ }]
129
+ });
130
+ }
131
+ };
132
+ //#endregion
133
+ module.exports = WebinarUploadImage;
@@ -0,0 +1,47 @@
1
+ const require_runtime = require("../../_virtual/_rolldown/runtime.cjs");
2
+ const require_auth_workspace_config = require("../../auth/workspace-config.cjs");
3
+ const require_lib_base_command = require("../../lib/base-command.cjs");
4
+ let chalk = require("chalk");
5
+ chalk = require_runtime.__toESM(chalk);
6
+ //#region src/commands/workspace/list.ts
7
+ var List = class extends require_lib_base_command.BaseCommand {
8
+ static description = "List all configured workspaces";
9
+ static agentMetadata = {
10
+ api_endpoint: "local",
11
+ auth_scope: "none",
12
+ output_shape: {
13
+ type: "table",
14
+ columns: [
15
+ "Domain",
16
+ "Display Name",
17
+ "Status"
18
+ ]
19
+ },
20
+ side_effects: "none"
21
+ };
22
+ static examples = ["<%= config.bin %> workspace list"];
23
+ static enableJsonFlag = true;
24
+ async run() {
25
+ this.printWorkspaceHeader();
26
+ const workspaces = require_auth_workspace_config.getWorkspaces();
27
+ const activeDomain = require_auth_workspace_config.getActiveWorkspace();
28
+ if (workspaces.length === 0) {
29
+ this.log("No workspaces configured. Run `twentythree auth credentials` to set up.");
30
+ if (this.jsonEnabled()) return [];
31
+ return;
32
+ }
33
+ const result = workspaces.map((w) => {
34
+ const isDefault = w.domain === activeDomain;
35
+ const marker = isDefault ? chalk.default.green("*") : " ";
36
+ const status = w.bearer_token ? "authenticated" : "anonymous";
37
+ this.log(` ${marker} ${w.domain} ${w.display_name} (${status})`);
38
+ return {
39
+ ...w,
40
+ isDefault
41
+ };
42
+ });
43
+ if (this.jsonEnabled()) return result;
44
+ }
45
+ };
46
+ //#endregion
47
+ module.exports = List;