@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.
- package/README.md +88 -44
- package/dist/index.js +210 -38
- package/dist/index.js.map +1 -1
- package/dist/tools/auth.d.ts +4 -0
- package/dist/tools/auth.d.ts.map +1 -0
- package/dist/tools/auth.js +17 -0
- package/dist/tools/auth.js.map +1 -0
- package/dist/tools/blocks.d.ts +38 -0
- package/dist/tools/blocks.d.ts.map +1 -0
- package/dist/tools/blocks.js +52 -0
- package/dist/tools/blocks.js.map +1 -0
- package/dist/tools/collections.d.ts +22 -0
- package/dist/tools/collections.d.ts.map +1 -0
- package/dist/tools/collections.js +38 -0
- package/dist/tools/collections.js.map +1 -0
- package/dist/tools/pages.d.ts +45 -0
- package/dist/tools/pages.d.ts.map +1 -0
- package/dist/tools/pages.js +51 -0
- package/dist/tools/pages.js.map +1 -0
- package/dist/tools/scaffold-project.d.ts +0 -1
- package/dist/tools/scaffold-project.d.ts.map +1 -1
- package/dist/tools/scaffold-project.js +1 -2
- package/dist/tools/scaffold-project.js.map +1 -1
- package/dist/tools/search.d.ts +7 -0
- package/dist/tools/search.d.ts.map +1 -0
- package/dist/tools/search.js +27 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/validate-config.d.ts.map +1 -1
- package/dist/tools/validate-config.js +5 -4
- package/dist/tools/validate-config.js.map +1 -1
- package/dist/utils/api-client.d.ts +9 -0
- package/dist/utils/api-client.d.ts.map +1 -0
- package/dist/utils/api-client.js +74 -0
- package/dist/utils/api-client.js.map +1 -0
- package/package.json +1 -1
- package/template/.env.example +0 -1
- 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
|
|
3
|
+
MCP server for [eSTATION CMS](https://estation.io) — scaffold new websites, and read/write CMS content directly from Claude.
|
|
4
4
|
|
|
5
|
-
##
|
|
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
|
-
"
|
|
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
|
|
25
|
+
claude mcp add estation-cms -- npx -y @estation/create-cms-site
|
|
26
26
|
```
|
|
27
27
|
|
|
28
28
|
## Tools
|
|
29
29
|
|
|
30
|
-
###
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
|
35
|
-
|
|
36
|
-
| `
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
|
41
|
-
|
|
42
|
-
| `
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
|
53
|
-
|
|
54
|
-
| `
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
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: "
|
|
10
|
-
version: "1.
|
|
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
|
-
//
|
|
13
|
-
|
|
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
|
-
|
|
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
|
-
},
|
|
22
|
-
|
|
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
|
-
|
|
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
|
-
},
|
|
61
|
-
const result = await validateConfig(project_path);
|
|
238
|
+
}, wrap(({ project_path }) => validateConfig(project_path).then((r) => {
|
|
62
239
|
const lines = [];
|
|
63
|
-
lines.push(
|
|
240
|
+
lines.push(r.valid ? "Configuration is valid." : "Configuration has errors.");
|
|
64
241
|
lines.push("");
|
|
65
|
-
if (
|
|
242
|
+
if (r.errors.length) {
|
|
66
243
|
lines.push("Errors:");
|
|
67
|
-
for (const e of
|
|
244
|
+
for (const e of r.errors)
|
|
68
245
|
lines.push(` - ${e}`);
|
|
69
246
|
lines.push("");
|
|
70
247
|
}
|
|
71
|
-
if (
|
|
248
|
+
if (r.warnings.length) {
|
|
72
249
|
lines.push("Warnings:");
|
|
73
|
-
for (const w of
|
|
250
|
+
for (const w of r.warnings)
|
|
74
251
|
lines.push(` - ${w}`);
|
|
75
252
|
lines.push("");
|
|
76
253
|
}
|
|
77
|
-
if (
|
|
78
|
-
lines.push(`CMS API URL: ${
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
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":"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"}
|
|
@@ -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":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAwBpD,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAMhC;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;IACxD,IAAI,MAAM,CAAC,MAAM;QAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACtD,IAAI,MAAM,CAAC,MAAM;QAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAEtD,IAAI,IAAI,GAAG,iBAAiB,CAAC;IAC7B,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,IAAI,GAAG,yBAAyB,CAAC;QACjC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAG,MAAM,UAAU,CAC7B,KAAK,EACL,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAC/B,CAAC;IAEF,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;IAC5D,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;IAEnE,MAAM,KAAK,GAAG,CAAC,SAAS,KAAK,cAAc,CAAC,CAAC;IAC7C,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,iBAAiB,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;IACxG,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAY;IACzC,MAAM,KAAK,GAAG,MAAM,UAAU,CAAe,KAAK,EAAE,mBAAmB,IAAI,EAAE,CAAC,CAAC;IAC/E,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAMjC;IACC,MAAM,KAAK,GAAG,MAAM,UAAU,CAAe,MAAM,EAAE,iBAAiB,EAAE,IAAI,CAAC,CAAC;IAC9E,OAAO,sCAAsC,KAAK,CAAC,IAAI,WAAW,KAAK,CAAC,IAAI,WAAW,KAAK,CAAC,IAAI,EAAE,CAAC;AACtG,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAAY,EACZ,IAKC;IAED,MAAM,KAAK,GAAG,MAAM,UAAU,CAAe,KAAK,EAAE,mBAAmB,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;IACrF,OAAO,sCAAsC,KAAK,CAAC,IAAI,WAAW,KAAK,CAAC,IAAI,cAAc,KAAK,CAAC,OAAO,EAAE,CAAC;AAC5G,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAY;IAC5C,MAAM,UAAU,CAAU,QAAQ,EAAE,mBAAmB,IAAI,EAAE,CAAC,CAAC;IAC/D,OAAO,SAAS,IAAI,wBAAwB,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAY,EAAE,OAAgB;IAC/D,MAAM,UAAU,CAAU,MAAM,EAAE,mBAAmB,IAAI,UAAU,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAClF,OAAO,SAAS,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,gBAAgB,CAAC;AAChF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAY;IAC/C,MAAM,KAAK,GAAG,MAAM,UAAU,CAAe,MAAM,EAAE,mBAAmB,IAAI,YAAY,CAAC,CAAC;IAC1F,OAAO,6CAA6C,KAAK,CAAC,IAAI,WAAW,KAAK,CAAC,IAAI,EAAE,CAAC;AACxF,CAAC"}
|
|
@@ -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 +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,
|
|
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,
|
|
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":"AAAA,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAS,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"scaffold-project.js","sourceRoot":"","sources":["../../src/tools/scaffold-project.ts"],"names":[],"mappings":"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"}
|
|
@@ -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":"
|
|
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 = ["
|
|
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["
|
|
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(`${
|
|
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
|
|
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":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
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
package/template/.env.example
CHANGED
|
@@ -7,7 +7,7 @@ import type {
|
|
|
7
7
|
SearchResultItem,
|
|
8
8
|
} from "./types";
|
|
9
9
|
|
|
10
|
-
const 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> {
|