#if 0
#elif defined(__arm64__) && __arm64__
// Generated by Apple Swift version 6.2.1 effective-5.10 (swiftlang-6.2.1.4.8 clang-1700.4.4.1)
#ifndef PINGONESDK_SWIFT_H
#define PINGONESDK_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"
#if defined(__OBJC__)
#include <Foundation/Foundation.h>
#endif
#if defined(__cplusplus)
#include <cstdint>
#include <cstddef>
#include <cstdbool>
#include <cstring>
#include <stdlib.h>
#include <new>
#include <type_traits>
#else
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>
#include <string.h>
#endif
#if defined(__cplusplus)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wnon-modular-include-in-framework-module"
#if defined(__arm64e__) && __has_include(<ptrauth.h>)
# include <ptrauth.h>
#else
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wreserved-macro-identifier"
# ifndef __ptrauth_swift_value_witness_function_pointer
#  define __ptrauth_swift_value_witness_function_pointer(x)
# endif
# ifndef __ptrauth_swift_class_method_pointer
#  define __ptrauth_swift_class_method_pointer(x)
# endif
#pragma clang diagnostic pop
#endif
#pragma clang diagnostic pop
#endif

#if !defined(SWIFT_TYPEDEFS)
# define SWIFT_TYPEDEFS 1
# if __has_include(<uchar.h>)
#  include <uchar.h>
# elif !defined(__cplusplus)
typedef unsigned char char8_t;
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 !defined(SWIFT_RUNTIME_NAME)
# if __has_attribute(objc_runtime_name)
#  define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X)))
# else
#  define SWIFT_RUNTIME_NAME(X) 
# endif
#endif
#if !defined(SWIFT_COMPILE_NAME)
# if __has_attribute(swift_name)
#  define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X)))
# else
#  define SWIFT_COMPILE_NAME(X) 
# endif
#endif
#if !defined(SWIFT_METHOD_FAMILY)
# if __has_attribute(objc_method_family)
#  define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X)))
# else
#  define SWIFT_METHOD_FAMILY(X) 
# endif
#endif
#if !defined(SWIFT_NOESCAPE)
# if __has_attribute(noescape)
#  define SWIFT_NOESCAPE __attribute__((noescape))
# else
#  define SWIFT_NOESCAPE 
# endif
#endif
#if !defined(SWIFT_RELEASES_ARGUMENT)
# if __has_attribute(ns_consumed)
#  define SWIFT_RELEASES_ARGUMENT __attribute__((ns_consumed))
# else
#  define SWIFT_RELEASES_ARGUMENT 
# endif
#endif
#if !defined(SWIFT_WARN_UNUSED_RESULT)
# if __has_attribute(warn_unused_result)
#  define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
# else
#  define SWIFT_WARN_UNUSED_RESULT 
# endif
#endif
#if !defined(SWIFT_NORETURN)
# if __has_attribute(noreturn)
#  define SWIFT_NORETURN __attribute__((noreturn))
# else
#  define SWIFT_NORETURN 
# endif
#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 __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 !defined(SWIFT_DEPRECATED_OBJC)
# 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
#endif
#if defined(__OBJC__)
#if !defined(IBSegueAction)
# define IBSegueAction 
#endif
#endif
#if !defined(SWIFT_EXTERN)
# if defined(__cplusplus)
#  define SWIFT_EXTERN extern "C"
# else
#  define SWIFT_EXTERN extern
# endif
#endif
#if !defined(SWIFT_CALL)
# define SWIFT_CALL __attribute__((swiftcall))
#endif
#if !defined(SWIFT_INDIRECT_RESULT)
# define SWIFT_INDIRECT_RESULT __attribute__((swift_indirect_result))
#endif
#if !defined(SWIFT_CONTEXT)
# define SWIFT_CONTEXT __attribute__((swift_context))
#endif
#if !defined(SWIFT_ERROR_RESULT)
# define SWIFT_ERROR_RESULT __attribute__((swift_error_result))
#endif
#if defined(__cplusplus)
# define SWIFT_NOEXCEPT noexcept
#else
# define SWIFT_NOEXCEPT 
#endif
#if !defined(SWIFT_C_INLINE_THUNK)
# if __has_attribute(always_inline)
# if __has_attribute(nodebug)
#  define SWIFT_C_INLINE_THUNK inline __attribute__((always_inline)) __attribute__((nodebug))
# else
#  define SWIFT_C_INLINE_THUNK inline __attribute__((always_inline))
# endif
# else
#  define SWIFT_C_INLINE_THUNK inline
# endif
#endif
#if defined(_WIN32)
#if !defined(SWIFT_IMPORT_STDLIB_SYMBOL)
# define SWIFT_IMPORT_STDLIB_SYMBOL __declspec(dllimport)
#endif
#else
#if !defined(SWIFT_IMPORT_STDLIB_SYMBOL)
# define SWIFT_IMPORT_STDLIB_SYMBOL 
#endif
#endif
#if defined(__OBJC__)
#if __has_feature(objc_modules)
#if __has_warning("-Watimport-in-framework-header")
#pragma clang diagnostic ignored "-Watimport-in-framework-header"
#endif
@import Foundation;
@import ObjectiveC;
#endif

#endif
#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"
#pragma clang diagnostic ignored "-Wdollar-in-identifier-extension"
#pragma clang diagnostic ignored "-Wunsafe-buffer-usage"

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

#if defined(__OBJC__)

@class NSString;
@class NSError;
/// Public class that contains data of authenticate with code response
SWIFT_CLASS("_TtC10PingOneSDK20AuthenticationObject")
@interface AuthenticationObject : NSObject
/// List of users that are paired to this device. Each user object can contain the following String variables: <code>userId</code>, <code>email</code>, <code>given</code>, <code>family</code> and <code>username</code>.
@property (nonatomic, copy) NSArray<NSDictionary<NSString *, id> *> * _Nullable users;
/// String that determines if user approval is required to complete an authentication. Possible values: <code>REQUIRED</code> and <code>NOT_REQUIRED</code>
@property (nonatomic, copy) NSString * _Nullable userApproval;
/// Object for passing any data as a String from server to end-user
@property (nonatomic, copy) NSString * _Nullable clientContext;
/// String value returned from a server when a user calls an authenticate API method. Possible values: can be <code>CLAIMED</code>, <code>EXPIRED</code>, <code>DENIED</code> or <code>COMPLETED</code>
@property (nonatomic, copy) NSString * _Nullable status;
/// Approve authentication with code
/// If <code>userApproval</code> is <code>REQUIRED</code> or multiple users may approve the authentication,
/// call this method with a userId of the user, who triggered the method.
/// <ul>
///   <li>
///     Returns completionHandler: Will return status String value with one of the following values:
///     <code>COMPLETED</code> or <code>EXPIRED</code>.
///     Returns NSError in case of an error.
///   </li>
/// </ul>
/// \param userId String value of the user id, fetched from the user object.
///
- (void)approveWithUserId:(NSString * _Nonnull)userId completionHandler:(void (^ _Nonnull)(NSString * _Nullable, NSError * _Nullable))completionHandler;
/// Deny authentication with code
/// If <code>userApproval</code> is <code>REQUIRED</code> or multiple users may deny the authentication,
/// call this method with a userId of the user, who triggered the method.
/// <ul>
///   <li>
///     Returns completionHandler: Will return status String value with one of the following values:
///     <code>DENIED</code> or <code>EXPIRED</code>.
///     Returns NSError in case of an error.
///   </li>
/// </ul>
/// \param userId String value of the user id, fetched from the user object.
/// This field is not mandatory, authentication can be denied without passing this value.
///
- (void)deny:(NSString * _Nullable)userId completionHandler:(void (^ _Nonnull)(NSString * _Nullable, NSError * _Nullable))completionHandler;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

enum AuthenticatorType : NSInteger;
enum AuthenticatorStatus : NSInteger;
/// AuthenticatorModel public class contains the acceptable authorization methods and its status
SWIFT_CLASS("_TtC10PingOneSDK18AuthenticatorModel")
@interface AuthenticatorModel : NSObject
/// The Authenticator type
@property (nonatomic, readonly) enum AuthenticatorType type;
/// The Authenticator status
@property (nonatomic, readonly) enum AuthenticatorStatus status;
/// Error message in case of authorization method failure
@property (nonatomic, readonly, copy) NSString * _Nullable errorCode;
/// Error code in case of authorization method failure
@property (nonatomic, readonly, copy) NSString * _Nullable errorMessage;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

typedef SWIFT_ENUM(NSInteger, AuthenticatorType, open) {
/// Unknown type of authenticator
  AuthenticatorTypeUnknown = -1,
/// Authenticator with push type
  AuthenticatorTypePush = 0,
/// Authenticator with one time passcode type
  AuthenticatorTypeOneTimePasscode = 1,
};

typedef SWIFT_ENUM(NSInteger, AuthenticatorStatus, open) {
/// Unknown authenticator status
  AuthenticatorStatusUnknown = -1,
/// Authenticator received completed status
  AuthenticatorStatusCompleted = 0,
/// Authenticator received failed status
  AuthenticatorStatusFailed = 1,
};

/// PingOne SDK error codes.
/// | Error Code                        | Value  |
/// |———————————–|––––|
/// | <code>internalError</code>                   | 10000  |
/// | <code>deviceTokenIsMissing</code>            | 10001  |
/// | <code>unrecognizedRemoteNotification</code>  | 10002  |
/// | <code>serverError</code>                     | 10003  |
/// | <code>noConnectivity</code>                  | 10004  |
/// | <code>pairingKey</code>                      | 10005  |
/// | <code>bundleId</code>                        | 10006  |
/// | <code>deviceIsNotPaired</code>               | 10008  |
/// | <code>pushConfirmationTimeout</code>         | 10009  |
/// | <code>passcodeNotValid</code>                | 10010  |
/// | <code>authCodeInvalid</code>                 | 10011  |
/// | <code>failedPolicyRequirements</code>        | 10012  |
/// | <code>pairingAlreadyRunning</code>           | 10013  |
/// | <code>migrationAlreadyRunning</code>         | 10014  |
/// | <code>migrationNotNeeded</code>              | 10015  |
/// | <code>testPushAlreadyRunning</code>          | 10016  |
/// | <code>trustFailed</code>                     | 10017  |
/// | <code>configureError</code>                  | 10018  |
/// | <code>cantUpdateRegion</code>                | 10019  |
/// | <code>authCanceled</code>                    | 10020  |
/// | <code>internalUsage</code>                   | 10021  |
/// | <code>unpairAlreadyRunning</code>            | 10022  |
/// | <code>deviceMismatch</code>    | 10023  |
/// | <code>failedDeviceRequirementEvaluation</code>       | 10024  |
typedef SWIFT_ENUM(NSInteger, ErrorCode, open) {
/// Internal Error.
  ErrorCodeInternalError = 10000,
/// Device token was missing and is required to complete this action.
  ErrorCodeDeviceTokenIsMissing = 10001,
/// Remote notification isn’t from PingOne.
  ErrorCodeUnrecognizedRemoteNotification = 10002,
/// There was a server error.
  ErrorCodeServerError = 10003,
/// There was a problem with the network.
  ErrorCodeNoConnectivity = 10004,
/// There was a problem with the pairing key.
  ErrorCodePairingKey = 10005,
/// There was a problem with the bundle id.
  ErrorCodeBundleId = 10006,
/// Device is not paired.
  ErrorCodeDeviceIsNotPaired = 10008,
/// Client confirmation delay responding to push notification, resulted in timeout.
  ErrorCodePushConfirmationTimeout = 10009,
/// Client failed to verify due to invalid one time passcode sent to the server..
  ErrorCodePasscodeNotValid = 10010,
/// Authentication code is not valid
  ErrorCodeAuthCodeInvalid = 10011,
/// Mobile device does not comply with policy requirements.
  ErrorCodeFailedPolicyRequirements = 10012,
/// Pairing is currently in progress - you cannot make another API call until it is completed.
  ErrorCodePairingAlreadyRunning = 10013,
/// Migration is currently in progress - you cannot make another API call until it is completed.
  ErrorCodeMigrationAlreadyRunning = 10014,
/// The device does not need to be migrated because it is already paired.
  ErrorCodeMigrationNotNeeded = 10015,
/// Test remote notification is currently in progress - you cannot make another API call until it is completed.
  ErrorCodeTestPushAlreadyRunning = 10016,
/// The client failed to establish trust with the server.
  ErrorCodeTrustFailed = 10017,
/// The SDK was not configured. Make sure to run the configure(PingOneGeo) method first.
  ErrorCodeConfigureError = 10018,
/// The device is already trusted with a certain geo and cannot set a new one using configure(PingOneGeo). If needed to change the geo, the device should be reset by calling the removePingOneLocalData() method.
  ErrorCodeCantUpdateGeo = 10019,
/// The authentication was canceled, approval or denial is not possible.
  ErrorCodeAuthCanceled = 10020,
/// Unpair is currently in progress - you cannot make another API call until it is completed.
  ErrorCodeUnpairAlreadyRunning = 10021,
/// This API is for internal use only.
  ErrorCodeInternalUsage = 10022,
/// The authentication attempt is made from a device that does not match the one that was used to start the authentication process.
  ErrorCodeDeviceMismatch = 10023,
/// Push validation failed because the device did not meet requirements evaluation.
  ErrorCodeFailedDeviceRequirementEvaluation = 10024,
};

/// Enum that represents the migration status returned from the SDK
typedef SWIFT_ENUM(NSInteger, MigrationStatus, open) {
/// There is no PingID data that has to be migrated.
  MigrationStatusNotNeeded = 10000,
/// Migration completed.
  MigrationStatusDone = 10001,
/// Migration failed.
  MigrationStatusFailed = 10002,
/// Migration failed due to server error, client can try again.
  MigrationStatusTemporaryFailed = 10003,
/// Migration in progress.
  MigrationStatusInProgress = 10004,
};

enum NotificationType : NSInteger;
@class NSNumber;
enum DenyReason : NSInteger;
/// A Notification Object represents an authentication request via remote notification. It can be approved or denied.
SWIFT_CLASS("_TtC10PingOneSDK18NotificationObject")
@interface NotificationObject : NSObject
/// Describes the purpose of the notification.
@property (nonatomic, readonly) enum NotificationType notificationType;
/// The maximum time duration allowed from getting push till user response.
@property (nonatomic, readonly) NSInteger timeoutDuration;
/// Extra context string included with the push payload under “client-context”.
@property (nonatomic, readonly, copy) NSString * _Nonnull clientContext;
/// Arbitrary application-defined parameters included with the push payload under “application-context”
@property (nonatomic, readonly, copy) NSDictionary<NSString *, id> * _Nonnull applicationContext;
/// Array of integer options for number matching
@property (nonatomic, readonly, copy) NSArray<NSNumber *> * _Nonnull numberMatchingOptions;
/// Type of number matching. If it is SELECT_NUMBER, the user will pick a number from numberMatchingOptions. If it is ENTER_MANUALLY, the number will be entered manually, and no options will be presented.
@property (nonatomic, readonly, copy) NSString * _Nonnull numberMatchingType;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
/// Approve authentication
/// \param withAuthenticationMethod The <code>String</code> is the authentication method that was used to authenticate the user on the authenticating device, for example, fpt (fingerprint), face (facial recognition) etc. Refer to the “amr” (Authentication Method Reference) values in https://tools.ietf.org/html/rfc8176/#section-2 .
///
/// \param numberMatchingPickedValue The user-selected number when number matching is enabled.
///
/// \param completionHandler Will return NSError in case of an error.
///
- (void)approveWithAuthenticationMethod:(NSString * _Nullable)withAuthenticationMethod numberMatchingPickedValue:(NSNumber * _Nullable)numberMatchingPickedValue completionHandler:(void (^ _Nonnull)(NSError * _Nullable))completionHandler SWIFT_DEPRECATED_MSG("please use approve(withAuthenticationMethod:completion) instead");
/// Approve authentication
/// <code>confirmationInfo</code> when device requirements evaluation fails:
/// \code
/// {
///   "deviceRequirementsEvaluation": {
///     "status": "Failed",
///     "reason": "deviceBrandsDisAllowed",
///     "deviceRequirementsDataHash": "tK3pi0+/RSd0m7O3S0Q+IpOYu+Q/kOE5sLVFx9rAAXk="
///   }
/// }
///
/// \endcode<code>confirmationInfo</code> when device requirements evaluation passes:
/// \code
/// {
///   "deviceRequirementsEvaluation": {
///     "status": "Passed",
///     "reason": null,
///     "deviceRequirementsDataHash": "tK3pi0+/RSd0m7O3S0Q+IpOYu+Q/kOE5sLVFx9rAAXk="
///   }
/// }
///
/// \endcode\param withAuthenticationMethod The <code>String</code> is the authentication method that was used to authenticate the user on the authenticating device, for example, fpt (fingerprint), face (facial recognition) etc. Refer to the “amr” (Authentication Method Reference) values in https://tools.ietf.org/html/rfc8176/#section-2 .
///
/// \param numberMatchingPickedValue The user-selected number when number matching is enabled.
///
/// \param completion Info object with device requirements evaluation data and
/// NSError in case of an error. The <code>confirmationInfo</code> dictionary contains the server’s
/// device requirements evaluation.
///
- (void)approveWithAuthenticationMethod:(NSString * _Nullable)withAuthenticationMethod numberMatchingPickedValue:(NSNumber * _Nullable)numberMatchingPickedValue completion:(void (^ _Nonnull)(NSDictionary<NSString *, id> * _Nullable, NSError * _Nullable))completion;
/// Deny authentication
/// \param completionHandler Will return NSError in case of an error.
///
- (void)denyWithCompletionHandler:(void (^ _Nonnull)(NSError * _Nullable))completionHandler SWIFT_DEPRECATED_MSG("please use deny(reason:completionHandler) instead");
/// Deny authentication
/// \param reason <code>DenyReason</code> that describes the reason for the deny.
///
/// \param completionHandler Will return NSError in case of an error.
///
- (void)denyWithReason:(enum DenyReason)reason completionHandler:(void (^ _Nonnull)(NSError * _Nullable))completionHandler;
@end

/// Type that describes the purpose of the notification.
typedef SWIFT_ENUM(NSInteger, NotificationType, open) {
/// Notification was not recognized.
  NotificationTypeNone = -1,
/// Notification process has finished. No further action is required.
  NotificationTypeDone = 0,
/// Authentication notification that should be presented to the user and followed with the <code>approve</code> or <code>deny</code> method.
  NotificationTypeAuthentication = 1,
/// Authentication process was canceled by the user.
  NotificationTypeAuthCanceled = 2,
};

/// Reason for denying authentication.
typedef SWIFT_ENUM(NSInteger, DenyReason, open) {
/// Deny and report fraud in the server audit log.
  DenyReasonReportFraud = 0,
/// Deny and report biometric rejection in the server audit log.
  DenyReasonBiometricsRejected = 1,
/// Defualt deny
  DenyReasonNone = 2,
};

enum TestResult : NSInteger;
/// Public class that contains data of notifications tests
SWIFT_CLASS("_TtC10PingOneSDK16NotificationTest")
@interface NotificationTest : NSObject
/// The name of the test.
@property (nonatomic, copy) NSString * _Nonnull name;
/// The description of the test.
@property (nonatomic, copy) NSString * _Nonnull testDescription;
/// The test result represented by <code>TestResult</code>.
@property (nonatomic) enum TestResult testResult;
/// In case the test didn’t pass, information that explains the failure reason and how to overcome it.
@property (nonatomic, copy) NSString * _Nonnull resultsInfo;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// Public enum that describes the notification test result.
typedef SWIFT_ENUM(NSInteger, TestResult, open) {
/// Test passed successfully.
  TestResultPass = 0,
/// Test failed, push notification will not show.
  TestResultFail = 1,
/// Test failed but possibly push notification will show with some limitation.
  TestResultWarning = 2,
};

/// Public enum that describes the notification of all tests name, description, and resulstsInfo.
typedef SWIFT_ENUM(NSInteger, TestType, open) {
  TestTypeTokenType = 0,
  TestTypeAllowNotification = 1,
  TestTypeToken = 2,
  TestTypeNotificationsSetting = 3,
  TestTypeBackgroundSetting = 4,
  TestTypeConnectivity = 5,
  TestTypeCategories = 6,
  TestTypeTestPush = 7,
  TestTypeSetPushPayloadToSDK = 8,
};

/// Public class that contains data of the One Time Passcode
SWIFT_CLASS("_TtC10PingOneSDK19OneTimePasscodeInfo")
@interface OneTimePasscodeInfo : NSObject
/// The generated passcode
@property (nonatomic, readonly, copy) NSString * _Nonnull passcode;
/// The time of expiration of the code.
/// it is provided in double format which holds the future time in milliseconds divided by 1000 to represent seconds
@property (nonatomic, readonly) double validUntil;
/// The time of creation of the passcode.
@property (nonatomic, readonly) double validFrom;
/// The total life span of the passcode since it was created until it expired. The time unit is seconds
@property (nonatomic, readonly) NSInteger timeWindowSize;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

/// Public PairingInfo class contains data about pairing resolution
SWIFT_CLASS("_TtC10PingOneSDK11PairingInfo")
@interface PairingInfo : NSObject
/// List of authentication methods and their statuses
@property (nonatomic, copy) NSArray<AuthenticatorModel *> * _Nonnull authenticatorsArray;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

/// PairingObject represents a pairing request that can be approved or ignored.
SWIFT_CLASS("_TtC10PingOneSDK13PairingObject")
@interface PairingObject : NSObject
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
/// Approve pairing
/// \param completionHandler Will return NSError in case of an error.
///
- (void)approveWithCompletionHandler:(void (^ _Nonnull)(NSError * _Nullable))completionHandler SWIFT_DEPRECATED_MSG("please use approve(completion: @escaping (_ response: PairingInfo?, _ error: NSError?) -> Void)");
/// Approve pairing
/// \param completionHandler Will return PairingInfo object containing data about pairing resolution, and NSError in case of an error.
///
- (void)approveWithCompletion:(void (^ _Nonnull)(PairingInfo * _Nullable, NSError * _Nullable))completion;
@end

enum PingOneGeo : NSInteger;
@class NSData;
enum APNSDeviceTokenType : NSInteger;
@class UNNotificationCategory;
enum LogLevel : NSInteger;
SWIFT_CLASS("_TtC10PingOneSDK7PingOne")
@interface PingOne : NSObject
/// Generate a payload string for any communication needed between the customer mobile app and the PingOne server.
/// The PingOne Native SDK returns a native payload to the customer native application.
/// The payload is a small data package created by the PingOne Native SDK component,
/// which is used as part of the device’s authorization.
///
/// throws:
/// NSError if failed to create payload.
///
/// returns:
/// The mobile payload string.
+ (NSString * _Nullable)generateMobilePayloadAndReturnError:(NSError * _Nullable * _Nullable)error SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_MSG("please use generateMobilePayload(completionHandler: @escaping (_ payload: String?, _ error: NSError?) -> Void)");
/// Generate a payload string for any communication needed between the customer mobile app and the PingOne server.
/// The PingOne Native SDK returns a native payload to the customer native application.
/// The payload is a small data package created by the PingOne Native SDK component,
/// which is used as part of the device’s authorization.
///
/// returns:
/// The mobile <code>payload</code> string.
/// In case of failure to create payload, an <code>NSError</code> is passed to the completion handler.
+ (void)generateMobilePayloadWithCompletionHandler:(void (^ _Nonnull)(NSString * _Nullable, NSError * _Nullable))completionHandler;
/// Initializes the PingOne SDK for a specific geographical server.
/// <blockquote>
/// Warning: If this method is not called, the SDK will throw an error.
///
/// </blockquote>
/// \param geo The selected enum value.
/// Possible values are: <code>NorthAmerica</code>, <code>Europe</code>, <code>Canada</code>, <code>Australia</code> and <code>Singapore</code>.
///
///
/// returns:
/// NSError in case of an error.
+ (void)configureWithGeo:(enum PingOneGeo)geo completionHandler:(void (^ _Nonnull)(NSError * _Nullable))completionHandler;
/// Pair device
/// Pairs the device with the PingOne server using the <code>pairing key</code>.
/// \param pairingKey pairing key as a string.
///
///
/// returns:
/// A completionHandler object which contains an error in case the pair failed.
+ (void)pair:(NSString * _Nonnull)pairingKey completionHandler:(void (^ _Nonnull)(NSError * _Nullable))completionHandler SWIFT_DEPRECATED_MSG("please use pair(_ pairingKey: String, completion: @escaping (_ response: PairingInfo? , NSError?) instead");
/// Pair device
/// Pairs the device with the PingOne server using the <code>pairing key</code>.
/// \param pairingKey pairing key as a string.
///
///
/// returns:
/// a <code>completionHandler</code> which contains <code>PairingInfo</code>, a wrapper object that contains an array list with
/// authentication methods (One time passcode and Push) status.
/// In case of an error will return NSError.
/// Documentation for pairing object error codes can be found <a href="https://apidocs.pingidentity.com/pingone/native-sdks/v1/api/#pingone-mobile-sdk-for-ios">here</a>
+ (void)pair:(NSString * _Nonnull)pairingKey completion:(void (^ _Nonnull)(PairingInfo * _Nullable, NSError * _Nullable))completion;
/// Pair with automatic enrollment
/// When using OpenID Connect, this is a mandatory post action method which should be executed after receiving an ID token
/// from the PingOne server. If device authorization is triggered (i.e. verification that the user’s device
/// is already paired and active), processIdToken() will return nil, indicating that authorization has completed
/// and no further action needs to be taken.
/// \param idToken The token <code>String</code> value from the OIDExternalUserAgentSession authState object.
///
///
/// returns:
/// Will return PairingObject in case further action is required,
/// such as approving the pairing. In case of an error will return NSError.
+ (void)processIdToken:(NSString * _Nonnull)idToken completionHandler:(void (^ _Nonnull)(PairingObject * _Nullable, NSError * _Nullable))completionHandler;
/// Migrate from PingID
/// Migrates the PingID SDK application to the PingOne platform
///
/// returns:
/// a <code>completionHandler</code> which contains: <code>status</code> - integer that reflects the migration status,
/// <code>PairingInfo</code> - an array of the permitted authentication methods - see description of pair method
/// and <code>error</code> in case of an error will return NSError.
+ (void)migrateFromPingIDWithCompletionHandler:(void (^ _Nonnull)(enum MigrationStatus, PairingInfo * _Nullable, NSError * _Nullable))completionHandler;
/// INTERNAL USAGE ONLY: Remove a paired user
/// <blockquote>
/// Warning: This method is for internal use only and should not be used publicly.
///
/// </blockquote>
+ (void)unpair:(NSString * _Nonnull)geo environmentId:(NSString * _Nullable)environmentId userId:(NSString * _Nullable)userId completionHandler:(void (^ _Nonnull)(NSError * _Nullable))completionHandler;
/// Set device remote notification token
/// Setting should be done within the <code>application:didRegisterForRemoteNotificationsWithDeviceToken</code> method
/// in the appDelegate class.
/// <ul>
///   <li>
///     Parameters:
///   </li>
///   <li>
///     deviceToken: The <code>Data</code> received within the <code>application:didRegisterForRemoteNotificationsWithDeviceToken</code> method.
///   </li>
///   <li>
///     type: The <code>APNSDeviceTokenType</code> enum can be <code>production</code> or <code>sandbox</code> type.
///   </li>
/// </ul>
///
/// returns:
/// NSError in case of an error.
+ (void)setDeviceTokenWithToken:(NSData * _Nonnull)deviceToken type:(enum APNSDeviceTokenType)type completionHandler:(void (^ _Nonnull)(NSArray<NSError *> * _Nullable))completionHandler;
/// Run push notification test
/// This method tests the push notification flow for a specified paired geography.
/// \param geo The selected geography, represented by an enum value.
/// Valid options include: <code>NorthAmerica</code>, <code>Europe</code>, <code>Canada</code>, <code>Australia</code> and <code>Singapore</code>.
///
///
/// returns:
/// Array of <code>NotificationTest</code> objects and <code>NSError</code> in case of an error.
+ (void)testRemoteNotification:(enum PingOneGeo)geo completionHandler:(void (^ _Nonnull)(NSArray<NotificationTest *> * _Nullable, enum TestResult, NSError * _Nullable))completionHandler;
/// Get PingOne remote notification categories
/// PingOne provides the needed categories for notification. The developer may add categories.
/// <blockquote>
/// Tip: setting UNNotificationCategory more than once results in previous settings being overwritten.
///
/// </blockquote>
///
/// returns:
/// The remote notification categories.
+ (NSSet<UNNotificationCategory *> * _Nonnull)getUNNotificationCategories SWIFT_WARN_UNUSED_RESULT;
/// Allow push notification
/// Method that will notify the server to send or not to send push messages to this device.
/// Set to false to disable SDK push notifications.
/// \param allowed a boolean that will tell the server to send push messages or not. Defaults to <code>true</code>.
///
+ (void)allowPushNotifications:(BOOL)allowed;
/// Process the remote notification received from PingOne.
/// This method sets the notification data in the SDK and and gets back a PingOne notification object.
/// \param userInfo The <code>[AnyHashable : Any]</code> received in the AppDelegate <code>application(_:didReceiveRemoteNotification:fetchCompletionHandler:)</code> method.
///
///
/// returns:
/// Will return NSError in case of an error. Will return NotificationObject in case further action is required, such as approving or denying an authentication.
+ (void)processRemoteNotification:(NSDictionary * _Nonnull)userInfo completionHandler:(void (^ _Nonnull)(NotificationObject * _Nullable, NSError * _Nullable))completionHandler;
/// Process remote notification action
/// Tells PingOne server to perform the custom action specified by a remote notification. Should be within userNotificationCenter(_:didReceive:withCompletionHandler:) method.
/// <ul>
///   <li>
///     Parameters:
///   </li>
///   <li>
///     identifier: The <code>String</code> is the response.actionIdentifier received within userNotificationCenter(_:didReceive:withCompletionHandler:) method.
///   </li>
///   <li>
///     userInfo: The <code>[AnyHashable : Any]</code> received within userNotificationCenter(_:didReceive:withCompletionHandler:) method.
///   </li>
///   <li>
///     authenticationMethod: The <code>String</code> is the authentication method that was used to authenticate the user
///     on the authenticating device, for example, fpt (fingerprint), face (facial recognition) etc.
///     Refer to the “amr” (Authentication Method Reference) values <a href="https://tools.ietf.org/html/rfc8176/#section-2">here</a>
///   </li>
/// </ul>
///
/// returns:
/// completionHandler that will contain NSError in case of an error.
/// NotificationObject will be returned in case an action is required.
+ (void)processRemoteNotificationAction:(NSString * _Nonnull)identifier authenticationMethod:(NSString * _Nullable)authenticationMethod forRemoteNotification:(NSDictionary * _Nonnull)userInfo completionHandler:(void (^ _Nonnull)(NotificationObject * _Nullable, NSError * _Nullable))completionHandler;
/// Get info
/// Returns all the paired users from the PingOne server.
/// \code
/// {
///    "NorthAmerica": {
///        "devices": [
///            {
///                "id": "6f05692a-b34b-4036-ae4d-ab1810ec651c",
///                "environment": {
///                    "id": "1e41d166-8012-4fa2-b755-15cd7c8a03de"
///                },
///                "user": {
///                    "id": "897fbc68-57d2-4b1e-84c8-dd36289d2b8b"
///                },
///                "name": {
///                    "given": "John",
///                    "family": "Doe"
///                }
///            }
///        ],
///        "public": {
///            "deviceRequirementsEvaluation": {
///                "status": "PASSED",
///                "deviceRequirementsDataHash": "rQiHGVi82gtuG3u65GlDk1J3PoKl2ZA9HYXNNWQJfPs="
///            },
///            "users": [
///                {
///                    "id": "c845dcd4-9696-45ce-b1b8-8797da941538",
///                    "device": {
///                        "id": "6aacc46f-6a7f-42fe-8b4b-f87146037388"
///                    },
///                    "environment": {
///                        "id": "803ca4d4-cd92-4cb8-9dd1-6fe68de0a5f0"
///                    }
///                }
///            ]
///        }
///    }
/// }
///
/// \endcode
/// returns:
/// Returns all the users that are paired to the device, per geographical server name.
/// For each user the response includes its user id, first name, last name and the device id.
/// Each device item may also include a <code>"public"</code> key at its root containing device requirements
/// evaluation results and associated users.
+ (void)getInfoWithCompletion:(void (^ _Nonnull)(NSDictionary<NSString *, id> * _Nullable, NSArray<NSError *> * _Nullable))completionHandler;
/// Get info
/// Returns all the paired users from the PingOne server.
/// {
/// “users”: [
/// {
/// “id”: “6f05692a-b34b-4036-ae4d-ab1810ec651c”,
/// “environment”: {
/// “id”: “1e41d166-8012-4fa2-b755-15cd7c8a03de”
/// },
/// “device”: {
/// “id”: “897fbc68-57d2-4b1e-84c8-dd36289d2b8b”
/// },
/// “name”: {
/// “given”: “John”,
/// “family”: “Doe”
/// }
/// }
/// ]
/// }
///
/// returns:
/// Returns all the users that are paired to the device.
/// For each user the response includes its user id, first name, last name and the device id.
+ (void)getInfo:(void (^ _Nonnull)(NSDictionary<NSString *, id> * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_MSG("please use getInfo(completion completionHandler: @escaping (_ deviceInfo: [String: Any]?, _ errors: [NSError]?) -> Void) instead");
/// Authenticate with code
/// PingOne SDK provides an ability to authenticate via scanning the QR code.
/// The retrieved value should be passed to the PingOne SDK using the following API method.
/// \param authCode String value of the authentication code, parsed from QR or manual input.
///
///
/// returns:
/// a completionHandler that contains <code>authenticationObject</code>: users list array, clientContext object,
/// userApproval String and status String. In case of an error will return NSError.
+ (void)authenticate:(NSString * _Nonnull)authCode completionHandler:(void (^ _Nonnull)(AuthenticationObject * _Nullable, NSError * _Nullable))completionHandler;
/// Get one time passcode
/// Requests the SDK to provide a one time passcode for authentication.
///
/// returns:
/// a completionHandler that contains OneTimePasscodeInfo object.
/// It will contain all the data of the one time passcode if available.
/// In case of an error will return NSError.
+ (void)getOneTimePasscode:(void (^ _Nonnull)(OneTimePasscodeInfo * _Nullable, NSError * _Nullable))completionHandler;
/// Process remote notification action
/// Tells PingOne server to perform the custom action specified by a remote notification. Should be within userNotificationCenter(_:didReceive:withCompletionHandler:) method.
/// \param identifier The <code>String</code> is the response.actionIdentifier received within userNotificationCenter(_:didReceive:withCompletionHandler:) method.
///
/// \param userInfo The <code>[AnyHashable : Any]</code> received within userNotificationCenter(_:didReceive:withCompletionHandler:) method.
///
///
/// returns:
/// a completionHandler will return NSError in case of an error.
/// NotificationObject will be returned in case an action is required.
+ (void)processRemoteNotificationAction:(NSString * _Nonnull)identifier forRemoteNotification:(NSDictionary * _Nonnull)userInfo completionHandler:(void (^ _Nonnull)(NotificationObject * _Nullable, NSError * _Nullable))completionHandler SWIFT_DEPRECATED_MSG("please use processRemoteNotificationAction(identifier:authenticationMethod:userInfo) instead");
/// Remove PingOne local data
/// One-sided remove data method for development use only.
/// <blockquote>
/// Warning: Using this method will remove the trusted connection between the iOS SDK and the PingOne server
/// in a one sided manner, where only the iOS side will be removed.
/// This method should not be used when logging out of your account.
/// This method should only be used in development.
///
/// </blockquote>
+ (void)removePingOneLocalData;
/// The developer can decide if the device will stay paired after app reinstallation. This method should only be called once.
/// \param stayPaired The <code>Bool</code> value. <code>true</code> to stay paired. Defaults to <code>false</code>.
///
+ (void)setDevicePairedAfterReinstall:(BOOL)stayPaired SWIFT_DEPRECATED_MSG("Avoid using the setDevicePairedAfterReinstall method, as it is deprecated and scheduled for removal in an upcoming release.");
/// Send logs
/// This method will send logs to the PingOne server.
/// <blockquote>
/// Tip: The supportId can then be forwarded to the Ping Identity support team to review the logs.
///
/// </blockquote>
///
/// returns:
/// will return NSError in case of an error.
/// A supportId will be returned when the logs have been sent successfully.
+ (void)sendLogsWithCompletionHandler:(void (^ _Nonnull)(NSString * _Nullable, NSError * _Nullable))completionHandler;
/// INTERNAL USAGE ONLY: Logs a message.
/// <blockquote>
/// Warning: This method is for internal use only and should not be used publicly.
///
/// </blockquote>
+ (void)logWithProvider:(NSString * _Nonnull)provider level:(enum LogLevel)level message:(NSString * _Nonnull)message;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

/// Type that describes the APNS environment.
/// It is possible to establish a connection between the PingOne server and one of the following Apple servers:
/// Development (<code>sandbox</code>) or <code>production</code> server.
typedef SWIFT_ENUM(NSInteger, APNSDeviceTokenType, open) {
/// Production environment.
  APNSDeviceTokenTypeProduction = 0,
/// Sandbox environment.
  APNSDeviceTokenTypeSandbox = 1,
};

/// INTERNAL USAGE ONLY: Log level enum
/// <blockquote>
/// Warning: This Enum is for internal use only and should not be used publicly.
///
/// </blockquote>
typedef SWIFT_ENUM(NSInteger, LogLevel, open) {
  LogLevelVerbose = 0,
  LogLevelDebug = 1,
  LogLevelInfo = 2,
  LogLevelWarn = 3,
  LogLevelError = 4,
};

/// Public enum that describes the geographical servers available for PingOne SDK.
typedef SWIFT_ENUM(NSInteger, PingOneGeo, open) {
/// North America
  PingOneGeoNorthAmerica = 0,
/// Europe
  PingOneGeoEurope = 1,
/// Australia
  PingOneGeoAustralia = 2,
/// Canada
  PingOneGeoCanada = 3,
/// Singapore
  PingOneGeoSingapore = 4,
};

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

#else
#error unsupported Swift architecture
#endif
