<?xml version="1.0" ?>

<container xmlns="http://symfony.com/schema/dic/services"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">

    <services>
        <service id="Sentry\Options" class="Sentry\Options" public="false" />

        <service id="Sentry\ClientBuilderInterface" class="Sentry\ClientBuilder" public="false">
            <argument type="service" id="Sentry\Options" />
        </service>

        <service id="Sentry\ClientInterface" class="Sentry\Client" public="false">
            <factory service="Sentry\ClientBuilderInterface" method="getClient" />
        </service>

        <service id="Sentry\FlushableClientInterface" alias="Sentry\ClientInterface" public="false"/>

        <service id="Sentry\State\HubInterface" class="Sentry\State\Hub" public="false">
            <factory class="Sentry\SentryBundle\SentryBundle" method="getCurrentHub" />
            <call method="bindClient">
                <argument type="service" id="Sentry\ClientInterface" />
            </call>
        </service>

        <service id="Sentry\SentryBundle\EventListener\ConsoleListener" class="Sentry\SentryBundle\EventListener\ConsoleListener" public="false">
            <argument type="service" id="Sentry\State\HubInterface" />
            <argument type="service" id="security.token_storage" on-invalid="ignore" />
            <argument type="service" id="security.authorization_checker" on-invalid="ignore" />

            <tag name="kernel.event_listener" event="console.command" method="onConsoleCommand" priority="%sentry.listener_priorities.console%" />
        </service>

        <service id="Sentry\SentryBundle\EventListener\ErrorListener" class="Sentry\SentryBundle\EventListener\ErrorListener" public="false">
            <argument type="service" id="Sentry\State\HubInterface" />
            <!-- The following tag is done manually in PHP for BC with Symfony < 4.3,  -->
<!--            <tag name="kernel.event_listener" event="kernel.exception" method="onException" priority="%sentry.listener_priorities.request_error%" />-->
            <tag name="kernel.event_listener" event="console.error" method="onConsoleError" priority="%sentry.listener_priorities.console_error%" />
        </service>

        <service id="Sentry\SentryBundle\EventListener\RequestListener" class="Sentry\SentryBundle\EventListener\RequestListener" public="false">
            <argument type="service" id="Sentry\State\HubInterface" />
            <argument type="service" id="security.token_storage" on-invalid="ignore" />

            <tag name="kernel.event_listener" event="kernel.request" method="onKernelRequest" priority="%sentry.listener_priorities.request%" />
            <tag name="kernel.event_listener" event="kernel.controller" method="onKernelController" priority="%sentry.listener_priorities.request%" />
        </service>

        <service id="Sentry\SentryBundle\EventListener\SubRequestListener" class="Sentry\SentryBundle\EventListener\SubRequestListener" public="false">
            <tag name="kernel.event_listener" event="kernel.request" method="onKernelRequest" priority="%sentry.listener_priorities.sub_request%" />
            <tag name="kernel.event_listener" event="kernel.finish_request" method="onKernelFinishRequest" priority="%sentry.listener_priorities.sub_request%" />
        </service>

        <service id="Sentry\SentryBundle\EventListener\MessengerListener" class="Sentry\SentryBundle\EventListener\MessengerListener" public="false">
            <argument type="service" id="Sentry\State\HubInterface" />
            <tag name="kernel.event_listener" event="Symfony\Component\Messenger\Event\WorkerMessageFailedEvent" method="onWorkerMessageFailed" priority="%sentry.listener_priorities.worker_error%" />
            <tag name="kernel.event_listener" event="Symfony\Component\Messenger\Event\WorkerMessageHandledEvent" method="onWorkerMessageHandled" priority="%sentry.listener_priorities.worker_error%" />
        </service>

        <service id="Sentry\SentryBundle\Command\SentryTestCommand" class="Sentry\SentryBundle\Command\SentryTestCommand" public="false">
            <tag name="console.command" />
        </service>

        <service id="Sentry\Monolog\Handler" class="Sentry\Monolog\Handler" public="false">
            <argument type="service" id="Sentry\State\HubInterface" />
            <argument key="$level" />
            <argument key="$bubble" />
        </service>
    </services>
</container>
