@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.
Files changed (46) hide show
  1. package/README.md +284 -0
  2. package/dist/index.d.ts +10 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +258 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/prompts/index.d.ts +22 -0
  7. package/dist/prompts/index.d.ts.map +1 -0
  8. package/dist/prompts/index.js +267 -0
  9. package/dist/prompts/index.js.map +1 -0
  10. package/dist/resources/index.d.ts +38 -0
  11. package/dist/resources/index.d.ts.map +1 -0
  12. package/dist/resources/index.js +247 -0
  13. package/dist/resources/index.js.map +1 -0
  14. package/dist/tools/comparison.d.ts +159 -0
  15. package/dist/tools/comparison.d.ts.map +1 -0
  16. package/dist/tools/comparison.js +482 -0
  17. package/dist/tools/comparison.js.map +1 -0
  18. package/dist/tools/ga4.d.ts +182 -0
  19. package/dist/tools/ga4.d.ts.map +1 -0
  20. package/dist/tools/ga4.js +429 -0
  21. package/dist/tools/ga4.js.map +1 -0
  22. package/dist/tools/gsc.d.ts +194 -0
  23. package/dist/tools/gsc.d.ts.map +1 -0
  24. package/dist/tools/gsc.js +348 -0
  25. package/dist/tools/gsc.js.map +1 -0
  26. package/dist/tools/index.d.ts +392 -0
  27. package/dist/tools/index.d.ts.map +1 -0
  28. package/dist/tools/index.js +59 -0
  29. package/dist/tools/index.js.map +1 -0
  30. package/dist/tools/pagespeed.d.ts +88 -0
  31. package/dist/tools/pagespeed.d.ts.map +1 -0
  32. package/dist/tools/pagespeed.js +285 -0
  33. package/dist/tools/pagespeed.js.map +1 -0
  34. package/dist/tools/tasks.d.ts +71 -0
  35. package/dist/tools/tasks.d.ts.map +1 -0
  36. package/dist/tools/tasks.js +116 -0
  37. package/dist/tools/tasks.js.map +1 -0
  38. package/dist/types.d.ts +151 -0
  39. package/dist/types.d.ts.map +1 -0
  40. package/dist/types.js +5 -0
  41. package/dist/types.js.map +1 -0
  42. package/dist/utils/api-client.d.ts +69 -0
  43. package/dist/utils/api-client.d.ts.map +1 -0
  44. package/dist/utils/api-client.js +202 -0
  45. package/dist/utils/api-client.js.map +1 -0
  46. package/package.json +42 -0
@@ -0,0 +1,182 @@
1
+ /**
2
+ * Google Analytics 4 Tools
3
+ * Tools for querying GA4 analytics data
4
+ */
5
+ import { z } from 'zod';
6
+ import type { HeySeoApiClient } from '../utils/api-client.js';
7
+ export declare const queryGA4Schema: z.ZodObject<{
8
+ siteId: z.ZodString;
9
+ startDate: z.ZodString;
10
+ endDate: z.ZodString;
11
+ metrics: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodEnum<["sessions", "activeUsers", "newUsers", "engagementRate", "bounceRate", "averageSessionDuration", "screenPageViews", "conversions", "eventCount"]>, "many">>>;
12
+ dimensions: z.ZodOptional<z.ZodArray<z.ZodEnum<["date", "landingPage", "pagePath", "sessionSource", "sessionMedium", "deviceCategory", "country", "city"]>, "many">>;
13
+ limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
14
+ }, "strip", z.ZodTypeAny, {
15
+ siteId: string;
16
+ limit: number;
17
+ startDate: string;
18
+ endDate: string;
19
+ metrics: ("sessions" | "activeUsers" | "newUsers" | "engagementRate" | "bounceRate" | "averageSessionDuration" | "screenPageViews" | "conversions" | "eventCount")[];
20
+ dimensions?: ("country" | "date" | "landingPage" | "pagePath" | "sessionSource" | "sessionMedium" | "deviceCategory" | "city")[] | undefined;
21
+ }, {
22
+ siteId: string;
23
+ startDate: string;
24
+ endDate: string;
25
+ limit?: number | undefined;
26
+ dimensions?: ("country" | "date" | "landingPage" | "pagePath" | "sessionSource" | "sessionMedium" | "deviceCategory" | "city")[] | undefined;
27
+ metrics?: ("sessions" | "activeUsers" | "newUsers" | "engagementRate" | "bounceRate" | "averageSessionDuration" | "screenPageViews" | "conversions" | "eventCount")[] | undefined;
28
+ }>;
29
+ export type QueryGA4Input = z.infer<typeof queryGA4Schema>;
30
+ export declare const landingPagesSchema: z.ZodObject<{
31
+ siteId: z.ZodString;
32
+ limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
33
+ startDate: z.ZodOptional<z.ZodString>;
34
+ endDate: z.ZodOptional<z.ZodString>;
35
+ }, "strip", z.ZodTypeAny, {
36
+ siteId: string;
37
+ limit: number;
38
+ startDate?: string | undefined;
39
+ endDate?: string | undefined;
40
+ }, {
41
+ siteId: string;
42
+ limit?: number | undefined;
43
+ startDate?: string | undefined;
44
+ endDate?: string | undefined;
45
+ }>;
46
+ export type LandingPagesInput = z.infer<typeof landingPagesSchema>;
47
+ export declare const trafficSourcesSchema: z.ZodObject<{
48
+ siteId: z.ZodString;
49
+ startDate: z.ZodOptional<z.ZodString>;
50
+ endDate: z.ZodOptional<z.ZodString>;
51
+ }, "strip", z.ZodTypeAny, {
52
+ siteId: string;
53
+ startDate?: string | undefined;
54
+ endDate?: string | undefined;
55
+ }, {
56
+ siteId: string;
57
+ startDate?: string | undefined;
58
+ endDate?: string | undefined;
59
+ }>;
60
+ export type TrafficSourcesInput = z.infer<typeof trafficSourcesSchema>;
61
+ /**
62
+ * Execute GA4 query tool
63
+ */
64
+ export declare function executeQueryGA4(client: HeySeoApiClient, input: QueryGA4Input): Promise<string>;
65
+ /**
66
+ * Execute landing pages tool
67
+ */
68
+ export declare function executeLandingPages(client: HeySeoApiClient, input: LandingPagesInput): Promise<string>;
69
+ /**
70
+ * Execute traffic sources tool
71
+ */
72
+ export declare function executeTrafficSources(client: HeySeoApiClient, input: TrafficSourcesInput): Promise<string>;
73
+ /**
74
+ * GA4 tool definitions for MCP
75
+ */
76
+ export declare const ga4Tools: ({
77
+ name: string;
78
+ description: string;
79
+ inputSchema: {
80
+ type: string;
81
+ properties: {
82
+ siteId: {
83
+ type: string;
84
+ description: string;
85
+ };
86
+ startDate: {
87
+ type: string;
88
+ pattern: string;
89
+ description: string;
90
+ };
91
+ endDate: {
92
+ type: string;
93
+ pattern: string;
94
+ description: string;
95
+ };
96
+ metrics: {
97
+ type: string;
98
+ items: {
99
+ type: string;
100
+ enum: string[];
101
+ };
102
+ default: string[];
103
+ description: string;
104
+ };
105
+ dimensions: {
106
+ type: string;
107
+ items: {
108
+ type: string;
109
+ enum: string[];
110
+ };
111
+ description: string;
112
+ };
113
+ limit: {
114
+ type: string;
115
+ minimum: number;
116
+ maximum: number;
117
+ default: number;
118
+ description: string;
119
+ };
120
+ };
121
+ required: string[];
122
+ };
123
+ } | {
124
+ name: string;
125
+ description: string;
126
+ inputSchema: {
127
+ type: string;
128
+ properties: {
129
+ siteId: {
130
+ type: string;
131
+ description: string;
132
+ };
133
+ limit: {
134
+ type: string;
135
+ minimum: number;
136
+ maximum: number;
137
+ default: number;
138
+ description: string;
139
+ };
140
+ startDate: {
141
+ type: string;
142
+ pattern: string;
143
+ description: string;
144
+ };
145
+ endDate: {
146
+ type: string;
147
+ pattern: string;
148
+ description: string;
149
+ };
150
+ metrics?: undefined;
151
+ dimensions?: undefined;
152
+ };
153
+ required: string[];
154
+ };
155
+ } | {
156
+ name: string;
157
+ description: string;
158
+ inputSchema: {
159
+ type: string;
160
+ properties: {
161
+ siteId: {
162
+ type: string;
163
+ description: string;
164
+ };
165
+ startDate: {
166
+ type: string;
167
+ pattern: string;
168
+ description: string;
169
+ };
170
+ endDate: {
171
+ type: string;
172
+ pattern: string;
173
+ description: string;
174
+ };
175
+ metrics?: undefined;
176
+ dimensions?: undefined;
177
+ limit?: undefined;
178
+ };
179
+ required: string[];
180
+ };
181
+ })[];
182
+ //# sourceMappingURL=ga4.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ga4.d.ts","sourceRoot":"","sources":["../../src/tools/ga4.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;;;;;;;;;;;;;;;;;;;;;EAiDzB,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAG3D,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;EAmB7B,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAGnE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;EAY/B,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAEvE;;GAEG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,MAAM,CAAC,CAwDjB;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,MAAM,CAAC,CAkEjB;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,MAAM,CAAC,CAsDjB;AA8BD;;GAEG;AACH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAoJpB,CAAC"}
@@ -0,0 +1,429 @@
1
+ /**
2
+ * Google Analytics 4 Tools
3
+ * Tools for querying GA4 analytics data
4
+ */
5
+ import { z } from 'zod';
6
+ // Schema for GA4 query tool
7
+ export const queryGA4Schema = 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
+ metrics: z
18
+ .array(z.enum([
19
+ 'sessions',
20
+ 'activeUsers',
21
+ 'newUsers',
22
+ 'engagementRate',
23
+ 'bounceRate',
24
+ 'averageSessionDuration',
25
+ 'screenPageViews',
26
+ 'conversions',
27
+ 'eventCount',
28
+ ]))
29
+ .optional()
30
+ .default(['sessions', 'activeUsers', 'bounceRate', 'engagementRate'])
31
+ .describe('Metrics to retrieve'),
32
+ dimensions: z
33
+ .array(z.enum([
34
+ 'date',
35
+ 'landingPage',
36
+ 'pagePath',
37
+ 'sessionSource',
38
+ 'sessionMedium',
39
+ 'deviceCategory',
40
+ 'country',
41
+ 'city',
42
+ ]))
43
+ .optional()
44
+ .describe('Dimensions to group by'),
45
+ limit: z
46
+ .number()
47
+ .min(1)
48
+ .max(10000)
49
+ .optional()
50
+ .default(1000)
51
+ .describe('Maximum number of rows to return'),
52
+ });
53
+ // Schema for landing pages tool
54
+ export const landingPagesSchema = z.object({
55
+ siteId: z.string().describe('The ID of the site to query'),
56
+ limit: z
57
+ .number()
58
+ .min(1)
59
+ .max(500)
60
+ .optional()
61
+ .default(50)
62
+ .describe('Number of landing pages to return'),
63
+ startDate: z
64
+ .string()
65
+ .regex(/^\d{4}-\d{2}-\d{2}$/)
66
+ .optional()
67
+ .describe('Start date (defaults to 28 days ago)'),
68
+ endDate: z
69
+ .string()
70
+ .regex(/^\d{4}-\d{2}-\d{2}$/)
71
+ .optional()
72
+ .describe('End date (defaults to today)'),
73
+ });
74
+ // Schema for traffic sources tool
75
+ export const trafficSourcesSchema = z.object({
76
+ siteId: z.string().describe('The ID of the site to query'),
77
+ startDate: z
78
+ .string()
79
+ .regex(/^\d{4}-\d{2}-\d{2}$/)
80
+ .optional()
81
+ .describe('Start date (defaults to 28 days ago)'),
82
+ endDate: z
83
+ .string()
84
+ .regex(/^\d{4}-\d{2}-\d{2}$/)
85
+ .optional()
86
+ .describe('End date (defaults to today)'),
87
+ });
88
+ /**
89
+ * Execute GA4 query tool
90
+ */
91
+ export async function executeQueryGA4(client, input) {
92
+ try {
93
+ const result = await client.queryGA4({
94
+ siteId: input.siteId,
95
+ startDate: input.startDate,
96
+ endDate: input.endDate,
97
+ metrics: input.metrics,
98
+ dimensions: input.dimensions,
99
+ limit: input.limit,
100
+ });
101
+ // Format results
102
+ const formattedRows = result.map((row) => {
103
+ const formatted = {};
104
+ // Add dimensions
105
+ if (row.dimensions) {
106
+ Object.entries(row.dimensions).forEach(([key, value]) => {
107
+ formatted[key] = value;
108
+ });
109
+ }
110
+ // Add metrics with formatting
111
+ if (row.metrics) {
112
+ Object.entries(row.metrics).forEach(([key, value]) => {
113
+ if (key === 'engagementRate' || key === 'bounceRate') {
114
+ formatted[key] = `${(value * 100).toFixed(2)}%`;
115
+ }
116
+ else if (key === 'averageSessionDuration') {
117
+ formatted[key] = `${Math.round(value)}s`;
118
+ }
119
+ else {
120
+ formatted[key] = value;
121
+ }
122
+ });
123
+ }
124
+ return formatted;
125
+ });
126
+ return JSON.stringify({
127
+ success: true,
128
+ period: { startDate: input.startDate, endDate: input.endDate },
129
+ metrics: input.metrics,
130
+ dimensions: input.dimensions,
131
+ totalRows: result.length,
132
+ data: formattedRows,
133
+ }, null, 2);
134
+ }
135
+ catch (error) {
136
+ return JSON.stringify({
137
+ success: false,
138
+ error: error instanceof Error ? error.message : 'Unknown error',
139
+ });
140
+ }
141
+ }
142
+ /**
143
+ * Execute landing pages tool
144
+ */
145
+ export async function executeLandingPages(client, input) {
146
+ try {
147
+ const endDate = input.endDate || new Date().toISOString().split('T')[0];
148
+ const startDate = input.startDate ||
149
+ new Date(Date.now() - 28 * 24 * 60 * 60 * 1000).toISOString().split('T')[0];
150
+ const result = await client.queryGA4({
151
+ siteId: input.siteId,
152
+ startDate,
153
+ endDate,
154
+ dimensions: ['landingPage'],
155
+ metrics: [
156
+ 'sessions',
157
+ 'activeUsers',
158
+ 'bounceRate',
159
+ 'engagementRate',
160
+ 'averageSessionDuration',
161
+ 'conversions',
162
+ ],
163
+ limit: input.limit,
164
+ });
165
+ const landingPages = result.map((row, index) => ({
166
+ rank: index + 1,
167
+ landingPage: row.dimensions?.landingPage || 'unknown',
168
+ sessions: row.metrics?.sessions || 0,
169
+ users: row.metrics?.activeUsers || 0,
170
+ bounceRate: row.metrics?.bounceRate
171
+ ? `${(row.metrics.bounceRate * 100).toFixed(1)}%`
172
+ : 'N/A',
173
+ engagementRate: row.metrics?.engagementRate
174
+ ? `${(row.metrics.engagementRate * 100).toFixed(1)}%`
175
+ : 'N/A',
176
+ avgDuration: row.metrics?.avgSessionDuration
177
+ ? `${Math.round(row.metrics.avgSessionDuration)}s`
178
+ : 'N/A',
179
+ conversions: row.metrics?.conversions || 0,
180
+ }));
181
+ // Calculate totals
182
+ const totals = result.reduce((acc, row) => ({
183
+ sessions: acc.sessions + (row.metrics?.sessions || 0),
184
+ users: acc.users + (row.metrics?.activeUsers || 0),
185
+ conversions: acc.conversions + (row.metrics?.conversions || 0),
186
+ }), { sessions: 0, users: 0, conversions: 0 });
187
+ return JSON.stringify({
188
+ success: true,
189
+ totalLandingPages: landingPages.length,
190
+ totals,
191
+ landingPages,
192
+ }, null, 2);
193
+ }
194
+ catch (error) {
195
+ return JSON.stringify({
196
+ success: false,
197
+ error: error instanceof Error ? error.message : 'Unknown error',
198
+ });
199
+ }
200
+ }
201
+ /**
202
+ * Execute traffic sources tool
203
+ */
204
+ export async function executeTrafficSources(client, input) {
205
+ try {
206
+ const endDate = input.endDate || new Date().toISOString().split('T')[0];
207
+ const startDate = input.startDate ||
208
+ new Date(Date.now() - 28 * 24 * 60 * 60 * 1000).toISOString().split('T')[0];
209
+ const result = await client.queryGA4({
210
+ siteId: input.siteId,
211
+ startDate,
212
+ endDate,
213
+ dimensions: ['sessionSource', 'sessionMedium'],
214
+ metrics: ['sessions', 'activeUsers', 'engagementRate', 'conversions'],
215
+ limit: 100,
216
+ });
217
+ const sources = result.map((row) => ({
218
+ source: row.dimensions?.sessionSource || 'unknown',
219
+ medium: row.dimensions?.sessionMedium || 'unknown',
220
+ sessions: row.metrics?.sessions || 0,
221
+ users: row.metrics?.activeUsers || 0,
222
+ engagementRate: row.metrics?.engagementRate
223
+ ? `${(row.metrics.engagementRate * 100).toFixed(1)}%`
224
+ : 'N/A',
225
+ conversions: row.metrics?.conversions || 0,
226
+ }));
227
+ // Group by channel
228
+ const channels = {};
229
+ sources.forEach((source) => {
230
+ const channel = categorizeChannel(source.source, source.medium);
231
+ if (!channels[channel]) {
232
+ channels[channel] = { sessions: 0, users: 0, conversions: 0 };
233
+ }
234
+ channels[channel].sessions += source.sessions;
235
+ channels[channel].users += source.users;
236
+ channels[channel].conversions += source.conversions;
237
+ });
238
+ return JSON.stringify({
239
+ success: true,
240
+ byChannel: channels,
241
+ bySource: sources,
242
+ }, null, 2);
243
+ }
244
+ catch (error) {
245
+ return JSON.stringify({
246
+ success: false,
247
+ error: error instanceof Error ? error.message : 'Unknown error',
248
+ });
249
+ }
250
+ }
251
+ /**
252
+ * Categorize traffic source into channel
253
+ */
254
+ function categorizeChannel(source, medium) {
255
+ const src = source.toLowerCase();
256
+ const med = medium.toLowerCase();
257
+ if (med === 'organic' || src === 'google' || src === 'bing' || src === 'duckduckgo') {
258
+ return 'Organic Search';
259
+ }
260
+ if (med === 'cpc' || med === 'ppc' || med === 'paid') {
261
+ return 'Paid Search';
262
+ }
263
+ if (med === 'referral') {
264
+ return 'Referral';
265
+ }
266
+ if (med === 'email') {
267
+ return 'Email';
268
+ }
269
+ if (med === 'social' || src.includes('facebook') || src.includes('twitter') || src.includes('linkedin')) {
270
+ return 'Social';
271
+ }
272
+ if (src === '(direct)' || med === '(none)') {
273
+ return 'Direct';
274
+ }
275
+ return 'Other';
276
+ }
277
+ /**
278
+ * GA4 tool definitions for MCP
279
+ */
280
+ export const ga4Tools = [
281
+ {
282
+ name: 'heyseo_query_ga4',
283
+ description: `Query Google Analytics 4 data for a connected site.
284
+
285
+ Returns user engagement and behavior metrics including:
286
+ - Sessions: Total number of sessions
287
+ - Active Users: Unique users who engaged
288
+ - Bounce Rate: Percentage of single-page sessions
289
+ - Engagement Rate: Percentage of engaged sessions
290
+ - Avg Session Duration: Average time on site
291
+ - Page Views: Total page views
292
+ - Conversions: Conversion events
293
+
294
+ You can group results by landing page, traffic source, device, country, etc.`,
295
+ inputSchema: {
296
+ type: 'object',
297
+ properties: {
298
+ siteId: {
299
+ type: 'string',
300
+ description: 'The ID of the site to query',
301
+ },
302
+ startDate: {
303
+ type: 'string',
304
+ pattern: '^\\d{4}-\\d{2}-\\d{2}$',
305
+ description: 'Start date in YYYY-MM-DD format',
306
+ },
307
+ endDate: {
308
+ type: 'string',
309
+ pattern: '^\\d{4}-\\d{2}-\\d{2}$',
310
+ description: 'End date in YYYY-MM-DD format',
311
+ },
312
+ metrics: {
313
+ type: 'array',
314
+ items: {
315
+ type: 'string',
316
+ enum: [
317
+ 'sessions',
318
+ 'activeUsers',
319
+ 'newUsers',
320
+ 'engagementRate',
321
+ 'bounceRate',
322
+ 'averageSessionDuration',
323
+ 'screenPageViews',
324
+ 'conversions',
325
+ 'eventCount',
326
+ ],
327
+ },
328
+ default: ['sessions', 'activeUsers', 'bounceRate', 'engagementRate'],
329
+ description: 'Metrics to retrieve',
330
+ },
331
+ dimensions: {
332
+ type: 'array',
333
+ items: {
334
+ type: 'string',
335
+ enum: [
336
+ 'date',
337
+ 'landingPage',
338
+ 'pagePath',
339
+ 'sessionSource',
340
+ 'sessionMedium',
341
+ 'deviceCategory',
342
+ 'country',
343
+ 'city',
344
+ ],
345
+ },
346
+ description: 'Dimensions to group by',
347
+ },
348
+ limit: {
349
+ type: 'number',
350
+ minimum: 1,
351
+ maximum: 10000,
352
+ default: 1000,
353
+ description: 'Maximum rows to return',
354
+ },
355
+ },
356
+ required: ['siteId', 'startDate', 'endDate'],
357
+ },
358
+ },
359
+ {
360
+ name: 'heyseo_landing_pages',
361
+ description: `Get top landing pages with engagement metrics.
362
+
363
+ Returns landing pages ranked by sessions, including bounce rate,
364
+ engagement rate, average session duration, and conversions.
365
+ Useful for understanding which pages users enter your site from.`,
366
+ inputSchema: {
367
+ type: 'object',
368
+ properties: {
369
+ siteId: {
370
+ type: 'string',
371
+ description: 'The ID of the site to query',
372
+ },
373
+ limit: {
374
+ type: 'number',
375
+ minimum: 1,
376
+ maximum: 500,
377
+ default: 50,
378
+ description: 'Number of landing pages to return',
379
+ },
380
+ startDate: {
381
+ type: 'string',
382
+ pattern: '^\\d{4}-\\d{2}-\\d{2}$',
383
+ description: 'Start date (defaults to 28 days ago)',
384
+ },
385
+ endDate: {
386
+ type: 'string',
387
+ pattern: '^\\d{4}-\\d{2}-\\d{2}$',
388
+ description: 'End date (defaults to today)',
389
+ },
390
+ },
391
+ required: ['siteId'],
392
+ },
393
+ },
394
+ {
395
+ name: 'heyseo_traffic_sources',
396
+ description: `Get traffic sources breakdown.
397
+
398
+ Returns traffic grouped by source/medium and categorized into channels:
399
+ - Organic Search (Google, Bing, etc.)
400
+ - Paid Search (CPC, PPC)
401
+ - Direct
402
+ - Referral
403
+ - Social
404
+ - Email
405
+
406
+ Useful for understanding where your traffic comes from.`,
407
+ inputSchema: {
408
+ type: 'object',
409
+ properties: {
410
+ siteId: {
411
+ type: 'string',
412
+ description: 'The ID of the site to query',
413
+ },
414
+ startDate: {
415
+ type: 'string',
416
+ pattern: '^\\d{4}-\\d{2}-\\d{2}$',
417
+ description: 'Start date (defaults to 28 days ago)',
418
+ },
419
+ endDate: {
420
+ type: 'string',
421
+ pattern: '^\\d{4}-\\d{2}-\\d{2}$',
422
+ description: 'End date (defaults to today)',
423
+ },
424
+ },
425
+ required: ['siteId'],
426
+ },
427
+ },
428
+ ];
429
+ //# sourceMappingURL=ga4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ga4.js","sourceRoot":"","sources":["../../src/tools/ga4.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,OAAO,EAAE,CAAC;SACP,KAAK,CACJ,CAAC,CAAC,IAAI,CAAC;QACL,UAAU;QACV,aAAa;QACb,UAAU;QACV,gBAAgB;QAChB,YAAY;QACZ,wBAAwB;QACxB,iBAAiB;QACjB,aAAa;QACb,YAAY;KACb,CAAC,CACH;SACA,QAAQ,EAAE;SACV,OAAO,CAAC,CAAC,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,CAAC,CAAC;SACpE,QAAQ,CAAC,qBAAqB,CAAC;IAClC,UAAU,EAAE,CAAC;SACV,KAAK,CACJ,CAAC,CAAC,IAAI,CAAC;QACL,MAAM;QACN,aAAa;QACb,UAAU;QACV,eAAe;QACf,eAAe;QACf,gBAAgB;QAChB,SAAS;QACT,MAAM;KACP,CAAC,CACH;SACA,QAAQ,EAAE;SACV,QAAQ,CAAC,wBAAwB,CAAC;IACrC,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,KAAK,CAAC;SACV,QAAQ,EAAE;SACV,OAAO,CAAC,IAAI,CAAC;SACb,QAAQ,CAAC,kCAAkC,CAAC;CAChD,CAAC,CAAC;AAIH,gCAAgC;AAChC,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,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,GAAG,CAAC;SACR,QAAQ,EAAE;SACV,OAAO,CAAC,EAAE,CAAC;SACX,QAAQ,CAAC,mCAAmC,CAAC;IAChD,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,kCAAkC;AAClC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,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,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,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;SACnB,CAAC,CAAC;QAEH,iBAAiB;QACjB,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YACvC,MAAM,SAAS,GAAoC,EAAE,CAAC;YAEtD,iBAAiB;YACjB,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;gBACnB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;oBACtD,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBACzB,CAAC,CAAC,CAAC;YACL,CAAC;YAED,8BAA8B;YAC9B,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAChB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;oBACnD,IAAI,GAAG,KAAK,gBAAgB,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;wBACrD,SAAS,CAAC,GAAG,CAAC,GAAG,GAAG,CAAE,KAAgB,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;oBAC9D,CAAC;yBAAM,IAAI,GAAG,KAAK,wBAAwB,EAAE,CAAC;wBAC5C,SAAS,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAe,CAAC,GAAG,CAAC;oBACrD,CAAC;yBAAM,CAAC;wBACN,SAAS,CAAC,GAAG,CAAC,GAAG,KAAe,CAAC;oBACnC,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;YAED,OAAO,SAAS,CAAC;QACnB,CAAC,CAAC,CAAC;QAEH,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,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,SAAS,EAAE,MAAM,CAAC,MAAM;YACxB,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,mBAAmB,CACvC,MAAuB,EACvB,KAAwB;IAExB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,MAAM,SAAS,GACb,KAAK,CAAC,SAAS;YACf,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAE9E,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;YACnC,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,SAAS;YACT,OAAO;YACP,UAAU,EAAE,CAAC,aAAa,CAAC;YAC3B,OAAO,EAAE;gBACP,UAAU;gBACV,aAAa;gBACb,YAAY;gBACZ,gBAAgB;gBAChB,wBAAwB;gBACxB,aAAa;aACd;YACD,KAAK,EAAE,KAAK,CAAC,KAAK;SACnB,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YAC/C,IAAI,EAAE,KAAK,GAAG,CAAC;YACf,WAAW,EAAE,GAAG,CAAC,UAAU,EAAE,WAAW,IAAI,SAAS;YACrD,QAAQ,EAAE,GAAG,CAAC,OAAO,EAAE,QAAQ,IAAI,CAAC;YACpC,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,WAAW,IAAI,CAAC;YACpC,UAAU,EAAE,GAAG,CAAC,OAAO,EAAE,UAAU;gBACjC,CAAC,CAAC,GAAG,CAAE,GAAG,CAAC,OAAO,CAAC,UAAqB,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;gBAC7D,CAAC,CAAC,KAAK;YACT,cAAc,EAAE,GAAG,CAAC,OAAO,EAAE,cAAc;gBACzC,CAAC,CAAC,GAAG,CAAE,GAAG,CAAC,OAAO,CAAC,cAAyB,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;gBACjE,CAAC,CAAC,KAAK;YACT,WAAW,EAAE,GAAG,CAAC,OAAO,EAAE,kBAAkB;gBAC1C,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,kBAA4B,CAAC,GAAG;gBAC5D,CAAC,CAAC,KAAK;YACT,WAAW,EAAE,GAAG,CAAC,OAAO,EAAE,WAAW,IAAI,CAAC;SAC3C,CAAC,CAAC,CAAC;QAEJ,mBAAmB;QACnB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAC1B,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;YACb,QAAQ,EAAE,GAAG,CAAC,QAAQ,GAAG,CAAE,GAAG,CAAC,OAAO,EAAE,QAAmB,IAAI,CAAC,CAAC;YACjE,KAAK,EAAE,GAAG,CAAC,KAAK,GAAG,CAAE,GAAG,CAAC,OAAO,EAAE,WAAsB,IAAI,CAAC,CAAC;YAC9D,WAAW,EAAE,GAAG,CAAC,WAAW,GAAG,CAAE,GAAG,CAAC,OAAO,EAAE,WAAsB,IAAI,CAAC,CAAC;SAC3E,CAAC,EACF,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAC1C,CAAC;QAEF,OAAO,IAAI,CAAC,SAAS,CACnB;YACE,OAAO,EAAE,IAAI;YACb,iBAAiB,EAAE,YAAY,CAAC,MAAM;YACtC,MAAM;YACN,YAAY;SACb,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,qBAAqB,CACzC,MAAuB,EACvB,KAA0B;IAE1B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,MAAM,SAAS,GACb,KAAK,CAAC,SAAS;YACf,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAE9E,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;YACnC,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,SAAS;YACT,OAAO;YACP,UAAU,EAAE,CAAC,eAAe,EAAE,eAAe,CAAC;YAC9C,OAAO,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa,CAAC;YACrE,KAAK,EAAE,GAAG;SACX,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACnC,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,aAAa,IAAI,SAAS;YAClD,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,aAAa,IAAI,SAAS;YAClD,QAAQ,EAAE,GAAG,CAAC,OAAO,EAAE,QAAQ,IAAI,CAAC;YACpC,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,WAAW,IAAI,CAAC;YACpC,cAAc,EAAE,GAAG,CAAC,OAAO,EAAE,cAAc;gBACzC,CAAC,CAAC,GAAG,CAAE,GAAG,CAAC,OAAO,CAAC,cAAyB,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;gBACjE,CAAC,CAAC,KAAK;YACT,WAAW,EAAE,GAAG,CAAC,OAAO,EAAE,WAAW,IAAI,CAAC;SAC3C,CAAC,CAAC,CAAC;QAEJ,mBAAmB;QACnB,MAAM,QAAQ,GAA6E,EAAE,CAAC;QAC9F,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YACzB,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YAChE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBACvB,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;YAChE,CAAC;YACD,QAAQ,CAAC,OAAO,CAAC,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAkB,CAAC;YACxD,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,MAAM,CAAC,KAAe,CAAC;YAClD,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,IAAI,MAAM,CAAC,WAAqB,CAAC;QAChE,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,SAAS,CACnB;YACE,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,QAAQ;YACnB,QAAQ,EAAE,OAAO;SAClB,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,SAAS,iBAAiB,CAAC,MAAc,EAAE,MAAc;IACvD,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IACjC,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IAEjC,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;QACpF,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IACD,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QACrD,OAAO,aAAa,CAAC;IACvB,CAAC;IACD,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;QACvB,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;QACpB,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACxG,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC3C,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE;;;;;;;;;;;6EAW4D;QACzE,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,OAAO,EAAE;oBACP,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE;4BACJ,UAAU;4BACV,aAAa;4BACb,UAAU;4BACV,gBAAgB;4BAChB,YAAY;4BACZ,wBAAwB;4BACxB,iBAAiB;4BACjB,aAAa;4BACb,YAAY;yBACb;qBACF;oBACD,OAAO,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,CAAC;oBACpE,WAAW,EAAE,qBAAqB;iBACnC;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE;4BACJ,MAAM;4BACN,aAAa;4BACb,UAAU;4BACV,eAAe;4BACf,eAAe;4BACf,gBAAgB;4BAChB,SAAS;4BACT,MAAM;yBACP;qBACF;oBACD,WAAW,EAAE,wBAAwB;iBACtC;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,CAAC;oBACV,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,IAAI;oBACb,WAAW,EAAE,wBAAwB;iBACtC;aACF;YACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,SAAS,CAAC;SAC7C;KACF;IACD;QACE,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE;;;;iEAIgD;QAC7D,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,GAAG;oBACZ,OAAO,EAAE,EAAE;oBACX,WAAW,EAAE,mCAAmC;iBACjD;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,wBAAwB;QAC9B,WAAW,EAAE;;;;;;;;;;wDAUuC;QACpD,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,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"}