2 * Copyright (c) 2017 Apple Inc. All Rights Reserved.
4 * @APPLE_LICENSE_HEADER_START@
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
21 * @APPLE_LICENSE_HEADER_END@
24 #import <Foundation/Foundation.h>
27 #import "Analytics/SFAnalytics.h"
29 extern NSString
* const CKKSAnalyticsInCircle
;
30 extern NSString
* const CKKSAnalyticsHasTLKs
;
31 extern NSString
* const CKKSAnalyticsSyncedClassARecently
;
32 extern NSString
* const CKKSAnalyticsSyncedClassCRecently
;
33 extern NSString
* const CKKSAnalyticsIncomingQueueIsErrorFree
;
34 extern NSString
* const CKKSAnalyticsOutgoingQueueIsErrorFree
;
35 extern NSString
* const CKKSAnalyticsInSync
;
36 extern NSString
* const CKKSAnalyticsValidCredentials
;
37 extern NSString
* const CKKSAnalyticsLastUnlock
;
38 extern NSString
* const CKKSAnalyticsLastKeystateReady
;
39 extern NSString
* const CKKSAnalyticsLastInCircle
;
41 extern NSString
* const OctagonAnalyticsStateMachineState
;
42 extern NSString
* const OctagonAnalyticIcloudAccountState
;
43 extern NSString
* const OctagonAnalyticCDPBitStatus
;
44 extern NSString
* const OctagonAnalyticsTrustState
;
45 extern NSString
* const OctagonAnalyticsAttemptedJoin
;
46 extern NSString
* const OctagonAnalyticsUserControllableViewsSyncing
;
47 extern NSString
* const OctagonAnalyticsLastHealthCheck
;
48 extern NSString
* const OctagonAnalyticsSOSStatus
;
49 extern NSString
* const OctagonAnalyticsDateOfLastPreflightPreapprovedJoin
;
50 extern NSString
* const OctagonAnalyticsLastKeystateReady
;
51 extern NSString
* const OctagonAnalyticsLastCoreFollowup
;
52 extern NSString
* const OctagonAnalyticsCoreFollowupFailureCount
;
53 extern NSString
* const OctagonAnalyticsCoreFollowupLastFailureTime
;
54 extern NSString
* const OctagonAnalyticsPrerecordPending
;
55 extern NSString
* const OctagonAnalyticsCDPStateRun
;
57 extern NSString
* const OctagonAnalyticsHaveMachineID
;
58 extern NSString
* const OctagonAnalyticsMIDOnMemoizedList
;
59 extern NSString
* const OctagonAnalyticsPeersWithMID
;
61 extern NSString
* const CKKSAnalyticsLastCKKSPush
;
62 extern NSString
* const CKKSAnalyticsLastOctagonPush
;
64 extern NSString
* const OctagonAnalyticsKVSProvisioned
;
65 extern NSString
* const OctagonAnalyticsKVSEnabled
;
66 extern NSString
* const OctagonAnalyticsKeychainSyncProvisioned
;
67 extern NSString
* const OctagonAnalyticsKeychainSyncEnabled
;
68 extern NSString
* const OctagonAnalyticsCloudKitProvisioned
;
69 extern NSString
* const OctagonAnalyticsCloudKitEnabled
;
71 extern NSString
* const OctagonAnalyticsBottledUniqueTLKsRecovered
;
72 extern NSString
* const OctagonAnalyticsBottledTotalTLKShares
;
73 extern NSString
* const OctagonAnalyticsBottledTotalTLKSharesRecovered
;
74 extern NSString
* const OctagonAnalyticsBottledUniqueTLKsWithSharesCount
;
75 extern NSString
* const OctagonAnalyticsBottledTLKUniqueViewCount
;
77 @protocol CKKSAnalyticsFailableEvent
<NSObject
>
79 typedef NSString
<CKKSAnalyticsFailableEvent
> CKKSAnalyticsFailableEvent
;
80 extern CKKSAnalyticsFailableEvent
* const CKKSEventProcessIncomingQueueClassA
;
81 extern CKKSAnalyticsFailableEvent
* const CKKSEventProcessIncomingQueueClassC
;
82 extern CKKSAnalyticsFailableEvent
* const CKKSEventProcessOutgoingQueue
;
83 extern CKKSAnalyticsFailableEvent
* const CKKSEventUploadChanges
;
84 extern CKKSAnalyticsFailableEvent
* const CKKSEventStateError
;
85 extern CKKSAnalyticsFailableEvent
* const CKKSEventProcessHealKeyHierarchy
;
86 extern CKKSAnalyticsFailableEvent
* const CKKSEventProcessReencryption
;
88 extern CKKSAnalyticsFailableEvent
* const OctagonEventPreflightBottle
;
89 extern CKKSAnalyticsFailableEvent
* const OctagonEventLaunchBottle
;
90 extern CKKSAnalyticsFailableEvent
* const OctagonEventScrubBottle
;
91 extern CKKSAnalyticsFailableEvent
* const OctagonEventSignIn
;
92 extern CKKSAnalyticsFailableEvent
* const OctagonEventSignOut
;
93 extern CKKSAnalyticsFailableEvent
* const OctagonEventRestoreBottle
;
94 extern CKKSAnalyticsFailableEvent
* const OctagonEventRamp
;
95 extern CKKSAnalyticsFailableEvent
* const OctagonEventBottleCheck
;
96 extern CKKSAnalyticsFailableEvent
* const OctagonEventCoreFollowUp
;
97 extern CKKSAnalyticsFailableEvent
* const OctagonEventUpdateBottle
;
99 extern CKKSAnalyticsFailableEvent
* const OctagonEventRecoverBottle
;
100 extern CKKSAnalyticsFailableEvent
* const OctagonEventFetchAllBottles
;
101 extern CKKSAnalyticsFailableEvent
* const OctagonEventFetchEscrowContents
;
103 extern CKKSAnalyticsFailableEvent
* const OctagonEventRestoredSignedBottlePeer
;
104 extern CKKSAnalyticsFailableEvent
* const OctagonEventRestoredOctagonPeerEncryptionKey
;
105 extern CKKSAnalyticsFailableEvent
* const OctagonEventRestoredOctagonPeerSigningKey
;
106 extern CKKSAnalyticsFailableEvent
* const OctagonEventRestoreComplete
;
108 /* Initial health check */
109 extern CKKSAnalyticsFailableEvent
* const OctagonEventCheckTrustState
;
111 /* Outer calls as seen by the client */
112 extern CKKSAnalyticsFailableEvent
* const OctagonEventBottledPeerRestore
;
113 extern CKKSAnalyticsFailableEvent
* const OctagonEventFetchEscrowContents
;
114 extern CKKSAnalyticsFailableEvent
* const OctagonEventResetAndEstablish
;
115 extern CKKSAnalyticsFailableEvent
* const OctagonEventEstablish
;
116 extern CKKSAnalyticsFailableEvent
* const OctagonEventLeaveClique
;
117 extern CKKSAnalyticsFailableEvent
* const OctagonEventRemoveFriendsInClique
;
118 extern CKKSAnalyticsFailableEvent
* const OctagonEventRecoveryKey
;
120 /* Inner calls as seen by TPH and securityd */
122 extern CKKSAnalyticsFailableEvent
* const OctagonEventUpgradeFetchDeviceIDs
;
123 extern CKKSAnalyticsFailableEvent
* const OctagonEventUpgradeSetAllowList
;
124 extern CKKSAnalyticsFailableEvent
* const OctagonEventUpgradeSilentEscrow
;
125 extern CKKSAnalyticsFailableEvent
* const OctagonEventUpgradePreapprovedJoin
;
126 extern CKKSAnalyticsFailableEvent
* const OctagonEventUpgradePreflightPreapprovedJoin
;
127 extern CKKSAnalyticsFailableEvent
* const OctagonEventUpgradePrepare
;
128 extern CKKSAnalyticsFailableEvent
* const OctagonEventUpgradePreapprovedJoinAfterPairing
;
130 /* inner: join with voucher */
131 extern CKKSAnalyticsFailableEvent
* const OctagonEventJoinWithVoucher
;
133 /* inner: join with bottle */
134 extern CKKSAnalyticsFailableEvent
* const OctagonEventPreflightVouchWithBottle
;
135 extern CKKSAnalyticsFailableEvent
* const OctagonEventVoucherWithBottle
;
137 /* inner: join with recovery key */
138 extern CKKSAnalyticsFailableEvent
* const OctagonEventPreflightVouchWithRecoveryKey
;
139 extern CKKSAnalyticsFailableEvent
* const OctagonEventVoucherWithRecoveryKey
;
140 extern CKKSAnalyticsFailableEvent
* const OctagonEventJoinRecoveryKeyValidationFailed
;
141 extern CKKSAnalyticsFailableEvent
* const OctagonEventJoinRecoveryKeyFailed
;
142 extern CKKSAnalyticsFailableEvent
* const OctagonEventJoinRecoveryKeyCircleReset
;
143 extern CKKSAnalyticsFailableEvent
* const OctagonEventJoinRecoveryKeyCircleResetFailed
;
144 extern CKKSAnalyticsFailableEvent
* const OctagonEventJoinRecoveryKeyEnrollFailed
;
146 /* inner: set recovery key */
147 extern CKKSAnalyticsFailableEvent
* const OctagonEventSetRecoveryKey
;
148 extern CKKSAnalyticsFailableEvent
* const OctagonEventSetRecoveryKeyValidationFailed
;
151 extern CKKSAnalyticsFailableEvent
* const OctagonEventReset
;
154 extern CKKSAnalyticsFailableEvent
* const OctagonEventPrepareIdentity
;
156 /* inner: establish */
157 extern CKKSAnalyticsFailableEvent
* const OctagonEventEstablishIdentity
;
159 /* inner: fetchviews */
160 extern CKKSAnalyticsFailableEvent
* const OctagonEventFetchViews
;
163 extern CKKSAnalyticsFailableEvent
* const OctagonEventStateTransition
;
165 /* become untrusted */
166 extern CKKSAnalyticsFailableEvent
* const OctagonEventCheckTrustForCFU
;
168 /* watchOS only: pairing with companion */
169 extern CKKSAnalyticsFailableEvent
* const OctagonEventCompanionPairing
;
171 /* trust state from trusted peers helper*/
172 extern CKKSAnalyticsFailableEvent
* const OctagonEventTPHHealthCheckStatus
;
174 extern CKKSAnalyticsFailableEvent
* const OctagonEventAuthKitDeviceList
;
176 @protocol CKKSAnalyticsSignpostEvent
<NSObject
>
178 typedef NSString
<CKKSAnalyticsSignpostEvent
> CKKSAnalyticsSignpostEvent
;
179 extern CKKSAnalyticsSignpostEvent
* const CKKSEventPushNotificationReceived
;
180 extern CKKSAnalyticsSignpostEvent
* const CKKSEventItemAddedToOutgoingQueue
;
181 extern CKKSAnalyticsSignpostEvent
* const CKKSEventReachabilityTimerExpired
;
182 extern CKKSAnalyticsSignpostEvent
* const CKKSEventMissingLocalItemsFound
;
184 @protocol CKKSAnalyticsActivity
<NSObject
>
186 typedef NSString
<CKKSAnalyticsActivity
> CKKSAnalyticsActivity
;
187 extern CKKSAnalyticsActivity
* const CKKSActivityOTFetchRampState
;
188 extern CKKSAnalyticsActivity
* const CKKSActivityOctagonPreflightBottle
;
189 extern CKKSAnalyticsActivity
* const CKKSActivityOctagonLaunchBottle
;
190 extern CKKSAnalyticsActivity
* const CKKSActivityOctagonRestore
;
191 extern CKKSAnalyticsActivity
* const CKKSActivityScrubBottle
;
192 extern CKKSAnalyticsActivity
* const CKKSActivityBottleCheck
;
193 extern CKKSAnalyticsActivity
* const CKKSActivityOctagonUpdateBottle
;
195 extern CKKSAnalyticsActivity
* const OctagonActivityAccountAvailable
;
196 extern CKKSAnalyticsActivity
* const OctagonActivityAccountNotAvailable
;
197 extern CKKSAnalyticsActivity
* const OctagonActivityResetAndEstablish
;
198 extern CKKSAnalyticsActivity
* const OctagonActivityEstablish
;
199 extern CKKSAnalyticsActivity
* const OctagonActivityFetchAllViableBottles
;
200 extern CKKSAnalyticsActivity
* const OctagonActivityFetchEscrowContents
;
201 extern CKKSAnalyticsActivity
* const OctagonActivityBottledPeerRestore
;
202 extern CKKSAnalyticsActivity
* const OctagonActivitySetRecoveryKey
;
203 extern CKKSAnalyticsActivity
* const OctagonActivityLeaveClique
;
204 extern CKKSAnalyticsActivity
* const OctagonActivityRemoveFriendsInClique
;
205 extern CKKSAnalyticsActivity
* const OctagonActivityJoinWithRecoveryKey
;
206 extern CKKSAnalyticsActivity
* const OctagonSOSAdapterUpdateKeys
;
209 @interface CKKSAnalytics
: SFAnalytics
211 + (instancetype
)logger
;
213 - (void)logSuccessForEvent
:(CKKSAnalyticsFailableEvent
*)event zoneName
:(NSString
*)viewName
;
214 - (void)logRecoverableError
:(NSError
*)error
215 forEvent
:(CKKSAnalyticsFailableEvent
*)event
216 zoneName
:(NSString
*)viewName
217 withAttributes
:(NSDictionary
*)attributes
;
219 - (void)logRecoverableError
:(NSError
*)error
220 forEvent
:(CKKSAnalyticsFailableEvent
*)event
221 withAttributes
:(NSDictionary
*)attributes
;
223 - (void)logUnrecoverableError
:(NSError
*)error
224 forEvent
:(CKKSAnalyticsFailableEvent
*)event
225 withAttributes
:(NSDictionary
*)attributes
;
227 - (void)logUnrecoverableError
:(NSError
*)error
228 forEvent
:(CKKSAnalyticsFailableEvent
*)event
229 zoneName
:(NSString
*)viewName
230 withAttributes
:(NSDictionary
*)attributes
;
232 - (void)noteEvent
:(CKKSAnalyticsSignpostEvent
*)event
;
233 - (void)noteEvent
:(CKKSAnalyticsSignpostEvent
*)event zoneName
:(NSString
*)zoneName
;
235 - (void)setDateProperty
:(NSDate
*)date forKey
:(NSString
*)key zoneName
:(NSString
*)zoneName
;
236 - (NSDate
*)datePropertyForKey
:(NSString
*)key zoneName
:(NSString
*)zoneName
;
240 @interface
CKKSAnalytics (UnitTesting
)
242 - (NSDate
*)dateOfLastSuccessForEvent
:(CKKSAnalyticsFailableEvent
*)event
243 zoneName
:(NSString
*)zoneName
;
244 - (NSDictionary
*)errorChain
:(NSError
*)error
245 depth
:(NSUInteger
)depth
;
246 - (NSDictionary
*)createErrorAttributes
:(NSError
*)error
247 depth
:(NSUInteger
)depth
248 attributes
:(NSDictionary
*)attributes
;