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