Bluesky app fork with some witchin' additions 馃挮
0
fork

Configure Feed

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

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