@disruptorganic/mcp-google-search-console 1.1.0 → 2.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.
Files changed (65) hide show
  1. package/.env.example +70 -112
  2. package/README.md +0 -0
  3. package/dist/auth/account-lock.d.ts +26 -0
  4. package/dist/auth/account-lock.d.ts.map +1 -0
  5. package/dist/auth/account-lock.js +72 -0
  6. package/dist/auth/account-lock.js.map +1 -0
  7. package/dist/auth/token-validator.d.ts +18 -0
  8. package/dist/auth/token-validator.d.ts.map +1 -0
  9. package/dist/auth/token-validator.js +175 -0
  10. package/dist/auth/token-validator.js.map +1 -0
  11. package/dist/config/index.d.ts +14 -27
  12. package/dist/config/index.d.ts.map +1 -1
  13. package/dist/config/index.js +86 -57
  14. package/dist/config/index.js.map +1 -1
  15. package/dist/index.js +119 -106
  16. package/dist/index.js.map +1 -1
  17. package/dist/server/http.d.ts +36 -0
  18. package/dist/server/http.d.ts.map +1 -0
  19. package/dist/server/http.js +394 -0
  20. package/dist/server/http.js.map +1 -0
  21. package/dist/tools/compare-date-ranges.d.ts +1 -1
  22. package/dist/tools/compare-date-ranges.d.ts.map +1 -1
  23. package/dist/tools/compare-date-ranges.js +14 -1
  24. package/dist/tools/compare-date-ranges.js.map +1 -1
  25. package/dist/tools/get-property-info.d.ts +1 -1
  26. package/dist/tools/get-property-info.d.ts.map +1 -1
  27. package/dist/tools/get-property-info.js +14 -1
  28. package/dist/tools/get-property-info.js.map +1 -1
  29. package/dist/tools/get-top-pages.d.ts +1 -1
  30. package/dist/tools/get-top-pages.d.ts.map +1 -1
  31. package/dist/tools/get-top-pages.js +14 -1
  32. package/dist/tools/get-top-pages.js.map +1 -1
  33. package/dist/tools/get-top-queries.d.ts +1 -1
  34. package/dist/tools/get-top-queries.d.ts.map +1 -1
  35. package/dist/tools/get-top-queries.js +14 -1
  36. package/dist/tools/get-top-queries.js.map +1 -1
  37. package/dist/tools/health-check.d.ts +1 -1
  38. package/dist/tools/health-check.d.ts.map +1 -1
  39. package/dist/tools/health-check.js +24 -19
  40. package/dist/tools/health-check.js.map +1 -1
  41. package/dist/tools/index.d.ts +2 -77
  42. package/dist/tools/index.d.ts.map +1 -1
  43. package/dist/tools/index.js +0 -10
  44. package/dist/tools/index.js.map +1 -1
  45. package/dist/tools/list-properties.d.ts +1 -1
  46. package/dist/tools/list-properties.d.ts.map +1 -1
  47. package/dist/tools/list-properties.js +14 -1
  48. package/dist/tools/list-properties.js.map +1 -1
  49. package/dist/tools/query-advanced.d.ts +1 -1
  50. package/dist/tools/query-advanced.d.ts.map +1 -1
  51. package/dist/tools/query-advanced.js +14 -1
  52. package/dist/tools/query-advanced.js.map +1 -1
  53. package/dist/tools/query-by-keyword.d.ts +1 -1
  54. package/dist/tools/query-by-keyword.d.ts.map +1 -1
  55. package/dist/tools/query-by-keyword.js +14 -1
  56. package/dist/tools/query-by-keyword.js.map +1 -1
  57. package/dist/tools/query-by-url.d.ts +1 -1
  58. package/dist/tools/query-by-url.d.ts.map +1 -1
  59. package/dist/tools/query-by-url.js +14 -1
  60. package/dist/tools/query-by-url.js.map +1 -1
  61. package/package.json +18 -7
  62. package/dist/tools/auth.d.ts +0 -95
  63. package/dist/tools/auth.d.ts.map +0 -1
  64. package/dist/tools/auth.js +0 -317
  65. package/dist/tools/auth.js.map +0 -1
@@ -1,82 +1,111 @@
1
- import { z } from 'zod';
2
1
  import * as path from 'path';
3
2
  import * as os from 'os';
4
- const EMBEDDED_CLIENT_ID = '34697290414-f3416jghvqmstm167lklfo1lbddnlsf4.apps.googleusercontent.com';
5
- const EMBEDDED_CLIENT_SECRET = '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';
6
- const configSchema = z.object({
7
- clientId: z.string().min(1, 'Client ID is required'),
8
- clientSecret: z.string().min(1, 'Client Secret is required'),
9
- tokenPath: z.string().default(path.join(os.homedir(), '.mcp-gsc', 'tokens.json')),
10
- redirectUri: z.string().default('urn:ietf:wg:oauth:2.0:oob'),
11
- logLevel: z.enum(['error', 'warn', 'info', 'debug']).default('info'),
12
- });
13
- function loadConfig() {
14
- const rawConfig = {
15
- clientId: EMBEDDED_CLIENT_ID,
16
- clientSecret: EMBEDDED_CLIENT_SECRET,
17
- tokenPath: process.env.GSC_TOKEN_PATH,
18
- redirectUri: process.env.GSC_REDIRECT_URI,
19
- logLevel: process.env.LOG_LEVEL,
20
- };
21
- try {
22
- return configSchema.parse(rawConfig);
3
+ import { logger } from '../utils/logger.js';
4
+ function validateRequiredEnvVars() {
5
+ const required = ['GOOGLE_CLIENT_ID', 'GOOGLE_CLIENT_SECRET'];
6
+ const missing = [];
7
+ for (const varName of required) {
8
+ if (!process.env[varName]) {
9
+ missing.push(varName);
10
+ }
23
11
  }
24
- catch (error) {
25
- if (error instanceof z.ZodError) {
26
- const missingFields = error.issues
27
- .map(issue => {
28
- const field = issue.path.join('.');
29
- return ` - ${field}: ${issue.message}`;
30
- })
31
- .join('\n');
32
- const errorMessage = `
33
- Configuration Error: Invalid configuration
12
+ if (missing.length > 0) {
13
+ const errorMessage = `
14
+ ╔════════════════════════════════════════════════════════════════╗
15
+ ║ CONFIGURATION ERROR: Missing Required Environment Variables ║
16
+ ╚════════════════════════════════════════════════════════════════╝
34
17
 
35
- ${missingFields}
18
+ The following required environment variables are not set:
19
+ ${missing.map(v => ` - ${v}`).join('\n')}
36
20
 
37
- OAuth2 credentials are pre-configured and embedded in this package.
38
- No setup required for authentication credentials.
21
+ To fix this:
39
22
 
40
- Optional environment variables (with defaults):
41
- - GSC_TOKEN_PATH: Token storage path (default: ~/.mcp-gsc/tokens.json)
42
- - GSC_REDIRECT_URI: OAuth redirect URI (default: urn:ietf:wg:oauth:2.0:oob)
43
- - LOG_LEVEL: Logging level (default: info, options: error, warn, info, debug)
23
+ 1. Create a .env file in the project root
24
+ 2. Copy .env.example to .env: cp .env.example .env
25
+ 3. Add your Google OAuth credentials:
26
+ - Get them from: https://console.cloud.google.com
27
+ - See docs/GOOGLE_OAUTH_SETUP.md for instructions
44
28
 
45
- See documentation for configuration details.
46
- `.trim();
47
- throw new Error(errorMessage);
48
- }
49
- throw error;
29
+ Example .env file:
30
+ GOOGLE_CLIENT_ID=123456789-abc...apps.googleusercontent.com
31
+ GOOGLE_CLIENT_SECRET=GOCSPX-abc...xyz
32
+
33
+ Then restart the server.
34
+ `.trim();
35
+ logger.error(errorMessage);
36
+ throw new Error('Missing required environment variables');
50
37
  }
51
38
  }
39
+ function loadConfig() {
40
+ validateRequiredEnvVars();
41
+ const nodeEnv = process.env.NODE_ENV || 'production';
42
+ return {
43
+ clientId: process.env.GOOGLE_CLIENT_ID,
44
+ clientSecret: process.env.GOOGLE_CLIENT_SECRET,
45
+ redirectUri: process.env.GOOGLE_REDIRECT_URI ||
46
+ 'http://localhost:3456/oauth/callback',
47
+ port: parseInt(process.env.MCP_PORT || '3456', 10),
48
+ host: process.env.MCP_HOST || 'localhost',
49
+ logLevel: process.env.LOG_LEVEL || 'info',
50
+ tokenPath: process.env.GSC_TOKEN_PATH ||
51
+ path.join(os.homedir(), '.config/gsc-mcp/tokens.json'),
52
+ rateLimitQPM: parseInt(process.env.GSC_RATE_LIMIT_QPM || '1200', 10),
53
+ tokenValidationCacheTTL: parseInt(process.env.TOKEN_VALIDATION_CACHE_TTL || '300', 10),
54
+ propertyCacheTTL: parseInt(process.env.PROPERTY_CACHE_TTL || '86400', 10),
55
+ nodeEnv,
56
+ isDevelopment: nodeEnv === 'development',
57
+ isProduction: nodeEnv === 'production',
58
+ };
59
+ }
52
60
  export const config = loadConfig();
61
+ export function getEnvironment() {
62
+ return config.nodeEnv;
63
+ }
53
64
  export function getTokenDirectory() {
54
65
  return path.dirname(config.tokenPath);
55
66
  }
56
67
  export function isDevelopment() {
57
- return process.env.NODE_ENV === 'development';
68
+ return config.isDevelopment;
58
69
  }
59
70
  export function isProduction() {
60
- return process.env.NODE_ENV === 'production';
71
+ return config.isProduction;
61
72
  }
62
- export function getEnvironment() {
63
- return process.env.NODE_ENV || 'development';
73
+ export function logConfiguration() {
74
+ logger.info('Configuration loaded', {
75
+ server: {
76
+ port: config.port,
77
+ host: config.host,
78
+ nodeEnv: config.nodeEnv,
79
+ },
80
+ oauth: {
81
+ clientId: config.clientId.substring(0, 20) + '...',
82
+ redirectUri: config.redirectUri,
83
+ },
84
+ caching: {
85
+ tokenValidationCacheTTL: config.tokenValidationCacheTTL,
86
+ propertyCacheTTL: config.propertyCacheTTL,
87
+ },
88
+ rateLimiting: {
89
+ qpm: config.rateLimitQPM,
90
+ },
91
+ logging: {
92
+ level: config.logLevel,
93
+ },
94
+ });
64
95
  }
65
96
  export function getConfigSummary() {
66
97
  return {
67
- clientId: config.clientId.substring(0, 8) + '...',
68
- clientSecret: '***',
69
- tokenPath: config.tokenPath,
98
+ clientId: config.clientId.substring(0, 20) + '...',
99
+ clientSecret: '***REDACTED***',
70
100
  redirectUri: config.redirectUri,
101
+ tokenPath: config.tokenPath,
102
+ port: config.port.toString(),
103
+ host: config.host,
71
104
  logLevel: config.logLevel,
72
- environment: getEnvironment(),
105
+ environment: config.nodeEnv,
106
+ rateLimitQPM: config.rateLimitQPM.toString(),
107
+ tokenValidationCacheTTL: config.tokenValidationCacheTTL.toString(),
108
+ propertyCacheTTL: config.propertyCacheTTL.toString(),
73
109
  };
74
110
  }
75
- export function logConfigSummary() {
76
- console.log('Configuration loaded successfully:');
77
- const summary = getConfigSummary();
78
- Object.entries(summary).forEach(([key, value]) => {
79
- console.log(` ${key}: ${value}`);
80
- });
81
- }
82
111
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,16 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  import { Server } from '@modelcontextprotocol/sdk/server/index.js';
3
- import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
4
3
  import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
5
- import { GSCAuth, AuthError } from './auth/oauth2.js';
4
+ import { OAuth2Client } from 'google-auth-library';
6
5
  import { GSCClient } from './gsc/client.js';
7
- import { allTools, toolHandlers, getToolStats, isAuthTool } from './tools/index.js';
6
+ import { allTools, toolHandlers, getToolStats } from './tools/index.js';
8
7
  import { logger } from './utils/logger.js';
9
- import { getEnvironment } from './config/index.js';
10
- const SERVER_VERSION = '1.0.0';
8
+ import { config, logConfiguration, getEnvironment } from './config/index.js';
9
+ import { createHttpServer } from './server/http.js';
10
+ const SERVER_VERSION = '2.0.0';
11
11
  const SERVER_NAME = 'google-search-console-mcp';
12
- let gscClient = null;
13
- let clientInitializationPromise = null;
12
+ let httpServer = null;
14
13
  const server = new Server({
15
14
  name: SERVER_NAME,
16
15
  version: SERVER_VERSION,
@@ -19,41 +18,17 @@ const server = new Server({
19
18
  tools: {},
20
19
  },
21
20
  });
22
- async function initializeClient() {
23
- if (gscClient) {
24
- logger.debug('Returning existing GSC client');
25
- return gscClient;
26
- }
27
- if (clientInitializationPromise) {
28
- logger.debug('Waiting for ongoing client initialization');
29
- return clientInitializationPromise;
30
- }
31
- logger.info('Initializing Google Search Console client...');
32
- clientInitializationPromise = (async () => {
33
- try {
34
- const authManager = new GSCAuth();
35
- const oauth2Client = await authManager.getAuthenticatedClient();
36
- logger.info('Using cached OAuth2 tokens (auto-refresh enabled)');
37
- gscClient = new GSCClient(oauth2Client);
38
- const isValid = await gscClient.validateConnection();
39
- if (!isValid) {
40
- throw new Error('Failed to validate GSC API connection');
41
- }
42
- logger.info('GSC client initialized and validated successfully');
43
- return gscClient;
44
- }
45
- catch (error) {
46
- clientInitializationPromise = null;
47
- logger.error('Failed to initialize GSC client', {
48
- error: error instanceof Error ? error.message : String(error),
49
- });
50
- if (error instanceof Error && error.message.includes('not authenticated')) {
51
- throw new Error('Authentication required. Please run authentication setup first. See docs/AUTHENTICATION_SETUP.md');
52
- }
53
- throw error;
54
- }
55
- })();
56
- return clientInitializationPromise;
21
+ function createGSCClientFromToken(accessToken) {
22
+ logger.debug('Creating ephemeral GSC client from access token', {
23
+ tokenPrefix: accessToken.substring(0, 8),
24
+ });
25
+ const oauth2Client = new OAuth2Client();
26
+ oauth2Client.setCredentials({
27
+ access_token: accessToken,
28
+ });
29
+ const client = new GSCClient(oauth2Client);
30
+ logger.debug('Ephemeral GSC client created successfully');
31
+ return client;
57
32
  }
58
33
  server.setRequestHandler(ListToolsRequestSchema, async () => {
59
34
  logger.debug('Listing available tools', { count: allTools.length });
@@ -83,61 +58,16 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
83
58
  isError: true,
84
59
  };
85
60
  }
86
- if (isAuthTool(name)) {
87
- logger.debug('Executing auth tool handler', { tool: name });
88
- const result = await handler(params || {}, null);
89
- logger.info('Auth tool executed successfully', {
90
- tool: name,
91
- hasError: result.isError || false,
92
- });
93
- return result;
94
- }
95
- let client;
96
- try {
97
- client = await initializeClient();
98
- }
99
- catch (error) {
100
- if (error instanceof AuthError || (error instanceof Error && error.message.includes('not authenticated'))) {
101
- logger.warn('Authentication required for data tool', { tool: name });
102
- return {
103
- content: [
104
- {
105
- type: 'text',
106
- text: `Authentication Required
107
-
108
- You need to authenticate with Google Search Console before using data tools.
109
-
110
- To authenticate, run:
111
- 1. auth_login - Get the authorization URL
112
- 2. Visit the URL in your browser and authorize access
113
- 3. auth_complete - Provide the authorization code from Google
114
-
115
- After authentication, you can use all data tools including:
116
- - list_properties
117
- - query_by_keyword
118
- - query_by_url
119
- - query_advanced
120
- - get_top_queries
121
- - get_top_pages
122
- - compare_date_ranges
123
- - get_property_info
124
-
125
- To check your authentication status at any time, run:
126
- - auth_status`,
127
- },
128
- ],
129
- isError: true,
130
- };
131
- }
132
- throw error;
133
- }
134
- logger.debug('Executing data tool handler', { tool: name });
135
- const result = await handler(params || {}, client);
136
- logger.info('Data tool executed successfully', {
137
- tool: name,
138
- hasError: result.isError || false,
139
- });
140
- return result;
61
+ logger.warn('Tool called without HTTP authentication context', { tool: name });
62
+ return {
63
+ content: [
64
+ {
65
+ type: 'text',
66
+ text: 'Authentication required. Please use the HTTP endpoint with proper OAuth 2.1 authentication.',
67
+ },
68
+ ],
69
+ isError: true,
70
+ };
141
71
  }
142
72
  catch (error) {
143
73
  const errorMessage = error instanceof Error ? error.message : String(error);
@@ -161,11 +91,10 @@ To check your authentication status at any time, run:
161
91
  async function shutdown(signal) {
162
92
  logger.info(`Received ${signal}, shutting down gracefully...`);
163
93
  try {
164
- if (gscClient) {
165
- const rateLimitStatus = gscClient.getRateLimitStatus();
166
- logger.info('Final rate limiter statistics', rateLimitStatus);
167
- const toolStats = getToolStats();
168
- logger.info('Tool statistics', toolStats);
94
+ const toolStats = getToolStats();
95
+ logger.info('Tool statistics', toolStats);
96
+ if (httpServer) {
97
+ await httpServer.stop();
169
98
  }
170
99
  await server.close();
171
100
  logger.info('Server shut down successfully');
@@ -187,10 +116,12 @@ async function main() {
187
116
  platform: process.platform,
188
117
  environment: getEnvironment(),
189
118
  });
119
+ logConfiguration();
190
120
  const toolStats = getToolStats();
191
121
  logger.info('Server configuration', {
192
122
  totalTools: toolStats.total,
193
123
  tools: toolStats.names,
124
+ authMode: 'OAuth 2.1 (Google token passthrough with account locking)',
194
125
  });
195
126
  logger.debug('Tool details', {
196
127
  tools: toolStats.tools.map((t) => ({
@@ -215,11 +146,93 @@ async function main() {
215
146
  });
216
147
  shutdown('unhandledRejection');
217
148
  });
218
- const transport = new StdioServerTransport();
219
- await server.connect(transport);
220
- logger.info('MCP Server started successfully and listening on stdio');
149
+ httpServer = createHttpServer(server, { port: config.port });
150
+ httpServer.setToolCallHandler(async (name, args, userEmail, accessToken) => {
151
+ logger.info('Tool called via HTTP', {
152
+ tool: name,
153
+ hasParams: !!args,
154
+ paramKeys: args ? Object.keys(args) : [],
155
+ user: userEmail,
156
+ hasAccessToken: !!accessToken,
157
+ });
158
+ try {
159
+ const handler = toolHandlers[name];
160
+ if (!handler) {
161
+ const availableTools = Object.keys(toolHandlers).join(', ');
162
+ logger.error('Tool not found', { tool: name, availableTools });
163
+ return {
164
+ content: [
165
+ {
166
+ type: 'text',
167
+ text: `Unknown tool: ${name}\n\nAvailable tools: ${availableTools}`,
168
+ },
169
+ ],
170
+ isError: true,
171
+ };
172
+ }
173
+ let client = null;
174
+ if (name !== 'health_check') {
175
+ if (!accessToken) {
176
+ logger.error('Access token missing for data tool', { tool: name });
177
+ return {
178
+ content: [
179
+ {
180
+ type: 'text',
181
+ text: 'Authentication required. Access token not provided.',
182
+ },
183
+ ],
184
+ isError: true,
185
+ };
186
+ }
187
+ client = createGSCClientFromToken(accessToken);
188
+ logger.debug('Ephemeral GSC client created for tool execution', {
189
+ tool: name,
190
+ user: userEmail,
191
+ });
192
+ }
193
+ logger.debug('Executing tool handler', { tool: name, user: userEmail });
194
+ const result = await handler(args || {}, client);
195
+ logger.info('Tool executed successfully', {
196
+ tool: name,
197
+ hasError: result.isError || false,
198
+ user: userEmail,
199
+ });
200
+ return result;
201
+ }
202
+ catch (error) {
203
+ const errorMessage = error instanceof Error ? error.message : String(error);
204
+ const errorStack = error instanceof Error ? error.stack : undefined;
205
+ logger.error('Tool execution failed', {
206
+ tool: name,
207
+ error: errorMessage,
208
+ stack: errorStack,
209
+ user: userEmail,
210
+ });
211
+ return {
212
+ content: [
213
+ {
214
+ type: 'text',
215
+ text: `Error executing ${name}: ${errorMessage}`,
216
+ },
217
+ ],
218
+ isError: true,
219
+ };
220
+ }
221
+ });
222
+ await httpServer.start();
223
+ logger.info('MCP Server started successfully', {
224
+ transport: 'HTTP',
225
+ url: `http://localhost:${config.port}`,
226
+ endpoints: [
227
+ '/.well-known/oauth-protected-resource',
228
+ '/health',
229
+ '/auth/status',
230
+ '/mcp',
231
+ ],
232
+ authMode: 'OAuth 2.1 (Google token passthrough)',
233
+ });
221
234
  logger.info(`Available tools: ${toolStats.names.join(', ')}`);
222
- logger.info('Client will be initialized on first tool call (lazy initialization)');
235
+ logger.info('Authentication: Google OAuth 2.1 via Claude Code (single-user account locking)');
223
236
  }
224
237
  catch (error) {
225
238
  logger.error('Failed to start server', {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import express from 'express';
2
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
3
+ declare global {
4
+ namespace Express {
5
+ interface Request {
6
+ user?: {
7
+ email: string;
8
+ userId: string;
9
+ accessToken: string;
10
+ scope?: string;
11
+ };
12
+ }
13
+ }
14
+ }
15
+ export interface HttpServerConfig {
16
+ port: number;
17
+ host?: string;
18
+ }
19
+ export type ToolCallHandler = (name: string, args: any, userEmail?: string, accessToken?: string) => Promise<any>;
20
+ export declare class HttpServer {
21
+ private app;
22
+ private server;
23
+ private config;
24
+ private toolCallHandler;
25
+ constructor(_mcpServer: Server, config: HttpServerConfig);
26
+ setToolCallHandler(handler: ToolCallHandler): void;
27
+ private setupRoutes;
28
+ private handleToolsList;
29
+ private handleToolsCall;
30
+ private handleInitialize;
31
+ start(): Promise<void>;
32
+ stop(): Promise<void>;
33
+ getApp(): express.Application;
34
+ }
35
+ export declare function createHttpServer(mcpServer: Server, config: HttpServerConfig): HttpServer;
36
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/server/http.ts"],"names":[],"mappings":"AAqDA,OAAO,OAA4C,MAAM,SAAS,CAAC;AAEnE,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAQnE,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,OAAO,CAAC;QAChB,UAAU,OAAO;YACf,IAAI,CAAC,EAAE;gBACL,KAAK,EAAE,MAAM,CAAC;gBACd,MAAM,EAAE,MAAM,CAAC;gBACf,WAAW,EAAE,MAAM,CAAC;gBACpB,KAAK,CAAC,EAAE,MAAM,CAAC;aAChB,CAAC;SACH;KACF;CACF;AAwCD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAqQD,MAAM,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;AAKlH,qBAAa,UAAU;IACrB,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,eAAe,CAAgC;gBAE3C,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB;IAYxD,kBAAkB,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAOlD,OAAO,CAAC,WAAW;YA+JL,eAAe;YAmBf,eAAe;YA8Bf,gBAAgB;IAkBxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAwCtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA4B3B,MAAM,IAAI,OAAO,CAAC,WAAW;CAG9B;AAKD,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,UAAU,CAExF"}