@heyseo/mcp-server 0.1.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 +284 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +258 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/index.d.ts +22 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +267 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/resources/index.d.ts +38 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +247 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/tools/comparison.d.ts +159 -0
- package/dist/tools/comparison.d.ts.map +1 -0
- package/dist/tools/comparison.js +482 -0
- package/dist/tools/comparison.js.map +1 -0
- package/dist/tools/ga4.d.ts +182 -0
- package/dist/tools/ga4.d.ts.map +1 -0
- package/dist/tools/ga4.js +429 -0
- package/dist/tools/ga4.js.map +1 -0
- package/dist/tools/gsc.d.ts +194 -0
- package/dist/tools/gsc.d.ts.map +1 -0
- package/dist/tools/gsc.js +348 -0
- package/dist/tools/gsc.js.map +1 -0
- package/dist/tools/index.d.ts +392 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +59 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/pagespeed.d.ts +88 -0
- package/dist/tools/pagespeed.d.ts.map +1 -0
- package/dist/tools/pagespeed.js +285 -0
- package/dist/tools/pagespeed.js.map +1 -0
- package/dist/tools/tasks.d.ts +71 -0
- package/dist/tools/tasks.d.ts.map +1 -0
- package/dist/tools/tasks.js +116 -0
- package/dist/tools/tasks.js.map +1 -0
- package/dist/types.d.ts +151 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/api-client.d.ts +69 -0
- package/dist/utils/api-client.d.ts.map +1 -0
- package/dist/utils/api-client.js +202 -0
- package/dist/utils/api-client.js.map +1 -0
- package/package.json +42 -0
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Google Search Console Tools
|
|
3
|
+
* Tools for querying GSC analytics data
|
|
4
|
+
*/
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
import type { HeySeoApiClient } from '../utils/api-client.js';
|
|
7
|
+
export declare const queryGSCSchema: z.ZodObject<{
|
|
8
|
+
siteId: z.ZodString;
|
|
9
|
+
startDate: z.ZodString;
|
|
10
|
+
endDate: z.ZodString;
|
|
11
|
+
dimensions: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodEnum<["query", "page", "country", "device", "date"]>, "many">>>;
|
|
12
|
+
rowLimit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
13
|
+
filters: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
14
|
+
dimension: z.ZodEnum<["query", "page", "country", "device"]>;
|
|
15
|
+
operator: z.ZodEnum<["equals", "contains", "notContains", "includingRegex", "excludingRegex"]>;
|
|
16
|
+
expression: z.ZodString;
|
|
17
|
+
}, "strip", z.ZodTypeAny, {
|
|
18
|
+
dimension: "query" | "page" | "country" | "device";
|
|
19
|
+
operator: "equals" | "contains" | "notContains" | "includingRegex" | "excludingRegex";
|
|
20
|
+
expression: string;
|
|
21
|
+
}, {
|
|
22
|
+
dimension: "query" | "page" | "country" | "device";
|
|
23
|
+
operator: "equals" | "contains" | "notContains" | "includingRegex" | "excludingRegex";
|
|
24
|
+
expression: string;
|
|
25
|
+
}>, "many">>;
|
|
26
|
+
}, "strip", z.ZodTypeAny, {
|
|
27
|
+
siteId: string;
|
|
28
|
+
startDate: string;
|
|
29
|
+
endDate: string;
|
|
30
|
+
dimensions: ("query" | "page" | "country" | "device" | "date")[];
|
|
31
|
+
rowLimit: number;
|
|
32
|
+
filters?: {
|
|
33
|
+
dimension: "query" | "page" | "country" | "device";
|
|
34
|
+
operator: "equals" | "contains" | "notContains" | "includingRegex" | "excludingRegex";
|
|
35
|
+
expression: string;
|
|
36
|
+
}[] | undefined;
|
|
37
|
+
}, {
|
|
38
|
+
siteId: string;
|
|
39
|
+
startDate: string;
|
|
40
|
+
endDate: string;
|
|
41
|
+
dimensions?: ("query" | "page" | "country" | "device" | "date")[] | undefined;
|
|
42
|
+
rowLimit?: number | undefined;
|
|
43
|
+
filters?: {
|
|
44
|
+
dimension: "query" | "page" | "country" | "device";
|
|
45
|
+
operator: "equals" | "contains" | "notContains" | "includingRegex" | "excludingRegex";
|
|
46
|
+
expression: string;
|
|
47
|
+
}[] | undefined;
|
|
48
|
+
}>;
|
|
49
|
+
export type QueryGSCInput = z.infer<typeof queryGSCSchema>;
|
|
50
|
+
export declare const topKeywordsSchema: z.ZodObject<{
|
|
51
|
+
siteId: z.ZodString;
|
|
52
|
+
limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
53
|
+
startDate: z.ZodOptional<z.ZodString>;
|
|
54
|
+
endDate: z.ZodOptional<z.ZodString>;
|
|
55
|
+
}, "strip", z.ZodTypeAny, {
|
|
56
|
+
siteId: string;
|
|
57
|
+
limit: number;
|
|
58
|
+
startDate?: string | undefined;
|
|
59
|
+
endDate?: string | undefined;
|
|
60
|
+
}, {
|
|
61
|
+
siteId: string;
|
|
62
|
+
limit?: number | undefined;
|
|
63
|
+
startDate?: string | undefined;
|
|
64
|
+
endDate?: string | undefined;
|
|
65
|
+
}>;
|
|
66
|
+
export type TopKeywordsInput = z.infer<typeof topKeywordsSchema>;
|
|
67
|
+
export declare const topPagesSchema: z.ZodObject<{
|
|
68
|
+
siteId: z.ZodString;
|
|
69
|
+
limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
70
|
+
startDate: z.ZodOptional<z.ZodString>;
|
|
71
|
+
endDate: z.ZodOptional<z.ZodString>;
|
|
72
|
+
}, "strip", z.ZodTypeAny, {
|
|
73
|
+
siteId: string;
|
|
74
|
+
limit: number;
|
|
75
|
+
startDate?: string | undefined;
|
|
76
|
+
endDate?: string | undefined;
|
|
77
|
+
}, {
|
|
78
|
+
siteId: string;
|
|
79
|
+
limit?: number | undefined;
|
|
80
|
+
startDate?: string | undefined;
|
|
81
|
+
endDate?: string | undefined;
|
|
82
|
+
}>;
|
|
83
|
+
export type TopPagesInput = z.infer<typeof topPagesSchema>;
|
|
84
|
+
/**
|
|
85
|
+
* Execute GSC query tool
|
|
86
|
+
*/
|
|
87
|
+
export declare function executeQueryGSC(client: HeySeoApiClient, input: QueryGSCInput): Promise<string>;
|
|
88
|
+
/**
|
|
89
|
+
* Execute top keywords tool
|
|
90
|
+
*/
|
|
91
|
+
export declare function executeTopKeywords(client: HeySeoApiClient, input: TopKeywordsInput): Promise<string>;
|
|
92
|
+
/**
|
|
93
|
+
* Execute top pages tool
|
|
94
|
+
*/
|
|
95
|
+
export declare function executeTopPages(client: HeySeoApiClient, input: TopPagesInput): Promise<string>;
|
|
96
|
+
/**
|
|
97
|
+
* GSC tool definitions for MCP
|
|
98
|
+
*/
|
|
99
|
+
export declare const gscTools: ({
|
|
100
|
+
name: string;
|
|
101
|
+
description: string;
|
|
102
|
+
inputSchema: {
|
|
103
|
+
type: string;
|
|
104
|
+
properties: {
|
|
105
|
+
siteId: {
|
|
106
|
+
type: string;
|
|
107
|
+
description: string;
|
|
108
|
+
};
|
|
109
|
+
startDate: {
|
|
110
|
+
type: string;
|
|
111
|
+
pattern: string;
|
|
112
|
+
description: string;
|
|
113
|
+
};
|
|
114
|
+
endDate: {
|
|
115
|
+
type: string;
|
|
116
|
+
pattern: string;
|
|
117
|
+
description: string;
|
|
118
|
+
};
|
|
119
|
+
dimensions: {
|
|
120
|
+
type: string;
|
|
121
|
+
items: {
|
|
122
|
+
type: string;
|
|
123
|
+
enum: string[];
|
|
124
|
+
};
|
|
125
|
+
default: string[];
|
|
126
|
+
description: string;
|
|
127
|
+
};
|
|
128
|
+
rowLimit: {
|
|
129
|
+
type: string;
|
|
130
|
+
minimum: number;
|
|
131
|
+
maximum: number;
|
|
132
|
+
default: number;
|
|
133
|
+
description: string;
|
|
134
|
+
};
|
|
135
|
+
filters: {
|
|
136
|
+
type: string;
|
|
137
|
+
items: {
|
|
138
|
+
type: string;
|
|
139
|
+
properties: {
|
|
140
|
+
dimension: {
|
|
141
|
+
type: string;
|
|
142
|
+
enum: string[];
|
|
143
|
+
};
|
|
144
|
+
operator: {
|
|
145
|
+
type: string;
|
|
146
|
+
enum: string[];
|
|
147
|
+
};
|
|
148
|
+
expression: {
|
|
149
|
+
type: string;
|
|
150
|
+
};
|
|
151
|
+
};
|
|
152
|
+
required: string[];
|
|
153
|
+
};
|
|
154
|
+
description: string;
|
|
155
|
+
};
|
|
156
|
+
limit?: undefined;
|
|
157
|
+
};
|
|
158
|
+
required: string[];
|
|
159
|
+
};
|
|
160
|
+
} | {
|
|
161
|
+
name: string;
|
|
162
|
+
description: string;
|
|
163
|
+
inputSchema: {
|
|
164
|
+
type: string;
|
|
165
|
+
properties: {
|
|
166
|
+
siteId: {
|
|
167
|
+
type: string;
|
|
168
|
+
description: string;
|
|
169
|
+
};
|
|
170
|
+
limit: {
|
|
171
|
+
type: string;
|
|
172
|
+
minimum: number;
|
|
173
|
+
maximum: number;
|
|
174
|
+
default: number;
|
|
175
|
+
description: string;
|
|
176
|
+
};
|
|
177
|
+
startDate: {
|
|
178
|
+
type: string;
|
|
179
|
+
pattern: string;
|
|
180
|
+
description: string;
|
|
181
|
+
};
|
|
182
|
+
endDate: {
|
|
183
|
+
type: string;
|
|
184
|
+
pattern: string;
|
|
185
|
+
description: string;
|
|
186
|
+
};
|
|
187
|
+
dimensions?: undefined;
|
|
188
|
+
rowLimit?: undefined;
|
|
189
|
+
filters?: undefined;
|
|
190
|
+
};
|
|
191
|
+
required: string[];
|
|
192
|
+
};
|
|
193
|
+
})[];
|
|
194
|
+
//# sourceMappingURL=gsc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gsc.d.ts","sourceRoot":"","sources":["../../src/tools/gsc.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAG9D,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsCzB,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAG3D,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;EAmB5B,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAGjE,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;EAmBzB,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAE3D;;GAEG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,MAAM,CAAC,CA2CjB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,MAAM,CAAC,CA8CjB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,MAAM,CAAC,CA8CjB;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAyIpB,CAAC"}
|
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Google Search Console Tools
|
|
3
|
+
* Tools for querying GSC analytics data
|
|
4
|
+
*/
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
// Schema for GSC query tool
|
|
7
|
+
export const queryGSCSchema = z.object({
|
|
8
|
+
siteId: z.string().describe('The ID of the site to query'),
|
|
9
|
+
startDate: z
|
|
10
|
+
.string()
|
|
11
|
+
.regex(/^\d{4}-\d{2}-\d{2}$/)
|
|
12
|
+
.describe('Start date in YYYY-MM-DD format'),
|
|
13
|
+
endDate: z
|
|
14
|
+
.string()
|
|
15
|
+
.regex(/^\d{4}-\d{2}-\d{2}$/)
|
|
16
|
+
.describe('End date in YYYY-MM-DD format'),
|
|
17
|
+
dimensions: z
|
|
18
|
+
.array(z.enum(['query', 'page', 'country', 'device', 'date']))
|
|
19
|
+
.optional()
|
|
20
|
+
.default(['query'])
|
|
21
|
+
.describe('Dimensions to group by (query, page, country, device, date)'),
|
|
22
|
+
rowLimit: z
|
|
23
|
+
.number()
|
|
24
|
+
.min(1)
|
|
25
|
+
.max(25000)
|
|
26
|
+
.optional()
|
|
27
|
+
.default(1000)
|
|
28
|
+
.describe('Maximum number of rows to return (1-25000)'),
|
|
29
|
+
filters: z
|
|
30
|
+
.array(z.object({
|
|
31
|
+
dimension: z.enum(['query', 'page', 'country', 'device']),
|
|
32
|
+
operator: z.enum([
|
|
33
|
+
'equals',
|
|
34
|
+
'contains',
|
|
35
|
+
'notContains',
|
|
36
|
+
'includingRegex',
|
|
37
|
+
'excludingRegex',
|
|
38
|
+
]),
|
|
39
|
+
expression: z.string(),
|
|
40
|
+
}))
|
|
41
|
+
.optional()
|
|
42
|
+
.describe('Filters to apply to the query'),
|
|
43
|
+
});
|
|
44
|
+
// Schema for top keywords tool
|
|
45
|
+
export const topKeywordsSchema = z.object({
|
|
46
|
+
siteId: z.string().describe('The ID of the site to query'),
|
|
47
|
+
limit: z
|
|
48
|
+
.number()
|
|
49
|
+
.min(1)
|
|
50
|
+
.max(1000)
|
|
51
|
+
.optional()
|
|
52
|
+
.default(50)
|
|
53
|
+
.describe('Number of keywords to return'),
|
|
54
|
+
startDate: z
|
|
55
|
+
.string()
|
|
56
|
+
.regex(/^\d{4}-\d{2}-\d{2}$/)
|
|
57
|
+
.optional()
|
|
58
|
+
.describe('Start date (defaults to 28 days ago)'),
|
|
59
|
+
endDate: z
|
|
60
|
+
.string()
|
|
61
|
+
.regex(/^\d{4}-\d{2}-\d{2}$/)
|
|
62
|
+
.optional()
|
|
63
|
+
.describe('End date (defaults to today)'),
|
|
64
|
+
});
|
|
65
|
+
// Schema for top pages tool
|
|
66
|
+
export const topPagesSchema = z.object({
|
|
67
|
+
siteId: z.string().describe('The ID of the site to query'),
|
|
68
|
+
limit: z
|
|
69
|
+
.number()
|
|
70
|
+
.min(1)
|
|
71
|
+
.max(1000)
|
|
72
|
+
.optional()
|
|
73
|
+
.default(50)
|
|
74
|
+
.describe('Number of pages to return'),
|
|
75
|
+
startDate: z
|
|
76
|
+
.string()
|
|
77
|
+
.regex(/^\d{4}-\d{2}-\d{2}$/)
|
|
78
|
+
.optional()
|
|
79
|
+
.describe('Start date (defaults to 28 days ago)'),
|
|
80
|
+
endDate: z
|
|
81
|
+
.string()
|
|
82
|
+
.regex(/^\d{4}-\d{2}-\d{2}$/)
|
|
83
|
+
.optional()
|
|
84
|
+
.describe('End date (defaults to today)'),
|
|
85
|
+
});
|
|
86
|
+
/**
|
|
87
|
+
* Execute GSC query tool
|
|
88
|
+
*/
|
|
89
|
+
export async function executeQueryGSC(client, input) {
|
|
90
|
+
try {
|
|
91
|
+
const result = await client.queryGSC({
|
|
92
|
+
siteId: input.siteId,
|
|
93
|
+
startDate: input.startDate,
|
|
94
|
+
endDate: input.endDate,
|
|
95
|
+
dimensions: input.dimensions,
|
|
96
|
+
rowLimit: input.rowLimit,
|
|
97
|
+
filters: input.filters,
|
|
98
|
+
});
|
|
99
|
+
// Format results for readability
|
|
100
|
+
const formattedRows = result.rows.map((row) => ({
|
|
101
|
+
...row.keys.reduce((acc, key, idx) => ({
|
|
102
|
+
...acc,
|
|
103
|
+
[input.dimensions?.[idx] || `dim${idx}`]: key,
|
|
104
|
+
}), {}),
|
|
105
|
+
clicks: row.clicks,
|
|
106
|
+
impressions: row.impressions,
|
|
107
|
+
ctr: `${(row.ctr * 100).toFixed(2)}%`,
|
|
108
|
+
position: row.position.toFixed(1),
|
|
109
|
+
}));
|
|
110
|
+
return JSON.stringify({
|
|
111
|
+
success: true,
|
|
112
|
+
period: { startDate: input.startDate, endDate: input.endDate },
|
|
113
|
+
dimensions: input.dimensions,
|
|
114
|
+
totalRows: result.rows.length,
|
|
115
|
+
data: formattedRows,
|
|
116
|
+
}, null, 2);
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
return JSON.stringify({
|
|
120
|
+
success: false,
|
|
121
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Execute top keywords tool
|
|
127
|
+
*/
|
|
128
|
+
export async function executeTopKeywords(client, input) {
|
|
129
|
+
try {
|
|
130
|
+
const result = await client.getTopKeywords(input.siteId, {
|
|
131
|
+
startDate: input.startDate,
|
|
132
|
+
endDate: input.endDate,
|
|
133
|
+
limit: input.limit,
|
|
134
|
+
});
|
|
135
|
+
const keywords = result.rows.map((row, index) => ({
|
|
136
|
+
rank: index + 1,
|
|
137
|
+
keyword: row.keys[0],
|
|
138
|
+
clicks: row.clicks,
|
|
139
|
+
impressions: row.impressions,
|
|
140
|
+
ctr: `${(row.ctr * 100).toFixed(2)}%`,
|
|
141
|
+
position: row.position.toFixed(1),
|
|
142
|
+
}));
|
|
143
|
+
// Calculate totals
|
|
144
|
+
const totals = result.rows.reduce((acc, row) => ({
|
|
145
|
+
clicks: acc.clicks + row.clicks,
|
|
146
|
+
impressions: acc.impressions + row.impressions,
|
|
147
|
+
}), { clicks: 0, impressions: 0 });
|
|
148
|
+
return JSON.stringify({
|
|
149
|
+
success: true,
|
|
150
|
+
totalKeywords: keywords.length,
|
|
151
|
+
totals: {
|
|
152
|
+
clicks: totals.clicks,
|
|
153
|
+
impressions: totals.impressions,
|
|
154
|
+
avgCtr: `${((totals.clicks / totals.impressions) * 100).toFixed(2)}%`,
|
|
155
|
+
},
|
|
156
|
+
keywords,
|
|
157
|
+
}, null, 2);
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
return JSON.stringify({
|
|
161
|
+
success: false,
|
|
162
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Execute top pages tool
|
|
168
|
+
*/
|
|
169
|
+
export async function executeTopPages(client, input) {
|
|
170
|
+
try {
|
|
171
|
+
const result = await client.getTopPages(input.siteId, {
|
|
172
|
+
startDate: input.startDate,
|
|
173
|
+
endDate: input.endDate,
|
|
174
|
+
limit: input.limit,
|
|
175
|
+
});
|
|
176
|
+
const pages = result.rows.map((row, index) => ({
|
|
177
|
+
rank: index + 1,
|
|
178
|
+
page: row.keys[0],
|
|
179
|
+
clicks: row.clicks,
|
|
180
|
+
impressions: row.impressions,
|
|
181
|
+
ctr: `${(row.ctr * 100).toFixed(2)}%`,
|
|
182
|
+
position: row.position.toFixed(1),
|
|
183
|
+
}));
|
|
184
|
+
// Calculate totals
|
|
185
|
+
const totals = result.rows.reduce((acc, row) => ({
|
|
186
|
+
clicks: acc.clicks + row.clicks,
|
|
187
|
+
impressions: acc.impressions + row.impressions,
|
|
188
|
+
}), { clicks: 0, impressions: 0 });
|
|
189
|
+
return JSON.stringify({
|
|
190
|
+
success: true,
|
|
191
|
+
totalPages: pages.length,
|
|
192
|
+
totals: {
|
|
193
|
+
clicks: totals.clicks,
|
|
194
|
+
impressions: totals.impressions,
|
|
195
|
+
avgCtr: `${((totals.clicks / totals.impressions) * 100).toFixed(2)}%`,
|
|
196
|
+
},
|
|
197
|
+
pages,
|
|
198
|
+
}, null, 2);
|
|
199
|
+
}
|
|
200
|
+
catch (error) {
|
|
201
|
+
return JSON.stringify({
|
|
202
|
+
success: false,
|
|
203
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* GSC tool definitions for MCP
|
|
209
|
+
*/
|
|
210
|
+
export const gscTools = [
|
|
211
|
+
{
|
|
212
|
+
name: 'heyseo_query_gsc',
|
|
213
|
+
description: `Query Google Search Console data for a connected site.
|
|
214
|
+
|
|
215
|
+
Returns search performance data including:
|
|
216
|
+
- Clicks: Total clicks from search results
|
|
217
|
+
- Impressions: Times the site appeared in search
|
|
218
|
+
- CTR: Click-through rate percentage
|
|
219
|
+
- Position: Average search result position
|
|
220
|
+
|
|
221
|
+
You can group results by query (keywords), page, country, device, or date.
|
|
222
|
+
Use filters to narrow down results (e.g., only pages containing "/blog/").`,
|
|
223
|
+
inputSchema: {
|
|
224
|
+
type: 'object',
|
|
225
|
+
properties: {
|
|
226
|
+
siteId: {
|
|
227
|
+
type: 'string',
|
|
228
|
+
description: 'The ID of the site to query',
|
|
229
|
+
},
|
|
230
|
+
startDate: {
|
|
231
|
+
type: 'string',
|
|
232
|
+
pattern: '^\\d{4}-\\d{2}-\\d{2}$',
|
|
233
|
+
description: 'Start date in YYYY-MM-DD format',
|
|
234
|
+
},
|
|
235
|
+
endDate: {
|
|
236
|
+
type: 'string',
|
|
237
|
+
pattern: '^\\d{4}-\\d{2}-\\d{2}$',
|
|
238
|
+
description: 'End date in YYYY-MM-DD format',
|
|
239
|
+
},
|
|
240
|
+
dimensions: {
|
|
241
|
+
type: 'array',
|
|
242
|
+
items: {
|
|
243
|
+
type: 'string',
|
|
244
|
+
enum: ['query', 'page', 'country', 'device', 'date'],
|
|
245
|
+
},
|
|
246
|
+
default: ['query'],
|
|
247
|
+
description: 'Dimensions to group by',
|
|
248
|
+
},
|
|
249
|
+
rowLimit: {
|
|
250
|
+
type: 'number',
|
|
251
|
+
minimum: 1,
|
|
252
|
+
maximum: 25000,
|
|
253
|
+
default: 1000,
|
|
254
|
+
description: 'Maximum rows to return',
|
|
255
|
+
},
|
|
256
|
+
filters: {
|
|
257
|
+
type: 'array',
|
|
258
|
+
items: {
|
|
259
|
+
type: 'object',
|
|
260
|
+
properties: {
|
|
261
|
+
dimension: {
|
|
262
|
+
type: 'string',
|
|
263
|
+
enum: ['query', 'page', 'country', 'device'],
|
|
264
|
+
},
|
|
265
|
+
operator: {
|
|
266
|
+
type: 'string',
|
|
267
|
+
enum: ['equals', 'contains', 'notContains', 'includingRegex', 'excludingRegex'],
|
|
268
|
+
},
|
|
269
|
+
expression: { type: 'string' },
|
|
270
|
+
},
|
|
271
|
+
required: ['dimension', 'operator', 'expression'],
|
|
272
|
+
},
|
|
273
|
+
description: 'Filters to apply',
|
|
274
|
+
},
|
|
275
|
+
},
|
|
276
|
+
required: ['siteId', 'startDate', 'endDate'],
|
|
277
|
+
},
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
name: 'heyseo_top_keywords',
|
|
281
|
+
description: `Get top performing keywords for a site.
|
|
282
|
+
|
|
283
|
+
Returns keywords ranked by clicks, including impressions, CTR, and average position.
|
|
284
|
+
Useful for understanding which search terms drive the most traffic.`,
|
|
285
|
+
inputSchema: {
|
|
286
|
+
type: 'object',
|
|
287
|
+
properties: {
|
|
288
|
+
siteId: {
|
|
289
|
+
type: 'string',
|
|
290
|
+
description: 'The ID of the site to query',
|
|
291
|
+
},
|
|
292
|
+
limit: {
|
|
293
|
+
type: 'number',
|
|
294
|
+
minimum: 1,
|
|
295
|
+
maximum: 1000,
|
|
296
|
+
default: 50,
|
|
297
|
+
description: 'Number of keywords to return',
|
|
298
|
+
},
|
|
299
|
+
startDate: {
|
|
300
|
+
type: 'string',
|
|
301
|
+
pattern: '^\\d{4}-\\d{2}-\\d{2}$',
|
|
302
|
+
description: 'Start date (defaults to 28 days ago)',
|
|
303
|
+
},
|
|
304
|
+
endDate: {
|
|
305
|
+
type: 'string',
|
|
306
|
+
pattern: '^\\d{4}-\\d{2}-\\d{2}$',
|
|
307
|
+
description: 'End date (defaults to today)',
|
|
308
|
+
},
|
|
309
|
+
},
|
|
310
|
+
required: ['siteId'],
|
|
311
|
+
},
|
|
312
|
+
},
|
|
313
|
+
{
|
|
314
|
+
name: 'heyseo_top_pages',
|
|
315
|
+
description: `Get top performing pages for a site.
|
|
316
|
+
|
|
317
|
+
Returns pages ranked by clicks, including impressions, CTR, and average position.
|
|
318
|
+
Useful for understanding which pages drive the most organic traffic.`,
|
|
319
|
+
inputSchema: {
|
|
320
|
+
type: 'object',
|
|
321
|
+
properties: {
|
|
322
|
+
siteId: {
|
|
323
|
+
type: 'string',
|
|
324
|
+
description: 'The ID of the site to query',
|
|
325
|
+
},
|
|
326
|
+
limit: {
|
|
327
|
+
type: 'number',
|
|
328
|
+
minimum: 1,
|
|
329
|
+
maximum: 1000,
|
|
330
|
+
default: 50,
|
|
331
|
+
description: 'Number of pages to return',
|
|
332
|
+
},
|
|
333
|
+
startDate: {
|
|
334
|
+
type: 'string',
|
|
335
|
+
pattern: '^\\d{4}-\\d{2}-\\d{2}$',
|
|
336
|
+
description: 'Start date (defaults to 28 days ago)',
|
|
337
|
+
},
|
|
338
|
+
endDate: {
|
|
339
|
+
type: 'string',
|
|
340
|
+
pattern: '^\\d{4}-\\d{2}-\\d{2}$',
|
|
341
|
+
description: 'End date (defaults to today)',
|
|
342
|
+
},
|
|
343
|
+
},
|
|
344
|
+
required: ['siteId'],
|
|
345
|
+
},
|
|
346
|
+
},
|
|
347
|
+
];
|
|
348
|
+
//# sourceMappingURL=gsc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gsc.js","sourceRoot":"","sources":["../../src/tools/gsc.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,4BAA4B;AAC5B,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IAC1D,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,KAAK,CAAC,qBAAqB,CAAC;SAC5B,QAAQ,CAAC,iCAAiC,CAAC;IAC9C,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,KAAK,CAAC,qBAAqB,CAAC;SAC5B,QAAQ,CAAC,+BAA+B,CAAC;IAC5C,UAAU,EAAE,CAAC;SACV,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;SAC7D,QAAQ,EAAE;SACV,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC;SAClB,QAAQ,CAAC,6DAA6D,CAAC;IAC1E,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,KAAK,CAAC;SACV,QAAQ,EAAE;SACV,OAAO,CAAC,IAAI,CAAC;SACb,QAAQ,CAAC,4CAA4C,CAAC;IACzD,OAAO,EAAE,CAAC;SACP,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;QACP,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QACzD,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC;YACf,QAAQ;YACR,UAAU;YACV,aAAa;YACb,gBAAgB;YAChB,gBAAgB;SACjB,CAAC;QACF,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;KACvB,CAAC,CACH;SACA,QAAQ,EAAE;SACV,QAAQ,CAAC,+BAA+B,CAAC;CAC7C,CAAC,CAAC;AAIH,+BAA+B;AAC/B,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IAC1D,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,IAAI,CAAC;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,EAAE,CAAC;SACX,QAAQ,CAAC,8BAA8B,CAAC;IAC3C,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,KAAK,CAAC,qBAAqB,CAAC;SAC5B,QAAQ,EAAE;SACV,QAAQ,CAAC,sCAAsC,CAAC;IACnD,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,KAAK,CAAC,qBAAqB,CAAC;SAC5B,QAAQ,EAAE;SACV,QAAQ,CAAC,8BAA8B,CAAC;CAC5C,CAAC,CAAC;AAIH,4BAA4B;AAC5B,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IAC1D,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,IAAI,CAAC;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,EAAE,CAAC;SACX,QAAQ,CAAC,2BAA2B,CAAC;IACxC,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,KAAK,CAAC,qBAAqB,CAAC;SAC5B,QAAQ,EAAE;SACV,QAAQ,CAAC,sCAAsC,CAAC;IACnD,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,KAAK,CAAC,qBAAqB,CAAC;SAC5B,QAAQ,EAAE;SACV,QAAQ,CAAC,8BAA8B,CAAC;CAC5C,CAAC,CAAC;AAIH;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAuB,EACvB,KAAoB;IAEpB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;YACnC,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC,CAAC;QAEH,iCAAiC;QACjC,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC9C,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAChB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;gBAClB,GAAG,GAAG;gBACN,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,IAAI,MAAM,GAAG,EAAE,CAAC,EAAE,GAAG;aAC9C,CAAC,EACF,EAAE,CACH;YACD,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;YACrC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;SAClC,CAAC,CAAC,CAAC;QAEJ,OAAO,IAAI,CAAC,SAAS,CACnB;YACE,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;YAC9D,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM;YAC7B,IAAI,EAAE,aAAa;SACpB,EACD,IAAI,EACJ,CAAC,CACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAChE,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAAuB,EACvB,KAAuB;IAEvB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE;YACvD,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,KAAK,EAAE,KAAK,CAAC,KAAK;SACnB,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YAChD,IAAI,EAAE,KAAK,GAAG,CAAC;YACf,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;YACpB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;YACrC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;SAClC,CAAC,CAAC,CAAC;QAEJ,mBAAmB;QACnB,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAC/B,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;YACb,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM;YAC/B,WAAW,EAAE,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW;SAC/C,CAAC,EACF,EAAE,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAC9B,CAAC;QAEF,OAAO,IAAI,CAAC,SAAS,CACnB;YACE,OAAO,EAAE,IAAI;YACb,aAAa,EAAE,QAAQ,CAAC,MAAM;YAC9B,MAAM,EAAE;gBACN,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;aACtE;YACD,QAAQ;SACT,EACD,IAAI,EACJ,CAAC,CACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAChE,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAuB,EACvB,KAAoB;IAEpB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE;YACpD,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,KAAK,EAAE,KAAK,CAAC,KAAK;SACnB,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YAC7C,IAAI,EAAE,KAAK,GAAG,CAAC;YACf,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;YACjB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;YACrC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;SAClC,CAAC,CAAC,CAAC;QAEJ,mBAAmB;QACnB,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAC/B,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;YACb,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM;YAC/B,WAAW,EAAE,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW;SAC/C,CAAC,EACF,EAAE,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAC9B,CAAC;QAEF,OAAO,IAAI,CAAC,SAAS,CACnB;YACE,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,KAAK,CAAC,MAAM;YACxB,MAAM,EAAE;gBACN,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;aACtE;YACD,KAAK;SACN,EACD,IAAI,EACJ,CAAC,CACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAChE,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE;;;;;;;;;2EAS0D;QACvE,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,6BAA6B;iBAC3C;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,wBAAwB;oBACjC,WAAW,EAAE,iCAAiC;iBAC/C;gBACD,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,wBAAwB;oBACjC,WAAW,EAAE,+BAA+B;iBAC7C;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC;qBACrD;oBACD,OAAO,EAAE,CAAC,OAAO,CAAC;oBAClB,WAAW,EAAE,wBAAwB;iBACtC;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,CAAC;oBACV,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,IAAI;oBACb,WAAW,EAAE,wBAAwB;iBACtC;gBACD,OAAO,EAAE;oBACP,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,SAAS,EAAE;gCACT,IAAI,EAAE,QAAQ;gCACd,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC;6BAC7C;4BACD,QAAQ,EAAE;gCACR,IAAI,EAAE,QAAQ;gCACd,IAAI,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;6BAChF;4BACD,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;yBAC/B;wBACD,QAAQ,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,YAAY,CAAC;qBAClD;oBACD,WAAW,EAAE,kBAAkB;iBAChC;aACF;YACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,SAAS,CAAC;SAC7C;KACF;IACD;QACE,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EAAE;;;oEAGmD;QAChE,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,6BAA6B;iBAC3C;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,CAAC;oBACV,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,EAAE;oBACX,WAAW,EAAE,8BAA8B;iBAC5C;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,wBAAwB;oBACjC,WAAW,EAAE,sCAAsC;iBACpD;gBACD,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,wBAAwB;oBACjC,WAAW,EAAE,8BAA8B;iBAC5C;aACF;YACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;SACrB;KACF;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE;;;qEAGoD;QACjE,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,6BAA6B;iBAC3C;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,CAAC;oBACV,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,EAAE;oBACX,WAAW,EAAE,2BAA2B;iBACzC;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,wBAAwB;oBACjC,WAAW,EAAE,sCAAsC;iBACpD;gBACD,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,wBAAwB;oBACjC,WAAW,EAAE,8BAA8B;iBAC5C;aACF;YACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;SACrB;KACF;CACF,CAAC"}
|