@estation/create-cms-site 1.0.0 → 1.2.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 (37) hide show
  1. package/README.md +88 -44
  2. package/dist/index.js +210 -38
  3. package/dist/index.js.map +1 -1
  4. package/dist/tools/auth.d.ts +4 -0
  5. package/dist/tools/auth.d.ts.map +1 -0
  6. package/dist/tools/auth.js +17 -0
  7. package/dist/tools/auth.js.map +1 -0
  8. package/dist/tools/blocks.d.ts +38 -0
  9. package/dist/tools/blocks.d.ts.map +1 -0
  10. package/dist/tools/blocks.js +52 -0
  11. package/dist/tools/blocks.js.map +1 -0
  12. package/dist/tools/collections.d.ts +22 -0
  13. package/dist/tools/collections.d.ts.map +1 -0
  14. package/dist/tools/collections.js +38 -0
  15. package/dist/tools/collections.js.map +1 -0
  16. package/dist/tools/pages.d.ts +45 -0
  17. package/dist/tools/pages.d.ts.map +1 -0
  18. package/dist/tools/pages.js +51 -0
  19. package/dist/tools/pages.js.map +1 -0
  20. package/dist/tools/scaffold-project.d.ts +0 -1
  21. package/dist/tools/scaffold-project.d.ts.map +1 -1
  22. package/dist/tools/scaffold-project.js +1 -2
  23. package/dist/tools/scaffold-project.js.map +1 -1
  24. package/dist/tools/search.d.ts +7 -0
  25. package/dist/tools/search.d.ts.map +1 -0
  26. package/dist/tools/search.js +27 -0
  27. package/dist/tools/search.js.map +1 -0
  28. package/dist/tools/validate-config.d.ts.map +1 -1
  29. package/dist/tools/validate-config.js +5 -4
  30. package/dist/tools/validate-config.js.map +1 -1
  31. package/dist/utils/api-client.d.ts +9 -0
  32. package/dist/utils/api-client.d.ts.map +1 -0
  33. package/dist/utils/api-client.js +74 -0
  34. package/dist/utils/api-client.js.map +1 -0
  35. package/package.json +1 -1
  36. package/template/.env.example +0 -1
  37. package/template/src/lib/cms-api.ts +1 -1
package/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # @estation/create-cms-site
2
2
 
3
- MCP server that scaffolds new Next.js sites powered by [eSTATION CMS](https://estation.io).
3
+ MCP server for [eSTATION CMS](https://estation.io) — scaffold new websites, and read/write CMS content directly from Claude.
4
4
 
5
- ## Usage
5
+ ## Setup
6
6
 
7
7
  ### Claude Desktop
8
8
 
@@ -11,7 +11,7 @@ Add to your `claude_desktop_config.json`:
11
11
  ```json
12
12
  {
13
13
  "mcpServers": {
14
- "create-cms-site": {
14
+ "estation-cms": {
15
15
  "command": "npx",
16
16
  "args": ["-y", "@estation/create-cms-site"]
17
17
  }
@@ -22,51 +22,95 @@ Add to your `claude_desktop_config.json`:
22
22
  ### Claude Code
23
23
 
24
24
  ```bash
25
- claude mcp add create-cms-site -- npx -y @estation/create-cms-site
25
+ claude mcp add estation-cms -- npx -y @estation/create-cms-site
26
26
  ```
27
27
 
28
28
  ## Tools
29
29
 
30
- ### `scaffold_project`
31
-
32
- Scaffold a new Next.js site from the template.
33
-
34
- | Parameter | Type | Required | Description |
35
- |-----------|------|----------|-------------|
36
- | `project_name` | string | yes | Directory name and package.json name |
37
- | `destination` | string | yes | Parent directory for the project |
38
- | `cms_api_url` | string | yes | CMS API base URL |
39
- | `cms_api_token` | string | yes | Tenant API token |
40
- | `site_url` | string | no | Public URL for sitemap |
41
- | `site_name` | string | no | Display name for metadata |
42
- | `install_deps` | boolean | no | Run `npm install` (default: false) |
43
-
44
- ### `list_sections`
45
-
46
- List all available section components with their tags and expected CMS fields.
47
-
48
- ### `validate_config`
49
-
50
- Validate an existing project's CMS configuration. Checks `.env.local` for required variables and tests API connectivity.
51
-
52
- | Parameter | Type | Required | Description |
53
- |-----------|------|----------|-------------|
54
- | `project_path` | string | yes | Path to the project directory |
55
-
56
- ## Available Sections
57
-
58
- The template includes 10 section components:
59
-
60
- - **HeroSection** (`hero`) Hero banner with title, description, and CTA button
61
- - **TextSection** (`text`) Rich text content with title and subtitle
62
- - **FeaturesSection** (`features`) — Grid of feature cards
63
- - **FAQSection** (`faq`) — Accordion-style Q&A
64
- - **TestimonialsSection** (`testimonials`) — Testimonial cards with quotes
65
- - **CTASection** (`cta`) Call-to-action with dark background
66
- - **SliderSection** (`slider`) — Carousel with navigation
67
- - **GallerySection** (`gallery`) Responsive image grid
68
- - **ContactSection** (`contact`) Contact info and form
69
- - **GenericSection** (`generic`) Dynamic fallback for any fields
30
+ ### Authentication
31
+
32
+ | Tool | Description |
33
+ |------|-------------|
34
+ | `login` | Log in with email/password for full read/write access |
35
+ | `set_api_token` | Set an API token for read-only public access |
36
+ | `auth_status` | Check current authentication status |
37
+
38
+ ### Content Blocks
39
+
40
+ | Tool | Description |
41
+ |------|-------------|
42
+ | `list_blocks` | List/search/filter content blocks |
43
+ | `get_block` | Get a block by UUID with all fields |
44
+ | `create_block` | Create a new content block |
45
+ | `update_block` | Update an existing block |
46
+ | `delete_block` | Delete a block |
47
+ | `publish_block` | Publish or unpublish a block |
48
+ | `duplicate_block` | Duplicate an existing block |
49
+
50
+ ### Pages
51
+
52
+ | Tool | Description |
53
+ |------|-------------|
54
+ | `list_pages` | List/search page compositions |
55
+ | `get_page` | Get a page by UUID with all blocks |
56
+ | `get_page_by_slug` | Get a published page by URL slug |
57
+ | `create_page` | Create a new page composition |
58
+ | `update_page` | Update an existing page |
59
+ | `delete_page` | Delete a page |
60
+ | `publish_page` | Publish or unpublish a page |
61
+ | `duplicate_page` | Duplicate an existing page |
62
+
63
+ ### Collections
64
+
65
+ | Tool | Description |
66
+ |------|-------------|
67
+ | `list_collections` | List saved content queries |
68
+ | `get_collection` | Get a collection's configuration |
69
+ | `create_collection` | Create a new collection |
70
+ | `update_collection` | Update a collection |
71
+ | `delete_collection` | Delete a collection |
72
+ | `execute_collection` | Run a collection query and get matching blocks |
73
+
74
+ ### Search
75
+
76
+ | Tool | Description |
77
+ |------|-------------|
78
+ | `search_content` | Search across all blocks and pages |
79
+
80
+ ### Website Scaffolding
81
+
82
+ | Tool | Description |
83
+ |------|-------------|
84
+ | `scaffold_project` | Create a new Next.js site from the template |
85
+ | `list_sections` | List available section components and their fields |
86
+ | `validate_config` | Validate a project's CMS configuration |
87
+
88
+ ## Content Structure
89
+
90
+ eSTATION CMS uses **content blocks** and **page compositions**:
91
+
92
+ - **Content blocks** are individual pieces of content (hero sections, FAQs, features, etc.) with typed fields
93
+ - **Page compositions** define URL routes and contain an ordered list of content blocks
94
+ - **Collections** are saved queries that dynamically group blocks by tags or types
95
+
96
+ ### Available Section Types
97
+
98
+ The website template renders blocks based on their tag:
99
+
100
+ | Tag | Component | Description |
101
+ |-----|-----------|-------------|
102
+ | `hero` | HeroSection | Hero banner with title, description, CTA button |
103
+ | `text` | TextSection | Rich text with title and subtitle |
104
+ | `features` | FeaturesSection | Grid of feature cards |
105
+ | `faq` | FAQSection | Accordion Q&A |
106
+ | `testimonials` | TestimonialsSection | Testimonial cards |
107
+ | `cta` | CTASection | Call-to-action section |
108
+ | `slider` | SliderSection | Carousel with navigation |
109
+ | `gallery` | GallerySection | Responsive image grid |
110
+ | `contact` | ContactSection | Contact info and form |
111
+ | `generic` | GenericSection | Dynamic fallback |
112
+
113
+ Use `list_sections` for detailed field schemas.
70
114
 
71
115
  ## Development
72
116
 
package/dist/index.js CHANGED
@@ -5,31 +5,210 @@ import { z } from "zod";
5
5
  import { scaffoldProject } from "./tools/scaffold-project.js";
6
6
  import { SECTIONS } from "./tools/list-sections.js";
7
7
  import { validateConfig } from "./tools/validate-config.js";
8
+ import { handleLogin, handleSetApiToken, handleAuthStatus } from "./tools/auth.js";
9
+ import { listBlocks, getBlock, createBlock, updateBlock, deleteBlock, publishBlock, duplicateBlock } from "./tools/blocks.js";
10
+ import { listPages, getPage, getPageBySlug, createPage, updatePage, deletePage, publishPage, duplicatePage } from "./tools/pages.js";
11
+ import { listCollections, getCollection, createCollection, updateCollection, deleteCollection, executeCollection } from "./tools/collections.js";
12
+ import { searchContent } from "./tools/search.js";
8
13
  const server = new McpServer({
9
- name: "create-cms-site",
10
- version: "1.0.0",
14
+ name: "estation-cms",
15
+ version: "1.2.0",
16
+ }, {
17
+ instructions: `You are connected to the eSTATION CMS — a headless content management system at cms-gateway.estation.io.
18
+
19
+ ## First-time setup
20
+
21
+ When the user wants to work with the CMS for the first time, walk them through this flow:
22
+
23
+ 1. **Ask if they have an eSTATION account.** If not, they can sign up at https://cms.estation.io
24
+ 2. **Authenticate.** Ask for their email and password, then use the \`login\` tool. This gives full read/write access. Alternatively, if they only need to read public content, ask for their API token (found in CMS dashboard > Settings > API Keys) and use \`set_api_token\`.
25
+ 3. **Ask what they want to do:**
26
+ - **"Build a new website"** → Ask for a project name, where to create it, and their API token. Then use \`scaffold_project\` to create a Next.js site from the template. After scaffolding, offer to install dependencies and explain how to run the dev server.
27
+ - **"Manage my content"** → Use \`list_pages\` and \`list_blocks\` to show them what they have, then help them create, edit, or publish content.
28
+ - **"Create content for my site"** → Use \`list_sections\` to understand available section types, then help them create blocks with the right field structure and assemble them into pages.
29
+
30
+ ## How eSTATION CMS works
31
+
32
+ - **Content blocks** are individual pieces of content (hero banners, FAQ sections, feature grids, etc.). Each block has a type, name, tags, and a \`content\` object with typed fields.
33
+ - **Page compositions** define URL routes (via slug) and contain an ordered list of content block UUIDs. When the website renders a page, it fetches the page by slug and renders each block using the matching section component.
34
+ - **Collections** are saved queries that dynamically group blocks by tags or types.
35
+ - The website template has 10 section components (hero, text, features, faq, testimonials, cta, slider, gallery, contact, generic). Each renders a specific block tag. Use \`list_sections\` to see the exact field schemas.
36
+
37
+ ## Content field structure
38
+
39
+ Block content fields follow this pattern:
40
+ \`\`\`json
41
+ {
42
+ "fieldName": {
43
+ "fieldType": "text",
44
+ "fieldValue": "The actual value"
45
+ }
46
+ }
47
+ \`\`\`
48
+ For list fields (like FAQ items or feature cards):
49
+ \`\`\`json
50
+ {
51
+ "items": {
52
+ "fieldType": "list",
53
+ "fieldValue": [
54
+ { "id": "1", "question": { "fieldType": "text", "fieldValue": "What is...?" }, "answer": { "fieldType": "text", "fieldValue": "It is..." } }
55
+ ]
56
+ }
57
+ }
58
+ \`\`\`
59
+
60
+ ## Important notes
61
+
62
+ - Always authenticate before attempting write operations (create, update, delete, publish).
63
+ - After creating blocks, remember to publish them and add them to a page composition for them to appear on the website.
64
+ - The CMS API URL is hardcoded to https://cms-gateway.estation.io/api/v1 — users don't need to configure it.
65
+ - When scaffolding a new project, the user needs their API token (not email/password). They can find it in the CMS dashboard under Settings > API Keys.`,
11
66
  });
12
- // Tool 1: scaffold_project
13
- server.tool("scaffold_project", "Scaffold a new Next.js site powered by eSTATION CMS. Copies the template, configures environment variables, and optionally installs dependencies.", {
67
+ // Helper to wrap tool handlers with error handling
68
+ function wrap(fn) {
69
+ return async (params) => {
70
+ try {
71
+ const result = await fn(params);
72
+ return { content: [{ type: "text", text: result }] };
73
+ }
74
+ catch (err) {
75
+ const message = err instanceof Error ? err.message : String(err);
76
+ return { content: [{ type: "text", text: `Error: ${message}` }], isError: true };
77
+ }
78
+ };
79
+ }
80
+ // ── Authentication ──────────────────────────────────────────────────
81
+ server.tool("login", "Log in to eSTATION CMS with email and password. Required for write operations (create, update, delete, publish). The CMS API is at cms.estation.io.", {
82
+ email: z.string().describe("Your eSTATION CMS email"),
83
+ password: z.string().describe("Your eSTATION CMS password"),
84
+ }, wrap(({ email, password }) => handleLogin(email, password)));
85
+ server.tool("set_api_token", "Set an API token for read-only public access to eSTATION CMS content. Get your token from the CMS dashboard under Settings > API Keys.", {
86
+ token: z.string().describe("The tenant API token"),
87
+ }, wrap(({ token }) => handleSetApiToken(token)));
88
+ server.tool("auth_status", "Check current authentication status with eSTATION CMS.", {}, wrap(() => handleAuthStatus()));
89
+ // ── Content Blocks ──────────────────────────────────────────────────
90
+ server.tool("list_blocks", "List content blocks in the CMS. Filter by tags, search text, or publish status.", {
91
+ page: z.number().optional().describe("Page number (default: 1)"),
92
+ size: z.number().optional().describe("Items per page (default: 10)"),
93
+ search: z.string().optional().describe("Search blocks by name"),
94
+ status: z.enum(["published", "unpublished", "all"]).optional().describe("Filter by publish status"),
95
+ tags: z.string().optional().describe("Comma-separated tags to filter by"),
96
+ }, wrap(listBlocks));
97
+ server.tool("get_block", "Get a content block by UUID with all its fields and content.", {
98
+ uuid: z.string().describe("Block UUID"),
99
+ }, wrap(({ uuid }) => getBlock(uuid)));
100
+ server.tool("create_block", "Create a new content block in the CMS. Use list_sections to see available block types and their expected fields.", {
101
+ type: z.string().describe("Block type (e.g. hero, text, features, faq, testimonials, cta, slider, gallery, contact, custom)"),
102
+ name: z.string().describe("Display name for the block"),
103
+ tags: z.array(z.string()).optional().describe("Tags for categorizing and querying the block"),
104
+ content: z.record(z.unknown()).describe("Block content fields — structure depends on block type. Each field should have { fieldType, fieldValue }"),
105
+ metadata: z.record(z.unknown()).optional().describe("Optional metadata"),
106
+ }, wrap(createBlock));
107
+ server.tool("update_block", "Update an existing content block. Only provided fields are changed.", {
108
+ uuid: z.string().describe("Block UUID to update"),
109
+ name: z.string().optional().describe("New display name"),
110
+ tags: z.array(z.string()).optional().describe("New tags"),
111
+ content: z.record(z.unknown()).optional().describe("Updated content fields"),
112
+ metadata: z.record(z.unknown()).optional().describe("Updated metadata"),
113
+ }, wrap(({ uuid, ...data }) => updateBlock(uuid, data)));
114
+ server.tool("delete_block", "Delete a content block from the CMS.", {
115
+ uuid: z.string().describe("Block UUID to delete"),
116
+ }, wrap(({ uuid }) => deleteBlock(uuid)));
117
+ server.tool("publish_block", "Publish or unpublish a content block. Published blocks are visible on the public website.", {
118
+ uuid: z.string().describe("Block UUID"),
119
+ publish: z.boolean().describe("true to publish, false to unpublish"),
120
+ }, wrap(({ uuid, publish }) => publishBlock(uuid, publish)));
121
+ server.tool("duplicate_block", "Create a copy of an existing content block.", {
122
+ uuid: z.string().describe("Block UUID to duplicate"),
123
+ }, wrap(({ uuid }) => duplicateBlock(uuid)));
124
+ // ── Pages ───────────────────────────────────────────────────────────
125
+ server.tool("list_pages", "List page compositions in the CMS. Pages define URL routes and contain ordered lists of content blocks.", {
126
+ page: z.number().optional().describe("Page number (default: 1)"),
127
+ size: z.number().optional().describe("Items per page (default: 10)"),
128
+ search: z.string().optional().describe("Search pages by title"),
129
+ status: z.enum(["published", "unpublished", "all"]).optional().describe("Filter by publish status"),
130
+ }, wrap(listPages));
131
+ server.tool("get_page", "Get a page composition by UUID, including all its content blocks.", {
132
+ uuid: z.string().describe("Page UUID"),
133
+ }, wrap(({ uuid }) => getPage(uuid)));
134
+ server.tool("get_page_by_slug", "Get a published page by its URL slug (e.g. 'about-us', 'home'). Returns the page with all its content blocks.", {
135
+ slug: z.string().describe("Page URL slug"),
136
+ }, wrap(({ slug }) => getPageBySlug(slug)));
137
+ server.tool("create_page", "Create a new page composition. A page has a URL slug and contains an ordered list of content block UUIDs.", {
138
+ slug: z.string().describe("URL slug (e.g. 'about-us')"),
139
+ title: z.string().describe("Page title for metadata"),
140
+ description: z.string().optional().describe("Page description for SEO"),
141
+ blocks: z.array(z.string()).optional().describe("Ordered array of content block UUIDs"),
142
+ layout: z.string().optional().describe("Layout template name"),
143
+ tags: z.array(z.string()).optional().describe("Page tags"),
144
+ metadata: z.record(z.unknown()).optional().describe("Optional metadata"),
145
+ }, wrap(createPage));
146
+ server.tool("update_page", "Update an existing page composition. Only provided fields are changed.", {
147
+ uuid: z.string().describe("Page UUID to update"),
148
+ slug: z.string().optional().describe("New URL slug"),
149
+ title: z.string().optional().describe("New title"),
150
+ description: z.string().optional().describe("New description"),
151
+ blocks: z.array(z.string()).optional().describe("New ordered array of block UUIDs"),
152
+ layout: z.string().optional().describe("New layout template"),
153
+ tags: z.array(z.string()).optional().describe("New tags"),
154
+ metadata: z.record(z.unknown()).optional().describe("Updated metadata"),
155
+ }, wrap(({ uuid, ...data }) => updatePage(uuid, data)));
156
+ server.tool("delete_page", "Delete a page composition from the CMS.", {
157
+ uuid: z.string().describe("Page UUID to delete"),
158
+ }, wrap(({ uuid }) => deletePage(uuid)));
159
+ server.tool("publish_page", "Publish or unpublish a page. Published pages are accessible on the public website.", {
160
+ uuid: z.string().describe("Page UUID"),
161
+ publish: z.boolean().describe("true to publish, false to unpublish"),
162
+ }, wrap(({ uuid, publish }) => publishPage(uuid, publish)));
163
+ server.tool("duplicate_page", "Create a copy of an existing page composition.", {
164
+ uuid: z.string().describe("Page UUID to duplicate"),
165
+ }, wrap(({ uuid }) => duplicatePage(uuid)));
166
+ // ── Collections ─────────────────────────────────────────────────────
167
+ server.tool("list_collections", "List content collections. Collections are saved queries that dynamically group content blocks by tags, types, or filters.", {
168
+ page: z.number().optional().describe("Page number"),
169
+ size: z.number().optional().describe("Items per page"),
170
+ }, wrap(listCollections));
171
+ server.tool("get_collection", "Get a collection's configuration by UUID.", {
172
+ uuid: z.string().describe("Collection UUID"),
173
+ }, wrap(({ uuid }) => getCollection(uuid)));
174
+ server.tool("create_collection", "Create a new collection — a saved query that dynamically groups content blocks.", {
175
+ name: z.string().describe("Collection name"),
176
+ query: z.record(z.unknown()).describe("Query filter: { tags?: string[], block_types?: string[], exclude_tags?: string[] }"),
177
+ order_by: z.string().optional().describe("Sort field (default: created_at)"),
178
+ order_dir: z.enum(["asc", "desc"]).optional().describe("Sort direction"),
179
+ limit: z.number().optional().describe("Max results"),
180
+ }, wrap(createCollection));
181
+ server.tool("update_collection", "Update a collection's query, ordering, or limit.", {
182
+ uuid: z.string().describe("Collection UUID"),
183
+ name: z.string().optional().describe("New name"),
184
+ query: z.record(z.unknown()).optional().describe("Updated query filter"),
185
+ order_by: z.string().optional().describe("New sort field"),
186
+ order_dir: z.enum(["asc", "desc"]).optional().describe("New sort direction"),
187
+ limit: z.number().optional().describe("New max results"),
188
+ }, wrap(({ uuid, ...data }) => updateCollection(uuid, data)));
189
+ server.tool("delete_collection", "Delete a collection from the CMS.", {
190
+ uuid: z.string().describe("Collection UUID to delete"),
191
+ }, wrap(({ uuid }) => deleteCollection(uuid)));
192
+ server.tool("execute_collection", "Execute a collection's query and return all matching content blocks.", {
193
+ uuid: z.string().describe("Collection UUID to execute"),
194
+ }, wrap(({ uuid }) => executeCollection(uuid)));
195
+ // ── Search ──────────────────────────────────────────────────────────
196
+ server.tool("search_content", "Search across all CMS content (blocks and pages) by keyword.", {
197
+ query: z.string().describe("Search query"),
198
+ type: z.enum(["all", "blocks", "pages"]).optional().describe("Limit search to blocks or pages (default: all)"),
199
+ page: z.number().optional().describe("Page number"),
200
+ page_size: z.number().optional().describe("Results per page"),
201
+ }, wrap(searchContent));
202
+ // ── Website Template ────────────────────────────────────────────────
203
+ server.tool("scaffold_project", "Scaffold a new Next.js website powered by eSTATION CMS. Copies the template, configures .env.local with CMS credentials, and optionally installs dependencies.", {
14
204
  project_name: z.string().describe("Directory name and package.json name for the new project"),
15
205
  destination: z.string().describe("Parent directory where the project will be created"),
16
- cms_api_url: z.string().describe("CMS API base URL (e.g. https://cms-gateway.estation.io/api/v1)"),
17
- cms_api_token: z.string().describe("Tenant API token for CMS authentication"),
206
+ cms_api_token: z.string().describe("Tenant API token from the CMS dashboard"),
18
207
  site_url: z.string().optional().describe("Public URL for sitemap generation"),
19
208
  site_name: z.string().optional().describe("Display name used in page metadata"),
20
209
  install_deps: z.boolean().optional().describe("Run npm install after scaffolding (default: false)"),
21
- }, async (params) => {
22
- try {
23
- const result = await scaffoldProject(params);
24
- return { content: [{ type: "text", text: result }] };
25
- }
26
- catch (err) {
27
- const message = err instanceof Error ? err.message : String(err);
28
- return { content: [{ type: "text", text: `Error: ${message}` }], isError: true };
29
- }
30
- });
31
- // Tool 2: list_sections
32
- server.tool("list_sections", "List all available section components in the CMS website template with their tags, descriptions, and expected CMS fields.", {}, async () => {
210
+ }, wrap(scaffoldProject));
211
+ server.tool("list_sections", "List all available section components in the website template with their tags, descriptions, and expected CMS content fields. Use this to understand how to structure content blocks.", {}, async () => {
33
212
  const output = SECTIONS.map((s) => {
34
213
  const lines = [
35
214
  `## ${s.component} (tag: "${s.tag}"${s.aliases.length ? `, aliases: ${s.aliases.map((a) => `"${a}"`).join(", ")}` : ""})`,
@@ -54,37 +233,30 @@ server.tool("list_sections", "List all available section components in the CMS w
54
233
  }).join("\n\n");
55
234
  return { content: [{ type: "text", text: output }] };
56
235
  });
57
- // Tool 3: validate_config
58
- server.tool("validate_config", "Validate CMS configuration for an existing project. Checks .env.local for required variables and tests CMS API connectivity.", {
236
+ server.tool("validate_config", "Validate CMS configuration for an existing website project. Checks .env.local for required variables and tests CMS API connectivity.", {
59
237
  project_path: z.string().describe("Path to the project directory to validate"),
60
- }, async ({ project_path }) => {
61
- const result = await validateConfig(project_path);
238
+ }, wrap(({ project_path }) => validateConfig(project_path).then((r) => {
62
239
  const lines = [];
63
- lines.push(result.valid ? "Configuration is valid." : "Configuration has errors.");
240
+ lines.push(r.valid ? "Configuration is valid." : "Configuration has errors.");
64
241
  lines.push("");
65
- if (result.errors.length) {
242
+ if (r.errors.length) {
66
243
  lines.push("Errors:");
67
- for (const e of result.errors)
244
+ for (const e of r.errors)
68
245
  lines.push(` - ${e}`);
69
246
  lines.push("");
70
247
  }
71
- if (result.warnings.length) {
248
+ if (r.warnings.length) {
72
249
  lines.push("Warnings:");
73
- for (const w of result.warnings)
250
+ for (const w of r.warnings)
74
251
  lines.push(` - ${w}`);
75
252
  lines.push("");
76
253
  }
77
- if (result.env.CMS_API_URL) {
78
- lines.push(`CMS API URL: ${result.env.CMS_API_URL}`);
79
- }
80
- if (result.env.NEXT_PUBLIC_SITE_URL) {
81
- lines.push(`Site URL: ${result.env.NEXT_PUBLIC_SITE_URL}`);
82
- }
83
- return {
84
- content: [{ type: "text", text: lines.join("\n") }],
85
- isError: !result.valid,
86
- };
87
- });
254
+ if (r.env.CMS_API_URL)
255
+ lines.push(`CMS API URL: ${r.env.CMS_API_URL}`);
256
+ if (r.env.NEXT_PUBLIC_SITE_URL)
257
+ lines.push(`Site URL: ${r.env.NEXT_PUBLIC_SITE_URL}`);
258
+ return lines.join("\n");
259
+ })));
88
260
  // Start server
89
261
  const transport = new StdioServerTransport();
90
262
  await server.connect(transport);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC9H,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACrI,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AACjJ,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B;IACE,IAAI,EAAE,cAAc;IACpB,OAAO,EAAE,OAAO;CACjB,EACD;IACE,YAAY,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wJAgDsI;CACrJ,CACF,CAAC;AAEF,mDAAmD;AACnD,SAAS,IAAI,CAAC,EAA6C;IACzD,OAAO,KAAK,EAAE,MAAW,EAAE,EAAE;QAC3B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC;YAChC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAChE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,OAAO,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC5F,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,uEAAuE;AAEvE,MAAM,CAAC,IAAI,CACT,OAAO,EACP,qJAAqJ,EACrJ;IACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IACrD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;CAC5D,EACD,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAC5D,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,eAAe,EACf,wIAAwI,EACxI;IACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;CACnD,EACD,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAC9C,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,aAAa,EACb,wDAAwD,EACxD,EAAE,EACF,IAAI,CAAC,GAAG,EAAE,CAAC,gBAAgB,EAAE,CAAC,CAC/B,CAAC;AAEF,uEAAuE;AAEvE,MAAM,CAAC,IAAI,CACT,aAAa,EACb,iFAAiF,EACjF;IACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IAChE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IACpE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IAC/D,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IACnG,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;CAC1E,EACD,IAAI,CAAC,UAAU,CAAC,CACjB,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,WAAW,EACX,8DAA8D,EAC9D;IACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;CACxC,EACD,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CACnC,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,cAAc,EACd,kHAAkH,EAClH;IACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kGAAkG,CAAC;IAC7H,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IACvD,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;IAC7F,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,0GAA0G,CAAC;IACnJ,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;CACzE,EACD,IAAI,CAAC,WAAW,CAAC,CAClB,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,cAAc,EACd,qEAAqE,EACrE;IACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IACjD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IACxD,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;IACzD,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IAC5E,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;CACxE,EACD,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CACrD,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,cAAc,EACd,sCAAsC,EACtC;IACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;CAClD,EACD,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CACtC,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,eAAe,EACf,2FAA2F,EAC3F;IACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;IACvC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;CACrE,EACD,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CACzD,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,6CAA6C,EAC7C;IACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;CACrD,EACD,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CACzC,CAAC;AAEF,uEAAuE;AAEvE,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,yGAAyG,EACzG;IACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IAChE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IACpE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IAC/D,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;CACpG,EACD,IAAI,CAAC,SAAS,CAAC,CAChB,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,UAAU,EACV,mEAAmE,EACnE;IACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;CACvC,EACD,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAClC,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,+GAA+G,EAC/G;IACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;CAC3C,EACD,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CACxC,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,aAAa,EACb,2GAA2G,EAC3G;IACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IACvD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IACrD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IACvE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;IACvF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IAC9D,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;IAC1D,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;CACzE,EACD,IAAI,CAAC,UAAU,CAAC,CACjB,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,aAAa,EACb,wEAAwE,EACxE;IACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IAChD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;IACpD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;IAClD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAC9D,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IACnF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IAC7D,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;IACzD,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;CACxE,EACD,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CACpD,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,aAAa,EACb,yCAAyC,EACzC;IACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;CACjD,EACD,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CACrC,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,cAAc,EACd,oFAAoF,EACpF;IACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;IACtC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;CACrE,EACD,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CACxD,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,gDAAgD,EAChD;IACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;CACpD,EACD,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CACxC,CAAC;AAEF,uEAAuE;AAEvE,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,2HAA2H,EAC3H;IACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;IACnD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;CACvD,EACD,IAAI,CAAC,eAAe,CAAC,CACtB,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,2CAA2C,EAC3C;IACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;CAC7C,EACD,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CACxC,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,iFAAiF,EACjF;IACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAC5C,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,oFAAoF,CAAC;IAC3H,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IAC5E,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IACxE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;CACrD,EACD,IAAI,CAAC,gBAAgB,CAAC,CACvB,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,kDAAkD,EAClD;IACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAC5C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;IAChD,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IACxE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IAC1D,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IAC5E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;CACzD,EACD,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAC1D,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,mCAAmC,EACnC;IACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;CACvD,EACD,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAC3C,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,sEAAsE,EACtE;IACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;CACxD,EACD,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAC5C,CAAC;AAEF,uEAAuE;AAEvE,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,8DAA8D,EAC9D;IACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;IAC1C,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;IAC9G,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;IACnD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;CAC9D,EACD,IAAI,CAAC,aAAa,CAAC,CACpB,CAAC;AAEF,uEAAuE;AAEvE,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,gKAAgK,EAChK;IACE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0DAA0D,CAAC;IAC7F,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;IACtF,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;IAC7E,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IAC7E,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IAC/E,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;CACpG,EACD,IAAI,CAAC,eAAe,CAAC,CACtB,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,eAAe,EACf,uLAAuL,EACvL,EAAE,EACF,KAAK,IAAI,EAAE;IACT,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAChC,MAAM,KAAK,GAAG;YACZ,MAAM,CAAC,CAAC,SAAS,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG;YACzH,CAAC,CAAC,WAAW;YACb,EAAE;YACF,SAAS;SACV,CAAC;QAEF,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;QACxE,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;gBACzB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;gBAC1D,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;oBAChB,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;wBAC7B,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;oBACjE,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEhB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AAChE,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,sIAAsI,EACtI;IACE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;CAC/E,EACD,IAAI,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;IACjE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC;IAC9E,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAAC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAAC,CAAC;IACjH,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAAC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ;YAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAAC,CAAC;IACvH,IAAI,CAAC,CAAC,GAAG,CAAC,WAAW;QAAE,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;IACvE,IAAI,CAAC,CAAC,GAAG,CAAC,oBAAoB;QAAE,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC,CAAC;IACtF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC,CAAC,CAAC,CACJ,CAAC;AAEF,eAAe;AACf,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function handleLogin(email: string, password: string): Promise<string>;
2
+ export declare function handleSetApiToken(token: string): string;
3
+ export declare function handleAuthStatus(): string;
4
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/tools/auth.ts"],"names":[],"mappings":"AAEA,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGlF;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGvD;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAMzC"}
@@ -0,0 +1,17 @@
1
+ import { login, setApiToken, getAuthState } from "../utils/api-client.js";
2
+ export async function handleLogin(email, password) {
3
+ await login(email, password);
4
+ return "Logged in successfully. You can now use all CMS management tools.";
5
+ }
6
+ export function handleSetApiToken(token) {
7
+ setApiToken(token);
8
+ return "API token set. You can now read public CMS content. For write operations, use the login tool.";
9
+ }
10
+ export function handleAuthStatus() {
11
+ const state = getAuthState();
12
+ if (!state.authenticated) {
13
+ return "Not authenticated. Use the login tool (email + password) for full access, or set_api_token for read-only public access.";
14
+ }
15
+ return `Authenticated via ${state.method === "jwt" ? "email/password (full access)" : "API token (public read-only)"}`;
16
+ }
17
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/tools/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE1E,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAa,EAAE,QAAgB;IAC/D,MAAM,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC7B,OAAO,mEAAmE,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,WAAW,CAAC,KAAK,CAAC,CAAC;IACnB,OAAO,+FAA+F,CAAC;AACzG,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;IAC7B,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QACzB,OAAO,yHAAyH,CAAC;IACnI,CAAC;IACD,OAAO,qBAAqB,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,8BAA8B,EAAE,CAAC;AACzH,CAAC"}
@@ -0,0 +1,38 @@
1
+ export interface ContentBlock {
2
+ uuid: string;
3
+ tenant_uuid: string;
4
+ type: string;
5
+ name: string;
6
+ tags: string[];
7
+ content: Record<string, unknown>;
8
+ metadata: Record<string, unknown>;
9
+ version: number;
10
+ is_published: boolean;
11
+ created_at: string;
12
+ updated_at: string;
13
+ }
14
+ export declare function listBlocks(params: {
15
+ page?: number;
16
+ size?: number;
17
+ search?: string;
18
+ status?: string;
19
+ tags?: string;
20
+ }): Promise<string>;
21
+ export declare function getBlock(uuid: string): Promise<string>;
22
+ export declare function createBlock(data: {
23
+ type: string;
24
+ name: string;
25
+ tags?: string[];
26
+ content: Record<string, unknown>;
27
+ metadata?: Record<string, unknown>;
28
+ }): Promise<string>;
29
+ export declare function updateBlock(uuid: string, data: {
30
+ name?: string;
31
+ tags?: string[];
32
+ content?: Record<string, unknown>;
33
+ metadata?: Record<string, unknown>;
34
+ }): Promise<string>;
35
+ export declare function deleteBlock(uuid: string): Promise<string>;
36
+ export declare function publishBlock(uuid: string, publish: boolean): Promise<string>;
37
+ export declare function duplicateBlock(uuid: string): Promise<string>;
38
+ //# sourceMappingURL=blocks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blocks.d.ts","sourceRoot":"","sources":["../../src/tools/blocks.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAUD,wBAAsB,UAAU,CAAC,MAAM,EAAE;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC,MAAM,CAAC,CA4BlB;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAG5D;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,GAAG,OAAO,CAAC,MAAM,CAAC,CAGlB;AAED,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE;IACJ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,GACA,OAAO,CAAC,MAAM,CAAC,CAGjB;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAG/D;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAGlF;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGlE"}
@@ -0,0 +1,52 @@
1
+ import { cmsRequest } from "../utils/api-client.js";
2
+ export async function listBlocks(params) {
3
+ const query = new URLSearchParams();
4
+ if (params.page)
5
+ query.set("page", String(params.page));
6
+ if (params.size)
7
+ query.set("size", String(params.size));
8
+ if (params.search)
9
+ query.set("search", params.search);
10
+ if (params.status)
11
+ query.set("status", params.status);
12
+ let path = "/content/blocks";
13
+ if (params.tags) {
14
+ path = "/content/blocks/by-tags";
15
+ query.set("tags", params.tags);
16
+ }
17
+ const qs = query.toString();
18
+ const result = await cmsRequest("GET", `${path}${qs ? `?${qs}` : ""}`);
19
+ const blocks = Array.isArray(result) ? result : result.data;
20
+ const total = Array.isArray(result) ? blocks.length : result.total;
21
+ const lines = [`Found ${total} block(s):\n`];
22
+ for (const b of blocks) {
23
+ lines.push(`- **${b.name}** (${b.uuid})`);
24
+ lines.push(` Type: ${b.type} | Tags: ${b.tags.join(", ") || "none"} | Published: ${b.is_published}`);
25
+ }
26
+ return lines.join("\n");
27
+ }
28
+ export async function getBlock(uuid) {
29
+ const block = await cmsRequest("GET", `/content/blocks/${uuid}`);
30
+ return JSON.stringify(block, null, 2);
31
+ }
32
+ export async function createBlock(data) {
33
+ const block = await cmsRequest("POST", "/content/blocks", data);
34
+ return `Block created successfully.\nUUID: ${block.uuid}\nName: ${block.name}\nType: ${block.type}`;
35
+ }
36
+ export async function updateBlock(uuid, data) {
37
+ const block = await cmsRequest("PUT", `/content/blocks/${uuid}`, data);
38
+ return `Block updated successfully.\nUUID: ${block.uuid}\nName: ${block.name}\nVersion: ${block.version}`;
39
+ }
40
+ export async function deleteBlock(uuid) {
41
+ await cmsRequest("DELETE", `/content/blocks/${uuid}`);
42
+ return `Block ${uuid} deleted successfully.`;
43
+ }
44
+ export async function publishBlock(uuid, publish) {
45
+ await cmsRequest("POST", `/content/blocks/${uuid}/publish`, { publish });
46
+ return `Block ${uuid} ${publish ? "published" : "unpublished"} successfully.`;
47
+ }
48
+ export async function duplicateBlock(uuid) {
49
+ const block = await cmsRequest("POST", `/content/blocks/${uuid}/duplicate`);
50
+ return `Block duplicated successfully.\nNew UUID: ${block.uuid}\nName: ${block.name}`;
51
+ }
52
+ //# sourceMappingURL=blocks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blocks.js","sourceRoot":"","sources":["../../src/tools/blocks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ export declare function listCollections(params: {
2
+ page?: number;
3
+ size?: number;
4
+ }): Promise<string>;
5
+ export declare function getCollection(uuid: string): Promise<string>;
6
+ export declare function createCollection(data: {
7
+ name: string;
8
+ query: Record<string, unknown>;
9
+ order_by?: string;
10
+ order_dir?: string;
11
+ limit?: number;
12
+ }): Promise<string>;
13
+ export declare function updateCollection(uuid: string, data: {
14
+ name?: string;
15
+ query?: Record<string, unknown>;
16
+ order_by?: string;
17
+ order_dir?: string;
18
+ limit?: number;
19
+ }): Promise<string>;
20
+ export declare function deleteCollection(uuid: string): Promise<string>;
21
+ export declare function executeCollection(uuid: string): Promise<string>;
22
+ //# sourceMappingURL=collections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collections.d.ts","sourceRoot":"","sources":["../../src/tools/collections.ts"],"names":[],"mappings":"AAsBA,wBAAsB,eAAe,CAAC,MAAM,EAAE;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC,MAAM,CAAC,CAkBlB;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGjE;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CAGlB;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE;IACJ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACA,OAAO,CAAC,MAAM,CAAC,CAGjB;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGpE;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGrE"}
@@ -0,0 +1,38 @@
1
+ import { cmsRequest } from "../utils/api-client.js";
2
+ export async function listCollections(params) {
3
+ const query = new URLSearchParams();
4
+ if (params.page)
5
+ query.set("page", String(params.page));
6
+ if (params.size)
7
+ query.set("size", String(params.size));
8
+ const qs = query.toString();
9
+ const result = await cmsRequest("GET", `/content/collections${qs ? `?${qs}` : ""}`);
10
+ const collections = Array.isArray(result) ? result : result.data;
11
+ const lines = [`Found ${collections.length} collection(s):\n`];
12
+ for (const c of collections) {
13
+ lines.push(`- **${c.name}** (${c.uuid})`);
14
+ lines.push(` Order: ${c.order_by} ${c.order_dir} | Limit: ${c.limit}`);
15
+ }
16
+ return lines.join("\n");
17
+ }
18
+ export async function getCollection(uuid) {
19
+ const collection = await cmsRequest("GET", `/content/collections/${uuid}`);
20
+ return JSON.stringify(collection, null, 2);
21
+ }
22
+ export async function createCollection(data) {
23
+ const collection = await cmsRequest("POST", "/content/collections", data);
24
+ return `Collection created successfully.\nUUID: ${collection.uuid}\nName: ${collection.name}`;
25
+ }
26
+ export async function updateCollection(uuid, data) {
27
+ const collection = await cmsRequest("PUT", `/content/collections/${uuid}`, data);
28
+ return `Collection updated successfully.\nUUID: ${collection.uuid}\nName: ${collection.name}`;
29
+ }
30
+ export async function deleteCollection(uuid) {
31
+ await cmsRequest("DELETE", `/content/collections/${uuid}`);
32
+ return `Collection ${uuid} deleted successfully.`;
33
+ }
34
+ export async function executeCollection(uuid) {
35
+ const blocks = await cmsRequest("GET", `/content/collections/${uuid}/blocks`);
36
+ return JSON.stringify(blocks, null, 2);
37
+ }
38
+ //# sourceMappingURL=collections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collections.js","sourceRoot":"","sources":["../../src/tools/collections.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAsBpD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,MAGrC;IACC,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;IACpC,IAAI,MAAM,CAAC,IAAI;QAAE,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACxD,IAAI,MAAM,CAAC,IAAI;QAAE,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAExD,MAAM,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAG,MAAM,UAAU,CAC7B,KAAK,EACL,uBAAuB,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAC5C,CAAC;IAEF,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;IACjE,MAAM,KAAK,GAAG,CAAC,SAAS,WAAW,CAAC,MAAM,mBAAmB,CAAC,CAAC;IAC/D,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,SAAS,aAAa,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAY;IAC9C,MAAM,UAAU,GAAG,MAAM,UAAU,CAAa,KAAK,EAAE,wBAAwB,IAAI,EAAE,CAAC,CAAC;IACvF,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAMtC;IACC,MAAM,UAAU,GAAG,MAAM,UAAU,CAAa,MAAM,EAAE,sBAAsB,EAAE,IAAI,CAAC,CAAC;IACtF,OAAO,2CAA2C,UAAU,CAAC,IAAI,WAAW,UAAU,CAAC,IAAI,EAAE,CAAC;AAChG,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAY,EACZ,IAMC;IAED,MAAM,UAAU,GAAG,MAAM,UAAU,CAAa,KAAK,EAAE,wBAAwB,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;IAC7F,OAAO,2CAA2C,UAAU,CAAC,IAAI,WAAW,UAAU,CAAC,IAAI,EAAE,CAAC;AAChG,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAAY;IACjD,MAAM,UAAU,CAAU,QAAQ,EAAE,wBAAwB,IAAI,EAAE,CAAC,CAAC;IACpE,OAAO,cAAc,IAAI,wBAAwB,CAAC;AACpD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAY;IAClD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAY,KAAK,EAAE,wBAAwB,IAAI,SAAS,CAAC,CAAC;IACzF,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACzC,CAAC"}
@@ -0,0 +1,45 @@
1
+ export interface PageComposition {
2
+ uuid: string;
3
+ tenant_uuid: string;
4
+ slug: string;
5
+ title: string;
6
+ description: string;
7
+ blocks: string[];
8
+ layout: string;
9
+ tags: string[];
10
+ metadata: Record<string, unknown>;
11
+ is_published: boolean;
12
+ published_at: string | null;
13
+ created_at: string;
14
+ updated_at: string;
15
+ }
16
+ export declare function listPages(params: {
17
+ page?: number;
18
+ size?: number;
19
+ search?: string;
20
+ status?: string;
21
+ }): Promise<string>;
22
+ export declare function getPage(uuid: string): Promise<string>;
23
+ export declare function getPageBySlug(slug: string): Promise<string>;
24
+ export declare function createPage(data: {
25
+ slug: string;
26
+ title: string;
27
+ description?: string;
28
+ blocks?: string[];
29
+ layout?: string;
30
+ tags?: string[];
31
+ metadata?: Record<string, unknown>;
32
+ }): Promise<string>;
33
+ export declare function updatePage(uuid: string, data: {
34
+ slug?: string;
35
+ title?: string;
36
+ description?: string;
37
+ blocks?: string[];
38
+ layout?: string;
39
+ tags?: string[];
40
+ metadata?: Record<string, unknown>;
41
+ }): Promise<string>;
42
+ export declare function deletePage(uuid: string): Promise<string>;
43
+ export declare function publishPage(uuid: string, publish: boolean): Promise<string>;
44
+ export declare function duplicatePage(uuid: string): Promise<string>;
45
+ //# sourceMappingURL=pages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pages.d.ts","sourceRoot":"","sources":["../../src/tools/pages.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAeD,wBAAsB,SAAS,CAAC,MAAM,EAAE;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,MAAM,CAAC,CAsBlB;AAED,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAM3D;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQjE;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,GAAG,OAAO,CAAC,MAAM,CAAC,CAGlB;AAED,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE;IACJ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,GACA,OAAO,CAAC,MAAM,CAAC,CAGjB;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAG9D;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAGjF;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGjE"}
@@ -0,0 +1,51 @@
1
+ import { cmsRequest } from "../utils/api-client.js";
2
+ export async function listPages(params) {
3
+ const query = new URLSearchParams();
4
+ if (params.page)
5
+ query.set("page", String(params.page));
6
+ if (params.size)
7
+ query.set("size", String(params.size));
8
+ if (params.search)
9
+ query.set("search", params.search);
10
+ if (params.status)
11
+ query.set("status", params.status);
12
+ const qs = query.toString();
13
+ const result = await cmsRequest("GET", `/content/pages${qs ? `?${qs}` : ""}`);
14
+ const pages = Array.isArray(result) ? result : result.data;
15
+ const total = Array.isArray(result) ? pages.length : result.total;
16
+ const lines = [`Found ${total} page(s):\n`];
17
+ for (const p of pages) {
18
+ lines.push(`- **${p.title}** (/${p.slug})`);
19
+ lines.push(` UUID: ${p.uuid} | Blocks: ${p.blocks.length} | Published: ${p.is_published}`);
20
+ }
21
+ return lines.join("\n");
22
+ }
23
+ export async function getPage(uuid) {
24
+ const result = await cmsRequest("GET", `/content/pages/${uuid}/with-blocks`);
25
+ return JSON.stringify(result, null, 2);
26
+ }
27
+ export async function getPageBySlug(slug) {
28
+ const result = await cmsRequest("GET", `/public/content/pages/slug/${encodeURIComponent(slug)}`, undefined, true);
29
+ return JSON.stringify(result, null, 2);
30
+ }
31
+ export async function createPage(data) {
32
+ const page = await cmsRequest("POST", "/content/pages", data);
33
+ return `Page created successfully.\nUUID: ${page.uuid}\nTitle: ${page.title}\nSlug: /${page.slug}`;
34
+ }
35
+ export async function updatePage(uuid, data) {
36
+ const page = await cmsRequest("PUT", `/content/pages/${uuid}`, data);
37
+ return `Page updated successfully.\nUUID: ${page.uuid}\nTitle: ${page.title}\nSlug: /${page.slug}`;
38
+ }
39
+ export async function deletePage(uuid) {
40
+ await cmsRequest("DELETE", `/content/pages/${uuid}`);
41
+ return `Page ${uuid} deleted successfully.`;
42
+ }
43
+ export async function publishPage(uuid, publish) {
44
+ await cmsRequest("POST", `/content/pages/${uuid}/publish`, { publish });
45
+ return `Page ${uuid} ${publish ? "published" : "unpublished"} successfully.`;
46
+ }
47
+ export async function duplicatePage(uuid) {
48
+ const page = await cmsRequest("POST", `/content/pages/${uuid}/duplicate`);
49
+ return `Page duplicated successfully.\nNew UUID: ${page.uuid}\nTitle: ${page.title}\nSlug: /${page.slug}`;
50
+ }
51
+ //# sourceMappingURL=pages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pages.js","sourceRoot":"","sources":["../../src/tools/pages.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,6 @@
1
1
  export interface ScaffoldOptions {
2
2
  project_name: string;
3
3
  destination: string;
4
- cms_api_url: string;
5
4
  cms_api_token: string;
6
5
  site_url?: string;
7
6
  site_name?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"scaffold-project.d.ts","sourceRoot":"","sources":["../../src/tools/scaffold-project.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAoG/E"}
1
+ {"version":3,"file":"scaffold-project.d.ts","sourceRoot":"","sources":["../../src/tools/scaffold-project.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAkG/E"}
@@ -7,7 +7,7 @@ const __filename = fileURLToPath(import.meta.url);
7
7
  const __dirname = dirname(__filename);
8
8
  const TEMPLATE_DIR = join(__dirname, "..", "..", "template");
9
9
  export async function scaffoldProject(options) {
10
- const { project_name, destination, cms_api_url, cms_api_token, site_url, site_name, install_deps = false, } = options;
10
+ const { project_name, destination, cms_api_token, site_url, site_name, install_deps = false, } = options;
11
11
  // Validate destination exists
12
12
  try {
13
13
  const destStat = await stat(destination);
@@ -43,7 +43,6 @@ export async function scaffoldProject(options) {
43
43
  const revalidateSecret = generateSecret();
44
44
  const envContent = [
45
45
  "# CMS API",
46
- `CMS_API_URL=${cms_api_url}`,
47
46
  `CMS_API_TOKEN=${cms_api_token}`,
48
47
  "",
49
48
  "# On-demand ISR revalidation",
@@ -1 +1 @@
1
- {"version":3,"file":"scaffold-project.js","sourceRoot":"","sources":["../../src/tools/scaffold-project.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scaffold-project.js","sourceRoot":"","sources":["../../src/tools/scaffold-project.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare function searchContent(params: {
2
+ query: string;
3
+ type?: string;
4
+ page?: number;
5
+ page_size?: number;
6
+ }): Promise<string>;
7
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"AAgBA,wBAAsB,aAAa,CAAC,MAAM,EAAE;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,MAAM,CAAC,CAyBlB"}
@@ -0,0 +1,27 @@
1
+ import { cmsRequest } from "../utils/api-client.js";
2
+ export async function searchContent(params) {
3
+ const qs = new URLSearchParams();
4
+ qs.set("q", params.query);
5
+ if (params.type)
6
+ qs.set("type", params.type);
7
+ if (params.page)
8
+ qs.set("page", String(params.page));
9
+ if (params.page_size)
10
+ qs.set("page_size", String(params.page_size));
11
+ const result = await cmsRequest("GET", `/content/search?${qs.toString()}`);
12
+ const lines = [`Search results for "${params.query}" (${result.total} total):\n`];
13
+ for (const item of result.data) {
14
+ if (item.type === "block" && item.block) {
15
+ const b = item.block;
16
+ lines.push(`- [Block] **${b.name}** (${b.uuid}) — type: ${b.type}`);
17
+ }
18
+ else if (item.type === "page" && item.page) {
19
+ const p = item.page;
20
+ lines.push(`- [Page] **${p.title}** (/${p.slug}) — ${p.uuid}`);
21
+ }
22
+ }
23
+ if (result.data.length === 0)
24
+ lines.push("No results found.");
25
+ return lines.join("\n");
26
+ }
27
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAgBpD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAKnC;IACC,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAC;IACjC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1B,IAAI,MAAM,CAAC,IAAI;QAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,MAAM,CAAC,IAAI;QAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACrD,IAAI,MAAM,CAAC,SAAS;QAAE,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IAEpE,MAAM,MAAM,GAAG,MAAM,UAAU,CAC7B,KAAK,EACL,mBAAmB,EAAE,CAAC,QAAQ,EAAE,EAAE,CACnC,CAAC;IAEF,MAAM,KAAK,GAAG,CAAC,uBAAuB,MAAM,CAAC,KAAK,MAAM,MAAM,CAAC,KAAK,YAAY,CAAC,CAAC;IAClF,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAC/B,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACxC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAY,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACtE,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAC7C,MAAM,CAAC,GAAG,IAAI,CAAC,IAAW,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC9D,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"validate-config.d.ts","sourceRoot":"","sources":["../../src/tools/validate-config.ts"],"names":[],"mappings":"AAGA,UAAU,gBAAgB;IACxB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B;AAED,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAuEnF"}
1
+ {"version":3,"file":"validate-config.d.ts","sourceRoot":"","sources":["../../src/tools/validate-config.ts"],"names":[],"mappings":"AAKA,UAAU,gBAAgB;IACxB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B;AAED,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAuEnF"}
@@ -1,5 +1,6 @@
1
1
  import { readFile } from "node:fs/promises";
2
2
  import { join } from "node:path";
3
+ const CMS_API_URL = "https://cms-gateway.estation.io/api/v1";
3
4
  export async function validateConfig(projectPath) {
4
5
  const errors = [];
5
6
  const warnings = [];
@@ -31,7 +32,7 @@ export async function validateConfig(projectPath) {
31
32
  env[key] = value;
32
33
  }
33
34
  // Check required vars
34
- const required = ["CMS_API_URL", "CMS_API_TOKEN", "REVALIDATE_SECRET"];
35
+ const required = ["CMS_API_TOKEN", "REVALIDATE_SECRET"];
35
36
  for (const key of required) {
36
37
  if (!env[key]) {
37
38
  errors.push(`Missing required environment variable: ${key}`);
@@ -41,11 +42,11 @@ export async function validateConfig(projectPath) {
41
42
  warnings.push("NEXT_PUBLIC_SITE_URL is not set — sitemap generation will use a placeholder");
42
43
  }
43
44
  // Test CMS API connectivity
44
- if (env["CMS_API_URL"] && env["CMS_API_TOKEN"]) {
45
+ if (env["CMS_API_TOKEN"]) {
45
46
  try {
46
47
  const controller = new AbortController();
47
48
  const timeout = setTimeout(() => controller.abort(), 10000);
48
- const res = await fetch(`${env["CMS_API_URL"]}/public/content/pages`, {
49
+ const res = await fetch(`${CMS_API_URL}/public/content/pages`, {
49
50
  headers: { "X-API-TOKEN": env["CMS_API_TOKEN"] },
50
51
  signal: controller.signal,
51
52
  });
@@ -64,7 +65,7 @@ export async function validateConfig(projectPath) {
64
65
  errors,
65
66
  warnings,
66
67
  env: {
67
- CMS_API_URL: env["CMS_API_URL"] || "",
68
+ CMS_API_URL,
68
69
  NEXT_PUBLIC_SITE_URL: env["NEXT_PUBLIC_SITE_URL"] || "",
69
70
  },
70
71
  };
@@ -1 +1 @@
1
- {"version":3,"file":"validate-config.js","sourceRoot":"","sources":["../../src/tools/validate-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validate-config.js","sourceRoot":"","sources":["../../src/tools/validate-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export declare function setJwt(token: string): void;
2
+ export declare function setApiToken(token: string): void;
3
+ export declare function getAuthState(): {
4
+ authenticated: boolean;
5
+ method?: string;
6
+ };
7
+ export declare function cmsRequest<T>(method: string, path: string, body?: unknown, usePublic?: boolean): Promise<T>;
8
+ export declare function login(email: string, password: string): Promise<string>;
9
+ //# sourceMappingURL=api-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/utils/api-client.ts"],"names":[],"mappings":"AAeA,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,QAEnC;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,QAExC;AAED,wBAAgB,YAAY,IAAI;IAAE,aAAa,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAI1E;AAcD,wBAAsB,UAAU,CAAC,CAAC,EAChC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,EACd,SAAS,UAAQ,GAChB,OAAO,CAAC,CAAC,CAAC,CA4BZ;AAED,wBAAsB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAmB5E"}
@@ -0,0 +1,74 @@
1
+ const CMS_BASE_URL = "https://cms-gateway.estation.io/api/v1";
2
+ const auth = {};
3
+ export function setJwt(token) {
4
+ auth.jwt = token;
5
+ }
6
+ export function setApiToken(token) {
7
+ auth.apiToken = token;
8
+ }
9
+ export function getAuthState() {
10
+ if (auth.jwt)
11
+ return { authenticated: true, method: "jwt" };
12
+ if (auth.apiToken)
13
+ return { authenticated: true, method: "api_token" };
14
+ return { authenticated: false };
15
+ }
16
+ function buildHeaders(usePublic) {
17
+ const headers = { "Content-Type": "application/json" };
18
+ if (usePublic && auth.apiToken) {
19
+ headers["X-API-TOKEN"] = auth.apiToken;
20
+ }
21
+ else if (auth.jwt) {
22
+ headers["Authorization"] = `Bearer ${auth.jwt}`;
23
+ }
24
+ else if (auth.apiToken) {
25
+ headers["X-API-TOKEN"] = auth.apiToken;
26
+ }
27
+ return headers;
28
+ }
29
+ export async function cmsRequest(method, path, body, usePublic = false) {
30
+ const url = `${CMS_BASE_URL}${path}`;
31
+ const controller = new AbortController();
32
+ const timeout = setTimeout(() => controller.abort(), 15000);
33
+ try {
34
+ const res = await fetch(url, {
35
+ method,
36
+ headers: buildHeaders(usePublic),
37
+ body: body ? JSON.stringify(body) : undefined,
38
+ signal: controller.signal,
39
+ });
40
+ clearTimeout(timeout);
41
+ if (!res.ok) {
42
+ const text = await res.text().catch(() => "");
43
+ throw new Error(`CMS API ${res.status}: ${res.statusText}${text ? ` — ${text}` : ""}`);
44
+ }
45
+ const json = await res.json();
46
+ return json.data;
47
+ }
48
+ catch (err) {
49
+ clearTimeout(timeout);
50
+ if (err.name === "AbortError") {
51
+ throw new Error(`CMS API request timed out: ${method} ${path}`);
52
+ }
53
+ throw err;
54
+ }
55
+ }
56
+ export async function login(email, password) {
57
+ const url = `${CMS_BASE_URL}/public/users/login`;
58
+ const res = await fetch(url, {
59
+ method: "POST",
60
+ headers: { "Content-Type": "application/json" },
61
+ body: JSON.stringify({ email, password }),
62
+ });
63
+ if (!res.ok) {
64
+ const text = await res.text().catch(() => "");
65
+ throw new Error(`Login failed (${res.status}): ${text}`);
66
+ }
67
+ const json = await res.json();
68
+ const token = json.data?.token || json.token;
69
+ if (!token)
70
+ throw new Error("Login response did not contain a token");
71
+ auth.jwt = token;
72
+ return token;
73
+ }
74
+ //# sourceMappingURL=api-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/utils/api-client.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@estation/create-cms-site",
3
- "version": "1.0.0",
3
+ "version": "1.2.0",
4
4
  "description": "MCP server to scaffold Next.js sites powered by eSTATION CMS",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,5 +1,4 @@
1
1
  # CMS API
2
- CMS_API_URL=https://cms-gateway.estation.io/api/v1
3
2
  CMS_API_TOKEN=your-tenant-api-token
4
3
 
5
4
  # On-demand ISR revalidation
@@ -7,7 +7,7 @@ import type {
7
7
  SearchResultItem,
8
8
  } from "./types";
9
9
 
10
- const CMS_API_URL = process.env.CMS_API_URL || "";
10
+ const CMS_API_URL = "https://cms-gateway.estation.io/api/v1";
11
11
  const CMS_API_TOKEN = process.env.CMS_API_TOKEN || "";
12
12
 
13
13
  interface ApiResponse<T> {