[sub-spm-optional-products] Add LCECryptoKit and LCFeatureControl as optional sub-SPM products
LCEssentials installs standalone; each sub target-depends on it so linking a sub's product always pulls LCEssentials in too, without the consumer having to declare it separately. - LCECryptoKit: internalized from the remote LCECryptoKitBinary git dependency (embedded token URL removed) into a local binaryTarget vendoring Frameworks/LCECryptoKit.xcframework. LCECryptoKitManager moved out of LCEssentials core into its own LCECryptoKitManager target/product; the no-op fallback for when the binary wasn't linked is gone (breaking change for existing consumers, see decisions/2026-09-15-sub-spm-optional-products.md). - LCFeatureControl: new product wrapping Atomenta's Feature Control API (flag evaluation with TTL cache + safe-degrade fallback to defaults, notifications inbox, batched exposure telemetry). 45 new tests.
This commit is contained in:
30
Sources/LCFeatureControl/FeatureControlContext.swift
Normal file
30
Sources/LCFeatureControl/FeatureControlContext.swift
Normal file
@@ -0,0 +1,30 @@
|
||||
import Foundation
|
||||
|
||||
/// Who/what a flag evaluation is for — mirrors Atomenta's `context.subjectType` enum.
|
||||
public enum FeatureControlSubjectType: String, Codable, Sendable {
|
||||
case user, customer, store, anonymous
|
||||
}
|
||||
|
||||
/// Evaluation context sent as `context` in `POST /api/feature-control/evaluate`.
|
||||
public struct FeatureControlContext: Encodable, Sendable, Equatable {
|
||||
public var subjectType: FeatureControlSubjectType
|
||||
public var subjectId: String
|
||||
public var storeId: String?
|
||||
public var platform: String?
|
||||
public var appVersion: String?
|
||||
public var attributes: [String: String]?
|
||||
|
||||
public init(subjectType: FeatureControlSubjectType,
|
||||
subjectId: String,
|
||||
storeId: String? = nil,
|
||||
platform: String? = nil,
|
||||
appVersion: String? = nil,
|
||||
attributes: [String: String]? = nil) {
|
||||
self.subjectType = subjectType
|
||||
self.subjectId = subjectId
|
||||
self.storeId = storeId
|
||||
self.platform = platform
|
||||
self.appVersion = appVersion
|
||||
self.attributes = attributes
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user