Freeze DodoSSH.Contracts v0.1 (M1)

The second M1 gate. This assembly, not the OpenAPI document, is the client's contract,
so PublicApiAnalyzers now tracks all 540 public members: a renamed DTO property becomes
a build error rather than a runtime deserialisation failure on someone's laptop.

Contract surface:
- EncryptedPayload carries the envelope plus the KeyGeneration and AadVersion columns
  needed to recompute AAD, since AAD is derived from the row rather than transmitted.
- Sync: push with per-operation status (Applied/Conflict/Forbidden/Invalid/Duplicate) so
  one stale item cannot block a whole offline queue; a Conflict returns the server's row
  for client-side three-way merge, because the server cannot merge ciphertext.
- Enrollment: KeyStatement whose hash becomes the OIDC nonce, so the identity provider
  signs over the public keys and this server cannot fabricate a key for a user who never
  enrolled.
- Meta and .well-known configuration: capability negotiation instead of URL versioning,
  which is what a self-hosted product needs when client and server upgrade independently.
- SyncPlaintextFields deliberately has no label or name field. ACL admin runs client-side
  where names can be decrypted, so the server never needs a searchable title.

Two design problems found by writing the tests rather than assuming:
- Hand-constructing JsonSerializerOptions and merely pointing its resolver at the context
  silently discards every source-generated setting. JsonSerializerDefaults.Web replaces
  NumberHandling.Strict with AllowReadingFromString, so "1" would be accepted where 1 is
  meant — invisible until two implementations disagree. Callers now use ResponseOptions or
  StrictRequestOptions; StrictRequestOptions is derived by copying so it cannot drift.
- StrictRequestOptions had a static-initialisation cycle: it read the generated Default
  property from the same type's initialiser and got null. Now lazy.

Requests reject unmapped members so a client typo is a 400; responses tolerate them so an
older client can read a newer server. Enums cross the wire as strings, so reordering one
cannot silently reinterpret stored data.

Also: excluded source-generator output from PublicApiAnalyzers. The JSON generator emits a
public member per serialisable type, which would have added hundreds of mechanical entries
and drowned the ones describing the actual wire contract. And disabled MA0048's
one-type-per-file rule: splitting SyncPullRequest from SyncPullResponse makes a reviewer
open two files to understand one endpoint.

Verified: 0 warnings, 95 tests pass, format clean.
This commit is contained in:
2026-07-28 13:28:02 +02:00
parent b15af836a3
commit 06d04b490b
12 changed files with 1472 additions and 0 deletions
@@ -1,5 +1,415 @@
#nullable enable
DodoSSH.Contracts.DirectoryEntry
DodoSSH.Contracts.DirectoryEntry.<Clone>$() -> DodoSSH.Contracts.DirectoryEntry!
DodoSSH.Contracts.DirectoryEntry.Deconstruct(out System.Guid UserId, out string? Email, out string? DisplayName, out byte[]! EncryptionPublicKey, out byte[]! SigningPublicKey, out byte[]! Fingerprint, out int KeyGeneration, out long KeyLogSequence) -> void
DodoSSH.Contracts.DirectoryEntry.DirectoryEntry(System.Guid UserId, string? Email, string? DisplayName, byte[]! EncryptionPublicKey, byte[]! SigningPublicKey, byte[]! Fingerprint, int KeyGeneration, long KeyLogSequence) -> void
DodoSSH.Contracts.DirectoryEntry.DisplayName.get -> string?
DodoSSH.Contracts.DirectoryEntry.DisplayName.init -> void
DodoSSH.Contracts.DirectoryEntry.Email.get -> string?
DodoSSH.Contracts.DirectoryEntry.Email.init -> void
DodoSSH.Contracts.DirectoryEntry.EncryptionPublicKey.get -> byte[]!
DodoSSH.Contracts.DirectoryEntry.EncryptionPublicKey.init -> void
DodoSSH.Contracts.DirectoryEntry.Equals(DodoSSH.Contracts.DirectoryEntry? other) -> bool
DodoSSH.Contracts.DirectoryEntry.Fingerprint.get -> byte[]!
DodoSSH.Contracts.DirectoryEntry.Fingerprint.init -> void
DodoSSH.Contracts.DirectoryEntry.KeyGeneration.get -> int
DodoSSH.Contracts.DirectoryEntry.KeyGeneration.init -> void
DodoSSH.Contracts.DirectoryEntry.KeyLogSequence.get -> long
DodoSSH.Contracts.DirectoryEntry.KeyLogSequence.init -> void
DodoSSH.Contracts.DirectoryEntry.SigningPublicKey.get -> byte[]!
DodoSSH.Contracts.DirectoryEntry.SigningPublicKey.init -> void
DodoSSH.Contracts.DirectoryEntry.UserId.get -> System.Guid
DodoSSH.Contracts.DirectoryEntry.UserId.init -> void
DodoSSH.Contracts.DodoSshConfiguration
DodoSSH.Contracts.DodoSshConfiguration.<Clone>$() -> DodoSSH.Contracts.DodoSshConfiguration!
DodoSSH.Contracts.DodoSshConfiguration.ApiBaseUrl.get -> System.Uri!
DodoSSH.Contracts.DodoSshConfiguration.ApiBaseUrl.init -> void
DodoSSH.Contracts.DodoSshConfiguration.Deconstruct(out System.Uri! ApiBaseUrl, out DodoSSH.Contracts.OidcConfiguration! Oidc, out DodoSSH.Contracts.RelayConfiguration! Relay) -> void
DodoSSH.Contracts.DodoSshConfiguration.DodoSshConfiguration(System.Uri! ApiBaseUrl, DodoSSH.Contracts.OidcConfiguration! Oidc, DodoSSH.Contracts.RelayConfiguration! Relay) -> void
DodoSSH.Contracts.DodoSshConfiguration.Equals(DodoSSH.Contracts.DodoSshConfiguration? other) -> bool
DodoSSH.Contracts.DodoSshConfiguration.Oidc.get -> DodoSSH.Contracts.OidcConfiguration!
DodoSSH.Contracts.DodoSshConfiguration.Oidc.init -> void
DodoSSH.Contracts.DodoSshConfiguration.Relay.get -> DodoSSH.Contracts.RelayConfiguration!
DodoSSH.Contracts.DodoSshConfiguration.Relay.init -> void
DodoSSH.Contracts.DodoSshJsonContext
DodoSSH.Contracts.EncryptedPayload
DodoSSH.Contracts.EncryptedPayload.<Clone>$() -> DodoSSH.Contracts.EncryptedPayload!
DodoSSH.Contracts.EncryptedPayload.AadVersion.get -> byte
DodoSSH.Contracts.EncryptedPayload.AadVersion.init -> void
DodoSSH.Contracts.EncryptedPayload.Deconstruct(out byte[]! Envelope, out uint KeyGeneration, out byte AadVersion) -> void
DodoSSH.Contracts.EncryptedPayload.EncryptedPayload(byte[]! Envelope, uint KeyGeneration, byte AadVersion) -> void
DodoSSH.Contracts.EncryptedPayload.Envelope.get -> byte[]!
DodoSSH.Contracts.EncryptedPayload.Envelope.init -> void
DodoSSH.Contracts.EncryptedPayload.Equals(DodoSSH.Contracts.EncryptedPayload? other) -> bool
DodoSSH.Contracts.EncryptedPayload.KeyGeneration.get -> uint
DodoSSH.Contracts.EncryptedPayload.KeyGeneration.init -> void
DodoSSH.Contracts.EnrollmentRequest
DodoSSH.Contracts.EnrollmentRequest.<Clone>$() -> DodoSSH.Contracts.EnrollmentRequest!
DodoSSH.Contracts.EnrollmentRequest.Deconstruct(out DodoSSH.Contracts.KeyStatement! Statement, out byte[]! StatementSignature, out string! IdentityProviderToken, out byte[]! WrappedPrivateKey, out DodoSSH.Contracts.KdfParameters! KdfParameters, out byte[]? DevicePublicKey, out byte[]? RecoveryWrappedPrivateKey, out DodoSSH.Contracts.KdfParameters? RecoveryKdfParameters) -> void
DodoSSH.Contracts.EnrollmentRequest.DevicePublicKey.get -> byte[]?
DodoSSH.Contracts.EnrollmentRequest.DevicePublicKey.init -> void
DodoSSH.Contracts.EnrollmentRequest.EnrollmentRequest(DodoSSH.Contracts.KeyStatement! Statement, byte[]! StatementSignature, string! IdentityProviderToken, byte[]! WrappedPrivateKey, DodoSSH.Contracts.KdfParameters! KdfParameters, byte[]? DevicePublicKey, byte[]? RecoveryWrappedPrivateKey, DodoSSH.Contracts.KdfParameters? RecoveryKdfParameters) -> void
DodoSSH.Contracts.EnrollmentRequest.Equals(DodoSSH.Contracts.EnrollmentRequest? other) -> bool
DodoSSH.Contracts.EnrollmentRequest.IdentityProviderToken.get -> string!
DodoSSH.Contracts.EnrollmentRequest.IdentityProviderToken.init -> void
DodoSSH.Contracts.EnrollmentRequest.KdfParameters.get -> DodoSSH.Contracts.KdfParameters!
DodoSSH.Contracts.EnrollmentRequest.KdfParameters.init -> void
DodoSSH.Contracts.EnrollmentRequest.RecoveryKdfParameters.get -> DodoSSH.Contracts.KdfParameters?
DodoSSH.Contracts.EnrollmentRequest.RecoveryKdfParameters.init -> void
DodoSSH.Contracts.EnrollmentRequest.RecoveryWrappedPrivateKey.get -> byte[]?
DodoSSH.Contracts.EnrollmentRequest.RecoveryWrappedPrivateKey.init -> void
DodoSSH.Contracts.EnrollmentRequest.Statement.get -> DodoSSH.Contracts.KeyStatement!
DodoSSH.Contracts.EnrollmentRequest.Statement.init -> void
DodoSSH.Contracts.EnrollmentRequest.StatementSignature.get -> byte[]!
DodoSSH.Contracts.EnrollmentRequest.StatementSignature.init -> void
DodoSSH.Contracts.EnrollmentRequest.WrappedPrivateKey.get -> byte[]!
DodoSSH.Contracts.EnrollmentRequest.WrappedPrivateKey.init -> void
DodoSSH.Contracts.EnrollmentResponse
DodoSSH.Contracts.EnrollmentResponse.<Clone>$() -> DodoSSH.Contracts.EnrollmentResponse!
DodoSSH.Contracts.EnrollmentResponse.Deconstruct(out System.Guid UserId, out int KeyGeneration, out byte[]! Fingerprint, out System.Guid PersonalVaultId, out System.Guid? DeviceId, out long KeyLogSequence) -> void
DodoSSH.Contracts.EnrollmentResponse.DeviceId.get -> System.Guid?
DodoSSH.Contracts.EnrollmentResponse.DeviceId.init -> void
DodoSSH.Contracts.EnrollmentResponse.EnrollmentResponse(System.Guid UserId, int KeyGeneration, byte[]! Fingerprint, System.Guid PersonalVaultId, System.Guid? DeviceId, long KeyLogSequence) -> void
DodoSSH.Contracts.EnrollmentResponse.Equals(DodoSSH.Contracts.EnrollmentResponse? other) -> bool
DodoSSH.Contracts.EnrollmentResponse.Fingerprint.get -> byte[]!
DodoSSH.Contracts.EnrollmentResponse.Fingerprint.init -> void
DodoSSH.Contracts.EnrollmentResponse.KeyGeneration.get -> int
DodoSSH.Contracts.EnrollmentResponse.KeyGeneration.init -> void
DodoSSH.Contracts.EnrollmentResponse.KeyLogSequence.get -> long
DodoSSH.Contracts.EnrollmentResponse.KeyLogSequence.init -> void
DodoSSH.Contracts.EnrollmentResponse.PersonalVaultId.get -> System.Guid
DodoSSH.Contracts.EnrollmentResponse.PersonalVaultId.init -> void
DodoSSH.Contracts.EnrollmentResponse.UserId.get -> System.Guid
DodoSSH.Contracts.EnrollmentResponse.UserId.init -> void
DodoSSH.Contracts.KdfParameters
DodoSSH.Contracts.KdfParameters.<Clone>$() -> DodoSSH.Contracts.KdfParameters!
DodoSSH.Contracts.KdfParameters.Algorithm.get -> string!
DodoSSH.Contracts.KdfParameters.Algorithm.init -> void
DodoSSH.Contracts.KdfParameters.Deconstruct(out string! Algorithm, out byte[]! Salt, out int MemoryKibibytes, out int Passes, out int Parallelism) -> void
DodoSSH.Contracts.KdfParameters.Equals(DodoSSH.Contracts.KdfParameters? other) -> bool
DodoSSH.Contracts.KdfParameters.KdfParameters(string! Algorithm, byte[]! Salt, int MemoryKibibytes, int Passes, int Parallelism) -> void
DodoSSH.Contracts.KdfParameters.MemoryKibibytes.get -> int
DodoSSH.Contracts.KdfParameters.MemoryKibibytes.init -> void
DodoSSH.Contracts.KdfParameters.Parallelism.get -> int
DodoSSH.Contracts.KdfParameters.Parallelism.init -> void
DodoSSH.Contracts.KdfParameters.Passes.get -> int
DodoSSH.Contracts.KdfParameters.Passes.init -> void
DodoSSH.Contracts.KdfParameters.Salt.get -> byte[]!
DodoSSH.Contracts.KdfParameters.Salt.init -> void
DodoSSH.Contracts.KeyStatement
DodoSSH.Contracts.KeyStatement.<Clone>$() -> DodoSSH.Contracts.KeyStatement!
DodoSSH.Contracts.KeyStatement.CreatedAt.get -> System.DateTimeOffset
DodoSSH.Contracts.KeyStatement.CreatedAt.init -> void
DodoSSH.Contracts.KeyStatement.Deconstruct(out int Version, out string! Issuer, out string! Subject, out string? Email, out byte[]! EncryptionPublicKey, out byte[]! SigningPublicKey, out int KeyGeneration, out System.DateTimeOffset CreatedAt, out string! DeviceName) -> void
DodoSSH.Contracts.KeyStatement.DeviceName.get -> string!
DodoSSH.Contracts.KeyStatement.DeviceName.init -> void
DodoSSH.Contracts.KeyStatement.Email.get -> string?
DodoSSH.Contracts.KeyStatement.Email.init -> void
DodoSSH.Contracts.KeyStatement.EncryptionPublicKey.get -> byte[]!
DodoSSH.Contracts.KeyStatement.EncryptionPublicKey.init -> void
DodoSSH.Contracts.KeyStatement.Equals(DodoSSH.Contracts.KeyStatement? other) -> bool
DodoSSH.Contracts.KeyStatement.Issuer.get -> string!
DodoSSH.Contracts.KeyStatement.Issuer.init -> void
DodoSSH.Contracts.KeyStatement.KeyGeneration.get -> int
DodoSSH.Contracts.KeyStatement.KeyGeneration.init -> void
DodoSSH.Contracts.KeyStatement.KeyStatement(int Version, string! Issuer, string! Subject, string? Email, byte[]! EncryptionPublicKey, byte[]! SigningPublicKey, int KeyGeneration, System.DateTimeOffset CreatedAt, string! DeviceName) -> void
DodoSSH.Contracts.KeyStatement.SigningPublicKey.get -> byte[]!
DodoSSH.Contracts.KeyStatement.SigningPublicKey.init -> void
DodoSSH.Contracts.KeyStatement.Subject.get -> string!
DodoSSH.Contracts.KeyStatement.Subject.init -> void
DodoSSH.Contracts.KeyStatement.Version.get -> int
DodoSSH.Contracts.KeyStatement.Version.init -> void
DodoSSH.Contracts.MeResponse
DodoSSH.Contracts.MeResponse.<Clone>$() -> DodoSSH.Contracts.MeResponse!
DodoSSH.Contracts.MeResponse.Deconstruct(out System.Guid UserId, out string! Issuer, out string! Subject, out string? Email, out string? DisplayName, out bool EnrollmentRequired, out int? KeyGeneration, out byte[]? WrappedPrivateKey, out DodoSSH.Contracts.KdfParameters? KdfParameters, out System.Collections.Generic.IReadOnlyList<DodoSSH.Contracts.VaultSummary!>! Vaults) -> void
DodoSSH.Contracts.MeResponse.DisplayName.get -> string?
DodoSSH.Contracts.MeResponse.DisplayName.init -> void
DodoSSH.Contracts.MeResponse.Email.get -> string?
DodoSSH.Contracts.MeResponse.Email.init -> void
DodoSSH.Contracts.MeResponse.EnrollmentRequired.get -> bool
DodoSSH.Contracts.MeResponse.EnrollmentRequired.init -> void
DodoSSH.Contracts.MeResponse.Equals(DodoSSH.Contracts.MeResponse? other) -> bool
DodoSSH.Contracts.MeResponse.Issuer.get -> string!
DodoSSH.Contracts.MeResponse.Issuer.init -> void
DodoSSH.Contracts.MeResponse.KdfParameters.get -> DodoSSH.Contracts.KdfParameters?
DodoSSH.Contracts.MeResponse.KdfParameters.init -> void
DodoSSH.Contracts.MeResponse.KeyGeneration.get -> int?
DodoSSH.Contracts.MeResponse.KeyGeneration.init -> void
DodoSSH.Contracts.MeResponse.MeResponse(System.Guid UserId, string! Issuer, string! Subject, string? Email, string? DisplayName, bool EnrollmentRequired, int? KeyGeneration, byte[]? WrappedPrivateKey, DodoSSH.Contracts.KdfParameters? KdfParameters, System.Collections.Generic.IReadOnlyList<DodoSSH.Contracts.VaultSummary!>! Vaults) -> void
DodoSSH.Contracts.MeResponse.Subject.get -> string!
DodoSSH.Contracts.MeResponse.Subject.init -> void
DodoSSH.Contracts.MeResponse.UserId.get -> System.Guid
DodoSSH.Contracts.MeResponse.UserId.init -> void
DodoSSH.Contracts.MeResponse.Vaults.get -> System.Collections.Generic.IReadOnlyList<DodoSSH.Contracts.VaultSummary!>!
DodoSSH.Contracts.MeResponse.Vaults.init -> void
DodoSSH.Contracts.MeResponse.WrappedPrivateKey.get -> byte[]?
DodoSSH.Contracts.MeResponse.WrappedPrivateKey.init -> void
DodoSSH.Contracts.MetaResponse
DodoSSH.Contracts.MetaResponse.<Clone>$() -> DodoSSH.Contracts.MetaResponse!
DodoSSH.Contracts.MetaResponse.ApiVersions.get -> System.Collections.Generic.IReadOnlyList<int>!
DodoSSH.Contracts.MetaResponse.ApiVersions.init -> void
DodoSSH.Contracts.MetaResponse.CryptoSpecVersion.get -> int
DodoSSH.Contracts.MetaResponse.CryptoSpecVersion.init -> void
DodoSSH.Contracts.MetaResponse.Deconstruct(out string! ServerVersion, out System.Collections.Generic.IReadOnlyList<int>! ApiVersions, out int SyncProtocolVersion, out int CryptoSpecVersion, out System.Collections.Generic.IReadOnlyList<string!>! Features, out string? MinClientVersion, out int MaxOperationsPerPush, out long MaxPayloadBytes, out long MaxItemPayloadBytes) -> void
DodoSSH.Contracts.MetaResponse.Equals(DodoSSH.Contracts.MetaResponse? other) -> bool
DodoSSH.Contracts.MetaResponse.Features.get -> System.Collections.Generic.IReadOnlyList<string!>!
DodoSSH.Contracts.MetaResponse.Features.init -> void
DodoSSH.Contracts.MetaResponse.MaxItemPayloadBytes.get -> long
DodoSSH.Contracts.MetaResponse.MaxItemPayloadBytes.init -> void
DodoSSH.Contracts.MetaResponse.MaxOperationsPerPush.get -> int
DodoSSH.Contracts.MetaResponse.MaxOperationsPerPush.init -> void
DodoSSH.Contracts.MetaResponse.MaxPayloadBytes.get -> long
DodoSSH.Contracts.MetaResponse.MaxPayloadBytes.init -> void
DodoSSH.Contracts.MetaResponse.MetaResponse(string! ServerVersion, System.Collections.Generic.IReadOnlyList<int>! ApiVersions, int SyncProtocolVersion, int CryptoSpecVersion, System.Collections.Generic.IReadOnlyList<string!>! Features, string? MinClientVersion, int MaxOperationsPerPush, long MaxPayloadBytes, long MaxItemPayloadBytes) -> void
DodoSSH.Contracts.MetaResponse.MinClientVersion.get -> string?
DodoSSH.Contracts.MetaResponse.MinClientVersion.init -> void
DodoSSH.Contracts.MetaResponse.ServerVersion.get -> string!
DodoSSH.Contracts.MetaResponse.ServerVersion.init -> void
DodoSSH.Contracts.MetaResponse.SyncProtocolVersion.get -> int
DodoSSH.Contracts.MetaResponse.SyncProtocolVersion.init -> void
DodoSSH.Contracts.OidcConfiguration
DodoSSH.Contracts.OidcConfiguration.<Clone>$() -> DodoSSH.Contracts.OidcConfiguration!
DodoSSH.Contracts.OidcConfiguration.Authority.get -> System.Uri!
DodoSSH.Contracts.OidcConfiguration.Authority.init -> void
DodoSSH.Contracts.OidcConfiguration.ClientId.get -> string!
DodoSSH.Contracts.OidcConfiguration.ClientId.init -> void
DodoSSH.Contracts.OidcConfiguration.Deconstruct(out System.Uri! Authority, out string! ClientId, out System.Collections.Generic.IReadOnlyList<string!>! Scopes, out string! LoopbackRedirectPattern) -> void
DodoSSH.Contracts.OidcConfiguration.Equals(DodoSSH.Contracts.OidcConfiguration? other) -> bool
DodoSSH.Contracts.OidcConfiguration.LoopbackRedirectPattern.get -> string!
DodoSSH.Contracts.OidcConfiguration.LoopbackRedirectPattern.init -> void
DodoSSH.Contracts.OidcConfiguration.OidcConfiguration(System.Uri! Authority, string! ClientId, System.Collections.Generic.IReadOnlyList<string!>! Scopes, string! LoopbackRedirectPattern) -> void
DodoSSH.Contracts.OidcConfiguration.Scopes.get -> System.Collections.Generic.IReadOnlyList<string!>!
DodoSSH.Contracts.OidcConfiguration.Scopes.init -> void
DodoSSH.Contracts.ProblemCodes
DodoSSH.Contracts.RelayConfiguration
DodoSSH.Contracts.RelayConfiguration.<Clone>$() -> DodoSSH.Contracts.RelayConfiguration!
DodoSSH.Contracts.RelayConfiguration.Deconstruct(out bool Enabled, out System.Uri? WebSocketUrl) -> void
DodoSSH.Contracts.RelayConfiguration.Enabled.get -> bool
DodoSSH.Contracts.RelayConfiguration.Enabled.init -> void
DodoSSH.Contracts.RelayConfiguration.Equals(DodoSSH.Contracts.RelayConfiguration? other) -> bool
DodoSSH.Contracts.RelayConfiguration.RelayConfiguration(bool Enabled, System.Uri? WebSocketUrl) -> void
DodoSSH.Contracts.RelayConfiguration.WebSocketUrl.get -> System.Uri?
DodoSSH.Contracts.RelayConfiguration.WebSocketUrl.init -> void
DodoSSH.Contracts.RelaySessionCloseReason
DodoSSH.Contracts.RelaySessionCloseReason.ClientClosed = 1 -> DodoSSH.Contracts.RelaySessionCloseReason
DodoSSH.Contracts.RelaySessionCloseReason.DurationLimit = 4 -> DodoSSH.Contracts.RelaySessionCloseReason
DodoSSH.Contracts.RelaySessionCloseReason.Error = 7 -> DodoSSH.Contracts.RelaySessionCloseReason
DodoSSH.Contracts.RelaySessionCloseReason.IdleTimeout = 3 -> DodoSSH.Contracts.RelaySessionCloseReason
DodoSSH.Contracts.RelaySessionCloseReason.ServerShutdown = 5 -> DodoSSH.Contracts.RelaySessionCloseReason
DodoSSH.Contracts.RelaySessionCloseReason.TargetClosed = 2 -> DodoSSH.Contracts.RelaySessionCloseReason
DodoSSH.Contracts.RelaySessionCloseReason.TargetUnreachable = 6 -> DodoSSH.Contracts.RelaySessionCloseReason
DodoSSH.Contracts.RelaySessionCloseReason.Unspecified = 0 -> DodoSSH.Contracts.RelaySessionCloseReason
DodoSSH.Contracts.RelaySessionSummary
DodoSSH.Contracts.RelaySessionSummary.<Clone>$() -> DodoSSH.Contracts.RelaySessionSummary!
DodoSSH.Contracts.RelaySessionSummary.BytesClientToTarget.get -> long
DodoSSH.Contracts.RelaySessionSummary.BytesClientToTarget.init -> void
DodoSSH.Contracts.RelaySessionSummary.BytesTargetToClient.get -> long
DodoSSH.Contracts.RelaySessionSummary.BytesTargetToClient.init -> void
DodoSSH.Contracts.RelaySessionSummary.CloseReason.get -> DodoSSH.Contracts.RelaySessionCloseReason
DodoSSH.Contracts.RelaySessionSummary.CloseReason.init -> void
DodoSSH.Contracts.RelaySessionSummary.Deconstruct(out System.Guid SessionId, out System.Guid HostId, out string! TargetHost, out int TargetPort, out System.DateTimeOffset StartedAt, out System.DateTimeOffset? EndedAt, out long BytesClientToTarget, out long BytesTargetToClient, out DodoSSH.Contracts.RelaySessionCloseReason CloseReason) -> void
DodoSSH.Contracts.RelaySessionSummary.EndedAt.get -> System.DateTimeOffset?
DodoSSH.Contracts.RelaySessionSummary.EndedAt.init -> void
DodoSSH.Contracts.RelaySessionSummary.Equals(DodoSSH.Contracts.RelaySessionSummary? other) -> bool
DodoSSH.Contracts.RelaySessionSummary.HostId.get -> System.Guid
DodoSSH.Contracts.RelaySessionSummary.HostId.init -> void
DodoSSH.Contracts.RelaySessionSummary.RelaySessionSummary(System.Guid SessionId, System.Guid HostId, string! TargetHost, int TargetPort, System.DateTimeOffset StartedAt, System.DateTimeOffset? EndedAt, long BytesClientToTarget, long BytesTargetToClient, DodoSSH.Contracts.RelaySessionCloseReason CloseReason) -> void
DodoSSH.Contracts.RelaySessionSummary.SessionId.get -> System.Guid
DodoSSH.Contracts.RelaySessionSummary.SessionId.init -> void
DodoSSH.Contracts.RelaySessionSummary.StartedAt.get -> System.DateTimeOffset
DodoSSH.Contracts.RelaySessionSummary.StartedAt.init -> void
DodoSSH.Contracts.RelaySessionSummary.TargetHost.get -> string!
DodoSSH.Contracts.RelaySessionSummary.TargetHost.init -> void
DodoSSH.Contracts.RelaySessionSummary.TargetPort.get -> int
DodoSSH.Contracts.RelaySessionSummary.TargetPort.init -> void
DodoSSH.Contracts.RelayTicketRequest
DodoSSH.Contracts.RelayTicketRequest.<Clone>$() -> DodoSSH.Contracts.RelayTicketRequest!
DodoSSH.Contracts.RelayTicketRequest.Deconstruct(out System.Guid HostId, out System.Guid? PortForwardId) -> void
DodoSSH.Contracts.RelayTicketRequest.Equals(DodoSSH.Contracts.RelayTicketRequest? other) -> bool
DodoSSH.Contracts.RelayTicketRequest.HostId.get -> System.Guid
DodoSSH.Contracts.RelayTicketRequest.HostId.init -> void
DodoSSH.Contracts.RelayTicketRequest.PortForwardId.get -> System.Guid?
DodoSSH.Contracts.RelayTicketRequest.PortForwardId.init -> void
DodoSSH.Contracts.RelayTicketRequest.RelayTicketRequest(System.Guid HostId, System.Guid? PortForwardId) -> void
DodoSSH.Contracts.RelayTicketResponse
DodoSSH.Contracts.RelayTicketResponse.<Clone>$() -> DodoSSH.Contracts.RelayTicketResponse!
DodoSSH.Contracts.RelayTicketResponse.Deconstruct(out string! Ticket, out System.Uri! WebSocketUrl, out string! SubProtocol, out System.Guid SessionId, out System.DateTimeOffset ExpiresAt) -> void
DodoSSH.Contracts.RelayTicketResponse.Equals(DodoSSH.Contracts.RelayTicketResponse? other) -> bool
DodoSSH.Contracts.RelayTicketResponse.ExpiresAt.get -> System.DateTimeOffset
DodoSSH.Contracts.RelayTicketResponse.ExpiresAt.init -> void
DodoSSH.Contracts.RelayTicketResponse.RelayTicketResponse(string! Ticket, System.Uri! WebSocketUrl, string! SubProtocol, System.Guid SessionId, System.DateTimeOffset ExpiresAt) -> void
DodoSSH.Contracts.RelayTicketResponse.SessionId.get -> System.Guid
DodoSSH.Contracts.RelayTicketResponse.SessionId.init -> void
DodoSSH.Contracts.RelayTicketResponse.SubProtocol.get -> string!
DodoSSH.Contracts.RelayTicketResponse.SubProtocol.init -> void
DodoSSH.Contracts.RelayTicketResponse.Ticket.get -> string!
DodoSSH.Contracts.RelayTicketResponse.Ticket.init -> void
DodoSSH.Contracts.RelayTicketResponse.WebSocketUrl.get -> System.Uri!
DodoSSH.Contracts.RelayTicketResponse.WebSocketUrl.init -> void
DodoSSH.Contracts.SyncChange
DodoSSH.Contracts.SyncChange.<Clone>$() -> DodoSSH.Contracts.SyncChange!
DodoSSH.Contracts.SyncChange.ChangeSequence.get -> long
DodoSSH.Contracts.SyncChange.ChangeSequence.init -> void
DodoSSH.Contracts.SyncChange.Deconstruct(out DodoSSH.Contracts.SyncEntityType EntityType, out System.Guid EntityId, out DodoSSH.Contracts.SyncOperation Operation, out int Version, out long ChangeSequence, out DodoSSH.Contracts.EncryptedPayload? Payload, out DodoSSH.Contracts.SyncPlaintextFields? PlaintextFields, out System.DateTimeOffset UpdatedAt) -> void
DodoSSH.Contracts.SyncChange.EntityId.get -> System.Guid
DodoSSH.Contracts.SyncChange.EntityId.init -> void
DodoSSH.Contracts.SyncChange.EntityType.get -> DodoSSH.Contracts.SyncEntityType
DodoSSH.Contracts.SyncChange.EntityType.init -> void
DodoSSH.Contracts.SyncChange.Equals(DodoSSH.Contracts.SyncChange? other) -> bool
DodoSSH.Contracts.SyncChange.Operation.get -> DodoSSH.Contracts.SyncOperation
DodoSSH.Contracts.SyncChange.Operation.init -> void
DodoSSH.Contracts.SyncChange.Payload.get -> DodoSSH.Contracts.EncryptedPayload?
DodoSSH.Contracts.SyncChange.Payload.init -> void
DodoSSH.Contracts.SyncChange.PlaintextFields.get -> DodoSSH.Contracts.SyncPlaintextFields?
DodoSSH.Contracts.SyncChange.PlaintextFields.init -> void
DodoSSH.Contracts.SyncChange.SyncChange(DodoSSH.Contracts.SyncEntityType EntityType, System.Guid EntityId, DodoSSH.Contracts.SyncOperation Operation, int Version, long ChangeSequence, DodoSSH.Contracts.EncryptedPayload? Payload, DodoSSH.Contracts.SyncPlaintextFields? PlaintextFields, System.DateTimeOffset UpdatedAt) -> void
DodoSSH.Contracts.SyncChange.UpdatedAt.get -> System.DateTimeOffset
DodoSSH.Contracts.SyncChange.UpdatedAt.init -> void
DodoSSH.Contracts.SyncChange.Version.get -> int
DodoSSH.Contracts.SyncChange.Version.init -> void
DodoSSH.Contracts.SyncEntityType
DodoSSH.Contracts.SyncEntityType.Credential = 2 -> DodoSSH.Contracts.SyncEntityType
DodoSSH.Contracts.SyncEntityType.Host = 1 -> DodoSSH.Contracts.SyncEntityType
DodoSSH.Contracts.SyncEntityType.HostCredential = 7 -> DodoSSH.Contracts.SyncEntityType
DodoSSH.Contracts.SyncEntityType.HostGroup = 4 -> DodoSSH.Contracts.SyncEntityType
DodoSSH.Contracts.SyncEntityType.HostTag = 6 -> DodoSSH.Contracts.SyncEntityType
DodoSSH.Contracts.SyncEntityType.KnownHostKey = 10 -> DodoSSH.Contracts.SyncEntityType
DodoSSH.Contracts.SyncEntityType.PortForward = 9 -> DodoSSH.Contracts.SyncEntityType
DodoSSH.Contracts.SyncEntityType.Snippet = 8 -> DodoSSH.Contracts.SyncEntityType
DodoSSH.Contracts.SyncEntityType.SshKey = 3 -> DodoSSH.Contracts.SyncEntityType
DodoSSH.Contracts.SyncEntityType.Tag = 5 -> DodoSSH.Contracts.SyncEntityType
DodoSSH.Contracts.SyncEntityType.Unspecified = 0 -> DodoSSH.Contracts.SyncEntityType
DodoSSH.Contracts.SyncOperation
DodoSSH.Contracts.SyncOperation.Delete = 2 -> DodoSSH.Contracts.SyncOperation
DodoSSH.Contracts.SyncOperation.Unspecified = 0 -> DodoSSH.Contracts.SyncOperation
DodoSSH.Contracts.SyncOperation.Upsert = 1 -> DodoSSH.Contracts.SyncOperation
DodoSSH.Contracts.SyncOperationStatus
DodoSSH.Contracts.SyncOperationStatus.Applied = 1 -> DodoSSH.Contracts.SyncOperationStatus
DodoSSH.Contracts.SyncOperationStatus.Conflict = 2 -> DodoSSH.Contracts.SyncOperationStatus
DodoSSH.Contracts.SyncOperationStatus.Duplicate = 5 -> DodoSSH.Contracts.SyncOperationStatus
DodoSSH.Contracts.SyncOperationStatus.Forbidden = 3 -> DodoSSH.Contracts.SyncOperationStatus
DodoSSH.Contracts.SyncOperationStatus.Invalid = 4 -> DodoSSH.Contracts.SyncOperationStatus
DodoSSH.Contracts.SyncOperationStatus.Unspecified = 0 -> DodoSSH.Contracts.SyncOperationStatus
DodoSSH.Contracts.SyncPlaintextFields
DodoSSH.Contracts.SyncPlaintextFields.<Clone>$() -> DodoSSH.Contracts.SyncPlaintextFields!
DodoSSH.Contracts.SyncPlaintextFields.Deconstruct(out bool RelayEnabled, out string? Hostname, out int? Port, out System.Guid? GroupId, out System.Guid? ParentId, out System.Guid? RelatedId, out int? Kind, out string? PublicKeyFingerprint) -> void
DodoSSH.Contracts.SyncPlaintextFields.Equals(DodoSSH.Contracts.SyncPlaintextFields? other) -> bool
DodoSSH.Contracts.SyncPlaintextFields.GroupId.get -> System.Guid?
DodoSSH.Contracts.SyncPlaintextFields.GroupId.init -> void
DodoSSH.Contracts.SyncPlaintextFields.Hostname.get -> string?
DodoSSH.Contracts.SyncPlaintextFields.Hostname.init -> void
DodoSSH.Contracts.SyncPlaintextFields.Kind.get -> int?
DodoSSH.Contracts.SyncPlaintextFields.Kind.init -> void
DodoSSH.Contracts.SyncPlaintextFields.ParentId.get -> System.Guid?
DodoSSH.Contracts.SyncPlaintextFields.ParentId.init -> void
DodoSSH.Contracts.SyncPlaintextFields.Port.get -> int?
DodoSSH.Contracts.SyncPlaintextFields.Port.init -> void
DodoSSH.Contracts.SyncPlaintextFields.PublicKeyFingerprint.get -> string?
DodoSSH.Contracts.SyncPlaintextFields.PublicKeyFingerprint.init -> void
DodoSSH.Contracts.SyncPlaintextFields.RelatedId.get -> System.Guid?
DodoSSH.Contracts.SyncPlaintextFields.RelatedId.init -> void
DodoSSH.Contracts.SyncPlaintextFields.RelayEnabled.get -> bool
DodoSSH.Contracts.SyncPlaintextFields.RelayEnabled.init -> void
DodoSSH.Contracts.SyncPlaintextFields.SyncPlaintextFields(bool RelayEnabled = false, string? Hostname = null, int? Port = null, System.Guid? GroupId = null, System.Guid? ParentId = null, System.Guid? RelatedId = null, int? Kind = null, string? PublicKeyFingerprint = null) -> void
DodoSSH.Contracts.SyncPullRequest
DodoSSH.Contracts.SyncPullRequest.<Clone>$() -> DodoSSH.Contracts.SyncPullRequest!
DodoSSH.Contracts.SyncPullRequest.Cursor.get -> string?
DodoSSH.Contracts.SyncPullRequest.Cursor.init -> void
DodoSSH.Contracts.SyncPullRequest.Deconstruct(out string? Cursor, out int? Limit, out System.Collections.Generic.IReadOnlyList<DodoSSH.Contracts.SyncEntityType>? EntityTypes) -> void
DodoSSH.Contracts.SyncPullRequest.EntityTypes.get -> System.Collections.Generic.IReadOnlyList<DodoSSH.Contracts.SyncEntityType>?
DodoSSH.Contracts.SyncPullRequest.EntityTypes.init -> void
DodoSSH.Contracts.SyncPullRequest.Equals(DodoSSH.Contracts.SyncPullRequest? other) -> bool
DodoSSH.Contracts.SyncPullRequest.Limit.get -> int?
DodoSSH.Contracts.SyncPullRequest.Limit.init -> void
DodoSSH.Contracts.SyncPullRequest.SyncPullRequest(string? Cursor, int? Limit, System.Collections.Generic.IReadOnlyList<DodoSSH.Contracts.SyncEntityType>? EntityTypes) -> void
DodoSSH.Contracts.SyncPullResponse
DodoSSH.Contracts.SyncPullResponse.<Clone>$() -> DodoSSH.Contracts.SyncPullResponse!
DodoSSH.Contracts.SyncPullResponse.Changes.get -> System.Collections.Generic.IReadOnlyList<DodoSSH.Contracts.SyncChange!>!
DodoSSH.Contracts.SyncPullResponse.Changes.init -> void
DodoSSH.Contracts.SyncPullResponse.CurrentKeyGeneration.get -> uint
DodoSSH.Contracts.SyncPullResponse.CurrentKeyGeneration.init -> void
DodoSSH.Contracts.SyncPullResponse.Deconstruct(out System.Collections.Generic.IReadOnlyList<DodoSSH.Contracts.SyncChange!>! Changes, out string! NextCursor, out bool HasMore, out System.DateTimeOffset ServerTime, out uint CurrentKeyGeneration) -> void
DodoSSH.Contracts.SyncPullResponse.Equals(DodoSSH.Contracts.SyncPullResponse? other) -> bool
DodoSSH.Contracts.SyncPullResponse.HasMore.get -> bool
DodoSSH.Contracts.SyncPullResponse.HasMore.init -> void
DodoSSH.Contracts.SyncPullResponse.NextCursor.get -> string!
DodoSSH.Contracts.SyncPullResponse.NextCursor.init -> void
DodoSSH.Contracts.SyncPullResponse.ServerTime.get -> System.DateTimeOffset
DodoSSH.Contracts.SyncPullResponse.ServerTime.init -> void
DodoSSH.Contracts.SyncPullResponse.SyncPullResponse(System.Collections.Generic.IReadOnlyList<DodoSSH.Contracts.SyncChange!>! Changes, string! NextCursor, bool HasMore, System.DateTimeOffset ServerTime, uint CurrentKeyGeneration) -> void
DodoSSH.Contracts.SyncPushOperation
DodoSSH.Contracts.SyncPushOperation.<Clone>$() -> DodoSSH.Contracts.SyncPushOperation!
DodoSSH.Contracts.SyncPushOperation.Deconstruct(out System.Guid OperationId, out DodoSSH.Contracts.SyncEntityType EntityType, out System.Guid EntityId, out DodoSSH.Contracts.SyncOperation Operation, out int? ExpectedVersion, out DodoSSH.Contracts.EncryptedPayload? Payload, out DodoSSH.Contracts.SyncPlaintextFields? PlaintextFields) -> void
DodoSSH.Contracts.SyncPushOperation.EntityId.get -> System.Guid
DodoSSH.Contracts.SyncPushOperation.EntityId.init -> void
DodoSSH.Contracts.SyncPushOperation.EntityType.get -> DodoSSH.Contracts.SyncEntityType
DodoSSH.Contracts.SyncPushOperation.EntityType.init -> void
DodoSSH.Contracts.SyncPushOperation.Equals(DodoSSH.Contracts.SyncPushOperation? other) -> bool
DodoSSH.Contracts.SyncPushOperation.ExpectedVersion.get -> int?
DodoSSH.Contracts.SyncPushOperation.ExpectedVersion.init -> void
DodoSSH.Contracts.SyncPushOperation.Operation.get -> DodoSSH.Contracts.SyncOperation
DodoSSH.Contracts.SyncPushOperation.Operation.init -> void
DodoSSH.Contracts.SyncPushOperation.OperationId.get -> System.Guid
DodoSSH.Contracts.SyncPushOperation.OperationId.init -> void
DodoSSH.Contracts.SyncPushOperation.Payload.get -> DodoSSH.Contracts.EncryptedPayload?
DodoSSH.Contracts.SyncPushOperation.Payload.init -> void
DodoSSH.Contracts.SyncPushOperation.PlaintextFields.get -> DodoSSH.Contracts.SyncPlaintextFields?
DodoSSH.Contracts.SyncPushOperation.PlaintextFields.init -> void
DodoSSH.Contracts.SyncPushOperation.SyncPushOperation(System.Guid OperationId, DodoSSH.Contracts.SyncEntityType EntityType, System.Guid EntityId, DodoSSH.Contracts.SyncOperation Operation, int? ExpectedVersion, DodoSSH.Contracts.EncryptedPayload? Payload, DodoSSH.Contracts.SyncPlaintextFields? PlaintextFields) -> void
DodoSSH.Contracts.SyncPushRequest
DodoSSH.Contracts.SyncPushRequest.<Clone>$() -> DodoSSH.Contracts.SyncPushRequest!
DodoSSH.Contracts.SyncPushRequest.Deconstruct(out System.Collections.Generic.IReadOnlyList<DodoSSH.Contracts.SyncPushOperation!>! Operations) -> void
DodoSSH.Contracts.SyncPushRequest.Equals(DodoSSH.Contracts.SyncPushRequest? other) -> bool
DodoSSH.Contracts.SyncPushRequest.Operations.get -> System.Collections.Generic.IReadOnlyList<DodoSSH.Contracts.SyncPushOperation!>!
DodoSSH.Contracts.SyncPushRequest.Operations.init -> void
DodoSSH.Contracts.SyncPushRequest.SyncPushRequest(System.Collections.Generic.IReadOnlyList<DodoSSH.Contracts.SyncPushOperation!>! Operations) -> void
DodoSSH.Contracts.SyncPushResponse
DodoSSH.Contracts.SyncPushResponse.<Clone>$() -> DodoSSH.Contracts.SyncPushResponse!
DodoSSH.Contracts.SyncPushResponse.Cursor.get -> string!
DodoSSH.Contracts.SyncPushResponse.Cursor.init -> void
DodoSSH.Contracts.SyncPushResponse.Deconstruct(out System.Collections.Generic.IReadOnlyList<DodoSSH.Contracts.SyncPushResult!>! Results, out string! Cursor) -> void
DodoSSH.Contracts.SyncPushResponse.Equals(DodoSSH.Contracts.SyncPushResponse? other) -> bool
DodoSSH.Contracts.SyncPushResponse.Results.get -> System.Collections.Generic.IReadOnlyList<DodoSSH.Contracts.SyncPushResult!>!
DodoSSH.Contracts.SyncPushResponse.Results.init -> void
DodoSSH.Contracts.SyncPushResponse.SyncPushResponse(System.Collections.Generic.IReadOnlyList<DodoSSH.Contracts.SyncPushResult!>! Results, string! Cursor) -> void
DodoSSH.Contracts.SyncPushResult
DodoSSH.Contracts.SyncPushResult.<Clone>$() -> DodoSSH.Contracts.SyncPushResult!
DodoSSH.Contracts.SyncPushResult.ChangeSequence.get -> long?
DodoSSH.Contracts.SyncPushResult.ChangeSequence.init -> void
DodoSSH.Contracts.SyncPushResult.Deconstruct(out System.Guid OperationId, out DodoSSH.Contracts.SyncOperationStatus Status, out int? Version, out long? ChangeSequence, out DodoSSH.Contracts.SyncChange? ServerEntity, out string? Detail) -> void
DodoSSH.Contracts.SyncPushResult.Detail.get -> string?
DodoSSH.Contracts.SyncPushResult.Detail.init -> void
DodoSSH.Contracts.SyncPushResult.Equals(DodoSSH.Contracts.SyncPushResult? other) -> bool
DodoSSH.Contracts.SyncPushResult.OperationId.get -> System.Guid
DodoSSH.Contracts.SyncPushResult.OperationId.init -> void
DodoSSH.Contracts.SyncPushResult.ServerEntity.get -> DodoSSH.Contracts.SyncChange?
DodoSSH.Contracts.SyncPushResult.ServerEntity.init -> void
DodoSSH.Contracts.SyncPushResult.Status.get -> DodoSSH.Contracts.SyncOperationStatus
DodoSSH.Contracts.SyncPushResult.Status.init -> void
DodoSSH.Contracts.SyncPushResult.SyncPushResult(System.Guid OperationId, DodoSSH.Contracts.SyncOperationStatus Status, int? Version, long? ChangeSequence, DodoSSH.Contracts.SyncChange? ServerEntity, string? Detail) -> void
DodoSSH.Contracts.SyncPushResult.Version.get -> int?
DodoSSH.Contracts.SyncPushResult.Version.init -> void
DodoSSH.Contracts.VaultSummary
DodoSSH.Contracts.VaultSummary.<Clone>$() -> DodoSSH.Contracts.VaultSummary!
DodoSSH.Contracts.VaultSummary.Deconstruct(out System.Guid VaultId, out string! Name, out bool IsPersonal, out System.Guid? TeamId, out uint KeyGeneration, out int Permissions, out byte[]? WrappedVaultKey, out bool RekeyRequired) -> void
DodoSSH.Contracts.VaultSummary.Equals(DodoSSH.Contracts.VaultSummary? other) -> bool
DodoSSH.Contracts.VaultSummary.IsPersonal.get -> bool
DodoSSH.Contracts.VaultSummary.IsPersonal.init -> void
DodoSSH.Contracts.VaultSummary.KeyGeneration.get -> uint
DodoSSH.Contracts.VaultSummary.KeyGeneration.init -> void
DodoSSH.Contracts.VaultSummary.Name.get -> string!
DodoSSH.Contracts.VaultSummary.Name.init -> void
DodoSSH.Contracts.VaultSummary.Permissions.get -> int
DodoSSH.Contracts.VaultSummary.Permissions.init -> void
DodoSSH.Contracts.VaultSummary.RekeyRequired.get -> bool
DodoSSH.Contracts.VaultSummary.RekeyRequired.init -> void
DodoSSH.Contracts.VaultSummary.TeamId.get -> System.Guid?
DodoSSH.Contracts.VaultSummary.TeamId.init -> void
DodoSSH.Contracts.VaultSummary.VaultId.get -> System.Guid
DodoSSH.Contracts.VaultSummary.VaultId.init -> void
DodoSSH.Contracts.VaultSummary.VaultSummary(System.Guid VaultId, string! Name, bool IsPersonal, System.Guid? TeamId, uint KeyGeneration, int Permissions, byte[]? WrappedVaultKey, bool RekeyRequired) -> void
DodoSSH.Contracts.VaultSummary.WrappedVaultKey.get -> byte[]?
DodoSSH.Contracts.VaultSummary.WrappedVaultKey.init -> void
const DodoSSH.Contracts.ProblemCodes.AlreadyEnrolled = "already-enrolled" -> string!
const DodoSSH.Contracts.ProblemCodes.ClientTooOld = "client-too-old" -> string!
const DodoSSH.Contracts.ProblemCodes.EnrollmentRequired = "enrollment-required" -> string!
@@ -12,3 +422,120 @@ const DodoSSH.Contracts.ProblemCodes.RelayTargetRejected = "relay-target-rejecte
const DodoSSH.Contracts.ProblemCodes.RelayTicketInvalid = "relay-ticket-invalid" -> string!
const DodoSSH.Contracts.ProblemCodes.TypeBaseUri = "https://dodossh.dev/problems/" -> string!
const DodoSSH.Contracts.ProblemCodes.VaultConflict = "vault-conflict" -> string!
override DodoSSH.Contracts.DirectoryEntry.Equals(object? obj) -> bool
override DodoSSH.Contracts.DirectoryEntry.GetHashCode() -> int
override DodoSSH.Contracts.DirectoryEntry.ToString() -> string!
override DodoSSH.Contracts.DodoSshConfiguration.Equals(object? obj) -> bool
override DodoSSH.Contracts.DodoSshConfiguration.GetHashCode() -> int
override DodoSSH.Contracts.DodoSshConfiguration.ToString() -> string!
override DodoSSH.Contracts.EncryptedPayload.Equals(object? obj) -> bool
override DodoSSH.Contracts.EncryptedPayload.GetHashCode() -> int
override DodoSSH.Contracts.EncryptedPayload.ToString() -> string!
override DodoSSH.Contracts.EnrollmentRequest.Equals(object? obj) -> bool
override DodoSSH.Contracts.EnrollmentRequest.GetHashCode() -> int
override DodoSSH.Contracts.EnrollmentRequest.ToString() -> string!
override DodoSSH.Contracts.EnrollmentResponse.Equals(object? obj) -> bool
override DodoSSH.Contracts.EnrollmentResponse.GetHashCode() -> int
override DodoSSH.Contracts.EnrollmentResponse.ToString() -> string!
override DodoSSH.Contracts.KdfParameters.Equals(object? obj) -> bool
override DodoSSH.Contracts.KdfParameters.GetHashCode() -> int
override DodoSSH.Contracts.KdfParameters.ToString() -> string!
override DodoSSH.Contracts.KeyStatement.Equals(object? obj) -> bool
override DodoSSH.Contracts.KeyStatement.GetHashCode() -> int
override DodoSSH.Contracts.KeyStatement.ToString() -> string!
override DodoSSH.Contracts.MeResponse.Equals(object? obj) -> bool
override DodoSSH.Contracts.MeResponse.GetHashCode() -> int
override DodoSSH.Contracts.MeResponse.ToString() -> string!
override DodoSSH.Contracts.MetaResponse.Equals(object? obj) -> bool
override DodoSSH.Contracts.MetaResponse.GetHashCode() -> int
override DodoSSH.Contracts.MetaResponse.ToString() -> string!
override DodoSSH.Contracts.OidcConfiguration.Equals(object? obj) -> bool
override DodoSSH.Contracts.OidcConfiguration.GetHashCode() -> int
override DodoSSH.Contracts.OidcConfiguration.ToString() -> string!
override DodoSSH.Contracts.RelayConfiguration.Equals(object? obj) -> bool
override DodoSSH.Contracts.RelayConfiguration.GetHashCode() -> int
override DodoSSH.Contracts.RelayConfiguration.ToString() -> string!
override DodoSSH.Contracts.RelaySessionSummary.Equals(object? obj) -> bool
override DodoSSH.Contracts.RelaySessionSummary.GetHashCode() -> int
override DodoSSH.Contracts.RelaySessionSummary.ToString() -> string!
override DodoSSH.Contracts.RelayTicketRequest.Equals(object? obj) -> bool
override DodoSSH.Contracts.RelayTicketRequest.GetHashCode() -> int
override DodoSSH.Contracts.RelayTicketRequest.ToString() -> string!
override DodoSSH.Contracts.RelayTicketResponse.Equals(object? obj) -> bool
override DodoSSH.Contracts.RelayTicketResponse.GetHashCode() -> int
override DodoSSH.Contracts.RelayTicketResponse.ToString() -> string!
override DodoSSH.Contracts.SyncChange.Equals(object? obj) -> bool
override DodoSSH.Contracts.SyncChange.GetHashCode() -> int
override DodoSSH.Contracts.SyncChange.ToString() -> string!
override DodoSSH.Contracts.SyncPlaintextFields.Equals(object? obj) -> bool
override DodoSSH.Contracts.SyncPlaintextFields.GetHashCode() -> int
override DodoSSH.Contracts.SyncPlaintextFields.ToString() -> string!
override DodoSSH.Contracts.SyncPullRequest.Equals(object? obj) -> bool
override DodoSSH.Contracts.SyncPullRequest.GetHashCode() -> int
override DodoSSH.Contracts.SyncPullRequest.ToString() -> string!
override DodoSSH.Contracts.SyncPullResponse.Equals(object? obj) -> bool
override DodoSSH.Contracts.SyncPullResponse.GetHashCode() -> int
override DodoSSH.Contracts.SyncPullResponse.ToString() -> string!
override DodoSSH.Contracts.SyncPushOperation.Equals(object? obj) -> bool
override DodoSSH.Contracts.SyncPushOperation.GetHashCode() -> int
override DodoSSH.Contracts.SyncPushOperation.ToString() -> string!
override DodoSSH.Contracts.SyncPushRequest.Equals(object? obj) -> bool
override DodoSSH.Contracts.SyncPushRequest.GetHashCode() -> int
override DodoSSH.Contracts.SyncPushRequest.ToString() -> string!
override DodoSSH.Contracts.SyncPushResponse.Equals(object? obj) -> bool
override DodoSSH.Contracts.SyncPushResponse.GetHashCode() -> int
override DodoSSH.Contracts.SyncPushResponse.ToString() -> string!
override DodoSSH.Contracts.SyncPushResult.Equals(object? obj) -> bool
override DodoSSH.Contracts.SyncPushResult.GetHashCode() -> int
override DodoSSH.Contracts.SyncPushResult.ToString() -> string!
override DodoSSH.Contracts.VaultSummary.Equals(object? obj) -> bool
override DodoSSH.Contracts.VaultSummary.GetHashCode() -> int
override DodoSSH.Contracts.VaultSummary.ToString() -> string!
static DodoSSH.Contracts.DirectoryEntry.operator !=(DodoSSH.Contracts.DirectoryEntry? left, DodoSSH.Contracts.DirectoryEntry? right) -> bool
static DodoSSH.Contracts.DirectoryEntry.operator ==(DodoSSH.Contracts.DirectoryEntry? left, DodoSSH.Contracts.DirectoryEntry? right) -> bool
static DodoSSH.Contracts.DodoSshConfiguration.operator !=(DodoSSH.Contracts.DodoSshConfiguration? left, DodoSSH.Contracts.DodoSshConfiguration? right) -> bool
static DodoSSH.Contracts.DodoSshConfiguration.operator ==(DodoSSH.Contracts.DodoSshConfiguration? left, DodoSSH.Contracts.DodoSshConfiguration? right) -> bool
static DodoSSH.Contracts.DodoSshJsonContext.ResponseOptions.get -> System.Text.Json.JsonSerializerOptions!
static DodoSSH.Contracts.DodoSshJsonContext.StrictRequestOptions.get -> System.Text.Json.JsonSerializerOptions!
static DodoSSH.Contracts.EncryptedPayload.operator !=(DodoSSH.Contracts.EncryptedPayload? left, DodoSSH.Contracts.EncryptedPayload? right) -> bool
static DodoSSH.Contracts.EncryptedPayload.operator ==(DodoSSH.Contracts.EncryptedPayload? left, DodoSSH.Contracts.EncryptedPayload? right) -> bool
static DodoSSH.Contracts.EnrollmentRequest.operator !=(DodoSSH.Contracts.EnrollmentRequest? left, DodoSSH.Contracts.EnrollmentRequest? right) -> bool
static DodoSSH.Contracts.EnrollmentRequest.operator ==(DodoSSH.Contracts.EnrollmentRequest? left, DodoSSH.Contracts.EnrollmentRequest? right) -> bool
static DodoSSH.Contracts.EnrollmentResponse.operator !=(DodoSSH.Contracts.EnrollmentResponse? left, DodoSSH.Contracts.EnrollmentResponse? right) -> bool
static DodoSSH.Contracts.EnrollmentResponse.operator ==(DodoSSH.Contracts.EnrollmentResponse? left, DodoSSH.Contracts.EnrollmentResponse? right) -> bool
static DodoSSH.Contracts.KdfParameters.operator !=(DodoSSH.Contracts.KdfParameters? left, DodoSSH.Contracts.KdfParameters? right) -> bool
static DodoSSH.Contracts.KdfParameters.operator ==(DodoSSH.Contracts.KdfParameters? left, DodoSSH.Contracts.KdfParameters? right) -> bool
static DodoSSH.Contracts.KeyStatement.operator !=(DodoSSH.Contracts.KeyStatement? left, DodoSSH.Contracts.KeyStatement? right) -> bool
static DodoSSH.Contracts.KeyStatement.operator ==(DodoSSH.Contracts.KeyStatement? left, DodoSSH.Contracts.KeyStatement? right) -> bool
static DodoSSH.Contracts.MeResponse.operator !=(DodoSSH.Contracts.MeResponse? left, DodoSSH.Contracts.MeResponse? right) -> bool
static DodoSSH.Contracts.MeResponse.operator ==(DodoSSH.Contracts.MeResponse? left, DodoSSH.Contracts.MeResponse? right) -> bool
static DodoSSH.Contracts.MetaResponse.operator !=(DodoSSH.Contracts.MetaResponse? left, DodoSSH.Contracts.MetaResponse? right) -> bool
static DodoSSH.Contracts.MetaResponse.operator ==(DodoSSH.Contracts.MetaResponse? left, DodoSSH.Contracts.MetaResponse? right) -> bool
static DodoSSH.Contracts.OidcConfiguration.operator !=(DodoSSH.Contracts.OidcConfiguration? left, DodoSSH.Contracts.OidcConfiguration? right) -> bool
static DodoSSH.Contracts.OidcConfiguration.operator ==(DodoSSH.Contracts.OidcConfiguration? left, DodoSSH.Contracts.OidcConfiguration? right) -> bool
static DodoSSH.Contracts.RelayConfiguration.operator !=(DodoSSH.Contracts.RelayConfiguration? left, DodoSSH.Contracts.RelayConfiguration? right) -> bool
static DodoSSH.Contracts.RelayConfiguration.operator ==(DodoSSH.Contracts.RelayConfiguration? left, DodoSSH.Contracts.RelayConfiguration? right) -> bool
static DodoSSH.Contracts.RelaySessionSummary.operator !=(DodoSSH.Contracts.RelaySessionSummary? left, DodoSSH.Contracts.RelaySessionSummary? right) -> bool
static DodoSSH.Contracts.RelaySessionSummary.operator ==(DodoSSH.Contracts.RelaySessionSummary? left, DodoSSH.Contracts.RelaySessionSummary? right) -> bool
static DodoSSH.Contracts.RelayTicketRequest.operator !=(DodoSSH.Contracts.RelayTicketRequest? left, DodoSSH.Contracts.RelayTicketRequest? right) -> bool
static DodoSSH.Contracts.RelayTicketRequest.operator ==(DodoSSH.Contracts.RelayTicketRequest? left, DodoSSH.Contracts.RelayTicketRequest? right) -> bool
static DodoSSH.Contracts.RelayTicketResponse.operator !=(DodoSSH.Contracts.RelayTicketResponse? left, DodoSSH.Contracts.RelayTicketResponse? right) -> bool
static DodoSSH.Contracts.RelayTicketResponse.operator ==(DodoSSH.Contracts.RelayTicketResponse? left, DodoSSH.Contracts.RelayTicketResponse? right) -> bool
static DodoSSH.Contracts.SyncChange.operator !=(DodoSSH.Contracts.SyncChange? left, DodoSSH.Contracts.SyncChange? right) -> bool
static DodoSSH.Contracts.SyncChange.operator ==(DodoSSH.Contracts.SyncChange? left, DodoSSH.Contracts.SyncChange? right) -> bool
static DodoSSH.Contracts.SyncPlaintextFields.operator !=(DodoSSH.Contracts.SyncPlaintextFields? left, DodoSSH.Contracts.SyncPlaintextFields? right) -> bool
static DodoSSH.Contracts.SyncPlaintextFields.operator ==(DodoSSH.Contracts.SyncPlaintextFields? left, DodoSSH.Contracts.SyncPlaintextFields? right) -> bool
static DodoSSH.Contracts.SyncPullRequest.operator !=(DodoSSH.Contracts.SyncPullRequest? left, DodoSSH.Contracts.SyncPullRequest? right) -> bool
static DodoSSH.Contracts.SyncPullRequest.operator ==(DodoSSH.Contracts.SyncPullRequest? left, DodoSSH.Contracts.SyncPullRequest? right) -> bool
static DodoSSH.Contracts.SyncPullResponse.operator !=(DodoSSH.Contracts.SyncPullResponse? left, DodoSSH.Contracts.SyncPullResponse? right) -> bool
static DodoSSH.Contracts.SyncPullResponse.operator ==(DodoSSH.Contracts.SyncPullResponse? left, DodoSSH.Contracts.SyncPullResponse? right) -> bool
static DodoSSH.Contracts.SyncPushOperation.operator !=(DodoSSH.Contracts.SyncPushOperation? left, DodoSSH.Contracts.SyncPushOperation? right) -> bool
static DodoSSH.Contracts.SyncPushOperation.operator ==(DodoSSH.Contracts.SyncPushOperation? left, DodoSSH.Contracts.SyncPushOperation? right) -> bool
static DodoSSH.Contracts.SyncPushRequest.operator !=(DodoSSH.Contracts.SyncPushRequest? left, DodoSSH.Contracts.SyncPushRequest? right) -> bool
static DodoSSH.Contracts.SyncPushRequest.operator ==(DodoSSH.Contracts.SyncPushRequest? left, DodoSSH.Contracts.SyncPushRequest? right) -> bool
static DodoSSH.Contracts.SyncPushResponse.operator !=(DodoSSH.Contracts.SyncPushResponse? left, DodoSSH.Contracts.SyncPushResponse? right) -> bool
static DodoSSH.Contracts.SyncPushResponse.operator ==(DodoSSH.Contracts.SyncPushResponse? left, DodoSSH.Contracts.SyncPushResponse? right) -> bool
static DodoSSH.Contracts.SyncPushResult.operator !=(DodoSSH.Contracts.SyncPushResult? left, DodoSSH.Contracts.SyncPushResult? right) -> bool
static DodoSSH.Contracts.SyncPushResult.operator ==(DodoSSH.Contracts.SyncPushResult? left, DodoSSH.Contracts.SyncPushResult? right) -> bool
static DodoSSH.Contracts.VaultSummary.operator !=(DodoSSH.Contracts.VaultSummary? left, DodoSSH.Contracts.VaultSummary? right) -> bool
static DodoSSH.Contracts.VaultSummary.operator ==(DodoSSH.Contracts.VaultSummary? left, DodoSSH.Contracts.VaultSummary? right) -> bool