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

Configure Feed

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

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