Skip to content

feat: add App API Design Studio language & component methods#240

Merged
mike-engel merged 2 commits into
cdp-6272from
cdp-6273
Jul 14, 2026
Merged

feat: add App API Design Studio language & component methods#240
mike-engel merged 2 commits into
cdp-6272from
cdp-6273

Conversation

@mike-engel

@mike-engel mike-engel commented Jul 13, 2026

Copy link
Copy Markdown
Collaborator

Another set of the App API backfill on top of #239 which adds 5 email-translation (language) methods and 5 component methods:

Method Endpoint
listDesignStudioEmailLanguages GET /v1/design_studio/emails/{id}/languages
createDesignStudioEmailLanguage POST /v1/design_studio/emails/{id}/languages
getDesignStudioEmailLanguage GET /v1/design_studio/emails/{id}/languages/{language}
updateDesignStudioEmailLanguage PUT …/languages/{language} (204)
deleteDesignStudioEmailLanguage DELETE …/languages/{language} (204)
listDesignStudioComponents GET /v1/design_studio/components
createDesignStudioComponent POST /v1/design_studio/components
getDesignStudioComponent GET /v1/design_studio/components/{id}
updateDesignStudioComponent PUT /v1/design_studio/components/{id} (204)
deleteDesignStudioComponent DELETE /v1/design_studio/components/{id} (204)

Assisted by AI 🤖


Note

Medium Risk
Large additive API surface plus shared HTTP transport changes for multipart; behavior is well-tested but affects all clients using Request body typing.

Overview
Extends the App API client with Design Studio email translations (list/create/get/update/delete per language), reusable components (full CRUD plus list with optional tag filter), and a new Assets surface for files and folders (list/upload/get/update/delete).

Assets uploads go through new Request.postForm / formOptions multipart handling so fetch can set the boundary; createAsset builds FormData and derives MIME types from filename (or explicit/Blob type) so uploads are not sent as application/octet-stream. Typed inputs and matching docs (docs/app.md), unit tests, and live integration round-trips are included.

Reviewed by Cursor Bugbot for commit a703381. Bugbot is set up for automated code reviews on this repo. Configure here.

Batch 9 (stacked on Batch 8). Adds the second half of the design_studio
family: 5 email-translation (language) methods and 5 component methods.

Verified against the services backend (ext_api/design_studio/router.go +
designstudio/dsapi/*), not the OpenAPI spec:
- Email languages: create/get return { email_translation }; PUT/DELETE 204;
  update takes no language (immutable, from path); omitted content blocks
  inherit from the default-language email.
- Components: list adds a 'tag' filter to the shared node-list params;
  create requires name+tag; PUT/DELETE 204; parent_folder_id tri-state.

Includes unit tests (100% coverage), live round-trip coverage, and docs.
@mike-engel mike-engel changed the title feat: add App API Design Studio language & component methods (CDP-6273) feat: add App API Design Studio language & component methods Jul 14, 2026
@mike-engel mike-engel self-assigned this Jul 14, 2026

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit a703381. Configure here.

Comment thread lib/request.ts

return { method, uri, headers, body: form };
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Multipart retries reuse consumed FormData

Medium Severity

postForm is the first path that sends a FormData body through the shared handler retry loop. After a completed attempt (including retryable HTTP errors like 503), the same FormData instance is replayed, but multipart bodies are single-use streams in Node’s fetch/undici stack, so automatic retries and manual redirect replays can fail or upload an empty body instead of retrying the file.

Additional Locations (2)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit a703381. Configure here.

@mike-engel
mike-engel merged commit 6f64be9 into cdp-6272 Jul 14, 2026
11 checks passed
@mike-engel
mike-engel deleted the cdp-6273 branch July 14, 2026 11:32
@mike-engel mike-engel mentioned this pull request Jul 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants