@socialai/website-mcp 1.0.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/dist/client.d.ts +78 -0
- package/dist/client.js +157 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/server.d.ts +5 -0
- package/dist/server.js +285 -0
- package/dist/server.js.map +1 -0
- package/package.json +29 -0
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
export interface ClientConfig {
|
|
2
|
+
apiKey: string;
|
|
3
|
+
baseUrl: string;
|
|
4
|
+
}
|
|
5
|
+
export declare class SocialAIClient {
|
|
6
|
+
private apiKey;
|
|
7
|
+
private baseUrl;
|
|
8
|
+
constructor(config: ClientConfig);
|
|
9
|
+
private request;
|
|
10
|
+
private autoReport;
|
|
11
|
+
listTemplates(): Promise<any>;
|
|
12
|
+
createWebsiteFromTemplate(body: {
|
|
13
|
+
templateId: string;
|
|
14
|
+
name?: string;
|
|
15
|
+
subdomain?: string;
|
|
16
|
+
}): Promise<any>;
|
|
17
|
+
listWebsites(): Promise<any>;
|
|
18
|
+
createWebsite(body: {
|
|
19
|
+
name: string;
|
|
20
|
+
description?: string;
|
|
21
|
+
subdomain?: string;
|
|
22
|
+
projectType?: string;
|
|
23
|
+
}): Promise<any>;
|
|
24
|
+
getWebsite(projectId: string): Promise<any>;
|
|
25
|
+
updateWebsite(projectId: string, body: Record<string, any>): Promise<any>;
|
|
26
|
+
deleteWebsite(projectId: string): Promise<any>;
|
|
27
|
+
listPages(projectId: string): Promise<any>;
|
|
28
|
+
createPage(projectId: string, body: {
|
|
29
|
+
title: string;
|
|
30
|
+
slug: string;
|
|
31
|
+
isHome?: boolean;
|
|
32
|
+
blocks?: any[];
|
|
33
|
+
}): Promise<any>;
|
|
34
|
+
getPage(projectId: string, pageId: string): Promise<any>;
|
|
35
|
+
updatePage(projectId: string, pageId: string, body: Record<string, any>): Promise<any>;
|
|
36
|
+
deletePage(projectId: string, pageId: string): Promise<any>;
|
|
37
|
+
publishWebsite(projectId: string, label?: string): Promise<any>;
|
|
38
|
+
getTheme(projectId: string): Promise<any>;
|
|
39
|
+
updateTheme(projectId: string, theme: Record<string, any>): Promise<any>;
|
|
40
|
+
listProducts(projectId: string): Promise<any>;
|
|
41
|
+
addProduct(projectId: string, body: Record<string, any>): Promise<any>;
|
|
42
|
+
updateProduct(projectId: string, productId: string, body: Record<string, any>): Promise<any>;
|
|
43
|
+
deleteProduct(projectId: string, productId: string): Promise<any>;
|
|
44
|
+
uploadImageFromUrl(body: {
|
|
45
|
+
url: string;
|
|
46
|
+
filename?: string;
|
|
47
|
+
}): Promise<any>;
|
|
48
|
+
uploadImageFile(body: {
|
|
49
|
+
base64: string;
|
|
50
|
+
filename?: string;
|
|
51
|
+
mimeType?: string;
|
|
52
|
+
}): Promise<any>;
|
|
53
|
+
exportProductsCsv(projectId: string): Promise<any>;
|
|
54
|
+
importProductsCsv(projectId: string, csv: string): Promise<any>;
|
|
55
|
+
listCategories(projectId: string): Promise<any>;
|
|
56
|
+
listVariants(projectId: string, productId?: string): Promise<any>;
|
|
57
|
+
addVariants(projectId: string, productId: string, variants: any[]): Promise<any>;
|
|
58
|
+
clearVariants(projectId: string, productId: string): Promise<any>;
|
|
59
|
+
getPayments(projectId: string): Promise<any>;
|
|
60
|
+
configurePayments(projectId: string, body: {
|
|
61
|
+
provider?: string;
|
|
62
|
+
testMode?: boolean;
|
|
63
|
+
currency?: string;
|
|
64
|
+
}): Promise<any>;
|
|
65
|
+
reportIssue(body: {
|
|
66
|
+
projectId?: string;
|
|
67
|
+
summary?: string;
|
|
68
|
+
details: string;
|
|
69
|
+
toolName?: string;
|
|
70
|
+
}): Promise<any>;
|
|
71
|
+
generateContent(body: {
|
|
72
|
+
prompt: string;
|
|
73
|
+
mode: 'full-page' | 'block' | 'fill-content' | 'suggest-theme';
|
|
74
|
+
context?: Record<string, any>;
|
|
75
|
+
provider?: string;
|
|
76
|
+
model?: string;
|
|
77
|
+
}): Promise<any>;
|
|
78
|
+
}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
export class SocialAIClient {
|
|
2
|
+
apiKey;
|
|
3
|
+
baseUrl;
|
|
4
|
+
constructor(config) {
|
|
5
|
+
this.apiKey = config.apiKey;
|
|
6
|
+
this.baseUrl = config.baseUrl.replace(/\/$/, '');
|
|
7
|
+
}
|
|
8
|
+
async request(method, path, body) {
|
|
9
|
+
const url = `${this.baseUrl}/api/mcp-api${path}`;
|
|
10
|
+
const res = await fetch(url, {
|
|
11
|
+
method,
|
|
12
|
+
headers: {
|
|
13
|
+
'Authorization': `Bearer ${this.apiKey}`,
|
|
14
|
+
'Content-Type': 'application/json',
|
|
15
|
+
},
|
|
16
|
+
body: body !== undefined ? JSON.stringify(body) : undefined,
|
|
17
|
+
});
|
|
18
|
+
const text = await res.text();
|
|
19
|
+
let data;
|
|
20
|
+
try {
|
|
21
|
+
data = JSON.parse(text);
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
data = { error: text };
|
|
25
|
+
}
|
|
26
|
+
if (!res.ok) {
|
|
27
|
+
// Auto-report server errors (5xx) to the admin queue so the team sees what agents
|
|
28
|
+
// hit, even when the agent doesn't explicitly report it. 4xx (bad input/auth) is the
|
|
29
|
+
// agent's to handle. Never auto-report the report endpoint itself (avoid loops).
|
|
30
|
+
if (res.status >= 500 && path !== '/report') {
|
|
31
|
+
this.autoReport(method, path, res.status, data?.error || text);
|
|
32
|
+
}
|
|
33
|
+
throw new Error(data?.error || `HTTP ${res.status}`);
|
|
34
|
+
}
|
|
35
|
+
return data;
|
|
36
|
+
}
|
|
37
|
+
autoReport(method, path, status, message) {
|
|
38
|
+
// fire-and-forget — never let reporting failures affect the tool call
|
|
39
|
+
fetch(`${this.baseUrl}/api/mcp-api/report`, {
|
|
40
|
+
method: 'POST',
|
|
41
|
+
headers: { 'Authorization': `Bearer ${this.apiKey}`, 'Content-Type': 'application/json' },
|
|
42
|
+
body: JSON.stringify({
|
|
43
|
+
summary: `${method} ${path} → ${status}`,
|
|
44
|
+
details: `Automatic MCP error report.\n${method} /api/mcp-api${path} failed with HTTP ${status}.\n${String(message).slice(0, 500)}`,
|
|
45
|
+
toolName: path,
|
|
46
|
+
}),
|
|
47
|
+
}).catch(() => { });
|
|
48
|
+
}
|
|
49
|
+
// Templates
|
|
50
|
+
listTemplates() {
|
|
51
|
+
return this.request('GET', '/templates');
|
|
52
|
+
}
|
|
53
|
+
createWebsiteFromTemplate(body) {
|
|
54
|
+
return this.request('POST', '/websites/from-template', body);
|
|
55
|
+
}
|
|
56
|
+
// Websites
|
|
57
|
+
listWebsites() {
|
|
58
|
+
return this.request('GET', '/websites');
|
|
59
|
+
}
|
|
60
|
+
createWebsite(body) {
|
|
61
|
+
return this.request('POST', '/websites', body);
|
|
62
|
+
}
|
|
63
|
+
getWebsite(projectId) {
|
|
64
|
+
return this.request('GET', `/websites/${projectId}`);
|
|
65
|
+
}
|
|
66
|
+
updateWebsite(projectId, body) {
|
|
67
|
+
return this.request('PATCH', `/websites/${projectId}`, body);
|
|
68
|
+
}
|
|
69
|
+
deleteWebsite(projectId) {
|
|
70
|
+
return this.request('DELETE', `/websites/${projectId}`);
|
|
71
|
+
}
|
|
72
|
+
// Pages
|
|
73
|
+
listPages(projectId) {
|
|
74
|
+
return this.request('GET', `/websites/${projectId}/pages`);
|
|
75
|
+
}
|
|
76
|
+
createPage(projectId, body) {
|
|
77
|
+
return this.request('POST', `/websites/${projectId}/pages`, body);
|
|
78
|
+
}
|
|
79
|
+
getPage(projectId, pageId) {
|
|
80
|
+
return this.request('GET', `/websites/${projectId}/pages/${pageId}`);
|
|
81
|
+
}
|
|
82
|
+
updatePage(projectId, pageId, body) {
|
|
83
|
+
return this.request('PATCH', `/websites/${projectId}/pages/${pageId}`, body);
|
|
84
|
+
}
|
|
85
|
+
deletePage(projectId, pageId) {
|
|
86
|
+
return this.request('DELETE', `/websites/${projectId}/pages/${pageId}`);
|
|
87
|
+
}
|
|
88
|
+
// Publish
|
|
89
|
+
publishWebsite(projectId, label) {
|
|
90
|
+
return this.request('POST', `/websites/${projectId}/publish`, { label });
|
|
91
|
+
}
|
|
92
|
+
// Theme
|
|
93
|
+
getTheme(projectId) {
|
|
94
|
+
return this.request('GET', `/websites/${projectId}/theme`);
|
|
95
|
+
}
|
|
96
|
+
updateTheme(projectId, theme) {
|
|
97
|
+
return this.request('PATCH', `/websites/${projectId}/theme`, theme);
|
|
98
|
+
}
|
|
99
|
+
// Products (shop projects)
|
|
100
|
+
listProducts(projectId) {
|
|
101
|
+
return this.request('GET', `/websites/${projectId}/products`);
|
|
102
|
+
}
|
|
103
|
+
addProduct(projectId, body) {
|
|
104
|
+
return this.request('POST', `/websites/${projectId}/products`, body);
|
|
105
|
+
}
|
|
106
|
+
updateProduct(projectId, productId, body) {
|
|
107
|
+
return this.request('PATCH', `/websites/${projectId}/products/${productId}`, body);
|
|
108
|
+
}
|
|
109
|
+
deleteProduct(projectId, productId) {
|
|
110
|
+
return this.request('DELETE', `/websites/${projectId}/products/${productId}`);
|
|
111
|
+
}
|
|
112
|
+
// Media
|
|
113
|
+
uploadImageFromUrl(body) {
|
|
114
|
+
return this.request('POST', '/media/from-url', body);
|
|
115
|
+
}
|
|
116
|
+
uploadImageFile(body) {
|
|
117
|
+
return this.request('POST', '/media/upload', body);
|
|
118
|
+
}
|
|
119
|
+
// CSV import/export
|
|
120
|
+
exportProductsCsv(projectId) {
|
|
121
|
+
return this.request('GET', `/websites/${projectId}/products/csv`);
|
|
122
|
+
}
|
|
123
|
+
importProductsCsv(projectId, csv) {
|
|
124
|
+
return this.request('POST', `/websites/${projectId}/products/csv`, { csv });
|
|
125
|
+
}
|
|
126
|
+
// Categories
|
|
127
|
+
listCategories(projectId) {
|
|
128
|
+
return this.request('GET', `/websites/${projectId}/categories`);
|
|
129
|
+
}
|
|
130
|
+
// Variants
|
|
131
|
+
listVariants(projectId, productId) {
|
|
132
|
+
const qs = productId ? `?productId=${productId}` : '';
|
|
133
|
+
return this.request('GET', `/websites/${projectId}/variants${qs}`);
|
|
134
|
+
}
|
|
135
|
+
addVariants(projectId, productId, variants) {
|
|
136
|
+
return this.request('POST', `/websites/${projectId}/variants`, { productId, variants });
|
|
137
|
+
}
|
|
138
|
+
clearVariants(projectId, productId) {
|
|
139
|
+
return this.request('DELETE', `/websites/${projectId}/variants`, { productId });
|
|
140
|
+
}
|
|
141
|
+
// Payments
|
|
142
|
+
getPayments(projectId) {
|
|
143
|
+
return this.request('GET', `/websites/${projectId}/payments`);
|
|
144
|
+
}
|
|
145
|
+
configurePayments(projectId, body) {
|
|
146
|
+
return this.request('PATCH', `/websites/${projectId}/payments`, body);
|
|
147
|
+
}
|
|
148
|
+
// Report a problem to the Social AI team
|
|
149
|
+
reportIssue(body) {
|
|
150
|
+
return this.request('POST', '/report', body);
|
|
151
|
+
}
|
|
152
|
+
// AI generation
|
|
153
|
+
generateContent(body) {
|
|
154
|
+
return this.request('POST', '/ai-generate', body);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
3
|
+
import { createServer } from './server.js';
|
|
4
|
+
const apiKey = process.env.SOCIALAI_API_KEY || process.env.SAIAPP_API_KEY;
|
|
5
|
+
const baseUrl = process.env.SOCIALAI_API_URL || process.env.SAIAPP_API_URL || 'https://socialai.one';
|
|
6
|
+
if (!apiKey) {
|
|
7
|
+
console.error('Error: SOCIALAI_API_KEY environment variable is required.');
|
|
8
|
+
console.error('Generate a key at: https://socialai.one/settings/api-keys');
|
|
9
|
+
process.exit(1);
|
|
10
|
+
}
|
|
11
|
+
const server = createServer({ apiKey, baseUrl });
|
|
12
|
+
const transport = new StdioServerTransport();
|
|
13
|
+
await server.connect(transport);
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAA;AACzE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,sBAAsB,CAAA;AAEpG,IAAI,CAAC,MAAM,EAAE,CAAC;IACZ,OAAO,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAA;IAC1E,OAAO,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAA;IAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC;AAED,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAA;AAChD,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAA;AAC5C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA"}
|
package/dist/server.d.ts
ADDED
package/dist/server.js
ADDED
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { SocialAIClient } from './client.js';
|
|
4
|
+
export function createServer(config) {
|
|
5
|
+
const client = new SocialAIClient(config);
|
|
6
|
+
const server = new McpServer({
|
|
7
|
+
name: 'social-ai-website-builder',
|
|
8
|
+
version: '1.0.0',
|
|
9
|
+
});
|
|
10
|
+
// ── Websites ──────────────────────────────────────────────────────────────
|
|
11
|
+
server.tool('list_websites', 'List all your Social AI website projects', {}, async () => {
|
|
12
|
+
const data = await client.listWebsites();
|
|
13
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
14
|
+
});
|
|
15
|
+
server.tool('create_website', 'Create a new Social AI website project. Requires a user-level API key.', {
|
|
16
|
+
name: z.string().describe('Website name'),
|
|
17
|
+
description: z.string().optional().describe('Short description'),
|
|
18
|
+
subdomain: z.string().optional().describe('Subdomain (e.g. "mybusiness" → mybusiness.socialai.one)'),
|
|
19
|
+
projectType: z.enum(['website', 'shop']).optional().default('website').describe('Type of project'),
|
|
20
|
+
}, async (args) => {
|
|
21
|
+
const data = await client.createWebsite(args);
|
|
22
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
23
|
+
});
|
|
24
|
+
server.tool('get_website', 'Get details of a website project including all its pages', { projectId: z.string().describe('Website project ID') }, async ({ projectId }) => {
|
|
25
|
+
const data = await client.getWebsite(projectId);
|
|
26
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
27
|
+
});
|
|
28
|
+
server.tool('update_website', 'Update website settings — name, description, subdomain, or SEO fields', {
|
|
29
|
+
projectId: z.string().describe('Website project ID'),
|
|
30
|
+
name: z.string().optional(),
|
|
31
|
+
description: z.string().optional(),
|
|
32
|
+
subdomain: z.string().optional(),
|
|
33
|
+
seo_title: z.string().optional(),
|
|
34
|
+
seo_description: z.string().optional(),
|
|
35
|
+
}, async ({ projectId, ...updates }) => {
|
|
36
|
+
const data = await client.updateWebsite(projectId, updates);
|
|
37
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
38
|
+
});
|
|
39
|
+
server.tool('delete_website', 'Permanently delete a website project (and its pages). This cannot be undone — confirm with the user first.', { projectId: z.string().describe('Website project ID to delete') }, async ({ projectId }) => {
|
|
40
|
+
const data = await client.deleteWebsite(projectId);
|
|
41
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
42
|
+
});
|
|
43
|
+
// ── Pages ─────────────────────────────────────────────────────────────────
|
|
44
|
+
server.tool('list_pages', 'List all pages in a website project', { projectId: z.string().describe('Website project ID') }, async ({ projectId }) => {
|
|
45
|
+
const data = await client.listPages(projectId);
|
|
46
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
47
|
+
});
|
|
48
|
+
server.tool('get_page', 'Get a page including its full block content', {
|
|
49
|
+
projectId: z.string().describe('Website project ID'),
|
|
50
|
+
pageId: z.string().describe('Page ID'),
|
|
51
|
+
}, async ({ projectId, pageId }) => {
|
|
52
|
+
const data = await client.getPage(projectId, pageId);
|
|
53
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
54
|
+
});
|
|
55
|
+
server.tool('create_page', 'Create a new page in a website project', {
|
|
56
|
+
projectId: z.string().describe('Website project ID'),
|
|
57
|
+
title: z.string().describe('Page title (e.g. "Home", "About Us")'),
|
|
58
|
+
slug: z.string().describe('URL slug (e.g. "/", "/about")'),
|
|
59
|
+
isHome: z.boolean().optional().default(false).describe('Set as the home page'),
|
|
60
|
+
}, async ({ projectId, title, slug, isHome }) => {
|
|
61
|
+
const data = await client.createPage(projectId, { title, slug, isHome });
|
|
62
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
63
|
+
});
|
|
64
|
+
server.tool('update_page_blocks', 'Replace the blocks on a page. Use this after generate_content to apply the AI-generated layout.', {
|
|
65
|
+
projectId: z.string().describe('Website project ID'),
|
|
66
|
+
pageId: z.string().describe('Page ID'),
|
|
67
|
+
blocks: z.array(z.record(z.any())).describe('Full blocks array to set on the page'),
|
|
68
|
+
}, async ({ projectId, pageId, blocks }) => {
|
|
69
|
+
const data = await client.updatePage(projectId, pageId, { blocks });
|
|
70
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
71
|
+
});
|
|
72
|
+
server.tool('delete_page', 'Delete a page from a website', {
|
|
73
|
+
projectId: z.string().describe('Website project ID'),
|
|
74
|
+
pageId: z.string().describe('Page ID'),
|
|
75
|
+
}, async ({ projectId, pageId }) => {
|
|
76
|
+
const data = await client.deletePage(projectId, pageId);
|
|
77
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
78
|
+
});
|
|
79
|
+
// ── Content & AI ──────────────────────────────────────────────────────────
|
|
80
|
+
server.tool('generate_content', 'Use Social AI to generate website content. Returns blocks for a full page, a single section, or a theme suggestion.', {
|
|
81
|
+
prompt: z.string().describe('What to generate, e.g. "A homepage for a Cape Town law firm"'),
|
|
82
|
+
mode: z
|
|
83
|
+
.enum(['full-page', 'block', 'fill-content', 'suggest-theme'])
|
|
84
|
+
.describe('full-page: generate a complete page layout | block: generate one section/block | fill-content: update copy in existing blocks | suggest-theme: suggest color/font theme'),
|
|
85
|
+
currentBlocks: z
|
|
86
|
+
.array(z.record(z.any()))
|
|
87
|
+
.optional()
|
|
88
|
+
.describe('Existing blocks (required for fill-content and full-page edits)'),
|
|
89
|
+
provider: z.enum(['google', 'openai', 'anthropic']).optional().default('google'),
|
|
90
|
+
model: z.string().optional().default('gemini-2.0-flash'),
|
|
91
|
+
}, async ({ prompt, mode, currentBlocks, provider, model }) => {
|
|
92
|
+
const data = await client.generateContent({
|
|
93
|
+
prompt,
|
|
94
|
+
mode,
|
|
95
|
+
context: currentBlocks ? { currentBlocks } : undefined,
|
|
96
|
+
provider,
|
|
97
|
+
model,
|
|
98
|
+
});
|
|
99
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
100
|
+
});
|
|
101
|
+
// ── Theme ─────────────────────────────────────────────────────────────────
|
|
102
|
+
server.tool('get_theme', "Get a website's current color and typography theme", { projectId: z.string().describe('Website project ID') }, async ({ projectId }) => {
|
|
103
|
+
const data = await client.getTheme(projectId);
|
|
104
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
105
|
+
});
|
|
106
|
+
server.tool('apply_theme', "Update a website's color scheme and typography. Use generate_content with mode='suggest-theme' first to get suggestions.", {
|
|
107
|
+
projectId: z.string().describe('Website project ID'),
|
|
108
|
+
primaryColor: z.string().optional().describe('Hex color, e.g. "#6366f1"'),
|
|
109
|
+
secondaryColor: z.string().optional(),
|
|
110
|
+
accentColor: z.string().optional(),
|
|
111
|
+
backgroundColor: z.string().optional(),
|
|
112
|
+
textColor: z.string().optional(),
|
|
113
|
+
fontHeading: z.string().optional().describe('Google Font name for headings'),
|
|
114
|
+
fontBody: z.string().optional().describe('Google Font name for body text'),
|
|
115
|
+
darkMode: z.boolean().optional(),
|
|
116
|
+
}, async ({ projectId, ...theme }) => {
|
|
117
|
+
const data = await client.updateTheme(projectId, theme);
|
|
118
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
119
|
+
});
|
|
120
|
+
// ── Publish ───────────────────────────────────────────────────────────────
|
|
121
|
+
server.tool('publish_website', 'Publish the current draft of a website, making it live on its subdomain at *.socialai.one', {
|
|
122
|
+
projectId: z.string().describe('Website project ID'),
|
|
123
|
+
label: z.string().optional().describe('Snapshot label, e.g. "v1 launch"'),
|
|
124
|
+
}, async ({ projectId, label }) => {
|
|
125
|
+
const data = await client.publishWebsite(projectId, label);
|
|
126
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
127
|
+
});
|
|
128
|
+
// ── Templates ───────────────────────────────────────────────────────────────
|
|
129
|
+
server.tool('list_templates', 'List the built-in website & store templates you can start a new site from.', {}, async () => {
|
|
130
|
+
const data = await client.listTemplates();
|
|
131
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
132
|
+
});
|
|
133
|
+
server.tool('create_website_from_template', 'Create a new website project from a built-in template (forks its pages and seeds demo products). Use list_templates first to choose a templateId. Requires a user-level API key.', {
|
|
134
|
+
templateId: z.string().describe('Template id from list_templates, e.g. "corkstep-footwear-retail"'),
|
|
135
|
+
name: z.string().optional().describe('Override the new site name'),
|
|
136
|
+
subdomain: z.string().optional().describe('Subdomain (e.g. "mystore" → mystore.socialai.one)'),
|
|
137
|
+
}, async (args) => {
|
|
138
|
+
const data = await client.createWebsiteFromTemplate(args);
|
|
139
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
140
|
+
});
|
|
141
|
+
// ── Products (shop projects) ─────────────────────────────────────────────────
|
|
142
|
+
server.tool('list_products', 'List the products in a shop website project', { projectId: z.string().describe('Website project ID') }, async ({ projectId }) => {
|
|
143
|
+
const data = await client.listProducts(projectId);
|
|
144
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
145
|
+
});
|
|
146
|
+
server.tool('add_product', 'Add a product to a shop website project. Price is a whole-number amount in the store currency.', {
|
|
147
|
+
projectId: z.string().describe('Website project ID'),
|
|
148
|
+
title: z.string().describe('Product name'),
|
|
149
|
+
price: z.number().describe('Price as a whole number in the store currency (e.g. 499)'),
|
|
150
|
+
comparePrice: z.number().optional().describe('Original/strikethrough price'),
|
|
151
|
+
description: z.string().optional(),
|
|
152
|
+
sku: z.string().optional(),
|
|
153
|
+
stockQty: z.number().optional().describe('Units in stock'),
|
|
154
|
+
imageUrls: z.array(z.string()).optional().describe('Image URLs (use upload_image to host external images first)'),
|
|
155
|
+
categoryTop: z.string().optional().describe('Top-level category, e.g. "Sneakers"'),
|
|
156
|
+
categorySub: z.string().optional().describe('Sub-category, e.g. "Nike"'),
|
|
157
|
+
}, async ({ projectId, ...product }) => {
|
|
158
|
+
const data = await client.addProduct(projectId, product);
|
|
159
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
160
|
+
});
|
|
161
|
+
server.tool('update_product', 'Update fields on an existing product (price, stock, title, description, images, status…)', {
|
|
162
|
+
projectId: z.string().describe('Website project ID'),
|
|
163
|
+
productId: z.string().describe('Product ID'),
|
|
164
|
+
title: z.string().optional(),
|
|
165
|
+
price: z.number().optional(),
|
|
166
|
+
comparePrice: z.number().optional(),
|
|
167
|
+
description: z.string().optional(),
|
|
168
|
+
stockQty: z.number().optional(),
|
|
169
|
+
imageUrls: z.array(z.string()).optional(),
|
|
170
|
+
status: z.enum(['active', 'draft']).optional(),
|
|
171
|
+
}, async ({ projectId, productId, ...updates }) => {
|
|
172
|
+
const data = await client.updateProduct(projectId, productId, updates);
|
|
173
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
174
|
+
});
|
|
175
|
+
server.tool('delete_product', 'Delete a product from a shop website project', {
|
|
176
|
+
projectId: z.string().describe('Website project ID'),
|
|
177
|
+
productId: z.string().describe('Product ID'),
|
|
178
|
+
}, async ({ projectId, productId }) => {
|
|
179
|
+
const data = await client.deleteProduct(projectId, productId);
|
|
180
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
181
|
+
});
|
|
182
|
+
// ── Media ─────────────────────────────────────────────────────────────────
|
|
183
|
+
server.tool('upload_image', 'Host an image from a URL on Social AI and return a public URL you can use in a product or block. Use for external (Pexels/Unsplash/AI-generated) images.', {
|
|
184
|
+
url: z.string().describe('Public http(s) URL of the image to host'),
|
|
185
|
+
filename: z.string().optional().describe('Optional base filename'),
|
|
186
|
+
}, async (args) => {
|
|
187
|
+
const data = await client.uploadImageFromUrl(args);
|
|
188
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
189
|
+
});
|
|
190
|
+
// ── Domain ────────────────────────────────────────────────────────────────
|
|
191
|
+
server.tool('set_domain', 'Set the subdomain (mystore.socialai.one) and/or a custom domain for a website. After setting a custom domain, point its DNS to Social AI as shown in the dashboard.', {
|
|
192
|
+
projectId: z.string().describe('Website project ID'),
|
|
193
|
+
subdomain: z.string().optional().describe('Subdomain label (no dots), e.g. "mystore"'),
|
|
194
|
+
customDomain: z.string().optional().describe('Custom domain, e.g. "shop.mybrand.com"'),
|
|
195
|
+
}, async ({ projectId, subdomain, customDomain }) => {
|
|
196
|
+
const updates = {};
|
|
197
|
+
if (subdomain !== undefined)
|
|
198
|
+
updates.subdomain = subdomain;
|
|
199
|
+
if (customDomain !== undefined)
|
|
200
|
+
updates.custom_domain = customDomain;
|
|
201
|
+
const data = await client.updateWebsite(projectId, updates);
|
|
202
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
203
|
+
});
|
|
204
|
+
server.tool('upload_image_file', 'Upload a product image from a local file by passing its base64-encoded content. Use this when working in Claude Desktop or Codex and the user has attached or pointed to a local image file. Returns a hosted URL to use in add_product or update_product. Validates size (max 20 MB input), dimensions (min 200×200px), and type (JPEG/PNG/WebP/AVIF). Auto-converts to WebP.', {
|
|
205
|
+
base64: z.string().describe('The image file encoded as a base64 string (with or without the data:image/…;base64, prefix)'),
|
|
206
|
+
filename: z.string().optional().describe('Original filename — used to name the uploaded file'),
|
|
207
|
+
mimeType: z.string().optional().describe('MIME type hint, e.g. "image/jpeg". Auto-detected if omitted.'),
|
|
208
|
+
}, async (args) => {
|
|
209
|
+
const data = await client.uploadImageFile(args);
|
|
210
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
211
|
+
});
|
|
212
|
+
// ── CSV import / export ───────────────────────────────────────────────────
|
|
213
|
+
server.tool('export_products_csv', 'Export all products in a shop as a CSV string. The agent can show it to the user, save it as a file, or use it to understand the current catalogue before a bulk update.', { projectId: z.string().describe('Website project ID') }, async ({ projectId }) => {
|
|
214
|
+
const data = await client.exportProductsCsv(projectId);
|
|
215
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
216
|
+
});
|
|
217
|
+
server.tool('import_products_csv', 'Bulk-import or update products from a CSV string. Columns: title, sku, price, compare_price, description, category_top, category_sub, stock_qty, status, image_url_1, image_url_2, image_url_3. Upserts on SKU if provided; otherwise inserts. Max 500 rows per call.', {
|
|
218
|
+
projectId: z.string().describe('Website project ID'),
|
|
219
|
+
csv: z.string().describe('Full CSV content as a string (header row + data rows)'),
|
|
220
|
+
}, async ({ projectId, csv }) => {
|
|
221
|
+
const data = await client.importProductsCsv(projectId, csv);
|
|
222
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
223
|
+
});
|
|
224
|
+
// ── Variants ─────────────────────────────────────────────────────────────
|
|
225
|
+
server.tool('list_variants', 'List product variants (sizes, colours, SKUs) for a shop. Pass productId to scope to one product, or omit it to see all variants across the store. The same data shown in the seller admin panel — always in sync.', {
|
|
226
|
+
projectId: z.string().describe('Website project ID'),
|
|
227
|
+
productId: z.string().optional().describe('Filter to a specific product ID'),
|
|
228
|
+
}, async ({ projectId, productId }) => {
|
|
229
|
+
const data = await client.listVariants(projectId, productId);
|
|
230
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
231
|
+
});
|
|
232
|
+
server.tool('add_variants', 'Add size/colour/SKU variants to a product. Each variant can override the product price and stock. Call list_variants first to see what already exists. The seller admin panel shows these immediately after adding.', {
|
|
233
|
+
projectId: z.string().describe('Website project ID'),
|
|
234
|
+
productId: z.string().describe('Product to add variants to'),
|
|
235
|
+
variants: z.array(z.object({
|
|
236
|
+
size: z.string().optional().describe('e.g. "S", "M", "L", "XL", "UK 8"'),
|
|
237
|
+
color: z.string().optional().describe('e.g. "Black", "White", "Navy"'),
|
|
238
|
+
sku: z.string().optional().describe('Unique SKU for this variant'),
|
|
239
|
+
price: z.number().optional().describe('Override price for this variant'),
|
|
240
|
+
stockQty: z.number().optional().describe('Stock units for this variant'),
|
|
241
|
+
attributes: z.record(z.any()).optional().describe('Extra attributes e.g. { material: "cotton" }'),
|
|
242
|
+
})).describe('One or more variants to add'),
|
|
243
|
+
}, async ({ projectId, productId, variants }) => {
|
|
244
|
+
const data = await client.addVariants(projectId, productId, variants);
|
|
245
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
246
|
+
});
|
|
247
|
+
server.tool('clear_variants', 'Remove ALL variants from a product (so you can replace them cleanly). Use add_variants immediately after to set the new set.', {
|
|
248
|
+
projectId: z.string().describe('Website project ID'),
|
|
249
|
+
productId: z.string().describe('Product whose variants to clear'),
|
|
250
|
+
}, async ({ projectId, productId }) => {
|
|
251
|
+
const data = await client.clearVariants(projectId, productId);
|
|
252
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
253
|
+
});
|
|
254
|
+
// ── Payments ─────────────────────────────────────────────────────────────
|
|
255
|
+
server.tool('get_payment_settings', 'Read the current payment provider and mode configured for a store. Use before configure_payments to understand current state.', { projectId: z.string().describe('Website project ID') }, async ({ projectId }) => {
|
|
256
|
+
const data = await client.getPayments(projectId);
|
|
257
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
258
|
+
});
|
|
259
|
+
server.tool('configure_payments', 'Set the payment provider and mode for a store. Supported providers: paystack, payfast, ozow, stripe, flutterwave, razorpay, paypal, mercadopago. Payment API keys must be entered in the seller dashboard — they cannot be set here for security.', {
|
|
260
|
+
projectId: z.string().describe('Website project ID'),
|
|
261
|
+
provider: z.enum(['paystack', 'payfast', 'ozow', 'stripe', 'flutterwave', 'razorpay', 'paypal', 'mercadopago', '']).optional().describe('Payment provider to activate'),
|
|
262
|
+
testMode: z.boolean().optional().describe('true = test/sandbox mode (no real charges); false = live'),
|
|
263
|
+
currency: z.string().optional().describe('Store currency code, e.g. "ZAR", "USD", "GBP"'),
|
|
264
|
+
}, async ({ projectId, provider, testMode, currency }) => {
|
|
265
|
+
const data = await client.configurePayments(projectId, { provider, testMode, currency });
|
|
266
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
267
|
+
});
|
|
268
|
+
// ── Categories ────────────────────────────────────────────────────────────
|
|
269
|
+
server.tool('list_categories', 'List the distinct product categories and subcategories in a shop. Use this to understand the taxonomy before adding products so they land in the right category.', { projectId: z.string().describe('Website project ID') }, async ({ projectId }) => {
|
|
270
|
+
const data = await client.listCategories(projectId);
|
|
271
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
272
|
+
});
|
|
273
|
+
// ── Report a problem ─────────────────────────────────────────────────────
|
|
274
|
+
server.tool('report_issue', "Report a problem you hit while building or editing a site so the Social AI team can fix it. Use this when a tool fails unexpectedly, a template renders wrong, content is missing, or something doesn't behave as documented — instead of silently giving up.", {
|
|
275
|
+
details: z.string().describe('What went wrong, with as much detail as possible (steps, error messages, what you expected)'),
|
|
276
|
+
summary: z.string().optional().describe('One-line summary of the problem'),
|
|
277
|
+
projectId: z.string().optional().describe('Related website project ID, if applicable'),
|
|
278
|
+
toolName: z.string().optional().describe('Which tool/operation was involved, if any'),
|
|
279
|
+
}, async (args) => {
|
|
280
|
+
const data = await client.reportIssue(args);
|
|
281
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
282
|
+
});
|
|
283
|
+
return server;
|
|
284
|
+
}
|
|
285
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACnE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C,MAAM,UAAU,YAAY,CAAC,MAA2C;IACtE,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,CAAA;IACzC,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,2BAA2B;QACjC,OAAO,EAAE,OAAO;KACjB,CAAC,CAAA;IAEF,6EAA6E;IAE7E,MAAM,CAAC,IAAI,CACT,eAAe,EACf,0CAA0C,EAC1C,EAAE,EACF,KAAK,IAAI,EAAE;QACT,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,YAAY,EAAE,CAAA;QACxC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;IAC7E,CAAC,CACF,CAAA;IAED,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,wEAAwE,EACxE;QACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;QACzC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAChE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yDAAyD,CAAC;QACpG,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;KACnG,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;QAC7C,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;IAC7E,CAAC,CACF,CAAA;IAED,MAAM,CAAC,IAAI,CACT,aAAa,EACb,0DAA0D,EAC1D,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,EACxD,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QACtB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAA;QAC/C,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;IAC7E,CAAC,CACF,CAAA;IAED,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,uEAAuE,EACvE;QACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QACpD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC3B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAClC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAChC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAChC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KACvC,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE;QAClC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;QAC3D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;IAC7E,CAAC,CACF,CAAA;IAED,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,4GAA4G,EAC5G,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC,EAAE,EAClE,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QACtB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,CAAA;QAClD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;IAC7E,CAAC,CACF,CAAA;IAED,6EAA6E;IAE7E,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,qCAAqC,EACrC,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,EACxD,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QACtB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;QAC9C,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;IAC7E,CAAC,CACF,CAAA;IAED,MAAM,CAAC,IAAI,CACT,UAAU,EACV,6CAA6C,EAC7C;QACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QACpD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;KACvC,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE;QAC9B,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;QACpD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;IAC7E,CAAC,CACF,CAAA;IAED,MAAM,CAAC,IAAI,CACT,aAAa,EACb,wCAAwC,EACxC;QACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QACpD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;QAClE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;QAC1D,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC;KAC/E,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE;QAC3C,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;QACxE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;IAC7E,CAAC,CACF,CAAA;IAED,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,iGAAiG,EACjG;QACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QACpD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;QACtC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,sCAAsC,CAAC;KACpF,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE;QACtC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;QACnE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;IAC7E,CAAC,CACF,CAAA;IAED,MAAM,CAAC,IAAI,CACT,aAAa,EACb,8BAA8B,EAC9B;QACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QACpD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;KACvC,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE;QAC9B,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;QACvD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;IAC7E,CAAC,CACF,CAAA;IAED,6EAA6E;IAE7E,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,qHAAqH,EACrH;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8DAA8D,CAAC;QAC3F,IAAI,EAAE,CAAC;aACJ,IAAI,CAAC,CAAC,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;aAC7D,QAAQ,CACP,yKAAyK,CAC1K;QACH,aAAa,EAAE,CAAC;aACb,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;aACxB,QAAQ,EAAE;aACV,QAAQ,CAAC,iEAAiE,CAAC;QAC9E,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;QAChF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,kBAAkB,CAAC;KACzD,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;QACzD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC;YACxC,MAAM;YACN,IAAI;YACJ,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,SAAS;YACtD,QAAQ;YACR,KAAK;SACN,CAAC,CAAA;QACF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;IAC7E,CAAC,CACF,CAAA;IAED,6EAA6E;IAE7E,MAAM,CAAC,IAAI,CACT,WAAW,EACX,oDAAoD,EACpD,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,EACxD,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QACtB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;QAC7C,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;IAC7E,CAAC,CACF,CAAA;IAED,MAAM,CAAC,IAAI,CACT,aAAa,EACb,0HAA0H,EAC1H;QACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QACpD,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;QACzE,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACrC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAClC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACtC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAChC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;QAC5E,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;QAC1E,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;KACjC,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE;QAChC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;QACvD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;IAC7E,CAAC,CACF,CAAA;IAED,6EAA6E;IAE7E,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,2FAA2F,EAC3F;QACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QACpD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;KAC1E,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE;QAC7B,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;QAC1D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;IAC7E,CAAC,CACF,CAAA;IAED,+EAA+E;IAE/E,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,4EAA4E,EAC5E,EAAE,EACF,KAAK,IAAI,EAAE;QACT,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,aAAa,EAAE,CAAA;QACzC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;IAC7E,CAAC,CACF,CAAA;IAED,MAAM,CAAC,IAAI,CACT,8BAA8B,EAC9B,kLAAkL,EAClL;QACE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kEAAkE,CAAC;QACnG,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QAClE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;KAC/F,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAA;QACzD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;IAC7E,CAAC,CACF,CAAA;IAED,gFAAgF;IAEhF,MAAM,CAAC,IAAI,CACT,eAAe,EACf,6CAA6C,EAC7C,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,EACxD,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QACtB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAA;QACjD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;IAC7E,CAAC,CACF,CAAA;IAED,MAAM,CAAC,IAAI,CACT,aAAa,EACb,gGAAgG,EAChG;QACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QACpD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC1C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0DAA0D,CAAC;QACtF,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QAC5E,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAClC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC1B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAC1D,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6DAA6D,CAAC;QACjH,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;QAClF,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;KACzE,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE;QAClC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;QACxD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;IAC7E,CAAC,CACF,CAAA;IAED,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,0FAA0F,EAC1F;QACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QACpD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC5C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC5B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC5B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACnC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAClC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC/B,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QACzC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE;KAC/C,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE;QAC7C,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;QACtE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;IAC7E,CAAC,CACF,CAAA;IAED,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,8CAA8C,EAC9C;QACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QACpD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;KAC7C,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE;QACjC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QAC7D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;IAC7E,CAAC,CACF,CAAA;IAED,6EAA6E;IAE7E,MAAM,CAAC,IAAI,CACT,cAAc,EACd,0JAA0J,EAC1J;QACE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;QACnE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;KACnE,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAA;QAClD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;IAC7E,CAAC,CACF,CAAA;IAED,6EAA6E;IAE7E,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,qKAAqK,EACrK;QACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QACpD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;QACtF,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;KACvF,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,EAAE;QAC/C,MAAM,OAAO,GAAwB,EAAE,CAAA;QACvC,IAAI,SAAS,KAAK,SAAS;YAAE,OAAO,CAAC,SAAS,GAAG,SAAS,CAAA;QAC1D,IAAI,YAAY,KAAK,SAAS;YAAE,OAAO,CAAC,aAAa,GAAG,YAAY,CAAA;QACpE,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;QAC3D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;IAC7E,CAAC,CACF,CAAA;IAED,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,gXAAgX,EAChX;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6FAA6F,CAAC;QAC1H,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;QAC9F,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8DAA8D,CAAC;KACzG,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;QAC/C,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;IAC7E,CAAC,CACF,CAAA;IAED,6EAA6E;IAE7E,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,0KAA0K,EAC1K,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,EACxD,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QACtB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAA;QACtD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;IAC7E,CAAC,CACF,CAAA;IAED,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,uQAAuQ,EACvQ;QACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QACpD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uDAAuD,CAAC;KAClF,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,EAAE;QAC3B,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAA;QAC3D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;IAC7E,CAAC,CACF,CAAA;IAED,4EAA4E;IAE5E,MAAM,CAAC,IAAI,CACT,eAAe,EACf,mNAAmN,EACnN;QACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QACpD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;KAC7E,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE;QACjC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QAC5D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;IAC7E,CAAC,CACF,CAAA;IAED,MAAM,CAAC,IAAI,CACT,cAAc,EACd,qNAAqN,EACrN;QACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QACpD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QAC5D,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;YACzB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;YACxE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;YACtE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;YAClE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;YACxE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;YACxE,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;SAClG,CAAC,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC;KAC5C,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC3C,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAA;QACrE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;IAC7E,CAAC,CACF,CAAA;IAED,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,8HAA8H,EAC9H;QACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QACpD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;KAClE,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE;QACjC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QAC7D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;IAC7E,CAAC,CACF,CAAA;IAED,4EAA4E;IAE5E,MAAM,CAAC,IAAI,CACT,sBAAsB,EACtB,+HAA+H,EAC/H,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,EACxD,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QACtB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;QAChD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;IAC7E,CAAC,CACF,CAAA;IAED,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,mPAAmP,EACnP;QACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QACpD,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QACvK,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0DAA0D,CAAC;QACrG,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;KAC1F,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE;QACpD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAA;QACxF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;IAC7E,CAAC,CACF,CAAA;IAED,6EAA6E;IAE7E,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,kKAAkK,EAClK,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,EACxD,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QACtB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAA;QACnD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;IAC7E,CAAC,CACF,CAAA;IAED,4EAA4E;IAE5E,MAAM,CAAC,IAAI,CACT,cAAc,EACd,+PAA+P,EAC/P;QACE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6FAA6F,CAAC;QAC3H,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;QAC1E,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;QACtF,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;KACtF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;QAC3C,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;IAC7E,CAAC,CACF,CAAA;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@socialai/website-mcp",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "MCP server for Social AI Website Builder — create and manage websites via Claude Code, OpenAI Codex, and any MCP-compatible AI tool",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"socialai-mcp": "dist/index.js"
|
|
8
|
+
},
|
|
9
|
+
"main": "dist/index.js",
|
|
10
|
+
"files": ["dist"],
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "tsc",
|
|
13
|
+
"dev": "tsc --watch",
|
|
14
|
+
"start": "node dist/index.js"
|
|
15
|
+
},
|
|
16
|
+
"keywords": ["mcp", "social-ai", "website-builder", "claude", "codex"],
|
|
17
|
+
"license": "MIT",
|
|
18
|
+
"dependencies": {
|
|
19
|
+
"@modelcontextprotocol/sdk": "^1.12.0",
|
|
20
|
+
"zod": "^3.23.8"
|
|
21
|
+
},
|
|
22
|
+
"devDependencies": {
|
|
23
|
+
"typescript": "^5.4.0",
|
|
24
|
+
"@types/node": "^20.0.0"
|
|
25
|
+
},
|
|
26
|
+
"engines": {
|
|
27
|
+
"node": ">=18"
|
|
28
|
+
}
|
|
29
|
+
}
|