CKKSCKAccountStateTracker.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"
NS_ASSUME_NONNULL_BEGIN
typedef NS_ENUM(NSInteger, CKKSAccountStatus) {
CKKSAccountStatusUnknown = 0,
CKKSAccountStatusAvailable = 1,
CKKSAccountStatusNoAccount = 3,
};
@interface SOSAccountStatus : NSObject
@property SOSCCStatus status;
@property (nullable) NSError* error;
- (instancetype)init:(SOSCCStatus)status error:error;
@end
typedef NS_ENUM(NSInteger, CliqueStatus) {
CliqueStatusIn = 0,
CliqueStatusNotIn = 1,
CliqueStatusPending = 2,
CliqueStatusAbsent = 3,
CliqueStatusNoCloudKitAccount = 4,
CliqueStatusError = -1
};
NSString* OTCliqueStatusToString(CliqueStatus status);
CliqueStatus OTCliqueStatusFromString(NSString* str);
@interface OTCliqueStatusWrapper : NSObject
@property (readonly) CliqueStatus status;
- (instancetype)initWithStatus:(CliqueStatus)status;
@end
@protocol CKKSAccountStateListener <NSObject>
- (void)ckAccountStatusChange:(CKKSAccountStatus)oldStatus to:(CKKSAccountStatus)currentStatus;
@end
@interface CKKSCKAccountStateTracker : NSObject
@property CKKSCondition* finishedInitialDispatches;
@property (nullable) CKAccountInfo* currentCKAccountInfo;
@property (nullable) SOSAccountStatus* currentCircleStatus;
@property (readonly,atomic) CKKSAccountStatus currentComputedAccountStatus;
@property (nullable,readonly,atomic) NSError* currentAccountError;
@property CKKSCondition* currentComputedAccountStatusValid;
@property (nullable, copy) NSString* ckdeviceID;
@property (nullable) NSError* ckdeviceIDError;
@property CKKSCondition* ckdeviceIDInitialized;
@property (nullable) NSString* accountCirclePeerID;
@property (nullable) NSError* accountCirclePeerIDError;
@property CKKSCondition* accountCirclePeerIDInitialized;
- (instancetype)init:(CKContainer*)container nsnotificationCenterClass:(Class<CKKSNSNotificationCenter>)nsnotificationCenterClass;
- (dispatch_semaphore_t)notifyOnAccountStatusChange:(id<CKKSAccountStateListener>)listener;
- (void)notifyCKAccountStatusChangeAndWaitForSignal;
- (void)notifyCircleStatusChangeAndWaitForSignal;
- (dispatch_group_t _Nullable)checkForAllDeliveries;
+ (SOSAccountStatus*)getCircleStatus;
+ (void)fetchCirclePeerID:(void (^)(NSString* _Nullable peerID, NSError* _Nullable error))callback;
+ (NSString*)stringFromAccountStatus:(CKKSAccountStatus)status;
@end
NS_ASSUME_NONNULL_END
#endif // OCTAGON