SYMBOL INDEX (69 symbols across 22 files) FILE: build.mjs function deleteOldDir (line 14) | async function deleteOldDir() { function runEsbuild (line 18) | async function runEsbuild() { function zipFolder (line 51) | async function zipFolder(dir) { function copyFiles (line 61) | async function copyFiles(entryPoints, targetDir) { function build (line 70) | async function build() { FILE: src/analytics.ts function captureEvent (line 1) | function captureEvent(event: string, properties?: object) { FILE: src/api.ts constant API_HOST (line 3) | const API_HOST = 'https://chatgpt4google.com' type PromotionResponse (line 6) | interface PromotionResponse { function fetchPromotion (line 15) | async function fetchPromotion(): Promise { function fetchExtensionConfigs (line 23) | async function fetchExtensionConfigs(): Promise<{ FILE: src/background/fetch-sse.ts function fetchSSE (line 5) | async function fetchSSE( FILE: src/background/index.ts function generateAnswers (line 7) | async function generateAnswers(port: Browser.Runtime.Port, question: str... FILE: src/background/providers/chatgpt.ts function request (line 6) | async function request(token: string, method: string, path: string, data... function sendMessageFeedback (line 17) | async function sendMessageFeedback(token: string, data: unknown) { function setConversationProperty (line 21) | async function setConversationProperty( constant KEY_ACCESS_TOKEN (line 29) | const KEY_ACCESS_TOKEN = 'accessToken' function getChatGPTAccessToken (line 33) | async function getChatGPTAccessToken(): Promise { class ChatGPTProvider (line 49) | class ChatGPTProvider implements Provider { method constructor (line 50) | constructor(private token: string) { method fetchModels (line 54) | private async fetchModels(): Promise< method getModelName (line 61) | private async getModelName(): Promise { method generateAnswer (line 71) | async generateAnswer(params: GenerateAnswerParams) { FILE: src/background/providers/openai.ts class OpenAIProvider (line 4) | class OpenAIProvider implements Provider { method constructor (line 5) | constructor(private token: string, private model: string) { method buildPrompt (line 10) | private buildPrompt(prompt: string): string { method generateAnswer (line 17) | async generateAnswer(params: GenerateAnswerParams) { FILE: src/background/types.ts type Event (line 3) | type Event = type GenerateAnswerParams (line 12) | interface GenerateAnswerParams { type Provider (line 18) | interface Provider { FILE: src/config.ts type TriggerMode (line 4) | enum TriggerMode { constant TRIGGER_MODE_TEXT (line 10) | const TRIGGER_MODE_TEXT = { type Theme (line 22) | enum Theme { type Language (line 28) | enum Language { type UserConfig (line 46) | type UserConfig = typeof userConfigWithDefaultValue function getUserConfig (line 48) | async function getUserConfig(): Promise { function updateUserConfig (line 53) | async function updateUserConfig(updates: Partial) { type ProviderType (line 58) | enum ProviderType { type GPT3ProviderConfig (line 63) | interface GPT3ProviderConfig { type ProviderConfigs (line 68) | interface ProviderConfigs { function getProviderConfigs (line 75) | async function getProviderConfigs(): Promise { function saveProviderConfigs (line 87) | async function saveProviderConfigs( FILE: src/content-script/ChatGPTCard.tsx type Props (line 7) | interface Props { function ChatGPTCard (line 13) | function ChatGPTCard(props: Props) { FILE: src/content-script/ChatGPTContainer.tsx type Props (line 9) | interface Props { function ChatGPTContainer (line 14) | function ChatGPTContainer(props: Props) { FILE: src/content-script/ChatGPTFeedback.tsx type Props (line 6) | interface Props { function ChatGPTFeedback (line 12) | function ChatGPTFeedback(props: Props) { FILE: src/content-script/ChatGPTQuery.tsx type QueryStatus (line 12) | type QueryStatus = 'success' | 'error' | undefined type Props (line 14) | interface Props { function ChatGPTQuery (line 19) | function ChatGPTQuery(props: Props) { FILE: src/content-script/Promotion.tsx type Props (line 5) | interface Props { function Promotion (line 9) | function Promotion({ data }: Props) { FILE: src/content-script/index.tsx function mount (line 10) | async function mount(question: string, siteConfig: SearchEngine) { function run (line 48) | async function run() { FILE: src/content-script/search-engine-configs.ts type SearchEngine (line 1) | interface SearchEngine { method watchRouteChange (line 33) | watchRouteChange(callback) { FILE: src/content-script/utils.ts function getPossibleElementByQuerySelector (line 3) | function getPossibleElementByQuerySelector( function endsWithQuestionMark (line 14) | function endsWithQuestionMark(question: string) { function isBraveBrowser (line 23) | function isBraveBrowser() { function shouldShowRatingTip (line 27) | async function shouldShowRatingTip() { FILE: src/messaging.ts type Answer (line 1) | interface Answer { FILE: src/options/App.tsx function OptionsPage (line 17) | function OptionsPage(props: { theme: Theme; onThemeChange: (theme: Theme... function App (line 151) | function App() { FILE: src/options/ProviderSelect.tsx type ConfigProps (line 7) | interface ConfigProps { function loadModels (line 12) | async function loadModels(): Promise { function ProviderSelect (line 90) | function ProviderSelect() { FILE: src/popup/App.tsx function App (line 10) | function App() { FILE: src/utils.ts function detectSystemColorScheme (line 4) | function detectSystemColorScheme() { function getExtensionVersion (line 11) | function getExtensionVersion() {