package dto import ( "time" "browser.local/platform/domain" ) type ClientManagerDeployRequest struct { ProfileKey string `json:"profileKey"` DistributionID string `json:"distributionId"` ExpectedDeploymentGeneration int `json:"expectedDeploymentGeneration,omitempty"` IdempotencyKey string `json:"idempotencyKey"` } type ClientManagerControlRequest struct { ProfileKey string `json:"profileKey"` Operation string `json:"operation"` ExpectedDeploymentGeneration int `json:"expectedDeploymentGeneration"` IdempotencyKey string `json:"idempotencyKey"` } type ClientManagerUpdateRequest struct { ProfileKey string `json:"profileKey"` DistributionID string `json:"distributionId"` ExpectedDeploymentGeneration int `json:"expectedDeploymentGeneration"` Approved bool `json:"approved"` IdempotencyKey string `json:"idempotencyKey"` } type ClientManagerUninstallRequest struct { ProfileKey string `json:"profileKey"` ExpectedDeploymentGeneration int `json:"expectedDeploymentGeneration"` Confirmed bool `json:"confirmed"` IdempotencyKey string `json:"idempotencyKey"` } type ClientManagerRetryRequest struct { ProfileKey string `json:"profileKey"` ExpectedDeploymentGeneration int `json:"expectedDeploymentGeneration"` IdempotencyKey string `json:"idempotencyKey"` } type ClientManagerRevokeSessionRequest struct { ProfileKey string `json:"profileKey"` Reason string `json:"reason,omitempty"` } type ClientManagerLifecycleActionResponse struct { Operation string `json:"operation"` Available bool `json:"available"` Reason string `json:"reason,omitempty"` } type ClientManagerLifecycleJobResponse struct { ID string `json:"id,omitempty"` State domain.JobState `json:"state,omitempty"` Progress JobProgressBody `json:"progress,omitempty"` Attempt int `json:"attempt,omitempty"` CreatedAt time.Time `json:"createdAt,omitempty"` UpdatedAt time.Time `json:"updatedAt,omitempty"` } type ClientManagerInstallationResponse struct { ID string `json:"id"` ServerInstanceID string `json:"serverInstanceId"` PluginID string `json:"pluginId"` ProfileKey string `json:"profileKey"` TargetOS string `json:"targetOs"` TargetArch string `json:"targetArch"` Status string `json:"status"` Phase string `json:"phase,omitempty"` DesiredVersion string `json:"desiredVersion,omitempty"` ActiveVersion string `json:"activeVersion,omitempty"` PreviousVersion string `json:"previousVersion,omitempty"` DesiredRevision string `json:"desiredRevision,omitempty"` ActiveRevision string `json:"activeRevision,omitempty"` PreviousRevision string `json:"previousRevision,omitempty"` DesiredArtifactID string `json:"desiredArtifactId,omitempty"` ActiveArtifactID string `json:"activeArtifactId,omitempty"` PreviousArtifactID string `json:"previousArtifactId,omitempty"` KeyGeneration int `json:"keyGeneration"` DeploymentGeneration int `json:"deploymentGeneration"` CurrentJobID string `json:"currentJobId,omitempty"` LastSuccessfulJobID string `json:"lastSuccessfulJobId,omitempty"` LastOperation string `json:"lastOperation,omitempty"` Health string `json:"health"` HealthReason string `json:"healthReason,omitempty"` LastSeenAt time.Time `json:"lastSeenAt,omitempty"` Retryable bool `json:"retryable"` RequiresRedeploy bool `json:"requiresRedeploy"` InstalledAt time.Time `json:"installedAt,omitempty"` UninstalledAt time.Time `json:"uninstalledAt,omitempty"` UpdatedAt time.Time `json:"updatedAt"` Distribution *ClientManagerDistributionSummaryResponse `json:"distribution,omitempty"` Job *ClientManagerLifecycleJobResponse `json:"job,omitempty"` Actions []ClientManagerLifecycleActionResponse `json:"actions"` } type ClientManagerDistributionSummaryResponse struct { ID string `json:"id"` ArtifactID string `json:"artifactId"` SourceRevision string `json:"sourceRevision"` TargetOS string `json:"targetOs"` TargetArch string `json:"targetArch"` Checksum string `json:"checksum"` KeyGeneration int `json:"keyGeneration"` Status string `json:"status"` } type ClientManagerInstallationListResponse struct { Items []ClientManagerInstallationResponse `json:"items"` Count int `json:"count"` } type ClientManagerLifecycleInputRequest struct { RunEndpointID string `json:"runEndpointId"` SessionToken string `json:"sessionToken"` JobID string `json:"jobId"` LeaseToken string `json:"leaseToken"` Attempt int `json:"attempt"` } type ClientManagerLifecycleInputResponse struct { InstallationID string `json:"installationId"` ServerInstanceID string `json:"serverInstanceId"` ProfileKey string `json:"profileKey"` Operation string `json:"operation"` ArtifactID string `json:"artifactId,omitempty"` Checksum string `json:"checksum,omitempty"` TargetOS string `json:"targetOs"` TargetArch string `json:"targetArch"` Version string `json:"version,omitempty"` SourceRevision string `json:"sourceRevision,omitempty"` KeyGeneration int `json:"keyGeneration"` DeploymentGeneration int `json:"deploymentGeneration"` ExecutableRef string `json:"executableRef"` Arguments []string `json:"arguments"` AutoStart bool `json:"autoStart"` StartupTimeoutSeconds int `json:"startupTimeoutSeconds"` StopTimeoutSeconds int `json:"stopTimeoutSeconds"` HealthConfirmationSeconds int `json:"healthConfirmationSeconds"` IdempotencyKey string `json:"idempotencyKey"` } type ClientManagerRegisterRequest struct { InstallationID string `json:"installationId"` ServerInstanceID string `json:"serverInstanceId"` ProfileKey string `json:"profileKey"` ArtifactID string `json:"artifactId"` Version string `json:"version"` SourceRevision string `json:"sourceRevision"` TargetOS string `json:"targetOs"` TargetArch string `json:"targetArch"` KeyGeneration int `json:"keyGeneration"` DeploymentGeneration int `json:"deploymentGeneration"` Capabilities []string `json:"capabilities"` Timestamp time.Time `json:"timestamp"` Nonce string `json:"nonce"` Signature string `json:"signature"` } type ClientManagerRegisterResponse struct { Accepted bool `json:"accepted"` InstallationID string `json:"installationId"` SessionToken string `json:"sessionToken"` ExpiresAt time.Time `json:"expiresAt"` HeartbeatEvery int `json:"heartbeatEverySeconds"` ServerTime time.Time `json:"serverTime"` } type ClientManagerHeartbeatRequest struct { InstallationID string `json:"installationId"` SessionToken string `json:"sessionToken"` Sequence uint64 `json:"sequence"` Health string `json:"health"` HealthReason string `json:"healthReason,omitempty"` Capabilities []string `json:"capabilities"` SentAt time.Time `json:"sentAt"` } type ClientManagerHeartbeatResponse struct { Accepted bool `json:"accepted"` InstallationID string `json:"installationId"` Status string `json:"status"` Health string `json:"health"` NextHeartbeat int `json:"nextHeartbeatSeconds"` SessionExpiresAt time.Time `json:"sessionExpiresAt"` ServerTime time.Time `json:"serverTime"` } func (request ClientManagerDeployRequest) ToDomain(serverID string) domain.ClientManagerDeployRequest { return domain.ClientManagerDeployRequest{ServerInstanceID: serverID, ProfileKey: request.ProfileKey, DistributionID: request.DistributionID, ExpectedDeploymentGeneration: request.ExpectedDeploymentGeneration, IdempotencyKey: request.IdempotencyKey} } func (request ClientManagerControlRequest) ToDomain(serverID string) domain.ClientManagerControlRequest { return domain.ClientManagerControlRequest{ServerInstanceID: serverID, ProfileKey: request.ProfileKey, Operation: domain.ClientManagerLifecycleOperation(request.Operation), ExpectedDeploymentGeneration: request.ExpectedDeploymentGeneration, IdempotencyKey: request.IdempotencyKey} } func (request ClientManagerUpdateRequest) ToDomain(serverID string) domain.ClientManagerUpdateRequest { return domain.ClientManagerUpdateRequest{ServerInstanceID: serverID, ProfileKey: request.ProfileKey, DistributionID: request.DistributionID, ExpectedDeploymentGeneration: request.ExpectedDeploymentGeneration, Approved: request.Approved, IdempotencyKey: request.IdempotencyKey} } func (request ClientManagerUninstallRequest) ToDomain(serverID string) domain.ClientManagerUninstallRequest { return domain.ClientManagerUninstallRequest{ServerInstanceID: serverID, ProfileKey: request.ProfileKey, ExpectedDeploymentGeneration: request.ExpectedDeploymentGeneration, Confirmed: request.Confirmed, IdempotencyKey: request.IdempotencyKey} } func (request ClientManagerRetryRequest) ToDomain(serverID string) domain.ClientManagerRetryRequest { return domain.ClientManagerRetryRequest{ServerInstanceID: serverID, ProfileKey: request.ProfileKey, ExpectedDeploymentGeneration: request.ExpectedDeploymentGeneration, IdempotencyKey: request.IdempotencyKey} } func (request ClientManagerRevokeSessionRequest) ToDomain(serverID string) domain.ClientManagerRevokeSessionRequest { return domain.ClientManagerRevokeSessionRequest{ServerInstanceID: serverID, ProfileKey: request.ProfileKey, Reason: request.Reason} } func (request ClientManagerLifecycleInputRequest) ToDomain() domain.ClientManagerLifecycleInputRequest { return domain.ClientManagerLifecycleInputRequest{RunEndpointID: request.RunEndpointID, SessionToken: request.SessionToken, JobID: request.JobID, LeaseToken: request.LeaseToken, Attempt: request.Attempt} } func ClientManagerLifecycleInputFromDomain(value domain.ClientManagerLifecycleInput) ClientManagerLifecycleInputResponse { value = domain.CopyClientManagerLifecycleInput(value) return ClientManagerLifecycleInputResponse{InstallationID: value.InstallationID, ServerInstanceID: value.ServerInstanceID, ProfileKey: value.ProfileKey, Operation: string(value.Operation), ArtifactID: value.ArtifactID, Checksum: value.Checksum, TargetOS: value.TargetOS, TargetArch: value.TargetArch, Version: value.Version, SourceRevision: value.SourceRevision, KeyGeneration: value.KeyGeneration, DeploymentGeneration: value.DeploymentGeneration, ExecutableRef: value.ExecutableRef, Arguments: value.Arguments, AutoStart: value.AutoStart, StartupTimeoutSeconds: value.StartupTimeoutSeconds, StopTimeoutSeconds: value.StopTimeoutSeconds, HealthConfirmationSeconds: value.HealthConfirmationSeconds, IdempotencyKey: value.IdempotencyKey} } func (request ClientManagerRegisterRequest) ToDomain() domain.ClientManagerRegisterRequest { return domain.ClientManagerRegisterRequest{InstallationID: request.InstallationID, ServerInstanceID: request.ServerInstanceID, ProfileKey: request.ProfileKey, ArtifactID: request.ArtifactID, Version: request.Version, SourceRevision: request.SourceRevision, TargetOS: request.TargetOS, TargetArch: request.TargetArch, KeyGeneration: request.KeyGeneration, DeploymentGeneration: request.DeploymentGeneration, Capabilities: domain.CopyStringSlice(request.Capabilities), Timestamp: request.Timestamp, Nonce: request.Nonce, Signature: request.Signature} } func ClientManagerRegisterFromDomain(value domain.ClientManagerRegisterResult) ClientManagerRegisterResponse { return ClientManagerRegisterResponse{Accepted: value.Accepted, InstallationID: value.InstallationID, SessionToken: value.SessionToken, ExpiresAt: value.ExpiresAt, HeartbeatEvery: value.HeartbeatEvery, ServerTime: value.ServerTime} } func (request ClientManagerHeartbeatRequest) ToDomain() domain.ClientManagerHeartbeat { return domain.ClientManagerHeartbeat{InstallationID: request.InstallationID, SessionToken: request.SessionToken, Sequence: request.Sequence, Health: domain.ClientManagerHealthStatus(request.Health), HealthReason: request.HealthReason, Capabilities: domain.CopyStringSlice(request.Capabilities), SentAt: request.SentAt} } func ClientManagerHeartbeatFromDomain(value domain.ClientManagerHeartbeatResult) ClientManagerHeartbeatResponse { return ClientManagerHeartbeatResponse{Accepted: value.Accepted, InstallationID: value.InstallationID, Status: string(value.Status), Health: string(value.Health), NextHeartbeat: value.NextHeartbeat, SessionExpiresAt: value.SessionExpiresAt, ServerTime: value.ServerTime} } func ClientManagerLifecycleViewFromDomain(value domain.ClientManagerLifecycleView) ClientManagerInstallationResponse { value = domain.CopyClientManagerLifecycleView(value) installation := value.Installation response := ClientManagerInstallationResponse{ID: installation.ID, ServerInstanceID: installation.ServerInstanceID, PluginID: installation.PluginID, ProfileKey: installation.ProfileKey, TargetOS: installation.TargetOS, TargetArch: installation.TargetArch, Status: string(installation.Status), Phase: installation.Phase, DesiredVersion: installation.DesiredVersion, ActiveVersion: installation.ActiveVersion, PreviousVersion: installation.PreviousVersion, DesiredRevision: installation.DesiredRevision, ActiveRevision: installation.ActiveRevision, PreviousRevision: installation.PreviousRevision, DesiredArtifactID: installation.DesiredArtifactID, ActiveArtifactID: installation.ActiveArtifactID, PreviousArtifactID: installation.PreviousArtifactID, KeyGeneration: installation.KeyGeneration, DeploymentGeneration: installation.DeploymentGeneration, CurrentJobID: installation.CurrentJobID, LastSuccessfulJobID: installation.LastSuccessfulJobID, LastOperation: string(installation.LastOperation), Health: string(installation.Health), HealthReason: installation.HealthReason, LastSeenAt: installation.LastSeenAt, Retryable: installation.Retryable, RequiresRedeploy: installation.RequiresRedeploy, InstalledAt: installation.InstalledAt, UninstalledAt: installation.UninstalledAt, UpdatedAt: installation.UpdatedAt} if value.Distribution.ID != "" { response.Distribution = &ClientManagerDistributionSummaryResponse{ID: value.Distribution.ID, ArtifactID: value.Distribution.ArtifactID, SourceRevision: value.Distribution.SourceRevision, TargetOS: value.Distribution.TargetOS, TargetArch: value.Distribution.TargetArch, Checksum: value.Distribution.Checksum, KeyGeneration: value.Distribution.KeyGeneration, Status: string(value.Distribution.Status)} } if value.Job.ID != "" { response.Job = &ClientManagerLifecycleJobResponse{ID: value.Job.ID, State: value.Job.State, Progress: JobProgressBody{Percent: value.Job.Progress.Percent, Message: value.Job.Progress.Message}, Attempt: value.Job.Attempt, CreatedAt: value.Job.CreatedAt, UpdatedAt: value.Job.UpdatedAt} } response.Actions = make([]ClientManagerLifecycleActionResponse, len(value.Actions)) for i, action := range value.Actions { response.Actions[i] = ClientManagerLifecycleActionResponse{Operation: string(action.Operation), Available: action.Available, Reason: action.Reason} } if response.Actions == nil { response.Actions = []ClientManagerLifecycleActionResponse{} } return response } func ClientManagerLifecycleViewsFromDomain(values []domain.ClientManagerLifecycleView) ClientManagerInstallationListResponse { items := make([]ClientManagerInstallationResponse, len(values)) for i, value := range values { items[i] = ClientManagerLifecycleViewFromDomain(value) } return ClientManagerInstallationListResponse{Items: items, Count: len(items)} }