Bluesky app fork with some witchin' additions 馃挮
at jean/pds-label 896 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:convertToList': { 575 starterPack: string 576 memberCount: number 577 } 578 'starterPack:ctaPress': { 579 starterPack: string 580 } 581 'starterPack:opened': { 582 starterPack: string 583 } 584 'link:clicked': { 585 url: string 586 domain: string 587 } 588 589 'feed:interstitial:feedCard:press': {} 590 'desktopFeeds:feed:click': { 591 feedUri: string 592 feedDescriptor: string 593 } 594 595 'profile:header:suggestedFollowsCard:press': {} 596 'profile:addToStarterPack': {} 597 598 'test:all:always': {} 599 'test:all:sometimes': {} 600 'test:all:boosted_by_gate1': {reason: 'base' | 'gate1'} 601 'test:all:boosted_by_gate2': {reason: 'base' | 'gate2'} 602 'test:all:boosted_by_both': {reason: 'base' | 'gate1' | 'gate2'} 603 'test:gate1:always': {} 604 'test:gate1:sometimes': {} 605 'test:gate2:always': {} 606 'test:gate2:sometimes': {} 607 608 'tmd:share': {} 609 'tmd:download': {} 610 'tmd:post': {} 611 612 'trendingTopics:show': { 613 context: 'settings' 614 } 615 'trendingTopics:hide': { 616 context: 'settings' | 'sidebar' | 'interstitial' | 'explore:trending' 617 } 618 'trendingTopic:click': { 619 context: 'sidebar' | 'interstitial' | 'explore' 620 } 621 'recommendedTopic:click': { 622 context: 'explore' 623 } 624 'trendingVideos:show': { 625 context: 'settings' 626 } 627 'trendingVideos:hide': { 628 context: 'settings' | 'interstitial:discover' | 'interstitial:explore' 629 } 630 'videoCard:click': { 631 context: 'interstitial:discover' | 'interstitial:explore' | 'feed' 632 } 633 634 'explore:module:seen': { 635 module: 636 | 'trendingTopics' 637 | 'trendingVideos' 638 | 'suggestedAccounts' 639 | 'suggestedFeeds' 640 | 'suggestedStarterPacks' 641 | `feed:${FeedDescriptor}` 642 } 643 'explore:module:searchButtonPress': { 644 module: 'suggestedAccounts' | 'suggestedFeeds' 645 } 646 'explore:suggestedAccounts:tabPressed': { 647 tab: string 648 } 649 650 'progressGuide:hide': {} 651 'progressGuide:followDialog:open': {} 652 653 'moderation:subscribedToLabeler': {} 654 'moderation:unsubscribedFromLabeler': {} 655 'moderation:changeLabelPreference': { 656 preference: string 657 } 658 659 'moderation:subscribedToList': { 660 listType: 'mute' | 'block' 661 } 662 'moderation:unsubscribedFromList': { 663 listType: 'mute' | 'block' 664 } 665 666 'reportDialog:open': { 667 subjectType: string 668 } 669 'reportDialog:close': {} 670 'reportDialog:success': { 671 reason: string 672 labeler: string 673 details: boolean 674 } 675 'reportDialog:failure': {} 676 677 translate: { 678 sourceLanguages: string[] 679 targetLanguage: string 680 textLength: number 681 } 682 683 'verification:create': {} 684 'verification:revoke': {} 685 'verification:badge:click': {} 686 'verification:learn-more': { 687 location: 688 | 'initialAnnouncementeNux' 689 | 'verificationsDialog' 690 | 'verifierDialog' 691 | 'verificationSettings' 692 } 693 'verification:settings:hideBadges': {} 694 'verification:settings:unHideBadges': {} 695 696 'live:create': {duration: number} 697 'live:edit': {} 698 'live:remove': {} 699 'live:card:open': {subject: string; from: 'post' | 'profile'} 700 'live:card:watch': {subject: string} 701 'live:card:openProfile': {subject: string} 702 'live:card:viewAvatar': {subject: string} 703 'live:view:profile': {subject: string} 704 'live:view:post': {subject: string; feed?: string} 705 706 'post:share': { 707 uri: string 708 authorDid: string 709 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo' 710 feedDescriptor?: string 711 postContext: 'feed' | 'thread' 712 position?: number 713 } 714 'share:press:copyLink': {} 715 'share:press:nativeShare': {} 716 'share:press:openDmSearch': {} 717 'share:press:dmSelected': {} 718 'share:press:recentDm': {} 719 'share:press:embed': {} 720 721 'thread:click:showOtherReplies': {} 722 'thread:click:hideReplyForMe': {} 723 'thread:click:hideReplyForEveryone': {} 724 'thread:preferences:load': { 725 [key: string]: any 726 } 727 'thread:preferences:update': { 728 [key: string]: any 729 } 730 'thread:click:headerMenuOpen': {} 731 'thread:click:editOwnThreadgate': {} 732 'thread:click:viewSomeoneElsesThreadgate': {} 733 'activitySubscription:enable': { 734 setting: 'posts' | 'posts_and_replies' 735 } 736 'activitySubscription:disable': {} 737 'activityPreference:changeChannels': { 738 name: string 739 push: boolean 740 list: boolean 741 } 742 'activityPreference:changeFilter': { 743 name: string 744 value: string 745 } 746 747 'ageAssurance:navigateToSettings': {} 748 'ageAssurance:dismissFeedBanner': {} 749 'ageAssurance:dismissSettingsNotice': {} 750 'ageAssurance:initDialogOpen': { 751 hasInitiatedPreviously: boolean 752 } 753 'ageAssurance:initDialogSubmit': {} 754 'ageAssurance:api:begin': { 755 platform: string 756 countryCode: string 757 regionCode?: string 758 } 759 'ageAssurance:initDialogError': { 760 code: string 761 } 762 'ageAssurance:redirectDialogOpen': {} 763 'ageAssurance:redirectDialogSuccess': {} 764 'ageAssurance:redirectDialogFail': {} 765 'ageAssurance:appealDialogOpen': {} 766 'ageAssurance:appealDialogSubmit': {} 767 'ageAssurance:noAccessScreen:shown': { 768 accountCreatedAt: string 769 isAARegion: boolean 770 hasDeclaredAge: boolean 771 canUpdateBirthday: boolean 772 } 773 'ageAssurance:noAccessScreen:openBirthdateDialog': {} 774 775 /* 776 * Specifically for the `BlockedGeoOverlay` 777 */ 778 'blockedGeoOverlay:shown': {} 779 780 'geo:debug': {} 781 782 /* 783 * Find Contacts stuff 784 */ 785 786 // user presses the button on the new feature NUX 787 'contacts:nux:ctaPressed': {} 788 // user presses the banner NUX 789 'contacts:nux:bannerPressed': {} 790 // user dismisses the banner 791 'contacts:nux:bannerDismissed': {} 792 793 // user lands on the contacts step 794 'onboarding:contacts:presented': {} 795 // user pressed "Import Contacts" button to begin flow 796 'onboarding:contacts:begin': {} 797 // skips the step entirely 798 'onboarding:contacts:skipPressed': {} 799 // user shared their contacts 800 'onboarding:contacts:contactsShared': {} 801 // user leaves the matches page 802 'onboarding:contacts:nextPressed': { 803 matchCount: number 804 followCount: number 805 dismissedMatchCount: number 806 } 807 808 // user entered a number 809 'contacts:phone:phoneEntered': { 810 entryPoint: 'Onboarding' | 'Standalone' 811 } 812 // user entered the correct one-time-code 813 'contacts:phone:phoneVerified': { 814 entryPoint: 'Onboarding' | 'Standalone' 815 } 816 // user responded to the contacts permission prompt 817 'contacts:permission:request': { 818 status: 'granted' | 'denied' 819 accessLevelIOS?: 'all' | 'limited' | 'none' 820 } 821 // contacts were successfully imported and matched 822 'contacts:import:success': { 823 contactCount: number 824 matchCount: number 825 entryPoint: 'Onboarding' | 'Standalone' 826 } 827 // contacts import failed 828 'contacts:import:failure': { 829 reason: 'noValidNumbers' | 'networkError' | 'unknown' 830 entryPoint: 'Onboarding' | 'Standalone' 831 } 832 // user followed a single match 833 'contacts:matches:follow': { 834 entryPoint: 'Onboarding' | 'Standalone' 835 } 836 // user pressed "Follow All" on matches 837 'contacts:matches:followAll': { 838 followCount: number 839 entryPoint: 'Onboarding' | 'Standalone' 840 } 841 // user dismissed a match 842 'contacts:matches:dismiss': { 843 entryPoint: 'Onboarding' | 'Standalone' 844 } 845 // user pressed invite to send an SMS to a non-match 846 'contacts:matches:invite': { 847 entryPoint: 'Onboarding' | 'Standalone' 848 } 849 // user opened the Find Contacts settings screen 850 'contacts:settings:presented': { 851 hasPreviouslySynced: boolean 852 matchCount?: number 853 } 854 // user followed a single match from settings 855 'contacts:settings:follow': {} 856 // user pressed "Follow All" from settings 857 'contacts:settings:followAll': { 858 followCount: number 859 } 860 // user dismissed a match from settings 861 'contacts:settings:dismiss': {} 862 // user re-entered the flow via the resync button 863 'contacts:settings:resync': { 864 daysSinceLastSync: number 865 } 866 // user pressed the remove all data button 867 'contacts:settings:removeData': {} 868 869 'liveEvents:feedBanner:seen': { 870 feed: string 871 context: LiveEventFeedMetricContext 872 } 873 'liveEvents:feedBanner:click': { 874 feed: string 875 context: LiveEventFeedMetricContext 876 } 877 'liveEvents:feedBanner:hide': { 878 feed: string 879 context: LiveEventFeedMetricContext 880 } 881 'liveEvents:feedBanner:unhide': { 882 feed: string 883 context: LiveEventFeedMetricContext 884 } 885 'liveEvents:hideAllFeedBanners': { 886 context: LiveEventFeedMetricContext 887 } 888 'liveEvents:unhideAllFeedBanners': { 889 context: LiveEventFeedMetricContext 890 } 891 892 'profile:associated:germ:click-to-chat': {} 893 'profile:associated:germ:click-self-info': {} 894 'profile:associated:germ:self-disconnect': {} 895 'profile:associated:germ:self-reconnect': {} 896}