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 'composer:image:edit': {
234 platform: Platform['OS']
235 }
236 'composerPrompt:press': {}
237 'composerPrompt:camera:press': {}
238 'composerPrompt:gallery:press': {}
239
240 'composer:threadgate:open': {
241 nudged: boolean
242 }
243 'composer:threadgate:save': {
244 replyOptions: string
245 quotesEnabled: boolean
246 persist: boolean
247 hasChanged: boolean
248 }
249 'composer:open': {
250 logContext:
251 | 'Fab'
252 | 'PostReply'
253 | 'QuotePost'
254 | 'ProfileFeed'
255 | 'Deeplink'
256 | 'Other'
257 isReply: boolean
258 hasQuote: boolean
259 hasDraft: boolean
260 }
261 'draft:save': {
262 isNewDraft: boolean
263 hasText: boolean
264 hasImages: boolean
265 hasVideo: boolean
266 hasGif: boolean
267 hasQuote: boolean
268 hasLink: boolean
269 postCount: number
270 textLength: number
271 }
272 'draft:load': {
273 draftAgeMs: number
274 hasText: boolean
275 hasImages: boolean
276 hasVideo: boolean
277 hasGif: boolean
278 postCount: number
279 }
280 'draft:delete': {
281 logContext: 'DraftsList'
282 draftAgeMs: number
283 }
284 'draft:listOpen': {
285 draftCount: number
286 }
287 'draft:post': {
288 draftAgeMs: number
289 wasEdited: boolean
290 }
291 'draft:discard': {
292 logContext: 'ComposerClose' | 'BeforeDraftsList'
293 hadContent: boolean
294 textLength: number
295 }
296
297 // Data events
298 'account:create:begin': {}
299 'account:create:success': {
300 signupDuration: number
301 fieldErrorsTotal: number
302 backgroundCount: number
303 }
304 'post:create': {
305 imageCount: number
306 isReply: boolean
307 isPartOfThread: boolean
308 hasLink: boolean
309 hasQuote: boolean
310 langs: string
311 logContext: 'Composer'
312 }
313 'thread:create': {
314 postCount: number
315 isReply: boolean
316 }
317 'post:like': {
318 uri: string
319 authorDid: string
320 doesLikerFollowPoster: boolean | undefined
321 doesPosterFollowLiker: boolean | undefined
322 likerClout: number | undefined
323 postClout: number | undefined
324 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo'
325 feedDescriptor?: string
326 }
327 'post:repost': {
328 uri: string
329 authorDid: string
330 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo'
331 feedDescriptor?: string
332 }
333 'post:unlike': {
334 uri: string
335 authorDid: string
336 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo'
337 feedDescriptor?: string
338 }
339 'post:unrepost': {
340 uri: string
341 authorDid: string
342 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo'
343 feedDescriptor?: string
344 }
345 'post:mute': {
346 uri: string
347 authorDid: string
348 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo'
349 feedDescriptor?: string
350 position?: number
351 }
352 'post:unmute': {
353 uri: string
354 authorDid: string
355 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo'
356 feedDescriptor?: string
357 position?: number
358 }
359 'post:pin': {}
360 'post:unpin': {}
361 'post:bookmark': {
362 uri: string
363 authorDid: string
364 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo'
365 feedDescriptor?: string
366 position?: number
367 }
368 'post:unbookmark': {
369 uri: string
370 authorDid: string
371 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo'
372 feedDescriptor?: string
373 position?: number
374 }
375 'post:clickReply': {
376 uri: string
377 authorDid: string
378 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo'
379 feedDescriptor?: string
380 position?: number
381 }
382 'post:clickQuotePost': {
383 uri: string
384 authorDid: string
385 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo'
386 feedDescriptor?: string
387 position?: number
388 }
389 'post:clickthroughAuthor': {
390 uri: string
391 authorDid: string
392 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo'
393 feedDescriptor?: string
394 position?: number
395 }
396 'post:clickthroughItem': {
397 uri: string
398 authorDid: string
399 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo'
400 feedDescriptor?: string
401 position?: number
402 }
403 'post:clickthroughEmbed': {
404 uri: string
405 authorDid: string
406 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo'
407 feedDescriptor?: string
408 position?: number
409 }
410 'post:view': {
411 uri: string
412 authorDid: string
413 logContext:
414 | 'FeedItem'
415 | 'PostThreadItem'
416 | 'Post'
417 | 'ImmersiveVideo'
418 | 'SearchResults'
419 | 'Bookmarks'
420 | 'Notifications'
421 | 'Hashtag'
422 | 'Topic'
423 | 'PostQuotes'
424 feedDescriptor?: string
425 position?: number
426 }
427 'bookmarks:view': {}
428 'bookmarks:post-clicked': {}
429 'profile:follow': {
430 contextProfileDid?: string
431 didBecomeMutual: boolean | undefined
432 followeeClout: number | undefined
433 followeeDid: string
434 followerClout: number | undefined
435 position?: number
436 logContext:
437 | 'RecommendedFollowsItem'
438 | 'PostThreadItem'
439 | 'ProfileCard'
440 | 'ProfileHeader'
441 | 'ProfileHeaderSuggestedFollows'
442 | 'ProfileMenu'
443 | 'ProfileHoverCard'
444 | 'AvatarButton'
445 | 'StarterPackProfilesList'
446 | 'FeedInterstitial'
447 | 'PostOnboardingFindFollows'
448 | 'ImmersiveVideo'
449 | 'ExploreSuggestedAccounts'
450 | 'OnboardingSuggestedAccounts'
451 | 'FindContacts'
452 }
453 'profile:followers:view': {
454 contextProfileDid: string
455 isOwnProfile: boolean
456 }
457 'profile:followers:paginate': {
458 contextProfileDid: string
459 itemCount: number
460 page: number
461 }
462 'profile:following:view': {
463 contextProfileDid: string
464 isOwnProfile: boolean
465 }
466 'profile:following:paginate': {
467 contextProfileDid: string
468 itemCount: number
469 page: number
470 }
471 'profileCard:seen': {
472 contextProfileDid?: string
473 profileDid: string
474 position?: number
475 }
476 'profile:mute': {}
477 'profile:unmute': {}
478 'profile:block': {}
479 'profile:unblock': {}
480 'suggestedUser:follow': {
481 logContext:
482 | 'Explore'
483 | 'DiscoverInterstitial'
484 | 'ProfileInterstitial'
485 | 'ProfileHeader'
486 | 'Onboarding'
487 | 'SeeMoreSuggestedUsers'
488 | 'ProgressGuide'
489 location: 'Card' | 'Profile' | 'FollowAll'
490 recId?: number | string
491 position: number
492 suggestedDid: string
493 category: string | null
494 }
495 'suggestedUser:press': {
496 logContext:
497 | 'Explore'
498 | 'DiscoverInterstitial'
499 | 'ProfileInterstitial'
500 | 'ProfileHeader'
501 | 'Onboarding'
502 | 'SeeMoreSuggestedUsers'
503 recId?: number | string
504 position: number
505 suggestedDid: string
506 category: string | null
507 }
508 'suggestedUser:seen': {
509 logContext:
510 | 'Explore'
511 | 'DiscoverInterstitial'
512 | 'ProfileInterstitial'
513 | 'ProfileHeader'
514 | 'Onboarding'
515 | 'SeeMoreSuggestedUsers'
516 | 'ProgressGuide'
517 recId?: number | string
518 position: number
519 suggestedDid: string
520 category: string | null
521 }
522 'suggestedUser:seeMore': {
523 logContext:
524 | 'Explore'
525 | 'DiscoverInterstitial'
526 | 'ProfileInterstitial'
527 | 'ProfileHeader'
528 | 'Onboarding'
529 recId?: number | string
530 }
531 'suggestedUser:dismiss': {
532 logContext: 'DiscoverInterstitial' | 'ProfileInterstitial' | 'ProfileHeader'
533 recId?: number | string
534 position: number
535 suggestedDid: string
536 }
537 'profile:unfollow': {
538 logContext:
539 | 'RecommendedFollowsItem'
540 | 'PostThreadItem'
541 | 'ProfileCard'
542 | 'ProfileHeader'
543 | 'ProfileHeaderSuggestedFollows'
544 | 'ProfileMenu'
545 | 'ProfileHoverCard'
546 | 'Chat'
547 | 'AvatarButton'
548 | 'StarterPackProfilesList'
549 | 'FeedInterstitial'
550 | 'PostOnboardingFindFollows'
551 | 'ImmersiveVideo'
552 | 'ExploreSuggestedAccounts'
553 | 'OnboardingSuggestedAccounts'
554 | 'FindContacts'
555 }
556 'chat:create': {
557 logContext: 'ProfileHeader' | 'NewChatDialog' | 'SendViaChatDialog'
558 }
559 'chat:open': {
560 logContext:
561 | 'ProfileHeader'
562 | 'NewChatDialog'
563 | 'ChatsList'
564 | 'SendViaChatDialog'
565 }
566 'starterPack:addUser': {
567 starterPack?: string
568 }
569 'starterPack:removeUser': {
570 starterPack?: string
571 }
572 'starterPack:share': {
573 starterPack: string
574 shareType: 'link' | 'qrcode'
575 qrShareType?: 'save' | 'copy' | 'share'
576 }
577 'starterPack:followAll': {
578 logContext: 'StarterPackProfilesList' | 'Onboarding'
579 starterPack: string
580 count: number
581 }
582 'starterPack:delete': {}
583 'starterPack:create': {
584 setName: boolean
585 setDescription: boolean
586 profilesCount: number
587 feedsCount: number
588 }
589 'starterPack:convertToList': {
590 starterPack: string
591 memberCount: number
592 }
593 'starterPack:ctaPress': {
594 starterPack: string
595 }
596 'starterPack:opened': {
597 starterPack: string
598 }
599 'link:clicked': {
600 url: string
601 domain: string
602 }
603
604 'feed:interstitial:feedCard:press': {}
605 'desktopFeeds:feed:click': {
606 feedUri: string
607 feedDescriptor: string
608 }
609
610 'profile:header:suggestedFollowsCard:press': {}
611 'profile:addToStarterPack': {}
612
613 'test:all:always': {}
614 'test:all:sometimes': {}
615 'test:all:boosted_by_gate1': {reason: 'base' | 'gate1'}
616 'test:all:boosted_by_gate2': {reason: 'base' | 'gate2'}
617 'test:all:boosted_by_both': {reason: 'base' | 'gate1' | 'gate2'}
618 'test:gate1:always': {}
619 'test:gate1:sometimes': {}
620 'test:gate2:always': {}
621 'test:gate2:sometimes': {}
622
623 'tmd:share': {}
624 'tmd:download': {}
625 'tmd:post': {}
626
627 'trendingTopics:show': {
628 context: 'settings'
629 }
630 'trendingTopics:hide': {
631 context: 'settings' | 'sidebar' | 'interstitial' | 'explore:trending'
632 }
633 'trendingTopic:click': {
634 context: 'sidebar' | 'interstitial' | 'explore'
635 }
636 'recommendedTopic:click': {
637 context: 'explore'
638 }
639 'trendingVideos:show': {
640 context: 'settings'
641 }
642 'trendingVideos:hide': {
643 context: 'settings' | 'interstitial:discover' | 'interstitial:explore'
644 }
645 'videoCard:click': {
646 context: 'interstitial:discover' | 'interstitial:explore' | 'feed'
647 }
648
649 'explore:module:seen': {
650 module:
651 | 'trendingTopics'
652 | 'trendingVideos'
653 | 'suggestedAccounts'
654 | 'suggestedFeeds'
655 | 'suggestedStarterPacks'
656 | `feed:${FeedDescriptor}`
657 }
658 'explore:module:searchButtonPress': {
659 module: 'suggestedAccounts' | 'suggestedFeeds'
660 }
661 'explore:suggestedAccounts:tabPressed': {
662 tab: string
663 }
664
665 'search:query': {
666 source: 'typed' | 'history' | 'autocomplete'
667 }
668
669 'search:results:loaded': {
670 tab: 'top' | 'latest' | 'people' | 'feeds'
671 initialCount: number
672 }
673
674 'search:result:press': {
675 tab?: 'top' | 'latest' | 'people' | 'feeds'
676 resultType: 'post' | 'profile' | 'feed'
677 position: number
678 uri: string
679 }
680
681 'search:recent:press': {
682 profileDid: string
683 position: number
684 }
685
686 'search:autocomplete:press': {
687 profileDid: string
688 position: number
689 }
690
691 'progressGuide:hide': {}
692 'progressGuide:followDialog:open': {}
693
694 'moderation:subscribedToLabeler': {}
695 'moderation:unsubscribedFromLabeler': {}
696 'moderation:changeLabelPreference': {
697 preference: string
698 }
699
700 'moderation:subscribedToList': {
701 listType: 'mute' | 'block'
702 }
703 'moderation:unsubscribedFromList': {
704 listType: 'mute' | 'block'
705 }
706
707 'reportDialog:open': {
708 subjectType: string
709 }
710 'reportDialog:close': {}
711 'reportDialog:success': {
712 reason: string
713 labeler: string
714 details: boolean
715 }
716 'reportDialog:failure': {}
717
718 translate: {
719 os: Platform['OS']
720 /**
721 * The languages the content might be in, such as the user-supplied
722 * language codes on posts. Currently only available on posts.
723 */
724 possibleSourceLanguages: string[] | undefined
725 /**
726 * This is the user's configured primary language, which is always defined.
727 */
728 expectedTargetLanguage: string
729 /**
730 * The length of the text being translated. We assume shorter texts are
731 * more likely to have inaccurate translations.
732 */
733 textLength: number
734 googleTranslate: boolean
735 }
736 'translate:result': {
737 success: boolean
738 os: Platform['OS']
739 /**
740 * The languages the content might be in, such as the user-supplied
741 * language codes on posts. Currently only available on posts.
742 */
743 possibleSourceLanguages: string[] | undefined
744 /**
745 * The language we expected the content to be in. This could be based on
746 * user selection or on our confidence in the detected language. This is
747 * nullable because we may not always have an expected source language.
748 */
749 expectedSourceLanguage: string | null
750 /**
751 * This is the user's configured primary language, which is always defined.
752 */
753 expectedTargetLanguage: string
754 /**
755 * The language the translation result was actually in. This is nullable
756 * because the translation could have failed, in which case we won't have a
757 * result source language.
758 */
759 resultSourceLanguage: string | null
760 /**
761 * The language the translation result was translated into. This should be
762 * the same as `expectedTargetLanguage`, but we include it for completeness
763 * and in case there are any edge cases where they differ. This is nullable
764 * because if the translation failed, we won't have a result target
765 * language.
766 */
767 resultTargetLanguage: string | null
768 /**
769 * The length of the text being translated. We assume shorter texts are
770 * more likely to have inaccurate translations.
771 */
772 textLength: number
773 }
774 'translate:override': {
775 os: Platform['OS']
776 /**
777 * The languages the content might be in, such as the user-supplied
778 * language codes on posts. Currently only available on posts.
779 */
780 possibleSourceLanguages: string[] | undefined
781 /**
782 * The language the user has indicated the content is actually in, which
783 * may be different from the expected source language if the user is
784 * overriding the auto-detected language. This is the language the user
785 * wants to translate from after overriding.
786 */
787 expectedSourceLanguage: string
788 /**
789 * This is the user's configured primary language, which is always defined.
790 */
791 expectedTargetLanguage: string
792 /**
793 * The language the translation result was actually in, which the user now
794 * wishes to override.
795 */
796 resultSourceLanguage: string
797 }
798
799 'postMenu:openMuteWordsDialog': {
800 uri: string
801 authorDid: string
802 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo'
803 feedDescriptor?: string
804 }
805 'postMenu:muteAccount': {
806 uri: string
807 authorDid: string
808 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo'
809 feedDescriptor?: string
810 }
811 'postMenu:unmuteAccount': {
812 uri: string
813 authorDid: string
814 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo'
815 feedDescriptor?: string
816 }
817 'postMenu:blockAccount': {
818 uri: string
819 authorDid: string
820 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo'
821 feedDescriptor?: string
822 }
823 'postMenu:reportPost': {
824 uri: string
825 authorDid: string
826 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo'
827 feedDescriptor?: string
828 }
829
830 'verification:create': {}
831 'verification:revoke': {}
832 'verification:badge:click': {}
833 'verification:learn-more': {
834 location:
835 | 'initialAnnouncementeNux'
836 | 'verificationsDialog'
837 | 'verifierDialog'
838 | 'verificationSettings'
839 }
840 'verification:settings:hideBadges': {}
841 'verification:settings:unHideBadges': {}
842
843 'bot:label:toggle': {state: 'add' | 'remove'}
844 'bot:badge:click': {}
845 'pet:label:toggle': {state: 'add' | 'remove'}
846 'pet:badge:click': {}
847
848 'live:create': {duration: number}
849 'live:edit': {}
850 'live:remove': {}
851 'live:card:open': {subject: string; from: 'post' | 'profile'}
852 'live:card:watch': {subject: string}
853 'live:card:openProfile': {subject: string}
854 'live:card:viewAvatar': {subject: string}
855 'live:view:profile': {subject: string}
856 'live:view:post': {subject: string; feed?: string}
857
858 'post:share': {
859 uri: string
860 authorDid: string
861 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo'
862 feedDescriptor?: string
863 postContext: 'feed' | 'thread'
864 position?: number
865 }
866 'share:press:copyLink': {}
867 'share:press:nativeShare': {}
868 'share:press:openDmSearch': {}
869 'share:press:dmSelected': {}
870 'share:press:recentDm': {}
871 'share:press:embed': {}
872
873 'thread:click:showOtherReplies': {}
874 'thread:click:hideReplyForMe': {}
875 'thread:click:hideReplyForEveryone': {}
876 'thread:preferences:load': {
877 [key: string]: any
878 }
879 'thread:preferences:update': {
880 [key: string]: any
881 }
882 'thread:click:headerMenuOpen': {}
883 'thread:click:editOwnThreadgate': {}
884 'thread:click:viewSomeoneElsesThreadgate': {}
885 'activitySubscription:enable': {
886 setting: 'posts' | 'posts_and_replies'
887 }
888 'activitySubscription:disable': {}
889 'activityPreference:changeChannels': {
890 name: string
891 push: boolean
892 list: boolean
893 }
894 'activityPreference:changeFilter': {
895 name: string
896 value: string
897 }
898
899 'ageAssurance:navigateToSettings': {}
900 'ageAssurance:dismissFeedBanner': {}
901 'ageAssurance:dismissSettingsNotice': {}
902 'ageAssurance:initDialogOpen': {
903 hasInitiatedPreviously: boolean
904 }
905 'ageAssurance:initDialogSubmit': {}
906 'ageAssurance:api:begin': {
907 platform: string
908 countryCode: string
909 regionCode?: string
910 }
911 'ageAssurance:initDialogError': {
912 code: string
913 }
914 'ageAssurance:redirectDialogOpen': {}
915 'ageAssurance:redirectDialogSuccess': {}
916 'ageAssurance:redirectDialogFail': {}
917 'ageAssurance:appealDialogOpen': {}
918 'ageAssurance:appealDialogSubmit': {}
919 'ageAssurance:noAccessScreen:shown': {
920 accountCreatedAt: string
921 isAARegion: boolean
922 hasDeclaredAge: boolean
923 canUpdateBirthday: boolean
924 }
925 'ageAssurance:noAccessScreen:openBirthdateDialog': {}
926 'ageAssurance:noAccessScreen:openDeleteAccountDialog': {}
927
928 /*
929 * Specifically for the `BlockedGeoOverlay`
930 */
931 'blockedGeoOverlay:shown': {}
932
933 'geo:debug': {}
934
935 /*
936 * Find Contacts stuff
937 */
938
939 // user presses the button on the new feature NUX
940 'contacts:nux:ctaPressed': {}
941 // user presses the banner NUX
942 'contacts:nux:bannerPressed': {}
943 // user dismisses the banner
944 'contacts:nux:bannerDismissed': {}
945
946 // user lands on the contacts step
947 'onboarding:contacts:presented': {}
948 // user pressed "Import Contacts" button to begin flow
949 'onboarding:contacts:begin': {}
950 // skips the step entirely
951 'onboarding:contacts:skipPressed': {}
952 // user shared their contacts
953 'onboarding:contacts:contactsShared': {}
954 // user leaves the matches page
955 'onboarding:contacts:nextPressed': {
956 matchCount: number
957 followCount: number
958 dismissedMatchCount: number
959 }
960
961 // user entered a number
962 'contacts:phone:phoneEntered': {
963 entryPoint: 'Onboarding' | 'Standalone'
964 }
965 // user entered the correct one-time-code
966 'contacts:phone:phoneVerified': {
967 entryPoint: 'Onboarding' | 'Standalone'
968 }
969 // user responded to the contacts permission prompt
970 'contacts:permission:request': {
971 status: 'granted' | 'denied'
972 accessLevelIOS?: 'all' | 'limited' | 'none'
973 }
974 // contacts were successfully imported and matched
975 'contacts:import:success': {
976 contactCount: number
977 matchCount: number
978 entryPoint: 'Onboarding' | 'Standalone'
979 }
980 // contacts import failed
981 'contacts:import:failure': {
982 reason: 'noValidNumbers' | 'networkError' | 'unknown'
983 entryPoint: 'Onboarding' | 'Standalone'
984 }
985 // user followed a single match
986 'contacts:matches:follow': {
987 entryPoint: 'Onboarding' | 'Standalone'
988 }
989 // user pressed "Follow All" on matches
990 'contacts:matches:followAll': {
991 followCount: number
992 entryPoint: 'Onboarding' | 'Standalone'
993 }
994 // user dismissed a match
995 'contacts:matches:dismiss': {
996 entryPoint: 'Onboarding' | 'Standalone'
997 }
998 // user pressed invite to send an SMS to a non-match
999 'contacts:matches:invite': {
1000 entryPoint: 'Onboarding' | 'Standalone'
1001 }
1002 // user opened the Find Contacts settings screen
1003 'contacts:settings:presented': {
1004 hasPreviouslySynced: boolean
1005 matchCount?: number
1006 }
1007 // user followed a single match from settings
1008 'contacts:settings:follow': {}
1009 // user pressed "Follow All" from settings
1010 'contacts:settings:followAll': {
1011 followCount: number
1012 }
1013 // user dismissed a match from settings
1014 'contacts:settings:dismiss': {}
1015 // user re-entered the flow via the resync button
1016 'contacts:settings:resync': {
1017 daysSinceLastSync: number
1018 }
1019 // user pressed the remove all data button
1020 'contacts:settings:removeData': {}
1021
1022 'liveEvents:feedBanner:seen': {
1023 feed: string
1024 context: LiveEventFeedMetricContext
1025 }
1026 'liveEvents:feedBanner:click': {
1027 feed: string
1028 context: LiveEventFeedMetricContext
1029 }
1030 'liveEvents:feedBanner:hide': {
1031 feed: string
1032 context: LiveEventFeedMetricContext
1033 }
1034 'liveEvents:feedBanner:unhide': {
1035 feed: string
1036 context: LiveEventFeedMetricContext
1037 }
1038 'liveEvents:hideAllFeedBanners': {
1039 context: LiveEventFeedMetricContext
1040 }
1041 'liveEvents:unhideAllFeedBanners': {
1042 context: LiveEventFeedMetricContext
1043 }
1044
1045 'profile:associated:germ:click-to-chat': {}
1046 'profile:associated:germ:click-self-info': {}
1047 'profile:associated:germ:self-disconnect': {}
1048 'profile:associated:germ:self-reconnect': {}
1049}