2 #import <Foundation/Foundation.h>
3 #import <dispatch/dispatch.h>
5 #import "keychain/ot/proto/generated_source/OTAccountMetadataClassC.h"
6 #import "keychain/ot/categories/OTAccountMetadataClassC+KeychainSupport.h"
8 extern NSString
* _Nonnull OTCuttlefishContextErrorDomain
;
9 typedef NS_ENUM(uint32_t, OTCuttlefishContextErrors
) {
10 OTCCNoExistingPeerID
= 0,
13 NS_ASSUME_NONNULL_BEGIN
15 @protocol OTCuttlefishAccountStateHolderNotifier
16 - (void)accountStateUpdated
:(OTAccountMetadataClassC
*)newState from
:(OTAccountMetadataClassC
*)oldState
;
19 @interface OTCuttlefishAccountStateHolder
: NSObject
21 // If you already know you're on this queue, call the _onqueue versions below.
22 - (instancetype
)initWithQueue
:(dispatch_queue_t
)queue
23 container
:(NSString
*)containerName
24 context
:(NSString
*)contextID
;
26 - (OTAccountMetadataClassC
* _Nullable
)loadOrCreateAccountMetadata
:(NSError
**)error
;
27 - (OTAccountMetadataClassC
* _Nullable
)_onqueueLoadOrCreateAccountMetadata
:(NSError
**)error
;
29 - (void)registerNotification
:(id
<OTCuttlefishAccountStateHolderNotifier
>)notifier
;
31 - (BOOL
)persistNewEgoPeerID
:(NSString
*)peerID error
:(NSError
**)error
;
32 - (NSString
* _Nullable
)getEgoPeerID
:(NSError
**)error
;
34 - (BOOL
)persistNewTrustState
:(OTAccountMetadataClassC_TrustState
)newState
35 error
:(NSError
**)error
;
37 - (BOOL
)persistNewEpoch
:(uint64_t)epoch error
:(NSError
**)error
;
39 - (BOOL
)persistAccountChanges
:(OTAccountMetadataClassC
* _Nullable (^)(OTAccountMetadataClassC
* metadata
))makeChanges
40 error
:(NSError
**)error
;
42 - (BOOL
)_onqueuePersistAccountChanges
:(OTAccountMetadataClassC
* _Nullable (^)(OTAccountMetadataClassC
* metadata
))makeChanges
43 error
:(NSError
**)error
;
45 - (NSDate
*)lastHealthCheckupDate
:(NSError
* _Nullable
*)error
;
46 - (BOOL
)persistLastHealthCheck
:(NSDate
*)lastCheck error
:(NSError
**)error
;
48 - (OTAccountMetadataClassC_AttemptedAJoinState
)fetchPersistedJoinAttempt
:(NSError
* _Nullable
*)error
;
49 - (BOOL
)persistOctagonJoinAttempt
:(OTAccountMetadataClassC_AttemptedAJoinState
)attempt error
:(NSError
**)error
;