@jaypie/mcp 0.7.10 → 0.7.11

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.
@@ -138,10 +138,20 @@ export interface AwsProfile {
138
138
  region?: string;
139
139
  sso_start_url?: string;
140
140
  }
141
+ export interface AwsValidationResult {
142
+ success: boolean;
143
+ cliAvailable: boolean;
144
+ cliVersion?: string;
145
+ profiles: AwsProfile[];
146
+ }
141
147
  /**
142
148
  * Execute an AWS CLI command and return parsed JSON output
143
149
  */
144
150
  export declare function executeAwsCommand<T>(service: string, command: string, args: string[], options?: AwsCommandOptions, logger?: Logger): Promise<AwsCommandResult<T>>;
151
+ /**
152
+ * Validate AWS setup without making API calls
153
+ */
154
+ export declare function validateAwsSetup(): Promise<AwsValidationResult>;
145
155
  /**
146
156
  * List available AWS profiles from ~/.aws/config and ~/.aws/credentials
147
157
  */
@@ -133,6 +133,47 @@ async function executeAwsCommand(service, command, args, options = {}, logger =
133
133
  });
134
134
  });
135
135
  }
136
+ /**
137
+ * Check if AWS CLI is available and get its version
138
+ */
139
+ async function checkAwsCliVersion() {
140
+ return new Promise((resolve) => {
141
+ const proc = spawn("aws", ["--version"]);
142
+ let stdout = "";
143
+ proc.stdout.on("data", (data) => {
144
+ stdout += data.toString();
145
+ });
146
+ proc.on("close", (code) => {
147
+ if (code === 0) {
148
+ // Output is like "aws-cli/2.15.0 Python/3.11.6 Darwin/23.2.0 source/arm64"
149
+ const match = stdout.match(/aws-cli\/([\d.]+)/);
150
+ resolve({
151
+ available: true,
152
+ version: match ? match[1] : stdout.trim(),
153
+ });
154
+ }
155
+ else {
156
+ resolve({ available: false });
157
+ }
158
+ });
159
+ proc.on("error", () => {
160
+ resolve({ available: false });
161
+ });
162
+ });
163
+ }
164
+ /**
165
+ * Validate AWS setup without making API calls
166
+ */
167
+ async function validateAwsSetup() {
168
+ const cliCheck = await checkAwsCliVersion();
169
+ const profilesResult = await listAwsProfiles();
170
+ return {
171
+ cliAvailable: cliCheck.available,
172
+ cliVersion: cliCheck.version,
173
+ profiles: profilesResult.success ? (profilesResult.data ?? []) : [],
174
+ success: cliCheck.available,
175
+ };
176
+ }
136
177
  /**
137
178
  * List available AWS profiles from ~/.aws/config and ~/.aws/credentials
138
179
  */
@@ -324,5 +365,5 @@ async function purgeSQSQueue(options, logger = nullLogger) {
324
365
  return executeAwsCommand("sqs", "purge-queue", ["--queue-url", options.queueUrl], { profile: options.profile, region: options.region }, logger);
325
366
  }
326
367
 
327
- export { describeDynamoDBTable, describeStack, executeAwsCommand, filterLogEvents, getDynamoDBItem, getLambdaFunction, getSQSQueueAttributes, listAwsProfiles, listLambdaFunctions, listS3Objects, listSQSQueues, listStepFunctionExecutions, purgeSQSQueue, queryDynamoDB, receiveSQSMessage, scanDynamoDB, stopStepFunctionExecution };
368
+ export { describeDynamoDBTable, describeStack, executeAwsCommand, filterLogEvents, getDynamoDBItem, getLambdaFunction, getSQSQueueAttributes, listAwsProfiles, listLambdaFunctions, listS3Objects, listSQSQueues, listStepFunctionExecutions, purgeSQSQueue, queryDynamoDB, receiveSQSMessage, scanDynamoDB, stopStepFunctionExecution, validateAwsSetup };
328
369
  //# sourceMappingURL=aws.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"aws.js","sources":["../../../src/suites/aws/aws.ts"],"sourcesContent":["/**\n * AWS CLI integration module\n * Provides a structured interface for common AWS operations via the AWS CLI\n */\nimport { spawn } from \"node:child_process\";\nimport * as fs from \"node:fs/promises\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\n\n// Logger interface matching the pattern from datadog.ts\ninterface Logger {\n info: (message: string, ...args: unknown[]) => void;\n error: (message: string, ...args: unknown[]) => void;\n}\n\nconst nullLogger: Logger = {\n info: () => {},\n error: () => {},\n};\n\n// Common AWS command options\nexport interface AwsCommandOptions {\n profile?: string;\n region?: string;\n}\n\n// Generic result type for AWS commands\nexport interface AwsCommandResult<T> {\n success: boolean;\n data?: T;\n error?: string;\n}\n\n// Step Functions types\nexport interface StepFunctionExecution {\n executionArn: string;\n stateMachineArn: string;\n name: string;\n status: string;\n startDate: string;\n stopDate?: string;\n}\n\nexport interface StepFunctionsListExecutionsOptions extends AwsCommandOptions {\n stateMachineArn: string;\n statusFilter?:\n | \"RUNNING\"\n | \"SUCCEEDED\"\n | \"FAILED\"\n | \"TIMED_OUT\"\n | \"ABORTED\"\n | \"PENDING_REDRIVE\";\n maxResults?: number;\n}\n\nexport interface StepFunctionsStopExecutionOptions extends AwsCommandOptions {\n executionArn: string;\n cause?: string;\n}\n\n// Lambda types\nexport interface LambdaFunction {\n FunctionName: string;\n FunctionArn: string;\n Runtime?: string;\n Handler?: string;\n CodeSize: number;\n Description?: string;\n Timeout?: number;\n MemorySize?: number;\n LastModified: string;\n Version?: string;\n}\n\nexport interface LambdaListFunctionsOptions extends AwsCommandOptions {\n functionNamePrefix?: string;\n maxResults?: number;\n}\n\nexport interface LambdaGetFunctionOptions extends AwsCommandOptions {\n functionName: string;\n}\n\n// CloudWatch Logs types\nexport interface LogEvent {\n timestamp: number;\n message: string;\n ingestionTime?: number;\n logStreamName?: string;\n}\n\nexport interface CloudWatchLogsFilterOptions extends AwsCommandOptions {\n logGroupName: string;\n filterPattern?: string;\n startTime?: string;\n endTime?: string;\n limit?: number;\n}\n\n// S3 types\nexport interface S3Object {\n Key: string;\n LastModified: string;\n ETag: string;\n Size: number;\n StorageClass: string;\n}\n\nexport interface S3ListObjectsOptions extends AwsCommandOptions {\n bucket: string;\n prefix?: string;\n maxResults?: number;\n}\n\n// CloudFormation types\nexport interface CloudFormationStack {\n StackName: string;\n StackId: string;\n StackStatus: string;\n StackStatusReason?: string;\n CreationTime: string;\n LastUpdatedTime?: string;\n Description?: string;\n Outputs?: Array<{\n OutputKey: string;\n OutputValue: string;\n Description?: string;\n }>;\n Parameters?: Array<{\n ParameterKey: string;\n ParameterValue: string;\n }>;\n}\n\nexport interface CloudFormationDescribeStackOptions extends AwsCommandOptions {\n stackName: string;\n}\n\n// DynamoDB types\nexport interface DynamoDBDescribeTableOptions extends AwsCommandOptions {\n tableName: string;\n}\n\nexport interface DynamoDBScanOptions extends AwsCommandOptions {\n tableName: string;\n filterExpression?: string;\n expressionAttributeValues?: string;\n limit?: number;\n}\n\nexport interface DynamoDBQueryOptions extends AwsCommandOptions {\n tableName: string;\n keyConditionExpression: string;\n expressionAttributeValues: string;\n indexName?: string;\n filterExpression?: string;\n limit?: number;\n scanIndexForward?: boolean;\n}\n\nexport interface DynamoDBGetItemOptions extends AwsCommandOptions {\n tableName: string;\n key: string;\n}\n\n// SQS types\nexport interface SQSQueue {\n QueueUrl: string;\n}\n\nexport interface SQSListQueuesOptions extends AwsCommandOptions {\n queueNamePrefix?: string;\n}\n\nexport interface SQSGetQueueAttributesOptions extends AwsCommandOptions {\n queueUrl: string;\n}\n\nexport interface SQSReceiveMessageOptions extends AwsCommandOptions {\n queueUrl: string;\n maxNumberOfMessages?: number;\n visibilityTimeout?: number;\n}\n\nexport interface SQSPurgeQueueOptions extends AwsCommandOptions {\n queueUrl: string;\n}\n\n// AWS Profile\nexport interface AwsProfile {\n name: string;\n source: \"config\" | \"credentials\";\n region?: string;\n sso_start_url?: string;\n}\n\n/**\n * Parse AWS CLI error messages into user-friendly descriptions\n */\nfunction parseAwsError(\n stderr: string,\n service: string,\n command: string,\n): string {\n if (stderr.includes(\"ExpiredToken\") || stderr.includes(\"Token has expired\")) {\n return \"AWS credentials have expired. Run 'aws sso login' or refresh your credentials.\";\n }\n if (\n stderr.includes(\"NoCredentialProviders\") ||\n stderr.includes(\"Unable to locate credentials\")\n ) {\n return \"No AWS credentials found. Configure credentials with 'aws configure' or 'aws sso login'.\";\n }\n if (stderr.includes(\"AccessDenied\") || stderr.includes(\"Access Denied\")) {\n return `Access denied for ${service}:${command}. Check your IAM permissions.`;\n }\n if (stderr.includes(\"ResourceNotFoundException\")) {\n return `Resource not found. Check that the specified resource exists in the correct region.`;\n }\n if (stderr.includes(\"ValidationException\")) {\n const match = stderr.match(/ValidationException[^:]*:\\s*(.+)/);\n return match\n ? `Validation error: ${match[1].trim()}`\n : \"Validation error in request parameters.\";\n }\n if (\n stderr.includes(\"ThrottlingException\") ||\n stderr.includes(\"Rate exceeded\")\n ) {\n return \"AWS API rate limit exceeded. Wait a moment and try again.\";\n }\n if (stderr.includes(\"InvalidParameterValue\")) {\n const match = stderr.match(/InvalidParameterValue[^:]*:\\s*(.+)/);\n return match\n ? `Invalid parameter: ${match[1].trim()}`\n : \"Invalid parameter value provided.\";\n }\n return stderr.trim();\n}\n\n/**\n * Parse relative time strings like 'now-1h' to Unix timestamps\n */\nfunction parseRelativeTime(timeStr: string): number {\n const now = Date.now();\n\n if (timeStr === \"now\") {\n return now;\n }\n\n // Handle relative time like 'now-15m', 'now-1h', 'now-1d'\n const relativeMatch = timeStr.match(/^now-(\\d+)([smhd])$/);\n if (relativeMatch) {\n const value = parseInt(relativeMatch[1], 10);\n const unit = relativeMatch[2];\n const multipliers: Record<string, number> = {\n s: 1000,\n m: 60 * 1000,\n h: 60 * 60 * 1000,\n d: 24 * 60 * 60 * 1000,\n };\n return now - value * multipliers[unit];\n }\n\n // Handle ISO 8601 format\n const parsed = Date.parse(timeStr);\n if (!isNaN(parsed)) {\n return parsed;\n }\n\n // Default to the current time if parsing fails\n return now;\n}\n\n/**\n * Execute an AWS CLI command and return parsed JSON output\n */\nexport async function executeAwsCommand<T>(\n service: string,\n command: string,\n args: string[],\n options: AwsCommandOptions = {},\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<T>> {\n const fullArgs = [service, command, ...args, \"--output\", \"json\"];\n\n if (options.profile) {\n fullArgs.push(\"--profile\", options.profile);\n }\n if (options.region) {\n fullArgs.push(\"--region\", options.region);\n }\n\n logger.info(`Executing: aws ${fullArgs.join(\" \")}`);\n\n return new Promise((resolve) => {\n const proc = spawn(\"aws\", fullArgs);\n let stdout = \"\";\n let stderr = \"\";\n\n proc.stdout.on(\"data\", (data) => {\n stdout += data.toString();\n });\n proc.stderr.on(\"data\", (data) => {\n stderr += data.toString();\n });\n\n proc.on(\"close\", (code) => {\n if (code !== 0) {\n logger.error(`AWS CLI error: ${stderr}`);\n resolve({\n success: false,\n error: parseAwsError(stderr, service, command),\n });\n return;\n }\n\n // Handle empty output (some commands return nothing on success)\n if (!stdout.trim()) {\n resolve({ success: true });\n return;\n }\n\n try {\n const data = JSON.parse(stdout) as T;\n resolve({ success: true, data });\n } catch {\n // Some commands return plain text\n resolve({ success: true, data: stdout.trim() as unknown as T });\n }\n });\n\n proc.on(\"error\", (error) => {\n if (error.message.includes(\"ENOENT\")) {\n resolve({\n success: false,\n error:\n \"AWS CLI not found. Install it from https://aws.amazon.com/cli/\",\n });\n } else {\n resolve({ success: false, error: error.message });\n }\n });\n });\n}\n\n/**\n * List available AWS profiles from ~/.aws/config and ~/.aws/credentials\n */\nexport async function listAwsProfiles(\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<AwsProfile[]>> {\n const profiles: AwsProfile[] = [];\n const homeDir = os.homedir();\n\n try {\n // Parse ~/.aws/config\n const configPath = path.join(homeDir, \".aws\", \"config\");\n try {\n const configContent = await fs.readFile(configPath, \"utf-8\");\n const profileRegex = /\\[profile\\s+([^\\]]+)\\]|\\[default\\]/g;\n let match;\n while ((match = profileRegex.exec(configContent)) !== null) {\n const name = match[1] || \"default\";\n profiles.push({\n name,\n source: \"config\",\n });\n }\n logger.info(`Found ${profiles.length} profiles in config`);\n } catch {\n logger.info(\"No ~/.aws/config file found\");\n }\n\n // Parse ~/.aws/credentials\n const credentialsPath = path.join(homeDir, \".aws\", \"credentials\");\n try {\n const credentialsContent = await fs.readFile(credentialsPath, \"utf-8\");\n const profileRegex = /\\[([^\\]]+)\\]/g;\n let match;\n while ((match = profileRegex.exec(credentialsContent)) !== null) {\n const name = match[1];\n // Only add if not already in the list\n if (!profiles.find((p) => p.name === name)) {\n profiles.push({\n name,\n source: \"credentials\",\n });\n }\n }\n logger.info(`Total profiles after credentials: ${profiles.length}`);\n } catch {\n logger.info(\"No ~/.aws/credentials file found\");\n }\n\n return { success: true, data: profiles };\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : \"Unknown error\";\n logger.error(`Error listing profiles: ${errorMessage}`);\n return { success: false, error: errorMessage };\n }\n}\n\n// Step Functions operations\nexport async function listStepFunctionExecutions(\n options: StepFunctionsListExecutionsOptions,\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<{ executions: StepFunctionExecution[] }>> {\n const args = [\"--state-machine-arn\", options.stateMachineArn];\n if (options.statusFilter) {\n args.push(\"--status-filter\", options.statusFilter);\n }\n if (options.maxResults) {\n args.push(\"--max-results\", String(options.maxResults));\n }\n\n return executeAwsCommand(\n \"stepfunctions\",\n \"list-executions\",\n args,\n { profile: options.profile, region: options.region },\n logger,\n );\n}\n\nexport async function stopStepFunctionExecution(\n options: StepFunctionsStopExecutionOptions,\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<{ stopDate: string }>> {\n const args = [\"--execution-arn\", options.executionArn];\n if (options.cause) {\n args.push(\"--cause\", options.cause);\n }\n\n return executeAwsCommand(\n \"stepfunctions\",\n \"stop-execution\",\n args,\n { profile: options.profile, region: options.region },\n logger,\n );\n}\n\n// Lambda operations\nexport async function listLambdaFunctions(\n options: LambdaListFunctionsOptions = {},\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<{ Functions: LambdaFunction[] }>> {\n const args: string[] = [];\n if (options.maxResults) {\n args.push(\"--max-items\", String(options.maxResults));\n }\n\n const result = await executeAwsCommand<{ Functions: LambdaFunction[] }>(\n \"lambda\",\n \"list-functions\",\n args,\n { profile: options.profile, region: options.region },\n logger,\n );\n\n // Filter by prefix if specified\n if (result.success && result.data && options.functionNamePrefix) {\n result.data.Functions = result.data.Functions.filter((f) =>\n f.FunctionName.startsWith(options.functionNamePrefix!),\n );\n }\n\n return result;\n}\n\nexport async function getLambdaFunction(\n options: LambdaGetFunctionOptions,\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<{ Configuration: LambdaFunction }>> {\n return executeAwsCommand(\n \"lambda\",\n \"get-function\",\n [\"--function-name\", options.functionName],\n { profile: options.profile, region: options.region },\n logger,\n );\n}\n\n// CloudWatch Logs operations\nexport async function filterLogEvents(\n options: CloudWatchLogsFilterOptions,\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<{ events: LogEvent[] }>> {\n const args = [\"--log-group-name\", options.logGroupName];\n\n if (options.filterPattern) {\n args.push(\"--filter-pattern\", options.filterPattern);\n }\n if (options.startTime) {\n const startMs = parseRelativeTime(options.startTime);\n args.push(\"--start-time\", String(startMs));\n }\n if (options.endTime) {\n const endMs = parseRelativeTime(options.endTime);\n args.push(\"--end-time\", String(endMs));\n }\n if (options.limit) {\n args.push(\"--limit\", String(options.limit));\n }\n\n return executeAwsCommand(\n \"logs\",\n \"filter-log-events\",\n args,\n { profile: options.profile, region: options.region },\n logger,\n );\n}\n\n// S3 operations\nexport async function listS3Objects(\n options: S3ListObjectsOptions,\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<{ Contents: S3Object[] }>> {\n const args = [\"--bucket\", options.bucket];\n if (options.prefix) {\n args.push(\"--prefix\", options.prefix);\n }\n if (options.maxResults) {\n args.push(\"--max-items\", String(options.maxResults));\n }\n\n return executeAwsCommand(\n \"s3api\",\n \"list-objects-v2\",\n args,\n { profile: options.profile, region: options.region },\n logger,\n );\n}\n\n// CloudFormation operations\nexport async function describeStack(\n options: CloudFormationDescribeStackOptions,\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<{ Stacks: CloudFormationStack[] }>> {\n return executeAwsCommand(\n \"cloudformation\",\n \"describe-stacks\",\n [\"--stack-name\", options.stackName],\n { profile: options.profile, region: options.region },\n logger,\n );\n}\n\n// DynamoDB operations\nexport async function describeDynamoDBTable(\n options: DynamoDBDescribeTableOptions,\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<{ Table: Record<string, unknown> }>> {\n return executeAwsCommand(\n \"dynamodb\",\n \"describe-table\",\n [\"--table-name\", options.tableName],\n { profile: options.profile, region: options.region },\n logger,\n );\n}\n\nexport async function scanDynamoDB(\n options: DynamoDBScanOptions,\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<{ Items: Record<string, unknown>[] }>> {\n const args = [\"--table-name\", options.tableName];\n if (options.filterExpression) {\n args.push(\"--filter-expression\", options.filterExpression);\n }\n if (options.expressionAttributeValues) {\n args.push(\n \"--expression-attribute-values\",\n options.expressionAttributeValues,\n );\n }\n if (options.limit) {\n args.push(\"--limit\", String(options.limit));\n }\n\n return executeAwsCommand(\n \"dynamodb\",\n \"scan\",\n args,\n { profile: options.profile, region: options.region },\n logger,\n );\n}\n\nexport async function queryDynamoDB(\n options: DynamoDBQueryOptions,\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<{ Items: Record<string, unknown>[] }>> {\n const args = [\n \"--table-name\",\n options.tableName,\n \"--key-condition-expression\",\n options.keyConditionExpression,\n \"--expression-attribute-values\",\n options.expressionAttributeValues,\n ];\n if (options.indexName) {\n args.push(\"--index-name\", options.indexName);\n }\n if (options.filterExpression) {\n args.push(\"--filter-expression\", options.filterExpression);\n }\n if (options.limit) {\n args.push(\"--limit\", String(options.limit));\n }\n if (options.scanIndexForward === false) {\n args.push(\"--no-scan-index-forward\");\n }\n\n return executeAwsCommand(\n \"dynamodb\",\n \"query\",\n args,\n { profile: options.profile, region: options.region },\n logger,\n );\n}\n\nexport async function getDynamoDBItem(\n options: DynamoDBGetItemOptions,\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<{ Item: Record<string, unknown> }>> {\n return executeAwsCommand(\n \"dynamodb\",\n \"get-item\",\n [\"--table-name\", options.tableName, \"--key\", options.key],\n { profile: options.profile, region: options.region },\n logger,\n );\n}\n\n// SQS operations\nexport async function listSQSQueues(\n options: SQSListQueuesOptions = {},\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<{ QueueUrls: string[] }>> {\n const args: string[] = [];\n if (options.queueNamePrefix) {\n args.push(\"--queue-name-prefix\", options.queueNamePrefix);\n }\n\n return executeAwsCommand(\n \"sqs\",\n \"list-queues\",\n args,\n { profile: options.profile, region: options.region },\n logger,\n );\n}\n\nexport async function getSQSQueueAttributes(\n options: SQSGetQueueAttributesOptions,\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<{ Attributes: Record<string, string> }>> {\n return executeAwsCommand(\n \"sqs\",\n \"get-queue-attributes\",\n [\"--queue-url\", options.queueUrl, \"--attribute-names\", \"All\"],\n { profile: options.profile, region: options.region },\n logger,\n );\n}\n\nexport async function receiveSQSMessage(\n options: SQSReceiveMessageOptions,\n logger: Logger = nullLogger,\n): Promise<\n AwsCommandResult<{\n Messages: Array<{\n MessageId: string;\n ReceiptHandle: string;\n Body: string;\n Attributes?: Record<string, string>;\n }>;\n }>\n> {\n const args = [\"--queue-url\", options.queueUrl];\n if (options.maxNumberOfMessages) {\n args.push(\"--max-number-of-messages\", String(options.maxNumberOfMessages));\n }\n if (options.visibilityTimeout) {\n args.push(\"--visibility-timeout\", String(options.visibilityTimeout));\n }\n args.push(\"--attribute-names\", \"All\");\n\n return executeAwsCommand(\n \"sqs\",\n \"receive-message\",\n args,\n { profile: options.profile, region: options.region },\n logger,\n );\n}\n\nexport async function purgeSQSQueue(\n options: SQSPurgeQueueOptions,\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<void>> {\n return executeAwsCommand(\n \"sqs\",\n \"purge-queue\",\n [\"--queue-url\", options.queueUrl],\n { profile: options.profile, region: options.region },\n logger,\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"aws.js","sources":["../../../src/suites/aws/aws.ts"],"sourcesContent":["/**\n * AWS CLI integration module\n * Provides a structured interface for common AWS operations via the AWS CLI\n */\nimport { spawn } from \"node:child_process\";\nimport * as fs from \"node:fs/promises\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\n\n// Logger interface matching the pattern from datadog.ts\ninterface Logger {\n info: (message: string, ...args: unknown[]) => void;\n error: (message: string, ...args: unknown[]) => void;\n}\n\nconst nullLogger: Logger = {\n info: () => {},\n error: () => {},\n};\n\n// Common AWS command options\nexport interface AwsCommandOptions {\n profile?: string;\n region?: string;\n}\n\n// Generic result type for AWS commands\nexport interface AwsCommandResult<T> {\n success: boolean;\n data?: T;\n error?: string;\n}\n\n// Step Functions types\nexport interface StepFunctionExecution {\n executionArn: string;\n stateMachineArn: string;\n name: string;\n status: string;\n startDate: string;\n stopDate?: string;\n}\n\nexport interface StepFunctionsListExecutionsOptions extends AwsCommandOptions {\n stateMachineArn: string;\n statusFilter?:\n | \"RUNNING\"\n | \"SUCCEEDED\"\n | \"FAILED\"\n | \"TIMED_OUT\"\n | \"ABORTED\"\n | \"PENDING_REDRIVE\";\n maxResults?: number;\n}\n\nexport interface StepFunctionsStopExecutionOptions extends AwsCommandOptions {\n executionArn: string;\n cause?: string;\n}\n\n// Lambda types\nexport interface LambdaFunction {\n FunctionName: string;\n FunctionArn: string;\n Runtime?: string;\n Handler?: string;\n CodeSize: number;\n Description?: string;\n Timeout?: number;\n MemorySize?: number;\n LastModified: string;\n Version?: string;\n}\n\nexport interface LambdaListFunctionsOptions extends AwsCommandOptions {\n functionNamePrefix?: string;\n maxResults?: number;\n}\n\nexport interface LambdaGetFunctionOptions extends AwsCommandOptions {\n functionName: string;\n}\n\n// CloudWatch Logs types\nexport interface LogEvent {\n timestamp: number;\n message: string;\n ingestionTime?: number;\n logStreamName?: string;\n}\n\nexport interface CloudWatchLogsFilterOptions extends AwsCommandOptions {\n logGroupName: string;\n filterPattern?: string;\n startTime?: string;\n endTime?: string;\n limit?: number;\n}\n\n// S3 types\nexport interface S3Object {\n Key: string;\n LastModified: string;\n ETag: string;\n Size: number;\n StorageClass: string;\n}\n\nexport interface S3ListObjectsOptions extends AwsCommandOptions {\n bucket: string;\n prefix?: string;\n maxResults?: number;\n}\n\n// CloudFormation types\nexport interface CloudFormationStack {\n StackName: string;\n StackId: string;\n StackStatus: string;\n StackStatusReason?: string;\n CreationTime: string;\n LastUpdatedTime?: string;\n Description?: string;\n Outputs?: Array<{\n OutputKey: string;\n OutputValue: string;\n Description?: string;\n }>;\n Parameters?: Array<{\n ParameterKey: string;\n ParameterValue: string;\n }>;\n}\n\nexport interface CloudFormationDescribeStackOptions extends AwsCommandOptions {\n stackName: string;\n}\n\n// DynamoDB types\nexport interface DynamoDBDescribeTableOptions extends AwsCommandOptions {\n tableName: string;\n}\n\nexport interface DynamoDBScanOptions extends AwsCommandOptions {\n tableName: string;\n filterExpression?: string;\n expressionAttributeValues?: string;\n limit?: number;\n}\n\nexport interface DynamoDBQueryOptions extends AwsCommandOptions {\n tableName: string;\n keyConditionExpression: string;\n expressionAttributeValues: string;\n indexName?: string;\n filterExpression?: string;\n limit?: number;\n scanIndexForward?: boolean;\n}\n\nexport interface DynamoDBGetItemOptions extends AwsCommandOptions {\n tableName: string;\n key: string;\n}\n\n// SQS types\nexport interface SQSQueue {\n QueueUrl: string;\n}\n\nexport interface SQSListQueuesOptions extends AwsCommandOptions {\n queueNamePrefix?: string;\n}\n\nexport interface SQSGetQueueAttributesOptions extends AwsCommandOptions {\n queueUrl: string;\n}\n\nexport interface SQSReceiveMessageOptions extends AwsCommandOptions {\n queueUrl: string;\n maxNumberOfMessages?: number;\n visibilityTimeout?: number;\n}\n\nexport interface SQSPurgeQueueOptions extends AwsCommandOptions {\n queueUrl: string;\n}\n\n// AWS Profile\nexport interface AwsProfile {\n name: string;\n source: \"config\" | \"credentials\";\n region?: string;\n sso_start_url?: string;\n}\n\n// Validation types\nexport interface AwsValidationResult {\n success: boolean;\n cliAvailable: boolean;\n cliVersion?: string;\n profiles: AwsProfile[];\n}\n\n/**\n * Parse AWS CLI error messages into user-friendly descriptions\n */\nfunction parseAwsError(\n stderr: string,\n service: string,\n command: string,\n): string {\n if (stderr.includes(\"ExpiredToken\") || stderr.includes(\"Token has expired\")) {\n return \"AWS credentials have expired. Run 'aws sso login' or refresh your credentials.\";\n }\n if (\n stderr.includes(\"NoCredentialProviders\") ||\n stderr.includes(\"Unable to locate credentials\")\n ) {\n return \"No AWS credentials found. Configure credentials with 'aws configure' or 'aws sso login'.\";\n }\n if (stderr.includes(\"AccessDenied\") || stderr.includes(\"Access Denied\")) {\n return `Access denied for ${service}:${command}. Check your IAM permissions.`;\n }\n if (stderr.includes(\"ResourceNotFoundException\")) {\n return `Resource not found. Check that the specified resource exists in the correct region.`;\n }\n if (stderr.includes(\"ValidationException\")) {\n const match = stderr.match(/ValidationException[^:]*:\\s*(.+)/);\n return match\n ? `Validation error: ${match[1].trim()}`\n : \"Validation error in request parameters.\";\n }\n if (\n stderr.includes(\"ThrottlingException\") ||\n stderr.includes(\"Rate exceeded\")\n ) {\n return \"AWS API rate limit exceeded. Wait a moment and try again.\";\n }\n if (stderr.includes(\"InvalidParameterValue\")) {\n const match = stderr.match(/InvalidParameterValue[^:]*:\\s*(.+)/);\n return match\n ? `Invalid parameter: ${match[1].trim()}`\n : \"Invalid parameter value provided.\";\n }\n return stderr.trim();\n}\n\n/**\n * Parse relative time strings like 'now-1h' to Unix timestamps\n */\nfunction parseRelativeTime(timeStr: string): number {\n const now = Date.now();\n\n if (timeStr === \"now\") {\n return now;\n }\n\n // Handle relative time like 'now-15m', 'now-1h', 'now-1d'\n const relativeMatch = timeStr.match(/^now-(\\d+)([smhd])$/);\n if (relativeMatch) {\n const value = parseInt(relativeMatch[1], 10);\n const unit = relativeMatch[2];\n const multipliers: Record<string, number> = {\n s: 1000,\n m: 60 * 1000,\n h: 60 * 60 * 1000,\n d: 24 * 60 * 60 * 1000,\n };\n return now - value * multipliers[unit];\n }\n\n // Handle ISO 8601 format\n const parsed = Date.parse(timeStr);\n if (!isNaN(parsed)) {\n return parsed;\n }\n\n // Default to the current time if parsing fails\n return now;\n}\n\n/**\n * Execute an AWS CLI command and return parsed JSON output\n */\nexport async function executeAwsCommand<T>(\n service: string,\n command: string,\n args: string[],\n options: AwsCommandOptions = {},\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<T>> {\n const fullArgs = [service, command, ...args, \"--output\", \"json\"];\n\n if (options.profile) {\n fullArgs.push(\"--profile\", options.profile);\n }\n if (options.region) {\n fullArgs.push(\"--region\", options.region);\n }\n\n logger.info(`Executing: aws ${fullArgs.join(\" \")}`);\n\n return new Promise((resolve) => {\n const proc = spawn(\"aws\", fullArgs);\n let stdout = \"\";\n let stderr = \"\";\n\n proc.stdout.on(\"data\", (data) => {\n stdout += data.toString();\n });\n proc.stderr.on(\"data\", (data) => {\n stderr += data.toString();\n });\n\n proc.on(\"close\", (code) => {\n if (code !== 0) {\n logger.error(`AWS CLI error: ${stderr}`);\n resolve({\n success: false,\n error: parseAwsError(stderr, service, command),\n });\n return;\n }\n\n // Handle empty output (some commands return nothing on success)\n if (!stdout.trim()) {\n resolve({ success: true });\n return;\n }\n\n try {\n const data = JSON.parse(stdout) as T;\n resolve({ success: true, data });\n } catch {\n // Some commands return plain text\n resolve({ success: true, data: stdout.trim() as unknown as T });\n }\n });\n\n proc.on(\"error\", (error) => {\n if (error.message.includes(\"ENOENT\")) {\n resolve({\n success: false,\n error:\n \"AWS CLI not found. Install it from https://aws.amazon.com/cli/\",\n });\n } else {\n resolve({ success: false, error: error.message });\n }\n });\n });\n}\n\n/**\n * Check if AWS CLI is available and get its version\n */\nasync function checkAwsCliVersion(): Promise<{\n available: boolean;\n version?: string;\n}> {\n return new Promise((resolve) => {\n const proc = spawn(\"aws\", [\"--version\"]);\n let stdout = \"\";\n\n proc.stdout.on(\"data\", (data) => {\n stdout += data.toString();\n });\n\n proc.on(\"close\", (code) => {\n if (code === 0) {\n // Output is like \"aws-cli/2.15.0 Python/3.11.6 Darwin/23.2.0 source/arm64\"\n const match = stdout.match(/aws-cli\\/([\\d.]+)/);\n resolve({\n available: true,\n version: match ? match[1] : stdout.trim(),\n });\n } else {\n resolve({ available: false });\n }\n });\n\n proc.on(\"error\", () => {\n resolve({ available: false });\n });\n });\n}\n\n/**\n * Validate AWS setup without making API calls\n */\nexport async function validateAwsSetup(): Promise<AwsValidationResult> {\n const cliCheck = await checkAwsCliVersion();\n const profilesResult = await listAwsProfiles();\n\n return {\n cliAvailable: cliCheck.available,\n cliVersion: cliCheck.version,\n profiles: profilesResult.success ? (profilesResult.data ?? []) : [],\n success: cliCheck.available,\n };\n}\n\n/**\n * List available AWS profiles from ~/.aws/config and ~/.aws/credentials\n */\nexport async function listAwsProfiles(\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<AwsProfile[]>> {\n const profiles: AwsProfile[] = [];\n const homeDir = os.homedir();\n\n try {\n // Parse ~/.aws/config\n const configPath = path.join(homeDir, \".aws\", \"config\");\n try {\n const configContent = await fs.readFile(configPath, \"utf-8\");\n const profileRegex = /\\[profile\\s+([^\\]]+)\\]|\\[default\\]/g;\n let match;\n while ((match = profileRegex.exec(configContent)) !== null) {\n const name = match[1] || \"default\";\n profiles.push({\n name,\n source: \"config\",\n });\n }\n logger.info(`Found ${profiles.length} profiles in config`);\n } catch {\n logger.info(\"No ~/.aws/config file found\");\n }\n\n // Parse ~/.aws/credentials\n const credentialsPath = path.join(homeDir, \".aws\", \"credentials\");\n try {\n const credentialsContent = await fs.readFile(credentialsPath, \"utf-8\");\n const profileRegex = /\\[([^\\]]+)\\]/g;\n let match;\n while ((match = profileRegex.exec(credentialsContent)) !== null) {\n const name = match[1];\n // Only add if not already in the list\n if (!profiles.find((p) => p.name === name)) {\n profiles.push({\n name,\n source: \"credentials\",\n });\n }\n }\n logger.info(`Total profiles after credentials: ${profiles.length}`);\n } catch {\n logger.info(\"No ~/.aws/credentials file found\");\n }\n\n return { success: true, data: profiles };\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : \"Unknown error\";\n logger.error(`Error listing profiles: ${errorMessage}`);\n return { success: false, error: errorMessage };\n }\n}\n\n// Step Functions operations\nexport async function listStepFunctionExecutions(\n options: StepFunctionsListExecutionsOptions,\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<{ executions: StepFunctionExecution[] }>> {\n const args = [\"--state-machine-arn\", options.stateMachineArn];\n if (options.statusFilter) {\n args.push(\"--status-filter\", options.statusFilter);\n }\n if (options.maxResults) {\n args.push(\"--max-results\", String(options.maxResults));\n }\n\n return executeAwsCommand(\n \"stepfunctions\",\n \"list-executions\",\n args,\n { profile: options.profile, region: options.region },\n logger,\n );\n}\n\nexport async function stopStepFunctionExecution(\n options: StepFunctionsStopExecutionOptions,\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<{ stopDate: string }>> {\n const args = [\"--execution-arn\", options.executionArn];\n if (options.cause) {\n args.push(\"--cause\", options.cause);\n }\n\n return executeAwsCommand(\n \"stepfunctions\",\n \"stop-execution\",\n args,\n { profile: options.profile, region: options.region },\n logger,\n );\n}\n\n// Lambda operations\nexport async function listLambdaFunctions(\n options: LambdaListFunctionsOptions = {},\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<{ Functions: LambdaFunction[] }>> {\n const args: string[] = [];\n if (options.maxResults) {\n args.push(\"--max-items\", String(options.maxResults));\n }\n\n const result = await executeAwsCommand<{ Functions: LambdaFunction[] }>(\n \"lambda\",\n \"list-functions\",\n args,\n { profile: options.profile, region: options.region },\n logger,\n );\n\n // Filter by prefix if specified\n if (result.success && result.data && options.functionNamePrefix) {\n result.data.Functions = result.data.Functions.filter((f) =>\n f.FunctionName.startsWith(options.functionNamePrefix!),\n );\n }\n\n return result;\n}\n\nexport async function getLambdaFunction(\n options: LambdaGetFunctionOptions,\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<{ Configuration: LambdaFunction }>> {\n return executeAwsCommand(\n \"lambda\",\n \"get-function\",\n [\"--function-name\", options.functionName],\n { profile: options.profile, region: options.region },\n logger,\n );\n}\n\n// CloudWatch Logs operations\nexport async function filterLogEvents(\n options: CloudWatchLogsFilterOptions,\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<{ events: LogEvent[] }>> {\n const args = [\"--log-group-name\", options.logGroupName];\n\n if (options.filterPattern) {\n args.push(\"--filter-pattern\", options.filterPattern);\n }\n if (options.startTime) {\n const startMs = parseRelativeTime(options.startTime);\n args.push(\"--start-time\", String(startMs));\n }\n if (options.endTime) {\n const endMs = parseRelativeTime(options.endTime);\n args.push(\"--end-time\", String(endMs));\n }\n if (options.limit) {\n args.push(\"--limit\", String(options.limit));\n }\n\n return executeAwsCommand(\n \"logs\",\n \"filter-log-events\",\n args,\n { profile: options.profile, region: options.region },\n logger,\n );\n}\n\n// S3 operations\nexport async function listS3Objects(\n options: S3ListObjectsOptions,\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<{ Contents: S3Object[] }>> {\n const args = [\"--bucket\", options.bucket];\n if (options.prefix) {\n args.push(\"--prefix\", options.prefix);\n }\n if (options.maxResults) {\n args.push(\"--max-items\", String(options.maxResults));\n }\n\n return executeAwsCommand(\n \"s3api\",\n \"list-objects-v2\",\n args,\n { profile: options.profile, region: options.region },\n logger,\n );\n}\n\n// CloudFormation operations\nexport async function describeStack(\n options: CloudFormationDescribeStackOptions,\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<{ Stacks: CloudFormationStack[] }>> {\n return executeAwsCommand(\n \"cloudformation\",\n \"describe-stacks\",\n [\"--stack-name\", options.stackName],\n { profile: options.profile, region: options.region },\n logger,\n );\n}\n\n// DynamoDB operations\nexport async function describeDynamoDBTable(\n options: DynamoDBDescribeTableOptions,\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<{ Table: Record<string, unknown> }>> {\n return executeAwsCommand(\n \"dynamodb\",\n \"describe-table\",\n [\"--table-name\", options.tableName],\n { profile: options.profile, region: options.region },\n logger,\n );\n}\n\nexport async function scanDynamoDB(\n options: DynamoDBScanOptions,\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<{ Items: Record<string, unknown>[] }>> {\n const args = [\"--table-name\", options.tableName];\n if (options.filterExpression) {\n args.push(\"--filter-expression\", options.filterExpression);\n }\n if (options.expressionAttributeValues) {\n args.push(\n \"--expression-attribute-values\",\n options.expressionAttributeValues,\n );\n }\n if (options.limit) {\n args.push(\"--limit\", String(options.limit));\n }\n\n return executeAwsCommand(\n \"dynamodb\",\n \"scan\",\n args,\n { profile: options.profile, region: options.region },\n logger,\n );\n}\n\nexport async function queryDynamoDB(\n options: DynamoDBQueryOptions,\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<{ Items: Record<string, unknown>[] }>> {\n const args = [\n \"--table-name\",\n options.tableName,\n \"--key-condition-expression\",\n options.keyConditionExpression,\n \"--expression-attribute-values\",\n options.expressionAttributeValues,\n ];\n if (options.indexName) {\n args.push(\"--index-name\", options.indexName);\n }\n if (options.filterExpression) {\n args.push(\"--filter-expression\", options.filterExpression);\n }\n if (options.limit) {\n args.push(\"--limit\", String(options.limit));\n }\n if (options.scanIndexForward === false) {\n args.push(\"--no-scan-index-forward\");\n }\n\n return executeAwsCommand(\n \"dynamodb\",\n \"query\",\n args,\n { profile: options.profile, region: options.region },\n logger,\n );\n}\n\nexport async function getDynamoDBItem(\n options: DynamoDBGetItemOptions,\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<{ Item: Record<string, unknown> }>> {\n return executeAwsCommand(\n \"dynamodb\",\n \"get-item\",\n [\"--table-name\", options.tableName, \"--key\", options.key],\n { profile: options.profile, region: options.region },\n logger,\n );\n}\n\n// SQS operations\nexport async function listSQSQueues(\n options: SQSListQueuesOptions = {},\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<{ QueueUrls: string[] }>> {\n const args: string[] = [];\n if (options.queueNamePrefix) {\n args.push(\"--queue-name-prefix\", options.queueNamePrefix);\n }\n\n return executeAwsCommand(\n \"sqs\",\n \"list-queues\",\n args,\n { profile: options.profile, region: options.region },\n logger,\n );\n}\n\nexport async function getSQSQueueAttributes(\n options: SQSGetQueueAttributesOptions,\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<{ Attributes: Record<string, string> }>> {\n return executeAwsCommand(\n \"sqs\",\n \"get-queue-attributes\",\n [\"--queue-url\", options.queueUrl, \"--attribute-names\", \"All\"],\n { profile: options.profile, region: options.region },\n logger,\n );\n}\n\nexport async function receiveSQSMessage(\n options: SQSReceiveMessageOptions,\n logger: Logger = nullLogger,\n): Promise<\n AwsCommandResult<{\n Messages: Array<{\n MessageId: string;\n ReceiptHandle: string;\n Body: string;\n Attributes?: Record<string, string>;\n }>;\n }>\n> {\n const args = [\"--queue-url\", options.queueUrl];\n if (options.maxNumberOfMessages) {\n args.push(\"--max-number-of-messages\", String(options.maxNumberOfMessages));\n }\n if (options.visibilityTimeout) {\n args.push(\"--visibility-timeout\", String(options.visibilityTimeout));\n }\n args.push(\"--attribute-names\", \"All\");\n\n return executeAwsCommand(\n \"sqs\",\n \"receive-message\",\n args,\n { profile: options.profile, region: options.region },\n logger,\n );\n}\n\nexport async function purgeSQSQueue(\n options: SQSPurgeQueueOptions,\n logger: Logger = nullLogger,\n): Promise<AwsCommandResult<void>> {\n return executeAwsCommand(\n \"sqs\",\n \"purge-queue\",\n [\"--queue-url\", options.queueUrl],\n { profile: options.profile, region: options.region },\n logger,\n );\n}\n"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ Access AWS services through the AWS CLI. Requires AWS CLI installed and configur
6
6
 
7
7
  | Command | Description | Required Parameters |
8
8
  |---------|-------------|---------------------|
9
+ | `validate` | Validate AWS setup (CLI availability, profiles) | - |
9
10
  | `list_profiles` | List AWS profiles | - |
10
11
  | `lambda_list_functions` | List Lambda functions | - |
11
12
  | `lambda_get_function` | Get function details | `functionName` |
@@ -1,4 +1,4 @@
1
- export declare const awsService: import("@jaypie/fabric").Service<Record<string, unknown>, string | import("./aws.js").AwsProfile[] | {
1
+ export declare const awsService: import("@jaypie/fabric").Service<Record<string, unknown>, string | import("./aws.js").AwsValidationResult | import("./aws.js").AwsProfile[] | {
2
2
  executions: import("./aws.js").StepFunctionExecution[];
3
3
  } | {
4
4
  stopDate: string;
@@ -31,7 +31,7 @@ export declare const awsService: import("@jaypie/fabric").Service<Record<string,
31
31
  }>;
32
32
  } | {
33
33
  success: boolean;
34
- } | undefined, string | import("./aws.js").AwsProfile[] | {
34
+ } | undefined, string | import("./aws.js").AwsValidationResult | import("./aws.js").AwsProfile[] | {
35
35
  executions: import("./aws.js").StepFunctionExecution[];
36
36
  } | {
37
37
  stopDate: string;
@@ -2,7 +2,7 @@ import { fabricService } from '@jaypie/fabric';
2
2
  import * as fs from 'node:fs/promises';
3
3
  import * as path from 'node:path';
4
4
  import { fileURLToPath } from 'node:url';
5
- import { purgeSQSQueue, receiveSQSMessage, getSQSQueueAttributes, listSQSQueues, getDynamoDBItem, queryDynamoDB, scanDynamoDB, describeDynamoDBTable, describeStack, listS3Objects, filterLogEvents, stopStepFunctionExecution, listStepFunctionExecutions, getLambdaFunction, listLambdaFunctions, listAwsProfiles } from './aws.js';
5
+ import { purgeSQSQueue, receiveSQSMessage, getSQSQueueAttributes, listSQSQueues, getDynamoDBItem, queryDynamoDB, scanDynamoDB, describeDynamoDBTable, describeStack, listS3Objects, filterLogEvents, stopStepFunctionExecution, listStepFunctionExecutions, getLambdaFunction, listLambdaFunctions, listAwsProfiles, validateAwsSetup } from './aws.js';
6
6
  export { executeAwsCommand } from './aws.js';
7
7
 
8
8
  /**
@@ -174,6 +174,9 @@ const awsService = fabricService({
174
174
  }
175
175
  const p = params;
176
176
  switch (command) {
177
+ case "validate": {
178
+ return validateAwsSetup();
179
+ }
177
180
  case "list_profiles": {
178
181
  const result = await listAwsProfiles(log);
179
182
  if (!result.success)
@@ -390,5 +393,5 @@ const awsService = fabricService({
390
393
  },
391
394
  });
392
395
 
393
- export { awsService, describeDynamoDBTable, describeStack, filterLogEvents, getDynamoDBItem, getLambdaFunction, getSQSQueueAttributes, listAwsProfiles, listLambdaFunctions, listS3Objects, listSQSQueues, listStepFunctionExecutions, purgeSQSQueue, queryDynamoDB, receiveSQSMessage, scanDynamoDB, stopStepFunctionExecution };
396
+ export { awsService, describeDynamoDBTable, describeStack, filterLogEvents, getDynamoDBItem, getLambdaFunction, getSQSQueueAttributes, listAwsProfiles, listLambdaFunctions, listS3Objects, listSQSQueues, listStepFunctionExecutions, purgeSQSQueue, queryDynamoDB, receiveSQSMessage, scanDynamoDB, stopStepFunctionExecution, validateAwsSetup };
394
397
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/suites/aws/index.ts"],"sourcesContent":["/**\n * AWS Suite - Unified AWS CLI access\n */\nimport { fabricService } from \"@jaypie/fabric\";\nimport * as fs from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nimport {\n describeDynamoDBTable,\n describeStack,\n filterLogEvents,\n getDynamoDBItem,\n getLambdaFunction,\n getSQSQueueAttributes,\n listAwsProfiles,\n listLambdaFunctions,\n listS3Objects,\n listSQSQueues,\n listStepFunctionExecutions,\n purgeSQSQueue,\n queryDynamoDB,\n receiveSQSMessage,\n scanDynamoDB,\n stopStepFunctionExecution,\n} from \"./aws.js\";\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\n// Silent logger for direct execution\nconst log = {\n error: () => {},\n info: () => {},\n};\n\nasync function getHelp(): Promise<string> {\n return fs.readFile(path.join(__dirname, \"help.md\"), \"utf-8\");\n}\n\n// Flattened input type for the unified AWS service\ninterface AwsInput {\n bucket?: string;\n cause?: string;\n command?: string;\n endTime?: string;\n executionArn?: string;\n expressionAttributeValues?: string;\n filterExpression?: string;\n filterPattern?: string;\n functionName?: string;\n functionNamePrefix?: string;\n indexName?: string;\n key?: string;\n keyConditionExpression?: string;\n limit?: number;\n logGroupName?: string;\n maxNumberOfMessages?: number;\n maxResults?: number;\n prefix?: string;\n profile?: string;\n queueNamePrefix?: string;\n queueUrl?: string;\n region?: string;\n scanIndexForward?: boolean;\n stackName?: string;\n startTime?: string;\n stateMachineArn?: string;\n statusFilter?: string;\n tableName?: string;\n visibilityTimeout?: number;\n}\n\nexport const awsService = fabricService({\n alias: \"aws\",\n description:\n \"Access AWS services via CLI. Commands: list_profiles, lambda_*, stepfunctions_*, logs_*, s3_*, cloudformation_*, dynamodb_*, sqs_*. Call with no args for help.\",\n input: {\n bucket: {\n description: \"S3 bucket name\",\n required: false,\n type: String,\n },\n cause: {\n description: \"Cause for stopping Step Functions execution\",\n required: false,\n type: String,\n },\n command: {\n description: \"Command to execute (omit for help)\",\n required: false,\n type: String,\n },\n endTime: {\n description: \"End time for log filtering (e.g., now)\",\n required: false,\n type: String,\n },\n executionArn: {\n description: \"Step Functions execution ARN\",\n required: false,\n type: String,\n },\n expressionAttributeValues: {\n description: \"DynamoDB expression attribute values (JSON string)\",\n required: false,\n type: String,\n },\n filterExpression: {\n description: \"DynamoDB filter expression\",\n required: false,\n type: String,\n },\n filterPattern: {\n description: \"CloudWatch Logs filter pattern\",\n required: false,\n type: String,\n },\n functionName: {\n description: \"Lambda function name\",\n required: false,\n type: String,\n },\n functionNamePrefix: {\n description: \"Lambda function name prefix filter\",\n required: false,\n type: String,\n },\n indexName: {\n description: \"DynamoDB index name\",\n required: false,\n type: String,\n },\n key: {\n description: \"DynamoDB item key (JSON string)\",\n required: false,\n type: String,\n },\n keyConditionExpression: {\n description: \"DynamoDB key condition expression\",\n required: false,\n type: String,\n },\n limit: {\n description: \"Maximum number of results\",\n required: false,\n type: Number,\n },\n logGroupName: {\n description: \"CloudWatch Logs group name\",\n required: false,\n type: String,\n },\n maxNumberOfMessages: {\n description: \"SQS max messages to receive\",\n required: false,\n type: Number,\n },\n maxResults: {\n description: \"Maximum number of results\",\n required: false,\n type: Number,\n },\n prefix: {\n description: \"S3 object prefix filter\",\n required: false,\n type: String,\n },\n profile: {\n description: \"AWS profile name\",\n required: false,\n type: String,\n },\n queueNamePrefix: {\n description: \"SQS queue name prefix filter\",\n required: false,\n type: String,\n },\n queueUrl: {\n description: \"SQS queue URL\",\n required: false,\n type: String,\n },\n region: {\n description: \"AWS region (e.g., us-east-1)\",\n required: false,\n type: String,\n },\n scanIndexForward: {\n description: \"DynamoDB scan direction (true=ascending)\",\n required: false,\n type: Boolean,\n },\n stackName: {\n description: \"CloudFormation stack name\",\n required: false,\n type: String,\n },\n startTime: {\n description: \"Start time for log filtering (e.g., now-15m)\",\n required: false,\n type: String,\n },\n stateMachineArn: {\n description: \"Step Functions state machine ARN\",\n required: false,\n type: String,\n },\n statusFilter: {\n description:\n \"Step Functions status filter: RUNNING, SUCCEEDED, FAILED, TIMED_OUT, ABORTED, PENDING_REDRIVE\",\n required: false,\n type: String,\n },\n tableName: {\n description: \"DynamoDB table name\",\n required: false,\n type: String,\n },\n visibilityTimeout: {\n description: \"SQS message visibility timeout in seconds\",\n required: false,\n type: Number,\n },\n },\n service: async (params: AwsInput) => {\n const { command } = params;\n\n if (!command || command === \"help\") {\n return getHelp();\n }\n\n const p = params;\n\n switch (command) {\n case \"list_profiles\": {\n const result = await listAwsProfiles(log);\n if (!result.success) throw new Error(result.error);\n return result.data;\n }\n\n case \"lambda_list_functions\": {\n const result = await listLambdaFunctions(\n {\n functionNamePrefix: p.functionNamePrefix,\n maxResults: p.maxResults,\n profile: p.profile,\n region: p.region,\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return result.data;\n }\n\n case \"lambda_get_function\": {\n if (!p.functionName) throw new Error(\"functionName is required\");\n const result = await getLambdaFunction(\n {\n functionName: p.functionName,\n profile: p.profile,\n region: p.region,\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return result.data;\n }\n\n case \"stepfunctions_list_executions\": {\n if (!p.stateMachineArn) throw new Error(\"stateMachineArn is required\");\n const result = await listStepFunctionExecutions(\n {\n maxResults: p.maxResults,\n profile: p.profile,\n region: p.region,\n stateMachineArn: p.stateMachineArn,\n statusFilter: p.statusFilter as\n | \"RUNNING\"\n | \"SUCCEEDED\"\n | \"FAILED\"\n | \"TIMED_OUT\"\n | \"ABORTED\"\n | \"PENDING_REDRIVE\"\n | undefined,\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return result.data;\n }\n\n case \"stepfunctions_stop_execution\": {\n if (!p.executionArn) throw new Error(\"executionArn is required\");\n const result = await stopStepFunctionExecution(\n {\n cause: p.cause,\n executionArn: p.executionArn,\n profile: p.profile,\n region: p.region,\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return result.data;\n }\n\n case \"logs_filter_log_events\": {\n if (!p.logGroupName) throw new Error(\"logGroupName is required\");\n const result = await filterLogEvents(\n {\n endTime: p.endTime || \"now\",\n filterPattern: p.filterPattern,\n limit: p.limit || 100,\n logGroupName: p.logGroupName,\n profile: p.profile,\n region: p.region,\n startTime: p.startTime || \"now-15m\",\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return result.data;\n }\n\n case \"s3_list_objects\": {\n if (!p.bucket) throw new Error(\"bucket is required\");\n const result = await listS3Objects(\n {\n bucket: p.bucket,\n maxResults: p.maxResults,\n prefix: p.prefix,\n profile: p.profile,\n region: p.region,\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return result.data;\n }\n\n case \"cloudformation_describe_stack\": {\n if (!p.stackName) throw new Error(\"stackName is required\");\n const result = await describeStack(\n {\n profile: p.profile,\n region: p.region,\n stackName: p.stackName,\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return result.data;\n }\n\n case \"dynamodb_describe_table\": {\n if (!p.tableName) throw new Error(\"tableName is required\");\n const result = await describeDynamoDBTable(\n {\n profile: p.profile,\n region: p.region,\n tableName: p.tableName,\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return result.data;\n }\n\n case \"dynamodb_scan\": {\n if (!p.tableName) throw new Error(\"tableName is required\");\n const result = await scanDynamoDB(\n {\n expressionAttributeValues: p.expressionAttributeValues,\n filterExpression: p.filterExpression,\n limit: p.limit || 25,\n profile: p.profile,\n region: p.region,\n tableName: p.tableName,\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return result.data;\n }\n\n case \"dynamodb_query\": {\n if (!p.tableName) throw new Error(\"tableName is required\");\n if (!p.keyConditionExpression)\n throw new Error(\"keyConditionExpression is required\");\n if (!p.expressionAttributeValues)\n throw new Error(\"expressionAttributeValues is required\");\n const result = await queryDynamoDB(\n {\n expressionAttributeValues: p.expressionAttributeValues,\n filterExpression: p.filterExpression,\n indexName: p.indexName,\n keyConditionExpression: p.keyConditionExpression,\n limit: p.limit,\n profile: p.profile,\n region: p.region,\n scanIndexForward: p.scanIndexForward,\n tableName: p.tableName,\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return result.data;\n }\n\n case \"dynamodb_get_item\": {\n if (!p.tableName) throw new Error(\"tableName is required\");\n if (!p.key) throw new Error(\"key is required\");\n const result = await getDynamoDBItem(\n {\n key: p.key,\n profile: p.profile,\n region: p.region,\n tableName: p.tableName,\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return result.data;\n }\n\n case \"sqs_list_queues\": {\n const result = await listSQSQueues(\n {\n profile: p.profile,\n queueNamePrefix: p.queueNamePrefix,\n region: p.region,\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return result.data;\n }\n\n case \"sqs_get_queue_attributes\": {\n if (!p.queueUrl) throw new Error(\"queueUrl is required\");\n const result = await getSQSQueueAttributes(\n {\n profile: p.profile,\n queueUrl: p.queueUrl,\n region: p.region,\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return result.data;\n }\n\n case \"sqs_receive_message\": {\n if (!p.queueUrl) throw new Error(\"queueUrl is required\");\n const result = await receiveSQSMessage(\n {\n maxNumberOfMessages: p.maxNumberOfMessages || 1,\n profile: p.profile,\n queueUrl: p.queueUrl,\n region: p.region,\n visibilityTimeout: p.visibilityTimeout || 30,\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return result.data;\n }\n\n case \"sqs_purge_queue\": {\n if (!p.queueUrl) throw new Error(\"queueUrl is required\");\n const result = await purgeSQSQueue(\n {\n profile: p.profile,\n queueUrl: p.queueUrl,\n region: p.region,\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return { success: true };\n }\n\n default:\n throw new Error(`Unknown command: ${command}. Use aws() for help.`);\n }\n },\n});\n\n// Re-export types and functions for testing\nexport * from \"./aws.js\";\n"],"names":["__dirname"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/suites/aws/index.ts"],"sourcesContent":["/**\n * AWS Suite - Unified AWS CLI access\n */\nimport { fabricService } from \"@jaypie/fabric\";\nimport * as fs from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nimport {\n describeDynamoDBTable,\n describeStack,\n filterLogEvents,\n getDynamoDBItem,\n getLambdaFunction,\n getSQSQueueAttributes,\n listAwsProfiles,\n listLambdaFunctions,\n listS3Objects,\n listSQSQueues,\n listStepFunctionExecutions,\n purgeSQSQueue,\n queryDynamoDB,\n receiveSQSMessage,\n scanDynamoDB,\n stopStepFunctionExecution,\n validateAwsSetup,\n} from \"./aws.js\";\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\n// Silent logger for direct execution\nconst log = {\n error: () => {},\n info: () => {},\n};\n\nasync function getHelp(): Promise<string> {\n return fs.readFile(path.join(__dirname, \"help.md\"), \"utf-8\");\n}\n\n// Flattened input type for the unified AWS service\ninterface AwsInput {\n bucket?: string;\n cause?: string;\n command?: string;\n endTime?: string;\n executionArn?: string;\n expressionAttributeValues?: string;\n filterExpression?: string;\n filterPattern?: string;\n functionName?: string;\n functionNamePrefix?: string;\n indexName?: string;\n key?: string;\n keyConditionExpression?: string;\n limit?: number;\n logGroupName?: string;\n maxNumberOfMessages?: number;\n maxResults?: number;\n prefix?: string;\n profile?: string;\n queueNamePrefix?: string;\n queueUrl?: string;\n region?: string;\n scanIndexForward?: boolean;\n stackName?: string;\n startTime?: string;\n stateMachineArn?: string;\n statusFilter?: string;\n tableName?: string;\n visibilityTimeout?: number;\n}\n\nexport const awsService = fabricService({\n alias: \"aws\",\n description:\n \"Access AWS services via CLI. Commands: list_profiles, lambda_*, stepfunctions_*, logs_*, s3_*, cloudformation_*, dynamodb_*, sqs_*. Call with no args for help.\",\n input: {\n bucket: {\n description: \"S3 bucket name\",\n required: false,\n type: String,\n },\n cause: {\n description: \"Cause for stopping Step Functions execution\",\n required: false,\n type: String,\n },\n command: {\n description: \"Command to execute (omit for help)\",\n required: false,\n type: String,\n },\n endTime: {\n description: \"End time for log filtering (e.g., now)\",\n required: false,\n type: String,\n },\n executionArn: {\n description: \"Step Functions execution ARN\",\n required: false,\n type: String,\n },\n expressionAttributeValues: {\n description: \"DynamoDB expression attribute values (JSON string)\",\n required: false,\n type: String,\n },\n filterExpression: {\n description: \"DynamoDB filter expression\",\n required: false,\n type: String,\n },\n filterPattern: {\n description: \"CloudWatch Logs filter pattern\",\n required: false,\n type: String,\n },\n functionName: {\n description: \"Lambda function name\",\n required: false,\n type: String,\n },\n functionNamePrefix: {\n description: \"Lambda function name prefix filter\",\n required: false,\n type: String,\n },\n indexName: {\n description: \"DynamoDB index name\",\n required: false,\n type: String,\n },\n key: {\n description: \"DynamoDB item key (JSON string)\",\n required: false,\n type: String,\n },\n keyConditionExpression: {\n description: \"DynamoDB key condition expression\",\n required: false,\n type: String,\n },\n limit: {\n description: \"Maximum number of results\",\n required: false,\n type: Number,\n },\n logGroupName: {\n description: \"CloudWatch Logs group name\",\n required: false,\n type: String,\n },\n maxNumberOfMessages: {\n description: \"SQS max messages to receive\",\n required: false,\n type: Number,\n },\n maxResults: {\n description: \"Maximum number of results\",\n required: false,\n type: Number,\n },\n prefix: {\n description: \"S3 object prefix filter\",\n required: false,\n type: String,\n },\n profile: {\n description: \"AWS profile name\",\n required: false,\n type: String,\n },\n queueNamePrefix: {\n description: \"SQS queue name prefix filter\",\n required: false,\n type: String,\n },\n queueUrl: {\n description: \"SQS queue URL\",\n required: false,\n type: String,\n },\n region: {\n description: \"AWS region (e.g., us-east-1)\",\n required: false,\n type: String,\n },\n scanIndexForward: {\n description: \"DynamoDB scan direction (true=ascending)\",\n required: false,\n type: Boolean,\n },\n stackName: {\n description: \"CloudFormation stack name\",\n required: false,\n type: String,\n },\n startTime: {\n description: \"Start time for log filtering (e.g., now-15m)\",\n required: false,\n type: String,\n },\n stateMachineArn: {\n description: \"Step Functions state machine ARN\",\n required: false,\n type: String,\n },\n statusFilter: {\n description:\n \"Step Functions status filter: RUNNING, SUCCEEDED, FAILED, TIMED_OUT, ABORTED, PENDING_REDRIVE\",\n required: false,\n type: String,\n },\n tableName: {\n description: \"DynamoDB table name\",\n required: false,\n type: String,\n },\n visibilityTimeout: {\n description: \"SQS message visibility timeout in seconds\",\n required: false,\n type: Number,\n },\n },\n service: async (params: AwsInput) => {\n const { command } = params;\n\n if (!command || command === \"help\") {\n return getHelp();\n }\n\n const p = params;\n\n switch (command) {\n case \"validate\": {\n return validateAwsSetup();\n }\n\n case \"list_profiles\": {\n const result = await listAwsProfiles(log);\n if (!result.success) throw new Error(result.error);\n return result.data;\n }\n\n case \"lambda_list_functions\": {\n const result = await listLambdaFunctions(\n {\n functionNamePrefix: p.functionNamePrefix,\n maxResults: p.maxResults,\n profile: p.profile,\n region: p.region,\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return result.data;\n }\n\n case \"lambda_get_function\": {\n if (!p.functionName) throw new Error(\"functionName is required\");\n const result = await getLambdaFunction(\n {\n functionName: p.functionName,\n profile: p.profile,\n region: p.region,\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return result.data;\n }\n\n case \"stepfunctions_list_executions\": {\n if (!p.stateMachineArn) throw new Error(\"stateMachineArn is required\");\n const result = await listStepFunctionExecutions(\n {\n maxResults: p.maxResults,\n profile: p.profile,\n region: p.region,\n stateMachineArn: p.stateMachineArn,\n statusFilter: p.statusFilter as\n | \"RUNNING\"\n | \"SUCCEEDED\"\n | \"FAILED\"\n | \"TIMED_OUT\"\n | \"ABORTED\"\n | \"PENDING_REDRIVE\"\n | undefined,\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return result.data;\n }\n\n case \"stepfunctions_stop_execution\": {\n if (!p.executionArn) throw new Error(\"executionArn is required\");\n const result = await stopStepFunctionExecution(\n {\n cause: p.cause,\n executionArn: p.executionArn,\n profile: p.profile,\n region: p.region,\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return result.data;\n }\n\n case \"logs_filter_log_events\": {\n if (!p.logGroupName) throw new Error(\"logGroupName is required\");\n const result = await filterLogEvents(\n {\n endTime: p.endTime || \"now\",\n filterPattern: p.filterPattern,\n limit: p.limit || 100,\n logGroupName: p.logGroupName,\n profile: p.profile,\n region: p.region,\n startTime: p.startTime || \"now-15m\",\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return result.data;\n }\n\n case \"s3_list_objects\": {\n if (!p.bucket) throw new Error(\"bucket is required\");\n const result = await listS3Objects(\n {\n bucket: p.bucket,\n maxResults: p.maxResults,\n prefix: p.prefix,\n profile: p.profile,\n region: p.region,\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return result.data;\n }\n\n case \"cloudformation_describe_stack\": {\n if (!p.stackName) throw new Error(\"stackName is required\");\n const result = await describeStack(\n {\n profile: p.profile,\n region: p.region,\n stackName: p.stackName,\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return result.data;\n }\n\n case \"dynamodb_describe_table\": {\n if (!p.tableName) throw new Error(\"tableName is required\");\n const result = await describeDynamoDBTable(\n {\n profile: p.profile,\n region: p.region,\n tableName: p.tableName,\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return result.data;\n }\n\n case \"dynamodb_scan\": {\n if (!p.tableName) throw new Error(\"tableName is required\");\n const result = await scanDynamoDB(\n {\n expressionAttributeValues: p.expressionAttributeValues,\n filterExpression: p.filterExpression,\n limit: p.limit || 25,\n profile: p.profile,\n region: p.region,\n tableName: p.tableName,\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return result.data;\n }\n\n case \"dynamodb_query\": {\n if (!p.tableName) throw new Error(\"tableName is required\");\n if (!p.keyConditionExpression)\n throw new Error(\"keyConditionExpression is required\");\n if (!p.expressionAttributeValues)\n throw new Error(\"expressionAttributeValues is required\");\n const result = await queryDynamoDB(\n {\n expressionAttributeValues: p.expressionAttributeValues,\n filterExpression: p.filterExpression,\n indexName: p.indexName,\n keyConditionExpression: p.keyConditionExpression,\n limit: p.limit,\n profile: p.profile,\n region: p.region,\n scanIndexForward: p.scanIndexForward,\n tableName: p.tableName,\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return result.data;\n }\n\n case \"dynamodb_get_item\": {\n if (!p.tableName) throw new Error(\"tableName is required\");\n if (!p.key) throw new Error(\"key is required\");\n const result = await getDynamoDBItem(\n {\n key: p.key,\n profile: p.profile,\n region: p.region,\n tableName: p.tableName,\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return result.data;\n }\n\n case \"sqs_list_queues\": {\n const result = await listSQSQueues(\n {\n profile: p.profile,\n queueNamePrefix: p.queueNamePrefix,\n region: p.region,\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return result.data;\n }\n\n case \"sqs_get_queue_attributes\": {\n if (!p.queueUrl) throw new Error(\"queueUrl is required\");\n const result = await getSQSQueueAttributes(\n {\n profile: p.profile,\n queueUrl: p.queueUrl,\n region: p.region,\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return result.data;\n }\n\n case \"sqs_receive_message\": {\n if (!p.queueUrl) throw new Error(\"queueUrl is required\");\n const result = await receiveSQSMessage(\n {\n maxNumberOfMessages: p.maxNumberOfMessages || 1,\n profile: p.profile,\n queueUrl: p.queueUrl,\n region: p.region,\n visibilityTimeout: p.visibilityTimeout || 30,\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return result.data;\n }\n\n case \"sqs_purge_queue\": {\n if (!p.queueUrl) throw new Error(\"queueUrl is required\");\n const result = await purgeSQSQueue(\n {\n profile: p.profile,\n queueUrl: p.queueUrl,\n region: p.region,\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return { success: true };\n }\n\n default:\n throw new Error(`Unknown command: ${command}. Use aws() for help.`);\n }\n },\n});\n\n// Re-export types and functions for testing\nexport * from \"./aws.js\";\n"],"names":["__dirname"],"mappings":";;;;;;;AAAA;;AAEG;AA0BH,MAAMA,WAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE9D;AACA,MAAM,GAAG,GAAG;AACV,IAAA,KAAK,EAAE,MAAK,EAAE,CAAC;AACf,IAAA,IAAI,EAAE,MAAK,EAAE,CAAC;CACf;AAED,eAAe,OAAO,GAAA;AACpB,IAAA,OAAO,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAACA,WAAS,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC;AAC9D;AAmCO,MAAM,UAAU,GAAG,aAAa,CAAC;AACtC,IAAA,KAAK,EAAE,KAAK;AACZ,IAAA,WAAW,EACT,iKAAiK;AACnK,IAAA,KAAK,EAAE;AACL,QAAA,MAAM,EAAE;AACN,YAAA,WAAW,EAAE,gBAAgB;AAC7B,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,IAAI,EAAE,MAAM;AACb,SAAA;AACD,QAAA,KAAK,EAAE;AACL,YAAA,WAAW,EAAE,6CAA6C;AAC1D,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,IAAI,EAAE,MAAM;AACb,SAAA;AACD,QAAA,OAAO,EAAE;AACP,YAAA,WAAW,EAAE,oCAAoC;AACjD,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,IAAI,EAAE,MAAM;AACb,SAAA;AACD,QAAA,OAAO,EAAE;AACP,YAAA,WAAW,EAAE,wCAAwC;AACrD,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,IAAI,EAAE,MAAM;AACb,SAAA;AACD,QAAA,YAAY,EAAE;AACZ,YAAA,WAAW,EAAE,8BAA8B;AAC3C,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,IAAI,EAAE,MAAM;AACb,SAAA;AACD,QAAA,yBAAyB,EAAE;AACzB,YAAA,WAAW,EAAE,oDAAoD;AACjE,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,IAAI,EAAE,MAAM;AACb,SAAA;AACD,QAAA,gBAAgB,EAAE;AAChB,YAAA,WAAW,EAAE,4BAA4B;AACzC,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,IAAI,EAAE,MAAM;AACb,SAAA;AACD,QAAA,aAAa,EAAE;AACb,YAAA,WAAW,EAAE,gCAAgC;AAC7C,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,IAAI,EAAE,MAAM;AACb,SAAA;AACD,QAAA,YAAY,EAAE;AACZ,YAAA,WAAW,EAAE,sBAAsB;AACnC,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,IAAI,EAAE,MAAM;AACb,SAAA;AACD,QAAA,kBAAkB,EAAE;AAClB,YAAA,WAAW,EAAE,oCAAoC;AACjD,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,IAAI,EAAE,MAAM;AACb,SAAA;AACD,QAAA,SAAS,EAAE;AACT,YAAA,WAAW,EAAE,qBAAqB;AAClC,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,IAAI,EAAE,MAAM;AACb,SAAA;AACD,QAAA,GAAG,EAAE;AACH,YAAA,WAAW,EAAE,iCAAiC;AAC9C,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,IAAI,EAAE,MAAM;AACb,SAAA;AACD,QAAA,sBAAsB,EAAE;AACtB,YAAA,WAAW,EAAE,mCAAmC;AAChD,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,IAAI,EAAE,MAAM;AACb,SAAA;AACD,QAAA,KAAK,EAAE;AACL,YAAA,WAAW,EAAE,2BAA2B;AACxC,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,IAAI,EAAE,MAAM;AACb,SAAA;AACD,QAAA,YAAY,EAAE;AACZ,YAAA,WAAW,EAAE,4BAA4B;AACzC,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,IAAI,EAAE,MAAM;AACb,SAAA;AACD,QAAA,mBAAmB,EAAE;AACnB,YAAA,WAAW,EAAE,6BAA6B;AAC1C,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,IAAI,EAAE,MAAM;AACb,SAAA;AACD,QAAA,UAAU,EAAE;AACV,YAAA,WAAW,EAAE,2BAA2B;AACxC,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,IAAI,EAAE,MAAM;AACb,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA,WAAW,EAAE,yBAAyB;AACtC,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,IAAI,EAAE,MAAM;AACb,SAAA;AACD,QAAA,OAAO,EAAE;AACP,YAAA,WAAW,EAAE,kBAAkB;AAC/B,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,IAAI,EAAE,MAAM;AACb,SAAA;AACD,QAAA,eAAe,EAAE;AACf,YAAA,WAAW,EAAE,8BAA8B;AAC3C,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,IAAI,EAAE,MAAM;AACb,SAAA;AACD,QAAA,QAAQ,EAAE;AACR,YAAA,WAAW,EAAE,eAAe;AAC5B,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,IAAI,EAAE,MAAM;AACb,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA,WAAW,EAAE,8BAA8B;AAC3C,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,IAAI,EAAE,MAAM;AACb,SAAA;AACD,QAAA,gBAAgB,EAAE;AAChB,YAAA,WAAW,EAAE,0CAA0C;AACvD,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,IAAI,EAAE,OAAO;AACd,SAAA;AACD,QAAA,SAAS,EAAE;AACT,YAAA,WAAW,EAAE,2BAA2B;AACxC,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,IAAI,EAAE,MAAM;AACb,SAAA;AACD,QAAA,SAAS,EAAE;AACT,YAAA,WAAW,EAAE,8CAA8C;AAC3D,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,IAAI,EAAE,MAAM;AACb,SAAA;AACD,QAAA,eAAe,EAAE;AACf,YAAA,WAAW,EAAE,kCAAkC;AAC/C,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,IAAI,EAAE,MAAM;AACb,SAAA;AACD,QAAA,YAAY,EAAE;AACZ,YAAA,WAAW,EACT,+FAA+F;AACjG,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,IAAI,EAAE,MAAM;AACb,SAAA;AACD,QAAA,SAAS,EAAE;AACT,YAAA,WAAW,EAAE,qBAAqB;AAClC,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,IAAI,EAAE,MAAM;AACb,SAAA;AACD,QAAA,iBAAiB,EAAE;AACjB,YAAA,WAAW,EAAE,2CAA2C;AACxD,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,IAAI,EAAE,MAAM;AACb,SAAA;AACF,KAAA;AACD,IAAA,OAAO,EAAE,OAAO,MAAgB,KAAI;AAClC,QAAA,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM;AAE1B,QAAA,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,MAAM,EAAE;YAClC,OAAO,OAAO,EAAE;QAClB;QAEA,MAAM,CAAC,GAAG,MAAM;QAEhB,QAAQ,OAAO;YACb,KAAK,UAAU,EAAE;gBACf,OAAO,gBAAgB,EAAE;YAC3B;YAEA,KAAK,eAAe,EAAE;AACpB,gBAAA,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,GAAG,CAAC;gBACzC,IAAI,CAAC,MAAM,CAAC,OAAO;AAAE,oBAAA,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;gBAClD,OAAO,MAAM,CAAC,IAAI;YACpB;YAEA,KAAK,uBAAuB,EAAE;AAC5B,gBAAA,MAAM,MAAM,GAAG,MAAM,mBAAmB,CACtC;oBACE,kBAAkB,EAAE,CAAC,CAAC,kBAAkB;oBACxC,UAAU,EAAE,CAAC,CAAC,UAAU;oBACxB,OAAO,EAAE,CAAC,CAAC,OAAO;oBAClB,MAAM,EAAE,CAAC,CAAC,MAAM;iBACjB,EACD,GAAG,CACJ;gBACD,IAAI,CAAC,MAAM,CAAC,OAAO;AAAE,oBAAA,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;gBAClD,OAAO,MAAM,CAAC,IAAI;YACpB;YAEA,KAAK,qBAAqB,EAAE;gBAC1B,IAAI,CAAC,CAAC,CAAC,YAAY;AAAE,oBAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC;AAChE,gBAAA,MAAM,MAAM,GAAG,MAAM,iBAAiB,CACpC;oBACE,YAAY,EAAE,CAAC,CAAC,YAAY;oBAC5B,OAAO,EAAE,CAAC,CAAC,OAAO;oBAClB,MAAM,EAAE,CAAC,CAAC,MAAM;iBACjB,EACD,GAAG,CACJ;gBACD,IAAI,CAAC,MAAM,CAAC,OAAO;AAAE,oBAAA,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;gBAClD,OAAO,MAAM,CAAC,IAAI;YACpB;YAEA,KAAK,+BAA+B,EAAE;gBACpC,IAAI,CAAC,CAAC,CAAC,eAAe;AAAE,oBAAA,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC;AACtE,gBAAA,MAAM,MAAM,GAAG,MAAM,0BAA0B,CAC7C;oBACE,UAAU,EAAE,CAAC,CAAC,UAAU;oBACxB,OAAO,EAAE,CAAC,CAAC,OAAO;oBAClB,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,eAAe,EAAE,CAAC,CAAC,eAAe;oBAClC,YAAY,EAAE,CAAC,CAAC,YAOH;iBACd,EACD,GAAG,CACJ;gBACD,IAAI,CAAC,MAAM,CAAC,OAAO;AAAE,oBAAA,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;gBAClD,OAAO,MAAM,CAAC,IAAI;YACpB;YAEA,KAAK,8BAA8B,EAAE;gBACnC,IAAI,CAAC,CAAC,CAAC,YAAY;AAAE,oBAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC;AAChE,gBAAA,MAAM,MAAM,GAAG,MAAM,yBAAyB,CAC5C;oBACE,KAAK,EAAE,CAAC,CAAC,KAAK;oBACd,YAAY,EAAE,CAAC,CAAC,YAAY;oBAC5B,OAAO,EAAE,CAAC,CAAC,OAAO;oBAClB,MAAM,EAAE,CAAC,CAAC,MAAM;iBACjB,EACD,GAAG,CACJ;gBACD,IAAI,CAAC,MAAM,CAAC,OAAO;AAAE,oBAAA,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;gBAClD,OAAO,MAAM,CAAC,IAAI;YACpB;YAEA,KAAK,wBAAwB,EAAE;gBAC7B,IAAI,CAAC,CAAC,CAAC,YAAY;AAAE,oBAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC;AAChE,gBAAA,MAAM,MAAM,GAAG,MAAM,eAAe,CAClC;AACE,oBAAA,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,KAAK;oBAC3B,aAAa,EAAE,CAAC,CAAC,aAAa;AAC9B,oBAAA,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,GAAG;oBACrB,YAAY,EAAE,CAAC,CAAC,YAAY;oBAC5B,OAAO,EAAE,CAAC,CAAC,OAAO;oBAClB,MAAM,EAAE,CAAC,CAAC,MAAM;AAChB,oBAAA,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,SAAS;iBACpC,EACD,GAAG,CACJ;gBACD,IAAI,CAAC,MAAM,CAAC,OAAO;AAAE,oBAAA,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;gBAClD,OAAO,MAAM,CAAC,IAAI;YACpB;YAEA,KAAK,iBAAiB,EAAE;gBACtB,IAAI,CAAC,CAAC,CAAC,MAAM;AAAE,oBAAA,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC;AACpD,gBAAA,MAAM,MAAM,GAAG,MAAM,aAAa,CAChC;oBACE,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,UAAU,EAAE,CAAC,CAAC,UAAU;oBACxB,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,OAAO,EAAE,CAAC,CAAC,OAAO;oBAClB,MAAM,EAAE,CAAC,CAAC,MAAM;iBACjB,EACD,GAAG,CACJ;gBACD,IAAI,CAAC,MAAM,CAAC,OAAO;AAAE,oBAAA,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;gBAClD,OAAO,MAAM,CAAC,IAAI;YACpB;YAEA,KAAK,+BAA+B,EAAE;gBACpC,IAAI,CAAC,CAAC,CAAC,SAAS;AAAE,oBAAA,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC;AAC1D,gBAAA,MAAM,MAAM,GAAG,MAAM,aAAa,CAChC;oBACE,OAAO,EAAE,CAAC,CAAC,OAAO;oBAClB,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,SAAS,EAAE,CAAC,CAAC,SAAS;iBACvB,EACD,GAAG,CACJ;gBACD,IAAI,CAAC,MAAM,CAAC,OAAO;AAAE,oBAAA,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;gBAClD,OAAO,MAAM,CAAC,IAAI;YACpB;YAEA,KAAK,yBAAyB,EAAE;gBAC9B,IAAI,CAAC,CAAC,CAAC,SAAS;AAAE,oBAAA,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC;AAC1D,gBAAA,MAAM,MAAM,GAAG,MAAM,qBAAqB,CACxC;oBACE,OAAO,EAAE,CAAC,CAAC,OAAO;oBAClB,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,SAAS,EAAE,CAAC,CAAC,SAAS;iBACvB,EACD,GAAG,CACJ;gBACD,IAAI,CAAC,MAAM,CAAC,OAAO;AAAE,oBAAA,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;gBAClD,OAAO,MAAM,CAAC,IAAI;YACpB;YAEA,KAAK,eAAe,EAAE;gBACpB,IAAI,CAAC,CAAC,CAAC,SAAS;AAAE,oBAAA,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC;AAC1D,gBAAA,MAAM,MAAM,GAAG,MAAM,YAAY,CAC/B;oBACE,yBAAyB,EAAE,CAAC,CAAC,yBAAyB;oBACtD,gBAAgB,EAAE,CAAC,CAAC,gBAAgB;AACpC,oBAAA,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE;oBACpB,OAAO,EAAE,CAAC,CAAC,OAAO;oBAClB,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,SAAS,EAAE,CAAC,CAAC,SAAS;iBACvB,EACD,GAAG,CACJ;gBACD,IAAI,CAAC,MAAM,CAAC,OAAO;AAAE,oBAAA,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;gBAClD,OAAO,MAAM,CAAC,IAAI;YACpB;YAEA,KAAK,gBAAgB,EAAE;gBACrB,IAAI,CAAC,CAAC,CAAC,SAAS;AAAE,oBAAA,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC;gBAC1D,IAAI,CAAC,CAAC,CAAC,sBAAsB;AAC3B,oBAAA,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC;gBACvD,IAAI,CAAC,CAAC,CAAC,yBAAyB;AAC9B,oBAAA,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC;AAC1D,gBAAA,MAAM,MAAM,GAAG,MAAM,aAAa,CAChC;oBACE,yBAAyB,EAAE,CAAC,CAAC,yBAAyB;oBACtD,gBAAgB,EAAE,CAAC,CAAC,gBAAgB;oBACpC,SAAS,EAAE,CAAC,CAAC,SAAS;oBACtB,sBAAsB,EAAE,CAAC,CAAC,sBAAsB;oBAChD,KAAK,EAAE,CAAC,CAAC,KAAK;oBACd,OAAO,EAAE,CAAC,CAAC,OAAO;oBAClB,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,gBAAgB,EAAE,CAAC,CAAC,gBAAgB;oBACpC,SAAS,EAAE,CAAC,CAAC,SAAS;iBACvB,EACD,GAAG,CACJ;gBACD,IAAI,CAAC,MAAM,CAAC,OAAO;AAAE,oBAAA,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;gBAClD,OAAO,MAAM,CAAC,IAAI;YACpB;YAEA,KAAK,mBAAmB,EAAE;gBACxB,IAAI,CAAC,CAAC,CAAC,SAAS;AAAE,oBAAA,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC;gBAC1D,IAAI,CAAC,CAAC,CAAC,GAAG;AAAE,oBAAA,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC;AAC9C,gBAAA,MAAM,MAAM,GAAG,MAAM,eAAe,CAClC;oBACE,GAAG,EAAE,CAAC,CAAC,GAAG;oBACV,OAAO,EAAE,CAAC,CAAC,OAAO;oBAClB,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,SAAS,EAAE,CAAC,CAAC,SAAS;iBACvB,EACD,GAAG,CACJ;gBACD,IAAI,CAAC,MAAM,CAAC,OAAO;AAAE,oBAAA,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;gBAClD,OAAO,MAAM,CAAC,IAAI;YACpB;YAEA,KAAK,iBAAiB,EAAE;AACtB,gBAAA,MAAM,MAAM,GAAG,MAAM,aAAa,CAChC;oBACE,OAAO,EAAE,CAAC,CAAC,OAAO;oBAClB,eAAe,EAAE,CAAC,CAAC,eAAe;oBAClC,MAAM,EAAE,CAAC,CAAC,MAAM;iBACjB,EACD,GAAG,CACJ;gBACD,IAAI,CAAC,MAAM,CAAC,OAAO;AAAE,oBAAA,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;gBAClD,OAAO,MAAM,CAAC,IAAI;YACpB;YAEA,KAAK,0BAA0B,EAAE;gBAC/B,IAAI,CAAC,CAAC,CAAC,QAAQ;AAAE,oBAAA,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC;AACxD,gBAAA,MAAM,MAAM,GAAG,MAAM,qBAAqB,CACxC;oBACE,OAAO,EAAE,CAAC,CAAC,OAAO;oBAClB,QAAQ,EAAE,CAAC,CAAC,QAAQ;oBACpB,MAAM,EAAE,CAAC,CAAC,MAAM;iBACjB,EACD,GAAG,CACJ;gBACD,IAAI,CAAC,MAAM,CAAC,OAAO;AAAE,oBAAA,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;gBAClD,OAAO,MAAM,CAAC,IAAI;YACpB;YAEA,KAAK,qBAAqB,EAAE;gBAC1B,IAAI,CAAC,CAAC,CAAC,QAAQ;AAAE,oBAAA,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC;AACxD,gBAAA,MAAM,MAAM,GAAG,MAAM,iBAAiB,CACpC;AACE,oBAAA,mBAAmB,EAAE,CAAC,CAAC,mBAAmB,IAAI,CAAC;oBAC/C,OAAO,EAAE,CAAC,CAAC,OAAO;oBAClB,QAAQ,EAAE,CAAC,CAAC,QAAQ;oBACpB,MAAM,EAAE,CAAC,CAAC,MAAM;AAChB,oBAAA,iBAAiB,EAAE,CAAC,CAAC,iBAAiB,IAAI,EAAE;iBAC7C,EACD,GAAG,CACJ;gBACD,IAAI,CAAC,MAAM,CAAC,OAAO;AAAE,oBAAA,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;gBAClD,OAAO,MAAM,CAAC,IAAI;YACpB;YAEA,KAAK,iBAAiB,EAAE;gBACtB,IAAI,CAAC,CAAC,CAAC,QAAQ;AAAE,oBAAA,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC;AACxD,gBAAA,MAAM,MAAM,GAAG,MAAM,aAAa,CAChC;oBACE,OAAO,EAAE,CAAC,CAAC,OAAO;oBAClB,QAAQ,EAAE,CAAC,CAAC,QAAQ;oBACpB,MAAM,EAAE,CAAC,CAAC,MAAM;iBACjB,EACD,GAAG,CACJ;gBACD,IAAI,CAAC,MAAM,CAAC,OAAO;AAAE,oBAAA,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;AAClD,gBAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;YAC1B;AAEA,YAAA;AACE,gBAAA,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,CAAA,qBAAA,CAAuB,CAAC;;IAEzE,CAAC;AACF,CAAA;;;;"}
@@ -128,6 +128,17 @@ export interface DatadogRumResult {
128
128
  events: DatadogRumEvent[];
129
129
  error?: string;
130
130
  }
131
+ export interface DatadogValidationResult {
132
+ success: boolean;
133
+ apiKey: {
134
+ present: boolean;
135
+ source: string | null;
136
+ };
137
+ appKey: {
138
+ present: boolean;
139
+ source: string | null;
140
+ };
141
+ }
131
142
  export interface DatadogLogEntry {
132
143
  id: string;
133
144
  timestamp?: string;
@@ -169,6 +180,10 @@ interface Logger {
169
180
  * Get Datadog credentials from environment variables
170
181
  */
171
182
  export declare function getDatadogCredentials(): DatadogCredentials | null;
183
+ /**
184
+ * Validate Datadog setup without making API calls
185
+ */
186
+ export declare function validateDatadogSetup(): DatadogValidationResult;
172
187
  /**
173
188
  * Validate Datadog API credentials
174
189
  */
@@ -21,6 +21,30 @@ function getDatadogCredentials() {
21
21
  }
22
22
  return { apiKey, appKey };
23
23
  }
24
+ /**
25
+ * Validate Datadog setup without making API calls
26
+ */
27
+ function validateDatadogSetup() {
28
+ const apiKeySource = process.env.DATADOG_API_KEY
29
+ ? "DATADOG_API_KEY"
30
+ : process.env.DD_API_KEY
31
+ ? "DD_API_KEY"
32
+ : null;
33
+ const appKeySource = process.env.DATADOG_APP_KEY
34
+ ? "DATADOG_APP_KEY"
35
+ : process.env.DATADOG_APPLICATION_KEY
36
+ ? "DATADOG_APPLICATION_KEY"
37
+ : process.env.DD_APP_KEY
38
+ ? "DD_APP_KEY"
39
+ : process.env.DD_APPLICATION_KEY
40
+ ? "DD_APPLICATION_KEY"
41
+ : null;
42
+ return {
43
+ apiKey: { present: apiKeySource !== null, source: apiKeySource },
44
+ appKey: { present: appKeySource !== null, source: appKeySource },
45
+ success: apiKeySource !== null && appKeySource !== null,
46
+ };
47
+ }
24
48
  /**
25
49
  * Validate Datadog API credentials
26
50
  */
@@ -824,5 +848,5 @@ async function searchDatadogRum(credentials, options = {}, logger = nullLogger)
824
848
  });
825
849
  }
826
850
 
827
- export { aggregateDatadogLogs, buildDatadogQuery, getDatadogCredentials, getDatadogSyntheticResults, listDatadogMonitors, listDatadogSynthetics, queryDatadogMetrics, searchDatadogLogs, searchDatadogRum, validateDatadogCredentials };
851
+ export { aggregateDatadogLogs, buildDatadogQuery, getDatadogCredentials, getDatadogSyntheticResults, listDatadogMonitors, listDatadogSynthetics, queryDatadogMetrics, searchDatadogLogs, searchDatadogRum, validateDatadogCredentials, validateDatadogSetup };
828
852
  //# sourceMappingURL=datadog.js.map