CKKSAccountStateTracker.h [plain text]
#import <Foundation/Foundation.h>
#if OCTAGON
#import <CloudKit/CKContainer_Private.h>
#import <CloudKit/CloudKit.h>
#include <Security/SecureObjectSync/SOSCloudCircle.h>
#import "keychain/ckks/CKKSCondition.h"
#import "keychain/ckks/CloudKitDependencies.h"
#import "keychain/ot/OTClique.h"
NS_ASSUME_NONNULL_BEGIN
typedef NS_ENUM(NSInteger, CKKSAccountStatus) {
CKKSAccountStatusUnknown = 0,
CKKSAccountStatusAvailable = 1,
CKKSAccountStatusNoAccount = 3,
};
NSString* CKKSAccountStatusToString(CKKSAccountStatus status);
@interface SOSAccountStatus : NSObject
@property SOSCCStatus status;
@property (nullable) NSError* error;
- (instancetype)init:(SOSCCStatus)status error:error;
@end
@interface OTCliqueStatusWrapper : NSObject
@property (readonly) CliqueStatus status;
- (instancetype)initWithStatus:(CliqueStatus)status;
@end
@protocol CKKSOctagonStatusMemoizer
- (void)triggerOctagonStatusFetch;
@property (readonly, nullable) OTCliqueStatusWrapper* octagonStatus;
@property (readonly, nullable) NSString* octagonPeerID;
- (void)setHSA2iCloudAccountStatus:(CKKSAccountStatus)status;
@end
#pragma mark -- Listener Protocols
@protocol CKKSCloudKitAccountStateListener <NSObject>
- (void)cloudkitAccountStateChange:(CKAccountInfo* _Nullable)oldAccountInfo to:(CKAccountInfo*)currentAccountInfo;
@end
@protocol CKKSCloudKitAccountStateTrackingProvider <NSObject>
- (dispatch_semaphore_t)registerForNotificationsOfCloudKitAccountStatusChange:(id<CKKSCloudKitAccountStateListener>)listener;
@end
#pragma mark -- Tracker
@interface CKKSAccountStateTracker : NSObject <CKKSCloudKitAccountStateTrackingProvider,
CKKSOctagonStatusMemoizer>
@property CKKSCondition* finishedInitialDispatches;
@property (nullable) CKAccountInfo* currentCKAccountInfo;
@property CKKSCondition* ckAccountInfoInitialized;
@property (nullable, copy) NSString* ckdeviceID;
@property (nullable) NSError* ckdeviceIDError;
@property CKKSCondition* ckdeviceIDInitialized;
@property (nullable) SOSAccountStatus* currentCircleStatus;
@property (nullable) NSString* accountCirclePeerID;
@property (nullable) NSError* accountCirclePeerIDError;
@property CKKSCondition* accountCirclePeerIDInitialized;
@property (readonly, nullable) OTCliqueStatusWrapper* octagonStatus;
@property (readonly, nullable) NSString* octagonPeerID;
@property (readonly) CKKSCondition* octagonInformationInitialized;
@property (readonly) CKKSAccountStatus hsa2iCloudAccountStatus;
@property (readonly) CKKSCondition* hsa2iCloudAccountInitialized;
- (instancetype)init:(CKContainer*)container nsnotificationCenterClass:(Class<CKKSNSNotificationCenter>)nsnotificationCenterClass;
- (dispatch_semaphore_t)registerForNotificationsOfCloudKitAccountStatusChange:(id<CKKSCloudKitAccountStateListener>)listener;
- (void)triggerOctagonStatusFetch;
- (void)performInitialDispatches;
- (void)notifyCKAccountStatusChangeAndWaitForSignal;
- (void)notifyCircleStatusChangeAndWaitForSignal;
- (dispatch_group_t _Nullable)checkForAllDeliveries;
- (void)setHSA2iCloudAccountStatus:(CKKSAccountStatus)status;
+ (SOSAccountStatus*)getCircleStatus;
+ (void)fetchCirclePeerID:(void (^)(NSString* _Nullable peerID, NSError* _Nullable error))callback;
+ (NSString*)stringFromAccountStatus:(CKKSAccountStatus)status;
@end
NS_ASSUME_NONNULL_END
#endif // OCTAGON