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.
- package/README.md +25 -0
- package/bin/dev.cmd +2 -0
- package/bin/dev.js +28 -0
- package/bin/run.cmd +2 -0
- package/bin/run.js +23 -0
- package/dist/_virtual/_rolldown/runtime.cjs +23 -0
- package/dist/api/client.cjs +24 -0
- package/dist/api/types.cjs +0 -0
- package/dist/auth/credential-store.cjs +22 -0
- package/dist/auth/token-refresh.cjs +70 -0
- package/dist/auth/workspace-config.cjs +61 -0
- package/dist/commands/action/add.cjs +75 -0
- package/dist/commands/action/delete.cjs +64 -0
- package/dist/commands/action/exclude.cjs +70 -0
- package/dist/commands/action/get.cjs +112 -0
- package/dist/commands/action/include.cjs +70 -0
- package/dist/commands/action/list.cjs +119 -0
- package/dist/commands/action/types.cjs +63 -0
- package/dist/commands/action/update.cjs +86 -0
- package/dist/commands/action/upload.cjs +89 -0
- package/dist/commands/analytics/conversions/index.cjs +83 -0
- package/dist/commands/analytics/conversions/timeseries.cjs +83 -0
- package/dist/commands/analytics/conversions/totals.cjs +83 -0
- package/dist/commands/analytics/live/event-timeseries.cjs +86 -0
- package/dist/commands/analytics/live/event-totals.cjs +86 -0
- package/dist/commands/analytics/live/event.cjs +88 -0
- package/dist/commands/analytics/live/index.cjs +89 -0
- package/dist/commands/analytics/live/timeseries.cjs +85 -0
- package/dist/commands/analytics/live/totals.cjs +85 -0
- package/dist/commands/analytics/live/weekday/timeseries.cjs +85 -0
- package/dist/commands/analytics/live/weekday/totals.cjs +85 -0
- package/dist/commands/analytics/live/weekday.cjs +88 -0
- package/dist/commands/analytics/usage/devices/timeseries.cjs +83 -0
- package/dist/commands/analytics/usage/devices/totals.cjs +86 -0
- package/dist/commands/analytics/usage/devices.cjs +89 -0
- package/dist/commands/analytics/usage/domains/totals.cjs +83 -0
- package/dist/commands/analytics/usage/domains.cjs +89 -0
- package/dist/commands/analytics/usage/locations/totals.cjs +83 -0
- package/dist/commands/analytics/usage/locations.cjs +89 -0
- package/dist/commands/analytics/usage/sourceids/totals.cjs +83 -0
- package/dist/commands/analytics/usage/sourceids.cjs +89 -0
- package/dist/commands/analytics/usage/sources/totals.cjs +83 -0
- package/dist/commands/analytics/usage/sources.cjs +89 -0
- package/dist/commands/analytics/usage/spots/timeseries.cjs +83 -0
- package/dist/commands/analytics/usage/spots/totals.cjs +83 -0
- package/dist/commands/analytics/usage/spots.cjs +89 -0
- package/dist/commands/analytics/usage/storage.cjs +52 -0
- package/dist/commands/analytics/usage/traffic/timeseries.cjs +83 -0
- package/dist/commands/analytics/usage/traffic/totals.cjs +86 -0
- package/dist/commands/analytics/usage/traffic.cjs +89 -0
- package/dist/commands/analytics/video/index.cjs +89 -0
- package/dist/commands/analytics/video/performance/timeseries.cjs +83 -0
- package/dist/commands/analytics/video/performance/totals.cjs +80 -0
- package/dist/commands/analytics/video/performance.cjs +89 -0
- package/dist/commands/analytics/video/published/timeseries.cjs +83 -0
- package/dist/commands/analytics/video/published/totals.cjs +80 -0
- package/dist/commands/analytics/video/published.cjs +89 -0
- package/dist/commands/analytics/video/timeseries.cjs +86 -0
- package/dist/commands/analytics/video/totals.cjs +86 -0
- package/dist/commands/analytics/video/weekday/timeseries.cjs +86 -0
- package/dist/commands/analytics/video/weekday/totals.cjs +83 -0
- package/dist/commands/analytics/video/weekday.cjs +89 -0
- package/dist/commands/app/add.cjs +76 -0
- package/dist/commands/app/delete.cjs +57 -0
- package/dist/commands/app/update.cjs +77 -0
- package/dist/commands/audience/companies.cjs +116 -0
- package/dist/commands/audience/field/list.cjs +83 -0
- package/dist/commands/audience/field/remove.cjs +63 -0
- package/dist/commands/audience/field/set.cjs +78 -0
- package/dist/commands/audience/field/types.cjs +57 -0
- package/dist/commands/audience/funnel.cjs +77 -0
- package/dist/commands/audience/identity-sources.cjs +64 -0
- package/dist/commands/audience/list-collectors.cjs +88 -0
- package/dist/commands/audience/list.cjs +122 -0
- package/dist/commands/audience/metrics.cjs +89 -0
- package/dist/commands/audience/register.cjs +106 -0
- package/dist/commands/audience/remove.cjs +72 -0
- package/dist/commands/audience/search.cjs +106 -0
- package/dist/commands/audience/timelines.cjs +115 -0
- package/dist/commands/audience/unregister.cjs +65 -0
- package/dist/commands/auth/credentials.cjs +89 -0
- package/dist/commands/auth/status.cjs +34 -0
- package/dist/commands/category/create.cjs +80 -0
- package/dist/commands/category/delete.cjs +70 -0
- package/dist/commands/category/index.cjs +11 -0
- package/dist/commands/category/list.cjs +98 -0
- package/dist/commands/category/update.cjs +134 -0
- package/dist/commands/collector/exclude.cjs +56 -0
- package/dist/commands/collector/include.cjs +56 -0
- package/dist/commands/collector/list.cjs +81 -0
- package/dist/commands/comment/add.cjs +102 -0
- package/dist/commands/comment/clone.cjs +59 -0
- package/dist/commands/comment/delete.cjs +55 -0
- package/dist/commands/comment/list.cjs +126 -0
- package/dist/commands/comment/promote.cjs +65 -0
- package/dist/commands/comment/reaction/add.cjs +81 -0
- package/dist/commands/comment/reaction/list.cjs +92 -0
- package/dist/commands/comment/reaction/remove.cjs +81 -0
- package/dist/commands/comment/set-order.cjs +63 -0
- package/dist/commands/comment/update.cjs +63 -0
- package/dist/commands/doctor.cjs +129 -0
- package/dist/commands/openupload/list.cjs +95 -0
- package/dist/commands/openupload/update-file.cjs +85 -0
- package/dist/commands/openupload/upload-file.cjs +130 -0
- package/dist/commands/player/delete.cjs +66 -0
- package/dist/commands/player/embed-versions.cjs +83 -0
- package/dist/commands/player/embed.cjs +134 -0
- package/dist/commands/player/list.cjs +86 -0
- package/dist/commands/player/styles.cjs +70 -0
- package/dist/commands/player/update.cjs +80 -0
- package/dist/commands/poll/add.cjs +84 -0
- package/dist/commands/poll/answer.cjs +89 -0
- package/dist/commands/poll/list.cjs +92 -0
- package/dist/commands/poll/remove.cjs +57 -0
- package/dist/commands/poll/set-options.cjs +84 -0
- package/dist/commands/poll/update.cjs +79 -0
- package/dist/commands/presentation/page/link-locations.cjs +57 -0
- package/dist/commands/presentation/setting/list.cjs +44 -0
- package/dist/commands/presentation/setting/update.cjs +67 -0
- package/dist/commands/protection/protect.cjs +68 -0
- package/dist/commands/protection/unprotect.cjs +65 -0
- package/dist/commands/protection/verify.cjs +80 -0
- package/dist/commands/session/get-token.cjs +75 -0
- package/dist/commands/session/redeem-token.cjs +56 -0
- package/dist/commands/setting/update.cjs +79 -0
- package/dist/commands/site/get.cjs +73 -0
- package/dist/commands/site/search.cjs +93 -0
- package/dist/commands/spot/check.cjs +52 -0
- package/dist/commands/spot/create.cjs +79 -0
- package/dist/commands/spot/delete.cjs +68 -0
- package/dist/commands/spot/list.cjs +120 -0
- package/dist/commands/spot/reset-version.cjs +53 -0
- package/dist/commands/spot/set-videos.cjs +64 -0
- package/dist/commands/spot/update.cjs +78 -0
- package/dist/commands/tag/list.cjs +98 -0
- package/dist/commands/tag/related.cjs +57 -0
- package/dist/commands/thumbnail/add.cjs +66 -0
- package/dist/commands/thumbnail/data.cjs +60 -0
- package/dist/commands/thumbnail/delete.cjs +61 -0
- package/dist/commands/thumbnail/duplicate.cjs +67 -0
- package/dist/commands/thumbnail/file/delete.cjs +71 -0
- package/dist/commands/thumbnail/file/list.cjs +74 -0
- package/dist/commands/thumbnail/file/upload.cjs +79 -0
- package/dist/commands/thumbnail/index.cjs +11 -0
- package/dist/commands/thumbnail/list.cjs +89 -0
- package/dist/commands/thumbnail/update.cjs +87 -0
- package/dist/commands/user/create.cjs +87 -0
- package/dist/commands/user/get-login-token.cjs +72 -0
- package/dist/commands/user/get.cjs +67 -0
- package/dist/commands/user/list.cjs +95 -0
- package/dist/commands/user/redeem-login-token.cjs +55 -0
- package/dist/commands/user/send-invitation.cjs +63 -0
- package/dist/commands/user/tokens.cjs +80 -0
- package/dist/commands/user/update.cjs +121 -0
- package/dist/commands/video/delete.cjs +67 -0
- package/dist/commands/video/frame.cjs +69 -0
- package/dist/commands/video/get.cjs +68 -0
- package/dist/commands/video/index.cjs +11 -0
- package/dist/commands/video/list.cjs +98 -0
- package/dist/commands/video/replace.cjs +126 -0
- package/dist/commands/video/section/create.cjs +73 -0
- package/dist/commands/video/section/delete.cjs +78 -0
- package/dist/commands/video/section/index.cjs +11 -0
- package/dist/commands/video/section/list.cjs +75 -0
- package/dist/commands/video/section/set-thumbnail.cjs +73 -0
- package/dist/commands/video/section/update.cjs +84 -0
- package/dist/commands/video/subtitle/archive.cjs +76 -0
- package/dist/commands/video/subtitle/create.cjs +80 -0
- package/dist/commands/video/subtitle/data.cjs +75 -0
- package/dist/commands/video/subtitle/delete.cjs +84 -0
- package/dist/commands/video/subtitle/duplicate.cjs +89 -0
- package/dist/commands/video/subtitle/index.cjs +11 -0
- package/dist/commands/video/subtitle/list.cjs +94 -0
- package/dist/commands/video/subtitle/locales.cjs +60 -0
- package/dist/commands/video/subtitle/set-primary.cjs +64 -0
- package/dist/commands/video/subtitle/types.cjs +42 -0
- package/dist/commands/video/subtitle/update.cjs +93 -0
- package/dist/commands/video/subtitle/upload.cjs +104 -0
- package/dist/commands/video/transcoding-progress.cjs +71 -0
- package/dist/commands/video/update.cjs +184 -0
- package/dist/commands/video/upload.cjs +151 -0
- package/dist/commands/webhook/events.cjs +68 -0
- package/dist/commands/webhook/list.cjs +64 -0
- package/dist/commands/webhook/sample.cjs +47 -0
- package/dist/commands/webhook/subscribe.cjs +66 -0
- package/dist/commands/webhook/unsubscribe.cjs +71 -0
- package/dist/commands/webinar/attachment/delete.cjs +79 -0
- package/dist/commands/webinar/attachment/list.cjs +94 -0
- package/dist/commands/webinar/attachment/set-hidden.cjs +85 -0
- package/dist/commands/webinar/attachment/upload.cjs +128 -0
- package/dist/commands/webinar/clips.cjs +77 -0
- package/dist/commands/webinar/create.cjs +107 -0
- package/dist/commands/webinar/delete.cjs +62 -0
- package/dist/commands/webinar/highlights.cjs +84 -0
- package/dist/commands/webinar/index.cjs +11 -0
- package/dist/commands/webinar/list-formats.cjs +50 -0
- package/dist/commands/webinar/list.cjs +134 -0
- package/dist/commands/webinar/log.cjs +69 -0
- package/dist/commands/webinar/mail/add.cjs +101 -0
- package/dist/commands/webinar/mail/list.cjs +83 -0
- package/dist/commands/webinar/mail/preview.cjs +75 -0
- package/dist/commands/webinar/mail/remove.cjs +75 -0
- package/dist/commands/webinar/mail/send.cjs +68 -0
- package/dist/commands/webinar/mail/test.cjs +86 -0
- package/dist/commands/webinar/mail/update.cjs +84 -0
- package/dist/commands/webinar/metrics.cjs +59 -0
- package/dist/commands/webinar/queued-video/add.cjs +81 -0
- package/dist/commands/webinar/queued-video/remove.cjs +81 -0
- package/dist/commands/webinar/recording/split.cjs +53 -0
- package/dist/commands/webinar/recording/start.cjs +53 -0
- package/dist/commands/webinar/recording/status.cjs +52 -0
- package/dist/commands/webinar/recording/stop.cjs +53 -0
- package/dist/commands/webinar/repeat.cjs +65 -0
- package/dist/commands/webinar/room/connect.cjs +60 -0
- package/dist/commands/webinar/room/info.cjs +60 -0
- package/dist/commands/webinar/room/send-recording.cjs +59 -0
- package/dist/commands/webinar/room/themes.cjs +63 -0
- package/dist/commands/webinar/section/add.cjs +98 -0
- package/dist/commands/webinar/section/list.cjs +86 -0
- package/dist/commands/webinar/section/remove.cjs +75 -0
- package/dist/commands/webinar/section/update.cjs +85 -0
- package/dist/commands/webinar/series/apply-recurrence.cjs +68 -0
- package/dist/commands/webinar/series/cancel.cjs +73 -0
- package/dist/commands/webinar/series/create.cjs +80 -0
- package/dist/commands/webinar/series/delete.cjs +73 -0
- package/dist/commands/webinar/series/list.cjs +79 -0
- package/dist/commands/webinar/series/mapped-objects.cjs +69 -0
- package/dist/commands/webinar/series/metrics.cjs +57 -0
- package/dist/commands/webinar/series/recurrences.cjs +72 -0
- package/dist/commands/webinar/series/set-ondemand.cjs +67 -0
- package/dist/commands/webinar/series/skip-recurrence.cjs +79 -0
- package/dist/commands/webinar/series/update.cjs +71 -0
- package/dist/commands/webinar/series/upload-thumbnail.cjs +117 -0
- package/dist/commands/webinar/speaker/add-from-speaker.cjs +78 -0
- package/dist/commands/webinar/speaker/add-from-user.cjs +78 -0
- package/dist/commands/webinar/speaker/add.cjs +112 -0
- package/dist/commands/webinar/speaker/cancel-guest-request.cjs +62 -0
- package/dist/commands/webinar/speaker/connection-types.cjs +66 -0
- package/dist/commands/webinar/speaker/library.cjs +59 -0
- package/dist/commands/webinar/speaker/list.cjs +90 -0
- package/dist/commands/webinar/speaker/remove-avatar.cjs +62 -0
- package/dist/commands/webinar/speaker/remove.cjs +69 -0
- package/dist/commands/webinar/speaker/request-guest.cjs +62 -0
- package/dist/commands/webinar/speaker/send-invitation.cjs +62 -0
- package/dist/commands/webinar/speaker/set-avatar.cjs +130 -0
- package/dist/commands/webinar/speaker/set-order.cjs +95 -0
- package/dist/commands/webinar/speaker/update.cjs +90 -0
- package/dist/commands/webinar/transcription/connect.cjs +69 -0
- package/dist/commands/webinar/transcription/list.cjs +88 -0
- package/dist/commands/webinar/transcription/locales.cjs +76 -0
- package/dist/commands/webinar/transcription/transcriptionlist.cjs +67 -0
- package/dist/commands/webinar/update.cjs +192 -0
- package/dist/commands/webinar/upload-image.cjs +133 -0
- package/dist/commands/workspace/list.cjs +47 -0
- package/dist/commands/workspace/use.cjs +52 -0
- package/dist/index.cjs +6 -0
- package/dist/lib/analytics-flags.cjs +60 -0
- package/dist/lib/audit.cjs +44 -0
- package/dist/lib/base-command.cjs +156 -0
- package/dist/lib/output.cjs +82 -0
- package/dist/lib/pagination.cjs +36 -0
- package/dist/lib/term-map.cjs +48 -0
- package/dist/upload/chunk-pool.cjs +47 -0
- package/dist/upload/chunked-upload.cjs +131 -0
- package/dist/upload/types.cjs +9 -0
- package/docs/commands/README.md +31 -0
- package/docs/commands/action/add.md +36 -0
- package/docs/commands/action/delete.md +32 -0
- package/docs/commands/action/exclude.md +38 -0
- package/docs/commands/action/get.md +47 -0
- package/docs/commands/action/include.md +38 -0
- package/docs/commands/action/list.md +43 -0
- package/docs/commands/action/types.md +34 -0
- package/docs/commands/action/update.md +42 -0
- package/docs/commands/action/upload.md +36 -0
- package/docs/commands/action.md +306 -0
- package/docs/commands/analytics/conversions.md +113 -0
- package/docs/commands/analytics/live.md +338 -0
- package/docs/commands/analytics/usage.md +674 -0
- package/docs/commands/analytics/video.md +449 -0
- package/docs/commands/analytics.md +1559 -0
- package/docs/commands/app/add.md +38 -0
- package/docs/commands/app/delete.md +32 -0
- package/docs/commands/app/update.md +41 -0
- package/docs/commands/app.md +101 -0
- package/docs/commands/audience/companies.md +41 -0
- package/docs/commands/audience/field.md +119 -0
- package/docs/commands/audience/funnel.md +38 -0
- package/docs/commands/audience/identity-sources.md +29 -0
- package/docs/commands/audience/list-collectors.md +35 -0
- package/docs/commands/audience/list.md +42 -0
- package/docs/commands/audience/metrics.md +40 -0
- package/docs/commands/audience/register.md +45 -0
- package/docs/commands/audience/remove.md +35 -0
- package/docs/commands/audience/search.md +39 -0
- package/docs/commands/audience/timelines.md +41 -0
- package/docs/commands/audience/unregister.md +36 -0
- package/docs/commands/audience.md +485 -0
- package/docs/commands/auth/credentials.md +23 -0
- package/docs/commands/auth/status.md +27 -0
- package/docs/commands/auth.md +45 -0
- package/docs/commands/category/create.md +36 -0
- package/docs/commands/category/delete.md +32 -0
- package/docs/commands/category/list.md +34 -0
- package/docs/commands/category/update.md +39 -0
- package/docs/commands/category.md +141 -0
- package/docs/commands/collector/exclude.md +33 -0
- package/docs/commands/collector/include.md +33 -0
- package/docs/commands/collector/list.md +37 -0
- package/docs/commands/collector.md +93 -0
- package/docs/commands/comment/add.md +43 -0
- package/docs/commands/comment/clone.md +35 -0
- package/docs/commands/comment/delete.md +32 -0
- package/docs/commands/comment/list.md +42 -0
- package/docs/commands/comment/promote.md +37 -0
- package/docs/commands/comment/reaction.md +106 -0
- package/docs/commands/comment/set-order.md +34 -0
- package/docs/commands/comment/update.md +36 -0
- package/docs/commands/comment.md +330 -0
- package/docs/commands/doctor.md +28 -0
- package/docs/commands/openupload/list.md +36 -0
- package/docs/commands/openupload/update-file.md +40 -0
- package/docs/commands/openupload/upload-file.md +39 -0
- package/docs/commands/openupload.md +105 -0
- package/docs/commands/player/delete.md +32 -0
- package/docs/commands/player/embed-versions.md +34 -0
- package/docs/commands/player/embed.md +51 -0
- package/docs/commands/player/list.md +32 -0
- package/docs/commands/player/styles.md +32 -0
- package/docs/commands/player/update.md +37 -0
- package/docs/commands/player.md +193 -0
- package/docs/commands/poll/add.md +33 -0
- package/docs/commands/poll/answer.md +38 -0
- package/docs/commands/poll/list.md +33 -0
- package/docs/commands/poll/remove.md +32 -0
- package/docs/commands/poll/set-options.md +35 -0
- package/docs/commands/poll/update.md +41 -0
- package/docs/commands/poll.md +187 -0
- package/docs/commands/presentation/page.md +29 -0
- package/docs/commands/presentation/setting.md +58 -0
- package/docs/commands/presentation.md +82 -0
- package/docs/commands/protection/protect.md +37 -0
- package/docs/commands/protection/unprotect.md +34 -0
- package/docs/commands/protection/verify.md +39 -0
- package/docs/commands/protection.md +100 -0
- package/docs/commands/session/get-token.md +38 -0
- package/docs/commands/session/redeem-token.md +32 -0
- package/docs/commands/session.md +65 -0
- package/docs/commands/setting/update.md +37 -0
- package/docs/commands/setting.md +37 -0
- package/docs/commands/site/get.md +35 -0
- package/docs/commands/site/search.md +38 -0
- package/docs/commands/site.md +68 -0
- package/docs/commands/spot/check.md +32 -0
- package/docs/commands/spot/create.md +38 -0
- package/docs/commands/spot/delete.md +32 -0
- package/docs/commands/spot/list.md +43 -0
- package/docs/commands/spot/reset-version.md +32 -0
- package/docs/commands/spot/set-videos.md +35 -0
- package/docs/commands/spot/update.md +40 -0
- package/docs/commands/spot.md +222 -0
- package/docs/commands/tag/list.md +44 -0
- package/docs/commands/tag/related.md +32 -0
- package/docs/commands/tag.md +71 -0
- package/docs/commands/thumbnail/add.md +33 -0
- package/docs/commands/thumbnail/data.md +35 -0
- package/docs/commands/thumbnail/delete.md +32 -0
- package/docs/commands/thumbnail/duplicate.md +37 -0
- package/docs/commands/thumbnail/file.md +90 -0
- package/docs/commands/thumbnail/list.md +37 -0
- package/docs/commands/thumbnail/update.md +44 -0
- package/docs/commands/thumbnail.md +293 -0
- package/docs/commands/user/create.md +41 -0
- package/docs/commands/user/get-login-token.md +37 -0
- package/docs/commands/user/get.md +37 -0
- package/docs/commands/user/list.md +40 -0
- package/docs/commands/user/redeem-login-token.md +32 -0
- package/docs/commands/user/send-invitation.md +37 -0
- package/docs/commands/user/tokens.md +34 -0
- package/docs/commands/user/update.md +44 -0
- package/docs/commands/user.md +267 -0
- package/docs/commands/video/delete.md +32 -0
- package/docs/commands/video/frame.md +37 -0
- package/docs/commands/video/get.md +32 -0
- package/docs/commands/video/list.md +33 -0
- package/docs/commands/video/replace.md +37 -0
- package/docs/commands/video/section.md +177 -0
- package/docs/commands/video/subtitle.md +362 -0
- package/docs/commands/video/transcoding-progress.md +32 -0
- package/docs/commands/video/update.md +45 -0
- package/docs/commands/video/upload.md +44 -0
- package/docs/commands/video.md +801 -0
- package/docs/commands/webhook/events.md +34 -0
- package/docs/commands/webhook/list.md +29 -0
- package/docs/commands/webhook/sample.md +32 -0
- package/docs/commands/webhook/subscribe.md +33 -0
- package/docs/commands/webhook/unsubscribe.md +35 -0
- package/docs/commands/webhook.md +143 -0
- package/docs/commands/webinar/attachment.md +135 -0
- package/docs/commands/webinar/clips.md +32 -0
- package/docs/commands/webinar/create.md +40 -0
- package/docs/commands/webinar/delete.md +32 -0
- package/docs/commands/webinar/highlights.md +37 -0
- package/docs/commands/webinar/list-formats.md +29 -0
- package/docs/commands/webinar/list.md +41 -0
- package/docs/commands/webinar/log.md +32 -0
- package/docs/commands/webinar/mail.md +238 -0
- package/docs/commands/webinar/metrics.md +32 -0
- package/docs/commands/webinar/queued-video.md +65 -0
- package/docs/commands/webinar/recording.md +113 -0
- package/docs/commands/webinar/repeat.md +35 -0
- package/docs/commands/webinar/room.md +110 -0
- package/docs/commands/webinar/section.md +134 -0
- package/docs/commands/webinar/series.md +365 -0
- package/docs/commands/webinar/speaker.md +430 -0
- package/docs/commands/webinar/transcription.md +125 -0
- package/docs/commands/webinar/update.md +43 -0
- package/docs/commands/webinar/upload-image.md +42 -0
- package/docs/commands/webinar.md +2030 -0
- package/docs/commands/workspace/list.md +27 -0
- package/docs/commands/workspace/use.md +32 -0
- package/docs/commands/workspace.md +54 -0
- package/docs/guides/api-spec-upgrade.md +92 -0
- package/docs/guides/getting-started.md +66 -0
- package/oclif.manifest.json +21609 -0
- package/package.json +71 -0
|
@@ -0,0 +1,85 @@
|
|
|
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/attachment/set-hidden.ts
|
|
10
|
+
/**
|
|
11
|
+
* Webinar attachment set-hidden command — shows or hides an attachment.
|
|
12
|
+
*
|
|
13
|
+
* Action command pattern (Decision D-1): outputs a single green success line only.
|
|
14
|
+
* Use --hidden to hide, --no-hidden to make visible.
|
|
15
|
+
*
|
|
16
|
+
* Threat mitigations:
|
|
17
|
+
* T-05-03: applyCliTerms() on all error messages — no 'live'/'photo'/'album' leaks
|
|
18
|
+
*/
|
|
19
|
+
var WebinarAttachmentSetHidden = class WebinarAttachmentSetHidden extends require_lib_base_command.AuthenticatedCommand {
|
|
20
|
+
static description = "Show or hide a webinar attachment";
|
|
21
|
+
static examples = [
|
|
22
|
+
"<%= config.bin %> webinar attachment set-hidden 12345 --filename slides.pdf --hidden",
|
|
23
|
+
"<%= config.bin %> webinar attachment set-hidden 12345 --filename slides.pdf --no-hidden",
|
|
24
|
+
"<%= config.bin %> webinar attachment set-hidden 12345 --filename slides.pdf --hidden --json"
|
|
25
|
+
];
|
|
26
|
+
static enableJsonFlag = true;
|
|
27
|
+
static flags = {
|
|
28
|
+
...require_lib_base_command.AuthenticatedCommand.baseFlags,
|
|
29
|
+
filename: _oclif_core.Flags.string({
|
|
30
|
+
description: "Filename of the attachment",
|
|
31
|
+
required: false
|
|
32
|
+
}),
|
|
33
|
+
hidden: _oclif_core.Flags.boolean({
|
|
34
|
+
description: "Set hidden (--hidden) or visible (--no-hidden)",
|
|
35
|
+
allowNo: true,
|
|
36
|
+
required: true
|
|
37
|
+
})
|
|
38
|
+
};
|
|
39
|
+
static args = { id: _oclif_core.Args.string({
|
|
40
|
+
description: "Webinar ID",
|
|
41
|
+
required: true
|
|
42
|
+
}) };
|
|
43
|
+
static agentMetadata = {
|
|
44
|
+
api_endpoint: "POST /live/attachment/set-hidden",
|
|
45
|
+
auth_scope: "write",
|
|
46
|
+
output_shape: { type: "none" },
|
|
47
|
+
side_effects: "updates"
|
|
48
|
+
};
|
|
49
|
+
async run() {
|
|
50
|
+
const { args, flags } = await this.parse(WebinarAttachmentSetHidden);
|
|
51
|
+
this.printWorkspaceHeader();
|
|
52
|
+
let filename = flags.filename;
|
|
53
|
+
if (!filename && !this.jsonEnabled()) {
|
|
54
|
+
const result = await (0, _clack_prompts.text)({ message: "Attachment filename" });
|
|
55
|
+
if ((0, _clack_prompts.isCancel)(result)) process.exit(2);
|
|
56
|
+
filename = result;
|
|
57
|
+
}
|
|
58
|
+
if (!filename) this.error("--filename is required in non-interactive mode", { exit: 1 });
|
|
59
|
+
const { data, error } = await this.apiClient.POST("/live/attachment/set-hidden", {
|
|
60
|
+
body: {
|
|
61
|
+
live_id: Number(args.id),
|
|
62
|
+
filename,
|
|
63
|
+
hidden_p: flags.hidden ? 1 : 0
|
|
64
|
+
},
|
|
65
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" }
|
|
66
|
+
});
|
|
67
|
+
if (error) this.error(require_lib_term_map.applyCliTerms(formatApiError(error)), { exit: 1 });
|
|
68
|
+
this.log(chalk.default.green(`Attachment "${filename}" ${flags.hidden ? "hidden" : "visible"}`));
|
|
69
|
+
if (this.jsonEnabled()) return require_lib_output.formatJsonOutput({
|
|
70
|
+
ok: true,
|
|
71
|
+
data,
|
|
72
|
+
summary: "Attachment visibility updated",
|
|
73
|
+
breadcrumbs: [
|
|
74
|
+
{ domain: this.activeWorkspace.domain },
|
|
75
|
+
{
|
|
76
|
+
resource: "webinar",
|
|
77
|
+
id: args.id
|
|
78
|
+
},
|
|
79
|
+
{ resource: "attachment" }
|
|
80
|
+
]
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
//#endregion
|
|
85
|
+
module.exports = WebinarAttachmentSetHidden;
|
|
@@ -0,0 +1,128 @@
|
|
|
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/attachment/upload.ts
|
|
12
|
+
/**
|
|
13
|
+
* Simple inline progress bar that writes directly to stderr using \r.
|
|
14
|
+
* T-05-01: shows only byte counts, never the live_id token value.
|
|
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 attachment upload command — uploads a file attachment to a webinar.
|
|
33
|
+
*
|
|
34
|
+
* Uses the chunked upload engine with live_id as the token field name.
|
|
35
|
+
*
|
|
36
|
+
* Threat mitigations:
|
|
37
|
+
* T-05-01: Progress bar shows only byte counts, never the live_id token value
|
|
38
|
+
* T-05-02: tokenFieldName explicitly set to 'live_id' — never uses default 'upload_token'
|
|
39
|
+
* T-05-03: applyCliTerms() on all error messages — no 'live'/'photo'/'album' leaks
|
|
40
|
+
*/
|
|
41
|
+
var WebinarAttachmentUpload = class WebinarAttachmentUpload extends require_lib_base_command.AuthenticatedCommand {
|
|
42
|
+
static description = "Upload an attachment to a webinar";
|
|
43
|
+
static examples = ["<%= config.bin %> webinar attachment upload 12345 ./slides.pdf", "<%= config.bin %> webinar attachment upload 12345 ./handout.pdf --hidden"];
|
|
44
|
+
static enableJsonFlag = true;
|
|
45
|
+
static flags = {
|
|
46
|
+
...require_lib_base_command.AuthenticatedCommand.baseFlags,
|
|
47
|
+
"chunk-size": _oclif_core.Flags.integer({
|
|
48
|
+
description: `Chunk size in bytes (default: ${require_upload_types.DEFAULT_CHUNK_SIZE})`,
|
|
49
|
+
default: require_upload_types.DEFAULT_CHUNK_SIZE
|
|
50
|
+
}),
|
|
51
|
+
concurrency: _oclif_core.Flags.integer({
|
|
52
|
+
description: `Number of chunks to upload in parallel (default: 5)`,
|
|
53
|
+
default: 5
|
|
54
|
+
}),
|
|
55
|
+
hidden: _oclif_core.Flags.boolean({
|
|
56
|
+
description: "Upload attachment as hidden",
|
|
57
|
+
allowNo: true,
|
|
58
|
+
required: false
|
|
59
|
+
})
|
|
60
|
+
};
|
|
61
|
+
static args = {
|
|
62
|
+
id: _oclif_core.Args.string({
|
|
63
|
+
description: "Webinar ID",
|
|
64
|
+
required: true
|
|
65
|
+
}),
|
|
66
|
+
file: _oclif_core.Args.string({
|
|
67
|
+
description: "Path to file to upload",
|
|
68
|
+
required: true
|
|
69
|
+
})
|
|
70
|
+
};
|
|
71
|
+
static agentMetadata = {
|
|
72
|
+
api_endpoint: "POST /live/attachment/upload",
|
|
73
|
+
auth_scope: "write",
|
|
74
|
+
output_shape: { type: "none" },
|
|
75
|
+
side_effects: "creates"
|
|
76
|
+
};
|
|
77
|
+
async run() {
|
|
78
|
+
const { args, flags } = await this.parse(WebinarAttachmentUpload);
|
|
79
|
+
this.printWorkspaceHeader();
|
|
80
|
+
try {
|
|
81
|
+
await (0, node_fs_promises.stat)(args.file);
|
|
82
|
+
} catch {
|
|
83
|
+
this.error(require_lib_term_map.applyCliTerms(`File not found: ${args.file}`), { exit: 1 });
|
|
84
|
+
}
|
|
85
|
+
const totalBytes = (await (0, node_fs_promises.stat)(args.file)).size;
|
|
86
|
+
const bar = new ProgressBar();
|
|
87
|
+
const startTime = Date.now();
|
|
88
|
+
let result;
|
|
89
|
+
bar.render(0, totalBytes, 0);
|
|
90
|
+
try {
|
|
91
|
+
result = await require_upload_chunked_upload.uploadChunked({
|
|
92
|
+
filePath: args.file,
|
|
93
|
+
uploadToken: String(args.id),
|
|
94
|
+
tokenFieldName: "live_id",
|
|
95
|
+
uploadUrl: `${this.apiBaseUrl}live/attachment/upload`,
|
|
96
|
+
bearerToken: this.activeWorkspace.bearer_token || void 0,
|
|
97
|
+
chunkSize: flags["chunk-size"],
|
|
98
|
+
concurrency: flags.concurrency,
|
|
99
|
+
extraFields: flags.hidden !== void 0 ? { hidden_p: flags.hidden ? "1" : "0" } : {},
|
|
100
|
+
onProgress(bytesUploaded, total) {
|
|
101
|
+
const elapsed = (Date.now() - startTime) / 1e3;
|
|
102
|
+
const speed = elapsed > 0 ? bytesUploaded / elapsed : 0;
|
|
103
|
+
bar.render(bytesUploaded, total, speed);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
} finally {
|
|
107
|
+
bar.finish();
|
|
108
|
+
}
|
|
109
|
+
this.log(chalk.default.green("Attachment uploaded"));
|
|
110
|
+
this.log(`ID: ${args.id}`);
|
|
111
|
+
this.log(`Admin: https://${this.activeWorkspace.domain}/manage/webinar/${args.id}`);
|
|
112
|
+
if (this.jsonEnabled()) return require_lib_output.formatJsonOutput({
|
|
113
|
+
ok: true,
|
|
114
|
+
data: result,
|
|
115
|
+
summary: "Attachment uploaded",
|
|
116
|
+
breadcrumbs: [
|
|
117
|
+
{ domain: this.activeWorkspace.domain },
|
|
118
|
+
{
|
|
119
|
+
resource: "webinar",
|
|
120
|
+
id: args.id
|
|
121
|
+
},
|
|
122
|
+
{ resource: "attachment" }
|
|
123
|
+
]
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
//#endregion
|
|
128
|
+
module.exports = WebinarAttachmentUpload;
|
|
@@ -0,0 +1,77 @@
|
|
|
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/clips.ts
|
|
9
|
+
/**
|
|
10
|
+
* Webinar clips command — lists recording clips from a webinar.
|
|
11
|
+
*/
|
|
12
|
+
var WebinarClips = class WebinarClips extends require_lib_base_command.AuthenticatedCommand {
|
|
13
|
+
static description = "List recording clips from a webinar";
|
|
14
|
+
static examples = ["<%= config.bin %> webinar clips 12345", "<%= config.bin %> webinar clips 12345 --json"];
|
|
15
|
+
static enableJsonFlag = true;
|
|
16
|
+
static flags = { ...require_lib_base_command.AuthenticatedCommand.baseFlags };
|
|
17
|
+
static args = { id: _oclif_core.Args.string({
|
|
18
|
+
description: "Webinar ID",
|
|
19
|
+
required: true
|
|
20
|
+
}) };
|
|
21
|
+
static agentMetadata = {
|
|
22
|
+
api_endpoint: "GET /live/clips",
|
|
23
|
+
auth_scope: "read",
|
|
24
|
+
output_shape: {
|
|
25
|
+
type: "table",
|
|
26
|
+
columns: [
|
|
27
|
+
"Video ID",
|
|
28
|
+
"Title",
|
|
29
|
+
"Duration",
|
|
30
|
+
"Type",
|
|
31
|
+
"Published",
|
|
32
|
+
"Views"
|
|
33
|
+
]
|
|
34
|
+
},
|
|
35
|
+
side_effects: "none"
|
|
36
|
+
};
|
|
37
|
+
async run() {
|
|
38
|
+
const { args } = await this.parse(WebinarClips);
|
|
39
|
+
this.printWorkspaceHeader();
|
|
40
|
+
const { data, error } = await this.apiClient.GET("/live/clips", { params: { query: { live_id: Number(args.id) } } });
|
|
41
|
+
if (error) this.error(require_lib_term_map.applyCliTerms(formatApiError(error)), { exit: 1 });
|
|
42
|
+
const resp = data;
|
|
43
|
+
const clips = Array.isArray(resp?.data) ? resp.data : resp?.data ? [resp.data] : [];
|
|
44
|
+
if (this.jsonEnabled()) return require_lib_output.formatJsonOutput({
|
|
45
|
+
ok: true,
|
|
46
|
+
data: clips,
|
|
47
|
+
summary: `${clips.length} clip${clips.length === 1 ? "" : "s"}`,
|
|
48
|
+
breadcrumbs: [{ domain: this.activeWorkspace.domain }, {
|
|
49
|
+
resource: "webinar",
|
|
50
|
+
id: args.id
|
|
51
|
+
}]
|
|
52
|
+
});
|
|
53
|
+
if (clips.length === 0) {
|
|
54
|
+
this.log("No clips found.");
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const table = require_lib_output.renderTable([
|
|
58
|
+
"Video ID",
|
|
59
|
+
"Title",
|
|
60
|
+
"Duration",
|
|
61
|
+
"Type",
|
|
62
|
+
"Published",
|
|
63
|
+
"Views"
|
|
64
|
+
], clips.map((c) => [
|
|
65
|
+
String(c.photo_id ?? ""),
|
|
66
|
+
require_lib_term_map.applyCliTerms(String(c.title ?? "")),
|
|
67
|
+
String(c.duration_fmt ?? ""),
|
|
68
|
+
String(c.live_highlight_type ?? ""),
|
|
69
|
+
c.published_p ? "yes" : "no",
|
|
70
|
+
String(c.view_count_fmt ?? c.view_count ?? "")
|
|
71
|
+
]));
|
|
72
|
+
this.log(table.toString());
|
|
73
|
+
this.log(chalk.default.dim(`${clips.length} clip${clips.length === 1 ? "" : "s"}`));
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
//#endregion
|
|
77
|
+
module.exports = WebinarClips;
|
|
@@ -0,0 +1,107 @@
|
|
|
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/create.ts
|
|
9
|
+
/**
|
|
10
|
+
* Webinar create command — creates a new webinar in the active workspace.
|
|
11
|
+
*
|
|
12
|
+
* CRITICAL field mapping: CLI --title flag maps to API body field `name` (NOT `title`).
|
|
13
|
+
* Sending `title` instead of `name` silently fails — the webinar is created without a title.
|
|
14
|
+
*
|
|
15
|
+
* CRITICAL field mapping: CLI --live-date flag maps to API body field `start_time` (NOT `live_date`).
|
|
16
|
+
*
|
|
17
|
+
* Threat mitigations:
|
|
18
|
+
* T-04-07: Admin URL printed — acceptable for authenticated CLI users
|
|
19
|
+
* T-04-08: extends AuthenticatedCommand — anonymous mode rejected
|
|
20
|
+
*/
|
|
21
|
+
var WebinarCreate = class WebinarCreate extends require_lib_base_command.AuthenticatedCommand {
|
|
22
|
+
static description = "Create a new webinar";
|
|
23
|
+
static examples = [
|
|
24
|
+
"<%= config.bin %> webinar create --title \"My Webinar\"",
|
|
25
|
+
"<%= config.bin %> webinar create --title \"My Webinar\" --live-date \"2024-12-01T14:00:00Z\"",
|
|
26
|
+
"<%= config.bin %> webinar create --title \"My Webinar\" --json"
|
|
27
|
+
];
|
|
28
|
+
static enableJsonFlag = true;
|
|
29
|
+
static flags = {
|
|
30
|
+
...require_lib_base_command.AuthenticatedCommand.baseFlags,
|
|
31
|
+
title: _oclif_core.Flags.string({
|
|
32
|
+
description: "Title for the new webinar",
|
|
33
|
+
required: true
|
|
34
|
+
}),
|
|
35
|
+
description: _oclif_core.Flags.string({
|
|
36
|
+
description: "Description for the webinar",
|
|
37
|
+
required: false
|
|
38
|
+
}),
|
|
39
|
+
status: _oclif_core.Flags.string({
|
|
40
|
+
description: "Webinar status: upcoming, live, or previous",
|
|
41
|
+
required: false
|
|
42
|
+
}),
|
|
43
|
+
"live-date": _oclif_core.Flags.string({
|
|
44
|
+
description: "Schedule date/time (ISO 8601)",
|
|
45
|
+
required: false
|
|
46
|
+
}),
|
|
47
|
+
draft: _oclif_core.Flags.boolean({
|
|
48
|
+
description: "Set as draft",
|
|
49
|
+
allowNo: true,
|
|
50
|
+
required: false
|
|
51
|
+
}),
|
|
52
|
+
publish: _oclif_core.Flags.boolean({
|
|
53
|
+
description: "Publish the webinar",
|
|
54
|
+
allowNo: true,
|
|
55
|
+
required: false
|
|
56
|
+
}),
|
|
57
|
+
"draft-p": _oclif_core.Flags.string({
|
|
58
|
+
hidden: true,
|
|
59
|
+
required: false
|
|
60
|
+
}),
|
|
61
|
+
"published-p": _oclif_core.Flags.string({
|
|
62
|
+
hidden: true,
|
|
63
|
+
required: false
|
|
64
|
+
})
|
|
65
|
+
};
|
|
66
|
+
static args = {};
|
|
67
|
+
static agentMetadata = {
|
|
68
|
+
api_endpoint: "POST /live/create",
|
|
69
|
+
auth_scope: "write",
|
|
70
|
+
output_shape: { type: "key-value" },
|
|
71
|
+
side_effects: "creates"
|
|
72
|
+
};
|
|
73
|
+
async run() {
|
|
74
|
+
const { flags } = await this.parse(WebinarCreate);
|
|
75
|
+
this.printWorkspaceHeader();
|
|
76
|
+
const body = { name: flags.title };
|
|
77
|
+
if (flags.description !== void 0) body.description = flags.description;
|
|
78
|
+
if (flags.status !== void 0) body.live_status = flags.status;
|
|
79
|
+
if (flags["live-date"] !== void 0) body.start_time = flags["live-date"];
|
|
80
|
+
const draftVal = parseBoolParam(flags.draft, flags["draft-p"]);
|
|
81
|
+
if (draftVal !== void 0) body.draft_p = draftVal ? 1 : 0;
|
|
82
|
+
const publishVal = parseBoolParam(flags.publish, flags["published-p"]);
|
|
83
|
+
if (publishVal !== void 0) body.published_p = publishVal ? 1 : 0;
|
|
84
|
+
const { data: createData, error: createError } = await this.apiClient.POST("/live/create", {
|
|
85
|
+
body,
|
|
86
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" }
|
|
87
|
+
});
|
|
88
|
+
if (createError) this.error(require_lib_term_map.applyCliTerms(formatApiError(createError)), { exit: 1 });
|
|
89
|
+
const liveId = createData?.data?.live_id;
|
|
90
|
+
if (this.jsonEnabled()) return require_lib_output.formatJsonOutput({
|
|
91
|
+
ok: true,
|
|
92
|
+
data: createData,
|
|
93
|
+
summary: "Webinar created",
|
|
94
|
+
breadcrumbs: [{ domain: this.activeWorkspace.domain }, {
|
|
95
|
+
resource: "webinar",
|
|
96
|
+
id: String(liveId ?? "")
|
|
97
|
+
}]
|
|
98
|
+
});
|
|
99
|
+
this.log(chalk.default.green("Webinar created"));
|
|
100
|
+
if (liveId) {
|
|
101
|
+
this.log(`ID: ${liveId}`);
|
|
102
|
+
this.log(`Admin: https://${this.activeWorkspace.domain}/manage/webinar/${liveId}`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
//#endregion
|
|
107
|
+
module.exports = WebinarCreate;
|
|
@@ -0,0 +1,62 @@
|
|
|
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/delete.ts
|
|
10
|
+
/**
|
|
11
|
+
* Webinar delete command — deletes a webinar after confirmation.
|
|
12
|
+
*
|
|
13
|
+
* Prompts user to confirm deletion showing the workspace domain and warning
|
|
14
|
+
* that all recordings will be permanently deleted (T-04-06 repudiation mitigation).
|
|
15
|
+
*
|
|
16
|
+
* --json flag skips the confirmation prompt (scripting mode — assume confirmed).
|
|
17
|
+
*
|
|
18
|
+
* Threat mitigations:
|
|
19
|
+
* T-04-06: Confirmation prompt includes domain AND "permanently deletes all recordings" warning
|
|
20
|
+
* T-04-08: extends AuthenticatedCommand — anonymous mode rejected
|
|
21
|
+
*/
|
|
22
|
+
var WebinarDelete = class WebinarDelete extends require_lib_base_command.AuthenticatedCommand {
|
|
23
|
+
static description = "Delete a webinar from the active workspace";
|
|
24
|
+
static examples = ["<%= config.bin %> webinar delete 12345", "<%= config.bin %> webinar delete 12345 --json"];
|
|
25
|
+
static enableJsonFlag = true;
|
|
26
|
+
static flags = { ...require_lib_base_command.AuthenticatedCommand.baseFlags };
|
|
27
|
+
static args = { id: _oclif_core.Args.string({
|
|
28
|
+
description: "Webinar ID",
|
|
29
|
+
required: true
|
|
30
|
+
}) };
|
|
31
|
+
static agentMetadata = {
|
|
32
|
+
api_endpoint: "POST /live/delete",
|
|
33
|
+
auth_scope: "write",
|
|
34
|
+
output_shape: { type: "none" },
|
|
35
|
+
side_effects: "destructive"
|
|
36
|
+
};
|
|
37
|
+
async run() {
|
|
38
|
+
const { args } = await this.parse(WebinarDelete);
|
|
39
|
+
this.printWorkspaceHeader();
|
|
40
|
+
if (!this.jsonEnabled()) {
|
|
41
|
+
const confirmed = await (0, _clack_prompts.confirm)({ message: `Delete webinar ${args.id} from ${this.activeWorkspace.domain}? This permanently deletes all recordings. This cannot be undone.` });
|
|
42
|
+
if ((0, _clack_prompts.isCancel)(confirmed) || !confirmed) process.exit(2);
|
|
43
|
+
}
|
|
44
|
+
const { data: deleteData, error: deleteError } = await this.apiClient.POST("/live/delete", {
|
|
45
|
+
body: { live_id: Number(args.id) },
|
|
46
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" }
|
|
47
|
+
});
|
|
48
|
+
if (deleteError) this.error(require_lib_term_map.applyCliTerms(formatApiError(deleteError)), { exit: 1 });
|
|
49
|
+
this.log(chalk.default.green(`Webinar ${args.id} deleted`));
|
|
50
|
+
if (this.jsonEnabled()) return require_lib_output.formatJsonOutput({
|
|
51
|
+
ok: true,
|
|
52
|
+
data: deleteData,
|
|
53
|
+
summary: `Webinar ${args.id} deleted`,
|
|
54
|
+
breadcrumbs: [{ domain: this.activeWorkspace.domain }, {
|
|
55
|
+
resource: "webinar",
|
|
56
|
+
id: args.id
|
|
57
|
+
}]
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
//#endregion
|
|
62
|
+
module.exports = WebinarDelete;
|
|
@@ -0,0 +1,84 @@
|
|
|
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/highlights.ts
|
|
9
|
+
/**
|
|
10
|
+
* Webinar highlights command — lists highlights from a webinar.
|
|
11
|
+
*/
|
|
12
|
+
var WebinarHighlights = class WebinarHighlights extends require_lib_base_command.AuthenticatedCommand {
|
|
13
|
+
static description = "List highlights from a webinar";
|
|
14
|
+
static examples = [
|
|
15
|
+
"<%= config.bin %> webinar highlights 12345",
|
|
16
|
+
"<%= config.bin %> webinar highlights 12345 --video-id 67890",
|
|
17
|
+
"<%= config.bin %> webinar highlights 12345 --json"
|
|
18
|
+
];
|
|
19
|
+
static enableJsonFlag = true;
|
|
20
|
+
static flags = {
|
|
21
|
+
...require_lib_base_command.AuthenticatedCommand.baseFlags,
|
|
22
|
+
"video-id": _oclif_core.Flags.string({
|
|
23
|
+
description: "Scope to specific recording by video ID",
|
|
24
|
+
required: false
|
|
25
|
+
})
|
|
26
|
+
};
|
|
27
|
+
static args = { id: _oclif_core.Args.string({
|
|
28
|
+
description: "Webinar ID",
|
|
29
|
+
required: true
|
|
30
|
+
}) };
|
|
31
|
+
static agentMetadata = {
|
|
32
|
+
api_endpoint: "GET /live/highlights",
|
|
33
|
+
auth_scope: "read",
|
|
34
|
+
output_shape: {
|
|
35
|
+
type: "table",
|
|
36
|
+
columns: [
|
|
37
|
+
"Type",
|
|
38
|
+
"Start",
|
|
39
|
+
"End",
|
|
40
|
+
"Absolute Start"
|
|
41
|
+
]
|
|
42
|
+
},
|
|
43
|
+
side_effects: "none"
|
|
44
|
+
};
|
|
45
|
+
async run() {
|
|
46
|
+
const { args, flags } = await this.parse(WebinarHighlights);
|
|
47
|
+
this.printWorkspaceHeader();
|
|
48
|
+
const { data, error } = await this.apiClient.GET("/live/highlights", { params: { query: {
|
|
49
|
+
live_id: Number(args.id),
|
|
50
|
+
photo_id: flags["video-id"] ? Number(flags["video-id"]) : void 0
|
|
51
|
+
} } });
|
|
52
|
+
if (error) this.error(require_lib_term_map.applyCliTerms(formatApiError(error)), { exit: 1 });
|
|
53
|
+
const resp = data;
|
|
54
|
+
const highlights = Array.isArray(resp?.data) ? resp.data : resp?.data ? [resp.data] : [];
|
|
55
|
+
if (this.jsonEnabled()) return require_lib_output.formatJsonOutput({
|
|
56
|
+
ok: true,
|
|
57
|
+
data: highlights,
|
|
58
|
+
summary: `${highlights.length} highlight${highlights.length === 1 ? "" : "s"}`,
|
|
59
|
+
breadcrumbs: [{ domain: this.activeWorkspace.domain }, {
|
|
60
|
+
resource: "webinar",
|
|
61
|
+
id: args.id
|
|
62
|
+
}]
|
|
63
|
+
});
|
|
64
|
+
if (highlights.length === 0) {
|
|
65
|
+
this.log("No highlights found.");
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const table = require_lib_output.renderTable([
|
|
69
|
+
"Type",
|
|
70
|
+
"Start",
|
|
71
|
+
"End",
|
|
72
|
+
"Absolute Start"
|
|
73
|
+
], highlights.map((h) => [
|
|
74
|
+
String(h.type ?? ""),
|
|
75
|
+
String(h.relative_start_time ?? ""),
|
|
76
|
+
String(h.relative_end_time ?? ""),
|
|
77
|
+
String(h.absolute_start_time ?? "")
|
|
78
|
+
]));
|
|
79
|
+
this.log(table.toString());
|
|
80
|
+
this.log(chalk.default.dim(`${highlights.length} highlight${highlights.length === 1 ? "" : "s"}`));
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
//#endregion
|
|
84
|
+
module.exports = WebinarHighlights;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
require("../../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
let _oclif_core = require("@oclif/core");
|
|
3
|
+
//#region src/commands/webinar/index.ts
|
|
4
|
+
var WebinarIndex = class extends _oclif_core.Command {
|
|
5
|
+
static description = "Manage webinars — create, list, update, delete, and more";
|
|
6
|
+
async run() {
|
|
7
|
+
this.log("Run \"twentythree webinar --help\" for available commands");
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
//#endregion
|
|
11
|
+
module.exports = WebinarIndex;
|
|
@@ -0,0 +1,50 @@
|
|
|
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 chalk = require("chalk");
|
|
6
|
+
chalk = require_runtime.__toESM(chalk);
|
|
7
|
+
//#region src/commands/webinar/list-formats.ts
|
|
8
|
+
/**
|
|
9
|
+
* Webinar list-formats command — lists available webinar formats.
|
|
10
|
+
* This is a workspace-level query — no webinar ID required.
|
|
11
|
+
*/
|
|
12
|
+
var WebinarListFormats = class WebinarListFormats extends require_lib_base_command.AuthenticatedCommand {
|
|
13
|
+
static description = "List available webinar formats";
|
|
14
|
+
static examples = ["<%= config.bin %> webinar list-formats", "<%= config.bin %> webinar list-formats --json"];
|
|
15
|
+
static enableJsonFlag = true;
|
|
16
|
+
static flags = { ...require_lib_base_command.AuthenticatedCommand.baseFlags };
|
|
17
|
+
static args = {};
|
|
18
|
+
static agentMetadata = {
|
|
19
|
+
api_endpoint: "GET /live/list-formats",
|
|
20
|
+
auth_scope: "read",
|
|
21
|
+
output_shape: {
|
|
22
|
+
type: "table",
|
|
23
|
+
columns: ["Key", "Name"]
|
|
24
|
+
},
|
|
25
|
+
side_effects: "none"
|
|
26
|
+
};
|
|
27
|
+
async run() {
|
|
28
|
+
const {} = await this.parse(WebinarListFormats);
|
|
29
|
+
this.printWorkspaceHeader();
|
|
30
|
+
const { data, error } = await this.apiClient.GET("/live/list-formats", { params: { query: {} } });
|
|
31
|
+
if (error) this.error(require_lib_term_map.applyCliTerms(formatApiError(error)), { exit: 1 });
|
|
32
|
+
const resp = data;
|
|
33
|
+
const formats = Array.isArray(resp?.data) ? resp.data : resp?.data ? [resp.data] : [];
|
|
34
|
+
if (this.jsonEnabled()) return require_lib_output.formatJsonOutput({
|
|
35
|
+
ok: true,
|
|
36
|
+
data: formats,
|
|
37
|
+
summary: `${formats.length} format${formats.length === 1 ? "" : "s"}`,
|
|
38
|
+
breadcrumbs: [{ domain: this.activeWorkspace.domain }, { resource: "webinar" }]
|
|
39
|
+
});
|
|
40
|
+
if (formats.length === 0) {
|
|
41
|
+
this.log("No formats available.");
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
const table = require_lib_output.renderTable(["Key", "Name"], formats.map((f) => [String(f.key ?? ""), String(f.name ?? "")]));
|
|
45
|
+
this.log(table.toString());
|
|
46
|
+
this.log(chalk.default.dim(`${formats.length} format${formats.length === 1 ? "" : "s"}`));
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
//#endregion
|
|
50
|
+
module.exports = WebinarListFormats;
|