namespace MijnBesluit.Protocol;
/// De acties die de SocketServer kent. Eén vaste lijst, gedeeld door server en app.
public static class SocketActions
{
public const string Ping = "ping";
/// Vraagt een inlogcode aan voor een bestaand account.
public const string RequestLoginCode = "auth.request-code";
/// Logt in met het e-mailadres en de ontvangen code.
public const string SignIn = "auth.signin";
public const string SignOut = "auth.signout";
/// Vraagt een code aan om een nieuw account te maken; naam wordt meegestuurd.
public const string RequestRegisterCode = "auth.request-register-code";
/// Maakt het account aan met de ontvangen code.
public const string Register = "auth.register";
public const string AcceptInvitation = "auth.accept-invitation";
/// Je eigen profiel opvragen en wijzigen.
public const string OwnProfile = "account.profile";
public const string SaveOwnProfile = "account.profile-save";
/// Je inlogadres wijzigen: eerst een code naar het nieuwe adres, dan bevestigen.
public const string RequestEmailChange = "account.email-request";
public const string ConfirmEmailChange = "account.email-confirm";
///
/// Je account opheffen: eerst opvragen wát er weggaat, dan een code per e-mail, dan weg.
/// Onomkeerbaar, en daarom in drie stappen. Zie AccountOpheffenService.
///
public const string DeleteAccountSummary = "account.delete-summary";
public const string RequestDeleteAccount = "account.delete-request";
public const string ConfirmDeleteAccount = "account.delete-confirm";
///
/// Heeft iemand een profiel voor mij aangemaakt? En het antwoord daarop: dat ben ik, of dat
/// ben ik niet. Zie docs/Identiteit.md.
///
public const string NotesAboutMe = "account.notes";
public const string AcceptNote = "account.notes-accept";
public const string DeclineNote = "account.notes-decline";
/// Alles wat het beginscherm nodig heeft, in één keer.
public const string Overview = "home.overview";
/// Hoeveel dagen vooruit het overzicht kijkt.
public const string SetLookahead = "home.lookahead";
/// De advertentie die nu op het overzicht mag staan, of geen.
public const string Advertentie = "home.advertentie";
public const string ListFamilies = "family.list";
public const string ListMembers = "family.members";
public const string AddMember = "family.add-member";
public const string UpdatePerson = "family.update-person";
public const string Invite = "family.invite";
public const string RemoveMember = "family.remove-member";
public const string VaultList = "vault.list";
public const string VaultOpen = "vault.open";
public const string VaultSave = "vault.save";
public const string VaultUpdate = "vault.update";
public const string VaultDelete = "vault.delete";
// Bijlagen. Die gaan in stukken over de lijn, want een socketbericht is begrensd.
public const string FileBegin = "vault.file-begin";
public const string FileChunk = "vault.file-chunk";
public const string FileEnd = "vault.file-end";
public const string FileCancel = "vault.file-cancel";
public const string FileList = "vault.file-list";
public const string FileRead = "vault.file-read";
public const string FileDelete = "vault.file-delete";
public const string Inbox = "message.inbox";
public const string Outbox = "message.outbox";
public const string MessageRead = "message.read";
public const string MessageReadSent = "message.read-sent";
public const string MessageCompose = "message.compose";
public const string MessageDraft = "message.draft";
public const string MessageUpdate = "message.update";
public const string MessageWithdraw = "message.withdraw";
public const string MessageDelete = "message.delete";
public const string DeclareDeath = "legacy.declare-death";
public const string ObjectDeath = "legacy.object";
public const string LegacyStatus = "legacy.status";
public const string AppointManager = "legacy.appoint-manager";
public const string RemoveManager = "legacy.remove-manager";
public const string FileListPerson = "vault.file-list-person";
public const string FileListMessage = "vault.file-list-message";
public const string FileProfilePhoto = "vault.file-profile";
/// Kluisitems die iemand rechtstreeks met jou heeft gedeeld, vooraf te bespreken.
public const string VaultSharedWithMe = "vault.shared-with-me";
///
/// De soorten kluisitems die deze gebruiker te zien krijgt, met bij een door de beheerder gemaakte
/// soort de velden van het formulier. Een oudere server kent dit niet; de app valt dan terug op
/// de ingebouwde lijst.
///
public const string VaultCategories = "vault.categories";
///
/// Eén soort op nummer, met zijn velden, ook als die soort niet meer wordt aangeboden. Voor het
/// lezen van het item van een ander, waar de lijst van jezelf de soort niet hoeft te bevatten.
///
public const string VaultCategory = "vault.category";
/// Nalatenschappen die aan jou zijn toevertrouwd, en wat daarvan is vrijgegeven.
public const string LegacyEntrusted = "legacy.entrusted";
public const string LegacyEntrustedItems = "legacy.entrusted-items";
public const string LegacyManagers = "legacy.managers";
public const string LegacySettings = "legacy.settings";
/// Het toestel aanmelden voor meldingen, met het kenmerk van Firebase of APNs.
public const string RegisterDevice = "push.register";
public const string UnregisterDevice = "push.unregister";
/// Een proefmelding naar je eigen toestellen, om te zien of de hele keten werkt.
public const string TestDevice = "push.proef";
}
/// Een verzoek van de app aan de SocketServer.
public class SocketRequest
{
/// Meegestuurd in het antwoord, zodat de app verzoek en antwoord kan koppelen.
public string RequestId { get; set; } = Guid.NewGuid().ToString("N");
/// Eén van .
public string Action { get; set; } = string.Empty;
/// Sessietoken uit . Leeg bij inloggen en registreren.
public string? Token { get; set; }
/// De gegevens van dit verzoek, als JSON-object.
public System.Text.Json.JsonElement? Payload { get; set; }
/// Versie van het protocol, zodat oude apps herkend kunnen worden.
public int Version { get; set; } = 1;
/// Vrije aanduiding van het toestel, komt in het logboek terecht.
public string? Device { get; set; }
}
/// Het antwoord van de SocketServer.
public class SocketResponse
{
public string RequestId { get; set; } = string.Empty;
/// "Ok" of "Error" — dezelfde opzet als de bestaande RenH-socketserver.
public string Status { get; set; } = "Ok";
/// Melding in gewone taal, bedoeld om aan de gebruiker te tonen.
public string? Message { get; set; }
///
/// Een kort kenmerk van de fout, voor de app om op te reageren. Alleen ingevuld waar de app
/// iets anders moet doen dan de melding tonen - zie . Op de
/// melding zelf sturen zou werken tot iemand er een komma in zet.
///
public string? Code { get; set; }
/// Resultaat van de actie, als JSON.
public object? Payload { get; set; }
public static SocketResponse Ok(string requestId, object? payload = null) =>
new() { RequestId = requestId, Status = "Ok", Payload = payload };
public static SocketResponse Error(string requestId, string message, string? code = null) =>
new() { RequestId = requestId, Status = "Error", Message = message, Code = code };
}
/// Fouten waar de app zelf iets mee moet, los van de tekst die de gebruiker leest.
public static class SocketFoutcodes
{
///
/// Het token is niet meer geldig. De app hoort dan niet "opnieuw proberen" aan te bieden -
/// dat lukt nooit - maar het bewaarde token weg te gooien en naar het inlogscherm te gaan.
///
public const string SessieVerlopen = "sessie-verlopen";
}