SYMBOL INDEX (787 symbols across 34 files) FILE: theonefile_verse/public/admin-auth.js function getTheme (line 6) | function getTheme() { function setTheme (line 11) | function setTheme(t) { FILE: theonefile_verse/public/admin-dashboard.js function refreshCsrf (line 6) | function refreshCsrf() { function csrfHeaders (line 12) | function csrfHeaders(extra) { function getTheme (line 20) | function getTheme() { function setTheme (line 25) | function setTheme(theme) { function toggleTheme (line 33) | function toggleTheme() { function updateThemeToggleVisibility (line 38) | function updateThemeToggleVisibility() { function h (line 61) | function h(tag, props) { function _append (line 77) | function _append(parent, child) { function clearNode (line 87) | function clearNode(el) { function setContent (line 90) | function setContent(container, children) { function showTab (line 106) | function showTab(name) { function loadData (line 133) | async function loadData(query) { function searchRooms (line 157) | function searchRooms(q) { function loadSettings (line 162) | async function loadSettings() { function renderSettings (line 173) | function renderSettings() { function saveAdminPath (line 229) | async function saveAdminPath() { function saveRateLimitSettings (line 269) | async function saveRateLimitSettings() { function saveForcedTheme (line 280) | async function saveForcedTheme() { function toggleSetting (line 290) | async function toggleSetting(key) { function setInstancePassword (line 302) | async function setInstancePassword() { function saveUpdateInterval (line 318) | async function saveUpdateInterval() { function triggerUpdate (line 328) | async function triggerUpdate() { function checkForUpdates (line 350) | async function checkForUpdates() { function changeSourceMode (line 376) | async function changeSourceMode() { function uploadFile (line 396) | async function uploadFile() { function updateSourceUI (line 417) | function updateSourceUI() { function saveRoomDefaults (line 470) | async function saveRoomDefaults() { function showStatus (line 484) | function showStatus(msg, type) { function showAuthStatus (line 490) | function showAuthStatus(msg, type) { function renderStats (line 496) | function renderStats() { function renderRooms (line 514) | function renderRooms() { function toggleSelect (line 551) | function toggleSelect(id, checked) { function toggleAll (line 561) | function toggleAll(checked) { function clearSelection (line 571) | function clearSelection() { function updateBulkUI (line 577) | function updateBulkUI() { function deleteSelected (line 588) | async function deleteSelected() { function viewRoom (line 601) | function viewRoom(id) { function closeModal (line 640) | function closeModal() { function joinRoom (line 644) | function joinRoom(id) { function deleteRoom (line 648) | async function deleteRoom(id) { function logout (line 663) | async function logout() { function saveWebhookUrl (line 675) | async function saveWebhookUrl() { function saveDiscoveryPrefix (line 685) | async function saveDiscoveryPrefix() { function saveBackupSettings (line 695) | async function saveBackupSettings() { function loadActivityLogs (line 706) | async function loadActivityLogs() { function loadAuditLogs (line 720) | async function loadAuditLogs() { function renderActivityLogs (line 734) | function renderActivityLogs(logs) { function renderAuditLogs (line 750) | function renderAuditLogs(logs) { function loadBackups (line 766) | async function loadBackups() { function renderBackups (line 776) | function renderBackups(backups) { function createBackup (line 799) | async function createBackup() { function downloadBackup (line 814) | async function downloadBackup(id) { function restoreBackup (line 818) | async function restoreBackup(id) { function deleteBackup (line 834) | async function deleteBackup(id) { function exportAll (line 843) | async function exportAll() { function loadApiKeys (line 847) | async function loadApiKeys() { function renderApiKeys (line 857) | function renderApiKeys(keys) { function showCreateApiKey (line 878) | function showCreateApiKey() { function closeApiKeyModal (line 883) | function closeApiKeyModal() { function createApiKey (line 887) | async function createApiKey() { function revokeApiKey (line 918) | async function revokeApiKey(id) { function loadUsers (line 927) | async function loadUsers(q) { function searchUsers (line 942) | function searchUsers(q) { function renderUsers (line 947) | function renderUsers() { function showCreateUser (line 983) | function showCreateUser() { function closeUserModal (line 987) | function closeUserModal() { function createUser (line 995) | async function createUser() { function deleteUser (line 1023) | async function deleteUser(id) { function editUser (line 1033) | function editUser(id) { function closeEditUserModal (line 1046) | function closeEditUserModal() { function saveUserEdit (line 1050) | async function saveUserEdit() { function resetUserPassword (line 1079) | async function resetUserPassword() { function loadAuthSettings (line 1103) | async function loadAuthSettings() { function renderAuthSettings (line 1113) | function renderAuthSettings() { function saveAuthSettings (line 1128) | async function saveAuthSettings() { function toggleAuthSetting (line 1138) | async function toggleAuthSetting(key) { function updateAuthNumber (line 1149) | async function updateAuthNumber(key, value) { function loadOidcProviders (line 1161) | async function loadOidcProviders() { function renderOidcProviders (line 1172) | function renderOidcProviders() { function showAddOidcProvider (line 1195) | function showAddOidcProvider() { function editOidcProvider (line 1211) | function editOidcProvider(id) { function closeOidcModal (line 1229) | function closeOidcModal() { function saveOidcProvider (line 1233) | async function saveOidcProvider() { function deleteOidcProvider (line 1272) | async function deleteOidcProvider(id) { function loadSmtpConfigs (line 1285) | async function loadSmtpConfigs() { function renderSmtpConfigs (line 1296) | function renderSmtpConfigs() { function showAddSmtpConfig (line 1322) | function showAddSmtpConfig() { function editSmtpConfig (line 1338) | function editSmtpConfig(id) { function closeSmtpModal (line 1356) | function closeSmtpModal() { function saveSmtpConfig (line 1360) | async function saveSmtpConfig() { function testSmtpConfig (line 1399) | async function testSmtpConfig() { function deleteSmtpConfig (line 1427) | async function deleteSmtpConfig(id) { function loadEmailTemplates (line 1444) | async function loadEmailTemplates() { function renderEmailTemplates (line 1455) | function renderEmailTemplates(templates) { function sanitizeTemplateHtml (line 1472) | function sanitizeTemplateHtml(html) { function editTemplate (line 1491) | function editTemplate(id) { function closeTemplateModal (line 1507) | function closeTemplateModal() { function showWysiwygView (line 1512) | function showWysiwygView() { function showHtmlSourceView (line 1518) | function showHtmlSourceView() { function toggleTemplateView (line 1525) | function toggleTemplateView() { function execCmd (line 1535) | function execCmd(cmd) { function execCmdArg (line 1540) | function execCmdArg(cmd, arg) { function insertTemplateVar (line 1546) | function insertTemplateVar(varName) { function insertLink (line 1552) | function insertLink() { function insertImage (line 1559) | function insertImage() { function insertButton (line 1566) | function insertButton() { function saveTemplate (line 1578) | async function saveTemplate() { function previewTemplate (line 1611) | function previewTemplate() { function closeTemplatePreview (line 1629) | function closeTemplatePreview() { function loadEmailLogs (line 1640) | async function loadEmailLogs() { function renderEmailLogs (line 1655) | function renderEmailLogs() { function clearEmailLogs (line 1672) | async function clearEmailLogs() { function clearActivityLogs (line 1684) | async function clearActivityLogs() { function clearAuditLogs (line 1696) | async function clearAuditLogs() { FILE: theonefile_verse/public/admin-pages.js function withFormLoading (line 4) | function withFormLoading(form, fn) { function build2FAForm (line 19) | function build2FAForm(form) { function checkPasswordStrength (line 149) | function checkPasswordStrength(pwd) { FILE: theonefile_verse/public/collab-init.js function isBlockedKey (line 9) | function isBlockedKey(key) { FILE: theonefile_verse/public/collab.js function refreshCsrf (line 16) | function refreshCsrf() { function h (line 26) | function h(tag, props, ...children) { function _append (line 42) | function _append(parent, child) { function clearNode (line 52) | function clearNode(el) { function setContent (line 55) | function setContent(container, children) { function generateUUID (line 62) | function generateUUID() { function getOrCreateUserId (line 73) | function getOrCreateUserId() { function getStoredUserName (line 83) | function getStoredUserName() { function setStoredUserName (line 87) | function setStoredUserName(name) { function getRandomSyncQuote (line 129) | function getRandomSyncQuote() { function showSyncingOverlay (line 135) | function showSyncingOverlay() { function hideSyncingOverlay (line 154) | function hideSyncingOverlay() { function leaveRoom (line 166) | function leaveRoom() { function generateHighlanderName (line 179) | function generateHighlanderName() { function isValidColor (line 183) | function isValidColor(color) { function sanitizeColor (line 187) | function sanitizeColor(color) { function getOrCreateUserColor (line 191) | function getOrCreateUserColor() { function pickUniqueColor (line 201) | function pickUniqueColor() { function getInitials (line 211) | function getInitials(name) { function fetchWsToken (line 247) | async function fetchWsToken() { function setConnectionState (line 267) | function setConnectionState(state) { function connect (line 288) | async function connect() { function scheduleReconnect (line 323) | function scheduleReconnect() { function sendMessage (line 333) | function sendMessage(type, data) { function sanitizeUser (line 339) | function sanitizeUser(user) { function handleMessage (line 346) | function handleMessage(msg) { function handleNameRejected (line 496) | function handleNameRejected(reason) { function addChatMessage (line 506) | function addChatMessage(msg) { function playChatSound (line 530) | function playChatSound(isMention) { function sendChatMessage (line 546) | function sendChatMessage(text) { function setReplyTo (line 567) | function setReplyTo(msg) { function clearReply (line 578) | function clearReply() { function sendTypingIndicator (line 584) | function sendTypingIndicator() { function updateTypingIndicator (line 591) | function updateTypingIndicator() { function showToast (line 612) | function showToast(message) { function updateChatBadge (line 631) | function updateChatBadge() { function highlightMentions (line 643) | function highlightMentions(text) { function formatTimeAgo (line 662) | function formatTimeAgo(timestamp) { function renderChatMessages (line 670) | function renderChatMessages() { function getCanvasState (line 700) | function getCanvasState() { function screenToCanvasCoords (line 705) | function screenToCanvasCoords(screenX, screenY) { function canvasToScreenCoords (line 724) | function canvasToScreenCoords(canvasX, canvasY) { function safeElementId (line 743) | function safeElementId(userId) { function updateRemoteCursor (line 747) | function updateRemoteCursor(userId, user) { function refreshAllRemoteCursors (line 806) | function refreshAllRemoteCursors() { function removeRemoteCursor (line 814) | function removeRemoteCursor(userId) { function trackCursor (line 819) | function trackCursor() { function getGlobal (line 864) | function getGlobal(name) { function setGlobal (line 869) | function setGlobal(name, value) { function captureState (line 874) | function captureState() { function hashState (line 942) | function hashState(state) { function sendFullState (line 952) | function sendFullState() { function applyRemoteState (line 959) | function applyRemoteState(state) { function syncStateIfChanged (line 1045) | function syncStateIfChanged() { function startStatePolling (line 1055) | function startStatePolling() { function sendPresence (line 1076) | function sendPresence() { function trackSelection (line 1085) | function trackSelection() { function setupAuditLogInjection (line 1114) | function setupAuditLogInjection() { function getCurrentTabName (line 1138) | function getCurrentTabName() { function renderUsers (line 1147) | function renderUsers() { function renderUserIndicators (line 1171) | function renderUserIndicators() { function removeUserIndicators (line 1197) | function removeUserIndicators(userId) { function updateCharCount (line 1201) | function updateCharCount() { function toggleEmojiPicker (line 1216) | function toggleEmojiPicker() { function insertEmoji (line 1222) | function insertEmoji(emoji) { function updateExpiryCountdown (line 1235) | function updateExpiryCountdown() { function injectCollabBar (line 1264) | function injectCollabBar() { function generateQR (line 1573) | function generateQR() { function renderQR (line 1588) | function renderQR(container, url) { function showNameModal (line 1602) | function showNameModal(isChange = false, errorMsg = null) { function checkPassword (line 1665) | async function checkPassword() { function init (line 1712) | async function init() { function stripCollabFromHTML (line 1756) | function stripCollabFromHTML(htmlString) { function hookSaveFunction (line 1815) | function hookSaveFunction() { function buildProbeList (line 1819) | function buildProbeList(ping) { function updateProbeResultsPanel (line 1834) | function updateProbeResultsPanel(nodeId) { function overridePingFunctions (line 1859) | function overridePingFunctions() { function injectProbeUI (line 1971) | function injectProbeUI() { function loadProbeConfig (line 2039) | function loadProbeConfig() { function saveProbeConfig (line 2075) | function saveProbeConfig() { function parsePorts (line 2109) | function parsePorts(str) { function getLayerName (line 2213) | function getLayerName(val) { function fetchDiscoveryIcon (line 2225) | function fetchDiscoveryIcon(library, name, el, size) { function getShapePreviewSVG (line 2248) | function getShapePreviewSVG(shape) { function updateDiscoveryProgress (line 2254) | function updateDiscoveryProgress(percent, scanned, total, rangeIndex, to... function addDiscoveryResult (line 2266) | function addDiscoveryResult(host) { function finalizeDiscovery (line 2277) | function finalizeDiscovery(totalFound) { function handleDeepScanProgress (line 2292) | function handleDeepScanProgress(scanId, ip, percent) { function handleDeepScanUpdate (line 2303) | function handleDeepScanUpdate(scanId, ip, newPorts, newServices, contain... function handleDeepScanComplete (line 2346) | function handleDeepScanComplete(scanId, ip) { function buildDeepScanCell (line 2353) | function buildDeepScanCell(ip) { function getCurrentCIDR (line 2369) | function getCurrentCIDR() { function getDiscoveryCIDRs (line 2379) | function getDiscoveryCIDRs() { function renderRangePills (line 2385) | function renderRangePills() { function updateRackDropdowns (line 2405) | function updateRackDropdowns() { function renderDiscoveryResults (line 2503) | function renderDiscoveryResults() { function escapeHtml (line 2816) | function escapeHtml(str) { function injectDiscoveryUI (line 2821) | function injectDiscoveryUI() { function startCollab (line 3794) | function startCollab() { FILE: theonefile_verse/public/landing.js function withLoading (line 4) | function withLoading(fn) { function showToast (line 13) | function showToast(message, type) { function h (line 31) | function h(tag, props) { function _append (line 47) | function _append(parent, child) { function clearNode (line 57) | function clearNode(el) { function setContent (line 60) | function setContent(container, children) { function getTheme (line 69) | function getTheme() { function setTheme (line 74) | function setTheme(theme) { function toggleTheme (line 82) | function toggleTheme() { function updateThemeToggleVisibility (line 87) | function updateThemeToggleVisibility() { function generateUUID (line 117) | function generateUUID() { function getOrCreateUserId (line 125) | function getOrCreateUserId(roomId) { function openModal (line 132) | function openModal(type) { document.getElementById(type + '-modal').clas... function closeModal (line 134) | function closeModal(type) { function clearAllAuthForms (line 143) | function clearAllAuthForms() { function showError (line 153) | function showError(type, msg) { function handleFile (line 171) | async function handleFile(file) { function clearFile (line 189) | function clearFile() { function parseTopologyFile (line 197) | function parseTopologyFile(content, filename) { function createRoom (line 218) | async function createRoom() { function joinRoom (line 266) | async function joinRoom() { function loadAuthState (line 305) | async function loadAuthState() { function updateAuthUI (line 320) | function updateAuthUI() { function renderOidcProviders (line 352) | function renderOidcProviders(containerId, mode) { function startOidcLogin (line 384) | async function startOidcLogin(providerId) { function loginWithPassword (line 398) | async function loginWithPassword() { function verify2FA (line 428) | async function verify2FA() { function openSettingsModal (line 449) | async function openSettingsModal() { function load2FAStatus (line 454) | async function load2FAStatus() { function setup2FA (line 478) | async function setup2FA() { function verify2FASetup (line 521) | async function verify2FASetup() { function disable2FA (line 557) | async function disable2FA() { function requestEmailChange (line 579) | async function requestEmailChange() { function registerUser (line 607) | async function registerUser() { function requestPasswordReset (line 639) | async function requestPasswordReset() { function requestMagicLink (line 659) | async function requestMagicLink() { function logout (line 679) | async function logout() { FILE: theonefile_verse/src/auth.ts function hashPassword (line 6) | async function hashPassword(password: string): Promise { function verifyPassword (line 14) | async function verifyPassword(password: string, hash: string): Promise { function verifyEmail (line 309) | async function verifyEmail(token: string): Promise<{ success: boolean; e... constant MIN_REQUEST_TIME_MS (line 343) | const MIN_REQUEST_TIME_MS = 200; function normalizeResponseTime (line 345) | async function normalizeResponseTime(startTime: number): Promise { function requestPasswordReset (line 352) | async function requestPasswordReset( function resetPassword (line 388) | async function resetPassword( function requestMagicLink (line 432) | async function requestMagicLink( function loginWithMagicLink (line 472) | async function loginWithMagicLink( function logout (line 513) | async function logout(token: string): Promise { function logoutAll (line 518) | function logoutAll(userId: string): number { function changePassword (line 522) | async function changePassword( function updateProfile (line 556) | function updateProfile( function deleteAccount (line 580) | function deleteAccount(userId: string): { success: boolean; error?: stri... type ParsedSession (line 598) | interface ParsedSession extends db.UserSession { function parseUserAgent (line 605) | function parseUserAgent(ua: string | null): { browser: string; os: strin... function formatIPLocation (line 630) | function formatIPLocation(ip: string | null): string { function getUserSessions (line 637) | function getUserSessions(userId: string): ParsedSession[] { function getUserOidcLinks (line 651) | function getUserOidcLinks(userId: string): db.UserOidcLink[] { function unlinkOidcProvider (line 655) | function unlinkOidcProvider(userId: string, linkId: string): { success: ... function adminCreateUser (line 676) | async function adminCreateUser( function adminUpdateUser (line 729) | function adminUpdateUser( function adminResetPassword (line 768) | async function adminResetPassword( function adminDeleteUser (line 791) | function adminDeleteUser(userId: string): { success: boolean; error?: st... function cleanupExpiredTokens (line 795) | function cleanupExpiredTokens(): { sessions: number; tokens: number } { function base32Encode (line 802) | function base32Encode(buffer: Uint8Array): string { function base32Decode (line 821) | function base32Decode(encoded: string): Uint8Array { function generateTOTPCode (line 840) | function generateTOTPCode(secret: Uint8Array, counter: number): string { function verifyTOTPCode (line 858) | function verifyTOTPCode(secret: string, code: string): boolean { function setupTOTP (line 870) | async function setupTOTP(userId: string): Promise<{ success: boolean; se... function verifyAndEnableTOTP (line 895) | async function verifyAndEnableTOTP(userId: string, code: string): Promis... function disableTOTP (line 932) | async function disableTOTP(userId: string, password: string): Promise<{ ... function verifyBackupCode (line 962) | async function verifyBackupCode(userId: string, code: string): Promise { function verifyInstancePassword (line 191) | async function verifyInstancePassword(password: string): Promise { function isInstanceLocked (line 196) | function isInstanceLocked(): boolean { function getAdminPath (line 200) | function getAdminPath(): string { function isCustomAdminPath (line 206) | function isCustomAdminPath(path: string): boolean { function validateAdminPath (line 211) | function validateAdminPath(newPath: string): { valid: boolean; error?: s... function isAdminRoute (line 228) | function isAdminRoute(path: string): boolean { function getExternalOrigin (line 233) | function getExternalOrigin(req: Request): string { FILE: theonefile_verse/src/database.ts function sanitizeSearchQuery (line 5) | function sanitizeSearchQuery(query: string): string | null { constant DATA_DIR (line 10) | const DATA_DIR = process.env.DATA_DIR || "./data"; constant DB_PATH (line 11) | const DB_PATH = join(DATA_DIR, "theonefile.db"); constant ROOMS_DIR (line 12) | const ROOMS_DIR = join(DATA_DIR, "rooms"); constant ADMIN_CONFIG_PATH (line 13) | const ADMIN_CONFIG_PATH = join(DATA_DIR, "admin.json"); constant SETTINGS_PATH (line 14) | const SETTINGS_PATH = join(DATA_DIR, "settings.json"); function migrateAddColumn (line 22) | function migrateAddColumn(table: string, column: string, definition: str... type OidcState (line 342) | interface OidcState { type CsrfToken (line 354) | interface CsrfToken { type Room (line 361) | interface Room { type AuditLog (line 373) | interface AuditLog { type ActivityLog (line 384) | interface ActivityLog { type ApiKey (line 395) | interface ApiKey { type Backup (line 406) | interface Backup { type User (line 415) | interface User { type UserOidcLink (line 436) | interface UserOidcLink { type UserSession (line 448) | interface UserSession { type UserToken (line 458) | interface UserToken { type SmtpConfig (line 469) | interface SmtpConfig { type OidcProvider (line 488) | interface OidcProvider { type UserPreferences (line 507) | interface UserPreferences { type EmailTemplate (line 514) | interface EmailTemplate { type EmailLog (line 524) | interface EmailLog { function rowToRoom (line 656) | function rowToRoom(row: any): Room | null { function createRoom (line 671) | function createRoom(room: Room): void { function getRoom (line 686) | function getRoom(id: string): Room | null { function updateRoom (line 690) | function updateRoom(id: string, lastActivity: string, topology: any): vo... function updateRoomSettings (line 694) | function updateRoomSettings(id: string, allowGuests: boolean, ownerUserI... function deleteRoom (line 698) | function deleteRoom(id: string): boolean { function listRooms (line 703) | function listRooms(limit?: number, offset?: number): Room[] { function searchRooms (line 710) | function searchRooms(query: string, limit: number = 50, offset: number =... function countRooms (line 719) | function countRooms(): number { function getSetting (line 724) | function getSetting(key: string): string | null { function setSetting (line 729) | function setSetting(key: string, value: string): void { function deleteSetting (line 733) | function deleteSetting(key: string): void { function getAllSettings (line 737) | function getAllSettings(): Record { function addAuditLog (line 746) | function addAuditLog(log: AuditLog): void { function getAuditLogs (line 758) | function getAuditLogs(limit: number = 100, offset: number = 0): AuditLog... function searchAuditLogs (line 771) | function searchAuditLogs(query: string, limit: number = 100, offset: num... function addActivityLog (line 787) | function addActivityLog(log: ActivityLog): void { function getActivityLogs (line 799) | function getActivityLogs(roomId: string, limit: number = 100, offset: nu... function getAllActivityLogs (line 812) | function getAllActivityLogs(limit: number = 100, offset: number = 0): Ac... function createApiKey (line 825) | function createApiKey(apiKey: ApiKey): void { function getApiKeyById (line 837) | function getApiKeyById(id: string): ApiKey | null { function getApiKeyByHash (line 852) | function getApiKeyByHash(hash: string): ApiKey | null { function updateApiKeyLastUsed (line 867) | function updateApiKeyLastUsed(id: string): void { function listApiKeys (line 871) | function listApiKeys(): Omit[] { function deactivateApiKey (line 883) | function deactivateApiKey(id: string): boolean { function createBackupRecord (line 888) | function createBackupRecord(backup: Backup): void { function listBackups (line 899) | function listBackups(): Backup[] { function deleteBackupRecord (line 910) | function deleteBackupRecord(id: string): boolean { function getOldAutoBackups (line 915) | function getOldAutoBackups(keepCount: number): Backup[] { function migrateFromFlatFiles (line 926) | function migrateFromFlatFiles(): { rooms: number; settings: boolean; adm... function getDatabase (line 985) | function getDatabase(): Database { function closeDatabase (line 989) | function closeDatabase(): void { function healthCheck (line 993) | function healthCheck(): boolean { function logAuthEvent (line 1002) | function logAuthEvent( function rowToUser (line 1040) | function rowToUser(row: any): User | null { function createUser (line 1064) | function createUser(user: User): void { function createUserAtomic (line 1071) | function createUserAtomic(user: User): { created: boolean; wasFirst: boo... function getUserById (line 1089) | function getUserById(id: string): User | null { function getUserByEmail (line 1093) | function getUserByEmail(email: string): User | null { function updateUser (line 1097) | function updateUser(user: User): void { function incrementFailedLogin (line 1108) | function incrementFailedLogin(userId: string): void { function resetFailedLogin (line 1112) | function resetFailedLogin(userId: string): void { function lockUserAccount (line 1116) | function lockUserAccount(userId: string, until: Date): void { function deleteUser (line 1120) | function deleteUser(id: string): boolean { function listUsers (line 1124) | function listUsers(limit: number = 100, offset: number = 0): User[] { function searchUsers (line 1128) | function searchUsers(query: string, limit: number = 100, offset: number ... function countUsers (line 1135) | function countUsers(): number { function countUsersByRole (line 1139) | function countUsersByRole(role: string): number { function listUsersByRole (line 1143) | function listUsersByRole(role: string): User[] { function verifyAllAdminEmails (line 1149) | function verifyAllAdminEmails(): number { function rowToSession (line 1165) | function rowToSession(row: any): UserSession | null { function createUserSession (line 1178) | function createUserSession(session: UserSession): void { function getSessionByTokenHash (line 1182) | function getSessionByTokenHash(tokenHash: string): UserSession | null { function getSessionsByUserId (line 1186) | function getSessionsByUserId(userId: string): UserSession[] { function deleteSession (line 1190) | function deleteSession(id: string): boolean { function deleteSessionByTokenHash (line 1194) | function deleteSessionByTokenHash(tokenHash: string): boolean { function deleteAllUserSessions (line 1198) | function deleteAllUserSessions(userId: string): number { function cleanupExpiredSessions (line 1202) | function cleanupExpiredSessions(): number { function rowToUserToken (line 1222) | function rowToUserToken(row: any): UserToken | null { function createUserToken (line 1236) | function createUserToken(token: UserToken): void { function getUserTokenByHash (line 1240) | function getUserTokenByHash(tokenHash: string): UserToken | null { function markUserTokenUsed (line 1244) | function markUserTokenUsed(id: string): void { function incrementTokenFailedAttempts (line 1248) | function incrementTokenFailedAttempts(id: string): number { function deleteUserToken (line 1254) | function deleteUserToken(id: string): boolean { function deleteUserTokensByType (line 1258) | function deleteUserTokensByType(userId: string, type: string): number { function cleanupExpiredUserTokens (line 1262) | function cleanupExpiredUserTokens(): number { function rowToOidcLink (line 1277) | function rowToOidcLink(row: any): UserOidcLink | null { function createOidcLink (line 1292) | function createOidcLink(link: UserOidcLink): void { function getOidcLinkById (line 1296) | function getOidcLinkById(id: string): UserOidcLink | null { function getOidcLinkByProvider (line 1300) | function getOidcLinkByProvider(provider: string, providerUserId: string)... function getOidcLinksByUser (line 1304) | function getOidcLinksByUser(userId: string): UserOidcLink[] { function deleteOidcLink (line 1308) | function deleteOidcLink(id: string): boolean { function updateOidcLinkTokens (line 1312) | function updateOidcLinkTokens(id: string, accessToken: string | null, re... function rowToOidcProvider (line 1331) | function rowToOidcProvider(row: any): OidcProvider | null { function createOidcProvider (line 1353) | function createOidcProvider(provider: OidcProvider): void { function getOidcProvider (line 1361) | function getOidcProvider(id: string): OidcProvider | null { function getOidcProviderByName (line 1365) | function getOidcProviderByName(name: string): OidcProvider | null { function listOidcProviders (line 1369) | function listOidcProviders(): OidcProvider[] { function listActiveOidcProviders (line 1373) | function listActiveOidcProviders(): OidcProvider[] { function updateOidcProvider (line 1377) | function updateOidcProvider(provider: OidcProvider): void { function deleteOidcProvider (line 1385) | function deleteOidcProvider(id: string): boolean { function rowToSmtpConfig (line 1404) | function rowToSmtpConfig(row: any): SmtpConfig | null { function createSmtpConfig (line 1426) | function createSmtpConfig(config: SmtpConfig): void { function getSmtpConfig (line 1435) | function getSmtpConfig(id: string): SmtpConfig | null { function getDefaultSmtpConfig (line 1439) | function getDefaultSmtpConfig(): SmtpConfig | null { function listSmtpConfigs (line 1443) | function listSmtpConfigs(): SmtpConfig[] { function updateSmtpConfig (line 1447) | function updateSmtpConfig(config: SmtpConfig): void { function deleteSmtpConfig (line 1456) | function deleteSmtpConfig(id: string): boolean { function rowToEmailTemplate (line 1471) | function rowToEmailTemplate(row: any): EmailTemplate | null { function createEmailTemplate (line 1484) | function createEmailTemplate(template: EmailTemplate): void { function getEmailTemplate (line 1488) | function getEmailTemplate(id: string): EmailTemplate | null { function getEmailTemplateByName (line 1492) | function getEmailTemplateByName(name: string): EmailTemplate | null { function listEmailTemplates (line 1496) | function listEmailTemplates(): EmailTemplate[] { function updateEmailTemplate (line 1500) | function updateEmailTemplate(template: EmailTemplate): void { function deleteEmailTemplate (line 1504) | function deleteEmailTemplate(id: string): boolean { function rowToEmailLog (line 1517) | function rowToEmailLog(row: any): EmailLog | null { function createEmailLog (line 1531) | function createEmailLog(log: EmailLog): void { function listEmailLogs (line 1535) | function listEmailLogs(limit: number = 100, offset: number = 0): EmailLo... function countEmailLogs (line 1539) | function countEmailLogs(): number { function countEmailLogsByStatus (line 1543) | function countEmailLogsByStatus(status: string): number { function clearEmailLogs (line 1547) | function clearEmailLogs(): number { function clearAuditLogs (line 1551) | function clearAuditLogs(): number { function clearActivityLogs (line 1555) | function clearActivityLogs(): number { function rowToUserPreferences (line 1567) | function rowToUserPreferences(row: any): UserPreferences | null { function saveUserPreferences (line 1577) | function saveUserPreferences(prefs: UserPreferences): void { function getUserPreferences (line 1581) | function getUserPreferences(userId: string): UserPreferences | null { function initializeDefaultEmailTemplates (line 1586) | function initializeDefaultEmailTemplates(): void { function rowToOidcState (line 1683) | function rowToOidcState(row: any): OidcState | null { function createOidcState (line 1698) | function createOidcState(oidcState: OidcState): void { function getOidcState (line 1712) | function getOidcState(state: string): OidcState | null { function deleteOidcState (line 1716) | function deleteOidcState(state: string): boolean { function cleanupExpiredOidcStates (line 1720) | function cleanupExpiredOidcStates(): number { function countOidcStates (line 1724) | function countOidcStates(): number { function deleteOldestOidcStates (line 1728) | function deleteOldestOidcStates(count: number): number { function rowToCsrfToken (line 1744) | function rowToCsrfToken(row: any): CsrfToken | null { function createCsrfToken (line 1754) | function createCsrfToken(csrfToken: CsrfToken): void { function getCsrfToken (line 1763) | function getCsrfToken(token: string): CsrfToken | null { function markCsrfTokenUsed (line 1767) | function markCsrfTokenUsed(token: string): boolean { function deleteCsrfToken (line 1771) | function deleteCsrfToken(token: string): boolean { function cleanupExpiredCsrfTokens (line 1775) | function cleanupExpiredCsrfTokens(): number { function countCsrfTokens (line 1779) | function countCsrfTokens(): number { function deleteOldestCsrfTokens (line 1783) | function deleteOldestCsrfTokens(count: number): number { function recordEmailRateLimit (line 1792) | function recordEmailRateLimit(email: string, action: string): void { function countEmailRateLimitAttempts (line 1796) | function countEmailRateLimitAttempts(email: string, action: string, wind... function cleanupEmailRateLimits (line 1801) | function cleanupEmailRateLimits(maxAgeSeconds: number = 3600): number { FILE: theonefile_verse/src/index.ts constant CONFIGURED_ORIGINS (line 11) | const CONFIGURED_ORIGINS = process.env.CORS_ORIGIN?.split(",").map(o => ... function handleRequest (line 28) | async function handleRequest(req: Request, server: any): Promise { function sendEmailWithConfig (line 43) | async function sendEmailWithConfig( function logAndReturn (line 72) | function logAndReturn( class SmtpClient (line 93) | class SmtpClient { method constructor (line 101) | constructor(config: db.SmtpConfig) { method log (line 105) | private log(...args: any[]) { method connect (line 109) | async connect(): Promise { method handleData (line 191) | private handleData(data: Buffer) { method handleError (line 196) | private handleError(error: Error) { method handleClose (line 204) | private handleClose() { method processBuffer (line 212) | private processBuffer() { method readResponse (line 237) | private readResponse(): Promise { method command (line 259) | private async command(cmd: string, expectedCodes: number[] = [250]): P... method ehlo (line 274) | async ehlo(): Promise { method startTls (line 279) | async startTls(): Promise { method authenticate (line 341) | async authenticate(username: string, password: string, capabilities: s... method mailFrom (line 358) | async mailFrom(email: string): Promise { method rcptTo (line 362) | async rcptTo(email: string): Promise { method data (line 366) | async data(content: string): Promise { method quit (line 381) | async quit(): Promise { method close (line 388) | close() { function sendViaSMTP (line 398) | async function sendViaSMTP( function stripCRLF (line 463) | function stripCRLF(str: string): string { function buildMessage (line 467) | function buildMessage(message: EmailMessage, config: db.SmtpConfig): str... function encodeSubject (line 515) | function encodeSubject(subject: string): string { function encodeQuotedPrintable (line 523) | function encodeQuotedPrintable(text: string): string { function sendTemplatedEmail (line 573) | async function sendTemplatedEmail( function sendVerificationEmail (line 599) | async function sendVerificationEmail( function sendPasswordResetEmail (line 610) | async function sendPasswordResetEmail( function sendMagicLinkEmail (line 621) | async function sendMagicLinkEmail( function sendRoomInvitationEmail (line 632) | async function sendRoomInvitationEmail( function testSmtpConfig (line 643) | async function testSmtpConfig(config: db.SmtpConfig): Promise { function getEmailStats (line 652) | function getEmailStats(): { FILE: theonefile_verse/src/network.ts constant IPV4_RE (line 1) | const IPV4_RE = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/; constant HOSTNAME_RE (line 2) | const HOSTNAME_RE = /^[a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?(\.[a-... constant CIDR_RE (line 3) | const CIDR_RE = /^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\/(\d{1,2})$/; type ProbeConfig (line 5) | interface ProbeConfig { type ProbeResult (line 12) | interface ProbeResult { type BatchTarget (line 20) | interface BatchTarget { type BatchResult (line 27) | interface BatchResult { type DiscoveryOptions (line 33) | interface DiscoveryOptions { type DiscoveredHost (line 44) | interface DiscoveredHost { type DiscoveryHandle (line 59) | interface DiscoveryHandle { constant PORT_SERVICE_MAP (line 67) | const PORT_SERVICE_MAP: Record = { constant DEFAULT_SCAN_PORTS (line 164) | const DEFAULT_SCAN_PORTS = [22, 23, 25, 53, 80, 110, 135, 139, 143, 161,... type ServiceIconEntry (line 166) | interface ServiceIconEntry { constant SERVICE_ICON_MAP (line 172) | const SERVICE_ICON_MAP: ServiceIconEntry[] = [ constant DEFAULT_ICON (line 244) | const DEFAULT_ICON = { library: "selfhst", name: "linux" }; function validateIPv4 (line 246) | function validateIPv4(ip: string): boolean { function validateHostname (line 256) | function validateHostname(host: string): boolean { function validateTarget (line 261) | function validateTarget(target: string): boolean { function isRFC1918 (line 265) | function isRFC1918(ip: string): boolean { function validatePort (line 278) | function validatePort(port: number): boolean { function ipToInt (line 282) | function ipToInt(ip: string): number { function intToIp (line 287) | function intToIp(n: number): string { function validateCIDR (line 291) | function validateCIDR(cidr: string, allowPublic: boolean, maxPrefix: num... function probeICMP (line 320) | async function probeICMP(target: string, timeoutMs: number): Promise { function reverseDNS (line 520) | async function reverseDNS(ip: string, timeoutMs: number): Promise { function resolveNetBIOS (line 536) | async function resolveNetBIOS(ip: string, timeoutMs: number): Promise { function base64UrlEncode (line 65) | function base64UrlEncode(buffer: Uint8Array): string { constant ENCRYPTION_KEY_LENGTH (line 73) | const ENCRYPTION_KEY_LENGTH = 32; constant PBKDF2_ITERATIONS (line 74) | const PBKDF2_ITERATIONS = 600000; constant PBKDF2_SALT_LENGTH (line 75) | const PBKDF2_SALT_LENGTH = 16; function deriveKeyFromSecret (line 78) | async function deriveKeyFromSecret(secret: string, salt: Uint8Array): Pr... function getEncryptionKeyMaterial (line 102) | async function getEncryptionKeyMaterial(): Promise { function getEncryptionKey (line 146) | async function getEncryptionKey(salt: Uint8Array): Promise { function encryptSecret (line 171) | async function encryptSecret(plaintext: string): Promise { function decryptSecret (line 190) | async function decryptSecret(ciphertext: string): Promise { type OidcDiscovery (line 226) | interface OidcDiscovery { function discoverOidcEndpoints (line 236) | async function discoverOidcEndpoints(issuerUrl: string): Promise { function fetchJwks (line 467) | async function fetchJwks(jwksUri: string): Promise { function getHashAlgorithm (line 506) | function getHashAlgorithm(alg: string): string { function importJwkForVerify (line 512) | async function importJwkForVerify(jwk: JsonWebKey, headerAlg?: string): ... function verifyJwtSignature (line 532) | async function verifyJwtSignature(token: string, jwks: JsonWebKey[]): Pr... function parseIdToken (line 572) | async function parseIdToken( function processOidcCallback (line 666) | async function processOidcCallback( constant MAX_SESSIONS_PER_USER (line 853) | const MAX_SESSIONS_PER_USER = 10; function createUserSessionToken (line 855) | async function createUserSessionToken( function hashToken (line 884) | async function hashToken(token: string): Promise { function generateSecureToken (line 891) | function generateSecureToken(bytes: number = 32): string { function validateUserSessionToken (line 897) | async function validateUserSessionToken( function refreshOidcTokens (line 926) | async function refreshOidcTokens(linkId: string): Promise<{ function revokeUserOidcTokens (line 1009) | async function revokeUserOidcTokens(userId: string): Promise { type AuthSettings (line 1069) | interface AuthSettings { function getAuthSettings (line 1084) | function getAuthSettings(): AuthSettings { function saveAuthSettings (line 1112) | function saveAuthSettings(settings: Partial): void { function getIdTokenMaxAgeMs (line 1118) | function getIdTokenMaxAgeMs(): number { function sanitizeIconUrl (line 1123) | function sanitizeIconUrl(url: string | null): string | null { function getActiveProviders (line 1134) | function getActiveProviders(): { id: string; name: string; iconUrl: stri... function getSessionCookie (line 1142) | function getSessionCookie(name: string, value: string, maxAge: number = ... function getClearCookie (line 1150) | function getClearCookie(name: string): string { function getSessionCookieName (line 1158) | function getSessionCookieName(baseName: string): string { function cleanupOldestCsrfTokens (line 1163) | function cleanupOldestCsrfTokens(): void { function generateCsrfToken (line 1169) | function generateCsrfToken(): string { function validateCsrfToken (line 1186) | function validateCsrfToken(token: string): boolean { function getCsrfCookie (line 1206) | function getCsrfCookie(token: string): string { function validateRedirectUrl (line 1212) | function validateRedirectUrl(redirectUrl: string | null, baseUrl: string... FILE: theonefile_verse/src/rate-limit.ts type RateLimitEntry (line 6) | interface RateLimitEntry { constant MAX_RATE_LIMIT_ENTRIES (line 11) | const MAX_RATE_LIMIT_ENTRIES = 10000; type WsTokenBucket (line 14) | interface WsTokenBucket { constant WS_RATE_LIMITS (line 19) | const WS_RATE_LIMITS = { constant MAX_WS_RATE_LIMIT_BUCKETS (line 28) | const MAX_WS_RATE_LIMIT_BUCKETS = 50000; function checkWsRateLimit (line 31) | function checkWsRateLimit(connectionId: string, messageType: string): bo... function checkRateLimit (line 50) | async function checkRateLimit(ip: string, endpoint: string, settings: In... function checkEmailRateLimit (line 83) | async function checkEmailRateLimit(email: string, action: string, settin... constant MAX_WS_CONNECTIONS_PER_IP (line 102) | const MAX_WS_CONNECTIONS_PER_IP = 50; constant WS_CONNECTION_WINDOW (line 103) | const WS_CONNECTION_WINDOW = 3600 * 1000; function checkWsConnectionLimit (line 105) | function checkWsConnectionLimit(clientIp: string): boolean { function startRateLimitCleanupIntervals (line 119) | function startRateLimitCleanupIntervals(): void { FILE: theonefile_verse/src/redis.ts constant REDIS_URL (line 3) | const REDIS_URL = process.env.REDIS_URL || "redis://localhost:6379"; function connectRedis (line 11) | async function connectRedis(): Promise { function isRedisConnected (line 46) | function isRedisConnected(): boolean { constant RATE_LIMIT_LUA (line 50) | const RATE_LIMIT_LUA = ` function checkRateLimitRedis (line 56) | async function checkRateLimitRedis( function setSessionToken (line 73) | async function setSessionToken( function getSessionToken (line 89) | async function getSessionToken(token: string): Promise<{ type: string; c... function deleteSessionToken (line 101) | async function deleteSessionToken(token: string): Promise { function setUserPresence (line 113) | async function setUserPresence( function getUserPresence (line 131) | async function getUserPresence(roomId: string, userId: string): Promise<... function getAllUserPresence (line 143) | async function getAllUserPresence(roomId: string): Promise { function deleteRoomStateCache (line 207) | async function deleteRoomStateCache(roomId: string): Promise { function publishMessage (line 219) | async function publishMessage(channel: string, message: string): Promise... function subscribeToChannel (line 231) | async function subscribeToChannel( function unsubscribeFromChannel (line 253) | async function unsubscribeFromChannel( function publishToRoom (line 278) | async function publishToRoom(roomId: string, message: any): Promise { function subscribeToRoom (line 282) | async function subscribeToRoom( function incrementCounter (line 301) | async function incrementCounter(key: string): Promise { function getCounter (line 312) | async function getCounter(key: string): Promise { function setWithExpiry (line 324) | async function setWithExpiry(key: string, value: string, ttlSeconds: num... function getValue (line 336) | async function getValue(key: string): Promise { function deleteKey (line 347) | async function deleteKey(key: string): Promise { function ping (line 359) | async function ping(): Promise { function disconnectRedis (line 369) | async function disconnectRedis(): Promise { function getRedisClient (line 386) | function getRedisClient(): RedisClientType | null { FILE: theonefile_verse/src/rooms.ts type Room (line 12) | interface Room { type RoomMeta (line 24) | interface RoomMeta { function hashPassword (line 35) | async function hashPassword(password: string): Promise { function verifyPassword (line 39) | async function verifyPassword(password: string, hash: string): Promise { constant GITHUB_RAW_URL (line 121) | const GITHUB_RAW_URL = "https://raw.githubusercontent.com/gelatinescream... function getExpectedTheOneFileHash (line 125) | function getExpectedTheOneFileHash(): string | null { function setExpectedTheOneFileHash (line 129) | function setExpectedTheOneFileHash(hash: string): void { function extractVersionFromHtml (line 133) | function extractVersionFromHtml(html: string): string { function isNewerVersion (line 138) | function isNewerVersion(latest: string, current: string): boolean { function computeSha256Hash (line 151) | async function computeSha256Hash(content: string): Promise { function fetchLatestFromGitHub (line 159) | async function fetchLatestFromGitHub(): Promise { function setTheOneFileHtml (line 191) | function setTheOneFileHtml(html: string): void { function getTheOneFilePath (line 196) | function getTheOneFilePath(): string { function restartUpdateTimer (line 202) | function restartUpdateTimer(): void { function clearUpdateTimer (line 212) | function clearUpdateTimer(): void { function initializeTheOneFile (line 217) | async function initializeTheOneFile(): Promise { type ValidationResult (line 242) | interface ValidationResult { type TopologyValidationResult (line 248) | interface TopologyValidationResult { constant TOPOLOGY_LIMITS (line 254) | const TOPOLOGY_LIMITS = { function checkJsonDepthAndSize (line 262) | function checkJsonDepthAndSize(obj: any, currentDepth: number = 0): { va... constant ALLOWED_TAGS (line 299) | const ALLOWED_TAGS = new Set([ constant ALLOWED_ATTRS (line 311) | const ALLOWED_ATTRS = new Set([ function isAllowedDataAttr (line 331) | function isAllowedDataAttr(name: string): boolean { function sanitizeUrl (line 336) | function sanitizeUrl(url: string): string { function sanitizeHtmlString (line 347) | function sanitizeHtmlString(str: string): string { function sanitizeTopologyStrings (line 384) | function sanitizeTopologyStrings(obj: any): any { function validateTopology (line 398) | function validateTopology(topology: any): TopologyValidationResult { function validateTheOneFileHtml (line 452) | function validateTheOneFileHtml(html: string): ValidationResult { function isValidWebhookUrl (line 482) | function isValidWebhookUrl(url: string): boolean { function sendWebhook (line 512) | async function sendWebhook(event: string, data: any): Promise { constant BACKUPS_DIR (line 530) | const BACKUPS_DIR = join(DATA_DIR, "backups"); function createBackup (line 533) | async function createBackup(autoGenerated: boolean = false): Promise<{ i... function restoreBackup (line 558) | async function restoreBackup(backupId: string): Promise<{ success: boole... function getBackupsDir (line 582) | function getBackupsDir(): string { function restartBackupTimer (line 588) | function restartBackupTimer(): void { function clearBackupTimer (line 598) | function clearBackupTimer(): void { FILE: theonefile_verse/src/routes/admin-apikeys.ts function handle (line 6) | async function handle(req: Request, path: string, url: URL, corsHeaders:... FILE: theonefile_verse/src/routes/admin-auth-settings.ts function handle (line 6) | async function handle(req: Request, path: string, url: URL, corsHeaders:... FILE: theonefile_verse/src/routes/admin-auth.ts function handle (line 11) | async function handle(req: Request, path: string, url: URL, corsHeaders:... FILE: theonefile_verse/src/routes/admin-backups.ts function handle (line 8) | async function handle(req: Request, path: string, url: URL, corsHeaders:... FILE: theonefile_verse/src/routes/admin-logs.ts function handle (line 4) | async function handle(req: Request, path: string, url: URL, corsHeaders:... FILE: theonefile_verse/src/routes/admin-rooms.ts function handle (line 6) | async function handle(req: Request, path: string, url: URL, corsHeaders:... FILE: theonefile_verse/src/routes/admin-settings.ts constant GITHUB_RAW_URL (line 6) | const GITHUB_RAW_URL = "https://raw.githubusercontent.com/gelatinescream... function handle (line 8) | async function handle(req: Request, path: string, url: URL, corsHeaders:... FILE: theonefile_verse/src/routes/admin-users.ts function handle (line 6) | async function handle(req: Request, path: string, url: URL, corsHeaders:... FILE: theonefile_verse/src/routes/instance-access.ts function handle (line 8) | async function handle(req: Request, path: string, url: URL, corsHeaders:... FILE: theonefile_verse/src/routes/network-routes.ts function handle (line 9) | async function handle(req: Request, path: string, url: URL, corsHeaders:... FILE: theonefile_verse/src/routes/public.ts constant STATIC_FILES (line 9) | const STATIC_FILES: Record, message =... function validateRequestCsrf (line 81) | function validateRequestCsrf(req: Request, body?: any): boolean { function csrfReject (line 96) | function csrfReject(corsHeaders: Record): Response { function getTokenFromRequest (line 100) | function getTokenFromRequest(req: Request): string | null { function getUserTokenFromRequest (line 109) | function getUserTokenFromRequest(req: Request): string | null { function relativeRedirect (line 120) | function relativeRedirect(path: string, status: number = 302): Response { function validateAdminUser (line 124) | async function validateAdminUser(req: Request): Promise { function validateAdminOrApiKey (line 136) | async function validateAdminOrApiKey( FILE: theonefile_verse/src/templates.ts function getPasswordResetHtml (line 1083) | function getPasswordResetHtml(token: string): string { FILE: theonefile_verse/src/tokens.ts type TokenEntry (line 5) | interface TokenEntry { constant ADMIN_TOKENS (line 10) | const ADMIN_TOKENS = new Map(); constant INSTANCE_TOKENS (line 11) | const INSTANCE_TOKENS = new Map(); constant TOKEN_EXPIRY (line 12) | const TOKEN_EXPIRY = 7 * 24 * 60 * 60 * 1000; constant ROOM_ACCESS_TOKENS (line 14) | const ROOM_ACCESS_TOKENS = new Map(); constant WS_TOKEN_EXPIRY (line 25) | const WS_TOKEN_EXPIRY = 5 * 60 * 1000; function generateWsSessionToken (line 27) | async function generateWsSessionToken(roomId: string, collabUserId: stri... function validateWsSessionToken (line 44) | async function validateWsSessionToken(token: string, roomId: string): Pr... constant MAX_WS_SESSION_TOKENS (line 64) | const MAX_WS_SESSION_TOKENS = 50000; function generateRoomAccessToken (line 66) | function generateRoomAccessToken(roomId: string): string { function validateRoomAccessToken (line 78) | function validateRoomAccessToken(token: string, roomId: string): boolean { function generateAdminToken (line 85) | async function generateAdminToken(): Promise { function validateAdminToken (line 96) | async function validateAdminToken(token: string): Promise { function generateInstanceToken (line 115) | function generateInstanceToken(): string { function validateInstanceToken (line 121) | function validateInstanceToken(token: string): boolean { function storeInstanceToken (line 131) | function storeInstanceToken(token: string): void { function removeInstanceToken (line 135) | function removeInstanceToken(token: string): void { function removeAdminToken (line 139) | async function removeAdminToken(token: string): Promise { function hashApiKey (line 143) | async function hashApiKey(key: string): Promise { function validateApiKey (line 150) | async function validateApiKey(key: string): Promise { function startTokenCleanupIntervals (line 159) | function startTokenCleanupIntervals(): void { function cleanupExpiredRoomTokens (line 201) | function cleanupExpiredRoomTokens(): void { FILE: theonefile_verse/src/websocket.ts type WsData (line 10) | interface WsData { method open (line 19) | open(ws: any) { method message (line 34) | async message(ws: any, message: any) { method close (line 208) | close(ws: any) {