{ "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.ClipboardImage.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Services.ClipboardImage.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Services.ClipboardImage", "Summary": "

Reads raw image data from the OS clipboard (e.g. an image copied from a browser, or a\nWin+Shift+S screenshot), which terminals cannot paste as text. Always returns PNG bytes:\nclipboard PNG data is passed through, clipboard bitmaps (CF_DIB) are re-encoded.

\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 \nwhen no native dialog can run, so callers can fall back to a configured path.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.NotificationSoundService.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Services.NotificationSoundService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Services.NotificationSoundService", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.OutgoingAttachment.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Services.OutgoingAttachment.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Services.OutgoingAttachment", "Summary": "

One file to upload as part of a message. For end-to-end encrypted channels the stream\nis already ciphertext, is set (image/audio/file), and\n holds the room-encrypted ASCII art for images.\nFor normal channels only and are set.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.PathSetup.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Services.PathSetup.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Services.PathSetup", "Summary": "

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.RoomKeyProtector.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Services.RoomKeyProtector.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Services.RoomKeyProtector", "Summary": "

Encrypts cached room content keys at rest so the client config never holds them as\nplain base64. Windows uses DPAPI (current-user scope, format prefix "dp1:"). On other\nplatforms the keys are AES-GCM encrypted with a per-user master key file stored next\nto the config with 0600 permissions (prefix "k1:") — without an OS keychain that is\nfile-permission-level protection, not zero-knowledge: anyone who can read both the\nconfig and the key file can recover the room keys. Values with no recognized prefix\nare legacy plain-base64 keys from older clients; they load once and are re-encrypted.\nThe room passphrase itself is never stored in any form.

\n" }, { "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\nand are encrypted at rest by . Also tracks which\nchannels are known to be end-to-end encrypted, so senders can refuse to emit\nplaintext into a room whose key isn't cached yet.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.RoomLockedException.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Services.RoomLockedException.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Services.RoomLockedException", "Summary": "

Thrown when sending into an end-to-end encrypted channel whose room key isn't cached:\nwithout the key the message would leave the client as plaintext, which must never happen.

\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 when a channel's message list is modified\nso the UI layer can refresh.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Chat.ChatSegment.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Chat.ChatSegment.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Chat.ChatSegment", "Summary": "

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.ApiResponse", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.ApiResponse.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.ApiResponse.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.ApiResponse", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.AssignRoleRequest.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.AssignRoleRequest.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.AssignRoleRequest", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.AttachmentDto.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.AttachmentDto.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.AttachmentDto", "Summary": "

A file attached to a message. holds the color-tag art for\nimages (null otherwise). For end-to-end encrypted channels the content behind\n and the preview are ciphertext the server cannot read.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.AvatarUploadResponse.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.AvatarUploadResponse.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.AvatarUploadResponse", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.BanRequest.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.BanRequest.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.BanRequest", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.ChannelCryptoDto.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.ChannelCryptoDto.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.ChannelCryptoDto", "Summary": "

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. is the sum of stored\nattachment blob sizes plus message text length, so it is an estimate, not an exact on-disk total.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.ChannelOperationResult.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.ChannelOperationResult.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.ChannelOperationResult", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.CreateChannelRequest.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.CreateChannelRequest.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.CreateChannelRequest", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.EmbedDto.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.EmbedDto.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.EmbedDto", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.EncryptionKeyResponse.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.EncryptionKeyResponse.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.EncryptionKeyResponse", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.ErrorResponse.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.ErrorResponse.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.ErrorResponse", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.JoinChannelResult.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.JoinChannelResult.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.JoinChannelResult", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.KickRequest.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.KickRequest.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.KickRequest", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.LoginRequest.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.LoginRequest.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.LoginRequest", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.LoginResponse.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.LoginResponse.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.LoginResponse", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.MessageDto.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.MessageDto.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.MessageDto", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.MuteRequest.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.MuteRequest.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.MuteRequest", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.PaginatedResponse-1.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.PaginatedResponse-1.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.PaginatedResponse", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.RefreshRequest.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.RefreshRequest.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.RefreshRequest", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.RegisterRequest.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.RegisterRequest.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.RegisterRequest", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.RekeyChannelRequest.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.RekeyChannelRequest.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.RekeyChannelRequest", "Summary": "

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.

\n

Design: 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.

\n

Derivation: 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 so an absent or partial\nUploads section preserves the historical built-in limits.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Config.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Config.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Config", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Controllers.AuthController.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Controllers.AuthController.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Controllers.AuthController", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Controllers.ChannelsController.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Controllers.ChannelsController.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Controllers.ChannelsController", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Controllers.FilesController.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Controllers.FilesController.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Controllers.FilesController", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Controllers.ModerationController.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Controllers.ModerationController.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Controllers.ModerationController", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Controllers.ServerController.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Controllers.ServerController.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Controllers.ServerController", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Controllers.UsersController.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Controllers.UsersController.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Controllers.UsersController", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Controllers.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Controllers.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Controllers", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Data.EchoHubDbContext.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Data.EchoHubDbContext.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Data.EchoHubDbContext", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Data.Migrations.AddAttachmentFileSize.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Data.Migrations.AddAttachmentFileSize.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Data.Migrations.AddAttachmentFileSize", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Data.Migrations.AddChannelEncryptionEnvelope.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Data.Migrations.AddChannelEncryptionEnvelope.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Data.Migrations.AddChannelEncryptionEnvelope", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Data.Migrations.AddChannelIsPublic.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Data.Migrations.AddChannelIsPublic.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Data.Migrations.AddChannelIsPublic", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Data.Migrations.AddChannelMembership.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Data.Migrations.AddChannelMembership.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Data.Migrations.AddChannelMembership", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Data.Migrations.AddChannelPasswordHash.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Data.Migrations.AddChannelPasswordHash.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Data.Migrations.AddChannelPasswordHash", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Data.Migrations.AddEncryptionSupport.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Data.Migrations.AddEncryptionSupport.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Data.Migrations.AddEncryptionSupport", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Data.Migrations.AddMessageAttachments.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Data.Migrations.AddMessageAttachments.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Data.Migrations.AddMessageAttachments", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Data.Migrations.AddMessageEmbed.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Data.Migrations.AddMessageEmbed.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Data.Migrations.AddMessageEmbed", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Data.Migrations.AddModerationRoles.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Data.Migrations.AddModerationRoles.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Data.Migrations.AddModerationRoles", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Data.Migrations.InitialCreate.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Data.Migrations.InitialCreate.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Data.Migrations.InitialCreate", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Data.Migrations.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Data.Migrations.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Data.Migrations", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Data.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Data.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Data", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Hubs.ChatHub.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Hubs.ChatHub.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Hubs.ChatHub", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Hubs.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Hubs.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Hubs", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Services.ChannelService.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Services.ChannelService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Services.ChannelService", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Services.ChatService.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Services.ChatService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Services.ChatService", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Services.DirectoryClaimStore.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Services.DirectoryClaimStore.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Services.DirectoryClaimStore", "Summary": "

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.

\n

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/irc-gateway.md", "output": { ".html": { "relative_path": "articles/irc-gateway.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "articles/messages-and-attachments.md", "output": { ".html": { "relative_path": "articles/messages-and-attachments.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "articles/moderation.md", "output": { ".html": { "relative_path": "articles/moderation.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": "articles/tui-guide.md", "output": { ".html": { "relative_path": "articles/tui-guide.html" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/index.html", "output": { "resource": { "relative_path": "auriondocs/index.html" } }, "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.14.md", "output": { ".html": { "relative_path": "changelog/v0.2.14.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" } ] }