Bluesky app fork with some witchin' additions 馃挮
at readme-update 832 lines 21 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 237 // Data events 238 'account:create:begin': {} 239 'account:create:success': { 240 signupDuration: number 241 fieldErrorsTotal: number 242 backgroundCount: number 243 } 244 'post:create': { 245 imageCount: number 246 isReply: boolean 247 isPartOfThread: boolean 248 hasLink: boolean 249 hasQuote: boolean 250 langs: string 251 logContext: 'Composer' 252 } 253 'thread:create': { 254 postCount: number 255 isReply: boolean 256 } 257 'post:like': { 258 uri: string 259 authorDid: string 260 doesLikerFollowPoster: boolean | undefined 261 doesPosterFollowLiker: boolean | undefined 262 likerClout: number | undefined 263 postClout: number | undefined 264 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo' 265 feedDescriptor?: string 266 } 267 'post:repost': { 268 uri: string 269 authorDid: string 270 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo' 271 feedDescriptor?: string 272 } 273 'post:unlike': { 274 uri: string 275 authorDid: string 276 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo' 277 feedDescriptor?: string 278 } 279 'post:unrepost': { 280 uri: string 281 authorDid: string 282 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo' 283 feedDescriptor?: string 284 } 285 'post:mute': { 286 uri: string 287 authorDid: string 288 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo' 289 feedDescriptor?: string 290 position?: number 291 } 292 'post:unmute': { 293 uri: string 294 authorDid: string 295 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo' 296 feedDescriptor?: string 297 position?: number 298 } 299 'post:pin': {} 300 'post:unpin': {} 301 'post:bookmark': { 302 uri: string 303 authorDid: string 304 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo' 305 feedDescriptor?: string 306 position?: number 307 } 308 'post:unbookmark': { 309 uri: string 310 authorDid: string 311 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo' 312 feedDescriptor?: string 313 position?: number 314 } 315 'post:clickReply': { 316 uri: string 317 authorDid: string 318 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo' 319 feedDescriptor?: string 320 position?: number 321 } 322 'post:clickQuotePost': { 323 uri: string 324 authorDid: string 325 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo' 326 feedDescriptor?: string 327 position?: number 328 } 329 'post:clickthroughAuthor': { 330 uri: string 331 authorDid: string 332 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo' 333 feedDescriptor?: string 334 position?: number 335 } 336 'post:clickthroughItem': { 337 uri: string 338 authorDid: string 339 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo' 340 feedDescriptor?: string 341 position?: number 342 } 343 'post:clickthroughEmbed': { 344 uri: string 345 authorDid: string 346 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo' 347 feedDescriptor?: string 348 position?: number 349 } 350 'post:view': { 351 uri: string 352 authorDid: string 353 logContext: 354 | 'FeedItem' 355 | 'PostThreadItem' 356 | 'Post' 357 | 'ImmersiveVideo' 358 | 'SearchResults' 359 | 'Bookmarks' 360 | 'Notifications' 361 | 'Hashtag' 362 | 'Topic' 363 | 'PostQuotes' 364 feedDescriptor?: string 365 position?: number 366 } 367 'bookmarks:view': {} 368 'bookmarks:post-clicked': {} 369 'profile:follow': { 370 contextProfileDid?: string 371 didBecomeMutual: boolean | undefined 372 followeeClout: number | undefined 373 followeeDid: string 374 followerClout: number | undefined 375 position?: number 376 logContext: 377 | 'RecommendedFollowsItem' 378 | 'PostThreadItem' 379 | 'ProfileCard' 380 | 'ProfileHeader' 381 | 'ProfileHeaderSuggestedFollows' 382 | 'ProfileMenu' 383 | 'ProfileHoverCard' 384 | 'AvatarButton' 385 | 'StarterPackProfilesList' 386 | 'FeedInterstitial' 387 | 'PostOnboardingFindFollows' 388 | 'ImmersiveVideo' 389 | 'ExploreSuggestedAccounts' 390 | 'OnboardingSuggestedAccounts' 391 | 'FindContacts' 392 } 393 'profile:followers:view': { 394 contextProfileDid: string 395 isOwnProfile: boolean 396 } 397 'profile:followers:paginate': { 398 contextProfileDid: string 399 itemCount: number 400 page: number 401 } 402 'profile:following:view': { 403 contextProfileDid: string 404 isOwnProfile: boolean 405 } 406 'profile:following:paginate': { 407 contextProfileDid: string 408 itemCount: number 409 page: number 410 } 411 'profileCard:seen': { 412 contextProfileDid?: string 413 profileDid: string 414 position?: number 415 } 416 'suggestedUser:follow': { 417 logContext: 418 | 'Explore' 419 | 'InterstitialDiscover' 420 | 'InterstitialProfile' 421 | 'Profile' 422 | 'Onboarding' 423 location: 'Card' | 'Profile' 424 recId?: number 425 position: number 426 suggestedDid: string 427 category: string | null 428 } 429 'suggestedUser:press': { 430 logContext: 431 | 'Explore' 432 | 'InterstitialDiscover' 433 | 'InterstitialProfile' 434 | 'Onboarding' 435 recId?: number 436 position: number 437 suggestedDid: string 438 category: string | null 439 } 440 'suggestedUser:seen': { 441 logContext: 442 | 'Explore' 443 | 'InterstitialDiscover' 444 | 'InterstitialProfile' 445 | 'Profile' 446 | 'Onboarding' 447 | 'ProgressGuide' 448 recId?: number 449 position: number 450 suggestedDid: string 451 category: string | null 452 } 453 'suggestedUser:seeMore': { 454 logContext: 455 | 'Explore' 456 | 'InterstitialDiscover' 457 | 'InterstitialProfile' 458 | 'Profile' 459 | 'Onboarding' 460 } 461 'suggestedUser:dismiss': { 462 logContext: 'InterstitialDiscover' | 'InterstitialProfile' 463 recId?: number 464 position: number 465 suggestedDid: string 466 } 467 'profile:unfollow': { 468 logContext: 469 | 'RecommendedFollowsItem' 470 | 'PostThreadItem' 471 | 'ProfileCard' 472 | 'ProfileHeader' 473 | 'ProfileHeaderSuggestedFollows' 474 | 'ProfileMenu' 475 | 'ProfileHoverCard' 476 | 'Chat' 477 | 'AvatarButton' 478 | 'StarterPackProfilesList' 479 | 'FeedInterstitial' 480 | 'PostOnboardingFindFollows' 481 | 'ImmersiveVideo' 482 | 'ExploreSuggestedAccounts' 483 | 'OnboardingSuggestedAccounts' 484 | 'FindContacts' 485 } 486 'chat:create': { 487 logContext: 'ProfileHeader' | 'NewChatDialog' | 'SendViaChatDialog' 488 } 489 'chat:open': { 490 logContext: 491 | 'ProfileHeader' 492 | 'NewChatDialog' 493 | 'ChatsList' 494 | 'SendViaChatDialog' 495 } 496 'starterPack:addUser': { 497 starterPack?: string 498 } 499 'starterPack:removeUser': { 500 starterPack?: string 501 } 502 'starterPack:share': { 503 starterPack: string 504 shareType: 'link' | 'qrcode' 505 qrShareType?: 'save' | 'copy' | 'share' 506 } 507 'starterPack:followAll': { 508 logContext: 'StarterPackProfilesList' | 'Onboarding' 509 starterPack: string 510 count: number 511 } 512 'starterPack:delete': {} 513 'starterPack:create': { 514 setName: boolean 515 setDescription: boolean 516 profilesCount: number 517 feedsCount: number 518 } 519 'starterPack:ctaPress': { 520 starterPack: string 521 } 522 'starterPack:opened': { 523 starterPack: string 524 } 525 'link:clicked': { 526 url: string 527 domain: string 528 } 529 530 'feed:interstitial:feedCard:press': {} 531 'desktopFeeds:feed:click': { 532 feedUri: string 533 feedDescriptor: string 534 } 535 536 'profile:header:suggestedFollowsCard:press': {} 537 'profile:addToStarterPack': {} 538 539 'test:all:always': {} 540 'test:all:sometimes': {} 541 'test:all:boosted_by_gate1': {reason: 'base' | 'gate1'} 542 'test:all:boosted_by_gate2': {reason: 'base' | 'gate2'} 543 'test:all:boosted_by_both': {reason: 'base' | 'gate1' | 'gate2'} 544 'test:gate1:always': {} 545 'test:gate1:sometimes': {} 546 'test:gate2:always': {} 547 'test:gate2:sometimes': {} 548 549 'tmd:share': {} 550 'tmd:download': {} 551 'tmd:post': {} 552 553 'trendingTopics:show': { 554 context: 'settings' 555 } 556 'trendingTopics:hide': { 557 context: 'settings' | 'sidebar' | 'interstitial' | 'explore:trending' 558 } 559 'trendingTopic:click': { 560 context: 'sidebar' | 'interstitial' | 'explore' 561 } 562 'recommendedTopic:click': { 563 context: 'explore' 564 } 565 'trendingVideos:show': { 566 context: 'settings' 567 } 568 'trendingVideos:hide': { 569 context: 'settings' | 'interstitial:discover' | 'interstitial:explore' 570 } 571 'videoCard:click': { 572 context: 'interstitial:discover' | 'interstitial:explore' | 'feed' 573 } 574 575 'explore:module:seen': { 576 module: 577 | 'trendingTopics' 578 | 'trendingVideos' 579 | 'suggestedAccounts' 580 | 'suggestedFeeds' 581 | 'suggestedStarterPacks' 582 | `feed:${FeedDescriptor}` 583 } 584 'explore:module:searchButtonPress': { 585 module: 'suggestedAccounts' | 'suggestedFeeds' 586 } 587 'explore:suggestedAccounts:tabPressed': { 588 tab: string 589 } 590 591 'progressGuide:hide': {} 592 'progressGuide:followDialog:open': {} 593 594 'moderation:subscribedToLabeler': {} 595 'moderation:unsubscribedFromLabeler': {} 596 'moderation:changeLabelPreference': { 597 preference: string 598 } 599 600 'moderation:subscribedToList': { 601 listType: 'mute' | 'block' 602 } 603 'moderation:unsubscribedFromList': { 604 listType: 'mute' | 'block' 605 } 606 607 'reportDialog:open': { 608 subjectType: string 609 } 610 'reportDialog:close': {} 611 'reportDialog:success': { 612 reason: string 613 labeler: string 614 details: boolean 615 } 616 'reportDialog:failure': {} 617 618 translate: { 619 sourceLanguages: string[] 620 targetLanguage: string 621 textLength: number 622 } 623 624 'verification:create': {} 625 'verification:revoke': {} 626 'verification:badge:click': {} 627 'verification:learn-more': { 628 location: 629 | 'initialAnnouncementeNux' 630 | 'verificationsDialog' 631 | 'verifierDialog' 632 | 'verificationSettings' 633 } 634 'verification:settings:hideBadges': {} 635 'verification:settings:unHideBadges': {} 636 637 'live:create': {duration: number} 638 'live:edit': {} 639 'live:remove': {} 640 'live:card:open': {subject: string; from: 'post' | 'profile'} 641 'live:card:watch': {subject: string} 642 'live:card:openProfile': {subject: string} 643 'live:card:viewAvatar': {subject: string} 644 'live:view:profile': {subject: string} 645 'live:view:post': {subject: string; feed?: string} 646 647 'post:share': { 648 uri: string 649 authorDid: string 650 logContext: 'FeedItem' | 'PostThreadItem' | 'Post' | 'ImmersiveVideo' 651 feedDescriptor?: string 652 postContext: 'feed' | 'thread' 653 position?: number 654 } 655 'share:press:copyLink': {} 656 'share:press:nativeShare': {} 657 'share:press:openDmSearch': {} 658 'share:press:dmSelected': {} 659 'share:press:recentDm': {} 660 'share:press:embed': {} 661 662 'thread:click:showOtherReplies': {} 663 'thread:click:hideReplyForMe': {} 664 'thread:click:hideReplyForEveryone': {} 665 'thread:preferences:load': { 666 [key: string]: any 667 } 668 'thread:preferences:update': { 669 [key: string]: any 670 } 671 'thread:click:headerMenuOpen': {} 672 'thread:click:editOwnThreadgate': {} 673 'thread:click:viewSomeoneElsesThreadgate': {} 674 'activitySubscription:enable': { 675 setting: 'posts' | 'posts_and_replies' 676 } 677 'activitySubscription:disable': {} 678 'activityPreference:changeChannels': { 679 name: string 680 push: boolean 681 list: boolean 682 } 683 'activityPreference:changeFilter': { 684 name: string 685 value: string 686 } 687 688 'ageAssurance:navigateToSettings': {} 689 'ageAssurance:dismissFeedBanner': {} 690 'ageAssurance:dismissSettingsNotice': {} 691 'ageAssurance:initDialogOpen': { 692 hasInitiatedPreviously: boolean 693 } 694 'ageAssurance:initDialogSubmit': {} 695 'ageAssurance:api:begin': { 696 platform: string 697 countryCode: string 698 regionCode?: string 699 } 700 'ageAssurance:initDialogError': { 701 code: string 702 } 703 'ageAssurance:redirectDialogOpen': {} 704 'ageAssurance:redirectDialogSuccess': {} 705 'ageAssurance:redirectDialogFail': {} 706 'ageAssurance:appealDialogOpen': {} 707 'ageAssurance:appealDialogSubmit': {} 708 'ageAssurance:noAccessScreen:shown': { 709 accountCreatedAt: string 710 isAARegion: boolean 711 hasDeclaredAge: boolean 712 canUpdateBirthday: boolean 713 } 714 'ageAssurance:noAccessScreen:openBirthdateDialog': {} 715 716 /* 717 * Specifically for the `BlockedGeoOverlay` 718 */ 719 'blockedGeoOverlay:shown': {} 720 721 'geo:debug': {} 722 723 /* 724 * Find Contacts stuff 725 */ 726 727 // user presses the button on the new feature NUX 728 'contacts:nux:ctaPressed': {} 729 // user presses the banner NUX 730 'contacts:nux:bannerPressed': {} 731 // user dismisses the banner 732 'contacts:nux:bannerDismissed': {} 733 734 // user lands on the contacts step 735 'onboarding:contacts:presented': {} 736 // user pressed "Import Contacts" button to begin flow 737 'onboarding:contacts:begin': {} 738 // skips the step entirely 739 'onboarding:contacts:skipPressed': {} 740 // user shared their contacts 741 'onboarding:contacts:contactsShared': {} 742 // user leaves the matches page 743 'onboarding:contacts:nextPressed': { 744 matchCount: number 745 followCount: number 746 dismissedMatchCount: number 747 } 748 749 // user entered a number 750 'contacts:phone:phoneEntered': { 751 entryPoint: 'Onboarding' | 'Standalone' 752 } 753 // user entered the correct one-time-code 754 'contacts:phone:phoneVerified': { 755 entryPoint: 'Onboarding' | 'Standalone' 756 } 757 // user responded to the contacts permission prompt 758 'contacts:permission:request': { 759 status: 'granted' | 'denied' 760 accessLevelIOS?: 'all' | 'limited' | 'none' 761 } 762 // contacts were successfully imported and matched 763 'contacts:import:success': { 764 contactCount: number 765 matchCount: number 766 entryPoint: 'Onboarding' | 'Standalone' 767 } 768 // contacts import failed 769 'contacts:import:failure': { 770 reason: 'noValidNumbers' | 'networkError' | 'unknown' 771 entryPoint: 'Onboarding' | 'Standalone' 772 } 773 // user followed a single match 774 'contacts:matches:follow': { 775 entryPoint: 'Onboarding' | 'Standalone' 776 } 777 // user pressed "Follow All" on matches 778 'contacts:matches:followAll': { 779 followCount: number 780 entryPoint: 'Onboarding' | 'Standalone' 781 } 782 // user dismissed a match 783 'contacts:matches:dismiss': { 784 entryPoint: 'Onboarding' | 'Standalone' 785 } 786 // user pressed invite to send an SMS to a non-match 787 'contacts:matches:invite': { 788 entryPoint: 'Onboarding' | 'Standalone' 789 } 790 // user opened the Find Contacts settings screen 791 'contacts:settings:presented': { 792 hasPreviouslySynced: boolean 793 matchCount?: number 794 } 795 // user followed a single match from settings 796 'contacts:settings:follow': {} 797 // user pressed "Follow All" from settings 798 'contacts:settings:followAll': { 799 followCount: number 800 } 801 // user dismissed a match from settings 802 'contacts:settings:dismiss': {} 803 // user re-entered the flow via the resync button 804 'contacts:settings:resync': { 805 daysSinceLastSync: number 806 } 807 // user pressed the remove all data button 808 'contacts:settings:removeData': {} 809 810 'liveEvents:feedBanner:seen': { 811 feed: string 812 context: LiveEventFeedMetricContext 813 } 814 'liveEvents:feedBanner:click': { 815 feed: string 816 context: LiveEventFeedMetricContext 817 } 818 'liveEvents:feedBanner:hide': { 819 feed: string 820 context: LiveEventFeedMetricContext 821 } 822 'liveEvents:feedBanner:unhide': { 823 feed: string 824 context: LiveEventFeedMetricContext 825 } 826 'liveEvents:hideAllFeedBanners': { 827 context: LiveEventFeedMetricContext 828 } 829 'liveEvents:unhideAllFeedBanners': { 830 context: LiveEventFeedMetricContext 831 } 832}