#if 0
#elif defined(__arm64__) && __arm64__
// Generated by Apple Swift version 5.5.1 (swiftlang-1300.0.31.4 clang-1300.0.29.6)
#ifndef OPPWAMOBILE_SWIFT_H
#define OPPWAMOBILE_SWIFT_H
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wgcc-compat"

#if !defined(__has_include)
# define __has_include(x) 0
#endif
#if !defined(__has_attribute)
# define __has_attribute(x) 0
#endif
#if !defined(__has_feature)
# define __has_feature(x) 0
#endif
#if !defined(__has_warning)
# define __has_warning(x) 0
#endif

#if __has_include(<swift/objc-prologue.h>)
# include <swift/objc-prologue.h>
#endif

#pragma clang diagnostic ignored "-Wauto-import"
#include <Foundation/Foundation.h>
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>

#if !defined(SWIFT_TYPEDEFS)
# define SWIFT_TYPEDEFS 1
# if __has_include(<uchar.h>)
#  include <uchar.h>
# elif !defined(__cplusplus)
typedef uint_least16_t char16_t;
typedef uint_least32_t char32_t;
# endif
typedef float swift_float2  __attribute__((__ext_vector_type__(2)));
typedef float swift_float3  __attribute__((__ext_vector_type__(3)));
typedef float swift_float4  __attribute__((__ext_vector_type__(4)));
typedef double swift_double2  __attribute__((__ext_vector_type__(2)));
typedef double swift_double3  __attribute__((__ext_vector_type__(3)));
typedef double swift_double4  __attribute__((__ext_vector_type__(4)));
typedef int swift_int2  __attribute__((__ext_vector_type__(2)));
typedef int swift_int3  __attribute__((__ext_vector_type__(3)));
typedef int swift_int4  __attribute__((__ext_vector_type__(4)));
typedef unsigned int swift_uint2  __attribute__((__ext_vector_type__(2)));
typedef unsigned int swift_uint3  __attribute__((__ext_vector_type__(3)));
typedef unsigned int swift_uint4  __attribute__((__ext_vector_type__(4)));
#endif

#if !defined(SWIFT_PASTE)
# define SWIFT_PASTE_HELPER(x, y) x##y
# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y)
#endif
#if !defined(SWIFT_METATYPE)
# define SWIFT_METATYPE(X) Class
#endif
#if !defined(SWIFT_CLASS_PROPERTY)
# if __has_feature(objc_class_property)
#  define SWIFT_CLASS_PROPERTY(...) __VA_ARGS__
# else
#  define SWIFT_CLASS_PROPERTY(...)
# endif
#endif

#if __has_attribute(objc_runtime_name)
# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X)))
#else
# define SWIFT_RUNTIME_NAME(X)
#endif
#if __has_attribute(swift_name)
# define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X)))
#else
# define SWIFT_COMPILE_NAME(X)
#endif
#if __has_attribute(objc_method_family)
# define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X)))
#else
# define SWIFT_METHOD_FAMILY(X)
#endif
#if __has_attribute(noescape)
# define SWIFT_NOESCAPE __attribute__((noescape))
#else
# define SWIFT_NOESCAPE
#endif
#if __has_attribute(ns_consumed)
# define SWIFT_RELEASES_ARGUMENT __attribute__((ns_consumed))
#else
# define SWIFT_RELEASES_ARGUMENT
#endif
#if __has_attribute(warn_unused_result)
# define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
#else
# define SWIFT_WARN_UNUSED_RESULT
#endif
#if __has_attribute(noreturn)
# define SWIFT_NORETURN __attribute__((noreturn))
#else
# define SWIFT_NORETURN
#endif
#if !defined(SWIFT_CLASS_EXTRA)
# define SWIFT_CLASS_EXTRA
#endif
#if !defined(SWIFT_PROTOCOL_EXTRA)
# define SWIFT_PROTOCOL_EXTRA
#endif
#if !defined(SWIFT_ENUM_EXTRA)
# define SWIFT_ENUM_EXTRA
#endif
#if !defined(SWIFT_CLASS)
# if __has_attribute(objc_subclassing_restricted)
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA
#  define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# else
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
#  define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# endif
#endif
#if !defined(SWIFT_RESILIENT_CLASS)
# if __has_attribute(objc_class_stub)
#  define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME) __attribute__((objc_class_stub))
#  define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_class_stub)) SWIFT_CLASS_NAMED(SWIFT_NAME)
# else
#  define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME)
#  define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) SWIFT_CLASS_NAMED(SWIFT_NAME)
# endif
#endif

#if !defined(SWIFT_PROTOCOL)
# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
# define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
#endif

#if !defined(SWIFT_EXTENSION)
# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__)
#endif

#if !defined(OBJC_DESIGNATED_INITIALIZER)
# if __has_attribute(objc_designated_initializer)
#  define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
# else
#  define OBJC_DESIGNATED_INITIALIZER
# endif
#endif
#if !defined(SWIFT_ENUM_ATTR)
# if defined(__has_attribute) && __has_attribute(enum_extensibility)
#  define SWIFT_ENUM_ATTR(_extensibility) __attribute__((enum_extensibility(_extensibility)))
# else
#  define SWIFT_ENUM_ATTR(_extensibility)
# endif
#endif
#if !defined(SWIFT_ENUM)
# define SWIFT_ENUM(_type, _name, _extensibility) enum _name : _type _name; enum SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type
# if __has_feature(generalized_swift_name)
#  define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type
# else
#  define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) SWIFT_ENUM(_type, _name, _extensibility)
# endif
#endif
#if !defined(SWIFT_UNAVAILABLE)
# define SWIFT_UNAVAILABLE __attribute__((unavailable))
#endif
#if !defined(SWIFT_UNAVAILABLE_MSG)
# define SWIFT_UNAVAILABLE_MSG(msg) __attribute__((unavailable(msg)))
#endif
#if !defined(SWIFT_AVAILABILITY)
# define SWIFT_AVAILABILITY(plat, ...) __attribute__((availability(plat, __VA_ARGS__)))
#endif
#if !defined(SWIFT_WEAK_IMPORT)
# define SWIFT_WEAK_IMPORT __attribute__((weak_import))
#endif
#if !defined(SWIFT_DEPRECATED)
# define SWIFT_DEPRECATED __attribute__((deprecated))
#endif
#if !defined(SWIFT_DEPRECATED_MSG)
# define SWIFT_DEPRECATED_MSG(...) __attribute__((deprecated(__VA_ARGS__)))
#endif
#if __has_feature(attribute_diagnose_if_objc)
# define SWIFT_DEPRECATED_OBJC(Msg) __attribute__((diagnose_if(1, Msg, "warning")))
#else
# define SWIFT_DEPRECATED_OBJC(Msg) SWIFT_DEPRECATED_MSG(Msg)
#endif
#if !defined(IBSegueAction)
# define IBSegueAction
#endif
#if __has_feature(modules)
#if __has_warning("-Watimport-in-framework-header")
#pragma clang diagnostic ignored "-Watimport-in-framework-header"
#endif
@import Foundation;
@import ObjectiveC;
#endif

#import <OPPWAMobile/OPPWAMobile.h>

#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch"
#pragma clang diagnostic ignored "-Wduplicate-method-arg"
#if __has_warning("-Wpragma-clang-attribute")
# pragma clang diagnostic ignored "-Wpragma-clang-attribute"
#endif
#pragma clang diagnostic ignored "-Wunknown-pragmas"
#pragma clang diagnostic ignored "-Wnullability"

#if __has_attribute(external_source_symbol)
# pragma push_macro("any")
# undef any
# pragma clang attribute push(__attribute__((external_source_symbol(language="Swift", defined_in="OPPWAMobile",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol))
# pragma pop_macro("any")
#endif

@class OPPThreeDSCompletionEvent;
@class OPPThreeDSErrorEvent;

/// A protocol for 3-D Secure challenge callbacks. Receives result after challenge is finished or interrupted for some reason.
SWIFT_PROTOCOL("_TtP11OPPWAMobile27OPPThreeDSChallengeCallback_")
@protocol OPPThreeDSChallengeCallback
/// Called when challenge is completed without any errors.
/// \param completionEvent Details about challenge completion.
///
- (void)completedWithCompletionEvent:(OPPThreeDSCompletionEvent * _Nonnull)completionEvent;
/// Called if shopper manually aborts authentication by tapping ‘Cancel’ button.
- (void)cancelled;
/// Called if some internal error has occurred.
/// \param errorEvent Details about challenge failure.
///
- (void)failedWithErrorEvent:(OPPThreeDSErrorEvent * _Nonnull)errorEvent;
@end

@class NSString;
enum OPPThreeDSTransactionStatus : NSInteger;

/// Class to represent information about successful challenge completion.
SWIFT_CLASS("_TtC11OPPWAMobile25OPPThreeDSCompletionEvent")
@interface OPPThreeDSCompletionEvent : NSObject
/// 3-D Secure transaction identifier.
@property (nonatomic, readonly, copy) NSString * _Nonnull transactionId;
/// Status of the transaction after challenge is done.
@property (nonatomic, readonly) enum OPPThreeDSTransactionStatus transactionStatus;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@class NSNumber;
@class UiCustomization;

/// Class that contains all possible configurations to be applied at <code>OPPThreeDSService</code> initialization phase.
SWIFT_CLASS("_TtC11OPPWAMobile16OPPThreeDSConfig")
@interface OPPThreeDSConfig : NSObject
/// Specific types of challenge interfaces.
/// They may vary for native way, e.g. present OTP or single select screen.
/// By default all UI types are supported, it’s strongly recommended by EMVCo.
@property (nonatomic) OPPThreeDSChallengeUiType challengeUiTypes;
/// The maximum amount of time (in minutes) for all exchanges for the 3-D Secure authentication.
/// Default value is 5 minutes.
@property (nonatomic) NSInteger sdkMaxTimeout;
/// The custom parameter for the /n software <code>Client</code> component.
/// See <a href="http://cdn.nsoftware.com/help/TS2/android/ClientConfig.htm" target="_blank"> /n software ClientConfig guide</a> for the keys.
/// Sample value <code>["AcceptAnyACSCert": "true"]</code>
@property (nonatomic, copy) NSDictionary<NSString *, NSString *> * _Nonnull clientConfigParams;
/// The expected bundle identifier for the application.
@property (nonatomic, copy) NSString * _Nonnull appBundleID;
/// The string that represents the locale for the app’s user interface.
@property (nonatomic, copy) NSString * _Nullable locale;
/// The list of device parameters that should NOT be collected for the device.
/// By default, the SDK will pull as many device parameters as it can.
/// Refer to the “EMV® 3-D Secure SDK—Device Information” guide to see the full list of possible device parameters and appropriate constants to be used.
/// Sample values would be <code>["A001", "A002"]</code>.
@property (nonatomic, copy) NSArray<NSString *> * _Nullable deviceParameterBlacklist;
/// UI configuration information that is used to specify the UI layout and theme of the challenge screens, for example, font style and font size.
@property (nonatomic, strong) UiCustomization * _Nonnull uiCustomization;
/// Merchant app URL used by Authentication app to call the Merchant app after OOB authentication has occurred.
@property (nonatomic, copy) NSString * _Nullable threeDSRequestorAppURL;
/// Creates an object representing configuration information to be applied at <code>OPPThreeDSService</code>.
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


/// Class to represent information about interrupted challenge.
SWIFT_CLASS("_TtC11OPPWAMobile20OPPThreeDSErrorEvent")
@interface OPPThreeDSErrorEvent : NSObject
/// Error code for the challenge interruption.
@property (nonatomic, readonly, copy) NSString * _Nullable errorCode;
/// Short error message identifying why challenge was interrupted.
@property (nonatomic, readonly, copy) NSString * _Nonnull errorMessage;
/// More details error description if it’s available.
@property (nonatomic, readonly, copy) NSString * _Nullable errorDetails;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end


/// Class to represent all information needed to communicate securely with Directory Server (DS) and Access Control Server (ACS)
SWIFT_CLASS("_TtC11OPPWAMobile22OPPThreeDSSchemeConfig")
@interface OPPThreeDSSchemeConfig : NSObject
/// Directory Server ID.
@property (nonatomic, readonly, copy) NSString * _Nonnull dsRefId;
/// Public certificate provided by the DS to encrypt device data.
@property (nonatomic, readonly, copy) NSString * _Nonnull dsEncryptCert;
/// CA public certificate (root) of the DS-CA.
@property (nonatomic, readonly, copy) NSString * _Nonnull dsCaRootCert;
/// Creates an object representing information to connect to DS and ACS.
/// \param dsRefId Directory Server ID.
///
/// \param dsEncryptCert Public certificate provided by the DS to encrypt device data.
///
/// \param dsCaRootCert CA public certificate (root) of the DS-CA.
///
///
/// returns:
/// Returns an object representing information to connect to DS and ACS.
- (nonnull instancetype)initWithDsRefId:(NSString * _Nonnull)dsRefId dsEncryptCert:(NSString * _Nonnull)dsEncryptCert dsCaRootCert:(NSString * _Nonnull)dsCaRootCert OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@protocol OPPThreeDSServiceCallback;
enum OPPThreeDSTransactionMode : NSInteger;
@class OPPThreeDSTransaction;
@class Warning;

/// Class to perform all necessary preparations for the 3-D Secure 2 authentication.
/// note:
/// The service should be initialized just once per app session. Call <code>OPPThreeDSService.initialize(transactionMode:paymentBrands:)</code> method to start the service, it will initiate security checks and collecting device data as background task. It’s recommended to initialize the service once the app is launched or at least once checkout is started.
/// Once service is initialized <code>OPPThreeDSTransaction</code> object can be obtained for the specific transaction, please see <code>OPPThreeDSService.createTransaction(paymentBrand:protocolVersion:)</code> method.
SWIFT_CLASS("_TtC11OPPWAMobile17OPPThreeDSService")
@interface OPPThreeDSService : NSObject
/// Single instance of the <code>OPPThreeDSService</code> class.
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) OPPThreeDSService * _Nonnull sharedInstance;)
+ (OPPThreeDSService * _Nonnull)sharedInstance SWIFT_WARN_UNUSED_RESULT;
/// The list of payment brands specified during initialization <code>OPPThreeDSService</code>.
@property (nonatomic, copy) NSArray<NSString *> * _Nullable paymentBrands;
/// Configuration object to be used during service initialization.
@property (nonatomic, strong) OPPThreeDSConfig * _Nonnull config;
/// A flag that specifies if service is initialized or not.
@property (nonatomic, readonly) BOOL isInitialized;
/// The listener which will receive events from the <code>OPPThreeDSService</code>
@property (nonatomic, strong) id <OPPThreeDSServiceCallback> _Nullable initCallback;
- (id <OPPThreeDSServiceCallback> _Nullable)initCallback SWIFT_METHOD_FAMILY(none) SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
/// Initializes the service, starts preparation for the 3-D Secure authentication.
/// Preparation includes loading DS certificates for the specified payment brands, security checks and collecting device data as background task.
/// note:
/// You can know that initialization is done by checking <code>OPPThreeDSService.isInitialized</code> or set <code>OPPThreeDSService.initCallback</code> to be notified about the result of initialization.
/// note:
/// The state of the service is maintained until the <code>OPPThreeDSService.cleanUp()</code> method is called.
/// \param transactionMode the mode to switch between test and live system.
///
/// \param paymentBrands the list of payment brands which support 3-D Secure 2.
///
///
/// throws:
///
/// <ul>
///   <li>
///     <code>InvalidInputException</code> if list of payment brands is empty, or if some invalid data is passed in <code>OPPThreeDSService.config</code>
///   </li>
///   <li>
///     <code>SDKRuntimeException</code> if some internal error occurred.
///   </li>
/// </ul>
- (void)initializeWithTransactionMode:(enum OPPThreeDSTransactionMode)transactionMode paymentBrands:(NSArray<NSString *> * _Nonnull)paymentBrands;
/// Creates transaction object for the specific payment brand.
/// note:
/// A reference should be kept for this transaction through the entire 3-D Secure process. When the transaction is complete, it should be closed via the <code>OPPThreeDSTransaction.close()</code>
/// <ul>
///   <li>
///     Parameter
///     <ul>
///       <li>
///         paymentBrand: brand of the shopper’s card.
///       </li>
///       <li>
///         protocolVersion: protocol version according to which the transaction shall be created.
///       </li>
///     </ul>
///   </li>
/// </ul>
///
/// throws:
///
/// <ul>
///   <li>
///     <code>InvalidInputException</code> if payment brand is not valid, e.g. it was not specified at <code>OPPThreeDSService</code> initialization phase.
///   </li>
///   <li>
///     <code>SDKNotInitializedException</code> if service has not yet been initialized.
///   </li>
///   <li>
///     <code>SDKRuntimeException</code> if some internal error occurred.
///   </li>
/// </ul>
///
/// returns:
/// Initialized <code>OPPThreeDSTransaction</code> object.
- (OPPThreeDSTransaction * _Nullable)createTransactionWithPaymentBrand:(NSString * _Nonnull)paymentBrand protocolVersion:(NSString * _Nonnull)protocolVersion error:(NSError * _Nullable * _Nullable)error SWIFT_WARN_UNUSED_RESULT;
/// The cleanup method frees up resources that are used by the 3DS SDK. It is called only once during a single app session.
///
/// throws:
///
/// <ul>
///   <li>
///     <code>SDKNotInitializedException</code> if service has not yet been initialized.
///   </li>
/// </ul>
- (BOOL)cleanUpAndReturnError:(NSError * _Nullable * _Nullable)error;
/// Returns warnings produced by the security checks during the service initialization.
/// note:
/// These can be checked by the app to determine whether or not to proceed with the checkout process.
///
/// throws:
///
/// <ul>
///   <li>
///     <code>SDKNotInitializedException</code> if service has not yet been initialized.
///   </li>
/// </ul>
///
/// returns:
/// The list of warnings produced during initialization.
- (NSArray<Warning *> * _Nullable)getWarningsAndReturnError:(NSError * _Nullable * _Nullable)error SWIFT_WARN_UNUSED_RESULT;
/// Returns version of ipworks 3DS SDK.
///
/// throws:
///
/// <ul>
///   <li>
///     <code>SDKNotInitializedException</code> if service has not yet been initialized.
///   </li>
/// </ul>
- (NSString * _Nullable)getSDKVersionAndReturnError:(NSError * _Nullable * _Nullable)error SWIFT_WARN_UNUSED_RESULT;
/// Provides possibility to overwrite standard certificates and use some custom DS information for the specific brands to process transaction. Should be used for test purposes only.
/// \param schemeConfigDict Scheme config information mapped for specific card brands.
///
- (void)setCustomSchemeConfig:(NSDictionary<NSString *, OPPThreeDSSchemeConfig *> * _Nonnull)schemeConfigDict;
@end


/// A protocol for 3-D Secure service initialization callback. Receives an error if it appears during service initialization, otherwise the error will be nil.
SWIFT_PROTOCOL("_TtP11OPPWAMobile25OPPThreeDSServiceCallback_")
@protocol OPPThreeDSServiceCallback
/// Called when <code>OPPThreeDSService</code> initialization is completed.
/// \param error An error if service initialization was interrupted by some internal error.
///
- (void)initializedWithError:(NSError * _Nullable)error;
@end

@class UINavigationController;
@class ProgressView;

/// Class that contains information required for performing concrete 3-D Secure transaction for both frictionless and challenge flow.
/// Use <code>OPPThreeDSService.createTransaction(paymentBrand:protocolVersion:)</code> to create a new transaction instance.
SWIFT_CLASS("_TtC11OPPWAMobile21OPPThreeDSTransaction")
@interface OPPThreeDSTransaction : NSObject
/// Constructs authentication request parameters string to be sent to the Platform.
///
/// throws:
///
/// <ul>
///   <li>
///     <code>SDKRuntimeException</code> if some internal error occurred
///   </li>
/// </ul>
///
/// returns:
/// Returns a string with authentication request parameters to be sent to the Platform.
- (NSString * _Nullable)getAuthRequestParamsAndReturnError:(NSError * _Nullable * _Nullable)error SWIFT_WARN_UNUSED_RESULT;
/// Validates <code>authResponse</code> and launches the challenge screens.
/// \param authResponse The json string with authentication response as received from the Platform.
///
/// \param navigationController The navigation controller to start challenge
///
/// \param threeDSRequestorAppURL The requestor app URL string, required for OOB authentication.
///
/// \param challengeCallback The instance of <code>OPPThreeDSChallengeCallback</code> that is calling protocol method.
///
///
/// throws:
///
/// <ul>
///   <li>
///     <code>InvalidInputException</code> if invalid auth response is provided.
///   </li>
///   <li>
///     <code>SDKRuntimeException</code> if some internal error occurred.
///   </li>
/// </ul>
- (BOOL)doChallengeWithAuthResponse:(NSString * _Nonnull)authResponse navigationController:(UINavigationController * _Nonnull)navigationController threeDSRequestorAppURL:(NSString * _Nullable)threeDSRequestorAppURL challengeCallback:(id <OPPThreeDSChallengeCallback> _Nonnull)challengeCallback error:(NSError * _Nullable * _Nullable)error;
/// Returns the processing screen which displays the Directory Server logo, and a graphical element to indicate that an activity is being processed.
///
/// throws:
///
/// <ul>
///   <li>
///     <code>SDKRuntimeException</code> if some internal error occurred
///   </li>
/// </ul>
///
/// returns:
/// <code>ProgressView</code> object to be shown while transaction is processing.
- (ProgressView * _Nullable)getProgressViewAndReturnError:(NSError * _Nullable * _Nullable)error SWIFT_WARN_UNUSED_RESULT;
/// Cleans up resources that are held by the transaction object.
/// note:
/// This method is required to be called only when the <code>doChallenge(authResponse:navigationController:challengeCallback:)</code> method is not called in the transaction. E.g. you want to cancel transaction instead of requesting challenge authentication.
///
/// throws:
///
/// <ul>
///   <li>
///     <code>SDKRuntimeException</code> if some internal error occurred
///   </li>
/// </ul>
- (BOOL)closeAndReturnError:(NSError * _Nullable * _Nullable)error;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

/// An enumeration for possible modes to switch between test and live environment.
typedef SWIFT_ENUM(NSInteger, OPPThreeDSTransactionMode, open) {
/// The mode to process transaction in test system. Might be not available for some brands.
  OPPThreeDSTransactionModeTest = 0,
/// The mode to process transaction in live system.
  OPPThreeDSTransactionModeLive = 1,
};

/// An enumeration for the various types of status for the 3-D Secure 2 transaction.
typedef SWIFT_ENUM(NSInteger, OPPThreeDSTransactionStatus, open) {
/// Authentication/verification successful.
  OPPThreeDSTransactionStatusAuthenticated = 0,
/// Not authentication/not verified, but a proof of attempted authentication/verification is provided.
  OPPThreeDSTransactionStatusAttemptProcessingPerformed = 1,
/// Not authenticated or account not verified, transaction denied.
  OPPThreeDSTransactionStatusDenied = 2,
/// Issuer is rejecting authentication/verification and request that authorisation not attempted.
  OPPThreeDSTransactionStatusRejected = 3,
/// Authentication/verification cannot be performed due to some technical or other problems.
  OPPThreeDSTransactionStatusFailed = 4,
/// Undefined transaction status.
  OPPThreeDSTransactionStatusUndefined = 5,
};

#if __has_attribute(external_source_symbol)
# pragma clang attribute pop
#endif
#pragma clang diagnostic pop
#endif

#elif defined(__ARM_ARCH_7A__) && __ARM_ARCH_7A__
// Generated by Apple Swift version 5.5.1 (swiftlang-1300.0.31.4 clang-1300.0.29.6)
#ifndef OPPWAMOBILE_SWIFT_H
#define OPPWAMOBILE_SWIFT_H
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wgcc-compat"

#if !defined(__has_include)
# define __has_include(x) 0
#endif
#if !defined(__has_attribute)
# define __has_attribute(x) 0
#endif
#if !defined(__has_feature)
# define __has_feature(x) 0
#endif
#if !defined(__has_warning)
# define __has_warning(x) 0
#endif

#if __has_include(<swift/objc-prologue.h>)
# include <swift/objc-prologue.h>
#endif

#pragma clang diagnostic ignored "-Wauto-import"
#include <Foundation/Foundation.h>
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>

#if !defined(SWIFT_TYPEDEFS)
# define SWIFT_TYPEDEFS 1
# if __has_include(<uchar.h>)
#  include <uchar.h>
# elif !defined(__cplusplus)
typedef uint_least16_t char16_t;
typedef uint_least32_t char32_t;
# endif
typedef float swift_float2  __attribute__((__ext_vector_type__(2)));
typedef float swift_float3  __attribute__((__ext_vector_type__(3)));
typedef float swift_float4  __attribute__((__ext_vector_type__(4)));
typedef double swift_double2  __attribute__((__ext_vector_type__(2)));
typedef double swift_double3  __attribute__((__ext_vector_type__(3)));
typedef double swift_double4  __attribute__((__ext_vector_type__(4)));
typedef int swift_int2  __attribute__((__ext_vector_type__(2)));
typedef int swift_int3  __attribute__((__ext_vector_type__(3)));
typedef int swift_int4  __attribute__((__ext_vector_type__(4)));
typedef unsigned int swift_uint2  __attribute__((__ext_vector_type__(2)));
typedef unsigned int swift_uint3  __attribute__((__ext_vector_type__(3)));
typedef unsigned int swift_uint4  __attribute__((__ext_vector_type__(4)));
#endif

#if !defined(SWIFT_PASTE)
# define SWIFT_PASTE_HELPER(x, y) x##y
# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y)
#endif
#if !defined(SWIFT_METATYPE)
# define SWIFT_METATYPE(X) Class
#endif
#if !defined(SWIFT_CLASS_PROPERTY)
# if __has_feature(objc_class_property)
#  define SWIFT_CLASS_PROPERTY(...) __VA_ARGS__
# else
#  define SWIFT_CLASS_PROPERTY(...)
# endif
#endif

#if __has_attribute(objc_runtime_name)
# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X)))
#else
# define SWIFT_RUNTIME_NAME(X)
#endif
#if __has_attribute(swift_name)
# define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X)))
#else
# define SWIFT_COMPILE_NAME(X)
#endif
#if __has_attribute(objc_method_family)
# define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X)))
#else
# define SWIFT_METHOD_FAMILY(X)
#endif
#if __has_attribute(noescape)
# define SWIFT_NOESCAPE __attribute__((noescape))
#else
# define SWIFT_NOESCAPE
#endif
#if __has_attribute(ns_consumed)
# define SWIFT_RELEASES_ARGUMENT __attribute__((ns_consumed))
#else
# define SWIFT_RELEASES_ARGUMENT
#endif
#if __has_attribute(warn_unused_result)
# define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
#else
# define SWIFT_WARN_UNUSED_RESULT
#endif
#if __has_attribute(noreturn)
# define SWIFT_NORETURN __attribute__((noreturn))
#else
# define SWIFT_NORETURN
#endif
#if !defined(SWIFT_CLASS_EXTRA)
# define SWIFT_CLASS_EXTRA
#endif
#if !defined(SWIFT_PROTOCOL_EXTRA)
# define SWIFT_PROTOCOL_EXTRA
#endif
#if !defined(SWIFT_ENUM_EXTRA)
# define SWIFT_ENUM_EXTRA
#endif
#if !defined(SWIFT_CLASS)
# if __has_attribute(objc_subclassing_restricted)
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA
#  define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# else
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
#  define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# endif
#endif
#if !defined(SWIFT_RESILIENT_CLASS)
# if __has_attribute(objc_class_stub)
#  define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME) __attribute__((objc_class_stub))
#  define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_class_stub)) SWIFT_CLASS_NAMED(SWIFT_NAME)
# else
#  define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME)
#  define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) SWIFT_CLASS_NAMED(SWIFT_NAME)
# endif
#endif

#if !defined(SWIFT_PROTOCOL)
# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
# define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
#endif

#if !defined(SWIFT_EXTENSION)
# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__)
#endif

#if !defined(OBJC_DESIGNATED_INITIALIZER)
# if __has_attribute(objc_designated_initializer)
#  define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
# else
#  define OBJC_DESIGNATED_INITIALIZER
# endif
#endif
#if !defined(SWIFT_ENUM_ATTR)
# if defined(__has_attribute) && __has_attribute(enum_extensibility)
#  define SWIFT_ENUM_ATTR(_extensibility) __attribute__((enum_extensibility(_extensibility)))
# else
#  define SWIFT_ENUM_ATTR(_extensibility)
# endif
#endif
#if !defined(SWIFT_ENUM)
# define SWIFT_ENUM(_type, _name, _extensibility) enum _name : _type _name; enum SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type
# if __has_feature(generalized_swift_name)
#  define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type
# else
#  define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) SWIFT_ENUM(_type, _name, _extensibility)
# endif
#endif
#if !defined(SWIFT_UNAVAILABLE)
# define SWIFT_UNAVAILABLE __attribute__((unavailable))
#endif
#if !defined(SWIFT_UNAVAILABLE_MSG)
# define SWIFT_UNAVAILABLE_MSG(msg) __attribute__((unavailable(msg)))
#endif
#if !defined(SWIFT_AVAILABILITY)
# define SWIFT_AVAILABILITY(plat, ...) __attribute__((availability(plat, __VA_ARGS__)))
#endif
#if !defined(SWIFT_WEAK_IMPORT)
# define SWIFT_WEAK_IMPORT __attribute__((weak_import))
#endif
#if !defined(SWIFT_DEPRECATED)
# define SWIFT_DEPRECATED __attribute__((deprecated))
#endif
#if !defined(SWIFT_DEPRECATED_MSG)
# define SWIFT_DEPRECATED_MSG(...) __attribute__((deprecated(__VA_ARGS__)))
#endif
#if __has_feature(attribute_diagnose_if_objc)
# define SWIFT_DEPRECATED_OBJC(Msg) __attribute__((diagnose_if(1, Msg, "warning")))
#else
# define SWIFT_DEPRECATED_OBJC(Msg) SWIFT_DEPRECATED_MSG(Msg)
#endif
#if !defined(IBSegueAction)
# define IBSegueAction
#endif
#if __has_feature(modules)
#if __has_warning("-Watimport-in-framework-header")
#pragma clang diagnostic ignored "-Watimport-in-framework-header"
#endif
@import Foundation;
@import ObjectiveC;
#endif

#import <OPPWAMobile/OPPWAMobile.h>

#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch"
#pragma clang diagnostic ignored "-Wduplicate-method-arg"
#if __has_warning("-Wpragma-clang-attribute")
# pragma clang diagnostic ignored "-Wpragma-clang-attribute"
#endif
#pragma clang diagnostic ignored "-Wunknown-pragmas"
#pragma clang diagnostic ignored "-Wnullability"

#if __has_attribute(external_source_symbol)
# pragma push_macro("any")
# undef any
# pragma clang attribute push(__attribute__((external_source_symbol(language="Swift", defined_in="OPPWAMobile",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol))
# pragma pop_macro("any")
#endif

@class OPPThreeDSCompletionEvent;
@class OPPThreeDSErrorEvent;

/// A protocol for 3-D Secure challenge callbacks. Receives result after challenge is finished or interrupted for some reason.
SWIFT_PROTOCOL("_TtP11OPPWAMobile27OPPThreeDSChallengeCallback_")
@protocol OPPThreeDSChallengeCallback
/// Called when challenge is completed without any errors.
/// \param completionEvent Details about challenge completion.
///
- (void)completedWithCompletionEvent:(OPPThreeDSCompletionEvent * _Nonnull)completionEvent;
/// Called if shopper manually aborts authentication by tapping ‘Cancel’ button.
- (void)cancelled;
/// Called if some internal error has occurred.
/// \param errorEvent Details about challenge failure.
///
- (void)failedWithErrorEvent:(OPPThreeDSErrorEvent * _Nonnull)errorEvent;
@end

@class NSString;
enum OPPThreeDSTransactionStatus : NSInteger;

/// Class to represent information about successful challenge completion.
SWIFT_CLASS("_TtC11OPPWAMobile25OPPThreeDSCompletionEvent")
@interface OPPThreeDSCompletionEvent : NSObject
/// 3-D Secure transaction identifier.
@property (nonatomic, readonly, copy) NSString * _Nonnull transactionId;
/// Status of the transaction after challenge is done.
@property (nonatomic, readonly) enum OPPThreeDSTransactionStatus transactionStatus;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@class NSNumber;
@class UiCustomization;

/// Class that contains all possible configurations to be applied at <code>OPPThreeDSService</code> initialization phase.
SWIFT_CLASS("_TtC11OPPWAMobile16OPPThreeDSConfig")
@interface OPPThreeDSConfig : NSObject
/// Specific types of challenge interfaces.
/// They may vary for native way, e.g. present OTP or single select screen.
/// By default all UI types are supported, it’s strongly recommended by EMVCo.
@property (nonatomic) OPPThreeDSChallengeUiType challengeUiTypes;
/// The maximum amount of time (in minutes) for all exchanges for the 3-D Secure authentication.
/// Default value is 5 minutes.
@property (nonatomic) NSInteger sdkMaxTimeout;
/// The custom parameter for the /n software <code>Client</code> component.
/// See <a href="http://cdn.nsoftware.com/help/TS2/android/ClientConfig.htm" target="_blank"> /n software ClientConfig guide</a> for the keys.
/// Sample value <code>["AcceptAnyACSCert": "true"]</code>
@property (nonatomic, copy) NSDictionary<NSString *, NSString *> * _Nonnull clientConfigParams;
/// The expected bundle identifier for the application.
@property (nonatomic, copy) NSString * _Nonnull appBundleID;
/// The string that represents the locale for the app’s user interface.
@property (nonatomic, copy) NSString * _Nullable locale;
/// The list of device parameters that should NOT be collected for the device.
/// By default, the SDK will pull as many device parameters as it can.
/// Refer to the “EMV® 3-D Secure SDK—Device Information” guide to see the full list of possible device parameters and appropriate constants to be used.
/// Sample values would be <code>["A001", "A002"]</code>.
@property (nonatomic, copy) NSArray<NSString *> * _Nullable deviceParameterBlacklist;
/// UI configuration information that is used to specify the UI layout and theme of the challenge screens, for example, font style and font size.
@property (nonatomic, strong) UiCustomization * _Nonnull uiCustomization;
/// Merchant app URL used by Authentication app to call the Merchant app after OOB authentication has occurred.
@property (nonatomic, copy) NSString * _Nullable threeDSRequestorAppURL;
/// Creates an object representing configuration information to be applied at <code>OPPThreeDSService</code>.
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


/// Class to represent information about interrupted challenge.
SWIFT_CLASS("_TtC11OPPWAMobile20OPPThreeDSErrorEvent")
@interface OPPThreeDSErrorEvent : NSObject
/// Error code for the challenge interruption.
@property (nonatomic, readonly, copy) NSString * _Nullable errorCode;
/// Short error message identifying why challenge was interrupted.
@property (nonatomic, readonly, copy) NSString * _Nonnull errorMessage;
/// More details error description if it’s available.
@property (nonatomic, readonly, copy) NSString * _Nullable errorDetails;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end


/// Class to represent all information needed to communicate securely with Directory Server (DS) and Access Control Server (ACS)
SWIFT_CLASS("_TtC11OPPWAMobile22OPPThreeDSSchemeConfig")
@interface OPPThreeDSSchemeConfig : NSObject
/// Directory Server ID.
@property (nonatomic, readonly, copy) NSString * _Nonnull dsRefId;
/// Public certificate provided by the DS to encrypt device data.
@property (nonatomic, readonly, copy) NSString * _Nonnull dsEncryptCert;
/// CA public certificate (root) of the DS-CA.
@property (nonatomic, readonly, copy) NSString * _Nonnull dsCaRootCert;
/// Creates an object representing information to connect to DS and ACS.
/// \param dsRefId Directory Server ID.
///
/// \param dsEncryptCert Public certificate provided by the DS to encrypt device data.
///
/// \param dsCaRootCert CA public certificate (root) of the DS-CA.
///
///
/// returns:
/// Returns an object representing information to connect to DS and ACS.
- (nonnull instancetype)initWithDsRefId:(NSString * _Nonnull)dsRefId dsEncryptCert:(NSString * _Nonnull)dsEncryptCert dsCaRootCert:(NSString * _Nonnull)dsCaRootCert OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@protocol OPPThreeDSServiceCallback;
enum OPPThreeDSTransactionMode : NSInteger;
@class OPPThreeDSTransaction;
@class Warning;

/// Class to perform all necessary preparations for the 3-D Secure 2 authentication.
/// note:
/// The service should be initialized just once per app session. Call <code>OPPThreeDSService.initialize(transactionMode:paymentBrands:)</code> method to start the service, it will initiate security checks and collecting device data as background task. It’s recommended to initialize the service once the app is launched or at least once checkout is started.
/// Once service is initialized <code>OPPThreeDSTransaction</code> object can be obtained for the specific transaction, please see <code>OPPThreeDSService.createTransaction(paymentBrand:protocolVersion:)</code> method.
SWIFT_CLASS("_TtC11OPPWAMobile17OPPThreeDSService")
@interface OPPThreeDSService : NSObject
/// Single instance of the <code>OPPThreeDSService</code> class.
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) OPPThreeDSService * _Nonnull sharedInstance;)
+ (OPPThreeDSService * _Nonnull)sharedInstance SWIFT_WARN_UNUSED_RESULT;
/// The list of payment brands specified during initialization <code>OPPThreeDSService</code>.
@property (nonatomic, copy) NSArray<NSString *> * _Nullable paymentBrands;
/// Configuration object to be used during service initialization.
@property (nonatomic, strong) OPPThreeDSConfig * _Nonnull config;
/// A flag that specifies if service is initialized or not.
@property (nonatomic, readonly) BOOL isInitialized;
/// The listener which will receive events from the <code>OPPThreeDSService</code>
@property (nonatomic, strong) id <OPPThreeDSServiceCallback> _Nullable initCallback;
- (id <OPPThreeDSServiceCallback> _Nullable)initCallback SWIFT_METHOD_FAMILY(none) SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
/// Initializes the service, starts preparation for the 3-D Secure authentication.
/// Preparation includes loading DS certificates for the specified payment brands, security checks and collecting device data as background task.
/// note:
/// You can know that initialization is done by checking <code>OPPThreeDSService.isInitialized</code> or set <code>OPPThreeDSService.initCallback</code> to be notified about the result of initialization.
/// note:
/// The state of the service is maintained until the <code>OPPThreeDSService.cleanUp()</code> method is called.
/// \param transactionMode the mode to switch between test and live system.
///
/// \param paymentBrands the list of payment brands which support 3-D Secure 2.
///
///
/// throws:
///
/// <ul>
///   <li>
///     <code>InvalidInputException</code> if list of payment brands is empty, or if some invalid data is passed in <code>OPPThreeDSService.config</code>
///   </li>
///   <li>
///     <code>SDKRuntimeException</code> if some internal error occurred.
///   </li>
/// </ul>
- (void)initializeWithTransactionMode:(enum OPPThreeDSTransactionMode)transactionMode paymentBrands:(NSArray<NSString *> * _Nonnull)paymentBrands;
/// Creates transaction object for the specific payment brand.
/// note:
/// A reference should be kept for this transaction through the entire 3-D Secure process. When the transaction is complete, it should be closed via the <code>OPPThreeDSTransaction.close()</code>
/// <ul>
///   <li>
///     Parameter
///     <ul>
///       <li>
///         paymentBrand: brand of the shopper’s card.
///       </li>
///       <li>
///         protocolVersion: protocol version according to which the transaction shall be created.
///       </li>
///     </ul>
///   </li>
/// </ul>
///
/// throws:
///
/// <ul>
///   <li>
///     <code>InvalidInputException</code> if payment brand is not valid, e.g. it was not specified at <code>OPPThreeDSService</code> initialization phase.
///   </li>
///   <li>
///     <code>SDKNotInitializedException</code> if service has not yet been initialized.
///   </li>
///   <li>
///     <code>SDKRuntimeException</code> if some internal error occurred.
///   </li>
/// </ul>
///
/// returns:
/// Initialized <code>OPPThreeDSTransaction</code> object.
- (OPPThreeDSTransaction * _Nullable)createTransactionWithPaymentBrand:(NSString * _Nonnull)paymentBrand protocolVersion:(NSString * _Nonnull)protocolVersion error:(NSError * _Nullable * _Nullable)error SWIFT_WARN_UNUSED_RESULT;
/// The cleanup method frees up resources that are used by the 3DS SDK. It is called only once during a single app session.
///
/// throws:
///
/// <ul>
///   <li>
///     <code>SDKNotInitializedException</code> if service has not yet been initialized.
///   </li>
/// </ul>
- (BOOL)cleanUpAndReturnError:(NSError * _Nullable * _Nullable)error;
/// Returns warnings produced by the security checks during the service initialization.
/// note:
/// These can be checked by the app to determine whether or not to proceed with the checkout process.
///
/// throws:
///
/// <ul>
///   <li>
///     <code>SDKNotInitializedException</code> if service has not yet been initialized.
///   </li>
/// </ul>
///
/// returns:
/// The list of warnings produced during initialization.
- (NSArray<Warning *> * _Nullable)getWarningsAndReturnError:(NSError * _Nullable * _Nullable)error SWIFT_WARN_UNUSED_RESULT;
/// Returns version of ipworks 3DS SDK.
///
/// throws:
///
/// <ul>
///   <li>
///     <code>SDKNotInitializedException</code> if service has not yet been initialized.
///   </li>
/// </ul>
- (NSString * _Nullable)getSDKVersionAndReturnError:(NSError * _Nullable * _Nullable)error SWIFT_WARN_UNUSED_RESULT;
/// Provides possibility to overwrite standard certificates and use some custom DS information for the specific brands to process transaction. Should be used for test purposes only.
/// \param schemeConfigDict Scheme config information mapped for specific card brands.
///
- (void)setCustomSchemeConfig:(NSDictionary<NSString *, OPPThreeDSSchemeConfig *> * _Nonnull)schemeConfigDict;
@end


/// A protocol for 3-D Secure service initialization callback. Receives an error if it appears during service initialization, otherwise the error will be nil.
SWIFT_PROTOCOL("_TtP11OPPWAMobile25OPPThreeDSServiceCallback_")
@protocol OPPThreeDSServiceCallback
/// Called when <code>OPPThreeDSService</code> initialization is completed.
/// \param error An error if service initialization was interrupted by some internal error.
///
- (void)initializedWithError:(NSError * _Nullable)error;
@end

@class UINavigationController;
@class ProgressView;

/// Class that contains information required for performing concrete 3-D Secure transaction for both frictionless and challenge flow.
/// Use <code>OPPThreeDSService.createTransaction(paymentBrand:protocolVersion:)</code> to create a new transaction instance.
SWIFT_CLASS("_TtC11OPPWAMobile21OPPThreeDSTransaction")
@interface OPPThreeDSTransaction : NSObject
/// Constructs authentication request parameters string to be sent to the Platform.
///
/// throws:
///
/// <ul>
///   <li>
///     <code>SDKRuntimeException</code> if some internal error occurred
///   </li>
/// </ul>
///
/// returns:
/// Returns a string with authentication request parameters to be sent to the Platform.
- (NSString * _Nullable)getAuthRequestParamsAndReturnError:(NSError * _Nullable * _Nullable)error SWIFT_WARN_UNUSED_RESULT;
/// Validates <code>authResponse</code> and launches the challenge screens.
/// \param authResponse The json string with authentication response as received from the Platform.
///
/// \param navigationController The navigation controller to start challenge
///
/// \param threeDSRequestorAppURL The requestor app URL string, required for OOB authentication.
///
/// \param challengeCallback The instance of <code>OPPThreeDSChallengeCallback</code> that is calling protocol method.
///
///
/// throws:
///
/// <ul>
///   <li>
///     <code>InvalidInputException</code> if invalid auth response is provided.
///   </li>
///   <li>
///     <code>SDKRuntimeException</code> if some internal error occurred.
///   </li>
/// </ul>
- (BOOL)doChallengeWithAuthResponse:(NSString * _Nonnull)authResponse navigationController:(UINavigationController * _Nonnull)navigationController threeDSRequestorAppURL:(NSString * _Nullable)threeDSRequestorAppURL challengeCallback:(id <OPPThreeDSChallengeCallback> _Nonnull)challengeCallback error:(NSError * _Nullable * _Nullable)error;
/// Returns the processing screen which displays the Directory Server logo, and a graphical element to indicate that an activity is being processed.
///
/// throws:
///
/// <ul>
///   <li>
///     <code>SDKRuntimeException</code> if some internal error occurred
///   </li>
/// </ul>
///
/// returns:
/// <code>ProgressView</code> object to be shown while transaction is processing.
- (ProgressView * _Nullable)getProgressViewAndReturnError:(NSError * _Nullable * _Nullable)error SWIFT_WARN_UNUSED_RESULT;
/// Cleans up resources that are held by the transaction object.
/// note:
/// This method is required to be called only when the <code>doChallenge(authResponse:navigationController:challengeCallback:)</code> method is not called in the transaction. E.g. you want to cancel transaction instead of requesting challenge authentication.
///
/// throws:
///
/// <ul>
///   <li>
///     <code>SDKRuntimeException</code> if some internal error occurred
///   </li>
/// </ul>
- (BOOL)closeAndReturnError:(NSError * _Nullable * _Nullable)error;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

/// An enumeration for possible modes to switch between test and live environment.
typedef SWIFT_ENUM(NSInteger, OPPThreeDSTransactionMode, open) {
/// The mode to process transaction in test system. Might be not available for some brands.
  OPPThreeDSTransactionModeTest = 0,
/// The mode to process transaction in live system.
  OPPThreeDSTransactionModeLive = 1,
};

/// An enumeration for the various types of status for the 3-D Secure 2 transaction.
typedef SWIFT_ENUM(NSInteger, OPPThreeDSTransactionStatus, open) {
/// Authentication/verification successful.
  OPPThreeDSTransactionStatusAuthenticated = 0,
/// Not authentication/not verified, but a proof of attempted authentication/verification is provided.
  OPPThreeDSTransactionStatusAttemptProcessingPerformed = 1,
/// Not authenticated or account not verified, transaction denied.
  OPPThreeDSTransactionStatusDenied = 2,
/// Issuer is rejecting authentication/verification and request that authorisation not attempted.
  OPPThreeDSTransactionStatusRejected = 3,
/// Authentication/verification cannot be performed due to some technical or other problems.
  OPPThreeDSTransactionStatusFailed = 4,
/// Undefined transaction status.
  OPPThreeDSTransactionStatusUndefined = 5,
};

#if __has_attribute(external_source_symbol)
# pragma clang attribute pop
#endif
#pragma clang diagnostic pop
#endif

#endif
