@martini-film/cli 0.1.0 → 0.3.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 +49 -28
- package/dist/api.js +38 -14
- package/dist/api.js.map +1 -1
- package/dist/approve.js +83 -0
- package/dist/approve.js.map +1 -0
- package/dist/args.js +33 -12
- package/dist/args.js.map +1 -1
- package/dist/cli.js +202 -64
- package/dist/cli.js.map +1 -1
- package/dist/commands/assets.js +255 -46
- package/dist/commands/assets.js.map +1 -1
- package/dist/commands/context.js +42 -8
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/files.js +135 -95
- package/dist/commands/files.js.map +1 -1
- package/dist/commands/login.js +171 -30
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/tools.js +73 -12
- package/dist/commands/tools.js.map +1 -1
- package/dist/config.js +10 -19
- package/dist/config.js.map +1 -1
- package/dist/generated/manifest.json +18393 -5431
- package/dist/help.js +203 -18
- package/dist/help.js.map +1 -1
- package/dist/host.js +0 -6
- package/dist/host.js.map +1 -1
- package/dist/manifest.js +9 -10
- package/dist/manifest.js.map +1 -1
- package/dist/output.js +149 -20
- package/dist/output.js.map +1 -1
- package/dist/schema.js +103 -30
- package/dist/schema.js.map +1 -1
- package/dist/wait.js +211 -29
- package/dist/wait.js.map +1 -1
- package/package.json +1 -1
package/dist/commands/assets.js
CHANGED
|
@@ -1,60 +1,136 @@
|
|
|
1
|
-
import { mkdirSync, readFileSync, statSync, writeFileSync } from 'node:fs';
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, statSync, writeFileSync } from 'node:fs';
|
|
2
2
|
import { basename, extname, join } from 'node:path';
|
|
3
3
|
import { CliApiError } from '../api.js';
|
|
4
|
-
import { flagString } from '../args.js';
|
|
4
|
+
import { flagBoolean, flagString } from '../args.js';
|
|
5
|
+
import { findTool } from '../manifest.js';
|
|
5
6
|
import { ArgumentError } from '../schema.js';
|
|
6
|
-
import { waitForAssets, waitForDelivery, waitForJob, waitForRun } from '../wait.js';
|
|
7
|
-
import { requireCanvas, requireProject, timeoutMs, wantsWait, } from './context.js';
|
|
7
|
+
import { assetsOutcome, handleOutcome, waitForAssets, waitForDelivery, waitForJob, waitForRun, WaitTimeoutError, } from '../wait.js';
|
|
8
|
+
import { contextFlag, requireCanvas, requireProject, timeoutMs, wantsWait, } from './context.js';
|
|
8
9
|
const CONTENT_TYPES = {
|
|
9
10
|
'.png': 'image/png',
|
|
10
11
|
'.jpg': 'image/jpeg',
|
|
11
12
|
'.jpeg': 'image/jpeg',
|
|
12
13
|
'.webp': 'image/webp',
|
|
13
14
|
'.mp4': 'video/mp4',
|
|
15
|
+
'.m4v': 'video/mp4',
|
|
14
16
|
'.mov': 'video/quicktime',
|
|
15
17
|
'.webm': 'video/webm',
|
|
16
18
|
'.mp3': 'audio/mpeg',
|
|
17
19
|
'.wav': 'audio/wav',
|
|
20
|
+
'.aac': 'audio/aac',
|
|
18
21
|
'.m4a': 'audio/mp4',
|
|
22
|
+
'.flac': 'audio/flac',
|
|
23
|
+
'.ogg': 'audio/ogg',
|
|
19
24
|
};
|
|
20
|
-
export function
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
export function acceptedUploadContentTypes(manifest) {
|
|
26
|
+
const values = findTool('upload_assets_prepare', manifest)?.inputSchema.properties?.files?.items?.properties
|
|
27
|
+
?.contentType?.enum;
|
|
28
|
+
return Array.isArray(values) ? values.filter((value) => typeof value === 'string') : undefined;
|
|
29
|
+
}
|
|
30
|
+
export function contentTypeFor(path, accepted, override) {
|
|
31
|
+
const isAccepted = (type) => !accepted || accepted.includes(type);
|
|
32
|
+
const refuse = (reason, next) => new ArgumentError(`Cannot upload ${path}: ${reason}.${accepted ? ` Accepted content types: ${accepted.join(', ')}.` : ''} ${next}`);
|
|
33
|
+
if (override) {
|
|
34
|
+
if (isAccepted(override))
|
|
35
|
+
return override;
|
|
36
|
+
throw refuse(`--content-type ${override} is not one upload accepts`, 'Pass one of them.');
|
|
37
|
+
}
|
|
38
|
+
const extension = extname(path).toLowerCase();
|
|
39
|
+
const type = CONTENT_TYPES[extension];
|
|
40
|
+
if (type && isAccepted(type))
|
|
41
|
+
return type;
|
|
42
|
+
if (type)
|
|
43
|
+
throw refuse(`${extension} files are ${type}, which upload does not accept`, 'Convert it to one of them.');
|
|
44
|
+
throw refuse(extension ? `the extension ${extension} does not name a content type` : 'it has no extension to infer a type from', 'Pass --content-type when the bytes are one of them.');
|
|
45
|
+
}
|
|
46
|
+
async function prepareUploads(context, args) {
|
|
47
|
+
for (let attempt = 0;; attempt += 1) {
|
|
48
|
+
try {
|
|
49
|
+
return await context.client.callTool('upload_assets_prepare', args);
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
if (!(error instanceof CliApiError) || error.code !== 'PLACEMENT_CONFLICT' || attempt >= 3)
|
|
53
|
+
throw error;
|
|
54
|
+
await context.sleep(Math.round(250 * 2 ** attempt * (0.8 + Math.random() * 0.4)));
|
|
55
|
+
}
|
|
56
|
+
}
|
|
27
57
|
}
|
|
28
|
-
/**
|
|
29
|
-
* `martini upload <paths…>`: prepare → PUT → complete, in one command, from
|
|
30
|
-
* local files. Replaces the three-step dance (and the base64 fallback) that
|
|
31
|
-
* agents got wrong most often.
|
|
32
|
-
*/
|
|
33
58
|
export const upload = {
|
|
34
59
|
name: 'upload',
|
|
35
|
-
summary: 'Upload local files as canvas assets
|
|
36
|
-
usage: 'martini upload <path…> [--canvas <id>] [--bin <id>] [--content-type <mime>] [--wait]',
|
|
60
|
+
summary: 'Upload local files as canvas assets, named after their basenames',
|
|
61
|
+
usage: 'martini upload <path…> [--canvas <id>] [--bin <id>] [--content-type <mime>] [--display-name <name> | --no-display-name] [--no-wait]',
|
|
62
|
+
details: 'Names files after their basenames without extensions (trimmed). Override one file with --display-name, or skip naming with --no-display-name. Runs upload_assets_prepare, the PUT to storage, and upload_assets_complete from files on disk, then waits (on by default) until the assets are processed. Result: { projectId, canvasId, uploaded: [assetId…], failed: [{ filename, code, message }], completed, named: [{ assetId, displayName }], namingError?, assets? }. When the wait times out the receipt is still printed, with the pending ids.',
|
|
63
|
+
positionals: [
|
|
64
|
+
{
|
|
65
|
+
name: 'path',
|
|
66
|
+
description: 'Local files to upload (at most 50); the content type is inferred from the extension',
|
|
67
|
+
variadic: true,
|
|
68
|
+
required: true,
|
|
69
|
+
},
|
|
70
|
+
],
|
|
71
|
+
flags: [
|
|
72
|
+
{ flag: 'no-display-name', kind: 'boolean', description: 'Skip naming uploaded assets' },
|
|
73
|
+
{
|
|
74
|
+
flag: 'display-name',
|
|
75
|
+
kind: 'string',
|
|
76
|
+
value: '<name>',
|
|
77
|
+
description: 'Override the basename for one file with a non-empty name',
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
flag: 'canvas',
|
|
81
|
+
kind: 'string',
|
|
82
|
+
value: '<id>',
|
|
83
|
+
description: 'Destination canvas (else MARTINI_CANVAS_ID or the .martini/config.json of a run)',
|
|
84
|
+
},
|
|
85
|
+
{ flag: 'bin', kind: 'string', value: '<id>', description: 'Root-level bin on that canvas to place the assets in' },
|
|
86
|
+
{
|
|
87
|
+
flag: 'content-type',
|
|
88
|
+
kind: 'string',
|
|
89
|
+
value: '<mime>',
|
|
90
|
+
description: 'Content type for every file given, when the extension does not say (image/png, video/mp4, …)',
|
|
91
|
+
},
|
|
92
|
+
],
|
|
93
|
+
examples: [
|
|
94
|
+
'martini upload ./ref.png ./take.mp4 --canvas <canvas-id>',
|
|
95
|
+
'martini upload ./ref.png --display-name "Ref · Bugi turnaround"',
|
|
96
|
+
'martini upload out/*.mp4 --bin <bin-id> --no-wait',
|
|
97
|
+
],
|
|
37
98
|
async run(context) {
|
|
38
99
|
const paths = context.positionals;
|
|
39
100
|
if (paths.length === 0)
|
|
40
101
|
throw new ArgumentError('Give at least one file path to upload.');
|
|
41
102
|
if (paths.length > 50)
|
|
42
103
|
throw new ArgumentError('At most 50 files per upload.');
|
|
104
|
+
const displayNameOverride = flagString(context.flags, 'display-name');
|
|
105
|
+
const skipNaming = flagBoolean(context.flags, 'no-display-name') ?? false;
|
|
106
|
+
if (skipNaming && context.flags.has('display-name'))
|
|
107
|
+
throw new ArgumentError('--display-name and --no-display-name are alternatives; pass one of them.');
|
|
108
|
+
if (context.flags.has('display-name') && displayNameOverride === undefined)
|
|
109
|
+
throw new ArgumentError('--display-name requires a value.');
|
|
110
|
+
if (displayNameOverride !== undefined && !displayNameOverride.trim())
|
|
111
|
+
throw new ArgumentError('--display-name must not be empty.');
|
|
112
|
+
if (context.flags.has('display-name') && paths.length !== 1)
|
|
113
|
+
throw new ArgumentError('--display-name requires exactly one file.');
|
|
43
114
|
const projectId = requireProject(context);
|
|
44
115
|
const canvasId = requireCanvas(context);
|
|
45
116
|
const binId = flagString(context.flags, 'bin');
|
|
46
117
|
const contentTypeOverride = flagString(context.flags, 'content-type');
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
118
|
+
const accepted = acceptedUploadContentTypes(context.manifest);
|
|
119
|
+
const contentTypes = paths.map(path => contentTypeFor(path, accepted, contentTypeOverride));
|
|
120
|
+
const files = paths.map((path, index) => ({
|
|
121
|
+
path,
|
|
122
|
+
filename: basename(path),
|
|
123
|
+
contentType: contentTypes[index],
|
|
124
|
+
sizeBytes: statSync(path).size,
|
|
125
|
+
}));
|
|
126
|
+
const prepared = await prepareUploads(context, {
|
|
52
127
|
projectId,
|
|
53
128
|
canvasId,
|
|
54
129
|
...(binId ? { binId } : {}),
|
|
55
130
|
files: files.map(({ filename, contentType, sizeBytes }) => ({ filename, contentType, sizeBytes })),
|
|
56
131
|
});
|
|
57
132
|
const uploaded = [];
|
|
133
|
+
const displayNames = [];
|
|
58
134
|
const failed = [];
|
|
59
135
|
for (const result of prepared.results) {
|
|
60
136
|
const file = files[result.index];
|
|
@@ -62,7 +138,7 @@ export const upload = {
|
|
|
62
138
|
failed.push({
|
|
63
139
|
filename: result.filename ?? file?.filename ?? String(result.index),
|
|
64
140
|
code: result.code,
|
|
65
|
-
|
|
141
|
+
message: result.message,
|
|
66
142
|
});
|
|
67
143
|
continue;
|
|
68
144
|
}
|
|
@@ -72,33 +148,103 @@ export const upload = {
|
|
|
72
148
|
failed.push({
|
|
73
149
|
filename: file.filename,
|
|
74
150
|
code: 'NO_DIRECT_UPLOAD',
|
|
75
|
-
|
|
151
|
+
message: 'Storage did not offer a direct upload URL.',
|
|
76
152
|
});
|
|
77
153
|
continue;
|
|
78
154
|
}
|
|
79
155
|
await context.client.putBytes(result.uploadUrl, readFileSync(file.path), result.uploadHeaders);
|
|
80
156
|
uploaded.push(result.assetId);
|
|
157
|
+
if (!skipNaming) {
|
|
158
|
+
const displayName = (displayNameOverride ?? basename(file.path, extname(file.path))).trim();
|
|
159
|
+
if (displayName)
|
|
160
|
+
displayNames.push({ assetId: result.assetId, displayName });
|
|
161
|
+
}
|
|
81
162
|
}
|
|
82
163
|
let completed = null;
|
|
83
164
|
if (uploaded.length > 0) {
|
|
84
165
|
completed = await context.client.callTool('upload_assets_complete', { projectId, assetIds: uploaded });
|
|
85
166
|
}
|
|
167
|
+
let named = [];
|
|
168
|
+
let namingError;
|
|
169
|
+
if (displayNames.length > 0) {
|
|
170
|
+
try {
|
|
171
|
+
await context.client.callTool('set_asset_labels', { projectId, displayNames });
|
|
172
|
+
named = displayNames;
|
|
173
|
+
}
|
|
174
|
+
catch (error) {
|
|
175
|
+
namingError = error instanceof Error ? error.message : String(error);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
const receipt = {
|
|
179
|
+
projectId,
|
|
180
|
+
canvasId,
|
|
181
|
+
uploaded,
|
|
182
|
+
failed,
|
|
183
|
+
completed,
|
|
184
|
+
named,
|
|
185
|
+
...(namingError !== undefined ? { namingError } : {}),
|
|
186
|
+
};
|
|
86
187
|
let assets = null;
|
|
87
188
|
if (uploaded.length > 0 && wantsWait(context, true)) {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
189
|
+
try {
|
|
190
|
+
assets = await waitForAssets(context.client, projectId, uploaded, {
|
|
191
|
+
timeoutMs: timeoutMs(context),
|
|
192
|
+
now: context.now,
|
|
193
|
+
sleep: context.sleep,
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
catch (error) {
|
|
197
|
+
if (error instanceof WaitTimeoutError)
|
|
198
|
+
error.result = { ...receipt, pending: error.pending, settled: error.settled };
|
|
199
|
+
throw error;
|
|
200
|
+
}
|
|
93
201
|
}
|
|
94
|
-
return {
|
|
202
|
+
return { ...receipt, ...(assets ? { assets } : {}) };
|
|
95
203
|
},
|
|
96
204
|
};
|
|
97
|
-
|
|
205
|
+
function safeFilename(value) {
|
|
206
|
+
return Array.from(value, char => '/\\<>:"|?*'.includes(char) || char.charCodeAt(0) < 32 || char.charCodeAt(0) === 127 ? '-' : char)
|
|
207
|
+
.join('')
|
|
208
|
+
.replace(/\s+/g, ' ')
|
|
209
|
+
.trim()
|
|
210
|
+
.replace(/^\.{1,2}$/, '');
|
|
211
|
+
}
|
|
212
|
+
const FILENAME_MAX_BYTES = 200;
|
|
213
|
+
export function uniqueFilename(stem, ext, isTaken) {
|
|
214
|
+
const fit = (suffix) => {
|
|
215
|
+
const budget = FILENAME_MAX_BYTES - Buffer.byteLength(suffix + ext);
|
|
216
|
+
let used = 0;
|
|
217
|
+
let kept = '';
|
|
218
|
+
for (const point of stem) {
|
|
219
|
+
const bytes = Buffer.byteLength(point);
|
|
220
|
+
if (used + bytes > budget)
|
|
221
|
+
break;
|
|
222
|
+
used += bytes;
|
|
223
|
+
kept += point;
|
|
224
|
+
}
|
|
225
|
+
return kept + suffix + ext;
|
|
226
|
+
};
|
|
227
|
+
let candidate = fit('');
|
|
228
|
+
for (let n = 2; isTaken(candidate); n += 1)
|
|
229
|
+
candidate = fit(` (${n})`);
|
|
230
|
+
return candidate;
|
|
231
|
+
}
|
|
98
232
|
export const download = {
|
|
99
233
|
name: 'download',
|
|
100
|
-
summary: 'Download completed assets
|
|
101
|
-
usage: 'martini download <asset-id…> [--out <path> | --dir <directory>] [--wait]',
|
|
234
|
+
summary: 'Download completed assets by display name (or use --out for one file)',
|
|
235
|
+
usage: 'martini download <asset-id…> [--out <path> | --dir <directory>] [--no-wait]',
|
|
236
|
+
details: 'Directory downloads use sanitised display names plus the suggested extension, falling back to the suggested filename or asset id; existing files and case-insensitive name collisions get numbered suffixes. Unsafe filename characters are replaced, Windows device names are prefixed with _, and stems are limited by UTF-8 bytes to leave room for extensions and numbered suffixes. Waits for the assets to complete (on by default), fetches a presigned URL per asset (get_asset_download_url), and writes the bytes to disk. Result: { written: [{ assetId, path, bytes, contentType }] }; the JSON receipt goes to stdout even with --out, which here names the file for the bytes.',
|
|
237
|
+
positionals: [{ name: 'asset-id', description: 'Assets to download', variadic: true, required: true }],
|
|
238
|
+
flags: [
|
|
239
|
+
{ flag: 'out', kind: 'string', value: '<path>', description: 'File to write when downloading a single asset' },
|
|
240
|
+
{
|
|
241
|
+
flag: 'dir',
|
|
242
|
+
kind: 'string',
|
|
243
|
+
value: '<directory>',
|
|
244
|
+
description: 'Directory for the files, named by their display names (default: the working directory)',
|
|
245
|
+
},
|
|
246
|
+
],
|
|
247
|
+
examples: ['martini download <asset-id> --out ./take.mp4', 'martini download <id> <id> --dir ./out'],
|
|
102
248
|
async run(context) {
|
|
103
249
|
const ids = context.positionals;
|
|
104
250
|
if (ids.length === 0)
|
|
@@ -108,51 +254,114 @@ export const download = {
|
|
|
108
254
|
const dir = flagString(context.flags, 'dir') ?? '.';
|
|
109
255
|
if (out && ids.length > 1)
|
|
110
256
|
throw new ArgumentError('--out names one file; use --dir for several assets.');
|
|
257
|
+
let assets = [];
|
|
111
258
|
if (wantsWait(context, true)) {
|
|
112
|
-
await waitForAssets(context.client, projectId, ids, {
|
|
259
|
+
assets = await waitForAssets(context.client, projectId, ids, {
|
|
113
260
|
timeoutMs: timeoutMs(context),
|
|
114
261
|
now: context.now,
|
|
115
262
|
sleep: context.sleep,
|
|
116
263
|
});
|
|
117
264
|
}
|
|
118
265
|
const written = [];
|
|
266
|
+
const used = new Set();
|
|
119
267
|
for (const assetId of ids) {
|
|
268
|
+
const asset = out
|
|
269
|
+
? undefined
|
|
270
|
+
: (assets.find(asset => asset.id === assetId) ??
|
|
271
|
+
(await context.client.callTool('get_asset', { projectId, assetId }))
|
|
272
|
+
.asset);
|
|
120
273
|
const link = await context.client.callTool('get_asset_download_url', {
|
|
121
274
|
projectId,
|
|
122
275
|
assetId,
|
|
123
276
|
});
|
|
124
277
|
const { bytes, contentType } = await context.client.fetchBytes(link.downloadUrl);
|
|
125
|
-
|
|
126
|
-
|
|
278
|
+
let filename = '';
|
|
279
|
+
let stem = '';
|
|
280
|
+
let ext = '';
|
|
281
|
+
if (!out) {
|
|
282
|
+
const extension = extname(link.suggestedFilename ?? '') ||
|
|
283
|
+
extname(typeof asset?.originalFilename === 'string' ? asset.originalFilename : '');
|
|
284
|
+
const name = safeFilename(typeof asset?.displayName === 'string' ? asset.displayName : '');
|
|
285
|
+
filename = name
|
|
286
|
+
? name + safeFilename(extension)
|
|
287
|
+
: safeFilename(link.suggestedFilename ?? '') || safeFilename(assetId);
|
|
288
|
+
const rawExt = extname(filename);
|
|
289
|
+
ext = Buffer.byteLength(rawExt) > 32 || /^[. ]*$/.test(rawExt) ? '' : rawExt.replace(/[. ]+$/, '');
|
|
290
|
+
stem = basename(filename, rawExt);
|
|
291
|
+
stem = stem.replace(/[. ]+$/, '');
|
|
292
|
+
if (!stem)
|
|
293
|
+
stem = safeFilename(assetId);
|
|
294
|
+
if (/^(?:CON|PRN|AUX|NUL|COM[1-9]|LPT[1-9])$/i.test(stem.split('.')[0] ?? ''))
|
|
295
|
+
stem = '_' + stem;
|
|
296
|
+
filename = uniqueFilename(stem, ext, candidate => used.has(candidate.toLowerCase()) || existsSync(join(dir, candidate)));
|
|
297
|
+
used.add(filename.toLowerCase());
|
|
298
|
+
}
|
|
299
|
+
let path = out ?? join(dir, filename);
|
|
300
|
+
if (out) {
|
|
301
|
+
writeFileSync(path, bytes);
|
|
302
|
+
}
|
|
303
|
+
else {
|
|
127
304
|
mkdirSync(dir, { recursive: true });
|
|
128
|
-
|
|
305
|
+
for (;;) {
|
|
306
|
+
try {
|
|
307
|
+
writeFileSync(path, bytes, { flag: 'wx' });
|
|
308
|
+
break;
|
|
309
|
+
}
|
|
310
|
+
catch (error) {
|
|
311
|
+
if (error.code !== 'EEXIST')
|
|
312
|
+
throw error;
|
|
313
|
+
used.add(filename.toLowerCase());
|
|
314
|
+
filename = uniqueFilename(stem, ext, candidate => used.has(candidate.toLowerCase()) || existsSync(join(dir, candidate)));
|
|
315
|
+
path = join(dir, filename);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
}
|
|
129
319
|
written.push({ assetId, path, bytes: bytes.byteLength, contentType });
|
|
130
320
|
}
|
|
131
|
-
// The bytes went to disk already; the JSON result is the receipt.
|
|
132
321
|
delete context.output.out;
|
|
133
322
|
return { written };
|
|
134
323
|
},
|
|
135
324
|
};
|
|
136
|
-
/** `martini wait <id…>`: block until assets (default), a job, a run, or a render settles. */
|
|
137
325
|
export const wait = {
|
|
138
326
|
name: 'wait',
|
|
139
327
|
summary: 'Block until assets, a job, a run, or a render settle (exit 4 with the pending ids on timeout)',
|
|
140
328
|
usage: 'martini wait <asset-id…> | --job <id> | --run <id> | --render <id> [--timeout <seconds>]',
|
|
329
|
+
details: "Polls until every target reaches a terminal status (completed, failed, cancelled; a run also needs_revision). Result: { kind, status, assets? | job? | run? | delivery? } — the same object a tool's --wait adds as waited; status is the terminal status (for assets, failed when any failed). Stops at --timeout (default 50 s) with exit 4 and an error listing pending and settled ids, so the same command resumes it. Size --timeout to what your shell step allows: a video generation takes minutes.",
|
|
330
|
+
positionals: [{ name: 'asset-id', description: 'Assets to wait for (needs a project)', variadic: true }],
|
|
331
|
+
flags: [
|
|
332
|
+
{ flag: 'job', kind: 'string', value: '<id>', description: 'A generation job (get_jobs)' },
|
|
333
|
+
{
|
|
334
|
+
flag: 'run',
|
|
335
|
+
kind: 'string',
|
|
336
|
+
value: '<id>',
|
|
337
|
+
description: 'A workflow run (get_run long-polls on the server); defaults to MARTINI_RUN_ID when nothing else is named',
|
|
338
|
+
},
|
|
339
|
+
{
|
|
340
|
+
flag: 'render',
|
|
341
|
+
kind: 'string',
|
|
342
|
+
value: '<id>',
|
|
343
|
+
description: 'A timeline render or export (get_timeline_delivery_status)',
|
|
344
|
+
},
|
|
345
|
+
],
|
|
346
|
+
examples: [
|
|
347
|
+
'martini wait <asset-id> <asset-id> --timeout 300',
|
|
348
|
+
'martini wait --run <run-id> --timeout 600',
|
|
349
|
+
'martini wait --render <render-id>',
|
|
350
|
+
],
|
|
141
351
|
async run(context) {
|
|
142
352
|
const options = { timeoutMs: timeoutMs(context), now: context.now, sleep: context.sleep };
|
|
143
353
|
const job = flagString(context.flags, 'job');
|
|
144
|
-
const run =
|
|
354
|
+
const run = contextFlag(context.flags, 'run') ?? (context.positionals.length === 0 ? context.config.runId : undefined);
|
|
145
355
|
const render = flagString(context.flags, 'render');
|
|
146
356
|
if (job)
|
|
147
|
-
return waitForJob(context.client, job, options);
|
|
357
|
+
return handleOutcome('job', await waitForJob(context.client, job, options));
|
|
148
358
|
if (render)
|
|
149
|
-
return waitForDelivery(context.client,
|
|
359
|
+
return handleOutcome('render', await waitForDelivery(context.client, { renderId: render }, options));
|
|
150
360
|
if (context.positionals.length > 0) {
|
|
151
|
-
|
|
152
|
-
return { assets };
|
|
361
|
+
return assetsOutcome(await waitForAssets(context.client, requireProject(context), context.positionals, options));
|
|
153
362
|
}
|
|
154
363
|
if (run)
|
|
155
|
-
return waitForRun(context.client, run, options);
|
|
364
|
+
return handleOutcome('run', await waitForRun(context.client, run, options));
|
|
156
365
|
throw new ArgumentError('Say what to wait for: asset ids, --job <id>, --run <id>, or --render <id>.');
|
|
157
366
|
},
|
|
158
367
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/commands/assets.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/commands/assets.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/context.js
CHANGED
|
@@ -1,23 +1,50 @@
|
|
|
1
1
|
import { flagBoolean, flagList, flagString } from '../args.js';
|
|
2
2
|
import { ArgumentError } from '../schema.js';
|
|
3
3
|
import { DEFAULT_WAIT_TIMEOUT_MS } from '../wait.js';
|
|
4
|
+
export function compoundBooleanFlags(command) {
|
|
5
|
+
return (command.flags ?? []).filter(flag => flag.kind === 'boolean').map(flag => flag.flag);
|
|
6
|
+
}
|
|
7
|
+
export function assertKnownFlags(command, flags, global) {
|
|
8
|
+
const known = new Set((command.flags ?? []).map(flag => flag.flag));
|
|
9
|
+
for (const flag of flags.keys()) {
|
|
10
|
+
if (known.has(flag) || global.has(flag))
|
|
11
|
+
continue;
|
|
12
|
+
const own = [...known].map(name => `--${name}`).join(', ');
|
|
13
|
+
throw new ArgumentError(`Unknown flag --${flag} for martini ${command.name}. Flags: ${own || '(none)'}; global flags (--project, --canvas, --fields, --out, --timeout, …) also apply. Run martini ${command.name} --help.`);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export const CONTEXT_FLAGS = ['project', 'canvas', 'run'];
|
|
17
|
+
export const CONTEXT_FLAG_ALIASES = new Set(CONTEXT_FLAGS.map(name => `${name}-id`));
|
|
18
|
+
export function contextFlag(flags, name) {
|
|
19
|
+
return flagString(flags, name) ?? flagString(flags, `${name}-id`);
|
|
20
|
+
}
|
|
4
21
|
export function requireProject(context) {
|
|
5
|
-
const projectId =
|
|
22
|
+
const projectId = contextFlag(context.flags, 'project') ?? context.config.projectId;
|
|
6
23
|
if (!projectId) {
|
|
7
|
-
throw new ArgumentError('A project is needed: pass --project <id>, or set MARTINI_PROJECT_ID (a
|
|
24
|
+
throw new ArgumentError('A project is needed: pass --project <id>, or set it once with MARTINI_PROJECT_ID (inside a Martini workflow run it is already set in .martini/config.json).');
|
|
8
25
|
}
|
|
9
26
|
return projectId;
|
|
10
27
|
}
|
|
11
28
|
export function requireCanvas(context) {
|
|
12
|
-
const canvasId =
|
|
13
|
-
if (!canvasId)
|
|
14
|
-
throw new ArgumentError('A canvas is needed: pass --canvas <id>, or set MARTINI_CANVAS_ID.');
|
|
29
|
+
const canvasId = contextFlag(context.flags, 'canvas') ?? context.config.canvasId;
|
|
30
|
+
if (!canvasId) {
|
|
31
|
+
throw new ArgumentError('A canvas is needed: pass --canvas <id>, or set it once with MARTINI_CANVAS_ID.');
|
|
32
|
+
}
|
|
15
33
|
return canvasId;
|
|
16
34
|
}
|
|
35
|
+
export const WAIT_TIMEOUT_ENV = 'MARTINI_WAIT_TIMEOUT_SECONDS';
|
|
17
36
|
export function timeoutMs(context) {
|
|
18
37
|
const raw = flagString(context.flags, 'timeout');
|
|
19
|
-
if (raw === undefined)
|
|
20
|
-
|
|
38
|
+
if (raw === undefined) {
|
|
39
|
+
const configured = context.env[WAIT_TIMEOUT_ENV];
|
|
40
|
+
if (configured === undefined || configured === '')
|
|
41
|
+
return DEFAULT_WAIT_TIMEOUT_MS;
|
|
42
|
+
const fromEnv = Number(configured);
|
|
43
|
+
if (!Number.isFinite(fromEnv) || fromEnv <= 0) {
|
|
44
|
+
throw new ArgumentError(`${WAIT_TIMEOUT_ENV} must be a positive number of seconds (it is "${configured}"); a Martini workflow run sets it per step — pass --timeout to override.`);
|
|
45
|
+
}
|
|
46
|
+
return Math.round(fromEnv * 1000);
|
|
47
|
+
}
|
|
21
48
|
const seconds = Number(raw);
|
|
22
49
|
if (!Number.isFinite(seconds) || seconds <= 0)
|
|
23
50
|
throw new ArgumentError('--timeout must be a positive number of seconds.');
|
|
@@ -27,9 +54,16 @@ export function wantsWait(context, defaultOn) {
|
|
|
27
54
|
return flagBoolean(context.flags, 'wait') ?? defaultOn;
|
|
28
55
|
}
|
|
29
56
|
export function selectedFields(context) {
|
|
30
|
-
|
|
57
|
+
const fields = flagList(context.flags, 'fields')
|
|
31
58
|
.flatMap(value => value.split(','))
|
|
32
59
|
.map(value => value.trim())
|
|
33
60
|
.filter(Boolean);
|
|
61
|
+
if (fields.length > 64 || fields.some(path => !/^([A-Za-z0-9_-]+|\*)(\.([A-Za-z0-9_-]+|\*))*$/.test(path))) {
|
|
62
|
+
throw new ArgumentError('--fields accepts at most 64 comma-separated dotted paths; a segment may be * to step into every value.');
|
|
63
|
+
}
|
|
64
|
+
return fields;
|
|
65
|
+
}
|
|
66
|
+
export function needsLocalProjection(fields) {
|
|
67
|
+
return fields.some(path => path.split('.').includes('*'));
|
|
34
68
|
}
|
|
35
69
|
//# sourceMappingURL=context.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAI9D,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAI9D,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AAsDpD,MAAM,UAAU,oBAAoB,CAAC,OAAwB;IAC3D,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC7F,CAAC;AAGD,MAAM,UAAU,gBAAgB,CAC9B,OAAwB,EACxB,KAA6B,EAC7B,MAA2B;IAE3B,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;IACnE,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAChC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAQ;QACjD,MAAM,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC1D,MAAM,IAAI,aAAa,CACrB,kBAAkB,IAAI,gBAAgB,OAAO,CAAC,IAAI,YAAY,GAAG,IAAI,QAAQ,+FAA+F,OAAO,CAAC,IAAI,UAAU,CACnM,CAAA;IACH,CAAC;AACH,CAAC;AAOD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAU,CAAA;AAElE,MAAM,CAAC,MAAM,oBAAoB,GAAwB,IAAI,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,CAAA;AAEzG,MAAM,UAAU,WAAW,CAAC,KAA6B,EAAE,IAAiB;IAC1E,OAAO,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,UAAU,CAAC,KAAK,EAAE,GAAG,IAAI,KAAK,CAAC,CAAA;AACnE,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAuB;IACpD,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,SAAS,CAAA;IACnF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,aAAa,CACrB,6JAA6J,CAC9J,CAAA;IACH,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAuB;IACnD,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAA;IAChF,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,aAAa,CAAC,gFAAgF,CAAC,CAAA;IAC3G,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC;AAOD,MAAM,CAAC,MAAM,gBAAgB,GAAG,8BAA8B,CAAA;AAE9D,MAAM,UAAU,SAAS,CAAC,OAAuB;IAC/C,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;IAChD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;QAChD,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,EAAE;YAAE,OAAO,uBAAuB,CAAA;QACjF,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,CAAA;QAClC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;YAC9C,MAAM,IAAI,aAAa,CACrB,GAAG,gBAAgB,iDAAiD,UAAU,2EAA2E,CAC1J,CAAA;QACH,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;IACnC,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;IAC3B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC;QAC3C,MAAM,IAAI,aAAa,CAAC,iDAAiD,CAAC,CAAA;IAC5E,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;AACnC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,OAAuB,EAAE,SAAkB;IACnE,OAAO,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,SAAS,CAAA;AACxD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAuB;IACpD,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC;SAC7C,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;SAClC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,OAAO,CAAC,CAAA;IAClB,IAAI,MAAM,CAAC,MAAM,GAAG,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,+CAA+C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAC3G,MAAM,IAAI,aAAa,CACrB,wGAAwG,CACzG,CAAA;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAGD,MAAM,UAAU,oBAAoB,CAAC,MAAyB;IAC5D,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAA;AAC3D,CAAC"}
|