#import <Foundation/Foundation.h>
#if OCTAGON
#import "Analytics/SFAnalytics.h"
#import "keychain/ot/OTManager.h"
#import "keychain/ot/OTRamping.h"
#import "keychain/ot/OTFollowup.h"
#import "keychain/ot/OTControlProtocol.h"
#import "keychain/ot/OTSOSAdapter.h"
#import "keychain/ot/OTAuthKitAdapter.h"
#import "keychain/ot/OTDeviceInformationAdapter.h"
#import "keychain/ot/OTCuttlefishAccountStateHolder.h"
#import "keychain/escrowrequest/Framework/SecEscrowRequest.h"
#import "keychain/ckks/CKKSAccountStateTracker.h"
#import "keychain/ckks/CKKSViewManager.h"
#include "keychain/securityd/SecDbItem.h"
#import <CoreCDP/CDPAccount.h>
NS_ASSUME_NONNULL_BEGIN
@class OTContext;
@class OTCuttlefishContext;
@class OTClientStateMachine;
@class CKKSLockStateTracker;
@class CKKSAccountStateTracker;
@class CloudKitClassDependencies;
@interface OTManager : NSObject <OTControlProtocol>
@property (nonatomic, readonly) CKKSLockStateTracker* lockStateTracker;
@property CKKSAccountStateTracker* accountStateTracker;
@property (readonly) CKContainer* cloudKitContainer;
@property (nullable) CKKSViewManager* viewManager;
- (instancetype)init;
- (instancetype)initWithSOSAdapter:(id<OTSOSAdapter>)sosAdapter
authKitAdapter:(id<OTAuthKitAdapter>)authKitAdapter
deviceInformationAdapter:(id<OTDeviceInformationAdapter>)deviceInformationAdapter
apsConnectionClass:(Class<OctagonAPSConnection>)apsConnectionClass
escrowRequestClass:(Class<SecEscrowRequestable>)escrowRequestClass
loggerClass:(Class<SFAnalyticsProtocol>)loggerClass
lockStateTracker:(CKKSLockStateTracker*)lockStateTracker
cloudKitClassDependencies:(CKKSCloudKitClassDependencies*)cloudKitClassDependencies
cuttlefishXPCConnection:(id<NSXPCProxyCreating> _Nullable)cuttlefishXPCConnection
cdpd:(id<OctagonFollowUpControllerProtocol>)cdpd;
- (void)initializeOctagon;
- (BOOL)waitForReady:(NSString* _Nullable)containerName context:(NSString*)context wait:(int64_t)wait;
- (void)moveToCheckTrustedStateForContainer:(NSString* _Nullable)containerName context:(NSString*)context;
- (void)setupAnalytics;
+ (instancetype _Nullable)manager;
+ (instancetype _Nullable)resetManager:(bool)reset to:(OTManager* _Nullable)obj;
- (void)xpc24HrNotification;
- (OTCuttlefishContext*)contextForContainerName:(NSString* _Nullable)containerName
contextID:(NSString*)contextID
sosAdapter:(id<OTSOSAdapter>)sosAdapter
authKitAdapter:(id<OTAuthKitAdapter>)authKitAdapter
lockStateTracker:(CKKSLockStateTracker*)lockStateTracker
accountStateTracker:(id<CKKSCloudKitAccountStateTrackingProvider>)accountStateTracker
deviceInformationAdapter:(id<OTDeviceInformationAdapter>)deviceInformationAdapter;
- (OTCuttlefishContext*)contextForContainerName:(NSString* _Nullable)containerName
contextID:(NSString*)contextID;
- (void)removeContextForContainerName:(NSString*)containerName
contextID:(NSString*)contextID;
- (OTClientStateMachine*)clientStateMachineForContainerName:(NSString* _Nullable)containerName
contextID:(NSString*)contextID
clientName:(NSString*)clientName;
-(BOOL)ghostbustByMidEnabled;
-(BOOL)ghostbustBySerialEnabled;
-(BOOL)ghostbustByAgeEnabled;
-(void)restore:(NSString* _Nullable)containerName
contextID:(NSString *)contextID
bottleSalt:(NSString *)bottleSalt
entropy:(NSData *)entropy
bottleID:(NSString *)bottleID
reply:(void (^)(NSError * _Nullable))reply;
- (void)createRecoveryKey:(NSString* _Nullable)containerName
contextID:(NSString *)contextID
recoveryKey:(NSString *)recoveryKey
reply:(void (^)( NSError * _Nullable))reply;
- (void)joinWithRecoveryKey:(NSString* _Nullable)containerName
contextID:(NSString *)contextID
recoveryKey:(NSString*)recoveryKey
reply:(void (^)(NSError * _Nullable))reply;
- (void)allContextsHalt;
- (void)allContextsDisablePendingFlags;
- (bool)allContextsPause:(uint64_t)within;
- (void)waitForOctagonUpgrade:(NSString* _Nullable)container
context:(NSString*)context
reply:(void (^)(NSError* _Nullable error))reply;
- (void)postCDPFollowupResult:(BOOL)success
type:(OTCliqueCDPContextType)type
error:(NSError * _Nullable)error
containerName:(NSString* _Nullable)containerName
contextName:(NSString *)contextName
reply:(void (^)(NSError *error))reply;
@end
@interface OTManager (Testing)
- (void)setSOSEnabledForPlatformFlag:(bool) value;
- (void)clearAllContexts;
- (instancetype)initWithSOSAdapter:(id<OTSOSAdapter>)sosAdapter
lockStateTracker:(CKKSLockStateTracker*)lockStateTracker
cloudKitClassDependencies:(CKKSCloudKitClassDependencies*)cloudKitClassDependencies;
@end
NS_ASSUME_NONNULL_END
#endif // OCTAGON