{ "source_base_path": "/home/runner/work/EchoHub/EchoHub/docs", "xrefmap": "xrefmap.yml", "files": [ { "type": "Resource", "output": { "resource": { "relative_path": "index.json" } } }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.AppOrchestrator.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.AppOrchestrator.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.AppOrchestrator", "Summary": "
Central orchestrator for the EchoHub TUI client.\nWires UI events to service calls and connection events to UI updates.
\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Commands.CommandHandler.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Commands.CommandHandler.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Commands.CommandHandler", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Commands.CommandResult.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Commands.CommandResult.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Commands.CommandResult", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Commands.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Commands.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Commands", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Config.AccountPreset.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Config.AccountPreset.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Config.AccountPreset", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Config.ClientConfig.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Config.ClientConfig.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Config.ClientConfig", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Config.ConfigManager.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Config.ConfigManager.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Config.ConfigManager", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Config.NotificationConfig.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Config.NotificationConfig.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Config.NotificationConfig", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Config.SavedServer.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Config.SavedServer.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Config.SavedServer", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Config.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Config.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Config", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.ApiClient.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Services.ApiClient.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Services.ApiClient", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.AsyncRunner.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Services.AsyncRunner.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Services.AsyncRunner", "Summary": "Eliminates repeated Task.Run/try/catch/app.Invoke(ShowError) boilerplate.\nRuns async work on a background thread and routes exceptions to the UI.
\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.AudioPlaybackService.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Services.AudioPlaybackService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Services.AudioPlaybackService", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.BackupInfo.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Services.BackupInfo.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Services.BackupInfo", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.ChannelPasswordRequiredException.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Services.ChannelPasswordRequiredException.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Services.ChannelPasswordRequiredException", "Summary": "Thrown when joining a channel fails because a password is required or incorrect.\nThe UI catches this to prompt the user and retry.
\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.ClientEncryptionService.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Services.ClientEncryptionService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Services.ClientEncryptionService", "Summary": "Client-side encryption service. Uses the same AES-256-GCM format as the server\nso messages are encrypted end-to-end between client and server.
\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.ClipboardFiles.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Services.ClipboardFiles.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Services.ClipboardFiles", "Summary": "Reads file paths that live on the OS clipboard as a file list (e.g. after copying a file in\nExplorer/Finder/Nautilus), which terminals do not paste as text. Lets Ctrl+V attach a copied\nfile directly instead of requiring the user to paste a raw path.
\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.EchoHubConnection.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Services.EchoHubConnection.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Services.EchoHubConnection", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.FolderPickResult.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Services.FolderPickResult.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Services.FolderPickResult", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.JoinOutcome.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Services.JoinOutcome.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Services.JoinOutcome", "Summary": "Result of joining a channel: decrypted history plus, for end-to-end encrypted\nchannels, the key envelope needed to unlock the room content key.
\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.NativeFolderPicker.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Services.NativeFolderPicker.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Services.NativeFolderPicker", "Summary": "Opens the OS-native folder chooser (Windows Explorer, macOS Finder, Linux GTK/KDE) by shelling\nout, so the TUI doesn't need a GUI toolkit reference. Returns
One file to upload as part of a message. For end-to-end encrypted channels the stream\nis already ciphertext,
Ensures the application's directory is on the system PATH so users\ncan run 'echohub' from any terminal session.
\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.PickerOutcome.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Services.PickerOutcome.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Services.PickerOutcome", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.RoomKeyStore.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Services.RoomKeyStore.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Services.RoomKeyStore", "Summary": "Holds room content keys for end-to-end encrypted channels: in-memory for the\nactive session, persisted per-server in the client config (like saved sessions)\nso users don't retype the passphrase every launch. Keys never leave this machine.
\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.UpdateBackupService.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Services.UpdateBackupService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Services.UpdateBackupService", "Summary": "Manages pre-update backups and rollback restoration for the auto-updater.\nBackup location: ~/.echohub/update-backup/
\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.UpdateChecker.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Services.UpdateChecker.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Services.UpdateChecker", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Services.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Services", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Themes.Theme.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Themes.Theme.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Themes.Theme", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Themes.ThemeColors.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Themes.ThemeColors.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Themes.ThemeColors", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Themes.ThemeManager.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Themes.ThemeManager.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Themes.ThemeManager", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Themes.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Themes.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Themes", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Chat.ChatColors.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Chat.ChatColors.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Chat.ChatColors", "Summary": "Shared color attributes for chat rendering (timestamps, system messages).
\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Chat.ChatLine.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Chat.ChatLine.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Chat.ChatLine", "Summary": "A single line in the chat, composed of colored segments.
\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Chat.ChatListSource.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Chat.ChatListSource.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Chat.ChatListSource", "Summary": "Custom list data source for chat messages with per-segment coloring.
\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Chat.ChatMessageManager.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Chat.ChatMessageManager.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Chat.ChatMessageManager", "Summary": "Owns chat message storage, formatting, and mutation.\nFires
A colored text segment within a chat line.
\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Chat.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Chat.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Chat", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Dialogs.AudioPlayerDialog.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Dialogs.AudioPlayerDialog.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Dialogs.AudioPlayerDialog", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Dialogs.ChannelPasswordDialog.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Dialogs.ChannelPasswordDialog.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Dialogs.ChannelPasswordDialog", "Summary": "Prompts for a channel password when joining a protected channel.\nReturns the entered password, or null if the user cancels.
\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Dialogs.ConnectDialog.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Dialogs.ConnectDialog.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Dialogs.ConnectDialog", "Summary": "A Terminal.Gui dialog for entering server connection and authentication details.\nIncludes a saved servers selector when saved servers are available.
\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Dialogs.ConnectDialogResult.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Dialogs.ConnectDialogResult.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Dialogs.ConnectDialogResult", "Summary": "Result returned from the connect dialog.
\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Dialogs.CreateChannelDialog.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Dialogs.CreateChannelDialog.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Dialogs.CreateChannelDialog", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Dialogs.CreateChannelResult.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Dialogs.CreateChannelResult.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Dialogs.CreateChannelResult", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Dialogs.ProfileAction.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Dialogs.ProfileAction.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Dialogs.ProfileAction", "Summary": "Action selected by the user in their own profile dialog.
\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Dialogs.ProfileEditDialog.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Dialogs.ProfileEditDialog.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Dialogs.ProfileEditDialog", "Summary": "A Terminal.Gui dialog for editing the user's profile (display name, bio, nickname color).
\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Dialogs.ProfileEditResult.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Dialogs.ProfileEditResult.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Dialogs.ProfileEditResult", "Summary": "Result returned from the profile edit dialog.
\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Dialogs.ProfileViewDialog.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Dialogs.ProfileViewDialog.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Dialogs.ProfileViewDialog", "Summary": "Dialog for viewing a user's server profile.\nShows Edit Profile / Set Status buttons when viewing own profile.
\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Dialogs.SearchDialog.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Dialogs.SearchDialog.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Dialogs.SearchDialog", "Summary": "Command-palette style search dialog (Ctrl+K) for navigating channels and triggering app actions.
\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Dialogs.SearchResult.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Dialogs.SearchResult.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Dialogs.SearchResult", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Dialogs.SearchResultType.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Dialogs.SearchResultType.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Dialogs.SearchResultType", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Dialogs.StatusDialog.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Dialogs.StatusDialog.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Dialogs.StatusDialog", "Summary": "A Terminal.Gui dialog for setting the user's status and status message.
\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Dialogs.StatusDialogResult.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Dialogs.StatusDialogResult.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Dialogs.StatusDialogResult", "Summary": "Result returned from the status dialog.
\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Dialogs.UpdateConfirmDialog.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Dialogs.UpdateConfirmDialog.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Dialogs.UpdateConfirmDialog", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Dialogs.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Dialogs.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Dialogs", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Helpers.DroppedFileParser.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Helpers.DroppedFileParser.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Helpers.DroppedFileParser", "Summary": "Recognizes a dragged-and-dropped file (or files) that a terminal delivers into the input as an\nabsolute path. Terminals differ: some paste the whole path at once, others send it character by\ncharacter; either way this checks whether the current input text resolves to existing file(s).
\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Helpers.EmojiHelper.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Helpers.EmojiHelper.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Helpers.EmojiHelper", "Summary": "Converts emoji grapheme clusters to text shortcodes for safe TUI rendering.\nTerminal width calculations for emoji are unreliable across different terminals,\nso we replace them with fixed-width ASCII shortcodes for display only.
\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Helpers.HexColorHelper.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Helpers.HexColorHelper.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Helpers.HexColorHelper", "Summary": "Helper to parse hex colors to Terminal.Gui Attributes.
\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Helpers.NickColorHelper.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Helpers.NickColorHelper.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Helpers.NickColorHelper", "Summary": "Deterministic per-nick colors for users who haven't picked a nickname color.\nThe same nick always maps to the same palette entry (classic IRC client behavior),\nso a busy channel stays scannable without any configuration.
\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Helpers.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Helpers.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Helpers", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.ListSources.ChannelListSource.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.ListSources.ChannelListSource.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.ListSources.ChannelListSource", "Summary": "Custom list data source for colored channel list rendering.\nActive channel gets a > indicator, unread channels are bright with a count badge.
\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.ListSources.SearchListSource.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.ListSources.SearchListSource.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.ListSources.SearchListSource", "Summary": "List data source for the search dialog with filtering and colored rendering.
\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.ListSources.UserListSource.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.ListSources.UserListSource.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.ListSources.UserListSource", "Summary": "Custom list data source for the online users panel with per-user nickname colors.
\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.ListSources.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.ListSources.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.ListSources", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.MainWindow.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.MainWindow.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.MainWindow", "Summary": "Main Terminal.Gui window for the EchoHub chat client.
\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Constants.HubConstants.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Constants.HubConstants.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Constants.HubConstants", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Constants.ValidationConstants.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Constants.ValidationConstants.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Constants.ValidationConstants", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Constants.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Constants.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Constants", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Contracts.ChannelListItem.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Contracts.ChannelListItem.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Contracts.ChannelListItem", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Contracts.IChannelService.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Contracts.IChannelService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Contracts.IChannelService", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Contracts.IChatBroadcaster.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Contracts.IChatBroadcaster.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Contracts.IChatBroadcaster", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Contracts.IChatService.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Contracts.IChatService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Contracts.IChatService", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Contracts.IEchoHubClient.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Contracts.IEchoHubClient.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Contracts.IEchoHubClient", "Summary": "Methods the server can invoke on connected clients.
\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Contracts.IMessageEncryptionService.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Contracts.IMessageEncryptionService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Contracts.IMessageEncryptionService", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Contracts.IUserService.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Contracts.IUserService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Contracts.IUserService", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Contracts.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Contracts.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Contracts", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.ApiResponse-1.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.ApiResponse-1.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.ApiResponseA file attached to a message.
Public crypto metadata for a channel — enough for a client to derive its join\ncredential from a passphrase. Never includes the wrapped room key.
\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.ChannelDto.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.ChannelDto.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.ChannelDto", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.ChannelError.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.ChannelError.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.ChannelError", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.ChannelMetaDto.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.ChannelMetaDto.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.ChannelMetaDto", "Summary": "Human-facing summary of a channel (the /meta command). For encrypted channels the\nserver still knows these figures — count, timestamps, and stored blob sizes — even though it\ncannot read the content itself.
Passphrase change for an encrypted channel: the client proves knowledge of the old\npassphrase (old auth key), then supplies the re-wrapped room key under the new one.
\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.SendMessageRequest.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.SendMessageRequest.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.SendMessageRequest", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.SendUrlRequest.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.SendUrlRequest.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.SendUrlRequest", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.ServerStatusDto.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.ServerStatusDto.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.ServerStatusDto", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.UpdateProfileRequest.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.UpdateProfileRequest.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.UpdateProfileRequest", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.UpdateStatusRequest.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.UpdateStatusRequest.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.UpdateStatusRequest", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.UpdateTopicRequest.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.UpdateTopicRequest.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.UpdateTopicRequest", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.UserDto.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.UserDto.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.UserDto", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.UserError.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.UserError.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.UserError", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.UserOperationResult.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.UserOperationResult.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.UserOperationResult", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.UserPresenceDto.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.UserPresenceDto.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.UserPresenceDto", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.UserProfileDto.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.UserProfileDto.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.UserProfileDto", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Models.Attachment.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Models.Attachment.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Models.Attachment", "Summary": "A file attached to a message (image, audio, or any file). A message may carry\nzero or more attachments alongside its text content (Discord-style).
\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Models.AttachmentKind.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Models.AttachmentKind.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Models.AttachmentKind", "Summary": "The kind of a message attachment. Determines how the client renders it\n(ASCII preview for images, a play affordance for audio, a download line for files).
\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Models.Channel.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Models.Channel.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Models.Channel", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Models.ChannelMembership.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Models.ChannelMembership.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Models.ChannelMembership", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Models.Message.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Models.Message.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Models.Message", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Models.MessageType.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Models.MessageType.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Models.MessageType", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Models.RefreshToken.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Models.RefreshToken.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Models.RefreshToken", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Models.ServerRole.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Models.ServerRole.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Models.ServerRole", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Models.User.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Models.User.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Models.User", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Models.UserStatus.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Models.UserStatus.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Models.UserStatus", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Models.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Models.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Models", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Security.RoomCrypto.DerivedKeys.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Security.RoomCrypto.DerivedKeys.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Security.RoomCrypto.DerivedKeys", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Security.RoomCrypto.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Security.RoomCrypto.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Security.RoomCrypto", "Summary": "Client-side envelope encryption for private (end-to-end encrypted) channels.
\nDesign: at creation the client generates a random 256-bit room content key (RCK)\nthat encrypts all room content. The RCK is stored on the server wrapped\n(AES-GCM encrypted) by a key derived from the passphrase, next to a BCrypt hash\nof a separately derived auth key used as the join gate. The passphrase, the\nkey-encryption key, and the RCK never leave the client, so the server can gate\njoins and count/measure content without being able to read it. Changing the\npassphrase only re-wraps the RCK — history is never re-encrypted.
\nDerivation: PBKDF2-SHA256(passphrase, salt, 210000 iterations) → 64 bytes;\nfirst 32 bytes are the auth key (sent to the server as lowercase hex),\nlast 32 bytes are the key-encryption key (never sent).
\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Security.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Security.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Security", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Services.FileValidationHelper.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Services.FileValidationHelper.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Services.FileValidationHelper", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Services.ImageToAsciiService.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Services.ImageToAsciiService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Services.ImageToAsciiService", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Services.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Services.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Services", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server-irc/EchoHub.Server.Irc.IrcBroadcaster.yml", "output": { ".html": { "relative_path": "api/server-irc/EchoHub.Server.Irc.IrcBroadcaster.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Irc.IrcBroadcaster", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server-irc/EchoHub.Server.Irc.IrcClientConnection.yml", "output": { ".html": { "relative_path": "api/server-irc/EchoHub.Server.Irc.IrcClientConnection.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Irc.IrcClientConnection", "Summary": "Manages a single IRC client TCP connection.
\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server-irc/EchoHub.Server.Irc.IrcCommandHandler.yml", "output": { ".html": { "relative_path": "api/server-irc/EchoHub.Server.Irc.IrcCommandHandler.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Irc.IrcCommandHandler", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server-irc/EchoHub.Server.Irc.IrcGatewayService.yml", "output": { ".html": { "relative_path": "api/server-irc/EchoHub.Server.Irc.IrcGatewayService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Irc.IrcGatewayService", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server-irc/EchoHub.Server.Irc.IrcMessage.yml", "output": { ".html": { "relative_path": "api/server-irc/EchoHub.Server.Irc.IrcMessage.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Irc.IrcMessage", "Summary": "Parsed representation of an IRC protocol line.\nFormat: [:prefix] COMMAND [params...] [:trailing]
\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server-irc/EchoHub.Server.Irc.IrcMessageFormatter.yml", "output": { ".html": { "relative_path": "api/server-irc/EchoHub.Server.Irc.IrcMessageFormatter.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Irc.IrcMessageFormatter", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server-irc/EchoHub.Server.Irc.IrcNumericReply.yml", "output": { ".html": { "relative_path": "api/server-irc/EchoHub.Server.Irc.IrcNumericReply.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Irc.IrcNumericReply", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server-irc/EchoHub.Server.Irc.IrcOptions.yml", "output": { ".html": { "relative_path": "api/server-irc/EchoHub.Server.Irc.IrcOptions.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Irc.IrcOptions", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server-irc/EchoHub.Server.Irc.IrcServiceExtensions.yml", "output": { ".html": { "relative_path": "api/server-irc/EchoHub.Server.Irc.IrcServiceExtensions.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Irc.IrcServiceExtensions", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server-irc/EchoHub.Server.Irc.yml", "output": { ".html": { "relative_path": "api/server-irc/EchoHub.Server.Irc.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Irc", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Auth.JwtTokenService.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Auth.JwtTokenService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Auth.JwtTokenService", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Auth.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Auth.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Auth", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Config.UploadLimits.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Config.UploadLimits.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Config.UploadLimits", "Summary": "Admin-configurable upload limits, bound from the Uploads configuration section.\nSizes are expressed in megabytes in configuration; the *Bytes accessors convert them\nfor enforcement. Every default mirrors Uploads section preserves the historical built-in limits.
Persists and exposes the EchoHubSpace directory claim — the opaque token issued on first\nregistration and the row's stable ServerId. Also surfaces ephemeral registration\nstatus (success/failure code, conflicting hosts) for operator-facing endpoints.
Persistence uses atomic write (tmp + rename). Treat the file contents as a secret.
\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Services.FileCleanupService.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Services.FileCleanupService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Services.FileCleanupService", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Services.FileStorageService.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Services.FileStorageService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Services.FileStorageService", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Services.LinkEmbedService.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Services.LinkEmbedService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Services.LinkEmbedService", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Services.MessageEncryptionService.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Services.MessageEncryptionService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Services.MessageEncryptionService", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Services.MuteExpirationService.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Services.MuteExpirationService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Services.MuteExpirationService", "Summary": "Background service that periodically unmutes users whose timed mute has expired.
\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Services.PresenceTracker.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Services.PresenceTracker.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Services.PresenceTracker", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Services.RegistrationStatus.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Services.RegistrationStatus.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Services.RegistrationStatus", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Services.ServerDirectoryService.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Services.ServerDirectoryService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Services.ServerDirectoryService", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Services.SignalRBroadcaster.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Services.SignalRBroadcaster.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Services.SignalRBroadcaster", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Services.UserService.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Services.UserService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Services.UserService", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Services.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Services.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Services", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Setup.DataMigrationService.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Setup.DataMigrationService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Setup.DataMigrationService", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Setup.DatabaseSetup.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Setup.DatabaseSetup.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Setup.DatabaseSetup", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Setup.FirstRunSetup.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Setup.FirstRunSetup.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Setup.FirstRunSetup", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Setup.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Setup.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Setup", "Summary": null }, { "type": "Conceptual", "source_relative_path": "api/client-articles/index.md", "output": { ".html": { "relative_path": "api/client-articles/index.html" } }, "version": "" }, { "type": "Toc", "source_relative_path": "api/client-articles/toc.yml", "output": { ".html": { "relative_path": "api/client-articles/toc.html" }, ".json": { "relative_path": "api/client-articles/toc.json" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "api/core-articles/index.md", "output": { ".html": { "relative_path": "api/core-articles/index.html" } }, "version": "" }, { "type": "Toc", "source_relative_path": "api/core-articles/toc.yml", "output": { ".html": { "relative_path": "api/core-articles/toc.html" }, ".json": { "relative_path": "api/core-articles/toc.json" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "api/index.md", "output": { ".html": { "relative_path": "api/index.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "api/server-articles/index.md", "output": { ".html": { "relative_path": "api/server-articles/index.html" } }, "version": "" }, { "type": "Toc", "source_relative_path": "api/server-articles/toc.yml", "output": { ".html": { "relative_path": "api/server-articles/toc.html" }, ".json": { "relative_path": "api/server-articles/toc.json" } }, "version": "" }, { "type": "Toc", "source_relative_path": "api/toc.yml", "output": { ".html": { "relative_path": "api/toc.html" }, ".json": { "relative_path": "api/toc.json" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "articles/architecture.md", "output": { ".html": { "relative_path": "articles/architecture.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "articles/configuration.md", "output": { ".html": { "relative_path": "articles/configuration.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "articles/docker.md", "output": { ".html": { "relative_path": "articles/docker.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "articles/encrypted-rooms.md", "output": { ".html": { "relative_path": "articles/encrypted-rooms.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "articles/encryption.md", "output": { ".html": { "relative_path": "articles/encryption.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "articles/getting-started.md", "output": { ".html": { "relative_path": "articles/getting-started.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "articles/notification-sounds.md", "output": { ".html": { "relative_path": "articles/notification-sounds.html" } }, "version": "" }, { "type": "Toc", "source_relative_path": "articles/toc.yml", "output": { ".html": { "relative_path": "articles/toc.html" }, ".json": { "relative_path": "articles/toc.json" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "changelog/index.md", "output": { ".html": { "relative_path": "changelog/index.html" } }, "version": "" }, { "type": "Toc", "source_relative_path": "changelog/toc.yml", "output": { ".html": { "relative_path": "changelog/toc.html" }, ".json": { "relative_path": "changelog/toc.json" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "changelog/v0.1.0.md", "output": { ".html": { "relative_path": "changelog/v0.1.0.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "changelog/v0.1.1.md", "output": { ".html": { "relative_path": "changelog/v0.1.1.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "changelog/v0.2.0.md", "output": { ".html": { "relative_path": "changelog/v0.2.0.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "changelog/v0.2.1.md", "output": { ".html": { "relative_path": "changelog/v0.2.1.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "changelog/v0.2.10.md", "output": { ".html": { "relative_path": "changelog/v0.2.10.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "changelog/v0.2.11.md", "output": { ".html": { "relative_path": "changelog/v0.2.11.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "changelog/v0.2.12.md", "output": { ".html": { "relative_path": "changelog/v0.2.12.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "changelog/v0.2.13.md", "output": { ".html": { "relative_path": "changelog/v0.2.13.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "changelog/v0.2.2.md", "output": { ".html": { "relative_path": "changelog/v0.2.2.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "changelog/v0.2.3.md", "output": { ".html": { "relative_path": "changelog/v0.2.3.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "changelog/v0.2.4.md", "output": { ".html": { "relative_path": "changelog/v0.2.4.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "changelog/v0.2.5.md", "output": { ".html": { "relative_path": "changelog/v0.2.5.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "changelog/v0.2.6.md", "output": { ".html": { "relative_path": "changelog/v0.2.6.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "changelog/v0.2.7.md", "output": { ".html": { "relative_path": "changelog/v0.2.7.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "changelog/v0.2.8.md", "output": { ".html": { "relative_path": "changelog/v0.2.8.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "changelog/v0.2.9.md", "output": { ".html": { "relative_path": "changelog/v0.2.9.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "flows/authentication.md", "output": { ".html": { "relative_path": "flows/authentication.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "flows/channels.md", "output": { ".html": { "relative_path": "flows/channels.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "flows/connection.md", "output": { ".html": { "relative_path": "flows/connection.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "flows/flows.md", "output": { ".html": { "relative_path": "flows/flows.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "flows/media.md", "output": { ".html": { "relative_path": "flows/media.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "flows/messaging.md", "output": { ".html": { "relative_path": "flows/messaging.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "flows/moderation.md", "output": { ".html": { "relative_path": "flows/moderation.html" } }, "version": "" }, { "type": "Toc", "source_relative_path": "flows/toc.yml", "output": { ".html": { "relative_path": "flows/toc.html" }, ".json": { "relative_path": "flows/toc.json" } }, "version": "" }, { "type": "Resource", "source_relative_path": "images/hue_icon.svg", "output": { "resource": { "relative_path": "images/hue_icon.svg" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "index.md", "output": { ".html": { "relative_path": "index.html" } }, "version": "" }, { "type": "Toc", "source_relative_path": "toc.yml", "output": { ".html": { "relative_path": "toc.html" }, ".json": { "relative_path": "toc.json" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "todo.md", "output": { ".html": { "relative_path": "todo.html" } }, "version": "" } ], "groups": [ { "xrefmap": "xrefmap.yml" } ] }