<?xml version="1.0"?>
<!--
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\AuthorizenetAcceptjs\Gateway\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Magento\AuthorizenetAcceptjs\Gateway\Config::METHOD</argument>
        </arguments>
    </type>
    <virtualType name="AuthorizenetAcceptjsFacade" type="Magento\Payment\Model\Method\Adapter">
        <arguments>
            <argument name="code" xsi:type="string">authorizenet_acceptjs</argument>
            <argument name="formBlockType" xsi:type="string">Magento\AuthorizenetAcceptjs\Block\Form</argument>
            <argument name="infoBlockType" xsi:type="string">AuthorizenetAcceptjsInfoBlock</argument>
            <argument name="valueHandlerPool" xsi:type="object">AuthorizenetAcceptjsValueHandlerPool</argument>
            <argument name="validatorPool" xsi:type="object">AuthorizenetAcceptjsValidatorPool</argument>
            <argument name="commandPool" xsi:type="object">AuthorizenetAcceptjsCommandPool</argument>
        </arguments>
    </virtualType>
    <virtualType name="AuthorizenetAcceptjsCommandPool" type="Magento\Payment\Gateway\Command\CommandPool">
        <arguments>
            <argument name="commands" xsi:type="array">
                <item name="authorize" xsi:type="string">AuthorizenetAcceptjsAuthorizeCommand</item>
                <item name="capture" xsi:type="string">AuthorizenetAcceptjsCaptureCommand</item>
                <item name="sale" xsi:type="string">AuthorizenetAcceptjsSaleCommand</item>
                <item name="settle" xsi:type="string">AuthorizenetAcceptjsSettleCommand</item>
                <item name="void" xsi:type="string">AuthorizenetAcceptjsVoidCommand</item>
                <item name="refund" xsi:type="string">AuthorizenetAcceptjsRefundCommand</item>
                <item name="refund_settled" xsi:type="string">AuthorizenetAcceptjsRefundSettledCommand</item>
                <item name="cancel" xsi:type="string">AuthorizenetAcceptjsCancelCommand</item>
                <item name="accept_payment" xsi:type="string">AuthorizenetAcceptjsAcceptPaymentCommand</item>
                <item name="accept_fds" xsi:type="string">AuthorizenetAcceptjsAcceptFdsCommand</item>
                <item name="deny_payment" xsi:type="string">AuthorizenetAcceptjsCancelCommand</item>
                <item name="get_transaction_details" xsi:type="string">AuthorizenetAcceptjsTransactionDetailsCommand</item>
                <item name="fetch_transaction_information" xsi:type="string">AuthorizenetAcceptjsFetchTransactionInfoCommand</item>
            </argument>
        </arguments>
    </virtualType>

    <!-- Validators -->
    <virtualType name="AuthorizenetAcceptjsAcceptsFdsRequestValidator" type="Magento\Payment\Gateway\Validator\ValidatorComposite">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="general" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Validator\GeneralResponseValidator</item>
            </argument>
        </arguments>
    </virtualType>
    <virtualType name="AuthorizenetAcceptjsTransactionValidator" type="Magento\Payment\Gateway\Validator\ValidatorComposite">
        <arguments>
            <argument name="chainBreakingValidators" xsi:type="array">
                <item name="general" xsi:type="boolean">true</item>
            </argument>
            <argument name="validators" xsi:type="array">
                <item name="general" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Validator\GeneralResponseValidator</item>
                <item name="transaction_status" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Validator\TransactionResponseValidator</item>
                <item name="transaction_hash" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Validator\TransactionHashValidator</item>
            </argument>
        </arguments>
    </virtualType>
    <virtualType name="AuthorizenetAcceptjsTransactionDetailsValidator" type="Magento\Payment\Gateway\Validator\ValidatorComposite">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="general" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Validator\GeneralResponseValidator</item>
            </argument>
        </arguments>
    </virtualType>
    <virtualType name="AuthorizenetAcceptjsCountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">Magento\AuthorizenetAcceptjs\Gateway\Config</argument>
        </arguments>
    </virtualType>
    <virtualType name="AuthorizenetAcceptjsValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">AuthorizenetAcceptjsCountryValidator</item>
            </argument>
        </arguments>
    </virtualType>
    <!-- End Validators -->

    <!-- Gateway Commands -->
    <virtualType name="AuthorizenetAcceptjsFetchTransactionInfoCommand" type="Magento\AuthorizenetAcceptjs\Gateway\Command\FetchTransactionInfoCommand">
        <arguments>
            <argument name="commandPool" xsi:type="object">AuthorizenetAcceptjsCommandPool</argument>
        </arguments>
    </virtualType>
    <virtualType name="AuthorizenetAcceptjsTransactionDetailsCommand" type="Magento\AuthorizenetAcceptjs\Gateway\Command\GatewayQueryCommand">
        <arguments>
            <argument name="requestBuilder" xsi:type="object">AuthorizenetAcceptjsTransactionDetailsRequest</argument>
            <argument name="transferFactory" xsi:type="object">AuthorizenetAcceptjsDefaultTransferFactory</argument>
            <argument name="client" xsi:type="object">Magento\AuthorizenetAcceptjs\Gateway\Http\Client</argument>
            <argument name="validator" xsi:type="object">AuthorizenetAcceptjsTransactionDetailsValidator</argument>
        </arguments>
    </virtualType>
    <virtualType name="AuthorizenetAcceptjsAuthorizeCommand" type="Magento\Payment\Gateway\Command\GatewayCommand">
        <arguments>
            <argument name="requestBuilder" xsi:type="object">AuthorizenetAcceptjsAuthorizeRequest</argument>
            <argument name="transferFactory" xsi:type="object">AuthorizenetAcceptjsDefaultTransferFactory</argument>
            <argument name="client" xsi:type="object">Magento\AuthorizenetAcceptjs\Gateway\Http\Client</argument>
            <argument name="handler" xsi:type="object">AuthorizenetAcceptjsAuthorizationHandler</argument>
            <argument name="validator" xsi:type="object">AuthorizenetAcceptjsTransactionValidator</argument>
            <argument name="errorMessageMapper" xsi:type="object">AuthorizenetAcceptjsVirtualErrorMessageMapper</argument>
        </arguments>
    </virtualType>
    <virtualType name="AuthorizenetAcceptjsAcceptFdsCommand" type="Magento\AuthorizenetAcceptjs\Gateway\Command\GatewayQueryCommand">
        <arguments>
            <argument name="requestBuilder" xsi:type="object">AuthorizenetAcceptjsAcceptsFdsRequest</argument>
            <argument name="transferFactory" xsi:type="object">AuthorizenetAcceptjsDefaultTransferFactory</argument>
            <argument name="client" xsi:type="object">Magento\AuthorizenetAcceptjs\Gateway\Http\Client</argument>
            <argument name="validator" xsi:type="object">AuthorizenetAcceptjsAcceptsFdsRequestValidator</argument>
        </arguments>
    </virtualType>
    <virtualType name="AuthorizenetAcceptjsAcceptPaymentCommand" type="Magento\AuthorizenetAcceptjs\Gateway\Command\AcceptPaymentStrategyCommand">
        <arguments>
            <argument name="commandPool" xsi:type="object">AuthorizenetAcceptjsCommandPool</argument>
        </arguments>
    </virtualType>
    <virtualType name="AuthorizenetAcceptjsSaleCommand" type="AuthorizenetAcceptjsAuthorizeCommand">
        <arguments>
            <argument name="requestBuilder" xsi:type="object">AuthorizenetAcceptjsSaleRequest</argument>
            <argument name="handler" xsi:type="object">AuthorizenetAcceptjsSaleHandler</argument>
        </arguments>
    </virtualType>
    <virtualType name="AuthorizenetAcceptjsRefundCommand" type="Magento\AuthorizenetAcceptjs\Gateway\Command\RefundTransactionStrategyCommand">
        <arguments>
            <argument name="commandPool" xsi:type="object">AuthorizenetAcceptjsCommandPool</argument>
        </arguments>
    </virtualType>
    <virtualType name="AuthorizenetAcceptjsRefundSettledCommand" type="AuthorizenetAcceptjsAuthorizeCommand">
        <arguments>
            <argument name="requestBuilder" xsi:type="object">AuthorizenetAcceptjsRefundRequest</argument>
            <argument name="handler" xsi:type="object">AuthorizenetAcceptjsRefundSettledHandler</argument>
            <argument name="validator" xsi:type="object">AuthorizenetAcceptjsTransactionValidator</argument>
        </arguments>
    </virtualType>
    <virtualType name="AuthorizenetAcceptjsCaptureCommand" type="Magento\AuthorizenetAcceptjs\Gateway\Command\CaptureStrategyCommand">
        <arguments>
            <argument name="commandPool" xsi:type="object">AuthorizenetAcceptjsCommandPool</argument>
        </arguments>
    </virtualType>
    <virtualType name="AuthorizenetAcceptjsSettleCommand" type="AuthorizenetAcceptjsAuthorizeCommand">
        <arguments>
            <argument name="requestBuilder" xsi:type="object">AuthorizenetAcceptjsCaptureRequest</argument>
            <argument name="handler" xsi:type="object">AuthorizenetAcceptjsCaptureTransactionHandler</argument>
            <argument name="validator" xsi:type="object">AuthorizenetAcceptjsTransactionValidator</argument>
        </arguments>
    </virtualType>
    <virtualType name="AuthorizenetAcceptjsVoidCommand" type="Magento\Payment\Gateway\Command\GatewayCommand">
        <arguments>
            <argument name="requestBuilder" xsi:type="object">AuthorizenetAcceptjsVoidRequest</argument>
            <argument name="transferFactory" xsi:type="object">AuthorizenetAcceptjsDefaultTransferFactory</argument>
            <argument name="client" xsi:type="object">Magento\AuthorizenetAcceptjs\Gateway\Http\Client</argument>
            <argument name="handler" xsi:type="object">AuthorizenetAcceptjsVoidHandler</argument>
            <argument name="validator" xsi:type="object">AuthorizenetAcceptjsTransactionValidator</argument>
            <argument name="errorMessageMapper" xsi:type="object">AuthorizenetAcceptjsVirtualErrorMessageMapper</argument>
        </arguments>
    </virtualType>
    <virtualType name="AuthorizenetAcceptjsCancelCommand" type="AuthorizenetAcceptjsVoidCommand">
        <arguments>
            <argument name="handler" xsi:type="object">AuthorizenetAcceptjsCancelHandler</argument>
        </arguments>
    </virtualType>
    <!-- End Gateway Commands -->

    <!-- Handlers -->
    <virtualType name="AuthorizenetAcceptjsPaymentReviewStatusHandler" type="Magento\Payment\Gateway\Response\HandlerChain">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="payment_status" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Response\PaymentReviewStatusHandler</item>
            </argument>
        </arguments>
    </virtualType>
    <virtualType name="AuthorizenetAcceptjsAuthorizationHandler" type="Magento\Payment\Gateway\Response\HandlerChain">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="transaction_id" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Response\TransactionIdHandler</item>
                <item name="payment_details" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Response\PaymentResponseHandler</item>
                <item name="transaction_details" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Response\TransactionDetailsResponseHandler</item>
            </argument>
        </arguments>
    </virtualType>
    <virtualType name="AuthorizenetAcceptjsSaleHandler" type="AuthorizenetAcceptjsAuthorizationHandler">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="close_parent_transaction" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Response\CloseParentTransactionHandler</item>
            </argument>
        </arguments>
    </virtualType>
    <virtualType name="CloseCaptureTransactionHandler" type="Magento\AuthorizenetAcceptjs\Gateway\Response\CloseTransactionHandler">
        <arguments>
            <argument name="closeTransaction" xsi:type="boolean">false</argument>
        </arguments>
    </virtualType>
    <virtualType name="AuthorizenetAcceptjsCaptureTransactionHandler" type="Magento\Payment\Gateway\Response\HandlerChain">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="close_transaction" xsi:type="string">CloseCaptureTransactionHandler</item>
            </argument>
        </arguments>
    </virtualType>
    <virtualType name="AuthorizenetAcceptjsRefundSettledHandler" type="Magento\Payment\Gateway\Response\HandlerChain">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="transaction_id" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Response\TransactionIdHandler</item>
                <item name="close_parent_transaction" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Response\CloseParentTransactionHandler</item>
                <item name="close_transaction" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Response\CloseTransactionHandler</item>
            </argument>
        </arguments>
    </virtualType>
    <virtualType name="AuthorizenetAcceptjsVoidHandler" type="Magento\Payment\Gateway\Response\HandlerChain">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="void" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Response\VoidResponseHandler</item>
            </argument>
        </arguments>
    </virtualType>
    <virtualType name="AuthorizenetAcceptjsCancelHandler" type="Magento\Payment\Gateway\Response\HandlerChain">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="close_transaction" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Response\CloseTransactionHandler</item>
                <item name="close_parent_transaction" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Response\CloseParentTransactionHandler</item>
            </argument>
        </arguments>
    </virtualType>
    <!-- End Handlers -->

    <!-- Request Types -->
    <!-- Be advised that the order of the request parameters is important -->
    <virtualType name="AuthorizenetAcceptjsTransactionDetailsRequest" type="Magento\Payment\Gateway\Request\BuilderComposite">
        <arguments>
            <argument name="builders" xsi:type="array">
                <item name="request_type" xsi:type="string">AuthorizenetAcceptjsTransactionDetailsRequestTypeBuilder</item>
                <item name="store" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\StoreConfigBuilder</item>
                <item name="merchant_account" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\AuthenticationDataBuilder</item>
                <item name="reference_transaction" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\TransactionDetailsDataBuilder</item>
            </argument>
        </arguments>
    </virtualType>
    <virtualType name="AuthorizenetAcceptjsAcceptsFdsRequest" type="Magento\Payment\Gateway\Request\BuilderComposite">
        <arguments>
            <argument name="builders" xsi:type="array">
                <item name="request_type" xsi:type="string">AuthorizenetAcceptjsAcceptsFdsRequestTypeBuilder</item>
                <item name="store" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\StoreConfigBuilder</item>
                <item name="merchant_account" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\AuthenticationDataBuilder</item>
                <item name="reference_transaction" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\AcceptFdsDataBuilder</item>
            </argument>
        </arguments>
    </virtualType>
    <virtualType name="AuthorizenetAcceptjsAuthorizeRequest" type="Magento\Payment\Gateway\Request\BuilderComposite">
        <arguments>
            <argument name="builders" xsi:type="array">
                <item name="request_type" xsi:type="string">AuthorizenetAcceptjsTransactionRequestTypeBuilder</item>
                <item name="store" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\StoreConfigBuilder</item>
                <item name="merchant_account" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\AuthenticationDataBuilder</item>
                <item name="transaction_type" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\AuthorizeDataBuilder</item>
                <item name="amount" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\AmountDataBuilder</item>
                <item name="payment" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\PaymentDataBuilder</item>
                <item name="shipping" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\ShippingDataBuilder</item>
                <item name="solution" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\SolutionDataBuilder</item>
                <item name="order" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\OrderDataBuilder</item>
                <item name="po" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\PoDataBuilder</item>
                <item name="customer" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\CustomerDataBuilder</item>
                <item name="address" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\AddressDataBuilder</item>
                <item name="3d_secure" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\StubDataBuilder</item>
                <item name="custom_settings" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\CustomSettingsBuilder</item>
                <item name="passthrough_data" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\PassthroughDataBuilder</item>
            </argument>
        </arguments>
    </virtualType>
    <virtualType name="AuthorizenetAcceptjsSaleRequest" type="AuthorizenetAcceptjsAuthorizeRequest">
        <arguments>
            <argument name="builders" xsi:type="array">
                <item name="transaction_type" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\SaleDataBuilder</item>
            </argument>
        </arguments>
    </virtualType>
    <virtualType name="AuthorizenetAcceptjsRefundRequest" type="Magento\Payment\Gateway\Request\BuilderComposite">
        <arguments>
            <argument name="builders" xsi:type="array">
                <item name="request_type" xsi:type="string">AuthorizenetAcceptjsTransactionRequestTypeBuilder</item>
                <item name="store" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\StoreConfigBuilder</item>
                <item name="merchant_account" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\AuthenticationDataBuilder</item>
                <item name="transaction_type" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\RefundTransactionTypeDataBuilder</item>
                <item name="amount" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\AmountDataBuilder</item>
                <item name="payment" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\RefundPaymentDataBuilder</item>
                <item name="shipping" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\ShippingDataBuilder</item>
                <item name="ref_transaction" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\RefundReferenceTransactionDataBuilder</item>
                <item name="order" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\OrderDataBuilder</item>
                <item name="po" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\PoDataBuilder</item>
                <item name="customer" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\CustomerDataBuilder</item>
                <item name="address" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\AddressDataBuilder</item>
                <item name="custom_settings" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\CustomSettingsBuilder</item>
                <item name="passthrough_data" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\PassthroughDataBuilder</item>
            </argument>
        </arguments>
    </virtualType>
    <virtualType name="AuthorizenetAcceptjsCaptureRequest" type="Magento\Payment\Gateway\Request\BuilderComposite">
        <arguments>
            <argument name="builders" xsi:type="array">
                <item name="request_type" xsi:type="string">AuthorizenetAcceptjsTransactionRequestTypeBuilder</item>
                <item name="store" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\StoreConfigBuilder</item>
                <item name="merchant_account" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\AuthenticationDataBuilder</item>
                <item name="transaction_type" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\CaptureDataBuilder</item>
                <item name="passthrough_data" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\PassthroughDataBuilder</item>
            </argument>
        </arguments>
    </virtualType>
    <virtualType name="AuthorizenetAcceptjsVoidRequest" type="Magento\Payment\Gateway\Request\BuilderComposite">
        <arguments>
            <argument name="builders" xsi:type="array">
                <item name="request_type" xsi:type="string">AuthorizenetAcceptjsTransactionRequestTypeBuilder</item>
                <item name="store" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\StoreConfigBuilder</item>
                <item name="merchant_account" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\AuthenticationDataBuilder</item>
                <item name="void" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\VoidDataBuilder</item>
                <item name="passthrough_data" xsi:type="string">Magento\AuthorizenetAcceptjs\Gateway\Request\PassthroughDataBuilder</item>
            </argument>
        </arguments>
    </virtualType>
    <!-- End Request Types -->

    <!-- Request Payload Types -->
    <virtualType name="AuthorizenetAcceptjsTransactionRequestTypeBuilder" type="Magento\AuthorizenetAcceptjs\Gateway\Request\RequestTypeBuilder">
        <arguments>
            <argument name="type" xsi:type="string">createTransactionRequest</argument>
        </arguments>
    </virtualType>
    <virtualType name="AuthorizenetAcceptjsTransactionDetailsRequestTypeBuilder" type="Magento\AuthorizenetAcceptjs\Gateway\Request\RequestTypeBuilder">
        <arguments>
            <argument name="type" xsi:type="string">getTransactionDetailsRequest</argument>
        </arguments>
    </virtualType>
    <virtualType name="AuthorizenetAcceptjsAcceptsFdsRequestTypeBuilder" type="Magento\AuthorizenetAcceptjs\Gateway\Request\RequestTypeBuilder">
        <arguments>
            <argument name="type" xsi:type="string">updateHeldTransactionRequest</argument>
        </arguments>
    </virtualType>
    <!-- End Request Payload Types -->

    <!-- Error Mapping -->
    <virtualType name="AuthorizenetAcceptjsErrorMappingConfigReader" type="Magento\Payment\Gateway\ErrorMapper\VirtualConfigReader">
        <arguments>
            <argument name="fileName" xsi:type="string">authorizenet_acceptjs_error_mapping.xml</argument>
        </arguments>
    </virtualType>
    <virtualType name="AuthorizenetAcceptjsErrorMappingData" type="Magento\Payment\Gateway\ErrorMapper\MappingData">
        <arguments>
            <argument name="reader" xsi:type="object">AuthorizenetAcceptjsErrorMappingConfigReader</argument>
            <argument name="cacheId" xsi:type="string">authorizenet_acceptjs_error_mapper</argument>
        </arguments>
    </virtualType>
    <virtualType name="AuthorizenetAcceptjsVirtualErrorMessageMapper" type="Magento\Payment\Gateway\ErrorMapper\ErrorMessageMapper">
        <arguments>
            <argument name="messageMapping" xsi:type="object">AuthorizenetAcceptjsErrorMappingData</argument>
        </arguments>
    </virtualType>
    <!-- End Error Mapping -->

    <type name="Magento\AuthorizenetAcceptjs\Gateway\Command\FetchTransactionInfoCommand">
        <arguments>
            <argument name="handler" xsi:type="object">AuthorizenetAcceptjsPaymentReviewStatusHandler</argument>
        </arguments>
    </type>
    <type name="Magento\Payment\Gateway\Command\CommandManagerPool">
        <arguments>
            <argument name="executors" xsi:type="array">
                <item name="authorizenet_acceptjs" xsi:type="string">AuthorizenetAcceptjsCommandManager</item>
            </argument>
        </arguments>
    </type>
    <type name="Magento\Config\Model\Config\TypePool">
        <arguments>
            <argument name="sensitive" xsi:type="array">
                <item name="payment/authorizenet_acceptjs/login" xsi:type="string">1</item>
                <item name="payment/authorizenet_acceptjs/trans_key" xsi:type="string">1</item>
                <item name="payment/authorizenet_acceptjs/signature_key" xsi:type="string">1</item>
                <item name="payment/authorizenet_acceptjs/trans_md5" xsi:type="string">1</item>
                <item name="payment/authorizenet_acceptjs/api_url" xsi:type="string">1</item>
                <item name="payment/authorizenet_acceptjs/email_customer" xsi:type="string">1</item>
            </argument>
            <argument name="environment" xsi:type="array">
                <item name="payment/authorizenet_acceptjs/api_url" xsi:type="string">1</item>
                <item name="payment/authorizenet_acceptjs/test" xsi:type="string">1</item>
            </argument>
        </arguments>
    </type>
    <virtualType name="AuthorizenetAcceptjsDefaultValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">Magento\AuthorizenetAcceptjs\Gateway\Config</argument>
        </arguments>
    </virtualType>
    <virtualType name="AuthorizenetAcceptjsValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">AuthorizenetAcceptjsDefaultValueHandler</item>
            </argument>
        </arguments>
    </virtualType>
    <virtualType name="AuthorizenetAcceptjsCommandManager" type="Magento\Payment\Gateway\Command\CommandManager">
        <arguments>
            <argument name="commandPool" xsi:type="object">AuthorizenetAcceptjsCommandPool</argument>
        </arguments>
    </virtualType>
    <virtualType name="AuthorizenetAcceptjsLogger" type="Magento\Payment\Model\Method\Logger">
        <arguments>
            <argument name="config" xsi:type="object">Magento\AuthorizenetAcceptjs\Gateway\Config</argument>
        </arguments>
    </virtualType>
    <type name="Magento\AuthorizenetAcceptjs\Gateway\Http\Client">
        <arguments>
            <argument name="paymentLogger" xsi:type="object">AuthorizenetAcceptjsLogger</argument>
        </arguments>
    </type>
    <virtualType name="AuthorizenetAcceptjsRemoveStoreConfigFilter" type="Magento\AuthorizenetAcceptjs\Gateway\Http\Payload\Filter\RemoveFieldsFilter">
        <arguments>
            <argument name="fields" xsi:type="array">
                <item name="0" xsi:type="string">store_id</item>
            </argument>
        </arguments>
    </virtualType>
    <virtualType name="AuthorizenetAcceptjsDefaultTransferFactory" type="Magento\AuthorizenetAcceptjs\Gateway\Http\TransferFactory">
        <arguments>
            <argument name="payloadFilters" xsi:type="array">
                <item name="store_config" xsi:type="object">AuthorizenetAcceptjsRemoveStoreConfigFilter</item>
            </argument>
        </arguments>
    </virtualType>
    <virtualType name="AuthorizenetAcceptjsInfoBlock" type="Magento\AuthorizenetAcceptjs\Block\Info">
        <arguments>
            <argument name="config" xsi:type="object">Magento\AuthorizenetAcceptjs\Gateway\Config</argument>
        </arguments>
    </virtualType>
</config>
