ConversationParamProtocol

protocol ConversationParamProtocol {
    func getConversations() -> [Conversation]?
    func getConversations(_ predicate: NSPredicate?) -> [Conversation]?
    func getClosedConversations() -> [Conversation]?
    func getActiveConversation() -> Conversation?
    func getOpenConversation() -> Conversation?
    func getLatestClosedConversation(_ conversationsCount: Int) -> [Conversation]?
    func createNewConversation() -> Conversation
    func getQueryType() -> String
    func isConversationRelatedToQuery(_ conversation: Conversation) -> Bool
    func getBrandID() -> String
    func getQueryUID() -> String
    func getQueryProperties() -> [String : Any]
}

ConversationQueryType

enum ConversationQueryType: String {
    case Brand = "Brand"
    case Consumer = "Consumer"
}

LPAuthenticationParams

class LPAuthenticationParams: NSObject {
  var authenticationCode: String? // Code Flow authentication or PKCE code flow authentication
  var jwt: String? // Implicit Flow authentication
  var redirectURI: String? // Code Flow authentication
  var codeVerifier: String? // Used for PKCE code flow authentication
  var issuerDisplayName: String? //Used to specify IDP in Multiple IDP Scenerio. If not using MIDP leave blank. 
  var certPinningPublicKeys: [String]? //Cert pining validation public keys
  var type: LPAuthenticationType = .signup // User authentication type with "signup" as default
}

LPAuthenticationType

enum LPAuthenticationType: Int {
    case signup // The old unauthenticated method is deprecated as of July 2019
    case unauthenticated // New unauthenticated method for users without identity
    case authenticated // Authenticated users
}

LPCampaignInfo

class LPCampaignInfo: NSObject {
    var campaignId: Int
    var engagementId: Int
    var sessionId: String? // if "nil" SDE will not be sent to Agent
    var visitorId: String? // if "nil" SDE will not be sent to Agent
    var contextId: String
}

LPConversationCloseReason

enum LPConversationCloseReason: Int {
    case agent = 0
    case consumer
    case system
}

LPConversationHistoryControlParam

class LPConversationHistoryControlParam: NSObject {
  var historyConversationsStateToDisplay: LPConversationsHistoryStateToDisplay? // control what kind of conversation to show (Open/Close)
  var historyConversationsMaxDays: UInt? //get conversation that Closed/Opens in the last X days

  historyConversationMaxDaysType: LPConversationHistoryMaxDaysDateType? //Control if filter the max days by conversation start date or by conversation close date
}

LPConversationHistoryMaxDaysDateType

enum LPConversationHistoryMaxDaysDateType: Int {
    case startConversationDate    // Default
    case endConversationDate
}

LPConversationsHistoryStateToDisplay

enum LPConversationsHistoryStateToDisplay: Int {
    case open
    case close
}

LPConversationViewParams

class LPConversationViewParams: NSObject {
  var conversationQuery: ConversationParamProtocol!
  var containerViewController: UIViewController? // nil = WindowMode
  var isViewOnly = false
  var conversationHistoryControlParam: LPConversationHistoryControlParam? // nil = no history control filter
}

LPEngagementDetails

class LPEngagementDetails: NSObject {
    var campaignId: Int // CampaignID
    var engagementId: Int // EngagementID
    var connectorId: Int
    var engagementRevision: Int
    var conversationId: String? // Returned when there's an open conversation
    var status: String?
    var contextId: String?
}

LPGetEngagementResponse

class LPGetEngagementResponse: NSObject {
    var engagementDetails: [LPEngagementDetails]? // Optional Engagement Details response in case received from the server, per the Engagement's request
    var sessionId: String?
    var visitorId: String?
    var pageId: String? // PageID of the Engagement. If not sending one in request, a new one will be generated from server in the response
}

LPLog

class LPLog: NSObject {
    var timestamp: String?
    var className: String?
    var funcName: String?
    var text: String?
    var logLevel: LogLevel?
}

LPMonitoringInitParams

class LPMonitoringInitParams: NSObject {
    var appInstallId: String // App Install ID of the Mobile Campaign of the Brand
}

LPMonitoringParams

class LPMonitoringParams: NSObject {
    var entryPoints: [String]? // Entry points array of the Mobile App
    var engagementAttributes: [[String:Any]]? // Array of Engagement Attributes. SDE will not be sent to Agent if seesionID and visitorID are nil.
    var pageId: String? // PageID to send the SDEs for
}

LPNotification

class LPNotification: NSObject {
    var text: String
    var user: LPUser
    var accountID: String
    var isRemote: Bool
    var toString : String
}

LPSendSDEResponse

class LPSendSDEResponse: NSObject {
    var sessionId: String?
    var visitorId: String?
    var pageId: String? // PageID of the Engagement. If not sending one in request, a new one will be generated from server in the response
}

LPUser

class LPUser: NSObject {
    var firstName: String?
    var lastName: String?
    var profileImageURL: String?
    var phoneNumber: String?
    var employeeID: String?
    var uid: String?
}

LogLevel

enum LogLevel: Int {
    case TRACE
    case DEBUG
    case INFO
    case WARNING
    case ERROR
    case OFF
}

LPPKCEResponce

class LPPKCEResponce: NSObject {
    var codeVerifier: String // JWE generated by LP to be added in LPAuthenticationParams to be passed in showConversation() and on reconnect().
    var codeChallenge: String // Code Challenge to be used by the brand endpoint.
    var codeChallengeMethod: String //Encryption method used for the code challenge currently will always be S256 as that is the only supported type.
}

LPGetConversationsResponse

class LPGetConversationsResponse: NSObject {
    var data: [LPConversationDataDetails]? // Contains the data of the open conversation
    var links: LPConversationLinksDetails? // Contains the URL of the request made
    var message: String? // typically only exists when there is a 4xx or 5xx response from the API
    var code: String? // typically only exists when there is a 4xx or 5xx response from the API
}

LPConversationDataDetails

class LPConversationDataDetails: NSObject {
    var id: String? // if fullData is false on checkActiveConversationFromServer() this will be the only item returned inside the data object.
    var createdTs: String?
    var lastUpdatedTs: String?
    var brandId: String?
    var skillId: String?
    var state: String?
    var stage: String?
    var dialogs: [LPConversationDialogDetails]?
    var context: LPConversationContextDetails?
    var ttr: LPConversationTTRDetails?
    var campaignInfo: LPConversationCampaignDetails?
    var csat: LPConversationCSATDetails?
    var conversationRollOverHandler: LPConversationRolloverDetails?
}

LPConversationDialogDetails

class LPConversationDialogDetails: NSObject {
    var id: String?
    var createdTs: String?
    var lastUpdatedTs: String?
    var conversationId: String?
    var metaData: LPconversationMetaDataDetails?
    var closedTs: String?
    var participants: [LPconversationParticipantDetails]?
    var dialogType: String?
    var channelType: String?
    var state: String?
    var closedBy: String?
}

LPconversationMetaDataDetails

class LPconversationMetaDataDetails: NSObject {
    var appInstallId: String?
}

LPconversationParticipantDetails

class LPconversationParticipantDetails: NSObject {
    var id: String?
    var role: String?
    var state: String?
}

LPConversationContextDetails

class LPConversationContextDetails: NSObject {
    var type: String?
    var lang: String?
    var clientProperties: LPConversationClientPropertyDetails?
    var visitorId: String?
    var sessionId: String?
    var interactionContextId: String?
}

LPConversationClientPropertyDetails

class LPConversationClientPropertyDetails: NSObject {
    var appId: String?
    var appVersion: String?
    var ipAddress: String?
    var deviceFamily: String?
    var os: String?
    var osVersion: String?
    var osName: String?
    var integration: String?
    var integrationVersion: String?
    var timeZone: String?
    var deviceModel: String?
    var features: [String]?
}

LPConversationTTRDetails

class LPConversationTTRDetails: NSObject {
    var type: String?
    var value: Int
}

LPconversationCampaignDetails

class conversationCampaignDetails: NSObject 
    var campaignId: Int
    var engagementId: Int

LPConversationRolloverDetails

class LPConversationRolloverDetails: NSObject {
    var accountId: String?
    var skillId: String?
}

LPConversationLinksDetails

class LPConversationLinksDetails: NSObject {
    public var selfValue: String?
}