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,66 @@
|
|
|
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/thumbnail/add.ts
|
|
9
|
+
/**
|
|
10
|
+
* Thumbnail template add command — creates a new thumbnail template.
|
|
11
|
+
*
|
|
12
|
+
* Maps to POST /thumbnail/template/add.
|
|
13
|
+
* Requires name and liquid_template.
|
|
14
|
+
*
|
|
15
|
+
* Threat mitigations:
|
|
16
|
+
* T-08-09: extends AuthenticatedCommand — anonymous mode rejected
|
|
17
|
+
*/
|
|
18
|
+
var ThumbnailAdd = class ThumbnailAdd extends require_lib_base_command.AuthenticatedCommand {
|
|
19
|
+
static description = "Create a new thumbnail template";
|
|
20
|
+
static examples = ["<%= config.bin %> thumbnail add --name \"My Template\" --liquid-template \"<div>{{ video.title }}</div>\"", "<%= config.bin %> thumbnail add --name \"My Template\" --liquid-template \"<div>{{ video.title }}</div>\" --json"];
|
|
21
|
+
static enableJsonFlag = true;
|
|
22
|
+
static flags = {
|
|
23
|
+
...require_lib_base_command.AuthenticatedCommand.baseFlags,
|
|
24
|
+
name: _oclif_core.Flags.string({
|
|
25
|
+
description: "Name for the new thumbnail template",
|
|
26
|
+
required: true
|
|
27
|
+
}),
|
|
28
|
+
"liquid-template": _oclif_core.Flags.string({
|
|
29
|
+
description: "Liquid template content for the thumbnail",
|
|
30
|
+
required: true
|
|
31
|
+
})
|
|
32
|
+
};
|
|
33
|
+
static args = {};
|
|
34
|
+
static agentMetadata = {
|
|
35
|
+
api_endpoint: "POST /thumbnail/template/add",
|
|
36
|
+
auth_scope: "write",
|
|
37
|
+
output_shape: { type: "key-value" },
|
|
38
|
+
side_effects: "creates"
|
|
39
|
+
};
|
|
40
|
+
async run() {
|
|
41
|
+
const { flags } = await this.parse(ThumbnailAdd);
|
|
42
|
+
this.printWorkspaceHeader();
|
|
43
|
+
const { data: createData, error: createError } = await this.apiClient.POST("/thumbnail/template/add", {
|
|
44
|
+
body: {
|
|
45
|
+
name: flags.name,
|
|
46
|
+
liquid_template: flags["liquid-template"]
|
|
47
|
+
},
|
|
48
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" }
|
|
49
|
+
});
|
|
50
|
+
if (createError) this.error(require_lib_term_map.applyCliTerms(formatApiError(createError)), { exit: 1 });
|
|
51
|
+
const thumbnailTemplateId = createData?.data?.thumbnail_template_id;
|
|
52
|
+
this.log(chalk.default.green("Thumbnail template created"));
|
|
53
|
+
this.log(`ID: ${thumbnailTemplateId}`);
|
|
54
|
+
if (this.jsonEnabled()) return require_lib_output.formatJsonOutput({
|
|
55
|
+
ok: true,
|
|
56
|
+
data: createData,
|
|
57
|
+
summary: "Thumbnail template created",
|
|
58
|
+
breadcrumbs: [{ domain: this.activeWorkspace.domain }, {
|
|
59
|
+
resource: "thumbnail",
|
|
60
|
+
id: String(thumbnailTemplateId)
|
|
61
|
+
}]
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
//#endregion
|
|
66
|
+
module.exports = ThumbnailAdd;
|
|
@@ -0,0 +1,60 @@
|
|
|
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/thumbnail/data.ts
|
|
7
|
+
/**
|
|
8
|
+
* Thumbnail template data command — retrieves the Liquid render data for a template + object.
|
|
9
|
+
*
|
|
10
|
+
* Maps to GET /thumbnail/template/data.
|
|
11
|
+
* Returns complex nested JSON (workspace, theme, brand tokens, object data) — not suitable
|
|
12
|
+
* for key-value output. Outputs raw JSON.stringify instead.
|
|
13
|
+
*
|
|
14
|
+
* Threat mitigations:
|
|
15
|
+
* T-08-09: extends AuthenticatedCommand — anonymous mode rejected
|
|
16
|
+
*/
|
|
17
|
+
var ThumbnailData = class ThumbnailData extends require_lib_base_command.AuthenticatedCommand {
|
|
18
|
+
static description = "Get Liquid render data for a thumbnail template and object";
|
|
19
|
+
static examples = ["<%= config.bin %> thumbnail data 42 --object-id 12345", "<%= config.bin %> thumbnail data 42 --object-id 12345 --json"];
|
|
20
|
+
static enableJsonFlag = true;
|
|
21
|
+
static flags = {
|
|
22
|
+
...require_lib_base_command.AuthenticatedCommand.baseFlags,
|
|
23
|
+
"object-id": _oclif_core.Flags.string({
|
|
24
|
+
description: "Object ID to get template data for",
|
|
25
|
+
required: true
|
|
26
|
+
})
|
|
27
|
+
};
|
|
28
|
+
static args = { id: _oclif_core.Args.string({
|
|
29
|
+
description: "Thumbnail template ID",
|
|
30
|
+
required: true
|
|
31
|
+
}) };
|
|
32
|
+
static agentMetadata = {
|
|
33
|
+
api_endpoint: "GET /thumbnail/template/data",
|
|
34
|
+
auth_scope: "read",
|
|
35
|
+
output_shape: { type: "key-value" },
|
|
36
|
+
side_effects: "none"
|
|
37
|
+
};
|
|
38
|
+
async run() {
|
|
39
|
+
const { args, flags } = await this.parse(ThumbnailData);
|
|
40
|
+
this.printWorkspaceHeader();
|
|
41
|
+
const { data, error } = await this.apiClient.GET("/thumbnail/template/data", { params: { query: {
|
|
42
|
+
thumbnail_template_id: Number(args.id),
|
|
43
|
+
object_id: Number(flags["object-id"])
|
|
44
|
+
} } });
|
|
45
|
+
if (error) this.error(require_lib_term_map.applyCliTerms(formatApiError(error)), { exit: 1 });
|
|
46
|
+
const resp = data;
|
|
47
|
+
if (this.jsonEnabled()) return require_lib_output.formatJsonOutput({
|
|
48
|
+
ok: true,
|
|
49
|
+
data: resp?.data ?? resp,
|
|
50
|
+
summary: `Thumbnail template ${args.id} data for object ${flags["object-id"]}`,
|
|
51
|
+
breadcrumbs: [{ domain: this.activeWorkspace.domain }, {
|
|
52
|
+
resource: "thumbnail",
|
|
53
|
+
id: args.id
|
|
54
|
+
}]
|
|
55
|
+
});
|
|
56
|
+
this.log(JSON.stringify(resp?.data ?? resp, null, 2));
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
//#endregion
|
|
60
|
+
module.exports = ThumbnailData;
|
|
@@ -0,0 +1,61 @@
|
|
|
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/thumbnail/delete.ts
|
|
10
|
+
/**
|
|
11
|
+
* Thumbnail template delete command — deletes a thumbnail template after confirmation.
|
|
12
|
+
*
|
|
13
|
+
* Maps to POST /thumbnail/template/delete.
|
|
14
|
+
* Prompts user to confirm deletion with workspace domain (T-08-07 repudiation mitigation).
|
|
15
|
+
* --json flag skips the confirmation prompt (scripting mode — assume confirmed).
|
|
16
|
+
*
|
|
17
|
+
* Threat mitigations:
|
|
18
|
+
* T-08-07: Confirmation prompt includes workspace domain
|
|
19
|
+
* T-08-09: extends AuthenticatedCommand — anonymous mode rejected
|
|
20
|
+
*/
|
|
21
|
+
var ThumbnailDelete = class ThumbnailDelete extends require_lib_base_command.AuthenticatedCommand {
|
|
22
|
+
static description = "Delete a thumbnail template from the active workspace";
|
|
23
|
+
static examples = ["<%= config.bin %> thumbnail delete 42", "<%= config.bin %> thumbnail delete 42 --json"];
|
|
24
|
+
static enableJsonFlag = true;
|
|
25
|
+
static flags = { ...require_lib_base_command.AuthenticatedCommand.baseFlags };
|
|
26
|
+
static args = { id: _oclif_core.Args.string({
|
|
27
|
+
description: "Thumbnail template ID",
|
|
28
|
+
required: true
|
|
29
|
+
}) };
|
|
30
|
+
static agentMetadata = {
|
|
31
|
+
api_endpoint: "POST /thumbnail/template/delete",
|
|
32
|
+
auth_scope: "write",
|
|
33
|
+
output_shape: { type: "key-value" },
|
|
34
|
+
side_effects: "destructive"
|
|
35
|
+
};
|
|
36
|
+
async run() {
|
|
37
|
+
const { args } = await this.parse(ThumbnailDelete);
|
|
38
|
+
this.printWorkspaceHeader();
|
|
39
|
+
if (!this.jsonEnabled()) {
|
|
40
|
+
const confirmed = await (0, _clack_prompts.confirm)({ message: `Delete thumbnail template ${args.id} from ${this.activeWorkspace.domain}? This cannot be undone.` });
|
|
41
|
+
if ((0, _clack_prompts.isCancel)(confirmed) || !confirmed) process.exit(2);
|
|
42
|
+
}
|
|
43
|
+
const { data: deleteData, error: deleteError } = await this.apiClient.POST("/thumbnail/template/delete", {
|
|
44
|
+
body: { thumbnail_template_id: Number(args.id) },
|
|
45
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" }
|
|
46
|
+
});
|
|
47
|
+
if (deleteError) this.error(require_lib_term_map.applyCliTerms(formatApiError(deleteError)), { exit: 1 });
|
|
48
|
+
this.log(chalk.default.green(`Thumbnail template ${args.id} deleted`));
|
|
49
|
+
if (this.jsonEnabled()) return require_lib_output.formatJsonOutput({
|
|
50
|
+
ok: true,
|
|
51
|
+
data: deleteData,
|
|
52
|
+
summary: `Thumbnail template ${args.id} deleted`,
|
|
53
|
+
breadcrumbs: [{ domain: this.activeWorkspace.domain }, {
|
|
54
|
+
resource: "thumbnail",
|
|
55
|
+
id: args.id
|
|
56
|
+
}]
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
//#endregion
|
|
61
|
+
module.exports = ThumbnailDelete;
|
|
@@ -0,0 +1,67 @@
|
|
|
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/thumbnail/duplicate.ts
|
|
9
|
+
/**
|
|
10
|
+
* Thumbnail template duplicate command — duplicates an existing thumbnail template.
|
|
11
|
+
*
|
|
12
|
+
* Maps to POST /thumbnail/template/duplicate.
|
|
13
|
+
* If name is omitted, the API names the copy with a ' (Copy)' suffix.
|
|
14
|
+
*
|
|
15
|
+
* Threat mitigations:
|
|
16
|
+
* T-08-09: extends AuthenticatedCommand — anonymous mode rejected
|
|
17
|
+
*/
|
|
18
|
+
var ThumbnailDuplicate = class ThumbnailDuplicate extends require_lib_base_command.AuthenticatedCommand {
|
|
19
|
+
static description = "Duplicate a thumbnail template";
|
|
20
|
+
static examples = [
|
|
21
|
+
"<%= config.bin %> thumbnail duplicate 42",
|
|
22
|
+
"<%= config.bin %> thumbnail duplicate 42 --name \"My Copy\"",
|
|
23
|
+
"<%= config.bin %> thumbnail duplicate 42 --name \"My Copy\" --json"
|
|
24
|
+
];
|
|
25
|
+
static enableJsonFlag = true;
|
|
26
|
+
static flags = {
|
|
27
|
+
...require_lib_base_command.AuthenticatedCommand.baseFlags,
|
|
28
|
+
name: _oclif_core.Flags.string({
|
|
29
|
+
description: "Name for the duplicate",
|
|
30
|
+
required: false
|
|
31
|
+
})
|
|
32
|
+
};
|
|
33
|
+
static args = { id: _oclif_core.Args.string({
|
|
34
|
+
description: "Thumbnail template ID",
|
|
35
|
+
required: true
|
|
36
|
+
}) };
|
|
37
|
+
static agentMetadata = {
|
|
38
|
+
api_endpoint: "POST /thumbnail/template/duplicate",
|
|
39
|
+
auth_scope: "write",
|
|
40
|
+
output_shape: { type: "key-value" },
|
|
41
|
+
side_effects: "creates"
|
|
42
|
+
};
|
|
43
|
+
async run() {
|
|
44
|
+
const { args, flags } = await this.parse(ThumbnailDuplicate);
|
|
45
|
+
this.printWorkspaceHeader();
|
|
46
|
+
const { data, error } = await this.apiClient.POST("/thumbnail/template/duplicate", {
|
|
47
|
+
body: {
|
|
48
|
+
thumbnail_template_id: Number(args.id),
|
|
49
|
+
name: flags.name
|
|
50
|
+
},
|
|
51
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" }
|
|
52
|
+
});
|
|
53
|
+
if (error) this.error(require_lib_term_map.applyCliTerms(formatApiError(error)), { exit: 1 });
|
|
54
|
+
this.log(chalk.default.green("Thumbnail template duplicated"));
|
|
55
|
+
if (this.jsonEnabled()) return require_lib_output.formatJsonOutput({
|
|
56
|
+
ok: true,
|
|
57
|
+
data,
|
|
58
|
+
summary: `Thumbnail template ${args.id} duplicated`,
|
|
59
|
+
breadcrumbs: [{ domain: this.activeWorkspace.domain }, {
|
|
60
|
+
resource: "thumbnail",
|
|
61
|
+
id: args.id
|
|
62
|
+
}]
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
//#endregion
|
|
67
|
+
module.exports = ThumbnailDuplicate;
|
|
@@ -0,0 +1,71 @@
|
|
|
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/thumbnail/file/delete.ts
|
|
10
|
+
/**
|
|
11
|
+
* Thumbnail file delete command — deletes a file from a thumbnail template.
|
|
12
|
+
*
|
|
13
|
+
* Maps to POST /thumbnail/template/delete-file.
|
|
14
|
+
* Prompts user to confirm deletion with workspace domain (T-08-07 repudiation mitigation).
|
|
15
|
+
* --json flag skips the confirmation prompt (scripting mode — assume confirmed).
|
|
16
|
+
*
|
|
17
|
+
* Threat mitigations:
|
|
18
|
+
* T-08-07: Confirmation prompt includes workspace domain
|
|
19
|
+
* T-08-09: extends AuthenticatedCommand — anonymous mode rejected
|
|
20
|
+
*/
|
|
21
|
+
var ThumbnailFileDelete = class ThumbnailFileDelete extends require_lib_base_command.AuthenticatedCommand {
|
|
22
|
+
static description = "Delete a file from a thumbnail template";
|
|
23
|
+
static examples = ["<%= config.bin %> thumbnail file delete --template-id 42 --filename logo.png", "<%= config.bin %> thumbnail file delete --template-id 42 --filename logo.png --json"];
|
|
24
|
+
static enableJsonFlag = true;
|
|
25
|
+
static flags = {
|
|
26
|
+
...require_lib_base_command.AuthenticatedCommand.baseFlags,
|
|
27
|
+
"template-id": _oclif_core.Flags.string({
|
|
28
|
+
description: "Thumbnail template ID",
|
|
29
|
+
required: true
|
|
30
|
+
}),
|
|
31
|
+
filename: _oclif_core.Flags.string({
|
|
32
|
+
description: "Filename to delete",
|
|
33
|
+
required: true
|
|
34
|
+
})
|
|
35
|
+
};
|
|
36
|
+
static args = {};
|
|
37
|
+
static agentMetadata = {
|
|
38
|
+
api_endpoint: "POST /thumbnail/template/delete-file",
|
|
39
|
+
auth_scope: "write",
|
|
40
|
+
output_shape: { type: "key-value" },
|
|
41
|
+
side_effects: "destructive"
|
|
42
|
+
};
|
|
43
|
+
async run() {
|
|
44
|
+
const { flags } = await this.parse(ThumbnailFileDelete);
|
|
45
|
+
this.printWorkspaceHeader();
|
|
46
|
+
if (!this.jsonEnabled()) {
|
|
47
|
+
const confirmed = await (0, _clack_prompts.confirm)({ message: `Delete file "${flags.filename}" from template ${flags["template-id"]} on ${this.activeWorkspace.domain}?` });
|
|
48
|
+
if ((0, _clack_prompts.isCancel)(confirmed) || !confirmed) process.exit(2);
|
|
49
|
+
}
|
|
50
|
+
const { data: deleteData, error: deleteError } = await this.apiClient.POST("/thumbnail/template/delete-file", {
|
|
51
|
+
body: {
|
|
52
|
+
thumbnail_template_id: Number(flags["template-id"]),
|
|
53
|
+
filename: flags.filename
|
|
54
|
+
},
|
|
55
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" }
|
|
56
|
+
});
|
|
57
|
+
if (deleteError) this.error(require_lib_term_map.applyCliTerms(formatApiError(deleteError)), { exit: 1 });
|
|
58
|
+
this.log(chalk.default.green(`File "${flags.filename}" deleted from template ${flags["template-id"]}`));
|
|
59
|
+
if (this.jsonEnabled()) return require_lib_output.formatJsonOutput({
|
|
60
|
+
ok: true,
|
|
61
|
+
data: deleteData,
|
|
62
|
+
summary: `File "${flags.filename}" deleted from thumbnail template ${flags["template-id"]}`,
|
|
63
|
+
breadcrumbs: [{ domain: this.activeWorkspace.domain }, {
|
|
64
|
+
resource: "thumbnail",
|
|
65
|
+
id: flags["template-id"]
|
|
66
|
+
}]
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
//#endregion
|
|
71
|
+
module.exports = ThumbnailFileDelete;
|
|
@@ -0,0 +1,74 @@
|
|
|
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/thumbnail/file/list.ts
|
|
9
|
+
/**
|
|
10
|
+
* Thumbnail file list command — lists files associated with a thumbnail template.
|
|
11
|
+
*
|
|
12
|
+
* Maps to GET /thumbnail/template/list-files.
|
|
13
|
+
* 3-level oclif topic via directory structure (thumbnail/file/list.ts).
|
|
14
|
+
*
|
|
15
|
+
* Threat mitigations:
|
|
16
|
+
* T-08-09: extends AuthenticatedCommand — anonymous mode rejected
|
|
17
|
+
*/
|
|
18
|
+
var ThumbnailFileList = class ThumbnailFileList extends require_lib_base_command.AuthenticatedCommand {
|
|
19
|
+
static description = "List files associated with a thumbnail template";
|
|
20
|
+
static examples = ["<%= config.bin %> thumbnail file list 42", "<%= config.bin %> thumbnail file list 42 --json"];
|
|
21
|
+
static enableJsonFlag = true;
|
|
22
|
+
static flags = { ...require_lib_base_command.AuthenticatedCommand.baseFlags };
|
|
23
|
+
static args = { id: _oclif_core.Args.string({
|
|
24
|
+
description: "Thumbnail template ID",
|
|
25
|
+
required: true
|
|
26
|
+
}) };
|
|
27
|
+
static agentMetadata = {
|
|
28
|
+
api_endpoint: "GET /thumbnail/template/list-files",
|
|
29
|
+
auth_scope: "read",
|
|
30
|
+
output_shape: {
|
|
31
|
+
type: "table",
|
|
32
|
+
columns: [
|
|
33
|
+
"Filename",
|
|
34
|
+
"Size",
|
|
35
|
+
"URL"
|
|
36
|
+
]
|
|
37
|
+
},
|
|
38
|
+
side_effects: "none"
|
|
39
|
+
};
|
|
40
|
+
async run() {
|
|
41
|
+
const { args } = await this.parse(ThumbnailFileList);
|
|
42
|
+
this.printWorkspaceHeader();
|
|
43
|
+
const { data, error } = await this.apiClient.GET("/thumbnail/template/list-files", { params: { query: { thumbnail_template_id: Number(args.id) } } });
|
|
44
|
+
if (error) this.error(require_lib_term_map.applyCliTerms(formatApiError(error)), { exit: 1 });
|
|
45
|
+
const resp = data;
|
|
46
|
+
const rows = Array.isArray(resp?.data) ? resp.data : resp?.data ? [resp.data] : [];
|
|
47
|
+
if (this.jsonEnabled()) return require_lib_output.formatJsonOutput({
|
|
48
|
+
ok: true,
|
|
49
|
+
data: rows,
|
|
50
|
+
summary: `${rows.length} file(s)`,
|
|
51
|
+
breadcrumbs: [{ domain: this.activeWorkspace.domain }, {
|
|
52
|
+
resource: "thumbnail",
|
|
53
|
+
id: args.id
|
|
54
|
+
}]
|
|
55
|
+
});
|
|
56
|
+
if (rows.length === 0) {
|
|
57
|
+
this.log("No files found.");
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const table = require_lib_output.renderTable([
|
|
61
|
+
"Filename",
|
|
62
|
+
"Size",
|
|
63
|
+
"URL"
|
|
64
|
+
], rows.map((r) => [
|
|
65
|
+
String(r.filename ?? ""),
|
|
66
|
+
String(r.size_fmt ?? r.size ?? ""),
|
|
67
|
+
String(r.url ?? "")
|
|
68
|
+
]));
|
|
69
|
+
this.log(table.toString());
|
|
70
|
+
this.log(chalk.default.dim(`${rows.length} file(s)`));
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
//#endregion
|
|
74
|
+
module.exports = ThumbnailFileList;
|
|
@@ -0,0 +1,79 @@
|
|
|
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 node_fs = require("node:fs");
|
|
9
|
+
node_fs = require_runtime.__toESM(node_fs);
|
|
10
|
+
let node_path = require("node:path");
|
|
11
|
+
node_path = require_runtime.__toESM(node_path);
|
|
12
|
+
//#region src/commands/thumbnail/file/upload.ts
|
|
13
|
+
/**
|
|
14
|
+
* Thumbnail file upload command — uploads an image file to a thumbnail template.
|
|
15
|
+
*
|
|
16
|
+
* Maps to POST /thumbnail/template/upload-file.
|
|
17
|
+
* Uses direct multipart POST with bodySerializer to create FormData (Pattern F).
|
|
18
|
+
* Per D-3: this is NOT the chunked engine — thumbnail files are images uploaded directly.
|
|
19
|
+
*
|
|
20
|
+
* Threat mitigations:
|
|
21
|
+
* T-08-08: Validates file exists via fs.existsSync before reading (prevents misleading errors)
|
|
22
|
+
* T-08-09: extends AuthenticatedCommand — anonymous mode rejected
|
|
23
|
+
*/
|
|
24
|
+
var ThumbnailFileUpload = class ThumbnailFileUpload extends require_lib_base_command.AuthenticatedCommand {
|
|
25
|
+
static description = "Upload an image file to a thumbnail template";
|
|
26
|
+
static examples = ["<%= config.bin %> thumbnail file upload ./logo.png --template-id 42", "<%= config.bin %> thumbnail file upload ./banner.jpg --template-id 42 --json"];
|
|
27
|
+
static enableJsonFlag = true;
|
|
28
|
+
static flags = {
|
|
29
|
+
...require_lib_base_command.AuthenticatedCommand.baseFlags,
|
|
30
|
+
"template-id": _oclif_core.Flags.string({
|
|
31
|
+
description: "Thumbnail template ID",
|
|
32
|
+
required: true
|
|
33
|
+
})
|
|
34
|
+
};
|
|
35
|
+
static args = { file: _oclif_core.Args.string({
|
|
36
|
+
description: "Path to the image file to upload",
|
|
37
|
+
required: true
|
|
38
|
+
}) };
|
|
39
|
+
static agentMetadata = {
|
|
40
|
+
api_endpoint: "POST /thumbnail/template/upload-file",
|
|
41
|
+
auth_scope: "write",
|
|
42
|
+
output_shape: { type: "key-value" },
|
|
43
|
+
side_effects: "creates"
|
|
44
|
+
};
|
|
45
|
+
async run() {
|
|
46
|
+
const { args, flags } = await this.parse(ThumbnailFileUpload);
|
|
47
|
+
this.printWorkspaceHeader();
|
|
48
|
+
const filePath = node_path.resolve(args.file);
|
|
49
|
+
if (!node_fs.existsSync(filePath)) this.error(`File not found: ${filePath}`, { exit: 1 });
|
|
50
|
+
const fileBuffer = node_fs.readFileSync(filePath);
|
|
51
|
+
const fileName = node_path.basename(filePath);
|
|
52
|
+
const fileBlob = new Blob([fileBuffer]);
|
|
53
|
+
const { data, error } = await this.apiClient.POST("/thumbnail/template/upload-file", {
|
|
54
|
+
body: {
|
|
55
|
+
thumbnail_template_id: Number(flags["template-id"]),
|
|
56
|
+
file: fileBlob
|
|
57
|
+
},
|
|
58
|
+
bodySerializer(body) {
|
|
59
|
+
const fd = new FormData();
|
|
60
|
+
for (const [k, v] of Object.entries(body)) if (v !== void 0) if (v instanceof Blob) fd.append(k, v, fileName);
|
|
61
|
+
else fd.append(k, String(v));
|
|
62
|
+
return fd;
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
if (error) this.error(require_lib_term_map.applyCliTerms(formatApiError(error)), { exit: 1 });
|
|
66
|
+
this.log(chalk.default.green("File uploaded"));
|
|
67
|
+
if (this.jsonEnabled()) return require_lib_output.formatJsonOutput({
|
|
68
|
+
ok: true,
|
|
69
|
+
data,
|
|
70
|
+
summary: `File "${fileName}" uploaded to thumbnail template ${flags["template-id"]}`,
|
|
71
|
+
breadcrumbs: [{ domain: this.activeWorkspace.domain }, {
|
|
72
|
+
resource: "thumbnail",
|
|
73
|
+
id: flags["template-id"]
|
|
74
|
+
}]
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
//#endregion
|
|
79
|
+
module.exports = ThumbnailFileUpload;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
require("../../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
let _oclif_core = require("@oclif/core");
|
|
3
|
+
//#region src/commands/thumbnail/index.ts
|
|
4
|
+
var ThumbnailIndex = class extends _oclif_core.Command {
|
|
5
|
+
static description = "Manage thumbnail templates — list, add, update, delete, duplicate, data, and manage files";
|
|
6
|
+
async run() {
|
|
7
|
+
this.log("Run \"twentythree thumbnail --help\" for available commands");
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
//#endregion
|
|
11
|
+
module.exports = ThumbnailIndex;
|
|
@@ -0,0 +1,89 @@
|
|
|
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/thumbnail/list.ts
|
|
9
|
+
/**
|
|
10
|
+
* Thumbnail template list command — lists all thumbnail templates in the active workspace.
|
|
11
|
+
*
|
|
12
|
+
* Maps to GET /thumbnail/template/list.
|
|
13
|
+
* Supports optional search and object-type filtering.
|
|
14
|
+
*/
|
|
15
|
+
var ThumbnailList = class ThumbnailList extends require_lib_base_command.AuthenticatedCommand {
|
|
16
|
+
static description = "List thumbnail templates in the active workspace";
|
|
17
|
+
static examples = [
|
|
18
|
+
"<%= config.bin %> thumbnail list",
|
|
19
|
+
"<%= config.bin %> thumbnail list --search \"my template\"",
|
|
20
|
+
"<%= config.bin %> thumbnail list --object-type photo",
|
|
21
|
+
"<%= config.bin %> thumbnail list --json"
|
|
22
|
+
];
|
|
23
|
+
static enableJsonFlag = true;
|
|
24
|
+
static flags = {
|
|
25
|
+
...require_lib_base_command.AuthenticatedCommand.baseFlags,
|
|
26
|
+
search: _oclif_core.Flags.string({
|
|
27
|
+
description: "Filter by name",
|
|
28
|
+
required: false
|
|
29
|
+
}),
|
|
30
|
+
"object-type": _oclif_core.Flags.string({
|
|
31
|
+
description: "Filter by object type (photo, live, liveseries)",
|
|
32
|
+
required: false
|
|
33
|
+
})
|
|
34
|
+
};
|
|
35
|
+
static args = {};
|
|
36
|
+
static agentMetadata = {
|
|
37
|
+
api_endpoint: "GET /thumbnail/template/list",
|
|
38
|
+
auth_scope: "read",
|
|
39
|
+
output_shape: {
|
|
40
|
+
type: "table",
|
|
41
|
+
columns: [
|
|
42
|
+
"ID",
|
|
43
|
+
"Name",
|
|
44
|
+
"Type",
|
|
45
|
+
"Width",
|
|
46
|
+
"Height"
|
|
47
|
+
]
|
|
48
|
+
},
|
|
49
|
+
side_effects: "none"
|
|
50
|
+
};
|
|
51
|
+
async run() {
|
|
52
|
+
const { flags } = await this.parse(ThumbnailList);
|
|
53
|
+
this.printWorkspaceHeader();
|
|
54
|
+
const { data, error } = await this.apiClient.GET("/thumbnail/template/list", { params: { query: {
|
|
55
|
+
search: flags.search,
|
|
56
|
+
object_type: flags["object-type"]
|
|
57
|
+
} } });
|
|
58
|
+
if (error) this.error(require_lib_term_map.applyCliTerms(formatApiError(error)), { exit: 1 });
|
|
59
|
+
const resp = data;
|
|
60
|
+
const rows = Array.isArray(resp?.data) ? resp.data : resp?.data ? [resp.data] : [];
|
|
61
|
+
if (this.jsonEnabled()) return require_lib_output.formatJsonOutput({
|
|
62
|
+
ok: true,
|
|
63
|
+
data: rows,
|
|
64
|
+
summary: `${rows.length} thumbnail template(s)`,
|
|
65
|
+
breadcrumbs: [{ domain: this.activeWorkspace.domain }, { resource: "thumbnail" }]
|
|
66
|
+
});
|
|
67
|
+
if (rows.length === 0) {
|
|
68
|
+
this.log("No thumbnail templates found.");
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
const table = require_lib_output.renderTable([
|
|
72
|
+
"ID",
|
|
73
|
+
"Name",
|
|
74
|
+
"Type",
|
|
75
|
+
"Width",
|
|
76
|
+
"Height"
|
|
77
|
+
], rows.map((r) => [
|
|
78
|
+
String(r.thumbnail_template_id ?? ""),
|
|
79
|
+
String(r.name ?? ""),
|
|
80
|
+
String(r.object_type ?? ""),
|
|
81
|
+
String(r.width ?? ""),
|
|
82
|
+
String(r.height ?? "")
|
|
83
|
+
]));
|
|
84
|
+
this.log(table.toString());
|
|
85
|
+
this.log(chalk.default.dim(`${rows.length} thumbnail template(s)`));
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
//#endregion
|
|
89
|
+
module.exports = ThumbnailList;
|
|
@@ -0,0 +1,87 @@
|
|
|
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/thumbnail/update.ts
|
|
9
|
+
/**
|
|
10
|
+
* Thumbnail template update command — updates an existing thumbnail template.
|
|
11
|
+
*
|
|
12
|
+
* Maps to POST /thumbnail/template/update.
|
|
13
|
+
* Only flags explicitly provided are included in the update body.
|
|
14
|
+
*
|
|
15
|
+
* Threat mitigations:
|
|
16
|
+
* T-08-09: extends AuthenticatedCommand — anonymous mode rejected
|
|
17
|
+
*/
|
|
18
|
+
var ThumbnailUpdate = class ThumbnailUpdate extends require_lib_base_command.AuthenticatedCommand {
|
|
19
|
+
static description = "Update a thumbnail template";
|
|
20
|
+
static examples = [
|
|
21
|
+
"<%= config.bin %> thumbnail update 42 --name \"Updated Name\"",
|
|
22
|
+
"<%= config.bin %> thumbnail update 42 --liquid-template \"<div>{{ video.title }}</div>\"",
|
|
23
|
+
"<%= config.bin %> thumbnail update 42 --object-type photo --width 1280 --height 720",
|
|
24
|
+
"<%= config.bin %> thumbnail update 42 --name \"Updated Name\" --json"
|
|
25
|
+
];
|
|
26
|
+
static enableJsonFlag = true;
|
|
27
|
+
static flags = {
|
|
28
|
+
...require_lib_base_command.AuthenticatedCommand.baseFlags,
|
|
29
|
+
name: _oclif_core.Flags.string({
|
|
30
|
+
description: "New name for the template",
|
|
31
|
+
required: false
|
|
32
|
+
}),
|
|
33
|
+
"liquid-template": _oclif_core.Flags.string({
|
|
34
|
+
description: "New Liquid template content",
|
|
35
|
+
required: false
|
|
36
|
+
}),
|
|
37
|
+
"object-type": _oclif_core.Flags.string({
|
|
38
|
+
description: "Object type (photo, live, liveseries)",
|
|
39
|
+
required: false
|
|
40
|
+
}),
|
|
41
|
+
width: _oclif_core.Flags.integer({
|
|
42
|
+
description: "Template width in pixels",
|
|
43
|
+
required: false
|
|
44
|
+
}),
|
|
45
|
+
height: _oclif_core.Flags.integer({
|
|
46
|
+
description: "Template height in pixels",
|
|
47
|
+
required: false
|
|
48
|
+
})
|
|
49
|
+
};
|
|
50
|
+
static args = { id: _oclif_core.Args.string({
|
|
51
|
+
description: "Thumbnail template ID",
|
|
52
|
+
required: true
|
|
53
|
+
}) };
|
|
54
|
+
static agentMetadata = {
|
|
55
|
+
api_endpoint: "POST /thumbnail/template/update",
|
|
56
|
+
auth_scope: "write",
|
|
57
|
+
output_shape: { type: "key-value" },
|
|
58
|
+
side_effects: "updates"
|
|
59
|
+
};
|
|
60
|
+
async run() {
|
|
61
|
+
const { args, flags } = await this.parse(ThumbnailUpdate);
|
|
62
|
+
this.printWorkspaceHeader();
|
|
63
|
+
const body = { thumbnail_template_id: Number(args.id) };
|
|
64
|
+
if (flags.name !== void 0) body.name = flags.name;
|
|
65
|
+
if (flags["liquid-template"] !== void 0) body.liquid_template = flags["liquid-template"];
|
|
66
|
+
if (flags["object-type"] !== void 0) body.object_type = flags["object-type"];
|
|
67
|
+
if (flags.width !== void 0) body.width = flags.width;
|
|
68
|
+
if (flags.height !== void 0) body.height = flags.height;
|
|
69
|
+
const { data: updateData, error: updateError } = await this.apiClient.POST("/thumbnail/template/update", {
|
|
70
|
+
body,
|
|
71
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" }
|
|
72
|
+
});
|
|
73
|
+
if (updateError) this.error(require_lib_term_map.applyCliTerms(formatApiError(updateError)), { exit: 1 });
|
|
74
|
+
this.log(chalk.default.green(`Thumbnail template ${args.id} updated`));
|
|
75
|
+
if (this.jsonEnabled()) return require_lib_output.formatJsonOutput({
|
|
76
|
+
ok: true,
|
|
77
|
+
data: updateData,
|
|
78
|
+
summary: `Thumbnail template ${args.id} updated`,
|
|
79
|
+
breadcrumbs: [{ domain: this.activeWorkspace.domain }, {
|
|
80
|
+
resource: "thumbnail",
|
|
81
|
+
id: args.id
|
|
82
|
+
}]
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
//#endregion
|
|
87
|
+
module.exports = ThumbnailUpdate;
|