@se-studio/contentful-cms 3.2.1 → 3.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/CHANGELOG.md +6 -0
- package/dist/cli/program.d.ts.map +1 -1
- package/dist/cli/program.js +2 -0
- package/dist/cli/program.js.map +1 -1
- package/dist/commands/media.d.ts +4 -0
- package/dist/commands/media.d.ts.map +1 -0
- package/dist/commands/media.js +124 -0
- package/dist/commands/media.js.map +1 -0
- package/dist/generated/version.d.ts +1 -1
- package/dist/generated/version.js +1 -1
- package/dist/hosted/index.d.ts +1 -0
- package/dist/hosted/index.d.ts.map +1 -1
- package/dist/hosted/index.js +1 -0
- package/dist/hosted/index.js.map +1 -1
- package/dist/hosted/next/routes/mcp.d.ts.map +1 -1
- package/dist/hosted/next/routes/mcp.js +3 -0
- package/dist/hosted/next/routes/mcp.js.map +1 -1
- package/dist/mcp/prompts/onboarding.d.ts.map +1 -1
- package/dist/mcp/prompts/onboarding.js +11 -8
- package/dist/mcp/prompts/onboarding.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +2 -0
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/media.d.ts +4 -0
- package/dist/mcp/tools/media.d.ts.map +1 -0
- package/dist/mcp/tools/media.js +138 -0
- package/dist/mcp/tools/media.js.map +1 -0
- package/dist/media-pipeline/actions.d.ts +30 -0
- package/dist/media-pipeline/actions.d.ts.map +1 -0
- package/dist/media-pipeline/actions.js +257 -0
- package/dist/media-pipeline/actions.js.map +1 -0
- package/dist/media-pipeline/client.d.ts +67 -0
- package/dist/media-pipeline/client.d.ts.map +1 -0
- package/dist/media-pipeline/client.js +75 -0
- package/dist/media-pipeline/client.js.map +1 -0
- package/dist/media-pipeline/config.d.ts +17 -0
- package/dist/media-pipeline/config.d.ts.map +1 -0
- package/dist/media-pipeline/config.js +52 -0
- package/dist/media-pipeline/config.js.map +1 -0
- package/dist/media-pipeline/import.d.ts +19 -0
- package/dist/media-pipeline/import.d.ts.map +1 -0
- package/dist/media-pipeline/import.js +198 -0
- package/dist/media-pipeline/import.js.map +1 -0
- package/dist/media-pipeline/index.d.ts +6 -0
- package/dist/media-pipeline/index.d.ts.map +1 -0
- package/dist/media-pipeline/index.js +6 -0
- package/dist/media-pipeline/index.js.map +1 -0
- package/dist/media-pipeline/job-store.d.ts +41 -0
- package/dist/media-pipeline/job-store.d.ts.map +1 -0
- package/dist/media-pipeline/job-store.js +172 -0
- package/dist/media-pipeline/job-store.js.map +1 -0
- package/dist/media-pipeline/limits.d.ts +14 -0
- package/dist/media-pipeline/limits.d.ts.map +1 -0
- package/dist/media-pipeline/limits.js +14 -0
- package/dist/media-pipeline/limits.js.map +1 -0
- package/dist/media-pipeline/log.d.ts +3 -0
- package/dist/media-pipeline/log.d.ts.map +1 -0
- package/dist/media-pipeline/log.js +12 -0
- package/dist/media-pipeline/log.js.map +1 -0
- package/dist/media-pipeline/validate.d.ts +18 -0
- package/dist/media-pipeline/validate.d.ts.map +1 -0
- package/dist/media-pipeline/validate.js +38 -0
- package/dist/media-pipeline/validate.js.map +1 -0
- package/dist/runtime/context.d.ts +5 -0
- package/dist/runtime/context.d.ts.map +1 -1
- package/dist/runtime/context.js.map +1 -1
- package/docs/editor-tasks/media-pipeline-prepare.md +65 -69
- package/package.json +1 -1
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { MediaPipelineClient } from './client.js';
|
|
2
|
+
import type { MediaPipelineConfig } from './config.js';
|
|
3
|
+
import type { MediaPipelineJobStore } from './job-store.js';
|
|
4
|
+
export interface MediaActionContext {
|
|
5
|
+
userId: string;
|
|
6
|
+
projectKey: string;
|
|
7
|
+
config: MediaPipelineConfig | null;
|
|
8
|
+
jobStore: MediaPipelineJobStore | null;
|
|
9
|
+
client: MediaPipelineClient | null;
|
|
10
|
+
}
|
|
11
|
+
export type MediaActionResult = Record<string, unknown>;
|
|
12
|
+
export declare function mediaPrepare(ctx: MediaActionContext, params: {
|
|
13
|
+
driveFolderUrl: string;
|
|
14
|
+
profile?: string;
|
|
15
|
+
ttlHours?: number;
|
|
16
|
+
brief?: string;
|
|
17
|
+
}): Promise<MediaActionResult>;
|
|
18
|
+
export declare function mediaStatus(ctx: MediaActionContext, params: {
|
|
19
|
+
jobId: string;
|
|
20
|
+
}): Promise<MediaActionResult>;
|
|
21
|
+
export declare function mediaCatalog(ctx: MediaActionContext, params: {
|
|
22
|
+
jobId: string;
|
|
23
|
+
}): Promise<MediaActionResult>;
|
|
24
|
+
export type { MediaImportOverride, MediaImportParams } from './import.js';
|
|
25
|
+
export { mediaImport } from './import.js';
|
|
26
|
+
export declare function mediaWait(ctx: MediaActionContext, params: {
|
|
27
|
+
jobId: string;
|
|
28
|
+
waitTimeoutSec?: number;
|
|
29
|
+
}): Promise<MediaActionResult>;
|
|
30
|
+
//# sourceMappingURL=actions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../src/media-pipeline/actions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAA6B,MAAM,aAAa,CAAC;AAElF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,KAAK,EAAmB,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAU7E,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACnC,QAAQ,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACvC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAAC;CACpC;AAED,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAsCxD,wBAAsB,YAAY,CAChC,GAAG,EAAE,kBAAkB,EACvB,MAAM,EAAE;IACN,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACA,OAAO,CAAC,iBAAiB,CAAC,CA0E5B;AAED,wBAAsB,WAAW,CAC/B,GAAG,EAAE,kBAAkB,EACvB,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GACxB,OAAO,CAAC,iBAAiB,CAAC,CA6B5B;AAED,wBAAsB,YAAY,CAChC,GAAG,EAAE,kBAAkB,EACvB,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GACxB,OAAO,CAAC,iBAAiB,CAAC,CAsD5B;AAED,YAAY,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAE1E,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,wBAAsB,SAAS,CAC7B,GAAG,EAAE,kBAAkB,EACvB,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,GACjD,OAAO,CAAC,iBAAiB,CAAC,CAmD5B"}
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
import { MediaPipelineClientError } from './client.js';
|
|
2
|
+
import { mediaPipelineConfiguredMessage } from './config.js';
|
|
3
|
+
import { MediaJobStoreError } from './job-store.js';
|
|
4
|
+
import { mediaPipelineLog } from './log.js';
|
|
5
|
+
import { assertAllowedProfile, clampTtlHours, isPlausibleJobId, parseDriveFolderUrl, } from './validate.js';
|
|
6
|
+
const TERMINAL = new Set(['succeeded', 'partial', 'failed']);
|
|
7
|
+
function ok(data) {
|
|
8
|
+
return { ok: true, ...data };
|
|
9
|
+
}
|
|
10
|
+
function fail(error, code, status, extra) {
|
|
11
|
+
return { ok: false, error, ...(code ? { code } : {}), ...(status ? { status } : {}), ...extra };
|
|
12
|
+
}
|
|
13
|
+
function requireHosted(ctx) {
|
|
14
|
+
if (!ctx.config || !ctx.client) {
|
|
15
|
+
return fail(mediaPipelineConfiguredMessage(), 'pipeline_unconfigured', 503);
|
|
16
|
+
}
|
|
17
|
+
if (!ctx.jobStore) {
|
|
18
|
+
return fail('Media pipeline job store requires hosted Redis (same as staged uploads).', 'store_unavailable', 503);
|
|
19
|
+
}
|
|
20
|
+
if (!ctx.userId) {
|
|
21
|
+
return fail('Media pipeline actions require an authenticated cms-edit user (Contentful OAuth).', 'unauthorized', 401);
|
|
22
|
+
}
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
export async function mediaPrepare(ctx, params) {
|
|
26
|
+
const blocked = requireHosted(ctx);
|
|
27
|
+
if (blocked) {
|
|
28
|
+
return blocked;
|
|
29
|
+
}
|
|
30
|
+
const config = ctx.config;
|
|
31
|
+
const jobStore = ctx.jobStore;
|
|
32
|
+
const client = ctx.client;
|
|
33
|
+
const folder = parseDriveFolderUrl(params.driveFolderUrl);
|
|
34
|
+
if (!folder.ok) {
|
|
35
|
+
return fail(folder.error, 'invalid_input', 400);
|
|
36
|
+
}
|
|
37
|
+
const profile = params.profile?.trim() || config.defaultProfile;
|
|
38
|
+
const profileOk = assertAllowedProfile(profile, config.allowedProfiles);
|
|
39
|
+
if (!profileOk.ok) {
|
|
40
|
+
return fail(profileOk.error, 'invalid_input', 400);
|
|
41
|
+
}
|
|
42
|
+
const ttlHours = clampTtlHours(params.ttlHours, config.defaultTtlHours);
|
|
43
|
+
try {
|
|
44
|
+
await jobStore.assertPrepareRateLimit(ctx.userId, config.preparePerHour);
|
|
45
|
+
await jobStore.assertConcurrentSlot(ctx.userId, config.maxConcurrentPerUser);
|
|
46
|
+
await jobStore.reserveConcurrentSlot(ctx.userId);
|
|
47
|
+
const prepared = await client.prepare({
|
|
48
|
+
profile,
|
|
49
|
+
driveFolderUrl: folder.url,
|
|
50
|
+
ttlHours,
|
|
51
|
+
brief: params.brief,
|
|
52
|
+
});
|
|
53
|
+
const binding = {
|
|
54
|
+
jobId: prepared.jobId,
|
|
55
|
+
userId: ctx.userId,
|
|
56
|
+
projectKey: ctx.projectKey,
|
|
57
|
+
tenant: config.tenant,
|
|
58
|
+
profile,
|
|
59
|
+
folderId: folder.folderId,
|
|
60
|
+
createdAt: Date.now(),
|
|
61
|
+
};
|
|
62
|
+
await jobStore.saveBinding(binding);
|
|
63
|
+
mediaPipelineLog('media.prepare', {
|
|
64
|
+
userId: ctx.userId,
|
|
65
|
+
projectKey: ctx.projectKey,
|
|
66
|
+
tenant: config.tenant,
|
|
67
|
+
jobId: prepared.jobId,
|
|
68
|
+
folderId: folder.folderId,
|
|
69
|
+
profile,
|
|
70
|
+
});
|
|
71
|
+
return ok({
|
|
72
|
+
jobId: prepared.jobId,
|
|
73
|
+
status: prepared.status,
|
|
74
|
+
tenant: config.tenant,
|
|
75
|
+
profile,
|
|
76
|
+
createdAt: prepared.createdAt,
|
|
77
|
+
expiresAt: prepared.expiresAt,
|
|
78
|
+
pollHint: 'Call cms_edit_media action=status or wait with this jobId until succeeded|partial|failed.',
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
// Best-effort: free concurrent slot if we reserved but failed before binding
|
|
83
|
+
try {
|
|
84
|
+
await jobStore.releaseConcurrentSlot(ctx.userId);
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
// ignore
|
|
88
|
+
}
|
|
89
|
+
return mapActionError(err);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
export async function mediaStatus(ctx, params) {
|
|
93
|
+
const blocked = requireHosted(ctx);
|
|
94
|
+
if (blocked) {
|
|
95
|
+
return blocked;
|
|
96
|
+
}
|
|
97
|
+
const jobId = params.jobId?.trim();
|
|
98
|
+
if (!jobId || !isPlausibleJobId(jobId)) {
|
|
99
|
+
return fail('jobId is required and must be a valid media job id.', 'invalid_input', 400);
|
|
100
|
+
}
|
|
101
|
+
try {
|
|
102
|
+
await ctx.jobStore.assertOwned(jobId, ctx.userId);
|
|
103
|
+
const status = await ctx.client.status(jobId);
|
|
104
|
+
await maybeReleaseConcurrent(ctx, jobId, status);
|
|
105
|
+
mediaPipelineLog('media.status', {
|
|
106
|
+
userId: ctx.userId,
|
|
107
|
+
projectKey: ctx.projectKey,
|
|
108
|
+
jobId,
|
|
109
|
+
status: status.status,
|
|
110
|
+
assetCount: status.assets?.length ?? 0,
|
|
111
|
+
gapCount: status.gaps?.length ?? 0,
|
|
112
|
+
});
|
|
113
|
+
return ok(summarizeStatus(status));
|
|
114
|
+
}
|
|
115
|
+
catch (err) {
|
|
116
|
+
return mapActionError(err);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
export async function mediaCatalog(ctx, params) {
|
|
120
|
+
const blocked = requireHosted(ctx);
|
|
121
|
+
if (blocked) {
|
|
122
|
+
return blocked;
|
|
123
|
+
}
|
|
124
|
+
const jobId = params.jobId?.trim();
|
|
125
|
+
if (!jobId || !isPlausibleJobId(jobId)) {
|
|
126
|
+
return fail('jobId is required and must be a valid media job id.', 'invalid_input', 400);
|
|
127
|
+
}
|
|
128
|
+
try {
|
|
129
|
+
await ctx.jobStore.assertOwned(jobId, ctx.userId);
|
|
130
|
+
const status = await ctx.client.status(jobId);
|
|
131
|
+
await maybeReleaseConcurrent(ctx, jobId, status);
|
|
132
|
+
mediaPipelineLog('media.catalog', {
|
|
133
|
+
userId: ctx.userId,
|
|
134
|
+
projectKey: ctx.projectKey,
|
|
135
|
+
jobId,
|
|
136
|
+
status: status.status,
|
|
137
|
+
assetCount: status.assets?.length ?? 0,
|
|
138
|
+
});
|
|
139
|
+
const assets = (status.assets ?? []).map((a) => ({
|
|
140
|
+
id: a.id,
|
|
141
|
+
sourceName: a.sourceName,
|
|
142
|
+
fileName: a.fileName,
|
|
143
|
+
mime: a.mime,
|
|
144
|
+
bytes: a.bytes,
|
|
145
|
+
width: a.width,
|
|
146
|
+
height: a.height,
|
|
147
|
+
role: a.role,
|
|
148
|
+
readyUrl: a.url,
|
|
149
|
+
previewUrl: a.previewUrl ?? null,
|
|
150
|
+
posterUrl: a.posterUrl ?? null,
|
|
151
|
+
altDraft: a.altDraft ?? null,
|
|
152
|
+
titleDraft: a.titleDraft ?? null,
|
|
153
|
+
warnings: a.warnings ?? [],
|
|
154
|
+
}));
|
|
155
|
+
return ok({
|
|
156
|
+
jobId: status.jobId,
|
|
157
|
+
status: status.status,
|
|
158
|
+
profileId: status.profileId,
|
|
159
|
+
createdAt: status.createdAt,
|
|
160
|
+
expiresAt: status.expiresAt,
|
|
161
|
+
assets,
|
|
162
|
+
gaps: status.gaps ?? [],
|
|
163
|
+
note: 'Use previewUrl/posterUrl for naming and alt text. Use readyUrl only for asset upload --url (import).',
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
catch (err) {
|
|
167
|
+
return mapActionError(err);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
// re-export import for single entry
|
|
171
|
+
export { mediaImport } from './import.js';
|
|
172
|
+
export async function mediaWait(ctx, params) {
|
|
173
|
+
const blocked = requireHosted(ctx);
|
|
174
|
+
if (blocked) {
|
|
175
|
+
return blocked;
|
|
176
|
+
}
|
|
177
|
+
const jobId = params.jobId?.trim();
|
|
178
|
+
if (!jobId || !isPlausibleJobId(jobId)) {
|
|
179
|
+
return fail('jobId is required and must be a valid media job id.', 'invalid_input', 400);
|
|
180
|
+
}
|
|
181
|
+
const timeoutSec = Math.min(Math.max(params.waitTimeoutSec ?? 25, 1), 55);
|
|
182
|
+
const deadline = Date.now() + timeoutSec * 1000;
|
|
183
|
+
try {
|
|
184
|
+
await ctx.jobStore.assertOwned(jobId, ctx.userId);
|
|
185
|
+
let last = null;
|
|
186
|
+
while (Date.now() < deadline) {
|
|
187
|
+
last = await ctx.client.status(jobId);
|
|
188
|
+
await maybeReleaseConcurrent(ctx, jobId, last);
|
|
189
|
+
if (TERMINAL.has(String(last.status))) {
|
|
190
|
+
mediaPipelineLog('media.wait', {
|
|
191
|
+
userId: ctx.userId,
|
|
192
|
+
projectKey: ctx.projectKey,
|
|
193
|
+
jobId,
|
|
194
|
+
status: last.status,
|
|
195
|
+
terminal: true,
|
|
196
|
+
});
|
|
197
|
+
return ok({ ...summarizeStatus(last), waited: true, terminal: true });
|
|
198
|
+
}
|
|
199
|
+
await sleep(2000);
|
|
200
|
+
}
|
|
201
|
+
mediaPipelineLog('media.wait', {
|
|
202
|
+
userId: ctx.userId,
|
|
203
|
+
projectKey: ctx.projectKey,
|
|
204
|
+
jobId,
|
|
205
|
+
status: last?.status ?? 'unknown',
|
|
206
|
+
terminal: false,
|
|
207
|
+
});
|
|
208
|
+
return ok({
|
|
209
|
+
...(last ? summarizeStatus(last) : { jobId, status: 'unknown' }),
|
|
210
|
+
waited: true,
|
|
211
|
+
terminal: false,
|
|
212
|
+
note: 'Still running — call wait or status again.',
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
catch (err) {
|
|
216
|
+
return mapActionError(err);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
function summarizeStatus(status) {
|
|
220
|
+
return {
|
|
221
|
+
jobId: status.jobId,
|
|
222
|
+
status: status.status,
|
|
223
|
+
tenant: status.tenant,
|
|
224
|
+
profileId: status.profileId,
|
|
225
|
+
createdAt: status.createdAt,
|
|
226
|
+
expiresAt: status.expiresAt,
|
|
227
|
+
assetCount: status.assets?.length ?? 0,
|
|
228
|
+
gapCount: status.gaps?.length ?? 0,
|
|
229
|
+
gaps: status.gaps ?? [],
|
|
230
|
+
error: status.error,
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
async function maybeReleaseConcurrent(ctx, jobId, status) {
|
|
234
|
+
if (!TERMINAL.has(String(status.status))) {
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
try {
|
|
238
|
+
await ctx.jobStore.markConcurrentReleased(jobId, ctx.userId);
|
|
239
|
+
}
|
|
240
|
+
catch {
|
|
241
|
+
// ignore
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
function mapActionError(err) {
|
|
245
|
+
if (err instanceof MediaJobStoreError) {
|
|
246
|
+
return fail(err.message, err.code, err.status);
|
|
247
|
+
}
|
|
248
|
+
if (err instanceof MediaPipelineClientError) {
|
|
249
|
+
return fail(err.message, err.code, err.status);
|
|
250
|
+
}
|
|
251
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
252
|
+
return fail(message, 'error', 500);
|
|
253
|
+
}
|
|
254
|
+
function sleep(ms) {
|
|
255
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
256
|
+
}
|
|
257
|
+
//# sourceMappingURL=actions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/media-pipeline/actions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { MediaPipelineConfig } from './config.js';
|
|
2
|
+
export type PipelineJobStatus = 'queued' | 'running' | 'succeeded' | 'partial' | 'failed' | string;
|
|
3
|
+
export interface PipelineManifestAsset {
|
|
4
|
+
id: string;
|
|
5
|
+
sourceName: string;
|
|
6
|
+
fileName: string;
|
|
7
|
+
mime: string;
|
|
8
|
+
bytes: number;
|
|
9
|
+
width?: number;
|
|
10
|
+
height?: number;
|
|
11
|
+
role?: string;
|
|
12
|
+
url: string;
|
|
13
|
+
previewUrl?: string;
|
|
14
|
+
posterUrl?: string;
|
|
15
|
+
altDraft?: string;
|
|
16
|
+
titleDraft?: string;
|
|
17
|
+
warnings?: string[];
|
|
18
|
+
}
|
|
19
|
+
export interface PipelineManifestGap {
|
|
20
|
+
sourceName: string;
|
|
21
|
+
reason: string;
|
|
22
|
+
detail: string;
|
|
23
|
+
}
|
|
24
|
+
export interface PipelineJobStatusResponse {
|
|
25
|
+
jobId: string;
|
|
26
|
+
tenant: string;
|
|
27
|
+
status: PipelineJobStatus;
|
|
28
|
+
runId?: string;
|
|
29
|
+
createdAt: string;
|
|
30
|
+
expiresAt: string;
|
|
31
|
+
assets?: PipelineManifestAsset[];
|
|
32
|
+
gaps?: PipelineManifestGap[];
|
|
33
|
+
profileId?: string;
|
|
34
|
+
error?: string;
|
|
35
|
+
manifestUrl?: string;
|
|
36
|
+
reportUrl?: string;
|
|
37
|
+
statusUrl?: string;
|
|
38
|
+
}
|
|
39
|
+
export interface PipelinePrepareResponse {
|
|
40
|
+
jobId: string;
|
|
41
|
+
runId?: string;
|
|
42
|
+
status: PipelineJobStatus;
|
|
43
|
+
tenant: string;
|
|
44
|
+
createdAt: string;
|
|
45
|
+
expiresAt: string;
|
|
46
|
+
statusUrl?: string;
|
|
47
|
+
poll?: string;
|
|
48
|
+
error?: string;
|
|
49
|
+
}
|
|
50
|
+
export declare class MediaPipelineClientError extends Error {
|
|
51
|
+
readonly status: number;
|
|
52
|
+
readonly code?: string | undefined;
|
|
53
|
+
constructor(message: string, status: number, code?: string | undefined);
|
|
54
|
+
}
|
|
55
|
+
export declare class MediaPipelineClient {
|
|
56
|
+
private readonly config;
|
|
57
|
+
constructor(config: MediaPipelineConfig);
|
|
58
|
+
private headers;
|
|
59
|
+
prepare(params: {
|
|
60
|
+
profile: string;
|
|
61
|
+
driveFolderUrl: string;
|
|
62
|
+
ttlHours: number;
|
|
63
|
+
brief?: string;
|
|
64
|
+
}): Promise<PipelinePrepareResponse>;
|
|
65
|
+
status(jobId: string): Promise<PipelineJobStatusResponse>;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/media-pipeline/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEnG,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,iBAAiB,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,qBAAqB,EAAE,CAAC;IACjC,IAAI,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,iBAAiB,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,wBAAyB,SAAQ,KAAK;IAG/C,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM;gBAFtB,OAAO,EAAE,MAAM,EACN,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,YAAA;CAKzB;AAED,qBAAa,mBAAmB;IAClB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,mBAAmB;IAExD,OAAO,CAAC,OAAO;IAQT,OAAO,CAAC,MAAM,EAAE;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IA6B9B,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,CAAC;CAmBhE"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
export class MediaPipelineClientError extends Error {
|
|
2
|
+
status;
|
|
3
|
+
code;
|
|
4
|
+
constructor(message, status, code) {
|
|
5
|
+
super(message);
|
|
6
|
+
this.status = status;
|
|
7
|
+
this.code = code;
|
|
8
|
+
this.name = 'MediaPipelineClientError';
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export class MediaPipelineClient {
|
|
12
|
+
config;
|
|
13
|
+
constructor(config) {
|
|
14
|
+
this.config = config;
|
|
15
|
+
}
|
|
16
|
+
headers() {
|
|
17
|
+
return {
|
|
18
|
+
Authorization: `Bearer ${this.config.serviceKey}`,
|
|
19
|
+
'Content-Type': 'application/json',
|
|
20
|
+
Accept: 'application/json',
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
async prepare(params) {
|
|
24
|
+
const res = await fetch(`${this.config.baseUrl}/api/v1/jobs`, {
|
|
25
|
+
method: 'POST',
|
|
26
|
+
headers: this.headers(),
|
|
27
|
+
body: JSON.stringify({
|
|
28
|
+
tenant: this.config.tenant,
|
|
29
|
+
profile: params.profile,
|
|
30
|
+
source: {
|
|
31
|
+
type: 'google_drive_folder',
|
|
32
|
+
url: params.driveFolderUrl,
|
|
33
|
+
},
|
|
34
|
+
options: {
|
|
35
|
+
ttlHours: params.ttlHours,
|
|
36
|
+
...(params.brief ? { brief: params.brief } : {}),
|
|
37
|
+
},
|
|
38
|
+
}),
|
|
39
|
+
});
|
|
40
|
+
const body = (await res.json().catch(() => ({})));
|
|
41
|
+
if (!res.ok) {
|
|
42
|
+
throw mapPipelineHttpError(res.status, body.error ?? res.statusText);
|
|
43
|
+
}
|
|
44
|
+
return body;
|
|
45
|
+
}
|
|
46
|
+
async status(jobId) {
|
|
47
|
+
const url = new URL(`${this.config.baseUrl}/api/v1/jobs/${encodeURIComponent(jobId)}`);
|
|
48
|
+
url.searchParams.set('tenant', this.config.tenant);
|
|
49
|
+
const res = await fetch(url.toString(), {
|
|
50
|
+
method: 'GET',
|
|
51
|
+
headers: this.headers(),
|
|
52
|
+
});
|
|
53
|
+
const body = (await res.json().catch(() => ({})));
|
|
54
|
+
if (!res.ok) {
|
|
55
|
+
throw mapPipelineHttpError(res.status, body.error ?? res.statusText);
|
|
56
|
+
}
|
|
57
|
+
return body;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function mapPipelineHttpError(status, detail) {
|
|
61
|
+
if (status === 401 || status === 403) {
|
|
62
|
+
return new MediaPipelineClientError('Media pipeline rejected the host service credentials (host misconfiguration). Contact ops — do not ask the user for a pipeline API key.', status, 'pipeline_auth');
|
|
63
|
+
}
|
|
64
|
+
if (status === 404) {
|
|
65
|
+
return new MediaPipelineClientError(detail || 'Media pipeline job not found.', status, 'not_found');
|
|
66
|
+
}
|
|
67
|
+
if (status === 429) {
|
|
68
|
+
return new MediaPipelineClientError(detail || 'Media pipeline rate limited the host.', status, 'rate_limited');
|
|
69
|
+
}
|
|
70
|
+
if (status >= 500) {
|
|
71
|
+
return new MediaPipelineClientError(detail || 'Media pipeline is unavailable.', status, 'pipeline_unavailable');
|
|
72
|
+
}
|
|
73
|
+
return new MediaPipelineClientError(detail || `Media pipeline error (${String(status)})`, status);
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/media-pipeline/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface MediaPipelineConfig {
|
|
2
|
+
baseUrl: string;
|
|
3
|
+
serviceKey: string;
|
|
4
|
+
tenant: string;
|
|
5
|
+
defaultProfile: string;
|
|
6
|
+
allowedProfiles: string[];
|
|
7
|
+
preparePerHour: number;
|
|
8
|
+
maxConcurrentPerUser: number;
|
|
9
|
+
defaultTtlHours: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Load media-pipeline facade config from process env.
|
|
13
|
+
* Returns null when the host is not configured (do not ask agents for keys).
|
|
14
|
+
*/
|
|
15
|
+
export declare function loadMediaPipelineConfig(envSource?: NodeJS.ProcessEnv): MediaPipelineConfig | null;
|
|
16
|
+
export declare function mediaPipelineConfiguredMessage(): string;
|
|
17
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/media-pipeline/config.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,eAAe,EAAE,MAAM,CAAC;CACzB;AAyBD;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,GAAE,MAAM,CAAC,UAAwB,GACzC,mBAAmB,GAAG,IAAI,CAgC5B;AAED,wBAAgB,8BAA8B,IAAI,MAAM,CAMvD"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { MEDIA_DEFAULT_ALLOWED_PROFILES, MEDIA_DEFAULT_TTL_HOURS, MEDIA_MAX_CONCURRENT_JOBS_PER_USER, MEDIA_PREPARE_RATE_LIMIT_PER_HOUR, } from './limits.js';
|
|
2
|
+
function parsePositiveInt(value, fallback) {
|
|
3
|
+
if (!value) {
|
|
4
|
+
return fallback;
|
|
5
|
+
}
|
|
6
|
+
const n = Number.parseInt(value, 10);
|
|
7
|
+
return Number.isFinite(n) && n > 0 ? n : fallback;
|
|
8
|
+
}
|
|
9
|
+
function parseAllowedProfiles(value, defaultProfile) {
|
|
10
|
+
if (!value?.trim()) {
|
|
11
|
+
const set = new Set([...MEDIA_DEFAULT_ALLOWED_PROFILES, defaultProfile]);
|
|
12
|
+
return [...set];
|
|
13
|
+
}
|
|
14
|
+
const list = value
|
|
15
|
+
.split(',')
|
|
16
|
+
.map((s) => s.trim())
|
|
17
|
+
.filter(Boolean);
|
|
18
|
+
if (!list.includes(defaultProfile)) {
|
|
19
|
+
list.push(defaultProfile);
|
|
20
|
+
}
|
|
21
|
+
return list;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Load media-pipeline facade config from process env.
|
|
25
|
+
* Returns null when the host is not configured (do not ask agents for keys).
|
|
26
|
+
*/
|
|
27
|
+
export function loadMediaPipelineConfig(envSource = process.env) {
|
|
28
|
+
const get = (name) => envSource[name]?.trim() || undefined;
|
|
29
|
+
const baseUrl = get('MEDIA_PIPELINE_BASE_URL')?.replace(/\/$/, '');
|
|
30
|
+
const serviceKey = get('MEDIA_PIPELINE_SERVICE_KEY') ?? get('MEDIA_PIPELINE_API_KEY');
|
|
31
|
+
const tenant = get('MEDIA_PIPELINE_TENANT');
|
|
32
|
+
if (!baseUrl || !serviceKey || !tenant) {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
const defaultProfile = get('MEDIA_PIPELINE_DEFAULT_PROFILE') ?? 'case-study-v1';
|
|
36
|
+
return {
|
|
37
|
+
baseUrl,
|
|
38
|
+
serviceKey,
|
|
39
|
+
tenant,
|
|
40
|
+
defaultProfile,
|
|
41
|
+
allowedProfiles: parseAllowedProfiles(get('MEDIA_PIPELINE_ALLOWED_PROFILES'), defaultProfile),
|
|
42
|
+
preparePerHour: parsePositiveInt(get('MEDIA_PIPELINE_MAX_PREPARE_PER_HOUR'), MEDIA_PREPARE_RATE_LIMIT_PER_HOUR),
|
|
43
|
+
maxConcurrentPerUser: parsePositiveInt(get('MEDIA_PIPELINE_MAX_CONCURRENT_USER'), MEDIA_MAX_CONCURRENT_JOBS_PER_USER),
|
|
44
|
+
defaultTtlHours: parsePositiveInt(get('MEDIA_PIPELINE_DEFAULT_TTL_HOURS'), MEDIA_DEFAULT_TTL_HOURS),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
export function mediaPipelineConfiguredMessage() {
|
|
48
|
+
return ('Media pipeline is not configured on this cms-edit host. ' +
|
|
49
|
+
'Ops must set MEDIA_PIPELINE_BASE_URL, MEDIA_PIPELINE_SERVICE_KEY, and MEDIA_PIPELINE_TENANT. ' +
|
|
50
|
+
'Agents do not need (and must not be given) a pipeline API key.');
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/media-pipeline/config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,8BAA8B,EAC9B,uBAAuB,EACvB,kCAAkC,EAClC,iCAAiC,GAClC,MAAM,aAAa,CAAC;AAarB,SAAS,gBAAgB,CAAC,KAAyB,EAAE,QAAgB;IACnE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACrC,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AACpD,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAyB,EAAE,cAAsB;IAC7E,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;QACnB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAS,CAAC,GAAG,8BAA8B,EAAE,cAAc,CAAC,CAAC,CAAC;QACjF,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,IAAI,GAAG,KAAK;SACf,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,OAAO,CAAC,CAAC;IACnB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CACrC,YAA+B,OAAO,CAAC,GAAG;IAE1C,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;IAEnE,MAAM,OAAO,GAAG,GAAG,CAAC,yBAAyB,CAAC,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACnE,MAAM,UAAU,GAAG,GAAG,CAAC,4BAA4B,CAAC,IAAI,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACtF,MAAM,MAAM,GAAG,GAAG,CAAC,uBAAuB,CAAC,CAAC;IAE5C,IAAI,CAAC,OAAO,IAAI,CAAC,UAAU,IAAI,CAAC,MAAM,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,cAAc,GAAG,GAAG,CAAC,gCAAgC,CAAC,IAAI,eAAe,CAAC;IAEhF,OAAO;QACL,OAAO;QACP,UAAU;QACV,MAAM;QACN,cAAc;QACd,eAAe,EAAE,oBAAoB,CAAC,GAAG,CAAC,iCAAiC,CAAC,EAAE,cAAc,CAAC;QAC7F,cAAc,EAAE,gBAAgB,CAC9B,GAAG,CAAC,qCAAqC,CAAC,EAC1C,iCAAiC,CAClC;QACD,oBAAoB,EAAE,gBAAgB,CACpC,GAAG,CAAC,oCAAoC,CAAC,EACzC,kCAAkC,CACnC;QACD,eAAe,EAAE,gBAAgB,CAC/B,GAAG,CAAC,kCAAkC,CAAC,EACvC,uBAAuB,CACxB;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,8BAA8B;IAC5C,OAAO,CACL,0DAA0D;QAC1D,+FAA+F;QAC/F,gEAAgE,CACjE,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { MediaActionContext } from './actions.js';
|
|
2
|
+
export interface MediaImportOverride {
|
|
3
|
+
sourceName: string;
|
|
4
|
+
title?: string;
|
|
5
|
+
alt?: string;
|
|
6
|
+
fileName?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface MediaImportParams {
|
|
9
|
+
jobId: string;
|
|
10
|
+
dryRun?: boolean;
|
|
11
|
+
withMedia?: boolean;
|
|
12
|
+
overrides?: MediaImportOverride[];
|
|
13
|
+
}
|
|
14
|
+
export type MediaImportResult = Record<string, unknown>;
|
|
15
|
+
/**
|
|
16
|
+
* Reuse-first import of pipeline-ready assets into Contentful via the authenticated cms-edit user.
|
|
17
|
+
*/
|
|
18
|
+
export declare function mediaImport(ctx: MediaActionContext, params: MediaImportParams): Promise<MediaImportResult>;
|
|
19
|
+
//# sourceMappingURL=import.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../src/media-pipeline/import.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAOvD,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,mBAAmB,EAAE,CAAC;CACnC;AAED,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAqBxD;;GAEG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,kBAAkB,EACvB,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,iBAAiB,CAAC,CA6G5B"}
|