lib/lithic/models/three_ds/authentication_retrieve_response.rb



# frozen_string_literal: true

module Lithic
  module Models
    module ThreeDS
      # @see Lithic::Resources::ThreeDS::Authentication#retrieve
      class AuthenticationRetrieveResponse < Lithic::Internal::Type::BaseModel
        # @!attribute token
        #   Globally unique identifier for the 3DS authentication.
        #
        #   @return [String]
        required :token, String

        # @!attribute account_type
        #   Type of account/card that is being used for the transaction. Maps to EMV 3DS
        #   field `acctType`.
        #
        #   @return [Symbol, Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::AccountType, nil]
        required :account_type,
                 enum: -> { Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::AccountType },
                 nil?: true

        # @!attribute authentication_result
        #   Indicates the outcome of the 3DS authentication process.
        #
        #   @return [Symbol, Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::AuthenticationResult]
        required :authentication_result,
                 enum: -> { Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::AuthenticationResult }

        # @!attribute card_expiry_check
        #   Indicates whether the expiration date provided by the cardholder during checkout
        #   matches Lithic's record of the card's expiration date.
        #
        #   @return [Symbol, Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::CardExpiryCheck]
        required :card_expiry_check,
                 enum: -> { Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::CardExpiryCheck }

        # @!attribute card_token
        #   Globally unique identifier for the card on which the 3DS authentication has
        #   occurred.
        #
        #   @return [String]
        required :card_token, String

        # @!attribute cardholder
        #   Object containing data about the cardholder provided during the transaction.
        #
        #   @return [Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Cardholder]
        required :cardholder, -> { Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Cardholder }

        # @!attribute channel
        #   Channel in which the authentication occurs. Maps to EMV 3DS field deviceChannel.
        #
        #   @return [Symbol, Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Channel]
        required :channel, enum: -> { Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Channel }

        # @!attribute created
        #   Date and time when the authentication was created in Lithic's system.
        #
        #   @return [Time]
        required :created, Time

        # @!attribute merchant
        #   Object containing data about the merchant involved in the e-commerce
        #   transaction.
        #
        #   @return [Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Merchant]
        required :merchant, -> { Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Merchant }

        # @!attribute message_category
        #   Either PAYMENT_AUTHENTICATION or NON_PAYMENT_AUTHENTICATION. For
        #   NON_PAYMENT_AUTHENTICATION, additional_data and transaction fields are not
        #   populated.
        #
        #   @return [Symbol, Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::MessageCategory]
        required :message_category,
                 enum: -> { Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::MessageCategory }

        # @!attribute three_ds_requestor_challenge_indicator
        #   Indicates whether a challenge is requested for this transaction
        #
        #   - `NO_PREFERENCE` - No Preference
        #   - `NO_CHALLENGE_REQUESTED` - No Challenge Requested
        #   - `CHALLENGE_PREFERENCE` - Challenge requested (3DS Requestor preference)
        #   - `CHALLENGE_MANDATE` - Challenge requested (Mandate)
        #   - `NO_CHALLENGE_RISK_ALREADY_ASSESSED` - No Challenge requested (Transactional
        #     risk analysis is already performed)
        #   - `DATA_SHARE_ONLY` - No Challenge requested (Data Share Only)
        #   - `OTHER` - Other indicators not captured by above. These are rarely used
        #
        #   @return [Symbol, Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::ThreeDSRequestorChallengeIndicator]
        required :three_ds_requestor_challenge_indicator,
                 enum: -> { Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::ThreeDSRequestorChallengeIndicator }

        # @!attribute additional_data
        #   Object containing additional data about the 3DS request that is beyond the EMV
        #   3DS standard spec (e.g., specific fields that only certain card networks send
        #   but are not required across all 3DS requests).
        #
        #   @return [Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::AdditionalData, nil]
        optional :additional_data,
                 -> { Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::AdditionalData },
                 nil?: true

        # @!attribute app
        #   Object containing data about the app used in the e-commerce transaction. Present
        #   if the channel is 'APP_BASED'.
        #
        #   @return [Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::App, nil]
        optional :app, -> { Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::App }

        # @!attribute authentication_request_type
        #   Type of authentication request - i.e., the type of transaction or interaction is
        #   causing the merchant to request an authentication. Maps to EMV 3DS field
        #   threeDSRequestorAuthenticationInd.
        #
        #   @return [Symbol, Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::AuthenticationRequestType, nil]
        optional :authentication_request_type,
                 enum: -> { Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::AuthenticationRequestType },
                 nil?: true

        # @!attribute browser
        #   Object containing data about the browser used in the e-commerce transaction.
        #   Present if the channel is 'BROWSER'.
        #
        #   @return [Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Browser, nil]
        optional :browser, -> { Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Browser }

        # @!attribute challenge_metadata
        #   Metadata about the challenge method and delivery.
        #
        #   @return [Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::ChallengeMetadata, nil]
        optional :challenge_metadata,
                 -> { Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::ChallengeMetadata },
                 nil?: true

        # @!attribute challenge_orchestrated_by
        #   Entity that orchestrates the challenge.
        #
        #   @return [Symbol, Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::ChallengeOrchestratedBy, nil]
        optional :challenge_orchestrated_by,
                 enum: -> { Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::ChallengeOrchestratedBy },
                 nil?: true

        # @!attribute decision_made_by
        #   Entity that made the authentication decision.
        #
        #   @return [Symbol, Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::DecisionMadeBy, nil]
        optional :decision_made_by,
                 enum: -> { Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::DecisionMadeBy },
                 nil?: true

        # @!attribute three_ri_request_type
        #   Type of 3DS Requestor Initiated (3RI) request i.e., a 3DS authentication that
        #   takes place at the initiation of the merchant rather than the cardholder. The
        #   most common example of this is where a merchant is authenticating before billing
        #   for a recurring transaction such as a pay TV subscription or a utility bill.
        #   Maps to EMV 3DS field threeRIInd.
        #
        #   @return [Symbol, Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::ThreeRiRequestType, nil]
        optional :three_ri_request_type,
                 enum: -> { Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::ThreeRiRequestType },
                 nil?: true

        # @!attribute transaction
        #   Object containing data about the e-commerce transaction for which the merchant
        #   is requesting authentication.
        #
        #   @return [Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Transaction, nil]
        optional :transaction,
                 -> { Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Transaction },
                 nil?: true

        # @!method initialize(token:, account_type:, authentication_result:, card_expiry_check:, card_token:, cardholder:, channel:, created:, merchant:, message_category:, three_ds_requestor_challenge_indicator:, additional_data: nil, app: nil, authentication_request_type: nil, browser: nil, challenge_metadata: nil, challenge_orchestrated_by: nil, decision_made_by: nil, three_ri_request_type: nil, transaction: nil)
        #   Some parameter documentations has been truncated, see
        #   {Lithic::Models::ThreeDS::AuthenticationRetrieveResponse} for more details.
        #
        #   @param token [String] Globally unique identifier for the 3DS authentication.
        #
        #   @param account_type [Symbol, Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::AccountType, nil] Type of account/card that is being used for the transaction. Maps to EMV 3DS fie
        #
        #   @param authentication_result [Symbol, Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::AuthenticationResult] Indicates the outcome of the 3DS authentication process.
        #
        #   @param card_expiry_check [Symbol, Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::CardExpiryCheck] Indicates whether the expiration date provided by the cardholder during checkout
        #
        #   @param card_token [String] Globally unique identifier for the card on which the 3DS authentication has occu
        #
        #   @param cardholder [Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Cardholder] Object containing data about the cardholder provided during the transaction.
        #
        #   @param channel [Symbol, Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Channel] Channel in which the authentication occurs. Maps to EMV 3DS field deviceChannel.
        #
        #   @param created [Time] Date and time when the authentication was created in Lithic's system.
        #
        #   @param merchant [Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Merchant] Object containing data about the merchant involved in the e-commerce transaction
        #
        #   @param message_category [Symbol, Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::MessageCategory] Either PAYMENT_AUTHENTICATION or NON_PAYMENT_AUTHENTICATION. For NON_PAYMENT_AU
        #
        #   @param three_ds_requestor_challenge_indicator [Symbol, Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::ThreeDSRequestorChallengeIndicator] Indicates whether a challenge is requested for this transaction
        #
        #   @param additional_data [Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::AdditionalData, nil] Object containing additional data about the 3DS request that is beyond the EMV 3
        #
        #   @param app [Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::App] Object containing data about the app used in the e-commerce transaction. Present
        #
        #   @param authentication_request_type [Symbol, Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::AuthenticationRequestType, nil] Type of authentication request - i.e., the type of transaction or interaction is
        #
        #   @param browser [Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Browser] Object containing data about the browser used in the e-commerce transaction. Pre
        #
        #   @param challenge_metadata [Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::ChallengeMetadata, nil] Metadata about the challenge method and delivery.
        #
        #   @param challenge_orchestrated_by [Symbol, Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::ChallengeOrchestratedBy, nil] Entity that orchestrates the challenge.
        #
        #   @param decision_made_by [Symbol, Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::DecisionMadeBy, nil] Entity that made the authentication decision.
        #
        #   @param three_ri_request_type [Symbol, Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::ThreeRiRequestType, nil] Type of 3DS Requestor Initiated (3RI) request i.e., a 3DS authentication that ta
        #
        #   @param transaction [Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Transaction, nil] Object containing data about the e-commerce transaction for which the merchant i

        # Type of account/card that is being used for the transaction. Maps to EMV 3DS
        # field `acctType`.
        #
        # @see Lithic::Models::ThreeDS::AuthenticationRetrieveResponse#account_type
        module AccountType
          extend Lithic::Internal::Type::Enum

          CREDIT = :CREDIT
          DEBIT = :DEBIT
          NOT_APPLICABLE = :NOT_APPLICABLE

          # @!method self.values
          #   @return [Array<Symbol>]
        end

        # Indicates the outcome of the 3DS authentication process.
        #
        # @see Lithic::Models::ThreeDS::AuthenticationRetrieveResponse#authentication_result
        module AuthenticationResult
          extend Lithic::Internal::Type::Enum

          DECLINE = :DECLINE
          SUCCESS = :SUCCESS
          PENDING_CHALLENGE = :PENDING_CHALLENGE
          PENDING_DECISION = :PENDING_DECISION

          # @!method self.values
          #   @return [Array<Symbol>]
        end

        # Indicates whether the expiration date provided by the cardholder during checkout
        # matches Lithic's record of the card's expiration date.
        #
        # @see Lithic::Models::ThreeDS::AuthenticationRetrieveResponse#card_expiry_check
        module CardExpiryCheck
          extend Lithic::Internal::Type::Enum

          MATCH = :MATCH
          MISMATCH = :MISMATCH
          NOT_PRESENT = :NOT_PRESENT

          # @!method self.values
          #   @return [Array<Symbol>]
        end

        # @see Lithic::Models::ThreeDS::AuthenticationRetrieveResponse#cardholder
        class Cardholder < Lithic::Internal::Type::BaseModel
          # @!attribute address_match
          #   Indicates whether the shipping address and billing address provided by the
          #   cardholder are the same. This value - and assessment of whether the addresses
          #   match - is provided directly in the 3DS request and is not determined by Lithic.
          #   Maps to EMV 3DS field addrMatch.
          #
          #   @return [Boolean, nil]
          optional :address_match, Lithic::Internal::Type::Boolean, nil?: true

          # @!attribute billing_address
          #   Object containing data on the billing address provided during the transaction.
          #
          #   @return [Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Cardholder::BillingAddress, nil]
          optional :billing_address,
                   -> { Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Cardholder::BillingAddress }

          # @!attribute email
          #   Email address that is either provided by the cardholder or is on file with the
          #   merchant in a 3RI request. Maps to EMV 3DS field email.
          #
          #   @return [String, nil]
          optional :email, String, nil?: true

          # @!attribute name
          #   Name of the cardholder. Maps to EMV 3DS field cardholderName.
          #
          #   @return [String, nil]
          optional :name, String, nil?: true

          # @!attribute phone_number_home
          #   Home phone number provided by the cardholder. Maps to EMV 3DS fields
          #   homePhone.cc and homePhone.subscriber.
          #
          #   @return [String, nil]
          optional :phone_number_home, String, nil?: true

          # @!attribute phone_number_mobile
          #   Mobile/cell phone number provided by the cardholder. Maps to EMV 3DS fields
          #   mobilePhone.cc and mobilePhone.subscriber.
          #
          #   @return [String, nil]
          optional :phone_number_mobile, String, nil?: true

          # @!attribute phone_number_work
          #   Work phone number provided by the cardholder. Maps to EMV 3DS fields
          #   workPhone.cc and workPhone.subscriber.
          #
          #   @return [String, nil]
          optional :phone_number_work, String, nil?: true

          # @!attribute shipping_address
          #   Object containing data on the shipping address provided during the transaction.
          #
          #   @return [Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Cardholder::ShippingAddress, nil]
          optional :shipping_address,
                   -> { Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Cardholder::ShippingAddress }

          # @!method initialize(address_match: nil, billing_address: nil, email: nil, name: nil, phone_number_home: nil, phone_number_mobile: nil, phone_number_work: nil, shipping_address: nil)
          #   Some parameter documentations has been truncated, see
          #   {Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Cardholder} for more
          #   details.
          #
          #   Object containing data about the cardholder provided during the transaction.
          #
          #   @param address_match [Boolean, nil] Indicates whether the shipping address and billing address provided by the cardh
          #
          #   @param billing_address [Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Cardholder::BillingAddress] Object containing data on the billing address provided during the transaction.
          #
          #   @param email [String, nil] Email address that is either provided by the cardholder or is on file with the m
          #
          #   @param name [String, nil] Name of the cardholder. Maps to EMV 3DS field cardholderName.
          #
          #   @param phone_number_home [String, nil] Home phone number provided by the cardholder. Maps to EMV 3DS fields homePhone.c
          #
          #   @param phone_number_mobile [String, nil] Mobile/cell phone number provided by the cardholder. Maps to EMV 3DS fields mobi
          #
          #   @param phone_number_work [String, nil] Work phone number provided by the cardholder. Maps to EMV 3DS fields workPhone.c
          #
          #   @param shipping_address [Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Cardholder::ShippingAddress] Object containing data on the shipping address provided during the transaction.

          # @see Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Cardholder#billing_address
          class BillingAddress < Lithic::Internal::Type::BaseModel
            # @!attribute address1
            #   First line of the street address provided by the cardholder.
            #
            #   @return [String, nil]
            optional :address1, String, nil?: true

            # @!attribute address2
            #   Second line of the street address provided by the cardholder.
            #
            #   @return [String, nil]
            optional :address2, String, nil?: true

            # @!attribute address3
            #   Third line of the street address provided by the cardholder.
            #
            #   @return [String, nil]
            optional :address3, String, nil?: true

            # @!attribute city
            #   City of the address provided by the cardholder.
            #
            #   @return [String, nil]
            optional :city, String, nil?: true

            # @!attribute country
            #   Country of the address provided by the cardholder in ISO 3166-1 alpha-3 format
            #   (e.g. USA)
            #
            #   @return [String, nil]
            optional :country, String, nil?: true

            # @!attribute postal_code
            #   Postal code (e.g., ZIP code) of the address provided by the cardholder
            #
            #   @return [String, nil]
            optional :postal_code, String, nil?: true

            # @!method initialize(address1: nil, address2: nil, address3: nil, city: nil, country: nil, postal_code: nil)
            #   Some parameter documentations has been truncated, see
            #   {Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Cardholder::BillingAddress}
            #   for more details.
            #
            #   Object containing data on the billing address provided during the transaction.
            #
            #   @param address1 [String, nil] First line of the street address provided by the cardholder.
            #
            #   @param address2 [String, nil] Second line of the street address provided by the cardholder.
            #
            #   @param address3 [String, nil] Third line of the street address provided by the cardholder.
            #
            #   @param city [String, nil] City of the address provided by the cardholder.
            #
            #   @param country [String, nil] Country of the address provided by the cardholder in ISO 3166-1 alpha-3 format (
            #
            #   @param postal_code [String, nil] Postal code (e.g., ZIP code) of the address provided by the cardholder
          end

          # @see Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Cardholder#shipping_address
          class ShippingAddress < Lithic::Internal::Type::BaseModel
            # @!attribute address1
            #   First line of the street address provided by the cardholder.
            #
            #   @return [String, nil]
            optional :address1, String, nil?: true

            # @!attribute address2
            #   Second line of the street address provided by the cardholder.
            #
            #   @return [String, nil]
            optional :address2, String, nil?: true

            # @!attribute address3
            #   Third line of the street address provided by the cardholder.
            #
            #   @return [String, nil]
            optional :address3, String, nil?: true

            # @!attribute city
            #   City of the address provided by the cardholder.
            #
            #   @return [String, nil]
            optional :city, String, nil?: true

            # @!attribute country
            #   Country of the address provided by the cardholder in ISO 3166-1 alpha-3 format
            #   (e.g. USA)
            #
            #   @return [String, nil]
            optional :country, String, nil?: true

            # @!attribute postal_code
            #   Postal code (e.g., ZIP code) of the address provided by the cardholder
            #
            #   @return [String, nil]
            optional :postal_code, String, nil?: true

            # @!method initialize(address1: nil, address2: nil, address3: nil, city: nil, country: nil, postal_code: nil)
            #   Some parameter documentations has been truncated, see
            #   {Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Cardholder::ShippingAddress}
            #   for more details.
            #
            #   Object containing data on the shipping address provided during the transaction.
            #
            #   @param address1 [String, nil] First line of the street address provided by the cardholder.
            #
            #   @param address2 [String, nil] Second line of the street address provided by the cardholder.
            #
            #   @param address3 [String, nil] Third line of the street address provided by the cardholder.
            #
            #   @param city [String, nil] City of the address provided by the cardholder.
            #
            #   @param country [String, nil] Country of the address provided by the cardholder in ISO 3166-1 alpha-3 format (
            #
            #   @param postal_code [String, nil] Postal code (e.g., ZIP code) of the address provided by the cardholder
          end
        end

        # Channel in which the authentication occurs. Maps to EMV 3DS field deviceChannel.
        #
        # @see Lithic::Models::ThreeDS::AuthenticationRetrieveResponse#channel
        module Channel
          extend Lithic::Internal::Type::Enum

          APP_BASED = :APP_BASED
          BROWSER = :BROWSER
          THREE_DS_REQUESTOR_INITIATED = :THREE_DS_REQUESTOR_INITIATED

          # @!method self.values
          #   @return [Array<Symbol>]
        end

        # @see Lithic::Models::ThreeDS::AuthenticationRetrieveResponse#merchant
        class Merchant < Lithic::Internal::Type::BaseModel
          # @!attribute id
          #   Merchant identifier as assigned by the acquirer. Maps to EMV 3DS field
          #   acquirerMerchantId.
          #
          #   @return [String]
          required :id, String

          # @!attribute country
          #   Country code of the merchant requesting 3DS authentication. Maps to EMV 3DS
          #   field merchantCountryCode.
          #
          #   @return [String]
          required :country, String

          # @!attribute mcc
          #   Merchant category code assigned to the merchant that describes its business
          #   activity type. Maps to EMV 3DS field mcc.
          #
          #   @return [String]
          required :mcc, String

          # @!attribute name
          #   Name of the merchant. Maps to EMV 3DS field merchantName.
          #
          #   @return [String]
          required :name, String

          # @!attribute risk_indicator
          #   Object containing additional data indicating additional risk factors related to
          #   the e-commerce transaction.
          #
          #   @return [Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Merchant::RiskIndicator]
          required :risk_indicator,
                   -> { Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Merchant::RiskIndicator }

          # @!method initialize(id:, country:, mcc:, name:, risk_indicator:)
          #   Some parameter documentations has been truncated, see
          #   {Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Merchant} for more
          #   details.
          #
          #   Object containing data about the merchant involved in the e-commerce
          #   transaction.
          #
          #   @param id [String] Merchant identifier as assigned by the acquirer. Maps to EMV 3DS field acquirerM
          #
          #   @param country [String] Country code of the merchant requesting 3DS authentication. Maps to EMV 3DS fiel
          #
          #   @param mcc [String] Merchant category code assigned to the merchant that describes its business acti
          #
          #   @param name [String] Name of the merchant. Maps to EMV 3DS field merchantName.
          #
          #   @param risk_indicator [Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Merchant::RiskIndicator] Object containing additional data indicating additional risk factors related to

          # @see Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Merchant#risk_indicator
          class RiskIndicator < Lithic::Internal::Type::BaseModel
            # @!attribute delivery_email_address
            #   In transactions with electronic delivery, email address to which merchandise is
            #   delivered. Maps to EMV 3DS field deliveryEmailAddress.
            #
            #   @return [String, nil]
            optional :delivery_email_address, String, nil?: true

            # @!attribute delivery_time_frame
            #   The delivery time frame for the merchandise. Maps to EMV 3DS field
            #   deliveryTimeframe.
            #
            #   @return [Symbol, Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Merchant::RiskIndicator::DeliveryTimeFrame, nil]
            optional :delivery_time_frame,
                     enum: -> { Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Merchant::RiskIndicator::DeliveryTimeFrame },
                     nil?: true

            # @!attribute gift_card_amount
            #   In prepaid or gift card purchase transactions, purchase amount total in major
            #   units (e.g., a purchase of USD $205.10 would be 205). Maps to EMV 3DS field
            #   giftCardAmount.
            #
            #   @return [Integer, nil]
            optional :gift_card_amount, Integer, nil?: true

            # @!attribute gift_card_count
            #   In prepaid or gift card purchase transactions, count of individual prepaid or
            #   gift cards/codes purchased. Maps to EMV 3DS field giftCardCount.
            #
            #   @return [Integer, nil]
            optional :gift_card_count, Integer, nil?: true

            # @!attribute gift_card_currency
            #   In prepaid or gift card purchase transactions, currency code of the gift card.
            #   Maps to EMV 3DS field giftCardCurr.
            #
            #   @return [String, nil]
            optional :gift_card_currency, String, nil?: true

            # @!attribute order_availability
            #   Indicates whether the purchase is for merchandise that is available now or at a
            #   future date. Maps to EMV 3DS field preOrderPurchaseInd.
            #
            #   @return [Symbol, Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Merchant::RiskIndicator::OrderAvailability, nil]
            optional :order_availability,
                     enum: -> { Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Merchant::RiskIndicator::OrderAvailability },
                     nil?: true

            # @!attribute pre_order_available_date
            #   In pre-order purchase transactions, the expected date that the merchandise will
            #   be available. Maps to EMV 3DS field preOrderDate.
            #
            #   @return [Time, nil]
            optional :pre_order_available_date, Time, nil?: true

            # @!attribute reorder_items
            #   Indicates whether the cardholder is reordering previously purchased merchandise.
            #   Maps to EMV 3DS field reorderItemsInd.
            #
            #   @return [Symbol, Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Merchant::RiskIndicator::ReorderItems, nil]
            optional :reorder_items,
                     enum: -> { Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Merchant::RiskIndicator::ReorderItems },
                     nil?: true

            # @!attribute shipping_method
            #   Shipping method that the cardholder chose for the transaction. If purchase
            #   includes one or more item, this indicator is used for the physical goods; if the
            #   purchase only includes digital goods, this indicator is used to describe the
            #   most expensive item purchased. Maps to EMV 3DS field shipIndicator.
            #
            #   @return [Symbol, Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Merchant::RiskIndicator::ShippingMethod, nil]
            optional :shipping_method,
                     enum: -> { Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Merchant::RiskIndicator::ShippingMethod },
                     nil?: true

            # @!method initialize(delivery_email_address: nil, delivery_time_frame: nil, gift_card_amount: nil, gift_card_count: nil, gift_card_currency: nil, order_availability: nil, pre_order_available_date: nil, reorder_items: nil, shipping_method: nil)
            #   Some parameter documentations has been truncated, see
            #   {Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Merchant::RiskIndicator}
            #   for more details.
            #
            #   Object containing additional data indicating additional risk factors related to
            #   the e-commerce transaction.
            #
            #   @param delivery_email_address [String, nil] In transactions with electronic delivery, email address to which merchandise is
            #
            #   @param delivery_time_frame [Symbol, Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Merchant::RiskIndicator::DeliveryTimeFrame, nil] The delivery time frame for the merchandise. Maps to EMV 3DS field deliveryTimef
            #
            #   @param gift_card_amount [Integer, nil] In prepaid or gift card purchase transactions, purchase amount total in major un
            #
            #   @param gift_card_count [Integer, nil] In prepaid or gift card purchase transactions, count of individual prepaid or gi
            #
            #   @param gift_card_currency [String, nil] In prepaid or gift card purchase transactions, currency code of the gift card. M
            #
            #   @param order_availability [Symbol, Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Merchant::RiskIndicator::OrderAvailability, nil] Indicates whether the purchase is for merchandise that is available now or at a
            #
            #   @param pre_order_available_date [Time, nil] In pre-order purchase transactions, the expected date that the merchandise will
            #
            #   @param reorder_items [Symbol, Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Merchant::RiskIndicator::ReorderItems, nil] Indicates whether the cardholder is reordering previously purchased merchandise.
            #
            #   @param shipping_method [Symbol, Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Merchant::RiskIndicator::ShippingMethod, nil] Shipping method that the cardholder chose for the transaction. If purchase inclu

            # The delivery time frame for the merchandise. Maps to EMV 3DS field
            # deliveryTimeframe.
            #
            # @see Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Merchant::RiskIndicator#delivery_time_frame
            module DeliveryTimeFrame
              extend Lithic::Internal::Type::Enum

              ELECTRONIC_DELIVERY = :ELECTRONIC_DELIVERY
              OVERNIGHT_SHIPPING = :OVERNIGHT_SHIPPING
              SAME_DAY_SHIPPING = :SAME_DAY_SHIPPING
              TWO_DAY_OR_MORE_SHIPPING = :TWO_DAY_OR_MORE_SHIPPING

              # @!method self.values
              #   @return [Array<Symbol>]
            end

            # Indicates whether the purchase is for merchandise that is available now or at a
            # future date. Maps to EMV 3DS field preOrderPurchaseInd.
            #
            # @see Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Merchant::RiskIndicator#order_availability
            module OrderAvailability
              extend Lithic::Internal::Type::Enum

              FUTURE_AVAILABILITY = :FUTURE_AVAILABILITY
              MERCHANDISE_AVAILABLE = :MERCHANDISE_AVAILABLE

              # @!method self.values
              #   @return [Array<Symbol>]
            end

            # Indicates whether the cardholder is reordering previously purchased merchandise.
            # Maps to EMV 3DS field reorderItemsInd.
            #
            # @see Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Merchant::RiskIndicator#reorder_items
            module ReorderItems
              extend Lithic::Internal::Type::Enum

              FIRST_TIME_ORDERED = :FIRST_TIME_ORDERED
              REORDERED = :REORDERED

              # @!method self.values
              #   @return [Array<Symbol>]
            end

            # Shipping method that the cardholder chose for the transaction. If purchase
            # includes one or more item, this indicator is used for the physical goods; if the
            # purchase only includes digital goods, this indicator is used to describe the
            # most expensive item purchased. Maps to EMV 3DS field shipIndicator.
            #
            # @see Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Merchant::RiskIndicator#shipping_method
            module ShippingMethod
              extend Lithic::Internal::Type::Enum

              DIGITAL_GOODS = :DIGITAL_GOODS
              LOCKER_DELIVERY = :LOCKER_DELIVERY
              OTHER = :OTHER
              PICK_UP_AND_GO_DELIVERY = :PICK_UP_AND_GO_DELIVERY
              SHIP_TO_BILLING_ADDRESS = :SHIP_TO_BILLING_ADDRESS
              SHIP_TO_NON_BILLING_ADDRESS = :SHIP_TO_NON_BILLING_ADDRESS
              SHIP_TO_OTHER_VERIFIED_ADDRESS = :SHIP_TO_OTHER_VERIFIED_ADDRESS
              SHIP_TO_STORE = :SHIP_TO_STORE
              TRAVEL_AND_EVENT_TICKETS = :TRAVEL_AND_EVENT_TICKETS

              # @!method self.values
              #   @return [Array<Symbol>]
            end
          end
        end

        # Either PAYMENT_AUTHENTICATION or NON_PAYMENT_AUTHENTICATION. For
        # NON_PAYMENT_AUTHENTICATION, additional_data and transaction fields are not
        # populated.
        #
        # @see Lithic::Models::ThreeDS::AuthenticationRetrieveResponse#message_category
        module MessageCategory
          extend Lithic::Internal::Type::Enum

          NON_PAYMENT_AUTHENTICATION = :NON_PAYMENT_AUTHENTICATION
          PAYMENT_AUTHENTICATION = :PAYMENT_AUTHENTICATION

          # @!method self.values
          #   @return [Array<Symbol>]
        end

        # Indicates whether a challenge is requested for this transaction
        #
        # - `NO_PREFERENCE` - No Preference
        # - `NO_CHALLENGE_REQUESTED` - No Challenge Requested
        # - `CHALLENGE_PREFERENCE` - Challenge requested (3DS Requestor preference)
        # - `CHALLENGE_MANDATE` - Challenge requested (Mandate)
        # - `NO_CHALLENGE_RISK_ALREADY_ASSESSED` - No Challenge requested (Transactional
        #   risk analysis is already performed)
        # - `DATA_SHARE_ONLY` - No Challenge requested (Data Share Only)
        # - `OTHER` - Other indicators not captured by above. These are rarely used
        #
        # @see Lithic::Models::ThreeDS::AuthenticationRetrieveResponse#three_ds_requestor_challenge_indicator
        module ThreeDSRequestorChallengeIndicator
          extend Lithic::Internal::Type::Enum

          NO_PREFERENCE = :NO_PREFERENCE
          NO_CHALLENGE_REQUESTED = :NO_CHALLENGE_REQUESTED
          CHALLENGE_PREFERENCE = :CHALLENGE_PREFERENCE
          CHALLENGE_MANDATE = :CHALLENGE_MANDATE
          NO_CHALLENGE_RISK_ALREADY_ASSESSED = :NO_CHALLENGE_RISK_ALREADY_ASSESSED
          DATA_SHARE_ONLY = :DATA_SHARE_ONLY
          OTHER = :OTHER

          # @!method self.values
          #   @return [Array<Symbol>]
        end

        # @see Lithic::Models::ThreeDS::AuthenticationRetrieveResponse#additional_data
        class AdditionalData < Lithic::Internal::Type::BaseModel
          # @!attribute network_decision
          #   Mastercard only: Indicates whether the network would have considered the
          #   authentication request to be low risk or not.
          #
          #   @return [Symbol, Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::AdditionalData::NetworkDecision, nil]
          optional :network_decision,
                   enum: -> { Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::AdditionalData::NetworkDecision },
                   nil?: true

          # @!attribute network_risk_score
          #   Mastercard only: Assessment by the network of the authentication risk level,
          #   with a higher value indicating a higher amount of risk.
          #
          #   @return [Integer, nil]
          optional :network_risk_score, Integer, nil?: true

          # @!method initialize(network_decision: nil, network_risk_score: nil)
          #   Some parameter documentations has been truncated, see
          #   {Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::AdditionalData} for
          #   more details.
          #
          #   Object containing additional data about the 3DS request that is beyond the EMV
          #   3DS standard spec (e.g., specific fields that only certain card networks send
          #   but are not required across all 3DS requests).
          #
          #   @param network_decision [Symbol, Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::AdditionalData::NetworkDecision, nil] Mastercard only: Indicates whether the network would have considered the authent
          #
          #   @param network_risk_score [Integer, nil] Mastercard only: Assessment by the network of the authentication risk level, wit

          # Mastercard only: Indicates whether the network would have considered the
          # authentication request to be low risk or not.
          #
          # @see Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::AdditionalData#network_decision
          module NetworkDecision
            extend Lithic::Internal::Type::Enum

            LOW_RISK = :LOW_RISK
            NOT_LOW_RISK = :NOT_LOW_RISK

            # @!method self.values
            #   @return [Array<Symbol>]
          end
        end

        # @see Lithic::Models::ThreeDS::AuthenticationRetrieveResponse#app
        class App < Lithic::Internal::Type::BaseModel
          # @!attribute device_info
          #   Device information gathered from the cardholder's device - JSON name/value pairs
          #   that is Base64url encoded. Maps to EMV 3DS field deviceInfo.
          #
          #   @return [String, nil]
          optional :device_info, String, nil?: true

          # @!attribute ip
          #   External IP address used by the app generating the 3DS authentication request.
          #   Maps to EMV 3DS field appIp.
          #
          #   @return [String, nil]
          optional :ip, String

          # @!method initialize(device_info: nil, ip: nil)
          #   Some parameter documentations has been truncated, see
          #   {Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::App} for more details.
          #
          #   Object containing data about the app used in the e-commerce transaction. Present
          #   if the channel is 'APP_BASED'.
          #
          #   @param device_info [String, nil] Device information gathered from the cardholder's device - JSON name/value pairs
          #
          #   @param ip [String] External IP address used by the app generating the 3DS authentication request. M
        end

        # Type of authentication request - i.e., the type of transaction or interaction is
        # causing the merchant to request an authentication. Maps to EMV 3DS field
        # threeDSRequestorAuthenticationInd.
        #
        # @see Lithic::Models::ThreeDS::AuthenticationRetrieveResponse#authentication_request_type
        module AuthenticationRequestType
          extend Lithic::Internal::Type::Enum

          ADD_CARD = :ADD_CARD
          BILLING_AGREEMENT = :BILLING_AGREEMENT
          DELAYED_SHIPMENT = :DELAYED_SHIPMENT
          EMV_TOKEN_CARDHOLDER_VERIFICATION = :EMV_TOKEN_CARDHOLDER_VERIFICATION
          INSTALLMENT_TRANSACTION = :INSTALLMENT_TRANSACTION
          MAINTAIN_CARD = :MAINTAIN_CARD
          PAYMENT_TRANSACTION = :PAYMENT_TRANSACTION
          RECURRING_TRANSACTION = :RECURRING_TRANSACTION
          SPLIT_PAYMENT = :SPLIT_PAYMENT
          SPLIT_SHIPMENT = :SPLIT_SHIPMENT

          # @!method self.values
          #   @return [Array<Symbol>]
        end

        # @see Lithic::Models::ThreeDS::AuthenticationRetrieveResponse#browser
        class Browser < Lithic::Internal::Type::BaseModel
          # @!attribute ip
          #   IP address of the browser as returned by the HTTP headers to the 3DS requestor
          #   (e.g., merchant or digital wallet). Maps to EMV 3DS field browserIP.
          #
          #   @return [String, nil]
          optional :ip, String, nil?: true

          # @!attribute java_enabled
          #   Indicates whether the cardholder's browser has the ability to execute Java. Maps
          #   to EMV 3DS field browserJavaEnabled.
          #
          #   @return [Boolean, nil]
          optional :java_enabled, Lithic::Internal::Type::Boolean, nil?: true

          # @!attribute javascript_enabled
          #   Indicates whether the cardholder's browser has the ability to execute
          #   JavaScript. Maps to EMV 3DS field browserJavascriptEnabled.
          #
          #   @return [Boolean, nil]
          optional :javascript_enabled, Lithic::Internal::Type::Boolean, nil?: true

          # @!attribute language
          #   Language of the cardholder's browser as defined in IETF BCP47. Maps to EMV 3DS
          #   field browserLanguage.
          #
          #   @return [String, nil]
          optional :language, String, nil?: true

          # @!attribute time_zone
          #   Time zone of the cardholder's browser offset in minutes between UTC and the
          #   cardholder browser's local time. The offset is positive if the local time is
          #   behind UTC and negative if it is ahead. Maps to EMV 3DS field browserTz.
          #
          #   @return [String, nil]
          optional :time_zone, String, nil?: true

          # @!attribute user_agent
          #   Content of the HTTP user-agent header. Maps to EMV 3DS field browserUserAgent.
          #
          #   @return [String, nil]
          optional :user_agent, String, nil?: true

          # @!method initialize(ip: nil, java_enabled: nil, javascript_enabled: nil, language: nil, time_zone: nil, user_agent: nil)
          #   Some parameter documentations has been truncated, see
          #   {Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Browser} for more
          #   details.
          #
          #   Object containing data about the browser used in the e-commerce transaction.
          #   Present if the channel is 'BROWSER'.
          #
          #   @param ip [String, nil] IP address of the browser as returned by the HTTP headers to the 3DS requestor (
          #
          #   @param java_enabled [Boolean, nil] Indicates whether the cardholder's browser has the ability to execute Java. Maps
          #
          #   @param javascript_enabled [Boolean, nil] Indicates whether the cardholder's browser has the ability to execute JavaScript
          #
          #   @param language [String, nil] Language of the cardholder's browser as defined in IETF BCP47. Maps to EMV 3DS f
          #
          #   @param time_zone [String, nil] Time zone of the cardholder's browser offset in minutes between UTC and the card
          #
          #   @param user_agent [String, nil] Content of the HTTP user-agent header. Maps to EMV 3DS field browserUserAgent.
        end

        # @see Lithic::Models::ThreeDS::AuthenticationRetrieveResponse#challenge_metadata
        class ChallengeMetadata < Lithic::Internal::Type::BaseModel
          # @!attribute method_type
          #   The type of challenge method used for authentication.
          #
          #   @return [Symbol, Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::ChallengeMetadata::MethodType]
          required :method_type,
                   enum: -> { Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::ChallengeMetadata::MethodType }

          # @!attribute phone_number
          #   The phone number used for delivering the OTP. Relevant only for SMS_OTP method.
          #
          #   @return [String, nil]
          optional :phone_number, String, nil?: true

          # @!method initialize(method_type:, phone_number: nil)
          #   Metadata about the challenge method and delivery.
          #
          #   @param method_type [Symbol, Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::ChallengeMetadata::MethodType] The type of challenge method used for authentication.
          #
          #   @param phone_number [String, nil] The phone number used for delivering the OTP. Relevant only for SMS_OTP method.

          # The type of challenge method used for authentication.
          #
          # @see Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::ChallengeMetadata#method_type
          module MethodType
            extend Lithic::Internal::Type::Enum

            SMS_OTP = :SMS_OTP
            OUT_OF_BAND = :OUT_OF_BAND

            # @!method self.values
            #   @return [Array<Symbol>]
          end
        end

        # Entity that orchestrates the challenge.
        #
        # @see Lithic::Models::ThreeDS::AuthenticationRetrieveResponse#challenge_orchestrated_by
        module ChallengeOrchestratedBy
          extend Lithic::Internal::Type::Enum

          LITHIC = :LITHIC
          CUSTOMER = :CUSTOMER
          NO_CHALLENGE = :NO_CHALLENGE

          # @!method self.values
          #   @return [Array<Symbol>]
        end

        # Entity that made the authentication decision.
        #
        # @see Lithic::Models::ThreeDS::AuthenticationRetrieveResponse#decision_made_by
        module DecisionMadeBy
          extend Lithic::Internal::Type::Enum

          CUSTOMER_ENDPOINT = :CUSTOMER_ENDPOINT
          LITHIC_DEFAULT = :LITHIC_DEFAULT
          LITHIC_RULES = :LITHIC_RULES
          NETWORK = :NETWORK
          UNKNOWN = :UNKNOWN

          # @!method self.values
          #   @return [Array<Symbol>]
        end

        # Type of 3DS Requestor Initiated (3RI) request i.e., a 3DS authentication that
        # takes place at the initiation of the merchant rather than the cardholder. The
        # most common example of this is where a merchant is authenticating before billing
        # for a recurring transaction such as a pay TV subscription or a utility bill.
        # Maps to EMV 3DS field threeRIInd.
        #
        # @see Lithic::Models::ThreeDS::AuthenticationRetrieveResponse#three_ri_request_type
        module ThreeRiRequestType
          extend Lithic::Internal::Type::Enum

          ACCOUNT_VERIFICATION = :ACCOUNT_VERIFICATION
          ADD_CARD = :ADD_CARD
          BILLING_AGREEMENT = :BILLING_AGREEMENT
          CARD_SECURITY_CODE_STATUS_CHECK = :CARD_SECURITY_CODE_STATUS_CHECK
          DELAYED_SHIPMENT = :DELAYED_SHIPMENT
          DEVICE_BINDING_STATUS_CHECK = :DEVICE_BINDING_STATUS_CHECK
          INSTALLMENT_TRANSACTION = :INSTALLMENT_TRANSACTION
          MAIL_ORDER = :MAIL_ORDER
          MAINTAIN_CARD_INFO = :MAINTAIN_CARD_INFO
          OTHER_PAYMENT = :OTHER_PAYMENT
          RECURRING_TRANSACTION = :RECURRING_TRANSACTION
          SPLIT_PAYMENT = :SPLIT_PAYMENT
          SPLIT_SHIPMENT = :SPLIT_SHIPMENT
          TELEPHONE_ORDER = :TELEPHONE_ORDER
          TOP_UP = :TOP_UP
          TRUST_LIST_STATUS_CHECK = :TRUST_LIST_STATUS_CHECK

          # @!method self.values
          #   @return [Array<Symbol>]
        end

        # @see Lithic::Models::ThreeDS::AuthenticationRetrieveResponse#transaction
        class Transaction < Lithic::Internal::Type::BaseModel
          # @!attribute amount
          #   Amount of the purchase in minor units of currency with all punctuation removed.
          #   Maps to EMV 3DS field purchaseAmount.
          #
          #   @return [Float]
          required :amount, Float

          # @!attribute cardholder_amount
          #   Approximate amount of the purchase in minor units of cardholder currency.
          #   Derived from `amount` using a daily conversion rate.
          #
          #   @return [Float, nil]
          required :cardholder_amount, Float, nil?: true

          # @!attribute currency
          #   Currency of the purchase. Maps to EMV 3DS field purchaseCurrency.
          #
          #   @return [String]
          required :currency, String

          # @!attribute currency_exponent
          #   Minor units of currency, as specified in ISO 4217 currency exponent. Maps to EMV
          #   3DS field purchaseExponent.
          #
          #   @return [Float]
          required :currency_exponent, Float

          # @!attribute date_time
          #   Date and time when the authentication was generated by the merchant/acquirer's
          #   3DS server. Maps to EMV 3DS field purchaseDate.
          #
          #   @return [Time]
          required :date_time, Time

          # @!attribute type
          #   Type of the transaction for which a 3DS authentication request is occurring.
          #   Maps to EMV 3DS field transType.
          #
          #   @return [Symbol, Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Transaction::Type, nil]
          required :type,
                   enum: -> { Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Transaction::Type },
                   nil?: true

          # @!method initialize(amount:, cardholder_amount:, currency:, currency_exponent:, date_time:, type:)
          #   Some parameter documentations has been truncated, see
          #   {Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Transaction} for more
          #   details.
          #
          #   Object containing data about the e-commerce transaction for which the merchant
          #   is requesting authentication.
          #
          #   @param amount [Float] Amount of the purchase in minor units of currency with all punctuation removed.
          #
          #   @param cardholder_amount [Float, nil] Approximate amount of the purchase in minor units of cardholder currency. Derive
          #
          #   @param currency [String] Currency of the purchase. Maps to EMV 3DS field purchaseCurrency.
          #
          #   @param currency_exponent [Float] Minor units of currency, as specified in ISO 4217 currency exponent. Maps to EMV
          #
          #   @param date_time [Time] Date and time when the authentication was generated by the merchant/acquirer's 3
          #
          #   @param type [Symbol, Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Transaction::Type, nil] Type of the transaction for which a 3DS authentication request is occurring. Map

          # Type of the transaction for which a 3DS authentication request is occurring.
          # Maps to EMV 3DS field transType.
          #
          # @see Lithic::Models::ThreeDS::AuthenticationRetrieveResponse::Transaction#type
          module Type
            extend Lithic::Internal::Type::Enum

            ACCOUNT_FUNDING = :ACCOUNT_FUNDING
            CHECK_ACCEPTANCE = :CHECK_ACCEPTANCE
            GOODS_SERVICE_PURCHASE = :GOODS_SERVICE_PURCHASE
            PREPAID_ACTIVATION_AND_LOAD = :PREPAID_ACTIVATION_AND_LOAD
            QUASI_CASH_TRANSACTION = :QUASI_CASH_TRANSACTION

            # @!method self.values
            #   @return [Array<Symbol>]
          end
        end
      end
    end
  end
end