@se-studio/contentful-cms 3.10.2 → 3.11.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.
Files changed (119) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +1 -1
  3. package/dist/cli/hosted-inline-limit.d.ts +4 -0
  4. package/dist/cli/hosted-inline-limit.d.ts.map +1 -0
  5. package/dist/cli/hosted-inline-limit.js +15 -0
  6. package/dist/cli/hosted-inline-limit.js.map +1 -0
  7. package/dist/cli/read-json-input.d.ts +16 -1
  8. package/dist/cli/read-json-input.d.ts.map +1 -1
  9. package/dist/cli/read-json-input.js +100 -12
  10. package/dist/cli/read-json-input.js.map +1 -1
  11. package/dist/commands/apply-from-json.d.ts.map +1 -1
  12. package/dist/commands/apply-from-json.js +10 -3
  13. package/dist/commands/apply-from-json.js.map +1 -1
  14. package/dist/commands/article-tags-from-json.d.ts.map +1 -1
  15. package/dist/commands/article-tags-from-json.js +12 -3
  16. package/dist/commands/article-tags-from-json.js.map +1 -1
  17. package/dist/commands/asset.d.ts.map +1 -1
  18. package/dist/commands/asset.js +2 -0
  19. package/dist/commands/asset.js.map +1 -1
  20. package/dist/commands/create-from-json.d.ts.map +1 -1
  21. package/dist/commands/create-from-json.js +16 -4
  22. package/dist/commands/create-from-json.js.map +1 -1
  23. package/dist/commands/create-person-from-json.d.ts.map +1 -1
  24. package/dist/commands/create-person-from-json.js +12 -3
  25. package/dist/commands/create-person-from-json.js.map +1 -1
  26. package/dist/commands/create-person.d.ts.map +1 -1
  27. package/dist/commands/create-person.js +20 -5
  28. package/dist/commands/create-person.js.map +1 -1
  29. package/dist/commands/create-taxonomy-from-json.d.ts.map +1 -1
  30. package/dist/commands/create-taxonomy-from-json.js +12 -3
  31. package/dist/commands/create-taxonomy-from-json.js.map +1 -1
  32. package/dist/commands/create-taxonomy.d.ts.map +1 -1
  33. package/dist/commands/create-taxonomy.js +28 -8
  34. package/dist/commands/create-taxonomy.js.map +1 -1
  35. package/dist/commands/open.d.ts.map +1 -1
  36. package/dist/commands/open.js +9 -3
  37. package/dist/commands/open.js.map +1 -1
  38. package/dist/commands/read.d.ts.map +1 -1
  39. package/dist/commands/read.js +3 -0
  40. package/dist/commands/read.js.map +1 -1
  41. package/dist/commands/rtf.d.ts.map +1 -1
  42. package/dist/commands/rtf.js +20 -8
  43. package/dist/commands/rtf.js.map +1 -1
  44. package/dist/commands/run.d.ts.map +1 -1
  45. package/dist/commands/run.js +12 -3
  46. package/dist/commands/run.js.map +1 -1
  47. package/dist/commands/session-diff.d.ts.map +1 -1
  48. package/dist/commands/session-diff.js +13 -0
  49. package/dist/commands/session-diff.js.map +1 -1
  50. package/dist/commands/set.d.ts.map +1 -1
  51. package/dist/commands/set.js +78 -38
  52. package/dist/commands/set.js.map +1 -1
  53. package/dist/commands/staged-upload.d.ts.map +1 -1
  54. package/dist/commands/staged-upload.js +2 -0
  55. package/dist/commands/staged-upload.js.map +1 -1
  56. package/dist/contentful/cma-user-agent.d.ts +1 -1
  57. package/dist/diff/long-text.d.ts +24 -0
  58. package/dist/diff/long-text.d.ts.map +1 -0
  59. package/dist/diff/long-text.js +65 -0
  60. package/dist/diff/long-text.js.map +1 -0
  61. package/dist/generated/help-topics.d.ts.map +1 -1
  62. package/dist/generated/help-topics.js +1 -1
  63. package/dist/generated/help-topics.js.map +1 -1
  64. package/dist/generated/hosted-guide.d.ts +1 -1
  65. package/dist/generated/hosted-guide.d.ts.map +1 -1
  66. package/dist/generated/hosted-guide.js +1 -1
  67. package/dist/generated/hosted-guide.js.map +1 -1
  68. package/dist/generated/version.d.ts +1 -1
  69. package/dist/generated/version.js +1 -1
  70. package/dist/mcp/tools/cms-edit.d.ts +1 -1
  71. package/dist/mcp/tools/cms-edit.d.ts.map +1 -1
  72. package/dist/mcp/tools/cms-edit.js +18 -10
  73. package/dist/mcp/tools/cms-edit.js.map +1 -1
  74. package/dist/mcp/tools/staged-upload.d.ts.map +1 -1
  75. package/dist/mcp/tools/staged-upload.js +27 -10
  76. package/dist/mcp/tools/staged-upload.js.map +1 -1
  77. package/dist/media-pipeline/prepare-source.d.ts.map +1 -1
  78. package/dist/media-pipeline/prepare-source.js +2 -0
  79. package/dist/media-pipeline/prepare-source.js.map +1 -1
  80. package/dist/preview/entry-urls.d.ts.map +1 -1
  81. package/dist/preview/entry-urls.js +8 -6
  82. package/dist/preview/entry-urls.js.map +1 -1
  83. package/dist/rtf/resolveRtfInput.d.ts +7 -2
  84. package/dist/rtf/resolveRtfInput.d.ts.map +1 -1
  85. package/dist/rtf/resolveRtfInput.js +49 -7
  86. package/dist/rtf/resolveRtfInput.js.map +1 -1
  87. package/dist/session/dirty.js +3 -3
  88. package/dist/session/dirty.js.map +1 -1
  89. package/dist/snapshot/fields.d.ts +1 -0
  90. package/dist/snapshot/fields.d.ts.map +1 -1
  91. package/dist/snapshot/fields.js +23 -0
  92. package/dist/snapshot/fields.js.map +1 -1
  93. package/dist/staged-upload/consume-text.d.ts +11 -0
  94. package/dist/staged-upload/consume-text.d.ts.map +1 -0
  95. package/dist/staged-upload/consume-text.js +55 -0
  96. package/dist/staged-upload/consume-text.js.map +1 -0
  97. package/dist/staged-upload/mime.d.ts +9 -1
  98. package/dist/staged-upload/mime.d.ts.map +1 -1
  99. package/dist/staged-upload/mime.js +52 -3
  100. package/dist/staged-upload/mime.js.map +1 -1
  101. package/dist/staged-upload/request.d.ts +2 -0
  102. package/dist/staged-upload/request.d.ts.map +1 -1
  103. package/dist/staged-upload/request.js +24 -12
  104. package/dist/staged-upload/request.js.map +1 -1
  105. package/dist/staged-upload/store.d.ts +2 -0
  106. package/dist/staged-upload/store.d.ts.map +1 -1
  107. package/dist/staged-upload/store.js +13 -7
  108. package/dist/staged-upload/store.js.map +1 -1
  109. package/dist/staged-upload/types.d.ts +4 -0
  110. package/dist/staged-upload/types.d.ts.map +1 -1
  111. package/docs/editor-tasks/create-html-component.md +15 -5
  112. package/docs/editor-tasks/preview-verify.md +6 -5
  113. package/docs/help/create-from-json.md +7 -4
  114. package/docs/help/fields-html-component.md +11 -1
  115. package/docs/help/index.md +1 -1
  116. package/docs/help/workflow.md +1 -1
  117. package/docs/mcp/hosted-guide.md +13 -11
  118. package/package.json +3 -3
  119. 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":"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"}
1
+ {"version":3,"file":"entry-urls.js","sourceRoot":"","sources":["../../src/preview/entry-urls.ts"],"names":[],"mappings":"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"}
@@ -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(_format: RtfInputFormat, inputArg: string | undefined, content?: string, base64?: string): Promise<string>;
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":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD;;;GAGG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,OAAO,CAAC,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CAWjB;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,CAEjB"}
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(_format, inputArg, content, base64) {
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 Buffer.from(base64, 'base64').toString('utf-8');
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 content;
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 inputArg;
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 --base64 <encoded>.');
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
- return resolveRtfInput('markdown', markdownArg, content, base64);
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":"AAEA;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAuB,EACvB,QAA4B,EAC5B,OAAgB,EAChB,MAAe;IAEf,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;QAC5C,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;QAC9C,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,gFAAgF,CAAC,CAAC;AACpG,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,WAA+B,EAC/B,OAAgB,EAChB,MAAe;IAEf,OAAO,eAAe,CAAC,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AACnE,CAAC"}
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"}
@@ -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,0CAA0C;KAC3C,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,oEAAoE;QACpE,EAAE;QACF,8GAA8G;KAC/G,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
+ {"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"}
@@ -5,6 +5,7 @@ export declare function renderEntryFields(entry: SerializedEntry, locale: string
5
5
  refLabel: string;
6
6
  field?: string;
7
7
  json?: boolean;
8
+ hash?: boolean;
8
9
  isModified?: boolean;
9
10
  }): void;
10
11
  //# sourceMappingURL=fields.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../src/snapshot/fields.ts"],"names":[],"mappings":"AAAA,uFAAuF;AAQvF,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,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,GACA,IAAI,CAuDN"}
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"}
@@ -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":"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"}
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 declare function isAllowedStagedMimeType(mimeType: string): boolean;
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,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAejE"}
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
- export function isAllowedStagedMimeType(mimeType) {
2
- const normalized = mimeType.trim().toLowerCase();
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 === 'application/json' ||
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":"AAAA,MAAM,UAAU,uBAAuB,CAAC,QAAgB;IACtD,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACjD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,KAAK,CAAC;IACf,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,kBAAkB;QACjC,UAAU,KAAK,iBAAiB;QAChC,UAAU,KAAK,8BAA8B;QAC7C,UAAU,KAAK,0BAA0B,CAC1C,CAAC;AACJ,CAAC"}
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;CAChB;AAMD,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,+BAA+B,GACtC,OAAO,CAAC,yBAAyB,CAAC,CAsCpC"}
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
- export async function createStagedUploadRequest(store, params) {
9
- const uploadId = await store.createPending({
10
- userId: params.userId,
11
- fileName: params.fileName,
12
- mimeType: params.mimeType,
13
- byteLength: params.byteLength,
14
- });
15
- const secret = getUploadHmacSecret();
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,
@@ -1 +1 @@
1
- {"version":3,"file":"request.js","sourceRoot":"","sources":["../../src/staged-upload/request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAY9E,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC;AAC7C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,KAAwB,EACxB,MAAuC;IAEvC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,aAAa,CAAC;QACzC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,UAAU,EAAE,MAAM,CAAC,UAAU;KAC9B,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,mBAAmB,EAAE,CAAC;IACrC,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,yBAAyB,CAAC;IACtE,MAAM,SAAS,GAAG,oBAAoB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IAErF,MAAM,WAAW,GAAG,sBAAsB,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;QAC1E,CAAC,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,QAAQ,CAAC;QAChD,CAAC,CAAC;YACE,OAAO;YACP,QAAQ;YACR,UAAU;YACV,QAAQ;YACR,QAAQ;YACR,MAAM,CAAC,QAAQ;YACf,aAAa;YACb,MAAM,CAAC,QAAQ;YACf,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SACnD,CAAC;IAEN,MAAM,WAAW,GAAG,sBAAsB,UAAU,CAAC,kBAAkB,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;IAErH,OAAO;QACL,QAAQ;QACR,SAAS;QACT,SAAS,EAAE,yBAAyB;QACpC,SAAS,EAAE,GAAG;QACd,QAAQ,EAAE,oBAAoB,EAAE;QAChC,WAAW;QACX,WAAW;KACZ,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"request.js","sourceRoot":"","sources":["../../src/staged-upload/request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAyB,MAAM,WAAW,CAAC;AAazE,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC;AAC7C,CAAC;AAED,SAAS,gBAAgB,CACvB,IAAsB,EACtB,QAAgB,EAChB,MAAuC;IAEvC,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,OAAO,CAAC,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,sBAAsB,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;QAC7D,CAAC,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,QAAQ,CAAC;QAChD,CAAC,CAAC;YACE,OAAO;YACP,QAAQ;YACR,UAAU;YACV,QAAQ;YACR,QAAQ;YACR,MAAM,CAAC,QAAQ;YACf,aAAa;YACb,MAAM,CAAC,QAAQ;YACf,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SACnD,CAAC;AACR,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,KAAwB,EACxB,MAAuC;IAEvC,MAAM,IAAI,GAAG,qBAAqB,CAAC,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAE9F,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,aAAa,CAAC;QACzC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,IAAI;QACJ,UAAU,EAAE,MAAM,CAAC,UAAU;KAC9B,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,mBAAmB,EAAE,CAAC;IACrC,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,yBAAyB,CAAC;IACtE,MAAM,SAAS,GAAG,oBAAoB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IAErF,MAAM,WAAW,GAAG,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAE7D,MAAM,WAAW,GAAG,sBAAsB,UAAU,CAAC,kBAAkB,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;IAErH,OAAO;QACL,QAAQ;QACR,SAAS;QACT,SAAS,EAAE,yBAAyB;QACpC,SAAS,EAAE,GAAG;QACd,QAAQ,EAAE,oBAAoB,EAAE;QAChC,WAAW;QACX,WAAW;KACZ,CAAC;AACJ,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import type { RedisClient } from '../session/session-store.js';
2
+ import { type StagedUploadKind } from './mime.js';
2
3
  import type { StagedUploadConsumeResult, StagedUploadRecord } from './types.js';
3
4
  export declare class StagedUploadStore {
4
5
  private readonly redis;
@@ -10,6 +11,7 @@ export declare class StagedUploadStore {
10
11
  userId: string;
11
12
  fileName: string;
12
13
  mimeType: string;
14
+ kind?: StagedUploadKind;
13
15
  byteLength?: number;
14
16
  }): Promise<string>;
15
17
  storeFile(userId: string, uploadId: string, buffer: Buffer, mimeType: string): Promise<StagedUploadRecord>;
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/staged-upload/store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAO/D,OAAO,KAAK,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AA0BhF,qBAAa,iBAAiB;IAE1B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAF5B,YACmB,KAAK,EAAE,WAAW,EAClB,SAAS,SAAa,EACrC;IAEJ,OAAO,CAAC,OAAO;IAIT,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAYnD;IAEK,aAAa,CAAC,MAAM,EAAE;QAC1B,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,GAAG,OAAO,CAAC,MAAM,CAAC,CAmClB;IAEK,SAAS,CACb,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,kBAAkB,CAAC,CA8B7B;IAEK,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAqBlF;IAED,2DAA2D;IACrD,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAgBnF;IAEK,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAEpF;CACF"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/staged-upload/store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAM/D,OAAO,EAGL,KAAK,gBAAgB,EAEtB,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AA0BhF,qBAAa,iBAAiB;IAE1B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAF5B,YACmB,KAAK,EAAE,WAAW,EAClB,SAAS,SAAa,EACrC;IAEJ,OAAO,CAAC,OAAO;IAIT,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAYnD;IAEK,aAAa,CAAC,MAAM,EAAE;QAC1B,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,gBAAgB,CAAC;QACxB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,GAAG,OAAO,CAAC,MAAM,CAAC,CAqClB;IAEK,SAAS,CACb,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,kBAAkB,CAAC,CAgC7B;IAEK,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAsBlF;IAED,2DAA2D;IACrD,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAiBnF;IAEK,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAEpF;CACF"}
@@ -1,7 +1,7 @@
1
1
  import * as crypto from 'node:crypto';
2
2
  import { assertUploadBufferSize } from '../contentful/upload-limits.js';
3
3
  import { hostedStagedMaxBytes, STAGED_UPLOAD_RATE_LIMIT_PER_HOUR, STAGED_UPLOAD_TTL_SECONDS, } from './limits.js';
4
- import { isAllowedStagedMimeType } from './mime.js';
4
+ import { effectiveStagedMimeType, isAllowedStagedMimeType, stagedKindOrAsset, } from './mime.js';
5
5
  const KEY_PREFIX = 'cms-edit:staged:';
6
6
  const RATE_PREFIX = 'cms-edit:staged-rate:';
7
7
  function rateKey(userId, hourBucket) {
@@ -46,8 +46,9 @@ export class StagedUploadStore {
46
46
  }
47
47
  }
48
48
  async createPending(params) {
49
- if (!isAllowedStagedMimeType(params.mimeType)) {
50
- throw new Error(`MIME type not allowed for staged upload: ${params.mimeType}`);
49
+ const kind = params.kind ?? 'asset';
50
+ if (!isAllowedStagedMimeType(params.mimeType, kind)) {
51
+ throw new Error(`MIME type not allowed for staged upload (${kind}): ${params.mimeType}`);
51
52
  }
52
53
  if (params.byteLength !== undefined && params.byteLength > hostedStagedMaxBytes()) {
53
54
  throw new Error(`Declared byteLength exceeds hosted staged upload limit (${String(hostedStagedMaxBytes())} bytes).`);
@@ -59,6 +60,7 @@ export class StagedUploadStore {
59
60
  userId: params.userId,
60
61
  fileName: params.fileName,
61
62
  mimeType: params.mimeType,
63
+ kind,
62
64
  byteLength: params.byteLength,
63
65
  status: 'pending',
64
66
  createdAt: Date.now(),
@@ -77,9 +79,6 @@ export class StagedUploadStore {
77
79
  if (buffer.length > hostedStagedMaxBytes()) {
78
80
  throw new Error(`File exceeds hosted staged upload limit (${String(hostedStagedMaxBytes())} bytes).`);
79
81
  }
80
- if (!isAllowedStagedMimeType(mimeType)) {
81
- throw new Error(`MIME type not allowed for staged upload: ${mimeType}`);
82
- }
83
82
  const key = this.fullKey(userId, uploadId);
84
83
  const existing = parseRecord(await this.redis.get(key));
85
84
  if (!existing || existing.userId !== userId || existing.uploadId !== uploadId) {
@@ -88,10 +87,15 @@ export class StagedUploadStore {
88
87
  if (existing.status === 'ready') {
89
88
  throw new Error('Staged upload already received.');
90
89
  }
90
+ const kind = existing.kind ?? 'asset';
91
+ const resolvedMime = effectiveStagedMimeType(mimeType, existing.mimeType, kind);
92
+ if (!isAllowedStagedMimeType(resolvedMime, kind)) {
93
+ throw new Error(`MIME type not allowed for staged upload (${kind}): ${resolvedMime}`);
94
+ }
91
95
  const record = {
92
96
  ...existing,
93
97
  status: 'ready',
94
- mimeType,
98
+ mimeType: resolvedMime,
95
99
  byteLength: buffer.length,
96
100
  dataBase64: buffer.toString('base64'),
97
101
  };
@@ -115,6 +119,7 @@ export class StagedUploadStore {
115
119
  fileName: existing.fileName,
116
120
  mimeType: existing.mimeType,
117
121
  byteLength: buffer.length,
122
+ kind: stagedKindOrAsset(existing.kind),
118
123
  };
119
124
  }
120
125
  /** Read staged bytes without deleting (pipeline fetch). */
@@ -133,6 +138,7 @@ export class StagedUploadStore {
133
138
  fileName: existing.fileName,
134
139
  mimeType: existing.mimeType,
135
140
  byteLength: buffer.length,
141
+ kind: stagedKindOrAsset(existing.kind),
136
142
  };
137
143
  }
138
144
  async getRecord(userId, uploadId) {