import SessionProtocolKit @objc public final class SNMessagingKitConfiguration : NSObject { public let storage: SessionMessagingKitStorageProtocol @objc public let signalStorage: SessionStore & PreKeyStore & SignedPreKeyStore public let identityKeyStore: IdentityKeyStore public let sessionRestorationImplementation: SessionRestorationProtocol public let certificateValidator: SMKCertificateValidator @objc public static var shared: SNMessagingKitConfiguration! fileprivate init( storage: SessionMessagingKitStorageProtocol, signalStorage: SessionStore & PreKeyStore & SignedPreKeyStore, identityKeyStore: IdentityKeyStore, sessionRestorationImplementation: SessionRestorationProtocol, certificateValidator: SMKCertificateValidator ) { self.storage = storage self.signalStorage = signalStorage self.identityKeyStore = identityKeyStore self.sessionRestorationImplementation = sessionRestorationImplementation self.certificateValidator = certificateValidator } } public enum SNMessagingKit { // Just to make the external API nice public static func configure( storage: SessionMessagingKitStorageProtocol, signalStorage: SessionStore & PreKeyStore & SignedPreKeyStore, identityKeyStore: IdentityKeyStore, sessionRestorationImplementation: SessionRestorationProtocol, certificateValidator: SMKCertificateValidator ) { SNMessagingKitConfiguration.shared = SNMessagingKitConfiguration( storage: storage, signalStorage: signalStorage, identityKeyStore: identityKeyStore, sessionRestorationImplementation: sessionRestorationImplementation, certificateValidator: certificateValidator ) } }