SYMBOL INDEX (142 symbols across 59 files) FILE: public/sw.js function createStream (line 55) | function createStream(port) { FILE: src/app/api/create/route.ts function POST (line 4) | async function POST(request: Request): Promise { FILE: src/app/api/destroy/route.ts function POST (line 4) | async function POST(request: NextRequest): Promise { FILE: src/app/api/ice/route.ts function POST (line 10) | async function POST(): Promise { FILE: src/app/api/renew/route.ts function POST (line 4) | async function POST(request: NextRequest): Promise { FILE: src/app/download/[...slug]/page.tsx function DownloadPage (line 18) | async function DownloadPage({ FILE: src/app/layout.tsx function RootLayout (line 29) | function RootLayout({ FILE: src/app/not-found.tsx function NotFound (line 12) | async function NotFound(): Promise { FILE: src/app/page.tsx function PageWrapper (line 22) | function PageWrapper({ children }: { children: React.ReactNode }): JSX.E... function InitialState (line 32) | function InitialState({ function useUploaderFileListData (line 48) | function useUploaderFileListData(uploadedFiles: UploadedFile[]) { function ConfirmUploadState (line 57) | function ConfirmUploadState({ function UploadingState (line 92) | function UploadingState({ function UploadPage (line 118) | function UploadPage(): JSX.Element { FILE: src/app/reported/page.tsx function ReportedPage (line 7) | function ReportedPage(): JSX.Element { FILE: src/channel.ts type Channel (line 8) | type Channel = { type ChannelRepo (line 22) | interface ChannelRepo { function getShortSlugKey (line 29) | function getShortSlugKey(shortSlug: string): string { function getLongSlugKey (line 33) | function getLongSlugKey(longSlug: string): string { function generateShortSlugUntilUnique (line 37) | async function generateShortSlugUntilUnique( function generateLongSlugUntilUnique (line 51) | async function generateLongSlugUntilUnique( function serializeChannel (line 65) | function serializeChannel(channel: Channel): string { function deserializeChannel (line 69) | function deserializeChannel(str: string, scrubSecret = false): Channel { type MemoryStoredChannel (line 78) | type MemoryStoredChannel = { class MemoryChannelRepo (line 83) | class MemoryChannelRepo implements ChannelRepo { method setChannelTimeout (line 87) | private setChannelTimeout(slug: string, ttl: number) { method createChannel (line 103) | async createChannel( method fetchChannel (line 136) | async fetchChannel( method renewChannel (line 159) | async renewChannel( method destroyChannel (line 184) | async destroyChannel(slug: string): Promise { class RedisChannelRepo (line 211) | class RedisChannelRepo implements ChannelRepo { method constructor (line 214) | constructor() { method createChannel (line 218) | async createChannel( method fetchChannel (line 243) | async fetchChannel( method renewChannel (line 260) | async renewChannel( method destroyChannel (line 276) | async destroyChannel(slug: string): Promise { function getOrCreateChannelRepo (line 289) | function getOrCreateChannelRepo(): ChannelRepo { FILE: src/components/AddFilesButton.tsx function AddFilesButton (line 4) | function AddFilesButton({ FILE: src/components/CancelButton.tsx function CancelButton (line 3) | function CancelButton({ FILE: src/components/ConnectionListItem.tsx function ConnectionListItem (line 5) | function ConnectionListItem({ FILE: src/components/CopyableInput.tsx function CopyableInput (line 5) | function CopyableInput({ FILE: src/components/DownloadButton.tsx function DownloadButton (line 3) | function DownloadButton({ FILE: src/components/Downloader.tsx type FileInfo (line 17) | interface FileInfo { function ConnectingToUploader (line 23) | function ConnectingToUploader({ function DownloadComplete (line 88) | function DownloadComplete({ function DownloadInProgress (line 113) | function DownloadInProgress({ function ReadyToDownload (line 142) | function ReadyToDownload({ function PasswordEntry (line 163) | function PasswordEntry({ function Downloader (line 205) | function Downloader({ FILE: src/components/DropZone.tsx function DropZone (line 4) | function DropZone({ FILE: src/components/ErrorMessage.tsx function ErrorMessage (line 3) | function ErrorMessage({ message }: { message: string }): JSX.Element { FILE: src/components/Footer.tsx constant DONATE_HREF (line 5) | const DONATE_HREF = function FooterLink (line 8) | function FooterLink({ function Footer (line 27) | function Footer(): JSX.Element { FILE: src/components/InputLabel.tsx function InputLabel (line 3) | function InputLabel({ FILE: src/components/Loading.tsx function Loading (line 3) | function Loading({ text }: { text: string }): JSX.Element { FILE: src/components/ModeToggle.tsx function LightModeIcon (line 5) | function LightModeIcon(): JSX.Element { function DarkModeIcon (line 24) | function DarkModeIcon(): JSX.Element { function ModeToggle (line 43) | function ModeToggle(): JSX.Element { FILE: src/components/PasswordField.tsx function PasswordField (line 4) | function PasswordField({ FILE: src/components/ProgressBar.tsx function ProgressBar (line 3) | function ProgressBar({ FILE: src/components/QueryClientProvider.tsx function FilePizzaQueryClientProvider (line 7) | function FilePizzaQueryClientProvider({ FILE: src/components/ReportTermsViolationButton.tsx function ReportTermsViolationButton (line 9) | function ReportTermsViolationButton({ FILE: src/components/ReturnHome.tsx function ReturnHome (line 4) | function ReturnHome(): JSX.Element { FILE: src/components/Spinner.tsx function Pizza (line 6) | function Pizza({ isRotating }: { isRotating?: boolean }): JSX.Element { function Arrow (line 1655) | function Arrow({ direction }: { direction: 'up' | 'down' }): JSX.Element { function Spinner (line 1684) | function Spinner({ FILE: src/components/StartButton.tsx function StartButton (line 3) | function StartButton({ FILE: src/components/StopButton.tsx function StopButton (line 3) | function StopButton({ FILE: src/components/SubtitleText.tsx function SubtitleText (line 3) | function SubtitleText({ FILE: src/components/TermsAcceptance.tsx function TermsAcceptance (line 6) | function TermsAcceptance(): JSX.Element { FILE: src/components/ThemeProvider.tsx type ThemeProviderProps (line 6) | type ThemeProviderProps = Parameters[0] FILE: src/components/TitleText.tsx function TitleText (line 3) | function TitleText({ FILE: src/components/TypeBadge.tsx function getTypeColor (line 3) | function getTypeColor(fileType: string): string { function TypeBadge (line 15) | function TypeBadge({ type }: { type: string }): JSX.Element { FILE: src/components/UnlockButton.tsx function UnlockButton (line 3) | function UnlockButton({ FILE: src/components/UploadFileList.tsx type UploadedFileLike (line 4) | type UploadedFileLike = { function UploadFileList (line 9) | function UploadFileList({ FILE: src/components/Uploader.tsx constant QR_CODE_SIZE (line 16) | const QR_CODE_SIZE = 128 function Uploader (line 18) | function Uploader({ FILE: src/components/WebRTCProvider.tsx type WebRTCPeerValue (line 15) | type WebRTCPeerValue = { function getOrCreateGlobalPeer (line 32) | async function getOrCreateGlobalPeer(): Promise { function WebRTCPeerProvider (line 68) | function WebRTCPeerProvider({ FILE: src/components/Wordmark.tsx function Wordmark (line 3) | function Wordmark(): JSX.Element { FILE: src/coturn.ts function generateHMACKey (line 4) | function generateHMACKey( function setTurnCredentials (line 13) | async function setTurnCredentials( FILE: src/hooks/useClipboard.ts function useClipboard (line 3) | function useClipboard( FILE: src/hooks/useDownloader.ts function useDownloader (line 26) | function useDownloader(uploaderPeerID: string): { FILE: src/hooks/useRotatingSpinner.ts type RotationListener (line 3) | type RotationListener = (isRotating: boolean) => void function setRotating (line 8) | function setRotating(rotating: boolean): void { function getRotating (line 13) | function getRotating(): boolean { function addRotationListener (line 17) | function addRotationListener(listener: RotationListener): void { function removeRotationListener (line 21) | function removeRotationListener(listener: RotationListener): void { function notifyListeners (line 25) | function notifyListeners(): void { function useRotatingSpinner (line 29) | function useRotatingSpinner(): boolean { FILE: src/hooks/useUploaderChannel.ts function generateURL (line 4) | function generateURL(slug: string): string { function useUploaderChannel (line 13) | function useUploaderChannel( FILE: src/hooks/useUploaderConnections.ts constant MAX_CHUNK_SIZE (line 19) | const MAX_CHUNK_SIZE = 256 * 1024 // 256 KB function isFinalChunk (line 21) | function isFinalChunk(offset: number, fileSize: number): boolean { function validateOffset (line 25) | function validateOffset( function useUploaderConnections (line 39) | function useUploaderConnections( FILE: src/messages.ts type MessageType (line 3) | enum MessageType { type Message (line 100) | type Message = z.infer function decodeMessage (line 102) | function decodeMessage(data: unknown): Message { FILE: src/redisClient.ts function getRedisClient (line 7) | function getRedisClient(): Redis { FILE: src/routes.ts type APIError (line 4) | type APIError = Error & { statusCode?: number } type BodyKey (line 6) | type BodyKey = keyof typeof config.bodyKeys function throwAPIError (line 8) | function throwAPIError(message: string, statusCode = 500): void { function routeHandler (line 14) | function routeHandler( function getBodyKey (line 35) | function getBodyKey(req: NextApiRequest, key: BodyKey): string { FILE: src/slugs.ts function generateRandomWords (line 12) | function generateRandomWords( FILE: src/types.ts type UploadedFile (line 3) | type UploadedFile = File & { entryFullPath?: string } type UploaderConnectionStatus (line 5) | enum UploaderConnectionStatus { type UploaderConnection (line 16) | type UploaderConnection = { FILE: src/utils/download.ts type DownloadFileStream (line 13) | type DownloadFileStream = { function streamDownloadSingleFile (line 19) | async function streamDownloadSingleFile( function streamDownloadMultipleFiles (line 37) | function streamDownloadMultipleFiles( FILE: src/utils/pluralize.ts function pluralize (line 1) | function pluralize( FILE: src/zip-stream.ts class Crc32 (line 9) | class Crc32 { method constructor (line 12) | constructor() { method append (line 31) | append(data) { method get (line 40) | get() { function createZipStream (line 63) | function createZipStream( FILE: tests/e2e/file-transfer.test.ts type TestCase (line 15) | interface TestCase { constant CHUNK_SIZE (line 22) | const CHUNK_SIZE = 256 * 1024 // 256 KB FILE: tests/e2e/helpers.ts type TestFile (line 7) | interface TestFile { function createTestFile (line 14) | function createTestFile(fileName: string, content: string): TestFile { function uploadFile (line 28) | async function uploadFile( function addFile (line 69) | async function addFile( function startUpload (line 96) | async function startUpload(page: Page): Promise { function downloadFile (line 114) | async function downloadFile( function verifyFileIntegrity (line 142) | async function verifyFileIntegrity( function verifyTransferCompletion (line 156) | async function verifyTransferCompletion( function createBrowserContexts (line 165) | async function createBrowserContexts(browser: Browser): Promise<{ type ProgressMonitor (line 184) | interface ProgressMonitor { type ChunkProgressLog (line 190) | interface ChunkProgressLog { type PreciseChunkMonitor (line 201) | interface PreciseChunkMonitor { function monitorChunkProgress (line 206) | async function monitorChunkProgress( function verifyPreciseProgress (line 285) | function verifyPreciseProgress( FILE: tests/unit/DropZone.test.tsx function createFile (line 7) | function createFile(name: string) { FILE: tests/unit/WebRTCProvider.test.tsx method on (line 8) | on(event: string, cb: (id: string) => void) { if (event === 'open') cb('... method off (line 8) | off() {}