Bluesky app fork with some witchin' additions 馃挮 witchsky.app
bluesky fork client
119
fork

Configure Feed

Select the types of activity you want to include in your feed.

at a876aae44ea07494ebea9727350aa060b81f317b 1067 lines 27 kB view raw
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}