<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>io.mateu.workflow</groupId>
        <artifactId>eventconductor</artifactId>
        <version>2.23.1</version>
        <relativePath>../../pom.xml</relativePath>
    </parent>

    <artifactId>shared</artifactId>
    <packaging>jar</packaging>

    <name>shared</name>
    <url>http://maven.apache.org</url>

    <properties>
        <!-- Coverage floor for this module, just under what it measures today
             (87.9%). Raise it when the module improves; never lower it. -->
        <jacoco.line.minimum>0.85</jacoco.line.minimum>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>6.1.3</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.assertj</groupId>
            <artifactId>assertj-core</artifactId>
            <version>3.27.7</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <!-- MockEnvironment, to test the producer default without booting an application. -->
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
        </dependency>
        <!-- Parsing inbound git webhook payloads (GitHub/GitLab/Bitbucket) to extract the
             pushed repository URL and branch. Version managed by the Spring Boot BOM. -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>

        <!-- The JEXL sandbox lives here, next to ExpressionGuard, because both evaluators need
             it: workflow-engine's step guards and rule-runtime's rule expressions are the same
             untrusted input with the same hazards, and a second copy is a second thing to forget
             to harden. -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-jexl3</artifactId>
            <version>3.7.0</version>
        </dependency>
        <!-- Template syntax (where the ${…} are), shared with the Maven plugin; JDK-only. -->
        <dependency>
            <groupId>io.mateu.workflow</groupId>
            <artifactId>definition-analysis</artifactId>
            <version>2.23.1</version>
        </dependency>
        <!-- Linear-time regex for the =~ operator. See LinearTimeRegexArithmetic: java.util.regex
             backtracks, and a workflow definition is untrusted input. -->
        <dependency>
            <groupId>com.google.re2j</groupId>
            <artifactId>re2j</artifactId>
            <version>1.8</version>
        </dependency>


        <dependency>
            <!-- Optional so the DTOs stay usable without Spring on the classpath: only
                 WorkerReply needs this, and only a worker calls it. Optional dependencies are
                 not transitive, so nothing that merely reads the events picks up the binder. -->
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-stream</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <!-- Optional for the same reason: only SynchronousProducerDefaults needs it, and it
                 is an EnvironmentPostProcessor, so it is loaded by Boot or not at all. -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot</artifactId>
            <optional>true</optional>
        </dependency>
        <!-- Flow authorization has to know who the caller is. Both sources are optional on purpose:
             an app that authenticates its own callers has Spring Security, one behind a gateway has
             the servlet request, and an app with neither simply has no identity to offer — which the
             checks read as "holds nothing" rather than as a failure. -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-core</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>jakarta.servlet</groupId>
            <artifactId>jakarta.servlet-api</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <!-- ManagedSchema, the runner each engine applies its own migrations with. Optional
                 here so a worker or a DTO consumer does not drag Flyway in; the engine modules
                 that actually own a schema declare it themselves. -->
            <groupId>org.flywaydb</groupId>
            <artifactId>flyway-core</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <!-- A real database for ManagedSchemaTest: what it asserts is what Flyway did to the
                 schema, which a mock cannot tell us. -->
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>
