{
  "//": {
    "metadata": {
      "backend": "local",
      "stackName": "CloudCollectorV3Stack",
      "version": "0.23.3"
    },
    "outputs": {}
  },
  "data": {
    "aws_caller_identity": {
      "operata_lex_account_main_prod": {
        "//": {
          "metadata": {
            "path": "CloudCollectorV3Stack/operata_lex_account_main_prod",
            "uniqueId": "operata_lex_account_main_prod"
          }
        }
      }
    },
    "aws_iam_policy_document": {
      "operata_lex_enrichment_lambda_assumerole_prod": {
        "//": {
          "metadata": {
            "path": "CloudCollectorV3Stack/operata_lex_enrichment_lambda_assumerole_prod",
            "uniqueId": "operata_lex_enrichment_lambda_assumerole_prod"
          }
        },
        "statement": [
          {
            "actions": [
              "sts:AssumeRole"
            ],
            "effect": "Allow",
            "principals": [
              {
                "identifiers": [
                  "lambda.amazonaws.com"
                ],
                "type": "Service"
              }
            ]
          }
        ]
      },
      "operata_lex_logs_to_kinesis_assumerole_prod": {
        "//": {
          "metadata": {
            "path": "CloudCollectorV3Stack/operata_lex_logs_to_kinesis_assumerole_prod",
            "uniqueId": "operata_lex_logs_to_kinesis_assumerole_prod"
          }
        },
        "statement": [
          {
            "actions": [
              "sts:AssumeRole"
            ],
            "effect": "Allow",
            "principals": [
              {
                "identifiers": [
                  "logs.${var.aws_region}.amazonaws.com"
                ],
                "type": "Service"
              }
            ]
          }
        ]
      }
    }
  },
  "provider": {
    "aws": [
      {
        "region": "${var.aws_region}"
      }
    ]
  },
  "resource": {
    "aws_cloudwatch_event_api_destination": {
      "operata_lex_api_destination_prod": {
        "//": {
          "metadata": {
            "path": "CloudCollectorV3Stack/operata_lex_api_destination_prod",
            "uniqueId": "operata_lex_api_destination_prod"
          }
        },
        "connection_arn": "${aws_cloudwatch_event_connection.operata_lex_connection_prod.arn}",
        "description": "Operata API Destination for Lex conversation logs",
        "http_method": "POST",
        "invocation_endpoint": "https://api.operata.io/v2/raw/lexlogs",
        "invocation_rate_limit_per_second": 10,
        "name": "operata-lex-api-${var.operata_group_id}"
      }
    },
    "aws_cloudwatch_event_connection": {
      "operata_lex_connection_prod": {
        "//": {
          "metadata": {
            "path": "CloudCollectorV3Stack/operata_lex_connection_prod",
            "uniqueId": "operata_lex_connection_prod"
          }
        },
        "auth_parameters": {
          "api_key": {
            "key": "Operata-API-Key",
            "value": "${aws_secretsmanager_secret_version.operata_api_key_secret_version_prod.secret_string}"
          },
          "invocation_http_parameters": {
            "header": [
              {
                "is_value_secret": false,
                "key": "Operata-Group-Id",
                "value": "${var.operata_group_id}"
              }
            ]
          }
        },
        "authorization_type": "API_KEY",
        "description": "Connection to Operata platform for Lex conversation logs",
        "name": "operata-lex-conn-${var.operata_group_id}"
      }
    },
    "aws_cloudwatch_log_group": {
      "operata_lex_pipe_log_group_prod": {
        "//": {
          "metadata": {
            "path": "CloudCollectorV3Stack/operata_lex_pipe_log_group_prod",
            "uniqueId": "operata_lex_pipe_log_group_prod"
          }
        },
        "name": "/aws/pipes/operataLexPipe-Group-${var.operata_group_id}",
        "retention_in_days": 7
      }
    },
    "aws_cloudwatch_log_subscription_filter": {
      "operata_lex_subscription_filter_prod": {
        "//": {
          "metadata": {
            "path": "CloudCollectorV3Stack/operata_lex_subscription_filter_prod",
            "uniqueId": "operata_lex_subscription_filter_prod"
          }
        },
        "destination_arn": "${aws_kinesis_stream.operata_lex_conversation_stream_prod.arn}",
        "filter_pattern": "",
        "log_group_name": "${var.lex_log_group_name}",
        "name": "operata_lex_subscription_filter_prod",
        "role_arn": "${aws_iam_role.operata_lex_logs_to_kinesis_role_prod.arn}"
      }
    },
    "aws_iam_role": {
      "operata_lex_enrichment_lambda_role_prod": {
        "//": {
          "metadata": {
            "path": "CloudCollectorV3Stack/operata_lex_enrichment_lambda_role_prod",
            "uniqueId": "operata_lex_enrichment_lambda_role_prod"
          }
        },
        "assume_role_policy": "${data.aws_iam_policy_document.operata_lex_enrichment_lambda_assumerole_prod.json}",
        "inline_policy": [
          {
            "name": "operata_lex_enrichment_lambda_policy_prod",
            "policy": "${jsonencode({\"Statement\" = [{\"Effect\" = \"Allow\", \"Action\" = [\"logs:CreateLogGroup\", \"logs:CreateLogStream\", \"logs:PutLogEvents\"], \"Resource\" = \"*\"}, {\"Effect\" = \"Allow\", \"Action\" = [\"secretsmanager:GetSecretValue\"], \"Resource\" = aws_secretsmanager_secret_version.operata_api_key_secret_version_prod.arn}, {\"Effect\" = \"Allow\", \"Action\" = [\"secretsmanager:GetSecretValue\", \"secretsmanager:PutSecretValue\", \"secretsmanager:DescribeSecret\"], \"Resource\" = aws_secretsmanager_secret_version.redaction_policy_cache_secret_version_prod.arn}], \"Version\" = \"2012-10-17\"})}"
          }
        ],
        "name": "operata_lex_enrichment_lambda_role_prod"
      },
      "operata_lex_event_bridge_pipe_role_prod": {
        "//": {
          "metadata": {
            "path": "CloudCollectorV3Stack/operata_lex_event_bridge_pipe_role_prod",
            "uniqueId": "operata_lex_event_bridge_pipe_role_prod"
          }
        },
        "assume_role_policy": "${jsonencode({\"Statement\" = [{\"Action\" = \"sts:AssumeRole\", \"Condition\" = {\"StringEquals\" = {\"aws:SourceAccount\" = data.aws_caller_identity.operata_lex_account_main_prod.account_id}}, \"Effect\" = \"Allow\", \"Principal\" = {\"Service\" = \"pipes.amazonaws.com\"}}], \"Version\" = \"2012-10-17\"})}",
        "description": "Role for EventBridge Pipe to read from Kinesis, invoke Lambda, and send to API Destination"
      },
      "operata_lex_logs_to_kinesis_role_prod": {
        "//": {
          "metadata": {
            "path": "CloudCollectorV3Stack/operata_lex_logs_to_kinesis_role_prod",
            "uniqueId": "operata_lex_logs_to_kinesis_role_prod"
          }
        },
        "assume_role_policy": "${data.aws_iam_policy_document.operata_lex_logs_to_kinesis_assumerole_prod.json}",
        "description": "Role for CloudWatch Logs to write Lex conversation logs to Kinesis stream",
        "name": "operata_lex_logs_to_kinesis_role_prod"
      }
    },
    "aws_iam_role_policy": {
      "operata_lex_logs_to_kinesis_policy_prod": {
        "//": {
          "metadata": {
            "path": "CloudCollectorV3Stack/operata_lex_logs_to_kinesis_policy_prod",
            "uniqueId": "operata_lex_logs_to_kinesis_policy_prod"
          }
        },
        "name": "operata_lex_logs_to_kinesis_policy_prod",
        "policy": "${jsonencode({\"Statement\" = [{\"Action\" = [\"kinesis:PutRecord\", \"kinesis:PutRecords\", \"kinesis:DescribeStream\"], \"Effect\" = \"Allow\", \"Resource\" = aws_kinesis_stream.operata_lex_conversation_stream_prod.arn}], \"Version\" = \"2012-10-17\"})}",
        "role": "${aws_iam_role.operata_lex_logs_to_kinesis_role_prod.id}"
      },
      "operata_lex_pipe_api_destination_policy_prod": {
        "//": {
          "metadata": {
            "path": "CloudCollectorV3Stack/operata_lex_pipe_api_destination_policy_prod",
            "uniqueId": "operata_lex_pipe_api_destination_policy_prod"
          }
        },
        "name": "APIDestinationPolicy-Operata-Lex-GroupId-${var.operata_group_id}",
        "policy": "${jsonencode({\"Statement\" = [{\"Action\" = [\"events:InvokeApiDestination\"], \"Effect\" = \"Allow\", \"Resource\" = aws_cloudwatch_event_api_destination.operata_lex_api_destination_prod.arn}], \"Version\" = \"2012-10-17\"})}",
        "role": "${aws_iam_role.operata_lex_event_bridge_pipe_role_prod.id}"
      },
      "operata_lex_pipe_kinesis_source_policy_prod": {
        "//": {
          "metadata": {
            "path": "CloudCollectorV3Stack/operata_lex_pipe_kinesis_source_policy_prod",
            "uniqueId": "operata_lex_pipe_kinesis_source_policy_prod"
          }
        },
        "name": "KinesisPipeSourcePolicy-Operata-Lex-GroupId-${var.operata_group_id}",
        "policy": "${jsonencode({\"Statement\" = [{\"Action\" = [\"kinesis:DescribeStream\", \"kinesis:DescribeStreamSummary\", \"kinesis:GetRecords\", \"kinesis:GetShardIterator\", \"kinesis:ListStreams\", \"kinesis:ListShards\"], \"Effect\" = \"Allow\", \"Resource\" = aws_kinesis_stream.operata_lex_conversation_stream_prod.arn}], \"Version\" = \"2012-10-17\"})}",
        "role": "${aws_iam_role.operata_lex_event_bridge_pipe_role_prod.id}"
      },
      "operata_lex_pipe_lambda_policy_prod": {
        "//": {
          "metadata": {
            "path": "CloudCollectorV3Stack/operata_lex_pipe_lambda_policy_prod",
            "uniqueId": "operata_lex_pipe_lambda_policy_prod"
          }
        },
        "name": "LambdaEnrichmentPolicy-Operata-Lex-GroupId-${var.operata_group_id}",
        "policy": "${jsonencode({\"Statement\" = [{\"Action\" = [\"lambda:InvokeFunction\"], \"Effect\" = \"Allow\", \"Resource\" = aws_lambda_function.operata_lex_enrichment_lambda_prod.arn}], \"Version\" = \"2012-10-17\"})}",
        "role": "${aws_iam_role.operata_lex_event_bridge_pipe_role_prod.id}"
      },
      "operata_lex_pipe_logs_policy_prod": {
        "//": {
          "metadata": {
            "path": "CloudCollectorV3Stack/operata_lex_pipe_logs_policy_prod",
            "uniqueId": "operata_lex_pipe_logs_policy_prod"
          }
        },
        "name": "PipeLogsPolicy-Operata-Lex-GroupId-${var.operata_group_id}",
        "policy": "${jsonencode({\"Statement\" = [{\"Action\" = [\"logs:CreateLogStream\", \"logs:PutLogEvents\"], \"Effect\" = \"Allow\", \"Resource\" = aws_cloudwatch_log_group.operata_lex_pipe_log_group_prod.arn}], \"Version\" = \"2012-10-17\"})}",
        "role": "${aws_iam_role.operata_lex_event_bridge_pipe_role_prod.id}"
      }
    },
    "aws_kinesis_stream": {
      "operata_lex_conversation_stream_prod": {
        "//": {
          "metadata": {
            "path": "CloudCollectorV3Stack/operata_lex_conversation_stream_prod",
            "uniqueId": "operata_lex_conversation_stream_prod"
          }
        },
        "name": "operata-lex-conversation-stream-prod",
        "retention_period": 24,
        "shard_count": 1
      }
    },
    "aws_lambda_function": {
      "operata_lex_enrichment_lambda_prod": {
        "//": {
          "metadata": {
            "path": "CloudCollectorV3Stack/operata_lex_enrichment_lambda_prod",
            "uniqueId": "operata_lex_enrichment_lambda_prod"
          }
        },
        "description": "Lex enrichment Lambda: decompress, redact (mandatory + Operata), forward to Operata for group ${var.operata_group_id}",
        "environment": {
          "variables": {
            "BUILD_VERSION": "v1.2.6",
            "LOG_LEVEL": "INFO",
            "OPERATA_API_KEY": "${aws_secretsmanager_secret_version.operata_api_key_secret_version_prod.arn}",
            "OPERATA_API_URL": "https://api.operata.io",
            "OPERATA_GROUP_ID": "${var.operata_group_id}",
            "OPERATA_REDACTION_CACHE_SECRET_ARN": "${aws_secretsmanager_secret_version.redaction_policy_cache_secret_version_prod.arn}"
          }
        },
        "function_name": "operata_lex_enrichment_lambda_prod",
        "handler": "index.lambda_handler",
        "memory_size": 256,
        "role": "${aws_iam_role.operata_lex_enrichment_lambda_role_prod.arn}",
        "runtime": "python3.13",
        "s3_bucket": "${var.aws_region}-operata-shared-assets-prod",
        "s3_key": "ccv3-lambdas/v1.2.6/cloud-collector-v3-lexv2-logs.zip",
        "timeout": 30
      }
    },
    "aws_lambda_permission": {
      "operata_lex_pipe_lambda_invoke_permission_prod": {
        "//": {
          "metadata": {
            "path": "CloudCollectorV3Stack/operata_lex_pipe_lambda_invoke_permission_prod",
            "uniqueId": "operata_lex_pipe_lambda_invoke_permission_prod"
          }
        },
        "action": "lambda:InvokeFunction",
        "function_name": "${aws_lambda_function.operata_lex_enrichment_lambda_prod.function_name}",
        "principal": "pipes.amazonaws.com",
        "statement_id": "AllowEventBridgePipeInvoke"
      }
    },
    "aws_pipes_pipe": {
      "operata_lex_pipe_prod": {
        "//": {
          "metadata": {
            "path": "CloudCollectorV3Stack/operata_lex_pipe_prod",
            "uniqueId": "operata_lex_pipe_prod"
          }
        },
        "description": "Pipe for sending Lex conversation logs to Operata [group ID: ${var.operata_group_id}]",
        "enrichment": "${aws_lambda_function.operata_lex_enrichment_lambda_prod.arn}",
        "enrichment_parameters": {
          "input_template": "{\"data\": <$.data>}"
        },
        "log_configuration": {
          "cloudwatch_logs_log_destination": {
            "log_group_arn": "${aws_cloudwatch_log_group.operata_lex_pipe_log_group_prod.arn}"
          },
          "include_execution_data": [
            "ALL"
          ],
          "level": "ERROR"
        },
        "name": "operataLexPipe-Group-${var.operata_group_id}",
        "role_arn": "${aws_iam_role.operata_lex_event_bridge_pipe_role_prod.arn}",
        "source": "${aws_kinesis_stream.operata_lex_conversation_stream_prod.arn}",
        "source_parameters": {
          "kinesis_stream_parameters": {
            "batch_size": 1,
            "maximum_record_age_in_seconds": -1,
            "maximum_retry_attempts": -1,
            "starting_position": "LATEST"
          }
        },
        "target": "${aws_cloudwatch_event_api_destination.operata_lex_api_destination_prod.arn}"
      }
    },
    "aws_secretsmanager_secret": {
      "operata_api_key_secret_prod": {
        "//": {
          "metadata": {
            "path": "CloudCollectorV3Stack/operata_api_key_secret_prod",
            "uniqueId": "operata_api_key_secret_prod"
          }
        },
        "description": "Operata API token for Lex Lambda (redaction config fetch)",
        "name": "/cloud-collector-v3/lex/apiToken-prod"
      },
      "redaction_policy_cache_secret_prod": {
        "//": {
          "metadata": {
            "path": "CloudCollectorV3Stack/redaction_policy_cache_secret_prod",
            "uniqueId": "redaction_policy_cache_secret_prod"
          }
        },
        "description": "Raw redaction policy response from the Operata API; used as a fallback when the API is unavailable",
        "name": "/cloud-collector-v3/lex/redactionPolicyCache-prod"
      }
    },
    "aws_secretsmanager_secret_version": {
      "operata_api_key_secret_version_prod": {
        "//": {
          "metadata": {
            "path": "CloudCollectorV3Stack/operata_api_key_secret_version_prod",
            "uniqueId": "operata_api_key_secret_version_prod"
          }
        },
        "secret_id": "${aws_secretsmanager_secret.operata_api_key_secret_prod.id}",
        "secret_string": "${var.operata_api_key}"
      },
      "redaction_policy_cache_secret_version_prod": {
        "//": {
          "metadata": {
            "path": "CloudCollectorV3Stack/redaction_policy_cache_secret_version_prod",
            "uniqueId": "redaction_policy_cache_secret_version_prod"
          }
        },
        "secret_id": "${aws_secretsmanager_secret.redaction_policy_cache_secret_prod.id}",
        "secret_string": "{}"
      }
    }
  },
  "terraform": {
    "backend": {
      "local": {
        "path": "terraform.CloudCollectorV3Stack.tfstate"
      }
    },
    "required_providers": {
      "aws": {
        "source": "aws",
        "version": "5.100.0"
      }
    }
  },
  "variable": {
    "aws_region": {
      "description": "AWS Region where this stack will be created",
      "type": "string"
    },
    "lex_log_group_name": {
      "description": "The CloudWatch Log Group name where Lex conversation logs are stored.",
      "type": "string"
    },
    "operata_api_key": {
      "description": "API key generated in the Operata console",
      "sensitive": true,
      "type": "string"
    },
    "operata_group_id": {
      "description": "Operata Group ID provided by Operata",
      "type": "string"
    }
  }
}