Bluesky app fork with some witchin' additions 馃挮
at main 1049 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 '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}