#import <Foundation/Foundation.h>
#if OCTAGON
#include "keychain/securityd/SecDbItem.h"
#import "keychain/ckks/CKKS.h"
#import "keychain/ckks/OctagonAPSReceiver.h"
#import "keychain/ckks/CKKSAccountStateTracker.h"
#import "keychain/ckks/CKKSCloudKitClassDependencies.h"
#import "keychain/ckks/CKKSCondition.h"
#import "keychain/ckks/CKKSControlProtocol.h"
#import "keychain/ckks/CKKSLockStateTracker.h"
#import "keychain/ckks/CKKSReachabilityTracker.h"
#import "keychain/ckks/CKKSNotifier.h"
#import "keychain/ckks/CKKSPeer.h"
#import "keychain/ckks/CKKSRateLimiter.h"
#import "keychain/ckks/CloudKitDependencies.h"
#import "keychain/ckks/CKKSZoneChangeFetcher.h"
#import "keychain/ckks/CKKSZoneModifier.h"
#import "keychain/ot/OTSOSAdapter.h"
#import "keychain/ot/OTDefines.h"
NS_ASSUME_NONNULL_BEGIN
@class CKKSKeychainView, CKKSRateLimiter, TPPolicy;
@interface CKKSViewManager : NSObject <CKKSControlProtocol>
@property CKContainer* container;
@property CKKSAccountStateTracker* accountTracker;
@property CKKSLockStateTracker* lockStateTracker;
@property CKKSReachabilityTracker *reachabilityTracker;
@property CKKSZoneChangeFetcher* zoneChangeFetcher;
@property CKKSZoneModifier* zoneModifier;
@property CKKSCondition* completedSecCKKSInitialize;
@property CKKSRateLimiter* globalRateLimiter;
@property id<OTSOSAdapter> sosPeerAdapter;
@property (readonly, nullable) TPPolicy* policy;
@property (readonly) NSMutableDictionary<NSString*, CKKSKeychainView*>* views;
- (instancetype)initWithContainer:(CKContainer*)container
sosAdapter:(id<OTSOSAdapter> _Nullable)sosAdapter
accountStateTracker:(CKKSAccountStateTracker*)accountTracker
lockStateTracker:(CKKSLockStateTracker*)lockStateTracker
cloudKitClassDependencies:(CKKSCloudKitClassDependencies*)cloudKitClassDependencies;
- (CKKSKeychainView*)findView:(NSString*)viewName;
- (CKKSKeychainView*)findOrCreateView:(NSString*)viewName;
- (void)setView:(CKKSKeychainView*)obj;
- (void)clearView:(NSString*)viewName;
- (NSSet<CKKSKeychainView*>*)currentViews;
- (NSDictionary<NSString*, NSString*>*)activeTLKs;
- (void)setupAnalytics;
- (NSString* _Nullable)viewNameForItem:(SecDbItemRef)item;
- (void)handleKeychainEventDbConnection:(SecDbConnectionRef)dbconn
source:(SecDbTransactionSource)txionSource
added:(SecDbItemRef _Nullable)added
deleted:(SecDbItemRef _Nullable)deleted;
- (void)setCurrentItemForAccessGroup:(NSData* _Nonnull)newItemPersistentRef
hash:(NSData*)newItemSHA1
accessGroup:(NSString*)accessGroup
identifier:(NSString*)identifier
viewHint:(NSString*)viewHint
replacing:(NSData* _Nullable)oldCurrentItemPersistentRef
hash:(NSData* _Nullable)oldItemSHA1
complete:(void (^)(NSError* operror))complete;
- (void)getCurrentItemForAccessGroup:(NSString*)accessGroup
identifier:(NSString*)identifier
viewHint:(NSString*)viewHint
fetchCloudValue:(bool)fetchCloudValue
complete:(void (^)(NSString* uuid, NSError* operror))complete;
- (void)registerSyncStatusCallback:(NSString*)uuid callback:(SecBoolNSErrorCallback)callback;
- (void)cancelPendingOperations;
+ (instancetype)manager;
- (void)xpc24HrNotification;
- (NSSet<NSString*>*)viewList;
- (NSSet<NSString*>*)defaultViewList;
- (void)setSyncingViews:(NSSet<NSString*>* _Nullable)viewNames sortingPolicy:(TPPolicy* _Nullable)policy;
- (void)clearAllViews;
- (void)createViews;
- (void)beginCloudKitOperationOfAllViews;
- (void)notifyNewTLKsInKeychain;
- (void)syncBackupAndNotifyAboutSync;
- (BOOL)waitForTrustReady;
+ (CKContainer*)makeCKContainer:(NSString*)containerName
usePCS:(bool)usePCS;
- (BOOL)useCKKSViewsFromPolicy;
- (SecBoolNSErrorCallback _Nullable)claimCallbackForUUID:(NSString*)uuid;
- (NSSet<NSString*>*)pendingCallbackUUIDs;
+ (void)callSyncCallbackWithErrorNoAccount:(SecBoolNSErrorCallback)syncCallback;
@end
@interface CKKSViewManager (Testing)
- (void)setOverrideCKKSViewsFromPolicy:(BOOL)value;
- (void)resetSyncingPolicy;
- (void)haltAll;
- (CKKSKeychainView*)restartZone:(NSString*)viewName;
- (void)haltZone:(NSString*)viewName;
- (void)setSyncingViewsAllowList:(NSSet<NSString*>* _Nullable)viewNames;
@end
NS_ASSUME_NONNULL_END
#else
@interface CKKSViewManager : NSObject
@end
#endif // OCTAGON