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

Configure Feed

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

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