SYMBOL INDEX (96 symbols across 29 files) FILE: api/exchange-token.ts function exchangeAccessToken (line 4) | async function exchangeAccessToken(req: VercelRequest, res: VercelRespon... FILE: functions/exchange-token.js function onRequest (line 1) | async function onRequest(context) { function handleTokenExchange (line 12) | async function handleTokenExchange(context) { FILE: server/server.ts constant PORT (line 10) | const PORT = process.env.VITE_PORT || 5173; constant DIST_DIR (line 18) | const DIST_DIR = path.join(__dirname, '../dist'); constant INDEX_FILE (line 19) | const INDEX_FILE = path.join(DIST_DIR, 'index.html'); function getLocalIpAddress (line 91) | function getLocalIpAddress() { FILE: src/App.tsx function App (line 34) | function App() { function TrackPageViews (line 82) | function TrackPageViews() { FILE: src/client/ApolloClient.tsx function login (line 51) | function login() { function logout (line 64) | function logout() { function handleAuthUpdate (line 72) | function handleAuthUpdate() { FILE: src/client/authService.ts constant GET_USER_ANIME_LIST (line 105) | const GET_USER_ANIME_LIST = gql` FILE: src/client/useAuth.tsx type AuthContextType (line 12) | type AuthContextType = { FILE: src/client/userInfoTypes.ts type UserStatisticsSort (line 2) | type UserStatisticsSort = type UserData (line 7) | interface UserData { type MediaListStatus (line 15) | enum MediaListStatus { type UserStatistics (line 24) | interface UserStatistics { type AnimeMangaStatistics (line 29) | interface AnimeMangaStatistics { type StatisticLimitSort (line 51) | interface StatisticLimitSort { type UserFormatStatistic (line 56) | interface UserFormatStatistic { type UserStatusStatistic (line 61) | interface UserStatusStatistic { type UserScoreStatistic (line 66) | interface UserScoreStatistic { type UserLengthStatistic (line 71) | interface UserLengthStatistic { type UserReleaseYearStatistic (line 76) | interface UserReleaseYearStatistic { type UserStartYearStatistic (line 81) | interface UserStartYearStatistic { type UserGenreStatistic (line 86) | interface UserGenreStatistic { type UserTagStatistic (line 91) | interface UserTagStatistic { type UserCountryStatistic (line 96) | interface UserCountryStatistic { type UserVoiceActorStatistic (line 101) | interface UserVoiceActorStatistic { type UserStaffStatistic (line 108) | interface UserStaffStatistic { type UserStudioStatistic (line 115) | interface UserStudioStatistic { FILE: src/components/Cards/CardGrid.tsx type CardGridProps (line 5) | interface CardGridProps { FILE: src/components/Home/EpisodeCard.tsx constant LOCAL_STORAGE_KEYS (line 10) | const LOCAL_STORAGE_KEYS = { type LastEpisodes (line 15) | interface LastEpisodes { type LastVisitedData (line 19) | interface LastVisitedData { FILE: src/components/Home/HomeCarousel.tsx type HomeCarouselProps (line 221) | interface HomeCarouselProps { FILE: src/components/Navigation/DropSearch.tsx type Props (line 122) | interface Props { FILE: src/components/Navigation/Footer.tsx function Footer (line 108) | function Footer() { FILE: src/components/Navigation/Navbar.tsx function handleResize (line 436) | function handleResize() { FILE: src/components/Navigation/SearchFilters.tsx type StateProps (line 25) | interface StateProps { FILE: src/components/Profile/Settings.tsx type Preferences (line 6) | interface Preferences { FILE: src/components/Profile/SettingsProvider.tsx type SettingsContextType (line 10) | interface SettingsContextType { function useSettings (line 26) | function useSettings() { type SettingsProviderProps (line 34) | interface SettingsProviderProps { FILE: src/components/ThemeContext.tsx type ThemeContextType (line 9) | type ThemeContextType = { type ThemeProviderProps (line 18) | type ThemeProviderProps = { FILE: src/components/Watch/EpisodeList.tsx type Props (line 19) | interface Props { FILE: src/components/Watch/Video/MediaSource.tsx type MediaSourceProps (line 12) | interface MediaSourceProps { FILE: src/components/Watch/Video/Player.tsx type PlayerProps (line 58) | type PlayerProps = { type StreamingSource (line 69) | type StreamingSource = { type SkipTime (line 74) | type SkipTime = { type FetchSkipTimesResponse (line 82) | type FetchSkipTimesResponse = { function Player (line 86) | function Player({ FILE: src/components/Watch/WatchAnimeData.tsx function capitalizeFirstLetter (line 305) | function capitalizeFirstLetter(str: string) { FILE: src/hooks/animeInterface.ts type Title (line 1) | interface Title { type Trailer (line 8) | interface Trailer { type VoiceActor (line 15) | interface VoiceActor { type Recommendation (line 23) | interface Recommendation { type Character (line 37) | interface Character { type Relation (line 46) | interface Relation { type Mapping (line 61) | interface Mapping { type Artwork (line 68) | interface Artwork { type Episode (line 74) | interface Episode { type Anime (line 84) | interface Anime { type Paging (line 129) | interface Paging { FILE: src/hooks/useApi.ts function ensureUrlEndsWithSlash (line 5) | function ensureUrlEndsWithSlash(url: string): string { constant BASE_URL (line 10) | const BASE_URL = ensureUrlEndsWithSlash( constant SKIP_TIMES (line 13) | const SKIP_TIMES = ensureUrlEndsWithSlash( constant PROXY_URL (line 16) | let PROXY_URL = import.meta.env.VITE_PROXY_URL; constant API_KEY (line 22) | const API_KEY = import.meta.env.VITE_API_KEY as string; function handleError (line 35) | function handleError(error: any, context: string) { function generateCacheKey (line 73) | function generateCacheKey(...args: string[]) { type CacheItem (line 77) | interface CacheItem { function createOptimizedSessionStorageCache (line 84) | function createOptimizedSessionStorageCache( constant CACHE_SIZE (line 134) | const CACHE_SIZE = 20; constant CACHE_MAX_AGE (line 135) | const CACHE_MAX_AGE = 24 * 60 * 60 * 1000; function createCache (line 139) | function createCache(cacheKey: string) { type FetchOptions (line 147) | interface FetchOptions { function fetchFromProxy (line 169) | async function fetchFromProxy(url: string, cache: any, cacheKey: string) { function fetchAdvancedSearch (line 208) | async function fetchAdvancedSearch( function fetchAnimeData (line 238) | async function fetchAnimeData( function fetchAnimeInfo (line 250) | async function fetchAnimeInfo( function fetchList (line 262) | async function fetchList( function fetchAnimeEpisodes (line 345) | async function fetchAnimeEpisodes( function fetchAnimeEmbeddedEpisodes (line 363) | async function fetchAnimeEmbeddedEpisodes(episodeId: string) { function fetchAnimeStreamingLinks (line 371) | async function fetchAnimeStreamingLinks(episodeId: string) { type FetchSkipTimesParams (line 379) | interface FetchSkipTimesParams { function fetchSkipTimes (line 386) | async function fetchSkipTimes({ function fetchRecentEpisodes (line 409) | async function fetchRecentEpisodes( FILE: src/hooks/useFilters.ts type Option (line 3) | interface Option { type FilterProps (line 8) | interface FilterProps { FILE: src/hooks/useScroll.ts function ScrollToTop (line 4) | function ScrollToTop() { FILE: src/pages/About.tsx function About (line 119) | function About() { FILE: src/pages/PolicyTerms.tsx function PolicyTerms (line 128) | function PolicyTerms() { FILE: src/pages/Watch.tsx constant LOCAL_STORAGE_KEYS (line 143) | const LOCAL_STORAGE_KEYS = {