@se-studio/contentful-cms 3.10.3 → 3.11.1
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 +12 -0
- package/README.md +1 -1
- package/dist/cli/hosted-inline-limit.d.ts +4 -0
- package/dist/cli/hosted-inline-limit.d.ts.map +1 -0
- package/dist/cli/hosted-inline-limit.js +15 -0
- package/dist/cli/hosted-inline-limit.js.map +1 -0
- package/dist/cli/read-json-input.d.ts +16 -1
- package/dist/cli/read-json-input.d.ts.map +1 -1
- package/dist/cli/read-json-input.js +100 -12
- package/dist/cli/read-json-input.js.map +1 -1
- package/dist/commands/apply-from-json.d.ts.map +1 -1
- package/dist/commands/apply-from-json.js +10 -3
- package/dist/commands/apply-from-json.js.map +1 -1
- package/dist/commands/article-tags-from-json.d.ts.map +1 -1
- package/dist/commands/article-tags-from-json.js +12 -3
- package/dist/commands/article-tags-from-json.js.map +1 -1
- package/dist/commands/asset.d.ts.map +1 -1
- package/dist/commands/asset.js +2 -0
- package/dist/commands/asset.js.map +1 -1
- package/dist/commands/create-from-json.d.ts.map +1 -1
- package/dist/commands/create-from-json.js +16 -4
- package/dist/commands/create-from-json.js.map +1 -1
- package/dist/commands/create-person-from-json.d.ts.map +1 -1
- package/dist/commands/create-person-from-json.js +12 -3
- package/dist/commands/create-person-from-json.js.map +1 -1
- package/dist/commands/create-person.d.ts.map +1 -1
- package/dist/commands/create-person.js +20 -5
- package/dist/commands/create-person.js.map +1 -1
- package/dist/commands/create-taxonomy-from-json.d.ts.map +1 -1
- package/dist/commands/create-taxonomy-from-json.js +12 -3
- package/dist/commands/create-taxonomy-from-json.js.map +1 -1
- package/dist/commands/create-taxonomy.d.ts.map +1 -1
- package/dist/commands/create-taxonomy.js +28 -8
- package/dist/commands/create-taxonomy.js.map +1 -1
- package/dist/commands/host-scaffold.d.ts +1 -0
- package/dist/commands/host-scaffold.d.ts.map +1 -1
- package/dist/commands/host-scaffold.js +4 -2
- package/dist/commands/host-scaffold.js.map +1 -1
- package/dist/commands/open.d.ts.map +1 -1
- package/dist/commands/open.js +9 -3
- package/dist/commands/open.js.map +1 -1
- package/dist/commands/project.d.ts.map +1 -1
- package/dist/commands/project.js +2 -0
- package/dist/commands/project.js.map +1 -1
- package/dist/commands/read.d.ts.map +1 -1
- package/dist/commands/read.js +3 -0
- package/dist/commands/read.js.map +1 -1
- package/dist/commands/rtf.d.ts.map +1 -1
- package/dist/commands/rtf.js +20 -8
- package/dist/commands/rtf.js.map +1 -1
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +12 -3
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/session-diff.d.ts.map +1 -1
- package/dist/commands/session-diff.js +13 -0
- package/dist/commands/session-diff.js.map +1 -1
- package/dist/commands/set.d.ts.map +1 -1
- package/dist/commands/set.js +78 -38
- package/dist/commands/set.js.map +1 -1
- package/dist/commands/staged-upload.d.ts.map +1 -1
- package/dist/commands/staged-upload.js +2 -0
- package/dist/commands/staged-upload.js.map +1 -1
- package/dist/contentful/cma-user-agent.d.ts +1 -1
- package/dist/diff/long-text.d.ts +24 -0
- package/dist/diff/long-text.d.ts.map +1 -0
- package/dist/diff/long-text.js +65 -0
- package/dist/diff/long-text.js.map +1 -0
- package/dist/generated/help-topics.d.ts.map +1 -1
- package/dist/generated/help-topics.js +1 -1
- package/dist/generated/help-topics.js.map +1 -1
- package/dist/generated/hosted-guide.d.ts +1 -1
- package/dist/generated/hosted-guide.d.ts.map +1 -1
- package/dist/generated/hosted-guide.js +1 -1
- package/dist/generated/hosted-guide.js.map +1 -1
- package/dist/generated/version.d.ts +1 -1
- package/dist/generated/version.js +1 -1
- package/dist/mcp/tools/cms-edit.d.ts +1 -1
- package/dist/mcp/tools/cms-edit.d.ts.map +1 -1
- package/dist/mcp/tools/cms-edit.js +18 -10
- package/dist/mcp/tools/cms-edit.js.map +1 -1
- package/dist/mcp/tools/staged-upload.d.ts.map +1 -1
- package/dist/mcp/tools/staged-upload.js +27 -10
- package/dist/mcp/tools/staged-upload.js.map +1 -1
- package/dist/media-pipeline/prepare-source.d.ts.map +1 -1
- package/dist/media-pipeline/prepare-source.js +2 -0
- package/dist/media-pipeline/prepare-source.js.map +1 -1
- package/dist/preview/entry-urls.d.ts.map +1 -1
- package/dist/preview/entry-urls.js +8 -6
- package/dist/preview/entry-urls.js.map +1 -1
- package/dist/project/doctor.d.ts.map +1 -1
- package/dist/project/doctor.js +11 -0
- package/dist/project/doctor.js.map +1 -1
- package/dist/project/validate-staged-upload-route.d.ts +6 -0
- package/dist/project/validate-staged-upload-route.d.ts.map +1 -0
- package/dist/project/validate-staged-upload-route.js +47 -0
- package/dist/project/validate-staged-upload-route.js.map +1 -0
- package/dist/rtf/resolveRtfInput.d.ts +7 -2
- package/dist/rtf/resolveRtfInput.d.ts.map +1 -1
- package/dist/rtf/resolveRtfInput.js +49 -7
- package/dist/rtf/resolveRtfInput.js.map +1 -1
- package/dist/session/dirty.js +3 -3
- package/dist/session/dirty.js.map +1 -1
- package/dist/snapshot/fields.d.ts +1 -0
- package/dist/snapshot/fields.d.ts.map +1 -1
- package/dist/snapshot/fields.js +23 -0
- package/dist/snapshot/fields.js.map +1 -1
- package/dist/staged-upload/consume-text.d.ts +11 -0
- package/dist/staged-upload/consume-text.d.ts.map +1 -0
- package/dist/staged-upload/consume-text.js +55 -0
- package/dist/staged-upload/consume-text.js.map +1 -0
- package/dist/staged-upload/mime.d.ts +9 -1
- package/dist/staged-upload/mime.d.ts.map +1 -1
- package/dist/staged-upload/mime.js +52 -3
- package/dist/staged-upload/mime.js.map +1 -1
- package/dist/staged-upload/request.d.ts +2 -0
- package/dist/staged-upload/request.d.ts.map +1 -1
- package/dist/staged-upload/request.js +24 -12
- package/dist/staged-upload/request.js.map +1 -1
- package/dist/staged-upload/store.d.ts +2 -0
- package/dist/staged-upload/store.d.ts.map +1 -1
- package/dist/staged-upload/store.js +13 -7
- package/dist/staged-upload/store.js.map +1 -1
- package/dist/staged-upload/types.d.ts +4 -0
- package/dist/staged-upload/types.d.ts.map +1 -1
- package/docs/editor-tasks/create-html-component.md +15 -5
- package/docs/editor-tasks/preview-verify.md +6 -5
- package/docs/help/create-from-json.md +7 -4
- package/docs/help/fields-html-component.md +11 -1
- package/docs/help/index.md +1 -1
- package/docs/help/workflow.md +1 -1
- package/docs/mcp/hosted-guide.md +13 -11
- package/package.json +1 -1
- package/skills/core/SKILL.md +4 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entry-urls.js","sourceRoot":"","sources":["../../src/preview/entry-urls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAoCxD,uEAAuE;AACvE,MAAM,iBAAiB,GAAuB;IAC5C,uBAAuB;IACvB,SAAS;IACT,iBAAiB;IACjB,YAAY;IACZ,iBAAiB;CAClB,CAAC;AAEF,MAAM,UAAU,qBAAqB,CAAC,OAA2B;IAC/D,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CACtB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CACpF,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAW;IACnC,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IAClD,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,OAAe,EACf,WAAmB,EACnB,OAAe,EACf,OAAmC;IAEnC,MAAM,IAAI,GAAG,qCAAqC,OAAO,iBAAiB,WAAW,YAAY,OAAO,EAAE,CAAC;IAC3G,IAAI,OAAO,EAAE,YAAY,EAAE,CAAC;QAC1B,OAAO,GAAG,IAAI,iBAAiB,kBAAkB,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;IAC5E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,OAAe,EACf,WAAmB,EACnB,OAAe,EACf,eAAuB;IAEvB,MAAM,QAAQ,GAAG,qCAAqC,OAAO,iBAAiB,WAAW,YAAY,OAAO,UAAU,CAAC;IACvH,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;YAChC,OAAO,EAAE,eAAe,CAAC,eAAe,CAAC;SAC1C,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,IAAI,QAAQ,GAAG,EAAE,CAAC;YAClB,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;gBAC9B,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAChC,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YACD,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,UAAU,EAAE,GAAG,CAAC,MAAM;gBACtB,iBAAiB,EACf,8CAA8C,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"entry-urls.js","sourceRoot":"","sources":["../../src/preview/entry-urls.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/project/doctor.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/project/doctor.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAOjD,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAE1D,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,cAAc,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAiDD,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,aAAa,EAAE,CAmJ7F"}
|
package/dist/project/doctor.js
CHANGED
|
@@ -4,6 +4,7 @@ import { hasSiteHandbook } from '../editor-pack/capabilities.js';
|
|
|
4
4
|
import { loadEditorPackManifest } from '../editor-pack/load.js';
|
|
5
5
|
import { parseConstants } from '../editor-pack/parse-constants.js';
|
|
6
6
|
import { resolveRepoRoot, resolveWebsiteAppDir } from './load.js';
|
|
7
|
+
import { findStagedUploadRouteFiles, stagedUploadGetMissingError, stagedUploadRouteExportsGet, } from './validate-staged-upload-route.js';
|
|
7
8
|
function findArticlesPlaybook(repoRoot, projectKey) {
|
|
8
9
|
const candidates = [
|
|
9
10
|
path.join(repoRoot, 'docs', 'cms-editor', projectKey, 'ARTICLES.md'),
|
|
@@ -64,6 +65,16 @@ export function runProjectDoctor(configPath, project) {
|
|
|
64
65
|
}
|
|
65
66
|
const repoRoot = resolveRepoRoot(resolvedConfig, project.website.appDir);
|
|
66
67
|
const appDir = resolveWebsiteAppDir(resolvedConfig, project.website.appDir);
|
|
68
|
+
for (const routePath of findStagedUploadRouteFiles(resolvedConfig, project)) {
|
|
69
|
+
const source = fs.readFileSync(routePath, 'utf8');
|
|
70
|
+
if (!stagedUploadRouteExportsGet(source)) {
|
|
71
|
+
findings.push({
|
|
72
|
+
severity: 'error',
|
|
73
|
+
code: 'staged_upload_get_missing',
|
|
74
|
+
message: stagedUploadGetMissingError(routePath),
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
67
78
|
const manifest = loadEditorPackManifest(packDir);
|
|
68
79
|
if (!manifest) {
|
|
69
80
|
findings.push({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/project/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/project/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { CmsEditProject } from './types.js';
|
|
2
|
+
export declare function stagedUploadRouteExportsGet(source: string): boolean;
|
|
3
|
+
export declare function stagedUploadGetMissingError(routePath: string): string;
|
|
4
|
+
export declare function findStagedUploadRouteFiles(configPath: string, project: CmsEditProject): string[];
|
|
5
|
+
export declare function assertStagedUploadHostRoutes(configPath: string, project: CmsEditProject): void;
|
|
6
|
+
//# sourceMappingURL=validate-staged-upload-route.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-staged-upload-route.d.ts","sourceRoot":"","sources":["../../src/project/validate-staged-upload-route.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAIjD,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEnE;AAED,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAMrE;AAED,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,MAAM,EAAE,CAqChG;AAED,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAO9F"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import * as fs from 'node:fs';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import { resolveRepoRoot } from './load.js';
|
|
4
|
+
const GET_AND_POST_EXPORT = /export\s*\{\s*GET\s*,\s*POST\s*\}/;
|
|
5
|
+
export function stagedUploadRouteExportsGet(source) {
|
|
6
|
+
return GET_AND_POST_EXPORT.test(source);
|
|
7
|
+
}
|
|
8
|
+
export function stagedUploadGetMissingError(routePath) {
|
|
9
|
+
return (`${routePath} must re-export GET and POST from ` +
|
|
10
|
+
`'@se-studio/contentful-cms/hosted/next/routes/staged-upload'. ` +
|
|
11
|
+
'POST-only hosts return 405 on media-pipeline signed downloads.');
|
|
12
|
+
}
|
|
13
|
+
export function findStagedUploadRouteFiles(configPath, project) {
|
|
14
|
+
const resolved = path.resolve(configPath);
|
|
15
|
+
const configDir = path.dirname(resolved);
|
|
16
|
+
const candidates = [
|
|
17
|
+
path.join(configDir, 'host', 'src', 'app', 'api', 'staged-upload', 'route.ts'),
|
|
18
|
+
path.join(configDir, '..', 'host', 'src', 'app', 'api', 'staged-upload', 'route.ts'),
|
|
19
|
+
];
|
|
20
|
+
try {
|
|
21
|
+
const repoRoot = resolveRepoRoot(resolved, project.website.appDir);
|
|
22
|
+
candidates.push(path.join(repoRoot, 'cms-edit', 'host', 'src', 'app', 'api', 'staged-upload', 'route.ts'), path.join(repoRoot, 'apps', 'cms-edit-host', 'src', 'app', 'api', 'staged-upload', 'route.ts'));
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
// Config may sit in a fixture without a full website appDir.
|
|
26
|
+
}
|
|
27
|
+
const existing = [];
|
|
28
|
+
const seen = new Set();
|
|
29
|
+
for (const candidate of candidates) {
|
|
30
|
+
const normalized = path.normalize(candidate);
|
|
31
|
+
if (seen.has(normalized) || !fs.existsSync(normalized)) {
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
seen.add(normalized);
|
|
35
|
+
existing.push(normalized);
|
|
36
|
+
}
|
|
37
|
+
return existing;
|
|
38
|
+
}
|
|
39
|
+
export function assertStagedUploadHostRoutes(configPath, project) {
|
|
40
|
+
for (const routePath of findStagedUploadRouteFiles(configPath, project)) {
|
|
41
|
+
const source = fs.readFileSync(routePath, 'utf8');
|
|
42
|
+
if (!stagedUploadRouteExportsGet(source)) {
|
|
43
|
+
throw new Error(stagedUploadGetMissingError(routePath));
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=validate-staged-upload-route.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-staged-upload-route.js","sourceRoot":"","sources":["../../src/project/validate-staged-upload-route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAG5C,MAAM,mBAAmB,GAAG,mCAAmC,CAAC;AAEhE,MAAM,UAAU,2BAA2B,CAAC,MAAc;IACxD,OAAO,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,SAAiB;IAC3D,OAAO,CACL,GAAG,SAAS,oCAAoC;QAChD,gEAAgE;QAChE,gEAAgE,CACjE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,UAAkB,EAAE,OAAuB;IACpF,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,UAAU,GAAG;QACjB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,UAAU,CAAC;QAC9E,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,UAAU,CAAC;KACrF,CAAC;IACF,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACnE,UAAU,CAAC,IAAI,CACb,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,UAAU,CAAC,EACzF,IAAI,CAAC,IAAI,CACP,QAAQ,EACR,MAAM,EACN,eAAe,EACf,KAAK,EACL,KAAK,EACL,KAAK,EACL,eAAe,EACf,UAAU,CACX,CACF,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,6DAA6D;IAC/D,CAAC;IAED,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACvD,SAAS;QACX,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACrB,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,UAAkB,EAAE,OAAuB;IACtF,KAAK,MAAM,SAAS,IAAI,0BAA0B,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC;QACxE,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAClD,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,SAAS,CAAC,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import type { RtfInputFormat } from './types.js';
|
|
2
|
+
export interface ResolvedRtfInput {
|
|
3
|
+
raw: string;
|
|
4
|
+
consumeStaged: (() => Promise<void>) | null;
|
|
5
|
+
}
|
|
2
6
|
/**
|
|
3
7
|
* Resolves raw string input for `cms-edit rtf` from CLI arguments (any format).
|
|
4
|
-
* Precedence: `--base64` → `--content` → positional arg.
|
|
8
|
+
* Precedence: `--staged` (exclusive) → `--base64` → `--content` → positional arg.
|
|
9
|
+
* Hosted MCP applies the 8k inline cap to --content/--base64/positional.
|
|
5
10
|
*/
|
|
6
|
-
export declare function resolveRtfInput(
|
|
11
|
+
export declare function resolveRtfInput(format: RtfInputFormat, inputArg: string | undefined, content?: string, base64?: string, staged?: string): Promise<ResolvedRtfInput>;
|
|
7
12
|
/**
|
|
8
13
|
* @deprecated Use {@link resolveRtfInput} with format `'markdown'`.
|
|
9
14
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveRtfInput.d.ts","sourceRoot":"","sources":["../../src/rtf/resolveRtfInput.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resolveRtfInput.d.ts","sourceRoot":"","sources":["../../src/rtf/resolveRtfInput.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;CAC7C;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,OAAO,CAAC,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,gBAAgB,CAAC,CAsD3B;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,OAAO,CAAC,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CAGjB"}
|
|
@@ -1,23 +1,65 @@
|
|
|
1
|
+
import { readTextInput } from '../cli/read-json-input.js';
|
|
2
|
+
import { consumeStagedUpload, peekStagedUtf8 } from '../staged-upload/consume-text.js';
|
|
1
3
|
/**
|
|
2
4
|
* Resolves raw string input for `cms-edit rtf` from CLI arguments (any format).
|
|
3
|
-
* Precedence: `--base64` → `--content` → positional arg.
|
|
5
|
+
* Precedence: `--staged` (exclusive) → `--base64` → `--content` → positional arg.
|
|
6
|
+
* Hosted MCP applies the 8k inline cap to --content/--base64/positional.
|
|
4
7
|
*/
|
|
5
|
-
export async function resolveRtfInput(
|
|
8
|
+
export async function resolveRtfInput(format, inputArg, content, base64, staged) {
|
|
9
|
+
if (staged) {
|
|
10
|
+
if ((inputArg !== undefined && inputArg !== '') ||
|
|
11
|
+
(content !== undefined && content !== '') ||
|
|
12
|
+
(base64 !== undefined && base64 !== '')) {
|
|
13
|
+
throw new Error('Cannot combine --staged with positional content, --content, or --base64.');
|
|
14
|
+
}
|
|
15
|
+
const peeked = await peekStagedUtf8(staged, format === 'json' ? ['json'] : ['text']);
|
|
16
|
+
return {
|
|
17
|
+
raw: peeked.text,
|
|
18
|
+
consumeStaged: async () => {
|
|
19
|
+
await consumeStagedUpload(staged);
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
}
|
|
6
23
|
if (base64) {
|
|
7
|
-
return
|
|
24
|
+
return {
|
|
25
|
+
raw: readTextInput({
|
|
26
|
+
base64,
|
|
27
|
+
contentFlag: '--content',
|
|
28
|
+
base64Flag: '--base64',
|
|
29
|
+
label: 'rtf',
|
|
30
|
+
}),
|
|
31
|
+
consumeStaged: null,
|
|
32
|
+
};
|
|
8
33
|
}
|
|
9
34
|
if (content !== undefined && content !== '') {
|
|
10
|
-
return
|
|
35
|
+
return {
|
|
36
|
+
raw: readTextInput({
|
|
37
|
+
content,
|
|
38
|
+
contentFlag: '--content',
|
|
39
|
+
base64Flag: '--base64',
|
|
40
|
+
label: 'rtf',
|
|
41
|
+
}),
|
|
42
|
+
consumeStaged: null,
|
|
43
|
+
};
|
|
11
44
|
}
|
|
12
45
|
if (inputArg !== undefined && inputArg !== '') {
|
|
13
|
-
return
|
|
46
|
+
return {
|
|
47
|
+
raw: readTextInput({
|
|
48
|
+
content: inputArg,
|
|
49
|
+
contentFlag: 'positional content',
|
|
50
|
+
base64Flag: '--base64',
|
|
51
|
+
label: 'rtf',
|
|
52
|
+
}),
|
|
53
|
+
consumeStaged: null,
|
|
54
|
+
};
|
|
14
55
|
}
|
|
15
|
-
throw new Error('Provide content as: positional arg, --content <string>, or --
|
|
56
|
+
throw new Error('Provide content as: positional arg, --content <string>, --base64 <encoded>, or --staged <id>.');
|
|
16
57
|
}
|
|
17
58
|
/**
|
|
18
59
|
* @deprecated Use {@link resolveRtfInput} with format `'markdown'`.
|
|
19
60
|
*/
|
|
20
61
|
export async function resolveMarkdownInput(markdownArg, content, base64) {
|
|
21
|
-
|
|
62
|
+
const resolved = await resolveRtfInput('markdown', markdownArg, content, base64);
|
|
63
|
+
return resolved.raw;
|
|
22
64
|
}
|
|
23
65
|
//# sourceMappingURL=resolveRtfInput.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveRtfInput.js","sourceRoot":"","sources":["../../src/rtf/resolveRtfInput.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resolveRtfInput.js","sourceRoot":"","sources":["../../src/rtf/resolveRtfInput.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAQvF;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAsB,EACtB,QAA4B,EAC5B,OAAgB,EAChB,MAAe,EACf,MAAe;IAEf,IAAI,MAAM,EAAE,CAAC;QACX,IACE,CAAC,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,EAAE,CAAC;YAC3C,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE,CAAC;YACzC,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,EAAE,CAAC,EACvC,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;QAC9F,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACrF,OAAO;YACL,GAAG,EAAE,MAAM,CAAC,IAAI;YAChB,aAAa,EAAE,KAAK,IAAI,EAAE;gBACxB,MAAM,mBAAmB,CAAC,MAAM,CAAC,CAAC;YACpC,CAAC;SACF,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,OAAO;YACL,GAAG,EAAE,aAAa,CAAC;gBACjB,MAAM;gBACN,WAAW,EAAE,WAAW;gBACxB,UAAU,EAAE,UAAU;gBACtB,KAAK,EAAE,KAAK;aACb,CAAC;YACF,aAAa,EAAE,IAAI;SACpB,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;QAC5C,OAAO;YACL,GAAG,EAAE,aAAa,CAAC;gBACjB,OAAO;gBACP,WAAW,EAAE,WAAW;gBACxB,UAAU,EAAE,UAAU;gBACtB,KAAK,EAAE,KAAK;aACb,CAAC;YACF,aAAa,EAAE,IAAI;SACpB,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;QAC9C,OAAO;YACL,GAAG,EAAE,aAAa,CAAC;gBACjB,OAAO,EAAE,QAAQ;gBACjB,WAAW,EAAE,oBAAoB;gBACjC,UAAU,EAAE,UAAU;gBACtB,KAAK,EAAE,KAAK;aACb,CAAC;YACF,aAAa,EAAE,IAAI;SACpB,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,KAAK,CACb,+FAA+F,CAChG,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,WAA+B,EAC/B,OAAgB,EAChB,MAAe;IAEf,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACjF,OAAO,QAAQ,CAAC,GAAG,CAAC;AACtB,CAAC"}
|
package/dist/session/dirty.js
CHANGED
|
@@ -15,7 +15,7 @@ export function formatDirtyOpenError(session) {
|
|
|
15
15
|
'cms-edit diff',
|
|
16
16
|
'cms-edit save',
|
|
17
17
|
'cms-edit discard',
|
|
18
|
-
'cms-edit open --overwrite --id <entryId>',
|
|
18
|
+
'cms-edit open --overwrite --confirm-discard --id <entryId>',
|
|
19
19
|
];
|
|
20
20
|
const message = [
|
|
21
21
|
`Cannot open: session has ${unsavedChanges} unsaved entry change(s) and ${pendingDeletions} pending deletion(s).`,
|
|
@@ -25,9 +25,9 @@ export function formatDirtyOpenError(session) {
|
|
|
25
25
|
' Review changes: cms-edit diff',
|
|
26
26
|
' Save drafts: cms-edit save',
|
|
27
27
|
' Abandon all staged: cms-edit discard',
|
|
28
|
-
' Abandon and open new: cms-edit open --overwrite --id <entryId>',
|
|
28
|
+
' Abandon and open new: cms-edit open --overwrite --confirm-discard --id <entryId>',
|
|
29
29
|
'',
|
|
30
|
-
'Do not re-run open without --overwrite while changes are staged — that previously wiped session field edits.',
|
|
30
|
+
'Do not re-run open without --overwrite --confirm-discard while changes are staged — that previously wiped session field edits.',
|
|
31
31
|
].join('\n');
|
|
32
32
|
return {
|
|
33
33
|
message,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dirty.js","sourceRoot":"","sources":["../../src/session/dirty.ts"],"names":[],"mappings":"AAEA,yEAAyE;AACzE,MAAM,UAAU,cAAc,CAAC,OAAqB;IAClD,OAAO,OAAO,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;AACpF,CAAC;AAgBD;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAqB;IACxD,MAAM,cAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC;IACvD,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC;IACzD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IACxC,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IAE5C,MAAM,OAAO,GAAG;QACd,wBAAwB;QACxB,eAAe;QACf,eAAe;QACf,kBAAkB;QAClB,
|
|
1
|
+
{"version":3,"file":"dirty.js","sourceRoot":"","sources":["../../src/session/dirty.ts"],"names":[],"mappings":"AAEA,yEAAyE;AACzE,MAAM,UAAU,cAAc,CAAC,OAAqB;IAClD,OAAO,OAAO,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;AACpF,CAAC;AAgBD;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAqB;IACxD,MAAM,cAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC;IACvD,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC;IACzD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IACxC,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IAE5C,MAAM,OAAO,GAAG;QACd,wBAAwB;QACxB,eAAe;QACf,eAAe;QACf,kBAAkB;QAClB,4DAA4D;KAC7D,CAAC;IAEF,MAAM,OAAO,GAAG;QACd,4BAA4B,cAAc,gCAAgC,gBAAgB,uBAAuB;QACjH,SAAS,WAAW,KAAK,aAAa,mDAAmD;QACzF,EAAE;QACF,kDAAkD;QAClD,yCAAyC;QACzC,yCAAyC;QACzC,4CAA4C;QAC5C,sFAAsF;QACtF,EAAE;QACF,gIAAgI;KACjI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,OAAO;QACL,OAAO;QACP,OAAO,EAAE;YACP,IAAI,EAAE,eAAe;YACrB,cAAc;YACd,gBAAgB;YAChB,WAAW;YACX,aAAa;YACb,OAAO;SACR;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../src/snapshot/fields.ts"],"names":[],"mappings":"AAAA,uFAAuF;
|
|
1
|
+
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../src/snapshot/fields.ts"],"names":[],"mappings":"AAAA,uFAAuF;AASvF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAI3D,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,GACb,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAoBnC;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE;IACP,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,GACA,IAAI,CAoFN"}
|
package/dist/snapshot/fields.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/** biome-ignore-all lint/suspicious/noConsole: Console output is intentional in CLI */
|
|
2
2
|
import pc from 'picocolors';
|
|
3
|
+
import { hashFieldValue } from '../diff/long-text.js';
|
|
3
4
|
import { entryFieldsToJson, entryToJson } from '../output/json.js';
|
|
4
5
|
import { isJsonMode } from '../output/mode.js';
|
|
5
6
|
import { errorMsg, statusBadge } from '../output/print.js';
|
|
@@ -27,6 +28,28 @@ export function buildEntryFieldsJson(entry, locale, field) {
|
|
|
27
28
|
}
|
|
28
29
|
export function renderEntryFields(entry, locale, options) {
|
|
29
30
|
const status = getEntryStatus(entry, options.isModified ?? false);
|
|
31
|
+
if (options.hash) {
|
|
32
|
+
const hashes = {};
|
|
33
|
+
const fieldIds = options.field ? [options.field] : Object.keys(entry.fields);
|
|
34
|
+
for (const fieldId of fieldIds) {
|
|
35
|
+
const fieldData = entry.fields[fieldId];
|
|
36
|
+
if (!fieldData) {
|
|
37
|
+
if (options.field) {
|
|
38
|
+
errorMsg(`Field "${fieldId}" not found on this entry.`);
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
const value = fieldData[locale] ?? fieldData['en-US'];
|
|
44
|
+
hashes[fieldId] = hashFieldValue(value);
|
|
45
|
+
}
|
|
46
|
+
console.log(JSON.stringify({
|
|
47
|
+
ref: options.refLabel,
|
|
48
|
+
entryId: entry.sys.id,
|
|
49
|
+
fields: hashes,
|
|
50
|
+
}, null, 2));
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
30
53
|
if (options.json || isJsonMode()) {
|
|
31
54
|
const json = buildEntryFieldsJson(entry, locale, options.field);
|
|
32
55
|
console.log(JSON.stringify(json, null, 2));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fields.js","sourceRoot":"","sources":["../../src/snapshot/fields.ts"],"names":[],"mappings":"AAAA,uFAAuF;AAEvF,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,UAAU,oBAAoB,CAClC,KAAsB,EACtB,MAAc,EACd,KAAc;IAEd,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,SAAS;YAAE,OAAO,EAAE,CAAC;QAC1B,MAAM,UAAU,GAAG,iBAAiB,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC;QACrE,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;IACnC,CAAC;IAED,OAAO,WAAW,CAChB;QACE,GAAG,EAAE;YACH,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE;YAChB,WAAW,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE;YAC1D,gBAAgB,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB;YAC5C,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS;SAC/B;QACD,MAAM,EAAE,KAAK,CAAC,MAAM;KACrB,EACD,MAAM,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,KAAsB,EACtB,MAAc,EACd,
|
|
1
|
+
{"version":3,"file":"fields.js","sourceRoot":"","sources":["../../src/snapshot/fields.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type StagedUploadKind } from './mime.js';
|
|
2
|
+
export declare function peekStagedUtf8(uploadId: string, allowedKinds: readonly StagedUploadKind[]): Promise<{
|
|
3
|
+
text: string;
|
|
4
|
+
mimeType: string;
|
|
5
|
+
fileName: string;
|
|
6
|
+
byteLength: number;
|
|
7
|
+
kind: StagedUploadKind;
|
|
8
|
+
}>;
|
|
9
|
+
export declare function consumeStagedUpload(uploadId: string): Promise<void>;
|
|
10
|
+
export declare function tryConsumeStagedUpload(consume: (() => Promise<void>) | null, afterSuccess: string): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=consume-text.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consume-text.d.ts","sourceRoot":"","sources":["../../src/staged-upload/consume-text.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoB,KAAK,gBAAgB,EAAE,MAAM,WAAW,CAAC;AA+BpE,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,SAAS,gBAAgB,EAAE,GACxC,OAAO,CAAC;IACT,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,gBAAgB,CAAC;CACxB,CAAC,CAYD;AAED,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGzE;AAED,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,EACrC,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAaf"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { warnMsg } from '../output/print.js';
|
|
2
|
+
import { getRuntimeContext } from '../runtime/context.js';
|
|
3
|
+
import { assertStagedKind } from './mime.js';
|
|
4
|
+
function requireHostedStagedStore() {
|
|
5
|
+
const ctx = getRuntimeContext();
|
|
6
|
+
const userId = ctx?.user?.userId;
|
|
7
|
+
const store = ctx?.stagedUploadStore;
|
|
8
|
+
if (!userId || !store) {
|
|
9
|
+
throw new Error('--staged requires hosted MCP context (authenticated user and Redis staged upload store).');
|
|
10
|
+
}
|
|
11
|
+
return { userId, store };
|
|
12
|
+
}
|
|
13
|
+
function decodeUtf8Strict(buffer) {
|
|
14
|
+
const decoder = new TextDecoder('utf-8', { fatal: true });
|
|
15
|
+
let text;
|
|
16
|
+
try {
|
|
17
|
+
text = decoder.decode(buffer);
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
throw new Error('Staged upload is not valid UTF-8. Use kind=asset for binaries.');
|
|
21
|
+
}
|
|
22
|
+
if (text.includes('\0')) {
|
|
23
|
+
throw new Error('Staged upload is not valid UTF-8 text (contains NUL). Use kind=asset for binaries.');
|
|
24
|
+
}
|
|
25
|
+
return text;
|
|
26
|
+
}
|
|
27
|
+
export async function peekStagedUtf8(uploadId, allowedKinds) {
|
|
28
|
+
const { userId, store } = requireHostedStagedStore();
|
|
29
|
+
const peeked = await store.peekFile(userId, uploadId);
|
|
30
|
+
const kind = assertStagedKind(peeked.kind, allowedKinds);
|
|
31
|
+
const text = decodeUtf8Strict(peeked.buffer);
|
|
32
|
+
return {
|
|
33
|
+
text,
|
|
34
|
+
mimeType: peeked.mimeType,
|
|
35
|
+
fileName: peeked.fileName,
|
|
36
|
+
byteLength: peeked.byteLength,
|
|
37
|
+
kind,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export async function consumeStagedUpload(uploadId) {
|
|
41
|
+
const { userId, store } = requireHostedStagedStore();
|
|
42
|
+
await store.consume(userId, uploadId);
|
|
43
|
+
}
|
|
44
|
+
export async function tryConsumeStagedUpload(consume, afterSuccess) {
|
|
45
|
+
if (!consume) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
try {
|
|
49
|
+
await consume();
|
|
50
|
+
}
|
|
51
|
+
catch (e) {
|
|
52
|
+
warnMsg(`${afterSuccess} but staged upload could not be consumed: ${e instanceof Error ? e.message : String(e)}`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=consume-text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consume-text.js","sourceRoot":"","sources":["../../src/staged-upload/consume-text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAyB,MAAM,WAAW,CAAC;AAGpE,SAAS,wBAAwB;IAC/B,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC;IACjC,MAAM,KAAK,GAAG,GAAG,EAAE,iBAAiB,CAAC;IACrC,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CACb,0FAA0F,CAC3F,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAC3B,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAc;IACtC,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;IACpF,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,oFAAoF,CACrF,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,QAAgB,EAChB,YAAyC;IAQzC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,wBAAwB,EAAE,CAAC;IACrD,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACtD,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACzD,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7C,OAAO;QACL,IAAI;QACJ,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,IAAI;KACL,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,QAAgB;IACxD,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,wBAAwB,EAAE,CAAC;IACrD,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAAqC,EACrC,YAAoB;IAEpB,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;IACT,CAAC;IACD,IAAI,CAAC;QACH,MAAM,OAAO,EAAE,CAAC;IAClB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CACL,GAAG,YAAY,6CACb,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAC3C,EAAE,CACH,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -1,2 +1,10 @@
|
|
|
1
|
-
export
|
|
1
|
+
export type StagedUploadKind = 'asset' | 'text' | 'json';
|
|
2
|
+
/** Strip parameters such as `; charset=utf-8`. */
|
|
3
|
+
export declare function normalizeMimeType(mimeType: string): string;
|
|
4
|
+
export declare function parseStagedUploadKind(raw: string | undefined): StagedUploadKind;
|
|
5
|
+
export declare function stagedKindOrAsset(kind: StagedUploadKind | undefined): StagedUploadKind;
|
|
6
|
+
export declare function assertStagedKind(actual: StagedUploadKind | undefined, allowed: readonly StagedUploadKind[]): StagedUploadKind;
|
|
7
|
+
export declare function isAllowedStagedMimeType(mimeType: string, kind?: StagedUploadKind): boolean;
|
|
8
|
+
/** Curl often sends empty File.type → octet-stream; keep the reserved MIME when kind is text/json. */
|
|
9
|
+
export declare function effectiveStagedMimeType(uploadedMime: string, reservedMime: string, kind: StagedUploadKind): string;
|
|
2
10
|
//# sourceMappingURL=mime.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mime.d.ts","sourceRoot":"","sources":["../../src/staged-upload/mime.ts"],"names":[],"mappings":"AAAA,wBAAgB,
|
|
1
|
+
{"version":3,"file":"mime.d.ts","sourceRoot":"","sources":["../../src/staged-upload/mime.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAYzD,kDAAkD;AAClD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG1D;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,gBAAgB,CAS/E;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,gBAAgB,GAAG,SAAS,GAAG,gBAAgB,CAEtF;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,gBAAgB,GAAG,SAAS,EACpC,OAAO,EAAE,SAAS,gBAAgB,EAAE,GACnC,gBAAgB,CASlB;AAED,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,gBAA0B,GAC/B,OAAO,CAqBT;AAED,sGAAsG;AACtG,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,gBAAgB,GACrB,MAAM,CASR"}
|
|
@@ -1,15 +1,64 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
const ASSET_JSON = 'application/json';
|
|
2
|
+
const TEXT_MIME_TYPES = new Set([
|
|
3
|
+
'text/html',
|
|
4
|
+
'text/css',
|
|
5
|
+
'text/javascript',
|
|
6
|
+
'application/javascript',
|
|
7
|
+
'text/plain',
|
|
8
|
+
]);
|
|
9
|
+
/** Strip parameters such as `; charset=utf-8`. */
|
|
10
|
+
export function normalizeMimeType(mimeType) {
|
|
11
|
+
const base = mimeType.trim().toLowerCase().split(';')[0];
|
|
12
|
+
return base?.trim() ?? '';
|
|
13
|
+
}
|
|
14
|
+
export function parseStagedUploadKind(raw) {
|
|
15
|
+
if (raw === undefined || raw.trim() === '') {
|
|
16
|
+
return 'asset';
|
|
17
|
+
}
|
|
18
|
+
const normalized = raw.trim().toLowerCase();
|
|
19
|
+
if (normalized === 'asset' || normalized === 'text' || normalized === 'json') {
|
|
20
|
+
return normalized;
|
|
21
|
+
}
|
|
22
|
+
throw new Error(`Invalid staged upload kind "${raw}". Use asset, text, or json.`);
|
|
23
|
+
}
|
|
24
|
+
export function stagedKindOrAsset(kind) {
|
|
25
|
+
return kind ?? 'asset';
|
|
26
|
+
}
|
|
27
|
+
export function assertStagedKind(actual, allowed) {
|
|
28
|
+
const kind = stagedKindOrAsset(actual);
|
|
29
|
+
if (!allowed.includes(kind)) {
|
|
30
|
+
throw new Error(`Staged upload kind is ${kind}; expected ${allowed.join(' or ')}. ` +
|
|
31
|
+
'Request a new upload with the matching kind.');
|
|
32
|
+
}
|
|
33
|
+
return kind;
|
|
34
|
+
}
|
|
35
|
+
export function isAllowedStagedMimeType(mimeType, kind = 'asset') {
|
|
36
|
+
const normalized = normalizeMimeType(mimeType);
|
|
3
37
|
if (!normalized) {
|
|
4
38
|
return false;
|
|
5
39
|
}
|
|
40
|
+
if (kind === 'text') {
|
|
41
|
+
return TEXT_MIME_TYPES.has(normalized);
|
|
42
|
+
}
|
|
43
|
+
if (kind === 'json') {
|
|
44
|
+
return normalized === ASSET_JSON;
|
|
45
|
+
}
|
|
6
46
|
return (normalized.startsWith('image/') ||
|
|
7
47
|
normalized.startsWith('video/') ||
|
|
8
48
|
normalized === 'application/pdf' ||
|
|
9
49
|
// Lottie JSON and DotLottie packages (zip / generic binary with .lottie filename)
|
|
10
|
-
normalized ===
|
|
50
|
+
normalized === ASSET_JSON ||
|
|
11
51
|
normalized === 'application/zip' ||
|
|
12
52
|
normalized === 'application/x-zip-compressed' ||
|
|
13
53
|
normalized === 'application/octet-stream');
|
|
14
54
|
}
|
|
55
|
+
/** Curl often sends empty File.type → octet-stream; keep the reserved MIME when kind is text/json. */
|
|
56
|
+
export function effectiveStagedMimeType(uploadedMime, reservedMime, kind) {
|
|
57
|
+
const uploaded = normalizeMimeType(uploadedMime);
|
|
58
|
+
if ((kind === 'text' || kind === 'json') &&
|
|
59
|
+
(uploaded === '' || uploaded === 'application/octet-stream')) {
|
|
60
|
+
return reservedMime;
|
|
61
|
+
}
|
|
62
|
+
return uploadedMime;
|
|
63
|
+
}
|
|
15
64
|
//# sourceMappingURL=mime.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mime.js","sourceRoot":"","sources":["../../src/staged-upload/mime.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mime.js","sourceRoot":"","sources":["../../src/staged-upload/mime.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,GAAG,kBAAkB,CAAC;AAEtC,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC9B,WAAW;IACX,UAAU;IACV,iBAAiB;IACjB,wBAAwB;IACxB,YAAY;CACb,CAAC,CAAC;AAEH,kDAAkD;AAClD,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,OAAO,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,GAAuB;IAC3D,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC3C,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC5C,IAAI,UAAU,KAAK,OAAO,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;QAC7E,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,+BAA+B,GAAG,8BAA8B,CAAC,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAkC;IAClE,OAAO,IAAI,IAAI,OAAO,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,MAAoC,EACpC,OAAoC;IAEpC,MAAM,IAAI,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CACb,yBAAyB,IAAI,cAAc,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI;YACjE,8CAA8C,CACjD,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,QAAgB,EAChB,IAAI,GAAqB,OAAO;IAEhC,MAAM,UAAU,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC/C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,OAAO,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACzC,CAAC;IACD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,OAAO,UAAU,KAAK,UAAU,CAAC;IACnC,CAAC;IACD,OAAO,CACL,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC;QAC/B,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC;QAC/B,UAAU,KAAK,iBAAiB;QAChC,kFAAkF;QAClF,UAAU,KAAK,UAAU;QACzB,UAAU,KAAK,iBAAiB;QAChC,UAAU,KAAK,8BAA8B;QAC7C,UAAU,KAAK,0BAA0B,CAC1C,CAAC;AACJ,CAAC;AAED,sGAAsG;AACtG,MAAM,UAAU,uBAAuB,CACrC,YAAoB,EACpB,YAAoB,EACpB,IAAsB;IAEtB,MAAM,QAAQ,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;IACjD,IACE,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,MAAM,CAAC;QACpC,CAAC,QAAQ,KAAK,EAAE,IAAI,QAAQ,KAAK,0BAA0B,CAAC,EAC5D,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type StagedUploadKind } from './mime.js';
|
|
1
2
|
import type { StagedUploadStore } from './store.js';
|
|
2
3
|
import type { StagedUploadRequestResult } from './types.js';
|
|
3
4
|
export interface CreateStagedUploadRequestParams {
|
|
@@ -6,6 +7,7 @@ export interface CreateStagedUploadRequestParams {
|
|
|
6
7
|
mimeType: string;
|
|
7
8
|
byteLength?: number;
|
|
8
9
|
title?: string;
|
|
10
|
+
kind?: StagedUploadKind | string;
|
|
9
11
|
}
|
|
10
12
|
export declare function createStagedUploadRequest(store: StagedUploadStore, params: CreateStagedUploadRequestParams): Promise<StagedUploadRequestResult>;
|
|
11
13
|
//# sourceMappingURL=request.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/staged-upload/request.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAE5D,MAAM,WAAW,+BAA+B;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/staged-upload/request.ts"],"names":[],"mappings":"AAIA,OAAO,EAAyB,KAAK,gBAAgB,EAAE,MAAM,WAAW,CAAC;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAE5D,MAAM,WAAW,+BAA+B;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAAC;CAClC;AAgCD,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,+BAA+B,GACtC,OAAO,CAAC,yBAAyB,CAAC,CA6BpC"}
|
|
@@ -2,21 +2,18 @@ import { requiresPipelineEncode } from '../contentful/pipeline-encode-gate.js';
|
|
|
2
2
|
import { getPublicOrigin } from '../hosted/oauth/config.js';
|
|
3
3
|
import { buildStagedUploadUrl, getUploadHmacSecret } from './hmac.js';
|
|
4
4
|
import { hostedStagedMaxBytes, STAGED_UPLOAD_TTL_SECONDS } from './limits.js';
|
|
5
|
+
import { parseStagedUploadKind } from './mime.js';
|
|
5
6
|
function shellQuote(value) {
|
|
6
7
|
return `'${value.replace(/'/g, `'\\''`)}'`;
|
|
7
8
|
}
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
const origin = getPublicOrigin();
|
|
17
|
-
const exp = Math.floor(Date.now() / 1000) + STAGED_UPLOAD_TTL_SECONDS;
|
|
18
|
-
const uploadUrl = buildStagedUploadUrl(origin, uploadId, params.userId, exp, secret);
|
|
19
|
-
const consumeArgs = requiresPipelineEncode(params.mimeType, params.fileName)
|
|
9
|
+
function buildConsumeArgs(kind, uploadId, params) {
|
|
10
|
+
if (kind === 'text') {
|
|
11
|
+
return ['set', '--staged', uploadId];
|
|
12
|
+
}
|
|
13
|
+
if (kind === 'json') {
|
|
14
|
+
return ['create', 'from-json', '--staged', uploadId];
|
|
15
|
+
}
|
|
16
|
+
return requiresPipelineEncode(params.mimeType, params.fileName)
|
|
20
17
|
? ['media', 'prepare', '--staged-ids', uploadId]
|
|
21
18
|
: [
|
|
22
19
|
'asset',
|
|
@@ -29,6 +26,21 @@ export async function createStagedUploadRequest(store, params) {
|
|
|
29
26
|
params.fileName,
|
|
30
27
|
...(params.title ? ['--title', params.title] : []),
|
|
31
28
|
];
|
|
29
|
+
}
|
|
30
|
+
export async function createStagedUploadRequest(store, params) {
|
|
31
|
+
const kind = parseStagedUploadKind(typeof params.kind === 'string' ? params.kind : undefined);
|
|
32
|
+
const uploadId = await store.createPending({
|
|
33
|
+
userId: params.userId,
|
|
34
|
+
fileName: params.fileName,
|
|
35
|
+
mimeType: params.mimeType,
|
|
36
|
+
kind,
|
|
37
|
+
byteLength: params.byteLength,
|
|
38
|
+
});
|
|
39
|
+
const secret = getUploadHmacSecret();
|
|
40
|
+
const origin = getPublicOrigin();
|
|
41
|
+
const exp = Math.floor(Date.now() / 1000) + STAGED_UPLOAD_TTL_SECONDS;
|
|
42
|
+
const uploadUrl = buildStagedUploadUrl(origin, uploadId, params.userId, exp, secret);
|
|
43
|
+
const consumeArgs = buildConsumeArgs(kind, uploadId, params);
|
|
32
44
|
const curlCommand = `curl -f -X POST -F ${shellQuote(`file=@/path/to/${params.fileName}`)} ${shellQuote(uploadUrl)}`;
|
|
33
45
|
return {
|
|
34
46
|
uploadId,
|