twentythree-cli 1.0.0 → 1.0.2

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 (234) hide show
  1. package/bin/dev.js +0 -0
  2. package/dist/commands/action/add.cjs +1 -1
  3. package/dist/commands/action/delete.cjs +1 -1
  4. package/dist/commands/action/exclude.cjs +1 -1
  5. package/dist/commands/action/get.cjs +1 -1
  6. package/dist/commands/action/include.cjs +1 -1
  7. package/dist/commands/action/list.cjs +1 -1
  8. package/dist/commands/action/types.cjs +1 -1
  9. package/dist/commands/action/update.cjs +1 -1
  10. package/dist/commands/action/upload.cjs +1 -1
  11. package/dist/commands/analytics/conversions/index.cjs +1 -1
  12. package/dist/commands/analytics/conversions/timeseries.cjs +1 -1
  13. package/dist/commands/analytics/conversions/totals.cjs +1 -1
  14. package/dist/commands/analytics/live/event-timeseries.cjs +1 -1
  15. package/dist/commands/analytics/live/event-totals.cjs +1 -1
  16. package/dist/commands/analytics/live/event.cjs +1 -1
  17. package/dist/commands/analytics/live/index.cjs +1 -1
  18. package/dist/commands/analytics/live/timeseries.cjs +1 -1
  19. package/dist/commands/analytics/live/totals.cjs +1 -1
  20. package/dist/commands/analytics/live/weekday/timeseries.cjs +1 -1
  21. package/dist/commands/analytics/live/weekday/totals.cjs +1 -1
  22. package/dist/commands/analytics/live/weekday.cjs +1 -1
  23. package/dist/commands/analytics/usage/devices/timeseries.cjs +1 -1
  24. package/dist/commands/analytics/usage/devices/totals.cjs +1 -1
  25. package/dist/commands/analytics/usage/devices.cjs +1 -1
  26. package/dist/commands/analytics/usage/domains/totals.cjs +1 -1
  27. package/dist/commands/analytics/usage/domains.cjs +1 -1
  28. package/dist/commands/analytics/usage/locations/totals.cjs +1 -1
  29. package/dist/commands/analytics/usage/locations.cjs +1 -1
  30. package/dist/commands/analytics/usage/sourceids/totals.cjs +1 -1
  31. package/dist/commands/analytics/usage/sourceids.cjs +1 -1
  32. package/dist/commands/analytics/usage/sources/totals.cjs +1 -1
  33. package/dist/commands/analytics/usage/sources.cjs +1 -1
  34. package/dist/commands/analytics/usage/spots/timeseries.cjs +1 -1
  35. package/dist/commands/analytics/usage/spots/totals.cjs +1 -1
  36. package/dist/commands/analytics/usage/spots.cjs +1 -1
  37. package/dist/commands/analytics/usage/storage.cjs +1 -1
  38. package/dist/commands/analytics/usage/traffic/timeseries.cjs +1 -1
  39. package/dist/commands/analytics/usage/traffic/totals.cjs +1 -1
  40. package/dist/commands/analytics/usage/traffic.cjs +1 -1
  41. package/dist/commands/analytics/video/index.cjs +1 -1
  42. package/dist/commands/analytics/video/performance/timeseries.cjs +1 -1
  43. package/dist/commands/analytics/video/performance/totals.cjs +1 -1
  44. package/dist/commands/analytics/video/performance.cjs +1 -1
  45. package/dist/commands/analytics/video/published/timeseries.cjs +1 -1
  46. package/dist/commands/analytics/video/published/totals.cjs +1 -1
  47. package/dist/commands/analytics/video/published.cjs +1 -1
  48. package/dist/commands/analytics/video/timeseries.cjs +1 -1
  49. package/dist/commands/analytics/video/totals.cjs +1 -1
  50. package/dist/commands/analytics/video/weekday/timeseries.cjs +1 -1
  51. package/dist/commands/analytics/video/weekday/totals.cjs +1 -1
  52. package/dist/commands/analytics/video/weekday.cjs +1 -1
  53. package/dist/commands/app/add.cjs +1 -1
  54. package/dist/commands/app/delete.cjs +1 -1
  55. package/dist/commands/app/update.cjs +1 -1
  56. package/dist/commands/audience/companies.cjs +1 -1
  57. package/dist/commands/audience/field/list.cjs +1 -1
  58. package/dist/commands/audience/field/remove.cjs +1 -1
  59. package/dist/commands/audience/field/set.cjs +1 -1
  60. package/dist/commands/audience/field/types.cjs +1 -1
  61. package/dist/commands/audience/funnel.cjs +1 -1
  62. package/dist/commands/audience/identity-sources.cjs +1 -1
  63. package/dist/commands/audience/list-collectors.cjs +1 -1
  64. package/dist/commands/audience/list.cjs +1 -1
  65. package/dist/commands/audience/metrics.cjs +1 -1
  66. package/dist/commands/audience/register.cjs +1 -1
  67. package/dist/commands/audience/remove.cjs +1 -1
  68. package/dist/commands/audience/search.cjs +1 -1
  69. package/dist/commands/audience/timelines.cjs +1 -1
  70. package/dist/commands/audience/unregister.cjs +1 -1
  71. package/dist/commands/auth/credentials.cjs +3 -2
  72. package/dist/commands/autocomplete/index.cjs +79 -0
  73. package/dist/commands/category/create.cjs +2 -2
  74. package/dist/commands/category/delete.cjs +1 -1
  75. package/dist/commands/category/list.cjs +2 -2
  76. package/dist/commands/category/update.cjs +2 -2
  77. package/dist/commands/collector/exclude.cjs +1 -1
  78. package/dist/commands/collector/include.cjs +1 -1
  79. package/dist/commands/collector/list.cjs +1 -1
  80. package/dist/commands/comment/add.cjs +1 -1
  81. package/dist/commands/comment/clone.cjs +1 -1
  82. package/dist/commands/comment/delete.cjs +1 -1
  83. package/dist/commands/comment/list.cjs +1 -1
  84. package/dist/commands/comment/promote.cjs +1 -1
  85. package/dist/commands/comment/reaction/add.cjs +1 -1
  86. package/dist/commands/comment/reaction/list.cjs +1 -1
  87. package/dist/commands/comment/reaction/remove.cjs +1 -1
  88. package/dist/commands/comment/set-order.cjs +1 -1
  89. package/dist/commands/comment/update.cjs +1 -1
  90. package/dist/commands/openupload/list.cjs +2 -2
  91. package/dist/commands/openupload/update-file.cjs +1 -1
  92. package/dist/commands/player/delete.cjs +1 -1
  93. package/dist/commands/player/embed-versions.cjs +1 -1
  94. package/dist/commands/player/embed.cjs +1 -1
  95. package/dist/commands/player/list.cjs +1 -1
  96. package/dist/commands/player/styles.cjs +1 -1
  97. package/dist/commands/player/update.cjs +1 -1
  98. package/dist/commands/poll/add.cjs +1 -1
  99. package/dist/commands/poll/answer.cjs +1 -1
  100. package/dist/commands/poll/list.cjs +1 -1
  101. package/dist/commands/poll/remove.cjs +1 -1
  102. package/dist/commands/poll/set-options.cjs +1 -1
  103. package/dist/commands/poll/update.cjs +1 -1
  104. package/dist/commands/presentation/page/link-locations.cjs +1 -1
  105. package/dist/commands/presentation/setting/list.cjs +1 -1
  106. package/dist/commands/presentation/setting/update.cjs +1 -1
  107. package/dist/commands/protection/protect.cjs +1 -1
  108. package/dist/commands/protection/unprotect.cjs +1 -1
  109. package/dist/commands/protection/verify.cjs +1 -1
  110. package/dist/commands/session/get-token.cjs +1 -1
  111. package/dist/commands/session/redeem-token.cjs +1 -1
  112. package/dist/commands/setting/update.cjs +2 -2
  113. package/dist/commands/site/get.cjs +3 -3
  114. package/dist/commands/site/search.cjs +1 -1
  115. package/dist/commands/spot/check.cjs +1 -1
  116. package/dist/commands/spot/create.cjs +1 -1
  117. package/dist/commands/spot/delete.cjs +1 -1
  118. package/dist/commands/spot/list.cjs +2 -2
  119. package/dist/commands/spot/reset-version.cjs +1 -1
  120. package/dist/commands/spot/set-videos.cjs +1 -1
  121. package/dist/commands/spot/update.cjs +2 -2
  122. package/dist/commands/tag/list.cjs +1 -1
  123. package/dist/commands/tag/related.cjs +1 -1
  124. package/dist/commands/thumbnail/add.cjs +1 -1
  125. package/dist/commands/thumbnail/data.cjs +1 -1
  126. package/dist/commands/thumbnail/delete.cjs +1 -1
  127. package/dist/commands/thumbnail/duplicate.cjs +1 -1
  128. package/dist/commands/thumbnail/file/delete.cjs +1 -1
  129. package/dist/commands/thumbnail/file/list.cjs +1 -1
  130. package/dist/commands/thumbnail/file/upload.cjs +1 -1
  131. package/dist/commands/thumbnail/list.cjs +1 -1
  132. package/dist/commands/thumbnail/update.cjs +1 -1
  133. package/dist/commands/user/create.cjs +2 -2
  134. package/dist/commands/user/get-login-token.cjs +1 -1
  135. package/dist/commands/user/get.cjs +2 -2
  136. package/dist/commands/user/list.cjs +1 -1
  137. package/dist/commands/user/redeem-login-token.cjs +1 -1
  138. package/dist/commands/user/send-invitation.cjs +1 -1
  139. package/dist/commands/user/update.cjs +1 -1
  140. package/dist/commands/video/frame.cjs +1 -1
  141. package/dist/commands/video/get.cjs +2 -2
  142. package/dist/commands/video/list.cjs +4 -3
  143. package/dist/commands/video/replace.cjs +3 -2
  144. package/dist/commands/video/section/create.cjs +1 -1
  145. package/dist/commands/video/section/delete.cjs +1 -1
  146. package/dist/commands/video/section/list.cjs +2 -2
  147. package/dist/commands/video/section/set-thumbnail.cjs +1 -1
  148. package/dist/commands/video/section/update.cjs +1 -1
  149. package/dist/commands/video/subtitle/archive.cjs +2 -2
  150. package/dist/commands/video/subtitle/create.cjs +2 -2
  151. package/dist/commands/video/subtitle/data.cjs +3 -1
  152. package/dist/commands/video/subtitle/delete.cjs +1 -1
  153. package/dist/commands/video/subtitle/duplicate.cjs +2 -2
  154. package/dist/commands/video/subtitle/list.cjs +2 -2
  155. package/dist/commands/video/subtitle/locales.cjs +1 -1
  156. package/dist/commands/video/subtitle/set-primary.cjs +1 -1
  157. package/dist/commands/video/subtitle/types.cjs +1 -1
  158. package/dist/commands/video/subtitle/update.cjs +3 -3
  159. package/dist/commands/video/subtitle/upload.cjs +2 -2
  160. package/dist/commands/video/transcoding-progress.cjs +2 -2
  161. package/dist/commands/video/update.cjs +11 -8
  162. package/dist/commands/webhook/events.cjs +2 -2
  163. package/dist/commands/webhook/list.cjs +1 -1
  164. package/dist/commands/webhook/sample.cjs +1 -1
  165. package/dist/commands/webhook/subscribe.cjs +1 -1
  166. package/dist/commands/webhook/unsubscribe.cjs +1 -1
  167. package/dist/commands/webinar/attachment/delete.cjs +1 -1
  168. package/dist/commands/webinar/attachment/list.cjs +2 -2
  169. package/dist/commands/webinar/attachment/set-hidden.cjs +1 -1
  170. package/dist/commands/webinar/clips.cjs +1 -1
  171. package/dist/commands/webinar/create.cjs +3 -3
  172. package/dist/commands/webinar/delete.cjs +1 -1
  173. package/dist/commands/webinar/highlights.cjs +1 -1
  174. package/dist/commands/webinar/list-formats.cjs +1 -1
  175. package/dist/commands/webinar/list.cjs +3 -3
  176. package/dist/commands/webinar/log.cjs +1 -1
  177. package/dist/commands/webinar/mail/add.cjs +1 -1
  178. package/dist/commands/webinar/mail/list.cjs +1 -1
  179. package/dist/commands/webinar/mail/preview.cjs +16 -3
  180. package/dist/commands/webinar/mail/remove.cjs +1 -1
  181. package/dist/commands/webinar/mail/send.cjs +1 -1
  182. package/dist/commands/webinar/mail/test.cjs +1 -1
  183. package/dist/commands/webinar/mail/update.cjs +1 -1
  184. package/dist/commands/webinar/metrics.cjs +1 -1
  185. package/dist/commands/webinar/queued-video/add.cjs +1 -1
  186. package/dist/commands/webinar/queued-video/remove.cjs +1 -1
  187. package/dist/commands/webinar/recording/split.cjs +1 -1
  188. package/dist/commands/webinar/recording/start.cjs +1 -1
  189. package/dist/commands/webinar/recording/status.cjs +1 -1
  190. package/dist/commands/webinar/recording/stop.cjs +1 -1
  191. package/dist/commands/webinar/repeat.cjs +1 -1
  192. package/dist/commands/webinar/room/connect.cjs +1 -1
  193. package/dist/commands/webinar/room/info.cjs +1 -1
  194. package/dist/commands/webinar/room/send-recording.cjs +1 -1
  195. package/dist/commands/webinar/room/themes.cjs +1 -1
  196. package/dist/commands/webinar/section/add.cjs +1 -1
  197. package/dist/commands/webinar/section/list.cjs +1 -1
  198. package/dist/commands/webinar/section/remove.cjs +1 -1
  199. package/dist/commands/webinar/section/update.cjs +1 -1
  200. package/dist/commands/webinar/series/apply-recurrence.cjs +1 -1
  201. package/dist/commands/webinar/series/cancel.cjs +1 -1
  202. package/dist/commands/webinar/series/create.cjs +1 -1
  203. package/dist/commands/webinar/series/delete.cjs +1 -1
  204. package/dist/commands/webinar/series/list.cjs +1 -1
  205. package/dist/commands/webinar/series/mapped-objects.cjs +1 -1
  206. package/dist/commands/webinar/series/metrics.cjs +1 -1
  207. package/dist/commands/webinar/series/recurrences.cjs +1 -1
  208. package/dist/commands/webinar/series/set-ondemand.cjs +1 -1
  209. package/dist/commands/webinar/series/skip-recurrence.cjs +1 -1
  210. package/dist/commands/webinar/series/update.cjs +1 -1
  211. package/dist/commands/webinar/speaker/add-from-speaker.cjs +1 -1
  212. package/dist/commands/webinar/speaker/add-from-user.cjs +1 -1
  213. package/dist/commands/webinar/speaker/add.cjs +1 -1
  214. package/dist/commands/webinar/speaker/cancel-guest-request.cjs +1 -1
  215. package/dist/commands/webinar/speaker/connection-types.cjs +1 -1
  216. package/dist/commands/webinar/speaker/library.cjs +1 -1
  217. package/dist/commands/webinar/speaker/list.cjs +1 -1
  218. package/dist/commands/webinar/speaker/remove-avatar.cjs +1 -1
  219. package/dist/commands/webinar/speaker/remove.cjs +1 -1
  220. package/dist/commands/webinar/speaker/request-guest.cjs +1 -1
  221. package/dist/commands/webinar/speaker/send-invitation.cjs +1 -1
  222. package/dist/commands/webinar/speaker/set-order.cjs +1 -1
  223. package/dist/commands/webinar/speaker/update.cjs +1 -1
  224. package/dist/commands/webinar/transcription/connect.cjs +1 -1
  225. package/dist/commands/webinar/transcription/list.cjs +1 -1
  226. package/dist/commands/webinar/transcription/locales.cjs +1 -1
  227. package/dist/commands/webinar/transcription/transcriptionlist.cjs +1 -1
  228. package/dist/commands/webinar/update.cjs +4 -4
  229. package/dist/lib/base-command.cjs +1 -1
  230. package/dist/lib/output.cjs +33 -0
  231. package/dist/upload/chunk-pool.cjs +4 -1
  232. package/docs/guides/getting-started.md +17 -1
  233. package/oclif.manifest.json +997 -965
  234. package/package.json +13 -12
@@ -32,7 +32,7 @@ var WebinarSeriesMetrics = class WebinarSeriesMetrics extends require_lib_base_c
32
32
  const { args } = await this.parse(WebinarSeriesMetrics);
33
33
  this.printWorkspaceHeader();
34
34
  const { data, error } = await this.apiClient.GET("/live/series/metrics", { params: { query: { live_series_id: Number(args.id) } } });
35
- if (error) this.error(require_lib_term_map.applyCliTerms(formatApiError(error)), { exit: 1 });
35
+ if (error) this.error(require_lib_term_map.applyCliTerms(require_lib_output.formatApiError(error)), { exit: 1 });
36
36
  if (this.jsonEnabled()) return require_lib_output.formatJsonOutput({
37
37
  ok: true,
38
38
  data,
@@ -37,7 +37,7 @@ var WebinarSeriesRecurrences = class WebinarSeriesRecurrences extends require_li
37
37
  const { args } = await this.parse(WebinarSeriesRecurrences);
38
38
  this.printWorkspaceHeader();
39
39
  const { data, error } = await this.apiClient.GET("/live/series/recurrences", { params: { query: { live_series_id: Number(args.id) } } });
40
- if (error) this.error(require_lib_term_map.applyCliTerms(formatApiError(error)), { exit: 1 });
40
+ if (error) this.error(require_lib_term_map.applyCliTerms(require_lib_output.formatApiError(error)), { exit: 1 });
41
41
  if (this.jsonEnabled()) return require_lib_output.formatJsonOutput({
42
42
  ok: true,
43
43
  data,
@@ -50,7 +50,7 @@ var WebinarSeriesSetOndemand = class WebinarSeriesSetOndemand extends require_li
50
50
  body,
51
51
  headers: { "Content-Type": "application/x-www-form-urlencoded" }
52
52
  });
53
- if (error) this.error(require_lib_term_map.applyCliTerms(formatApiError(error)), { exit: 1 });
53
+ if (error) this.error(require_lib_term_map.applyCliTerms(require_lib_output.formatApiError(error)), { exit: 1 });
54
54
  if (this.jsonEnabled()) return require_lib_output.formatJsonOutput({
55
55
  ok: true,
56
56
  data,
@@ -62,7 +62,7 @@ var WebinarSeriesSkipRecurrence = class WebinarSeriesSkipRecurrence extends requ
62
62
  recurrence_id: Number(recurrenceId),
63
63
  skipped_p: skipped ? 1 : 0
64
64
  } } });
65
- if (error) this.error(require_lib_term_map.applyCliTerms(formatApiError(error)), { exit: 1 });
65
+ if (error) this.error(require_lib_term_map.applyCliTerms(require_lib_output.formatApiError(error)), { exit: 1 });
66
66
  if (this.jsonEnabled()) return require_lib_output.formatJsonOutput({
67
67
  ok: true,
68
68
  data,
@@ -54,7 +54,7 @@ var WebinarSeriesUpdate = class WebinarSeriesUpdate extends require_lib_base_com
54
54
  body,
55
55
  headers: { "Content-Type": "application/x-www-form-urlencoded" }
56
56
  });
57
- if (error) this.error(require_lib_term_map.applyCliTerms(formatApiError(error)), { exit: 1 });
57
+ if (error) this.error(require_lib_term_map.applyCliTerms(require_lib_output.formatApiError(error)), { exit: 1 });
58
58
  if (this.jsonEnabled()) return require_lib_output.formatJsonOutput({
59
59
  ok: true,
60
60
  data,
@@ -57,7 +57,7 @@ var WebinarSpeakerAddFromSpeaker = class WebinarSpeakerAddFromSpeaker extends re
57
57
  },
58
58
  headers: { "Content-Type": "application/x-www-form-urlencoded" }
59
59
  });
60
- if (error) this.error(require_lib_term_map.applyCliTerms(formatApiError(error)), { exit: 1 });
60
+ if (error) this.error(require_lib_term_map.applyCliTerms(require_lib_output.formatApiError(error)), { exit: 1 });
61
61
  if (this.jsonEnabled()) return require_lib_output.formatJsonOutput({
62
62
  ok: true,
63
63
  data,
@@ -57,7 +57,7 @@ var WebinarSpeakerAddFromUser = class WebinarSpeakerAddFromUser extends require_
57
57
  },
58
58
  headers: { "Content-Type": "application/x-www-form-urlencoded" }
59
59
  });
60
- if (error) this.error(require_lib_term_map.applyCliTerms(formatApiError(error)), { exit: 1 });
60
+ if (error) this.error(require_lib_term_map.applyCliTerms(require_lib_output.formatApiError(error)), { exit: 1 });
61
61
  if (this.jsonEnabled()) return require_lib_output.formatJsonOutput({
62
62
  ok: true,
63
63
  data,
@@ -83,7 +83,7 @@ var WebinarSpeakerAdd = class WebinarSpeakerAdd extends require_lib_base_command
83
83
  body,
84
84
  headers: { "Content-Type": "application/x-www-form-urlencoded" }
85
85
  });
86
- if (error) this.error(require_lib_term_map.applyCliTerms(formatApiError(error)), { exit: 1 });
86
+ if (error) this.error(require_lib_term_map.applyCliTerms(require_lib_output.formatApiError(error)), { exit: 1 });
87
87
  const speakerId = data?.data?.live_speaker_id ?? data?.live_speaker_id;
88
88
  if (this.jsonEnabled()) return require_lib_output.formatJsonOutput({
89
89
  ok: true,
@@ -45,7 +45,7 @@ var WebinarSpeakerCancelGuestRequest = class WebinarSpeakerCancelGuestRequest ex
45
45
  },
46
46
  headers: { "Content-Type": "application/x-www-form-urlencoded" }
47
47
  });
48
- if (error) this.error(require_lib_term_map.applyCliTerms(formatApiError(error)), { exit: 1 });
48
+ if (error) this.error(require_lib_term_map.applyCliTerms(require_lib_output.formatApiError(error)), { exit: 1 });
49
49
  this.log(chalk.default.green("Guest request cancelled"));
50
50
  if (this.jsonEnabled()) return require_lib_output.formatJsonOutput({
51
51
  ok: true,
@@ -38,7 +38,7 @@ var WebinarSpeakerConnectionTypes = class WebinarSpeakerConnectionTypes extends
38
38
  const { args } = await this.parse(WebinarSpeakerConnectionTypes);
39
39
  this.printWorkspaceHeader();
40
40
  const { data, error } = await this.apiClient.GET("/live/speaker/connection-types", { params: { query: { live_id: Number(args.id) } } });
41
- if (error) this.error(require_lib_term_map.applyCliTerms(formatApiError(error)), { exit: 1 });
41
+ if (error) this.error(require_lib_term_map.applyCliTerms(require_lib_output.formatApiError(error)), { exit: 1 });
42
42
  const types = Array.isArray(data?.data) ? data.data : Array.isArray(data) ? data : [];
43
43
  if (this.jsonEnabled()) return require_lib_output.formatJsonOutput({
44
44
  ok: true,
@@ -31,7 +31,7 @@ var WebinarSpeakerLibrary = class WebinarSpeakerLibrary extends require_lib_base
31
31
  await this.parse(WebinarSpeakerLibrary);
32
32
  this.printWorkspaceHeader();
33
33
  const { data, error } = await this.apiClient.GET("/live/speaker/library/list", { params: { query: {} } });
34
- if (error) this.error(require_lib_term_map.applyCliTerms(formatApiError(error)), { exit: 1 });
34
+ if (error) this.error(require_lib_term_map.applyCliTerms(require_lib_output.formatApiError(error)), { exit: 1 });
35
35
  const speakers = Array.isArray(data?.data) ? data.data : data?.data ? [data.data] : [];
36
36
  if (this.jsonEnabled()) return require_lib_output.formatJsonOutput({
37
37
  ok: true,
@@ -51,7 +51,7 @@ var WebinarSpeakerList = class WebinarSpeakerList extends require_lib_base_comma
51
51
  live_id: webinarId,
52
52
  token
53
53
  } } });
54
- if (error) this.error(require_lib_term_map.applyCliTerms(formatApiError(error)), { exit: 1 });
54
+ if (error) this.error(require_lib_term_map.applyCliTerms(require_lib_output.formatApiError(error)), { exit: 1 });
55
55
  const speakers = Array.isArray(data?.data) ? data.data : data?.data ? [data.data] : [];
56
56
  if (this.jsonEnabled()) return require_lib_output.formatJsonOutput({
57
57
  ok: true,
@@ -45,7 +45,7 @@ var WebinarSpeakerRemoveAvatar = class WebinarSpeakerRemoveAvatar extends requir
45
45
  },
46
46
  headers: { "Content-Type": "application/x-www-form-urlencoded" }
47
47
  });
48
- if (error) this.error(require_lib_term_map.applyCliTerms(formatApiError(error)), { exit: 1 });
48
+ if (error) this.error(require_lib_term_map.applyCliTerms(require_lib_output.formatApiError(error)), { exit: 1 });
49
49
  this.log(chalk.default.green("Speaker avatar removed"));
50
50
  if (this.jsonEnabled()) return require_lib_output.formatJsonOutput({
51
51
  ok: true,
@@ -52,7 +52,7 @@ var WebinarSpeakerRemove = class WebinarSpeakerRemove extends require_lib_base_c
52
52
  },
53
53
  headers: { "Content-Type": "application/x-www-form-urlencoded" }
54
54
  });
55
- if (error) this.error(require_lib_term_map.applyCliTerms(formatApiError(error)), { exit: 1 });
55
+ if (error) this.error(require_lib_term_map.applyCliTerms(require_lib_output.formatApiError(error)), { exit: 1 });
56
56
  if (this.jsonEnabled()) return require_lib_output.formatJsonOutput({
57
57
  ok: true,
58
58
  data,
@@ -45,7 +45,7 @@ var WebinarSpeakerRequestGuest = class WebinarSpeakerRequestGuest extends requir
45
45
  },
46
46
  headers: { "Content-Type": "application/x-www-form-urlencoded" }
47
47
  });
48
- if (error) this.error(require_lib_term_map.applyCliTerms(formatApiError(error)), { exit: 1 });
48
+ if (error) this.error(require_lib_term_map.applyCliTerms(require_lib_output.formatApiError(error)), { exit: 1 });
49
49
  this.log(chalk.default.green("Guest request sent"));
50
50
  if (this.jsonEnabled()) return require_lib_output.formatJsonOutput({
51
51
  ok: true,
@@ -45,7 +45,7 @@ var WebinarSpeakerSendInvitation = class WebinarSpeakerSendInvitation extends re
45
45
  },
46
46
  headers: { "Content-Type": "application/x-www-form-urlencoded" }
47
47
  });
48
- if (error) this.error(require_lib_term_map.applyCliTerms(formatApiError(error)), { exit: 1 });
48
+ if (error) this.error(require_lib_term_map.applyCliTerms(require_lib_output.formatApiError(error)), { exit: 1 });
49
49
  this.log(chalk.default.green("Speaker invitation sent"));
50
50
  if (this.jsonEnabled()) return require_lib_output.formatJsonOutput({
51
51
  ok: true,
@@ -71,7 +71,7 @@ var WebinarSpeakerSetOrder = class WebinarSpeakerSetOrder extends require_lib_ba
71
71
  },
72
72
  headers: { "Content-Type": "application/x-www-form-urlencoded" }
73
73
  });
74
- if (error) this.error(require_lib_term_map.applyCliTerms(formatApiError(error)), { exit: 1 });
74
+ if (error) this.error(require_lib_term_map.applyCliTerms(require_lib_output.formatApiError(error)), { exit: 1 });
75
75
  if (this.jsonEnabled()) return require_lib_output.formatJsonOutput({
76
76
  ok: true,
77
77
  data,
@@ -73,7 +73,7 @@ var WebinarSpeakerUpdate = class WebinarSpeakerUpdate extends require_lib_base_c
73
73
  body,
74
74
  headers: { "Content-Type": "application/x-www-form-urlencoded" }
75
75
  });
76
- if (error) this.error(require_lib_term_map.applyCliTerms(formatApiError(error)), { exit: 1 });
76
+ if (error) this.error(require_lib_term_map.applyCliTerms(require_lib_output.formatApiError(error)), { exit: 1 });
77
77
  if (this.jsonEnabled()) return require_lib_output.formatJsonOutput({
78
78
  ok: true,
79
79
  data,
@@ -48,7 +48,7 @@ var WebinarTranscriptionConnect = class WebinarTranscriptionConnect extends requ
48
48
  body,
49
49
  headers: { "Content-Type": "application/x-www-form-urlencoded" }
50
50
  });
51
- if (error) this.error(require_lib_term_map.applyCliTerms(formatApiError(error)), { exit: 1 });
51
+ if (error) this.error(require_lib_term_map.applyCliTerms(require_lib_output.formatApiError(error)), { exit: 1 });
52
52
  this.log(chalk.default.green("Transcription connected"));
53
53
  if (this.jsonEnabled()) return require_lib_output.formatJsonOutput({
54
54
  ok: true,
@@ -53,7 +53,7 @@ var WebinarTranscriptionList = class WebinarTranscriptionList extends require_li
53
53
  live_id: Number(args.id),
54
54
  token
55
55
  } } });
56
- if (error) this.error(require_lib_term_map.applyCliTerms(formatApiError(error)), { exit: 1 });
56
+ if (error) this.error(require_lib_term_map.applyCliTerms(require_lib_output.formatApiError(error)), { exit: 1 });
57
57
  const items = Array.isArray(data?.data) ? data.data : data?.data ? [data.data] : [];
58
58
  if (this.jsonEnabled()) return require_lib_output.formatJsonOutput({
59
59
  ok: true,
@@ -49,7 +49,7 @@ var WebinarTranscriptionLocales = class WebinarTranscriptionLocales extends requ
49
49
  live_id: Number(args.id),
50
50
  token
51
51
  } } });
52
- if (error) this.error(require_lib_term_map.applyCliTerms(formatApiError(error)), { exit: 1 });
52
+ if (error) this.error(require_lib_term_map.applyCliTerms(require_lib_output.formatApiError(error)), { exit: 1 });
53
53
  const items = Array.isArray(data?.data) ? data.data : data?.data ? [data.data] : Array.isArray(data) ? data : [];
54
54
  if (this.jsonEnabled()) return require_lib_output.formatJsonOutput({
55
55
  ok: true,
@@ -37,7 +37,7 @@ var WebinarTranscriptionTranscriptionlist = class WebinarTranscriptionTranscript
37
37
  await this.parse(WebinarTranscriptionTranscriptionlist);
38
38
  this.printWorkspaceHeader();
39
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 });
40
+ if (error) this.error(require_lib_term_map.applyCliTerms(require_lib_output.formatApiError(error)), { exit: 1 });
41
41
  const items = Array.isArray(data?.data) ? data.data : data?.data ? [data.data] : Array.isArray(data) ? data : [];
42
42
  if (this.jsonEnabled()) return require_lib_output.formatJsonOutput({
43
43
  ok: true,
@@ -95,7 +95,7 @@ var WebinarUpdate = class WebinarUpdate extends require_lib_base_command.Authent
95
95
  const body = { live_id: webinarId };
96
96
  if (!metadataFlagsProvided && !this.jsonEnabled()) {
97
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 });
98
+ if (error) this.error(require_lib_term_map.applyCliTerms(require_lib_output.formatApiError(error)), { exit: 1 });
99
99
  const resp = data;
100
100
  let current;
101
101
  if (Array.isArray(resp?.data)) current = resp.data[0];
@@ -166,16 +166,16 @@ var WebinarUpdate = class WebinarUpdate extends require_lib_base_command.Authent
166
166
  if (flags.description !== void 0) body.description = flags.description;
167
167
  if (flags.status !== void 0) body.live_status = flags.status;
168
168
  if (flags["live-date"] !== void 0) body.start_time = flags["live-date"];
169
- const draftVal = parseBoolParam(flags.draft, flags["draft-p"]);
169
+ const draftVal = require_lib_output.parseBoolParam(flags.draft, flags["draft-p"]);
170
170
  if (draftVal !== void 0) body.draft_p = draftVal ? 1 : 0;
171
- const publishVal = parseBoolParam(flags.publish, flags["published-p"]);
171
+ const publishVal = require_lib_output.parseBoolParam(flags.publish, flags["published-p"]);
172
172
  if (publishVal !== void 0) body.published_p = publishVal ? 1 : 0;
173
173
  }
174
174
  const { data: updateData, error: updateError } = await this.apiClient.POST("/live/update", {
175
175
  body,
176
176
  headers: { "Content-Type": "application/x-www-form-urlencoded" }
177
177
  });
178
- if (updateError) this.error(require_lib_term_map.applyCliTerms(formatApiError(updateError)), { exit: 1 });
178
+ if (updateError) this.error(require_lib_term_map.applyCliTerms(require_lib_output.formatApiError(updateError)), { exit: 1 });
179
179
  this.log(chalk.default.green(`Webinar ${args.id} updated`));
180
180
  if (this.jsonEnabled()) return require_lib_output.formatJsonOutput({
181
181
  ok: true,
@@ -128,7 +128,7 @@ var AuthenticatedCommand = class extends BaseCommand {
128
128
  async fetchVideoToken(videoId) {
129
129
  const { data, error } = await this.apiClient.GET("/photo/list", { params: { query: {
130
130
  photo_id: Number(videoId),
131
- include_unpublished_p: 1
131
+ include_unpublished_p: "1"
132
132
  } } });
133
133
  if (error) this.error(`Could not look up video ${videoId}: ${error}`, { exit: 1 });
134
134
  const resp = data;
@@ -59,6 +59,37 @@ function formatBytes(bytes) {
59
59
  return `${bytes} B`;
60
60
  }
61
61
  /**
62
+ * Serialize an openapi-fetch error to a readable string.
63
+ * Handles plain objects (JSON error bodies) that String() would render as "[object Object]".
64
+ */
65
+ function formatApiError(error) {
66
+ if (error === null || error === void 0) return "Unknown error";
67
+ if (typeof error === "string") return error;
68
+ if (error instanceof Error) return error.message;
69
+ if (typeof error === "object") {
70
+ const e = error;
71
+ const msg = e?.message ?? e?.error ?? e?.error_description ?? e?.detail;
72
+ if (msg) return String(msg);
73
+ return JSON.stringify(error);
74
+ }
75
+ return String(error);
76
+ }
77
+ /**
78
+ * Resolves a boolean API parameter from:
79
+ * 1. A hidden raw _p-suffixed string alternative (e.g. --published-p 1)
80
+ * 2. A primary CLI boolean flag with allowNo (e.g. --publish / --no-publish)
81
+ *
82
+ * Returns undefined when neither is provided — the param is omitted from the request.
83
+ * Accepts '1'/'0', 'true'/'false', 'yes'/'no' for the string alternative.
84
+ */
85
+ function parseBoolParam(primary, alt) {
86
+ if (alt !== void 0) {
87
+ const v = alt.toLowerCase();
88
+ return v === "1" || v === "true" || v === "yes";
89
+ }
90
+ return primary;
91
+ }
92
+ /**
62
93
  * Resolve a potentially relative URL to an absolute URL using the workspace domain.
63
94
  *
64
95
  * - If url is undefined or empty, return it unchanged.
@@ -76,7 +107,9 @@ function resolveUrl(url, baseUrl) {
76
107
  exports.EXIT_CANCELLED = EXIT_CANCELLED;
77
108
  exports.EXIT_ERROR = EXIT_ERROR;
78
109
  exports.EXIT_SUCCESS = EXIT_SUCCESS;
110
+ exports.formatApiError = formatApiError;
79
111
  exports.formatBytes = formatBytes;
80
112
  exports.formatJsonOutput = formatJsonOutput;
113
+ exports.parseBoolParam = parseBoolParam;
81
114
  exports.renderTable = renderTable;
82
115
  exports.resolveUrl = resolveUrl;
@@ -28,7 +28,10 @@ async function uploadChunkPool(params) {
28
28
  onChunkComplete?.(chunk, response);
29
29
  return;
30
30
  }
31
- if (response.status === 500) throw new Error("Unsupported file format — upload aborted");
31
+ if (response.status === 500) {
32
+ const detail = response.data?.error ?? response.data?.message ?? JSON.stringify(response.data);
33
+ throw new Error(`Upload rejected by server (500)${detail ? `: ${detail}` : ""}`);
34
+ }
32
35
  if (attempt >= maxRetries) throw new Error(`Chunk ${chunk.number} failed after ${maxRetries} retries`);
33
36
  await delayFn(Math.min(1e3 * Math.pow(2, attempt), 3e4));
34
37
  attempt++;
@@ -35,7 +35,21 @@ twentythree workspace list
35
35
  twentythree workspace use company.video23.com
36
36
  ```
37
37
 
38
- ## Step 3: Run your first command
38
+ ## Step 3: Enable tab completion (optional)
39
+
40
+ Run this once to set up `<TAB>` completion for all commands and flags:
41
+
42
+ ```bash
43
+ twentythree autocomplete
44
+ ```
45
+
46
+ The command detects your shell (bash or zsh), builds the completion cache, and shows the eval line to paste into your RC file. After sourcing your RC file or restarting your terminal, try:
47
+
48
+ ```bash
49
+ twentythree video <TAB>
50
+ ```
51
+
52
+ ## Step 4: Run your first command
39
53
 
40
54
  List the videos in your active workspace.
41
55
 
@@ -64,3 +78,5 @@ Run `twentythree <topic> --help` for help on any topic. For example:
64
78
  twentythree video --help
65
79
  twentythree auth --help
66
80
  ```
81
+
82
+ Use `<TAB>` after any command to discover subcommands and flags.