blitzreels 0.1.4 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (214) hide show
  1. package/README.md +55 -25
  2. package/dist/agent-context.d.ts +68 -0
  3. package/dist/agent-context.d.ts.map +1 -0
  4. package/dist/agent-context.js +214 -0
  5. package/dist/agent-context.js.map +1 -0
  6. package/dist/cli-command-routing.d.ts +27 -0
  7. package/dist/cli-command-routing.d.ts.map +1 -0
  8. package/dist/cli-command-routing.js +236 -0
  9. package/dist/cli-command-routing.js.map +1 -0
  10. package/dist/cli-errors.d.ts +31 -0
  11. package/dist/cli-errors.d.ts.map +1 -0
  12. package/dist/cli-errors.js +27 -0
  13. package/dist/cli-errors.js.map +1 -0
  14. package/dist/cli-flag-reader.d.ts +61 -0
  15. package/dist/cli-flag-reader.d.ts.map +1 -0
  16. package/dist/cli-flag-reader.js +207 -0
  17. package/dist/cli-flag-reader.js.map +1 -0
  18. package/dist/cli-http.d.ts +6 -0
  19. package/dist/cli-http.d.ts.map +1 -0
  20. package/dist/cli-http.js +42 -0
  21. package/dist/cli-http.js.map +1 -0
  22. package/dist/cli-presenter.d.ts +24 -0
  23. package/dist/cli-presenter.d.ts.map +1 -0
  24. package/dist/cli-presenter.js +161 -0
  25. package/dist/cli-presenter.js.map +1 -0
  26. package/dist/cli-runtime.d.ts +1 -2
  27. package/dist/cli-runtime.d.ts.map +1 -1
  28. package/dist/cli-runtime.js +2 -2
  29. package/dist/cli-runtime.js.map +1 -1
  30. package/dist/cli-timing.d.ts +4 -0
  31. package/dist/cli-timing.d.ts.map +1 -0
  32. package/dist/cli-timing.js +6 -0
  33. package/dist/cli-timing.js.map +1 -0
  34. package/dist/cli-types.d.ts +52 -0
  35. package/dist/cli-types.d.ts.map +1 -1
  36. package/dist/cli-value-parsers.d.ts +76 -0
  37. package/dist/cli-value-parsers.d.ts.map +1 -0
  38. package/dist/cli-value-parsers.js +271 -0
  39. package/dist/cli-value-parsers.js.map +1 -0
  40. package/dist/command-metadata.d.ts +11 -5
  41. package/dist/command-metadata.d.ts.map +1 -1
  42. package/dist/command-metadata.js +64 -9
  43. package/dist/command-metadata.js.map +1 -1
  44. package/dist/command-registry.d.ts +1 -1
  45. package/dist/command-registry.d.ts.map +1 -1
  46. package/dist/command-registry.js +44 -853
  47. package/dist/command-registry.js.map +1 -1
  48. package/dist/commands/ai-edit.d.ts +45 -0
  49. package/dist/commands/ai-edit.d.ts.map +1 -0
  50. package/dist/commands/ai-edit.js +370 -0
  51. package/dist/commands/ai-edit.js.map +1 -0
  52. package/dist/commands/api.d.ts +20 -0
  53. package/dist/commands/api.d.ts.map +1 -0
  54. package/dist/commands/api.js +56 -0
  55. package/dist/commands/api.js.map +1 -0
  56. package/dist/commands/audio.d.ts +65 -0
  57. package/dist/commands/audio.d.ts.map +1 -0
  58. package/dist/commands/audio.js +264 -0
  59. package/dist/commands/audio.js.map +1 -0
  60. package/dist/commands/auth-runtime.d.ts +24 -0
  61. package/dist/commands/auth-runtime.d.ts.map +1 -0
  62. package/dist/commands/auth-runtime.js +169 -0
  63. package/dist/commands/auth-runtime.js.map +1 -0
  64. package/dist/commands/auth.d.ts +26 -0
  65. package/dist/commands/auth.d.ts.map +1 -0
  66. package/dist/commands/auth.js +59 -0
  67. package/dist/commands/auth.js.map +1 -0
  68. package/dist/commands/caption-command-types.d.ts +66 -0
  69. package/dist/commands/caption-command-types.d.ts.map +1 -0
  70. package/dist/commands/caption-command-types.js +2 -0
  71. package/dist/commands/caption-command-types.js.map +1 -0
  72. package/dist/commands/caption-dry-run.d.ts +66 -0
  73. package/dist/commands/caption-dry-run.d.ts.map +1 -0
  74. package/dist/commands/caption-dry-run.js +225 -0
  75. package/dist/commands/caption-dry-run.js.map +1 -0
  76. package/dist/commands/caption-overrides.d.ts +43 -0
  77. package/dist/commands/caption-overrides.d.ts.map +1 -0
  78. package/dist/commands/caption-overrides.js +245 -0
  79. package/dist/commands/caption-overrides.js.map +1 -0
  80. package/dist/commands/caption-selection.d.ts +72 -0
  81. package/dist/commands/caption-selection.d.ts.map +1 -0
  82. package/dist/commands/caption-selection.js +89 -0
  83. package/dist/commands/caption-selection.js.map +1 -0
  84. package/dist/commands/caption-style-commands.d.ts +3 -0
  85. package/dist/commands/caption-style-commands.d.ts.map +1 -0
  86. package/dist/commands/caption-style-commands.js +240 -0
  87. package/dist/commands/caption-style-commands.js.map +1 -0
  88. package/dist/commands/caption-style-flags.d.ts +30 -0
  89. package/dist/commands/caption-style-flags.d.ts.map +1 -0
  90. package/dist/commands/caption-style-flags.js +257 -0
  91. package/dist/commands/caption-style-flags.js.map +1 -0
  92. package/dist/commands/caption-text-updates.d.ts +21 -0
  93. package/dist/commands/caption-text-updates.d.ts.map +1 -0
  94. package/dist/commands/caption-text-updates.js +23 -0
  95. package/dist/commands/caption-text-updates.js.map +1 -0
  96. package/dist/commands/captions-specs.d.ts +3 -0
  97. package/dist/commands/captions-specs.d.ts.map +1 -0
  98. package/dist/commands/captions-specs.js +241 -0
  99. package/dist/commands/captions-specs.js.map +1 -0
  100. package/dist/commands/captions.d.ts +7 -0
  101. package/dist/commands/captions.d.ts.map +1 -0
  102. package/dist/commands/captions.js +203 -0
  103. package/dist/commands/captions.js.map +1 -0
  104. package/dist/commands/clip-runtime.d.ts +67 -0
  105. package/dist/commands/clip-runtime.d.ts.map +1 -0
  106. package/dist/commands/clip-runtime.js +194 -0
  107. package/dist/commands/clip-runtime.js.map +1 -0
  108. package/dist/commands/clips.d.ts +66 -0
  109. package/dist/commands/clips.d.ts.map +1 -0
  110. package/dist/commands/clips.js +625 -0
  111. package/dist/commands/clips.js.map +1 -0
  112. package/dist/commands/command-operation.d.ts +26 -0
  113. package/dist/commands/command-operation.d.ts.map +1 -0
  114. package/dist/commands/command-operation.js +18 -0
  115. package/dist/commands/command-operation.js.map +1 -0
  116. package/dist/commands/editing-workflow-runtime.d.ts +42 -0
  117. package/dist/commands/editing-workflow-runtime.d.ts.map +1 -0
  118. package/dist/commands/editing-workflow-runtime.js +128 -0
  119. package/dist/commands/editing-workflow-runtime.js.map +1 -0
  120. package/dist/commands/editing-workflows.d.ts +70 -0
  121. package/dist/commands/editing-workflows.d.ts.map +1 -0
  122. package/dist/commands/editing-workflows.js +252 -0
  123. package/dist/commands/editing-workflows.js.map +1 -0
  124. package/dist/commands/effects-runtime.d.ts +64 -0
  125. package/dist/commands/effects-runtime.d.ts.map +1 -0
  126. package/dist/commands/effects-runtime.js +100 -0
  127. package/dist/commands/effects-runtime.js.map +1 -0
  128. package/dist/commands/effects.d.ts +69 -0
  129. package/dist/commands/effects.d.ts.map +1 -0
  130. package/dist/commands/effects.js +281 -0
  131. package/dist/commands/effects.js.map +1 -0
  132. package/dist/commands/exports.d.ts +16 -5
  133. package/dist/commands/exports.d.ts.map +1 -1
  134. package/dist/commands/exports.js +119 -2
  135. package/dist/commands/exports.js.map +1 -1
  136. package/dist/commands/faceless.d.ts +44 -0
  137. package/dist/commands/faceless.d.ts.map +1 -0
  138. package/dist/commands/faceless.js +587 -0
  139. package/dist/commands/faceless.js.map +1 -0
  140. package/dist/commands/formats.d.ts +41 -0
  141. package/dist/commands/formats.d.ts.map +1 -0
  142. package/dist/commands/formats.js +140 -0
  143. package/dist/commands/formats.js.map +1 -0
  144. package/dist/commands/jobs.d.ts +20 -0
  145. package/dist/commands/jobs.d.ts.map +1 -0
  146. package/dist/commands/jobs.js +40 -0
  147. package/dist/commands/jobs.js.map +1 -0
  148. package/dist/commands/media-assets.d.ts +100 -0
  149. package/dist/commands/media-assets.d.ts.map +1 -0
  150. package/dist/commands/media-assets.js +644 -0
  151. package/dist/commands/media-assets.js.map +1 -0
  152. package/dist/commands/media-overlays.d.ts +52 -0
  153. package/dist/commands/media-overlays.d.ts.map +1 -0
  154. package/dist/commands/media-overlays.js +314 -0
  155. package/dist/commands/media-overlays.js.map +1 -0
  156. package/dist/commands/media-runtime.d.ts +61 -0
  157. package/dist/commands/media-runtime.d.ts.map +1 -0
  158. package/dist/commands/media-runtime.js +239 -0
  159. package/dist/commands/media-runtime.js.map +1 -0
  160. package/dist/commands/onboarding.d.ts +51 -0
  161. package/dist/commands/onboarding.d.ts.map +1 -0
  162. package/dist/commands/onboarding.js +452 -0
  163. package/dist/commands/onboarding.js.map +1 -0
  164. package/dist/commands/project-read.d.ts +40 -0
  165. package/dist/commands/project-read.d.ts.map +1 -0
  166. package/dist/commands/project-read.js +184 -0
  167. package/dist/commands/project-read.js.map +1 -0
  168. package/dist/commands/projects.d.ts +16 -5
  169. package/dist/commands/projects.d.ts.map +1 -1
  170. package/dist/commands/projects.js +139 -2
  171. package/dist/commands/projects.js.map +1 -1
  172. package/dist/commands/stock-library.d.ts +72 -0
  173. package/dist/commands/stock-library.d.ts.map +1 -0
  174. package/dist/commands/stock-library.js +175 -0
  175. package/dist/commands/stock-library.js.map +1 -0
  176. package/dist/commands/system.d.ts +16 -0
  177. package/dist/commands/system.d.ts.map +1 -0
  178. package/dist/commands/system.js +147 -0
  179. package/dist/commands/system.js.map +1 -0
  180. package/dist/commands/text-overlay-spec.d.ts +24 -0
  181. package/dist/commands/text-overlay-spec.d.ts.map +1 -0
  182. package/dist/commands/text-overlay-spec.js +228 -0
  183. package/dist/commands/text-overlay-spec.js.map +1 -0
  184. package/dist/commands/text-overlays.d.ts +67 -0
  185. package/dist/commands/text-overlays.d.ts.map +1 -0
  186. package/dist/commands/text-overlays.js +272 -0
  187. package/dist/commands/text-overlays.js.map +1 -0
  188. package/dist/commands/timeline-runtime.d.ts +105 -0
  189. package/dist/commands/timeline-runtime.d.ts.map +1 -0
  190. package/dist/commands/timeline-runtime.js +508 -0
  191. package/dist/commands/timeline-runtime.js.map +1 -0
  192. package/dist/commands/timeline.d.ts +120 -0
  193. package/dist/commands/timeline.d.ts.map +1 -0
  194. package/dist/commands/timeline.js +621 -0
  195. package/dist/commands/timeline.js.map +1 -0
  196. package/dist/commands/workspace-defaults.d.ts +12 -0
  197. package/dist/commands/workspace-defaults.d.ts.map +1 -0
  198. package/dist/commands/workspace-defaults.js +115 -0
  199. package/dist/commands/workspace-defaults.js.map +1 -0
  200. package/dist/commands/workspace.d.ts +50 -0
  201. package/dist/commands/workspace.d.ts.map +1 -0
  202. package/dist/commands/workspace.js +116 -0
  203. package/dist/commands/workspace.js.map +1 -0
  204. package/dist/index.js +485 -5035
  205. package/dist/index.js.map +1 -1
  206. package/dist/preview-first-edit.d.ts +9 -1
  207. package/dist/preview-first-edit.d.ts.map +1 -1
  208. package/dist/preview-first-edit.js +16 -4
  209. package/dist/preview-first-edit.js.map +1 -1
  210. package/dist/update-notifier.d.ts +43 -0
  211. package/dist/update-notifier.d.ts.map +1 -0
  212. package/dist/update-notifier.js +265 -0
  213. package/dist/update-notifier.js.map +1 -0
  214. package/package.json +2 -2
@@ -0,0 +1,203 @@
1
+ import { buildCaptionsDryRun } from "./caption-dry-run.js";
2
+ import { buildCaptionTrackSelector, buildCaptionWordSelector, parseOptionalTimeFlag, parseOptionalWordIds, parseWordIds, } from "./caption-selection.js";
3
+ import { handleCaptionStyleCommand } from "./caption-style-commands.js";
4
+ import { buildCaptionWordStyleFromFlags, validateCaptionWordStyleJson, } from "./caption-style-flags.js";
5
+ export { CAPTIONS_COMMAND_SPECS } from "./captions-specs.js";
6
+ export function createCaptionsCommandOperation({ helpers, }) {
7
+ return {
8
+ name: "captions",
9
+ matches: ({ command }) => command[0] === "captions",
10
+ handle: ({ context }) => handleCaptionsCommand({ context, helpers }),
11
+ buildDryRun: ({ context, spec }) => buildCaptionsDryRun({ context, spec, helpers }),
12
+ };
13
+ }
14
+ async function handleCaptionsCommand({ context, helpers, }) {
15
+ const [group, action, subaction] = context.args.command;
16
+ if (group !== "captions") {
17
+ return false;
18
+ }
19
+ const flags = context.args.flags;
20
+ if ((action === "words" && subaction === "list") || action === "list-words") {
21
+ const result = await context.client.captions.listWords({
22
+ projectId: helpers.requireStringFlag({ flags, name: "project-id" }),
23
+ timelineItemId: helpers.getStringFlag({
24
+ flags,
25
+ name: "timeline-item-id",
26
+ }),
27
+ matchText: helpers.getStringFlag({ flags, name: "match-text" }),
28
+ limit: helpers.getNumberFlag({ flags, name: "limit" }),
29
+ offset: helpers.getNumberFlag({ flags, name: "offset" }),
30
+ });
31
+ helpers.printResult({
32
+ json: context.json,
33
+ value: result,
34
+ human: result.words.map((word) => JSON.stringify(word)),
35
+ });
36
+ return true;
37
+ }
38
+ if (action === "delete" || action === "hide" || action === "show") {
39
+ const selector = buildCaptionTrackSelector({ flags, helpers });
40
+ const result = action === "delete"
41
+ ? await context.client.captions.delete(selector)
42
+ : action === "hide"
43
+ ? await context.client.captions.hide(selector)
44
+ : await context.client.captions.show(selector);
45
+ helpers.printResult({
46
+ json: context.json,
47
+ value: result,
48
+ human: [result.message],
49
+ });
50
+ return true;
51
+ }
52
+ if (action === "words" && (subaction === "text" || subaction === "update")) {
53
+ const result = await context.client.captions.updateWordText({
54
+ projectId: helpers.requireStringFlag({ flags, name: "project-id" }),
55
+ wordId: helpers.requireStringFlag({ flags, name: "word-id" }),
56
+ newText: helpers.getStringFlag({ flags, name: "new-text" }) ??
57
+ helpers.requireStringFlag({ flags, name: "text" }),
58
+ });
59
+ helpers.printResult({
60
+ json: context.json,
61
+ value: result,
62
+ human: [
63
+ `Updated ${result.word_id}: ${result.old_text} -> ${result.new_text}`,
64
+ ],
65
+ });
66
+ return true;
67
+ }
68
+ if (action === "words" && subaction === "batch-text") {
69
+ const result = await context.client.captions.batchUpdateWordText({
70
+ projectId: helpers.requireStringFlag({ flags, name: "project-id" }),
71
+ updates: helpers.parseWordTextUpdatesFlag({
72
+ flags,
73
+ name: "updates-json",
74
+ fileName: "updates-file",
75
+ }),
76
+ });
77
+ helpers.printResult({
78
+ json: context.json,
79
+ value: result,
80
+ human: [result.message],
81
+ });
82
+ return true;
83
+ }
84
+ if (action === "words" && subaction === "retime") {
85
+ const result = await context.client.captions.retimeWords({
86
+ projectId: helpers.requireStringFlag({ flags, name: "project-id" }),
87
+ updates: [
88
+ {
89
+ word_id: helpers.requireStringFlag({ flags, name: "word-id" }),
90
+ start_seconds: helpers.parseTimecode({
91
+ value: helpers.requireStringFlag({ flags, name: "start" }),
92
+ }),
93
+ end_seconds: helpers.parseTimecode({
94
+ value: helpers.requireStringFlag({ flags, name: "end" }),
95
+ }),
96
+ },
97
+ ],
98
+ });
99
+ helpers.printResult({
100
+ json: context.json,
101
+ value: result,
102
+ human: [result.message],
103
+ });
104
+ return true;
105
+ }
106
+ if ((action === "words" && subaction === "style") ||
107
+ action === "style-words") {
108
+ const styleJson = helpers.parseNullableJsonObjectFlag({
109
+ flags,
110
+ name: "style-json",
111
+ });
112
+ validateCaptionWordStyleJson({
113
+ helpers,
114
+ flags,
115
+ style: styleJson,
116
+ });
117
+ const style = styleJson === undefined
118
+ ? buildCaptionWordStyleFromFlags({ flags, helpers })
119
+ : styleJson;
120
+ const result = await context.client.captions.setWordStyle({
121
+ ...buildCaptionWordSelector({ flags, helpers }),
122
+ style,
123
+ clearExisting: helpers.getOptionalBooleanFlag({
124
+ flags,
125
+ name: "clear-existing",
126
+ }),
127
+ });
128
+ helpers.printResult({
129
+ json: context.json,
130
+ value: result,
131
+ human: [`Updated ${result.updated_count} caption word(s).`],
132
+ });
133
+ return true;
134
+ }
135
+ if ((action === "words" && subaction === "emphasis") ||
136
+ action === "emphasize") {
137
+ const result = await context.client.captions.setWordEmphasis({
138
+ ...buildCaptionWordSelector({ flags, helpers }),
139
+ emphasis: helpers.getOptionalBooleanFlag({ flags, name: "emphasis" }) ?? true,
140
+ });
141
+ helpers.printResult({
142
+ json: context.json,
143
+ value: result,
144
+ human: [`Updated ${result.updated_count} caption word(s).`],
145
+ });
146
+ return true;
147
+ }
148
+ if (action === "words" && subaction === "delete") {
149
+ const result = await context.client.captions.deleteWords({
150
+ projectId: helpers.requireStringFlag({ flags, name: "project-id" }),
151
+ wordIds: parseOptionalWordIds({ flags, helpers }),
152
+ timelineItemId: helpers.getStringFlag({
153
+ flags,
154
+ name: "timeline-item-id",
155
+ }),
156
+ all: helpers.getOptionalBooleanFlag({ flags, name: "all" }),
157
+ fromSeconds: parseOptionalTimeFlag({ flags, helpers, name: "from" }),
158
+ toSeconds: parseOptionalTimeFlag({ flags, helpers, name: "to" }),
159
+ });
160
+ helpers.printResult({
161
+ json: context.json,
162
+ value: result,
163
+ human: [result.message],
164
+ });
165
+ return true;
166
+ }
167
+ if (action === "words" && subaction === "merge") {
168
+ const result = await context.client.captions.mergeWords({
169
+ projectId: helpers.requireStringFlag({ flags, name: "project-id" }),
170
+ wordIds: parseWordIds({ flags, helpers }),
171
+ text: helpers.getStringFlag({ flags, name: "text" }),
172
+ });
173
+ helpers.printResult({
174
+ json: context.json,
175
+ value: result,
176
+ human: [result.message],
177
+ });
178
+ return true;
179
+ }
180
+ if (action === "words" && subaction === "split") {
181
+ const result = await context.client.captions.splitWord({
182
+ projectId: helpers.requireStringFlag({ flags, name: "project-id" }),
183
+ wordId: helpers.requireStringFlag({ flags, name: "word-id" }),
184
+ words: helpers.parseCsvRequiredFlag({ flags, name: "words" }),
185
+ });
186
+ helpers.printResult({
187
+ json: context.json,
188
+ value: result,
189
+ human: [result.message],
190
+ });
191
+ return true;
192
+ }
193
+ if (await handleCaptionStyleCommand({
194
+ context,
195
+ helpers,
196
+ action,
197
+ subaction,
198
+ })) {
199
+ return true;
200
+ }
201
+ return false;
202
+ }
203
+ //# sourceMappingURL=captions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"captions.js","sourceRoot":"","sources":["../../src/commands/captions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import type { ClipEnvelope, ClipSelectionOptions, ClipTargetOptions, ExportClipOptions, RepairClipOptions } from "@blitzreels/sdk";
2
+ import type { CliContext, Flags } from "../cli-types.js";
3
+ export type ClipRuntimeHelpers = {
4
+ getNumberFlag: (params: {
5
+ flags: Flags;
6
+ name: string;
7
+ }) => number | undefined;
8
+ getOptionalBooleanFlag: (params: {
9
+ flags: Flags;
10
+ name: string;
11
+ }) => boolean | undefined;
12
+ getStringFlag: (params: {
13
+ flags: Flags;
14
+ name: string;
15
+ }) => string | undefined;
16
+ parseNullableNumberFlag: (params: {
17
+ flags: Flags;
18
+ name: string;
19
+ }) => number | null | undefined;
20
+ parseNullableStringFlag: (params: {
21
+ flags: Flags;
22
+ name: string;
23
+ }) => string | null | undefined;
24
+ printResult: (params: {
25
+ json: boolean;
26
+ value: unknown;
27
+ human: string[];
28
+ fields?: string[];
29
+ }) => void;
30
+ requireStringFlag: (params: {
31
+ flags: Flags;
32
+ name: string;
33
+ }) => string;
34
+ sleep: (params: {
35
+ ms: number;
36
+ }) => Promise<void>;
37
+ usageForCurrentCommand: () => string | undefined;
38
+ };
39
+ export declare function createClipRuntime({ helpers, defaultWaitIntervalMs, }: {
40
+ helpers: ClipRuntimeHelpers;
41
+ defaultWaitIntervalMs: number;
42
+ }): {
43
+ buildClipSelection: (params: {
44
+ flags: Flags;
45
+ }) => ClipSelectionOptions;
46
+ buildClipTarget: (params: {
47
+ flags: Flags;
48
+ requireMaxDuration: boolean;
49
+ }) => ClipTargetOptions | null;
50
+ parseClipExportFormat: (params: {
51
+ value: string | undefined;
52
+ }) => ExportClipOptions["format"];
53
+ parseClipExportResolution: (params: {
54
+ value: string | undefined;
55
+ }) => ExportClipOptions["resolution"];
56
+ parseClipRepairMode: (params: {
57
+ value: string | undefined;
58
+ }) => RepairClipOptions["repairMode"];
59
+ printClipResult: (params: {
60
+ context: CliContext;
61
+ result: ClipEnvelope;
62
+ }) => void;
63
+ waitForClip: (params: {
64
+ context: CliContext;
65
+ }) => Promise<ClipEnvelope>;
66
+ };
67
+ //# sourceMappingURL=clip-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clip-runtime.d.ts","sourceRoot":"","sources":["../../src/commands/clip-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAEzD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,aAAa,EAAE,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,GAAG,SAAS,CAAC;IAC9E,sBAAsB,EAAE,CAAC,MAAM,EAAE;QAC/B,KAAK,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd,KAAK,OAAO,GAAG,SAAS,CAAC;IAC1B,aAAa,EAAE,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,GAAG,SAAS,CAAC;IAC9E,uBAAuB,EAAE,CAAC,MAAM,EAAE;QAChC,KAAK,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAChC,uBAAuB,EAAE,CAAC,MAAM,EAAE;QAChC,KAAK,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAChC,WAAW,EAAE,CAAC,MAAM,EAAE;QACpB,IAAI,EAAE,OAAO,CAAC;QACd,KAAK,EAAE,OAAO,CAAC;QACf,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;KACnB,KAAK,IAAI,CAAC;IACX,iBAAiB,EAAE,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,CAAC;IACtE,KAAK,EAAE,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,sBAAsB,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;CAClD,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,EAChC,OAAO,EACP,qBAAqB,GACtB,EAAE;IACD,OAAO,EAAE,kBAAkB,CAAC;IAC5B,qBAAqB,EAAE,MAAM,CAAC;CAC/B,GAAG;IACF,kBAAkB,EAAE,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,KAAK,CAAA;KAAE,KAAK,oBAAoB,CAAC;IACvE,eAAe,EAAE,CAAC,MAAM,EAAE;QACxB,KAAK,EAAE,KAAK,CAAC;QACb,kBAAkB,EAAE,OAAO,CAAC;KAC7B,KAAK,iBAAiB,GAAG,IAAI,CAAC;IAC/B,qBAAqB,EAAE,CAAC,MAAM,EAAE;QAC9B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;KAC3B,KAAK,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAClC,yBAAyB,EAAE,CAAC,MAAM,EAAE;QAClC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;KAC3B,KAAK,iBAAiB,CAAC,YAAY,CAAC,CAAC;IACtC,mBAAmB,EAAE,CAAC,MAAM,EAAE;QAC5B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;KAC3B,KAAK,iBAAiB,CAAC,YAAY,CAAC,CAAC;IACtC,eAAe,EAAE,CAAC,MAAM,EAAE;QACxB,OAAO,EAAE,UAAU,CAAC;QACpB,MAAM,EAAE,YAAY,CAAC;KACtB,KAAK,IAAI,CAAC;IACX,WAAW,EAAE,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,UAAU,CAAA;KAAE,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;CACzE,CAWA"}
@@ -0,0 +1,194 @@
1
+ import { CliOperationError, CliUsageError } from "../cli-errors.js";
2
+ export function createClipRuntime({ helpers, defaultWaitIntervalMs, }) {
3
+ return {
4
+ buildClipSelection: (params) => buildClipSelection({ ...params, helpers }),
5
+ buildClipTarget: (params) => buildClipTarget({ ...params, helpers }),
6
+ parseClipExportFormat,
7
+ parseClipExportResolution,
8
+ parseClipRepairMode,
9
+ printClipResult: (params) => printClipResult({ ...params, helpers }),
10
+ waitForClip: (params) => waitForClip({ ...params, helpers, defaultWaitIntervalMs }),
11
+ };
12
+ }
13
+ function getClipRecord({ result, }) {
14
+ return isRecord(result.clip) ? result.clip : {};
15
+ }
16
+ function printClipResult({ context, result, helpers, }) {
17
+ const clip = getClipRecord({ result });
18
+ const clipId = typeof clip.clip_id === "string" ? clip.clip_id : "unknown";
19
+ const status = typeof clip.status === "string" ? clip.status : "unknown";
20
+ const nextAction = typeof clip.next_action === "string" ? clip.next_action : "unknown";
21
+ const projectId = typeof clip.project_id === "string" ? clip.project_id : null;
22
+ helpers.printResult({
23
+ json: context.json,
24
+ value: result,
25
+ human: [
26
+ `Clip ${clipId}: ${status}`,
27
+ `Next action: ${nextAction}`,
28
+ ...(projectId === null ? [] : [`Project: ${projectId}`]),
29
+ ],
30
+ });
31
+ }
32
+ function parseClipSelectionMode({ value, }) {
33
+ if (value === undefined) {
34
+ return "auto_best";
35
+ }
36
+ if (value === "auto_best" ||
37
+ value === "suggestion" ||
38
+ value === "time_range") {
39
+ return value;
40
+ }
41
+ throw new Error("--selection-mode must be auto_best, suggestion, or time_range.");
42
+ }
43
+ function parseClipRepairMode({ value, }) {
44
+ if (value === undefined) {
45
+ return "auto";
46
+ }
47
+ if (value === "auto" ||
48
+ value === "prefer_split" ||
49
+ value === "prefer_focus" ||
50
+ value === "prefer_tutorial" ||
51
+ value === "move_captions_off_faces") {
52
+ return value;
53
+ }
54
+ throw new Error("--repair-mode must be auto, prefer_split, prefer_focus, prefer_tutorial, or move_captions_off_faces.");
55
+ }
56
+ function parseClipExportResolution({ value, }) {
57
+ if (value === undefined) {
58
+ return "1080p";
59
+ }
60
+ if (value === "720p" || value === "1080p") {
61
+ return value;
62
+ }
63
+ throw new Error("--resolution must be 720p or 1080p.");
64
+ }
65
+ function parseClipExportFormat({ value, }) {
66
+ if (value === undefined) {
67
+ return "mp4";
68
+ }
69
+ if (value === "mp4" || value === "mov") {
70
+ return value;
71
+ }
72
+ throw new Error("--format must be mp4 or mov.");
73
+ }
74
+ function requireNumberFlag({ flags, name, helpers, }) {
75
+ const value = helpers.getNumberFlag({ flags, name });
76
+ if (value === undefined) {
77
+ throw new Error(`Missing required --${name}.`);
78
+ }
79
+ return value;
80
+ }
81
+ function buildClipSelection({ flags, helpers, }) {
82
+ const suggestionIdInput = helpers.parseNullableStringFlag({
83
+ flags,
84
+ name: "suggestion-id",
85
+ });
86
+ const startSecondsInput = helpers.parseNullableNumberFlag({
87
+ flags,
88
+ name: "start-seconds",
89
+ });
90
+ const endSecondsInput = helpers.parseNullableNumberFlag({
91
+ flags,
92
+ name: "end-seconds",
93
+ });
94
+ const mode = parseClipSelectionMode({
95
+ value: helpers.getStringFlag({ flags, name: "selection-mode" }) ??
96
+ (suggestionIdInput !== undefined && suggestionIdInput !== null
97
+ ? "suggestion"
98
+ : startSecondsInput !== undefined || endSecondsInput !== undefined
99
+ ? "time_range"
100
+ : undefined),
101
+ });
102
+ return {
103
+ mode,
104
+ suggestionId: mode === "suggestion"
105
+ ? helpers.requireStringFlag({ flags, name: "suggestion-id" })
106
+ : (suggestionIdInput ?? null),
107
+ startSeconds: mode === "time_range"
108
+ ? requireNumberFlag({ flags, name: "start-seconds", helpers })
109
+ : (startSecondsInput ?? null),
110
+ endSeconds: mode === "time_range"
111
+ ? requireNumberFlag({ flags, name: "end-seconds", helpers })
112
+ : (endSecondsInput ?? null),
113
+ };
114
+ }
115
+ function buildClipTarget({ flags, requireMaxDuration, helpers, }) {
116
+ const maxDurationSeconds = helpers.getNumberFlag({
117
+ flags,
118
+ name: "max-duration",
119
+ });
120
+ const minDurationInput = helpers.parseNullableNumberFlag({
121
+ flags,
122
+ name: "min-duration",
123
+ });
124
+ if (maxDurationSeconds === undefined) {
125
+ if (requireMaxDuration) {
126
+ throw new CliUsageError({
127
+ code: "missing_required_flag",
128
+ message: "Missing required --max-duration.",
129
+ usage: helpers.usageForCurrentCommand(),
130
+ });
131
+ }
132
+ if (minDurationInput !== undefined && minDurationInput !== null) {
133
+ throw new CliUsageError({
134
+ code: "missing_required_flag",
135
+ message: "--max-duration is required when --min-duration is set.",
136
+ usage: helpers.usageForCurrentCommand(),
137
+ });
138
+ }
139
+ return null;
140
+ }
141
+ const minDurationSeconds = minDurationInput ?? null;
142
+ if (minDurationSeconds !== null && minDurationSeconds > maxDurationSeconds) {
143
+ throw new CliUsageError({
144
+ code: "invalid_flag_value",
145
+ message: "--min-duration must be less than or equal to --max-duration.",
146
+ usage: helpers.usageForCurrentCommand(),
147
+ });
148
+ }
149
+ return {
150
+ minDurationSeconds,
151
+ maxDurationSeconds,
152
+ };
153
+ }
154
+ async function waitForClip({ context, helpers, defaultWaitIntervalMs, }) {
155
+ const clipId = helpers.requireStringFlag({
156
+ flags: context.args.flags,
157
+ name: "clip-id",
158
+ });
159
+ const intervalMs = helpers.getNumberFlag({ flags: context.args.flags, name: "interval-ms" }) ??
160
+ defaultWaitIntervalMs;
161
+ const timeoutMs = helpers.getNumberFlag({ flags: context.args.flags, name: "timeout-ms" }) ??
162
+ 10 * 60 * 1000;
163
+ const startedAt = Date.now();
164
+ for (;;) {
165
+ const result = await context.client.clips.get({ clipId });
166
+ const clip = getClipRecord({ result });
167
+ const nextAction = typeof clip.next_action === "string" ? clip.next_action : null;
168
+ const status = typeof clip.status === "string" ? clip.status : null;
169
+ if (nextAction !== "poll" || status === "failed" || status === "exported") {
170
+ return result;
171
+ }
172
+ if (Date.now() - startedAt >= timeoutMs) {
173
+ const source = isRecord(clip.source) ? clip.source : {};
174
+ const assetId = typeof source.asset_id === "string" ? source.asset_id : null;
175
+ throw new CliOperationError({
176
+ code: "timeout",
177
+ exitCode: 7,
178
+ message: `Timed out waiting for clip ${clipId}. Last status: ${status ?? "unknown"}.`,
179
+ retryable: true,
180
+ suggestions: [
181
+ `blitzreels clips wait --clip-id ${clipId} --json`,
182
+ ...(assetId === null
183
+ ? []
184
+ : [`blitzreels media shorts list --asset-id ${assetId} --json`]),
185
+ ],
186
+ });
187
+ }
188
+ await helpers.sleep({ ms: intervalMs });
189
+ }
190
+ }
191
+ function isRecord(value) {
192
+ return typeof value === "object" && value !== null && !Array.isArray(value);
193
+ }
194
+ //# sourceMappingURL=clip-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clip-runtime.js","sourceRoot":"","sources":["../../src/commands/clip-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ import type { ClipEnvelope, ClipSelectionOptions, ClipTargetOptions, ExportClipOptions, RepairClipOptions } from "@blitzreels/sdk";
2
+ import type { CliContext, Flags } from "../cli-types.js";
3
+ import { type CommandSpec } from "../command-metadata.js";
4
+ import type { DryRunPreview } from "../preview-first-edit.js";
5
+ import type { CommandOperation } from "./command-operation.js";
6
+ export declare const CLIPS_COMMAND_SPECS: CommandSpec[];
7
+ export type ClipsCommandHelpers = {
8
+ buildClipSelection: (params: {
9
+ flags: Flags;
10
+ }) => ClipSelectionOptions;
11
+ buildClipTarget: (params: {
12
+ flags: Flags;
13
+ requireMaxDuration: boolean;
14
+ }) => ClipTargetOptions | null;
15
+ dryRunRequest: (params: {
16
+ spec: CommandSpec;
17
+ method: string;
18
+ path: string;
19
+ query?: Record<string, unknown>;
20
+ body: unknown;
21
+ followUpRequests?: DryRunPreview["follow_up_requests"];
22
+ notes?: string[];
23
+ }) => DryRunPreview;
24
+ getOptionalBooleanFlag: (params: {
25
+ flags: Flags;
26
+ name: string;
27
+ }) => boolean | undefined;
28
+ getNumberFlag: (params: {
29
+ flags: Flags;
30
+ name: string;
31
+ }) => number | undefined;
32
+ getStringFlag: (params: {
33
+ flags: Flags;
34
+ name: string;
35
+ }) => string | undefined;
36
+ parseClipExportFormat: (params: {
37
+ value: string | undefined;
38
+ }) => ExportClipOptions["format"];
39
+ parseClipExportResolution: (params: {
40
+ value: string | undefined;
41
+ }) => ExportClipOptions["resolution"];
42
+ parseClipRepairMode: (params: {
43
+ value: string | undefined;
44
+ }) => RepairClipOptions["repairMode"];
45
+ printClipResult: (params: {
46
+ context: CliContext;
47
+ result: ClipEnvelope;
48
+ }) => void;
49
+ printResult: (params: {
50
+ json: boolean;
51
+ value: unknown;
52
+ human: string[];
53
+ fields?: string[];
54
+ }) => void;
55
+ requireStringFlag: (params: {
56
+ flags: Flags;
57
+ name: string;
58
+ }) => string;
59
+ waitForClip: (params: {
60
+ context: CliContext;
61
+ }) => Promise<ClipEnvelope>;
62
+ };
63
+ export declare function createClipsCommandOperation({ helpers, }: {
64
+ helpers: ClipsCommandHelpers;
65
+ }): CommandOperation;
66
+ //# sourceMappingURL=clips.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clips.d.ts","sourceRoot":"","sources":["../../src/commands/clips.ts"],"names":[],"mappings":"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"}