Bluesky app fork with some witchin' additions 馃挮
witchsky.app
bluesky
fork
client
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 'groupchat:create': {
567 logContext: 'NewChatDialog'
568 }
569 'starterPack:addUser': {
570 starterPack?: string
571 }
572 'starterPack:removeUser': {
573 starterPack?: string
574 }
575 'starterPack:share': {
576 starterPack: string
577 shareType: 'link' | 'qrcode'
578 qrShareType?: 'save' | 'copy' | 'share'
579 }
580 'starterPack:followAll': {
581 logContext: 'StarterPackProfilesList' | 'Onboarding'
582 starterPack: string
583 count: number
584 }
585 'starterPack:delete': {}
586 'starterPack:create': {
587 setName: boolean
588 setDescription: boolean
589 profilesCount: number
590 feedsCount: number
591 }
592 'starterPack:convertToList': {
593 starterPack: string
594 memberCount: number
595 }
596 'starterPack:ctaPress': {
597 starterPack: string
598 }
599 'starterPack:opened': {
600 starterPack: string
601 }
602 'link:clicked': {
603 url: string
604 domain: string
605 }
606
607 'feed:interstitial:feedCard:press': {}
608 'desktopFeeds:feed:click': {
609 feedUri: string
610 feedDescriptor: string
611 }
612
613 'profile:header:suggestedFollowsCard:press': {}
614 'profile:addToStarterPack': {}
615
616 'test:all:always': {}
617 'test:all:sometimes': {}
618 'test:all:boosted_by_gate1': {reason: 'base' | 'gate1'}
619 'test:all:boosted_by_gate2': {reason: 'base' | 'gate2'}
620 'test:all:boosted_by_both': {reason: 'base' | 'gate1' | 'gate2'}
621 'test:gate1:always': {}
622 'test:gate1:sometimes': {}
623 'test:gate2:always': {}
624 'test:gate2:sometimes': {}
625
626 'tmd:share': {}
627 'tmd:download': {}
628 'tmd:post': {}
629
630 'trendingTopics:show': {
631 context: 'settings'
632 }
633 'trendingTopics:hide': {
634 context: 'settings' | 'sidebar' | 'interstitial' | 'explore:trending'
635 }
636 'trendingTopic:click': {
637 context: 'sidebar' | 'interstitial' | 'explore'
638 }
639 'recommendedTopic:click': {
640 context: 'explore'
641 }
642 'trendingVideos:show': {
643 context: 'settings'
644 }
645 'trendingVideos:hide': {
646 context: 'settings' | 'interstitial:discover' | 'interstitial:explore'
647 }
648 'videoCard:click': {
649 context: 'interstitial:discover' | 'interstitial:explore' | 'feed'
650 }
651
652 'explore:module:seen': {
653 module:
654 | 'trendingTopics'
655 | 'trendingVideos'
656 | 'suggestedAccounts'
657 | 'suggestedFeeds'
658 | 'suggestedStarterPacks'
659 | `feed:${FeedDescriptor}`
660 }
661 'explore:module:searchButtonPress': {
662 module: 'suggestedAccounts' | 'suggestedFeeds'
663 }
664 'explore:suggestedAccounts:tabPressed': {
665 tab: string
666 }
667
668 'search:query': {
669 source: 'typed' | 'history' | 'autocomplete'
670 }
671
672 'search:results:loaded': {
673 tab: 'top' | 'latest' | 'people' | 'feeds'
674 initialCount: number
675 }
676
677 'search:result:press': {
678 tab?: 'top' | 'latest' | 'people' | 'feeds'
679 resultType: 'post' | 'profile' | 'feed'
680 position: number
681 uri: string
682 }
683
684 'search:recent:press': {
685 profileDid: string
686 position: number
687 }
688
689 'search:autocomplete:press': {
690 profileDid: string
691 position: number
692 }
693
694 'progressGuide:hide': {}
695 'progressGuide:followDialog:open': {}
696
697 'moderation:subscribedToLabeler': {}
698 'moderation:unsubscribedFromLabeler': {}
699 'moderation:changeLabelPreference': {
700 preference: string
701 }
702
703 'moderation:subscribedToList': {
704 listType: 'mute' | 'block'
705 }
706 'moderation:unsubscribedFromList': {
707 listType: 'mute' | 'block'
708 }
709
710 'reportDialog:open': {
711 subjectType: string
712 }
713 'reportDialog:close': {}
714 'reportDialog:success': {
715 reason: string
716 labeler: string
717 details: boolean
718 }
719 'reportDialog:failure': {}
720
721 translate: {
722 os: Platform['OS']
723 /**
724 * The languages the content might be in, such as the user-supplied
725 * language codes on posts. Currently only available on posts.
726 */
727 possibleSourceLanguages: string[] | undefined
728 /**
729 * This is the user's configured primary language, which is always defined.
730 */
731 expectedTargetLanguage: string
732 /**
733 * The length of the text being translated. We assume shorter texts are
734 * more likely to have inaccurate translations.
735 */
736 textLength: number
737 googleTranslate: boolean
738 }
739 'translate:result': {
740 success: boolean
741 os: Platform['OS']
742 /**
743 * The languages the content might be in, such as the user-supplied
744 * language codes on posts. Currently only available on posts.
745 */
746 possibleSourceLanguages: string[] | undefined
747 /**
748 * The language we expected the content to be in. This could be based on
749 * user selection or on our confidence in the detected language. This is
750 * nullable because we may not always have an expected source language.
751 */
752 expectedSourceLanguage: string | null
753 /**
754 * This is the user's configured primary language, which is always defined.
755 */
756 expectedTargetLanguage: string
757 /**
758 * The language the translation result was actually in. This is nullable
759 * because the translation could have failed, in which case we won't have a
760 * result source language.
761 */
762 resultSourceLanguage: string | null
763 /**
764 * The language the translation result was translated into. This should be
765 * the same as `expectedTargetLanguage`, but we include it for completeness
766 * and in case there are any edge cases where they differ. This is nullable
767 * because if the translation failed, we won't have a result target
768 * language.
769 */
770 resultTargetLanguage: string | null
771 /**
772 * The length of the text being translated. We assume shorter texts are
773 * more likely to have inaccurate translations.
774 */
775 textLength: number
776 }
777 'translate:override': {
778 os: Platform['OS']
779 /**
780 * The languages the content might be in, such as the user-supplied
781 * language codes on posts. Currently only available on posts.
782 */
783 possibleSourceLanguages: string[] | undefined
784 /**
785 * The language the user has indicated the content is actually in, which
786 * may be different from the expected source language if the user is
787 * overriding the auto-detected language. This is the language the user
788 * wants to translate from after overriding.
789 */
790 expectedSourceLanguage: string
791 /**
792 * This is the user's configured primary language, which is always defined.
793 */
794 expectedTargetLanguage: string
795 /**
796 * The language the translation result was actually in, which the user now
797 * wishes to override.
798 */
799 resultSourceLanguage: string
800 }
801
802 'postMenu:openMuteWordsDialog': {
803 uri: string
804 authorDid: string
805 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo'
806 feedDescriptor?: string
807 }
808 'postMenu:muteAccount': {
809 uri: string
810 authorDid: string
811 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo'
812 feedDescriptor?: string
813 }
814 'postMenu:unmuteAccount': {
815 uri: string
816 authorDid: string
817 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo'
818 feedDescriptor?: string
819 }
820 'postMenu:blockAccount': {
821 uri: string
822 authorDid: string
823 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo'
824 feedDescriptor?: string
825 }
826 'postMenu:reportPost': {
827 uri: string
828 authorDid: string
829 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo'
830 feedDescriptor?: string
831 }
832
833 'verification:create': {}
834 'verification:revoke': {}
835 'verification:badge:click': {}
836 'verification:learn-more': {
837 location:
838 | 'initialAnnouncementeNux'
839 | 'verificationsDialog'
840 | 'verifierDialog'
841 | 'verificationSettings'
842 }
843 'verification:settings:hideBadges': {}
844 'verification:settings:unHideBadges': {}
845
846 'bot:label:toggle': {state: 'add' | 'remove'}
847 'bot:badge:click': {}
848 'pet:label:toggle': {state: 'add' | 'remove'}
849 'pet:badge:click': {}
850
851 'live:create': {duration: number}
852 'live:edit': {}
853 'live:remove': {}
854 'live:card:open': {subject: string; from: 'post' | 'profile'}
855 'live:card:watch': {subject: string}
856 'live:card:openProfile': {subject: string}
857 'live:card:viewAvatar': {subject: string}
858 'live:view:profile': {subject: string}
859 'live:view:post': {subject: string; feed?: string}
860
861 'post:share': {
862 uri: string
863 authorDid: string
864 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo'
865 feedDescriptor?: string
866 postContext: 'feed' | 'thread'
867 position?: number
868 }
869 'share:press:copyLink': {}
870 'share:press:nativeShare': {}
871 'share:press:openDmSearch': {}
872 'share:press:dmSelected': {}
873 'share:press:recentDm': {}
874 'share:press:embed': {}
875
876 'thread:click:showOtherReplies': {}
877 'thread:click:hideReplyForMe': {}
878 'thread:click:hideReplyForEveryone': {}
879 'thread:preferences:load': {
880 [key: string]: any
881 }
882 'thread:preferences:update': {
883 [key: string]: any
884 }
885 'thread:click:headerMenuOpen': {}
886 'thread:click:editOwnThreadgate': {}
887 'thread:click:viewSomeoneElsesThreadgate': {}
888 'activitySubscription:enable': {
889 setting: 'posts' | 'posts_and_replies'
890 }
891 'activitySubscription:disable': {}
892 'activityPreference:changeChannels': {
893 name: string
894 push: boolean
895 list: boolean
896 }
897 'activityPreference:changeFilter': {
898 name: string
899 value: string
900 }
901
902 'ageAssurance:navigateToSettings': {}
903 'ageAssurance:dismissFeedBanner': {}
904 'ageAssurance:dismissSettingsNotice': {}
905 'ageAssurance:initDialogOpen': {
906 hasInitiatedPreviously: boolean
907 }
908 'ageAssurance:initDialogSubmit': {}
909 'ageAssurance:api:begin': {
910 platform: string
911 countryCode: string
912 regionCode?: string
913 }
914 'ageAssurance:initDialogError': {
915 code: string
916 }
917 'ageAssurance:redirectDialogOpen': {}
918 'ageAssurance:redirectDialogSuccess': {}
919 'ageAssurance:redirectDialogFail': {}
920 'ageAssurance:appealDialogOpen': {}
921 'ageAssurance:appealDialogSubmit': {}
922 'ageAssurance:noAccessScreen:shown': {
923 accountCreatedAt: string
924 isAARegion: boolean
925 hasDeclaredAge: boolean
926 canUpdateBirthday: boolean
927 }
928 'ageAssurance:noAccessScreen:openBirthdateDialog': {}
929 'ageAssurance:noAccessScreen:openDeleteAccountDialog': {}
930
931 /*
932 * Specifically for the `BlockedGeoOverlay`
933 */
934 'blockedGeoOverlay:shown': {}
935
936 'geo:debug': {}
937
938 /*
939 * Find Contacts stuff
940 */
941
942 // user presses the button on the new feature NUX
943 'contacts:nux:ctaPressed': {}
944 // user presses the banner NUX
945 'contacts:nux:bannerPressed': {}
946 // user dismisses the banner
947 'contacts:nux:bannerDismissed': {}
948
949 // user lands on the contacts step
950 'onboarding:contacts:presented': {}
951 // user pressed "Import Contacts" button to begin flow
952 'onboarding:contacts:begin': {}
953 // skips the step entirely
954 'onboarding:contacts:skipPressed': {}
955 // user shared their contacts
956 'onboarding:contacts:contactsShared': {}
957 // user leaves the matches page
958 'onboarding:contacts:nextPressed': {
959 matchCount: number
960 followCount: number
961 dismissedMatchCount: number
962 }
963
964 // user entered a number
965 'contacts:phone:phoneEntered': {
966 entryPoint: 'Onboarding' | 'Standalone'
967 }
968 // user entered the correct one-time-code
969 'contacts:phone:phoneVerified': {
970 entryPoint: 'Onboarding' | 'Standalone'
971 }
972 // user responded to the contacts permission prompt
973 'contacts:permission:request': {
974 status: 'granted' | 'denied'
975 accessLevelIOS?: 'all' | 'limited' | 'none'
976 }
977 // contacts were successfully imported and matched
978 'contacts:import:success': {
979 contactCount: number
980 matchCount: number
981 entryPoint: 'Onboarding' | 'Standalone'
982 }
983 // contacts import failed
984 'contacts:import:failure': {
985 reason: 'noValidNumbers' | 'networkError' | 'unknown'
986 entryPoint: 'Onboarding' | 'Standalone'
987 }
988 // user followed a single match
989 'contacts:matches:follow': {
990 entryPoint: 'Onboarding' | 'Standalone'
991 }
992 // user pressed "Follow All" on matches
993 'contacts:matches:followAll': {
994 followCount: number
995 entryPoint: 'Onboarding' | 'Standalone'
996 }
997 // user dismissed a match
998 'contacts:matches:dismiss': {
999 entryPoint: 'Onboarding' | 'Standalone'
1000 }
1001 // user pressed invite to send an SMS to a non-match
1002 'contacts:matches:invite': {
1003 entryPoint: 'Onboarding' | 'Standalone'
1004 }
1005 // user opened the Find Contacts settings screen
1006 'contacts:settings:presented': {
1007 hasPreviouslySynced: boolean
1008 matchCount?: number
1009 }
1010 // user followed a single match from settings
1011 'contacts:settings:follow': {}
1012 // user pressed "Follow All" from settings
1013 'contacts:settings:followAll': {
1014 followCount: number
1015 }
1016 // user dismissed a match from settings
1017 'contacts:settings:dismiss': {}
1018 // user re-entered the flow via the resync button
1019 'contacts:settings:resync': {
1020 daysSinceLastSync: number
1021 }
1022 // user pressed the remove all data button
1023 'contacts:settings:removeData': {}
1024
1025 'liveEvents:feedBanner:seen': {
1026 feed: string
1027 context: LiveEventFeedMetricContext
1028 }
1029 'liveEvents:feedBanner:click': {
1030 feed: string
1031 context: LiveEventFeedMetricContext
1032 }
1033 'liveEvents:feedBanner:hide': {
1034 feed: string
1035 context: LiveEventFeedMetricContext
1036 }
1037 'liveEvents:feedBanner:unhide': {
1038 feed: string
1039 context: LiveEventFeedMetricContext
1040 }
1041 'liveEvents:hideAllFeedBanners': {
1042 context: LiveEventFeedMetricContext
1043 }
1044 'liveEvents:unhideAllFeedBanners': {
1045 context: LiveEventFeedMetricContext
1046 }
1047
1048 'profile:associated:germ:click-to-chat': {}
1049 'profile:associated:germ:click-self-info': {}
1050 'profile:associated:germ:self-disconnect': {}
1051 'profile:associated:germ:self-reconnect': {}
1052
1053 // Gallery carousel events
1054 'post:gallery:swipe': {
1055 fromImage: number
1056 toImage: number
1057 totalImages: number
1058 }
1059 'post:gallery:openLightbox': {
1060 fromImage: number
1061 totalImages: number
1062 }
1063 'post:gallery:impression': {
1064 totalImages: number
1065 postUri: string
1066 }
1067}