@frase/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 (115) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/README.md +262 -0
  3. package/dist/api-client.d.ts +93 -0
  4. package/dist/api-client.d.ts.map +1 -0
  5. package/dist/api-client.js +213 -0
  6. package/dist/api-client.js.map +1 -0
  7. package/dist/cache.d.ts +52 -0
  8. package/dist/cache.d.ts.map +1 -0
  9. package/dist/cache.js +97 -0
  10. package/dist/cache.js.map +1 -0
  11. package/dist/config.d.ts +17 -0
  12. package/dist/config.d.ts.map +1 -0
  13. package/dist/config.js +31 -0
  14. package/dist/config.js.map +1 -0
  15. package/dist/formatter.d.ts +47 -0
  16. package/dist/formatter.d.ts.map +1 -0
  17. package/dist/formatter.js +136 -0
  18. package/dist/formatter.js.map +1 -0
  19. package/dist/index.d.ts +32 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +292 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/prompts/competitor-analysis.d.ts +18 -0
  24. package/dist/prompts/competitor-analysis.d.ts.map +1 -0
  25. package/dist/prompts/competitor-analysis.js +71 -0
  26. package/dist/prompts/competitor-analysis.js.map +1 -0
  27. package/dist/prompts/content-audit.d.ts +18 -0
  28. package/dist/prompts/content-audit.d.ts.map +1 -0
  29. package/dist/prompts/content-audit.js +67 -0
  30. package/dist/prompts/content-audit.js.map +1 -0
  31. package/dist/prompts/create-seo-article.d.ts +19 -0
  32. package/dist/prompts/create-seo-article.d.ts.map +1 -0
  33. package/dist/prompts/create-seo-article.js +78 -0
  34. package/dist/prompts/create-seo-article.js.map +1 -0
  35. package/dist/prompts/index.d.ts +18 -0
  36. package/dist/prompts/index.d.ts.map +1 -0
  37. package/dist/prompts/index.js +52 -0
  38. package/dist/prompts/index.js.map +1 -0
  39. package/dist/prompts/keyword-research.d.ts +18 -0
  40. package/dist/prompts/keyword-research.d.ts.map +1 -0
  41. package/dist/prompts/keyword-research.js +72 -0
  42. package/dist/prompts/keyword-research.js.map +1 -0
  43. package/dist/prompts/optimize-content.d.ts +18 -0
  44. package/dist/prompts/optimize-content.d.ts.map +1 -0
  45. package/dist/prompts/optimize-content.js +59 -0
  46. package/dist/prompts/optimize-content.js.map +1 -0
  47. package/dist/resources/briefs.d.ts +26 -0
  48. package/dist/resources/briefs.d.ts.map +1 -0
  49. package/dist/resources/briefs.js +144 -0
  50. package/dist/resources/briefs.js.map +1 -0
  51. package/dist/resources/content.d.ts +26 -0
  52. package/dist/resources/content.d.ts.map +1 -0
  53. package/dist/resources/content.js +128 -0
  54. package/dist/resources/content.js.map +1 -0
  55. package/dist/resources/index.d.ts +32 -0
  56. package/dist/resources/index.d.ts.map +1 -0
  57. package/dist/resources/index.js +85 -0
  58. package/dist/resources/index.js.map +1 -0
  59. package/dist/resources/sites.d.ts +26 -0
  60. package/dist/resources/sites.d.ts.map +1 -0
  61. package/dist/resources/sites.js +108 -0
  62. package/dist/resources/sites.js.map +1 -0
  63. package/dist/tools/ai-visibility.d.ts +25 -0
  64. package/dist/tools/ai-visibility.d.ts.map +1 -0
  65. package/dist/tools/ai-visibility.js +537 -0
  66. package/dist/tools/ai-visibility.js.map +1 -0
  67. package/dist/tools/analytics.d.ts +17 -0
  68. package/dist/tools/analytics.d.ts.map +1 -0
  69. package/dist/tools/analytics.js +311 -0
  70. package/dist/tools/analytics.js.map +1 -0
  71. package/dist/tools/audits.d.ts +73 -0
  72. package/dist/tools/audits.d.ts.map +1 -0
  73. package/dist/tools/audits.js +345 -0
  74. package/dist/tools/audits.js.map +1 -0
  75. package/dist/tools/briefs.d.ts +63 -0
  76. package/dist/tools/briefs.d.ts.map +1 -0
  77. package/dist/tools/briefs.js +276 -0
  78. package/dist/tools/briefs.js.map +1 -0
  79. package/dist/tools/content.d.ts +51 -0
  80. package/dist/tools/content.d.ts.map +1 -0
  81. package/dist/tools/content.js +233 -0
  82. package/dist/tools/content.js.map +1 -0
  83. package/dist/tools/index.d.ts +29 -0
  84. package/dist/tools/index.d.ts.map +1 -0
  85. package/dist/tools/index.js +96 -0
  86. package/dist/tools/index.js.map +1 -0
  87. package/dist/tools/jobs.d.ts +22 -0
  88. package/dist/tools/jobs.d.ts.map +1 -0
  89. package/dist/tools/jobs.js +124 -0
  90. package/dist/tools/jobs.js.map +1 -0
  91. package/dist/tools/optimizations.d.ts +19 -0
  92. package/dist/tools/optimizations.d.ts.map +1 -0
  93. package/dist/tools/optimizations.js +339 -0
  94. package/dist/tools/optimizations.js.map +1 -0
  95. package/dist/tools/research.d.ts +41 -0
  96. package/dist/tools/research.d.ts.map +1 -0
  97. package/dist/tools/research.js +151 -0
  98. package/dist/tools/research.js.map +1 -0
  99. package/dist/tools/serp.d.ts +15 -0
  100. package/dist/tools/serp.d.ts.map +1 -0
  101. package/dist/tools/serp.js +267 -0
  102. package/dist/tools/serp.js.map +1 -0
  103. package/dist/tools/sites.d.ts +31 -0
  104. package/dist/tools/sites.d.ts.map +1 -0
  105. package/dist/tools/sites.js +83 -0
  106. package/dist/tools/sites.js.map +1 -0
  107. package/dist/tools/webhooks.d.ts +19 -0
  108. package/dist/tools/webhooks.d.ts.map +1 -0
  109. package/dist/tools/webhooks.js +350 -0
  110. package/dist/tools/webhooks.js.map +1 -0
  111. package/dist/types.d.ts +167 -0
  112. package/dist/types.d.ts.map +1 -0
  113. package/dist/types.js +5 -0
  114. package/dist/types.js.map +1 -0
  115. package/package.json +67 -0
@@ -0,0 +1,345 @@
1
+ /**
2
+ * Audit tools
3
+ */
4
+ import { z } from "zod";
5
+ import { CACHE_TTL } from "../cache.js";
6
+ import { formatTable, formatStatus, formatDate, formatPagination, formatKeyValue, truncate, } from "../formatter.js";
7
+ // ============================================
8
+ // list_audits
9
+ // ============================================
10
+ const listAuditsInputSchema = z.object({
11
+ page: z.number().min(1).optional().default(1),
12
+ page_size: z.number().min(1).max(100).optional().default(20),
13
+ status: z.enum(["pending", "crawling", "analyzing", "completed", "failed", "archived"]).optional(),
14
+ site_id: z.string().optional(),
15
+ });
16
+ export const listAuditsTool = {
17
+ name: "list_audits",
18
+ description: "List site audits in your account. Audits analyze your website for SEO issues, content quality, and technical problems.",
19
+ inputSchema: {
20
+ type: "object",
21
+ properties: {
22
+ page: {
23
+ type: "number",
24
+ description: "Page number (default: 1)",
25
+ },
26
+ page_size: {
27
+ type: "number",
28
+ description: "Items per page, max 100 (default: 20)",
29
+ },
30
+ status: {
31
+ type: "string",
32
+ enum: ["pending", "crawling", "analyzing", "completed", "failed", "archived"],
33
+ description: "Filter by audit status",
34
+ },
35
+ site_id: {
36
+ type: "string",
37
+ description: "Filter by site ID",
38
+ },
39
+ },
40
+ },
41
+ };
42
+ export async function executeListAudits(input, context) {
43
+ const parsed = listAuditsInputSchema.safeParse(input || {});
44
+ if (!parsed.success) {
45
+ return {
46
+ success: false,
47
+ markdown: `**Error:** Invalid input - ${parsed.error.message}`,
48
+ };
49
+ }
50
+ const { page, page_size, status, site_id } = parsed.data;
51
+ try {
52
+ const params = { page, page_size };
53
+ if (status)
54
+ params.status = status;
55
+ if (site_id)
56
+ params.site_id = site_id;
57
+ const response = await context.client.get("/audits", params, CACHE_TTL.lists);
58
+ const headers = ["Site", "Name", "Status", "Score", "Issues", "Created"];
59
+ const rows = response.data.map((audit) => [
60
+ audit.site?.domain || "-",
61
+ truncate(audit.name || "Audit", 30),
62
+ formatStatus(audit.status),
63
+ audit.overall_score !== null ? `${audit.overall_score}%` : "-",
64
+ audit.total_issues !== null ? audit.total_issues.toString() : "-",
65
+ formatDate(audit.created_at),
66
+ ]);
67
+ const table = formatTable(headers, rows);
68
+ const pagination = formatPagination(response.pagination);
69
+ return {
70
+ success: true,
71
+ markdown: `## Audits (Page ${page})\n\n${table}${pagination}`,
72
+ data: response,
73
+ };
74
+ }
75
+ catch (error) {
76
+ const message = error instanceof Error ? error.message : "Unknown error";
77
+ return {
78
+ success: false,
79
+ markdown: `**Error:** Failed to list audits - ${message}`,
80
+ };
81
+ }
82
+ }
83
+ // ============================================
84
+ // start_audit
85
+ // ============================================
86
+ const startAuditInputSchema = z.object({
87
+ site_id: z.string().min(1),
88
+ name: z.string().optional(),
89
+ type: z.enum(["full", "technical", "content", "quick"]).optional().default("full"),
90
+ max_pages: z.number().min(1).max(1000).optional().default(100),
91
+ });
92
+ export const startAuditTool = {
93
+ name: "start_audit",
94
+ description: "Start a new site audit. The audit will crawl your site and analyze it for SEO issues, content quality, and technical problems.",
95
+ inputSchema: {
96
+ type: "object",
97
+ properties: {
98
+ site_id: {
99
+ type: "string",
100
+ description: "The ID of the site to audit (required)",
101
+ },
102
+ name: {
103
+ type: "string",
104
+ description: "Optional name for the audit",
105
+ },
106
+ type: {
107
+ type: "string",
108
+ enum: ["full", "technical", "content", "quick"],
109
+ description: "Type of audit to run (default: full)",
110
+ },
111
+ max_pages: {
112
+ type: "number",
113
+ description: "Maximum pages to crawl, 1-1000 (default: 100)",
114
+ },
115
+ },
116
+ required: ["site_id"],
117
+ },
118
+ };
119
+ export async function executeStartAudit(input, context) {
120
+ const parsed = startAuditInputSchema.safeParse(input);
121
+ if (!parsed.success) {
122
+ return {
123
+ success: false,
124
+ markdown: `**Error:** Invalid input - ${parsed.error.message}`,
125
+ };
126
+ }
127
+ const { site_id, name, type, max_pages } = parsed.data;
128
+ try {
129
+ const response = await context.client.post("/audits", {
130
+ site_id,
131
+ name,
132
+ type,
133
+ max_pages,
134
+ });
135
+ const audit = response.data;
136
+ const details = formatKeyValue({
137
+ id: audit.id,
138
+ name: audit.name || "Audit",
139
+ type: audit.type,
140
+ status: audit.status,
141
+ site: audit.site?.domain,
142
+ });
143
+ return {
144
+ success: true,
145
+ markdown: `## Audit Started\n\n${details}\n\n**Note:** The audit is now crawling your site. Use \`get_job_status\` with id \`${audit.id}\` to check progress.`,
146
+ data: response,
147
+ };
148
+ }
149
+ catch (error) {
150
+ const message = error instanceof Error ? error.message : "Unknown error";
151
+ return {
152
+ success: false,
153
+ markdown: `**Error:** Failed to start audit - ${message}`,
154
+ };
155
+ }
156
+ }
157
+ // ============================================
158
+ // get_audit
159
+ // ============================================
160
+ const getAuditInputSchema = z.object({
161
+ id: z.string().min(1),
162
+ include_pages: z.boolean().optional().default(false),
163
+ });
164
+ export const getAuditTool = {
165
+ name: "get_audit",
166
+ description: "Get details of a specific audit, including summary statistics and optionally page-level data.",
167
+ inputSchema: {
168
+ type: "object",
169
+ properties: {
170
+ id: {
171
+ type: "string",
172
+ description: "The audit ID (required)",
173
+ },
174
+ include_pages: {
175
+ type: "boolean",
176
+ description: "Include page-level audit data (default: false)",
177
+ },
178
+ },
179
+ required: ["id"],
180
+ },
181
+ };
182
+ export async function executeGetAudit(input, context) {
183
+ const parsed = getAuditInputSchema.safeParse(input);
184
+ if (!parsed.success) {
185
+ return {
186
+ success: false,
187
+ markdown: `**Error:** Invalid input - ${parsed.error.message}`,
188
+ };
189
+ }
190
+ const { id, include_pages } = parsed.data;
191
+ try {
192
+ const params = {};
193
+ if (include_pages)
194
+ params.include_pages = true;
195
+ const response = await context.client.get(`/audits/${id}`, params, CACHE_TTL.resources);
196
+ const audit = response.data;
197
+ let markdown = `## Audit: ${audit.name || "Site Audit"}\n\n`;
198
+ markdown += formatKeyValue({
199
+ id: audit.id,
200
+ site: audit.site?.domain,
201
+ type: audit.type,
202
+ status: audit.status,
203
+ overall_score: audit.overall_score !== null ? `${audit.overall_score}%` : null,
204
+ pages_audited: audit.pages_audited,
205
+ total_issues: audit.total_issues,
206
+ critical_issues: audit.critical_issues,
207
+ created: formatDate(audit.created_at),
208
+ completed: audit.completed_at ? formatDate(audit.completed_at) : null,
209
+ });
210
+ if (audit.summary) {
211
+ markdown += "\n\n### Summary\n\n";
212
+ markdown += formatKeyValue({
213
+ total_pages: audit.summary.total_pages,
214
+ crawled_pages: audit.summary.crawled_pages,
215
+ avg_word_count: audit.summary.avg_word_count,
216
+ total_issues: audit.summary.total_issues,
217
+ critical_issues: audit.summary.critical_issues,
218
+ warning_issues: audit.summary.warning_issues,
219
+ });
220
+ }
221
+ if (audit.pages && audit.pages.length > 0) {
222
+ markdown += "\n\n### Pages\n\n";
223
+ const headers = ["URL", "Title", "Status", "Score"];
224
+ const rows = audit.pages.slice(0, 20).map((page) => [
225
+ truncate(page.url, 50),
226
+ truncate(page.title || "-", 30),
227
+ page.status_code?.toString() || "-",
228
+ page.score !== null ? `${page.score}%` : "-",
229
+ ]);
230
+ markdown += formatTable(headers, rows);
231
+ if (audit.pages.length > 20) {
232
+ markdown += `\n\n_Showing first 20 of ${audit.pages.length} pages. Use \`export_audit\` for full data._`;
233
+ }
234
+ }
235
+ return {
236
+ success: true,
237
+ markdown,
238
+ data: response,
239
+ };
240
+ }
241
+ catch (error) {
242
+ const message = error instanceof Error ? error.message : "Unknown error";
243
+ return {
244
+ success: false,
245
+ markdown: `**Error:** Failed to get audit - ${message}`,
246
+ };
247
+ }
248
+ }
249
+ // ============================================
250
+ // export_audit
251
+ // ============================================
252
+ const exportAuditInputSchema = z.object({
253
+ id: z.string().min(1),
254
+ format: z.enum(["json", "csv"]).optional().default("json"),
255
+ });
256
+ export const exportAuditTool = {
257
+ name: "export_audit",
258
+ description: "Export audit data. Returns detailed page-level data for analysis.",
259
+ inputSchema: {
260
+ type: "object",
261
+ properties: {
262
+ id: {
263
+ type: "string",
264
+ description: "The audit ID (required)",
265
+ },
266
+ format: {
267
+ type: "string",
268
+ enum: ["json", "csv"],
269
+ description: "Export format (default: json)",
270
+ },
271
+ },
272
+ required: ["id"],
273
+ },
274
+ };
275
+ export async function executeExportAudit(input, context) {
276
+ const parsed = exportAuditInputSchema.safeParse(input);
277
+ if (!parsed.success) {
278
+ return {
279
+ success: false,
280
+ markdown: `**Error:** Invalid input - ${parsed.error.message}`,
281
+ };
282
+ }
283
+ const { id, format } = parsed.data;
284
+ try {
285
+ const response = await context.client.get(`/audits/${id}/export`, { format }, 0 // No caching for exports
286
+ );
287
+ const audit = response.data;
288
+ let markdown = `## Audit Export\n\n`;
289
+ markdown += formatKeyValue({
290
+ id: audit.id,
291
+ site: audit.site_domain,
292
+ type: audit.type,
293
+ status: audit.status,
294
+ total_pages: audit.summary.total_pages,
295
+ total_issues: audit.summary.total_issues,
296
+ critical_issues: audit.summary.critical_issues,
297
+ });
298
+ markdown += `\n\n### Pages (${audit.pages.length} total)\n\n`;
299
+ if (audit.pages.length > 0) {
300
+ const headers = ["URL", "Title", "Status", "Words", "H1", "H2", "Issues"];
301
+ const rows = audit.pages.slice(0, 30).map((page) => [
302
+ truncate(page.url, 40),
303
+ truncate(page.title || "-", 25),
304
+ page.status_code?.toString() || "-",
305
+ page.word_count?.toString() || "-",
306
+ page.h1_count.toString(),
307
+ page.h2_count.toString(),
308
+ page.issues.length.toString(),
309
+ ]);
310
+ markdown += formatTable(headers, rows);
311
+ if (audit.pages.length > 30) {
312
+ markdown += `\n\n_Showing first 30 of ${audit.pages.length} pages._`;
313
+ }
314
+ }
315
+ markdown += `\n\n**Full data available in the \`data\` field of this response.**`;
316
+ return {
317
+ success: true,
318
+ markdown,
319
+ data: response,
320
+ };
321
+ }
322
+ catch (error) {
323
+ const message = error instanceof Error ? error.message : "Unknown error";
324
+ return {
325
+ success: false,
326
+ markdown: `**Error:** Failed to export audit - ${message}`,
327
+ };
328
+ }
329
+ }
330
+ // ============================================
331
+ // Export all
332
+ // ============================================
333
+ export const auditTools = [
334
+ listAuditsTool,
335
+ startAuditTool,
336
+ getAuditTool,
337
+ exportAuditTool,
338
+ ];
339
+ export const auditExecutors = {
340
+ list_audits: executeListAudits,
341
+ start_audit: executeStartAudit,
342
+ get_audit: executeGetAudit,
343
+ export_audit: executeExportAudit,
344
+ };
345
+ //# sourceMappingURL=audits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audits.js","sourceRoot":"","sources":["../../src/tools/audits.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Brief tools
3
+ */
4
+ import { z } from "zod";
5
+ import type { McpToolDefinition, ToolContext, ToolResult } from "../types.js";
6
+ declare const listBriefsInputSchema: z.ZodObject<{
7
+ page: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
8
+ page_size: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
9
+ status: z.ZodOptional<z.ZodEnum<["draft", "pending", "research", "ready", "generating", "completed"]>>;
10
+ }, "strip", z.ZodTypeAny, {
11
+ page: number;
12
+ page_size: number;
13
+ status?: "draft" | "generating" | "pending" | "research" | "ready" | "completed" | undefined;
14
+ }, {
15
+ page?: number | undefined;
16
+ page_size?: number | undefined;
17
+ status?: "draft" | "generating" | "pending" | "research" | "ready" | "completed" | undefined;
18
+ }>;
19
+ export type ListBriefsInput = z.infer<typeof listBriefsInputSchema>;
20
+ export declare const listBriefsTool: McpToolDefinition;
21
+ export declare function executeListBriefs(input: unknown, context: ToolContext): Promise<ToolResult>;
22
+ declare const createBriefInputSchema: z.ZodObject<{
23
+ topic: z.ZodString;
24
+ target_keywords: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
25
+ content_type: z.ZodDefault<z.ZodOptional<z.ZodEnum<["blog", "guide", "landing", "product", "comparison", "listicle"]>>>;
26
+ search_intent: z.ZodOptional<z.ZodString>;
27
+ target_word_count: z.ZodOptional<z.ZodNumber>;
28
+ generate_outline: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
29
+ competitor_urls: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
30
+ }, "strip", z.ZodTypeAny, {
31
+ topic: string;
32
+ content_type: "blog" | "guide" | "landing" | "product" | "comparison" | "listicle";
33
+ generate_outline: boolean;
34
+ target_keywords?: string[] | undefined;
35
+ search_intent?: string | undefined;
36
+ target_word_count?: number | undefined;
37
+ competitor_urls?: string[] | undefined;
38
+ }, {
39
+ topic: string;
40
+ target_keywords?: string[] | undefined;
41
+ content_type?: "blog" | "guide" | "landing" | "product" | "comparison" | "listicle" | undefined;
42
+ search_intent?: string | undefined;
43
+ target_word_count?: number | undefined;
44
+ generate_outline?: boolean | undefined;
45
+ competitor_urls?: string[] | undefined;
46
+ }>;
47
+ export type CreateBriefInput = z.infer<typeof createBriefInputSchema>;
48
+ export declare const createBriefTool: McpToolDefinition;
49
+ export declare function executeCreateBrief(input: unknown, context: ToolContext): Promise<ToolResult>;
50
+ declare const getBriefInputSchema: z.ZodObject<{
51
+ id: z.ZodString;
52
+ }, "strip", z.ZodTypeAny, {
53
+ id: string;
54
+ }, {
55
+ id: string;
56
+ }>;
57
+ export type GetBriefInput = z.infer<typeof getBriefInputSchema>;
58
+ export declare const getBriefTool: McpToolDefinition;
59
+ export declare function executeGetBrief(input: unknown, context: ToolContext): Promise<ToolResult>;
60
+ export declare const briefTools: McpToolDefinition[];
61
+ export declare const briefExecutors: Record<string, (input: unknown, context: ToolContext) => Promise<ToolResult>>;
62
+ export {};
63
+ //# sourceMappingURL=briefs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"briefs.d.ts","sourceRoot":"","sources":["../../src/tools/briefs.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAA+B,MAAM,aAAa,CAAC;AAe3G,QAAA,MAAM,qBAAqB;;;;;;;;;;;;EAMzB,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,eAAO,MAAM,cAAc,EAAE,iBAsB5B,CAAC;AAEF,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CA6CrB;AAMD,QAAA,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;EAW1B,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,eAAO,MAAM,eAAe,EAAE,iBAyC7B,CAAC;AAYF,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAkDrB;AAMD,QAAA,MAAM,mBAAmB;;;;;;EAEvB,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,eAAO,MAAM,YAAY,EAAE,iBAa1B,CAAC;AAUF,wBAAsB,eAAe,CACnC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CA0ErB;AAMD,eAAO,MAAM,UAAU,EAAE,iBAAiB,EAIzC,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,MAAM,CACjC,MAAM,EACN,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,CAK9D,CAAC"}