forked from
jollywhoppers.com/witchsky.app
Bluesky app fork with some witchin' additions 馃挮
1/*
2 * Do not import runtime code into this file
3 */
4
5import {type Platform} from 'react-native'
6
7import {type NotificationReason} from '#/lib/hooks/useNotificationHandler'
8import {type FeedDescriptor} from '#/state/queries/post-feed'
9import {type LiveEventFeedMetricContext} from '#/features/liveEvents/types'
10
11export type Events = {
12 // App events
13 init: {
14 initMs: number
15 }
16 'experiment:viewed': {
17 experimentId: string
18 variationId: string
19 }
20 'feature:viewed': {
21 featureId: string
22 featureResultValue: unknown
23 /** Only available if feature has experiment rules applied */
24 experimentId?: string
25 /** Only available if feature has experiment rules applied */
26 variationId?: string
27 }
28
29 'account:loggedIn': {
30 logContext:
31 | 'LoginForm'
32 | 'SwitchAccount'
33 | 'ChooseAccountForm'
34 | 'Settings'
35 | 'Notification'
36 withPassword: boolean
37 }
38 'account:loggedOut': {
39 logContext:
40 | 'SwitchAccount'
41 | 'Settings'
42 | 'SignupQueued'
43 | 'Deactivated'
44 | 'Takendown'
45 | 'AgeAssuranceNoAccessScreen'
46 scope: 'current' | 'every'
47 }
48 'notifications:openApp': {
49 reason: NotificationReason
50 causedBoot: boolean
51 }
52 'notifications:request': {
53 context: 'StartOnboarding' | 'AfterOnboarding' | 'Login' | 'Home'
54 status: 'granted' | 'denied' | 'undetermined'
55 }
56 'state:background': {
57 secondsActive: number
58 }
59 'state:foreground': {}
60 'router:navigate': {
61 from?: string
62 }
63 'deepLink:referrerReceived': {
64 to: string
65 referrer: string
66 hostname: string
67 }
68
69 // Screen events
70 'splash:signInPressed': {}
71 'splash:createAccountPressed': {}
72 'welcomeModal:signupClicked': {}
73 'welcomeModal:exploreClicked': {}
74 'welcomeModal:signinClicked': {}
75 'welcomeModal:dismissed': {}
76 'welcomeModal:presented': {}
77 'signup:nextPressed': {
78 activeStep: number
79 phoneVerificationRequired?: boolean
80 }
81 'signup:backPressed': {
82 activeStep: number
83 }
84 'signup:captchaSuccess': {}
85 'signup:captchaFailure': {}
86 'signup:fieldError': {
87 field: string
88 errorCount: number
89 errorMessage: string
90 activeStep: number
91 }
92 'signup:backgrounded': {
93 activeStep: number
94 backgroundCount: number
95 }
96 'signup:handleTaken': {typeahead?: boolean}
97 'signup:handleAvailable': {typeahead?: boolean}
98 'signup:handleSuggestionSelected': {method: string}
99 'signin:hostingProviderPressed': {
100 hostingProviderDidChange: boolean
101 }
102 'signin:hostingProviderFailedResolution': {}
103 'signin:success': {
104 failedAttemptsCount: number
105 isUsingCustomProvider: boolean
106 timeTakenSeconds: number
107 }
108 'signin:backPressed': {
109 failedAttemptsCount: number
110 }
111 'signin:forgotPasswordPressed': {}
112 'signin:passwordReset': {}
113 'signin:passwordResetSuccess': {}
114 'signin:passwordResetFailure': {}
115 'onboarding:interests:nextPressed': {
116 selectedInterests: string[]
117 selectedInterestsLength: number
118 }
119 'onboarding:suggestedAccounts:tabPressed': {
120 tab: string
121 }
122 'onboarding:suggestedAccounts:followAllPressed': {
123 tab: string
124 numAccounts: number
125 }
126 'onboarding:suggestedAccounts:nextPressed': {
127 selectedAccountsLength: number
128 skipped: boolean
129 }
130 'onboarding:followingFeed:nextPressed': {}
131 'onboarding:algoFeeds:nextPressed': {
132 selectedPrimaryFeeds: string[]
133 selectedPrimaryFeedsLength: number
134 selectedSecondaryFeeds: string[]
135 selectedSecondaryFeedsLength: number
136 }
137 'onboarding:topicalFeeds:nextPressed': {
138 selectedFeeds: string[]
139 selectedFeedsLength: number
140 }
141 'onboarding:moderation:nextPressed': {}
142 'onboarding:profile:nextPressed': {}
143 'onboarding:finished:nextPressed': {
144 usedStarterPack: boolean
145 starterPackName?: string
146 starterPackCreator?: string
147 starterPackUri?: string
148 profilesFollowed: number
149 feedsPinned: number
150 }
151 'onboarding:finished:avatarResult': {
152 avatarResult: 'default' | 'created' | 'uploaded'
153 }
154 'onboarding:valueProp:stepOne:nextPressed': {}
155 'onboarding:valueProp:stepTwo:nextPressed': {}
156 'onboarding:valueProp:skipPressed': {}
157 'home:feedDisplayed': {
158 feedUrl: string
159 feedType: string
160 index: number
161 reason?: string
162 }
163 'feed:endReached': {
164 feedUrl: string
165 feedType: string
166 itemCount: number
167 }
168 'feed:refresh': {
169 feedUrl: string
170 feedType: string
171 reason: 'pull-to-refresh' | 'soft-reset' | 'load-latest'
172 }
173 'feed:save': {
174 feedUrl: string
175 }
176 'feed:unsave': {
177 feedUrl: string
178 }
179 'feed:pin': {
180 feedUrl: string
181 }
182 'feed:unpin': {
183 feedUrl: string
184 }
185 'feed:like': {
186 feedUrl: string
187 }
188 'feed:unlike': {
189 feedUrl: string
190 }
191 'feed:share': {
192 feedUrl: string
193 }
194 'feed:suggestion:seen': {
195 feedUrl: string
196 }
197 'feed:suggestion:press': {
198 feedUrl: string
199 }
200 'post:showMore': {
201 uri: string
202 authorDid: string
203 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo'
204 feedDescriptor?: string
205 position?: number
206 }
207 'post:showLess': {
208 uri: string
209 authorDid: string
210 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo'
211 feedDescriptor?: string
212 position?: number
213 }
214 'feed:clickthrough': {
215 feed: string
216 count: number
217 }
218 'feed:engaged': {
219 feed: string
220 count: number
221 }
222 'feed:seen': {
223 feed: string
224 count: number
225 }
226
227 'feed:discover:emptyError': {
228 userDid: string
229 }
230
231 'composer:gif:open': {}
232 'composer:gif:select': {}
233 'composerPrompt:press': {}
234 'composerPrompt:camera:press': {}
235 'composerPrompt:gallery:press': {}
236
237 'composer:threadgate:open': {
238 nudged: boolean
239 }
240 'composer:threadgate:save': {
241 replyOptions: string
242 quotesEnabled: boolean
243 persist: boolean
244 hasChanged: boolean
245 }
246 'composer:open': {
247 logContext:
248 | 'Fab'
249 | 'PostReply'
250 | 'QuotePost'
251 | 'ProfileFeed'
252 | 'Deeplink'
253 | 'Other'
254 isReply: boolean
255 hasQuote: boolean
256 hasDraft: boolean
257 }
258 'draft:save': {
259 isNewDraft: boolean
260 hasText: boolean
261 hasImages: boolean
262 hasVideo: boolean
263 hasGif: boolean
264 hasQuote: boolean
265 hasLink: boolean
266 postCount: number
267 textLength: number
268 }
269 'draft:load': {
270 draftAgeMs: number
271 hasText: boolean
272 hasImages: boolean
273 hasVideo: boolean
274 hasGif: boolean
275 postCount: number
276 }
277 'draft:delete': {
278 logContext: 'DraftsList'
279 draftAgeMs: number
280 }
281 'draft:listOpen': {
282 draftCount: number
283 }
284 'draft:post': {
285 draftAgeMs: number
286 wasEdited: boolean
287 }
288 'draft:discard': {
289 logContext: 'ComposerClose' | 'BeforeDraftsList'
290 hadContent: boolean
291 textLength: number
292 }
293
294 // Data events
295 'account:create:begin': {}
296 'account:create:success': {
297 signupDuration: number
298 fieldErrorsTotal: number
299 backgroundCount: number
300 }
301 'post:create': {
302 imageCount: number
303 isReply: boolean
304 isPartOfThread: boolean
305 hasLink: boolean
306 hasQuote: boolean
307 langs: string
308 logContext: 'Composer'
309 }
310 'thread:create': {
311 postCount: number
312 isReply: boolean
313 }
314 'post:like': {
315 uri: string
316 authorDid: string
317 doesLikerFollowPoster: boolean | undefined
318 doesPosterFollowLiker: boolean | undefined
319 likerClout: number | undefined
320 postClout: number | undefined
321 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo'
322 feedDescriptor?: string
323 }
324 'post:repost': {
325 uri: string
326 authorDid: string
327 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo'
328 feedDescriptor?: string
329 }
330 'post:unlike': {
331 uri: string
332 authorDid: string
333 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo'
334 feedDescriptor?: string
335 }
336 'post:unrepost': {
337 uri: string
338 authorDid: string
339 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo'
340 feedDescriptor?: string
341 }
342 'post:mute': {
343 uri: string
344 authorDid: string
345 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo'
346 feedDescriptor?: string
347 position?: number
348 }
349 'post:unmute': {
350 uri: string
351 authorDid: string
352 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo'
353 feedDescriptor?: string
354 position?: number
355 }
356 'post:pin': {}
357 'post:unpin': {}
358 'post:bookmark': {
359 uri: string
360 authorDid: string
361 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo'
362 feedDescriptor?: string
363 position?: number
364 }
365 'post:unbookmark': {
366 uri: string
367 authorDid: string
368 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo'
369 feedDescriptor?: string
370 position?: number
371 }
372 'post:clickReply': {
373 uri: string
374 authorDid: string
375 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo'
376 feedDescriptor?: string
377 position?: number
378 }
379 'post:clickQuotePost': {
380 uri: string
381 authorDid: string
382 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo'
383 feedDescriptor?: string
384 position?: number
385 }
386 'post:clickthroughAuthor': {
387 uri: string
388 authorDid: string
389 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo'
390 feedDescriptor?: string
391 position?: number
392 }
393 'post:clickthroughItem': {
394 uri: string
395 authorDid: string
396 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo'
397 feedDescriptor?: string
398 position?: number
399 }
400 'post:clickthroughEmbed': {
401 uri: string
402 authorDid: string
403 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo'
404 feedDescriptor?: string
405 position?: number
406 }
407 'post:view': {
408 uri: string
409 authorDid: string
410 logContext:
411 | 'FeedItem'
412 | 'PostThreadItem'
413 | 'Post'
414 | 'ImmersiveVideo'
415 | 'SearchResults'
416 | 'Bookmarks'
417 | 'Notifications'
418 | 'Hashtag'
419 | 'Topic'
420 | 'PostQuotes'
421 feedDescriptor?: string
422 position?: number
423 }
424 'bookmarks:view': {}
425 'bookmarks:post-clicked': {}
426 'profile:follow': {
427 contextProfileDid?: string
428 didBecomeMutual: boolean | undefined
429 followeeClout: number | undefined
430 followeeDid: string
431 followerClout: number | undefined
432 position?: number
433 logContext:
434 | 'RecommendedFollowsItem'
435 | 'PostThreadItem'
436 | 'ProfileCard'
437 | 'ProfileHeader'
438 | 'ProfileHeaderSuggestedFollows'
439 | 'ProfileMenu'
440 | 'ProfileHoverCard'
441 | 'AvatarButton'
442 | 'StarterPackProfilesList'
443 | 'FeedInterstitial'
444 | 'PostOnboardingFindFollows'
445 | 'ImmersiveVideo'
446 | 'ExploreSuggestedAccounts'
447 | 'OnboardingSuggestedAccounts'
448 | 'FindContacts'
449 }
450 'profile:followers:view': {
451 contextProfileDid: string
452 isOwnProfile: boolean
453 }
454 'profile:followers:paginate': {
455 contextProfileDid: string
456 itemCount: number
457 page: number
458 }
459 'profile:following:view': {
460 contextProfileDid: string
461 isOwnProfile: boolean
462 }
463 'profile:following:paginate': {
464 contextProfileDid: string
465 itemCount: number
466 page: number
467 }
468 'profileCard:seen': {
469 contextProfileDid?: string
470 profileDid: string
471 position?: number
472 }
473 'suggestedUser:follow': {
474 logContext:
475 | 'Explore'
476 | 'InterstitialDiscover'
477 | 'InterstitialProfile'
478 | 'Profile'
479 | 'Onboarding'
480 location: 'Card' | 'Profile' | 'FollowAll'
481 recId?: number | string
482 position: number
483 suggestedDid: string
484 category: string | null
485 }
486 'suggestedUser:press': {
487 logContext:
488 | 'Explore'
489 | 'InterstitialDiscover'
490 | 'InterstitialProfile'
491 | 'Onboarding'
492 recId?: number | string
493 position: number
494 suggestedDid: string
495 category: string | null
496 }
497 'suggestedUser:seen': {
498 logContext:
499 | 'Explore'
500 | 'InterstitialDiscover'
501 | 'InterstitialProfile'
502 | 'Profile'
503 | 'Onboarding'
504 | 'ProgressGuide'
505 recId?: number | string
506 position: number
507 suggestedDid: string
508 category: string | null
509 }
510 'suggestedUser:seeMore': {
511 logContext:
512 | 'Explore'
513 | 'InterstitialDiscover'
514 | 'InterstitialProfile'
515 | 'Profile'
516 | 'Onboarding'
517 }
518 'suggestedUser:dismiss': {
519 logContext: 'InterstitialDiscover' | 'InterstitialProfile'
520 recId?: number | string
521 position: number
522 suggestedDid: string
523 }
524 'profile:unfollow': {
525 logContext:
526 | 'RecommendedFollowsItem'
527 | 'PostThreadItem'
528 | 'ProfileCard'
529 | 'ProfileHeader'
530 | 'ProfileHeaderSuggestedFollows'
531 | 'ProfileMenu'
532 | 'ProfileHoverCard'
533 | 'Chat'
534 | 'AvatarButton'
535 | 'StarterPackProfilesList'
536 | 'FeedInterstitial'
537 | 'PostOnboardingFindFollows'
538 | 'ImmersiveVideo'
539 | 'ExploreSuggestedAccounts'
540 | 'OnboardingSuggestedAccounts'
541 | 'FindContacts'
542 }
543 'chat:create': {
544 logContext: 'ProfileHeader' | 'NewChatDialog' | 'SendViaChatDialog'
545 }
546 'chat:open': {
547 logContext:
548 | 'ProfileHeader'
549 | 'NewChatDialog'
550 | 'ChatsList'
551 | 'SendViaChatDialog'
552 }
553 'starterPack:addUser': {
554 starterPack?: string
555 }
556 'starterPack:removeUser': {
557 starterPack?: string
558 }
559 'starterPack:share': {
560 starterPack: string
561 shareType: 'link' | 'qrcode'
562 qrShareType?: 'save' | 'copy' | 'share'
563 }
564 'starterPack:followAll': {
565 logContext: 'StarterPackProfilesList' | 'Onboarding'
566 starterPack: string
567 count: number
568 }
569 'starterPack:delete': {}
570 'starterPack:create': {
571 setName: boolean
572 setDescription: boolean
573 profilesCount: number
574 feedsCount: number
575 }
576 'starterPack:convertToList': {
577 starterPack: string
578 memberCount: number
579 }
580 'starterPack:ctaPress': {
581 starterPack: string
582 }
583 'starterPack:opened': {
584 starterPack: string
585 }
586 'link:clicked': {
587 url: string
588 domain: string
589 }
590
591 'feed:interstitial:feedCard:press': {}
592 'desktopFeeds:feed:click': {
593 feedUri: string
594 feedDescriptor: string
595 }
596
597 'profile:header:suggestedFollowsCard:press': {}
598 'profile:addToStarterPack': {}
599
600 'test:all:always': {}
601 'test:all:sometimes': {}
602 'test:all:boosted_by_gate1': {reason: 'base' | 'gate1'}
603 'test:all:boosted_by_gate2': {reason: 'base' | 'gate2'}
604 'test:all:boosted_by_both': {reason: 'base' | 'gate1' | 'gate2'}
605 'test:gate1:always': {}
606 'test:gate1:sometimes': {}
607 'test:gate2:always': {}
608 'test:gate2:sometimes': {}
609
610 'tmd:share': {}
611 'tmd:download': {}
612 'tmd:post': {}
613
614 'trendingTopics:show': {
615 context: 'settings'
616 }
617 'trendingTopics:hide': {
618 context: 'settings' | 'sidebar' | 'interstitial' | 'explore:trending'
619 }
620 'trendingTopic:click': {
621 context: 'sidebar' | 'interstitial' | 'explore'
622 }
623 'recommendedTopic:click': {
624 context: 'explore'
625 }
626 'trendingVideos:show': {
627 context: 'settings'
628 }
629 'trendingVideos:hide': {
630 context: 'settings' | 'interstitial:discover' | 'interstitial:explore'
631 }
632 'videoCard:click': {
633 context: 'interstitial:discover' | 'interstitial:explore' | 'feed'
634 }
635
636 'explore:module:seen': {
637 module:
638 | 'trendingTopics'
639 | 'trendingVideos'
640 | 'suggestedAccounts'
641 | 'suggestedFeeds'
642 | 'suggestedStarterPacks'
643 | `feed:${FeedDescriptor}`
644 }
645 'explore:module:searchButtonPress': {
646 module: 'suggestedAccounts' | 'suggestedFeeds'
647 }
648 'explore:suggestedAccounts:tabPressed': {
649 tab: string
650 }
651
652 'search:query': {
653 source: 'typed' | 'history' | 'autocomplete'
654 }
655
656 'search:results:loaded': {
657 tab: 'top' | 'latest' | 'people' | 'feeds'
658 initialCount: number
659 }
660
661 'search:result:press': {
662 tab?: 'top' | 'latest' | 'people' | 'feeds'
663 resultType: 'post' | 'profile' | 'feed'
664 position: number
665 uri: string
666 }
667
668 'search:recent:press': {
669 profileDid: string
670 position: number
671 }
672
673 'search:autocomplete:press': {
674 profileDid: string
675 position: number
676 }
677
678 'progressGuide:hide': {}
679 'progressGuide:followDialog:open': {}
680
681 'moderation:subscribedToLabeler': {}
682 'moderation:unsubscribedFromLabeler': {}
683 'moderation:changeLabelPreference': {
684 preference: string
685 }
686
687 'moderation:subscribedToList': {
688 listType: 'mute' | 'block'
689 }
690 'moderation:unsubscribedFromList': {
691 listType: 'mute' | 'block'
692 }
693
694 'reportDialog:open': {
695 subjectType: string
696 }
697 'reportDialog:close': {}
698 'reportDialog:success': {
699 reason: string
700 labeler: string
701 details: boolean
702 }
703 'reportDialog:failure': {}
704
705 translate: {
706 sourceLanguages: string[]
707 targetLanguage: string
708 textLength: number
709 }
710 'translate:result': {
711 method: 'on-device' | 'google-translate' | 'fallback-alert'
712 os: Platform['OS']
713 sourceLanguage: string | null
714 targetLanguage: string
715 }
716 'translate:override': {
717 os: Platform['OS']
718 sourceLanguage: string
719 targetLanguage: string
720 }
721
722 'verification:create': {}
723 'verification:revoke': {}
724 'verification:badge:click': {}
725 'verification:learn-more': {
726 location:
727 | 'initialAnnouncementeNux'
728 | 'verificationsDialog'
729 | 'verifierDialog'
730 | 'verificationSettings'
731 }
732 'verification:settings:hideBadges': {}
733 'verification:settings:unHideBadges': {}
734
735 'live:create': {duration: number}
736 'live:edit': {}
737 'live:remove': {}
738 'live:card:open': {subject: string; from: 'post' | 'profile'}
739 'live:card:watch': {subject: string}
740 'live:card:openProfile': {subject: string}
741 'live:card:viewAvatar': {subject: string}
742 'live:view:profile': {subject: string}
743 'live:view:post': {subject: string; feed?: string}
744
745 'post:share': {
746 uri: string
747 authorDid: string
748 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo'
749 feedDescriptor?: string
750 postContext: 'feed' | 'thread'
751 position?: number
752 }
753 'share:press:copyLink': {}
754 'share:press:nativeShare': {}
755 'share:press:openDmSearch': {}
756 'share:press:dmSelected': {}
757 'share:press:recentDm': {}
758 'share:press:embed': {}
759
760 'thread:click:showOtherReplies': {}
761 'thread:click:hideReplyForMe': {}
762 'thread:click:hideReplyForEveryone': {}
763 'thread:preferences:load': {
764 [key: string]: any
765 }
766 'thread:preferences:update': {
767 [key: string]: any
768 }
769 'thread:click:headerMenuOpen': {}
770 'thread:click:editOwnThreadgate': {}
771 'thread:click:viewSomeoneElsesThreadgate': {}
772 'activitySubscription:enable': {
773 setting: 'posts' | 'posts_and_replies'
774 }
775 'activitySubscription:disable': {}
776 'activityPreference:changeChannels': {
777 name: string
778 push: boolean
779 list: boolean
780 }
781 'activityPreference:changeFilter': {
782 name: string
783 value: string
784 }
785
786 'ageAssurance:navigateToSettings': {}
787 'ageAssurance:dismissFeedBanner': {}
788 'ageAssurance:dismissSettingsNotice': {}
789 'ageAssurance:initDialogOpen': {
790 hasInitiatedPreviously: boolean
791 }
792 'ageAssurance:initDialogSubmit': {}
793 'ageAssurance:api:begin': {
794 platform: string
795 countryCode: string
796 regionCode?: string
797 }
798 'ageAssurance:initDialogError': {
799 code: string
800 }
801 'ageAssurance:redirectDialogOpen': {}
802 'ageAssurance:redirectDialogSuccess': {}
803 'ageAssurance:redirectDialogFail': {}
804 'ageAssurance:appealDialogOpen': {}
805 'ageAssurance:appealDialogSubmit': {}
806 'ageAssurance:noAccessScreen:shown': {
807 accountCreatedAt: string
808 isAARegion: boolean
809 hasDeclaredAge: boolean
810 canUpdateBirthday: boolean
811 }
812 'ageAssurance:noAccessScreen:openBirthdateDialog': {}
813
814 /*
815 * Specifically for the `BlockedGeoOverlay`
816 */
817 'blockedGeoOverlay:shown': {}
818
819 'geo:debug': {}
820
821 /*
822 * Find Contacts stuff
823 */
824
825 // user presses the button on the new feature NUX
826 'contacts:nux:ctaPressed': {}
827 // user presses the banner NUX
828 'contacts:nux:bannerPressed': {}
829 // user dismisses the banner
830 'contacts:nux:bannerDismissed': {}
831
832 // user lands on the contacts step
833 'onboarding:contacts:presented': {}
834 // user pressed "Import Contacts" button to begin flow
835 'onboarding:contacts:begin': {}
836 // skips the step entirely
837 'onboarding:contacts:skipPressed': {}
838 // user shared their contacts
839 'onboarding:contacts:contactsShared': {}
840 // user leaves the matches page
841 'onboarding:contacts:nextPressed': {
842 matchCount: number
843 followCount: number
844 dismissedMatchCount: number
845 }
846
847 // user entered a number
848 'contacts:phone:phoneEntered': {
849 entryPoint: 'Onboarding' | 'Standalone'
850 }
851 // user entered the correct one-time-code
852 'contacts:phone:phoneVerified': {
853 entryPoint: 'Onboarding' | 'Standalone'
854 }
855 // user responded to the contacts permission prompt
856 'contacts:permission:request': {
857 status: 'granted' | 'denied'
858 accessLevelIOS?: 'all' | 'limited' | 'none'
859 }
860 // contacts were successfully imported and matched
861 'contacts:import:success': {
862 contactCount: number
863 matchCount: number
864 entryPoint: 'Onboarding' | 'Standalone'
865 }
866 // contacts import failed
867 'contacts:import:failure': {
868 reason: 'noValidNumbers' | 'networkError' | 'unknown'
869 entryPoint: 'Onboarding' | 'Standalone'
870 }
871 // user followed a single match
872 'contacts:matches:follow': {
873 entryPoint: 'Onboarding' | 'Standalone'
874 }
875 // user pressed "Follow All" on matches
876 'contacts:matches:followAll': {
877 followCount: number
878 entryPoint: 'Onboarding' | 'Standalone'
879 }
880 // user dismissed a match
881 'contacts:matches:dismiss': {
882 entryPoint: 'Onboarding' | 'Standalone'
883 }
884 // user pressed invite to send an SMS to a non-match
885 'contacts:matches:invite': {
886 entryPoint: 'Onboarding' | 'Standalone'
887 }
888 // user opened the Find Contacts settings screen
889 'contacts:settings:presented': {
890 hasPreviouslySynced: boolean
891 matchCount?: number
892 }
893 // user followed a single match from settings
894 'contacts:settings:follow': {}
895 // user pressed "Follow All" from settings
896 'contacts:settings:followAll': {
897 followCount: number
898 }
899 // user dismissed a match from settings
900 'contacts:settings:dismiss': {}
901 // user re-entered the flow via the resync button
902 'contacts:settings:resync': {
903 daysSinceLastSync: number
904 }
905 // user pressed the remove all data button
906 'contacts:settings:removeData': {}
907
908 'liveEvents:feedBanner:seen': {
909 feed: string
910 context: LiveEventFeedMetricContext
911 }
912 'liveEvents:feedBanner:click': {
913 feed: string
914 context: LiveEventFeedMetricContext
915 }
916 'liveEvents:feedBanner:hide': {
917 feed: string
918 context: LiveEventFeedMetricContext
919 }
920 'liveEvents:feedBanner:unhide': {
921 feed: string
922 context: LiveEventFeedMetricContext
923 }
924 'liveEvents:hideAllFeedBanners': {
925 context: LiveEventFeedMetricContext
926 }
927 'liveEvents:unhideAllFeedBanners': {
928 context: LiveEventFeedMetricContext
929 }
930
931 'profile:associated:germ:click-to-chat': {}
932 'profile:associated:germ:click-self-info': {}
933 'profile:associated:germ:self-disconnect': {}
934 'profile:associated:germ:self-reconnect': {}
935}