diff --git a/Sources/Confidence/Confidence.swift b/Sources/Confidence/Confidence.swift index 5078291..f0057a3 100644 --- a/Sources/Confidence/Confidence.swift +++ b/Sources/Confidence/Confidence.swift @@ -3,21 +3,25 @@ import Combine import os public class Confidence: ConfidenceEventSender { - public let clientSecret: String - public var region: ConfidenceRegion + private let clientSecret: String + private var region: ConfidenceRegion private let parent: ConfidenceContextProvider? private let eventSenderEngine: EventSenderEngine private let contextSubject = CurrentValueSubject([:]) private var removedContextKeys: Set = Set() private let confidenceQueue = DispatchQueue(label: "com.confidence.queue") - private let remoteFlagResolver: ConfidenceResolveClient private let flagApplier: FlagApplier private var cache = FlagResolution.EMPTY private var storage: Storage - internal let contextReconciliatedChanges = PassthroughSubject() private var cancellables = Set() private var currentFetchTask: Task<(), Never>? + // Internal for testing + internal let remoteFlagResolver: ConfidenceResolveClient + internal let contextReconciliatedChanges = PassthroughSubject() + + public static let sdkId: String = "SDK_ID_SWIFT_CONFIDENCE" + required init( clientSecret: String, region: ConfidenceRegion, @@ -240,6 +244,9 @@ public class Confidence: ConfidenceEventSender { } } + /** + Sets the initial Context. + */ public func withContext(_ context: ConfidenceStruct) -> Self { return Self.init( clientSecret: clientSecret, @@ -255,15 +262,20 @@ public class Confidence: ConfidenceEventSender { extension Confidence { public class Builder { - let clientSecret: String + // Must be configured or configured automatically + internal let clientSecret: String + internal let eventStorage: EventStorage + internal let visitorId = VisitorUtil().getId() + + // Can be configured + internal var region: ConfidenceRegion = .global + internal var metadata: ConfidenceMetadata? + internal var initialContext: ConfidenceStruct = [:] + + // Injectable for testing internal var flagApplier: FlagApplier? internal var storage: Storage? - internal let eventStorage: EventStorage internal var flagResolver: ConfidenceResolveClient? - var region: ConfidenceRegion = .global - - var visitorId = VisitorUtil().getId() - var initialContext: ConfidenceStruct = [:] /** Initializes the builder with the given credentails. @@ -312,7 +324,7 @@ extension Confidence { credentials: ConfidenceClientCredentials.clientSecret(secret: clientSecret), region: region) let metadata = ConfidenceMetadata( - name: "SDK_ID_SWIFT_CONFIDENCE", + name: sdkId, version: "0.2.2") // x-release-please-version let uploader = RemoteConfidenceClient( options: options, diff --git a/Sources/ConfidenceProvider/ConfidenceFeatureProvider.swift b/Sources/ConfidenceProvider/ConfidenceFeatureProvider.swift index 94f7f55..ca59b8b 100644 --- a/Sources/ConfidenceProvider/ConfidenceFeatureProvider.swift +++ b/Sources/ConfidenceProvider/ConfidenceFeatureProvider.swift @@ -10,15 +10,16 @@ struct Metadata: ProviderMetadata { /// The implementation of the Confidence Feature Provider. This implementation allows to pre-cache evaluations. public class ConfidenceFeatureProvider: FeatureProvider { + public static let providerId: String = "SDK_ID_SWIFT_PROVIDER" public var metadata: ProviderMetadata public var hooks: [any Hook] = [] private let lock = UnfairLock() private let initializationStrategy: InitializationStrategy private let eventHandler = EventHandler(ProviderEvent.notReady) private let confidence: Confidence + private let confidenceFeatureProviderQueue = DispatchQueue(label: "com.provider.queue") private var cancellables = Set() private var currentResolveTask: Task? - private let confidenceFeatureProviderQueue = DispatchQueue(label: "com.provider.queue") /** Initialize the Provider via a `Confidence` object. @@ -34,7 +35,7 @@ public class ConfidenceFeatureProvider: FeatureProvider { session: URLSession? ) { let metadata = ConfidenceMetadata( - name: "SDK_ID_SWIFT_PROVIDER", + name: ConfidenceFeatureProvider.providerId, version: "0.2.2") // x-release-please-version self.metadata = Metadata(name: metadata.name) self.initializationStrategy = initializationStrategy